1<!doctype html> 2<html class="no-js" lang="en"> 3 <head> 4 5 6 7 8 9 10 11 12 13 14 <!-- Start of Shoplift scripts --> 15 <!-- 2026-05-07T22:19:54.2759169Z --> 16<style>.shoplift-hide { opacity: 0 !important; }</style> 17<style id="sl-preview-bar-hide">#preview-bar-iframe, #PBarNextFrameWrapper { display: none !important; }</style>
18<script type="text/javascript">(function(rootPath, template, themeRole, themeId, isThemePreview){ /* Generated on 2026-05-20T16:13:23.9343219Z */(function(){"use strict";var tt=document.createElement("style");tt.textContent=`#shoplift-preview-control{position:fixed;max-width:332px;height:56px;background-color:#141414;z-index:9999;bottom:20px;display:flex;border-radius:8px;box-shadow:13px 22px 7px #0000,9px 14px 7px #00000003,5px 8px 6px #0000000d,2px 4px 4px #00000017,1px 1px 2px #0000001a,0 0 #0000001a;align-items:center;margin:0 auto;left:16px;right:16px;opacity:0;transform:translateY(20px);visibility:hidden;transition:opacity .4s ease-in-out,transform .4s ease-in-out,visibility 0s .4s}#shoplift-preview-control.visible{opacity:1;transform:translateY(0);visibility:visible;transition:opacity .4s ease-in-out,transform .4s ease-in-out,visibility 0s 0s}#shoplift-preview-control *{font-family:Inter,sans-serif;color:#fff;box-sizing:border-box;font-size:16px}#shoplift-preview-variant-title{font-weight:400;line-height:140%;font-size:16px;text-align:start;letter-spacing:-.16px;flex-grow:1;text-wrap:nowrap;overflow:hidden;text-overflow:ellipsis}#shoplift-preview-variant-selector{position:relative;display:block;padding:6px 0;height:100%;min-width:0;flex:1 1 auto}#shoplift-preview-variant-menu-trigger{border:none;cursor:pointer;width:100%;background-color:transparent;padding:0 16px;border-left:1px solid #333;border-right:1px solid #333;height:100%;display:flex;align-items:center;justify-content:start;gap:8px}#shoplift-preview-variant-selector .menu-variant-label{width:24px;height:24px;border-radius:50%;padding:6px;display:flex;justify-content:center;align-items:center;font-size:12px;font-style:normal;font-weight:600;line-height:100%;letter-spacing:-.12px;flex-shrink:0}#shoplift-preview-variant-selector .preview-variant-menu{position:absolute;bottom:110%;transform:translate3d(0,20px,0);visibility:hidden;pointer-events:none;opacity:0;cursor:pointer;background-color:#141414;border:1px solid #141414;border-radius:6px;width:100%;max-height:156px;overflow-y:auto;box-shadow:0 8px 16px #0003;z-index:1;transition:opacity .3s ease-in-out,transform .3s ease-in-out,visibility 0s .3s}#shoplift-preview-variant-selector .preview-variant-menu.preview-variant-menu__visible{visibility:visible;pointer-events:auto;opacity:100;transform:translateZ(0);transition:opacity .3s ease-in-out,transform .3s ease-in-out,visibility 0s 0s}@media screen and (max-width:400px){#shoplift-preview-variant-selector .preview-variant-menu{position:fixed;left:0;right:0;width:auto;bottom:110%}}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item{padding:12px 16px;display:flex;overflow:hidden}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item .menu-variant-label{margin-right:6px}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item span{overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap;white-space:nowrap;color:#f6f6f6;font-size:14px;font-style:normal;font-weight:500}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item:hover{background-color:#545454}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item:last-of-type{border-bottom-left-radius:6px;border-bottom-right-radius:6px}#shoplift-preview-variant-selector .preview-variant-menu .preview-variant-menu--item:first-of-type{border-top-left-radius:6px;border-top-right-radius:6px}#shoplift-preview-control div:has(#shoplift-exit-preview-button){padding:0 16px}#shoplift-exit-preview-button{padding:6px 8px;font-weight:500;line-height:75%;border-radius:4px;background-color:transparent;border:none;text-decoration:none}#shoplift-exit-preview-button:hover{cursor:pointer;background-color:#333}#shoplift-preview-subscription-warning{position:relative;display:flex;align-items:center;gap:6px;padding:6px 10px;margin:0 4px;border-left:1px solid #333;cursor:help;outline:none}#shoplift-preview-subscription-warning__icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background-color:#f59e0b;color:#141414!important;font-weight:700;font-size:12px!important;line-height:1;flex-shrink:0}#shoplift-preview-subscription-warning__label{font-size:13px!important;font-weight:500;color:#fbbf24!important;text-wrap:nowrap;white-space:nowrap}#shoplift-preview-subscription-warning__tooltip{position:absolute;bottom:calc(100% + 8px);right:0;max-width:320px;width:max-content;padding:10px 12px;border-radius:6px;background-color:#1f1f1f;color:#fff!important;font-size:12px!important;line-height:1.4!important;box-shadow:0 8px 16px #0000004d;z-index:10000;opacity:0;visibility:hidden;transform:translateY(4px);transition:opacity .2s ease-in-out,transform .2s ease-in-out,visibility 0s .2s;pointer-events:none}#shoplift-preview-subscription-warning__tooltip.shoplift-preview-subscription-warning__tooltip--visible{opacity:1;visibility:visible;transform:translateY(0);transition:opacity .2s ease-in-out,transform .2s ease-in-out,visibility 0s 0s}#shoplift-preview-subscription-warning:focus-visible{box-shadow:inset 0 0 0 2px #f59e0b;border-radius:4px}#shoplift-preview-control:has(#shoplift-preview-subscription-warning){max-width:480px}/*$vite$:1*/`,document.head.appendChild(tt);var ht=" daum[ /]| deusu/| yadirectfetcher|(?:^|[^g])news(?!sapphire)|(?<! (?:channel/|google/))google(?!(app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!(?: ya| yandex|^job|inapp;) ?)search|(?<!(?:lib))http|(?<![hg]m)score|@[a-z][\\w-]+\\.|\\(\\)|\\.com|\\b\\d{13}\\b|^<|^[\\w \\.\\-\\(?:\\):]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[^ ]{50,}$|^\\d+\\b|^\\w+/[\\w\\(\\)]*$|^active|^ad muncher|^amaya|^avsdevicesdk/|^biglotron|^bot|^bw/|^clamav[ /]|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d \\(compatible;?\\)$|^mozilla/\\d\\.\\d \\w*$|^navermailapp|^netsurf|^offline|^owler|^postman|^python|^rank|^read|^reed|^rest|^rss|^snapchat|^space bison|^svn|^swcd |^taringa|^thumbor/|^track|^valid|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|^{{.*}}$|admin|analyzer|archive|ask jeeves/teoma|bit\\.ly/|bluecoat drtr|browsex|burpcollaborator|capture|catch|check|chrome-lighthouse|chromeframe|classifier|clean|cloud|crawl|cypress/|dareboost|datanyze|dejaclick|detect|dmbrowser|download|evc-batch/|feed|firep
18hp|gomezagent|headless|httrack|hubspot marketing grader|hydra|ibisbrowser|images|insight|inspect|iplabel|ips-agent|java(?!;)|library|mail\\.ru/|manager|measure|neustar wpm|node|nutch|offbyone|optimize|pageburst|pagespeed|parser|perl|phantomjs|pingdom|powermarks|preview|proxy|ptst[ /]\\d|reputation|resolver|retriever|rexx;|rigor|rss\\b|scan|scrape|server|sogou|sparkler/|speedcurve|spider|splash|statuscake|synapse|synthetic|tools|torrent|trace|transcoder|url|virtuoso|wappalyzer|watch|webglance|webkit2png|whatcms/|zgrab",ft=/bot|spider|crawl|http|lighthouse/i,z;function gt(){if(z instanceof RegExp)return z;try{z=new RegExp(ht,"i")}catch{z=ft}return z}function mt(a){return!!a&>().test(a)}class Q{timestamp;constructor(){this.timestamp=new Date}}class yt extends Q{type;testId;hypothesisId;constructor(t,e,i){super(),this.type=3,this.testId=t,this.hypothesisId=e,this.timestamp=i}}class vt extends Q{type;path;constructor(t){super(),this.type=4,this.path=t}}class wt extends Q{type;cart;constructor(t){super(),this.type=5,this.cart=t}}class et extends Error{isBot;constructor(){super(),this.isBot=!0}}function bt(a,t,e){for(const i of t.selectors){const s=a.querySelectorAll(i.cssSelector);for(let r=0;r<s.length;r++)e(t.testId,t.hypothesisId)}st(a,t,(i,s,r,n,o)=>o(s,r),e)}function U(a,t,e){for(const i of t.selectors)rt(a,t.testId,t.hypothesisId,i,e??(()=>{}));st(a,t,rt,e??(()=>{}))}function it(a){return a.urlPatterns.reduce((t,e)=>{switch(e.operator){case"contains":return t+`.*${e}.*`;case"endsWith":return t+`.*${e}`;case"startsWith":return t+`${e}.*`}},"")}function st(a,t,e,i){new MutationObserver(()=>{for(const r of t.selectors)e(a,t.testId,t.hypothesisId,r,i)}).observe(a.documentElement,{childList:!0,subtree:!0})}function rt(a,t,e,i,s){const r=a.querySelectorAll(i.cssSelector);for(let n=0;n<r.length;n++){let o=r.item(n);if(o instanceof HTMLElement&&o.dataset.shoplift!==""){o.dataset.shoplift="";for(const l of i.actions.sort(kt))o=St(a,i.cssSelector,o,l)}}return r.length>0&&s?(s(t,e),!0):!1}function St(a,t,e,i){switch(i.type){case"innerHtml":e.innerHTML=i.value;break;case"attribute":Ct(e,i.scope,i.value);break;case"css":Tt(a,t,i.value);break;case"js":It(a,e,i);break;case"copy":return Pt(e);case"remove":At(e);break;case"move":Et(e,parseInt(i.value));break}return e}function Ct(a,t,e){a.setAttribute(t,e)}function Tt(a,t,e){const i=a.createElement("style");i.innerHTML=`${t} { ${e} }`,a.getElementsByTagName("head")[0]?.appendChild(i)}function It(a,t,e){Function("document","element",`"use strict"; ${e.value}`)(a,t)}function Pt(a){const t=a.cloneNode(!0);if(!a.parentNode)throw"Can't copy node outside of DOM";return a.parentNode.insertBefore(t,a.nextSibling),t}function At(a){a.remove()}function Et(a,t){if(t===0)return;const e=Array.prototype.slice.call(a.parentElement.children).indexOf(a),i=Math.min(Math.max(e+t,0),a.parentElement.children.length-1);a.parentElement.children.item(i).insertAdjacentElement(t>0?"afterend":"beforebegin",a)}function kt(a,t){return nt(a)-nt(t)}function nt(a){return a.type==="copy"||a.type==="remove"?0:1}var M=(a=>(a[a.Template=0]="Template",a[a.Theme=1]="Theme",a[a.UrlRedirect=2]="UrlRedirect",a[a.Script=3]="Script",a[a.Dom=4]="Dom",a[a.Price=5]="Price",a))(M||{});const xt="data:image/svg+xml,%3csvg%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M9.96001%207.90004C9.86501%207.90004%209.77001%207.86504%209.69501%207.79004L6.43501%204.53004C6.19501%204.29004%205.80501%204.29004%205.56501%204.53004L2.30501%207.79004C2.16001%207.93504%201.92001%207.93504%201.77501%207.79004C1.63001%207.64504%201.63001%207.40504%201.77501%207.26004L5.03501%204.00004C5.56501%203.47004%206.43001%203.47004%206.96501%204.00004L10.225%207.26004C10.37%207.40504%2010.37%207.64504%2010.225%207.79004C10.15%207.86004%2010.055%207.90004%209.96001%207.90004Z'%20fill='white'/%3e%3c/svg%3e",_t="data:image/svg+xml,%3csvg%20width='14'%20height='24'%20viewBox='0%200%2014%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M12.3976%2014.5255C12.2833%2013.8788%2012.0498%2013.3024%2011.6952%2012.7961C11.3416%2012.2898%2010.9209%2011.8353%2010.4353%2011.4317C9.94868%2011.0291%209.43546%2010.6488%208.89565%2010.292C8.48487%2010.049%208.09577%209.78565%207.72637%209.50402C7.35697%209.2224%207.08016%208.89503%206.89694%208.51987C6.71273%208.14471%206.67826%207.69533%206.79055%207.1697C6.86345%206.83216%206.97476%206.54647%207.12351%206.31162C7.27324%206.07778%207.47124%205.89986%207.7175%205.77684C7.96377%205.65483%208.21989%205.59383%208.48389%205.59383C8.88087%205.59383%209.17639%205.7016%209.3734%205.91714C9.56943%206.13268%209.68271%206.42345%209.71424%206.78946C9.74576%207.15547%209.72015%207.55401%209.63839%207.98509C9.55663%208.41617%209.43645%208.84724%209.27687%209.27934L13.5127%208.80149C13.9638%207.52656%2014.1017%206.42447%2013.9264%205.49725C13.751%204.56901%2013.2664%203.85122%2012.4724%203.34491C12.239%203.19648%2011.9779%203.07041%2011.6893%202.96569L12.0026%201.50979L9.86397%200L
187.3875%201.50979L7.11169%202.78878C6.65166%202.8874%206.21724%203.01957%205.8114%203.19038C4.85292%203.594%204.06684%204.15115%203.45117%204.86385C2.83452%205.57655%202.42571%206.40108%202.22378%207.33847C2.06616%208.06947%202.04942%208.70796%202.17551%209.25087C2.30061%209.7948%202.52028%2010.2828%202.8355%2010.7139C3.14974%2011.145%203.51816%2011.5344%203.93977%2011.881C4.36039%2012.2288%204.782%2012.5521%205.20164%2012.851C5.68334%2013.1702%206.13844%2013.5169%206.56497%2013.8921C6.99052%2014.2672%207.31954%2014.7125%207.55004%2015.228C7.78055%2015.7445%207.81502%2016.3769%207.65347%2017.1262C7.56482%2017.5389%207.43676%2017.8765%207.27028%2018.1388C7.10381%2018.4011%206.89596%2018.5983%206.64772%2018.7295C6.3985%2018.8606%206.12071%2018.9267%205.8114%2018.9267C5.21641%2018.9267%204.79776%2018.6034%204.62833%2018.1632C4.4589%2017.7229%204.47367%2017.2583%204.60075%2016.5639C4.72782%2015.8705%205.05092%2015.1395%205.37107%2014.3699H1.17665C1.17665%2014.3699%200.207341%2016.1115%200.0310135%2017.6762C-0.0655232%2018.5302%200.0635208%2019.2653%200.41519%2019.8844C0.76686%2020.5036%201.33032%2020.9814%202.10655%2021.319C2.39222%2021.443%202.7104%2021.5447%203.05813%2021.623L2.54589%2024H7.17473L7.7047%2021.5386C8.08493%2021.442%208.43857%2021.3231%208.76562%2021.1787C9.73985%2020.7476%2010.52%2020.1427%2011.1071%2019.3649C11.6932%2018.5871%2012.0873%2017.7291%2012.2892%2016.7917C12.4744%2015.9295%2012.5099%2015.1741%2012.3966%2014.5275L12.3976%2014.5255Z'%20fill='white'/%3e%3c/svg%3e";async function Rt(a){let t=a.replace(/-/g,"+").replace(/_/g,"/");for(;t.length%4;)t+="=";const e=atob(t),i=Uint8Array.from(e,n=>n.charCodeAt(0)),s=new Blob([i]).stream().pipeThrough(new DecompressionStream("gzip")),r=await new Response(s).text();return JSON.parse(r)}function F(a,t){return typeof t=="string"&&/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+(?:Z|[+-]\d+)/.test(t)?new Date(t):t}function X(a,t){return t}function q(a,t=!1,e=!1,i=","){const s=a/100;if(e){const n=Math.round(s).toLocaleString("en-US");return i!==","?n.replace(/,/g,i):n}else{const r=t?",":".",n=s.toFixed(2).split("."),o=parseInt(n[0],10),l=n[1]??"00",c=o.toLocaleString("en-US");return i!==","?`${c.replace(/,/g,i)}${r}${l}`:t?`${c.replace(/,/g,".")}${r}${l}`:`${c}${r}${l}`}}function H(a,t,e,i){const s=t.replace("{{amount}}",q(a,!1,!1)).replace("{{amount_no_decimals}}",q(a,!1,!0)).replace("{{amount_with_comma_separator}}",q(a,!0,!1)).replace("{{amount_no_decimals_with_comma_separator}}",q(a,!0,!0)).replace("{{amount_with_space_separator}}",q(a,!1,!1," ")).replace("{{amount_no_decimals_with_space_separator}}",q(a,!1,!0," ")).replace("{{amount_with_apostrophe_separator}}",q(a,!1,!1,"'")).replace("{{amount_no_decimals_with_apostrophe_separator}}",q(a,!1,!0,"'")).replace("{{amount_with_period_and_space_separator}}",q(a,!1,!1,". ")).replace("{{amount_no_decimals_with_period_and_space_separator}}",q(a,!1,!0,". "));return i?`${s} ${e}`:s}function ot(a){return a.replace(/[^\d.,\s-]/g,"").trim()}function j(a){const t=new Map;for(const[e,i,s]of a.variants)t.set(e,{priceInCents:i,compareAtPriceInCents:s});return t}function Dt(a,t,e,i){const{priceInCents:s,compareAtPriceInCents:r}=e,{moneyFormat:n,currency:o,currencyCodeEnabled:l}=i;if(a.getAttribute("data-sl-attribute-p")===t)a.innerHTML=H(s,n,o,l);else if(a.getAttribute("data-sl-attribute-cap")===t)r<=0||r<=s?a.remove():a.innerHTML=H(r,n,o,l);else if(a.getAttribute("data-sl-attribute-discount")===t&&!(r<=0||r<=s)){const d=Math.round((r-s)/r*100),p=ot(H(r-s,n,o,!1)),h=a.getAttribute("data-sl-format")||"percent";h==="percent"?a.textContent=`-${d}%`:h==="amount"?a.textContent=`-${p}`:h==="both"&&(a.textContent=`-${d}% (-${p})`)}}function Ot(a){const t=[],e={id:"url-pattern",operator:"contains",value:"/"};for(const[i,s,r]of a.variants){t.push({id:`p-${i}`,cssSelector:`[data-sl-attribute-p="${i}"]`,urlPatterns:[e],actions:[{id:`p-action-${i}`,type:"innerHtml",scope:"price",value:H(s,a.moneyFormat,a.currency,a.currencyCodeEnabled)}]});const n=r<=0||r<=s;if(t.push({id:`cap-${i}`,cssSelector:`[data-sl-attribute-cap="${i}"]`,urlPatterns:[e],actions:[{id:`cap-action-${i}`,type:n?"remove":"innerHtml",scope:"compare-at-price",value:n?"":H(r,a.moneyFormat,a.currency,a.currencyCodeEnabled)}]}),!n&&r>s){const o=Math.round((r-s)/r*100),l=ot(H(r-s,a.moneyFormat,a.currency,!1));t.push({id:`d-${i}`,cssSelector:`[data-sl-attribute-discount="${i}"]`,urlPatterns:[e],actions:[{id:`d-action-${i}`,type:"js",scope:null,value:`var format = element.getAttribute('data-sl-format') || 'percent'; if (format === 'percent') { element.textContent = '-${o}%'; } else if (format === 'amount') { element.textContent = '-${l}'; } else if (format === 'both') { element.textContent = '-${o}% (-${l})'; }`}]})}}return t}const Jt="modulepreload",Yt=function(a){return"/"+a},Zt={}
18,Vt=function(t,e,i){let s=Promise.resolve();function r(n){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=n,window.dispatchEvent(o),!o.defaultPrevented)throw n}return s.then(n=>{for(const o of n||[])o.status==="rejected"&&r(o.reason);return t().catch(r)})};function at(a,t,e){const i=e?a.plans.filter(c=>!c.variantId||c.variantId===e):a.plans,s=[],r=[];for(const c of i)c.direction==="decrease"?(s.push(c.existingShopifyPlanId),r.push(c.createdShopifyPlanId)):(s.push(c.createdShopifyPlanId),r.push(c.existingShopifyPlanId));const n=t?s:r,o=t?r:s;if(e)for(const c of a.plans)for(const d of[c.existingShopifyPlanId,c.createdShopifyPlanId])d&&!n.includes(d)&&!o.includes(d)&&o.push(d);const l={};for(let c=0;c<o.length;c++){const d=o[c],p=n[c];d&&p&&(l[d]=p)}return{showPlanIds:n,hidePlanIds:o,swapMap:l}}function lt(a,t,e){const i=t?a.plans.find(r=>r.variantId===t):void 0;if(i)return i.direction;if(e){const r=a.plans.find(n=>n.productId===e);if(r)return r.direction}return a.plans.find(r=>!r.variantId)?.direction??null}function K(a,t){const e=t?a.plans.filter(r=>!r.productId||r.productId===t):a.plans,i={};for(const r of e)i[r.existingShopifyPlanId]=r.existingDiscountAmount,i[r.createdShopifyPlanId]=r.existingDiscountAmount;const s=Math.max(...Object.values(i),0);return{discountMap:i,maxDiscount:s}}function W(a){const t=document.querySelector('form[action*="/cart/add"] input[name="product-id"]')?.value;if(t)return t;if(a){for(const r of Array.from(document.querySelectorAll("[data-sl-attribute-p]"))){const n=r.getAttribute("data-sl-attribute-p");if(!n)continue;const o=a.variants.find(l=>l[0]===n);if(o?.[3])return o[3]}const s=document.querySelector('form[action*="/cart/add"] input[name="id"]')?.value;if(s){const r=a.variants.find(n=>n[0]===s);if(r?.[3])return r[3]}}const e=window,i=e.ShopifyAnalytics?.meta?.product?.id??e.meta?.product?.id;return i!=null?String(i):null}function D(a,t){return a.widget.selectors[t]??[]}function N(a,t){return a.replace(/[\d.]+%/,`${t}%`)}function $(a,t){const e=document.createTreeWalker(a,NodeFilter.SHOW_TEXT);let i=e.nextNode();for(;i;){if(i.nodeValue!==null){const s=t(i.nodeValue);if(s!==i.nodeValue){i.nodeValue=s;return}}i=e.nextNode()}}function ct(a,t){return a===null?!1:a==="decrease"?!t:t}async function Lt(a){if(a.subscriptionSwapDone)return;const t=a.getActiveAssignment();if(!t)return;const e=a.getHypothesis(t.hypothesisId);if(!e?.subscriptionData)return;a.subscriptionSwapDone=!0;const i=e.subscriptionData,s=e.isControl,r=[...new Set(i.plans.map(d=>d.direction))].join(",");a.log(`[SUB-SWAP] ${s?"A":"B"} side, directions=${r}`);const n=i.plans.some(d=>d.variantId);let o=!1,l=!1;function c(){if(!l){l=!0;try{const d=n?document.querySelector("select[name='id'], input[name='id']")?.value:void 0,{showPlanIds:p,hidePlanIds:h,swapMap:u}=at(i,s,d);a.swapMap=u;const b=D(i,"widgetParent"),k=D(i,"subscriptionPlans"),S=D(i,"subscriptionInput");if(!b.length||!k.length||!S.length)return;const P=document.querySelector(b[0].selector);if(!P?.shadowRoot)return;const _=P.shadowRoot.querySelector(k[0].selector);if(!_?.shadowRoot)return;const C=S[0].selector;let m=null;if(i.widget.widgetType==="buttons"||i.widget.widgetType==="radio"){const y=Array.from(_.shadowRoot.querySelectorAll(C));if(!y.length)return;for(const v of y){const g=v.closest("label");g&&(p.includes(v.value)?g.style.display="":h.includes(v.value)&&(g.style.display="none"))}const w=y.some(v=>p.includes(v.value)&&v.checked),T=y.some(v=>h.includes(v.value)&&v.checked);if((w||T)&&(o=!1),!w&&!o){o=!0;for(const v of y)if(p.includes(v.value)){v.closest("label")?.click(),v.dispatchEvent(new Event("change",{bubbles:!0}));break}}const f=y.find(v=>v.checked);m=f&&p.includes(f.value)?f.value:p[0]??null}else if(i.widget.widgetType==="dropdown"){const y=_.shadowRoot.querySelector("select");if(!y)return;for(const w of Array.from(y.options))h.includes(w.value)&&(w.style.display="none",w.disabled=!0);if(h.includes(y.value)){const w=Array.from(y.options).find(T=>p.includes(T.value));w&&(y.value=w.value,y.dispatchEvent(new Event("change",{bubbles:!0})))}m=p.includes(y.value)?y.value:p[0]??null}if(m){const y=Array.from(document.querySelectorAll('input[name="selling_plan"]'));for(const w of y)w.value!==m&&(w.value=m)}}finally{l=!1}}}
18if(a.subscriptionHideWrongPlans=c,a.swapMap=at(i,s).swapMap,c(),n){const d=document.querySelector("select[name='id'], input[name='id']");d&&d.addEventListener("change",c)}}function B(a){const t=D(a,"widgetParent");return t.length?document.querySelector(t[0].selector)?.shadowRoot??null:null}function J(a,t){const e=D(a,"subscriptionPlans");return e.length?t.querySelector(e[0].selector)?.shadowRoot??null:null}function Y(a,t){const e=new URLSearchParams(window.location.search).get("variant");if(e)return e;{const i=document.querySelector('form[action*="/cart/add"] input[name="id"]')?.value;if(i)return i}return a.size>0?[...a.keys()][0]:void 0}function G(a,t){return H(a,t.moneyFormat,t.currency,t.currencyCodeEnabled)}function $t({originalFetch:a,swapMap:t,slptValue:e,getSelectedPlanId:i,log:s}){if(window.fetch.__shoplift_intercepted)return s("[SUB-INTERCEPT] already installed â skipping"),()=>{};function r(o){if(i){const l=i();if(l)return t[l]??l}return t[o]??o}const n=function(o,l){if((typeof o=="string"?o:o instanceof URL?o.href:o.url).includes("/cart/add")&&l?.body)try{if(l.body instanceof FormData){const d=l.body.get("selling_plan");d?l.body.set("selling_plan",r(String(d))):(!d||d==="")&&e&&l.body.set("properties[_slpt]",e)}else if(typeof l.body=="string"){const d=JSON.parse(l.body);if(d.items)for(const p of d.items){const h=String(p.selling_plan??"");h?p.selling_plan=r(h):!p.selling_plan&&e&&(p.properties||(p.properties={}),p.properties._slpt=e)}else if(d.id){const p=String(d.selling_plan??"");p?d.selling_plan=r(p):!d.selling_plan&&e&&(d.properties||(d.properties={}),d.properties._slpt=e)}l.body=JSON.stringify(d)}}catch(d){s("[SUB-INTERCEPT] body parse failed; cart-add proceeds with un-swapped plan",d)}return a.call(window,o,l)};return n.__shoplift_intercepted=!0,window.fetch=n,function(){window.fetch===n&&(window.fetch=a)}}function Mt({log:a}){if(window.fetch.__shoplift_intercepted)return a("[SUB-PREVIEW-BLOCK] interceptor already installed â skipping"),()=>{};const t=window.fetch,e=function(i,s){const r=typeof i=="string"?i:i instanceof URL?i.href:i.url;return r.includes("/cart/add")?(a("[SUB-PREVIEW-BLOCK] cart-add blocked in preview mode",{url:r}),Promise.resolve(new Response(JSON.stringify({id:0,properties:{},quantity:0,variant_id:0,key:"preview",title:"Preview â cart-add blocked",price:0,original_price:0,line_price:0,original_line_price:0,total_discount:0,discounts:[],preview:!0}),{status:200,headers:{"Content-Type":"application/json"}}))):t.call(window,i,s)};return e.__shoplift_intercepted=!0,window.fetch=e,function(){window.fetch===e&&(window.fetch=t)}}function dt({data:a,runUpdates:t,debounceMs:e=150}){let i=null;function s(){i&&clearTimeout(i),t(),i=setTimeout(t,e)}let r=null;const n=[],o={childList:!0,subtree:!0,characterData:!0,attributes:!0};function l(h){for(const u of n)u.disconnect();n.length=0;for(const u of Array.from(h.querySelectorAll("*")))if(u.shadowRoot){const b=new MutationObserver(s);b.observe(u.shadowRoot,o),n.push(b)}}function c(){const h=B(a);return h?(r&&r.disconnect(),l(h),r=new MutationObserver(u=>{u.some(b=>b.type==="childList"&&b.addedNodes.length>0)&&l(h),s()}),r.observe(h,o),!0):!1}const d=document.body||document.documentElement,p=new MutationObserver(()=>{c()&&s()});return p.observe(d,{childList:!0,subtree:!0}),c()&&s(),t(),function(){i&&(clearTimeout(i),i=null),p.disconnect(),r&&(r.disconnect(),r=null);for(const u of n)u.disconnect();n.length=0}}async function qt(a){if(a.subscriptionPriceDone)return;const t=a.getActiveAssignment(),e=t?a.getHypothesis(t.hypothesisId):void 0,i=e?.subscriptionData?null:a.findActiveSubscriptionTestControl(),s=e?.subscriptionData?e:i?.hypothesis;if(!s?.subscriptionData)return;const r=e?.subscriptionData?t.testId:i.testId;a.subscriptionPriceDone=!0;const n=s.subscriptionData,o=s.isControl,l=s.priceData,c=n.widget.widgetType;let d=W(l),p=K(n,d),h=p.discountMap,u=p.maxDiscount;function b(){const g=W(l);g!==d&&(d=g,p=K(n,d),h=p.discountMap,u=p.maxDiscount,a.log(`[SUB-PRICE] scope refreshed side=${o?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${u}`))}a.log(`[SUB-PRICE] side=${o?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${u}
18`),a.updatePriceTestHiddenInputs(r,o?"control":"variant",!1);function k(){if(!l)return null;const g=j(l),I=Y(g),A=lt(n,I,d);if(!ct(A,o))return null;const E=I?g.get(I):void 0;return E?{formattedVariantPrice:G(E.priceInCents,l),formattedDiscounted:G(E.priceInCents*(1-u/100),l)}:null}$t({originalFetch:a.fetch,swapMap:a.swapMap??{},slptValue:a.slptValue??void 0,log:a.log,getSelectedPlanId:()=>{const g=B(n);if(!g)return null;const I=J(n,g);if(!I)return null;const A=D(n,"subscriptionInput"),E=A.length?A[0].selector:'input[name="rc_plan"]';return I.querySelector(`${E}:checked`)?.value??null}});function S(g){const I=D(n,"subscriptionDiscount");for(const A of I)if(A.selector.includes("badge")||A.selector.includes("__badge")){const E=g.querySelector(A.selector);E?.textContent&&!E.textContent.includes(`${u}%`)&&$(E,x=>N(x,u))}}function P(g){const I=k();if(!I)return;const A=D(n,"subscriptionCompareAt");for(const E of A){const x=g.querySelector(E.selector)||g.querySelector(`[part~="${E.selector}"]`);x?.textContent&&!x.textContent.includes(I.formattedVariantPrice)&&$(x,R=>/\d/.test(R)?I.formattedVariantPrice:R)}}function _(g,I){const A=D(n,"subscriptionCompareAt"),E=I===0?"none":"";for(const x of A){const R=g.querySelector(x.selector)||g.querySelector(`[part~="${x.selector}"]`);R&&(E==="none"?R.style.display!=="none"&&(R.style.display="none"):R.style.display==="none"&&(R.style.display=""))}}function C(g){const I=D(n,"subscriptionInput"),A=I.length?I[0].selector:'input[name="rc_plan"]',E=D(n,"subscriptionPlanDiscount"),x=E.length?E[0].selector:".rc-plans-button__discount";for(const R of Array.from(g.querySelectorAll("label"))){const V=R.querySelector(A),O=R.querySelector(x);if(V&&O){const L=h[V.value];if(L!==void 0){if(L===0)O.style.display!=="none"&&(O.style.display="none");else if(O.style.display==="none"&&(O.style.display=""),O.textContent){const Z=O.textContent.match(/[\d.]+%/)?.[0];Z&&Z!==`${L}%`&&$(O,Kt=>N(Kt,L))}}}}}function m(g){const I=g.querySelector("select");if(I)for(const A of Array.from(I.options)){const E=h[A.value];if(E!==void 0&&A.textContent){const x=A.textContent.match(/[\d.]+%/)?.[0];x&&x!==`${E}%`&&(A.textContent=N(A.textContent,E))}}}function y(g,I){const E=D(n,"subscriptionDiscount").filter(x=>x.selector.includes("benefit")||x.selector==="rc-benefits");for(const x of E){const R=g.querySelector(x.selector);if(R?.shadowRoot){for(const V of Array.from(R.shadowRoot.querySelectorAll("li")))if(V.textContent?.includes("Save")){const O=V;if(I===0)O.style.display!=="none"&&(O.style.display="none");else{O.style.display==="none"&&(O.style.display="");const L=V.textContent.match(/[\d.]+%/)?.[0];L&&L!==`${I}%`&&$(V,Z=>N(Z,I))}}}}}let w=!1;function T(){if(!w){w=!0;try{if(b(),d!==null&&Object.keys(h).length===0)return;const g=B(n);if(!g)return;S(g),l&&P(g);const I=J(n,g);let A=u;if(I){const E=D(n,"subscriptionInput"),x=E.length?E[0].selector:'input[name="rc_plan"]',R=I.querySelector(`${x}:checked`);if(R){const V=h[R.value];V!==void 0&&(A=V)}c==="buttons"||c==="radio"?C(I):m(I)}_(g,A),y(g,A)}finally{w=!1}}}function f(){const g=k();if(!g)return;const I=B(n);if(!I)return;const A=D(n,"onetimeToggle"),E=A.length?A[0].selector:'input[value="onetime"]';if(!I.querySelector(E)?.checked)return;const R=D(n,"subscriptionPrice");for(const V of R){const O=I.querySelector(V.selector)||I.querySelector(`[part~="${V.selector}"]`);O?.textContent&&!O.textContent.includes(g.formattedDiscounted)&&$(O,L=>/\d/.test(L)?g.formattedDiscounted:L)}}function v(){a.subscriptionHideWrongPlans&&a.subscriptionHideWrongPlans(),T(),a.subscriptionUpdateOneTime&&a.subscriptionUpdateOneTime(),f()}dt({data:n,runUpdates:v})}async function Ht(a){if(a.subscriptionOneTimeDone)return;const t=a.getActiveAssignment(),e=t?a.getHypothesis(t.hypothesisId):void 0,i=!!(e?.subscriptionData&&e.priceData),s=i?null:a.findActiveSubscriptionTestControl(),r=i?e:s?.hypothesis;if(!r?.subscriptionData||!r.priceData)return;const n=i?t.testId:s.testId;a.subscriptionOneTimeDone=!0;const o=r.subscriptionData,l=r.priceData,c=j(l),d=r.isControl,p=d?"control":"variant";a.slptValue=`${n}:${p}
18:f`,a.updatePriceTestHiddenInputs(n,p,!1);function h(){const u=B(o);if(!u)return;const b=Y(c);if(!b)return;const k=W(l),S=lt(o,b,k);if(!ct(S,d))return;const P=c.get(b);if(!P)return;const _=H(P.priceInCents,l.moneyFormat,l.currency,l.currencyCodeEnabled),C=D(o,"onetimePrice");if(!C.length)return;const m=D(o,"onetimeContainer"),y=m.length?m[0].selector:'[part~="rc-purchase-option__onetime"]',T=u.querySelector(y)??u;for(const f of C){let v=null;try{v=T.querySelector(f.selector)}catch{v=null}v??=T.querySelector(`[part~="${f.selector}"]`),v&&v.textContent&&!v.textContent.includes(_)&&$(v,g=>/\d/.test(g)?_:g)}}a.subscriptionUpdateOneTime=h,h()}async function Nt(a,t){const{subscriptionPreviewRender:e}=await Vt(async()=>{const{subscriptionPreviewRender:i}=await Promise.resolve().then(()=>jt);return{subscriptionPreviewRender:i}},void 0);return e(a.subscriptionData,a.priceData,a.isControl,t)}function Ut(a,t){const e=a.widget.selectors.widgetParent??[],i=a.widget.selectors.subscriptionPlans??[],s=a.widget.selectors.subscriptionInput??[];if(!e.length||!i.length||!s.length){t("[SUB-GLOBAL-HIDE] Missing required selectors â skipping");return}const r=e[0].selector,n=i[0].selector,o=s[0].selector;let l=!1,c=null,d=!1;function p(){if(!d){d=!0;try{h()}finally{d=!1}}}function h(){const P=document.querySelector(r);if(!P?.shadowRoot)return;const _=P.shadowRoot.querySelector(n);if(!_?.shadowRoot)return;_.shadowRoot!==c&&(c=_.shadowRoot,l=!1);let C=0;if(a.widget.widgetType==="buttons"||a.widget.widgetType==="radio"){const m=Array.from(_.shadowRoot.querySelectorAll(o));for(const f of m)if(a.planIds.includes(f.value)){f.disabled||(f.disabled=!0);const v=f.closest("label");v&&v.style.display!=="none"&&(v.style.display="none",C++)}const y=m.filter(f=>!a.planIds.includes(f.value));if(!y.some(f=>f.checked)&&!l&&y.length>0){l=!0;const f=y[0];f.closest("label")?.click(),f.dispatchEvent(new Event("change",{bubbles:!0})),t(`[SUB-GLOBAL-HIDE] Preselected first visible plan input=${f.value}`)}const T=y.find(f=>f.checked)??y[0];if(T){const f=Array.from(document.querySelectorAll('input[name="selling_plan"]'));for(const v of f)v.value!==T.value&&(v.value=T.value,t(`[SUB-GLOBAL-HIDE] Mirrored plan id ${T.value} to form selling_plan input`))}}else if(a.widget.widgetType==="dropdown"){const m=_.shadowRoot.querySelector("select");if(!m)return;for(const T of Array.from(m.options))a.planIds.includes(T.value)&&(T.style.display!=="none"&&(T.style.display="none"),T.disabled||(T.disabled=!0),C++);const y=Array.from(m.options).filter(T=>!a.planIds.includes(T.value)),w=y.some(T=>T.value===m.value);y.length>0&&!w&&!l&&(l=!0,m.value=y[0].value,m.dispatchEvent(new Event("change",{bubbles:!0})),t(`[SUB-GLOBAL-HIDE] Preselected first visible option=${y[0].value}`))}C>0&&t(`[SUB-GLOBAL-HIDE] Hidden ${C} B-side plan buttons`)}const u={childList:!0,subtree:!0,characterData:!0};let b=null;function k(P){b?.disconnect(),b=new MutationObserver(()=>p()),b.observe(P,u)}function S(){const P=document.querySelector(r);if(!P?.shadowRoot)return!1;p(),new MutationObserver(()=>{p();const m=P.shadowRoot.querySelector(n);m?.shadowRoot&&k(m.shadowRoot)}).observe(P.shadowRoot,u);const C=P.shadowRoot.querySelector(n);return C?.shadowRoot&&k(C.shadowRoot),!0}if(!S()){t("[SUB-GLOBAL-HIDE] Widget not in DOM yet â waiting via MutationObserver");const P=new MutationObserver(()=>{S()&&P.disconnect()});P.observe(document.body??document.documentElement,{childList:!0,subtree:!0})}}const ut="Limited preview",Ft="Add-to-cart and checkout prices won't reflect this test until it launches â test selling plans are not created in your subscription app until after a test is launched.",Bt=5e3;function zt(){const a=document.createElement("div");a.id="shoplift-preview-subscription-warning";const t=document.createElement("span");t.id="shoplift-preview-subscription-warning__icon",t.setAttribute("aria-hidden","true"),t.textContent="!";const e=document.createElement("span");e.id="shoplift-preview-subscription-warning__label",e.textContent=ut;const i=document.createElement("div");i.id="shoplift-preview-subscription-warning__tooltip",i.setAttribute("role","tooltip"),i.textContent=Ft,a.appendChild(t),a.appendChild(e),a.appendChild(i),a.setAttribute("tabindex","0"),a.setAttribute("aria-describedby",i.id),a.setAttribute("aria-label",ut);let s=null;function r(){s!==null&&(clearTimeout(s),s=null)}function n(){i.classList.add("shoplift-preview-subscription-warning__tooltip--visible")}function o(){i.classList.remove("shoplift-preview-subscription-warning__tooltip--visible")}function l(){n(),r(),s=setTimeout(()=>{o(),s=null},Bt)}function c(){r(),n()}function d(){s===null&&o()}a.addEventListener("mouseenter",c),a.addEventListener("mouseleave",d),a.addEventListener("focus",c),a.addEventListener("blur",d);function p(u){try{const b=u.target;if(!(b instanceof Element))return;(b.closest('form[action*="/cart/add"] button[type="submit"], form[action*="/cart/add"] input[type="submit"]')!==null||b.closest('[name="add"], button[name="add"], [data-add-to-cart], button[data-add-to-cart]')!==null)&&l()}catch{}}
18document.addEventListener("click",p,!0);function h(){r(),document.removeEventListener("click",p,!0),a.removeEventListener("mouseenter",c),a.removeEventListener("mouseleave",d),a.removeEventListener("focus",c),a.removeEventListener("blur",d),a.remove()}return{root:a,tooltip:i,cleanup:h}}let pt=!1;class Wt{constructor(t,e,i,s,r,n,o,l,c,d,p,h,u){this.shop=t,this.host=e,this.eventHost=i,this.disableReferrerOverride=l,this.logHistory=[],this.legacySessionKey=`SHOPLIFT_SESSION_${this.shop}`,this.cssHideClass=s?"shoplift-hide":"",this.testConfigs=p.map(k=>({...k,startAt:new Date(k.startAt),statusHistory:k.statusHistory.map(S=>({...S,createdAt:new Date(S.createdAt)}))})),this.inactiveTestConfigs=h,this.hiddenSubscriptionPlans=u,this.sendPageView=!!r,this.shopliftDebug=n===!0,this.telemetryEnabled=c===!0,this.gaConfig=o!=={"sendEvents":false,"mode":"gtag"}?o:{sendEvents:!1},this.fetch=window.fetch.bind(window),this.localStorageSet=window.localStorage.setItem.bind(window.localStorage),this.localStorageGet=window.localStorage.getItem.bind(window.localStorage);const b=this.getDeviceType();this.device=b!=="tablet"?b:"mobile",this.state=this.loadState(),this.shopifyAnalyticsId=this.getShopifyAnalyticsId(),this.testsFilteredByAudience=p.filter(k=>
18k.status=="active"),this.getCountryTimeout=d===1000?1e3:d,this.log("State Loaded",JSON.stringify(this.state))}DATA_SL_ATTRIBUTE_P="data-sl-attribute-p";DATA_SL_TEST_ID="data-sl-test-id";VIEWPORT_TRACK_THRESHOLD=.5;temporarySessionKey="Shoplift_Session";essentialSessionKey="Shoplift_Essential";analyticsSessionKey="Shoplift_Analytics";priceSelectorsSessionKey="Shoplift_PriceSelectors_v2";legacySessionKey;cssHideClass;testConfigs;inactiveTestConfigs;hiddenSubscriptionPlans;testsFilteredByAudience;sendPageView;shopliftDebug;gaConfig;telemetryEnabled;getCountryTimeout;state;subscriptionPreviewWarningCleanup=null;shopifyAnalyticsId;cookie=document.cookie;isSyncing=!1;isSyncingGA=!1;fetch;localStorageSet;localStorageGet;sessionStorageSet=window.sessionStorage.setItem.bind(window.sessionStorage);sessionStorageGet=window.sessionStorage.getItem.bind(window.sessionStorage);urlParams=new URLSearchParams(window.location.search);device;logHistory;activeViewportObservers=new Map;clientIdRetryCount=0;deriveCategoryFromExistingTests(){if(!this.state.temporary.testCategory&&this.state.essential.visitorTests.length>0){const t=this.state.essential.visitorTests.some(e=>{if(!e.hypothesisId)return!1;const i=this.getHypothesis(e.hypothesisId);return i&&["theme","basicScript","price"].includes(i.type)});this.state.temporary.testCategory=t?"global":"conditional",this.persistTemporaryState(),this.log("Derived test category from existing visitorTests: %s",this.state.temporary.testCategory)}}
18async init(){try{if(this.log("Shoplift script initializing"),window.Shopify&&window.Shopify.designMode){this.log("Skipping script for design mode");return}if(window.location.href.includes("slScreenshot=true")){this.log("Skipping script for screenshot");return}if(window.location.hostname.endsWith(".edgemesh.com")){this.log("Skipping script for preview");return}if(window.location.href.includes("isShopliftMerchant")){const s=this.urlParams.get("isShopliftMerchant")==="true";this.log("Setting merchant session to %s",s),this.state.temporary.isMerchant=s,this.persistTemporaryState()}if(this.state.temporary.isMerchant){this.log("Setting up preview for merchant"),typeof window.shoplift!="object"&&this.setShopliftStub(),this.state.temporary.previewConfig||this.hidePage(),await this.initPreview(),document.querySelector("#sl-preview-bar-hide")?.remove();return}if(this.state.temporary.previewConfig=void 0,mt(navigator.userAgent))return;const t=this.state.essential.visitorTests.filter(s=>s.hypothesisId&&+s.createdAt>Date.now()-6e4);if(t.length===0)this.sendDiagnosticTelemetry("page-landed",null);else for(const s of t)this.sendDiagnosticTelemetry("page-landed",s.testId,{hypothesisId:s.hypothesisId,isControl:s.assignedTo==="control",testType:s.testType??"unknown"});if(navigator.userAgent.includes("Chrome/118")){this.log("Random: %o",[Math.random(),Math.random(),Math.random()]);const s=await this.makeRequest({url:`${this.eventHost}/api/v0/events/ip`,method:"get"}).then(r=>r?.json());this.log(`IP: ${s}`),this.makeRequest({url:`${this.eventHost}/api/v0/logs`,method:"post",data:JSON.stringify(this.debugState(),X)}).catch()}if(this.shopifyAnalyticsId=this.getShopifyAnalyticsId(),this.monitorConsentChange(),this.checkForThemePreview())return;if(!this.disableReferrerOverride&&this.state.temporary.originalReferrer!=null){this.log(`Overriding referrer from '${document.referrer}' to '${this.state.temporary.originalReferrer}'`);const s=this.state.temporary.originalReferrer;delete this.state.temporary.originalReferrer,this.persistTemporaryState(),Object.defineProperty(document,"referrer",{get:()=>s,enumerable:!0,configurable:!0})}if(await this.refreshVisitor(this.shopifyAnalyticsId),await this.handleVisitorTest()){this.log("Redirecting for visitor test");return}this.setShoplift(),this.showPage(),this.ensureCartAttributesForExistingPriceTests(!1);const i=this.state.essential.visitorTests.some(s=>(s.hypothesisId?this.getHypothesis(s.hypothesisId):void 0)?.subscriptionData!=null)||Object.values(this.state.temporary.testReservations??{}).some(s=>this.getHypothesis(s.hypothesisId)?.subscriptionData!=null);this.hiddenSubscriptionPlans&&!i&&(this.log(`[SUB-GLOBAL] Visitor not in subscription test â hiding ${this.hiddenSubscriptionPlans.planIds.length} B-side plans`),Ut(this.hiddenSubscriptionPlans,s=>this.log(s))),await this.subscriptionSwap(),await this.subscriptionOneTimePrice(),await this.subscriptionPriceChange(),await this.finalize(),console.log("SHOPLIFT SCRIPT INITIALIZED!")}catch(t){if(t instanceof et)return;throw t}finally{typeof window.shoplift!="object"&&this.setShopliftStub()}}getVariantColor(t){switch(t){case"a":return{text:"#141414",bg:"#E2E2E2"};case"b":return{text:"rgba(255, 255, 255, 1)",bg:"rgba(37, 99, 235, 1)"}}}getDefaultVariantTitle(t){return t.title?t.title:t.type==="price"?t.isControl?"Original prices":"Variant prices":t.isControl?"Original":"Untitled variant "+t.label.toUpperCase()}async initPreview(){const t=this.urlParams.get("previewConfig");if(t){this.state.temporary.previewConfig=void 0,this.log("Setting up the preview"),this.log("Found preview config, writing to temporary state");const e=await Rt(t);if(this.state.temporary.previewConfig=e,this.state.temporary.previewConfig.testTypeCategory===M.Price){this.hidePage(!0);const s=this.state.temporary.previewConfig;let r=`${this.host}/api/dom-selectors/${s.storeId}/${s.testId}/${s.isDraft||!1}`;s.shopifyProductId&&(r+=`?productId=${s.shopifyProductId}`);const n=await this.makeJsonRequest({method:"get",url:r}).catch(o=>(this.log("Error getting domSelectors",o),null));
18if(s.variants.forEach(o=>o.domSelectors=n[o.id]?.domSelectors),s.isDraft){const o=`${this.host}/api/dom-selectors/${s.storeId}/${s.testId}/subscription-preview`,l=await this.makeJsonRequest({method:"get",url:o}).catch(c=>(this.log("No subscription preview data for draft (test may not have a subscription widget)",c),null));l?.subscriptionData&&s.variants.forEach(c=>{c.subscriptionData=l.subscriptionData,c.priceData=l.priceData})}}this.persistTemporaryState();const i=new URL(window.location.toString());i.searchParams.delete("previewConfig"),this.queueRedirect(i)}else if(this.state.temporary.previewConfig){this.showPage();const e=this.state.temporary.previewConfig;if(e.testTypeCategory===M.Template&&this.handleTemplatePreview(e)&&this.initPreviewControls(e),e.testTypeCategory===M.UrlRedirect&&this.handleUrlPreview(e)&&this.initPreviewControls(e),e.testTypeCategory===M.Script&&this.handleScriptPreview(e)&&this.initPreviewControls(e),e.testTypeCategory===M.Price){const i=await this.handlePricePreview(e);e.isDraft?await this.handleSubscriptionPricePreview(e):await this.handleSubscriptionLivePreview(e),i&&this.initPreviewControls(e)}}}initPreviewControls(t){document.addEventListener("DOMContentLoaded",()=>{const e=t.variants.find(b=>b.id===t.currentVariant),i=e?.label||"a",s=t.variants,r=document.createElement("div");r.id="shoplift-preview-control";const n=document.createElement("div"),o=document.createElement("img");o.src=_t,o.height=24,o.width=14,n.style.padding="0 16px",n.style.lineHeight="100%",n.appendChild(o),r.appendChild(n);const l=document.createElement("div");l.id="shoplift-preview-variant-selector";const c=document.createElement("button");c.id="shoplift-preview-variant-menu-trigger";const d=document.createElement("div");d.className="menu-variant-label",d.style.backgroundColor=this.getVariantColor(i).bg,d.style.color=this.getVariantColor(i).text,d.innerText=i.toUpperCase(),c.appendChild(d);const p=document.createElement("span");if(p.id="shoplift-preview-variant-title",p.innerText=e?this.getDefaultVariantTitle(e):"Untitled variant "+i.toUpperCase(),c.appendChild(p),s.length>1){const b=document.createElement("img");b.src=xt,b.width=12,b.height=12,b.style.height="12px",b.style.width="12px",c.appendChild(b);const k=document.createElement("div");k.className="preview-variant-menu";for(const S of t.variants.filter(P=>P.id!==t.currentVariant)){const P=document.createElement("div");P.className="preview-variant-menu--item";const _=document.createElement("div");_.className="menu-variant-label",_.style.backgroundColor=this.getVariantColor(S.label).bg,_.style.color=this.getVariantColor(S.label).text,_.style.flexShrink="0",_.innerText=S.label.toUpperCase(),P.appendChild(_);const C=document.createElement("span");C.innerText=this.getDefaultVariantTitle(S),P.appendChild(C),P.addEventListener("click",()=>{this.pickVariant(S.id)}),k.appendChild(P)}l.appendChild(k),c.addEventListener("click",()=>{k.className!=="preview-variant-menu preview-variant-menu__visible"?k.classList.add("preview-variant-menu__visible"):k.classList.remove("preview-variant-menu__visible")}),document.addEventListener("click",S=>{S.target instanceof Element&&!c.contains(S.target)&&k.className==="preview-variant-menu preview-variant-menu__visible"&&k.classList.remove("preview-variant-menu__visible")})}else c.style.pointerEvents="none",d.style.margin="0";if(l.appendChild(c),r.appendChild(l),t.hasSubscription){this.subscriptionPreviewWarningCleanup?.();const b=zt();r.appendChild(b.root),this.subscriptionPreviewWarningCleanup=b.cleanup}const h=document.createElement("div"),u=document.createElement("button");u.id="shoplift-exit-preview-button",u.innerText="Exit",h.appendChild(u),u.addEventListener("click",()=>{this.exitPreview()}),r.appendChild(h),document.body.appendChild(r),requestAnimationFrame(()=>{r.classList.add("visible")})}),this.ensureCartAttributesForExistingPriceTests(!0)}pickVariant(t){if(this.state.temporary.previewConfig){const e=this.state.temporary.previewConfig,i=new URL(window.location.toString());if(e.testTypeCategory===M.UrlRedirect){const s=e.variants.find(r=>r.id===e.currentVariant)?.redirectUrl;if(i.pathname===s){const r=e.variants.find(n=>n.id===t)?.redirectUrl;r&&(i.pathname=r)}}if(e.testTypeCategory===M.Template){const s=e.variants.find(r=>r.id===e.currentVariant)?.pathName;if(s&&i.pathname===s){const r=e.variants.find(n=>n.id===t)?.pathName;r&&r!==s&&(i.pathname=r)}}e.currentVariant=t,this.persistTemporaryState(),this.queueRedirect(i)}}exitPreview(){const t=new URL(window.location.toString());if(this.state.temporary.previewConfig?.testTypeCategory===M.Template&&t.searchParams.delete("view"),this.state.temporary.previewConfig?.testTypeCategory===M.Script&&t.searchParams.delete("slVariant"),this.state.temporary.previewConfig?.testTypeCategory===M.UrlRedirect){const i=this.state.temporary.previewConfig.variants.filter(r=>!r.isControl&&r.redirectUrl!==null).map(r=>r.redirectUrl),s=this.state.temporary.previewConfig.variants.find(r=>r.label==="a")?.redirectUrl;i.includes(t.pathname)&&s&&(t.pathname=s)}this.state.temporary.isMerchant=!1,t.searchParams.delete("isShopliftMerchant"),this.state.temporary.previewConfig=void 0,this.persistTemporaryState(),this.subscriptionPreviewWarningCleanup?.(),this.subscriptionPreviewWarningCleanup=null,this.hidePage(),this.queueRedirect(t)}handleTemplatePreview(t){const e=t.currentVariant,i=t.variants.find(l=>l.id===e);if(!i)return!1;const s=t.variants.find(l=>l.isControl);if(!s)return!1;this.log("Setting up template preview for type",s.type);
18const r=new URL(window.location.toString()),n=r.searchParams.get("view"),o=i.type===s.type;return!o&&!i.isControl&&template.suffix===s.affix&&this.typeFromTemplate()===s.type&&i.pathName!==null?(this.log("Hit control template type, redirecting to the variant url"),this.hidePage(),r.pathname=i.pathName,this.queueRedirect(r),!0):(!i.isControl&&this.typeFromTemplate()==i.type&&template.suffix===s.affix&&o&&n!==(i.affix||"__DEFAULT__")&&(this.log("Template type and affix match control, updating the view param"),r.searchParams.delete("view"),this.log("Setting the new viewParam to",i.affix||"__DEFAULT__"),this.hidePage(),r.searchParams.set("view",i.affix||"__DEFAULT__"),this.queueRedirect(r)),n!==null&&n!==(i.affix||"__DEFAULT__")&&(r.searchParams.delete("view"),this.hidePage(),this.queueRedirect(r)),!0)}handleUrlPreview(t){const e=t.currentVariant,i=t.variants.find(n=>n.id===e),s=t.variants.find(n=>n.isControl)?.redirectUrl;if(!i)return!1;this.log("Setting up URL redirect preview");const r=new URL(window.location.toString());return r.pathname===s&&!i.isControl&&i.redirectUrl!==null&&(this.log("Url matches control, redirecting"),this.hidePage(),r.pathname=i.redirectUrl,this.queueRedirect(r)),!0}handleScriptPreview(t){const e=t.currentVariant,i=t.variants.find(n=>n.id===e);if(!i)return!1;this.log("Setting up script preview");const s=new URL(window.location.toString());return s.searchParams.get("slVariant")!==i.id&&(this.log("current id doesn't match the variant, redirecting"),s.searchParams.delete("slVariant"),this.log("Setting the new slVariantParam"),this.hidePage(),s.searchParams.set("slVariant",i.id),this.queueRedirect(s)),!0}async handlePricePreview(t){const e=t.currentVariant,i=t.variants.find(s=>s.id===e);return i?(this.log("Setting up price preview"),i.domSelectors&&i.domSelectors.length>0&&(U(document,{testId:t.testId,hypothesisId:i.id,selectors:i.domSelectors}),this.ensureCartAttributesForExistingPriceTests(!0)),!0):!1}async handleSubscriptionPricePreview(t){const e=t.variants.find(i=>i.id===t.currentVariant);e?.subscriptionData&&(this.log("Setting up subscription price preview"),await Nt({id:e.id,isControl:e.isControl,subscriptionData:e.subscriptionData,priceData:e.priceData},(i,...s)=>this.log(i,...s)))}async handleSubscriptionLivePreview(t){this.testConfigs.find(s=>s.id===t.testId)?.hypotheses.find(s=>s.id===t.currentVariant)?.subscriptionData&&(this.log("Setting up subscription live preview"),this.subscriptionSwapDone=!1,this.subscriptionOneTimeDone=!1,this.subscriptionPriceDone=!1,await this.subscriptionSwap(),await this.subscriptionOneTimePrice(),await this.subscriptionPriceChange())}async finalize(){const t=await this.getCartState();t!==null&&this.queueCartUpdate(t),this.pruneStateAndSave(),await this.syncAllEvents()}setShoplift(){this.log("Setting up public API");const e=this.urlParams.get("slVariant")==="true",i=e?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:async s=>{if(this.log("Script checking variant for hypothesis '%s'",s),e)return this.log("Forcing variant for hypothesis '%s'",s),!0;if(i!==null)return this.log("Forcing hypothesis '%s'",i),s===i;const r=this.testConfigs.find(o=>o.hypotheses.some(l=>l.id===s));if(!r)return this.log("No test found for hypothesis '%s'",s),!1;const n=this.state.essential.visitorTests.find(o=>o.testId===r.id);return n?(this.log("Active visitor test found",s),n.hypothesisId===s):(await this.manuallySplitVisitor(r),this.testConfigs.some(o=>o.hypotheses.some(l=>l.id===s&&this.state.essential.visitorTests.some(c=>c.hypothesisId===l.id))))},setAnalyticsConsent:async s=>{await this.onConsentChange(s,!0)},getVisitorData:()=>({visitor:this.state.analytics.visitor,visitorTests:this.state.essential.visitorTests.filter(s=>!s.isInvalid).map(s=>{const{shouldSendToGa:r,savedAt:n,...o}=s;return o})})}}setShopliftStub(){this.log("Setting up stubbed public API");const e=this.urlParams.get("slVariant")==="true",i=e?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:s=>Promise.resolve(e||s===i),setAnalyticsConsent:()=>Promise.resolve(),getVisitorData:()=>({visitor:null,visitorTests:[]})}}async manuallySplitVisitor(t){this.log("Starting manual split for test '%s'",t.id),await this.handleVisitorTest([t]);const e=this.getReservationForTest(t.id);e&&!e.isRealized&&e.entryCriteriaKey&&(this.log("Realizing manual API reservation for test '%s'",t.id),this.realizeReservationForCriteria(e.entryCriteriaKey)),this.saveState(),this.syncAllEvents()}async handleVisitorTest(t){await this.filterTestsByAudience(this.testConfigs,this.state.analytics.visitor??this.buildBaseVisitor(),this.state.essential.visitorTests),this.pruneStaleVisitorTests(),this.deriveC
18ategoryFromExistingTests(),this.clearStaleReservations();let e=t?t.filter(i=>this.testsFilteredByAudience.some(s=>s.id===i.id)):[...this.testsForUrl(this.testsFilteredByAudience),...this.domTestsForUrl(this.testsFilteredByAudience)];try{if(e.length===0)return this.log("No tests found"),!1;this.log("Checking for existing visitor test on page");const i=this.getCurrentVisitorHypothesis(e);if(i){this.log("Found current visitor test");const l=this.considerRedirect(i);return l&&(this.log("Redirecting for current visitor test"),this.redirect(i)),l}const s=this.getReservationForCurrentPage();if(s){this.log("Found matching reservation for current page: %s",s.testId);const l=this.getHypothesis(s.hypothesisId);if(l){l.type!=="price"&&this.realizeReservationForCriteria(s.entryCriteriaKey);const c=this.considerRedirect(l);return c&&this.redirect(l),c}}this.log("No active test relation for test page");const r=this.testsForUrl(this.inactiveTestConfigs.filter(l=>this.testIsPaused(l)&&l.hypotheses.some(c=>this.state.essential.visitorTests.some(d=>d.hypothesisId===c.id)))).map(l=>l.id);if(r.length>0)return this.log("Visitor has paused tests for test page, skipping test assignment: %o",r),!1;if(!this.state.temporary.testCategory){const l=this.testsFilteredByAudience.filter(d=>this.isGlobalEntryCriteria(this.getEntryCriteriaKey(d))),c=this.testsFilteredByAudience.filter(d=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(d)));if(this.log("Category dice roll - global tests: %o, conditional tests: %o",l.map(d=>({id:d.id,title:d.title,criteria:this.getEntryCriteriaKey(d)})),c.map(d=>({id:d.id,title:d.title,criteria:this.getEntryCriteriaKey(d)}))),l.length>0&&c.length>0){const d=l.length,p=c.length,h=d+p,u=Math.random()*h;this.state.temporary.testCategory=u<d?"global":"conditional",this.log("Category dice roll: rolled %.2f of %d (global weight: %d, conditional weight: %d), selected '%s'",u,h,d,p,this.state.temporary.testCategory)}else l.length>0?(this.state.temporary.testCategory="global",this.log("Only global tests available, setting category to global")):(this.state.temporary.testCategory="conditional",this.log("Only conditional tests available, setting category to conditional"));this.persistTemporaryState()}const n=this.state.temporary.testCategory;if(this.log("Visitor test category: %s",n),n==="global"){const l=this.testsFilteredByAudience.filter(c=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)));for(const c of l)this.markTestAsBlocked(c,"category:global");e=e.filter(c=>this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)))}else{const l=this.testsFilteredByAudience.filter(c=>this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)));for(const c of l)this.markTestAsBlocked(c,"category:conditional");e=e.filter(c=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)))}if(e.length===0)return this.log("No tests remaining after category filter"),!1;this.createReservations(e);const o=this.getReservationForCurrentPage();if(o&&!o.isRealized){const l=this.getHypothesis(o.hypothesisId);if(l){l.type!=="price"&&this.realizeReservationForCriteria(o.entryCriteriaKey);const c=this.considerRedirect(l);return c&&(this.log("Redirecting for new test"),this.redirect(l)),c}}return!1}finally{this.includeInDomTests(),this.saveState()}}includeInDomTests(){this.applyControlForAudienceFilteredPriceTests();const t=this.getDomTestsForCurrentUrl(),e=this.getVisitorDomHypothesis(t);for(const i of t){this.log("Evaluating dom test '%s'",i.id);const s=i.hypotheses.some(u=>u.type==="price");if(this.state.essential.visitorTests.find(u=>u.testId===i.id&&u.isInvalid&&!u.hypothesisId)){if(this.log("Visitor is blocked from test '%s', applying control prices if price test",i.id),s){const u=i.hypotheses.find(b=>b.isControl);u?.priceData&&(this.applyPriceTestWithMapLookup(i.id,u,[u],()=>{this.log("Control prices applied for blocked visitor, no metrics tracked")}),this.updatePriceTestHiddenInputs(i.id,"control",!1))}continue}const n=this.getReservationForTest(i.id);let o=null,l=!1;const c=e.find(u=>i.hypotheses.some(b=>u.id===b.id));if(n)o=this.getHypothesis(n.hypothesisId)??null,this.log("Using reserved hypothesis '%s' for test '%s'",n.hypothesisId,i.id);else if(c)o=c,this.log("Using existing hypothesis assignment for test '%s'",i.id);else if(s){const u=this.visitorActiveTestTypeWithReservations();u?(l=!0,this.log("Visitor already in test type '%s', treating as non-test for price test '%s'",u,i.id)):o=this.pickHypothesis(i)}else o=this.pickHypothesis(i);if(l&&s){const u=i.hypotheses.find(b=>b.isControl);u?.priceData&&(this.log("Applying control prices for non-test visitor on price test '%s' (Map-based)",i.id),this.applyPriceTestWithMapLookup(i.id,u,[u],()=>{this.log("Control prices applied for non-test visitor, no metrics tracked")}
18),this.updatePriceTestHiddenInputs(i.id,"control",!1));continue}if(!o){this.log("Failed to pick hypothesis for test");continue}this.sendDiagnosticTelemetry("assignment",i.id,{hypothesisId:o.id,isControl:o.isControl,testType:o.type});const d=i.bayesianRevision??4,p=o.type==="price",h=d>=5;if(p&&h){if(this.log(`Price test with Map-based lookup (v${d}): ${i.id}`),!o.priceData){this.log("No price data for hypothesis '%s', skipping",o.id);continue}const u=o.isControl?"control":"variant";this.log(`Setting up Map-based price test for ${u} (test: ${i.id})`),this.applyPriceTestWithMapLookup(i.id,o,i.hypotheses,b=>{const k=this.getReservationForTest(b);k&&!k.isRealized&&k.entryCriteriaKey?this.realizeReservationForCriteria(k.entryCriteriaKey):this.queueAddVisitorToTest(b,o),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()});continue}if(p&&!h){this.log(`Price test without viewport tracking (v${d}): ${i.id}`);const u=this.getDomSelectorsForHypothesis(o);if(u.length===0)continue;U(document,{testId:i.id,hypothesisId:o.id,selectors:u},b=>{this.queueAddVisitorToTest(b,o),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()});continue}if(!o.domSelectors||o.domSelectors.length===0){this.log("No selectors found, skipping hypothesis");continue}U(document,{testId:i.id,hypothesisId:o.id,selectors:o.domSelectors},u=>{this.queueAddVisitorToTest(u,o),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()})}}considerRedirect(t){if(this.log("Considering redirect for hypothesis '%s'",t.id),t.isControl)return this.log("Skipping redirect for control"),!1;if(t.type==="basicScript"||t.type==="manualScript")return this.log("Skipping redirect for script test"),!1;const e=this.state.essential.visitorTests.find(n=>n.hypothesisId===t.id),i=new URL(window.location.toString()),r=new URLSearchParams(window.location.search).get("view");if(t.type==="theme"){if(!(t.themeId===themeId)){if(this.log("Theme id '%s' is not hypothesis theme ID '%s'",t.themeId,themeId),this.isAppProxyPath())return this.log("On App Proxy path, skipping theme redirect to avoid infinite loop"),!1;if(e&&e.themeId!==t.themeId&&(e.themeId===themeId||!this.isThemePreview()))this.log("On old theme, redirecting and updating local visitor"),e.themeId=t.themeId;else if(this.isThemePreview())return this.log("On non-test theme, skipping redirect"),!1;return this.log("Hiding page to redirect for theme test"),this.hidePage(),!0}return!1}else if(t.type!=="dom"&&t.type!=="price"&&t.affix!==template.suffix&&t.affix!==r||t.redirectPath&&!i.pathname.endsWith(t.redirectPath))return this.log("Hiding page to redirect for template test"),this.hidePage(),!0;return this.log("Not redirecting"),!1}redirect(t){if(this.log("Redirecting to hypothesis '%s'",t.id),t.isControl)return;const e=new URL(window.location.toString());if(e.searchParams.delete("view"),t.redirectPath){const i=RegExp("^(/w{2}-w{2})/").exec(e.pathname);if(i&&i.length>1){const s=i[1];e.pathname=`${s}${t.redirectPath}`}else e.pathname=t.redirectPath}else t.type==="theme"?(e.searchParams.set("_ab","0"),e.searchParams.set("_fd","0"),e.searchParams.set("_sc","1"),e.searchParams.set("preview_theme_id",t.themeId.toString())):t.type!=="urlRedirect"&&e.searchParams.set("view",t.affix);this.queueRedirect(e)}async refreshVisitor(t){if(t===null||!this.state.essential.isFirstLoad||!this.testConfigs.some(i=>i.visitorOption!=="all"))return;this.log("Refreshing visitor"),this.hidePage();const e=await this.getVisitor(t);e&&e.id&&this.updateLocalVisitor(e)}buildBaseVisitor(){return{shopifyAnalyticsId:this.shopifyAnalyticsId,device:this.device,country:null,...this.state.essential.initialState}}getInitialState(){const t=this.getUTMValue("utm_source")??"",e=this.getUTMValue("utm_medium")??"",i=this.getUTMValue("utm_campaign")??"",s=this.getUTMValue("utm_content")??"",r=window.document.referrer,n=this.device;return{createdAt:new Date,utmSource:t,utmMedium:e,utmCampaign:i,utmContent:s,referrer:r,device:n}}checkForThemePreview(){return this.log("Checking for theme preview"),window.location.hostname.endsWith(".shopifypreview.com")?(this.log("on shopify preview domain"),this.clearThemeBar(!0,!1,this.state),document.querySelector("#sl-preview-bar-hide")?.remove(),!1):this.isThemePreview()?this.state.essential.visitorTests.some(t=>t.isThemeTest&&t.hypothesisId!=null&&this.getHypothesis(t.hypothesisId)&&t.themeId===themeId)?(this.log("On active theme test, remov
18ing theme bar"),this.clearThemeBar(!1,!0,this.state),!1):this.state.essential.visitorTests.some(t=>t.isThemeTest&&t.hypothesisId!=null&&!this.getHypothesis(t.hypothesisId)&&t.themeId===themeId)?(this.log("Visitor is on an inactive theme test, redirecting to main theme"),this.redirectToMainTheme(),!0):this.state.essential.isFirstLoad?(this.log("No visitor found on theme preview, redirecting to main theme"),this.redirectToMainTheme(),!0):this.inactiveTestConfigs.some(t=>t.hypotheses.some(e=>e.themeId===themeId))?(this.log("Current theme is an inactive theme test, redirecting to main theme"),this.redirectToMainTheme(),!0):this.testConfigs.some(t=>t.hypotheses.some(e=>e.themeId===themeId))?(this.log("Falling back to clearing theme bar"),this.clearThemeBar(!1,!0,this.state),!1):(this.log("No tests on current theme, skipping script"),this.clearThemeBar(!0,!1,this.state),document.querySelector("#sl-preview-bar-hide")?.remove(),!0):(this.log("Not on theme preview"),this.clearThemeBar(!0,!1,this.state),!1)}redirectToMainTheme(){this.hidePage();const t=new URL(window.location.toString());t.searchParams.set("preview_theme_id",""),this.queueRedirect(t)}testsForUrl(t){const e=new URL(window.location.href),i=this.typeFromTemplate();return t.filter(s=>s.hypotheses.some(r=>r.type!=="dom"&&r.type!=="price"&&(r.isControl&&r.type===i&&r.affix===template.suffix||r.type==="theme"||r.isControl&&r.type==="urlRedirect"&&r.redirectPath&&e.pathname.endsWith(r.redirectPath)||r.type==="basicScript"))&&(s.ignoreTestViewParameterEnforcement||!e.searchParams.has("view")||s.hypotheses.map(r=>r.affix).includes(e.searchParams.get("view")??"")))}domTestsForUrl(t){const e=new URL(window.location.href);return t.filter(i=>i.hypotheses.some(s=>s.type!=="dom"&&s.type!=="price"?!1:s.type==="price"&&s.priceData&&s.priceData.variants.length>0?!0:s.domSelectors&&s.domSelectors.some(r=>new RegExp(it(r)).test(e.toString()))))}async filterTestsByAudience(t,e,i){const s=[];let r=e.country;!r&&t.some(n=>n.requiresCountry&&!i.some(o=>o.testId===n.id))&&(this.log("Hiding page to check geoip"),this.hidePage(),r=await this.makeJsonRequest({method:"get",url:`${this.eventHost}/api/v0/visitors/get-country`,signal:AbortSignal.timeout(this.getCountryTimeout)}).catch(n=>(this.log("Error getting country",n),null)));for(const n of t){if(this.log("Checking audience for test '%s'",n.id),this.state.essential.visitorTests.some(c=>c.testId===n.id&&c.hypothesisId==null)){console.log(`Skipping blocked test '${n.id}'`);continue}const o=this.visitorCreatedDuringTestActive(n.statusHistory);(i.some(c=>c.testId===n.id&&(n.device==="all"||n.device===e.device&&n.device===this.device))||this.isTargetAudience(n,e,o,r))&&(this.log("Visitor is in audience for test '%s'",n.id),s.push(n))}this.testsFilteredByAudience=s}isTargetAudience(t,e,i,s){const r=this.getChannel(e);return(t.device==="all"||t.device===e.device&&t.device===this.device)&&(t.visitorOption==="all"||t.visitorOption==="new"&&i||t.visitorOption==="returning"&&!i)&&(t.targetAudiences.length===0||t.targetAudiences.reduce((n,o)=>n||o.reduce((l,c)=>l&&c(e,i,r,s),!0),!1))}visitorCreatedDuringTestActive(t){let e="";for(const i of t){if(this.state.analytics.visitor!==null&&this.state.analytics.visitor.createdAt<i.createdAt||this.state.essential.initialState.createdAt<i.createdAt)break;e=i.status}return e==="active"}getDomTestsForCurrentUrl(){return this.domTestsForUrl(this.testsFilteredByAudience)}getCurrentVisitorHypothesis(t){return t.flatMap(e=>e.hypotheses).find(e=>e.type!=="dom"&&e.type!=="price"&&this.state.essential.visitorTests.some(i=>i.hypothesisId===e.id))}getVisitorDomHypothesis(t){return t.flatMap(e=>e.hypotheses).filter(e=>(e.type==="dom"||e.type==="price")&&this.state.essential.visitorTests.some(i=>i.hypothesisId===e.id))}getHypothesis(t){return this.testConfigs.filter(e=>e.hypotheses.some(i=>i.id===t)).map(e=>e.hypotheses.find(i=>i.id===t))[0]}getActiveAssignment(){if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const e=this.state.temporary.previewConfig;return e.currentVariant&&e.testId?{testId:e.testId,hypothesisId:e.currentVariant}:null}const t=this.state.essential.visitorTests.find(e=>e.hypothesisId);return t?.hypothesisId?{testId:t.testId,hypothesisId:t.hypothesisId}:null}findActiveSubscriptionTestControl(){for(const t of this.testConfigs){const e=t.hypotheses.find(i=>i.isControl);if(e?.subscriptionData)return{testId:t.id,hypothesis:e}}return null}getDomSelectorsForHypothesis(t){if(!t)return[];if(t.domSelectors&&t.domSelectors.length>0)return t.domSelectors;if(t.priceData){const e=`${this.priceSelectorsSessionKey}_${t.id}`;try{const s=sessionStorage.getItem(e);if(s){const r=JSON.parse(s);return t.domSelectors=r,this.log("Loaded %d price selectors from cache for hypothesis '%s'",r.length,t.id),r}}catch{}const i=Ot(t.priceData);t.domSelectors=i;try{sessionStorage.setItem(e,JSON.stringify(i)),this.log("Generated and cached %d price selectors for hypothesis '%s'",i.length,t.id)}catch{this.log("Generated %d price selectors for hypothesis '%s' (cache unavailable)",i.length,t.id)}return i}return[]}hasThemeTest(t){return t.some(e=>e.hypotheses.some(i=>i.type==="theme"))}hasTestThatIsNotThemeTest(t){return t.some(e=>e.hypotheses.some(i=>i.type!=="theme"&&i.type!=="dom"&&i.type!=="price"))}hasThemeAndOtherTestTypes(t){return this.hasThemeTest(t)&&this.hasTestThatIsNotThemeTest(t)}testIsPaused(t){return t.status==="paused"||t.status==="incompatible"||t.status==="suspended"}visitorActiveTestType(){const t=this.state.essential.visitorTests.filter(e=>this.testConfigs.some(i=>i.hypotheses.some(s=>s.id==e.hypothesisId)));return t.length===0?null:t.some(e=>e.isThemeTest)?"theme":"templateOrUrlRedirect"}getReservationType(t){return t==="price"||this.isTemplateTestType(t)?"deferred":"immediate"}isTemplateTestType(t){return["product","collection","landing","index","cart","search","blog","article","collectionList"].includes(t)}getEntryCriteriaKey(t){const e=t.hypotheses.find(i=>i.isControl);if(!e)return`unknown:${t.id}`;switch(e.type){case"theme":return"global:theme";case"basicScript":return"global:autoApi";case"price":return"global:price";case"manualScript":return`conditional:manualApi:${t.id}`;case"urlRedirect":return`conditional:url:${e.redirectPath||"unknown"}`;default:return`conditional:template:${e.type}`}}isGlobalEntryCriteria(t){return t.startsWith("global:")}groupTestsByEntryCriteria(t){const e=new Map;for(const i of t){const s=this.getEntryCriteriaKey(i),r=e.get(s)||[];r.push(i),e.set(s,r)}return e}doesCurrentPageMatchEntryCriteria(t){if(this.isGlobalEntryCriteria(t))return!0;
18if(t==="conditional:manualApi")return!1;if(t.startsWith("conditional:url:")){const e=t.replace("conditional:url:","");return window.location.pathname.endsWith(e)}if(t.startsWith("conditional:template:")){const e=t.replace("conditional:template:","");return this.typeFromTemplate()===e}return!1}hasActiveReservation(){const t=this.getActiveReservations();return Object.values(t).some(e=>!e.isRealized)}getActiveReservation(){const t=this.getActiveReservations();return Object.values(t).find(e=>!e.isRealized)??null}clearStaleReservations(){const t=this.state.temporary.testReservations;if(!t)return;let e=!1;for(const[i,s]of Object.entries(t)){const r=this.testConfigs.find(o=>o.id===s.testId);if(!r){this.log("Test '%s' no longer in config, clearing reservation for criteria '%s'",s.testId,i),delete t[i],e=!0;continue}if(r.status!=="active"){this.log("Test '%s' status is '%s', clearing reservation for criteria '%s'",s.testId,r.status,i),delete t[i],e=!0;continue}this.testsFilteredByAudience.some(o=>o.id===s.testId)||(this.log("Visitor no longer passes audience for test '%s', clearing reservation for criteria '%s'",s.testId,i),delete t[i],e=!0)}e&&this.persistTemporaryState()}createReservations(t){if(this.state.temporary.testReservations||(this.state.temporary.testReservations={}),this.state.temporary.rolledEntryCriteria||(this.state.temporary.rolledEntryCriteria=[]),this.state.temporary.testCategory==="global"){this.createSingleReservation(t,"global");return}const i=t.filter(o=>this.doesCurrentPageMatchEntryCriteria(this.getEntryCriteriaKey(o))),s=t.filter(o=>!this.doesCurrentPageMatchEntryCriteria(this.getEntryCriteriaKey(o)));this.log("Conditional tests split - matching current page: %d, not matching: %d",i.length,s.length),i.length>0&&this.log("Tests matching current page (same pool): %o",i.map(o=>({id:o.id,title:o.title,criteria:this.getEntryCriteriaKey(o)})));const r=`conditional:current-page:${this.typeFromTemplate()}`;if(i.length>0&&!this.state.temporary.rolledEntryCriteria.includes(r)){this.createSingleReservation(i,r);for(const o of i){const l=this.getEntryCriteriaKey(o);this.state.temporary.rolledEntryCriteria.includes(l)||this.state.temporary.rolledEntryCriteria.push(l)}}const n=this.groupTestsByEntryCriteria(s);for(const[o,l]of n){if(this.state.temporary.rolledEntryCriteria.includes(o)){this.log("Already rolled for criteria '%s', skipping",o);continue}if(l.some(S=>this.state.essential.visitorTests.some(P=>P.testId===S.id))){this.log("Visitor already has VT for criteria '%s', skipping",o),this.state.temporary.rolledEntryCriteria.push(o);continue}const d=[...l].sort((S,P)=>S.id.localeCompare(P.id));this.log("Test dice roll for criteria '%s' - available tests: %o",o,d.map(S=>({id:S.id,title:S.title})));const p=Math.floor(Math.random()*d.length),h=d[p];this.log("Test dice roll: picked index %d of %d, selected test '%s' (%s)",p+1,l.length,h.id,h.title);const u=this.pickHypothesis(h);if(!u){this.log("No hypothesis picked for test '%s'",h.id);continue}this.sendDiagnosticTelemetry("assignment",h.id,{hypothesisId:u.id,isControl:u.isControl,testType:u.type});const b=this.getReservationType(u.type),k={testId:h.id,hypothesisId:u.id,testType:u.type,reservationType:b,isThemeTest:u.type==="theme",themeId:u.themeId,createdAt:new Date,isRealized:!1,entryCriteriaKey:o};this.state.temporary.testReservations[o]=k,this.state.temporary.rolledEntryCriteria.push(o),this.log("Created %s reservation for test '%s' (criteria: %s)",b,h.id,o);for(const S of l)S.id!==h.id&&this.markTestAsBlocked(S,o)}this.persistTemporaryState()}createSingleReservation(t,e){if(this.state.temporary.rolledEntryCriteria.includes(e)){this.log("Already rolled for pool '%s', skipping",e);return}if(t.some(p=>this.state.essential.visitorTests.some(h=>h.testId===p.id&&!h.isInvalid))){this.log("Visitor already has VT for pool '%s', skipping",e),this.state.temporary.rolledEntryCriteria.push(e);return}if(t.length===0){this.log("No tests in pool '%s'",e);return}const s=[...t].sort((p,h)=>p.id.localeCompare(h.id));this.log("Test dice roll for pool '%s' - available tests: %o",e,s.map(p=>({id:p.id,title:p.title,criteria:this.getEntryCriteriaKey(p)})));const r=Math.floor(Math.random()*s.length),n=s[r];this.log("Test dice roll: picked index %d of %d, selected test '%s' (%s)",r,t.length,n.id,n.title);const o=this.pickHypothesis(n);if(!o){this.log("No hypothesis picked for test '%s'",n.id);return}this.sendDiagnosticTelemetry("assignment",n.id,{hypothesisId:o.id,isControl:o.isControl,testType:o.type});const l=this.getReservationType(o.type),c=this.getEntryCriteriaKey(n),d={testId:n.id,hypothesisId:o.id,testType:o.type,reservationType:l,isThemeTest:o.type==="theme",themeId:o.themeId,createdAt:new Date,isRealized:!1,entryCriteriaKey:c};this.state.temporary.testReservations[c]=d,this.state.temporary.rolledEntryCriteria.push(e),this.log("Created %s reservation for test '%s' from pool '%s' (criteria: %s)",l,n.id,e,c);for(const p of t)p.id!==n.id&&this.markTestAsBlocked(p,`pool:${e}`);this.persistTemporaryState()}markTestAsBlocked(t,e){this.state.essential.visitorTests.some(i=>i.testId===t.id)||(this.log("Blocking visitor from test '%s' (reason: %s)",t.id,e),this.state.essential.visitorTests.push({createdAt:new Date,testId:t.id,hypothesisId:null,isThemeTest:t.hypotheses.some(i=>
18i.type==="theme"),shouldSendToGa:!1,isSaved:!0,isInvalid:!0,themeId:void 0}))}realizeReservationForCriteria(t){const e=this.state.temporary.testReservations?.[t];if(!e)return this.log("No reservation found for criteria '%s'",t),!1;if(e.isRealized)return this.log("Reservation already realized for criteria '%s'",t),!1;if(this.state.essential.visitorTests.some(s=>s.testId===e.testId&&!s.isInvalid))return this.log("Visitor already assigned to test '%s'",e.testId),!1;const i=this.getHypothesis(e.hypothesisId);return i?(e.isRealized=!0,this.persistTemporaryState(),this.queueAddVisitorToTest(e.testId,i),this.saveState(),this.log("Realized reservation for test '%s' (criteria: %s)",e.testId,t),!0):(this.log("Hypothesis '%s' not found",e.hypothesisId),!1)}getActiveReservations(){return this.state.temporary.testReservations??{}}getReservationForCurrentPage(){const t=this.getActiveReservations();for(const[e,i]of Object.entries(t)){if(i.isRealized)continue;const s=this.testConfigs.find(r=>r.id===i.testId);if(!(!s||s.status!=="active")&&this.doesCurrentPageMatchEntryCriteria(e))return i}return null}getReservationForTest(t){const e=this.getActiveReservations();return Object.values(e).find(i=>i.testId===t)??null}getReservationTestType(){const t=this.getActiveReservations(),e=Object.values(t);if(e.length===0)return null;for(const i of e)if(i.isThemeTest)return"theme";for(const i of e)if(i.testType==="price")return"price";return e.some(i=>!i.isRealized)?"templateOrUrlRedirect":null}hasPriceTests(t){return t.some(e=>e.hypotheses.some(i=>i.type==="price"))}_priceTestProductIds=null;getPriceTestProductIds(){if(this._priceTestProductIds)return this._priceTestProductIds;const t=new Set;for(const e of this.testConfigs)for(const i of e.hypotheses)if(i.type==="price"){for(const s of i.domSelectors||[]){const r=s.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);r?.[1]&&t.add(r[1])}if(i.priceData?.variants)for(const[s]of i.priceData.variants)t.add(s)}return this._priceTestProductIds=t,this.log("Built price test product ID cache with %d products",t.size),t}isProductInAnyPriceTest(t){return this.getPriceTestProductIds().has(t)}visitorActiveTestTypeWithReservations(){const t=this.getActiveReservations();for(const r of Object.values(t)){if(r.isThemeTest)return"theme";if(r.testType==="price")return"price"}if(Object.values(t).some(r=>!r.isRealized)){if(this.state.temporary.testCategory==="global")for(const n of Object.values(t)){if(n.testType==="theme")return"theme";if(n.testType==="price")return"price";if(n.testType==="basicScript")return"theme"}return"templateOrUrlRedirect"}const i=this.state.essential.visitorTests.filter(r=>!r.isInvalid&&this.testConfigs.some(n=>n.hypotheses.some(o=>o.id===r.hypothesisId)));return i.length===0?null:i.some(r=>this.getHypothesis(r.hypothesisId)?.type==="price")?"price":i.some(r=>r.isThemeTest)?"theme":"templateOrUrlRedirect"}applyControlForAudienceFilteredPriceTests(){const t=this.testConfigs.filter(s=>s.status==="active"&&s.hypotheses.some(r=>r.type==="price"));if(t.length===0)return;const e=this.testsFilteredByAudience.filter(s=>s.hypotheses.some(r=>r.type==="price")),i=t.filter(s=>!e.some(r=>r.id===s.id));if(i.length!==0){this.log("Found %d price tests filtered by audience, applying control selectors",i.length);for(const s of i){const r=s.hypotheses.find(c=>c.isControl),n=this.getDomSelectorsForHypothesis(r);if(n.length===0){this.log("No control selectors for audience-filtered price test '%s'",s.id);continue}const o=new URL(window.location.href);n.some(c=>{try{return new RegExp(it(c)).test(o.toString())}catch{return!1}})&&(this.log("Applying control selectors for audience-filtered price test '%s'",s.id),U(document,{testId:s.id,hypothesisId:r.id,selectors:n},()=>{}),this.updatePriceTestHiddenInputs(s.id,"control",!1))}}}pickHypothesis(t){let e=Math.random();const i=t.hypotheses.reduce((r,n)=>r+n.visitorCount,0);return t.hypotheses.sort((r,n)=>r.isControl?n.isControl?0:-1:n.isControl?1:0).reduce((r,n)=>{if(r!==null)return r;const l=t.hypotheses.reduce((c,d)=>c&&d.visitorCount>20,!0)?n.visitorCount/i-n.trafficPercentage:0;return e<=n.trafficPercentage-l?n:(e-=n.trafficPercentage-l,null)},null)}typeFromTemplate(){switch(template.type){case"list-collections":return"collectionList";case"page":return"landing";case"article":case"blog":case"cart":case"collection":case"index":case"product":case"search":return template.type;default:return null}}queueRedirect(t){this.saveState(),this.disableReferrerOverride||(this.log(`Saving temporary referrer override '${document.referrer}'`),this.state.temporary.originalReferrer=document.referrer,this.persistTemporaryState()),window.setTimeout(()=>window.location.assign(t),0),window.setTimeout(()=>{this.syncAllEvents()},2e3)}scheduleRetrySync(){this.clientIdRetryCount>=5||(this.clientIdRetryCount++,window.setTimeout(()=>{this.syncAllEvents()},500))}async syncAllEvents(){const t=async()=>
18{if(this.isSyncing){window.setTimeout(()=>{(async()=>await t())()},500);return}try{if(this.isSyncing=!0,this.syncGAEvents(),this.shopifyAnalyticsId||(this.shopifyAnalyticsId=this.getShopifyAnalyticsId()),!this.shopifyAnalyticsId){this.scheduleRetrySync();return}await this.syncEvents()}finally{this.isSyncing=!1}};await t()}async syncEvents(){if(!this.state.essential.consentApproved||!this.shopifyAnalyticsId||this.state.analytics.queue.length===0)return;const t=this.state.analytics.queue.length,e=this.state.analytics.queue.splice(0,t);this.log("Syncing %s events",t);try{const i={shop:this.shop,visitorDetails:{shopifyAnalyticsId:this.shopifyAnalyticsId,device:this.state.analytics.visitor?.device??this.device,country:this.state.analytics.visitor?.country??null,...this.state.essential.initialState},events:this.state.essential.visitorTests.filter(r=>!r.isInvalid&&!r.isSaved&&r.hypothesisId!=null).map(r=>new yt(r.testId,r.hypothesisId,r.createdAt)).concat(e)};await this.sendEvents(i);for(const r of this.state.essential.visitorTests.filter(n=>!n.isInvalid&&!n.isSaved&&n.hypothesisId!=null))this.sendDiagnosticTelemetry("event-delivered",r.testId,{hypothesisId:r.hypothesisId,isControl:r.assignedTo==="control",testType:r.testType??"unknown"});const s=await this.getVisitor(this.shopifyAnalyticsId);s!==null&&this.updateLocalVisitor(s);for(const r of this.state.essential.visitorTests.filter(n=>!n.isInvalid&&!n.isSaved))r.isSaved=!0,r.savedAt=Date.now()}catch{this.state.analytics.queue.splice(0,0,...e)}finally{this.saveState()}}syncGAEvents(){if(!this.gaConfig.sendEvents){if(pt)return;pt=!0,this.log("UseGtag is false â skipping GA Events");return}if(this.isSyncingGA){this.log("Already syncing GA - skipping GA events");return}const t=this.state.essential.visitorTests.filter(e=>e.shouldSendToGa);t.length!==0&&(this.isSyncingGA=!0,this.log("Syncing %s GA Events",t.length),Promise.allSettled(t.map(e=>this.sendGAEvent(e))).then(()=>this.log("All gtag events sent")).finally(()=>this.isSyncingGA=!1))}sendGAEvent(t){return new Promise(e=>{this.log("Sending GA Event for test %s, hypothesis %s",t.testId,t.hypothesisId);const i=()=>{this.log("GA acknowledged event for hypothesis %s",t.hypothesisId),t.shouldSendToGa=!1,this.persistEssentialState(),e()},s={exp_variant_string:`SL-${t.testId}-${t.hypothesisId}`};
18this.shopliftDebug&&Object.assign(s,{debug_mode:!0});function r(n,o,l){window.dataLayer=window.dataLayer||[],window.dataLayer.push(arguments)}this.gaConfig.mode==="gtag"?r("event","experience_impression",{...s,event_callback:i}):(window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"experience_impression",...s,eventCallback:i}))})}updateLocalVisitor(t){let e;({visitorTests:e,...this.state.analytics.visitor}=t),this.log("updateLocalVisitor - server returned %d tests: %o",e.length,e.map(s=>({testId:s.testId,hypothesisId:s.hypothesisId,isInvalid:s.isInvalid}))),this.log("updateLocalVisitor - local has %d tests: %o",this.state.essential.visitorTests.length,this.state.essential.visitorTests.map(s=>({testId:s.testId,hypothesisId:s.hypothesisId,isSaved:s.isSaved,isInvalid:s.isInvalid})));const i=300*1e3;for(const s of this.state.essential.visitorTests.filter(r=>r.isSaved&&(!r.savedAt||Date.now()-r.savedAt>i)&&!e.some(n=>n.testId===r.testId)))this.log("updateLocalVisitor - marking LOCAL test as INVALID (isSaved && not in server): testId=%s, hypothesisId=%s",s.testId,s.hypothesisId),s.isInvalid=!0;for(const s of e){const r=this.state.essential.visitorTests.findIndex(o=>o.testId===s.testId);if(!(r!==-1))this.log("updateLocalVisitor - ADDING server test (not found locally): testId=%s, hypothesisId=%s",s.testId,s.hypothesisId),this.state.essential.visitorTests.push(s);else{const o=this.state.essential.visitorTests.at(r);this.log("updateLocalVisitor - REPLACING local test with server test: testId=%s, local hypothesisId=%s -> server hypothesisId=%s, local isInvalid=%s -> false",s.testId,o?.hypothesisId,s.hypothesisId,o?.isInvalid),s.isInvalid=!1,s.shouldSendToGa=o?.shouldSendToGa??!1,s.testType=o?.testType,s.assignedTo=o?.assignedTo,s.testTitle=o?.testTitle,this.state.essential.visitorTests.splice(r,1,s)}}this.log("updateLocalVisitor - FINAL local tests: %o",this.state.essential.visitorTests.map(s=>({testId:s.testId,hypothesisId:s.hypothesisId,isSaved:s.isSaved,isInvalid:s.isInvalid}))),this.state.analytics.visitor.storedAt=new Date}async getVisitor(t){try{return await this.makeJsonRequest({method:"get",url:`${this.eventHost}/api/v0/visitors/by-key/${this.shop}/${t}`})}catch{return null}}async sendEvents(t){await this.makeRequest({method:"post",url:`${this.eventHost}/api/v0/events`,data:JSON.stringify(t)})}sendDiagnosticTelemetry(t,e,i){if(!this.telemetryEnabled||!navigator.sendBeacon)return;const s=this.state.essential.consentApproved,r=JSON.stringify({shop:this.shop,testId:e,checkpoint:t,device:this.device,...s?{visitorId:this.shopifyAnalyticsId??"unknown"}:{},clientTimestamp:Date.now(),consentApproved:s,hasConsentInteraction:this.state.essential.hasConsentInteraction,...i});navigator.sendBeacon(`${this.eventHost}/api/v0/telemetry`,new Blob([r],{type:"text/plain"}))}getUTMValue(t){const i=decodeURIComponent(window.location.search.substring(1)).split("&");for(let s=0;s<i.length;s++){const r=i[s].split("=");if(r[0]===t)return r[1]||null}return null}hidePage(t){this.log("Hiding page"),this.cssHideClass&&!window.document.documentElement.classList.contains(this.cssHideClass)&&(window.document.documentElement.classList.add(this.cssHideClass),t||setTimeout(this.removeAsyncHide(this.cssHideClass),2e3))}showPage(){this.cssHideClass&&this.removeAsyncHide(this.cssHideClass)()}getDeviceType(){function t(){let i=!1;return(function(s){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(s)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|
18sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(s.substr(0,4)))&&(i=!0)})(navigator.userAgent||navigator.vendor),i}function e(){let i=!1;return(function(s){(/android|ipad|playbook|silk/i.test(s)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(s.substr(0,4)))&&(i=!0)})(navigator.userAgent||navigator.vendor),i}return t()?"mobile":e()?"tablet":"desktop"}removeAsyncHide(t){return()=>{t&&window.document.documentElement.classList.remove(t)}}async getCartState(){try{let t=await this.makeJsonRequest({method:"get",url:`${window.location.origin}/cart.js`});return t===null||(t.note===null&&(t=await this.makeJsonRequest({method:"post",url:`${window.location.origin}/cart/update.js`,data:JSON.stringify({note:""})})),t==null)?null:{token:t.token,total_price:t.total_price,total_discount:t.total_discount,currency:t.currency,items_subtotal_price:t.items_subtotal_price,items:t.items.map(e=>({quantity:e.quantity,variant_id:e.variant_id,key:e.key,price:e.price,final_line_price:e.final_line_price,sku:e.sku,product_id:e.product_id}))}}catch(t){return this.log("Error sending cart info",t),null}}ensureCartAttributesForExistingPriceTests(t){try{if(this.log("Checking visitor assignments for active price tests"),t&&this.state.temporary.previewConfig){const e=this.state.temporary.previewConfig;this.log("Using preview config for merchant:",e.testId);let i="variant";if(e.variants&&e.variants.length>0){const s=e.variants.find(r=>r.id===e.currentVariant);s&&s.isControl&&(i="control")}this.log("Merchant preview - updating hidden inputs:",e.testId,i),this.updatePriceTestHiddenInputs(e.testId,i,!0);return}for(const e of this.state.essential.visitorTests){const i=this.testConfigs.find(n=>n.id===e.testId);if(!i){this.log("Test config not found:",e.testId);continue}const s=i.hypotheses.find(n=>n.id===e.hypothesisId);if(!s||s.type!=="price")continue;const r=s.isControl?"control":"variant";this.log("Updating hidden inputs for price test:",e.testId,r),this.updatePriceTestHiddenInputs(e.testId,r,t)}}catch(e){this.log("Error ensuring cart attributes for existing price tests:",e)}}subscriptionSwapDone=!1;subscriptionHideWrongPlans=null;subscriptionPriceDone=!1;subscriptionUpdateOneTime=null;subscriptionOneTimeDone=!1;swapMap=null;slptValue=null;async subscriptionSwap(){await Lt(this)}async subscriptionPriceChange(){await qt(this)}async subscriptionOneTimePrice(){await Ht(this)}
18updatePriceTestHiddenInputs(t,e,i){try{this.cleanupPriceTestObservers();const s=`${t}:${e}:${i?"t":"f"}`,r=C=>{const m=C.getAttribute("data-sl-pid");if(!m)return!0;if(i&&this.state.temporary.previewConfig){const w=this.state.temporary.previewConfig,T=e==="control"?"a":"b",f=w.variants.find(v=>v.label===T);if(!f)return!1;for(const v of f.domSelectors||[]){const g=v.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);if(g){const I=g[1];if(this.log(`Extracted ID from selector: ${I}, comparing to: ${m}`),I===m)return this.log("Product ID match found in preview config:",m,"variant:",f.label),!0}else this.log(`Could not extract ID from selector: ${v.cssSelector}`)}return this.log("No product ID match in preview config for:",m,"variant:",T),!1}const y=this.testConfigs.find(w=>w.id===t);if(!y)return this.log("Test config not found for testId:",t),!1;for(const w of y.hypotheses||[]){for(const T of w.domSelectors||[]){const f=T.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);if(f&&f[1]===m)return this.log("Product ID match found in domSelectors:",m,"for test:",t),!0}if(w.priceData?.variants){for(const T of w.priceData.variants)if(T[0]===m)return this.log("Product ID match found in priceData:",m,"for test:",t),!0}}return this.log("No product ID match for:",m,"in test:",t),!1},n=new Set;let o=!1,l=null;const c=(C,m)=>{if(document.querySelectorAll("[data-sl-attribute-p]").forEach(w=>{if(w instanceof Element&&w.nodeType===Node.ELEMENT_NODE&&w.isConnected&&document.contains(w))try{C.observe(w,{childList:!0,subtree:!0,characterData:!0,characterDataOldValue:!0,attributes:!1})}catch(T){this.log(`Failed to observe element (${m}):`,T)}}),document.body&&document.body.isConnected)try{C.observe(document.body,{childList:!0,subtree:!0,characterData:!0,characterDataOldValue:!0,attributes:!1})}catch(w){this.log(`Failed to observe document.body (${m}):`,w)}},d=(C,m,y,w)=>{const T=C.filter(f=>{const v=f.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);return v&&v[1]===w});this.log(`Applying ${y} DOM selectors, total: ${C.length}, filtered: ${T.length}`),T.length>0&&U(document,{testId:t,hypothesisId:m,selectors:T})},p=(C,m)=>{this.log(`Applying DOM selector changes for product ID: ${C}`),m.disconnect(),o=!0;try{if(i&&this.state.temporary.previewConfig){const y=e==="control"?"a":"b",w=this.state.temporary.previewConfig.variants.find(T=>T.label===y);if(!w?.domSelectors){this.log(`No DOM selectors found for preview variant: ${y}`);return}d(w.domSelectors,w.id,"preview config",C)}else{const y=this.testConfigs.find(T=>T.id===t);if(!y){this.log(`No test config found for testId: ${t}`);return}const w=y.hypotheses.find(T=>e==="control"?T.isControl:!T.isControl);if(!w?.domSelectors){this.log(`No DOM selectors found for assignment: ${e}`);return}d(w.domSelectors,w.id,"live config",C)}}finally{l!==null&&clearTimeout(l),l=window.setTimeout(()=>{o=!1,l=null,c(m,"reconnection"),this.log("Re-established innerHTML observer after DOM changes")},50)}},h=new MutationObserver(C=>{if(!o)for(const m of C){if(m.type!=="childList"&&m.type!=="characterData")continue;let y=m.target;m.type==="characterData"&&(y=m.target.parentElement||m.target.parentNode);let w=y,T=w.getAttribute("data-sl-attribute-p");for(;!T&&w.parentElement;)w=w.parentElement,T=w.getAttribute("data-sl-attribute-p");if(!T)continue;const f=w.innerHTML||w.textContent||"";let v="";m.type==="characterData"&&m.oldValue!==null&&(v=m.oldValue),this.log(`innerHTML changed on element with data-sl-attribute-p="${T}"`),v&&this.log(`Previous content: "${v}"`),this.log(`Current content: "${f}"`),p(T,h)}});c(h,"initial setup"),n.add(h);const u=new MutationObserver(C=>{C.forEach(m=>{m.addedNodes.forEach(y=>{if(y.nodeType===Node.ELEMENT_NODE){const w=y;k(w);const T=w.matches('input[name="properties[_slpt]"]')?[w]:w.querySelectorAll('input[name="properties[_slpt]"]');T.length>0&&this.log(`MutationObserver found ${T.length} new hidden input(s)`),T.forEach(f=>{const v=f.getAttribute("data-sl-pid");if(this.log(`MutationObserver checking new input with data-sl-pid="${v}"`),r(f))f.value!==s&&(f.value=s,this.log("Updated newly added hidden input:",s)),S(f);else{const g=f.getAttribute("data-sl-pid");g&&this.isProductInAnyPriceTest(g)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",g):(f.remove(),this.log("Removed newly added non-matching hidden input for product ID:",g))}})}})})});n.add(u);const b=new MutationObserver(C=>
18{C.forEach(m=>{if(m.type==="attributes"&&m.attributeName==="data-sl-pid"){const y=m.target;if(this.log("AttributeObserver detected data-sl-pid attribute change on:",y.tagName),y.matches('input[name="properties[_slpt]"]')){const w=y,T=m.oldValue,f=w.getAttribute("data-sl-pid");this.log(`data-sl-pid changed from "${T}" to "${f}" - triggering payment placement updates`),r(w)?(w.value!==s&&(w.value=s,this.log("Updated hidden input after data-sl-pid change:",s)),f&&p(f,h),this.log("Re-running payment placement updates after variant change"),k(document.body)):f&&this.isProductInAnyPriceTest(f)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",f):(w.remove(),this.log("Removed non-matching hidden input after data-sl-pid change:",f))}}})});n.add(b);const k=C=>{C.tagName==="SHOPIFY-PAYMENT-TERMS"&&(this.log("MutationObserver found new shopify-payment-terms element"),this.updateShopifyPaymentTerms(t,e));const m=C.querySelectorAll("shopify-payment-terms");m.length>0&&(this.log(`MutationObserver found ${m.length} shopify-payment-terms in added node`),this.updateShopifyPaymentTerms(t,e)),C.tagName==="AFTERPAY-PLACEMENT"&&(this.log("MutationObserver found new afterpay-placement element"),this.updateAfterpayPlacements(t,e,"afterpay"));const y=C.querySelectorAll("afterpay-placement");y.length>0&&(this.log(`MutationObserver found ${y.length} afterpay-placement in added node`),this.updateAfterpayPlacements(t,e,"afterpay")),C.tagName==="SQUARE-PLACEMENT"&&(this.log("MutationObserver found new square-placement element"),this.updateAfterpayPlacements(t,e,"square"));const w=C.querySelectorAll("square-placement");w.length>0&&(this.log(`MutationObserver found ${w.length} square-placement in added node`),this.updateAfterpayPlacements(t,e,"square")),C.tagName==="KLARNA-PLACEMENT"&&(this.log("MutationObserver found new klarna-placement element"),this.updateKlarnaPlacements(t,e));const T=C.querySelectorAll("klarna-placement");T.length>0&&(this.log(`MutationObserver found ${T.length} klarna-placement in added node`),this.updateKlarnaPlacements(t,e))},S=C=>{b.observe(C,{attributes:!0,attributeFilter:["data-sl-pid"],attributeOldValue:!0,subtree:!1});const m=C.getAttribute("data-sl-pid");this.log(`Started AttributeObserver on specific input with data-sl-pid="${m}"`)},P=()=>{const C=document.querySelectorAll('input[name="properties[_slpt]"]');this.log(`Found ${C.length} existing hidden inputs to check`),C.forEach(m=>{const y=m.getAttribute("data-sl-pid");this.log(`Checking existing input with data-sl-pid="${y}"`),r(m)?(m.value=s,this.log("Updated existing hidden input:",s),y&&(this.log("Applying initial DOM selector changes for existing product"),p(y,h)),S(m)):y&&this.isProductInAnyPriceTest(y)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",y):(m.remove(),this.log("Removed non-matching hidden input for product ID:",y))})},_=()=>{document.body?(u.observe(document.body,{childList:!0,subtree:!0}),this.log("Started MutationObserver on document.body"),P(),k(document.body)):document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{document.body&&(u.observe(document.body,{childList:!0,subtree:!0}),this.log("Started MutationObserver after DOMContentLoaded"),P(),k(document.body))}):(this.log("Set timeout on observer"),setTimeout(_,10))};_(),window.__shopliftPriceTestObservers=n,window.__shopliftPriceTestValue=s,this.log("Set up DOM observer for price test hidden inputs")}catch(s){this.log("Error updating price test hidden inputs:",s)}}updateKlarnaPlacements(t,e){this.updatePlacementElements(t,e,"klarna-placement",(i,s)=>{i.setAttribute("data-purchase-amount",s.toString())})}cleanupPriceTestObservers(){const t=window.__shopliftPriceTestObservers;t&&(t.forEach(e=>{e.disconnect()}),t.clear(),this.log("Cleaned up existing price test observers")),delete window.__shopliftPriceTestObservers,delete window.__shopliftPriceTestValue}updateAfterpayPlacements(t,e,i="afterpay"){const s=i==="square"?"square-placement":"afterpay-placement";if(document.querySelectorAll(s).length===0){this.log(`No ${s} elements found on page - early return`);return}this.updatePlacementElements(t,e,s,(n,o)=>
18{if(i==="afterpay"){const l=(o/100).toFixed(2);n.setAttribute("data-amount",l)}else n.setAttribute("data-amount",o.toString())}),this.log("updateAfterpayPlacements completed")}updatePlacementElements(t,e,i,s){const r=document.querySelectorAll(i);if(r.length===0){this.log(`No ${i} elements found - early return`);return}let n;if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const l=e==="control"?"a":"b",c=this.state.temporary.previewConfig.variants.find(d=>d.label===l);if(!c?.domSelectors){this.log(`No variant found for label ${l} in preview config for ${i}`);return}n=c.domSelectors,this.log(`Using preview config for ${i} in merchant mode, variant: ${l}`)}else{const l=this.testConfigs.find(d=>d.id===t);if(!l){this.log(`No testConfig found for id: ${t} - early return`);return}const c=l.hypotheses.find(d=>e==="control"?d.isControl:!d.isControl);if(!c?.domSelectors){this.log(`No hypothesis or domSelectors found for assignment: ${e} - early return`);return}n=c.domSelectors}const o=new RegExp(`${this.DATA_SL_ATTRIBUTE_P}=["'](\\d+)["']`);r.forEach(l=>{let c=null;const d=l.parentElement;if(d&&(c=d.querySelector('input[name="properties[_slpt]"]')),c||(c=l.querySelector('input[name="properties[_slpt]"]')),!c){this.log(`No hidden input found for ${i} element`);return}const p=c.getAttribute("data-sl-pid");if(!p){this.log("Hidden input has no data-sl-pid attribute - skipping");return}const h=n.find(S=>{const P=S.cssSelector.match(o);return P&&P[1]===p});if(!h){this.log(`No matching selector found for productId: ${p} - skipping element`);return}const u=h.actions.find(S=>S.scope==="price");if(!u?.value){this.log("No price action or value found - skipping element");return}const b=parseFloat(u.value.replace(/[^0-9.]/g,""));if(Number.isNaN(b)){this.log(`Invalid price "${u.value}" for product ${p} - skipping`);return}const k=Math.round(b*100);s(l,k)}),this.log(`updatePlacementElements completed for ${i}`)}updateShopifyPaymentTerms(t,e){const i=document.querySelectorAll("shopify-payment-terms");if(i.length===0)return;this.log("Store using shopify payments");let s;if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const n=e==="control"?"a":"b",o=this.state.temporary.previewConfig.variants.find(l=>l.label===n);if(!o||!o.domSelectors){this.log(`No variant found for label ${n} in preview config`);return}s=o.domSelectors,this.log(`Using preview config for shopify-payment-terms in merchant mode, variant: ${n}`)}else{const n=this.testConfigs.find(l=>l.id===t);if(!n)return;const o=n.hypotheses.find(l=>e==="control"?l.isControl===!0:l.isControl===!1);if(!o||!o.domSelectors)return;s=o.domSelectors}const r=new RegExp(`${this.DATA_SL_ATTRIBUTE_P}=["'](\\d+)["']`);i.forEach(n=>{const o=n.getAttribute("variant-id");if(!o)return;const l=s.find(c=>{const d=c.cssSelector.match(r);return d&&d[1]===o});if(l){const c=l.actions.find(d=>d.scope==="price");if(c&&c.value){const d=n.getAttribute("shopify-meta");if(d)try{const p=JSON.parse(d);if(p.variants&&Array.isArray(p.variants)){const h=p.variants.find(u=>u.id?.toString()===o);if(h){h.full_price=c.value;const u=parseFloat(c.value.replace(/[^0-9.]/g,""));if(h.number_of_payment_terms&&h.number_of_payment_terms>1){const b=u/h.number_of_payment_terms;h.price_per_term=`$${b.toFixed(2)}`}n.setAttribute("shopify-meta",JSON.stringify(p))}}}catch(p){this.log("Error parsing/updating shoplift-meta:",p)}}}})}async makeJsonRequest(t){const e=await this.makeRequest(t);return e===null?null:JSON.parse(await e.text(),F)}async makeRequest(t){const{url:e,method:i,headers:s,data:r,signal:n}=t,o=new Headers;if(s)for(const c in s)o.append(c,s[c]);(!s||!s.Accept)&&o.append("Accept","application/json"),(!s||!s["Content-Type"])&&o.append("Content-Type","application/json"),(this.eventHost.includes("ngrok.io")||this.eventHost.includes("ngrok-free.app"))&&o.append("ngrok-skip-browser-warning","1234");const l=await this.fetch(e,{method:i,headers:o,body:r,signal:n});if(!l.ok){if(l.status===204)return null;if(l.status===422){const c=await l.json();if(typeof c<"u"&&c.isBot)throw new et}throw new Error(`Error sending shoplift request ${l.status}`)}return l}queueAddVisitorToTest(t,e){if(this.state.essential.visitorTests.some(s=>s.testId===t))return;const i=this.testConfigs.find(s=>s.id===t);if(this.state.essential.visitorTests.push({createdAt:new Date,testId:t,hypothesisId:e.id,isThemeTest:e.type==="theme",themeId:e.themeId,isSaved:!1,isInvalid:!1,shouldSe
18ndToGa:!0,testType:e.type,assignedTo:e.isControl?"control":"variant",testTitle:i?.title}),e.type==="price"){const s=e.isControl?"control":"variant";this.log("Price test assignment detected, updating cart attributes:",t,s),this.updatePriceTestHiddenInputs(t,s,!1)}}queueCartUpdate(t){this.queueEvent(new wt(t))}queuePageView(t){this.queueEvent(new vt(t))}queueEvent(t){!this.state.essential.consentApproved&&this.state.essential.hasConsentInteraction||this.state.analytics.queue.length>10||this.state.analytics.queue.push(t)}legacyGetLocalStorageVisitor(){const t=this.localStorageGet(this.legacySessionKey);if(t)try{return JSON.parse(t,F)}catch{}return null}pruneStaleVisitorTests(){this.state.essential.visitorTests=this.state.essential.visitorTests.filter(t=>this.testConfigs.some(e=>e.id==t.testId)||this.inactiveTestConfigs.filter(e=>this.testIsPaused(e)).some(e=>e.id===t.testId))}pruneStateAndSave(){this.pruneStaleVisitorTests(),this.saveState()}saveState(){this.persistEssentialState(),this.persistAnalyticsState()}loadState(){const t=this.loadAnalyticsState(),e={analytics:t,essential:this.loadEssentialState(t),temporary:this.loadTemporaryState()},i=this.legacyGetLocalStorageVisitor(),s=this.legacyGetCookieVisitor(),r=[i,s].filter(n=>n!==null).sort((n,o)=>+o.storedAt-+n.storedAt)[0];return e.analytics.visitor===null&&r&&({visitorTests:e.essential.visitorTests,...e.analytics.visitor}=r,e.essential.isFirstLoad=!1,e.essential.initialState={createdAt:r.createdAt,referrer:r.referrer,utmCampaign:r.utmCampaign,utmContent:r.utmContent,utmMedium:r.utmMedium,utmSource:r.utmSource,device:r.device},this.deleteCookie("SHOPLIFT"),this.deleteLocalStorage(this.legacySessionKey)),!e.essential.consentApproved&&e.essential.hasConsentInteraction&&this.deleteLocalStorage(this.analyticsSessionKey),e}loadEssentialState(t){const e=this.loadLocalStorage(this.essentialSessionKey),i=this.loadCookie(this.essentialSessionKey),s=this.getInitialState();t.visitor?.device&&(s.device=t.visitor.device);const r={timestamp:new Date,consentApproved:!1,hasConsentInteraction:!1,debugMode:!1,initialState:s,visitorTests:[],isFirstLoad:!0},n=[e,i].filter(o=>o!==null).sort((o,l)=>+l.timestamp-+o.timestamp)[0]??r;return n.initialState||(t.visitor!==null?n.initialState=t.visitor:(n.initialState=s,n.initialState.createdAt=n.timestamp)),n}loadAnalyticsState(){const t=this.loadLocalStorage(this.analyticsSessionKey),e=this.loadCookie(this.analyticsSessionKey),i={timestamp:new Date,visitor:null,queue:[]},s=[t,e].filter(r=>r!==null).sort((r,n)=>+n.timestamp-+r.timestamp)[0]??i;return s.queue.length===0&&t&&t.queue.length>1&&(s.queue=t.queue),s}loadTemporaryState(){const t=this.sessionStorageGet(this.temporarySessionKey),e=t?JSON.parse(t,F):null,i=this.loadCookie(this.temporarySessionKey);return e??i??{isMerchant:!1,timestamp:new Date}}persistEssentialState(){this.log("Persisting essential state"),this.state.essential.isFirstLoad=!1,this.state.essential.timestamp=new Date,this.persistLocalStorageState(this.essentialSessionKey,this.state.essential),this.persistCookieState(this.essentialSessionKey,this.state.essential)}persistAnalyticsState(){this.log("Persisting analytics state"),this.state.essential.consentApproved&&(this.state.analytics.timestamp=new Date,this.persistLocalStorageState(this.analyticsSessionKey,this.state.analytics),this.persistCookieState(this.analyticsSessionKey,{...this.state.analytics,queue:[]}))}persistTemporaryState(){this.log("Setting temporary session state"),this.state.temporary.timestamp=new Date,this.sessionStorageSet(this.temporarySessionKey,JSON.stringify(this.state.temporary)),this.persistCookieState(this.temporarySessionKey,this.state.temporary,!0)}loadLocalStorage(t){const e=this.localStorageGet(t);if(e===null)return null;try{return JSON.parse(e,F)}catch{return null}}loadCookie(t){const e=this.getCookie(t);if(e===null)return null;try{return JSON.parse(e,F)}catch{return null}}persistLocalStorageState(t,e){this.localStorageSet(t,JSON.stringify(e))}persistCookieState(t,e,i=!1){const s=JSON.stringify(e),r=i?"":`expires=${new Date(new Date().getTime()+864e5*365).toUTCString()};`;document.cookie=`${t}=${s};domain=.${window.location.hostname};path=/;SameSite=Strict;${r}`}deleteCookie(t){const e=new Date(0).toUTCString();document.cookie=`${t}=;domain=.${window.location.hostname};path=/;expires=${e};`}deleteLocalStorage(t){window.localStorage.removeItem(t)}getChannel(t){return[{"name":"cross-network","test":(v) => new RegExp(".*cross-network.*", "i").test(v.utmCampaign)}
18,{"name":"direct","test":(v) => v.utmSource === "" && v.utmMedium === ""},{"name":"paid-shopping","test":(v) => (new RegExp("^(?:Google|IGShopping|aax-us-east\.amazon-adsystem\.com|aax\.amazon-adsystem\.com|alibaba|alibaba\.com|amazon|amazon\.co\.uk|amazon\.com|apps\.shopify\.com|checkout\.shopify\.com|checkout\.stripe\.com|cr\.shopping\.naver\.com|cr2\.shopping\.naver\.com|ebay|ebay\.co\.uk|ebay\.com|ebay\.com\.au|ebay\.de|etsy|etsy\.com|m\.alibaba\.com|m\.shopping\.naver\.com|mercadolibre|mercadolibre\.com|mercadolibre\.com\.ar|mercadolibre\.com\.mx|message\.alibaba\.com|msearch\.shopping\.naver\.com|nl\.shopping\.net|no\.shopping\.net|offer\.alibaba\.com|one\.walmart\.com|order\.shopping\.yahoo\.co\.jp|partners\.shopify\.com|s3\.amazonaws\.com|se\.shopping\.net|shop\.app|shopify|shopify\.com|shopping\.naver\.com|shopping\.yahoo\.co\.jp|shopping\.yahoo\.com|shopzilla|shopzilla\.com|simplycodes\.com|store\.shopping\.yahoo\.co\.jp|stripe|stripe\.com|uk\.shopping\.net|walmart|walmart\.com)$", "i").test(v.utmSource) || new RegExp("^(.*(([^a-df-z]|^)shop|shopping).*)$", "i").test(v.utmCampaign)) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-search","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|yandex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-social","test":(v) => new RegExp("^(?:43things|43things\.com|51\.com|5ch\.net|Hatena|ImageShack|academia\.edu|activerain|activerain\.com|activeworlds|activeworlds\.com|addthis|addthis\.com|airg\.ca|allnurses\.com|allrecipes\.com|alumniclass|alumniclass\.com|ameba\.jp|ameblo\.jp|americantowns|americantowns\.com|amp\.reddit\.com|ancestry\.com|anobii|anobii\.com|answerbag|answerbag\.com|answers\.yahoo\.com|aolanswers|aolanswers\.com|apps\.facebook\.com|ar\.pinterest\.com|artstation\.com|askubuntu|askubuntu\.com|asmallworld\.com|athlinks|athlinks\.com|away\.vk\.com|awe\.sm|b\.hatena\.ne\.jp|baby-gaga|baby-gaga\.com|babyblog\.ru|badoo|badoo\.com|bebo|bebo\.com|beforeitsnews|beforeitsnews\.com|bharatstudent|bharatstudent\.com|biip\.no|biswap\.org|bit\.ly|blackcareernetwork\.com|blackplanet|blackplanet\.com|blip\.fm|blog\.com|blog\.feedspot\.com|blog\.goo\.ne\.jp|blog\.naver\.com|blog\.yahoo\.co\.jp|blogg\.no|bloggang\.com|blogger|blogger\.com|blogher|blogher\.com|bloglines|bloglines\.com|blogs\.com|blogsome|blogsome\.com|blogspot|blogspot\.com|blogster|blogster\.com|blurtit|blurtit\.com|bookmarks\.yahoo\.co\.jp|bookmarks\.yahoo\.com|br\.pinterest\.com|brightkite|brightkite\.com|brizzly|brizzly\.com|business\.facebook\.com|buzzfeed|buzzfeed\.com|buzznet|buzznet\.com|cafe\.naver\.com|cafemom|cafemom\.com|camospace|camospace\.com|canalblog\.com|care\.com|care2|care2\.com|caringbridge\.org|catster|catster\.com|cbnt\.io|cellufun|cellufun\.com|centerblog\.net|chat\.zalo\.me|chegg\.com|chicagonow|chicagonow\.com|chiebukuro\.yahoo\.co\.jp|classmates|classmates\.com|classquest|classquest\.com|co\.pinterest\.com|cocolog-nifty|cocolog-nifty\.com|copainsdavant\.linternaute\.com|couchsurfing\.org|cozycot|cozycot\.com|cross\.tv|crunchyroll|crunchyroll\.com|cyworld|cyworld\.com|cz\.pinterest\.com|d\.hatena\.ne\.jp|dailystrength\.org|deluxe\.com|deviantart|deviantart\.com|dianping|dianping\.com|digg|digg\.com|diigo|diigo\.com|discover\.hubpages\.com|disqus|disqus\.com|dogster|dogster\.com|dol2day|dol2day\.com|doostang|doostang\.com|dopplr|dopplr\.com|douban|douban\.com|draft\.blogger\.com|draugiem\.lv|drugs-forum|drugs-forum\.com|dzone|dzone\.com|edublogs\.org|elftown|elftown\.com|epicurious\.com|everforo\.com|exblog\.jp|extole|extole\.com|facebook|facebook\.com|faceparty|faceparty\.com|fandom\.com|fanpop|fanpop\.com|fark|fark\.com|fb|fb\.me|fc2|fc2\.com|feedspot|feministing|feministing\.com|filmaffinity|filmaffinity\.com|flickr|flickr\.com|flipboard|flipboard\.com|folkdirect|folkdirect\.com|foodservice|foodservice\.com|forums\.androidcentral\.com|forums\.crackberry\.com|forums\.imore\.com|forums\.nexopia\.com|forums\.webosnation\.com|forums\.wpcentral\.com|fotki|fotki\.com|fotolog|fotolog\.com|foursquare|foursquare\.com|free\.facebook\.com|friendfeed|friendfeed\.com|fruehstueckstreff\.org|fubar|fubar\.com|gaiaonline|gaiaonline\.com|gamerdna|gamerdna\.com|gather\.com|geni\.com|getpocket\.com|glassboard|glassboard\.com|glassdoor|glassdoor\.com|godtube|godtube\.com|goldenline\.pl|goldstar|goldstar\.com|goo\.gl|gooblog|goodreads|goodreads\.com|google\+|googlegroups\.com|googleplus|govloop|govloop\.com|gowalla|gowalla\.com|gree\.jp|groups\.google\.com|gulli\.com|gutefrage\.net|habbo|habbo\.com|hi5|hi5\.com|hootsuite|hootsuite\.com|houzz|houzz\.com|hoverspot|hoverspot\.com|hr\.com|hu\.pinterest\.com|hubculture|hubculture\.com|hubpages\.com|hyves\.net|hyves\.nl|ibibo|ibibo\.com|id\.pinterest\.com|identi\.ca|ig|imageshack\.com|imageshack\.us|imvu|imvu\.com|in\.pinterest\.com|insanejournal|insanejournal\.com|instagram|instagram\.com|instapaper|instapaper\.com|internations\.org|interpals\.net|intherooms|intherooms\.com|irc-galleria\.net|is\.gd|italki|italki\.com|jammerdirect|jammerdirect\.com|jappy\.com|jappy\.de|kaboodle\.com|k
18akao|kakao\.com|kakaocorp\.com|kaneva|kaneva\.com|kin\.naver\.com|l\.facebook\.com|l\.instagram\.com|l\.messenger\.com|last\.fm|librarything|librarything\.com|lifestream\.aol\.com|line|line\.me|linkedin|linkedin\.com|listal|listal\.com|listography|listography\.com|livedoor\.com|livedoorblog|livejournal|livejournal\.com|lm\.facebook\.com|lnkd\.in|m\.blog\.naver\.com|m\.cafe\.naver\.com|m\.facebook\.com|m\.kin\.naver\.com|m\.vk\.com|m\.yelp\.com|mbga\.jp|medium\.com|meetin\.org|meetup|meetup\.com|meinvz\.net|meneame\.net|menuism\.com|messages\.google\.com|messages\.yahoo\.co\.jp|messenger|messenger\.com|mix\.com|mixi\.jp|mobile\.facebook\.com|mocospace|mocospace\.com|mouthshut|mouthshut\.com|movabletype|movabletype\.com|mubi|mubi\.com|my\.opera\.com|myanimelist\.net|myheritage|myheritage\.com|mylife|mylife\.com|mymodernmet|mymodernmet\.com|myspace|myspace\.com|netvibes|netvibes\.com|news\.ycombinator\.com|newsshowcase|nexopia|ngopost\.org|niconico|nicovideo\.jp|nightlifelink|nightlifelink\.com|ning|ning\.com|nl\.pinterest\.com|odnoklassniki\.ru|odnoklassniki\.ua|okwave\.jp|old\.reddit\.com|oneworldgroup\.org|onstartups|onstartups\.com|opendiary|opendiary\.com|oshiete\.goo\.ne\.jp|out\.reddit\.com|over-blog\.com|overblog\.com|paper\.li|partyflock\.nl|photobucket|photobucket\.com|pinboard|pinboard\.in|pingsta|pingsta\.com|pinterest|pinterest\.at|pinterest\.ca|pinterest\.ch|pinterest\.cl|pinterest\.co\.kr|pinterest\.co\.uk|pinterest\.com|pinterest\.com\.au|pinterest\.com\.mx|pinterest\.de|pinterest\.es|pinterest\.fr|pinterest\.it|pinterest\.jp|pinterest\.nz|pinterest\.ph|pinterest\.pt|pinterest\.ru|pinterest\.se|pixiv\.net|pl\.pinterest\.com|playahead\.se|plurk|plurk\.com|plus\.google\.com|plus\.url\.google\.com|pocket\.co|posterous|posterous\.com|pro\.homeadvisor\.com|pulse\.yahoo\.com|qapacity|qapacity\.com|quechup|quechup\.com|quora|quora\.com|qzone\.qq\.com|ravelry|ravelry\.com|reddit|reddit\.com|redux|redux\.com|renren|renren\.com|researchgate\.net|reunion|reunion\.com|reverbnation|reverbnation\.com|rtl\.de|ryze|ryze\.com|salespider|salespider\.com|scoop\.it|screenrant|screenrant\.com|scribd|scribd\.com|scvngr|scvngr\.com|secondlife|secondlife\.com|serverfault|serverfault\.com|shareit|sharethis|sharethis\.com|shvoong\.com|sites\.google\.com|skype|skyrock|skyrock\.com|slashdot\.org|slideshare\.net|smartnews\.com|snapchat|snapchat\.com|social|sociallife\.com\.br|socialvibe|socialvibe\.com|spaces\.live\.com|spoke|spoke\.com|spruz|spruz\.com|ssense\.com|stackapps|stackapps\.com|stackexchange|stackexchange\.com|stackoverflow|stackoverflow\.com|stardoll\.com|stickam|stickam\.com|studivz\.net|suomi24\.fi|superuser|superuser\.com|sweeva|sweeva\.com|t\.co|t\.me|tagged|tagged\.com|taggedmail|taggedmail\.com|talkbiznow|talkbiznow\.com|taringa\.net|techmeme|techmeme\.com|tencent|tencent\.com|tiktok|tiktok\.com|tinyurl|tinyurl\.com|toolbox|toolbox\.com|touch\.facebook\.com|tr\.pinterest\.com|travellerspoint|travellerspoint\.com|tripadvisor|tripadvisor\.com|trombi|trombi\.com|trustpilot|tudou|tudou\.com|tuenti|tuenti\.com|tumblr|tumblr\.com|tweetdeck|tweetdeck\.com|twitter|twitter\.com|twoo\.com|typepad|typepad\.com|unblog\.fr|urbanspoon\.com|ushareit\.com|ushi\.cn|vampirefreaks|vampirefreaks\.com|vampirerave|vampirerave\.com|vg\.no|video\.ibm\.com|vk\.com|vkontakte\.ru|wakoopa|wakoopa\.com|wattpad|wattpad\.com|web\.facebook\.com|web\.skype\.com|webshots|webshots\.com|wechat|wechat\.com|weebly|weebly\.com|weibo|weibo\.com|wer-weiss-was\.de|weread|weread\.com|whatsapp|whatsapp\.com|wiki\.answers\.com|wikihow\.com|wikitravel\.org|woot\.com|wordpress|wordpress\.com|wordpress\.org|xanga|xanga\.com|xing|xing\.com|yahoo-mbga\.jp|yammer|yammer\.com|yelp|yelp\.co\.uk|yelp\.com|youroom\.in|za\.pinterest\.com|zalo|zoo\.gr|zooppa|zooppa\.com)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-video","test":(v) => new RegExp("^(?:blog\.twitch\.tv|crackle|crackle\.com|curiositystream|curiositystream\.com|d\.tube|dailymotion|dailymotion\.com|dashboard\.twitch\.tv|disneyplus|disneyplus\.com|fast\.wistia\.net|help\.hulu\.com|help\.netflix\.com|hulu|hulu\.com|id\.twitch\.tv|iq\.com|iqiyi|iqiyi\.com|jobs\.netflix\.com|justin\.tv|m\.twitch\.tv|m\.youtube\.com|music\.youtube\.com|netflix|netflix\.com|player\.twitch\.tv|player\.vimeo\.com|ted|ted\.com|twitch|twitch\.tv|utreon|utreon\.com|veoh|veoh\.com|viadeo\.journaldunet\.com|vimeo|vimeo\.com|wistia|wistia\.com|youku|youku\.com|youtube|youtube\.com)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"display","test":(v) =>
18 new RegExp("^(?:display|banner|expandable|interstitial|cpm)$", "i").test(v.utmMedium)},{"name":"paid-other","test":(v) => new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"organic-shopping","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|yandex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) || new RegExp("^(.*(([^a-df-z]|^)shop|shopping).*)$", "i").test(v.utmCampaign)},{"name":"organic-social","test":(v) => new RegExp("^(?:43things|43things\.com|51\.com|5ch\.net|Hatena|ImageShack|academia\.edu|activerain|activerain\.com|activeworlds|activeworlds\.com|addthis|addthis\.com|airg\.ca|allnurses\.com|allrecipes\.com|alumniclass|alumniclass\.com|ameba\.jp|ameblo\.jp|americantowns|americantowns\.com|amp\.reddit\.com|ancestry\.com|anobii|anobii\.com|answerbag|answerbag\.com|answers\.yahoo\.com|aolanswers|aolanswers\.com|apps\.facebook\.com|ar\.pinterest\.com|artstation\.com|askubuntu|askubuntu\.com|asmallworld\.com|athlinks|athlinks\.com|away\.vk\.com|awe\.sm|b\.hatena\.ne\.jp|baby-gaga|baby-gaga\.com|babyblog\.ru|badoo|badoo\.com|bebo|bebo\.com|beforeitsnews|beforeitsnews\.com|bharatstudent|bharatstudent\.com|biip\.no|biswap\.org|bit\.ly|blackcareernetwork\.com|blackplanet|blackplanet\.com|blip\.fm|blog\.com|blog\.feedspot\.com|blog\.goo\.ne\.jp|blog\.naver\.com|blog\.yahoo\.co\.jp|blogg\.no|bloggang\.com|blogger|blogger\.com|blogher|blogher\.com|bloglines|bloglines\.com|blogs\.com|blogsome|blogsome\.com|blogspot|blogspot\.com|blogster|blogster\.com|blurtit|blurtit\.com|bookmarks\.yahoo\.co\.jp|bookmarks\.yahoo\.com|br\.pinterest\.com|brightkite|brightkite\.com|brizzly|brizzly\.com|business\.facebook\.com|buzzfeed|buzzfeed\.com|buzznet|buzznet\.com|cafe\.naver\.com|cafemom|cafemom\.com|camospace|camospace\.com|canalblog\.com|care\.com|care2|care2\.com|caringbridge\.org|catster|catster\.com|cbnt\.io|cellufun|cellufun\.com|centerblog\.net|chat\.zalo\.me|chegg\.com|chicagonow|chicagonow\.com|chiebukuro\.yahoo\.co\.jp|classmates|classmates\.com|classquest|classquest\.com|co\.pinterest\.com|cocolog-nifty|cocolog-nifty\.com|copainsdavant\.linternaute\.com|couchsurfing\.org|cozycot|cozycot\.com|cross\.tv|crunchyroll|crunchyroll\.com|cyworld|cyworld\.com|cz\.pinterest\.com|d\.hatena\.ne\.jp|dailystrength\.org|deluxe\.com|deviantart|deviantart\.com|dianping|dianping\.com|digg|digg\.com|diigo|diigo\.com|discover\.hubpages\.com|disqus|disqus\.com|dogster|dogster\.com|dol2day|dol2day\.com|doostang|doostang\.com|dopplr|dopplr\.com|douban|douban\.com|draft\.blogger\.com|draugiem\.lv|drugs-forum|drugs-forum\.com|dzone|dzone\.com|edublogs\.org|elftown|elftown\.com|epicurious\.com|everforo\.com|exblog\.jp|extole|extole\.com|facebook|facebook\.com|faceparty|faceparty\.com|fandom\.com|fanpop|fanpop\.com|fark|fark\.com|fb|fb\.me|fc2|fc2\.com|feedspot|feministing|feministing\.com|filmaffinity|filmaffinity\.com|flickr|flickr\.com|flipboard|flipboard\.com|folkdirect|folkdirect\.com|foodservice|foodservice\.com|forums\.androidcentral\.com|forums\.crackberry\.com|forums\.imore\.com|forums\.nexopia\.com|forums\.webosnation\.com|forums\.wpcentral\.com|fotki|fotki\.com|fotolog|fotolog\.com|foursquare|foursquare\.com|free\.facebook\.com|friendfeed|friendfeed\.com|fruehstueckstreff\.org|fubar|fubar\.com|gaiaonline|gaiaonline\.com|gamerdna|gamerdna\.com|gather\.com|geni\.com|getpocket\.com|glassboard|glassboard\.com|glassdoor|glassdoor\.com|godtube|godtube\.com|goldenline\.pl|goldstar|goldstar\.com|goo\.gl|gooblog|goodreads|goodreads\.com|google\+|googlegroups\.com|googleplus|govloop|govloop\.com|gowalla|gowalla\.com|gree\.jp|groups\.google\.com|gulli\.com|gutefrage\.net|habbo|habbo\.com|hi5|hi5\.com|hootsuite|hootsuite\.com|houzz|houzz\.com|hoverspot|hoverspot\.com|hr\.com|hu\.pinterest\.com|hubculture|hubculture\.com|hubpages\.com|hyves\.net|hyves\.nl|ibibo|ibibo\.com|id\.pinterest\.com|identi\.ca|ig|imageshack\.com|imageshack\.us|imvu|imvu\.com|in\.pinterest\.com|insanejournal|insanejournal\.com|instagram|instagram\.com|instapaper|instapaper\.com|internations\.org|interpals\.net|intherooms|intherooms\.com|irc-galleria\.net|is\.gd|italki|italki\.com|jammerdirect|jammerdirect\.com|jappy\.com|jappy\.de|kaboodle\.com|k
18akao|kakao\.com|kakaocorp\.com|kaneva|kaneva\.com|kin\.naver\.com|l\.facebook\.com|l\.instagram\.com|l\.messenger\.com|last\.fm|librarything|librarything\.com|lifestream\.aol\.com|line|line\.me|linkedin|linkedin\.com|listal|listal\.com|listography|listography\.com|livedoor\.com|livedoorblog|livejournal|livejournal\.com|lm\.facebook\.com|lnkd\.in|m\.blog\.naver\.com|m\.cafe\.naver\.com|m\.facebook\.com|m\.kin\.naver\.com|m\.vk\.com|m\.yelp\.com|mbga\.jp|medium\.com|meetin\.org|meetup|meetup\.com|meinvz\.net|meneame\.net|menuism\.com|messages\.google\.com|messages\.yahoo\.co\.jp|messenger|messenger\.com|mix\.com|mixi\.jp|mobile\.facebook\.com|mocospace|mocospace\.com|mouthshut|mouthshut\.com|movabletype|movabletype\.com|mubi|mubi\.com|my\.opera\.com|myanimelist\.net|myheritage|myheritage\.com|mylife|mylife\.com|mymodernmet|mymodernmet\.com|myspace|myspace\.com|netvibes|netvibes\.com|news\.ycombinator\.com|newsshowcase|nexopia|ngopost\.org|niconico|nicovideo\.jp|nightlifelink|nightlifelink\.com|ning|ning\.com|nl\.pinterest\.com|odnoklassniki\.ru|odnoklassniki\.ua|okwave\.jp|old\.reddit\.com|oneworldgroup\.org|onstartups|onstartups\.com|opendiary|opendiary\.com|oshiete\.goo\.ne\.jp|out\.reddit\.com|over-blog\.com|overblog\.com|paper\.li|partyflock\.nl|photobucket|photobucket\.com|pinboard|pinboard\.in|pingsta|pingsta\.com|pinterest|pinterest\.at|pinterest\.ca|pinterest\.ch|pinterest\.cl|pinterest\.co\.kr|pinterest\.co\.uk|pinterest\.com|pinterest\.com\.au|pinterest\.com\.mx|pinterest\.de|pinterest\.es|pinterest\.fr|pinterest\.it|pinterest\.jp|pinterest\.nz|pinterest\.ph|pinterest\.pt|pinterest\.ru|pinterest\.se|pixiv\.net|pl\.pinterest\.com|playahead\.se|plurk|plurk\.com|plus\.google\.com|plus\.url\.google\.com|pocket\.co|posterous|posterous\.com|pro\.homeadvisor\.com|pulse\.yahoo\.com|qapacity|qapacity\.com|quechup|quechup\.com|quora|quora\.com|qzone\.qq\.com|ravelry|ravelry\.com|reddit|reddit\.com|redux|redux\.com|renren|renren\.com|researchgate\.net|reunion|reunion\.com|reverbnation|reverbnation\.com|rtl\.de|ryze|ryze\.com|salespider|salespider\.com|scoop\.it|screenrant|screenrant\.com|scribd|scribd\.com|scvngr|scvngr\.com|secondlife|secondlife\.com|serverfault|serverfault\.com|shareit|sharethis|sharethis\.com|shvoong\.com|sites\.google\.com|skype|skyrock|skyrock\.com|slashdot\.org|slideshare\.net|smartnews\.com|snapchat|snapchat\.com|social|sociallife\.com\.br|socialvibe|socialvibe\.com|spaces\.live\.com|spoke|spoke\.com|spruz|spruz\.com|ssense\.com|stackapps|stackapps\.com|stackexchange|stackexchange\.com|stackoverflow|stackoverflow\.com|stardoll\.com|stickam|stickam\.com|studivz\.net|suomi24\.fi|superuser|superuser\.com|sweeva|sweeva\.com|t\.co|t\.me|tagged|tagged\.com|taggedmail|taggedmail\.com|talkbiznow|talkbiznow\.com|taringa\.net|techmeme|techmeme\.com|tencent|tencent\.com|tiktok|tiktok\.com|tinyurl|tinyurl\.com|toolbox|toolbox\.com|touch\.facebook\.com|tr\.pinterest\.com|travellerspoint|travellerspoint\.com|tripadvisor|tripadvisor\.com|trombi|trombi\.com|trustpilot|tudou|tudou\.com|tuenti|tuenti\.com|tumblr|tumblr\.com|tweetdeck|tweetdeck\.com|twitter|twitter\.com|twoo\.com|typepad|typepad\.com|unblog\.fr|urbanspoon\.com|ushareit\.com|ushi\.cn|vampirefreaks|vampirefreaks\.com|vampirerave|vampirerave\.com|vg\.no|video\.ibm\.com|vk\.com|vkontakte\.ru|wakoopa|wakoopa\.com|wattpad|wattpad\.com|web\.facebook\.com|web\.skype\.com|webshots|webshots\.com|wechat|wechat\.com|weebly|weebly\.com|weibo|weibo\.com|wer-weiss-was\.de|weread|weread\.com|whatsapp|whatsapp\.com|wiki\.answers\.com|wikihow\.com|wikitravel\.org|woot\.com|wordpress|wordpress\.com|wordpress\.org|xanga|xanga\.com|xing|xing\.com|yahoo-mbga\.jp|yammer|yammer\.com|yelp|yelp\.co\.uk|yelp\.com|youroom\.in|za\.pinterest\.com|zalo|zoo\.gr|zooppa|zooppa\.com)$", "i").test(v.utmSource) || new RegExp("^(?:social|social-network|social-media|sm|social network|social media)$", "i").test(v.utmMedium)},{"name":"organic-video","test":(v) => new RegExp("^(?:blog\.twitch\.tv|crackle|crackle\.com|curiositystream|curiositystream\.com|d\.tube|dailymotion|dailymotion\.com|dashboard\.twitch\.tv|disneyplus|disneyplus\.com|fast\.wistia\.net|help\.hulu\.com|help\.netflix\.com|hulu|hulu\.com|id\.twitch\.tv|iq\.com|iqiyi|iqiyi\.com|jobs\.netflix\.com|justin\.tv|m\.twitch\.tv|m\.youtube\.com|music\.youtube\.com|netflix|netflix\.com|player\.twitch\.tv|player\.vimeo\.com|ted|ted\.com|twitch|twitch\.tv|utreon|utreon\.com|veoh|veoh\.com|viadeo\.journaldunet\.com|vimeo|vimeo\.com|wistia|wistia\.com|youku|youku\.com|youtube|youtube\.com)$", "i").test(v.utmSource) || new RegExp("^(.*video.*)$", "i").test(v.utmMedium)},{"name":"organic-search","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|y
18andex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) || v.utmMedium.toLowerCase() === "organic"},{"name":"referral","test":(v) => new RegExp("^(?:referral|app|link)$", "i").test(v.utmMedium)},{"name":"email","test":(v) => new RegExp("^(?:email|e-mail|e_mail|e mail)$", "i").test(v.utmMedium) || new RegExp("^(?:email|e-mail|e_mail|e mail)$", "i").test(v.utmSource)},{"name":"affiliate","test":(v) => v.utmMedium.toLowerCase() === "affiliate"},{"name":"audio","test":(v) => v.utmMedium.toLowerCase() === "audio"},{"name":"sms","test":(v) => v.utmSource.toLowerCase() === "sms" || v.utmMedium.toLowerCase() === "sms"},{"name":"mobile-push-notification","test":(v) => v.utmSource.toLowerCase() === "firebase" || new RegExp("(?:.*mobile.*|.*notification.*|push$)", "i").test(v.utmMedium)}].find(i=>i.test(t))?.name??"other"}getShopifyAnalyticsId(){const t=this.getCookie("_shopify_y");if(t)return t;try{const e=this.localStorageGet("Shoplift_ClientId");if(e)return e}catch{}return null}legacyGetCookieVisitor(){const t=this.getCookie("SHOPLIFT");return t===null?null:JSON.parse(t,F)}getCookie(t){const e=this.cookie.split("; ").filter(i=>i.split("=").at(0)===t).at(0);return e===void 0?null:e.split("=").slice(1).join("=")}monitorConsentChange(){document.addEventListener("visitorConsentCollected",t=>{(async()=>await this.onConsentChange(t.detail.analyticsAllowed,!0))()}),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>this.loadShopifyConsentApiWithRetry()):this.loadShopifyConsentApiWithRetry()}loadShopifyConsentApiWithRetry(){let t=0;const e=()=>{this.loadShopifyConsentApi()||t++<10&&window.setTimeout(e,100)};e()}loadShopifyConsentApi(){if(window.Shopify){this.log("Loading Shopify features");const t=async()=>{if(!window.Shopify){this.log("Shopify object missing... suddenly?");return}if(window.Shopify.customerPrivacy===void 0){this.log("Shopify CustomerPrivacy api still missing, trying again in 1000ms"),e=window.setTimeout(()=>{(async()=>await t())()},1e3);return}const i=window.Shopify.customerPrivacy.getTrackingConsent();await this.onConsentChange(window.Shopify.customerPrivacy.analyticsProcessingAllowed(),i==="yes")};let e=window.setTimeout(()=>{(async()=>await t())()},5e3);return window.Shopify.loadFeatures([{name:"consent-tracking-api",version:"0.1"}],i=>{(async()=>{if(window.clearTimeout(e),i){this.log("Error loading consent tracking",i);return}await t()})()}),!0}return!1}async onConsentChange(t,e){try{if(this.log("Consent change detected",t,e),this.state.essential.consentApproved=t,this.state.essential.hasConsentInteraction=e,!this.state.essential.consentApproved){this.state.essential.hasConsentInteraction&&(this.state.analytics.queue.length=0),this.saveState();return}this.cookie=document.cookie,this.shopifyAnalyticsId=this.getShopifyAnalyticsId();for(const i of this.state.analytics.queue.filter(s=>s.type===1||s.type===2)){const s=i;s.shopifyAnalyticsId=this.shopifyAnalyticsId}this.saveState(),await this.syncAllEvents()}catch(i){this.log("Error syncing on consent change",i)}}isThemePreview(){return isThemePreview||themeRole!=="main"}isAppProxyPath(){const t=["/apps/","/tools/","/a/"],e=window.location.pathname;return t.some(i=>e.startsWith(i))}clearThemeBar(t,e,i){const s=structuredClone(i);this.log("Looking for theme bar"),this.waitForElement(null,"body").then(r=>this.waitForElement(r,"#preview-bar-iframe, #PBarNextFrameWrapper").then(n=>(this.log("Found theme bar"),e&&(this.log("Removing theme bar"),n.remove()),t?this.makeRequest({url:`${this.eventHost}/api/v0/logs`,method:"post",data:JSON.stringify({...this.debugState(),stateAtEvaluation:s},X)}):Promise.resolve(null)))).catch(r=>console.error(r))}waitForElement(t,e){return new Promise(i=>{const s=document.querySelector(e);if(s){i(s);return}const r=new MutationObserver(n=>{const o=document.querySelector(e);if(o){r.disconnect(),i(o);return}});r.observe(t??document.documentElement,{childList:!0})})}setDebug(t){this.state.essential.debugMode=t,this.saveState()}log(t,...e){let i=0;const s=t.replace(/%[sdoOfF]/g,r=>{if(i>=e.length)return r;const n=e[i++];return r==="%o"||r==="%O"?JSON.stringify(n):String(n)});this.logHistory.push(`[${new Date().toISOString()}][SL] ${s}`),!(!this.state.essential.debugMode&&!this.shopliftDebug)&&console.debug(`[SL] ${t}`,...e)}debugState(){return{state:this.state,storage:{essential:this.loadLocalStorage(this.essentialSessionKey),analytics:this.loadLocalStorage(this.analyticsSessionKey)},params:{shop:this.shop,host:this.host,eventHost:this.eventHost,cssHideClass:this.cssHideClass,testConfigs:this.testConfigs,inactiveTestConfigs:this.inactiveTestConfigs,sendPageView:this.sendPageView,isShopifyMerchantCookie
18:this.getCookie("is_shopify_merchant"),themeId,url:window.location.href,isThemePreview,themeRole,gaConfig:this.gaConfig},logHistory:this.logHistory}}createViewportObserver(t,e={}){const{threshold:i=this.VIEWPORT_TRACK_THRESHOLD,triggerOnce:s=!0}=e,r=new Set;return new IntersectionObserver(n=>{n.forEach(o=>{if(o.isIntersecting&&!r.has(o.target)){const l=o.target,c=l.getAttribute(this.DATA_SL_TEST_ID);c&&(t(c,l),s&&r.add(l))}})},{threshold:i})}applyChangesWithViewport(t,e,i,s){const r=e.selectorsForViewportTracking??e.selectors,n=o=>{if(this.state.essential.visitorTests.some(h=>h.testId===o)||this.activeViewportObservers.has(o))return;const l=[];if(r.forEach(h=>{t.querySelectorAll(h.cssSelector).forEach(b=>l.push(b))}),l.length===0)return;let c=!1;const d=()=>{c||(c=!0,i(o),p.disconnect(),this.activeViewportObservers.delete(o))},p=this.createViewportObserver(()=>{d()},{triggerOnce:!0,...s});this.activeViewportObservers.set(o,p),this.log(`Created viewport observer for test ${o}, observing ${l.length} elements`),l.forEach(h=>{h.setAttribute(this.DATA_SL_TEST_ID,String(o)),p.observe(h)}),setTimeout(()=>{c||l.forEach(h=>{const u=h.getBoundingClientRect(),b=s?.threshold??this.VIEWPORT_TRACK_THRESHOLD,k=Math.min(u.bottom,window.innerHeight)-Math.max(u.top,0),S=Math.min(u.right,window.innerWidth)-Math.max(u.left,0);u.top<window.innerHeight&&u.bottom>0&&u.left<window.innerWidth&&u.right>0&&k>0&&S>0&&k>=u.height*b&&(this.log(`Price element already visible in viewport for test ${o}:`,h),d())})},100)};e.selectors.length>0&&U(t,e,()=>{}),bt(t,{testId:e.testId,hypothesisId:e.hypothesisId,selectors:r},o=>{n(o)})}applyPriceTestWithMapLookup(t,e,i,s){if(!e.priceData){this.log("No price data for hypothesis '%s'",e.id);return}this.log("Hypothesis '%s' isControl=%s, priceData has %d variants",e.id,e.isControl,e.priceData.variants.length);const r=e.priceData.variants.slice(0,3);for(const[S,P,_]of r)this.log(" Sample priceData: variant=%s, price=%d, compareAt=%d",S,P,_);const n=j(e.priceData),o=new Set;for(const S of i)if(S.priceData)for(const[P]of S.priceData.variants)o.add(P);this.log("Price test Map lookup: %d products in hypothesis, %d total products to track",n.size,o.size);const l=e.priceData,c=new WeakSet;let d=!1;const p="[data-sl-attribute-p], [data-sl-attribute-cap], [data-sl-attribute-discount]",h=S=>{if(c.has(S))return;const P=S.getAttribute("data-sl-attribute-p"),_=S.getAttribute("data-sl-attribute-cap"),C=S.getAttribute("data-sl-attribute-discount"),m=P||_||C;if(!m||!o.has(m))return;c.add(S);const y=n.get(m);y&&(this.log("Applying price for product %s: %d cents (compare at: %d cents)",m,y.priceInCents,y.compareAtPriceInCents),Dt(S,m,y,l),this.log("Applied price to element for product %s",m)),!d&&!this.state.essential.visitorTests.some(w=>w.testId===t)&&(S.setAttribute(this.DATA_SL_TEST_ID,String(t)),this.setupElementViewportTracking(S,t,()=>{d||(d=!0,s(t))}))},u=()=>{const S=document.querySelectorAll(p);this.log("Scanning for price elements, found: %d",S.length),S.forEach(h)},b=new MutationObserver(S=>{for(const P of S)P.type==="childList"&&P.addedNodes.forEach(_=>{if(_.nodeType===Node.ELEMENT_NODE){const C=_;(C.hasAttribute("data-sl-attribute-p")||C.hasAttribute("data-sl-attribute-cap")||C.hasAttribute("data-sl-attribute-discount"))&&h(C),C.querySelectorAll(p).forEach(h)}}),P.type==="attributes"&&P.target instanceof Element&&h(P.target)}),k=document.body||document.documentElement;b.observe(k,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-sl-attribute-p","data-sl-attribute-cap","data-sl-attribute-discount"]}),this.log("MutationObserver started for price elements"),u(),document.readyState==="loading"&&document.addEventListener("DOMContentLoaded",()=>{this.log("DOMContentLoaded - rescanning for price elements"),u()}),setTimeout(()=>{this.log("Delayed rescan for price elements"),u()},100),setTimeout(()=>{this.log("Final rescan for price elements"),u()},500)}setupElementViewportTracking(t,e,i){const s=this.VIEWPORT_TRACK_THRESHOLD,r=t.getBoundingClientRect(),n=Math.min(r.bottom,window.innerHeight)-Math.max(r.top,0),o=Math.min(r.right,window.innerWidth)-Math.max(r.left,0);if(r.top<window.innerHeight&&r.bottom>0&&r.left<window.innerWidth&&r.right>0&&n>0&&o>0&&n>=r.height*s){this.log("Price element already visible for test %s",e),i();return}const c=new IntersectionObserver(d=>{for(const p of d)if(p.isIntersecting&&p.intersectionRatio>=s){this.log("Price element entered viewport for test %s",e),c.disconnect(),i();break}},{threshold:s});c.observe(t)}debug(){const t=this.debugState();console.log(JSON.stringify(t,X,2))}}(async function(){window.shopliftInstance||(window.shopliftInstance=new Wt("the-native-pet.myshopify.com","https://app.shoplift.ai","https://events.shoplift.ai",false,false,false,{"sendEvents":false,"mode":"gtag"},false,false,1000,[],[{"id":"87caf187-1f03-4891-8ae0-9e8cf6745c10","bayesianRevision":4,"status":"cancelled","hypotheses":[{"id":"5afdd146-9633-4bc1-97e7-c73e12348a93","type":"theme","themeId":126752292907,"affix":"","isControl":true,"redirectPath":null},{"id":"058b9b9c-f0b8-41af-b5de-68992e67c35c","type":"theme","themeId":130643460139,"affix":"","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false},{"id":"019d28c6-2814-761b-9e75-bf42b38139a3","bayesianRevision":5,"status":"cancelled","hypotheses":[{"id":"019d28c5-cfc2-7026-9373-0067b877912c","type":"theme","themeId":184646828
18075,"affix":"","isControl":true,"redirectPath":null},{"id":"019d28c5-cfc3-7c9e-8858-4bd559e6e6c4","type":"theme","themeId":184432525355,"affix":"","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false},{"id":"019cb50d-55f2-7d7a-a6c8-94d6e832ee14","bayesianRevision":5,"status":"cancelled","hypotheses":[{"id":"019cb50b-a9b4-71b8-921b-1756c523bad9","type":"theme","themeId":126752292907,"affix":"","isControl":true,"redirectPath":null},{"id":"019cb50c-92af-71cf-90b8-0c5c2fea52a3","type":"theme","themeId":183729684523,"affix":"","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false},{"id":"c762e7d5-a0c4-4cea-93db-752835ea506a","bayesianRevision":2,"status":"cancelled","hypotheses":[{"id":"b50340da-d2b5-474a-9e57-4dcc9254206e","type":"theme","themeId":126587863083,"affix":"","isControl":true,"redirectPath":null},{"id":"e2720ca1-b0fe-4ec6-9bd7-c5fee85b33a4","type":"theme","themeId":126622269483,"affix":"","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false},{"id":"8a79cbcd-4402-43d8-b3be-27c176db93c2","bayesianRevision":2,"status":"cancelled","hypotheses":[{"id":"ff4b6fd6-35bc-414f-be86-5edaf53a61e1","type":"theme","themeId":126587863083,"affix":"","isControl":true,"redirectPath":null},{"id":"dc1023ff-fc3f-4898-9337-ca386aca18b3","type":"theme","themeId":126601429035,"affix":"","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false},{"id":"73ace278-222a-42dc-adc8-67af76f992fa","bayesianRevision":3,"status":"cancelled","hypotheses":[{"id":"11c760d5-f390-43b2-9346-6728f2f1afdd","type":"theme","themeId":126752292907,"affix":"","isControl":true,"redirectPath":null},{"id":"36566fe7-5379-4efd-a8e7-94000cecb93b","type":"theme","themeId":126750818347,"affix":"","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false}],null),await window.shopliftInstance.init())})();async function Gt(a,t,e,i){const s=Mt({log:i});if(e)return i("[SUB-PREVIEW] A side â no overlay applied; widget renders naturally"),s;const r=a.widget.widgetType,n=t?j(t):null;let o=W(t),l=K(a,o),c=l.discountMap,d=l.maxDiscount;function p(){const f=W(t);f!==o&&(o=f,l=K(a,o),c=l.discountMap,d=l.maxDiscount,i(`[SUB-PREVIEW] scope refreshed currentProductId=${o??"n/a"}, maxDiscount=${d}`))}i(`[SUB-PREVIEW] side=B, currentProductId=${o??"n/a"}, maxDiscount=${d}`);function h(f){if(!t||!n)return null;const v=Y(n),g=v?n.get(v):void 0;return g?{formattedVariantPrice:G(g.priceInCents,t),formattedDiscounted:G(g.priceInCents*(1-f/100),t)}:null}function u(f){const v=J(a,f);if(!v)return d;const g=D(a,"subscriptionInput"),I=g.length?g[0].selector:'input[name="rc_plan"]',A=v.querySelector(`${I}:checked`);if(A){const E=c[A.value];if(E!==void 0)return E}return d}function b(f){const v=D(a,"subscriptionDiscount");for(const g of v)if(g.selector.includes("badge")||g.selector.includes("__badge")){const I=f.querySelector(g.selector);I?.textContent&&!I.textContent.includes(`${d}%`)&&$(I,A=>N(A,d))}}function k(f,v){const g=h(v);if(!g)return;const I=D(a,"subscriptionCompareAt");for(const A of I){const E=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);E?.textContent&&!E.textContent.includes(g.formattedVariantPrice)&&$(E,x=>/\d/.test(x)?g.formattedVariantPrice:x)}}function S(f,v){const g=h(v);if(!g)return;const I=D(a,"subscriptionPrice");for(const A of I){const E=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);E?.textContent&&!E.textContent.includes(g.formattedDiscounted)&&$(E,x=>/\d/.test(x)?g.formattedDiscounted:x)}}function P(f){const v=D(a,"subscriptionInput"),g=v.length?v[0].selector:'input[name="rc_plan"]',I=D(a,"subscriptionPlanDiscount"),A=I.length?I[0].selector:".rc-plans-button__discount";for(const E of Array.from(f.querySelectorAll("label"))){const x=E.querySelector(g),R=E.querySelector(A);if(x&&R?.textContent){const V=c[x.value];if(V!==void 0){const O=R.textContent.match(/[\d.]+%/)?.[0];O&&O!==`${V}%`&&$(R,L=>N(L,V))}}}}function _(f){const v=f.querySelector("select");if(v)for(const g of Array.from(v.options)){const I=c[g.value];if(I!==void 0&&g.textContent){const A=g.textContent.match(/[\d.]+%/)?.[0];A&&A!==`${I}%`&&(g.textContent=N(g.textContent,I))}}}function C(f){const v=D(a,"onetimePrice");if(!v.length||!t||!n)return;const g=Y(n),I=g?n.get(g):void 0;if(!I)return;const A=G(I.priceInCents,t),E=D(a,"onetimeContainer"),x=E.length?E[0].selector:'[part~="rc-purchase-option__onetime"]',R=f.querySelector(x);if(R)for(const V of v){const O=R.querySelector(`[part~="${V.selector}"]`);O?.textContent&&!O.textContent.includes(A)&&$(O,L=>/\d/.test(L)?A:L)}}function m(f,v){const I=D(a,"subscriptionDiscount").filter(A=>A.selector.includes("benefit")||A.selector==="rc-benefits");for(const A of I){const E=f.querySelector(A.selector);if(E?.shadowRoot){for(const x of Array.from(E.shadowRoot.querySelectorAll("li")))if(x.textContent?.includes("Save")){const R=x.textContent.match(/[\d.]+%/)?.[0];R&&R!==`${v}%`&&$(x,V=>N(V,v))}}}}let y=!1;function w(){if(!y){y=!0;try{p();const f=B(a);if(!f)return;const v=u(f);b(f),k(f,v),S(f,v),C(f);const g=J(a,f);g&&(r==="buttons"||r==="radio"?P(g):_(g)),m(f,v)}finally{y=!1}}}const T=dt({data:a,runUpdates:w});return function(){T(),s()}}const jt=Object.freeze(Object.defineProperty({__proto__:null,subscriptionPreviewRender:Gt},Symbol.toStringTag,{value:"Module"}))})(); })("/", { suffix: "store-locator", type: "page" }, "main", 126752292907, false)</script>
18 19 <!-- End of Shoplift scripts --> 20 21 <meta charset="utf-8"> 22 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 23 <meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover"> 24 <link rel="canonical" href="https://nativepet.com/pages/store-locator"> 25 26 <title>Store locator 27 – Native Pet</title> 28 29 30 <meta name="description" content=""> 31 32 <meta http-equiv="cleartype" content="on"> 33 34 35<meta property="og:site_name" content="Native Pet"> 36<meta property="og:url" content="https://nativepet.com/pages/store-locator"> 37<meta property="og:title" content="Store locator"> 38<meta property="og:type" content="website"> 39<meta property="og:description" content="Native Pet - High quality, tasty and effective supplements for dogs"><meta property="og:image" content="http://nativepet.com/cdn/shop/files/NP-LinkPreview-1200x1200_8a25b0ab-34f9-42b1-a01f-6883ad9907f2.gif?v=1771016887"> 40 <meta property="og:image:secure_url" content="https://nativepet.com/cdn/shop/files/NP-LinkPreview-1200x1200_8a25b0ab-34f9-42b1-a01f-6883ad9907f2.gif?v=1771016887"> 41 <meta property="og:image:width" content="1200"> 42 <meta property="og:image:height" content="1200"><meta name="twitter:card" content="summary_large_image"> 43<meta name="twitter:title" content="Store locator"> 44<meta name="twitter:description" content="Native Pet - High quality, tasty and effective supplements for dogs"> 45 46<meta name="theme-color" content="" /> 47<link rel="icon" type="image/png" href="//nativepet.com/cdn/shop/files/NP_Favicon-3_abe22479-5523-44be-bb17-5e590f0defc1.png?crop=center&height=32&v=1673929835&width=32"><!-- Klaviyo integration script from Consentmo GDPR app -->
48<script id="consentmo-klaviyo-integration-script"> 49 function checkConsentForKlaviyo(isMarketingEnabled) { 50 if (isMarketingEnabled) { 51 console.log('exec klaviyo'); 52 document.cookie = "__kla_off=;expires=Thu, 01 Jan 1970 00:00:00 GMT"; 53 } else { 54 console.log('blocked klaviyo'); 55 document.cookie = "__kla_off=true"; 56 } 57 } 58 59 document.addEventListener('consentmoSignal_onLoad', function(eventData) { 60 const csmLoadSignal = eventData.detail || {isActive:false}; 61 62 if (!csmLoadSignal.isActive) { 63 checkConsentForKlaviyo(true); 64 } else { 65 document.addEventListener('consentmoSignal', function(event) { 66 const csmPreferences = event.detail.preferences; 67 checkConsentForKlaviyo(csmPreferences.marketing); 68 }); 69 } 70 }); 71</script>
71 72
73<script id="consentmo-gcmv2-integration"> 74 /* 75 * Options: 76 * - true: set default consent for all regions 77 * - false: set default consent when the cookie bar active 78 */ 79 const isSetDefaultConsent = true; 80 81 window.dataLayer = window.dataLayer || []; 82 function gtag(){dataLayer.push(arguments);} 83 84 const getCsmCookie = (cookieName) => (document.cookie.split(';').map(c => c.trim()).find(c => c.startsWith(`${cookieName}=`))?.split('=')[1] ?? undefined); 85 const getCsmStorage = () => { 86 try { 87 const storage = localStorage.getItem('gdprCache'); 88 if (!storage) return undefined; 89 const parsed = JSON.parse(storage); 90 const settings = parsed.getCookieConsentSettings && JSON.parse(parsed.getCookieConsentSettings); 91 return { 92 settings, 93 cookieConsentName: `cookieconsent_status${settings?.cookie_name || ''}` 94 }; 95 } catch { 96 return undefined; 97 } 98 } 99 100 const csmStorage = getCsmStorage(); 101 const cookieName = csmStorage?.cookieConsentName || 'cookieconsent_status'; 102 const csmCookieConsent = getCsmCookie(cookieName); 103 const csmCookiePreferences = getCsmCookie('cookieconsent_preferences_disabled'); 104 105 if (isSetDefaultConsent) { 106 let consentValues = { 107 analytics: 'denied', 108 marketing: 'denied', 109 functionality: 'denied', 110 }; 111 let adsDataRedaction = false; 112 let urlPassthrough = false; 113 114 if (csmCookieConsent && csmCookiePreferences !== undefined) { 115 consentValues.analytics = csmCookiePreferences.indexOf('analytics') >= 0 ? 'denied' : 'granted'; 116 consentValues.marketing = csmCookiePreferences.indexOf('marketing') >= 0 ? 'denied' : 'granted'; 117 consentValues.functionality = csmCookiePreferences.indexOf('functionality') >= 0 ? 'denied' : 'granted'; 118 119 if (csmStorage && csmStorage?.settings?.gcm_options?.state == '1') { 120 adsDataRedaction = csmStorage.settings.gcm_options?.ads_data_redaction || false; 121 urlPassthrough = csmStorage.settings.gcm_options?.url_passthrough || false; 122 } 123 } 124 125 gtag('consent', 'default', { 126 ad_storage: consentValues.marketing, 127 ad_personalization: consentValues.marketing, 128 ad_user_data: consentValues.marketing, 129 analytics_storage: consentValues.analytics, 130 functionality_storage: consentValues.functionality, 131 personalization_storage: consentValues.functionality, 132 security_storage: 'granted', 133 wait_for_update: 1500 134 }); 135 gtag('set', 'ads_data_redaction', adsDataRedaction); 136 gtag('set', 'url_passthrough', urlPassthrough); 137 } 138 139 document.addEventListener('consentmoSignal', function(event) { 140 const csmSignal = event.detail; 141 const consentState = csmSignal.integration?.gcm?.isEnabled ? csmSignal.integration.gcm.state : csmSignal.state; 142 143 gtag('consent', (!isSetDefaultConsent ? 'default' : 'update'), consentState); 144 if (csmSignal.integration?.gcm?.isEnabled) { 145 gtag('set', 'ads_data_redaction', csmSignal.integration.gcm.adsDataRedaction); 146 gtag('set', 'url_passthrough', csmSignal.integration.gcm.urlPassthrough); 147 } 148 }); 149</script>
149 150 151 152 153 154 155 156 <link href="//nativepet.com/cdn/shop/t/361/assets/styles.B7ebCmtk.min.css?v=6585637652943896461790965871" rel="stylesheet" type="text/css" media="all" /> 157 158 159 160 161
161<script src="//nativepet.com/cdn/shop/t/361/assets/theme.dtRWEQLS.min.js?v=106135853765909470911790961956" type="module" crossorigin="anonymous"></script>
161 162 <link rel="modulepreload" href="//nativepet.com/cdn/shop/t/361/assets/embla-tween-scale.C1ErBjGe.min.js?v=149431972923256146471778187746" crossorigin="anonymous"> 163 <link rel="modulepreload" href="//nativepet.com/cdn/shop/t/361/assets/quiz-logic.CCAwsLMR.min.js?v=146500644096213194951790717339" crossorigin="anonymous"> 164
165<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
165<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/27157980/digital_wallets/dialog"> 166<meta id="in-context-paypal-metadata" data-shop-id="27157980" data-venmo-supported="true" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD"> 167<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
167<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=33406550059"></script>
167 168<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
169<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=33406550059&shop_id=27157980" crossorigin="anonymous"></script>
vendor: 1 bytes, line 169
169
170<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":27157980,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/27157980","merchantName":"Native Pet","requiredBillingContactFields":["postalAddress","email"],"requiredShippingContactFields":["postalAddress","email"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","elo","jcb"],"total":{"type":"pending","label":"Native Pet","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 170
170
171<script id="shopify-features" type="application/json">{"accessToken":"c35147530d37ea14750c6a5b2191eac3","betas":["rich-media-storefront-analytics"],"domain":"nativepet.com","predictiveSearch":true,"shopId":27157980,"locale":"en"}</script>
vendor: 1 bytes, line 171
171
172<script>var Shopify = Shopify || {}; 173Shopify.shop = "the-native-pet.myshopify.com"; 174Shopify.locale = "en"; 175Shopify.currency = {"active":"USD","rate":"1.0"}; 176Shopify.country = "US"; 177Shopify.theme = {"name":"bella\/live","id":126752292907,"schema_name":"Bella","schema_version":"2.60.6","theme_store_id":null,"role":"main"}; 178Shopify.theme.handle = "null"; 179Shopify.theme.style = {"id":null,"handle":null}; 180Shopify.cdnHost = "nativepet.com/cdn"; 181Shopify.routes = Shopify.routes || {}; 182Shopify.routes.root = "/"; 183Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 184Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 185Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 186Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 186
186
187<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 187
187
188<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 188
188
189<script> 190 window.ShopifyPay = window.ShopifyPay || {}; 191 window.ShopifyPay.apiHost = "shop.app\/pay"; 192 window.ShopifyPay.redirectState = null; 193</script>
vendor: 1 bytes, line 193
193
194<script> 195 window.Shopify = window.Shopify || {}; 196 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 197 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 198 window.Shopify.SignInWithShop.eligible = true; 199</script>
vendor: 1 bytes, line 199
199
200<script id="shop-js-analytics" type="application/json">{"pageType":"page"}</script>
vendor: 1 bytes, line 200
200
201<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 201
201
202<script type="module"> 203 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 204 205 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 206 207</script>
vendor: 1 bytes, line 207
207
208<script> 209 window.Shopify = window.Shopify || {}; 210 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 211 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"]}; 212</script>
vendor: 1 bytes, line 212
212
213<script>(function() { 214 var isLoaded = false; 215 function asyncLoad() { 216 if (isLoaded) return; 217 isLoaded = true; 218 var urls = ["https:\/\/id-shop.govx.com\/app\/the-native-pet.myshopify.com\/govx.js?shop=the-native-pet.myshopify.com","https:\/\/cdn.attn.tv\/nativepet\/dtag.js?shop=the-native-pet.myshopify.com","https:\/\/superfiliate-cdn.com\/storefront.js?shop=the-native-pet.myshopify.com","https:\/\/pps.triplewhale.systems\/main.js?shop=the-native-pet.myshopify.com","https:\/\/storefront.recart.com\/settings\/69dd1ba90d2425636d835bc6\/settings.js?shop=the-native-pet.myshopify.com","https:\/\/storefront.recart.com\/loader.js?domain=nativepet.com\u0026account=69dd1ba90d2425636d835bc6\u0026hasGMInitParams=1\u0026shop=the-native-pet.myshopify.com","https:\/\/cdn.rebuyengine.com\/onsite\/js\/rebuy.js?shop=the-native-pet.myshopify.com","https:\/\/cdn.instant.one\/instant.js?siteId=site_af6ab632509a48fc9436e615bc0a521a\u0026shop=the-native-pet.myshopify.com"]; 219 for (var i = 0; i < urls.length; i++) { 220 var s = document.createElement('script'); 221 s.type = 'text/javascript'; 222 s.async = true; 223 s.src = urls[i]; 224 var x = document.getElementsByTagName('script')[0]; 225 x.parentNode.insertBefore(s, x); 226 } 227 }; 228 if(window.attachEvent) { 229 window.attachEvent('onload', asyncLoad); 230 } else { 231 window.addEventListener('load', asyncLoad, false); 232 } 233})();</script>
vendor: 1 bytes, line 233
233
234<script id="__st">var __st={"a":27157980,"offset":-18000,"reqid":"4323fb28-d9b6-47bc-9aec-bdd4d0ab48ac-1791073527","pageurl":"nativepet.com\/pages\/store-locator","s":"pages-87538499627","u":"49aa87026b64","p":"page","rtyp":"page","rid":87538499627};</script>
vendor: 1 bytes, line 234
234
235<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 235
235
236<script id="form-persister">!function(){'use strict';const t='contact',e='new_comment',n=[[t,t],['blogs',e],['comments',e],[t,'customer']],o='password',r='form_key',c=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',o],s=()=>{try{return window.sessionStorage}catch{return}},i='__shopify_v',u=t=>t.elements[r],a=function(){const t=[...n].map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(',');var e;return e=t,()=>e?[...document.querySelectorAll(e)].map((t=>t.form)):[]}();function m(t){const e=u(t);a().includes(t)&&(!e||!e.value)&&function(t){try{if(!s())return;!function(t){const e=s();if(!e)return;const n=u(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){u(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:r})),t.elements[r].value=e}(t,e),function(t,e){const n=s();if(!n)return;const r=[...t.querySelectorAll(`input[type='${o}']`)].map((({name:t})=>t)),u=[...c,...r],a={};for(const[o,c]of new FormData(t).entries())u.includes(o)||(a[o]=c);n.setItem(e,JSON.stringify({[i]:1,action:t.action,data:a}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(t)}const f=t=>{if('true'===t.dataset.persistBound)return;const e=function(t,e){const n=function(t){return'function'==typeof t.submit?t.submit:HTMLFormElement.prototype.submit}(t).bind(t);return function(){let t;return()=>{t||(t=!0,(()=>{try{e(),n()}catch(t){(t=>{console.error('form submit failed',t)})(t)}})(),setTimeout((()=>t=!1),250))}}()}(t,(()=>{m(t)}));!function(t,e){if('function'==typeof t.submit&&'function'==typeof e)try{t.submit=e}catch{}}(t,e),t.addEventListener('submit',(t=>{t.preventDefault(),e()})),t.dataset.persistBound='true'};!function(){function t(t){const e=(t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form})(t);e&&m(e)}document.addEventListener('submit',t),document.addEventListener('DOMContentLoaded',(()=>{const e=a();for(const t of e)f(t);var n;n=document.body,new window.MutationObserver((t=>{for(const e of t)if('childList'===e.type&&e.addedNodes.length)for(const t of e.addedNodes)1===t.nodeType&&'FORM'===t.tagName&&a().includes(t)&&f(t)})).observe(n,{childList:!0,subtree:!0,attributes:!1}),document.removeEventListener('submit',t)}))}()}();</script>
vendor: 1 bytes, line 236
236
237<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//nativepet.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 237
237
238<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 = "//nativepet.com/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>
238<script crossorigin="anonymous" defer="defer" src="//nativepet.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 238
238
239<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 239
239
240<script> 241 window.Shopify = window.Shopify || {}; 242 window.Shopify.MCP = window.Shopify.MCP || {}; 243 window.Shopify.MCP.enabled = true; 244 window.Shopify.MCP.shop = "the-native-pet.myshopify.com"; 245 window.Shopify.MCP.mcpEndpoint = "https:\/\/nativepet.com\/api\/mcp"; 246 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"]}}]; 247</script>
vendor: 1 bytes, line 247
247
248<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("\/\/nativepet.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 249</script>
vendor: 1 bytes, line 249
249
250<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://nativepet.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 251</script>
vendor: 1 bytes, line 251
251
252<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 253 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); 254</script>
vendor: 1 bytes, line 254
254
255<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})}})); 256</script>
256 257<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://nativepet.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 258<style id="shopify-accelerated-checkout-cart"> 259 #shopify-buyer-consent { 260 margin-top: 1em; 261 display: inline-block; 262 width: 100%; 263} 264 265#shopify-buyer-consent.hidden { 266 display: none; 267} 268 269#shopify-subscription-policy-button { 270 background: none; 271 border: none; 272 padding: 0; 273 text-decoration: underline; 274 font-size: inherit; 275 cursor: pointer; 276} 277 278#shopify-subscription-policy-button::before { 279 box-shadow: none; 280} 281 282 </style> 283
284<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
284 285 286 287<link href="//nativepet.com/cdn/shop/t/361/assets/Adieu-Light.woff2" as="font" type="font/woff2" crossorigin="true" rel="preload"> 288<link href="//nativepet.com/cdn/shop/t/361/assets/F37GingerSoft-Regular.woff2" as="font" type="font/woff2" crossorigin="true" rel="preload"> 289 290<style data-shopify> 291 @font-face { 292 font-family: 'Adieu'; 293 font-style: normal; 294 src: url('//nativepet.com/cdn/shop/t/361/assets/Adieu-Light.woff2') format("woff2"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-Light.woff') format("woff"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-Light.otf') format("opentype"); 295 font-weight: 200; 296 font-display: swap; 297 } 298 299 @font-face { 300 font-family: 'Adieu'; 301 font-style: normal; 302 src: url('//nativepet.com/cdn/shop/t/361/assets/Adieu-Regular.woff2') format("woff2"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-Regular.woff') format("woff"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-Regular.otf') format("opentype"); 303 font-weight: 400; 304 font-display: swap; 305 } 306 307 @font-face { 308 font-family: 'Adieu'; 309 font-style: normal; 310 src: url('//nativepet.com/cdn/shop/t/361/assets/Adieu-Bold.woff2') format("woff2"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-Bold.woff') format("woff"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-Bold.otf') format("opentype"); 311 font-weight: 700; 312 font-display: swap; 313 } 314 315 @font-face { 316 font-family: 'Adieu'; 317 font-style: normal; 318 src: url('//nativepet.com/cdn/shop/t/361/assets/Adieu-Black.woff2') format("woff2"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-Black.woff') format("woff"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-Black.otf') format("opentype"); 319 font-weight: 900; 320 font-display: swap; 321 } 322 323 @font-face { 324 font-family: 'Adieu'; 325 font-style: italic; 326 src: url('//nativepet.com/cdn/shop/t/361/assets/Adieu-LightSlanted.woff2') format("woff2"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-LightSlanted.woff') format("woff"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-LightSlanted.otf') format("opentype"); 327 font-weight: 200; 328 font-display: swap; 329 } 330 331 @font-face { 332 font-family: 'Adieu'; 333 font-style: italic; 334 src: url('//nativepet.com/cdn/shop/t/361/assets/Adieu-RegularSlanted.woff2') format("woff2"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-RegularSlanted.woff') format("woff"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-RegularSlanted.otf') format("opentype"); 335 font-weight: 400; 336 font-display: swap; 337 } 338 339 @font-face { 340 font-family: 'Adieu'; 341 font-style: italic; 342 src: url('//nativepet.com/cdn/shop/t/361/assets/Adieu-BoldSlanted.woff2') format("woff2"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-BoldSlanted.woff') format("woff"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-BoldSlanted.otf') format("opentype"); 343 font-weight: 700; 344 font-display: swap; 345 } 346 347 @font-face { 348 font-family: 'Adieu'; 349 font-style: italic; 350 src: url('//nativepet.com/cdn/shop/t/361/assets/Adieu-BlackSlanted.woff2') format("woff2"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-BlackSlanted.woff') format("woff"), url('//nativepet.com/cdn/shop/t/361/assets/Adieu-BlackSlanted.otf') format("opentype"); 351 font-weight: 900; 352 font-display: swap; 353 } 354 355 @font-face { 356 font-family: 'F37 Ginger Soft'; 357 font-style: normal; 358 src: url('//nativepet.com/cdn/shop/t/361/assets/F37GingerSoft-Regular.woff2') format("woff2"), url('//nativepet.com/cdn/shop/t/361/assets/F37GingerSoft-Regular.woff') format("woff"), url('//nativepet.com/cdn/shop/t/361/assets/F37GingerSoft-Regular.otf') format("opentype"); 359 font-weight: 400; 360 font-display: swap; 361 } 362 363 @font-face { 364 font-family: 'F37 Ginger Soft'; 365 font-style: italic; 366 src: url('//nativepet.com/cdn/shop/t/361/assets/F37GingerSoft-RegularItalic.woff2') format("woff2"), url('//nativepet.com/cdn/shop/t/361/assets/F37GingerSoft-RegularItalic.woff') format("woff"), url('//nativepet.com/cdn/shop/t/361/assets/F37GingerSoft-RegularItalic.otf') format("opentype"); 367 font-weight: 400; 368 font-display: swap; 369 } 370 371 @font-face { 372 font-family: 'F37 Ginger Soft'; 373 font-style: normal; 374 src: url('//nativepet.com/cdn/shop/t/361/assets/F37GingerSoft-Bold.woff2') format("woff2"), url('//nativepet.com/cdn/shop/t/361/assets/F37GingerSoft-Bold.woff') format("woff"), url('//nativepet.com/cdn/shop/t/361/assets/F37GingerSoft-Bold.otf') format("opentype"); 375 font-weight: 700; 376 font-display: swap; 377 } 378 379 @font-face { 380 font-family: 'F37 Ginger Soft'; 381 font-style: italic; 382 src: url('//nativepet.com/cdn/shop/t/361/assets/F37GingerSoft-BoldItalic.woff2') format("woff2"), url('//nativepet.com/cdn/shop/t/361/assets/F37GingerSoft-BoldItalic.woff') format("woff"), url('//nativepet.com/cdn/shop/t/361/assets/F37GingerSoft-BoldItalic.otf') format("opentype"); 383 font-weight: 700; 384 font-display: swap; 385 } 386 387 @font-face { 388 font-family: 'Suisse Intl Mono'; 389 font-style: normal; 390 src: url('//nativepet.com/cdn/shop/t/361/assets/SuisseIntlMono-Regular-WebS.woff2') format("woff2"), url('//nativepet.com/cdn/shop/t/361/assets/SuisseIntlMono-Regular-WebS.woff') format("woff"); 391 font-weight: 400; 392 font-display: swap; 393 } 394 395 396 .color-scheme-1 { 397 --color-background: #155dd7; 398 --color-background-gradient: ; 399 --color-foreground: #ffffff; 400 --color-shadow: #155dd7; 401 --color-button: #deff5b; 402 --color-button-text: #155dd7; 403 --color-secondary-button: #155dd7; 404 --color-secondary-button-text: #155dd7; 405 } 406 407 .color-scheme-2 {
408 --color-background: #ffffff; 409 --color-background-gradient: ; 410 --color-foreground: #155dd7; 411 --color-shadow: #deff5b; 412 --color-button: #155dd7; 413 --color-button-text: #deff5b; 414 --color-secondary-button: #ffffff; 415 --color-secondary-button-text: #155dd7; 416 } 417 :root, 418 .color-scheme-3 { 419 --color-background: #ffffff; 420 --color-background-gradient: ; 421 --color-foreground: #155dd7; 422 --color-shadow: #155dd7; 423 --color-button: #deff5b; 424 --color-button-text: #155dd7; 425 --color-secondary-button: #ffffff; 426 --color-secondary-button-text: #155dd7; 427 } 428 429 .color-scheme-4 { 430 --color-background: #e2f5fa; 431 --color-background-gradient: ; 432 --color-foreground: #155dd7; 433 --color-shadow: #155dd7; 434 --color-button: #deff5b; 435 --color-button-text: #155dd7; 436 --color-secondary-button: #e2f5fa; 437 --color-secondary-button-text: #5b6b7f; 438 } 439 440 .color-scheme-5 { 441 --color-background: #155dd7; 442 --color-background-gradient: ; 443 --color-foreground: #ffffff; 444 --color-shadow: #deff5b; 445 --color-button: #155dd7; 446 --color-button-text: #deff5b; 447 --color-secondary-button: #155dd7; 448 --color-secondary-button-text: #155dd7; 449 } 450 451 .color-scheme-6 { 452 --color-background: #deff5b; 453 --color-background-gradient: ; 454 --color-foreground: #155dd7; 455 --color-shadow: #155dd7; 456 --color-button: #155dd7; 457 --color-button-text: #ffffff; 458 --color-secondary-button: #deff5b; 459 --color-secondary-button-text: #155dd7; 460 } 461 462 .color-scheme-7 { 463 --color-background: #e2f5fa; 464 --color-background-gradient: ; 465 --color-foreground: #155dd7; 466 --color-shadow: #deff5b; 467 --color-button: #155dd7; 468 --color-button-text: #deff5b; 469 --color-secondary-button: #e2f5fa; 470 --color-secondary-button-text: #5b6b7f; 471 } 472 473 .color-scheme-69828ea5-8c9c-4397-9f98-918bda86a92a { 474 --color-background: #e2f5fa; 475 --color-background-gradient: ; 476 --color-foreground: #155dd7; 477 --color-shadow: #155dd7; 478 --color-button: #deff5b; 479 --color-button-text: #155dd7; 480 --color-secondary-button: #e2f5fa; 481 --color-secondary-button-text: #155dd7; 482 } 483 484 .color-scheme-9 { 485 --color-background: #155dd7; 486 --color-background-gradient: ; 487 --color-foreground: #deff5b; 488 --color-shadow: #e2f5fa; 489 --color-button: #deff5b; 490 --color-button-text: #155dd7; 491 --color-secondary-button: #155dd7; 492 --color-secondary-button-text: #155dd7; 493 } 494 495 .color-scheme-0fd989ee-0686-4f8a-b1bd-6883d7843d4a { 496 --color-background: #155dd7; 497 --color-background-gradient: linear-gradient(90deg, rgba(21, 93, 215, 1), rgba(137, 225, 208, 1) 100%); 498 --color-foreground: #deff5b; 499 --color-shadow: #155dd7; 500 --color-button: #deff5b; 501 --color-button-text: #155dd7; 502 --color-secondary-button: #155dd7; 503 --color-secondary-button-text: #155dd7; 504 } 505 506 .color-scheme-9410d6e7-e586-48d7-949b-7dcf339b6a35 { 507 --color-background: #155dd7; 508 --color-background-gradient: linear-gradient(90deg, rgba(222, 255, 91, 1), rgba(21, 93, 215, 1) 58%); 509 --color-foreground: #deff5b; 510 --color-shadow: #155dd7; 511 --color-button: #deff5b; 512 --color-button-text: #155dd7; 513 --color-secondary-button: #155dd7; 514 --color-secondary-button-text: #155dd7; 515 } 516 517 .color-scheme-10 { 518 --color-background: #155dd7; 519 --color-background-gradient: ; 520 --color-foreground: #deff5b; 521 --color-shadow: #e2f5fa; 522 --color-button: #155dd7; 523 --color-button-text: #ffffff; 524 --color-secondary-button: #155dd7; 525 --color-secondary-button-text: #155dd7; 526 } 527 528 .color-scheme-11 { 529 --color-background: #d5e1f6; 530 --color-background-gradient: ; 531 --color-foreground: #155dd7; 532 --color-shadow: #155dd7; 533 --color-button: #deff5b; 534 --color-button-text: #155dd7; 535 --color-secondary-button: #d5e1f6; 536 --color-secondary-button-text: #155dd7; 537 } 538 539 .color-scheme-12 { 540 --color-background: #fafafa; 541 --color-background-gradient: ; 542 --color-foreground: #155dd7; 543 --color-shadow: #e2f5fa; 544 --color-button: #155dd7; 545 --color-button-text: #e2f5fa; 546 --color-secondary-button: #fafafa; 547 --color-secondary-button-text: #5b6b7f; 548 } 549 550 .color-scheme-13 { 551 --color-background: #d5e1f6; 552 --color-background-gradient: ; 553 --color-foreground: #155dd7; 554 --color-shadow: #e2f5fa; 555 --color-button: #155dd7; 556 --color-button-text: #e2f5fa; 557 --color-secondary-button: #d5e1f6; 558 --color-secondary-button-text: #ffffff; 559 } 560 561 .color-scheme-14 { 562 --color-background: #ffffff; 563 --color-background-gradient: ; 564 --color-foreground: #155dd7; 565 --color-shadow: #e2f5fa; 566 --color-button: #155dd7; 567 --color-button-text: #e2f5fa; 568 --color-secondary-button: #ffffff; 569 --color-secondary-button-text: #155dd7; 570 } 571 572</style> 573 574
574<script> 575 document.documentElement.classList.replace('no-js', 'js'); 576 if (Shopify.designMode) { 577 document.documentElement.classList.add('shopify-design-mode'); 578 } 579</script>
579 580
581<script> 582 LUX = (function () { 583 function n() { 584 return Date.now ? Date.now() : +new Date(); 585 } 586 var r, 587 t = n(), 588 a = window.performance || {}, 589 e = a.timing || { 590 activationStart: 0, 591 navigationStart: (null === (r = window.LUX) || void 0 === r ? void 0 : r.ns) || t, 592 }; 593 function i() { 594 return a.now ? ((r = a.now()), Math.floor(r)) : n() - e.navigationStart; 595 var r; 596 } 597 (((LUX = window.LUX || {}).ac = []), 598 (LUX.addData = function (n, r) { 599 return LUX.cmd(['addData', n, r]); 600 }), 601 (LUX.cmd = function (n) { 602 return LUX.ac.push(n); 603 }), 604 (LUX.getDebug = function () { 605 return [[t, 0, []]]; 606 }), 607 (LUX.init = function () { 608 return LUX.cmd(['init']); 609 }), 610 (LUX.mark = function () { 611 for (var n = [], r = 0; r < arguments.length; r++) n[r] = arguments[r]; 612 if (a.mark) return a.mark.apply(a, n); 613 var t = n[0], 614 e = n[1] || {}; 615 void 0 === e.startTime && (e.startTime = i()); 616 LUX.cmd(['mark', t, e]); 617 }), 618 (LUX.markLoadTime = function () { 619 return LUX.cmd(['markLoadTime', i()]); 620 }), 621 (LUX.measure = function () { 622 for (var n = [], r = 0; r < arguments.length; r++) n[r] = arguments[r]; 623 if (a.measure) return a.measure.apply(a, n); 624 var t, 625 e = n[0], 626 o = n[1], 627 u = n[2]; 628 t = 'object' == typeof o ? n[1] : { start: o, end: u }; 629 t.duration || t.end || (t.end = i()); 630 LUX.cmd(['measure', e, t]); 631 }), 632 (LUX.send = function () { 633 return LUX.cmd(['send']); 634 }), 635 (LUX.ns = t)); 636 var o = LUX; 637 return ( 638 (window.LUX_ae = []), 639 window.addEventListener('error', function (n) { 640 window.LUX_ae.push(n); 641 }), 642 o 643 ); 644 })(); 645</script>
vendor: 1 bytes, line 645
645
646<script src="https://cdn.speedcurve.com/js/lux.js?id=4628291387" defer crossorigin="anonymous"></script>
646 647 648 649
650<script>
vendor: 415 bytes, lines 650-660
650 651 (function (w, d, s, l, i) { 652 w[l] = w[l] || []; 653 w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); 654 var f = d.getElementsByTagName(s)[0], 655 j = d.createElement(s), 656 dl = l != 'dataLayer' ? '&l=' + l : ''; 657 j.async = true; 658 j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; 659 f.parentNode.insertBefore(j, f); 660 })(window, document, 'script', 'dataLayer', '
660GTM-5FXN3GW
vendor: 4 bytes, line 660
660');
661</script>
661 662
663<script async="async" src="https://mm-uxrv.com/js/mm_3313584a-9861-45df-95ad-473af76dfb09-77254798.js"></script>
663 664 665 666 667
667<script> 668 function runShopliftHook() { 669 const data = localStorage.getItem('Shoplift_Essential'); 670 const shopliftTestConfigs = window.shopliftInstance.testConfigs; 671 672 if (data && shopliftTestConfigs) { 673 const parsedData = JSON.parse(data); 674 675 for (const visitorTest of parsedData.visitorTests) { 676 const testConfig = shopliftTestConfigs.find((test) => test.id === visitorTest.testId); 677 678 if (!testConfig) { 679 continue; 680 } 681 682 const visitorHypothesis = testConfig.hypotheses.find( 683 (hypothesis) => hypothesis.id === visitorTest.hypothesisId, 684 ); 685 686 687 688 heap.addUserProperties({ 689 ['Shoplift-Exp-' + testConfig.title]: visitorHypothesis.isControl ? 'control' : 'variant', 690 }); 691 } 692 } 693 } 694 695 function checkShopliftInitialized() { 696 const startTime = Date.now(); 697 const maxWaitTime = 5000; // 5 seconds 698 699 function check() { 700 if (window.shoplift && window.heap?.loaded) { 701 runShopliftHook(); 702 } else if (Date.now() - startTime < maxWaitTime) { 703 setTimeout(check, 500); 704 } else { 705 console.warn('Shoplift initialization timed out after 5 seconds'); 706 } 707 } 708 709 check(); 710 } 711 712 document.addEventListener('DOMContentLoaded', checkShopliftInitialized); 713 </script>
713 714 715 716
717<script name="sliderule-tracking" data-ot-ignore> 718 (function(){ 719 slideruleData = { 720 "version":"v0.0.1", 721 "referralExclusion":"/(paypal|visa|MasterCard|clicksafe|arcot\.com|geschuetzteinkaufen|checkout\.shopify\.com|checkout\.rechargeapps\.com|portal\.afterpay\.com|payfort)/", 722 "googleSignals":true, 723 "anonymizeIp":true, 724 "productClicks":true, 725 "persistentUserId":true, 726 "hideBranding":false, 727 "ecommerce":{"currencyCode":"USD", 728 "impressions":[]}, 729 "pageType":"page", 730 "destinations":{}, 731 "cookieUpdate":true 732 } 733 734 735 slideruleData.themeMode = "live" 736 737 738 739 740 741 742 })(); 743</script>
vendor: 1 bytes, line 743
743
744<script async type="text/javascript" src="https://grow.slideruleanalytics.com/eluredils-g.js"></script>
744 745 746 747 <!-- BEGIN app block: shopify://apps/consentmo-gdpr/blocks/gdpr_cookie_consent/4fbe573f-a377-4fea-9801-3ee0858cae41 --> 748<link rel="preconnect" href="https://app.consentmo.com" crossorigin data-csm-preconnect="app"> 749<link rel="dns-prefetch" href="https://workers.consentmo.com" data-csm-preconnect="workers"> 750<link rel="dns-prefetch" href="https://storage.consentmo.com" data-csm-preconnect="storage"> 751<link rel="preconnect" href="https://cdn.consentmo.com" crossorigin data-csm-preconnect="cdn"><link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="banner"> 752 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-cookie-dialog.consentmo.js" crossorigin data-csm-layout-prefetch="dialog"> 753 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-cookie-box.consentmo.js" crossorigin data-csm-layout-prefetch="box"> 754 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-cookie-smart-banner.consentmo.js" crossorigin data-csm-layout-prefetch="smart"> 755 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-mobile-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="mobile">
755<script> 756(function () { 757 try { 758 document.documentElement.classList.add('csm-cookie-embed'); 759 } catch (e) {} 760})(); 761</script>
761<script data-consentmo-data-src-bootstrap> 762(function () { 763 'use strict'; 764 if (window.__consentmoDataSrcBootstrapInit) return; 765 window.__consentmoDataSrcBootstrapInit = true; 766 767 var DATA_SRC_SELECTOR = [ 768 'script[data-src*="consentmo_cookie_consent"]', 769 'script[data-src*="gdpr_cookie_consent.min"]', 770 'script[data-src*="gdrp_cookie_consent_unlimited"]' 771 ].join(','); 772 773 function activateConsentmoDataSrcScripts() { 774 if (!window.Shopify || !window.Shopify.shop) return; 775 document.querySelectorAll(DATA_SRC_SELECTOR).forEach(function (scriptEl) { 776 // getAttribute: src="" must not count as "already has src" (.src === page URL). 777 if (scriptEl.getAttribute('src')) return; 778 var url = scriptEl.getAttribute('data-src'); 779 if (!url) return; 780 if (scriptEl.getAttribute('type') === 'text/plain') { 781 scriptEl.removeAttribute('type'); 782 } 783 scriptEl.src = url; 784 }); 785 } 786 function scheduleActivation() { 787 activateConsentmoDataSrcScripts(); 788 // Retry on next task so other DCL handlers (lazy-loaders) can finish setting Shopify.shop / data-src first. 789 setTimeout(activateConsentmoDataSrcScripts, 0); 790 } 791 if (document.readyState === 'loading') { 792 document.addEventListener('DOMContentLoaded', scheduleActivation, { once: true }); 793 } else { 794 scheduleActivation(); 795 } 796})(); 797</script>
797 798 799 800<!-- END app block --><!-- BEGIN app block: shopify://apps/intelligems-a-b-testing/blocks/intelligems-script/fa83b64c-0c77-4c0c-b4b2-b94b42f5ef19 -->
800<script> 801 window._template = { 802 directory: "", 803 name: "page", 804 suffix: "store-locator" 805 }; 806 window.__productIdFromTemplate = null; 807 window.__plpCollectionIdFromTemplate = null; 808 window.igProductData = (function() { 809 const data = {};return data; 810 })(); 811</script>
811 812
813<script type="module" blocking="render" fetchpriority="high" src="https://cdn.intelligems.io/esm/7e58415fb6af/bundle.js" data-em-disable async></script>
813 814 815 816<!-- END app block --><!-- BEGIN app block: shopify://apps/attentive/blocks/attn-tag/8df62c72-8fe4-407e-a5b3-72132be30a0d -->
816<script type="text/javascript" src="https://pqzba.nativepet.com/providers/atLabel/load" onerror=" var fallbackScript = document.createElement('script'); fallbackScript.src = 'https://cdn.attn.tv/nativepet/dtag.js'; document.head.appendChild(fallbackScript);" data-source="loaded?source=app-embed" defer="defer"></script>
816 817 818 819<!-- END app block --><!-- BEGIN app block: shopify://apps/loyalty-rewards-and-referrals/blocks/embed-main/6f172e67-4106-4ac0-89c5-b32a069b3101 --> 820 821<style 822 type='text/css' 823 data-lion-app-styles='main' 824 data-lion-app-styles-settings='{"primary_color":"#4d384b","secondary_color":"#126bbf","icon_color":"#126bbf","button_size":"medium","button_border_radius":4,"button_primary_background_color":"#4d384b","button_primary_text_color":"#ffffff","button_neutral_background_color":"#757575","button_neutral_text_color":"#ffffff"}' 825></style> 826 827 828<!-- END app block --><!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 --> 829 830 831 832 833 834 835 836 837 838 839 840 841
841<script async src="https://static.klaviyo.com/onsite/js/KNpPbt/klaviyo.js?company_id=KNpPbt"></script>
841 842
842<script>!function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}();</script>
842 843 844 845 846 847 848 849
849<script> 850 window.klaviyoReviewsProductDesignMode = false 851 </script>
851 852 853 854 855 <!-- BEGIN app snippet: customer-hub-data -->
855<script> 856 if (!window.customerHub) { 857 window.customerHub = {}; 858 } 859 window.customerHub.storefrontRoutes = { 860 login: "https://nativepet.com/customer_authentication/redirect?locale=en®ion_country=US?return_url=%2F%23k-hub", 861 register: "https://account.nativepet.com?locale=en®ion_country=US&buyer_flags=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ0aGUtbmF0aXZlLXBldC5teXNob3BpZnkuY29tIiwiZmxhZ3MiOltdLCJleHAiOjE3OTE2NzgzMjcsIm5iZiI6MTc5MTA3MzUyN30.0qNQGYmJJhtznapaNwet3WHH6L0tkTJMQbX-ZqlhajE?return_url=%2F%23k-hub", 862 logout: "/account/logout", 863 profile: "/account", 864 addresses: "/account/addresses", 865 }; 866 867 window.customerHub.userId = null; 868 869 window.customerHub.storeDomain = "the-native-pet.myshopify.com"; 870 871 872 873 874 window.customerHub.storeLocale = { 875 currentLanguage: 'en', 876 currentCountry: 'US', 877 availableLanguages: [ 878 879 { 880 iso_code: 'en', 881 endonym_name: 'English' 882 } 883 884 ], 885 availableCountries: [ 886 887 { 888 iso_code: 'US', 889 name: 'United States', 890 currency_code: 'USD' 891 } 892 893 ] 894 }; 895 896</script>
896 897<!-- END app snippet --> 898 899 900 901 902 903 904 905<!-- END app block --><!-- BEGIN app block: shopify://apps/loyalty-rewards-and-referrals/blocks/embed-sdk/6f172e67-4106-4ac0-89c5-b32a069b3101 --> 906 907<style 908 type='text/css' 909 data-lion-app-styles='main' 910 data-lion-app-styles-settings='{"disableBundledCSS":false,"disableBundledFonts":true,"useClassIsolator":false}' 911></style> 912 913<!-- loyaltylion.snippet.version=fca9e1ed84+13037 --> 914 915
916<script> 917 918 !function(t,n){function o(n){var o=t.getElementsByTagName("script")[0],i=t.createElement("script");i.src=n,i.crossOrigin="",o.parentNode.insertBefore(i,o)}if(!n.isLoyaltyLion){window.loyaltylion=n,void 0===window.lion&&(window.lion=n),n.version=2,n.isLoyaltyLion=!0;var i=new Date,e=i.getFullYear().toString()+i.getMonth().toString()+i.getDate().toString();o("https://sdk.loyaltylion.net/static/2/loader.js?t="+e);var r=!1;n.init=function(t){if(r)throw new Error("Cannot call lion.init more than once");r=!0;var a=n._token=t.token;if(!a)throw new Error("Token must be supplied to lion.init");for(var l=[],s="_push configure bootstrap shutdown on removeListener authenticateCustomer".split(" "),c=0;c<s.length;c+=1)!function(t,n){t[n]=function(){l.push([n,Array.prototype.slice.call(arguments,0)])}}(n,s[c]);o("https://sdk.loyaltylion.net/sdk/start/"+a+".js?t="+e+i.getHours().toString()),n._initData=t,n._buffer=l}}}(document,window.loyaltylion||[]); 919 920 921 922 loyaltylion.init( 923 { token: "392d5ef14ddbf4e5da13ae3b51aa43c2" } 924 ); 925 926 927 928 loyaltylion.configure({ 929 disableBundledCSS: false, 930 disableBundledFonts: true, 931 useClassIsolator: false, 932 }) 933 934 935</script>
935 936 937 938 939<!-- END app block --><!-- BEGIN app block: shopify://apps/okendo/blocks/theme-settings/bb689e69-ea70-4661-8fb7-ad24a2e23c29 --><!-- BEGIN app snippet: header-metafields --> 940 941 942 943 944 945 946 947 948 949 950 951 952 953 <style data-oke-reviews-version="0.104.2" type="text/css" data-href="https://cdn-static.okendo.io/reviews-widget-plus/css/okendo-reviews-styles.c5b9c195.css"></style><style data-oke-reviews-version="0.104.2" type="text/css" data-href="https://cdn-static.okendo.io/reviews-widget-plus/css/modules/okendo-star-rating.4cb378a8.css"></style><style data-oke-reviews-version="0.104.2" type="text/css" data-href="https://cdn-static.okendo.io/reviews-widget-plus/css/modules/okendo-reviews-keywords.0942444f.css"></style><style data-oke-reviews-version="0.104.2" type="text/css" data-href="https://cdn-static.okendo.io/reviews-widget-plus/css/modules/okendo-reviews-summary.a0c9d7d6.css"></style><style type="text/css">.okeReviews[data-oke-container],div.okeReviews{font-size:14px;font-size:var(--oke-text-regular);font-weight:400;font-family:var(--oke-text-fontFamily);line-height:1.6}.okeReviews[data-oke-container] *,.okeReviews[data-oke-container] :after,.okeReviews[data-oke-container] :before,div.okeReviews *,div.okeReviews :after,div.okeReviews :before{box-sizing:border-box}.okeReviews[data-oke-container] h1,.okeReviews[data-oke-container] h2,.okeReviews[data-oke-container] h3,.okeReviews[data-oke-container] h4,.okeReviews[data-oke-container] h5,.okeReviews[data-oke-container] h6,div.okeReviews h1,div.okeReviews h2,div.okeReviews h3,div.okeReviews h4,div.okeReviews h5,div.okeReviews h6{font-size:1em;font-weight:400;line-height:1.4;margin:0}.okeReviews[data-oke-container] ul,div.okeReviews ul{padding:0;margin:0}.okeReviews[data-oke-container] li,div.okeReviews li{list-style-type:none;padding:0}.okeReviews[data-oke-container] p,div.okeReviews p{line-height:1.8;margin:0 0 4px}.okeReviews[data-oke-container] p:last-child,div.okeReviews p:last-child{margin-bottom:0}.okeReviews[data-oke-container] a,div.okeReviews a{text-decoration:none;color:inherit}.okeReviews[data-oke-container] button,div.okeReviews button{border-radius:0;border:0;box-shadow:none;margin:0;width:auto;min-width:auto;padding:0;background-color:transparent;min-height:auto}.okeReviews[data-oke-container] button,.okeReviews[data-oke-container] input,.okeReviews[data-oke-container] select,.okeReviews[data-oke-container] textarea,div.okeReviews button,div.okeReviews input,div.okeReviews select,div.okeReviews textarea{font-family:inherit;font-size:1em}.okeReviews[data-oke-container] label,.okeReviews[data-oke-container] select,div.okeReviews label,div.okeReviews select{display:inline}.okeReviews[data-oke-container] select,div.okeReviews select{width:auto}.okeReviews[data-oke-container] article,.okeReviews[data-oke-container] aside,div.okeReviews article,div.okeReviews aside{margin:0}.okeReviews[data-oke-container] table,div.okeReviews table{background:transparent;border:0;border-collapse:collapse;border-spacing:0;font-family:inherit;font-size:1em;table-layout:auto}.okeReviews[data-oke-container] table td,.okeReviews[data-oke-container] table th,.okeReviews[data-oke-container] table tr,div.okeReviews table td,div.okeReviews table th,div.okeReviews table tr{border:0;font-family:inherit;font-size:1em}.okeReviews[data-oke-container] table td,.okeReviews[data-oke-container] table th,div.okeReviews table td,div.okeReviews table th{background:transparent;font-weight:400;letter-spacing:normal;padding:0;text-align:left;text-transform:none;vertical-align:middle}.okeReviews[data-oke-container] table tr:hover td,.okeReviews[data-oke-container] table tr:hover th,div.okeReviews table tr:hover td,div.okeReviews table tr:hover th{background:transparent}.okeReviews[data-oke-container] fieldset,div.okeReviews fieldset{border:0;padding:0;margin:0;min-width:0}.okeReviews[data-oke-container] img,.okeReviews[data-oke-container] svg,div.okeReviews img,div.okeReviews svg{max-width:none}.okeReviews[data-oke-container] div:empty,div.okeReviews div:empty{display:block}.okeReviews[data-oke-container] .oke-icon:before,div.okeReviews .oke-icon:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:inherit}.okeReviews[data-oke-container] .oke-icon--select-arrow:before,div.okeReviews .oke-icon--select-arrow:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--loading:before,div.okeReviews .oke-icon--loading:before{content:"î¤"}
953.okeReviews[data-oke-container] .oke-icon--pencil:before,div.okeReviews .oke-icon--pencil:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--filter:before,div.okeReviews .oke-icon--filter:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--play:before,div.okeReviews .oke-icon--play:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--tick-circle:before,div.okeReviews .oke-icon--tick-circle:before{content:"î¤
"}.okeReviews[data-oke-container] .oke-icon--chevron-left:before,div.okeReviews .oke-icon--chevron-left:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-right:before,div.okeReviews .oke-icon--chevron-right:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--thumbs-down:before,div.okeReviews .oke-icon--thumbs-down:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--thumbs-up:before,div.okeReviews .oke-icon--thumbs-up:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--close:before,div.okeReviews .oke-icon--close:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-up:before,div.okeReviews .oke-icon--chevron-up:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-down:before,div.okeReviews .oke-icon--chevron-down:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--star:before,div.okeReviews .oke-icon--star:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--magnifying-glass:before,div.okeReviews .oke-icon--magnifying-glass:before{content:"î¤"}@font-face{font-family:oke-widget-icons;src:url(https://cdn-static.okendo.io/reviews-widget-plus/fonts/oke-widget-icons.fbb067ad.ttf) format("truetype"),url(https://cdn-static.okendo.io/reviews-widget-plus/fonts/oke-widget-icons.64db83c3.woff) format("woff"),url(https://cdn-static.okendo.io/reviews-widget-plus/img/oke-widget-icons.bc0d6b0a.svg) format("svg");font-weight:400;font-style:normal;font-display:swap}.okeReviews[data-oke-container] .oke-button,div.okeReviews .oke-button{display:inline-block;border-style:solid;border-color:var(--oke-button-borderColor);border-width:var(--oke-button-borderWidth);background-color:var(--oke-button-backgroundColor);line-height:1;padding:12px 24px;margin:0;border-radius:var(--oke-button-borderRadius);color:var(--oke-button-textColor);text-align:center;position:relative;font-weight:var(--oke-button-fontWeight);font-size:var(--oke-button-fontSize);font-family:var(--oke-button-fontFamily);outline:0}.okeReviews[data-oke-container] .oke-button-text,.okeReviews[data-oke-container] .oke-button .oke-icon,div.okeReviews .oke-button-text,div.okeReviews .oke-button .oke-icon{line-height:1}.okeReviews[data-oke-container] .oke-button.oke-is-loading,div.okeReviews .oke-button.oke-is-loading{position:relative}.okeReviews[data-oke-container] .oke-button.oke-is-loading:before,div.okeReviews .oke-button.oke-is-loading:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:undefined;font-size:12px;display:inline-block;animation:oke-spin 1s linear infinite;position:absolute;width:12px;height:12px;top:0;left:0;bottom:0;right:0;margin:auto}.okeReviews[data-oke-container] .oke-button.oke-is-loading>*,div.okeReviews .oke-button.oke-is-loading>*{opacity:0}.okeReviews[data-oke-container] .oke-button.oke-is-active,div.okeReviews .oke-button.oke-is-active{background-color:var(--oke-button-backgroundColorActive);color:var(--oke-button-textColorActive);border-color:var(--oke-button-borderColorActive)}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading),div.okeReviews .oke-button:not(.oke-is-loading){cursor:pointer}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):hover,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):hover{background-color:var(--oke-button-backgroundColorHover);color:var(--oke-button-textColorHover);border-color:var(--oke-button-borderColorHover);box-shadow:0 0 0 2px var(--oke-button-backgroundColorHover)}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):active,.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):hover:active,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):active,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):hover:active{background-color:var(--oke-button-backgroundColorActive);color:var(--oke-button-textColorActive);border-color:var(--oke-button-borderColorActive)}.okeReviews[data-oke-container] .oke-title,div.okeReviews .oke-title{font-weight:var(--oke-title-fontWeight);font-size:var(--oke-title-fontSize);font-family:var(--oke-title-fontFamily)}.okeReviews[data-oke-container] .oke-bodyText,div.okeReviews .oke-bodyText{font-weight:var(--oke-bodyText-fontWeight);font-size:var(--oke-bodyText-fontSize);font-family:var(--oke-bodyText-fontFamily)}.okeReviews[data-oke-container] .oke-linkButton,div.okeReviews .oke-linkButton{curs
953or:pointer;font-weight:700;pointer-events:auto;text-decoration:underline}.okeReviews[data-oke-container] .oke-linkButton:hover,div.okeReviews .oke-linkButton:hover{text-decoration:none}.okeReviews[data-oke-container] .oke-readMore,div.okeReviews .oke-readMore{cursor:pointer;color:inherit;text-decoration:underline}.okeReviews[data-oke-container] .oke-select,div.okeReviews .oke-select{cursor:pointer;background-repeat:no-repeat;background-position-x:100%;background-position-y:50%;border:none;padding:0 24px 0 12px;-moz-appearance:none;appearance:none;color:inherit;-webkit-appearance:none;background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg fill='currentColor' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");outline-offset:4px}.okeReviews[data-oke-container] .oke-select:disabled,div.okeReviews .oke-select:disabled{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg fill='%239a9db1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E")}.okeReviews[data-oke-container] .oke-loader,div.okeReviews .oke-loader{position:relative}.okeReviews[data-oke-container] .oke-loader:before,div.okeReviews .oke-loader:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:var(--oke-text-secondaryColor);font-size:12px;display:inline-block;animation:oke-spin 1s linear infinite;position:absolute;width:12px;height:12px;top:0;left:0;bottom:0;right:0;margin:auto}.okeReviews[data-oke-container] .oke-a11yText,div.okeReviews .oke-a11yText{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.okeReviews[data-oke-container] .oke-hidden,div.okeReviews .oke-hidden{display:none}.okeReviews[data-oke-container] .oke-modal,div.okeReviews .oke-modal{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:2147483647;max-height:100%;background-color:rgba(0,0,0,.5);padding:40px 0 12px}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal,div.okeReviews .oke-modal{display:flex;align-items:center;padding:48px 0}}.okeReviews[data-oke-container] .oke-modal ::-moz-selection,div.okeReviews .oke-modal ::-moz-selection{background-color:rgba(39,45,69,.2)}.okeReviews[data-oke-container] .oke-modal ::selection,div.okeReviews .oke-modal ::selection{background-color:rgba(39,45,69,.2)}.okeReviews[data-oke-container] .oke-modal,.okeReviews[data-oke-container] .oke-modal p,div.okeReviews .oke-modal,div.okeReviews .oke-modal p{color:#272d45}.okeReviews[data-oke-container] .oke-modal-content,div.okeReviews .oke-modal-content{background-color:#fff;margin:auto;position:relative;will-change:transform,opacity;width:calc(100% - 24px)}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal-content,div.okeReviews .oke-modal-content{max-width:1000px}}.okeReviews[data-oke-container] .oke-modal-close,div.okeReviews .oke-modal-close{cursor:pointer;position:absolute;width:32px;height:32px;top:-32px;padding:4px;right:-4px;line-height:1}.okeReviews[data-oke-container] .oke-modal-close:before,div.okeReviews .oke-modal-close:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:#fff;font-size:24px;display:inline-block;width:24px;height:24px}.okeReviews[data-oke-container] .oke-modal-overlay,div.okeReviews .oke-modal-overlay{background-color:rgba(43,46,56,.9)}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal--large .oke-modal-content,div.okeReviews .oke-modal--large .oke-modal-content{max-width:1200px}}.okeReviews[data-oke-container] .oke-modal .oke-helpful,.okeReviews[data-oke-container] .oke-modal .oke-helpful-vote-button,.okeReviews[data-oke-container] .oke-modal .oke-reviewContent-date,div.okeReviews .oke-modal .oke-helpful,div.okeReviews .oke-modal .oke-helpful-vote-button,div.okeReviews .oke-modal .oke-reviewContent-date{color:#676986}.oke-modal .okeReviews[data-oke-container].oke-w,.oke-modal div.okeReviews.oke-w{color:#272d45}.okeReviews[data-oke-container] .oke-tag,div.okeReviews .oke-tag{align-items:center;color:#272d45;display:flex;font-size:var(--oke-text-small);font-weight:600;text-align:left;position:relative;z-index:2;background-color:#f4f4f6;padding:4px 6px;border:none;border-radius:4px;gap:6px;line-height:1}.okeReviews[data-oke-container] .oke-tag svg,div.okeReviews .oke-tag svg{fill:currentColor;height:1rem}.okeReviews[data-oke-container] .hooper,div.okeReviews .hooper{height:auto}.okeReviews--left{text-align:left}.okeReviews--right{text-align:right}.okeReviews--center{text-align:center}.okeReviews :not([tabindex="-1"]):focus-visible{outline:5px auto highlight;outline:5px auto -webkit-focus-ring-color}.is-oke-modalOpen{overflow:hidden!important}img.oke-is-error{background-color:var(--oke-shadingColor);background-size:cover;background-position:50% 50%;box-shadow:inset 0 0 0 1px var(--oke-border-color)}@keyframes oke-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes oke-fade-in{0%{opacity:0}
953to{opacity:1}}.layout-panel-flex>div:has([data-oke-container]){width:100%} 954.oke-stars{line-height:1;position:relative;display:inline-block}.oke-stars-background svg{overflow:visible}.oke-stars-foreground{overflow:hidden;position:absolute;top:0;left:0}.oke-sr{display:inline-block;padding-top:var(--oke-starRating-spaceAbove);padding-bottom:var(--oke-starRating-spaceBelow)}.oke-sr .oke-is-clickable{cursor:pointer}.oke-sr--hidden{display:none}.oke-sr-count,.oke-sr-rating,.oke-sr-stars{display:inline-block;vertical-align:middle}.oke-sr-stars{line-height:1;margin-right:8px}.oke-sr-rating{display:none}.oke-sr-count--brackets:before{content:"("}.oke-sr-count--brackets:after{content:")"} 955.oke-rk{display:block}.okeReviews[data-oke-container] .oke-reviewsKeywords-heading,div.okeReviews .oke-reviewsKeywords-heading{font-weight:700;margin-bottom:8px}.okeReviews[data-oke-container] .oke-reviewsKeywords-heading-skeleton,div.okeReviews .oke-reviewsKeywords-heading-skeleton{height:calc(var(--oke-button-fontSize) + 4px);width:150px}.okeReviews[data-oke-container] .oke-reviewsKeywords-list,div.okeReviews .oke-reviewsKeywords-list{display:inline-flex;align-items:center;flex-wrap:wrap;gap:4px}.okeReviews[data-oke-container] .oke-reviewsKeywords-list-category,div.okeReviews .oke-reviewsKeywords-list-category{background-color:var(--oke-filter-backgroundColor);color:var(--oke-filter-textColor);border:1px solid var(--oke-filter-borderColor);border-radius:var(--oke-filter-borderRadius);padding:6px 16px;transition:background-color .1s ease-out,border-color .1s ease-out;white-space:nowrap}.okeReviews[data-oke-container] .oke-reviewsKeywords-list-category.oke-is-clickable,div.okeReviews .oke-reviewsKeywords-list-category.oke-is-clickable{cursor:pointer}.okeReviews[data-oke-container] .oke-reviewsKeywords-list-category.oke-is-active,div.okeReviews .oke-reviewsKeywords-list-category.oke-is-active{background-color:var(--oke-filter-backgroundColorActive);color:var(--oke-filter-textColorActive);border-color:var(--oke-filter-borderColorActive)}.okeReviews[data-oke-container] .oke-reviewsKeywords .oke-translateButton,div.okeReviews .oke-reviewsKeywords .oke-translateButton{margin-top:12px} 956.oke-rs{display:block}.oke-rs .oke-reviewsSummary.oke-is-preRender .oke-reviewsSummary-summary{-webkit-mask:linear-gradient(180deg,#000 0,#000 40%,transparent 95%,transparent 0) 100% 50%/100% 100% repeat-x;mask:linear-gradient(180deg,#000 0,#000 40%,transparent 95%,transparent 0) 100% 50%/100% 100% repeat-x;max-height:150px}.okeReviews[data-oke-container] .oke-reviewsSummary .oke-tooltip,div.okeReviews .oke-reviewsSummary .oke-tooltip{display:inline-block;font-weight:400}.okeReviews[data-oke-container] .oke-reviewsSummary .oke-tooltip-trigger,div.okeReviews .oke-reviewsSummary .oke-tooltip-trigger{height:15px;width:15px;overflow:hidden;transform:translateY(-10%)}.okeReviews[data-oke-container] .oke-reviewsSummary-heading,div.okeReviews .oke-reviewsSummary-heading{align-items:center;-moz-column-gap:4px;column-gap:4px;display:inline-flex;font-weight:700;margin-bottom:8px}.okeReviews[data-oke-container] .oke-reviewsSummary-heading-skeleton,div.okeReviews .oke-reviewsSummary-heading-skeleton{height:calc(var(--oke-button-fontSize) + 4px);width:150px}.okeReviews[data-oke-container] .oke-reviewsSummary-icon,div.okeReviews .oke-reviewsSummary-icon{fill:currentColor;font-size:14px}.okeReviews[data-oke-container] .oke-reviewsSummary-icon svg,div.okeReviews .oke-reviewsSummary-icon svg{vertical-align:baseline}.okeReviews[data-oke-container] .oke-reviewsSummary-summary.oke-is-truncated,div.okeReviews .oke-reviewsSummary-summary.oke-is-truncated{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}</style> 957 958
958<script type="application/json" id="oke-reviews-settings">{"subscriberId":"15ab5c73-f607-4ce7-92f4-b81d74513896","analyticsSettings":{"provider":"gtm","isWidgetOnScreenTrackingEnabled":false},"locale":"en","localeAndVariant":{"code":"en"},"widgetSettings":{"global":{"dateSettings":{"format":{"type":"relative"}},"hideOkendoBranding":true,"reviewTranslationsMode":"off","showIncentiveIndicator":false,"searchEnginePaginationEnabled":true,"stars":{"backgroundColor":"#E5E5E5","foregroundColor":"#FFCF2A","interspace":2,"shape":{"type":"default"},"showBorder":false},"font":{"fontType":"inherit-from-page"}},"homepageCarousel":{"defaultSort":"rating desc","scrollBehaviour":"slide","slidesPerPage":{"large":3,"medium":2},"style":{"arrows":{"color":"#676986","size":{"value":24,"unit":"px"},"enabled":true},"avatar":{"backgroundColor":"#E5E5EB","placeholderTextColor":"#2C3E50","size":{"value":48,"unit":"px"},"enabled":true},"border":{"color":"#E5E5EB","width":{"value":1,"unit":"px"}},"highlightColor":"#0E7A82","layout":{"name":"default","reviewDetailsPosition":"below","showAttributeBars":false,"showProductDetails":"only-when-grouped","showProductName":false},"media":{"size":{"value":80,"unit":"px"},"imageGap":{"value":4,"unit":"px"},"enabled":true},"productImageSize":{"value":48,"unit":"px"},"showDates":true,"spaceAbove":{"value":20,"unit":"px"},"spaceBelow":{"value":20,"unit":"px"},"stars":{"height":{"value":18,"unit":"px"},"globalOverrideSettings":{"backgroundColor":"#E5E5E5","foregroundColor":"#FFCF2A"}},"text":{"primaryColor":"#2C3E50","fontSizeRegular":{"value":14,"unit":"px"},"fontSizeSmall":{"value":12,"unit":"px"},"secondaryColor":"#676986"}},"totalSlides":12,"truncation":{"bodyMaxLines":4,"enabled":true,"truncateAll":false}},"mediaCarousel":{"minimumImages":1,"linkText":"Read More","stars":{"backgroundColor":"#E5E5E5","foregroundColor":"#FFCF2A","height":{"value":12,"unit":"px"}},"autoPlay":false,"slideSize":"medium","arrowPosition":"outside"},"mediaGrid":{"showMoreArrow":{"arrowColor":"#676986","enabled":true,"backgroundColor":"#f4f4f6"},"infiniteScroll":false,"gridStyleDesktop":{"layout":"default-desktop"},"gridStyleMobile":{"layout":"default-mobile"},"linkText":"Read More","stars":{"backgroundColor":"#E5E5E5","foregroundColor":"#FFCF2A","height":{"value":12,"unit":"px"}},"gapSize":{"value":10,"unit":"px"}},"questions":{"loadMorePageSize":6,"initialPageSize":6},"reviewsBadge":{"layout":"large","colorScheme":"dark"},"reviewsTab":{"enabled":false},"reviewsWidget":{"style":{"headingFont":{"hasCustomFontSettings":false},"spaceBelow":{"unit":"px","value":40},"avatar":{"backgroundColor":"#EFEFEF","placeholderTextColor":"#155dd7","size":{"value":48,"unit":"px"},"enabled":true},"button":{"textColorActive":"#155DD7","borderWidth":{"value":0,"unit":"px"},"borderColorActive":"#FFFFFF","backgroundColor":"#DEFF5B","textColorHover":"#155DD7","font":{"fontSize":{"unit":"px","value":14},"fontFamily":"adieu","fontWeight":300,"fontType":"custom","hasCustomFontSettings":true},"borderColor":"#EDEDED","textColor":"#155DD7","borderRadius":{"value":100,"unit":"px"},"backgroundColorActive":"#DEFF5B","backgroundColorHover":"#DEFF5B","borderColorHover":"#FFFFFF"},"spaceAbove":{"value":40,"unit":"px"},"showDates":true,"text":{"fontSizeSmall":{"value":12,"unit":"px"},"fontSizeRegular":{"value":16,"unit":"px"},"secondaryColor":"#5B6B7F","primaryColor":"#24364B","fontSizeLarge":{"value":20,"unit":"px"}},"bodyFont":{"hasCustomFontSettings":false},"border":{"color":"#E5E5EB","width":{"unit":"px","value":1}},"filters":{"textColor":"#155dd7","borderColor":"#DBDDE4","textColorActive":"#FFFFFF","searchHighlightColor":"#a1beef","backgroundColor":"#FFFFFF","backgroundColorActive":"#155DD7","borderColorActive":"#FFFFFF","borderRadius":{"unit":"px","value":100}},"productImageSize":{"unit":"px","value":48},"highlightColor":"#155dd7","attributeBar":{"markerColor":"#155dd7","style":"default","backgroundColor":"#D3D4DD","shadingColor":"#155DD7"},"stars":{"height":{"value":18,"unit":"px"},"globalOverrideSettings":{"foregroundColor":"#155DD7","showBorder":false,"backgroundColor":"#FFFFFF"}},"shadingColor":"#EAEAEA"},"showWhenEmpty":true,"tabs":{"questions":false,"reviews":true},"header":{"verticalAlignment":"top","columnDistribution":"space-between","blocks":[{"modules":[{"name":"reviews-summary","heading":"Reviews Summary","maxTextLines":5}],"textAlignment":"left","columnWidth":"full"},{"columnWidth":"half","modules":[{"name":"rating-average","layout":"one-line"},{"shadingColor":"#155DD7","backgroundColor":"#F4F4F6","stretchMode":"stretch","name":"rating-breakdown"}],"textAlignment":"left"},{"textAlignment":"center","columnWidth":"half","modules":[{"stretchMode":"stretch","layout":"stacked","name":"attributes"}]},{"textAlignment":"left","columnWidth":"full","modules":[{"name":"media-carousel","imageGap":{"value":4,"unit":"px"},"imageHeight":{"value":120,"unit":"px"}}]}]},"reviews":{"controls":{"writeReviewButtonEnabled":true,"defaultSort":"helpful desc","freeTextSearchEnabled":true,"filterMode":"closed","sortOptionOrder":["helpful desc","date desc","has_media desc","rating desc","rating asc","date asc","unhelpful desc"],"keywordsFilterEnabled":true},"list":{"truncation":{"bodyMaxLines":4,"truncateAll":false,"enabled":true},"initialPageSize":5,"replyTruncation":{"bodyMaxLines":4,"enabled":true},"loyalty":{"maxInitialAchievements":3},"media":{"imageGap":{"unit":"px","value":4},"layout":"thumbnail","size":{"unit":"px","value":200}},"loadMorePageSize":5,"layout":{"collapseReviewerDetails":false,"borderStyle":"minimal","columnAmount":4,"showProductVariantName":false,"showAttributeBars":false,"showProductDetails":"always","name":"default"}}}},"starRatings":{"clickBehavior":"scroll-to-widget","showWhenEmpty":false,"style":{"globalOverrideSettings":{"backgroundColor":"#E5E5E5","foregroundColor":"#FFCF2A"},"spaceAbove":{"value":0,"unit":"px"},"text":{"content":"review-count","style":"number-and-text","brackets":false},"height":{"value":18,"unit":"px"},"spaceBelow":{"value":0,"unit":"px"}}}},"features":{"attributeFiltersEnabled":true,"recorderPlusEnabled":true,"recorderQandaPlusEnabled":true,"reviewsKeywordsEnabled":true,"reviewsSummariesEnabled":true,"widgetPlusTranslationsEnabled":true}}</script>
958 959 <style id="oke-css-vars">:root{--oke-widget-spaceAbove:40px;--oke-widget-spaceBelow:40px;--oke-starRating-spaceAbove:0;--oke-starRating-spaceBelow:0;--oke-button-backgroundColor:#deff5b;--oke-button-backgroundColorHover:#deff5b;--oke-button-backgroundColorActive:#deff5b;--oke-button-textColor:#155dd7;--oke-button-textColorHover:#155dd7;--oke-button-textColorActive:#155dd7;--oke-button-borderColor:#ededed;--oke-button-borderColorHover:#fff;--oke-button-borderColorActive:#fff;--oke-button-borderRadius:100px;--oke-button-borderWidth:0;--oke-button-fontWeight:300;--oke-button-fontSize:14px;--oke-button-fontFamily:adieu,sans-serif;--oke-border-color:#e5e5eb;--oke-border-width:1px;--oke-text-primaryColor:#24364b;--oke-text-secondaryColor:#5b6b7f;--oke-text-small:12px;--oke-text-regular:16px;--oke-text-large:20px;--oke-text-fontFamily:inherit;--oke-avatar-size:48px;--oke-avatar-backgroundColor:#efefef;--oke-avatar-placeholderTextColor:#155dd7;--oke-highlightColor:#155dd7;--oke-shadingColor:#eaeaea;--oke-productImageSize:48px;--oke-attributeBar-shadingColor:#155dd7;--oke-attributeBar-borderColor:undefined;--oke-attributeBar-backgroundColor:#d3d4dd;--oke-attributeBar-markerColor:#155dd7;--oke-filter-backgroundColor:#fff;--oke-filter-backgroundColorActive:#155dd7;--oke-filter-borderColor:#dbdde4;--oke-filter-borderColorActive:#fff;--oke-filter-textColor:#155dd7;--oke-filter-textColorActive:#fff;--oke-filter-borderRadius:100px;--oke-filter-searchHighlightColor:#a1beef;--oke-mediaGrid-chevronColor:#676986;--oke-stars-foregroundColor:#ffcf2a;--oke-stars-backgroundColor:#e5e5e5;--oke-stars-borderWidth:0}.oke-reviewCarousel{--oke-stars-foregroundColor:#ffcf2a;--oke-stars-backgroundColor:#e5e5e5;--oke-stars-borderWidth:0}.oke-w,.oke-modal{--oke-stars-foregroundColor:#155dd7;--oke-stars-backgroundColor:#fff;--oke-stars-borderWidth:0}.oke-sr{--oke-stars-foregroundColor:#ffcf2a;--oke-stars-backgroundColor:#e5e5e5;--oke-stars-borderWidth:0}.oke-w,.oke-modal{--oke-title-fontWeight:600;--oke-title-fontSize:var(--oke-text-regular,14px);--oke-title-fontFamily:inherit;--oke-bodyText-fontWeight:400;--oke-bodyText-fontSize:var(--oke-text-regular,14px);--oke-bodyText-fontFamily:inherit}</style> 960 961 <template id="oke-reviews-body-template"><svg id="oke-star-symbols" style="display:none!important" data-oke-id="oke-star-symbols"><symbol id="oke-star-empty" style="overflow:visible;"><path id="star-default--empty" fill="var(--oke-stars-backgroundColor)" stroke="var(--oke-stars-borderColor)" stroke-width="var(--oke-stars-borderWidth)" d="M3.34 13.86c-.48.3-.76.1-.63-.44l1.08-4.56L.26 5.82c-.42-.36-.32-.7.24-.74l4.63-.37L6.92.39c.2-.52.55-.52.76 0l1.8 4.32 4.62.37c.56.05.67.37.24.74l-3.53 3.04 1.08 4.56c.13.54-.14.74-.63.44L7.3 11.43l-3.96 2.43z"/></symbol><symbol id="oke-star-filled" style="overflow:visible;"><path id="star-default--filled" fill="var(--oke-stars-foregroundColor)" stroke="var(--oke-stars-borderColor)" stroke-width="var(--oke-stars-borderWidth)" d="M3.34 13.86c-.48.3-.76.1-.63-.44l1.08-4.56L.26 5.82c-.42-.36-.32-.7.24-.74l4.63-.37L6.92.39c.2-.52.55-.52.76 0l1.8 4.32 4.62.37c.56.05.67.37.24.74l-3.53 3.04 1.08 4.56c.13.54-.14.74-.63.44L7.3 11.43l-3.96 2.43z"/></symbol></svg></template>
961<script>document.addEventListener('readystatechange',() =>{Array.from(document.getElementById('oke-reviews-body-template')?.content.children)?.forEach(function(child){if(!Array.from(document.body.querySelectorAll('[data-oke-id='.concat(child.getAttribute('data-oke-id'),']'))).length){document.body.prepend(child)}})},{once:true});</script>
961 962 963 964 965 966 967 968 969 970 971 972 973 974 975<!-- END app snippet --> 976 977 <!-- BEGIN app snippet: okendo-reviews-json-ld --> 978<!-- END app snippet --> 979 980<!-- BEGIN app snippet: widget-plus-initialisation-script --> 981 982 983 984 985
985<script async id="okendo-reviews-script" src="https://cdn-static.okendo.io/reviews-widget-plus/js/okendo-reviews.js"></script>
985 986 987<!-- END app snippet --> 988 989 990<!-- END app block --><!-- BEGIN app block: shopify://apps/recart-sms-list-growth/blocks/loader/c3f195f0-9f15-4ebc-9a44-84989a1ee8d1 --> 991
992<script type="text/javascript" async src="https://storefront.recart.com/loader.js?domain=nativepet.com&account=69dd1ba90d2425636d835bc6&hasGMInitParams=1&shop=the-native-pet.myshopify.com" data-em-disable="true"></script>
992 993
993<script type="text/javascript" async src="https://storefront.recart.com/settings/69dd1ba90d2425636d835bc6/settings.js?shop=the-native-pet.myshopify.com" data-em-disable="true"></script>
993 994 995 996 997<!-- 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 /> 998<link rel='preconnect dns-prefetch' href='https://conf.config-security.com/' crossorigin />
999<script> 1000/* >> TriplePixel :: start*/ 1001window.TriplePixelData={TripleName:"the-native-pet.myshopify.com",ver:"2.16",plat:"SHOPIFY",isHeadless:false,src:'SHOPIFY_EXT',product:{id:"",name:``,price:"",variant:"",av:{ }},search:"",collection:"",cart:"drawer",template:"page",curr:"USD" || "USD", market:"428212267"},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); 1002/* << TriplePixel :: end*/ 1003</script>
1003 1004 1005 1006 1007<!-- END app block -->
1007<script src="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/consentmo_cookie_consent.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1007
1007
1008<script src="https://cdn.shopify.com/extensions/01a0fe54-371b-77cc-aed0-c4657456b419/aftersell-1118/assets/aftersell-utm-triggers.js" type="text/javascript" defer="defer"></script>
1008 1009<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
1010<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: 27157980,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "page"};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 1010
1010
1011<script> 1012 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 1013</script>
vendor: 1 bytes, line 1013
1013
1014<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}
1014).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: 27157980,storefrontBaseUrl: "https://nativepet.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://nativepet.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2274885675","configuration":"{\"accountID\":\"veeper-app-id\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"1d343e89934ea1dbfdb8898bc8b5e698","type":"APP","apiClientId":5163463,"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":"2263646251","configuration":"{\"vibePixelId\":\"AwvmCV\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"72859894ec8aa8d5e0246c40aaed9466","type":"APP","apiClientId":132266098689,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":[],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2252472363","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-T19G0XBDP1\\\",\\\"AW-815210734\\\",\\\"GT-PZ6DVHXH\\\"],\\\"target_country\\\":\\\"ZZ\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-T19G0XBDP1\\\",\\\"AW-815210734\\\/4jqiCJqt1PMCEO7B3IQD\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-T19G0XBDP1\\\",\\\"AW-815210734\\\/gEZSCJ2t1PMCEO7B3IQD\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-T19G0XBDP1\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-T19G0XBDP1\\\",\\\"AW-815210734\\\/ByPkCJSt1PMCEO7B3IQD\\\",\\\"MC-BJ0LMSWTJE\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-T19G0XBDP1\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-T19G0XBDP1\\\",\\\"AW-815210734\\\/NH73CJGt1PMCEO7B3IQD\\\",\\\"MC-BJ0LMSWTJE\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-T19G0XBDP1\\\",\\\"AW-815210734\\\/K4TTCI6t1PMCEO7B3IQD\\\",\\\"MC-BJ0LMSWTJE\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-T19G0XBDP1\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-T19G0XBDP1\\\",\\\"AW-815210734\\\/EzGfCJiu1PMCEO7B3IQD\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-T19G0XBDP1\\\",\\\"AW-815210734\\\/h6EcCJet1PMCEO7B3IQD\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-T19G0XBDP1\\\"}],\\\"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"]},{"id":"2021294123","configuration":"{\"accountID\":\"shopify-27157980\", \"endpoint\"
1014:\"https:\/\/connect.nosto.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"85848493c2a1c7a4bbf22728b6f9f31f","type":"APP","apiClientId":272825,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1925480491","configuration":"{\"accountID\":\"1220658\",\"workspaceId\":\"f02ce379-a118-401b-bed3-4da71a1fdde4\",\"projectId\":\"641753cf-f654-4085-9e57-41bc8e90219b\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"d98eb033f1e81320021a411362de3a55","type":"APP","apiClientId":5461967,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":[],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1905721387","configuration":"{\"shopId\":\"the-native-pet.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"31536d5a2ef62c1887054e49fd58dba0","type":"APP","apiClientId":4845829,"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":"1850081323","configuration":"{\"pixel_id\":\"1446982975350461\",\"pixel_type\":\"facebook_pixel\"}","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":"1849229355","configuration":"{\"siteID\":\"69dd1ba90d2425636d835bc6\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"022e2d3d38c42b2f6986f90d20803831","type":"APP","apiClientId":1098570,"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":"1037631531","configuration":"{\"accountID\":\"KNpPbt\",\"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":"333971499","configuration":"{\"accountID\":\"18023\",\"micrositeDomain\":\"partner.nativepet.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"9fae8f5cb0b9c97477ac364bb3772a0c","type":"APP","apiClientId":4862993,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"297992235","configuration":"{\"myshopifyDomain\":\"the-native-pet.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"}
1014,{"id":"163446827","configuration":"{\"env\":\"prod\"}","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"8a9a175b11d15038a70fe78d09c59720","type":"APP","apiClientId":3977633,"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":"43745323","configuration":"{\"tagID\":\"2613076493321\"}","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":"33980459","configuration":"{\"shopId\":\"the-native-pet.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":"18186283","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"8","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"],"name":"Amazon"},{"id":"28049451","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Attentive tag"},{"id":"96796715","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"2","type":"CUSTOM","privacyPurposes":["ANALYTICS"],"name":"Heap"},{"id":"98107435","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":[],"name":"Instant"},{"id":"133070891","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"4","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"GA4 Custom Events"}
1014,{"id":"135528491","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"7","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Meta Checkout Events"},{"id":"137461803","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"FBC\/FBP Cart Writer"},{"id":"140869675","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"4","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"PostHog Checkout"},{"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":"Native Pet","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"the-native-pet.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/nativepet.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[{"id":"7609540378667","handle":"hip-joint-advanced-care-powder","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42265215107115","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7989690105899","handle":"cat-multivitamin","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"50461037723691","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7074701180971","handle":"the-daily","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"43086087061547","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}],"purchasingCompany":null},},"https://nativepet.com/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"126752292907","themePublished":"true","eventMetadataId":"2e685c7f-2162-4f40-93af-803b8645696b","pageType":"page","resourceId":"87538499627","shopId":"27157980","storefrontBaseUrl":"https:\/\/nativepet.com","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>
1014<script> 1015 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 1016 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 1017 window.ShopifyAnalytics.meta.currency = 'USD'; 1018 var meta = {"page":{"pageType":"page","resourceType":"page","resourceId":87538499627,"requestId":"4323fb28-d9b6-47bc-9aec-bdd4d0ab48ac-1791073527"}}; 1019 for (var attr in meta) { 1020 window.ShopifyAnalytics.meta[attr] = meta[attr]; 1021 } 1022</script>
vendor: 1 bytes, line 1022
1022
1023<script class="analytics"> 1024 (function () { 1025 var customDocumentWrite = function(content) { 1026 var jquery = null; 1027 1028 if (window.jQuery) { 1029 jquery = window.jQuery; 1030 } else if (window.Checkout && window.Checkout.$) { 1031 jquery = window.Checkout.$; 1032 } 1033 1034 if (jquery) { 1035 jquery('body').append(content); 1036 } 1037 }; 1038 1039 var hasLoggedConversion = function(token) { 1040 if (token) { 1041 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 1042 } 1043 return false; 1044 } 1045 1046 var setCookieIfConversion = function(token) { 1047 if (token) { 1048 var twoMonthsFromNow = new Date(Date.now()); 1049 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 1050 1051 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 1052 } 1053 } 1054 1055 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 1056 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 1057 if (trekkie.integrations) { 1058 return; 1059 } 1060 trekkie.methods = [ 1061 'identify', 1062 'page', 1063 'ready', 1064 'track', 1065 'trackForm', 1066 'trackLink' 1067 ]; 1068 trekkie.factory = function(method) { 1069 return function() { 1070 var args = Array.prototype.slice.call(arguments); 1071 args.unshift(method); 1072 trekkie.push(args); 1073 if (method == 'track' || method == 'page') { 1074 var pageUrl; 1075 try { 1076 pageUrl = window.location.href; 1077 } catch (e) {} 1078 var pageReferrer; 1079 try { 1080 pageReferrer = document.referrer; 1081 } catch (e) {} 1082 try { 1083 if (window.__TREKKIE_SHIM_QUEUE == null) { 1084 window.__TREKKIE_SHIM_QUEUE = []; 1085 } 1086 window.__TREKKIE_SHIM_QUEUE.push({ 1087 from: 'trekkie-stub', 1088 method: method, 1089 args: args.slice(1), 1090 pageContext: { 1091 url: pageUrl, 1092 referrer: pageReferrer 1093 } 1094 }); 1095 } catch (e) { 1096 // no-op 1097 } 1098 } 1099 return trekkie; 1100 }; 1101 }; 1102 for (var i = 0; i < trekkie.methods.length; i++) { 1103 var key = trekkie.methods[i]; 1104 trekkie[key] = trekkie.factory(key); 1105 } 1106 trekkie.load = function(config) { 1107 trekkie.config = config || {}; 1108 trekkie.config.initialDocumentCookie = document.cookie; 1109 var first = document.getElementsByTagName('script')[0]; 1110var script = document.createElement('script'); 1111script.type = 'text/javascript'; 1112script.onerror = function(e) { 1113 var scriptFallback = document.createElement('script'); 1114 scriptFallback.type = 'text/javascript'; 1115 scriptFallback.onerror = function(error) { 1116 var Monorail = { 1117 produce: function produce(monorailDomain, schemaId, payload) { 1118 var currentMs = new Date().getTime(); 1119 var event = { 1120 schema_id: schemaId, 1121 payload: payload, 1122 metadata: { 1123 event_created_at_ms: currentMs, 1124 event_sent_at_ms: currentMs 1125 } 1126 }; 1127 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 1128 }, 1129 sendRequest: function sendRequest(endpointUrl, payload) { 1130 // Try the sendBeacon API 1131 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 1132 var blobData = new window.Blob([payload], { 1133 type: 'text/plain' 1134 }); 1135 1136 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 1137 return true; 1138 } // sendBeacon was not successful 1139 1140 } // XHR beacon 1141 1142 var xhr = new XMLHttpRequest(); 1143 1144 try { 1145 xhr.open('POST', endpointUrl); 1146 xhr.setRequestHeader('Content-Type', 'text/plain'); 1147 xhr.send(payload); 1148 } catch (e) { 1149 console.log(e); 1150 } 1151 1152 return false; 1153 }, 1154 isIos12: function isIos12() { 1155 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 1156 } 1157 }; 1158 Monorail.produce('monorail-edge.shopifysvc.com', 1159 'trekkie_storefront_load_errors/1.1', 1160 {shop_id: 27157980,
1161 theme_id: 126752292907, 1162 app_name: "storefront", 1163 context_url: window.location.href, 1164 source_url: "//nativepet.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 1165 1166 }; 1167 scriptFallback.async = true; 1168 scriptFallback.src = '//nativepet.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1169 first.parentNode.insertBefore(scriptFallback, first); 1170}; 1171script.async = true; 1172script.src = '//nativepet.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1173first.parentNode.insertBefore(script, first); 1174 1175 }; 1176 trekkie.load( 1177 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":27157980,"isMerchantRequest":null,"themeId":126752292907,"themeCityHash":"6646004496582341436","contentLanguage":"en","currency":"USD","eventMetadataId":"2e685c7f-2162-4f40-93af-803b8645696b"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 1178 ); 1179 1180 var loaded = false; 1181 trekkie.ready(function() { 1182 if (loaded) return; 1183 loaded = true; 1184 1185 window.ShopifyAnalytics.lib = window.trekkie; 1186 1187 var originalDocumentWrite = document.write; 1188 document.write = customDocumentWrite; 1189 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 1190 document.write = originalDocumentWrite; 1191 1192 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 1193 var token = match? match[1]: undefined; 1194 if (!hasLoggedConversion(token)) { 1195 setCookieIfConversion(token); 1196 1197 } 1198 }); 1199 1200 window.ShopifyAnalytics.lib.page(null,{"pageType":"page","resourceType":"page","resourceId":87538499627,"requestId":"4323fb28-d9b6-47bc-9aec-bdd4d0ab48ac-1791073527","shopifyEmitted":true}); 1201 1202 var eventsListenerScript = document.createElement('script'); 1203 eventsListenerScript.async = true; 1204 eventsListenerScript.src = "//nativepet.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 1205 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 1206})();</script>
1206 1207
1207<script> 1208 if (!window.ga || (window.ga && typeof window.ga !== 'function')) { 1209 window.ga = function ga() { 1210 (window.ga.q = window.ga.q || []).push(arguments); 1211 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 1212 window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"}); 1213 } 1214 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."); 1215 }; 1216 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 1217 window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"}); 1218 } 1219 } 1220</script>
vendor: 1 bytes, line 1220
1220
1221<script 1222 defer 1223 src="https://nativepet.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 1224 data-application="storefront-renderer" 1225 data-shop-id="27157980" 1226 data-render-region="gcp-us-central1" 1227 data-page-type="page" 1228 data-theme-instance-id="126752292907" 1229 data-theme-name="Bella" 1230 data-theme-version="2.60.6" 1231 data-monorail-region="shop_domain" 1232 data-resource-timing-sampling-rate="10" 1233 data-shs="true" 1234 data-shs-beacon="true" 1235 data-shs-export-with-fetch="true" 1236 data-shs-logs-sample-rate="1" 1237 data-shs-beacon-endpoint="https://nativepet.com/api/collect" 1238></script>
1238 1239<meta name="shopify-y" content="a81bd2b8-cf5e-4e65-a9c7-543ebc17b58a" data-expiration="1822631127000"><meta name="shopify-s" content="785c3e53-f23e-4569-a281-0a7ed8ca52af" data-expiration="1791075327000"><meta name="new-cookie-storage-activated" content="t"> 1240</head> 1241 1242 <body class="page-page"> 1243 <a 1244 href="#main" 1245 class="sr-only left-0 top-0 z-50 inline-block bg-dark text-white focus:not-sr-only focus:absolute focus:z-50 focus:px-4 focus:py-2 focus:outline-none focus:ring-2 focus:ring-dark focus:ring-offset-2" 1246> 1247 Skip to content 1248</a> 1249 1250 <!-- BEGIN sections: header-group --> 1251<div id="shopify-section-sections--15358667685931__announcement-bar" class="shopify-section shopify-section-group-header-group announcement-bar-section"> 1252 1253<style data-shopify> 1254 .announcement-bar-section { 1255 z-index: 50; 1256 } 1257</style> 1258 1259 1260 <div 1261 id="announcement-bar" 1262 class="bg-background text-foreground color-scheme-1" 1263 role="region" 1264 aria-roledescription="Carousel" 1265 aria-label="Announcement bar" 1266 x-data=" 1267 { 1268 emblaApi: null, 1269 1270 setAnnouncementBarHeight() { 1271 document.documentElement.style.setProperty('--announcement-bar-height', $el.offsetHeight + 'px') 1272 }, 1273 1274 init() { 1275 const isReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches 1276 1277 const plugins = isReducedMotion 1278 ? [EmblaCarouselFade(), EmblaCarouselAutoplay(), EmblaCarouselWheelGestures()] 1279 : [EmblaCarouselAutoplay(), EmblaCarouselWheelGestures()] 1280 1281 this.emblaApi = EmblaCarousel($refs.embla, { loop: true }, plugins) 1282 1283 this.setAnnouncementBarHeight() 1284 } 1285 } 1286 " 1287 1288 style="--color-background: #155dd7;" 1289 1290 > 1291 <div 1292 role="region" 1293 aria-roledescription="carousel" 1294 style="--slide-size: 100%; --slide-spacing: 0" 1295 > 1296 <div x-ref="embla" class="embla__viewport"> 1297 <div class="embla__container text-center text-[12px] tracking-[1px] lg:text-[14px]"> 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 <div 1308 class="embla__slide flex h-10 items-center justify-center !px-4" 1309 role="region" 1310 aria-label="Announcement" 1311 1312 ><a href="/collections/cat"> 1313 <span class="overflow-hidden overflow-ellipsis whitespace-nowrap text-white"> 1314 We Got Cats. Shop Meow. 1315 </span> 1316 </a></div> 1317 1318 1319 1320 1321 1322 1323 1324 1325 <div 1326 class="embla__slide flex h-10 items-center justify-center !px-4" 1327 role="region" 1328 aria-label="Announcement" 1329 1330 ><span class="overflow-hidden overflow-ellipsis whitespace-nowrap"> 1331 Free Daily Travel Size on Orders $75+ 1332 </span></div> 1333 1334 1335 1336 1337 1338 1339 1340 1341 <div 1342 class="embla__slide flex h-10 items-center justify-center !px-4" 1343 role="region" 1344 aria-label="Announcement" 1345 1346 ><a href="/collections/all"> 1347 <span class="overflow-hidden overflow-ellipsis whitespace-nowrap text-white"> 1348 Free Shipping on Every $34.99+ Order 1349 </span> 1350 </a></div> 1351 1352 1353 </div> 1354 </div> 1355 </div> 1356 </div> 1357 1358 1359 1360</div><div id="shopify-section-sections--15358667685931__header" class="shopify-section shopify-section-group-header-group header-section"><style data-shopify> 1361 .header-section { 1362 background-color: var(--color-transparent); 1363 color: var(--color-white); 1364 z-index: 1000; 1365 position: sticky; 1366 top: 0; 1367 transition: 1368 background-color 250ms ease-in-out, 1369 color 250ms ease-in-out; 1370 width: 100%; 1371 } 1372 1373 .header-section::after { 1374 box-shadow: 0px 4px 24px -8px rgba(0, 0, 0, 0.25); 1375 content: ''; 1376 position: absolute; 1377 z-index: -1; 1378 inset: 0; 1379 opacity: 0; 1380 transition: opacity 250ms ease-in-out; 1381 } 1382 1383 body .header-section, 1384 /* body:not(.page-index) .header-section, */ 1385 html[data-state='sticky'] .header-section, 1386 html[data-menu='open'] .header-section { 1387 color: var(--color-dark); 1388 } 1389 1390 body .header-section, 1391 /* body:not(.page-index) .header-section, */ 1392 html[data-state='sticky'] .header-section { 1393 background-color: var(--color-white); 1394 } 1395 1396 html[data-state='sticky'] .header-section::after, 1397 html[data-menu='open'] .header-section::after { 1398 opacity: 1; 1399 } 1400 1401 #menu, 1402 #search { 1403 box-shadow: 0px 4px 24px -8px rgba(0, 0, 0, 0.25); 1404 } 1405</style> 1406 1407 1408 1409 1410 1411<header 1412 id="header" 1413 x-data=" 1414 { 1415 open: false, 1416 isStuck: false, 1417 1418 toggleSticky() { 1419 const pastThreshold = window.scrollY > 40 1420 1421 if (pastThreshold && !this.isStuck) { 1422 document.documentElement.setAttribute('data-state', 'sticky'); 1423 this.isStuck = true; 1424 } else if (!pastThreshold && this.isStuck) { 1425 document.documentElement.removeAttribute('data-state') 1426 this.isStuck = false 1427 } 1428 }, 1429 1430 1431 openSearch() { 1432 if (typeof window.Rebuy !== 'undefined' && typeof window.Rebuy?.SmartSearch?.quickView?.view?.openQuickView === 'function') { 1433 window.Rebuy.SmartSearch.quickView.view.openQuickView(); 1434 } 1435 else { 1436 this.toggleMenu('search'); 1437 } 1438 }, 1439 1440 1441 toggleMenu(state = this.open) { 1442 this.open = state; 1443 document.documentElement.setAttribute('data-menu', this.open ? 'open' : 'closed'); 1444 if (this.open === 'menu' && typeof window?.Rebuy?.SmartSearch?.quickView?.view?.closeQuickView === 'function') { 1445 window.Rebuy.SmartSearch.quickView.view.closeQuickView(); 1446 } 1447 }, 1448 1449 init() { 1450 this.reInit() 1451 this.handleAbExperiment() 1452 }, 1453 1454 reInit() { 1455 this.toggleSticky(); 1456 document.documentElement.style.setProperty('--header-height', this.$el.offsetHeight + 'px'); 1457 }, 1458 1459 handleMouseLeave() { 1460 if (this.open !== 'search') { 1461 this.timeoutId = setTimeout(() => this.toggleMenu(false), 300); 1462 } 1463 }, 1464 1465 handleMouseEnter() { 1466 if (this.open !== 'search' && this.timeoutId) { 1467 clearTimeout(this.timeoutId); 1468 } 1469 }, 1470 1471 async handleAbExperiment() { 1472 const hypothesisId = 'dffc1f21-bbbe-4f1a-be86-443bdcf08737' 1473 const isVariant = await window.shoplift?.isHypothesisActive?.(hypothesisId) ?? false 1474 1475 if (isVariant) { 1476 const els = this.$el.querySelectorAll(`a[href='/pages/philosophy']`) 1477
1478 els.forEach((el) => el.remove()) 1479 } 1480 } 1481 } 1482 " 1483 @scroll.window.passive="toggleSticky" 1484 @mouseleave="handleMouseLeave" 1485 @mouseenter="handleMouseEnter" 1486 @resize.window.passive="reInit" 1487> 1488 <div class="relative z-50 color-scheme-3 bg-background text-foreground"> 1489 <div x-ref="header" class="mx-auto h-[72px] w-full max-w-8xl px-2 lg:h-20 lg:px-6"> 1490 <div class="grid grid-cols-[max-content_max-content_1fr_max-content_max-content] items-center py-4 lg:grid-cols-[max-content_1fr_max-content] lg:gap-4 2xl:gap-8"> 1491 <button 1492 type="button" 1493 class="-order-2 grid h-10 w-10 items-center justify-center xl:hidden" 1494 @click="$dispatch('toggle-mobile-menu')" 1495 > 1496 <span class="sr-only">Open menu</span> 1497 <svg 1498 xmlns="http://www.w3.org/2000/svg" 1499 aria-hidden="true" 1500 focusable="false" 1501 class="icon icon-hamburger size-10" 1502 viewBox="0 0 40 40" 1503> 1504 <g fill="none" fill-rule="evenodd"><path d="M0 0h40v40H0z"/><g fill="currentColor"><path d="M10 24h20v2H10zM10 19h20v2H10zM10 14h20v2H10z"/></g></g> 1505</svg> 1506 1507 </button> 1508 <div class="flex justify-center lg:justify-start"> 1509 1510 <a href="/" class="block text-current"> 1511 <span class="sr-only">Native Pet</span> 1512 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 122 32" class="block w-[150px] lg:w-[180px]"> 1513 <path fill="currentColor" d="m17.16 21.527-.412-6.468c-.342-5.373-3.285-7.427-6.502-7.427-2.362 0-4.244 1.13-5.202 2.978V8.385c0-.582-.343-.992-1.061-.616L.663 9.378c-.377.17-.616.342-.616.616v.102c0 .753 1.54.787 1.54 2.293v9.172c0 1.335-1.369 1.472-1.369 2.225v.137c0 .308.274.513.719.513h5.305c.479 0 .752-.205.752-.513v-.137c0-.753-1.403-.89-1.403-2.225V13.52c0-2.464 1.403-4.244 3.594-4.244 2.088 0 3.422 1.745 3.593 5.647l.343 6.605c.068 1.37-1.232 1.506-1.232 2.26v.136c0 .308.273.513.753.513h4.996c.445 0 .753-.205.753-.513v-.137c0-.753-1.163-.89-1.232-2.259Z"/> 1514 <path fill="currentColor" d="m31.735 21.322-.684-6.571c-.48-4.415-3.252-7.119-7.564-7.119-3.662 0-6.332 1.677-6.332 3.833 0 .959.65 1.575 1.677 1.575 2.157 0 1.472-4.142 4.655-4.142 2.396 0 3.217 2.054 3.594 6.024l.068.684c-.924-.718-2.293-1.163-3.97-1.163-3.457 0-6.263 1.78-6.229 5.133 0 3.354 2.67 5.168 6.4 5.168 2.43 0 3.97-.924 4.757-2.19.137 1.677.993 2.054 2.738 2.054 1.472 0 2.773-.206 2.773-.856 0-.89-1.643-.205-1.883-2.43Zm-7.255 2.122c-2.122 0-3.491-2.02-3.491-4.347 0-2.053 1.334-3.354 3.217-3.354 1.814 0 3.114 1.232 3.251 3.183l.103 1.061c.102 1.848-1.164 3.457-3.08 3.457Z"/> 1515 <path fill="currentColor" d="M37.71 24.744c3.08 0 4.826-2.293 4.826-4.586 0-.616-.822-.718-1.13-.17-.205.992-.992 1.779-2.43 1.779-1.13 0-1.95-.89-1.95-2.533V9.651h4.312c.342 0 .616-.24.616-.581v-.48a.613.613 0 0 0-.616-.616h-4.313l-.034-3.32c0-.479-.205-.752-.65-.752h-.513c-.343 0-.616.273-.685.753-.274 1.985-1.335 3.32-3.114 3.32h-1.061c-.377 0-.582.239-.582.615v.48c0 .342.24.581.582.581h1.95V19.2c0 3.696 1.917 5.544 4.792 5.544Z"/> 1516 <path fill="currentColor" d="M43.975 5.134c1.678 0 2.773-1.061 2.773-2.567C46.748 1.095 45.653 0 43.975 0c-1.71 0-2.84 1.095-2.84 2.567 0 1.506 1.13 2.567 2.84 2.567Zm-2.532 19.268h5.202c.445 0 .753-.205.753-.513v-.137c0-.753-1.403-.89-1.403-2.225V8.351c0-.548-.445-.958-1.232-.582L41.34 9.48c-.376.206-.616.342-.616.616v.103c0 .616 1.267.958 1.267 2.361v8.967c0 1.335-1.267 1.472-1.267 2.225v.137c0 .308.274.513.719.513Z"/> 1517 <path fill="currentColor" d="M62.582 7.974h-3.8c-.376 0-.615.171-.615.514v.102c0 .72 1.916.822 1.197 2.773L55.36 21.527l-4.21-10.644c-.513-1.334.822-1.642.822-2.293v-.102c0-.308-.274-.514-.582-.514h-5.715c-.377 0-.616.171-.616.48v.102c0 .753.992 1.061 1.574 2.259l6.092 12.834c.24.514.48.753 1.027.753h1.437c.514 0 .822-.24.993-.753l5.1-12.834c.478-1.266 1.916-1.506 1.916-2.259v-.103c0-.308-.24-.479-.616-.479Z"/> 1518 <path fill="currentColor" d="M73.648 19.371c-.685 1.37-2.225 2.498-4.38 2.498-2.43 0-4.176-1.437-5.032-3.764l8.282-3.046c1.061-.377 1.746-1.095 1.746-2.396 0-2.396-1.985-5.03-6.4-5.03-4.518 0-8.18 3.524-8.18 8.418 0 5.305 3.525 8.693 8.112 8.693 4.346 0 6.64-3.011 6.947-5.03.069-.685-.719-.822-1.
1518095-.343ZM67.18 8.933c1.984 0 3.25 2.464 3.25 3.867 0 .684-.273 1.164-.889 1.437l-5.681 2.465a11.076 11.076 0 0 1-.206-2.19c0-3.286 1.37-5.58 3.526-5.58ZM90.505 7.632c-2.259 0-4.141.958-5.1 2.601l.035-1.882c0-.582-.308-.958-1.13-.548l-3.148 1.54c-.377.171-.616.411-.616.719v.137c0 .787 1.471.856 1.471 2.156v16.77c0 1.37-1.3 1.506-1.3 2.259v.103c0 .342.308.513.753.513h5.202c.445 0 .753-.171.753-.513v-.103c0-.753-1.403-.89-1.403-2.259V22.93c1.13 1.164 2.635 1.814 4.517 1.814 4.313 0 7.906-3.627 7.906-8.83 0-5.202-3.833-8.282-7.94-8.282Zm-.445 15.812c-2.088 0-4.038-2.362-4.038-4.86v-6.332c.24-1.916 1.745-3.32 3.49-3.32 2.944 0 4.895 3.355 4.895 8.249 0 4.004-1.643 6.263-4.347 6.263Z"/> 1519 <path fill="currentColor" d="M111.111 19.371c-.685 1.37-2.225 2.498-4.381 2.498-2.43 0-4.175-1.437-5.031-3.764l8.283-3.046c1.061-.377 1.745-1.095 1.745-2.396 0-2.396-1.985-5.03-6.4-5.03-4.518 0-8.18 3.524-8.18 8.418 0 5.305 3.525 8.693 8.112 8.693 4.346 0 6.639-3.011 6.947-5.03.069-.685-.719-.822-1.095-.343Zm-6.468-10.438c1.985 0 3.251 2.464 3.251 3.867 0 .684-.274 1.164-.89 1.437l-5.681 2.465a11.067 11.067 0 0 1-.206-2.19c0-3.286 1.369-5.58 3.526-5.58Z"/> 1520 <path fill="currentColor" d="M117.174 24.744c3.081 0 4.826-2.293 4.826-4.586 0-.616-.821-.718-1.129-.17-.206.992-.993 1.779-2.43 1.779-1.13 0-1.951-.89-1.951-2.533V9.651h4.312c.342 0 .616-.24.616-.581v-.48a.614.614 0 0 0-.616-.616h-4.312l-.034-3.32c0-.479-.206-.752-.651-.752h-.513c-.342 0-.616.273-.685.753-.273 1.985-1.334 3.32-3.114 3.32h-1.061c-.376 0-.582.239-.582.615v.48c0 .342.24.581.582.581h1.951V19.2c0 3.696 1.916 5.544 4.791 5.544Z"/> 1521</svg> 1522 1523 </a> 1524 1525 </div> 1526 <div id="main-menu" class="mb-1 hidden gap-3 font-medium lowercase xl:flex"> 1527 1528 <a 1529 href="/collections/dog" 1530 1531 1532 x-ref="menu-trigger" 1533 @mouseover="toggleMenu('shop-dog')" 1534 :aria-expanded="open == 'shop-dog' ? 'true' : 'false'" 1535 1536 1537 1538 1539 class="group flex items-center text-current"> 1540 <span class="group-hover:underline group-aria-expanded:underline">Shop Dog</span> 1541 1542 1543 1544 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="size-5"> 1545 <path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" /> 1546 </svg> 1547 1548 1549 1550 1551 </a> 1552 1553 <a 1554 href="/collections/cat" 1555 1556 1557 1558 1559 x-ref="menu-trigger" 1560 @mouseover="toggleMenu('shop-cat')" 1561 :aria-expanded="open == 'shop-cat' ? 'true' : 'false'" 1562 1563 1564 class="group flex items-center text-current"> 1565 <span class="group-hover:underline group-aria-expanded:underline">Shop Cat</span> 1566 1567 1568 1569 1570 1571 <span class="text-p4 isolate grid -rotate-12 place-content-center rounded-full bg-accent font-bold uppercase leading-none text-dark size-10 text-[10px] ml-1"> 1572 new 1573</span> 1574 1575 1576 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="size-5"> 1577 <path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" /> 1578 </svg> 1579 1580 1581 </a> 1582 1583 <a 1584 href="/blogs/health" 1585 1586 1587 1588 1589 1590 class="group flex items-center text-current"> 1591 <span class="group-hover:underline group-aria-expanded:underline">The Blog Park</span> 1592 1593 1594 1595 1596 1597 </a> 1598 1599 </div> 1600 <div class="contents lg:flex lg:gap-4"> 1601 <div class="contents lg:flex"> 1602 1603 <button 1604 id="menu-search" 1605 class="-order-1 flex h-10 w-10 items-center justify-center" 1606 @click="openSearch" 1607 >
1608 <span class="sr-only">Search</span> 1609 <svg 1610 aria-hidden="true" 1611 focusable="false" 1612 xmlns="http://www.w3.org/2000/svg" 1613 width="40" 1614 height="40" 1615 viewBox="0 0 40 40" 1616 class="block size-10" 1617> 1618 <g fill="none" fill-rule="evenodd"><path d="M0 0h40v40H0z"/><g fill="currentColor" fill-rule="nonzero" transform="translate(8 8)"><path d="m14.204 12.787 6.987 6.986-1.415 1.414-6.986-6.986z"/><rect width="10" height="4" x="14.88" y="17.885" rx="2" transform="rotate(45 19.88 19.885)"/><path d="M8.5 0C3.81 0 0 3.81 0 8.5 0 13.19 3.81 17 8.5 17c4.69 0 8.5-3.81 8.5-8.5C17 3.81 13.19 0 8.5 0Zm0 14.5c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6Z"/></g></g> 1619</svg> 1620 1621 </button> 1622 1623 <a 1624 href="/account" 1625 id="menu-account" 1626 class="flex h-10 w-10 items-center justify-center text-current" 1627 > 1628 <span class="sr-only"> 1629 1630 Login 1631 1632 </span> 1633 <svg 1634 aria-hidden="true" 1635 focusable="false" 1636 xmlns="http://www.w3.org/2000/svg" 1637 width="40" 1638 height="40" 1639 viewBox="0 0 40 40" 1640 class="block size-10" 1641> 1642 <g fill="none" fill-rule="evenodd"><path d="M0 0h40v40H0z"/><g fill="currentColor" fill-rule="nonzero" transform="translate(8 8)"><circle cx="11.939" cy="6" r="6"/>
1642<path d="M22.869 24c.6 0 1.08-.53 1-1.12-.67-4.99-5.75-8.88-11.93-8.88S.679 17.88.009 22.88c-.08.6.4 1.12 1 1.12H22.869Z"/></g></g> 1643</svg> 1644 1645 </a> 1646 <a 1647 href="/cart" 1648 class="flex h-10 w-10 items-center justify-center text-current" 1649 x-data 1650 x-init="$el.role = 'button';$el.setAttribute('aria-haspopup', 'dialog');" 1651 @click.prevent="Rebuy?.SmartCart?.show();" 1652 > 1653 1654 1655<div 1656 x-data=" 1657 { 1658 count: 0, 1659 updateCountFromRebuy (event) { 1660 const { smartcart, item } = event.detail; 1661 this.count = smartcart.cart.item_count; 1662 } 1663 } 1664 " 1665 x-init="document.addEventListener('rebuy:smartcart.hide', event => { updateCountFromRebuy(event) });" 1666 id="cart" 1667 :data-state="count > 0 && 'full'" 1668 class="relative" 1669 @update-count.window="count = Number($event.detail.item_count)" 1670> 1671 <span class="sr-only">Cart</span> 1672 <div 1673 id="cart-count" 1674 class="absolute right-0 top-0.5 grid size-3.5 place-content-center rounded-full bg-accent text-[12px] font-bold leading-none text-dark" 1675 aria-hidden="true" 1676 x-text="count" 1677 > 1678 0 1679 </div> 1680 <svg 1681 viewBox="0 0 40 40" 1682 xmlns="http://www.w3.org/2000/svg" 1683 fill="currentColor" 1684 aria-hidden="true" 1685 data-has-items="" 1686 class="icon icon-cart size-10 " 1687 > 1688 <path d="M32.6487 12.7051C32.4479 12.3895 32.1036 12.16 31.7306 12.16L13.5987 11.328L12.9675 8.86069C12.824 8.34428 12.3937 8 11.8486 8H8.14759C7.51642 8 7 8.51642 7 9.14759C7 9.77877 7.51642 10.2952 8.14759 10.2952H10.9592L14.1151 22.5744L13.3404 25.7877C13.2544 26.132 13.3404 26.5049 13.5413 26.7631C13.7708 27.05 14.0864 27.1935 14.4307 27.1935H28.4887C29.1198 27.1935 29.6363 26.6771 29.6363 26.0459C29.6363 25.4147 29.1198 24.8983 28.4887 24.8983H15.9225L16.2381 23.5786L27.714 23.0335C28.1444 23.0048 28.5174 22.7466 28.6895 22.3736L32.7061 13.7667C32.8782 13.4511 32.8495 13.0494 32.6487 12.7051Z" fill="#155DD7"/> 1689 <path d="M15.1767 32.0992C16.3651 32.0992 17.3284 31.1359 17.3284 29.9475C17.3284 28.7591 16.3651 27.7958 15.1767 27.7958C13.9883 27.7958 13.0249 28.7591 13.0249 29.9475C13.0249 31.1359 13.9883 32.0992 15.1767 32.0992Z" fill="#155DD7"/> 1690 <path d="M28.087 32.0992C29.2754 32.0992 30.2388 31.1359 30.2388 29.9475C30.2388 28.7591 29.2754 27.7958 28.087 27.7958C26.8987 27.7958 25.9353 28.7591 25.9353 29.9475C25.9353 31.1359 26.8987 32.0992 28.087 32.0992Z" fill="#155DD7"/> 1691 </svg> 1692</div> 1693 1694<style data-shopify> 1695 #cart { 1696 #cart-count, 1697 #cart-mask { 1698 visibility: hidden; 1699 } 1700 } 1701 1702 #cart[data-state='full'] { 1703 #cart-count, 1704 #cart-mask { 1705 visibility: visible; 1706 } 1707 } 1708</style> 1709 1710 </a> 1711 </div> 1712 <div class="hidden lg:block"> 1713 <a class="button min-w-52" style="--button-padding: 8px 24px; --button-border-width: 0" href="/pages/quiz">Take the quiz + $5 off</a> 1714 </div> 1715 </div> 1716 </div> 1717 </div> 1718 </div> 1719 1720 1721 <div 1722 id="search" 1723 x-cloak 1724 class="absolute inset-x-0 top-0 z-40 hidden bg-white pb-10 pt-30" 1725 x-transition.opacity.duration.250ms 1726 x-show="open == 'search'" 1727 @click.outside="open == 'search' && toggleMenu(false)" 1728> 1729 <div class="mx-auto grid max-w-8xl px-12"> 1730 <form 1731 action="/search" 1732 method="get" 1733 role="search" 1734 class="relative gap-4" 1735 > 1736 <input 1737 x-ref="search" 1738 type="search" 1739 name="q" 1740 placeholder="Search" 1741 class="w-full rounded-xl border-2 border-solid border-dark bg-transparent p-4 font-display text-2xl uppercase leading-none placeholder-blueGrayHalf focus:outline-none focus:ring-2 focus:ring-dark focus:ring-offset-2" 1742 > 1743 <button 1744 type="submit" 1745 class="absolute right-4 top-1/2 grid size-10 -translate-y-1/2 place-items-center rounded-full bg-accent text-dark" 1746 > 1747 <span class="sr-only">Submit</span> 1748 <svg 1749 viewBox="0 0 24 24" 1750 fill="none" 1751 aria-hidden="true" 1752 focusable="false" 1753 class="icon icon-arrow-right size-6" 1754 xmlns="http://www.w3.org/2000/svg" 1755 stroke-width="2" 1756 stroke="currentColor" 1757> 1758 <path stroke-linecap="round" stroke-linejoin="round" d="M17.25 8.25 21 12m0 0-3.75 3.75M21 12H3" /> 1759</svg> 1760 1761 </button> 1762 </form> 1763 </div> 1764</div> 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 <div 1777 id="menu" 1778 x-show="open == 'shop-dog'" 1779 x-cloak 1780 class="absolute inset-x-0 top-0 z-40 hidden bg-white pt-[80px] lg:block" 1781 x-transition.opacity.duration.250ms 1782 @click.outside="open == 'shop-dog' && toggleMenu(false)" 1783 > 1784 <div class="border-0 border-t border-solid border-accent py-10 pb-10"> 1785 <div class="mx-auto grid max-w-8xl grid-cols-4 gap-10 px-12"> 1786 1787 1788 1789 <div> 1790 <h2 class="text-nav lowercase"> 1791 1792 <a href="/collections/dog" title="">Featured</a> 1793 1794 </h2> 1795 1796 <ul role="list" class="text-p2 mt-4 grid gap-1 lowercase"> 1797 1798 <li> 1799 <a href="/collections/dog" class="inline-flex items-center gap-2"> 1800 All Products 1801 </a> 1802 </li> 1803 1804 <li> 1805 <a href="/collections/best-sellers" class="inline-flex items-center gap-2"> 1806 Best Sellers 1807 </a> 1808 </li> 1809 1810 <li> 1811 <a href="/collections/new-arrivals" class="inline-flex items-center gap-2"> 1812 New Arrivals 1813 </a> 1814 </li> 1815 1816 </ul> 1817 1818</div> 1819 1820 1821 1822 1823 <div> 1824 <h2 class="text-nav lowercase"> 1825 1826 <a href="/collections/concerns" title="">Shop by concern</a> 1827 1828 </h2> 1829 1830 <ul role="list" class="text-p2 mt-4 grid gap-1 lowercase"> 1831 1832 <li> 1833 <a href="/collections/dog" class="inline-flex items-center gap-2"> 1834 all products 1835 </a> 1836 </li> 1837 1838 <li> 1839 <a href="/collections/gut-health-and-digestion" class="inline-flex items-center gap-2"> 1840 gut health + digestion 1841 </a> 1842 </li> 1843 1844 <li> 1845 <a href="/collections/skin-health" class="inline-flex items-center gap-2"> 1846 skin health 1847 </a> 1848 </li> 1849 1850 <li> 1851 <a href="/collections/mobility-and-joints" class="inline-flex items-center gap-2"> 1852 mobility + joints 1853 </a> 1854 </li> 1855 1856 <li> 1857 <a href="/collections/allergy-relief" class="inline-flex items-center gap-2"> 1858 allergy relief 1859 </a> 1860 </li> 1861 1862 <li> 1863 <a href="/collections/runny-and-irregular-poop" class="inline-flex items-center gap-2"> 1864 runny + irregular poop 1865 </a> 1866 </li> 1867 1868 <li> 1869 <a href="/collections/picky-eaters" class="inline-flex items-center gap-2"> 1870 picky eaters 1871 </a> 1872 </li> 1873 1874 <li> 1875 <a href="/collections/stress-and-anxiety" class="inline-flex items-center gap-2"> 1876 stress + anxiety 1877 </a> 1878 </li> 1879 1880 <li> 1881 <a href="/collections/dental-health" class="inline-flex items-center gap-2"> 1882 dental health 1883 </a> 1884 </li> 1885 1886 <li> 1887 <a href="/collections/senior-care" class="inline-flex items-center gap-2"> 1888 senior care 1889 </a> 1890 </li> 1891 1892 </ul> 1893 1894</div> 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 <div 1908 class="flex flex-col" 1909 1910 style="grid-column-start: 3;" 1911 1912> 1913 <a href="/products/hip-joint-advanced-care-powder" class="mb-4 block"> 1914 <img src="//nativepet.com/cdn/shop/files/Nav_Mega_Menu_Image.jpg?v=1781019292&width=686" alt="" srcset="//nativepet.com/cdn/shop/files/Nav_Mega_Menu_Image.jpg?v=1781019292&width=352 352w, //nativepet.com/cdn/shop/files/Nav_Mega_Menu_Image.jpg?v=1781019292&width=686 686w" width="686" height="515" loading="lazy" class="w-full block rounded-3xl aspect-[4/3] object-cover" sizes="343px"> 1915 </a> 1916 <div> 1917 1918 <h2 class="text-p4 mb-2 mt-0 font-bold">Hip+Joint Advanced Care</h2> 1919 1920 1921 <p class="text-p4 mt-0">A full-spectrum formula to support your dogâs mobility, joints and overall comfort.</p> 1922 1923 </div> 1924 1925 <div class="mt-3"> 1926 <a class="link font-bold" href="/products/hip-joint-advanced-care-powder">SHOP NOW</a> 1927 </div> 1928 1929</div> 1930 1931 1932 1933 1934 1935 1936 1937 <div 1938 class="flex flex-col" 1939 1940> 1941 <a href="/pages/quiz" class="mb-4 block"> 1942 <img src="//nativepet.com/cdn/shop/files/NP-Homepage-Navigation-Card-2.jpg?v=1718224172&width=686" alt="" srcset="//nativepet.com/cdn/shop/files/NP-Homepage-Navigation-Card-2.jpg?v=1718224172&width=352 352w, //nativepet.com/cdn/shop/files/NP-Homepage-Navigation-Card-2.jpg?v=1718224172&width=686 686w" width="686" height="503" loading="lazy" class="w-full block rounded-3xl aspect-[4/3] object-cover" sizes="343px"> 1943 </a> 1944 <div> 1945 1946 <h2 class="text-p4 mb-2 mt-0 font-bold">Build Their Routine</h2> 1947 1948 1949 <p class="text-p4 mt-0">Find the right product for your pet. Every pet need is different, find what works for yours!</p> 1950 1951 </div> 1952 1953 <div class="mt-3"> 1954 <a class="link font-bold" href="/pages/quiz">Take The Quiz + $5 Off</a> 1955 </div> 1956 1957</div> 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 </div> 1970 </div> 1971 </div> 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 <div 1983 id="menu" 1984 x-show="open == 'shop-cat'" 1985 x-cloak 1986 class="absolute inset-x-0 top-0 z-40 hidden bg-white pt-[80px] lg:block" 1987 x-transition.opacity.duration.250ms 1988 @click.outside="open == 'shop-cat' && toggleMenu(false)" 1989 > 1990 <div class="border-0 border-t border-solid border-accent py-10 pb-10"> 1991 <div class="mx-auto grid max-w-8xl grid-cols-4 gap-10 px-12"> 1992 1993 1994 1995 1996 1997 1998 1999 <div> 2000 <h2 class="text-nav lowercase"> 2001 2002 <a href="/collections/cat" title="">Featured</a> 2003 2004 </h2> 2005 2006 <ul role="list" class="text-p2 mt-4 grid gap-1 lowercase"> 2007 2008 <li>
2009 <a href="/collections/cat" class="inline-flex items-center gap-2"> 2010 all products 2011 </a> 2012 </li> 2013 2014 <li> 2015 <a href="/products/cat-hairball" class="inline-flex items-center gap-2"> 2016 hairball 2017 </a> 2018 </li> 2019 2020 <li> 2021 <a href="/products/cat-multivitamin" class="inline-flex items-center gap-2"> 2022 multivitamin 2023 </a> 2024 </li> 2025 2026 <li> 2027 <a href="/products/cat-probiotic" class="inline-flex items-center gap-2"> 2028 probiotic 2029 </a> 2030 </li> 2031 2032 <li> 2033 <a href="/products/cat-immune" class="inline-flex items-center gap-2"> 2034 immune 2035 </a> 2036 </li> 2037 2038 <li> 2039 <a href="/products/cat-calm" class="inline-flex items-center gap-2"> 2040 calm 2041 </a> 2042 </li> 2043 2044 </ul> 2045 2046</div> 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 <div 2062 class="flex flex-col" 2063 2064 style="grid-column-start: 2;" 2065 2066> 2067 <a href="/collections/cat" class="mb-4 block"> 2068 <img src="//nativepet.com/cdn/shop/files/NP-DTC-Navigation-1.webp?v=1790089500&width=686" alt="" srcset="//nativepet.com/cdn/shop/files/NP-DTC-Navigation-1.webp?v=1790089500&width=352 352w, //nativepet.com/cdn/shop/files/NP-DTC-Navigation-1.webp?v=1790089500&width=686 686w" width="686" height="515" loading="lazy" class="w-full block rounded-3xl aspect-[4/3] object-cover" sizes="343px"> 2069 </a> 2070 <div> 2071 2072 <h2 class="text-p4 mb-2 mt-0 font-bold">NEW! Cat supplements</h2> 2073 2074 2075 <p class="text-p4 mt-0">Vet-formulated, clean ingredient supplements for cats with really good taste.</p> 2076 2077 </div> 2078 2079 <div class="mt-3"> 2080 <a class="link font-bold" href="/collections/cat">SHOP CAT</a> 2081 </div> 2082 2083</div> 2084 2085 2086 2087 2088 2089 2090 2091 <div 2092 class="flex flex-col" 2093 2094> 2095 <a href="/products/cat-multivitamin" class="mb-4 block"> 2096 <img src="//nativepet.com/cdn/shop/files/NP-DTC-Navigation-3.webp?v=1790089435&width=686" alt="" srcset="//nativepet.com/cdn/shop/files/NP-DTC-Navigation-3.webp?v=1790089435&width=352 352w, //nativepet.com/cdn/shop/files/NP-DTC-Navigation-3.webp?v=1790089435&width=686 686w" width="686" height="515" loading="lazy" class="w-full block rounded-3xl aspect-[4/3] object-cover" sizes="343px"> 2097 </a> 2098 <div> 2099 2100 <h2 class="text-p4 mb-2 mt-0 font-bold">Multivitamin</h2> 2101 2102 2103 <p class="text-p4 mt-0">Foundational daily wellness, just for cats.</p> 2104 2105 </div> 2106 2107 <div class="mt-3"> 2108 <a class="link font-bold" href="/products/cat-multivitamin">Shop Now</a> 2109 </div> 2110 2111</div> 2112 2113 2114 2115 2116 2117 2118 2119 <div 2120 class="flex flex-col" 2121 2122> 2123 <a href="/pages/quiz" class="mb-4 block"> 2124 <img src="//nativepet.com/cdn/shop/files/NP-DTC-Navigation-2.webp?v=1790089522&width=686" alt="" srcset="//nativepet.com/cdn/shop/files/NP-DTC-Navigation-2.webp?v=1790089522&width=352 352w, //nativepet.com/cdn/shop/files/NP-DTC-Navigation-2.webp?v=1790089522&width=686 686w" width="686" height="515" loading="lazy" class="w-full block rounded-3xl aspect-[4/3] object-cover" sizes="343px"> 2125 </a> 2126 <div> 2127 2128 <h2 class="text-p4 mb-2 mt-0 font-bold">Build Their Routine</h2> 2129 2130 2131 <p class="text-p4 mt-0">Find the right product for your cat. Every need is different, so choose what works best for yours.</p> 2132 2133 </div> 2134 2135 <div class="mt-3"> 2136 <a class="link font-bold" href="/pages/quiz">Take The Quiz + $5 Off</a> 2137 </div> 2138 2139</div> 2140 2141 2142 2143 2144 2145 </div> 2146 </div> 2147 </div> 2148 2149 2150 2151</header> 2152 2153 2154</div> 2155<!-- END sections: header-group --> 2156 2157 <div id="main" tabindex="-1"></div> 2158 <main role="main"> 2159 <div id="shopify-section-template--15358668374059__store-locator" class="shopify-section banner-template-section"> 2160 2161<link href="//nativepet.com/cdn/shop/t/361/assets/rover-layer.min.css?v=61194367373170259971723248543" rel="stylesheet" type="text/css" media="all" /> 2162<link href="//nativepet.com/cdn/shop/t/361/assets/store-locator.min.css?v=38149052325634629981727220355" rel="stylesheet" type="text/css" media="all" /> 2163 2164 2165 2166
2166<script src="//nativepet.com/cdn/shop/t/361/assets/store-locator.Bhb4ok6l.min.js?v=151039303842317032321778187747" type="module" crossorigin="anonymous"></script>
2166 2167 2168 2169<store-locator class="rover"> 2170 <section 2171 id="banner-template--15358668374059__store-locator" 2172 class="banner page-banner dark-overlay- full-width--" 2173 > 2174 2175 <div class="store-locator"> 2176 2177 <h1 2178 class="store-locator__heading h5" 2179 > 2180 find your nearest store 2181 </h1> 2182 2183 2184 2185 <div 2186 class="store-locator__text text-body-xxx-large" 2187 > 2188 <p>Wanna go for a ride?!</p> 2189 </div> 2190 2191 </div> 2192 2193 </section> 2194 2195 <a name="pagecontent" id="pagecontent"><span class="sr-only">Store locator pagecontent</span></a> 2196 <div 2197 class="container main content" 2198 > 2199 <div class="sixteen columns page clearfix"> 2200 <div> 2201 <div id="storepoint-container" data-map-id="16228208697c3f"></div>
2202<script>// <![CDATA[ 2203(function(){var a=document.createElement("script");a.type="text/javascript";a.async=!0;a.src="https://cdn.storepoint.co/api/v1/js/16228208697c3f.js";var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b);}()); 2204// ]]></script>
2204 2205<style><!-- 2206.main{background:white;} 2207--></style> 2208 </div> 2209 </div> 2210 </div> 2211 2212 2213 <div class="store-locator-block-wrapper py-15 order-2 mx-auto grid max-w-2xl grid-cols-3 flex-wrap items-center gap-4 lg:grid-cols-4 lg:gap-8"> 2214 2215<div> 2216 2217 2218 <a aria-label="Link to https://www.amazon.com/stores/page/FD5C1BDC-AD71-43CC-954B-4F47BC17FC3F?maas=maas_adg_3A877AD445805E166F529DD408A5464B_afap_abs&ref_=aa_maas&tag=maas" href="https://www.amazon.com/stores/page/FD5C1BDC-AD71-43CC-954B-4F47BC17FC3F?maas=maas_adg_3A877AD445805E166F529DD408A5464B_afap_abs&ref_=aa_maas&tag=maas"> 2219 <img src="//nativepet.com/cdn/shop/files/logo_5c011a69-e851-4ee8-b1cf-81ade756f3ea.png?v=1670411878&width=600" alt="" srcset="//nativepet.com/cdn/shop/files/logo_5c011a69-e851-4ee8-b1cf-81ade756f3ea.png?v=1670411878&width=352 352w, //nativepet.com/cdn/shop/files/logo_5c011a69-e851-4ee8-b1cf-81ade756f3ea.png?v=1670411878&width=600 600w" width="600" height="334" class="max-h-[60px] w-auto mx-auto"> 2220 </a> 2221 2222 2223 </div> 2224 2225<div> 2226 2227 2228 <a aria-label="Link to https://www.target.com/s?searchTerm=native+pet" href="https://www.target.com/s?searchTerm=native+pet"> 2229 <img src="//nativepet.com/cdn/shop/files/Vector.png?v=1670411896&width=600" alt="" srcset="//nativepet.com/cdn/shop/files/Vector.png?v=1670411896&width=352 352w, //nativepet.com/cdn/shop/files/Vector.png?v=1670411896&width=600 600w" width="600" height="808" class="max-h-[60px] w-auto mx-auto"> 2230 </a> 2231 2232 2233 </div> 2234 2235<div> 2236 2237 2238 <a aria-label="Link to https://www.chewy.com/brands/native-pet-105742?nav-submit-button=&ref-query=native%20pet&ref=searchRedirect" href="https://www.chewy.com/brands/native-pet-105742?nav-submit-button=&ref-query=native%20pet&ref=searchRedirect"> 2239 <img src="//nativepet.com/cdn/shop/files/logo_1.png?v=1670411920&width=600" alt="Chewy logo." srcset="//nativepet.com/cdn/shop/files/logo_1.png?v=1670411920&width=352 352w, //nativepet.com/cdn/shop/files/logo_1.png?v=1670411920&width=600 600w" width="600" height="332" class="max-h-[60px] w-auto mx-auto"> 2240 </a> 2241 2242 2243 </div> 2244 2245<div> 2246 2247 2248 <a aria-label="Link to https://www.petco.com/shop/en/petcostore/brand/native-pet" href="https://www.petco.com/shop/en/petcostore/brand/native-pet"> 2249 <img src="//nativepet.com/cdn/shop/files/Petco_Logo.png?v=1717084693&width=600" alt="" srcset="//nativepet.com/cdn/shop/files/Petco_Logo.png?v=1717084693&width=352 352w, //nativepet.com/cdn/shop/files/Petco_Logo.png?v=1717084693&width=600 600w" width="600" height="209" class="max-h-[60px] w-auto mx-auto"> 2250 </a> 2251 2252 2253 </div> 2254 2255<div> 2256 2257 2258 <a aria-label="Link to https://www.meijer.com/shopping/product/native-pet-the-daily-supplement-for-dogs-7-oz-/85002184059.html" href="https://www.meijer.com/shopping/product/native-pet-the-daily-supplement-for-dogs-7-oz-/85002184059.html"> 2259 <img src="//nativepet.com/cdn/shop/files/Meijer_Logo.png?v=1717084680&width=600" alt="" srcset="//nativepet.com/cdn/shop/files/Meijer_Logo.png?v=1717084680&width=352 352w, //nativepet.com/cdn/shop/files/Meijer_Logo.png?v=1717084680&width=600 600w" width="600" height="237" class="max-h-[60px] w-auto mx-auto"> 2260 </a> 2261 2262 2263 </div> 2264 2265<div> 2266 2267 2268 <a aria-label="Link to https://www.tractorsupply.com/tsc/brand/Native+Pet" href="https://www.tractorsupply.com/tsc/brand/Native+Pet"> 2269 <img src="//nativepet.com/cdn/shop/files/Tractor_Supply_Company_Logo.png?v=1717084701&width=600" alt="" srcset="//nativepet.com/cdn/shop/files/Tractor_Supply_Company_Logo.png?v=1717084701&width=352 352w, //nativepet.com/cdn/shop/files/Tractor_Supply_Company_Logo.png?v=1717084701&width=600 600w" width="600" height="161" class="max-h-[60px] w-auto mx-auto"> 2270 </a> 2271 2272 2273 </div> 2274 2275<div> 2276 2277 2278 <img src="//nativepet.com/cdn/shop/files/PetSmart-Logo.wine.png?v=1727214823&width=600" alt="" srcset="//nativepet.com/cdn/shop/files/PetSmart-Logo.wine.png?v=1727214823&width=352 352w, //nativepet.com/cdn/shop/files/PetSmart-Logo.wine.png?v=1727214823&width=600 600w" width="600" height="158" class="max-h-[60px] w-auto mx-auto"> 2279 2280 2281 </div> 2282 2283<div> 2284 2285 2286 <a aria-label="Link to https://www.sprouts.com/" href="https://www.sprouts.com/"> 2287 <img src="//nativepet.com/cdn/shop/files/Sprouts_Logo.png?v=1738861955&width=600" alt="" srcset="//nativepet.com/cdn/shop/files/Sprouts_Logo.png?v=1738861955&width=352 352w, //nativepet.com/cdn/shop/files/Sprouts_Logo.png?v=1738861955&width=600 600w" width="600" height="156" class="max-h-[60px] w-auto mx-auto"> 2288 </a> 2289 2290 2291 </div> 2292 2293<div> 2294 2295 2296 <img src="//nativepet.com/cdn/shop/files/WholeFoods_logo.png?v=1746028138&width=600" alt="" srcset="//nativepet.com/cdn/shop/files/WholeFoods_logo.png?v=1746028138&width=352 352w, //nativepet.com/cdn/shop/files/WholeFoods_logo.png?v=1746028138&width=600 600w" width="600" height="600" class="max-h-[60px] w-auto mx-auto"> 2297 2298 2299 </div> 2300 2301 </div> 2302 2303</store-locator> 2304 2305 2306 2307 2308</div><div id="shopify-section-template--15358668374059__1755fe7f-2ca1-4a42-a098-c1981d43712a" class="shopify-section"> 2309 2310<div class=""> 2311 <picture> 2312 <source srcset="//nativepet.com/cdn/shop/files/NativePet_Footer_Home-ALT_M.jpg?v=1671565751&width=800" media="(max-width: 768px)"> 2313 <img src="//nativepet.com/cdn/shop/files/NativePet_Footer_Home-ALT_D.jpg?v=1671565745&width=2000" alt="woman and her grey poodle laying in the grass" srcset="//nativepet.com/cdn/shop/files/NativePet_Footer_Home-ALT_D.jpg?v=1671565745&width=352 352w, //nativepet.com/cdn/shop/files/NativePet_Footer_Home-ALT_D.jpg?v=1671565745&width=832 832w, //nativepet.com/cdn/shop/files/NativePet_Footer_Home-ALT_D.jpg?v=1671565745&width=1200 1200w, //nativepet.com/cdn/shop/files/NativePet_Footer_Home-ALT_D.jpg?v=1671565745&width=1920 1920w, //nativepet.com/cdn/shop/files/NativePet_Footer_Home-ALT_D.jpg?v=1671565745&width=2000 2000w" width="2000" height="1125" loading="lazy" class="h-auto object-center object-cover select-none pointer-events-none"> 2314 </picture> 2315</div> 2316 2317 2318</div> 2319 </main> 2320 2321 <ul hidden> 2322 <li id="a11y-refresh-page-message">Choosing a selection results in a full page refresh.</li> 2323 <li id="a11y-new-window-message">Opens in a new window.</li> 2324 </ul> 2325 2326 <!-- BEGIN sections: footer-group --> 2327<div id="shopify-section-sections--15358667718699__footer" class="shopify-section shopify-section-group-footer-group"><footer id="site-footer" class="bg-background text-foreground color-scheme-1"> 2328 <div class="wrapper"> 2329 <div class="grid lg:grid-cols-[2fr_3fr]"> 2330 <div class="flex flex-col justify-between border-0 py-10 lg:border-r lg:border-solid lg:border-accent lg:p-15"> 2331 <div> 2332 <h3 class="text-eyebrow">Join our pack!</h3> 2333 <p class="text-p2 mt-2 text-light"> 2334 Stay in the know on all things health and wellness for your pet. Plus! Exclusive deals for pet parents like 2335 you. 2336 </p> 2337 <style data-shopify> 2338 .klaviyo-form-RA7TM8 input, 2339 .klaviyo-form-RA7TM8 span:not([role='alert']) { 2340 background: transparent !important; 2341 color: #fff !important; 2342 border: 0 !important; 2343 } 2344 2345 .klaviyo-form-RA7TM8 [data-testid='form-row'] { 2346 gap: 1rem; 2347 } 2348 2349 .klaviyo-form-RA7TM8 [data-testid='form-component'] {
2350 align-self: center !important; 2351 } 2352 2353 .klaviyo-form-RA7TM8 input::placeholder { 2354 color: #fff !important; 2355 } 2356 2357 .klaviyo-form-RA7TM8 input, 2358 .klaviyo-form-RA7TM8 span, 2359 .klaviyo-form-RA7TM8 button { 2360 font-family: var(--font-sans) !important; 2361 font-weight: 400 !important; 2362 } 2363 2364 .klaviyo-form-RA7TM8 button { 2365 border-radius: 0 8px 8px 0 !important; 2366 font-size: 13px !important; 2367 text-transform: uppercase !important; 2368 } 2369 2370 .klaviyo-form-RA7TM8 button:focus-visible { 2371 box-shadow: none !important; 2372 outline: none !important; 2373 } 2374 2375 @media (min-width: 1024px) { 2376 .klaviyo-form-RA7TM8 button { 2377 font-size: 14px !important; 2378 } 2379 } 2380</style> 2381 2382<div class="klaviyo-form-RA7TM8 mt-4"></div> 2383 2384 </div> 2385 2386 2387<div class="text-p3 hidden lg:block"> 2388 <div class="text-center lg:text-left">© 2026 Native Pet</div> 2389 <nav class="mt-4"> 2390 <ul role="list" class="flex justify-center lg:justify-start"> 2391 2392 <li class="first:mr-4 first:border-0 first:border-r first:border-solid first:border-light first:pr-4"> 2393 <a href="/policies/terms-of-service" class="text-current">Terms of Service</a> 2394 </li> 2395 2396 <li class="first:mr-4 first:border-0 first:border-r first:border-solid first:border-light first:pr-4"> 2397 <a href="/policies/privacy-policy" class="text-current">Privacy Policy</a> 2398 </li> 2399 2400 </ul> 2401 </nav> 2402</div> 2403 2404 </div> 2405 <div class="grid lg:grid-cols-2 lg:gap-15 lg:p-15 xl:grid-cols-3"> 2406 2407 <nav 2408 x-data=" 2409 { 2410 active: false 2411 } 2412 " 2413 class="border-0 border-b-2 border-solid border-light first:border-t-2 lg:border-0 lg:first:border-0" 2414> 2415 <h3> 2416 <button 2417 type="button" 2418 class="text-p1 flex w-full items-center justify-between py-4 lowercase lg:hidden" 2419 @click="active = !active" 2420 > 2421 Shop 2422 <svg 2423 xmlns="http://www.w3.org/2000/svg" 2424 aria-hidden="true" 2425 focusable="false" 2426 class="icon icon-plus size-4" 2427 fill="none" 2428 viewBox="0 0 10 10" 2429> 2430 <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"> 2431</svg> 2432 2433 </button> 2434 <span class="text-eyebrow hidden lg:block">Shop</span> 2435 </h3> 2436 <ul 2437 x-show="active" 2438 x-cloak 2439 x-collapse 2440 role="list" 2441 class="text-p2 mt-2 space-y-1 lg:mt-4 lg:!block lg:!h-auto lg:!overflow-auto" 2442 > 2443 2444 <li class="last:pb-6 lg:last:pb-0"> 2445 <a 2446 href="/collections/best-sellers" 2447 2448 class="lowercase text-light" 2449 >best sellers</a> 2450 </li> 2451 2452 <li class="last:pb-6 lg:last:pb-0"> 2453 <a 2454 href="/collections/air-dried-chews" 2455 2456 class="lowercase text-light" 2457 >air-dried chews</a> 2458 </li> 2459 2460 <li class="last:pb-6 lg:last:pb-0"> 2461 <a 2462 href="/collections/healthy-toppers" 2463 2464 class="lowercase text-light" 2465 >healthy toppers</a> 2466 </li> 2467 2468 <li class="last:pb-6 lg:last:pb-0"> 2469 <a 2470 href="/collections/all" 2471 2472 class="lowercase text-light" 2473 >all products</a> 2474 </li> 2475 2476 </ul> 2477</nav> 2478 2479 2480 <nav 2481 x-data=" 2482 { 2483 active: false 2484 } 2485 " 2486 class="border-0 border-b-2 border-solid border-light first:border-t-2 lg:border-0 lg:first:border-0" 2487> 2488 <h3> 2489 <button 2490 type="button" 2491 class="text-p1 flex w-full items-center justify-between py-4 lowercase lg:hidden" 2492 @click="active = !active" 2493 > 2494 Help 2495 <svg 2496 xmlns="http://www.w3.org/2000/svg" 2497 aria-hidden="true" 2498 focusable="false" 2499 class="icon icon-plus size-4" 2500 fill="none" 2501 viewBox="0 0 10 10" 2502> 2503 <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"> 2504</svg> 2505 2506 </button> 2507 <span class="text-eyebrow hidden lg:block">Help</span> 2508 </h3> 2509 <ul 2510 x-show="active" 2511 x-cloak 2512 x-collapse 2513 role="list" 2514 class="text-p2 mt-2 space-y-1 lg:mt-4 lg:!block lg:!h-auto lg:!overflow-auto" 2515 > 2516 2517 <li class="last:pb-6 lg:last:pb-0"> 2518 <a 2519 href="/pages/rewards" 2520 2521 class="lowercase text-light" 2522 >Rewards</a> 2523 </li> 2524 2525 <li class="last:pb-6 lg:last:pb-0"> 2526 <a 2527 href="https://nativepet.gorgias.help/en-US" 2528 2529 class="lowercase text-light" 2530 >Help Center</a> 2531 </li> 2532 2533 <li class="last:pb-6 lg:last:pb-0"> 2534 <a 2535 href="https://nativepet.com/policies/shipping-policy" 2536 2537 class="lowercase text-light" 2538 >Shipping</a> 2539 </li> 2540 2541 <li class="last:pb-6 lg:last:pb-0"> 2542 <a 2543 href="/policies/refund-policy" 2544 2545 class="lowercase text-light" 2546 >Refunds</a> 2547 </li> 2548 2549 <li class="last:pb-6 lg:last:pb-0"> 2550 <a 2551 href="/pages/tracking" 2552 2553 class="lowercase text-light" 2554 >Find my order</a> 2555 </li> 2556 2557 <li class="last:pb-6 lg:last:pb-0"> 2558 <a 2559 href="/pages/store-locator" 2560 2561 aria-current="page" 2562 2563 class="lowercase text-light" 2564 >Find us in stores</a> 2565 </li> 2566 2567 </ul> 2568</nav> 2569 2570 2571 <nav 2572 x-data=" 2573 { 2574 active: false 2575 } 2576 " 2577 class="border-0 border-b-2 border-solid border-light first:border-t-2 lg:border-0 lg:first:border-0" 2578> 2579 <h3> 2580 <button 2581 type="button" 2582 class="text-p1 flex w-full items-center justify-between py-4 lowercase lg:hidden" 2583 @click="active = !active" 2584 > 2585 Contact 2586 <svg 2587 xmlns="http://www.w3.org/2000/svg" 2588 aria-hidden="true" 2589 focusable="false" 2590 class="icon icon-plus size-4" 2591 fill="none" 2592 viewBox="0 0 10 10" 2593> 2594 <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"> 2595</svg> 2596 2597 </button> 2598 <span class="text-eyebrow hidden lg:block">Contact</span> 2599 </h3> 2600 <ul 2601 x-show="active" 2602 x-cloak 2603 x-collapse 2604 role="list" 2605 class="text-p2 mt-2 space-y-1 lg:mt-4 lg:!block lg:!h-auto lg:!overflow-auto" 2606 > 2607 2608 <li class="last:pb-6 lg:last:pb-0"> 2609 <a 2610 href="https://nativepet.com/pages/contact-form" 2611 2612 class="lowercase text-light" 2613 >Email us</a> 2614 </li> 2615 2616 <li class="last:pb-6 lg:last:pb-0"> 2617 <a 2618 href="/pages/retail-wholesale" 2619 2620 class="lowercase text-light" 2621 >Wholesale Inquiries</a> 2622 </li> 2623 2624 <li class="last:pb-6 lg:last:pb-0"> 2625 <a 2626 href="https://thenativepet.superfiliate.com/portal/signUp" 2627 2628 class="lowercase text-light" 2629 >Become an ambassador</a> 2630 </li> 2631 2632 </ul> 2633</nav> 2634 2635 2636 <nav 2637 x-data=" 2638 { 2639 active: false 2640 } 2641 " 2642 class="border-0 border-b-2 border-solid border-light first:border-t-2 lg:border-0 lg:first:border-0" 2643> 2644 <h3> 2645 <button 2646 type="button" 2647 class="text-p1 flex w-full items-center justify-between py-4 lowercase lg:hidden" 2648 @click="active = !active" 2649 > 2650 Company 2651 <svg 2652 xmlns="http://www.w3.org/2000/svg" 2653 aria-hidden="true" 2654 focusable="false" 2655 class="icon icon-plus size-4" 2656 fill="none" 2657 viewBox="0 0 10 10" 2658> 2659 <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"> 2660</svg> 2661 2662 </button> 2663 <span class="text-eyebrow hidden lg:block">Company</span> 2664 </h3> 2665 <ul 2666 x-show="active" 2667 x-cloak 2668 x-collapse 2669 role="list" 2670 class="text-p2 mt-2 space-y-1 lg:mt-4 lg:!block lg:!h-auto lg:!overflow-auto" 2671 > 2672 2673 <li class="last:pb-6 lg:last:pb-0"> 2674 <a 2675 href="/pages/philosophy" 2676 2677 class="lowercase text-light" 2678 >Native Pet Pact</a> 2679 </li> 2680 2681 <li class="last:pb-6 lg:last:pb-0"> 2682 <a 2683 href="/blogs/health" 2684 2685 class="lowercase text-light" 2686 >Blog</a> 2687 </li> 2688 2689 <li class="last:pb-6 lg:last:pb-0"> 2690 <a 2691 href="/blogs/press" 2692 2693 class="lowercase text-light" 2694 >Press</a> 2695 </li> 2696 2697 </ul> 2698</nav> 2699 2700 2701 <div class="mt-10 lg:col-span-2 lg:mt-0"> 2702 <div class="flex h-full flex-col justify-between"> 2703 <div> 2704 <h3 class="text-p4 lg:text-p3 hidden font-display uppercase lg:block">Follow Us</h3> 2705 <div class="flex justify-center gap-4 lg:mt-4 lg:justify-start"> 2706 <div> 2707 <a 2708 href="https://www.youtube.com/channel/UC9utEsG-PpbUEk62gXlEf1g/featured" 2709 class="text-light" 2710 target="_blank" 2711 > 2712 <svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"> 2713 <title>YouTube</title> 2714 <path d="M9.522 15.135V8.344l6.484 3.407-6.484 3.384ZM23.76 7.167s-.235-1.665-.954-2.399c-.913-.963-1.936-.967-2.405-1.023-3.358-.245-8.396-.245-8.396-.245h-.01s-5.038 0-8.396.245c-.47.056-1.492.06-2.406 1.023-.719.734-.953 2.4-.953 2.4S0 9.122 0 11.077v1.835c0 1.956.24 3.912.24 3.912s.234 1.665.953 2.399c.914.963 2.113.932 2.647 1.033 1.92.186 8.16.243 8.16.243s5.043-.008 8.401-.252c.47-.057 1.492-.061 2.405-1.024.72-.734.954-2.4.954-2.4s.24-1.955.24-3.911v-1.834c0-1.956-.24-3.912-.24-3.912Z"/> 2715</svg> 2716 2717 </a> 2718 </div> 2719 <div> 2720 <a href="https://www.instagram.com/nativepet/" class="text-light" target="_blank"> 2721 <svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"> 2722 <title>Instagram</title> 2723 <path d="M12 0C8.741 0 8.332.014 7.052.072 5.775.13 4.902.333 4.14.63a5.882 5.882 0 0 0-2.126 1.384A5.882 5.882 0 0 0 .63 4.14c-.297.763-.5 1.635-.558 2.912C.014 8.332 0 8.741 0 12c0 3.259.014 3.668.072 4.948.058 1.277.261 2.15.558 2.912.307.79.717 1.459 1.384 2.126A5.883 5.883 0 0 0 4.14 23.37c.763.297 1.635.5 2.912.558C8.332 23.986 8.741 24 12 24c3.259 0 3.668-.014 4.948-.072 1.277-.058 2.15-.261 2.912-.558a5.883 5.883 0 0 0 2.126-1.384 5.883 5.883 0 0 0 1.384-2.126c.297-.763.5-1.635.558-2.912.058-1.28.072-1.689.072-4.948 0-3.259-.014-3.668-.072-4.948-.058-1.277-.261-2.15-.558-2.912a5.883 5.883 0 0 0-1.384-2.126A5.882 5.882 0 0 0 19.86.63c-.763-.297-1.
2723635-.5-2.912-.558C15.668.014 15.259 0 12 0Zm0 2.162c3.204 0 3.584.012 4.849.07 1.17.053 1.805.249 2.228.413.56.218.96.478 1.38.898.42.42.68.82.898 1.38.164.423.36 1.058.413 2.228.058 1.265.07 1.645.07 4.849s-.012 3.584-.07 4.849c-.053 1.17-.249 1.805-.413 2.228-.218.56-.478.96-.898 1.38-.42.42-.82.68-1.38.898-.423.164-1.058.36-2.228.413-1.265.058-1.645.07-4.849.07s-3.584-.012-4.849-.07c-1.17-.053-1.805-.249-2.228-.413a3.717 3.717 0 0 1-1.38-.898c-.42-.42-.68-.82-.898-1.38-.164-.423-.36-1.058-.413-2.228-.058-1.265-.07-1.645-.07-4.849s.012-3.584.07-4.849c.053-1.17.249-1.805.413-2.228.218-.56.478-.96.898-1.38.42-.42.82-.68 1.38-.898.423-.164 1.058-.36 2.228-.413 1.265-.058 1.645-.07 4.849-.07Zm0 3.676a6.162 6.162 0 1 0 0 12.324 6.162 6.162 0 0 0 0-12.324ZM12 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8Zm7.846-10.406a1.44 1.44 0 1 1-2.88 0 1.44 1.44 0 0 1 2.88 0Z"/> 2724</svg> 2725 2726 </a> 2727 </div> 2728 <div> 2729 <a href="https://www.facebook.com/Native-Pet-1708986049410202/" class="text-light" target="_blank"> 2730 <svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"> 2731 <title>Meta</title> 2732 <path d="M24 14.331c0 3.424-1.477 5.569-4.136 5.569-2.348 0-3.593-1.297-5.884-5.122l-1.178-1.973c-.31-.469-.543-.907-.794-1.313-.754 1.268-1.767 3.113-1.767 3.113C7.73 18.977 6.32 19.9 4.358 19.9 1.627 19.9 0 17.751 0 14.429 0 9.066 2.992 4 6.896 4c1.883 0 3.518.926 5.43 3.356C13.717 5.478 15.255 4 17.224 4 20.94 4 24 8.714 24 14.331ZM10.777 9.618c-1.608-2.33-2.658-3.02-3.914-3.02-2.322 0-4.267 3.98-4.267 7.876 0 1.819.693 2.838 1.859 2.838 1.133 0 1.838-.712 3.87-3.892 0 0 .926-1.466 2.453-3.803Zm9.143 7.694c1.207 0 1.759-1.03 1.759-2.808 0-4.658-2.037-8.454-4.62-8.454-1.245 0-2.292.973-3.559 2.926.352.518.716 1.088 1.099 1.703l1.406 2.34c2.201 3.528 2.756 4.293 3.915 4.293Z"/> 2733</svg> 2734 2735 </a> 2736 </div> 2737 <div> 2738 <a href="https://www.tiktok.com/@nativepet" class="text-light" target="_blank"> 2739 <svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"> 2740 <title>TikTok</title> 2741 <path d="M22.999 9.842a9.849 9.849 0 0 1-5.756-1.84v8.38a7.621 7.621 0 1 1-6.575-7.553v4.215a3.499 3.499 0 1 0 2.449 3.337V0h4.126c-.003.348.026.696.087 1.04a5.729 5.729 0 0 0 2.528 3.76 5.693 5.693 0 0 0 3.141.945v4.097Z"/> 2742</svg> 2743 2744 </a> 2745 </div> 2746 <div> 2747 <a href="https://www.pinterest.com/nativepet/" class="text-light" target="_blank"> 2748 <svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"> 2749 <title>Pinterest</title> 2750 <path d="M21.626 8.343c0 5.729-3.184 9.993-7.869 9.993-1.573 0-3.052-.852-3.547-1.82-.852 3.358-1.023 4.001-1.023 4.001-.305 1.12-.929 2.24-1.478 3.111-1.564 1.106-1.71-.606-1.71-.606-.036-1.026-.018-2.257.249-3.355 0 0 .284-1.178 1.875-7.928-.472-.93-.472-2.314-.472-2.314 0-2.162 1.252-3.774 2.808-3.774 1.327 0 1.97 1.005 1.97 2.2 0 1.328-.854 3.32-1.288 5.159-.36 1.555.777 2.806 2.294 2.806 2.77 0 4.626-3.544 4.626-7.737 0-3.205-2.16-5.593-6.068-5.593-4.417 0-7.167 3.3-7.167 6.978 0 1.272.378 2.163.966 2.865.267.322.305.435.209.814-.074.266-.225.91-.302 1.157-.094.38-.399.511-.72.38C2.949 13.841 2 11.605 2 9.101 2 4.968 5.488 0 12.392 0c5.576 0 9.234 4.038 9.234 8.343Z"/> 2751</svg> 2752 2753 </a> 2754 </div> 2755 </div> 2756 </div> 2757 <div class="text-eyebrow hidden text-accent lg:block"> 2758 Around the bowl nutrition⢠2759 </div> 2760 </div> 2761</div> 2762 2763 </div> 2764 </div> 2765 2766 2767<div class="text-p3 mt-10 lg:hidden"> 2768 <div class="text-center lg:text-left">© 2026 Native Pet</div> 2769 <nav class="mt-4"> 2770 <ul role="list" class="flex justify-center lg:justify-start"> 2771 2772 <li class="first:mr-4 first:border-0 first:border-r first:border-solid first:border-light first:pr-4"> 2773 <a href="/policies/terms-of-service" class="text-current">Terms of Service</a> 2774 </li> 2775 2776 <li class="first:mr-4 first:border-0 first:border-r first:border-solid first:border-light first:pr-4"> 2777 <a href="/policies/privacy-policy" class="text-current">Privacy Policy</a> 2778 </li> 2779 2780 </ul> 2781 </nav> 2782</div> 2783 2784 <div class="text-eyebrow mt-10 text-center text-accent lg:hidden">
2785 Around the bowl nutrition⢠2786 </div> 2787 </div> 2788 <div class="overflow-hidden border-0 pt-10 lg:col-span-2 lg:border-t lg:border-solid lg:border-accent lg:pt-15"> 2789 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 122 28" class="text-light block w-[102%] h-auto max-w-8xl mx-auto translate-x-[-1%]"> 2790 <path fill="currentColor" d="m17.16 21.527-.412-6.468c-.342-5.373-3.285-7.427-6.502-7.427-2.362 0-4.244 1.13-5.202 2.978V8.385c0-.582-.343-.992-1.061-.616L.663 9.378c-.377.17-.616.342-.616.616v.102c0 .753 1.54.787 1.54 2.293v9.172c0 1.335-1.369 1.472-1.369 2.225v.137c0 .308.274.513.719.513h5.305c.479 0 .752-.205.752-.513v-.137c0-.753-1.403-.89-1.403-2.225V13.52c0-2.464 1.403-4.244 3.594-4.244 2.088 0 3.422 1.745 3.593 5.647l.343 6.605c.068 1.37-1.232 1.506-1.232 2.26v.136c0 .308.273.513.753.513h4.996c.445 0 .753-.205.753-.513v-.137c0-.753-1.163-.89-1.232-2.259Z"/> 2791 <path fill="currentColor" d="m31.735 21.322-.684-6.571c-.48-4.415-3.252-7.119-7.564-7.119-3.662 0-6.332 1.677-6.332 3.833 0 .959.65 1.575 1.677 1.575 2.157 0 1.472-4.142 4.655-4.142 2.396 0 3.217 2.054 3.594 6.024l.068.684c-.924-.718-2.293-1.163-3.97-1.163-3.457 0-6.263 1.78-6.229 5.133 0 3.354 2.67 5.168 6.4 5.168 2.43 0 3.97-.924 4.757-2.19.137 1.677.993 2.054 2.738 2.054 1.472 0 2.773-.206 2.773-.856 0-.89-1.643-.205-1.883-2.43Zm-7.255 2.122c-2.122 0-3.491-2.02-3.491-4.347 0-2.053 1.334-3.354 3.217-3.354 1.814 0 3.114 1.232 3.251 3.183l.103 1.061c.102 1.848-1.164 3.457-3.08 3.457Z"/> 2792 <path fill="currentColor" d="M37.71 24.744c3.08 0 4.826-2.293 4.826-4.586 0-.616-.822-.718-1.13-.17-.205.992-.992 1.779-2.43 1.779-1.13 0-1.95-.89-1.95-2.533V9.651h4.312c.342 0 .616-.24.616-.581v-.48a.613.613 0 0 0-.616-.616h-4.313l-.034-3.32c0-.479-.205-.752-.65-.752h-.513c-.343 0-.616.273-.685.753-.274 1.985-1.335 3.32-3.114 3.32h-1.061c-.377 0-.582.239-.582.615v.48c0 .342.24.581.582.581h1.95V19.2c0 3.696 1.917 5.544 4.792 5.544Z"/> 2793 <path fill="currentColor" d="M43.975 5.134c1.678 0 2.773-1.061 2.773-2.567C46.748 1.095 45.653 0 43.975 0c-1.71 0-2.84 1.095-2.84 2.567 0 1.506 1.13 2.567 2.84 2.567Zm-2.532 19.268h5.202c.445 0 .753-.205.753-.513v-.137c0-.753-1.403-.89-1.403-2.225V8.351c0-.548-.445-.958-1.232-.582L41.34 9.48c-.376.206-.616.342-.616.616v.103c0 .616 1.267.958 1.267 2.361v8.967c0 1.335-1.267 1.472-1.267 2.225v.137c0 .308.274.513.719.513Z"/> 2794 <path fill="currentColor" d="M62.582 7.974h-3.8c-.376 0-.615.171-.615.514v.102c0 .72 1.916.822 1.197 2.773L55.36 21.527l-4.21-10.644c-.513-1.334.822-1.642.822-2.293v-.102c0-.308-.274-.514-.582-.514h-5.715c-.377 0-.616.171-.616.48v.102c0 .753.992 1.061 1.574 2.259l6.092 12.834c.24.514.48.753 1.027.753h1.437c.514 0 .822-.24.993-.753l5.1-12.834c.478-1.266 1.916-1.506 1.916-2.259v-.103c0-.308-.24-.479-.616-.479Z"/> 2795 <path fill="currentColor" d="M73.648 19.371c-.685 1.37-2.225 2.498-4.38 2.498-2.43 0-4.176-1.437-5.032-3.764l8.282-3.046c1.061-.377 1.746-1.095 1.746-2.396 0-2.396-1.985-5.03-6.4-5.03-4.518 0-8.18 3.524-8.18 8.418 0 5.305 3.525 8.693 8.112 8.693 4.346 0 6.64-3.011 6.947-5.03.069-.685-.719-.822-1.095-.343ZM67.18 8.933c1.984 0 3.25 2.464 3.25 3.867 0 .684-.273 1.164-.889 1.437l-5.681 2.465a11.076 11.076 0 0 1-.206-2.19c0-3.286 1.37-5.58 3.526-5.58ZM90.505 7.632c-2.259 0-4.141.958-5.1 2.601l.035-1.882c0-.582-.308-.958-1.13-.548l-3.148 1.54c-.377.171-.616.411-.616.719v.137c0 .787 1.471.856 1.471 2.156v16.77c0 1.37-1.3 1.506-1.3 2.259v.103c0 .342.308.513.753.513h5.202c.445 0 .753-.171.753-.513v-.103c0-.753-1.403-.89-1.403-2.259V22.93c1.13 1.164 2.635 1.814 4.517 1.814 4.313 0 7.906-3.627 7.906-8.83 0-5.202-3.833-8.282-7.94-8.282Zm-.445 15.812c-2.088 0-4.038-2.362-4.038-4.86v-6.332c.24-1.916 1.745-3.32 3.49-3.32 2.944 0 4.895 3.355 4.895 8.249 0 4.004-1.643 6.263-4.347 6.263Z"/> 2796 <path fill="currentColor" d="M111.111 19.371c-.685 1.37-2.225 2.498-4.381 2.498-2.43 0-4.175-1.437-5.031-3.764l8.283-3.046c1.061-.377 1.745-1.095 1.745-2.396 0-2.396-1.985-5.03-6.4-5.03-4.518 0-8.18 3.524-8.18 8.418 0 5.305 3.525 8.693 8.112 8.693 4.346 0 6.639-3.011 6.947-5.03.069-.685-.719-.822-1.095-.343Zm-6.468-10.438c1.985 0 3.251 2.464 3.251 3.867 0 .684-.274 1.164-.89 1.437l-5.681 2.465a11.067 11.067 0 0 1-.206-2.19c0-3.286 1.369-5.58 3.526-5.58Z"/>
2797 <path fill="currentColor" d="M117.174 24.744c3.081 0 4.826-2.293 4.826-4.586 0-.616-.821-.718-1.129-.17-.206.992-.993 1.779-2.43 1.779-1.13 0-1.951-.89-1.951-2.533V9.651h4.312c.342 0 .616-.24.616-.581v-.48a.614.614 0 0 0-.616-.616h-4.312l-.034-3.32c0-.479-.206-.752-.651-.752h-.513c-.342 0-.616.273-.685.753-.273 1.985-1.334 3.32-3.114 3.32h-1.061c-.376 0-.582.239-.582.615v.48c0 .342.24.581.582.581h1.951V19.2c0 3.696 1.916 5.544 4.791 5.544Z"/> 2798</svg> 2799 2800 </div> 2801</footer> 2802 2803 2804</div> 2805<!-- END sections: footer-group --> 2806 2807 2808 2809 2810 2811
2811<script src="//nativepet.com/cdn/shop/t/361/assets/auto-apply-discount.GZ8tLMQD.min.js?v=5744795416662153421778187746" type="module" crossorigin="anonymous"></script>
2811 2812 2813 2814 2815 2816 2817
2818<script id="apply-cart-discount"> 2819 document.addEventListener('alpine:init', () => { 2820 Alpine.store('discount', { 2821 percentage: 0, 2822 code: localStorage.getItem('pending_discount'), 2823 init () { 2824 if (this.percentage > 0) { 2825 localStorage.setItem('discount_percentage', this.percentage); 2826 2827 return; 2828 } 2829 else { 2830 this.clear(); 2831 } 2832 const stored = Number(localStorage.getItem('discount_percentage')) || 0; 2833 this.percentage = stored; 2834 }, 2835 clear () { 2836 localStorage.removeItem('discount_percentage'); 2837 localStorage.removeItem('pending_discount'); 2838 } 2839 }); 2840 }) 2841</script>
2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851
2851<script id="free-gift-auto-add"> 2852 document.addEventListener('alpine:init', () => { 2853 const setFreeGiftState = () => { 2854 Alpine.store('cart').setFreeGiftThreshold(75.0); 2855 Alpine.store('cart').setFreeGiftVariants([43086087061547]); 2856 Alpine.store('cart').setFreeGiftDiscountCode("FREEGIFT") 2857 } 2858 if (Alpine.store('cart')) { 2859 setFreeGiftState(); 2860 } 2861 else { 2862 document.addEventListener('alpine:cart_store:ready', setFreeGiftState); 2863 } 2864 }) 2865 </script>
2865 2866 2867 2868 2869 2870 2871
2872<script> 2873 window.shopUrl = 'https://nativepet.com'; 2874 window.routes = { 2875 cart_add_url: '/cart/add', 2876 cart_change_url: '/cart/change', 2877 cart_update_url: '/cart/update', 2878 predictive_search_url: '/search/suggest', 2879 }; 2880 2881 window.cartStrings = { 2882 error: `There was an error while updating your cart. Please try again.`, 2883 quantityError: `You can only add [quantity] of this item to your cart.`, 2884 }; 2885 2886 window.variantStrings = { 2887 addToCart: `Add to cart`, 2888 soldOut: `Sold out`, 2889 unavailable: `Unavailable`, 2890 }; 2891 2892 window.accessibilityStrings = { 2893 imageAvailable: `Image [index] is now available in gallery view`, 2894 shareSuccess: `Link copied to clipboard`, 2895 pauseSlideshow: `Pause slideshow`, 2896 playSlideshow: `Play slideshow`, 2897 }; 2898</script>
2898 2899 2900 2901<div id="shopify-section-mobile-drawer" class="shopify-section drawer-section"> 2902 2903 2904<div 2905 x-data=" 2906 { 2907 open: false, 2908 openMenu: '', 2909 2910 async handleAbExperiment() { 2911 const hypothesisId = 'dffc1f21-bbbe-4f1a-be86-443bdcf08737' 2912 const isVariant = await window.shoplift?.isHypothesisActive?.(hypothesisId) ?? false 2913 2914 if (isVariant) { 2915 const els = this.$el.querySelectorAll(`a[href='/pages/philosophy']`) 2916 2917 els.forEach((el) => el.parentElement.remove()); 2918 } 2919 } 2920 } 2921 " 2922 x-init="handleAbExperiment" 2923 @toggle-mobile-menu.window="open = !open" 2924 @open-mobile-menu="openMenu = $event.detail.menu" 2925 @close-mobile-menu="openMenu = ''" 2926> 2927 <div x-dialog x-model="open" x-cloak class="fixed inset-0 isolate z-max overflow-hidden"> 2928 <div x-dialog:overlay x-transition.opacity class="fixed inset-0 bg-blueGrayHalf"></div> 2929 2930 <div class="fixed inset-y-0 left-0 w-full"> 2931 <div 2932 aria-label="your cart" 2933 x-dialog:panel 2934 x-transition:enter="transition ease-out duration-300" 2935 x-transition:enter-start="-translate-x-full" 2936 x-transition:enter-end="translate-x-0" 2937 x-transition:leave="transition ease-in duration-300" 2938 x-transition:leave-start="translate-x-0" 2939 x-transition:leave-end="-translate-x-full" 2940 class="h-full w-full" 2941 > 2942 <button 2943 type="button" 2944 @click="$dialog.close(); setTimeout(() => openMenu = '', 300)" 2945 class="fixed right-2 top-6 z-20 rounded-xl p-2 text-white focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2" 2946 > 2947 <span class="sr-only">Close mobile menu</span> 2948 2949 2950 <svg 2951 class="icon icon--place icon--close " 2952 xmlns="http://www.w3.org/2000/svg" 2953 fill="currentColor" 2954 viewBox="0 0 24 24" 2955 width="24px" 2956 height="24px" 2957 > 2958 <path d="M 4.7070312 3.2929688 L 3.2929688 4.7070312 L 10.585938 12 L 3.2929688 19.292969 L 4.7070312 20.707031 L 12 13.414062 L 19.292969 20.707031 L 20.707031 19.292969 L 13.414062 12 L 20.707031 4.7070312 L 19.292969 3.2929688 L 12 10.585938 L 4.7070312 3.2929688 z"/> 2959 </svg> 2960 2961 2962 </button> 2963 2964 <div 2965 class="relative grid h-full grid-rows-[max-content_1fr_max-content] overflow-visible bg-dark p-4 text-white shadow-lg transition-transform" 2966 :class="openMenu !== '' ? '-translate-x-full delay-100' : ''" 2967 > 2968 <div class="h-16 pb-4 pt-2"> 2969 <h2 x-dialog:title class="text-p1 lowercase"> 2970 <a href="/"> 2971 <span class="sr-only">Native Pet</span> 2972 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 122 32" class="block w-[150px] lg:w-[180px] text-white"> 2973 <path fill="currentColor" d="m17.16 21.527-.412-6.468c-.342-5.373-3.285-7.427-6.502-7.427-2.362 0-4.244 1.13-5.202 2.978V8.385c0-.582-.343-.992-1.061-.616L.663 9.378c-.377.17-.616.342-.616.616v.102c0 .753 1.54.787 1.54 2.293v9.172c0 1.335-1.369 1.472-1.369 2.225v.137c0 .308.274.513.719.513h5.305c.479 0 .752-.205.752-.513v-.137c0-.753-1.403-.89-1.403-2.225V13.52c0-2.464 1.403-4.244 3.594-4.244 2.088 0 3.422 1.745 3.593 5.647l.343 6.605c.068 1.37-1.232 1.506-1.232 2.26v.136c0 .308.273.513.753.513h4.996c.445 0 .753-.205.753-.513v-.137c0-.753-1.163-.89-1.232-2.259Z"/> 2974 <path fill="currentColor" d="m31.735 21.322-.684-6.571c-.48-4.415-3.252-7.119-7.564-7.119-3.662 0-6.332 1.677-6.332 3.833 0 .959.65 1.575 1.677 1.575 2.157 0 1.472-4.142 4.655-4.142 2.396 0 3.217 2.054 3.594 6.024l.068.684c-.924-.718-2.293-1.163-3.97-1.163-3.457 0-6.263 1.78-6.229 5.133 0 3.354 2.67 5.168 6.4 5.168 2.43 0 3.97-.924 4.757-2.19.137 1.677.993 2.054 2.738 2.054 1.472 0 2.773-.206 2.773-.856 0-.89-1.643-.205-1.883-2.43Zm-7.255 2.122c-2.122 0-3.491-2.02-3.491-4.347 0-2.053 1.334-3.354 3.217-3.354 1.814 0 3.114 1.232 3.251 3.183l.103 1.061c.102 1.848-1.164 3.457-3.08 3.457Z"/> 2975 <path fill="currentColor" d="M37.71 24.744c3.08 0 4.826-2.293 4.826-4.586 0-.616-.822-.718-1.13-.17-.205.992-.992 1.779-2.43 1.779-1.13 0-1.95-.89-1.95-2.533V9.651h4.312c.342 0 .616-.24.616-.581v-.48a.613.613 0 0 0-.616-.616h-4.313l-.034-3.32c0-.479-.205-.752-.65-.752h-.513c-.343 0-.616.273-.685.753-.274 1.985-1.335 3.32-3.114 3.32h-1.061c-.377 0-.582.239-.582.615v.48c0 .342.24.581.582.581h1.95V19.2c0 3.696 1.917 5.544 4.792 5.544Z"/>
2976 <path fill="currentColor" d="M43.975 5.134c1.678 0 2.773-1.061 2.773-2.567C46.748 1.095 45.653 0 43.975 0c-1.71 0-2.84 1.095-2.84 2.567 0 1.506 1.13 2.567 2.84 2.567Zm-2.532 19.268h5.202c.445 0 .753-.205.753-.513v-.137c0-.753-1.403-.89-1.403-2.225V8.351c0-.548-.445-.958-1.232-.582L41.34 9.48c-.376.206-.616.342-.616.616v.103c0 .616 1.267.958 1.267 2.361v8.967c0 1.335-1.267 1.472-1.267 2.225v.137c0 .308.274.513.719.513Z"/> 2977 <path fill="currentColor" d="M62.582 7.974h-3.8c-.376 0-.615.171-.615.514v.102c0 .72 1.916.822 1.197 2.773L55.36 21.527l-4.21-10.644c-.513-1.334.822-1.642.822-2.293v-.102c0-.308-.274-.514-.582-.514h-5.715c-.377 0-.616.171-.616.48v.102c0 .753.992 1.061 1.574 2.259l6.092 12.834c.24.514.48.753 1.027.753h1.437c.514 0 .822-.24.993-.753l5.1-12.834c.478-1.266 1.916-1.506 1.916-2.259v-.103c0-.308-.24-.479-.616-.479Z"/> 2978 <path fill="currentColor" d="M73.648 19.371c-.685 1.37-2.225 2.498-4.38 2.498-2.43 0-4.176-1.437-5.032-3.764l8.282-3.046c1.061-.377 1.746-1.095 1.746-2.396 0-2.396-1.985-5.03-6.4-5.03-4.518 0-8.18 3.524-8.18 8.418 0 5.305 3.525 8.693 8.112 8.693 4.346 0 6.64-3.011 6.947-5.03.069-.685-.719-.822-1.095-.343ZM67.18 8.933c1.984 0 3.25 2.464 3.25 3.867 0 .684-.273 1.164-.889 1.437l-5.681 2.465a11.076 11.076 0 0 1-.206-2.19c0-3.286 1.37-5.58 3.526-5.58ZM90.505 7.632c-2.259 0-4.141.958-5.1 2.601l.035-1.882c0-.582-.308-.958-1.13-.548l-3.148 1.54c-.377.171-.616.411-.616.719v.137c0 .787 1.471.856 1.471 2.156v16.77c0 1.37-1.3 1.506-1.3 2.259v.103c0 .342.308.513.753.513h5.202c.445 0 .753-.171.753-.513v-.103c0-.753-1.403-.89-1.403-2.259V22.93c1.13 1.164 2.635 1.814 4.517 1.814 4.313 0 7.906-3.627 7.906-8.83 0-5.202-3.833-8.282-7.94-8.282Zm-.445 15.812c-2.088 0-4.038-2.362-4.038-4.86v-6.332c.24-1.916 1.745-3.32 3.49-3.32 2.944 0 4.895 3.355 4.895 8.249 0 4.004-1.643 6.263-4.347 6.263Z"/> 2979 <path fill="currentColor" d="M111.111 19.371c-.685 1.37-2.225 2.498-4.381 2.498-2.43 0-4.175-1.437-5.031-3.764l8.283-3.046c1.061-.377 1.745-1.095 1.745-2.396 0-2.396-1.985-5.03-6.4-5.03-4.518 0-8.18 3.524-8.18 8.418 0 5.305 3.525 8.693 8.112 8.693 4.346 0 6.639-3.011 6.947-5.03.069-.685-.719-.822-1.095-.343Zm-6.468-10.438c1.985 0 3.251 2.464 3.251 3.867 0 .684-.274 1.164-.89 1.437l-5.681 2.465a11.067 11.067 0 0 1-.206-2.19c0-3.286 1.369-5.58 3.526-5.58Z"/> 2980 <path fill="currentColor" d="M117.174 24.744c3.081 0 4.826-2.293 4.826-4.586 0-.616-.821-.718-1.129-.17-.206.992-.993 1.779-2.43 1.779-1.13 0-1.951-.89-1.951-2.533V9.651h4.312c.342 0 .616-.24.616-.581v-.48a.614.614 0 0 0-.616-.616h-4.312l-.034-3.32c0-.479-.206-.752-.651-.752h-.513c-.342 0-.616.273-.685.753-.273 1.985-1.334 3.32-3.114 3.32h-1.061c-.376 0-.582.239-.582.615v.48c0 .342.24.581.582.581h1.951V19.2c0 3.696 1.916 5.544 4.791 5.544Z"/> 2981</svg> 2982 2983 </a> 2984 </h2> 2985 </div> 2986 2987 <div class="hide-scrollbar flex flex-1 flex-col overflow-y-scroll"> 2988 <div class="flex-1"> 2989 2990 2991 2992 <div class="border-0 border-t border-solid border-light/25 py-4 lowercase"> 2993 <a href="/collections/all" class="text-[18px] text-white">Shop All</a> 2994 </div> 2995 2996 2997 2998 2999 3000 3001 3002 <div class="border-0 border-t border-solid border-light/25"> 3003 <h3> 3004 <button 3005 @click="$dispatch('open-mobile-menu', { menu: 'shop-dog' })" 3006 class="flex w-full items-center justify-between py-4 lowercase" 3007 > 3008 <span class="flex items-center gap-2 text-[18px]"> 3009 Shop dog 3010 3011</span> 3012 3013 3014 3015 <svg class="icon icon--place icon--chevron-right size-4" width="8" height="12" viewBox="0 0 8 12" fill="none"> 3016 <path d="M1.39961 11.6501L0.349609 10.6001L4.94961 6.0001L0.349609 1.4001L1.39961 0.350098L7.04961 6.0001L1.39961 11.6501Z" fill="currentColor"/> 3017 </svg> 3018 3019 3020 </button> 3021 </h3> 3022 <div 3023 class="fixed inset-0 size-full translate-x-full bg-dark p-4 transition-all" 3024 :class="openMenu === 'shop-dog' ? 'visible' : 'invisible'" 3025 > 3026 <div class="grid h-16 grid-cols-[1.5rem_1fr_1.5rem] items-center justify-center pb-4 pt-2"> 3027 <button aria-label="Go back" @click="$dispatch('close-mobile-menu')"> 3028 3029 3030 <svg class="icon icon--place icon--chevron-left size-4" width="8" height="12" viewBox="0 0 8 12" fill="none"> 3031 <path d="M6.60039 11.6501L7.65039 10.6001L3.05039 6.0001L7.65039 1.4001L6.60039 0.350098L0.950391 6.0001L6.60039 11.6501Z" fill="currentColor"/> 3032 </svg> 3033 3034 3035 </button> 3036 <h3 class="text-center text-[18px] font-bold lowercase">Shop dog</h3> 3037 </div> 3038 3039 3040 3041 3042 3043 3044 <div 3045 x-data="{ open: true }" 3046 class="border-0 border-t border-solid border-light/25" 3047> 3048 <h3> 3049 <button 3050 @click="open = !open" 3051 class="flex w-full items-center justify-between py-4 lowercase font-bold" 3052 > 3053
3054 <span class="flex items-center gap-2 text-[18px]"> 3055 featured 3056 3057</span> 3058 3059 <div x-show="open" aria-hidden="true" class="ml-4"> 3060 3061 <svg class="icon icon--place icon--minus size-3" width="10" height="10" viewBox="0 0 10 10" fill="none"> 3062 <path fill-rule="evenodd" clip-rule="evenodd" d="M0 4.99129C0 4.57707 0.124967 4.24129 0.279121 4.24129L9.72088 4.24129C9.87503 4.24129 10 4.57707 10 4.99129C10 5.4055 9.87503 5.74129 9.72088 5.74129H0.279121C0.124967 5.74129 0 5.4055 0 4.99129Z" fill="currentColor"/> 3063 </svg> 3064 3065 </div> 3066 <div x-show="!open" aria-hidden="true" class="ml-4"> 3067 3068 <svg class="icon icon--place icon--plus size-3" width="10" height="10" viewBox="0 0 10 10" fill="none"> 3069 <path d="M4.25 10V5.75H0V4.25H4.25V0H5.75V4.25H10V5.75H5.75V10H4.25Z" fill="currentColor"/> 3070 </svg> 3071 3072 </div> 3073 </button> 3074 </h3> 3075 <div x-show="open" x-collapse class="mb-4"> 3076 <ul role="list" class="grid gap-2 lowercase"> 3077 3078 <li> 3079 <a href="/collections/dog" class="text-[18px] text-white">All Products</a> 3080 </li> 3081 3082 <li> 3083 <a href="/collections/best-sellers" class="text-[18px] text-white">Best Sellers</a> 3084 </li> 3085 3086 <li> 3087 <a href="/collections/new-arrivals" class="text-[18px] text-white">New Arrivals</a> 3088 </li> 3089 3090 </ul> 3091 </div> 3092</div> 3093 3094 3095 3096 3097 3098 3099 3100 <div 3101 x-data="{ open: false }" 3102 class="border-0 border-t border-solid border-light/25" 3103> 3104 <h3> 3105 <button 3106 @click="open = !open" 3107 class="flex w-full items-center justify-between py-4 lowercase font-bold" 3108 > 3109 3110 <span class="flex items-center gap-2 text-[18px]"> 3111 shop by concern 3112 3113</span> 3114 3115 <div x-show="open" aria-hidden="true" class="ml-4"> 3116 3117 <svg class="icon icon--place icon--minus size-3" width="10" height="10" viewBox="0 0 10 10" fill="none"> 3118 <path fill-rule="evenodd" clip-rule="evenodd" d="M0 4.99129C0 4.57707 0.124967 4.24129 0.279121 4.24129L9.72088 4.24129C9.87503 4.24129 10 4.57707 10 4.99129C10 5.4055 9.87503 5.74129 9.72088 5.74129H0.279121C0.124967 5.74129 0 5.4055 0 4.99129Z" fill="currentColor"/> 3119 </svg> 3120 3121 </div> 3122 <div x-show="!open" aria-hidden="true" class="ml-4"> 3123 3124 <svg class="icon icon--place icon--plus size-3" width="10" height="10" viewBox="0 0 10 10" fill="none"> 3125 <path d="M4.25 10V5.75H0V4.25H4.25V0H5.75V4.25H10V5.75H5.75V10H4.25Z" fill="currentColor"/> 3126 </svg> 3127 3128 </div> 3129 </button> 3130 </h3> 3131 <div x-show="open" x-collapse class="mb-4"> 3132 <ul role="list" class="grid gap-2 lowercase"> 3133 3134 <li> 3135 <a href="/collections/dog" class="text-[18px] text-white">all products</a> 3136 </li> 3137 3138 <li> 3139 <a href="/collections/gut-health-and-digestion" class="text-[18px] text-white">gut health + digestion</a> 3140 </li> 3141 3142 <li> 3143 <a href="/collections/skin-health" class="text-[18px] text-white">skin health</a> 3144 </li> 3145 3146 <li> 3147 <a href="/collections/mobility-and-joints" class="text-[18px] text-white">mobility + joints</a> 3148 </li> 3149 3150 <li> 3151 <a href="/collections/allergy-relief" class="text-[18px] text-white">allergy relief</a> 3152 </li> 3153 3154 <li> 3155 <a href="/collections/runny-and-irregular-poop" class="text-[18px] text-white">runny + irregular poop</a> 3156 </li> 3157 3158 <li> 3159 <a href="/collections/picky-eaters" class="text-[18px] text-white">picky eaters</a> 3160 </li> 3161 3162 <li> 3163 <a href="/collections/stress-and-anxiety" class="text-[18px] text-white">stress + anxiety</a> 3164 </li> 3165 3166 <li> 3167 <a href="/collections/dental-health" class="text-[18px] text-white">dental health</a> 3168 </li> 3169 3170 <li> 3171 <a href="/collections/senior-care" class="text-[18px] text-white">senior care</a> 3172 </li> 3173 3174 </ul> 3175 </div> 3176</div> 3177 3178 3179 3180 3181 3182 3183 </div> 3184</div> 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 <div class="border-0 border-t border-solid border-light/25"> 3195 <h3> 3196 <button 3197 @click="$dispatch('open-mobile-menu', { menu: 'shop-cat' })" 3198 class="flex w-full items-center justify-between py-4 lowercase" 3199 >
3200 <span class="flex items-center gap-2 text-[18px]"> 3201 Shop cat 3202 3203 <span class="text-p4 isolate grid -rotate-12 place-content-center rounded-full bg-accent font-bold uppercase leading-none text-dark size-6 text-[7px]"> 3204 new 3205</span> 3206 3207 3208</span> 3209 3210 3211 3212 <svg class="icon icon--place icon--chevron-right size-4" width="8" height="12" viewBox="0 0 8 12" fill="none"> 3213 <path d="M1.39961 11.6501L0.349609 10.6001L4.94961 6.0001L0.349609 1.4001L1.39961 0.350098L7.04961 6.0001L1.39961 11.6501Z" fill="currentColor"/> 3214 </svg> 3215 3216 3217 </button> 3218 </h3> 3219 <div 3220 class="fixed inset-0 size-full translate-x-full bg-dark p-4 transition-all" 3221 :class="openMenu === 'shop-cat' ? 'visible' : 'invisible'" 3222 > 3223 <div class="grid h-16 grid-cols-[1.5rem_1fr_1.5rem] items-center justify-center pb-4 pt-2"> 3224 <button aria-label="Go back" @click="$dispatch('close-mobile-menu')"> 3225 3226 3227 <svg class="icon icon--place icon--chevron-left size-4" width="8" height="12" viewBox="0 0 8 12" fill="none"> 3228 <path d="M6.60039 11.6501L7.65039 10.6001L3.05039 6.0001L7.65039 1.4001L6.60039 0.350098L0.950391 6.0001L6.60039 11.6501Z" fill="currentColor"/> 3229 </svg> 3230 3231 3232 </button> 3233 <h3 class="text-center text-[18px] font-bold lowercase">Shop cat</h3> 3234 </div> 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 <div 3248 x-data="{ open: true }" 3249 class="border-0 border-t border-solid border-light/25" 3250> 3251 <h3> 3252 <button 3253 @click="open = !open" 3254 class="flex w-full items-center justify-between py-4 lowercase font-bold" 3255 > 3256 3257 <span class="flex items-center gap-2 text-[18px]"> 3258 featured 3259 3260</span> 3261 3262 <div x-show="open" aria-hidden="true" class="ml-4"> 3263 3264 <svg class="icon icon--place icon--minus size-3" width="10" height="10" viewBox="0 0 10 10" fill="none"> 3265 <path fill-rule="evenodd" clip-rule="evenodd" d="M0 4.99129C0 4.57707 0.124967 4.24129 0.279121 4.24129L9.72088 4.24129C9.87503 4.24129 10 4.57707 10 4.99129C10 5.4055 9.87503 5.74129 9.72088 5.74129H0.279121C0.124967 5.74129 0 5.4055 0 4.99129Z" fill="currentColor"/> 3266 </svg> 3267 3268 </div> 3269 <div x-show="!open" aria-hidden="true" class="ml-4"> 3270 3271 <svg class="icon icon--place icon--plus size-3" width="10" height="10" viewBox="0 0 10 10" fill="none"> 3272 <path d="M4.25 10V5.75H0V4.25H4.25V0H5.75V4.25H10V5.75H5.75V10H4.25Z" fill="currentColor"/> 3273 </svg> 3274 3275 </div> 3276 </button> 3277 </h3> 3278 <div x-show="open" x-collapse class="mb-4"> 3279 <ul role="list" class="grid gap-2 lowercase"> 3280 3281 <li> 3282 <a href="/collections/cat" class="text-[18px] text-white">all products</a> 3283 </li> 3284 3285 <li> 3286 <a href="/products/cat-hairball" class="text-[18px] text-white">hairball</a> 3287 </li> 3288 3289 <li> 3290 <a href="/products/cat-multivitamin" class="text-[18px] text-white">multivitamin</a> 3291 </li> 3292 3293 <li> 3294 <a href="/products/cat-probiotic" class="text-[18px] text-white">probiotic</a> 3295 </li> 3296 3297 <li> 3298 <a href="/products/cat-immune" class="text-[18px] text-white">immune</a> 3299 </li> 3300 3301 <li> 3302 <a href="/products/cat-calm" class="text-[18px] text-white">calm</a> 3303 </li> 3304 3305 </ul> 3306 </div> 3307</div> 3308 3309 3310 3311 </div> 3312</div> 3313 3314 3315 3316 3317 3318 3319 <div class="border-0 border-t border-solid border-light/25 py-4 lowercase"> 3320 <a href="/pages/build-your-own-bundle" class="text-[18px] text-white">Build Your Bundle + 15% Off</a> 3321 </div> 3322 3323 3324 3325 3326 <div class="border-0 border-t border-solid border-light/25 py-4 lowercase"> 3327 <a href="/blogs/health" class="text-[18px] text-white">The Blog Park</a> 3328 </div> 3329 3330 3331 </div> 3332 3333 3334 </div> 3335 3336 <!-- Footer --> 3337 <div class="mt-4 grid w-full gap-4"> 3338 <div> 3339 <a class="button w-full" style="--button-padding: 8px 16px" href="/pages/quiz">Take the quiz + $5 off</a> 3340 </div> 3341 3342 <a href="/account" class="flex items-center gap-2 lowercase text-white"> 3343 <svg 3344 aria-hidden="true" 3345 focusable="false" 3346 xmlns="http://www.w3.org/2000/svg" 3347 width="40" 3348 height="40" 3349 viewBox="0 0 40 40" 3350 class="block size-10" 3351> 3352 <g fill="none" fill-rule="evenodd"><path d="M0 0h40v40H0z"/><g fill="currentColor" fill-rule="nonzero" transform="translate(8 8)"><circle cx="11.939" cy="6" r="6"/>
3352<path d="M22.869 24c.6 0 1.08-.53 1-1.12-.67-4.99-5.75-8.88-11.93-8.88S.679 17.88.009 22.88c-.08.6.4 1.12 1 1.12H22.869Z"/></g></g> 3353</svg> 3354 3355 3356 Sign in 3357 </a> 3358 </div> 3359 </div> 3360 </div> 3361 </div> 3362 </div> 3363</div> 3364 3365 3366</div> 3367<div id="shopify-section-quick-add" class="shopify-section"><div 3368 x-data=" 3369 { 3370 open: false, 3371 section: null, 3372 3373 async openModal(event) { 3374 this.$dispatch('toggle-cart', false) 3375 const html = await fetch(`/products/${event.detail.handle}?view=modal`).then(r => r.text()); 3376 const doc = new DOMParser().parseFromString(html, 'text/html'); 3377 3378 this.section = event.detail.section_name; 3379 this.$refs['modal-contents'].innerHTML = doc.body.innerHTML; 3380 3381 this.open = true; 3382 }, 3383 3384 closeModal() { 3385 this.open = false; 3386 }, 3387 } 3388 " 3389 class="flex justify-center" 3390 @open-quick-add.window="openModal" 3391> 3392 <div 3393 x-dialog 3394 x-model="open" 3395 x-cloak 3396 class="color-scheme-4 fixed inset-0 isolate z-max overflow-hidden" 3397 > 3398 <div x-dialog:overlay x-transition.opacity class="fixed inset-0 hidden bg-blueGrayHalf lg:block"></div> 3399 3400 <div 3401 class="fixed inset-0 lg:mt-0 lg:grid lg:place-content-center lg:p-4" 3402 > 3403 <div 3404 x-dialog:panel 3405 x-transition:enter="transition ease-out duration-300" 3406 x-transition:enter-start="transform opacity-0 translate-y-full lg:translate-y-0" 3407 x-transition:enter-end="transform opacity-100 translate-y-0" 3408 x-transition:leave="transition ease-in duration-300" 3409 x-transition:leave-start="transform opacity-100 translate-y-0" 3410 x-transition:leave-end="transform opacity-0 translate-y-full lg:translate-y-0" 3411 class="relative h-full w-full max-w-[960px] bg-white shadow-lg lg:rounded-xl" 3412 > 3413 <div class="absolute right-0 top-0 pr-4 pt-4"> 3414 <button 3415 type="button" 3416 @click="$dialog.close()" 3417 class="rounded-xl p-2 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2" 3418 > 3419 <span class="sr-only">Close modal</span> 3420 <svg 3421 xmlns="http://www.w3.org/2000/svg" 3422 fill="none" 3423 viewBox="0 0 24 24" 3424 stroke-width="1.5" 3425 stroke="currentColor" 3426 class="size-6 block" 3427> 3428 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12" /> 3429</svg> 3430 3431 </button> 3432 </div> 3433 3434 <div x-ref="modal-contents"></div> 3435 </div> 3436 </div> 3437 </div> 3438</div> 3439 3440 3441 3442</div> 3443 3444
3444<script id="rebuy-script-overrides"> 3445 window.rbss_hidden_variant_ids = [ 3446 '43088290709547', // probiotic 1.7oz 3447 '42704411885611', // omega oil 3 oz 3448 '43086087061547', // daily 1.7oz 3449 ]; 3450 3451 window.buy3TiersPercentageComplete = function (p, n = false) { 3452 const t = p.tiers[0]; 3453 const min = t.minimum; 3454 if (typeof window.Rebuy.SmartCart !== 'undefined' && typeof window.Rebuy.SmartCart.cart !== 'undefined') { 3455 let qty = 0; 3456 window.Rebuy.SmartCart.cart.items.forEach((item) => { 3457 if (!item.selling_plan_allocation && !item.properties.__free_gift) { 3458 qty += item.quantity; 3459 } 3460 }); 3461 let progress = qty >= min ? 100 : 100 * (qty / min); 3462 if (!n) progress = progress + '%'; 3463 return progress; 3464 } 3465 return 0; 3466 }; 3467 3468 window.buy3GetTierFeedbackText = function (p) { 3469 const t = p.tiers[0]; 3470 const min = t.minimum; 3471 const discount = t.discount_amount_from_total; 3472 let text = t.discount_amount_remaining_label_text; 3473 if (typeof window.Rebuy.SmartCart !== 'undefined' && typeof window.Rebuy.SmartCart.cart !== 'undefined') { 3474 let qty = 0; 3475 window.Rebuy.SmartCart.cart.items.forEach((item) => { 3476 if (!item.selling_plan_allocation && !item.properties.__free_gift) { 3477 qty += item.quantity; 3478 } 3479 }); 3480 if (qty < min) { 3481 text = text.replace('{{remaining_amount}}', min - qty); 3482 } else { 3483 text = t.discount_amount_reached_label_text; 3484 } 3485 } 3486 return text.replace('{{discount_amount}}', discount + '%'); 3487 }; 3488 3489 window.buy3Visible = function () { 3490 if (typeof window.Rebuy.SmartCart !== 'undefined' && typeof window.Rebuy.SmartCart.cart !== 'undefined') { 3491 const min = 3; 3492 let qty = 0; 3493 window.Rebuy.SmartCart.cart.items.forEach((item) => { 3494 if (!item.selling_plan_allocation && !item.properties.__free_gift) { 3495 qty += item.quantity; 3496 } 3497 }); 3498 return qty < min; 3499 } 3500 return false; 3501 }; 3502 3503 window.cartItemPrice = function (item) { 3504 let price = item.discounted_price || item.final_price; 3505 if (item.product?.subscription && item.discounted_price) { 3506 const orderDiscount = item.discounts?.find((d) => ['Order Discount', 'Buy 3, get 15% off'].includes(d.title)); 3507 if (orderDiscount) { 3508 const itemDiscount = Math.trunc(orderDiscount.amount / item.quantity); 3509 price = item.discounted_price + itemDiscount; 3510 } 3511 } 3512 return price; 3513 }; 3514 3515 window.cartItemSavings = function (item) { 3516 let savings = 0; 3517 if (item.line_level_discount_allocations && item.line_level_discount_allocations.length) { 3518 item.line_level_discount_allocations.forEach((allocation) => { 3519 if (allocation.discount_application.value_type === 'percentage') { 3520 savings += parseInt(allocation.discount_application.value, 10); 3521 } 3522 }); 3523 } 3524 if ( 3525 item.selling_plan_allocation && 3526 item.selling_plan_allocation.selling_plan && 3527 item.selling_plan_allocation.selling_plan.price_adjustments && 3528 item.selling_plan_allocation.selling_plan.price_adjustments[0].value_type === 'percentage' 3529 ) { 3530 savings += item.selling_plan_allocation.selling_plan.price_adjustments[0].value; 3531 } 3532 return savings >= 100 ? 0 : savings; 3533 }; 3534 3535 document.addEventListener('rebuy:smartcart.line-item-increase', (event) => { 3536 const { item } = event.detail; 3537 3538 if (typeof window.posthogCapture === 'function') { 3539 window.posthogCapture('product_quantity_update', { 3540 category: item.product.category?.name || '', 3541 product_type: item.product.product_type || '', 3542 product_id: item.product.id || '', 3543 name: item.product.title || '', 3544 variant_id: item.product.selected_variant_id || '', 3545 variant: item.product.selected_variant?.title || '', 3546 quick_add: false, 3547 section: 'rebuy_cart', 3548 direction: 'increase', 3549 quantity_before: item.quantity, 3550 quantity_after: item.quantity + item.quantity_rule.increment, 3551 }); 3552 } 3553 }); 3554 3555 document.addEventListener('rebuy:smartcart.line-item-decrease', (event) => { 3556 const { item } = event.detail; 3557 3558 if (typeof window.posthogCapture === 'function') { 3559 window.posthogCapture('product_quantity_update', { 3560 category: item.product.category?.name || '', 3561 product_type: item.product.product_type || '', 3562 product_id: item.product.id || '', 3563 name: item.product.title || '', 3564 variant_id: item.product.selected_variant_id || '',
3565 variant: item.product.selected_variant?.title || '', 3566 quick_add: false, 3567 section: 'rebuy_cart', 3568 direction: 'decrease', 3569 quantity_before: item.quantity, 3570 quantity_after: item.quantity - item.quantity_rule.increment, 3571 }); 3572 } 3573 }); 3574 3575 document.addEventListener('rebuy:smartcart.item-switch-to-subscription', (event) => { 3576 const { item } = event.detail; 3577 if (item.properties?._has_subscription_gift !== 'true') { 3578 fetch('/cart/change.js', { 3579 method: 'POST', 3580 headers: { 3581 'Content-Type': 'application/json', 3582 }, 3583 body: JSON.stringify({ 3584 id: item.key, 3585 properties: { 3586 ...item.properties, 3587 _has_subscription_gift: 'true', 3588 }, 3589 }), 3590 }); 3591 } 3592 }); 3593</script>
3593 3594 3595
3596<script id="rebuy-recommended-template" type="text/template"> 3597 <template v-for="w in [(''.constructor.constructor('return window')())]"> 3598 <div class="rebuy-widget" 3599 v-cloak 3600 v-show="w.buy3Visible() || false" 3601 v-on:click="stopPropagation($event)" 3602 v-bind:id="'rebuy-widget-' + id" 3603 v-bind:class="['widget-type-' + config.type.replace('_','-'), 'widget-display-' + config.display_type, products.length > 0 ? 'is-visible' : 'is-nn', 'widget-layout-' + currentLayout()]"> 3604 <div 3605 class="rebuy-widget-container" 3606 v-cloak 3607 v-bind:class="['widget-display-' + config.display_type, visible ? 'is-visible' : 'is-hidden' ]" 3608 v-on:click.self="config.display_type == 'popup' && hide()"> 3609 3610 <div class="rebuy-widget-content"> 3611 <div class="rebuy-modal-close" v-on:click="hide()" aria-label="close modal"> 3612 <rebuy-icon name="x"></rebuy-icon> 3613 </div> 3614 3615 <div class="rebuy-timer" v-if="hasTimer()"> 3616 <p class="rebuy-timer-title" v-if="config.language.timer_title"> 3617 <span v-html="config.language.timer_title"></span> <span class="rebuy-timer-minutes" v-html="config.timer.duration_minutes"></span>:<span class="rebuy-timer-seconds" v-html="config.timer.duration_seconds"></span> 3618 </p> 3619 </div> 3620 3621 <h3 class="super-title" v-if="config.language.super_title != ''" v-html="config.language.super_title"></h3> 3622 3623 <h4 class="primary-title" v-if="config.language.title != ''" v-html="config.language.title"></h4> 3624 3625 <div class="description" v-if="config.language.description != ''" v-html="config.language.description"></div> 3626 3627 <div class="rebuy-product-grid" v-bind:class="layoutClasses" role="list"> 3628 3629 <div 3630 v-for="(product, product_index) in products" 3631 v-bind:class="[ 3632 product.handle, 3633 'product-id-' + product.id, 3634 cartHasProduct(product) ? 'cart-has-item' : '', 3635 productTagClasses(product), 3636 hasSplideCarousel ? 'splide__slide' : '', 3637 ]" 3638 aria-label="product" 3639 class="rebuy-product-block" 3640 role="listitem" 3641 > 3642 <template 3643 v-if="product.variants.some(v => v.id === product.selected_variant.id && (v?.metafields?.custom?.hidden || (w.rbss_hidden_variant_ids && w.rbss_hidden_variant_ids.includes(String(v.id))))) 3644 && (product.selected_variant = (product.variants.find(v => !v?.metafields?.custom?.hidden && !(w.rbss_hidden_variant_ids && w.rbss_hidden_variant_ids.includes(String(v.id)))) || {})) 3645 && false"> 3646 </template> 3647 <div class="rebuy-product-media"> 3648 <a 3649 v-if="!(hasProductQuickViewEnabled() && hasQuickViewPhotoTrigger())" 3650 class="rebuy-product-image" 3651 tabindex="-1" 3652 v-bind:href="learnMoreURL(product)" 3653 v-bind:style="imageStyles" 3654 v-on:click="learnMore(product, $event);" 3655 v-bind:class="[hasLearnMore() ? 'clickable' : '']" 3656 rel="nofollow" 3657 > 3658 <img v-bind:loading="product_index > 1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)"> 3659 </a> 3660 <button 3661 v-if="hasProductQuickViewEnabled() && hasQuickViewPhotoTrigger()" 3662 class="rebuy-product-image-trigger" 3663 v-bind:style="imageStyles" 3664 v-on:click="openQuickViewVariantModal(product)" 3665 v-bind:aria-label="'Quick view ' + product.title" 3666 type="button" 3667 > 3668 <img v-bind:loading="product_index > 1 ? 'lazy' : 'eager'" v-bind:src="itemImage(product, product.selected_variant, '400x400')" v-bind:alt="itemImageAlt(product, product.selected_variant)"> 3669 </button> 3670 </div> 3671 <div class="rebuy-product-info">
3672 <span 3673 v-if="product.metafields?.card?.social_tag" 3674 class="social-tag" 3675 v-html="product.metafields.card.social_tag" 3676 :data-type="product.metafields.card.social_tag" 3677 ></span> 3678 <h5 3679 class="rebuy-product-title" 3680 v-bind:class="[hasLearnMore() ? 'clickable' : '']"> 3681 <a 3682 v-bind:href="learnMoreURL(product)" 3683 class="rebuy-product-title-link" 3684 v-on:click="learnMore(product, $event);" 3685 v-html="product.title" 3686 v-bind:class="[hasLearnMore() ? 'clickable' : '']" 3687 v-bind:aria-label="'View ' + product.title" 3688 rel="nofollow" 3689 ></a> 3690 </h5> 3691 <div 3692 class="rebuy-product-vendor-container" 3693 v-if="showProductVendor(product.vendor)" 3694 > 3695 <a 3696 class="rebuy-product-vendor" 3697 v-bind:class="[hasEnabledProductVendorLink() ? 'clickable' : '']" 3698 v-html="product.vendor" 3699 v-bind:href="vendorURL(product.vendor)" 3700 v-bind:aria-label="'View ' + product.vendor + ' products'" 3701 rel="nofollow" 3702 ></a> 3703 </div> 3704 <div class="rebuy-variant-title" v-if="showVariantTitle(product)" v-html="product.selected_variant.title"></div> 3705 <div class="rebuy-product-review" v-if="hasProductReviews(product)" aria-label="product star rating"> 3706 <span class="rebuy-star-rating"> 3707 <span 3708 v-if="product.reviews.star_rating" 3709 class="rebuy-star-rating-value sr-only" 3710 v-html="product.reviews.star_rating + ' stars out of 5 stars'" 3711 > 3712 </span> 3713 <span class="rebuy-star-rating-background"></span> 3714 <span class="rebuy-star-rating-foreground" v-bind:style="{ width: productReviewRatingPercentage(product) }"></span> 3715 </span> 3716 <span class="rebuy-review-count" v-html="productReviewCount(product)"></span> 3717 </div> 3718 3719 <div class="rebuy-product-price"> 3720 <div v-if="variantOnSale(product, product.selected_variant)"> 3721 <span class="rebuy-money sale"> 3722 <span class="sr-only">Sale price</span> 3723 <span v-html="formatMoney(variantPrice(product, product.selected_variant))"></span> 3724 </span> 3725 <span class="rebuy-money compare-at"> 3726 <span class="sr-only">Original price</span> 3727 <span v-html="formatMoney(variantCompareAtPrice(product, product.selected_variant))"></span> 3728 </span> 3729 </div> 3730 <div v-if="!(variantOnSale(product, product.selected_variant))"> 3731 <span class="rebuy-money"> 3732 <span class="sr-only">Price</span>
3733 <span v-html="formatMoney(variantPrice(product, product.selected_variant))"></span> 3734 </span> 3735 </div> 3736 </div> 3737 <div class="rebuy-product-description" v-if="showProductDescription(product)" v-html="text(product.body_html)"></div> 3738 </div> 3739 <div class="rebuy-product-options" v-if="showVariantSelect(product)"> 3740 <template 3741 v-if="product.variants.some(v => v.id === product.selected_variant_id && (v?.metafields?.custom?.hidden || (w.rbss_hidden_variant_ids && w.rbss_hidden_variant_ids.includes(String(v.id))))) 3742 && (product.selected_variant_id = (product.variants.find(v => !v?.metafields?.custom?.hidden && !(w.rbss_hidden_variant_ids && w.rbss_hidden_variant_ids.includes(String(v.id)))) || {}).id) 3743 && false"> 3744 </template> 3745 <select 3746 title="Select product variant" 3747 :id="id + '-' + 'select' + '-' + product_index" 3748 :class="{ hide : config.view_options.variant_selector === 'buttons' }" 3749 class="rebuy-select" 3750 v-bind:aria-label="'variant of ' + product.title" 3751 v-model="product.selected_variant_id" 3752 v-on:change="selectVariant(product)"> 3753 <template v-for="variant in product.variants"> 3754 <option 3755 v-if="!variant?.metafields?.custom?.hidden && (!w.rbss_hidden_variant_ids || !w.rbss_hidden_variant_ids.includes(String(variant.id)))" 3756 class="rebuy-product-options__option" 3757 :class="{ 'rebuy-product-options__option--oos' : !variantAvailable(variant) }" 3758 v-bind:value="variant.id" 3759 :disabled="!variantAvailable(variant)" 3760 v-html="formatVariantOptionTitle(variant)"> 3761 </option> 3762 </template> 3763 </select> 3764 3765 <div 3766 class="rebuy-product-options__button-swatches-container" 3767 :class="{ 'rebuy-style__hidden-block' : config.view_options.variant_selector === 'select' }" 3768 > 3769 <div 3770 v-for="option in product.options" 3771 :key="'option-' + product.id + '-' + option.name" 3772 class="rebuy-product-options__button-swatches rebuy-size-swatches" 3773 > 3774 <div 3775 v-for="(value, value_index) in filterOOSOptions(option, product)" 3776 :key="'value-' + product.id + '-' + option.name + '-' + value + '-' + value_index" 3777 > 3778 <div v-if="displayColorSwatches(option)" class="rebuy-product-options__button-swatch rebuy-color-swatch"> 3779 <input 3780 :name="id + '-color-' + product_index" 3781 :id="id + '-color-' + product_index + '-' + value + '-' + value_index" 3782 :checked="hasSwatchOptionSelected(product, value, value_index, 'color')" 3783 :value="value" 3784 type="radio" 3785 class="rebuy-color-input hide" 3786 v-on:change="selectVariantByOption(product, option.name, value)" 3787 :disabled="isDisabledOptionValue(product, option.name, value)" 3788 /> 3789 3790 <label 3791 :for="id + '-color-' + product_index + '-' + value + '-' + value_index" 3792 :style="getMerchantThemeColorAssetStyle(value)" 3793 :title="value" 3794 class="rebuy-color-label" 3795 :class="{ 'rebuy-product-options__button-swatch-label--disabled' : isDisabledOptionValue(product, option.name, value) }" 3796 > 3797 </label> 3798 </div> 3799 3800 <div v-if="!displayColorSwatches(option)" class="rebuy-product-options__button-swatch rebuy-size-swatch"> 3801 <input 3802 :name="id + '-' + option.name + '-' + product_index" 3803 :id="id + '-' + option.name + '-' + product_index + '-' + value" 3804 :checked="hasSwatchOptionSelected(product, value, value_index, option.name)" 3805 :value="value" 3806 type="radio" 3807 class="rebuy-size-input hide" 3808 v-on:change="selectVariantByOption(product, option.name, value)" 3809 :disabled="isDisabledOptionValue(product, option.name, value)" 3810 /> 3811 3812 <label 3813 :for="id + '-' + option.name + '-' + product_index + '-' + value" 3814 class="rebuy-size-label" 3815 :class="{ 'rebuy-product-options__button-swatch-label--disabled' : isDisabledOptionValue(product, option.name, value) }" 3816 > 3817 {{ value }} 3818 </label> 3819 </div> 3820 </div> 3821 </div> 3822 </div> 3823 </div> 3824 3825 <div class="rebuy-product-actions"> 3826 <button 3827 v-if="hasProductQuickViewEnabled() && hasQuickViewButtonTrigger()" 3828 class="product-quick-view-button rebuy-button outline" 3829 v-on:click="openQuickViewVariantModal(product)" 3830 v-bind:aria-label="'Quick view ' + product.title" 3831 type="button">
3832 <span v-html="getQuickViewButtonText()"></span> 3833 </button> 3834 3835 <div class="subscription-checkbox" v-if="showSubscriptionOptions(product)"> 3836 <label class="rebuy-checkbox-label"> 3837 <input 3838 class="checkbox-input rebuy-checkbox" 3839 v-model="product.subscription" 3840 v-on:change="toggleSubscription(product)" 3841 type="checkbox" 3842 :aria-label="upgradeToSubscriptionAriaLabel(product)" 3843 /> 3844 <span class="checkbox-label" v-html="upgradeToSubscriptionLabel(product)"></span> 3845 </label> 3846 </div> 3847 3848 <div class="subscription-frequency" v-if="showSubscriptionFrequency(product)"> 3849 <select 3850 class="rebuy-select" 3851 aria-label="subscription frequency" 3852 v-model="product.subscription_frequency" 3853 v-on:change="updateSubscriptionFrequency(product)"> 3854 <option v-for="frequency in product.subscription_frequencies" v-bind:value="frequency">{{ frequencyLabel(frequency, product.subscription_interval) }}</option> 3855 </select> 3856 </div> 3857 3858 <div class="product-quantity" v-if="hasQuantityInputEnabled()"> 3859 <div class="rebuy-select-wrapper"> 3860 <label class="rebuy-label">Quantity</label> 3861 <select 3862 class="rebuy-select" 3863 aria-label="product quantity" 3864 v-model="product.quantity"> 3865 <option v-for="n in maxQuantityInputValue()" v-bind:value="n">{{ n }}</option> 3866 </select> 3867 </div> 3868 </div> 3869 3870 <button 3871 class="rebuy-button" 3872 v-bind:class="{ working: (product.status != 'ready' && product.status != 'selecting') }" 3873 v-bind:disabled="!(variantAvailable(product.selected_variant)) || (product.status != 'ready' && product.status != 'selecting')" 3874 v-bind:aria-label="buttonAriaLabel(product)" 3875 v-on:click="addToCart(product)" 3876 type="button"> 3877 <span v-html="buttonLabel(product)"></span> 3878 </button> 3879 </div> 3880 </div> 3881 3882 </div> 3883 3884 <div class="rebuy-modal-actions" v-if="showContinueButton()"> 3885 <button 3886 class="rebuy-button decline" 3887 v-on:click="hide()" 3888 type="button"> 3889 <span v-html="continueLabel()"></span> 3890 </button> 3891 </div> 3892 3893 <div class="powered-by-rebuy"> 3894 <a v-bind:href="'https://rebuyengine.com/?shop=' + config.shop.myshopify_domain" target="_blank" rel="noopener"> 3895 Powered by Rebuy 3896 </a> 3897 </div> 3898 3899 </div> 3900 3901 </div> 3902 </div> 3903 </template> 3904</script>
3904 3905 3906 3907
3908<script id="rebuy-quick-view-dropdown-search-template" type="text/template"> 3909 <div id="rebuy-quick-view-dropdown-search" class="rebuy-quick-view-dropdown"> 3910 <div 3911 class="rebuy-quick-view-dropdown__container" 3912 v-bind:class="[isQuickViewOpen ? 'visible' : '']" 3913 role="region" 3914 aria-label="product search filter" 3915 > 3916 <div class="rebuy-quick-view-dropdown__input-container"> 3917 <div class="rebuy-quick-view__search-input rebuy-quick-view-dropdown__search-input rebuy-input"> 3918 <label v-if="searchByCollectionsEnabled" for="search" class="sr-only">Search by Collections</label> 3919 <select 3920 v-if="searchByCollectionsEnabled" 3921 name="search" 3922 class="rebuy-select" 3923 id="search" 3924 v-model="searchByCollection" 3925 > 3926 <option :value="SEARCH_BY_COLLECTION_DEFAULT">All</option> 3927 <option v-for="{ name, id } in searchByCollectionsCollections" :value="id">{{name}}</option> 3928 </select> 3929 3930 <!-- NP: Replace Rebuy's search icon --> 3931 <svg class="rebuy-icon-wrapper--inline" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 40 40"> 3932 <g fill="none" fill-rule="evenodd"><path d="M0 0h40v40H0z"></path><g fill="currentColor" fill-rule="nonzero" transform="translate(8 8)"><path d="m14.204 12.787 6.987 6.986-1.415 1.414-6.986-6.986z"></path><rect width="10" height="4" x="14.88" y="17.885" rx="2" transform="rotate(45 19.88 19.885)"></rect><path d="M8.5 0C3.81 0 0 3.81 0 8.5 0 13.19 3.81 17 8.5 17c4.69 0 8.5-3.81 8.5-8.5C17 3.81 13.19 0 8.5 0Zm0 14.5c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6Z"></path></g></g> 3933 </svg> 3934 <label for="searchInput" class="sr-only">Enter a Search Term</label> 3935 <span class="sr-only"> 3936 The following text field filters the products, collections, and content shown below as you 3937 type. Type at least 3 characters to see results; results update automatically shortly after 3938 you stop typing. 3939 </span> 3940 <input 3941 id="searchInput" 3942 :class="(searchByCollectionsEnabled) && 'right-rounded'" 3943 type="text" 3944 :placeholder="placeholderText()" 3945 :value="searchTerm" 3946 @input="($event) => searchTerm = $event.target.value" 3947 ref="searchInput" 3948 @keydown.enter.stop.prevent="goToSearchPage" 3949 @keydown.escape.stop.prevent="closeQuickView" 3950 /> 3951 </div> 3952 3953 <div class="rebuy-quick-view-dropdown__live-region sr-only" role="status" aria-live="polite"> 3954 {{resultsAnnouncement}} 3955 </div> 3956 3957 <button 3958 class="rebuy-quick-view-dropdown__close" 3959 type="button" 3960 v-on:click="closeQuickView()" 3961 aria-label="Close Dropdown" 3962 > 3963 <rebuy-icon name="x"></rebuy-icon> 3964 </button> 3965 </div> 3966 3967 <transition name="rebuy-quick-view-overlay-fade"> 3968 <div 3969 v-if="shouldDropdownShow" 3970 id="rebuy-quick-view-overlay" 3971 class="rebuy-quick-view__overlay rebuy-quick-view__overlay--wide" 3972 role="dialog" 3973 tabindex="1" 3974 aria-labelledby="overlayTitle" 3975 aria-describedby="overlayDescription" 3976 ref="overlay" 3977 > 3978 <section class="rebuy-quick-view__overlay-body" id="overlayDescription">
3979 <div class="rebuy-quick-view__container"> 3980 <div 3981 v-if="showNoResultsSuggestions" 3982 class="rebuy-quick-view__no-results" 3983 > 3984 <p v-html="noResultsPageTitle"></p> 3985 </div> 3986 <div 3987 v-if="!showResults" 3988 class="rebuy-quick-view__suggestions rebuy-quick-view-dropdown__suggestions" 3989 > 3990 <div 3991 v-if="suggestedSearchTermsEnabled && suggestedTerms.length > 0" 3992 class="rebuy-quick-view-dropdown__body-left" 3993 tabindex="0" 3994 > 3995 <div v-if="suggestedTerms.length > 0" class="rebuy-quick-view__search-term-section"> 3996 <p class="rebuy-quick-view__title">{{suggestedSearchTermsTitle}}</p> 3997 3998 <ul class="rebuy-quick-view__search-term-section-list-container"> 3999 <li 4000 class="rebuy-quick-view__list-item rebuy-quick-view__search-term-section-list-term" 4001 v-for="term in suggestedTerms" 4002 @click="search(term)" 4003 role="button" 4004 tabindex="0" 4005 v-bind:aria-label="suggestedSearchTermLabel(term)" 4006 > 4007 {{term}} 4008 </li> 4009 </ul> 4010 </div> 4011 4012 </div> 4013 4014 <div class="rebuy-quick-view-dropdown__body-right"> 4015 <div 4016 v-if="suggestedSearchTermsEnabled && suggestedTerms.length > 0" 4017 class="rebuy-quick-view__search-term-section rebuy-quick-view-dropdown__search-term-section--mobile" 4018 > 4019 <p class="rebuy-quick-view__title rebuy-quick-view-dropdown__title"> 4020 {{suggestedSearchTermsTitle}} 4021 </p> 4022 4023 <ul class="rebuy-quick-view__list-items rebuy-quick-view-dropdown__search-term-list"> 4024 <li class="rebuy-quick-view__list-item rebuy-quick-view-dropdown__search-term" v-for="term in suggestedTerms" @click.stop="search(term)">{{term}}</li> 4025 </ul> 4026 </div> 4027 4028 <div 4029 v-if="suggestedCollectionsEnabled && displayedSuggestedCollections.length > 0" 4030 class="rebuy-quick-view__collection-section" 4031 > 4032 <p class="rebuy-quick-view__title rebuy-quick-view-dropdown__title"> 4033 {{suggestedCollectionsTitle}} 4034 </p> 4035 4036 <div class="rebuy-quick-view__list-items rebuy-quick-view__collection-list"> 4037 <a 4038 v-for="collection in displayedSuggestedCollections" 4039 class="rebuy-quick-view__list-item rebuy-quick-view__collection" 4040 :href="collectionHref(collection)" 4041 > 4042 {{collection.name}} 4043 </a> 4044 4045 <button 4046 v-if="shouldShowSeeMoreCollections" 4047 class="see-more" 4048 @click.stop.prevent="seeMore" 4049 > 4050 See more … 4051 </button> 4052 </div> 4053 </div> 4054 4055 <div 4056 v-if="suggestedProductsEnabled && suggestedProducts.length > 0" 4057 class="rebuy-quick-view__product-section" 4058 > 4059 <p class="rebuy-quick-view__title rebuy-quick-view-dropdown__title"> 4060 {{suggestedProductsTitle}} 4061 </p> 4062 4063 <div 4064 class="rebuy-quick-view__product-list rebuy-quick-view-dropdown__product-list" 4065 :class="productListColumnClass" 4066 > 4067 <div 4068 v-for="(product, index) in suggestedProducts" 4069 :class="[productDisplayType, 'rebuy-quick-view-product-id-' + product.productId]" 4070 :id="'rebuy-quick-view-product-id-' + product.productId" 4071 > 4072 <!-- NP: Override default selected variant --> 4073 <template v-for="w in [(''.constructor.constructor('return window')())]"> 4074 <template 4075 v-if="w.rbss_hidden_ids && (!product.variants.some(v => v.id === product.selected_variant_id && !w.rbss_hidden_ids.includes(v.id))) 4076 && (product.
4076selected_variant = (product.variants.find(v => !w.rbss_hidden_ids.includes(v.id)) || {})) 4077 && (product.selected_variant_id = product.selected_variant.id) 4078 && false"> 4079 </template> 4080 </template> 4081 <a 4082 :href="learnMoreURL(product)" 4083 @click="learnMore(product, index)" 4084 class="rebuy-quick-view__image-link rebuy-smart-search__absolute-image-container" 4085 :class="[shouldPositionAbsolute('container'), { 'rebuy-quick-view__image-link--hover-swap': shouldShowSecondImage(product) }]" 4086 :style="productImageRatio()" 4087 rel="nofollow" 4088 > 4089 <img 4090 v-if="shouldShowSecondImage(product)" 4091 v-bind:src="secondaryProductImage(product, product.selected_variant)" 4092 alt="" 4093 aria-hidden="true" 4094 loading="lazy" 4095 class="rebuy-quick-view_image rebuy-quick-view_image--secondary rebuy-smart-search__absolute-image" 4096 :class="shouldPositionAbsolute('image')" 4097 /> 4098 <img 4099 v-bind:src="productImage(product, product.selected_variant)" 4100 v-bind:srcset="generateImgSrcset(product)" 4101 v-bind:alt="product.name" 4102 class="rebuy-quick-view_image rebuy-smart-search__absolute-image--zoomed rebuy-smart-search__absolute-image" 4103 :class="shouldPositionAbsolute('image')" 4104 /> 4105 </a> 4106 4107 <div class="rebuy-quick-view__product-detail"> 4108 <div class="rebuy-product-info"> 4109 <!-- Product Title --> 4110 <a 4111 class="rebuy-product-title" 4112 :class="productInfoClass" 4113 :href="learnMoreURL(product)" 4114 @click="learnMore(product, index)" 4115 rel="nofollow" 4116 > 4117 {{product.name}} 4118 </a> 4119 4120 <!-- Product Review --> 4121 <div 4122 class="rebuy-product-review" 4123 :class="productInfoClass" 4124 v-if="shouldDisplayQuickViewProductRating(product)" 4125 aria-label="product star rating" 4126 >
4127 <span class="rebuy-star-rating" :style="{ width: starRatingSize.width + 'px', height: starRatingSize.height + 'px' }"> 4128 <span 4129 v-if="product.reviews.star_rating" 4130 class="rebuy-star-rating-value sr-only" 4131 v-html="product.ratings.average + ' stars out of 5 stars'" 4132 > 4133 </span> 4134 4135 <!-- Default star rating (no custom colors) --> 4136 <template v-if="!shouldDisplayStyledProductReviews"> 4137 <span class="rebuy-star-rating-background"></span> 4138 <span class="rebuy-star-rating-foreground" v-bind:style="{ width: getProductReviewRatingPercentage(product) }"></span> 4139 </template> 4140 4141 <!-- Styled star rating with custom colors --> 4142 <template v-if="shouldDisplayStyledProductReviews"> 4143 <span class="rebuy-star-rating" :style="{ width: starRatingSize.width + 'px', height: starRatingSize.height + 'px' }"> 4144 <span class="rebuy-star-rating-container"> 4145 <!-- Background stars (unfilled) --> 4146 <svg :width="starRatingSize.width" :height="starRatingSize.height" viewBox="0 0 80 14" xmlns="http://www.w3.org/2000/svg" class="rebuy-star-svg-background"> 4147 <g class="rebuy-star-background-fill" fill-rule="evenodd"> 4148 <path d="M71.996 11.368l-3.94 2.42c-.474.292-.756.096-.628-.443l1.074-4.53-3.507-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.78 4.3 4.602.37c.552.046.666.37.237.74l-3.507 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM55.996 11.368l-3.94 2.42c-.474.292-.756.096-.628-.443l1.074-4.53-3.507-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.78 4.3 4.602.37c.552.046.666.37.237.74l-3.507 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM40.123 11.368l-3.94 2.42c-.475.292-.756.096-.63-.443l1.076-4.53-3.508-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.778 4.3 4.603.37c.554.046.667.37.24.74l-3.508 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM24.076 11.368l-3.94 2.42c-.475.292-.757.096-.63-.443l1.076-4.53-3.507-3.022c-.422-.363-.324-.693.238-.74l4.603-.37 1.78-4.3c.21-.51.55-.512.76 0l1.78 4.3 4.602.37c.554.046.667.37.24.74l-3.508 3.02 1.074 4.532c.127.536-.146.74-.628.444l-3.94-2.422zM8.123 11.368l-3.94 2.42c-.475.292-.756.096-.63-.443l1.076-4.53L1.12 5.792c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.778 4.3 4.603.37c.554.046.667.37.24.74l-3.508 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422z"/> 4149 </g> 4150 </svg> 4151 <!-- Foreground stars (filled) - clipped by wrapper --> 4152 <span 4153 class="rebuy-star-svg-foreground-wrapper" 4154 v-bind:style="{ 4155 width: starRatingWidth(product) + 'px' 4156 }" 4157 > 4158 <svg :width="starRatingSize.width" :height="starRatingSize.height" viewBox="0 0 80 14" xmlns="http://www.w3.org/2000/svg" class="rebuy-star-svg-foreground"> 4159 <g class="rebuy-star-foreground-fill" fill-rule="evenodd"> 4160 <path d="M71.996 11.368l-3.94 2.42c-.474.292-.756.096-.628-.443l1.074-4.53-3.507-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.78 4.3 4.602.37c.552.046.666.37.237.74l-3.507 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM55.996 11.368l-3.94 2.42c-.474.292-.756.096-.628-.443l1.074-4.53-3.507-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.78 4.3 4.602.37c.552.046.666.37.237.74l-3.507 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM40.123 11.368l-3.94 2.42c-.475.292-.756.096-.63-.443l1.076-4.53-3.508-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.778 4.3 4.603.37c.554.046.667.37.24.74l-3.508 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM24.076 11.368l-3.94 2.42c-.475.292-.757.096-.63-.443l1.076-4.53-3.507-3.022c-.422-.363-.324-.693.238-.74l4.603-.37 1.78-4.3c.21-.51.55-.512.76 0l1.78 4.3 4.602.37c.554.046.667.37.24.74l-3.508 3.02 1.074 4.532c.127.536-.146.74-.628.444l-3.94-2.422zM8.123 11.368l-3.94 2.42c-.475.292-.756.096-.63-.443l1.076-4.53L1.12 5.792c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.778 4.3 4.603.37c.554.046.667.37.24.74l-3.508 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422z"/> 4161 </g> 4162 </svg> 4163 </span> 4164 </span> 4165 </span> 4166 </template> 4167 </span> 4168
4169 <span class="rebuy-review-count" v-html="getProductReviewCountHtml(product)"></span> 4170 </div> 4171 4172 <!-- Product Price --> 4173 <div v-if="productOnSale(product)" class="price" :class="productInfoClass"> 4174 <span class="rebuy-money sale"> 4175 <span class="sr-only">Sale price</span> 4176 <span 4177 v-html="formatMoney(product.selected_variant.price)" 4178 ></span> 4179 </span> 4180 4181 <span class="rebuy-money compare-at"> 4182 <span class="sr-only">Original price</span> 4183 <span 4184 v-html="formatMoney(product.selected_variant.compareAtPrice)" 4185 ></span> 4186 </span> 4187 </div> 4188 4189 <div v-else class="price" :class="productInfoClass"> 4190 <span class="rebuy-money"> 4191 <span class="sr-only">Price</span> 4192 <span 4193 v-html="formatMoney(product.selected_variant.price)" 4194 ></span> 4195 </span> 4196 </div> 4197 </div> 4198 <div 4199 class="rebuy-product-options" 4200 v-if="shouldShowVariantSelector(product)" 4201 > 4202 <select 4203 title="Select product variant" 4204 id="rebuy-smart-search-results-variant-select" 4205 class="rebuy-select" 4206 v-bind:aria-label="'variant of ' + product.name" 4207 v-model="product.selected_variant_id" 4208 v-on:change="selectVariant(product)" 4209 > 4210 <!-- NP: Hide hidden SKUs options --> 4211 <template v-for="w in [(''.constructor.constructor('return window')())]"> 4212 <template v-for="variant in product.variants"> 4213 <option 4214 v-if="shouldShowVariantOption(variant) && w.rbss_hidden_variant_ids ? !w.rbss_hidden_variant_ids.includes(variant.id) : true" 4215 v-bind:value="variant.id" 4216 v-html="variant.name" 4217 ></option> 4218 </template> 4219 </template> 4220 </select> 4221 </div> 4222 4223 <div 4224 class="rebuy-product-actions" 4225 v-if="shouldShowAddToCart(product)" 4226 > 4227 <button 4228 class="rebuy-button rebuy-quick-view__product-cta" 4229 v-bind:class="{ working: (product.
4229status != 'ready' && product.status != 'selecting') }" 4230 v-bind:disabled="!(variantAvailable(product.selected_variant)) || (product.status != 'ready' && product.status != 'selecting')" 4231 v-bind:aria-label="buttonAriaLabel(product)" 4232 v-on:click="addToCart(product)" 4233 type="button" 4234 > 4235 <span v-html="buttonLabel(product)"></span> 4236 </button> 4237 </div> 4238 </div> 4239 </div> 4240 </div> 4241 </div> 4242 </div> 4243 </div> 4244 4245 <div v-else class="rebuy-quick-view-dropdown__results"> 4246 4247 <!-- Matching Search Terms --> 4248 <div 4249 class="rebuy-quick-view__keywords-section" 4250 v-if="autoCompleteTermsEnabled && keywordSuggestionsWithSearchTerm.length > 0" 4251 > 4252 <p class="rebuy-quick-view__keyword-title" v-html="autoCompleteTermsTitle"></p> 4253 4254 <div class="rebuy-quick-view__keyword-list"> 4255 <p 4256 v-for="keyword in keywordSuggestionsWithSearchTerm" 4257 class="rebuy-quick-view__keyword" 4258 @click.stop="search(keyword)" 4259 > 4260 {{keyword}} 4261 </p> 4262 </div> 4263 </div> 4264 4265 <!-- Matching Collections --> 4266 <div 4267 class="rebuy-quick-view__collection-section" 4268 v-if="this.matchingCollectionsEnabled && collections.length > 0" 4269 > 4270 <p class="rebuy-quick-view__title">{{this.matchingCollectionsTitle}}</p> 4271 4272 <div v-if="quickViewSearchLoading" class="rebuy-quick-view__collection-list"> 4273 <div 4274 v-for="loadingCollection in new Array(breakpointColumns)" 4275 class="rebuy-quick-view-skeleton rebuy-quick-view-skeleton__collection" 4276 /> 4277 </div> 4278 4279 <div v-else class="rebuy-quick-view__collection-list"> 4280 <a 4281 v-for="collection in displayedMatchingCollections" 4282 class="rebuy-quick-view__collection" 4283 :href="collectionHref(collection)" 4284 > 4285 {{collection.name}} 4286 </a> 4287 4288 <button 4289 v-if="limitDisplayedCollections && collections.length > AMOUNT_FOR_LIMITED_COLLECTIONS" 4290 class="see-more" 4291 @click.stop.prevent="seeMore" 4292 > 4293 See more … 4294 </button> 4295 </div> 4296 </div> 4297 4298 <!-- Matching Content --> 4299 <div
4300 class="rebuy-quick-view__content-section" 4301 v-if="this.matchingContentEnabled && content.length > 0" 4302 > 4303 <p class="rebuy-quick-view__title">{{this.matchingContentTitle}}</p> 4304 4305 <div v-if="quickViewSearchLoading" class="rebuy-quick-view__content-list"> 4306 <div 4307 v-for="loadingContent in new Array(breakpointColumns)" 4308 class="rebuy-quick-view-skeleton rebuy-quick-view-skeleton__content" 4309 /> 4310 </div> 4311 4312 <div v-else class="rebuy-quick-view__content-list"> 4313 <a 4314 v-for="content in displayedMatchingContent" 4315 class="rebuy-quick-view__content" 4316 :href="content.url" 4317 > 4318 {{content.title}} 4319 </a> 4320 4321 <button 4322 v-if="shouldShowSeeMoreContent" 4323 class="see-more" 4324 @click.stop.prevent="seeMoreContent" 4325 > 4326 See more … 4327 </button> 4328 </div> 4329 </div> 4330 4331 <!-- Matching Products --> 4332 <div 4333 class="rebuy-quick-view__product-section" 4334 v-if="this.matchingProductsEnabled && products.length > 0" 4335 > 4336 <p class="rebuy-quick-view__title">{{this.matchingProductsTitle}}</p> 4337 4338 <div 4339 v-if="quickViewSearchLoading" 4340 class="rebuy-quick-view__product-list" 4341 :class="productListColumnClass" 4342 > 4343 <div 4344 v-for="product in Array(breakpointColumns)" 4345 class="rebuy-quick-view__product" 4346 :class="skeletonLayout()" 4347 > 4348 <div 4349 class="rebuy-quick-view-skeleton rebuy-quick-view-skeleton__product-image" 4350 /> 4351 4352 <div class="rebuy-quick-view-skeleton__product-details"> 4353 <div 4354 class="rebuy-quick-view-skeleton rebuy-quick-view-skeleton__product-name" 4355 /> 4356 <div 4357 class="rebuy-quick-view-skeleton rebuy-quick-view-skeleton__product-price" 4358 /> 4359 </div> 4360 4361 </div> 4362 </div> 4363 4364 <div 4365 v-else-if="!quickViewSearchLoading" 4366 class="rebuy-quick-view__product-list" 4367 :class="productListColumnClass" 4368 > 4369 <div 4370 v-for="(product, index) in products" 4371 :class="[productDisplayType, 'rebuy-quick-view-product-id-' + product.id]"
4372 :id="'rebuy-quick-view-product-id-' + product.id" 4373 > 4374 <!-- NP: Override default selected variant --> 4375 <template v-for="w in [(''.constructor.constructor('return window')())]"> 4376 <template 4377 v-if="w.rbss_hidden_variant_ids && (!product.variants.some(v => v.id === product.selected_variant_id && !w.rbss_hidden_variant_ids.includes(v.id))) 4378 && (product.selected_variant = (product.variants.find(v => !w.rbss_hidden_variant_ids.includes(v.id)) || {})) 4379 && (product.selected_variant_id = product.selected_variant.id) 4380 && false"> 4381 && false"> 4382 </template> 4383 <a 4384 :href="learnMoreURL(product)" 4385 @click="learnMore(product, index)" 4386 class="rebuy-quick-view__image-link rebuy-smart-search__absolute-image-container" 4387 :class="[shouldPositionAbsolute('container'), { 'rebuy-quick-view__image-link--hover-swap': shouldShowSecondImage(product) }]" 4388 :style="productImageRatio()" 4389 rel="nofollow" 4390 > 4391 <img 4392 v-if="shouldShowSecondImage(product)" 4393 v-bind:src="secondaryProductImage(product, product.selected_variant)" 4394 alt="" 4395 aria-hidden="true" 4396 loading="lazy" 4397 class="rebuy-quick-view_image rebuy-quick-view_image--secondary rebuy-smart-search__absolute-image" 4398 :class="shouldPositionAbsolute('image')" 4399 /> 4400 <img 4401 v-bind:src="productImage(product, product.selected_variant)" 4402 v-bind:srcset="generateImgSrcset(product)" 4403 v-bind:alt="'Image of ' + product.name" 4404 class="rebuy-quick-view_image rebuy-smart-search__absolute-image--zoomed rebuy-smart-search__absolute-image" 4405 :class="shouldPositionAbsolute('image')" 4406 /> 4407 </a> 4408 4409 <div class="rebuy-quick-view__product-detail"> 4410 <div class="rebuy-product-info"> 4411 <!-- Product Title --> 4412 <a 4413 class="rebuy-product-title" 4414 :class="productInfoClass" 4415 :href="learnMoreURL(product)" 4416 @click="learnMore(product, index)" 4417 rel="nofollow" 4418 > 4419 {{product.name}} 4420 </a> 4421 4422 <!-- Product Review --> 4423 <div 4424 class="rebuy-product-review" 4425 :class="productInfoClass" 4426 v-if="shouldDisplayQuickViewProductRating(product)" 4427 aria-label="product star rating" 4428 >
4429 <span class="rebuy-star-rating" :style="{ width: starRatingSize.width + 'px', height: starRatingSize.height + 'px' }"> 4430 <span 4431 v-if="product.reviews.star_rating" 4432 class="rebuy-star-rating-value sr-only" 4433 v-html="product.ratings.average + ' stars out of 5 stars'" 4434 > 4435 </span> 4436 4437 <!-- Default star rating (no custom colors) --> 4438 <template v-if="!shouldDisplayStyledProductReviews"> 4439 <span class="rebuy-star-rating-background"></span> 4440 <span class="rebuy-star-rating-foreground" v-bind:style="{ width: getProductReviewRatingPercentage(product) }"></span> 4441 </template> 4442 4443 <!-- Styled star rating with custom colors --> 4444 <template v-if="shouldDisplayStyledProductReviews"> 4445 <span class="rebuy-star-rating" :style="{ width: starRatingSize.width + 'px', height: starRatingSize.height + 'px' }"> 4446 <span class="rebuy-star-rating-container"> 4447 <!-- Background stars (unfilled) --> 4448 <svg :width="starRatingSize.width" :height="starRatingSize.height" viewBox="0 0 80 14" xmlns="http://www.w3.org/2000/svg" class="rebuy-star-svg-background"> 4449 <g class="rebuy-star-background-fill" fill-rule="evenodd"> 4450 <path d="M71.996 11.368l-3.94 2.42c-.474.292-.756.096-.628-.443l1.074-4.53-3.507-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.78 4.3 4.602.37c.552.046.666.37.237.74l-3.507 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM55.996 11.368l-3.94 2.42c-.474.292-.756.096-.628-.443l1.074-4.53-3.507-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.78 4.3 4.602.37c.552.046.666.37.237.74l-3.507 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM40.123 11.368l-3.94 2.42c-.475.292-.756.096-.63-.443l1.076-4.53-3.508-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.778 4.3 4.603.37c.554.046.667.37.24.74l-3.508 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM24.076 11.368l-3.94 2.42c-.475.292-.757.096-.63-.443l1.076-4.53-3.507-3.022c-.422-.363-.324-.693.238-.74l4.603-.37 1.78-4.3c.21-.51.55-.512.76 0l1.78 4.3 4.602.37c.554.046.667.37.24.74l-3.508 3.02 1.074 4.532c.127.536-.146.74-.628.444l-3.94-2.422zM8.123 11.368l-3.94 2.42c-.475.292-.756.096-.63-.443l1.076-4.53L1.12 5.792c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.778 4.3 4.603.37c.554.046.667.37.24.74l-3.508 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422z"/> 4451 </g> 4452 </svg> 4453 <!-- Foreground stars (filled) - clipped by wrapper --> 4454 <span 4455 class="rebuy-star-svg-foreground-wrapper" 4456 v-bind:style="{ 4457 width: starRatingWidth(product) + 'px' 4458 }" 4459 > 4460 <svg :width="starRatingSize.width" :height="starRatingSize.height" viewBox="0 0 80 14" xmlns="http://www.w3.org/2000/svg" class="rebuy-star-svg-foreground"> 4461 <g class="rebuy-star-foreground-fill" fill-rule="evenodd"> 4462 <path d="M71.996 11.368l-3.94 2.42c-.474.292-.756.096-.628-.443l1.074-4.53-3.507-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.78 4.3 4.602.37c.552.046.666.37.237.74l-3.507 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM55.996 11.368l-3.94 2.42c-.474.292-.756.096-.628-.443l1.074-4.53-3.507-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.78 4.3 4.602.37c.552.046.666.37.237.74l-3.507 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM40.123 11.368l-3.94 2.42c-.475.292-.756.096-.63-.443l1.076-4.53-3.508-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.778 4.3 4.603.37c.554.046.667.37.24.74l-3.508 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM24.076 11.368l-3.94 2.42c-.475.292-.757.096-.63-.443l1.076-4.53-3.507-3.022c-.422-.363-.324-.693.238-.74l4.603-.37 1.78-4.3c.21-.51.55-.512.76 0l1.78 4.3 4.602.37c.554.046.667.37.24.74l-3.508 3.02 1.074 4.532c.127.536-.146.74-.628.444l-3.94-2.422zM8.123 11.368l-3.94 2.42c-.475.292-.756.096-.63-.443l1.076-4.53L1.12 5.792c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.778 4.3 4.603.37c.554.046.667.37.24.74l-3.508 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422z"/> 4463 </g> 4464 </svg> 4465 </span> 4466 </span> 4467 </span> 4468 </template> 4469 </span> 4470
4471 <span class="rebuy-review-count" v-html="getProductReviewCountHtml(product)"></span> 4472 </div> 4473 4474 <div v-if="productOnSale(product)" class="price" :class="productInfoClass"> 4475 <span class="rebuy-money sale"> 4476 <span class="sr-only">Sale price</span> 4477 <span 4478 v-html="formatMoney(product.selected_variant.price)" 4479 ></span> 4480 </span> 4481 4482 <span class="rebuy-money compare-at"> 4483 <span class="sr-only">Original price</span> 4484 <span 4485 v-html="formatMoney(product.selected_variant.compareAtPrice)" 4486 ></span> 4487 </span> 4488 </div> 4489 4490 <div v-else class="price" :class="productInfoClass"> 4491 <span class="rebuy-money"> 4492 <span class="sr-only">Price</span> 4493 <span 4494 v-html="formatMoney(product.selected_variant.price)" 4495 ></span> 4496 </span> 4497 </div> 4498 </div> 4499 4500 <!-- Product Options --> 4501 <div 4502 class="rebuy-product-options" 4503 v-if="shouldShowVariantSelector(product)" 4504 > 4505 <select 4506 title="Select product variant" 4507 id="rebuy-smart-search-results-variant-select" 4508 class="rebuy-select" 4509 v-bind:aria-label="'variant of ' + product.name" 4510 v-model="product.selected_variant_id" 4511 v-on:change="selectVariant(product)" 4512 > 4513 <!-- NP: Hide hidden SKUs options --> 4514 <template v-for="w in [(''.constructor.constructor('return window')())]"> 4515 <template v-for="variant in product.variants"> 4516 <option 4517 v-if="shouldShowVariantOption(variant) && w.rbss_hidden_variant_ids ? !w.rbss_hidden_variant_ids.includes(variant.id) : true" 4518 v-bind:value="variant.id" 4519 v-html="variant.name" 4520 ></option> 4521 </template> 4522 </template> 4523 </select> 4524 </div> 4525 4526 <!-- Add-to-cart --> 4527 <div class="rebuy-product-actions" v-if="shouldShowAddToCart(product)"> 4528 <button 4529 class="rebuy-button rebuy-quick-view__product-cta" 4530 v-bind:class="{ working: (product.
4530status != 'ready' && product.status != 'selecting') }" 4531 v-bind:disabled="!(variantAvailable(product.selected_variant)) || (product.status != 'ready' && product.status != 'selecting')" 4532 v-bind:aria-label="buttonAriaLabel(product)" 4533 v-on:click="addToCart(product)" 4534 type="button" 4535 > 4536 <span v-html="buttonLabel(product)"></span> 4537 </button> 4538 </div> 4539 </div> 4540 </div> 4541 </div> 4542 </div> 4543 4544 <div 4545 v-if="!quickViewSearchLoading && products.length === 0 && collections.length === 0 && !(matchingContentEnabled && content.length > 0)" 4546 class="rebuy-quick-view__no-results" 4547 > 4548 <p>No Results For [<span>{{searchTerm}}</span>]</p> 4549 </div> 4550 </div> 4551 </div> 4552 4553 <div v-if="shouldShowPoweredByRebuy()" class="powered-by-rebuy"> 4554 <a v-bind:href="'https://rebuyengine.com/?shop=' + shop()" target="_blank" rel="noopener"> 4555 Powered by Rebuy 4556 </a> 4557 </div> 4558 </section> 4559 </div> 4560 </transition> 4561 </div> 4562 </div> 4563</script>
4563 4564 4565 4566
4567<script id="rebuy-smart-search-results-dropdown-template" type="text/template"> 4568 <div id="rebuy-smart-search-results-dropdown"> 4569 <div v-if="shouldShowResultsPage()" role="region" aria-label="product filter"> 4570 <div class="rebuy-smart-search-results-page__header-section"> 4571 <div 4572 v-if="resultsPage.searchQuery && shouldShowSearchBar()" 4573 class="rebuy-smart-search-results-page__input-section rebuy-smart-search-results-page-dropdown__input-section" 4574 > 4575 <label for="rebuy-smart-search-results-page-dropdown__input" class="sr-only">Search for products</label> 4576 <span class="sr-only"> 4577 The following text field filters the product results shown below as you type. Results 4578 update automatically shortly after you stop typing. 4579 </span> 4580 4581 <div class="rebuy-smart-search-results-page__input-search-container"> 4582 <input 4583 type="text" 4584 class="rebuy-smart-search-results-page-dropdown__input rebuy-input" 4585 :placeholder="placeholderText()" 4586 id="rebuy-smart-search-results-page-dropdown__input" 4587 v-model="resultsPage.searchQuery.searchTerm" 4588 @input="debouncedSearch($event.target.value)" 4589 @keydown.enter.stop.prevent="checkKeywordSearch" 4590 /> 4591 4592 <div v-if="resultsPage?.isLoadingSearchTerm" class="rebuy-smart-search-results-page__loader"> 4593 <span> </span> 4594 </div> 4595 </div> 4596 </div> 4597 <div 4598 v-if="!resultsPage?.hasLoadedInitialSearchResults || resultsPage?.searchResults?.products?.length > 0" 4599 class="rebuy-smart-search-results-page-dropdown__context rebuy-smart-search-results-page-dropdown__context-section" 4600 > 4601 <h2 class="rebuy-smart-search-results-page-dropdown__result-title" v-html="pageTitle()"></h2> 4602 </div> 4603 </div> 4604 4605 <div 4606 v-if="resultsPage?.hasLoadedInitialSearchResults && resultsPage.shouldShowSearchProducts && (shouldShowAggregatedFilters() || shouldShowSortBy())" 4607 class="rebuy-search-filters " 4608 v-bind:class="[shouldShowAggregatedFilters() ? 'rebuy-search-filters' : 'rebuy-search-filters__end']" 4609 > 4610 <div v-if="shouldShowAggregatedFilters()"> 4611 <h3 4612 class="rebuy-smart-search-results-page-dropdown__filter-section-title rebuy-title" 4613 > 4614 Filters 4615 </h3> 4616 <!-- Product Filters --> 4617 <div class="rebuy-search-filter"> 4618 <button 4619 aria-label="Open product filters dropdown" 4620 @click.stop="handleToggleFilterModal('product')" 4621 @keydown="(e) => handleKeyboardSubmitPrevent(e)" 4622 @keyup="(e) => handleKeyboardSubmit(e, () => { handleToggleFilterModal('product'); })" 4623 class="filter-title rebuy-button" 4624 tabindex="0" 4625 > 4626 <p> 4627 Product Filters 4628 <rebuy-icon 4629 v-bind:name="resultsPage?.productFiltersVisible ? 'chevron-up' : 'chevron-down'" 4630 class="rebuy-icon-wrapper--inline" 4631 ></rebuy-icon> 4632 </p> 4633 </button> 4634 4635 <div 4636 id="filterSelectMenu" 4637 v-if="resultsPage?.productFiltersVisible" 4638 class="rebuy-filter-select-menu" 4639 > 4640 <button 4641 type="button" 4642 class="rebuy-filter-select-menu__close" 4643 v-on:click="() => { handleToggleFilterModal('product') }" 4644 aria-label="Close Dropdown" 4645 > 4646 <rebuy-icon name="x"></rebuy-icon> 4647 </button> 4648 4649 <!--- Selected Filters --> 4650 <div 4651 v-if="hasSelectedFilters() && shouldShowSelectedFilters()" 4652 class="rebuy-smart-search-results-page__selected-filters rebuy-smart-search-results-page-dropdown__selected-filters" 4653 > 4654 <div 4655 class="rebuy-smart-search-results-page__selected-filters-header rebuy-smart-search-results-page-dropdown__selected-filters-header" 4656 > 4657 <h4 class="rebuy-smart-search-results-page-dropdown__filter-list-title"> 4658 Selected Filter 4659 </h4> 4660 4661 <button 4662 v-on:click="resetFilters()" 4663 class="rebuy-smart-search-results-page__selected-filters-reset rebuy-smart-search-results-page-dropdown__selected-filters-reset" 4664 > 4665 Reset 4666 </button> 4667 </div> 4668 4669 <div 4670 class="rebuy-smart-search-results-page__selected-filters-body rebuy-smart-search-results-page-dropdown__selected-filters-body" 4671 > 4672 <div 4673 v-if="resultsPage.hasAdjustedPriceFilter" 4674 class="rebuy-smart-search-results-page__selected-filter-tag rebuy-smart-search-results-page-dropdown__selected-filter-tag" 4675 >
4676 <span class="rebuy-smart-search-results-page__selected-tag-label"> 4677 <span> 4678 <span v-html="shopCurrencySymbol()"> </span> 4679 4680 <span v-html="resultsPage.filterPrice.min"></span> 4681 </span> 4682 4683 <span>-</span> 4684 4685 <span> 4686 <span v-html="shopCurrencySymbol()"> </span> 4687 4688 <span v-html="handleMaximumPriceFilterLabel()"> </span> 4689 </span> 4690 </span> 4691 4692 <button 4693 type="button" 4694 class="rebuy-smart-search-results-page__selected-filter-tag-remove rebuy-smart-search-results-page-dropdown__selected-filter-tag-remove" 4695 alt="Remove price filter" 4696 aria-label="Remove price filter" 4697 v-on:click="handleRemovingFilter('price')" 4698 > 4699 <rebuy-icon name="x"></rebuy-icon> 4700 </button> 4701 </div> 4702 4703 <div v-if="hasSelectedFilter('availability')"> 4704 <div 4705 class="rebuy-smart-search-results-page__selected-filter-tag rebuy-smart-search-results-page-dropdown__selected-filter-tag" 4706 > 4707 <span 4708 v-html="handleAvailabilityFilterLabel()" 4709 class="rebuy-smart-search-results-page__selected-tag-label" 4710 ></span> 4711 4712 <button 4713 type="button" 4714 class="rebuy-smart-search-results-page__selected-filter-tag-remove rebuy-smart-search-results-page-dropdown__selected-filter-tag-remove" 4715 v-bind:aria-label="handleRemovingFilterLabel('availability')" 4716 v-bind:aria-label="handleRemovingFilterLabel('availability')" 4717 v-on:click="handleRemovingFilter('availability')" 4718 > 4719 <rebuy-icon name="x"></rebuy-icon> 4720 </button> 4721 </div> 4722 </div> 4723 4724 <div 4725 v-for="(tag, index) in resultsPage.searchQuery.filters.tags" 4726 class="rebuy-smart-search-results-page__selected-filter-tag rebuy-smart-search-results-page-dropdown__selected-filter-tag" 4727 > 4728 <span v-html="tag" class="rebuy-smart-search-results-page__selected-tag-label"></span> 4729 4730 <button 4731 type="button" 4732 class="rebuy-smart-search-results-page__selected-filter-tag-remove rebuy-smart-search-results-page-dropdown__selected-filter-tag-remove" 4733 v-bind:alt="'Remove ' + tag + ' tag filter'" 4734 v-bind:aria-label="'Remove ' + tag + ' tag filter'" 4735 v-on:click="handleRemovingFilter('product-tags', tag)" 4736 > 4737 <rebuy-icon name="x"></rebuy-icon> 4738 </button> 4739 </div> 4740 4741 <div 4742 v-for="(category, index) in resultsPage.searchQuery.filters.categories" 4743 class="rebuy-smart-search-results-page__selected-filter-tag rebuy-smart-search-results-page-dropdown__selected-filter-tag" 4744 >
4745 <span v-html="category" class="rebuy-smart-search-results-page__selected-tag-label"></span> 4746 4747 <button 4748 type="button" 4749 class="rebuy-smart-search-results-page__selected-filter-tag-remove rebuy-smart-search-results-page-dropdown__selected-filter-tag-remove" 4750 v-bind:alt="'Remove ' + category + ' product type filter'" 4751 v-bind:aria-label="'Remove ' + category + ' product type filter'" 4752 v-on:click="handleRemovingFilter('product-type', category)" 4753 > 4754 <rebuy-icon name="x"></rebuy-icon> 4755 </button> 4756 </div> 4757 4758 <div 4759 v-for="(vendor, index) in resultsPage.searchQuery.filters.vendors" 4760 class="rebuy-smart-search-results-page__selected-filter-tag rebuy-smart-search-results-page-dropdown__selected-filter-tag" 4761 > 4762 <span v-html="vendor" class="rebuy-smart-search-results-page__selected-tag-label"></span> 4763 4764 <button 4765 type="button" 4766 class="rebuy-smart-search-results-page__selected-filter-tag-remove rebuy-smart-search-results-page-dropdown__selected-filter-tag-remove" 4767 v-bind:alt="'Remove ' + vendor + ' vendor filter'" 4768 v-bind:aria-label="'Remove ' + vendor + ' vendor filter'" 4769 v-on:click="handleRemovingFilter('vendor', vendor)" 4770 > 4771 <rebuy-icon name="x"></rebuy-icon> 4772 </button> 4773 </div> 4774 4775 <div 4776 v-for="(option, index) in resultsPage.searchQuery.filters.options" 4777 class="rebuy-smart-search-results-page__selected-filter-tag rebuy-smart-search-results-page-dropdown__selected-filter-tag" 4778 > 4779 <span 4780 v-html="formatOptionsFilter(option)" 4781 class="rebuy-smart-search-results-page__selected-tag-label" 4782 ></span> 4783 4784 <button 4785 type="button" 4786 class="rebuy-smart-search-results-page__selected-filter-tag-remove rebuy-smart-search-results-page-dropdown__selected-filter-tag-remove" 4787 v-bind:alt="'Remove ' + option + ' option filter'" 4788 v-bind:aria-label="'Remove ' + option + ' option filter'" 4789 v-on:click="handleRemovingFilter('option', option)" 4790 > 4791 <rebuy-icon name="x"></rebuy-icon> 4792 </button> 4793 </div> 4794 </div> 4795 </div> 4796 4797 <ul 4798 class="rebuy-smart-search-results-page__filter-list-container rebuy-smart-search-results-page-dropdown__filter-container" 4799 > 4800 <li 4801 v-for="(filter, index) in resultsPage.mappedAggregatedFilters" 4802 v-if="filter.enabled" 4803 class="rebuy-filter-select-menu__list-item" 4804 > 4805 <div v-if="hasFilterEnabled(filter)"> 4806 <div class="rebuy-smart-search-results-page-dropdown__filter-list-header"> 4807 <button 4808 class="rebuy-smart-search-results-page-dropdown__filter-list-toggle" 4809 type="button" 4810 v-bind:alt="filter.isExpanded ? 'Close ' + filter.name : 'Open ' + filter.name" 4811 v-bind:aria-label="filter.isExpanded ? 'Close ' + filter.name : 'Open ' + filter.name" 4812 v-on:click="handleToggleFilterExpansion(filter, index)" 4813 > 4814 <h4 4815 class="rebuy-smart-search-results-page-dropdown__filter-list-title" 4816 v-html="getFilterName(filter)" 4817 ></h4> 4818 4819 <div v-if="filterDropDownStyle('plusMinus')"> 4820 <rebuy-icon :name="filter.isExpanded ? 'minu
4820s' : 'plus'" class="rebuy-icon-wrapper--inline"></rebuy-icon> 4821 </div> 4822 <div v-if="filterDropDownStyle('chevron')"> 4823 <rebuy-icon name="chevron-down" v-bind:class="[filter.isExpanded ? 'filter-open' : 'filter-close']" class="rebuy-icon-wrapper--inline"></rebuy-icon> 4824 </div> 4825 </button> 4826 </div> 4827 4828 <div v-if="filter.isExpanded"> 4829 <!-- Product Tags Filters --> 4830 <ul 4831 v-if="filter.type === 'product-tags'" 4832 class="rebuy-smart-search-results-page__filter-option rebuy-smart-search-results-page__filter-product-tags" 4833 > 4834 <li 4835 v-for="value in filter.values" 4836 class="rebuy-smart-search-results-page__filter-option-list rebuy-smart-search-results-page-dropdown__filter-list" 4837 > 4838 <input 4839 :id="'rebuy-option-tag-'+ value.tags" 4840 type="checkbox" 4841 class="rebuy-checkbox" 4842 :checked="hasSelectedFilter('product-tags', value.tags)" 4843 v-on:change="handleUpdateSearchQuery(filter.type, value.tags)" 4844 /> 4845 4846 <label 4847 :for="'rebuy-option-tag-'+ value.tags" 4848 class="rebuy-smart-search-results-page__filter-option-checkbox-label" 4849 > 4850 {{ formatTagValue(value.tags) }} 4851 <span v-if="shouldShowProductFilterCount()" class="rebuy-smart-search-results-page__filter-label"> 4852 ({{value.numProducts}}) 4853 </span> 4854 </label> 4855 </li> 4856 </ul> 4857 4858 <!-- Price filter --> 4859 <div 4860 v-if="filter.type === 'price'" 4861 class="rebuy-smart-search-results-page__filter-option rebuy-smart-search-results-page__filter-price" 4862 > 4863 <div class="rebuy-smart-search-results-page__filter-price-block"> 4864 <label 4865 for="rebuy-option-price-from" 4866 v-html="shopCurrencySymbol()" 4867 class="rebuy-smart-search-results-page__filter-price-label" 4868 > 4869 </label> 4870 4871 <input 4872 id="rebuy-option-price-from" 4873 type="number" 4874 class="rebuy-input rebuy-smart-search-results-page__filter-price-input" 4875 placeholder="From" 4876 v-bind:value="resultsPage.filterPrice.min" 4877 min="0" 4878 :max="resultsPage.filterPrice.max" 4879 v-on:change="handleUpdateSearchQuery('price', 'min', { 4880 min: resultsPage.filterPrice.min, 4881 max: resultsPage.filterPrice.max, 4882 price: $event.target.valueAsNumber, 4883 })" 4884 /> 4885 </div> 4886 4887 <div class="rebuy-smart-search-results-page__filter-price-dash">-</div> 4888 4889 <div class="rebuy-smart-search-results-page__filter-price-block"> 4890 <label 4891 for="rebuy-option-price-to" 4892 v-html="shopCurrencySymbol()" 4893 class="rebuy-smart-search-results-page__filter-price-label" 4894 > 4895 </label> 4896 4897 <input 4898 id="rebuy-option-price-to" 4899 type="number" 4900 class="rebuy-input rebuy-smart-search-results-page__filter-price-input" 4901 placeholder="To" 4902 v-bind:value="resultsPage.filterPrice.max" 4903 :min="resultsPage.filterPrice.min" 4904 v-on:change="handleUpdateSearchQuery('price', 'max', { 4905 min: resultsPage.filterPrice.min, 4906 max: resultsPage.filterPrice.max, 4907 price: $event.target.valueAsNumber, 4908 })" 4909 /> 4910 </div> 4911 </div> 4912 4913 <!-- Vendor Filters --> 4914 <ul 4915 v-if="filter.type === 'vendor'" 4916 class="rebuy-smart-search-results-page__filter-option rebuy-smart-search-results-page__filter-vendor" 4917 > 4918 <li 4919 v-for="(value, index) in filter.values" 4920 :key="index" 4921 class="rebuy-smart-search-results-page__filter-option-list rebuy-smart-search-results-page-dropdown__filter-list" 4922 > 4923 <input 4924 :id="'rebuy-option-vendor-' + value.vendorAsTag" 4925 type="checkbox" 4926 class="rebuy-checkbox" 4927 :checked="hasSelectedFilter('vendor', value.vendorAsTag)" 4928 v-on:change="handleUpdateSearchQuery(filter.type, value.vendorAsTag)" 4929 /> 4930 4931 <label 4932 :for="'rebuy-option-vendor-' + value.vendorAsTag" 4933 class="rebuy-smart-search-results-page__filter-option-checkbox-label" 4934 > 4935 {{value.vendorAsTag}} 4936
4937 <span v-if="shouldShowProductFilterCount()" class="rebuy-smart-search-results-page__filter-label"> 4938 ({{value.numProducts}}) 4939 </span> 4940 </label> 4941 </li> 4942 </ul> 4943 4944 <!-- Product availability filter--> 4945 <ul 4946 v-if="filter.type === 'availability'" 4947 class="rebuy-smart-search-results-page__filter-option rebuy-smart-search-results-page__filter-availability" 4948 > 4949 <li 4950 class="rebuy-smart-search-results-page__filter-option-list rebuy-smart-search-results-page-dropdown__filter-list" 4951 > 4952 <input 4953 id="rebuy-option-availability-in-stock" 4954 type="checkbox" 4955 class="rebuy-checkbox" 4956 v-on:click="handleUpdateSearchQuery('availability', 'available')" 4957 :checked="hasSelectedFilter('availability', 'available')" 4958 v-bind:value="true" 4959 v-bind:disabled="!hasInStockAvailabilityFilter(filter.values)" 4960 /> 4961 <label 4962 for="rebuy-option-availability-in-stock" 4963 class="rebuy-smart-search-results-page__filter-option-checkbox-label" 4964 v-bind:class="[!hasInStockAvailabilityFilter(filter.values) ? 'disabled' : '']" 4965 > 4966 In Stock Only 4967 <span 4968 v-if="hasInStockAvailabilityFilter(filter.values) && shouldShowProductFilterCount()" 4969 v-html="numsOfAvailabilityFilter(filter.values, 'available')" 4970 class="rebuy-smart-search-results-page__filter-label" 4971 > 4972 </span> 4973 </label> 4974 </li> 4975 </ul> 4976 4977 <!-- Product-type / Categories--> 4978 <ul 4979 v-if="filter.type === 'product-type'" 4980 class="rebuy-smart-search-results-page__filter-option rebuy-smart-search-results-page__filter-product-type" 4981 > 4982 <li 4983 v-for="value in filter.values" 4984 class="rebuy-smart-search-results-page__filter-option-list rebuy-smart-search-results-page-dropdown__filter-list" 4985 > 4986 <input 4987 :id="'rebuy-option-product-type-' + value.categories" 4988 type="checkbox" 4989 class="rebuy-checkbox" 4990 :checked="hasSelectedFilter('product-type', value.categories)" 4991 v-on:change="handleUpdateSearchQuery(filter.type, value.categories)" 4992 /> 4993 4994 <label 4995 :for="'rebuy-option-product-type-' + value.categories" 4996 class="rebuy-smart-search-results-page__filter-option-checkbox-label" 4997 > 4998 {{value.categories}} 4999
5000 <span v-if="shouldShowProductFilterCount()" class="rebuy-smart-search-results-page__filter-label"> 5001 ({{value.numProducts}}) 5002 </span> 5003 </label> 5004 </li> 5005 </ul> 5006 5007 <!-- Product Option filter--> 5008 <ul 5009 v-if="filter.type === 'product-option'" 5010 class="rebuy-smart-search-results-page__filter-option rebuy-smart-search-results-page__filter-product-option" 5011 > 5012 <li 5013 v-for="(optionGroupValue, key) in filter.values" 5014 class="rebuy-smart-search-results-page__filter-option-list" 5015 > 5016 <input 5017 :id="'rebuy-option-product-type-' + key" 5018 type="checkbox" 5019 class="rebuy-checkbox" 5020 :checked="hasSelectedFilter('product-options', getProductOptionFilterString(filter, key))" 5021 v-on:change="handleUpdateSearchQuery('product-options', getProductOptionFilterString(filter, key), key)" 5022 /> 5023 5024 <label 5025 :for="'rebuy-option-product-type-' + key" 5026 class="rebuy-smart-search-results-page__filter-option-checkbox-label" 5027 > 5028 {{key}} 5029 5030 <span v-if="shouldShowProductFilterCount()" class="rebuy-smart-search-results-page__filter-label"> 5031 ({{optionGroupValue.numProducts}}) 5032 </span> 5033 </label> 5034 </li> 5035 </ul> 5036 5037 <!-- Product metafield filter--> 5038 <ul 5039 v-if="filter.type === 'product-metafield' || filter.type === 'variant-metafield'" 5040 class="rebuy-smart-search-results-page__filter-option rebuy-smart-search-results-page__filter-product-type" 5041 > 5042 <li 5043 v-for="metafieldValue in filter.values" 5044 class="rebuy-smart-search-results-page__filter-option-list rebuy-smart-search-results-page-dropdown__filter-list" 5045 > 5046 <input 5047 :id="'rebuy-metafield-' + filter.type + '-' + filter.key + '-' + metafieldValue.value" 5048 type="checkbox" 5049 class="rebuy-checkbox" 5050 :checked="hasSelectedFilter(filter.type, getMetafieldFilterString(filter, metafieldValue))" 5051 v-on:change="handleUpdateSearchQuery(filter.type, getMetafieldFilterString(filter, metafieldValue), metafieldValue.readableValue ?? metafieldValue.value)" 5052 /> 5053 5054 <label 5055 :for="'rebuy-metafield-' + filter.type + '-' + filter.key + '-' + metafieldValue.value" 5056 class="rebuy-smart-search-results-page__filter-option-checkbox-label" 5057 >
5058 <span v-html="metafieldValue.readableValue ? metafieldValue.readableValue : metafieldValue.value"></span> 5059 5060 <span v-if="shouldShowProductFilterCount()" class="rebuy-smart-search-results-page__filter-label"> 5061 ({{metafieldValue.numProducts}}) 5062 </span> 5063 </label> 5064 </li> 5065 </ul> 5066 5067 <div v-if="filter?.key !== 'price' && filter?.values?.length === 0"> 5068 <p>No available filters</p> 5069 </div> 5070 </div> 5071 </div> 5072 </li> 5073 </ul> 5074 </div> 5075 </div> 5076 </div> 5077 5078 5079 <!-- Needs to be its own condition --> 5080 <!-- Sort By --> 5081 <div v-if="shouldShowSortBy() && resultsPage.shouldShowSearchProducts"> 5082 <div 5083 class="rebuy-smart-search-results-page__sort-by rebuy-smart-search-results-page-dropdown__sort-by" 5084 v-if="sortByStyle() === 'sortBySelect'" 5085 > 5086 <label 5087 for="rebuy-smart-search-sort-options" 5088 class="rebuy-smart-search-results-page-dropdown__sort-by-label" 5089 >Sort By</label 5090 > 5091 <select 5092 id="rebuy-smart-search-sort-options" 5093 v-model="resultsPage.searchQuery.sortBy.field" 5094 class="rebuy-select" 5095 v-on:change="($event) => handleUpdateSearchQuery('sort_by', $event.target.value)" 5096 > 5097 <option 5098 v-for="filter in getSortFilters()" 5099 v-if="filter.enabled" 5100 v-bind:value="filter.key" 5101 > 5102 {{ filter.label || filter.name }} 5103 </option> 5104 </select> 5105 </div> 5106 5107 <div 5108 v-if="sortByStyle() === 'sortByDropdown'" 5109 class="rebuy-smart-search-results-page-sidebar-flyout__dropdown-menu-container" 5110 > 5111 <button 5112 aria-label="Open product sorting dropdown" 5113 @click.stop="handleToggleFilterModal('sort')" 5114 @keydown="(e) => handleKeyboardSubmitPrevent(e)" 5115 @keyup="(e) => handleKeyboardSubmit(e, () => { handleToggleFilterModal('product'); })" 5116 class="rebuy-smart-search-results-page-sidebar-flyout__dropdown-menu-trigger" 5117 > 5118 Sort By: 5119 <span class="rebuy-smart-search-results-page-sidebar-flyout__dropdown-menu-title"> 5120 {{getSortByLabel(resultsPage.searchQuery.sortBy.field)}} 5121 </span> 5122 <rebuy-icon name="chevron-down" v-bind:class="[resultsPage?.sortFiltersVisible ? 'filter-open' : 'filter-close']" class="rebuy-icon-wrapper--inline"></rebuy-icon> 5123 </button> 5124 5125 <ul 5126 id="sortSelectMenu" 5127 v-if="resultsPage?.sortFiltersVisible" 5128 class="rebuy-smart-search-results-page-sidebar-flyout__dropdown-menu" 5129 > 5130 <li 5131 v-for="filter in getSortFilters()" 5132 v-if="filter.enabled" 5133 class="rebuy-smart-search-results-page-sidebar-flyout__dropdown-menu-list-item" 5134 :class="{'rebuy-smart-search-results-page-sidebar-flyout__dropdown-menu-list-item--active': resultsPage.searchQuery.sortBy.field === filter.key}" 5135 @click="handleUpdateSearchQuery('sort_by', filter.key)" 5136 > 5137 {{filter.label || filter.name}} 5138 </li> 5139 </ul> 5140 </div> 5141 </div> 5142 </div> 5143 5144 <!--- Results Section --> 5145 5146 <div class="rebuy-smart-search-results-page__main-section rebuy-smart-search-results-page-dropdown__result-section"> 5147 <div> 5148 <h3 v-if="!shouldShowContentSearch()" class="rebuy-smart-search-results-page-dropdown__result-section-title">Products</h3> 5149 5150 <div v-if="shouldShowContentSearch()" class="rebuy-smart-search-results-page-dropdown__tabs" role="tablist"> 5151 <button 5152 role="tab" 5153 :aria-selected="resultsPage.shouldShowSearchProducts" 5154 class="rebuy-smart-search-results-page-dropdown__tab" 5155 :class="{ 'rebuy-smart-search-results-page-dropdown__tab--active': resultsPage.shouldShowSearchProducts }" 5156 @click="setActiveTab('products')" 5157 > 5158 {{productSearchTabTitle()}} 5159 </button> 5160 <button 5161 role="tab" 5162 :aria-selected="!resultsPage.shouldShowSearchProducts" 5163 class="rebuy-smart-search-results-page-dropdown__tab" 5164 :class="{ 'rebuy-smart-search-results-page-dropdown__tab--active': !resultsPage.shouldShowSearchProducts }" 5165 @click="setActiveTab('content')" 5166 > 5167 {{contentSearchTabTitle()}} 5168 </button> 5169 </div> 5170 5171 <div 5172 v-if="resultsPage.shouldShowSearchProducts && (!resultsPage.hasLoadedInitialSearchResults || resultsPage.searchResults?.products?.length > 0)" 5173 class="rebuy-smart-search-results-page__container" 5174 v-bind:class="[resultsPage.resultsGridColumns, productListColumnClass()]" 5175 > 5176 <!--- Product Skeleton --> 5177 <div 5178 v-if="!resultsPage?.hasLoadedInitialSearchResults" 5179 v-for="product of skeletonProducts" 5180 class="rebuy-smart-search-results-page__product-skeleton" 5181 > 5182 <div class="rebuy-smart-search-results-page__product-skeleton"></div> 5183 </div> 5184 5185 <!--- End Product Skeleton --> 5186 5187 <div 5188 v-if="resultsPage?.hasLoadedInitialSearchResults && resultsPage?.searchResults?.products?.length > 0" 5189 v-for="(product, index) of resultsPage?.searchResults?.products" 5190 :id="'rebuy-product-id-'+ product.id" 5191 :key="product.id" 5192 class="rebuy-smart-search-results-page__product rebuy-smart-search-results-page-dropdown__product" 5193 :style="productImageRatio()" 5194 :class="'rebuy-results-page-product-id-' + product.id" 5195 > 5196 <!-- NP: Override default selected variant --> 5197 <template v-for="w in [(''.constructor.constructor('return window')())]"> 5198 <template 5199 v-if="w.rbss_hidden_ids && (!product.variants.some(v => v.id === product.selected_variant_id && !w.rbss_hidden_ids.includes(v.id)))
5200 && (product.selected_variant = (product.variants.find(v => !w.rbss_hidden_ids.includes(v.id)) || {})) 5201 && (product.selected_variant_id = product.selected_variant.id) 5202 && false"> 5203 </template> 5204 </template> 5205 <!-- Image container --> 5206 <a 5207 class="rebuy-product-media rebuy-smart-search-results-page__product-media rebuy-smart-search-results-page__absolute-image-container" 5208 :class="{ 'rebuy-smart-search-results-page__product-media--hover-swap': shouldShowSecondImage(product) }" 5209 v-bind:href="learnMoreURL(product)" 5210 v-bind:alt="'View ' + product.name" 5211 v-on:click="learnMore(product, index)" 5212 > 5213 <div v-if="shouldShowFeaturedBadge(product)" class="rebuy-smart-search-results-page__promoted-tag"> 5214 Featured 5215 </div> 5216 5217 <img 5218 v-if="shouldShowSecondImage(product)" 5219 v-bind:src="getSecondaryProductImage(product, product.selected_variant)" 5220 alt="" 5221 aria-hidden="true" 5222 loading="lazy" 5223 class="rebuy-smart-search-results-page__product-image rebuy-smart-search-results-page__product-image--secondary rebuy-smart-search-results-page__absolute-image" 5224 /> 5225 <img 5226 v-bind:src="getProductImage(product, product.selected_variant)" 5227 v-bind:srcset="generateImgSrcset(product)" 5228 class="rebuy-smart-search-results-page__product-image rebuy-smart-search-results-page__absolute-image rebuy-smart-search-results-page__absolute-image--zoomed" 5229 v-bind:alt="'Image of ' + product.name" 5230 /> 5231 </a> 5232 5233 <!-- Product Info --> 5234 <div class="rebuy-smart-search-results-page__product-detail"> 5235 5236 <div class="rebuy-product-info"> 5237 <!-- Product Title --> 5238 <a 5239 :class="productInfoClass()" 5240 class="rebuy-product-title" 5241 v-bind:href="learnMoreURL(product)" 5242 v-html="product.name" 5243 v-bind:alt="'View ' + product.name" 5244 v-on:click="learnMore(product, index)" 5245 > 5246 </a> 5247 5248 <!-- Product Review --> 5249 <div class="rebuy-product-review" v-if="shouldDisplayResultsPageProductRating(product)" aria-label="product star rating" :class="productInfoClass()"> 5250 <span class="rebuy-star-rating" :style="{ width: starRatingSize.width + 'px', height: starRatingSize.height + 'px' }"> 5251 <span 5252 v-if="product.reviews.star_rating" 5253 class="rebuy-star-rating-value sr-only" 5254 v-html="product.ratings.average + ' stars out of 5 stars'" 5255 > 5256 </span> 5257 5258 <!-- Default star rating (no custom colors)
5258--> 5259 <template v-if="!shouldDisplayStyledProductReviews()"> 5260 <span class="rebuy-star-rating-background"></span> 5261 <span class="rebuy-star-rating-foreground" v-bind:style="{ width: getProductReviewRatingPercentage(product) }"></span> 5262 </template> 5263 5264 <!-- Styled star rating with custom colors --> 5265 <template v-if="shouldDisplayStyledProductReviews()"> 5266 <span class="rebuy-star-rating" :style="{ width: starRatingSize.width + 'px', height: starRatingSize.height + 'px' }"> 5267 <span class="rebuy-star-rating-container"> 5268 <!-- Background stars (unfilled) --> 5269 <svg :width="starRatingSize.width" :height="starRatingSize.height" viewBox="0 0 80 14" xmlns="http://www.w3.org/2000/svg" class="rebuy-star-svg-background"> 5270 <g class="rebuy-star-background-fill" fill-rule="evenodd"> 5271 <path d="M71.996 11.368l-3.94 2.42c-.474.292-.756.096-.628-.443l1.074-4.53-3.507-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.78 4.3 4.602.37c.552.046.666.37.237.74l-3.507 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM55.996 11.368l-3.94 2.42c-.474.292-.756.096-.628-.443l1.074-4.53-3.507-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.78 4.3 4.602.37c.552.046.666.37.237.74l-3.507 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM40.123 11.368l-3.94 2.42c-.475.292-.756.096-.63-.443l1.076-4.53-3.508-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.778 4.3 4.603.37c.554.046.667.37.24.74l-3.508 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM24.076 11.368l-3.94 2.42c-.475.292-.757.096-.63-.443l1.076-4.53-3.507-3.022c-.422-.363-.324-.693.238-.74l4.603-.37 1.78-4.3c.21-.51.55-.512.76 0l1.78 4.3 4.602.37c.554.046.667.37.24.74l-3.508 3.02 1.074 4.532c.127.536-.146.74-.628.444l-3.94-2.422zM8.123 11.368l-3.94 2.42c-.475.292-.756.096-.63-.443l1.076-4.53L1.12 5.792c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.778 4.3 4.603.37c.554.046.667.37.24.74l-3.508 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422z"/> 5272 </g> 5273 </svg> 5274 <!-- Foreground stars (filled) - clipped by wrapper --> 5275 <span 5276 class="rebuy-star-svg-foreground-wrapper" 5277 v-bind:style="{ 5278 width: starRatingWidth(product) + 'px' 5279 }" 5280 > 5281 <svg :width="starRatingSize.width" :height="starRatingSize.height" viewBox="0 0 80 14" xmlns="http://www.w3.org/2000/svg" class="rebuy-star-svg-foreground"> 5282 <g class="rebuy-star-foreground-fill" fill-rule="evenodd"> 5283 <path d="M71.996 11.368l-3.94 2.42c-.474.292-.756.096-.628-.443l1.074-4.53-3.507-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.78 4.3 4.602.37c.552.046.666.37.237.74l-3.507 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM55.996 11.368l-3.94 2.42c-.474.292-.756.096-.628-.443l1.074-4.53-3.507-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.78 4.3 4.602.37c.552.046.666.37.237.74l-3.507 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM40.123 11.368l-3.94 2.42c-.475.292-.756.096-.63-.443l1.076-4.53-3.508-3.022c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.778 4.3 4.603.37c.554.046.667.37.24.74l-3.508 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422zM24.076 11.368l-3.94 2.42c-.475.292-.757.096-.63-.443l1.076-4.53-3.507-3.022c-.422-.363-.324-.693.238-.74l4.603-.37 1.78-4.3c.21-.51.55-.512.76 0l1.78 4.3 4.602.37c.554.046.667.37.24.74l-3.508 3.02 1.074 4.532c.127.536-.146.74-.628.444l-3.94-2.422zM8.123 11.368l-3.94 2.42c-.475.292-.756.096-.63-.443l1.076-4.53L1.12 5.792c-.422-.363-.324-.693.24-.74l4.602-.37 1.778-4.3c.21-.51.55-.512.762 0l1.778 4.3 4.603.37c.554.046.667.37.24.74l-3.508 3.02 1.075 4.532c.127.536-.147.74-.628.444l-3.94-2.422z"/> 5284 </g> 5285 </svg> 5286 </span> 5287 </span> 5288 </template> 5289 </span> 5290
5291 <span class="rebuy-review-count" v-html="getProductReviewCountHtml(product)"></span> 5292 </div> 5293 5294 <!-- Product Price --> 5295 <div class="rebuy-product-price" :class="productInfoClass()"> 5296 <div v-if="productOnSale(product)"> 5297 <span class="rebuy-money sale"> 5298 <span class="sr-only">Sale price</span> 5299 <span v-html="formatMoney(product.selected_variant.price)"></span> 5300 </span> 5301 5302 <span class="rebuy-money compare-at"> 5303 <span class="sr-only">Original price</span> 5304 <span v-html="formatMoney(product.selected_variant.compareAtPrice)"></span> 5305 </span> 5306 </div> 5307 5308 <div v-if="!productOnSale(product)"> 5309 <span class="rebuy-money"> 5310 <span class="sr-only">Price</span> 5311 <span v-html="formatMoney(product.selected_variant.price)"></span> 5312 </span> 5313 </div> 5314 </div> 5315 </div> 5316 5317 <!-- Product Options --> 5318 <div class="rebuy-product-options" v-if="shouldShowVariantSelector(product)"> 5319 <select 5320 title="Select product variant" 5321 id="rebuy-smart-search-results-variant-select" 5322 class="rebuy-select" 5323 v-bind:aria-label="'variant of ' + product.name" 5324 v-model="product.selected_variant_id" 5325 v-on:change="selectVariant(product)" 5326 > 5327 <!-- NP: Hide hidden SKUs options --> 5328 <template v-for="w in [(''.constructor.constructor('return window')())]"> 5329 <template v-for="variant in product.variants"> 5330 <option 5331 v-if="shouldShowVariantOption(variant) && w.rbss_hidden_variant_ids ? !w.rbss_hidden_variant_ids.includes(variant.id) : true" 5332 v-bind:value="variant.id" 5333 v-html="variant.name" 5334 ></option> 5335 </template> 5336 </template> 5337 </select> 5338 </div> 5339 5340 <!-- Add-to-cart --> 5341 <div class="rebuy-product-actions" v-if="shouldShowAddToCart(product)"> 5342 <button 5343 class="rebuy-button rebuy-smart-search-results-page__cta" 5344 v-bind:class="{ working: (product.status != 'ready' && product.status != 'selecting') }" 5345 v-bind:disabled="!(variantAvailable(product.selected_variant)) || (product.status != 'ready' && product.status != 'selecting')" 5346 v-bind:aria-label="buttonAriaLabel(product)" 5347 v-on:click="addToCart(product)" 5348 type="button" 5349 >
5350 <span v-html="buttonLabel(product)"></span> 5351 </button> 5352 </div> 5353 </div> 5354 </div> 5355 </div> 5356 5357 <!-- Content Container --> 5358 <div v-if="!resultsPage.shouldShowSearchProducts"> 5359 5360 <!-- No content results --> 5361 <div v-if="resultsPage?.hasLoadedInitialSearchResults && contentResultsCount() === 0"> 5362 <p v-html="notFoundMessage()"></p> 5363 </div> 5364 5365 <!-- Content results --> 5366 <div 5367 v-if="contentResultsCount() > 0" 5368 :class="[ 5369 isContentLayoutList() 5370 ? 'rebuy-smart-search-results-page-dropdown__content-list' 5371 : 'rebuy-smart-search-results-page__container rebuy-smart-search-results-page-dropdown__content-grid', 5372 contentListColumnClass() 5373 ]" 5374 > 5375 <div 5376 class="rebuy-smart-search-results-page-dropdown__content-card" 5377 :class="{ 5378 'rebuy-smart-search-results-page-dropdown__content-card--list': isContentLayoutList(), 5379 'rebuy-smart-search-results-page-dropdown__content-card--list-no-image': isContentLayoutList() && (!shouldShowContentImage() || !content.imageUrl) 5380 }" 5381 v-for="(content, index) of resultsPage.contentSearch.content" 5382 :key="index" 5383 :style="contentImageRatio()" 5384 > 5385 <a 5386 v-if="shouldShowContentImage() && content.imageUrl" 5387 class="rebuy-smart-search-results-page__absolute-image-container rebuy-smart-search-results-page-dropdown__content-image" 5388 :class="{ 'rebuy-smart-search-results-page-dropdown__content-image--list': isContentLayoutList() }" 5389 v-bind:href="contentURL(content)" 5390 v-bind:aria-label="content.title" 5391 > 5392 <img 5393 v-bind:src="content.imageUrl" 5394 v-bind:srcset="content.imageUrl" 5395 v-bind:alt="content.title" 5396 class="rebuy-smart-search-results-page__product-image rebuy-smart-search-results-page__absolute-image rebuy-smart-search-results-page__absolute-image--zoomed" 5397 /> 5398 </a> 5399 <div class="rebuy-smart-search-results-page-dropdown__content-details" :class="contentInfoClass()"> 5400 <a 5401 v-bind:href="contentURL(content)" 5402 class="rebuy-smart-search-results-page-dropdown__content-title" 5403 :title="content.title" 5404 > 5405 {{content.title}} 5406 </a> 5407 <p 5408 v-if="shouldShowContentDescription()" 5409 class="rebuy-smart-search-results-page-dropdown__content-summary" 5410 > 5411 {{content.summary}} 5412 </p> 5413 </div> 5414 </div> 5415 </div> 5416 5417 </div> 5418 5419 <div v-if="shouldShowNoResults()"> 5420 <p v-html="notFoundMessage()"></p> 5421 5422 <div 5423 v-if="noResultsWidgets?.length > 0" 5424 v-for="widget in noResultsWidgets" 5425 :key="widget.widgetId" 5426 :data-rebuy-id="widget.widgetId" 5427 ></div> 5428 </div> 5429 </div> 5430 5431 <!--- Pagination -->
5432 <div v-if="handleGeneratingPageList()?.length > 1 && (!shouldShowContentSearch() || resultsPage.shouldShowSearchProducts)"> 5433 <div 5434 v-if="shouldRenderDefaultPagination()" 5435 class="rebuy-smart-search-results-page__pagination rebuy-smart-search-results-page-sidebar__pagination-section" 5436 v-bind:class="shouldDisplayAmountPerPage() ? 'rebuy-smart-search-results-page__range' : ''" 5437 > 5438 5439 <!--- Range Selection --> 5440 <div v-if="shouldDisplayAmountPerPage()" class="rebuy-range-selection"> 5441 <label 5442 class="rebuy-range-selection-label" 5443 v-bind:class="isAmountPerPageSelectionDisabled() && 'rebuy-range-selection-disabled'" 5444 > 5445 Per page 5446 </label> 5447 <select 5448 title="Select products per page" 5449 id="rebuy-smart-search-results-per-page-select" 5450 class="rebuy-select" 5451 v-bind:class="isAmountPerPageSelectionDisabled() && 'rebuy-range-selection-disabled'" 5452 aria-label="products per page" 5453 v-model="resultsPage.searchQuery.pageSize" 5454 v-on:change="handleUpdatePaginationRange($event.target.value)" 5455 v-bind:disabled="isAmountPerPageSelectionDisabled()" 5456 > 5457 <option 5458 v-for="productsPerPage in pageRangeSelection()" 5459 v-bind:value="productsPerPage.value" 5460 > 5461 {{productsPerPage.value}} 5462 </option> 5463 </select> 5464 </div> 5465 5466 <!--- Page Selection --> 5467 <ul 5468 v-if="handleGeneratingPageList()?.length > 1" 5469 class="rebuy-smart-search-results-page__pagination rebuy-smart-search-results-page-sidebar__pagination" 5470 > 5471 <li class="rebuy-smart-search-results-page__pagination-label"> 5472 <button 5473 v-bind:disabled="resultsPage?.isLoadingSearchTerm" 5474 v-on:click="handleUpdatingPageCount('decrement')" 5475 class="rebuy-smart-search-results-page__pagination-page rebuy-smart-search-results-page__pagination-arrow" 5476 v-bind:class="{ 5477 'rebuy-smart-search-results-page__pagination-arrow--disabled': parseInt(resultsPage.searchQuery.currentPage) === 1 5478 }" 5479 > 5480 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"> 5481 <path d="M15.7049 7.41L14.2949 6L8.29492 12L14.2949 18L15.7049 16.59L11.1249 12L15.7049 7.41Z" fill="currentColor"/> 5482 </svg> 5483 </button> 5484 </li> 5485 5486 <li 5487 v-for="(pageNumber, index) in handleGeneratingPageList()" 5488 :key="pageNumber + '-pagination-' + index" 5489 class="rebuy-smart-search-results-page__pagination-label" 5490 v-bind:class="[parseInt(pageNumber) === parseInt(resultsPage.searchQuery.currentPage) ? 'active' : '']" 5491 > 5492 <button 5493 v-on:click="handleUpdatingPageCount('manual', pageNumber)" 5494 @keydown="(e) =>
5494 handleKeyboardSubmitPrevent(e)" 5495 @keyup="(e) => handleKeyboardSubmit(e, () => { handleUpdatingPageCount('manual', pageNumber); })" 5496 class="rebuy-smart-search-results-page__pagination-page" 5497 v-bind:disabled="resultsPage?.isLoadingSearchTerm" 5498 > 5499 5500 <span v-if="pageNumber"> 5501 {{ pageNumber }} 5502 </span> 5503 5504 <span 5505 v-if="!pageNumber" 5506 class="rebuy-smart-search-results-page__pagination-icon--disabled" 5507 > 5508 <rebuy-icon name="more-horizontal" class="rebuy-button-icon"></rebuy-icon> 5509 </span> 5510 </button> 5511 </li> 5512 5513 <li class="rebuy-smart-search-results-page__pagination-label"> 5514 <button 5515 v-bind:disabled="resultsPage?.isLoadingSearchTerm" 5516 v-on:click="handleUpdatingPageCount('increment')" 5517 class="rebuy-smart-search-results-page__pagination-page rebuy-smart-search-results-page__pagination-arrow" 5518 v-bind:class="{ 5519 'rebuy-smart-search-results-page__pagination-arrow--disabled': parseInt(resultsPage.searchQuery.currentPage) === parseInt(resultsPage.searchResultsHeaderMetaData?.['search-page-total']) 5520 }" 5521 > 5522 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"> 5523 <path d="M9.70492 6L8.29492 7.41L12.8749 12L8.29492 16.59L9.70492 18L15.7049 12L9.70492 6Z" fill="currentColor"/> 5524 </svg> 5525 </button> 5526 </li> 5527 </ul> 5528 </div> 5529 5530 <!--- Load More button --> 5531 <div v-if="shouldRenderLoadMore()" class="rebuy-smart-search-results-page__continuous-scroll"> 5532 <button 5533 v-if="!hasReachedLastPage()" 5534 v-on:click="handleUpdatingPageCount('continuous')" 5535 class="rebuy-button rebuy-smart-search-results-page__continuous-scroll-button" 5536 v-bind:disabled="resultsPage?.isLoadingSearchTerm" 5537 > 5538 {{ getLoadMoreText() }} 5539 </button> 5540 </div> 5541 5542 <!--- Continuous Scroll loading spinner --> 5543 <div v-if="shouldRenderContinuousScroll()" class="rebuy-smart-search-results-page__continuous-scroll"> 5544 <div v-if="resultsPage?.isLoadingSearchTerm" class="rebuy-smart-search-results-page__continuous-scroll-loader"> 5545 <span> </span> 5546 </div> 5547 </div> 5548 5549 </div> 5550 <!--- End Pagination --> 5551 </div> 5552 <!--- End Results Section --> 5553 5554 <div v-if="shouldShowPoweredByRebuy()" class="powered-by-rebuy"> 5555 <a v-bind:href="'https://rebuyengine.com/?shop=' + shop()" target="_blank" rel="noopener"> 5556 Powered by Rebuy 5557 </a> 5558 </div> 5559 </div> 5560 </div> 5561</script>
5561 5562 5563 5564 5565 <style> .shopify-policy__container h1 {font-family: "F37 Ginger Soft", system-ui, sans-serif !important; color: #1a1a1a !important;} .shopify-policy__container {padding: 40px 16px !important;} .shopify-policy__container .shopify-policy__title {margin-bottom: 24px !important;} </style> 5566<div id="shopify-block-AQTFVVHpnRTIyeFBzR__9431293036029666034" class="shopify-block shopify-app-block">
5566<script veeper-setting> 5567 var cbex ={"discount_type":"Automatic","special_discount":[],"storefront":"0.0","settings":{"is_show":false,"placement":60,"button_color":"#ffffff","button_background_color":"#000000","is_cart_page_show":true,"is_product_page_show":true,"is_home_page_show":true},"block":{"show_cart":false,"cart_bubble":"#cart-icon-bubble","product":{"regular":".price__regular .price-item.price-item--regular, .product-block--price .product__price--compare","sale":".price__sale .price-item.price-item--sale, .product-block--price .on-sale, .product-block--price [data-product-price]","compare":".price__sale .price-item.price-item--regular, .product-block--price .product__price-savings","save":"","percent":""},"collection":{"grid":".card__content .card__information","regular":".price__regular .price-item.price-item--regular, .grid-product__price .grid-product__price--original","sale":".price__sale .price-item.price-item--sale, .grid-product__price .grid-product__price--sale","compare":".price__sale .price-item.price-item--regular","save":"","percent":""},"cart":{"cart":"","item":"","price":".cart-item .cart-item__details .cart-item__discounted-prices, .cart-item .cart-item__details div.product-option, .cart__price [data-cart-item-regular-price-group] [data-cart-item-regular-price]","total":".cart-item .cart-item__totals .cart-item__discounted-prices,cart-item .cart-item__totals.small-hide .price.price-end, .cart__final-price [data-cart-item-final-price-group] [data-cart-item-final-price]","subtotal":".totals .totals__subtotal-value, .cart-subtotal__price[data-cart-subtotal]"},"drawer":{"cart":"","item":"","price":".cart-item .cart-item__details .cart-item__discounted-prices, .cart-item .cart-item__details div.product-option, .cart__price [data-cart-item-regular-price-group] [data-cart-item-regular-price]","total":".cart-item .cart-item__totals .cart-item__discounted-prices, .cart-item .cart-item__totals .price.price--end, .cart__final-price [data-cart-item-final-price-group] [data-cart-item-final-price]","subtotal":".totals .totals__subtotal-value, .cart-subtotal__price[data-cart-subtotal]"}},"ext_id":"5163463-01a014b6-bd8a-7fdf-a864-a28d823b0695"}; 5568 const blocker ={"pouch":true,"honey":true,"piggy":true,"cently":true,"karma":true,"rakuten":true,"coupert":true,"klarna":true,"checkmate":true,"hotukdeals":true,"retailmenot":true,"capitalone":true,"vouchercodes":true,"simplycodes":true,"slickdeals":true,"befrugal":true,"couponbirds":true,"ibotta":true,"swagbutton":true,"mino":true,"pie":true,"topcashback":true,"cashrewards":true,"fatcoupon":true,"moolah":true,"dealdrop":true,"bestprice":true,"couponbind":true,"dontpay":true,"shopmail":true,"mojo":true,"codescouk":true,"cashback":true,"hoopla":true,"savings":true,"dealmela":true,"coupongini":true,"revounts":true,"offersolve":true,"shoppsiemoney":true,"oohcoupons":true,"rubyshopsmarter":true,"dealcatcher":true,"couponcabin":true,"rebates":true,"cashbackeasy":true,"edge":true,"lovedeals":true,"couponuts":true,"savvy":true,"coupertpure":true,"askmeoffers":true,"dealdazzle":true,"is_coupon_blocker":true}; 5569 5570 var ext_id = cbex?.ext_id ? cbex.ext_id : ''; 5571 5572</script>
vendor: 2 bytes, line 5572
5572
5573<script async src="https://cdn.shopify.com/extensions/01a014b6-bd8a-7981-904f-24286eef92ed/veeper-stop-coupon-leaks-669/assets/listener.js" defer></script>
5573 5574 5575</div><div id="shopify-block-ATzdJWHhyNmRuTEpFd__10312807297210203588" class="shopify-block shopify-app-block"> 5576 5577 5578</div>
5578<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
5578 5579</body> 5580</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.