1<!doctype html><html class="no-js" lang="en" dir="ltr"> 2<head>
2<script data-source-attribution="shopify.event_observer.bootstrap"> 3(function(){let e=navigator,t=`prototype`,n=`sendBeacon`,r=e[n],i=fetch,a=XMLHttpRequest[t],{open:o,send:s}=a,c=`EventListener`,l=`add${c}`,u=`remove${c}`,d=EventTarget[t],f=d[l],p=d[u],m=e=>Error((e=document.currentScript)&&[e?.src,e?.id||e?.dataset?.sourceAttribution]),h=(e=[],t=0)=>(e.p=n=>e[t++%1e3]=n,[e,t=>(e.forEach(e.p=t),e.length=0)]),[g,_]=h(),[v,y]=h(),b,x=new WeakMap,S=e=>e&&g.p([e,b||[m()]]);d[l]=function(e,t,n){let r=this,i=t?.handleEvent||t,a=x.get(t),o=m();i?.call&&!a&&x.set(t,a=function(e){b=[o,e.type];try{i.call(t==i?this:t,e)}finally{b=null}}),v.p([e,o,a,r?.tagName||r+``,r?.id]),f.call(r,e,a||t,n)},d[u]=function(e,t,n){p.call(this,e,x.get(t)||t,n)},a.open=function(e,t){x.set(this,[t+``,e]),o.apply(this,arguments)},a.send=function(e){S(x.get(this)),s.call(this,e)},fetch=(e,t)=>(S([(e?.url||e)+``,t?.method]),i(e,t)),e[n]=(t,n)=>(S([t+``,``]),r.call(e,t,n)),setTimeout(()=>import("//sparxhockey.com/cdn/shopifycloud/storefront/assets/storefront/event_observer_reporter-ed358274.js").then(e=>e.$(_,y,f,i,`9327770`)))})(); 4//# sourceURL=event-observer-collector.js 5</script>
5 6
7<script src="//sparxhockey.com/cdn/shop/files/pandectes-rules.js?v=5929571786892990147"></script>
7 8 <!-- Start of Shoplift scripts --> 9<!-- 2026-05-07T22:45:33.8819710Z --> 10<style>.shoplift-hide { opacity: 0 !important; }</style> 11<style id="sl-preview-bar-hide">#preview-bar-iframe, #PBarNextFrameWrapper { display: none !important; }</style>
12<script type="text/javascript">(function(rootPath, template, themeRole, themeId, isThemePreview){ /* Generated on 2026-09-24T19:48:26.2646990Z */(function(){"use strict";var te=document.createElement("style");te.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(te);var fe=" daum[ /]| deusu/|(?:^|[^g])news(?!sapphire)|(?<! channel/|google/)google(?!(?:wv|app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!cam)scan|(?<!lib)http|24x
127|;\\s\\w+;$|@[a-z][\\w-]+\\.|\\(\\)|\\.com\\b|\\b\\w+/1\\.0;|\\bbw/|\\bdlc\\b|\\bort/|\\bperl\\b|\\btime/|\\||^[<\\(;]|^[\\w \\.\\-\\(?:\\):%]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[\\w\\-]+/[\\w]+$|^[^ ]{50,}$|^\\d+\\b|^\\w*search\\b|^\\w+/[\\w\\(\\)]*$|^\\w+/\\d\\.\\d\\s\\([\\w@]+\\)$|^active|^ad muncher|^amaya|^apache/|^avsdevicesdk/|^azure|^biglotron|^blackbox exporter|^bot|^clamav[ /]|^claude-code/|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^email|^exodusmovement|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^igetter/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d\\s[\\w\\.-]+$|^mozilla/\\d\\.\\d\\s\\((?:compatible;)?(?:\\s?[\\w\\d-.]+\\/\\d+\\.\\d+)?\\)$|^navermailapp|^netsurf|^offline|^openai/|^owler|^php|^postman|^ps_daily/|^python|^rank|^read|^reed|^remove\\.bg/|^rest|^rss|^snapchat|^sora |^space bison|^stape/|^svn|^swcd |^taringa|^thumbor/|^track|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|abuse|advisor|agent\\b|analyzer|archive|ask jeeves/teoma|attracta|audit|bluecoat drtr|browsex|burpcollaborator|capture|catch|check\\b|checker|chrome-lighthouse|chromeframe|classifier|cloudflare|collapsify\\b|convertify|cookiehubverify/|crawl|cursor/|cypress/|dareboost|datanyze|dejaclick|detect|discovery|dmbrowser|download|exaleadcloudview|feed|firephp|foregenix|functionize|grab|hardenize\\b|headless|hotjar|httrack|hubspot marketing grader|ibisbrowser|infrawatch|insight|inspect|iplabel|java(?!;)|library|linkcheck|linktiger|mail\\.ru/|manager|manus-user/|marketgoo/|measure|monitor\\b|neustar wpm|node\\b|nutch|offbyone|openvas|optimize|pageburst|pagespeed|parser|phantomjs|pingdom|playwright|powermarks|preview|productfinder|prospectingstudio|proxy|ptst[ /]\\d|radar|readable/|retriever|rexx;|rigor|rss\\b|scrape|securityheaders|selenium|server|silktide|sindup/|sogou|sparkler/|speedcurve|spider|splash|statuscake|supercleaner|synapse|synthetic|testlocally|tools|torrent|transcoder|url|validator|virtuoso|wappalyzer|watchtowr|webglance|webkit2png|whatcms/|xtate/",ge=/bot|crawl|http|lighthouse|scan|search|spider/i,z;function me(){if(z instanceof RegExp)return z;try{z=new RegExp(fe,"i")}catch{z=ge}return z}var ye=a=>typeof a=="string"&&a!=="";function ve(a){return ye(a)&&me().test(a)}var we=ve;class X{timestamp;constructor(){this.timestamp=new Date}}class be extends X{type;testId;hypothesisId;constructor(e,t,i){super(),this.type=3,this.testId=e,this.hypothesisId=t,this.timestamp=i}}class Se extends X{type;path;constructor(e){super(),this.type=4,this.path=e}}class Ce extends X{type;cart;constructor(e){super(),this.type=5,this.cart=e}}class ie extends Error{isBot;constructor(){super(),this.isBot=!0}}function Te(a,e,t){for(const i of e.selectors){const s=a.querySelectorAll(i.cssSelector);for(let r=0;r<s.length;r++)t(e.testId,e.hypothesisId)}re(a,e,(i,s,r,o,n)=>n(s,r),t)}function U(a,e,t){for(const i of e.selectors)ne(a,e.testId,e.hypothesisId,i,t??(()=>{}));re(a,e,ne,t??(()=>{}))}function se(a){return a.urlPatterns.reduce((e,t)=>{switch(t.operator){case"contains":return e+`.*${t}.*`;case"endsWith":return e+`.*${t}`;case"startsWith":return e+`${t}.*`}},"")}function re(a,e,t,i){new MutationObserver(()=>{for(const r of e.selectors)t(a,e.testId,e.hypothesisId,r,i)}).observe(a.documentElement,{childList:!0,subtree:!0})}function ne(a,e,t,i,s){const r=a.querySelectorAll(i.cssSelector);for(let o=0;o<r.length;o++){let n=r.item(o);if(n instanceof HTMLElement&&n.dataset.shoplift!==""){n.dataset.shoplift="";for(const l of i.actions.sort(Re))n=Ie(a,i.cssSelector,n,l)}}return r.length>0&&s?(s(e,t),!0):!1}function Ie(a,e,t,i){switch(i.type){case"innerHtml":t.innerHTML=i.value;break;case"attribute":Pe(t,i.scope,i.value);break;case"css":Ae(a,e,i.value);break;case"js":ke(a,t,i);break;case"copy":return Ee(t);case"remove":xe(t);break;case"move":_e(t,parseInt(i.value));break}return t}function Pe(a,e,t){a.setAttribute(e,t)}function Ae(a,e,t){const i=a.createElement("style");i.innerHTML=`${e} { ${t} }`,a.getElementsByTagName("head")[0]?.appendChild(i)}function ke(a,e,t){Function("document","element",`"use strict"; ${t.value}`)(a,e)}function Ee(a){const e=a.cloneNode(!0);if(!a.parentNode)throw"Can't copy node outside of DOM";return a.parentNode.insertBefore(e,a.nextSibling),e}function xe(a){a.remove()}function _e(a,e){if(e===0)return;const t=Array.prototype.slice.call(a.parentElement.children).indexOf(a),i=Math.min(Math.max(t+e,0),a.parentElement.children.length-1);a.parentElement.children.item(i).insertAdjacentElement(e>0?"afterend":"beforebegin",a)}function Re(a,e){return oe(a)-oe(e)}function oe(a){return a.type==="copy"||a.type==="remove"?0:1}
12const M={Template:0,UrlRedirect:2,Script:3,Price:5},De="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",Ve="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%200L7.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 Oe(a){let e=a.replace(/-/g,"+").replace(/_/g,"/");for(;e.length%4;)e+="=";const t=atob(e),i=Uint8Array.from(t,o=>
12o.charCodeAt(0)),s=new Blob([i]).stream().pipeThrough(new DecompressionStream("gzip")),r=await new Response(s).text();return JSON.parse(r)}function F(a,e){return typeof e=="string"&&/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+(?:Z|[+-]\d+)/.test(e)?new Date(e):e}function ee(a,e){return e}function q(a,e=!1,t=!1,i=","){const s=a/100;if(t){const o=Math.round(s).toLocaleString("en-US");return i!==","?o.replace(/,/g,i):o}else{const r=e?",":".",o=s.toFixed(2).split("."),n=parseInt(o[0],10),l=o[1]??"00",c=n.toLocaleString("en-US");return i!==","?`${c.replace(/,/g,i)}${r}${l}`:e?`${c.replace(/,/g,".")}${r}${l}`:`${c}${r}${l}`}}function H(a,e,t,i){const s=e.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} ${t}`:s}function ae(a){return a.replace(/[^\d.,\s-]/g,"").trim()}function j(a){const e=new Map;for(const[t,i,s]of a.variants)e.set(t,{priceInCents:i,compareAtPriceInCents:s});return e}function Le(a,e,t,i){const{priceInCents:s,compareAtPriceInCents:r}=t,{moneyFormat:o,currency:n,currencyCodeEnabled:l}=i;if(a.getAttribute("data-sl-attribute-p")===e)a.innerHTML=H(s,o,n,l);else if(a.getAttribute("data-sl-attribute-cap")===e)r<=0||r<=s?a.remove():a.innerHTML=H(r,o,n,l);else if(a.getAttribute("data-sl-attribute-discount")===e&&!(r<=0||r<=s)){const d=Math.round((r-s)/r*100),u=ae(H(r-s,o,n,!1)),h=a.getAttribute("data-sl-format")||"percent";h==="percent"?a.textContent=`-${d}%`:h==="amount"?a.textContent=`-${u}`:h==="both"&&(a.textContent=`-${d}% (-${u})`)}}function $e(a){const e=[],t={id:"url-pattern",operator:"contains",value:"/"};for(const[i,s,r]of a.variants){e.push({id:`p-${i}`,cssSelector:`[data-sl-attribute-p="${i}"]`,urlPatterns:[t],actions:[{id:`p-action-${i}`,type:"innerHtml",scope:"price",value:H(s,a.moneyFormat,a.currency,a.currencyCodeEnabled)}]});const o=r<=0||r<=s;if(e.push({id:`cap-${i}`,cssSelector:`[data-sl-attribute-cap="${i}"]`,urlPatterns:[t],actions:[{id:`cap-action-${i}`,type:o?"remove":"innerHtml",scope:"compare-at-price",value:o?"":H(r,a.moneyFormat,a.currency,a.currencyCodeEnabled)}]}),!o&&r>s){const n=Math.round((r-s)/r*100),l=ae(H(r-s,a.moneyFormat,a.currency,!1));e.push({id:`d-${i}`,cssSelector:`[data-sl-attribute-discount="${i}"]`,urlPatterns:[t],actions:[{id:`d-action-${i}`,type:"js",scope:null,value:`var format = element.getAttribute('data-sl-format') || 'percent'; if (format === 'percent') { element.textContent = '-${n}%'; } else if (format === 'amount') { element.textContent = '-${l}'; } else if (format === 'both') { element.textContent = '-${n}% (-${l})'; }`}]})}}return e}const Me=a=>{let e=5381;for(let t=0;t<a.length;t++)e=(e*33^a.charCodeAt(t))>>>0;return e.toString(36)},qe=()=>Math.random().toString(36).slice(2,10)+Date.now().toString(36).slice(-4),He=a=>btoa(JSON.stringify(a)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""),K=a=>a.replace(/#slr-[a-z0-9]+$/,""),tt="modulepreload",it=function(a){return"/"+a},st={},Ne=function(e,t,i){let s=Promise.resolve();function r(o){const n=new Event("vite:preloadError",{cancelable:!0});if(n.payload=o,window.dispatchEvent(n),!n.defaultPrevented)throw o}return s.then(o=>{for(const n of o||[])n.status==="rejected"&&r(n.reason);return e().catch(r)})};function le(a,e,t){const i=t?a.plans.filter(c=>!c.variantId||c.variantId===t):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 o=e?s:r,n=e?r:s;if(t)for(const c of a.plans)for(const d of[c.existingShopifyPlanId,c.createdShopifyPlanId])d&&!o.includes(d)&&!n.includes(d)&&n.push(d);const l={};for(let c=0;c<n.length;c++){const d=n[c],u=o[c];d&&u&&(l[d]=u)}return{showPlanIds:o,hidePlanIds:n,swapMap:l}}function ce(a,e,t){const i=e?a.plans.find(r=>r.variantId===e):void 0;if(i)return i.direction;if(t){const r=a.plans.find(o=>o.productId===t);if(r)return r.direction}return a.plans.find(r=>!r.variantId)?.direction??null}function J(a,e){const t=e?a.plans.filter(r=>!r.productId||r.productId===e):a.plans,i={};for(const r of t)i[r.existingShopifyPlanId]=r.existingDiscountAmount,i[r.createdShopifyPlanId]=r.existingDiscountAmount;
12const s=Math.max(...Object.values(i),0);return{discountMap:i,maxDiscount:s}}function W(a){const e=document.querySelector('form[action*="/cart/add"] input[name="product-id"]')?.value;if(e)return e;if(a){for(const r of Array.from(document.querySelectorAll("[data-sl-attribute-p]"))){const o=r.getAttribute("data-sl-attribute-p");if(!o)continue;const n=a.variants.find(l=>l[0]===o);if(n?.[3])return n[3]}const s=document.querySelector('form[action*="/cart/add"] input[name="id"]')?.value;if(s){const r=a.variants.find(o=>o[0]===s);if(r?.[3])return r[3]}}const t=window,i=t.ShopifyAnalytics?.meta?.product?.id??t.meta?.product?.id;return i!=null?String(i):null}function D(a,e){return a.widget.selectors[e]??[]}function N(a,e){return a.replace(/[\d.]+%/,`${e}%`)}function $(a,e){const t=document.createTreeWalker(a,NodeFilter.SHOW_TEXT);let i=t.nextNode();for(;i;){if(i.nodeValue!==null){const s=e(i.nodeValue);if(s!==i.nodeValue){i.nodeValue=s;return}}i=t.nextNode()}}function de(a,e){return a===null?!1:a==="decrease"?!e:e}async function Ue(a){if(a.subscriptionSwapDone)return;const e=a.getActiveAssignment();if(!e)return;const t=a.getHypothesis(e.hypothesisId);if(!t?.subscriptionData)return;a.subscriptionSwapDone=!0;const i=t.subscriptionData,s=t.isControl,r=[...new Set(i.plans.map(d=>d.direction))].join(",");a.log(`[SUB-SWAP] ${s?"A":"B"} side, directions=${r}`);const o=i.plans.some(d=>d.variantId);let n=!1,l=!1;function c(){if(!l){l=!0;try{const d=o?document.querySelector("select[name='id'], input[name='id']")?.value:void 0,{showPlanIds:u,hidePlanIds:h,swapMap:p}=le(i,s,d);a.swapMap=p;const b=D(i,"widgetParent"),E=D(i,"subscriptionPlans"),S=D(i,"subscriptionInput");if(!b.length||!E.length||!S.length)return;const C=document.querySelector(b[0].selector);if(!C?.shadowRoot)return;const _=C.shadowRoot.querySelector(E[0].selector);if(!_?.shadowRoot)return;const T=S[0].selector;let m=null;if(i.widget.widgetType==="buttons"||i.widget.widgetType==="radio"){const y=Array.from(_.shadowRoot.querySelectorAll(T));if(!y.length)return;for(const v of y){const g=v.closest("label");g&&(u.includes(v.value)?g.style.display="":h.includes(v.value)&&(g.style.display="none"))}const w=y.some(v=>u.includes(v.value)&&v.checked),I=y.some(v=>h.includes(v.value)&&v.checked);if((w||I)&&(n=!1),!w&&!n){n=!0;for(const v of y)if(u.includes(v.value)){v.closest("label")?.click(),v.dispatchEvent(new Event("change",{bubbles:!0}));break}}const f=y.find(v=>v.checked);m=f&&u.includes(f.value)?f.value:u[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(I=>u.includes(I.value));w&&(y.value=w.value,y.dispatchEvent(new Event("change",{bubbles:!0})))}m=u.includes(y.value)?y.value:u[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}}}if(a.subscriptionHideWrongPlans=c,a.swapMap=le(i,s).swapMap,c(),o){const d=document.querySelector("select[name='id'], input[name='id']");d&&d.addEventListener("change",c)}}function B(a){const e=D(a,"widgetParent");return e.length?document.querySelector(e[0].selector)?.shadowRoot??null:null}function Y(a,e){const t=D(a,"subscriptionPlans");return t.length?e.querySelector(t[0].selector)?.shadowRoot??null:null}function Z(a,e){const t=new URLSearchParams(window.location.search).get("variant");if(t)return t;{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,e){return H(a,e.moneyFormat,e.currency,e.currencyCodeEnabled)}function Fe({originalFetch:a,swapMap:e,slptValue:t,getSelectedPlanId:i,log:s}){if(window.fetch.__shoplift_intercepted)return s("[SUB-INTERCEPT] already installed â skipping"),()=>{};function r(n){if(i){const l=i();if(l)return e[l]??l}return e[n]??n}const o=function(n,l){if((typeof n=="string"?n:n instanceof URL?n.href:n.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==="")&&t&&l.body.set("properties[_slpt]",t)}
12else if(typeof l.body=="string"){const d=JSON.parse(l.body);if(d.items)for(const u of d.items){const h=String(u.selling_plan??"");h?u.selling_plan=r(h):!u.selling_plan&&t&&(u.properties||(u.properties={}),u.properties._slpt=t)}else if(d.id){const u=String(d.selling_plan??"");u?d.selling_plan=r(u):!d.selling_plan&&t&&(d.properties||(d.properties={}),d.properties._slpt=t)}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,n,l)};return o.__shoplift_intercepted=!0,window.fetch=o,function(){window.fetch===o&&(window.fetch=a)}}function Be({log:a}){if(window.fetch.__shoplift_intercepted)return a("[SUB-PREVIEW-BLOCK] already installed â skipping"),()=>{};const e=window.fetch,t=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"}}))):e.call(window,i,s)};return t.__shoplift_intercepted=!0,window.fetch=t,function(){window.fetch===t&&(window.fetch=e)}}function pe({data:a,runUpdates:e,debounceMs:t=150}){let i=null;function s(){i&&clearTimeout(i),e(),i=setTimeout(e,t)}let r=null;const o=[],n={childList:!0,subtree:!0,characterData:!0,attributes:!0};function l(h){for(const p of o)p.disconnect();o.length=0;for(const p of Array.from(h.querySelectorAll("*")))if(p.shadowRoot){const b=new MutationObserver(s);b.observe(p.shadowRoot,n),o.push(b)}}function c(){const h=B(a);return h?(r&&r.disconnect(),l(h),r=new MutationObserver(p=>{p.some(b=>b.type==="childList"&&b.addedNodes.length>0)&&l(h),s()}),r.observe(h,n),!0):!1}const d=document.body||document.documentElement,u=new MutationObserver(()=>{c()&&s()});return u.observe(d,{childList:!0,subtree:!0}),c()&&s(),e(),function(){i&&(clearTimeout(i),i=null),u.disconnect(),r&&(r.disconnect(),r=null);for(const p of o)p.disconnect();o.length=0}}async function ze(a){if(a.subscriptionPriceDone)return;const e=a.getActiveAssignment(),t=e?a.getHypothesis(e.hypothesisId):void 0,i=t?.subscriptionData?null:a.findActiveSubscriptionTestControl(),s=t?.subscriptionData?t:i?.hypothesis;if(!s?.subscriptionData)return;const r=t?.subscriptionData?e.testId:i.testId;a.subscriptionPriceDone=!0;const o=s.subscriptionData,n=s.isControl,l=s.priceData,c=o.widget.widgetType;let d=W(l),u=J(o,d),h=u.discountMap,p=u.maxDiscount;function b(){const g=W(l);g!==d&&(d=g,u=J(o,d),h=u.discountMap,p=u.maxDiscount,a.log(`[SUB-PRICE] scope refreshed side=${n?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${p}`))}a.log(`[SUB-PRICE] side=${n?"A":"B"}, currentProductId=${d??"n/a"}, maxDiscount=${p}`),a.updatePriceTestHiddenInputs(r,n?"control":"variant",!1);function E(){if(!l)return null;const g=j(l),P=Z(g),A=ce(o,P,d);if(!de(A,n))return null;const k=P?g.get(P):void 0;return k?{formattedVariantPrice:G(k.priceInCents,l),formattedDiscounted:G(k.priceInCents*(1-p/100),l)}:null}Fe({originalFetch:a.fetch,swapMap:a.swapMap??{},slptValue:a.slptValue??void 0,log:a.log,getSelectedPlanId:()=>{const g=B(o);if(!g)return null;const P=Y(o,g);if(!P)return null;const A=D(o,"subscriptionInput"),k=A.length?A[0].selector:'input[name="rc_plan"]';return P.querySelector(`${k}:checked`)?.value??null}});function S(g){const P=D(o,"subscriptionDiscount");for(const A of P)if(A.selector.includes("badge")||A.selector.includes("__badge")){const k=g.querySelector(A.selector);k?.textContent&&!k.textContent.includes(`${p}%`)&&$(k,x=>N(x,p))}}function C(g){const P=E();if(!P)return;const A=D(o,"subscriptionCompareAt");for(const k of A){const x=g.querySelector(k.selector)||g.querySelector(`[part~="${k.selector}"]`);x?.textContent&&!x.textContent.includes(P.formattedVariantPrice)&&$(x,R=>/\d/.test(R)?P.formattedVariantPrice:R)}}function _(g,P){const A=D(o,"subscriptionCompareAt"),k=P===0?"none":"";for(const x of A){const R=g.querySelector(x.selector)||g.querySelector(`[part~="${x.selector}"]`);R&&(k==="none"?R.style.display!=="none"&&(R.style.display="none"):R.style.display==="none"&&(R.style.display=""))}}function T(g){const P=D(o,"subscriptionInput"),A=P.length?P[0].selector:'input[name="rc_plan"]',k=D(o,"subscriptionPlanDiscount"),x=k.length?k[0].selector:".rc-plans-button__discount";for(const R of Array.from(g.querySelectorAll("label"))){const O=R.querySelector(A),V=R.querySelector(x);
12if(O&&V){const L=h[O.value];if(L!==void 0){if(L===0)V.style.display!=="none"&&(V.style.display="none");else if(V.style.display==="none"&&(V.style.display=""),V.textContent){const Q=V.textContent.match(/[\d.]+%/)?.[0];Q&&Q!==`${L}%`&&$(V,et=>N(et,L))}}}}}function m(g){const P=g.querySelector("select");if(P)for(const A of Array.from(P.options)){const k=h[A.value];if(k!==void 0&&A.textContent){const x=A.textContent.match(/[\d.]+%/)?.[0];x&&x!==`${k}%`&&(A.textContent=N(A.textContent,k))}}}function y(g,P){const k=D(o,"subscriptionDiscount").filter(x=>x.selector.includes("benefit")||x.selector==="rc-benefits");for(const x of k){const R=g.querySelector(x.selector);if(R?.shadowRoot){for(const O of Array.from(R.shadowRoot.querySelectorAll("li")))if(O.textContent?.includes("Save")){const V=O;if(P===0)V.style.display!=="none"&&(V.style.display="none");else{V.style.display==="none"&&(V.style.display="");const L=O.textContent.match(/[\d.]+%/)?.[0];L&&L!==`${P}%`&&$(O,Q=>N(Q,P))}}}}}let w=!1;function I(){if(!w){w=!0;try{if(b(),d!==null&&Object.keys(h).length===0)return;const g=B(o);if(!g)return;S(g),l&&C(g);const P=Y(o,g);let A=p;if(P){const k=D(o,"subscriptionInput"),x=k.length?k[0].selector:'input[name="rc_plan"]',R=P.querySelector(`${x}:checked`);if(R){const O=h[R.value];O!==void 0&&(A=O)}c==="buttons"||c==="radio"?T(P):m(P)}_(g,A),y(g,A)}finally{w=!1}}}function f(){const g=E();if(!g)return;const P=B(o);if(!P)return;const A=D(o,"onetimeToggle"),k=A.length?A[0].selector:'input[value="onetime"]';if(!P.querySelector(k)?.checked)return;const R=D(o,"subscriptionPrice");for(const O of R){const V=P.querySelector(O.selector)||P.querySelector(`[part~="${O.selector}"]`);V?.textContent&&!V.textContent.includes(g.formattedDiscounted)&&$(V,L=>/\d/.test(L)?g.formattedDiscounted:L)}}function v(){a.subscriptionHideWrongPlans&&a.subscriptionHideWrongPlans(),I(),a.subscriptionUpdateOneTime&&a.subscriptionUpdateOneTime(),f()}pe({data:o,runUpdates:v})}async function We(a){if(a.subscriptionOneTimeDone)return;const e=a.getActiveAssignment(),t=e?a.getHypothesis(e.hypothesisId):void 0,i=!!(t?.subscriptionData&&t.priceData),s=i?null:a.findActiveSubscriptionTestControl(),r=i?t:s?.hypothesis;if(!r?.subscriptionData||!r.priceData)return;const o=i?e.testId:s.testId;a.subscriptionOneTimeDone=!0;const n=r.subscriptionData,l=r.priceData,c=j(l),d=r.isControl,u=d?"control":"variant";a.slptValue=`${o}:${u}:f`,a.updatePriceTestHiddenInputs(o,u,!1);function h(){const p=B(n);if(!p)return;const b=Z(c);if(!b)return;const E=W(l),S=ce(n,b,E);if(!de(S,d))return;const C=c.get(b);if(!C)return;const _=H(C.priceInCents,l.moneyFormat,l.currency,l.currencyCodeEnabled),T=D(n,"onetimePrice");if(!T.length)return;const m=D(n,"onetimeContainer"),y=m.length?m[0].selector:'[part~="rc-purchase-option__onetime"]',I=p.querySelector(y)??p;for(const f of T){let v=null;try{v=I.querySelector(f.selector)}catch{v=null}v??=I.querySelector(`[part~="${f.selector}"]`),v&&v.textContent&&!v.textContent.includes(_)&&$(v,g=>/\d/.test(g)?_:g)}}a.subscriptionUpdateOneTime=h,h()}async function Ge(a,e){const{subscriptionPreviewRender:t}=await Ne(async()=>{const{subscriptionPreviewRender:i}=await Promise.resolve().then(()=>Xe);return{subscriptionPreviewRender:i}},void 0);return t(a.subscriptionData,a.priceData,a.isControl,e)}function je(a,e){const t=a.widget.selectors.widgetParent??[],i=a.widget.selectors.subscriptionPlans??[],s=a.widget.selectors.subscriptionInput??[];if(!t.length||!i.length||!s.length){e("[SUB-GLOBAL-HIDE] Missing required selectors â skipping");return}const r=t[0].selector,o=i[0].selector,n=s[0].selector;let l=!1,c=null,d=!1;function u(){if(!d){d=!0;try{h()}finally{d=!1}}}function h(){const C=document.querySelector(r);if(!C?.shadowRoot)return;const _=C.shadowRoot.querySelector(o);if(!_?.shadowRoot)return;_.shadowRoot!==c&&(c=_.shadowRoot,l=!1);let T=0;if(a.widget.widgetType==="buttons"||a.widget.widgetType==="radio"){const m=Array.from(_.shadowRoot.querySelectorAll(n));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",T++)}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})),e(`[SUB-GLOBAL-HIDE] Preselected first visible plan input=${f.value}`)}const I=y.find(f=>f.checked)??y[0];
12if(I){const f=Array.from(document.querySelectorAll('input[name="selling_plan"]'));for(const v of f)v.value!==I.value&&(v.value=I.value,e(`[SUB-GLOBAL-HIDE] Mirrored plan id ${I.value} to form selling_plan input`))}}else if(a.widget.widgetType==="dropdown"){const m=_.shadowRoot.querySelector("select");if(!m)return;for(const I of Array.from(m.options))a.planIds.includes(I.value)&&(I.style.display!=="none"&&(I.style.display="none"),I.disabled||(I.disabled=!0),T++);const y=Array.from(m.options).filter(I=>!a.planIds.includes(I.value)),w=y.some(I=>I.value===m.value);y.length>0&&!w&&!l&&(l=!0,m.value=y[0].value,m.dispatchEvent(new Event("change",{bubbles:!0})),e(`[SUB-GLOBAL-HIDE] Preselected first visible option=${y[0].value}`))}T>0&&e(`[SUB-GLOBAL-HIDE] Hidden ${T} B-side plan buttons`)}const p={childList:!0,subtree:!0,characterData:!0};let b=null;function E(C){b?.disconnect(),b=new MutationObserver(()=>u()),b.observe(C,p)}function S(){const C=document.querySelector(r);if(!C?.shadowRoot)return!1;u(),new MutationObserver(()=>{u();const m=C.shadowRoot.querySelector(o);m?.shadowRoot&&E(m.shadowRoot)}).observe(C.shadowRoot,p);const T=C.shadowRoot.querySelector(o);return T?.shadowRoot&&E(T.shadowRoot),!0}if(!S()){e("[SUB-GLOBAL-HIDE] Widget not in DOM yet â waiting via MutationObserver");const C=new MutationObserver(()=>{S()&&C.disconnect()});C.observe(document.body??document.documentElement,{childList:!0,subtree:!0})}}const ue="Limited preview",Ke="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.",Je=5e3;function Ye(){const a=document.createElement("div");a.id="shoplift-preview-subscription-warning";const e=document.createElement("span");e.id="shoplift-preview-subscription-warning__icon",e.setAttribute("aria-hidden","true"),e.textContent="!";const t=document.createElement("span");t.id="shoplift-preview-subscription-warning__label",t.textContent=ue;const i=document.createElement("div");i.id="shoplift-preview-subscription-warning__tooltip",i.setAttribute("role","tooltip"),i.textContent=Ke,a.appendChild(e),a.appendChild(t),a.appendChild(i),a.setAttribute("tabindex","0"),a.setAttribute("aria-describedby",i.id),a.setAttribute("aria-label",ue);let s=null;function r(){s!==null&&(clearTimeout(s),s=null)}function o(){i.classList.add("shoplift-preview-subscription-warning__tooltip--visible")}function n(){i.classList.remove("shoplift-preview-subscription-warning__tooltip--visible")}function l(){o(),r(),s=setTimeout(()=>{n(),s=null},Je)}function c(){r(),o()}function d(){s===null&&n()}a.addEventListener("mouseenter",c),a.addEventListener("mouseleave",d),a.addEventListener("focus",c),a.addEventListener("blur",d);function u(p){try{const b=p.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{}}document.addEventListener("click",u,!0);function h(){r(),document.removeEventListener("click",u,!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 he=!1;class Ze{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";shop;host;eventHost;disableReferrerOverride;legacySessionKey;cssHideClass;testConfigs;inactiveTestConfigs;hiddenSubscriptionPlans;testsFilteredByAudience;sendPageView;shopliftDebug;gaConfig;telemetryEnabled;getCountryTimeout;geoViaShopify;resolvedRegion=null;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);
12urlParams=new URLSearchParams(window.location.search);device;logHistory;activeViewportObservers=new Map;clientIdRetryCount=0;constructor(e,t,i,s,r,o,n,l,c,d,u,h,p,b=!1){this.shop=e,this.host=t,this.eventHost=i,this.disableReferrerOverride=l,this.logHistory=[],this.legacySessionKey=`SHOPLIFT_SESSION_${this.shop}`,this.cssHideClass=s?"shoplift-hide":"",this.testConfigs=u.map(S=>({...S,startAt:new Date(S.startAt),statusHistory:S.statusHistory.map(C=>({...C,createdAt:new Date(C.createdAt)}))})),this.inactiveTestConfigs=h,this.hiddenSubscriptionPlans=p,this.sendPageView=!!r,this.shopliftDebug=o===!0,this.telemetryEnabled=c===!0,this.geoViaShopify=b===!0,this.gaConfig=n!=={"sendEvents":true,"mode":"gtag"}?n:{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 E=this.getDeviceType();this.device=E!=="tablet"?E:"mobile",this.state=this.loadState(),this.shopifyAnalyticsId=this.getShopifyAnalyticsId(),this.testsFilteredByAudience=u.filter(S=>
12S.status=="active"),this.getCountryTimeout=d===1000?1e3:d,window.__slReadCookie=S=>{const C=this.getCookie(S);if(C===null)return null;try{return decodeURIComponent(C)}catch{return C}},this.log("State Loaded",JSON.stringify(this.state))}deriveCategoryFromExistingTests(){if(!this.state.temporary.testCategory&&this.state.essential.visitorTests.length>0){const e=this.state.essential.visitorTests.some(t=>{if(!t.hypothesisId)return!1;const i=this.getHypothesis(t.hypothesisId);return i&&["theme","basicScript","price"].includes(i.type)});this.state.temporary.testCategory=e?"global":"conditional",this.persistTemporaryState(),this.log("Derived test category from existing visitorTests: %s",this.state.temporary.testCategory)}}async 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 o=this.urlParams.get("isShopliftMerchant")==="true";this.log("Setting merchant session to %s",o),this.state.temporary.isMerchant=o,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,we(navigator.userAgent))return;const e=Date.now(),t=!this.state.temporary.lastSeen||e-this.state.temporary.lastSeen>1800*1e3;(!this.state.temporary.entryPage||t)&&(this.state.temporary.entryPage=K(window.location.href)),this.state.temporary.lastSeen=e,this.persistTemporaryState(),window.__slEntryPage=this.state.temporary.entryPage??"";const i=this.state.essential.visitorTests.filter(o=>o.hypothesisId&&+o.createdAt>Date.now()-6e4);if(i.length===0)this.sendDiagnosticTelemetry("page-landed",null);else for(const o of i)this.sendDiagnosticTelemetry("page-landed",o.testId,{hypothesisId:o.hypothesisId,isControl:o.assignedTo==="control",testType:o.testType??"unknown"});if(navigator.userAgent.includes("Chrome/118")){this.log("Random: %o",[Math.random(),Math.random(),Math.random()]);const o=await this.makeRequest({url:`${this.eventHost}/api/v0/events/ip`,method:"get"}).then(n=>n?.json());this.log(`IP: ${o}`),this.makeRequest({url:`${this.eventHost}/api/v0/logs`,method:"post",data:JSON.stringify(this.debugState(),ee)}).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 o=this.state.temporary.originalReferrer;delete this.state.temporary.originalReferrer,this.persistTemporaryState(),Object.defineProperty(document,"referrer",{get:()=>o,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 r=this.state.essential.visitorTests.some(o=>(o.hypothesisId?this.getHypothesis(o.hypothesisId):void 0)?.subscriptionData!=null)||Object.values(this.state.temporary.testReservations??{}).some(o=>this.getHypothesis(o.hypothesisId)?.subscriptionData!=null);this.hiddenSubscriptionPlans&&!r&&(this.log(`[SUB-GLOBAL] Visitor not in subscription test â hiding ${this.hiddenSubscriptionPlans.planIds.length} B-side plans`),je(this.hiddenSubscriptionPlans,o=>this.log(o))),await this.subscriptionSwap(),await this.subscriptionOneTimePrice(),await this.subscriptionPriceChange(),await this.finalize(),console.log("SHOPLIFT SCRIPT INITIALIZED!")}catch(e){if(e instanceof ie)return;throw e}finally{typeof window.shoplift!="object"&&this.setShopliftStub()}}getVariantColor(e){switch(e){case"a":return{text:"#141414",bg:"#E2E2E2"};case"b":return{text:"rgba(255, 255, 255, 1)",bg:"rgba(37, 99, 235, 1)"}}}getDefaultVariantTitle(e){return e.title?e.title:e.type==="price"?e.isControl?"Original prices":"Variant prices":e.isControl?"Original":"Untitled variant "+e.label.toUpperCase()}
12async initPreview(){const e=this.urlParams.get("previewConfig");if(e){this.state.temporary.previewConfig=void 0,this.log("Setting up the preview"),this.log("Found preview config, writing to temporary state");const t=await Oe(e);if(this.state.temporary.previewConfig=t,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 o=await this.makeJsonRequest({method:"get",url:r}).catch(n=>(this.log("Error getting domSelectors",n),null));if(s.variants.forEach(n=>n.domSelectors=o[n.id]?.domSelectors),s.isDraft){const n=`${this.host}/api/dom-selectors/${s.storeId}/${s.testId}/subscription-preview`,l=await this.makeJsonRequest({method:"get",url:n}).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 t=this.state.temporary.previewConfig;if(t.testTypeCategory===M.Template&&this.handleTemplatePreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.UrlRedirect&&this.handleUrlPreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.Script&&this.handleScriptPreview(t)&&this.initPreviewControls(t),t.testTypeCategory===M.Price){const i=await this.handlePricePreview(t);t.isDraft?await this.handleSubscriptionPricePreview(t):await this.handleSubscriptionLivePreview(t),i&&this.initPreviewControls(t)}}}initPreviewControls(e){document.addEventListener("DOMContentLoaded",()=>{const t=e.variants.find(b=>b.id===e.currentVariant),i=t?.label||"a",s=e.variants,r=document.createElement("div");r.id="shoplift-preview-control";const o=document.createElement("div"),n=document.createElement("img");n.src=Ve,n.height=24,n.width=14,o.style.padding="0 16px",o.style.lineHeight="100%",o.appendChild(n),r.appendChild(o);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 u=document.createElement("span");if(u.id="shoplift-preview-variant-title",u.innerText=t?this.getDefaultVariantTitle(t):"Untitled variant "+i.toUpperCase(),c.appendChild(u),s.length>1){const b=document.createElement("img");b.src=De,b.width=12,b.height=12,b.style.height="12px",b.style.width="12px",c.appendChild(b);const E=document.createElement("div");E.className="preview-variant-menu";for(const S of e.variants.filter(C=>C.id!==e.currentVariant)){const C=document.createElement("div");C.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(),C.appendChild(_);const T=document.createElement("span");T.innerText=this.getDefaultVariantTitle(S),C.appendChild(T),C.addEventListener("click",()=>{this.pickVariant(S.id)}),E.appendChild(C)}l.appendChild(E),c.addEventListener("click",()=>{E.className!=="preview-variant-menu preview-variant-menu__visible"?E.classList.add("preview-variant-menu__visible"):E.classList.remove("preview-variant-menu__visible")}),document.addEventListener("click",S=>{S.target instanceof Element&&!c.contains(S.target)&&E.className==="preview-variant-menu preview-variant-menu__visible"&&E.classList.remove("preview-variant-menu__visible")})}else c.style.pointerEvents="none",d.style.margin="0";if(l.appendChild(c),r.appendChild(l),e.hasSubscription){this.subscriptionPreviewWarningCleanup?.();const b=Ye();r.appendChild(b.root),this.subscriptionPreviewWarningCleanup=b.cleanup}const h=document.createElement("div"),p=document.createElement("button");p.id="shoplift-exit-preview-button",p.innerText="Exit",h.appendChild(p),p.addEventListener("click",()=>{this.exitPreview()}),r.appendChild(h),document.body.appendChild(r),requestAnimationFrame(()=>{r.classList.add("visible")})}),this.ensureCartAttributesForExistingPriceTests(!0)}pickVariant(e){if(this.state.temporary.previewConfig){const t=this.state.temporary.previewConfig,i=new URL(window.location.toString());if(t.testTypeCategory===M.UrlRedirect){const s=t.variants.find(r=>r.id===t.currentVariant)?.redirectUrl;if(i.pathname===s){const r=t.variants.find(o=>o.id===e)?.redirectUrl;r&&(i.pathname=r)}}if(t.testTypeCategory===M.Template){const s=t.variants.find(r=>r.id===t.currentVariant)?.pathName;if(s&&i.pathname===s){const r=t.variants.find(o=>o.id===e)?.pathName;r&&r!==s&&(i.pathname=r)}}t.currentVariant=e,this.persistTemporaryState(),this.queueRedirect(i)}}exitPreview(){const e=new URL(window.location.toString());if(this.state.temporary.previewConfig?.testTypeCategory===M.Template&&e.searchParams.delete("view"),this.state.temporary.previewConfig?.testTypeCategory===M.Script&&e.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(e.pathname)&&s&&(e.pathname=s)}this.state.temporary.isMerchant=!1,e.searchParams.delete("isShopliftMerchant"),this.state.temporary.previewConfig=void 0,this.persistTemporaryState(),this.subscriptionPreviewWarningCleanup?.(),this.subscriptionPreviewWarningCleanup=null,this.hidePage(),this.queueRedirect(e)}handleTemplatePreview(e){const t=e.currentVariant,i=e.variants.find(l=>l.id===t);if(!i)return!1;const s=e.variants.find(l=>l.isControl);if(!s)return!1;this.log("Setting up template preview for type",s.type);
12const r=new URL(window.location.toString()),o=r.searchParams.get("view"),n=i.type===s.type;return!n&&!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&&n&&o!==(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)),o!==null&&o!==(i.affix||"__DEFAULT__")&&(r.searchParams.delete("view"),this.hidePage(),this.queueRedirect(r)),!0)}handleUrlPreview(e){const t=e.currentVariant,i=e.variants.find(o=>o.id===t),s=e.variants.find(o=>o.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(e){const t=e.currentVariant,i=e.variants.find(o=>o.id===t);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(e){const t=e.currentVariant,i=e.variants.find(s=>s.id===t);return i?(this.log("Setting up price preview"),i.domSelectors&&i.domSelectors.length>0&&(U(document,{testId:e.testId,hypothesisId:i.id,selectors:i.domSelectors}),this.ensureCartAttributesForExistingPriceTests(!0)),!0):!1}async handleSubscriptionPricePreview(e){const t=e.variants.find(i=>i.id===e.currentVariant);t?.subscriptionData&&(this.log("Setting up subscription price preview"),await Ge({id:t.id,isControl:t.isControl,subscriptionData:t.subscriptionData,priceData:t.priceData},(i,...s)=>this.log(i,...s)))}async handleSubscriptionLivePreview(e){this.testConfigs.find(s=>s.id===e.testId)?.hypotheses.find(s=>s.id===e.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 e=await this.getCartState();e!==null&&this.queueCartUpdate(e),this.pruneStateAndSave(),await this.syncAllEvents()}setShoplift(){this.log("Setting up public API");const t=this.urlParams.get("slVariant")==="true",i=t?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:async s=>{if(this.log("Script checking variant for hypothesis '%s'",s),t)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(n=>n.hypotheses.some(l=>l.id===s));if(!r)return this.log("No test found for hypothesis '%s'",s),!1;const o=this.state.essential.visitorTests.find(n=>n.testId===r.id);return o?(this.log("Active visitor test found",s),o.hypothesisId===s):(await this.manuallySplitVisitor(r),this.testConfigs.some(n=>n.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:o,...n}=s;return n})})}}setShopliftStub(){this.log("Setting up stubbed public API");const t=this.urlParams.get("slVariant")==="true",i=t?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:s=>Promise.resolve(t||s===i),setAnalyticsConsent:()=>Promise.resolve(),getVisitorData:()=>({visitor:null,visitorTests:[]})}}async manuallySplitVisitor(e){this.log("Starting manual split for test '%s'",e.id),await this.handleVisitorTest([e]);const t=this.getReservationForTest(e.id);t&&!t.isRealized&&t.entryCriteriaKey&&(this.log("Realizing manual API reservation for test '%s'",e.id),this.realizeReservationForCriteria(t.entryCriteriaKey)),this.saveState(),this.syncAllEvents()}async handleVisitorTest(e){await this.filterTestsByAudience(this.testConfigs,this.state.analytics.visitor??this.buildBaseVisitor(),this.state.essential.visitorTests),this.pruneStaleVisitorTests(),this.deriveC
12ategoryFromExistingTests(),this.clearStaleReservations();let t=e?e.filter(i=>this.testsFilteredByAudience.some(s=>s.id===i.id)):[...this.testsForUrl(this.testsFilteredByAudience),...this.domTestsForUrl(this.testsFilteredByAudience)];try{if(t.length===0)return this.log("No tests found"),!1;this.log("Checking for existing visitor test on page");const i=this.getCurrentVisitorHypothesis(t);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,u=c.length,h=d+u,p=Math.random()*h;this.state.temporary.testCategory=p<d?"global":"conditional",this.log("Category dice roll: rolled %.2f of %d (global weight: %d, conditional weight: %d), selected '%s'",p,h,d,u,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 o=this.state.temporary.testCategory;if(this.log("Visitor test category: %s",o),o==="global"){const l=this.testsFilteredByAudience.filter(c=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)));for(const c of l)this.markTestAsBlocked(c,"category:global");t=t.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");t=t.filter(c=>!this.isGlobalEntryCriteria(this.getEntryCriteriaKey(c)))}if(t.length===0)return this.log("No tests remaining after category filter"),!1;this.createReservations(t);const n=this.getReservationForCurrentPage();if(n&&!n.isRealized){const l=this.getHypothesis(n.hypothesisId);if(l){l.type!=="price"&&this.realizeReservationForCriteria(n.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 e=this.getDomTestsForCurrentUrl(),t=this.getVisitorDomHypothesis(e);for(const i of e){this.log("Evaluating dom test '%s'",i.id);const s=i.hypotheses.some(p=>p.type==="price");if(this.state.essential.visitorTests.find(p=>p.testId===i.id&&p.isInvalid&&!p.hypothesisId)){if(this.log("Visitor is blocked from test '%s', applying control prices if price test",i.id),s){const p=i.hypotheses.find(b=>b.isControl);p?.priceData&&(this.applyPriceTestWithMapLookup(i.id,p,[p],()=>{this.log("Control prices applied for blocked visitor, no metrics tracked")}),this.updatePriceTestHiddenInputs(i.id,"control",!1))}continue}const o=this.getReservationForTest(i.id);let n=null,l=!1;const c=t.find(p=>i.hypotheses.some(b=>p.id===b.id));if(o)n=this.getHypothesis(o.hypothesisId)??null,this.log("Using reserved hypothesis '%s' for test '%s'",o.hypothesisId,i.id);else if(c)n=c,this.log("Using existing hypothesis assignment for test '%s'",i.id);else if(s){const p=this.visitorActiveTestTypeWithReservations();p?(l=!0,this.log("Visitor already in test type '%s', treating as non-test for price test '%s'",p,i.id)):n=this.pickHypothesis(i)}else n=this.pickHypothesis(i);if(l&&s){const p=i.hypotheses.find(b=>b.isControl);p?.priceData&&(this.log("Applying control prices for non-test visitor on price test '%s' (Map-based)",i.id),this.applyPriceTestWithMapLookup(i.id,p,[p],()=>{this.log("Control prices applied for non-test visitor, no metrics tracked")}
12),this.updatePriceTestHiddenInputs(i.id,"control",!1));continue}if(!n){this.log("Failed to pick hypothesis for test");continue}this.sendDiagnosticTelemetry("assignment",i.id,{hypothesisId:n.id,isControl:n.isControl,testType:n.type});const d=i.bayesianRevision??4,u=n.type==="price",h=d>=5;if(u&&h){if(this.log(`Price test with Map-based lookup (v${d}): ${i.id}`),!n.priceData){this.log("No price data for hypothesis '%s', skipping",n.id);continue}const p=n.isControl?"control":"variant";this.log(`Setting up Map-based price test for ${p} (test: ${i.id})`),this.applyPriceTestWithMapLookup(i.id,n,i.hypotheses,b=>{const E=this.getReservationForTest(b);E&&!E.isRealized&&E.entryCriteriaKey?this.realizeReservationForCriteria(E.entryCriteriaKey):this.queueAddVisitorToTest(b,n),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()});continue}if(u&&!h){this.log(`Price test without viewport tracking (v${d}): ${i.id}`);const p=this.getDomSelectorsForHypothesis(n);if(p.length===0)continue;U(document,{testId:i.id,hypothesisId:n.id,selectors:p},b=>{this.queueAddVisitorToTest(b,n),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()});continue}if(!n.domSelectors||n.domSelectors.length===0){this.log("No selectors found, skipping hypothesis");continue}U(document,{testId:i.id,hypothesisId:n.id,selectors:n.domSelectors},p=>{this.queueAddVisitorToTest(p,n),this.saveState(),this.queuePageView(window.location.pathname),this.syncAllEvents()})}}considerRedirect(e){if(this.log("Considering redirect for hypothesis '%s'",e.id),e.isControl)return this.log("Skipping redirect for control"),!1;if(e.type==="basicScript"||e.type==="manualScript")return this.log("Skipping redirect for script test"),!1;const t=this.state.essential.visitorTests.find(o=>o.hypothesisId===e.id),i=new URL(window.location.toString()),r=new URLSearchParams(window.location.search).get("view");if(e.type==="theme"){if(!(e.themeId===themeId)){if(this.log("Theme id '%s' is not hypothesis theme ID '%s'",e.themeId,themeId),this.isAppProxyPath())return this.log("On App Proxy path, skipping theme redirect to avoid infinite loop"),!1;if(t&&t.themeId!==e.themeId&&(t.themeId===themeId||!this.isThemePreview()))this.log("On old theme, redirecting and updating local visitor"),t.themeId=e.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(e.type!=="dom"&&e.type!=="price"&&e.affix!==template.suffix&&e.affix!==r||e.redirectPath&&!i.pathname.endsWith(e.redirectPath))return this.log("Hiding page to redirect for template test"),this.hidePage(),!0;return this.log("Not redirecting"),!1}redirect(e){if(this.log("Redirecting to hypothesis '%s'",e.id),e.isControl)return;const t=new URL(window.location.toString());if(t.searchParams.delete("view"),e.redirectPath){const n=RegExp("^(/w{2}-w{2})/").exec(t.pathname);if(n&&n.length>1){const l=n[1];t.pathname=`${l}${e.redirectPath}`}else t.pathname=e.redirectPath}else e.type==="theme"?(t.searchParams.set("_ab","0"),t.searchParams.set("_fd","0"),t.searchParams.set("_sc","1"),t.searchParams.set("preview_theme_id",e.themeId.toString())):e.type!=="urlRedirect"&&t.searchParams.set("view",e.affix);const i=this.state.essential.visitorTests.find(n=>n.hypothesisId===e.id)?.testId,s=t.pathname+t.search,r=window.location.pathname+window.location.search,o=K(t.hash);if(i&&s!==r&&!o){const n=qe(),l=He({v:2,t:i,n,fh:Me(window.location.pathname+window.location.search)});t.hash=`slr-${n}`;const c=new Date(Date.now()+3e4).toUTCString();document.cookie=`shoplift_redirect=${l};domain=.${window.location.hostname};path=/;SameSite=Strict;expires=${c}`}s===r&&this.showPage(),this.queueRedirect(t)}async refreshVisitor(e){if(e===null||!this.state.essential.isFirstLoad||!this.testConfigs.some(i=>i.visitorOption!=="all"))return;this.log("Refreshing visitor"),this.hidePage();const t=await this.getVisitor(e);t&&t.id&&this.updateLocalVisitor(t)}buildBaseVisitor(){return{shopifyAnalyticsId:this.shopifyAnalyticsId,device:this.device,country:null,...this.state.essential.initialState}}getInitialState(){const e=this.getUTMValue("utm_source")??"",t=this.getUTMValue("utm_medium")??"",i=this.getUTMValue("utm_campaign")??"",s=this.getUTMValue("utm_content")??"",r=window.document.referrer,o=this.device;return{createdAt:new Date,utmSource:e,utmMedium:t,utmCampaign:i,utmContent:s,referrer:r,device:o}}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(e=>e.isThemeTest&&e.hypothesisId!=null&&this.getHypothesis(e.hypothesisId)&&e.themeId===themeId)?(this.log("On active theme test, remov
12ing theme bar"),this.clearThemeBar(!1,!0,this.state),!1):this.state.essential.visitorTests.some(e=>e.isThemeTest&&e.hypothesisId!=null&&!this.getHypothesis(e.hypothesisId)&&e.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(e=>e.hypotheses.some(t=>t.themeId===themeId))?(this.log("Current theme is an inactive theme test, redirecting to main theme"),this.redirectToMainTheme(),!0):this.testConfigs.some(e=>e.hypotheses.some(t=>t.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 e=new URL(window.location.toString());e.searchParams.set("preview_theme_id",""),this.queueRedirect(e)}testsForUrl(e){const t=new URL(window.location.href),i=this.typeFromTemplate();return e.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&&t.pathname.endsWith(r.redirectPath)||r.type==="basicScript"))&&(s.ignoreTestViewParameterEnforcement||!t.searchParams.has("view")||s.hypotheses.map(r=>r.affix).includes(t.searchParams.get("view")??"")))}domTestsForUrl(e){const t=new URL(window.location.href);return e.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(se(r)).test(K(t.toString())))))}async filterTestsByAudience(e,t,i){const s=[],r=e.some(n=>(n.requiresRegion||this.geoViaShopify&&n.requiresCountry)&&!i.some(l=>l.testId===n.id));this.resolvedRegion===null&&r&&(this.log("Hiding page to wait for Shopify region resolution"),this.hidePage(),await this.waitForResolvedRegion()),window.__slRegion=this.resolvedRegion??"";let o=t.country;this.geoViaShopify?o=this.resolvedRegion?this.resolvedRegion.slice(0,2):o:!o&&e.some(n=>n.requiresCountry&&!i.some(l=>l.testId===n.id))&&(this.log("Hiding page to check geoip"),this.hidePage(),o=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 e){if(this.log("Checking audience for test '%s'",n.id),this.state.essential.visitorTests.some(d=>d.testId===n.id&&d.hypothesisId==null)){console.log(`Skipping blocked test '${n.id}'`);continue}const l=this.visitorCreatedDuringTestActive(n.statusHistory);(i.some(d=>d.testId===n.id&&(n.device==="all"||n.device===t.device&&n.device===this.device))||this.isTargetAudience(n,t,l,o))&&(this.log("Visitor is in audience for test '%s'",n.id),s.push(n))}this.testsFilteredByAudience=s}async waitForResolvedRegion(e=1500,t=50){const i=Date.now();for(;this.resolvedRegion===null&&Date.now()-i<e;)await new Promise(s=>window.setTimeout(s,t))}isTargetAudience(e,t,i,s){const r=this.getChannel(t);return(e.device==="all"||e.device===t.device&&e.device===this.device)&&(e.visitorOption==="all"||e.visitorOption==="new"&&i||e.visitorOption==="returning"&&!i)&&(e.targetAudiences.length===0||e.targetAudiences.reduce((o,n)=>o||n.reduce((l,c)=>l&&c(t,i,r,s),!0),!1))}visitorCreatedDuringTestActive(e){let t="";for(const i of e){if(this.state.analytics.visitor!==null&&this.state.analytics.visitor.createdAt<i.createdAt||this.state.essential.initialState.createdAt<i.createdAt)break;t=i.status}return t==="active"}getDomTestsForCurrentUrl(){return this.domTestsForUrl(this.testsFilteredByAudience)}getCurrentVisitorHypothesis(e){return e.flatMap(t=>t.hypotheses).find(t=>t.type!=="dom"&&t.type!=="price"&&this.state.essential.visitorTests.some(i=>i.hypothesisId===t.id))}getVisitorDomHypothesis(e){return e.flatMap(t=>t.hypotheses).filter(t=>(t.type==="dom"||t.type==="price")&&this.state.essential.visitorTests.some(i=>i.hypothesisId===t.id))}getHypothesis(e){return this.testConfigs.filter(t=>t.hypotheses.some(i=>i.id===e)).map(t=>t.hypotheses.find(i=>i.id===e))[0]}getActiveAssignment(){if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const t=this.state.temporary.previewConfig;return t.currentVariant&&t.testId?{testId:t.testId,hypothesisId:t.currentVariant}:null}const e=this.state.essential.visitorTests.find(t=>t.hypothesisId);return e?.hypothesisId?{testId:e.testId,hypothesisId:e.hypothesisId}:null}findActiveSubscriptionTestControl(){for(const e of this.testConfigs){const t=e.hypotheses.find(i=>i.isControl);if(t?.subscriptionData)return{testId:e.id,hypothesis:t}}return null}getDomSelectorsForHypothesis(e){if(!e)return[];if(e.domSelectors&&e.domSelectors.length>0)return e.domSelectors;if(e.priceData){const t=`${this.priceSelectorsSessionKey}_${e.id}`;try{const s=sessionStorage.getItem(t);if(s){const r=JSON.parse(s);return e.domSelectors=r,this.log("Loaded %d price selectors from cache for hypothesis '%s'",r.length,e.id),r}}catch{}const i=$e(e.priceData);e.domSelectors=i;try{sessionStorage.setItem(t,JSON.stringify(i)),this.log("Generated and cached %d price selectors for hypothesis '%s'",i.length,e.id)}catch{this.log("Generated %d price selectors for hypothesis '%s' (cache unavailable)",i.length,e.id)}return i}return[]}hasThemeTest(e){return e.some(t=>t.hypotheses.some(i=>i.type==="theme"))}hasTestThatIsNotThemeTest(e){return e.some(t=>t.hypotheses.some(i=>i.type!=="theme"&&i.type!=="dom"&&i.type!=="price"))}hasThemeAndOtherTestTypes(e){return this.hasThemeTest(e)&&this.hasTestThatIsNotThemeTest(e)}testIsPaused(e){return e.status==="paused"||e.status==="incompatible"||e.status==="suspended"}visitorActiveTestType(){const e=this.state.essential.visitorTests.filter(t=>this.testConfigs.some(i=>i.hypotheses.some(s=>s.id==t.hypothesisId)));return e.length===0?null:e.some(t=>t.isThemeTest)?"theme":"templateOrUrlRedirect"}getReservationType(e){return e==="price"||this.isTemplateTestType(e)?"deferred":"immediate"}isTemplateTestType(e){return["product","collection","landing","index","cart","search","blog","article","collectionList"].includes(e)}getEntryCriteriaKey(e){const t=e.hypotheses.find(i=>i.isControl);if(!t)return`unknown:${e.id}`;switch(t.type){case"theme":return"global:theme";case"basicScript":return"global:autoApi";case"price":return"global:price";case"manualScript":return`conditional:manualApi:${e.id}`;case"urlRedirect":return`conditional:url:${t.redirectPath||"unknown"}`;default:return`conditional:template:${t.type}`}}isGlobalEntryCriteria(e){return e.startsWith("global:")}groupTestsByEntryCriteria(e){const t=new Map;for(const i of e){const s=this.getEntryCriteriaKey(i),r=t.get(s)||[];r.push(i),t.set(s,r)}return t}doesCurrentPageMatchEntryCriteria(e){if(this.isGlobalEntryCriteria(e))return!0;
12if(e==="conditional:manualApi")return!1;if(e.startsWith("conditional:url:")){const t=e.replace("conditional:url:","");return window.location.pathname.endsWith(t)}if(e.startsWith("conditional:template:")){const t=e.replace("conditional:template:","");return this.typeFromTemplate()===t}return!1}hasActiveReservation(){const e=this.getActiveReservations();return Object.values(e).some(t=>!t.isRealized)}getActiveReservation(){const e=this.getActiveReservations();return Object.values(e).find(t=>!t.isRealized)??null}clearStaleReservations(){const e=this.state.temporary.testReservations;if(!e)return;let t=!1;for(const[i,s]of Object.entries(e)){const r=this.testConfigs.find(n=>n.id===s.testId);if(!r){this.log("Test '%s' no longer in config, clearing reservation for criteria '%s'",s.testId,i),delete e[i],t=!0;continue}if(r.status!=="active"){this.log("Test '%s' status is '%s', clearing reservation for criteria '%s'",s.testId,r.status,i),delete e[i],t=!0;continue}this.testsFilteredByAudience.some(n=>n.id===s.testId)||(this.log("Visitor no longer passes audience for test '%s', clearing reservation for criteria '%s'",s.testId,i),delete e[i],t=!0)}t&&this.persistTemporaryState()}createReservations(e){if(this.state.temporary.testReservations||(this.state.temporary.testReservations={}),this.state.temporary.rolledEntryCriteria||(this.state.temporary.rolledEntryCriteria=[]),this.state.temporary.testCategory==="global"){this.createSingleReservation(e,"global");return}const i=e.filter(n=>this.doesCurrentPageMatchEntryCriteria(this.getEntryCriteriaKey(n))),s=e.filter(n=>!this.doesCurrentPageMatchEntryCriteria(this.getEntryCriteriaKey(n)));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(n=>({id:n.id,title:n.title,criteria:this.getEntryCriteriaKey(n)})));const r=`conditional:current-page:${this.typeFromTemplate()}`;if(i.length>0&&!this.state.temporary.rolledEntryCriteria.includes(r)){this.createSingleReservation(i,r);for(const n of i){const l=this.getEntryCriteriaKey(n);this.state.temporary.rolledEntryCriteria.includes(l)||this.state.temporary.rolledEntryCriteria.push(l)}}const o=this.groupTestsByEntryCriteria(s);for(const[n,l]of o){if(this.state.temporary.rolledEntryCriteria.includes(n)){this.log("Already rolled for criteria '%s', skipping",n);continue}if(l.some(S=>this.state.essential.visitorTests.some(C=>C.testId===S.id))){this.log("Visitor already has VT for criteria '%s', skipping",n),this.state.temporary.rolledEntryCriteria.push(n);continue}const d=[...l].sort((S,C)=>S.id.localeCompare(C.id));this.log("Test dice roll for criteria '%s' - available tests: %o",n,d.map(S=>({id:S.id,title:S.title})));const u=Math.floor(Math.random()*d.length),h=d[u];this.log("Test dice roll: picked index %d of %d, selected test '%s' (%s)",u+1,l.length,h.id,h.title);const p=this.pickHypothesis(h);if(!p){this.log("No hypothesis picked for test '%s'",h.id);continue}this.sendDiagnosticTelemetry("assignment",h.id,{hypothesisId:p.id,isControl:p.isControl,testType:p.type});const b=this.getReservationType(p.type),E={testId:h.id,hypothesisId:p.id,testType:p.type,reservationType:b,isThemeTest:p.type==="theme",themeId:p.themeId,createdAt:new Date,isRealized:!1,entryCriteriaKey:n};this.state.temporary.testReservations[n]=E,this.state.temporary.rolledEntryCriteria.push(n),this.log("Created %s reservation for test '%s' (criteria: %s)",b,h.id,n);for(const S of l)S.id!==h.id&&this.markTestAsBlocked(S,n)}this.persistTemporaryState()}createSingleReservation(e,t){if(this.state.temporary.rolledEntryCriteria.includes(t)){this.log("Already rolled for pool '%s', skipping",t);return}if(e.some(u=>this.state.essential.visitorTests.some(h=>h.testId===u.id&&!h.isInvalid))){this.log("Visitor already has VT for pool '%s', skipping",t),this.state.temporary.rolledEntryCriteria.push(t);return}if(e.length===0){this.log("No tests in pool '%s'",t);return}const s=[...e].sort((u,h)=>u.id.localeCompare(h.id));this.log("Test dice roll for pool '%s' - available tests: %o",t,s.map(u=>({id:u.id,title:u.title,criteria:this.getEntryCriteriaKey(u)})));const r=Math.floor(Math.random()*s.length),o=s[r];this.log("Test dice roll: picked index %d of %d, selected test '%s' (%s)",r,e.length,o.id,o.title);const n=this.pickHypothesis(o);if(!n){this.log("No hypothesis picked for test '%s'",o.id);return}this.sendDiagnosticTelemetry("assignment",o.id,{hypothesisId:n.id,isControl:n.isControl,testType:n.type});const l=this.getReservationType(n.type),c=this.getEntryCriteriaKey(o),d={testId:o.id,hypothesisId:n.id,testType:n.type,reservationType:l,isThemeTest:n.type==="theme",themeId:n.themeId,createdAt:new Date,isRealized:!1,entryCriteriaKey:c};this.state.temporary.testReservations[c]=d,this.state.temporary.rolledEntryCriteria.push(t),this.log("Created %s reservation for test '%s' from pool '%s' (criteria: %s)",l,o.id,t,c);for(const u of e)u.id!==o.id&&this.markTestAsBlocked(u,`pool:${t}`);this.persistTemporaryState()}markTestAsBlocked(e,t){this.state.essential.visitorTests.some(i=>i.testId===e.id)||(this.log("Blocking visitor from test '%s' (reason: %s)",e.id,t),this.state.essential.visitorTests.push({createdAt:new Date,testId:e.id,hypothesisId:null,isThemeTest:e.hypotheses.some(i=>
12i.type==="theme"),shouldSendToGa:!1,isSaved:!0,isInvalid:!0,themeId:void 0}))}realizeReservationForCriteria(e){const t=this.state.temporary.testReservations?.[e];if(!t)return this.log("No reservation found for criteria '%s'",e),!1;if(t.isRealized)return this.log("Reservation already realized for criteria '%s'",e),!1;if(this.state.essential.visitorTests.some(s=>s.testId===t.testId&&!s.isInvalid))return this.log("Visitor already assigned to test '%s'",t.testId),!1;const i=this.getHypothesis(t.hypothesisId);return i?(t.isRealized=!0,this.persistTemporaryState(),this.queueAddVisitorToTest(t.testId,i),this.saveState(),this.log("Realized reservation for test '%s' (criteria: %s)",t.testId,e),!0):(this.log("Hypothesis '%s' not found",t.hypothesisId),!1)}getActiveReservations(){return this.state.temporary.testReservations??{}}getReservationForCurrentPage(){const e=this.getActiveReservations();for(const[t,i]of Object.entries(e)){if(i.isRealized)continue;const s=this.testConfigs.find(r=>r.id===i.testId);if(!(!s||s.status!=="active")&&this.doesCurrentPageMatchEntryCriteria(t))return i}return null}getReservationForTest(e){const t=this.getActiveReservations();return Object.values(t).find(i=>i.testId===e)??null}getReservationTestType(){const e=this.getActiveReservations(),t=Object.values(e);if(t.length===0)return null;for(const i of t)if(i.isThemeTest)return"theme";for(const i of t)if(i.testType==="price")return"price";return t.some(i=>!i.isRealized)?"templateOrUrlRedirect":null}hasPriceTests(e){return e.some(t=>t.hypotheses.some(i=>i.type==="price"))}_priceTestProductIds=null;getPriceTestProductIds(){if(this._priceTestProductIds)return this._priceTestProductIds;const e=new Set;for(const t of this.testConfigs)for(const i of t.hypotheses)if(i.type==="price"){for(const s of i.domSelectors||[]){const r=s.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);r?.[1]&&e.add(r[1])}if(i.priceData?.variants)for(const[s]of i.priceData.variants)e.add(s)}return this._priceTestProductIds=e,this.log("Built price test product ID cache with %d products",e.size),e}isProductInAnyPriceTest(e){return this.getPriceTestProductIds().has(e)}visitorActiveTestTypeWithReservations(){const e=this.getActiveReservations();for(const r of Object.values(e)){if(r.isThemeTest)return"theme";if(r.testType==="price")return"price"}if(Object.values(e).some(r=>!r.isRealized)){if(this.state.temporary.testCategory==="global")for(const o of Object.values(e)){if(o.testType==="theme")return"theme";if(o.testType==="price")return"price";if(o.testType==="basicScript")return"theme"}return"templateOrUrlRedirect"}const i=this.state.essential.visitorTests.filter(r=>!r.isInvalid&&this.testConfigs.some(o=>o.hypotheses.some(n=>n.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 e=this.testConfigs.filter(s=>s.status==="active"&&s.hypotheses.some(r=>r.type==="price"));if(e.length===0)return;const t=this.testsFilteredByAudience.filter(s=>s.hypotheses.some(r=>r.type==="price")),i=e.filter(s=>!t.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),o=this.getDomSelectorsForHypothesis(r);if(o.length===0){this.log("No control selectors for audience-filtered price test '%s'",s.id);continue}const n=new URL(window.location.href);o.some(c=>{try{return new RegExp(se(c)).test(K(n.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:o},()=>{}),this.updatePriceTestHiddenInputs(s.id,"control",!1))}}}pickHypothesis(e){let t=Math.random();const i=e.hypotheses.reduce((r,o)=>r+o.visitorCount,0);return e.hypotheses.sort((r,o)=>r.isControl?o.isControl?0:-1:o.isControl?1:0).reduce((r,o)=>{if(r!==null)return r;const l=e.hypotheses.reduce((c,d)=>c&&d.visitorCount>20,!0)?o.visitorCount/i-o.trafficPercentage:0;return t<=o.trafficPercentage-l?o:(t-=o.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(e){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(e),0),window.setTimeout(()=>{this.syncAllEvents()},2e3)}scheduleRetrySync(){this.clientIdRetryCount>=5||(this.clientIdRetryCount++,window.setTimeout(()=>{this.syncAllEvents()},500))}async syncAllEvents(){const e=async()=>
12{if(this.isSyncing){window.setTimeout(()=>{(async()=>await e())()},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 e()}async syncEvents(){if(!this.state.essential.consentApproved||!this.shopifyAnalyticsId||this.state.analytics.queue.length===0)return;const e=this.state.analytics.queue.length,t=this.state.analytics.queue.splice(0,e);this.log("Syncing %s events",e);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 be(r.testId,r.hypothesisId,r.createdAt)).concat(t)};await this.sendEvents(i);for(const r of this.state.essential.visitorTests.filter(o=>!o.isInvalid&&!o.isSaved&&o.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(o=>!o.isInvalid&&!o.isSaved))r.isSaved=!0,r.savedAt=Date.now()}catch{this.state.analytics.queue.splice(0,0,...t)}finally{this.saveState()}}syncGAEvents(){if(!this.gaConfig.sendEvents){if(he)return;he=!0,this.log("UseGtag is false â skipping GA Events");return}if(this.isSyncingGA){this.log("Already syncing GA - skipping GA events");return}const e=this.state.essential.visitorTests.filter(t=>t.shouldSendToGa);e.length!==0&&(this.isSyncingGA=!0,this.log("Syncing %s GA Events",e.length),Promise.allSettled(e.map(t=>this.sendGAEvent(t))).then(()=>this.log("All gtag events sent")).finally(()=>this.isSyncingGA=!1))}sendGAEvent(e){return new Promise(t=>{this.log("Sending GA Event for test %s, hypothesis %s",e.testId,e.hypothesisId);const i=()=>{this.log("GA acknowledged event for hypothesis %s",e.hypothesisId),e.shouldSendToGa=!1,this.persistEssentialState(),t()},s={exp_variant_string:`SL-${e.testId}-${e.hypothesisId}`};
12this.shopliftDebug&&Object.assign(s,{debug_mode:!0});function r(o,n,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(e){let t;({visitorTests:t,...this.state.analytics.visitor}=e),this.log("updateLocalVisitor - server returned %d tests: %o",t.length,t.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)&&!t.some(o=>o.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 t){const r=this.state.essential.visitorTests.findIndex(n=>n.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 n=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,n?.hypothesisId,s.hypothesisId,n?.isInvalid),s.isInvalid=!1,s.shouldSendToGa=n?.shouldSe
12ndToGa??!1,s.testType=n?.testType,s.assignedTo=n?.assignedTo,s.testTitle=n?.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(e){try{return await this.makeJsonRequest({method:"get",url:`${this.eventHost}/api/v0/visitors/by-key/${this.shop}/${e}`})}catch{return null}}async sendEvents(e){await this.makeRequest({method:"post",url:`${this.eventHost}/api/v0/events`,data:JSON.stringify(e)})}sendDiagnosticTelemetry(e,t,i){if(!this.telemetryEnabled||!navigator.sendBeacon)return;const s=this.state.essential.consentApproved,r=JSON.stringify({shop:this.shop,testId:t,checkpoint:e,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(e){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]===e)return r[1]||null}return null}hidePage(e){this.log("Hiding page"),this.cssHideClass&&!window.document.documentElement.classList.contains(this.cssHideClass)&&(window.document.documentElement.classList.add(this.cssHideClass),e||setTimeout(this.removeAsyncHide(this.cssHideClass),2e3))}showPage(){this.cssHideClass&&this.removeAsyncHide(this.cssHideClass)()}getDeviceType(){function e(){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 )|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}function t(){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 )|
12sy(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 e()?"mobile":t()?"tablet":"desktop"}removeAsyncHide(e){return()=>{e&&window.document.documentElement.classList.remove(e)}}async getCartState(){try{let e=await this.makeJsonRequest({method:"get",url:`${window.location.origin}/cart.js`});return e===null||(e.note===null&&(e=await this.makeJsonRequest({method:"post",url:`${window.location.origin}/cart/update.js`,data:JSON.stringify({note:""})})),e==null)?null:{token:e.token,total_price:e.total_price,total_discount:e.total_discount,currency:e.currency,items_subtotal_price:e.items_subtotal_price,items:e.items.map(t=>({quantity:t.quantity,variant_id:t.variant_id,key:t.key,price:t.price,final_line_price:t.final_line_price,sku:t.sku,product_id:t.product_id}))}}catch(e){return this.log("Error sending cart info",e),null}}ensureCartAttributesForExistingPriceTests(e){try{if(this.log("Checking visitor assignments for active price tests"),e&&this.state.temporary.previewConfig){const t=this.state.temporary.previewConfig;this.log("Using preview config for merchant:",t.testId);let i="variant";if(t.variants&&t.variants.length>0){const s=t.variants.find(r=>r.id===t.currentVariant);s&&s.isControl&&(i="control")}this.log("Merchant preview - updating hidden inputs:",t.testId,i),this.updatePriceTestHiddenInputs(t.testId,i,!0);return}for(const t of this.state.essential.visitorTests){const i=this.testConfigs.find(o=>o.id===t.testId);if(!i){this.log("Test config not found:",t.testId);continue}const s=i.hypotheses.find(o=>o.id===t.hypothesisId);if(!s||s.type!=="price")continue;const r=s.isControl?"control":"variant";this.log("Updating hidden inputs for price test:",t.testId,r),this.updatePriceTestHiddenInputs(t.testId,r,e)}}catch(t){this.log("Error ensuring cart attributes for existing price tests:",t)}}subscriptionSwapDone=!1;subscriptionHideWrongPlans=null;subscriptionPriceDone=!1;subscriptionUpdateOneTime=null;subscriptionOneTimeDone=!1;swapMap=null;slptValue=null;async subscriptionSwap(){await Ue(this)}async subscriptionPriceChange(){await ze(this)}async subscriptionOneTimePrice(){await We(this)}updatePriceTestHiddenInputs(e,t,i){try{this.cleanupPriceTestObservers();const s=`${e}:${t}:${i?"t":"f"}`,r=T=>{const m=T.getAttribute("data-sl-pid");if(!m)return!0;if(i&&this.state.temporary.previewConfig){const w=this.state.temporary.previewConfig,I=t==="control"?"a":"b",f=w.variants.find(v=>v.label===I);if(!f)return!1;for(const v of f.domSelectors||[]){const g=v.cssSelector.match(/data-sl-attribute-(?:p|cap)="(\d+)"/);if(g){const P=g[1];if(this.log(`Extracted ID from selector: ${P}, comparing to: ${m}`),P===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:",I),!1}const y=this.testConfigs.find(w=>w.id===e);if(!y)return this.log("Test config not found for testId:",e),!1;for(const w of y.hypotheses||[]){for(const I of w.domSelectors||[]){const f=I.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:",e),!0}if(w.priceData?.variants){for(const I of w.priceData.variants)if(I[0]===m)return this.log("Product ID match found in priceData:",m,"for test:",e),!0}}return this.log("No product ID match for:",m,"in test:",e),!1},o=new Set;let n=!1,l=null;const c=(T,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{T.observe(w,{childList:!0,subtree:!0,characterData:!0,characterDataOldValue:!0,attributes:!1})}catch(I){this.log(`Failed to observe element (${m}):`,I)}}),document.body&&document.body.isConnected)try{T.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=(T,m,y,w)=>{const I=T.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: ${T.length}, filtered: ${I.length}`),I.length>0&&U(document,{testId:e,hypothesisId:m,selectors:I})},u=(T,m)=>{this.log(`Applying DOM selector changes for product ID: ${T}`),m.disconnect(),n=!0;try{if(i&&this.state.temporary.previewConfig){const y=t==="control"?"a":"b",w=this.state.temporary.previewConfig.variants.find(I=>I.label===y);if(!w?.domSelectors){this.log(`No DOM selectors found for preview variant: ${y}`);return}d(w.domSelectors,w.id,"preview config",T)}else{const y=this.testConfigs.find(I=>I.id===e);if(!y){this.log(`No test config found for testId: ${e}`);return}const w=y.hypotheses.find(I=>t==="control"?I.isControl:!I.isControl);if(!w?.domSelectors){this.log(`No DOM selectors found for assignment: ${t}`);return}d(w.domSelectors,w.id,"live config",T)}}finally{l!==null&&clearTimeout(l),l=window.setTimeout(()=>{n=!1,l=null,c(m,"reconnection"),this.log("Re-established innerHTML observer after DOM changes")}
12,50)}},h=new MutationObserver(T=>{if(!n)for(const m of T){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,I=w.getAttribute("data-sl-attribute-p");for(;!I&&w.parentElement;)w=w.parentElement,I=w.getAttribute("data-sl-attribute-p");if(!I)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="${I}"`),v&&this.log(`Previous content: "${v}"`),this.log(`Current content: "${f}"`),u(I,h)}});c(h,"initial setup"),o.add(h);const p=new MutationObserver(T=>{T.forEach(m=>{m.addedNodes.forEach(y=>{if(y.nodeType===Node.ELEMENT_NODE){const w=y;E(w);const I=w.matches('input[name="properties[_slpt]"]')?[w]:w.querySelectorAll('input[name="properties[_slpt]"]');I.length>0&&this.log(`MutationObserver found ${I.length} new hidden input(s)`),I.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))}})}})})});o.add(p);const b=new MutationObserver(T=>{T.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,I=m.oldValue,f=w.getAttribute("data-sl-pid");this.log(`data-sl-pid changed from "${I}" 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&&u(f,h),this.log("Re-running payment placement updates after variant change"),E(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))}}})});o.add(b);const E=T=>{T.tagName==="SHOPIFY-PAYMENT-TERMS"&&(this.log("MutationObserver found new shopify-payment-terms element"),this.updateShopifyPaymentTerms(e,t));const m=T.querySelectorAll("shopify-payment-terms");m.length>0&&(this.log(`MutationObserver found ${m.length} shopify-payment-terms in added node`),this.updateShopifyPaymentTerms(e,t)),T.tagName==="AFTERPAY-PLACEMENT"&&(this.log("MutationObserver found new afterpay-placement element"),this.updateAfterpayPlacements(e,t,"afterpay"));const y=T.querySelectorAll("afterpay-placement");y.length>0&&(this.log(`MutationObserver found ${y.length} afterpay-placement in added node`),this.updateAfterpayPlacements(e,t,"afterpay")),T.tagName==="SQUARE-PLACEMENT"&&(this.log("MutationObserver found new square-placement element"),this.updateAfterpayPlacements(e,t,"square"));const w=T.querySelectorAll("square-placement");w.length>0&&(this.log(`MutationObserver found ${w.length} square-placement in added node`),this.updateAfterpayPlacements(e,t,"square")),T.tagName==="KLARNA-PLACEMENT"&&(this.log("MutationObserver found new klarna-placement element"),this.updateKlarnaPlacements(e,t));const I=T.querySelectorAll("klarna-placement");I.length>0&&(this.log(`MutationObserver found ${I.length} klarna-placement in added node`),this.updateKlarnaPlacements(e,t))},S=T=>{b.observe(T,{attributes:!0,attributeFilter:["data-sl-pid"],attributeOldValue:!0,subtree:!1});const m=T.getAttribute("data-sl-pid");this.log(`Started AttributeObserver on specific input with data-sl-pid="${m}"`)},C=()=>{const T=document.querySelectorAll('input[name="properties[_slpt]"]');this.log(`Found ${T.length} existing hidden inputs to check`),T.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"),u(y,h)),S(m)):y&&this.isProductInAnyPriceTest(y)?this.log("Preserving hidden input for product ID '%s' - belongs to a different price test",
12y):(m.remove(),this.log("Removed non-matching hidden input for product ID:",y))})},_=()=>{document.body?(p.observe(document.body,{childList:!0,subtree:!0}),this.log("Started MutationObserver on document.body"),C(),E(document.body)):document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{document.body&&(p.observe(document.body,{childList:!0,subtree:!0}),this.log("Started MutationObserver after DOMContentLoaded"),C(),E(document.body))}):(this.log("Set timeout on observer"),setTimeout(_,10))};_(),window.__shopliftPriceTestObservers=o,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(e,t){this.updatePlacementElements(e,t,"klarna-placement",(i,s)=>{i.setAttribute("data-purchase-amount",s.toString())})}cleanupPriceTestObservers(){const e=window.__shopliftPriceTestObservers;e&&(e.forEach(t=>{t.disconnect()}),e.clear(),this.log("Cleaned up existing price test observers")),delete window.__shopliftPriceTestObservers,delete window.__shopliftPriceTestValue}updateAfterpayPlacements(e,t,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(e,t,s,(o,n)=>{if(i==="afterpay"){const l=(n/100).toFixed(2);o.setAttribute("data-amount",l)}else o.setAttribute("data-amount",n.toString())}),this.log("updateAfterpayPlacements completed")}updatePlacementElements(e,t,i,s){const r=document.querySelectorAll(i);if(r.length===0){this.log(`No ${i} elements found - early return`);return}let o;if(this.state.temporary.isMerchant&&this.state.temporary.previewConfig){const l=t==="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}o=c.domSelectors,this.log(`Using preview config for ${i} in merchant mode, variant: ${l}`)}else{const l=this.testConfigs.find(d=>d.id===e);if(!l){this.log(`No testConfig found for id: ${e} - early return`);return}
12const c=l.hypotheses.find(d=>t==="control"?d.isControl:!d.isControl);if(!c?.domSelectors){this.log(`No hypothesis or domSelectors found for assignment: ${t} - early return`);return}o=c.domSelectors}const n=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 u=c.getAttribute("data-sl-pid");if(!u){this.log("Hidden input has no data-sl-pid attribute - skipping");return}const h=o.find(S=>{const C=S.cssSelector.match(n);return C&&C[1]===u});if(!h){this.log(`No matching selector found for productId: ${u} - skipping element`);return}const p=h.actions.find(S=>S.scope==="price");if(!p?.value){this.log("No price action or value found - skipping element");return}const b=parseFloat(p.value.replace(/[^0-9.]/g,""));if(Number.isNaN(b)){this.log(`Invalid price "${p.value}" for product ${u} - skipping`);return}const E=Math.round(b*100);s(l,E)}),this.log(`updatePlacementElements completed for ${i}`)}updateShopifyPaymentTerms(e,t){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 o=t==="control"?"a":"b",n=this.state.temporary.previewConfig.variants.find(l=>l.label===o);if(!n||!n.domSelectors){this.log(`No variant found for label ${o} in preview config`);return}s=n.domSelectors,this.log(`Using preview config for shopify-payment-terms in merchant mode, variant: ${o}`)}else{const o=this.testConfigs.find(l=>l.id===e);if(!o)return;const n=o.hypotheses.find(l=>t==="control"?l.isControl===!0:l.isControl===!1);if(!n||!n.domSelectors)return;s=n.domSelectors}const r=new RegExp(`${this.DATA_SL_ATTRIBUTE_P}=["'](\\d+)["']`);i.forEach(o=>{const n=o.getAttribute("variant-id");if(!n)return;const l=s.find(c=>{const d=c.cssSelector.match(r);return d&&d[1]===n});if(l){const c=l.actions.find(d=>d.scope==="price");if(c&&c.value){const d=o.getAttribute("shopify-meta");if(d)try{const u=JSON.parse(d);if(u.variants&&Array.isArray(u.variants)){const h=u.variants.find(p=>p.id?.toString()===n);if(h){h.full_price=c.value;const p=parseFloat(c.value.replace(/[^0-9.]/g,""));if(h.number_of_payment_terms&&h.number_of_payment_terms>1){const b=p/h.number_of_payment_terms;h.price_per_term=`$${b.toFixed(2)}`}o.setAttribute("shopify-meta",JSON.stringify(u))}}}catch(u){this.log("Error parsing/updating shoplift-meta:",u)}}}})}async makeJsonRequest(e){const t=await this.makeRequest(e);return t===null?null:JSON.parse(await t.text(),F)}async makeRequest(e){const{url:t,method:i,headers:s,data:r,signal:o}=e,n=new Headers;if(s)for(const c in s)n.append(c,s[c]);(!s||!s.Accept)&&n.append("Accept","application/json"),(!s||!s["Content-Type"])&&n.append("Content-Type","application/json"),(this.eventHost.includes("ngrok.io")||this.eventHost.includes("ngrok-free.app"))&&n.append("ngrok-skip-browser-warning","1234");const l=await this.fetch(t,{method:i,headers:n,body:r,signal:o});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 ie}throw new Error(`Error sending shoplift request ${l.status}`)}return l}queueAddVisitorToTest(e,t){if(this.state.essential.visitorTests.some(s=>s.testId===e))return;const i=this.testConfigs.find(s=>s.id===e);if(this.state.essential.visitorTests.push({createdAt:new Date,testId:e,hypothesisId:t.id,isThemeTest:t.type==="theme",themeId:t.themeId,isSaved:!1,isInvalid:!1,shouldSendToGa:!0,testType:t.type,assignedTo:t.isControl?"control":"variant",testTitle:i?.title}),t.type==="price"){const s=t.isControl?"control":"variant";this.log("Price test assignment detected, updating cart attributes:",e,s),this.updatePriceTestHiddenInputs(e,s,!1)}}queueCartUpdate(e){this.queueEvent(new Ce(e))}queuePageView(e){this.queueEvent(new Se(e))}queueEvent(e){!this.state.essential.consentApproved&&this.state.essential.hasConsentInteraction||this.state.analytics.queue.length>10||this.state.analytics.queue.push(e)}legacyGetLocalStorageVisitor(){const e=this.localStorageGet(this.legacySessionKey);if(e)try{return JSON.parse(e,F)}catch{}return null}pruneStaleVisitorTests(){this.state.essential.visitorTests=this.state.essential.visitorTests.filter(e=>this.testConfigs.some(t=>t.id==e.testId)||this.inactiveTestConfigs.filter(t=>this.testIsPaused(t)).some(t=>t.id===e.testId))}pruneStateAndSave(){this.pruneStaleVisitorTests(),this.saveState()}saveState(){this.persistEssentialState(),this.persistAnalyticsState()}loadState(){const e=this.loadAnalyticsState(),t={analytics:e,essential:this.loadEssentialState(e),temporary:this.loadTemporaryState()},i=this.legacyGetLocalStorageVisitor(),s=this.legacyGetCookieVisitor(),r=[i,s].filter(o=>o!==null).sort((o,n)=>+n.storedAt-+o.storedAt)[0];return t.analytics.visitor===null&&r&&({visitorTests:t.essential.visitorTests,...t.analytics.visitor}=r,t.essential.isFirstLoad=!1,t.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)),!t.essential.consentApproved&&t.essential.hasConsentInteraction&&this.deleteLocalStorage(this.analyticsSessionKey),t}loadEssentialState(e){const t=this.loadLocalStorage(this.essentialSessionKey),i=this.loadCookie(this.essentialSessionKey),s=this.getInitialState();e.visitor?.device&&(s.device=e.visitor.device);const r={timestamp:new Date,consentApproved:!1,hasConsentInteraction:!1,debugMode:!1,initialState:s,visitorTests:[],isFirstLoad:!0},o=[t,i].filter(n=>n!==null).sort((n,l)=>+l.timestamp-+n.timestamp)[0]??r;return o.initialState||(e.visitor!==null?o.initialState=e.visitor:(o.initialState=s,o.initialState.createdAt=o.timestamp)),o}loadAnalyticsState(){const e=this.loadLocalStorage(this.analyticsSessionKey),t=this.loadCookie(this.analyticsSessionKey),i={timestamp:new Date,visitor:null,queue:[]},s=[e,t].filter(r=>r!==null).sort((r,o)=>+o.timestamp-+r.timestamp)[0]??i;return s.queue.length===0&&e&&e.queue.length>1&&(s.queue=e.queue),s}loadTemporaryState(){const e=this.sessionStorageGet(this.temporarySessionKey),t=e?JSON.parse(e,F):null,i=this.loadCookie(this.temporarySessionKey);return t??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.persist
12CookieState(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(e){const t=this.localStorageGet(e);if(t===null)return null;try{return JSON.parse(t,F)}catch{return null}}loadCookie(e){const t=this.getCookie(e);if(t===null)return null;try{return JSON.parse(t,F)}catch{return null}}persistLocalStorageState(e,t){this.localStorageSet(e,JSON.stringify(t))}persistCookieState(e,t,i=!1){const s=JSON.stringify(t),r=i?"":`expires=${new Date(new Date().getTime()+864e5*365).toUTCString()};`;document.cookie=`${e}=${s};domain=.${window.location.hostname};path=/;SameSite=Strict;${r}`}deleteCookie(e){const t=new Date(0).toUTCString();document.cookie=`${e}=;domain=.${window.location.hostname};path=/;expires=${t};`}deleteLocalStorage(e){window.localStorage.removeItem(e)}getChannel(e){return[{"name":"cross-network","test":(v) => new RegExp(".*cross-network.*", "i").test(v.utmCampaign)},{"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|y
12andex\.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|kakao|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\.o
12pera\.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) => 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)}
12,{"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
12akao|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
12andex\.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(e))?.name??"other"}getShopifyAnalyticsId(){const e=this.getCookie("_shopify_y");if(e)return e;try{const t=this.localStorageGet("Shoplift_ClientId");if(t)return t}catch{}return null}legacyGetCookieVisitor(){const e=this.getCookie("SHOPLIFT");return e===null?null:JSON.parse(e,F)}getCookie(e){const t=this.cookie.split("; ").filter(i=>i.split("=").at(0)===e).at(0);return t===void 0?null:t.split("=").slice(1).join("=")}monitorConsentChange(){document.addEventListener("visitorConsentCollected",e=>{(async()=>await this.onConsentChange(e.detail.analyticsAllowed,!0))()}),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>this.loadShopifyConsentApiWithRetry()):this.loadShopifyConsentApiWithRetry()}loadShopifyConsentApiWithRetry(){let e=0;const t=()=>{this.loadShopifyConsentApi()||e++<10&&window.setTimeout(t,100)};t()}loadShopifyConsentApi(){if(window.Shopify){this.log("Loading Shopify features");const e=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"),t=window.setTimeout(()=>{(async()=>await e())()},1e3);return}if(this.geoViaShopify){const s=window.Shopify.customerPrivacy.getRegion?.();this.resolvedRegion=typeof s=="string"?s.replace(/-/g,""):""}const i=window.Shopify.customerPrivacy.getTrackingConsent();await this.onConsentChange(window.Shopify.customerPrivacy.analyticsProcessingAllowed(),i==="yes")};let t=window.setTimeout(()=>{(async()=>await e())()},5e3);return window.Shopify.loadFeatures([{name:"consent-tracking-api",version:"0.1"}],i=>{(async()=>{if(window.clearTimeout(t),i){this.log("Error loading consent tracking",i);return}await e()})()}),!0}return!1}async onConsentChange(e,t){try{if(this.log("Consent change detected",e,t),this.state.essential.consentApproved=e,this.state.essential.hasConsentInteraction=t,!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(),this.saveState(),await this.syncAllEvents()}catch(i){this.log("Error syncing on consent change",i)}}isThemePreview(){return isThemePreview||themeRole!=="main"}isAppProxyPath(){const e=["/apps/","/tools/","/a/"],t=window.location.pathname;return e.some(i=>t.startsWith(i))}clearThemeBar(e,t,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(o=>(this.log("Found theme bar"),t&&(this.log("Removing theme bar"),o.remove()),e?this.makeRequest({url:`${this.eventHost}/api/v0/logs`,method:"post",data:JSON.stringify({...this.debugState(),stateAtEvaluation:s},ee)}):Promise.resolve(null)))).catch(r=>console.error(r))}waitForElement(e,t){return new Promise(i=>{const s=document.querySelector(t);if(s){i(s);return}const r=new MutationObserver(o=>{const n=document.querySelector(t);if(n){r.disconnect(),i(n);return}});r.observe(e??document.documentElement,{childList:!0})})}setDebug(e){this.state.essential.debugMode=e,this.saveState()}log(e,...t){let i=0;const s=e.replace(/%[sdoOfF]/g,r=>{if(i>=t.length)return r;const o=t[i++];return r==="%o"||r==="%O"?JSON.stringify(o):String(o)});this.logHistory.push(`[${new Date().toISOString()}][SL] ${s}`),!(!this.state.essential.debugMode&&!this.shopliftDebug)&&console.debug(`[SL] ${e}`,...t)}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
12:this.getCookie("is_shopify_merchant"),themeId,url:window.location.href,isThemePreview,themeRole,gaConfig:this.gaConfig},logHistory:this.logHistory}}createViewportObserver(e,t={}){const{threshold:i=this.VIEWPORT_TRACK_THRESHOLD,triggerOnce:s=!0}=t,r=new Set;return new IntersectionObserver(o=>{o.forEach(n=>{if(n.isIntersecting&&!r.has(n.target)){const l=n.target,c=l.getAttribute(this.DATA_SL_TEST_ID);c&&(e(c,l),s&&r.add(l))}})},{threshold:i})}applyChangesWithViewport(e,t,i,s){const r=t.selectorsForViewportTracking??t.selectors,o=n=>{if(this.state.essential.visitorTests.some(h=>h.testId===n)||this.activeViewportObservers.has(n))return;const l=[];if(r.forEach(h=>{e.querySelectorAll(h.cssSelector).forEach(b=>l.push(b))}),l.length===0)return;let c=!1;const d=()=>{c||(c=!0,i(n),u.disconnect(),this.activeViewportObservers.delete(n))},u=this.createViewportObserver(()=>{d()},{triggerOnce:!0,...s});this.activeViewportObservers.set(n,u),this.log(`Created viewport observer for test ${n}, observing ${l.length} elements`),l.forEach(h=>{h.setAttribute(this.DATA_SL_TEST_ID,String(n)),u.observe(h)}),setTimeout(()=>{c||l.forEach(h=>{const p=h.getBoundingClientRect(),b=s?.threshold??this.VIEWPORT_TRACK_THRESHOLD,E=Math.min(p.bottom,window.innerHeight)-Math.max(p.top,0),S=Math.min(p.right,window.innerWidth)-Math.max(p.left,0);p.top<window.innerHeight&&p.bottom>0&&p.left<window.innerWidth&&p.right>0&&E>0&&S>0&&E>=p.height*b&&(this.log(`Price element already visible in viewport for test ${n}:`,h),d())})},100)};t.selectors.length>0&&U(e,t,()=>{}),Te(e,{testId:t.testId,hypothesisId:t.hypothesisId,selectors:r},n=>{o(n)})}applyPriceTestWithMapLookup(e,t,i,s){if(!t.priceData){this.log("No price data for hypothesis '%s'",t.id);return}this.log("Hypothesis '%s' isControl=%s, priceData has %d variants",t.id,t.isControl,t.priceData.variants.length);const r=t.priceData.variants.slice(0,3);for(const[S,C,_]of r)this.log(" Sample priceData: variant=%s, price=%d, compareAt=%d",S,C,_);const o=j(t.priceData),n=new Set;for(const S of i)if(S.priceData)for(const[C]of S.priceData.variants)n.add(C);this.log("Price test Map lookup: %d products in hypothesis, %d total products to track",o.size,n.size);const l=t.priceData,c=new WeakSet;let d=!1;const u="[data-sl-attribute-p], [data-sl-attribute-cap], [data-sl-attribute-discount]",h=S=>{if(c.has(S))return;const C=S.getAttribute("data-sl-attribute-p"),_=S.getAttribute("data-sl-attribute-cap"),T=S.getAttribute("data-sl-attribute-discount"),m=C||_||T;if(!m||!n.has(m))return;c.add(S);const y=o.get(m);y&&(this.log("Applying price for product %s: %d cents (compare at: %d cents)",m,y.priceInCents,y.compareAtPriceInCents),Le(S,m,y,l),this.log("Applied price to element for product %s",m)),!d&&!this.state.essential.visitorTests.some(w=>w.testId===e)&&(S.setAttribute(this.DATA_SL_TEST_ID,String(e)),this.setupElementViewportTracking(S,e,()=>{d||(d=!0,s(e))}))},p=()=>{const S=document.querySelectorAll(u);this.log("Scanning for price elements, found: %d",S.length),S.forEach(h)},b=new MutationObserver(S=>{for(const C of S)C.type==="childList"&&C.addedNodes.forEach(_=>{if(_.nodeType===Node.ELEMENT_NODE){const T=_;(T.hasAttribute("data-sl-attribute-p")||T.hasAttribute("data-sl-attribute-cap")||T.hasAttribute("data-sl-attribute-discount"))&&h(T),T.querySelectorAll(u).forEach(h)}}),C.type==="attributes"&&C.target instanceof Element&&h(C.target)}),E=document.body||document.documentElement;b.observe(E,{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"),p(),document.readyState==="loading"&&document.addEventListener("DOMContentLoaded",()=>{this.log("DOMContentLoaded - rescanning for price elements"),p()}),setTimeout(()=>{this.log("Delayed rescan for price elements"),p()},100),setTimeout(()=>{this.log("Final rescan for price elements"),p()},500)}setupElementViewportTracking(e,t,i){const s=this.VIEWPORT_TRACK_THRESHOLD,r=e.getBoundingClientRect(),o=Math.min(r.bottom,window.innerHeight)-Math.max(r.top,0),n=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&&o>0&&n>0&&o>=r.height*s){this.log("Price element already visible for test %s",t),i();return}const c=new IntersectionObserver(d=>{for(const u of d)if(u.isIntersecting&&u.intersectionRatio>=s){this.log("Price element entered viewport for test %s",t),c.disconnect(),i();break}},{threshold:s});c.observe(e)}debug(){const e=this.debugState();console.log(JSON.stringify(e,ee,2))}}(async function(){window.shopliftInstance||(window.shopliftInstance=new Ze("sparx-dev.myshopify.com","https://app.shoplift.ai","https://events.shoplift.ai",false,false,false,{"sendEvents":true,"mode":"gtag"},false,false,1000,[],[{"id":"8f2226e2-2604-4f1b-ba4e-b455e49cd458","bayesianRevision":3,"status":"incompatible","hypotheses":[{"id":"c5cca888-ede8-41a8-a5fd-8bf0a16a9a34","type":"theme","themeId":121693798499,"affix":"","isControl":true,"redirectPath":null},{"id":"2af443ba-4174-4458-a8f6-0ac798149564","type":"theme","themeId":130838757475,"affix":"","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false},{"id":"be794970-468d-4f51-8316-54c4c41977c7","bayesianRevision":3,"status":"cancelled","hypotheses":[{"id":"7a23fc05-4d8f-4c6b-8a7e-c39c83ba095f","type":"theme","themeId":121693798499,"affix":"","isControl":true,"redirectPath":null},{"id":"ec63c5f0-67bf-4fc1-a5b0-29934e271f8e","type":"theme","themeId":130838757475,"affix":"","isControl":false,"redirectPath":null}],"ignoreTestViewParameterEnforcement":false}
12],null,false),await window.shopliftInstance.init())})();async function Qe(a,e,t,i){const s=Be({log:i});if(t)return i("[SUB-PREVIEW] A side â no overlay applied; widget renders naturally"),s;const r=a.widget.widgetType,o=e?j(e):null;let n=W(e),l=J(a,n),c=l.discountMap,d=l.maxDiscount;function u(){const f=W(e);f!==n&&(n=f,l=J(a,n),c=l.discountMap,d=l.maxDiscount,i(`[SUB-PREVIEW] scope refreshed currentProductId=${n??"n/a"}, maxDiscount=${d}`))}i(`[SUB-PREVIEW] side=B, currentProductId=${n??"n/a"}, maxDiscount=${d}`);function h(f){if(!e||!o)return null;const v=Z(o),g=v?o.get(v):void 0;return g?{formattedVariantPrice:G(g.priceInCents,e),formattedDiscounted:G(g.priceInCents*(1-f/100),e)}:null}function p(f){const v=Y(a,f);if(!v)return d;const g=D(a,"subscriptionInput"),P=g.length?g[0].selector:'input[name="rc_plan"]',A=v.querySelector(`${P}:checked`);if(A){const k=c[A.value];if(k!==void 0)return k}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 P=f.querySelector(g.selector);P?.textContent&&!P.textContent.includes(`${d}%`)&&$(P,A=>N(A,d))}}function E(f,v){const g=h(v);if(!g)return;const P=D(a,"subscriptionCompareAt");for(const A of P){const k=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);k?.textContent&&!k.textContent.includes(g.formattedVariantPrice)&&$(k,x=>/\d/.test(x)?g.formattedVariantPrice:x)}}function S(f,v){const g=h(v);if(!g)return;const P=D(a,"subscriptionPrice");for(const A of P){const k=f.querySelector(A.selector)||f.querySelector(`[part~="${A.selector}"]`);k?.textContent&&!k.textContent.includes(g.formattedDiscounted)&&$(k,x=>/\d/.test(x)?g.formattedDiscounted:x)}}function C(f){const v=D(a,"subscriptionInput"),g=v.length?v[0].selector:'input[name="rc_plan"]',P=D(a,"subscriptionPlanDiscount"),A=P.length?P[0].selector:".rc-plans-button__discount";for(const k of Array.from(f.querySelectorAll("label"))){const x=k.querySelector(g),R=k.querySelector(A);if(x&&R?.textContent){const O=c[x.value];if(O!==void 0){const V=R.textContent.match(/[\d.]+%/)?.[0];V&&V!==`${O}%`&&$(R,L=>N(L,O))}}}}function _(f){const v=f.querySelector("select");if(v)for(const g of Array.from(v.options)){const P=c[g.value];if(P!==void 0&&g.textContent){const A=g.textContent.match(/[\d.]+%/)?.[0];A&&A!==`${P}%`&&(g.textContent=N(g.textContent,P))}}}function T(f){const v=D(a,"onetimePrice");if(!v.length||!e||!o)return;const g=Z(o),P=g?o.get(g):void 0;if(!P)return;const A=G(P.priceInCents,e),k=D(a,"onetimeContainer"),x=k.length?k[0].selector:'[part~="rc-purchase-option__onetime"]',R=f.querySelector(x);if(R)for(const O of v){const V=R.querySelector(`[part~="${O.selector}"]`);V?.textContent&&!V.textContent.includes(A)&&$(V,L=>/\d/.test(L)?A:L)}}function m(f,v){const P=D(a,"subscriptionDiscount").filter(A=>A.selector.includes("benefit")||A.selector==="rc-benefits");for(const A of P){const k=f.querySelector(A.selector);if(k?.shadowRoot){for(const x of Array.from(k.shadowRoot.querySelectorAll("li")))if(x.textContent?.includes("Save")){const R=x.textContent.match(/[\d.]+%/)?.[0];R&&R!==`${v}%`&&$(x,O=>N(O,v))}}}}let y=!1;function w(){if(!y){y=!0;try{u();const f=B(a);if(!f)return;const v=p(f);b(f),E(f,v),S(f,v),T(f);const g=Y(a,f);g&&(r==="buttons"||r==="radio"?C(g):_(g)),m(f,v)}finally{y=!1}}}const I=pe({data:a,runUpdates:w});return function(){I(),s()}}const Xe=Object.freeze(Object.defineProperty({__proto__:null,subscriptionPreviewRender:Qe},Symbol.toStringTag,{value:"Module"}))})(); })("/", { suffix: "", type: "index" }, "main", 121693798499, false)</script>
12 13<!-- End of Shoplift scripts --> 14 15 16 17 <link rel="alternate" hreflang="x-default" href="https://sparxhockey.com/" /> 18 <link rel="alternate" hreflang="en" href="https://sparxhockey.com/" /> 19 <link rel="alternate" hreflang="en-ca" href="https://ca.sparxhockey.com/" /> 20 <link rel="alternate" hreflang="fr" href="https://ca.sparxhockey.com/fr/" /> 21 22 23 24 25 26 27 28
28<script async src="//sparxhockey.com/cdn/shop/t/283/assets/geolizr-lib.js?v=52600507088314058931686156716" type="text/javascript"></script>
28 29
30<script> 31 if(typeof Geolizr === "undefined") { 32 var Geolizr = {}; 33 Geolizr.currencyDynamicCountry = false; 34 Geolizr.version = 20200327; 35 Geolizr.waitforMoneyFormat = true; 36 } 37 38 // save geolizr-lib.js url to the sessionStorage 39 sessionStorage.setItem('geolizr_lib_url', "//sparxhockey.com/cdn/shop/t/283/assets/geolizr-lib.js?v=52600507088314058931686156716"); 40 if(typeof Geolizr.events === "undefined") Geolizr.events = {}; 41 if(typeof Geolizr.geolizrEvents === "undefined") Geolizr.geolizrEvents = []; 42 43 Geolizr.config = function(config) { 44 Geolizr.currency_widget_enabled = config.currency_widget_enabled === "true" || false; 45 Geolizr.shopCurrency = 'USD'; 46 Geolizr.shopifyFormatMoneySet = false; 47 Geolizr.observeElements = []; 48 }; 49 50 51 52 53 Geolizr.moneyFormats = {}; 54 55 56 Geolizr.shopifyCurrencyList = []; 57 Geolizr.shopifyCurrency = {}; 58 Geolizr.shopifyCurrencyListIndex = {}; 59 let setShopifyCurrencyToGeolizr = function() { 60 let GeolizrEachCurrency = {}; 61 62 GeolizrEachCurrency = { 63 "iso_code": "USD", 64 "name": "United States Dollar", 65 "symbol": "$", 66 "shop_currency": true 67 }; 68 if(GeolizrEachCurrency.shop_currency) { 69 Geolizr.shopifyCurrency = GeolizrEachCurrency; 70 } 71 Geolizr.shopifyCurrencyList.push(GeolizrEachCurrency); 72 Geolizr.shopifyCurrencyListIndex[GeolizrEachCurrency.iso_code] = Geolizr.shopifyCurrencyList.indexOf(GeolizrEachCurrency); 73 74 } 75 76 setShopifyCurrencyToGeolizr(); 77 /* Geolizr Provider Setter */ 78 Geolizr.presetService = false; 79 Geolizr.activateIpInfo = function(accessKey) { Geolizr.presetService = { name: 'ipInfo', accessKey: accessKey }; }; 80 Geolizr.activateLovelyAppProvider = function() { Geolizr.presetService = { name: 'lovelyAppProvider' }; }; 81 Geolizr.activateIpApiCo = function(accessKey) { Geolizr.presetService = { name: 'ipApiCo', accessKey: accessKey }; }; 82 Geolizr.activateDbIpProvider = function(accessKey) { Geolizr.presetService = { name: 'dbIpProvider', accessKey: accessKey }; }; 83 Geolizr.activateIpStackProvider = function(accessKey) { Geolizr.presetService = { name: 'ipStackProvider', accessKey: accessKey }; }; 84 Geolizr.activateGeolizrIPApiProvider = function(accessKey) { Geolizr.presetService = { name: 'geolizrIpApiProvider', accessKey: accessKey }; }; 85 86 87 88 /* Service Aliase */ 89 Geolizr.activateFreegeoip = Geolizr.activateIpStackProvider; 90 Geolizr.requestLocaleRootUrl = "\/"; 91 Geolizr.addSystemEventListener = function(name, callback) { 92 if (typeof Geolizr.realInit !== 'undefined') { 93 Geolizr.realInit(function($) { 94 callback({jquery: $}); 95 }) 96 } else { 97 Geolizr.geolizrEvents.push(new CustomEvent(name)); 98 document.addEventListener(name, callback); 99 } 100 }; 101 102 Geolizr.addEventListener = function(name, callback, priority) { 103 if(typeof priority == "undefined") priority = 100; 104 if(typeof Geolizr.realAddEventListener === "undefined") { 105 if (!Geolizr.events[name]) Geolizr.events[name] = []; 106 Geolizr.events[name].push({callback: callback, priority: priority}); 107 } else { 108 Geolizr.realAddEventListener(name, callback, priority); 109 } 110 }; 111 112 Geolizr.getGeoData = function(callback) { 113 if(typeof Geolizr.realGetGeoData === "undefined") { 114 Geolizr.addEventListener('geolizr.init', function() { 115 Geolizr.getGeoData(callback); 116 }, 200) 117 } else { 118 Geolizr.realGetGeoData(callback); 119 } 120 }; 121 122 Geolizr.init = function(callback, priority) { 123 if(typeof Geolizr.realInit === "undefined") 124 Geolizr.addEventListener("geolizr.init", callback, priority); 125 else 126 Geolizr.realInit(callback, priority); 127 }; 128 129 130 Geolizr.notification_widget_enabled = false; 131 Geolizr.popup_widget_enabled = false; 132 Geolizr.api_widget_enabled = false; 133 Geolizr.currency_widget_enabled = false; 134 Geolizr.redirect_widget_enabled = true; 135 136 Geolizr.enables = { 137 'notification_widget_enabled': Geolizr.notification_widget_enabled, 138 'popup_widget_enabled': Geolizr.popup_widget_enabled, 139 'api_widget_enabled': Geolizr.api_widget_enabled, 140 'currency_widget_enabled': Geolizr.currency_widget_enabled, 141 'redirect_widget_enabled': Geolizr.redirect_widget_enabled 142 }; 143 144 if(Geolizr.popup_widget_enabled || Geolizr.notification_widget_enabled || Geolizr.currency_widget_enabled) { 145 146 Geolizr.geolizrCssFile = "//sparxhockey.com/cdn/shop/t/283/assets/geolizr-lib.css?v=59017386019965299001686156718"; 147 148 } 149 150</script>
150 151<style> 152 .geolizr-currency-switch-wrapper { visibility: hidden; } 153 #geolizr-notification{position:fixed!important;top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:auto!important;min-height:0!important;max-height:none!important;z-index:10000000!important} 154 #geolizr-notification>#geolizr-notification-message-wrapper{text-align:center!important;width:100%!important;padding:10px;-webkit-box-shadow:10px 10px 5px 0 rgba(143,143,143,.35);-moz-box-shadow:10px 10px 5px 0 rgba(143,143,143,.35);box-shadow:10px 10px 5px 0 rgba(143,143,143,.35)} 155 #geolizr-dismiss-notification{box-sizing:content-box;padding:5px!important;margin:0!important;position:absolute!important;right:8px!important;text-decoration:none!important;font-family:Arial,serif ! important;top:8px!important;height:15px!important;border-radius:15px;width:15px!important;line-height:16px;font-size:20px;font-weight:700;cursor:pointer;display:inline-block} 156 .geolizr-popup-background{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000005!important} 157 .geolizr-popup{position:fixed!important;width:560px!important;height:400px!important;z-index:10000010!important;border:1px solid grey} 158 .geolizr-popup.gp-center{top:50%!important;left:50%!important;margin-top:-200px!important;margin-left:-280px!important} 159 .geolizr-popup.gp-mobile{width:84%!important;height:84%!important;top:0!important;left:0!important;margin:8%} 160 #geolizr-popup-content-iframe{width:100%!important;height:100%!important;border:0} 161 .slideInDown { -webkit-animation-name: slideInDown; animation-name: slideInDown; -webkit-animation-duration: 1s; animation-duration: 1s; -webkit-animation-fill-mode: both; animation-fill-mode: both; } 162 @-webkit-keyframes slideInDown { 0% { -webkit-transform: translateY(-100%); transform: translateY(-100%); visibility: visible;} 100% {-webkit-transform: translateY(0); transform: translateY(0); } } 163 @keyframes slideInDown { 0% {-webkit-transform: translateY(-100%); transform: translateY(-100%);visibility: visible; } 100% { -webkit-transform: translateY(0); transform: translateY(0); } } 164 .geolizr-currency-switch-wrapper.geolizr-absolute-auto{z-index:10000000;position:fixed} 165 .geolizr-currency-switch-wrapper{z-index:10000000!important;height:20px;width:85px;position:relative} 166 .geolizr-currency-switcher{padding:1px 10px;margin:0;width:85px;height:30px;border-radius:4px;box-sizing: border-box;} 167 .geolizr-currency-links{overflow:scroll;overflow-x:hidden;border-radius:4px;padding:5px 10px;margin:0;list-style:none;line-height:1.42857143;background-color:#fff;width:82px;max-height:200px;display:none} 168 .geolizr-currency-switch-wrapper .geolizr-currency-links-up{bottom:30px;position:absolute} 169 .geolizr-currency-switch-wrapper .geolizr-currency-links-down{top:30px;position:absolute} 170 li.geolizr-currency-list-li{float:none!important;margin:0!important;padding:0 0 0 10px} 171 .geolizr-currency-list-link{white-space:nowrap}
172 .geolizr-currency-link i,.geolizr-currency-list-link i{width:16px!important;height:11px} 173 [class^="famfamfam-flag"]{display:inline-block;width:16px;height:11px;line-height:11px} 174 .no-scroll .geolizr-currency-links { overflow: hidden; width: 60px; left: 23px; text-align: left;} 175 .geolizr-currency-switcher-value{width:42px;min-width:42px;max-width:42px;display:inline-block;text-align:left} 176 .geolizr-currency-switcher-arrow-down,.geolizr-currency-switcher-arrow-up{content:"s";position:absolute;right:5px;top:5px;width:14px;height:14px;margin:0} 177 .geolizr-currency-switcher-arrow-down,.geolizr-currency-switcher-arrow-up{ transition: transform .2s ease-in-out;content: ""; background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14.0 14.0' height='14.0px' width='14.0px' style='position: absolute;'%3e%3cpath d='M1 4.5 L7.0 10.5 L13.0 4.5' fill='transparent' stroke='%23000' stroke-width='1px'%3e%3c/path%3e%3c/svg%3e"); } 178 .open .geolizr-currency-switcher-arrow-down,.geolizr-currency-switcher-arrow-up{transform:rotate(180deg)} 179 .open .geolizr-currency-switcher-arrow-up{transform:rotate(0deg)} 180 .geolizr-selectable-currency{width:42px;min-width:42px;max-width:42px;display:inline-block;text-align:left} 181 .geolizr-shop-currency{width:42px;min-width:42px;max-width:42px;display:inline-block} 182 .geolizr-currency-link li{padding:0;margin:0} 183 #geolizr-notification-spanner{width:100%!important;line-height:4px!important;height:4px!important;min-height:4px!important;max-height:4px!important} 184 body.geolizr-popup-open { overflow: hidden; } 185</style> 186 187
187<script 188 async 189 data-environment="production" 190 src="https://osm.klarnaservices.com/lib.js" 191 data-client-id="3ae4d1ae-9931-53c2-a3e8-ba18a4f8e792" 192 defer="defer" 193 ></script>
193 194 195 <meta charset="utf-8"> 196 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 197 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1 maximum-scale=5, viewport-fit=cover"> 198 <meta name="theme-color" content="#ffffff"> 199 <link rel="canonical" href="https://sparxhockey.com/"> 200 <link rel="preconnect" href="https://cdn.shopify.com" crossorigin> 201 <link rel="preload" as="style" href="//sparxhockey.com/cdn/shop/t/283/assets/app.css?v=95938763153582441371775569258"> 202 203 204 205 206<link rel="preload" as="script" href="//sparxhockey.com/cdn/shop/t/283/assets/animations.min.js?v=43857518744990237831682107628"> 207 208<link rel="preload" as="script" href="//sparxhockey.com/cdn/shop/t/283/assets/vendor.min.js?v=25283403515773363701722457213"> 209<link rel="preload" as="script" href="//sparxhockey.com/cdn/shop/t/283/assets/app.js?v=130344362403991186621739387000"> 210<link rel="preload" as="script" href="//sparxhockey.com/cdn/shop/t/283/assets/slideshow.js?v=173579497955750101941682107635"> 211
212<script> 213window.lazySizesConfig = window.lazySizesConfig || {}; 214window.lazySizesConfig.expand = 250; 215window.lazySizesConfig.loadMode = 1; 216window.lazySizesConfig.loadHidden = false; 217</script>
217 218 219 220 <link rel="icon" type="image/png" href="//sparxhockey.com/cdn/shop/files/sparx-favicon.png?crop=center&height=32&v=1681755341&width=32"> 221 222 223 224 <title> 225 Sparx Hockey | Home Skate Sharpeners & Accessories 226 </title> 227 228 229 <meta name="description" content="Get professional-quality skate sharpening with the Sparx Skate Sharpener. Sharpen your skates at home with our portable ice skate sharpening machine ."> 230 231<link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin> 232 233<meta property="og:site_name" content="Sparx Hockey"> 234<meta property="og:url" content="https://sparxhockey.com/"> 235<meta property="og:title" content="Sparx Hockey | Home Skate Sharpeners & Accessories"> 236<meta property="og:type" content="website"> 237<meta property="og:description" content="Get professional-quality skate sharpening with the Sparx Skate Sharpener. Sharpen your skates at home with our portable ice skate sharpening machine ."><meta property="og:image" content="http://sparxhockey.com/cdn/shop/files/test-logo-dark.png?height=628&pad_color=fff&v=1678998585&width=1200"> 238 <meta property="og:image:secure_url" content="https://sparxhockey.com/cdn/shop/files/test-logo-dark.png?height=628&pad_color=fff&v=1678998585&width=1200"> 239 <meta property="og:image:width" content="1200"> 240 <meta property="og:image:height" content="628"><meta name="twitter:site" content="@sparxhockey"><meta name="twitter:card" content="summary_large_image"> 241<meta name="twitter:title" content="Sparx Hockey | Home Skate Sharpeners & Accessories"> 242<meta name="twitter:description" content="Get professional-quality skate sharpening with the Sparx Skate Sharpener. Sharpen your skates at home with our portable ice skate sharpening machine ."> 243 244 245 <link href="//sparxhockey.com/cdn/shop/t/283/assets/app.css?v=95938763153582441371775569258" rel="stylesheet" type="text/css" media="all" /> 246 247 <style data-shopify> 248 @font-face { 249 font-family: Montserrat; 250 font-weight: 500; 251 font-style: normal; 252 font-display: swap; 253 src: url("//sparxhockey.com/cdn/fonts/montserrat/montserrat_n5.07ef3781d9c78c8b93c98419da7ad4fbeebb6635.woff2") format("woff2"), 254 url("//sparxhockey.com/cdn/fonts/montserrat/montserrat_n5.adf9b4bd8b0e4f55a0b203cdd84512667e0d5e4d.woff") format("woff"); 255} 256 257@font-face { 258 font-family: Montserrat; 259 font-weight: 500; 260 font-style: normal; 261 font-display: swap; 262 src: url("//sparxhockey.com/cdn/fonts/montserrat/montserrat_n5.07ef3781d9c78c8b93c98419da7ad4fbeebb6635.woff2") format("woff2"), 263 url("//sparxhockey.com/cdn/fonts/montserrat/montserrat_n5.adf9b4bd8b0e4f55a0b203cdd84512667e0d5e4d.woff") format("woff"); 264} 265 266@font-face { 267 font-family: Montserrat; 268 font-weight: 600; 269 font-style: normal; 270 font-display: swap; 271 src: url("//sparxhockey.com/cdn/fonts/montserrat/montserrat_n6.1326b3e84230700ef15b3a29fb520639977513e0.woff2") format("woff2"), 272 url("//sparxhockey.com/cdn/fonts/montserrat/montserrat_n6.652f051080eb14192330daceed8cd53dfdc5ead9.woff") format("woff"); 273} 274 275@font-face { 276 font-family: Montserrat; 277 font-weight: 500; 278 font-style: italic; 279 font-display: swap; 280 src: url("//sparxhockey.com/cdn/fonts/montserrat/montserrat_i5.d3a783eb0cc26f2fda1e99d1dfec3ebaea1dc164.woff2") format("woff2"), 281 url("//sparxhockey.com/cdn/fonts/montserrat/montserrat_i5.76d414ea3d56bb79ef992a9c62dce2e9063bc062.woff") format("woff"); 282} 283 284@font-face { 285 font-family: Montserrat; 286 font-weight: 600; 287 font-style: italic; 288 font-display: swap; 289 src: url("//sparxhockey.com/cdn/fonts/montserrat/montserrat_i6.e90155dd2f004112a61c0322d66d1f59dadfa84b.woff2") format("woff2"), 290 url("//sparxhockey.com/cdn/fonts/montserrat/montserrat_i6.41470518d8e9d7f1bcdd29a447c2397e5393943f.woff") format("woff"); 291} 292 293 294 @font-face { 295 font-family: Montserrat; 296 font-weight: 900; 297 font-style: normal; 298 font-display: swap; 299 src: url("//sparxhockey.com/cdn/fonts/montserrat/montserrat_n9.680ded1be351aa3bf3b3650ac5f6df485af8a07c.woff2") format("woff2"), 300 url("//sparxhockey.com/cdn/fonts/montserrat/montserrat_n9.0cc5aaeff26ef35c23b69a061997d78c9697a382.woff") format("woff"); 301} 302 303@font-face { 304 font-family: Montserrat; 305 font-weight: 400; 306 font-style: normal; 307 font-display: swap; 308 src: url("//sparxhockey.com/cdn/fonts/montserrat/montserrat_n4.81949fa0ac9fd2021e16436151e8eaa539321637.woff2") format("woff2"), 309 url("//sparxhockey.com/cdn/fonts/montserrat/montserrat_n4.a6c632ca7b62da89c3594789ba828388aac693fe.woff") format("woff"); 310} 311 312h1,h2, 313 .h1,.h2, 314 .logolink.text-logo, 315 .heading-font, 316 .h1-xlarge, 317 .h1-large, 318 .customer-addresses .my-address .address-index { 319 font-style: normal; 320 font-weight: 900; 321 font-family: Montserrat, sans-serif; 322 } 323 324 h3, .h3 { 325 font-style: normal; 326 font-weight: 700; 327 font-family: Montserrat, sans-serif; 328 } 329 h4, .h4{ 330 font-style: normal; 331 font-weight: 500; 332 font-family: Montserrat, sans-serif; 333 } 334 h5, .h5, 335 h6, .h6{ 336 font-style: normal; 337 font-weight: 400; 338 font-family: Montserrat, sans-serif; 339 } 340 body, 341 .body-font, 342 .thb-product-detail .product-title { 343 font-style: normal; 344 font-weight: 500; 345 font-family: Montserrat, sans-serif; 346 } 347 :root { 348 --font-body-scale: 1.0; 349 --font-body-line-height-scale: 1.0; 350 --font-body-letter-spacing: 0.0em; 351 --font-heading-scale: 1.0; 352 --font-heading-line-height-scale: 1.0; 353 --font-heading-letter-spacing: 0.0em; 354 --font-navigation-scale: 1.05; 355 --font-product-title-scale: 1.0; 356 --font-product-title-line-height-scale: 1.0; 357 --button-letter-spacing: 0.0em;--bg-body: #ffffff; 358 --bg-body-rgb: 255,255,255; 359 --bg-body-darken: #f7f7f7; 360 --payment-terms-background-color: #ffffff;--color-body: #2a2a2b; 361 --color-body-rgb: 42,42,43;--color-accent: #2a2a2b; 362 --color-accent-rgb: 42,42,43;--color-border: #d9d9d6;--color-form-border: #f5f5f5;--color-announcement-bar-text: #ffffff;--color-announcement-bar-bg: #e00f00;--color-header-bg: #ffffff; 363 --color-header-bg-rgb: 255,255,255;--color-header-text: #2a2a2b; 364 --color-header-text-rgb: 42,42,43;--color-header-links: #2a2a2b;--color-header-links-hover: #e00f00;--color-header-icons: #2a2a2b;--color-header-border: #d9d9d6;--solid-button-background: #e00f00;--solid-button-label: #FFFFFF;--outline-button-label: #e00f00;--color-price: #2a2a2b;--color-star: #e00f00;--color-dots: #2a2a2b;--color-inventory-instock: #7da94a;--color-inventory-lowstock: #d69c2c;--section-spacing-mobile: 60px;--section-spacing-desktop: 60px;--button-border-radius: 0px;--color-badge-text: #ffffff;--color-badge-sold-out: #939393;--color-badge-sale: #f0383a;--badge-corner-radius: 0px;--color-footer-text: #FFFFFF; 365 --color-footer-text-rgb: 255,255,255;--color-footer-link: #FFFFFF;--color-footer-link-hover: #fe403d;--color-footer-border: #000000; 366 --color-footer-border-rgb: 0,0,0;--color-footer-bg: #000000;} 367</style> 368 369
369<script src="//sparxhockey.com/cdn/shop/t/283/assets/jquery-2.2.3.min.js?v=58211863146907186831688769081" type="text/javascript"></script>
369 370 371 372 373
373<script> 374 window.theme = window.theme || {}; 375 theme = { 376 settings: { 377 money_with_currency_format:"\u003cspan class=money\u003e${{amount}} \u003c\/span\u003e", 378 cart_drawer:true}, 379 routes: { 380 root_url: '/', 381 cart_url: '/cart', 382 cart_add_url: '/cart/add', 383 search_url: '/search', 384 cart_change_url: '/cart/change', 385 cart_update_url: '/cart/update', 386 predictive_search_url: '/search/suggest', 387 }, 388 variantStrings: { 389 addToCart: `Add to cart`, 390 soldOut: `Sold out`, 391 unavailable: `Unavailable`, 392 }, 393 strings: { 394 requiresTerms: `You must agree with the terms and conditions of sales to check out`, 395 } 396 }; 397 </script>
397 398
398<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
398<meta name="google-site-verification" content="pyQrvT39gU33-cBN8Jrv19UfgaWwPECBN9X_XdpZ1ZM"> 399<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/9327770/digital_wallets/dialog"> 400<meta id="in-context-paypal-metadata" data-shop-id="9327770" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD"> 401<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
401<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=2271608931"></script>
401 402<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
403<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=2271608931&shop_id=9327770" crossorigin="anonymous"></script>
vendor: 1 bytes, line 403
403
404<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":9327770,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/9327770","merchantName":"Sparx Hockey","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","elo","jcb"],"total":{"type":"pending","label":"Sparx Hockey","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 404
404
405<script id="shopify-features" type="application/json">{"accessToken":"609feb3ffabdba7c3cc7b5860c19f4f4","betas":["rich-media-storefront-analytics"],"domain":"sparxhockey.com","predictiveSearch":true,"shopId":9327770,"locale":"en"}</script>
vendor: 1 bytes, line 405
405
406<script>var Shopify = Shopify || {}; 407Shopify.shop = "sparx-dev.myshopify.com"; 408Shopify.locale = "en"; 409Shopify.currency = {"active":"USD","rate":"1.0"}; 410Shopify.country = "US"; 411Shopify.theme = {"name":"LIVE | 04-07-2026","id":121693798499,"schema_name":"Reformation","schema_version":"1.5.0","theme_store_id":null,"role":"main"}; 412Shopify.theme.handle = "null"; 413Shopify.theme.style = {"id":null,"handle":null}; 414Shopify.cdnHost = "sparxhockey.com/cdn"; 415Shopify.routes = Shopify.routes || {}; 416Shopify.routes.root = "/"; 417Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 418Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 419Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 420Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 420
420
421<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 421
421
422<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 422
422
423<script> 424 window.ShopifyPay = window.ShopifyPay || {}; 425 window.ShopifyPay.apiHost = "shop.app\/pay"; 426 window.ShopifyPay.redirectState = null; 427</script>
vendor: 1 bytes, line 427
427
428<script> 429 window.Shopify = window.Shopify || {}; 430 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 431 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 432 window.Shopify.SignInWithShop.eligible = true; 433</script>
vendor: 1 bytes, line 433
433
434<script id="shop-js-analytics" type="application/json">{"pageType":"index"}</script>
vendor: 1 bytes, line 434
434
435<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 435
435
436<script type="module"> 437 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 438 439 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 440 441</script>
vendor: 1 bytes, line 441
441
442<script> 443 window.Shopify = window.Shopify || {}; 444 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 445 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"]}; 446</script>
vendor: 1 bytes, line 446
446
447<script>(function() { 448 var isLoaded = false; 449 function asyncLoad() { 450 if (isLoaded) return; 451 isLoaded = true; 452 var urls = ["https:\/\/assets1.adroll.com\/shopify\/latest\/j\/shopify_rolling_bootstrap_v2.js?adroll_adv_id=XPNMSBIMOZGAJE7DX2KOCL\u0026adroll_pix_id=7LCOF3CUNRAP7ABO45V2WI\u0026shop=sparx-dev.myshopify.com","https:\/\/cdn.nfcube.com\/instafeed-dbc4fd8b09d18262f8021f62b38a746f.js?shop=sparx-dev.myshopify.com","https:\/\/cdn.weglot.com\/weglot_script_tag.js?shop=sparx-dev.myshopify.com","https:\/\/cdn.rebuyengine.com\/onsite\/js\/rebuy.js?shop=sparx-dev.myshopify.com","https:\/\/cdn.rebuyengine.com\/onsite\/js\/rebuy.js?shop=sparx-dev.myshopify.com","https:\/\/cdn.rebuyengine.com\/onsite\/js\/rebuy.js?shop=sparx-dev.myshopify.com"]; 453 for (var i = 0; i < urls.length; i++) { 454 var s = document.createElement('script'); 455 s.type = 'text/javascript'; 456 s.async = true; 457 s.src = urls[i]; 458 var x = document.getElementsByTagName('script')[0]; 459 x.parentNode.insertBefore(s, x); 460 } 461 }; 462 if(window.attachEvent) { 463 window.attachEvent('onload', asyncLoad); 464 } else { 465 window.addEventListener('load', asyncLoad, false); 466 } 467})();</script>
vendor: 1 bytes, line 467
467
468<script id="__st">var __st={"a":9327770,"offset":-14400,"reqid":"caeef708-09fe-418b-9ae3-d53c0587579b-1790279457","pageurl":"sparxhockey.com\/","u":"0d9d3152e183","p":"home"};</script>
vendor: 1 bytes, line 468
468
469<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 469
469
470<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 470
470
471<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//sparxhockey.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 471
471
472<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 = "//sparxhockey.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>
472<script crossorigin="anonymous" defer="defer" src="//sparxhockey.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 472
472
473<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 473
473
474<script> 475 window.Shopify = window.Shopify || {}; 476 window.Shopify.MCP = window.Shopify.MCP || {}; 477 window.Shopify.MCP.enabled = true; 478 window.Shopify.MCP.shop = "sparx-dev.myshopify.com"; 479 window.Shopify.MCP.mcpEndpoint = "https:\/\/sparxhockey.com\/api\/mcp"; 480 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"]}}]; 481</script>
vendor: 1 bytes, line 481
481
482<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("\/\/sparxhockey.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 483</script>
vendor: 1 bytes, line 483
483
484<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://sparxhockey.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 485</script>
vendor: 1 bytes, line 485
485
486<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 487 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); 488</script>
vendor: 1 bytes, line 488
488
489<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})}})); 490</script>
490 491<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://sparxhockey.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 492<style id="shopify-accelerated-checkout-cart"> 493 #shopify-buyer-consent { 494 margin-top: 1em; 495 display: inline-block; 496 width: 100%; 497} 498 499#shopify-buyer-consent.hidden { 500 display: none; 501} 502 503#shopify-subscription-policy-button { 504 background: none; 505 border: none; 506 padding: 0; 507 text-decoration: underline; 508 font-size: inherit; 509 cursor: pointer; 510} 511 512#shopify-subscription-policy-button::before { 513 box-shadow: none; 514} 515 516 </style> 517
518<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
518 <!-- Header hook for plugins --> 519 520
520<script>document.documentElement.className = document.documentElement.className.replace('no-js', 'js');</script>
520 521 522
522<script type="text/javascript"> (function(c,l,a,r,i,t,y){ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); })(window, document, "clarity", "script", "jbigyk7eak"); </script>
522 523 524
524<script 525 id="__ada" 526 data-handle="sparxhockey-gr" 527 src="https://static.ada.support/embed2.js" 528></script>
528 529 <!-- CHEQ Tracking --> 530
530<script async src="https://ob.branderblender.com/i/89e7d60f96b6b12f757251640daf76f4.js" class="ct_clicktrue"></script>
530 531 <!-- END CHEQ Tracking --> 532 <!-- Linkedin Tracking --> 533
533<script type="text/javascript"> 534 _linkedin_partner_id = "1761834"; 535 window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || []; 536 window._linkedin_data_partner_ids.push(_linkedin_partner_id); 537 </script>
537 538 539
539<script type="text/javascript"> 540 (function(l) { 541 if (!l){window.lintrk = function(a,b){window.lintrk.q.push([a,b])}; 542 window.lintrk.q=[]} 543 var s = document.getElementsByTagName("script")[0]; 544 var b = document.createElement("script"); 545 b.type = "text/javascript";b.async = true; 546 b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js"; 547 s.parentNode.insertBefore(b, s);})(window.lintrk); 548 </script>
548 549
549<script src="//sparxhockey.com/cdn/shop/t/283/assets/trellis-commercial-use.js?v=107176710590311592721715707986" defer="defer"></script>
549 550 551 <noscript> 552 <img height="1" width="1" style="display:none;" alt="" src="https://px.ads.linkedin.com/collect/?pid=1761834&fmt=gif" /> 553 </noscript> 554 <!-- Linkedin Tracking End --> 555 <!-- Microsoft Clarity Tracking --> 556
556<script type="text/javascript"> 557 (function(c,l,a,r,i,t,y){ 558 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 559 t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; 560 y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); 561 })(window, document, "clarity", "script", "o5awz0yqru"); 562</script>
562 563<!-- END Microsoft Clarity Tracking --> 564 <meta name="google-site-verification" content="pyQrvT39gU33-cBN8Jrv19UfgaWwPECBN9X_XdpZ1ZM" /> 565<!-- BEGIN app block: shopify://apps/pandectes-gdpr/blocks/banner/58c0baa2-6cc1-480c-9ea6-38d6d559556a --> 566 567 568 569 <!-- TCF is active, scripts are loaded above --> 570 571
571<script> 572 if (!window.PandectesRulesSettings) { 573 window.PandectesRulesSettings = {"store":{"id":9327770,"adminMode":false,"headless":false,"storefrontRootDomain":"","checkoutRootDomain":"","storefrontAccessToken":""},"banner":{"revokableTrigger":false,"cookiesBlockedByDefault":"0","hybridStrict":false,"isActive":true},"geolocation":{"auOnly":false,"brOnly":false,"caOnly":true,"chOnly":false,"cnOnly":false,"euOnly":false,"inOnly":false,"jpOnly":false,"nzOnly":false,"thOnly":false,"trOnly":false,"zaOnly":false,"canadaOnly":true,"canadaLaw25":true,"canadaPipeda":true,"globalVisibility":false},"blocker":{"isActive":false,"googleConsentMode":{"isActive":false,"id":"","analyticsId":"","adwordsId":"","adStorageCategory":4,"analyticsStorageCategory":2,"functionalityStorageCategory":1,"personalizationStorageCategory":1,"securityStorageCategory":0,"customEvent":false,"redactData":false,"urlPassthrough":false,"dataLayerProperty":"dataLayer","waitForUpdate":500,"useNativeChannel":false,"debugMode":false},"facebookPixel":{"isActive":false,"id":"","ldu":false},"microsoft":{"isActive":false,"uetTags":""},"clarity":{},"amazon":{},"rakuten":{"isActive":false,"cmp":false,"ccpa":false},"gpcIsActive":true,"klaviyoIsActive":false,"defaultBlocked":0,"patterns":{"whiteList":[],"blackList":{"1":[],"2":[],"4":[],"8":[]},"iframesWhiteList":[],"iframesBlackList":{"1":[],"2":[],"4":[],"8":[]},"beaconsWhiteList":[],"beaconsBlackList":{"1":[],"2":[],"4":[],"8":[]}}}}; 574 const rulesScript = document.createElement('script'); 575 window.PandectesRulesSettings.auto = true; 576 rulesScript.src = "https://cdn.shopify.com/extensions/01a0d309-5aa0-76cf-9f48-2a42b2760403/gdpr-cookie-consent-411/assets/pandectes-rules.js"; 577 const firstChild = document.head.firstChild; 578 document.head.insertBefore(rulesScript, firstChild); 579 } 580 </script>
580 581 582
582<script> 583 584 window.PandectesSettings = {"store":{"id":9327770,"plan":"plus","theme":"PRODUCTION | 09-04-2025","primaryLocale":"en","adminMode":false,"headless":false,"storefrontRootDomain":"","checkoutRootDomain":"","storefrontAccessToken":"","useGeolocation":false},"impressions":{"enabled":true,"timezone":"America/New_York"},"tsPublished":1771614872,"declaration":{"declDays":"","declName":"","declPath":"","declType":"","isActive":false,"showType":true,"declHours":"","declYears":"","declDomain":"","declMonths":"","declMinutes":"","declPurpose":"","declSeconds":"","declSession":"","showPurpose":false,"declProvider":"","showProvider":true,"declIntroText":"","declRetention":"","declFirstParty":"","declThirdParty":"","showDateGenerated":true},"language":{"unpublished":[],"languageMode":"Single","fallbackLanguage":"en","languageDetection":"locale","languagesSupported":[]},"texts":{"managed":{"headerText":{"en":"We respect your privacy"},"consentText":{"en":"This website uses cookies to ensure you get the best experience."},"linkText":{"en":"Learn more"},"imprintText":{"en":"Imprint"},"googleLinkText":{"en":"Google's Privacy Terms"},"allowButtonText":{"en":"Accept"},"denyButtonText":{"en":"Decline"},"dismissButtonText":{"en":"Ok"},"leaveSiteButtonText":{"en":"Leave this site"},"preferencesButtonText":{"en":"Preferences"},"cookiePolicyText":{"en":"Consent preferences"},"preferencesPopupTitleText":{"en":"Manage consent preferences"},"preferencesPopupIntroText":{"en":"We use cookies to optimize website functionality, analyze the performance, and provide personalized experience to you. Some cookies are essential to make the website operate and function correctly. Those cookies cannot be disabled. In this window you can manage your preference of cookies."},"preferencesPopupSaveButtonText":{"en":"Save preferences"},"preferencesPopupCloseButtonText":{"en":"Close"},"preferencesPopupAcceptAllButtonText":{"en":"Accept all"},"preferencesPopupRejectAllButtonText":{"en":"Deny all"},"cookiesDetailsText":{"en":"Cookies details"},"preferencesPopupAlwaysAllowedText":{"en":"Always allowed"},"accessSectionParagraphText":{"en":"You have the right to request access to your data at any time."},"accessSectionTitleText":{"en":"Data portability"},"accessSectionAccountInfoActionText":{"en":"Personal data"},"accessSectionDownloadReportActionText":{"en":"Request export"},"accessSectionGDPRRequestsActionText":{"en":"Data subject requests"},"accessSectionOrdersRecordsActionText":{"en":"Orders"},"rectificationSectionParagraphText":{"en":"You have the right to request your data to be updated whenever you think it is appropriate."},"rectificationSectionTitleText":{"en":"Data Rectification"},"rectificationCommentPlaceholder":{"en":"Describe what you want to be updated"},"rectificationCommentValidationError":{"en":"Comment is required"},"rectificationSectionEditAccountActionText":{"en":"Request an update"},"erasureSectionTitleText":{"en":"Right to be forgotten"},"erasureSectionParagraphText":{"en":"You have the right to ask all your data to be erased. After that, you will no longer be able to access your account."},"erasureSectionRequestDeletionActionText":{"en":"Request personal data deletion"},"consentDate":{"en":"Consent date"},"consentId":{"en":"Consent ID"},"consentSectionChangeConsentActionText":{"en":"Change consent preference"},"consentSectionConsentedText":{"en":"You consented to the cookies policy of this website on"},"consentSectionNoConsentText":{"en":"You have not consented to the cookies policy of this website."},"consentSectionTitleText":{"en":"Your cookie consent"},"consentStatus":{"en":"Consent preference"},"confirmationFailureMessage":{"en":"Your request was not verified. Please try again and if problem persists, contact store owner for assistance"},"confirmationFailureTitle":{"en":"A problem occurred"},"confirmationSuccessMessage":{"en":"We will soon get back to you as to your request."},"confirmationSuccessTitle":{"en":"Your request is verified"},"guestsSupportEmailFailureMessage":{"en":"Your request was not submitted. Please try again and if problem persists, contact store owner for assistance."},"guestsSupportEmailFailureTitle":{"en":"A problem occurred"},"guestsSupportEmailPlaceholder":{"en":"E-mail address"},"guestsSupportEmailSuccessMessage":{"en":"If you are registered as a customer of this store, you will soon receive an email with instructions on how to proceed."}
584,"guestsSupportEmailSuccessTitle":{"en":"Thank you for your request"},"guestsSupportEmailValidationError":{"en":"Email is not valid"},"guestsSupportInfoText":{"en":"Please login with your customer account to further proceed."},"submitButton":{"en":"Submit"},"submittingButton":{"en":"Submitting..."},"cancelButton":{"en":"Cancel"},"declIntroText":{"en":"We use cookies to optimize website functionality, analyze the performance, and provide personalized experience to you. Some cookies are essential to make the website operate and function correctly. Those cookies cannot be disabled. In this window you can manage your preference of cookies."},"declName":{"en":"Name"},"declPurpose":{"en":"Purpose"},"declType":{"en":"Type"},"declRetention":{"en":"Retention"},"declProvider":{"en":"Provider"},"declFirstParty":{"en":"First-party"},"declThirdParty":{"en":"Third-party"},"declSeconds":{"en":"seconds"},"declMinutes":{"en":"minutes"},"declHours":{"en":"hours"},"declWeeks":{"en":"week(s)"},"declDays":{"en":"days"},"declMonths":{"en":"months"},"declYears":{"en":"years"},"declSession":{"en":"Session"},"declDomain":{"en":"Domain"},"declPath":{"en":"Path"}}
584,"categories":{"strictlyNecessaryCookiesTitleText":{"en":"Strictly necessary cookies"},"strictlyNecessaryCookiesDescriptionText":{"en":"These cookies are essential in order to enable you to move around the website and use its features, such as accessing secure areas of the website. The website cannot function properly without these cookies."},"functionalityCookiesTitleText":{"en":"Functional cookies"},"functionalityCookiesDescriptionText":{"en":"These cookies enable the site to provide enhanced functionality and personalisation. They may be set by us or by third party providers whose services we have added to our pages. If you do not allow these cookies then some or all of these services may not function properly."},"performanceCookiesTitleText":{"en":"Performance cookies"},"performanceCookiesDescriptionText":{"en":"These cookies enable us to monitor and improve the performance of our website. For example, they allow us to count visits, identify traffic sources and see which parts of the site are most popular."},"targetingCookiesTitleText":{"en":"Targeting cookies"},"targetingCookiesDescriptionText":{"en":"These cookies may be set through our site by our advertising partners. They may be used by those companies to build a profile of your interests and show you relevant adverts on other sites. They do not store directly personal information, but are based on uniquely identifying your browser and internet device. If you do not allow these cookies, you will experience less targeted advertising."},"unclassifiedCookiesTitleText":{"en":"Unclassified cookies"},"unclassifiedCookiesDescriptionText":{"en":"Unclassified cookies are cookies that we are in the process of classifying, together with the providers of individual cookies."}},"auto":{}},"library":{"previewMode":false,"fadeInTimeout":0,"defaultBlocked":0,"showLink":true,"showImprintLink":false,"showGoogleLink":false,"enabled":true,"cookie":{"expiryDays":365,"secure":true,"domain":""},"dismissOnScroll":false,"dismissOnWindowClick":false,"dismissOnTimeout":false,"palette":{"popup":{"background":"#FFFFFF","backgroundForCalculations":{"a":1,"b":255,"g":255,"r":255},"text":"#000000"},"button":{"background":"transparent","backgroundForCalculations":{"a":1,"b":255,"g":255,"r":255},"text":"#000000","textForCalculation":{"a":1,"b":0,"g":0,"r":0},"border":"#000000"}},"content":{"href":"/pages/privacy-policy","imprintHref":"","close":"✕","target":"","logo":"<img class=\"cc-banner-logo\" style=\"max-height: 40px;\" src=\"https://sparx-dev.myshopify.com/cdn/shop/files/pandectes-banner-logo.png?v=1771614872872\" alt=\"Cookie banner\" />"},"window":"<div role=\"dialog\" aria-label=\"{{header}}\" aria-describedby=\"cookieconsent:desc\" id=\"pandectes-banner\" class=\"cc-window-wrapper cc-bottom-wrapper\"><div class=\"pd-cookie-banner-window cc-window {{classes}}\">{{children}}</div></div>","compliance":{"custom":"<div class=\"cc-compliance cc-highlight\">{{preferences}}{{allow}}</div>"},"type":"custom","layouts":{"basic":"{{logo}}{{messagelink}}{{compliance}}{{close}}"},"position":"bottom","theme":"wired","revokable":false,"animateRevokable":false,"revokableReset":false,"revokableLogoUrl":"https://sparx-dev.myshopify.com/cdn/shop/files/pandectes-reopen-logo.png","revokablePlacement":"bottom-left","revokableMarginHorizontal":15,"revokableMarginVertical":15,"static":false,"autoAttach":true,"hasTransition":true,"blacklistPage":[""],"elements":{"close":"<button aria-label=\"\" type=\"button\" class=\"cc-close\">{{close}}</button>","dismiss":"<button type=\"button\" class=\"cc-btn cc-btn-decision cc-dismiss\">{{dismiss}}</button>","allow":"<button type=\"button\" class=\"cc-btn cc-btn-decision cc-allow\">{{allow}}</button>","deny":"<button type=\"button\" class=\"cc-btn cc-btn-decision cc-deny\">{{deny}}</button>","preferences":"<button type=\"button\" class=\"cc-btn cc-settings\" aria-controls=\"pd-cp-preferences\" onclick=\"Pandectes.fn.openPreferences()\">{{preferences}}</button>"}},"geolocation":{"auOnly":false,"brOnly":false,"caOnly":true,"chOnly":false,"cnOnly":false,"euOnly":false,"inOnly":false,"jpOnly":false,"nzOnly":false,"thOnly":false,"trOnly":false,"zaOnly":false,"canadaOnly":true,"canadaLaw25":true,"canadaPipeda":true,"globalVisibility":false},"dsr":{"guestsSupport":false,"accessSectionDownloadReportAuto":false},"banner":{"resetTs":1742480692,"extraCss":" .cc-banner-logo {max-width: 24em!important;} @media(min-width: 768px) {.cc-window.cc-floating{max-width: 24em!important;width: 24em!important;}} .cc-message, .pd-cookie-banner-window .cc-header, .cc-logo {text-align: center} .cc-window-wrapper{z-index: 2147483647;} .cc-window{z-index: 2147483647;font-family: inherit;} .pd-cookie-banner-window .cc-header{font-family: inherit;} .pd-cp-ui{font-family: inherit; background-color: #FFFFFF;color:#000000;} button.pd-cp-btn, a.pd-cp-btn{} input + .pd-cp-preferences-slider{background-color: rgba(0, 0, 0, 0.3)} .pd-cp-scrolling-section::-webkit-scrollbar{background-color: rgba(0, 0, 0, 0.3)} input:checked + .pd-cp-preferences-slider{background-color: rgba(0, 0, 0, 1)} .pd-cp-scrolling-section::-webkit-scrollbar-thumb {background-color: rgba(0, 0, 0, 1)} .pd-cp-ui-close{color:#000000;} .pd-cp-preferences-slider:before{background-color: #FFFFFF} .pd-cp-title:before {border-color: #000000!important} .pd-cp-preferences-slider{background-color:#000000} .pd-cp-toggle{color:#000000!important} @media(max-width:699px) {.pd-cp-ui-close-top svg {fill: #000000}} .pd-cp-toggle:hover,.pd-cp-toggle:visited,.pd-cp-toggle:active{color:#000000!important} .pd-cookie-banner-window {box-shadow: 0 0 18px rgb(0 0 0 / 20%);} ","customJavascript":{"useButtons":true},"showPoweredBy":false,"logoHeight":40,"revokableTrigger":false,"hybridStrict":false,"cookiesBlockedByDefault":"0","isActive":true,"implicitSavePreferences":true,"cookieIcon":false,"blockBots":false,"showCookiesDetails":true,"hasTransition":true,"blockingPage":false,"showOnlyLandingPage":false,"leaveSiteUrl":"https://pandectes.io","linkRespectStoreLang":false},"cookies":{"0":[{"name":"keep_alive","type":"http","domain":"sparxhockey.com","path":"/","provider":"Shopify","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Used when international domain redirection is enabled to determine if a request is the first one of a session."}},{"name":"secure_customer_sig","type":"http","domain":"sparxhockey.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used to identify a user after they sign into a shop as a customer so they do not need to log in again."}},{"name":"localization","type":"http","domain":"sparxhockey.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used to localize the cart to the correct country."}},{"name":"cart_currency","type":"http","domain":"sparxhockey.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 month(s)","session":false,"expires":1,"unit":"declMonths","purpose":{"en":"Used after a checkout is completed to initialize a new empty cart with the same currency as the one just used."}},{"name":"cart","type":"http","domain":"sparxhockey.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 month(s)","session":false,"expires":1,"unit":"declMonths","purpose":{"en":"Contains information related to the user's cart."}},{"name":"cart_sig","type":"http","domain":"sparxhockey.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 month(s)","session":false,"expires":1,"unit":"declMonths","purpose":{"en":"A hash of the contents of a cart. This is used to verify the integrity of the cart and to ensure performance of some cart operations."}},{"name":"shopify_pay_redirect","type":"http","domain":"sparxhockey.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 hour(s)","session":false,"expires":1,"unit":"declHours","purpose":{"en":"Used to accelerate the checkout process when the buyer has a Shop Pay account."}},{"name":"_tracking_consent","type":"http","domain":".sparxhockey.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used to store a user's preferences if a merchant has set up privacy rules in the visitor's region."}},{"name":"keep_alive","type":"http","domain":"sparxhockey.eu","path":"/","provider":"Shopify","firstParty":false,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Used when international domain redirection is enabled to determine if a request is the first one of a session."}},{"name":"secure_customer_sig","type":"http","domain":"sparxhockey.eu","path":"/","provider":"Shopify","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used to identify a user after they sign into a shop as a customer so they do not need to log in again."}},{"name":"localization","type":"http","domain":"sparxhockey.eu","path":"/","provider":"Shopify","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used to localize the cart to the correct country."}},{"name":"cart_currency","type":"http","domain":"sparxhockey.eu","path":"/","provider":"Shopify","firstParty":false,"retention":"2 week(s)","session":false,"expires":2,"unit":"declWeeks","purpose":{"en":"Used after a checkout is completed to initialize a new empty cart with the same currency as the one just used."}},{"name":"shopify_pay_redirect","type":"http","domain":"sparxhockey.eu","path":"/","provider":"Shopify","firstParty":false,"retention":"1 hour(s)","session":false,"expires":1,"unit":"declHours","purpose":{"en":"Used to accelerate the checkout process when the buyer has a Shop Pay account."}},{"name":"_tracking_consent","type":"http","domain":".sparxhockey.eu","path":"/","provider":"Shopify","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used to store a user's preferences if a merchant has set up privacy rules in the visitor's region."}},{"name":"cart","type":"http","domain":"sparxhockey.eu","path":"/","provider":"Shopify","firstParty":false,"retention":"1 month(s)","session":false,"expires":1,"unit":"declMonths","purpose":{"en":"Contains information related to the user's cart."}},{"name":"cart_sig","type":"http","domain":"sparxhockey.eu","path":"/","provider":"Shopify","firstParty":false,"retention":"1 month(s)","session":false,"expires":1,"unit":"declMonths","purpose":{"en":"A hash of the contents of a cart. This is used to verify the integrity of the cart and to ensure performance of some cart operations."}}],"1":[],"2":[{"name":"_shopify_y","type":"http","domain":".sparxhockey.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Shopify analytics."}}
584,{"name":"_landing_page","type":"http","domain":".sparxhockey.com","path":"/","provider":"Shopify","firstParty":true,"retention":"2 week(s)","session":false,"expires":2,"unit":"declWeeks","purpose":{"en":"Capture the landing page of visitor when they come from other sites."}},{"name":"_orig_referrer","type":"http","domain":".sparxhockey.com","path":"/","provider":"Shopify","firstParty":true,"retention":"2 week(s)","session":false,"expires":2,"unit":"declWeeks","purpose":{"en":"Allows merchant to identify where people are visiting them from."}},{"name":"_shopify_s","type":"http","domain":".sparxhockey.com","path":"/","provider":"Shopify","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Used to identify a given browser session/shop combination. Duration is 30 minute rolling expiry of last use."}},{"name":"_shopify_sa_p","type":"http","domain":".sparxhockey.com","path":"/","provider":"Shopify","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Capture the landing page of visitor when they come from other sites to support marketing analytics."}},{"name":"_shopify_sa_t","type":"http","domain":".sparxhockey.com","path":"/","provider":"Shopify","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Capture the landing page of visitor when they come from other sites to support marketing analytics."}},{"name":"_shopify_y","type":"http","domain":".sparxhockey.eu","path":"/","provider":"Shopify","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Shopify analytics."}},{"name":"_shopify_s","type":"http","domain":".sparxhockey.eu","path":"/","provider":"Shopify","firstParty":false,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Used to identify a given browser session/shop combination. Duration is 30 minute rolling expiry of last use."}},{"name":"_orig_referrer","type":"http","domain":".sparxhockey.eu","path":"/","provider":"Shopify","firstParty":false,"retention":"2 week(s)","session":false,"expires":2,"unit":"declWeeks","purpose":{"en":"Allows merchant to identify where people are visiting them from."}},{"name":"_landing_page","type":"http","domain":".sparxhockey.eu","path":"/","provider":"Shopify","firstParty":false,"retention":"2 week(s)","session":false,"expires":2,"unit":"declWeeks","purpose":{"en":"Capture the landing page of visitor when they come from other sites."}},{"name":"_shopify_sa_t","type":"http","domain":"sparxhockey.eu","path":"/","provider":"Shopify","firstParty":false,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Capture the landing page of visitor when they come from other sites to support marketing analytics."}},{"name":"_clck","type":"http","domain":".sparxhockey.eu","path":"/","provider":"Microsoft","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used by Microsoft Clarity to store a unique user ID."}},{"name":"_ga","type":"http","domain":".sparxhockey.eu","path":"/","provider":"Google","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Cookie is set by Google Analytics with unknown functionality"}},{"name":"_clsk","type":"http","domain":".sparxhockey.eu","path":"/","provider":"Microsoft","firstParty":false,"retention":"1 day(s)","session":false,"expires":1,"unit":"declDays","purpose":{"en":"Used by Microsoft Clarity to store a unique user ID.\t"}},{"name":"_shopify_sa_p","type":"http","domain":"sparxhockey.eu","path":"/","provider":"Shopify","firstParty":false,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Capture the landing page of visitor when they come from other sites to support marketing analytics."}},{"name":"_ga","type":"http","domain":".sparxhockey.com","path":"/","provider":"Google","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Cookie is set by Google Analytics with unknown functionality"}},{"name":"_shopify_s","type":"http","domain":"eu","path":"/","provider":"Shopify","firstParty":false,"retention":"Session","session":true,"expires":1,"unit":"declSeconds","purpose":{"en":"Used to identify a given browser session/shop comb
584ination. Duration is 30 minute rolling expiry of last use."}},{"name":"_ga_*","type":"http","domain":".sparxhockey.eu","path":"/","provider":"Google","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"_ga_*","type":"http","domain":".sparxhockey.com","path":"/","provider":"Google","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}}],"4":[{"name":"_ttp","type":"http","domain":".sparxhockey.com","path":"/","provider":"TikTok","firstParty":true,"retention":"3 month(s)","session":false,"expires":3,"unit":"declMonths","purpose":{"en":"To measure and improve the performance of your advertising campaigns and to personalize the user's experience (including ads) on TikTok."}},{"name":"_uetsid","type":"http","domain":".sparxhockey.com","path":"/","provider":"Bing","firstParty":true,"retention":"1 day(s)","session":false,"expires":1,"unit":"declDays","purpose":{"en":"This cookie is used by Bing to determine what ads should be shown that may be relevant to the end user perusing the site."}},{"name":"_uetvid","type":"http","domain":".sparxhockey.com","path":"/","provider":"Bing","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used to track visitors on multiple websites, in order to present relevant advertisement based on the visitor's preferences."}},{"name":"__kla_id","type":"http","domain":"sparxhockey.eu","path":"/","provider":"Klaviyo","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Tracks when someone clicks through a Klaviyo email to your website."}},{"name":"_fbp","type":"http","domain":".sparxhockey.eu","path":"/","provider":"Facebook","firstParty":false,"retention":"3 month(s)","session":false,"expires":3,"unit":"declMonths","purpose":{"en":"Cookie is placed by Facebook to track visits across websites."}},{"name":"__kla_id","type":"http","domain":"sparxhockey.com","path":"/","provider":"Klaviyo","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Tracks when someone clicks through a Klaviyo email to your website."}}],"8":[{"name":"geolizr_geodata","type":"http","domain":".sparxhockey.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"_cq_duid","type":"http","domain":".sparxhockey.com","path":"/","provider":"Unknown","firstParty":true,"retention":"3 month(s)","session":false,"expires":3,"unit":"declMonths","purpose":{"en":""}},{"name":"Shoplift_Analytics","type":"http","domain":".sparxhockey.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"_rdt_uuid","type":"http","domain":".sparxhockey.com","path":"/","provider":"Unknown","firstParty":true,"retention":"3 month(s)","session":false,"expires":3,"unit":"declMonths","purpose":{"en":""}},{"name":"_cq_suid","type":"http","domain":".sparxhockey.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":-56,"unit":"declYears","purpose":{"en":""}},{"name":"Shoplift_Essential","type":"http","domain":".sparxhockey.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"geolizr_geodata","type":"http","domain":".sparxhockey.eu","path":"/","provider":"Unknown","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"wpm-test-cookie","type":"http","domain":"sparxhockey.eu","path":"/","provider":"Unknown","firstParty":false,"retention":"Session","session":true,"expires":1,"unit":"declSeconds","purpose":{"en":""}},{"name":"cookiecookie","type":"http","domain":"sparxhockey.eu","path":"/","provider":"Unknown","firstParty":false,"retention":"Session","session":true,"expires":1,"unit":"declSeconds","purpose":{"en":""}},{"name":"wpm-test-cookie","type":"http","domain":"eu","path":"/","provider":"Unknown","firstParty":false,"retention":"Session","session":true,"expires":1,"unit":"declSeconds","purpose":{"en":""}},{"name":"sa-user-id-v2","type":"http","domain":"sparxhockey.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"sa-user-id","type":"http","domain":"sparxhockey.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"sa-user-id-v3","type":"http","domain":"sparxhockey.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}}]},"blocker":{"isActive":false,"googleConsentMode":{"id":"","analyticsId":"","adwordsId":"","isActive":false,"adStorageCategory":4,"analyticsStorageCategory":2,"personalizationStorageCategory":1,"functionalityStorageCategory":1,"customEvent":false,"securityStorageCategory":0,"redactData":false,"urlPassthrough":false,"dataLayerProperty":"dataLayer","waitForUpdate":500,"useNativeChannel":false,"debugMode":false},"facebookPixel":{"id":"","isActive":false,"ldu":false},"amazon":{},"microsoft":{"isActive":false,"uetTags":""},"rakuten":{"isActive":false,"cmp":false,"ccpa":false},"klaviyoIsActive":false,"gpcIsActive":true,"clarity":{},"defaultBlocked":0,"patterns":{"whiteList":[],"blackList":{"1":[],"2":[],"4":[],"8":[]},"iframesWhiteList":[],"iframesBlackList":{"1":[],"2":[],"4":[],"8":[]},"beaconsWhiteList":[],"beaconsBlackList":{"1":[],"2":[],"4":[],"8":[]}}}}; 585 586 window.addEventListener('DOMContentLoaded', function(){ 587 const script = document.createElement('script'); 588 589 script.src = "https://cdn.shopify.com/extensions/01a0d309-5aa0-76cf-9f48-2a42b2760403/gdpr-cookie-consent-411/assets/pandectes-core.js"; 590 591 script.defer = true; 592 document.body.appendChild(script); 593 }) 594 </script>
594 595 596 597 598 599 600 601 602<!-- END app block --><!-- BEGIN app block: shopify://apps/okendo/blocks/theme-settings/bb689e69-ea70-4661-8fb7-ad24a2e23c29 --><!-- BEGIN app snippet: header-metafields --> 603 604 605 606 607 608 609 610 611 612 613 614 615 616 <style data-oke-reviews-version="0.85.10" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/okendo-reviews-styles.6dbb2446.css"></style><style data-oke-reviews-version="0.85.10" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/modules/okendo-star-rating.4cb378a8.css"></style><style data-oke-reviews-version="0.85.10" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/modules/okendo-reviews-keywords.0942444f.css"></style><style data-oke-reviews-version="0.85.10" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/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:"î¤"}
616.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://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/fonts/oke-widget-icons.ttf) format("truetype"),url(https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/fonts/oke-widget-icons.woff) format("woff"),url(https://d3hw6dc1ow8pp2.cloudfront.net/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
616or: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}
616to{opacity:1}}.layout-panel-flex>div:has([data-oke-container]){width:100%} 617.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:")"} 618.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} 619.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> 620 621
621<script type="application/json" id="oke-reviews-settings">{"subscriberId":"c038d484-f39c-4134-a76b-581c880e6b4b","analyticsSettings":{"isWidgetOnScreenTrackingEnabled":false,"provider":"gtm"},"locale":"en","localeAndVariant":{"code":"en"},"matchCustomerLocale":false,"widgetSettings":{"global":{"dateSettings":{"format":{"type":"relative"}},"hideOkendoBranding":true,"reviewTranslationsMode":"off","showIncentiveIndicator":true,"searchEnginePaginationEnabled":false,"stars":{"backgroundColor":"#E5E5E5","foregroundColor":"#E00F00","interspace":2,"shape":{"type":"default"},"showBorder":false},"font":{"fontType":"custom","fontFamily":"GOTHAM"}},"homepageCarousel":{"slidesPerPage":{"large":3,"medium":2},"totalSlides":12,"scrollBehaviour":"slide","style":{"showDates":true,"border":{"color":"#E5E5EB","width":{"value":1,"unit":"px"}},"bodyFont":{"fontSize":{"value":14,"unit":"px"},"fontType":"custom","fontFamily":"GOTHAM","fontWeight":400,"hasCustomFontSettings":true},"headingFont":{"fontSize":{"value":24,"unit":"px"},"fontType":"custom","fontFamily":"GOTHAM","fontWeight":600,"hasCustomFontSettings":true},"arrows":{"color":"#676986","size":{"value":24,"unit":"px"},"enabled":true},"avatar":{"backgroundColor":"#E5E5EB","placeholderTextColor":"#2C3E50","size":{"value":48,"unit":"px"},"enabled":false},"media":{"size":{"value":80,"unit":"px"},"imageGap":{"value":4,"unit":"px"},"enabled":true},"stars":{"height":{"value":18,"unit":"px"}},"productImageSize":{"value":48,"unit":"px"},"layout":{"name":"default","reviewDetailsPosition":"below","showProductName":false,"showAttributeBars":false,"showProductDetails":"only-when-grouped"},"highlightColor":"#0CAB13","spaceAbove":{"value":20,"unit":"px"},"text":{"primaryColor":"#2C3E50","fontSizeRegular":{"value":14,"unit":"px"},"fontSizeSmall":{"value":12,"unit":"px"},"secondaryColor":"#676986"},"spaceBelow":{"value":20,"unit":"px"}},"defaultSort":"rating desc","autoPlay":true,"truncation":{"bodyMaxLines":4,"truncateAll":false,"enabled":true}},"mediaCarousel":{"minimumImages":1,"linkText":"Read More","autoPlay":false,"slideSize":"medium","arrowPosition":"outside"},"mediaGrid":{"gridStyleDesktop":{"layout":"default-desktop"},"gridStyleMobile":{"layout":"default-mobile"},"showMoreArrow":{"arrowColor":"#676986","enabled":true,"backgroundColor":"#f4f4f6"},"linkText":"Read More","infiniteScroll":false,"gapSize":{"value":10,"unit":"px"}},"questions":{"initialPageSize":6,"loadMorePageSize":6},"reviewsBadge":{"layout":"large","colorScheme":"dark"},"reviewsTab":{"enabled":false},"reviewsWidget":{"tabs":{"reviews":true,"questions":false},"header":{"columnDistribution":"space-between","verticalAlignment":"top","blocks":[{"columnWidth":"one-third","modules":[{"name":"rating-average","layout":"one-line"},{"name":"rating-breakdown","backgroundColor":"#E5E5E5","shadingColor":"#626262","stretchMode":"contain"}],"textAlignment":"left"},{"columnWidth":"two-thirds","modules":[{"name":"recommended"},{"name":"media-carousel","imageGap":{"value":4,"unit":"px"},"imageHeight":{"value":120,"unit":"px"}}],"textAlignment":"left"}]},"style":{"showDates":true,"border":{"color":"#E5E5EB","width":{"value":1,"unit":"px"}},"bodyFont":{"hasCustomFontSettings":false},"headingFont":{"hasCustomFontSettings":false},"filters":{"backgroundColorActive":"#E00F00","backgroundColor":"#FFFFFF","borderColor":"#626262","borderRadius":{"value":100,"unit":"px"},"borderColorActive":"#E00F00","textColorActive":"#FFFFFF","textColor":"#626262","searchHighlightColor":"#B2F9E9"},"avatar":{"backgroundColor":"#626262","placeholderTextColor":"#FFFFFF","size":{"value":48,"unit":"px"},"enabled":true},"stars":{"height":{"value":18,"unit":"px"}},"shadingColor":"#F7F7F8","productImageSize":{"value":48,"unit":"px"},"button":{"backgroundColorActive":"#E00F00","borderColorHover":"#DBDDE4","backgroundColor":"#E00F00","borderColor":"#DBDDE4","backgroundColorHover":"#E00F00","textColorHover":"#FFFFFF","borderRadius":{"value":2,"unit":"px"},"borderWidth":{"value":0,"unit":"px"},"borderColorActive":"#676986","textColorActive":"#FFFFFF","textColor":"#FFFFFF","font":{"fontSize":{"value":18,"unit":"px"},"fontType":"custom","fontFamily":"GothamBlack","fontWeight":700,"hasCu
621stomFontSettings":true}},"highlightColor":"#626262","spaceAbove":{"value":40,"unit":"px"},"text":{"primaryColor":"#626262","fontSizeRegular":{"value":16,"unit":"px"},"fontSizeLarge":{"value":20,"unit":"px"},"fontSizeSmall":{"value":12,"unit":"px"},"secondaryColor":"#626262"},"spaceBelow":{"value":20,"unit":"px"},"attributeBar":{"style":"default","backgroundColor":"#D3D4DD","shadingColor":"#9A9DB1","markerColor":"#00CAAA"}},"showWhenEmpty":true,"reviews":{"list":{"layout":{"collapseReviewerDetails":false,"columnAmount":4,"name":"default","showAttributeBars":false,"borderStyle":"full","showProductVariantName":false,"showProductDetails":"only-when-grouped"},"initialPageSize":5,"media":{"layout":"thumbnail","size":{"value":200,"unit":"px"},"imageGap":{"value":4,"unit":"px"}},"truncation":{"bodyMaxLines":4,"truncateAll":false,"enabled":true},"loadMorePageSize":5},"controls":{"filterMode":"closed","defaultSort":"has_media desc","writeReviewButtonEnabled":true,"freeTextSearchEnabled":false}}},"starRatings":{"showWhenEmpty":false,"clickBehavior":"scroll-to-widget","style":{"text":{"content":"review-count","style":"number-and-text","brackets":false},"spaceAbove":{"value":0,"unit":"px"},"singleStar":false,"spaceBelow":{"value":0,"unit":"px"},"height":{"value":18,"unit":"px"}}}},"features":{"attributeFiltersEnabled":true,"recorderPlusEnabled":true,"recorderQandaPlusEnabled":true,"reviewsKeywordsEnabled":true,"reviewsSummariesEnabled":true}}</script>
621 622 <style id="oke-css-vars">:root{--oke-widget-spaceAbove:40px;--oke-widget-spaceBelow:20px;--oke-starRating-spaceAbove:0;--oke-starRating-spaceBelow:0;--oke-button-backgroundColor:#e00f00;--oke-button-backgroundColorHover:#e00f00;--oke-button-backgroundColorActive:#e00f00;--oke-button-textColor:#fff;--oke-button-textColorHover:#fff;--oke-button-textColorActive:#fff;--oke-button-borderColor:#dbdde4;--oke-button-borderColorHover:#dbdde4;--oke-button-borderColorActive:#676986;--oke-button-borderRadius:2px;--oke-button-borderWidth:0;--oke-button-fontWeight:700;--oke-button-fontSize:18px;--oke-button-fontFamily:GothamBlack,sans-serif;--oke-border-color:#e5e5eb;--oke-border-width:1px;--oke-text-primaryColor:#626262;--oke-text-secondaryColor:#626262;--oke-text-small:12px;--oke-text-regular:16px;--oke-text-large:20px;--oke-text-fontFamily:GOTHAM,sans-serif;--oke-avatar-size:48px;--oke-avatar-backgroundColor:#626262;--oke-avatar-placeholderTextColor:#fff;--oke-highlightColor:#626262;--oke-shadingColor:#f7f7f8;--oke-productImageSize:48px;--oke-attributeBar-shadingColor:#9a9db1;--oke-attributeBar-borderColor:undefined;--oke-attributeBar-backgroundColor:#d3d4dd;--oke-attributeBar-markerColor:#00caaa;--oke-filter-backgroundColor:#fff;--oke-filter-backgroundColorActive:#e00f00;--oke-filter-borderColor:#626262;--oke-filter-borderColorActive:#e00f00;--oke-filter-textColor:#626262;--oke-filter-textColorActive:#fff;--oke-filter-borderRadius:100px;--oke-filter-searchHighlightColor:#b2f9e9;--oke-mediaGrid-chevronColor:#676986;--oke-stars-foregroundColor:#e00f00;--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> 623 <style id="oke-reviews-custom-css">.grid__item [data-oke-star-rating]{margin-bottom:10px}[data-oke-widget] .okeReviews[data-oke-container].oke-w{padding-left:20px;padding-right:20px}div.okeReviews[data-oke-container] .oke-reviewContent .oke-reviewContent-title{font-weight:700;font-size:1.25em;color:#22252a;text-transform:uppercase;font-family:GothamBold;line-height:1.5}div.okeReviews[data-oke-container] .oke-reviewContent-body p{letter-spacing:.22px;line-height:1.5}div.oke-modal .okeReviews[data-oke-container].oke-w,div.okeReviews[data-oke-container] .oke-modal,div.okeReviews[data-oke-container] .oke-modal p,div.okeReviews[data-oke-container] .oke-modal .oke-helpful,div.okeReviews[data-oke-container] .oke-modal .oke-helpful-vote-button,div.okeReviews[data-oke-container] .oke-modal .oke-reviewContent-date{color:var(--oke-text-primaryColor)}div.okeReviews[data-oke-container] .oke-is-small .oke-w-reviews-head{display:block}div.okeReviews[data-oke-container] .oke-button{letter-spacing:1.4px;text-transform:uppercase}div.okeReviews[data-oke-container] .oke-is-small .oke-button,div.okeReviews[data-oke-container] .oke-is-small .oke-qw-header-askQuestion{width:100%}div.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):hover{box-shadow:none}.okeReviews[data-oke-container] .oke-w-reviews-writeReview{display:inherit}div.okeReviews[data-oke-container] .oke-is-small .oke-w-writeReview{margin-top:5px}div.okeReviews[data-oke-container] .oke-w-reviews-head .oke-w-reviews-filterToggle .oke-icon{vertical-align:initial}div.okeReviews[data-oke-container] .oke-w-reviews-head .oke-w-writeReview:before,div.okeReviews[data-oke-container] .oke-w-reviews-head .oke-w-reviews-filterToggle .oke-icon:before{vertical-align:bottom}div.okeReviews[data-oke-container] .oke-w-reviews-controls{flex-wrap:wrap}div.okeReviews[data-oke-container] .oke-is-small .oke-sortSelect-label{margin-right:0}div.okeReviews[data-oke-container] .oke-is-small .oke-w-reviews-count,div.okeReviews[data-oke-container] .oke-is-small .oke-sortSelect{font-size:.85em}div.okeReviews[data-oke-container] .oke-select{margin-bottom:0;background-size:17px}div.okeReviews[data-oke-container] .oke-helpful-vote-button{line-height:1.15}div.okeReviews[data-oke-container] .oke-qw-question-main-body{font-weight:400}@media all and (max-width:768px){.grid__item [data-oke-star-rating]{margin-top:20px}div.okeReviews[data-oke-container] .oke-reviewContent-body p{font-size:12px;letter-spacing:1px}}[data-oke-widget]{clear:both}</style> 624 <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>
624<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>
624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641<!-- END app snippet --> 642 643<!-- BEGIN app snippet: widget-plus-initialisation-script --> 644 645 646 647 648
648<script async id="okendo-reviews-script" src="https://cdn-static.okendo.io/reviews-widget-plus/js/okendo-reviews.js"></script>
648 649 650<!-- END app snippet --> 651 652 653<!-- END app block --><!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 --> 654 655 656 657 658 659 660 661 662 663 664 665 666
666<script async src="https://static.klaviyo.com/onsite/js/U7Lwta/klaviyo.js?company_id=U7Lwta"></script>
666 667
667<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>
667 668 669 670 671 672 673 674
674<script> 675 window.klaviyoReviewsProductDesignMode = false 676 </script>
676 677 678 679 680 681 682 683 684 685 686<!-- END app block -->
686<script src="https://cdn.shopify.com/extensions/01a0cf4b-e17d-79a4-82bf-0d53cc57a8ae/simple-bundle-2-124/assets/simple-bundles-v2.min.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 686
686
687<script src="https://cdn.shopify.com/extensions/019f6fd3-453f-7868-9402-ee98143404d9/klarna-on-site-messaging-34/assets/index.js" type="text/javascript" defer="defer"></script>
687 688<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
689<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: 9327770,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "index"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 689
689
690<script> 691 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 692</script>
vendor: 1 bytes, line 692
692
693<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}
693).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: 9327770,storefrontBaseUrl: "https://sparxhockey.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://sparxhockey.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["16072cab","8450a54b"],webPixelsConfigList: [{"id":"1445953635","configuration":"{\"pixel_id\":\"197682477266983\",\"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"]}
693,{"id":"1313144931","configuration":"{\"accountID\":\"U7Lwta\",\"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":"1206583395","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-TY879S980K\\\",\\\"AW-940107497\\\",\\\"GT-MBGGWDTQ\\\"],\\\"target_country\\\":\\\"US\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":\\\"G-TY879S980K\\\"},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":\\\"G-TY879S980K\\\"},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-TY879S980K\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-TY879S980K\\\",\\\"MC-403RXR9SBW\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-TY879S980K\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-TY879S980K\\\",\\\"AW-940107497\\\/o6Z9CP3Gy4YcEOnNo8AD\\\",\\\"MC-403RXR9SBW\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-TY879S980K\\\",\\\"MC-403RXR9SBW\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-TY879S980K\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":\\\"G-TY879S980K\\\"},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-TY879S980K\\\",\\\"AW-940107497\\\/0x6pCMHw04YcEOnNo8AD\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-TY879S980K\\\"}],\\\"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":"1031635043","configuration":"{\"storeIdentity\":\"sparx-dev.myshopify.com\",\"baseURL\":\"https:\\\/\\\/api.printful.com\\\/shopify-pixels\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"74f275712857ab41bea9d998dcb2f9da","type":"APP","apiClientId":156624,"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":"448266339","configuration":"{\"pixelCode\":\"CSP8MDJC77UFVF143DUG\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"22e92c2ad45662f435e4801458fb78cc","type":"APP","apiClientId":4383523,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":[]},"dataSharingState":"optimized"},{"id":"416252003","configuration":"{\"shop\":\"sparx-dev.myshopify.com\", \"shopliftUrl\":\"https:\/\/events.shoplift.ai\/api\/events\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"dabcda9558be25394b12ce3ce899568b","type":"APP","apiClientId":7521861633,"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":"348684387","configuration":"{\"advertisableEid\":\"XPNMSBIMOZGAJE7DX2KOCL\",\"pixelEid\":\"7LCOF3CUNRAP7ABO45V2WI\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"ba1ef5286d067b01e04bdc37410b8082","type":"APP","apiClientId":1005866,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
693,"dataSharingState":"unrestricted"},{"id":"41287779","configuration":"{\"discountCodeUrl\":\"https:\\\/\\\/api.getroster.com\\\/v2\\\/discount-codes\\\/shareable?access_token=vtfzawt2nes2shlmt2l0tjlyeviwdz09OWYdLDEL6DyicOPwgIxESrrfhHTBUw\",\"shopifyTypeId\":\"42\",\"captureEmitUrl\":\"https:\\\/\\\/sa.getroster.com\\\/sb\",\"token\":\"vtfzawt2nes2shlmt2l0tjlyeviwdz09OWYdLDEL6DyicOPwgIxESrrfhHTBUw\",\"customParamName\":\"rstr\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"84bf81a4dcbc137fcb816bcda4ac154c","type":"APP","apiClientId":1413402,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"16875619","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"12","type":"CUSTOM","privacyPurposes":["SALE_OF_DATA"],"name":"GTM + DataLayer Events"},{"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":"Sparx Hockey","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"sparx-dev.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/sparxhockey.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[{"id":"6954432168035","handle":"sparx-sharpener-3","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"40488619901027","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7587248210019","handle":"sparx-sharpener-3-with-beam","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42591841419363","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7689994698851","handle":"entry-level-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42990091501667","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"6954432528483","handle":"sparx-sharpener-3-pro","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"40488621015139","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7921392091235","handle":"sparx-samurai","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"43831876550755","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7921394090083","handle":"sparx-samurai-deburring-disc","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"43831896408163","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7921404903523","handle":"sparx-samurai-elite-stand","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"43832009392227","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"3886876486","handle":"1-2-radius-ring","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"11278879622","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"3886876998","handle":"3-8-fire-ring","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"
69311278885126","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"747855904867","handle":"the-starter-pack","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"8176697475171","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"6922583703651","handle":"starter-bundle-1","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"40376519819363","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"6923910938723","handle":"the-essentials-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"40381519986787","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"6923911331939","handle":"the-elite-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"40381520740451","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"6923911757923","handle":"the-pro-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"40381522116707","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"6954432790627","handle":"sparx-beam","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"40488621670499","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"6923912052835","handle":"the-figure-skater-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"40381523066979","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}],"purchasingCompany":null},},"https://sparxhockey.com/cdn","c8540278we853e1abpb62b2c4amde256306",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"121693798499","themePublished":"true","eventMetadataId":"95eef575-78a0-47c7-bf72-58a1533b12a9","pageType":"home","shopId":"9327770","storefrontBaseUrl":"https:\/\/sparxhockey.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"16072cab\", \"8450a54b\"]","isMerchantRequest":"false","hashVersion":"c8540278we853e1abpb62b2c4amde256306","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
693<script> 694 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 695 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 696 window.ShopifyAnalytics.meta.currency = 'USD'; 697 var meta = {"page":{"pageType":"home","requestId":"caeef708-09fe-418b-9ae3-d53c0587579b-1790279457"}}; 698 for (var attr in meta) { 699 window.ShopifyAnalytics.meta[attr] = meta[attr]; 700 } 701</script>
vendor: 1 bytes, line 701
701
702<script class="analytics"> 703 (function () { 704 var customDocumentWrite = function(content) { 705 var jquery = null; 706 707 if (window.jQuery) { 708 jquery = window.jQuery; 709 } else if (window.Checkout && window.Checkout.$) { 710 jquery = window.Checkout.$; 711 } 712 713 if (jquery) { 714 jquery('body').append(content); 715 } 716 }; 717 718 var hasLoggedConversion = function(token) { 719 if (token) { 720 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 721 } 722 return false; 723 } 724 725 var setCookieIfConversion = function(token) { 726 if (token) { 727 var twoMonthsFromNow = new Date(Date.now()); 728 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 729 730 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 731 } 732 } 733 734 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 735 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 736 if (trekkie.integrations) { 737 return; 738 } 739 trekkie.methods = [ 740 'identify', 741 'page', 742 'ready', 743 'track', 744 'trackForm', 745 'trackLink' 746 ]; 747 trekkie.factory = function(method) { 748 return function() { 749 var args = Array.prototype.slice.call(arguments); 750 args.unshift(method); 751 trekkie.push(args); 752 if (method == 'track' || method == 'page') { 753 try { 754 if (window.__TREKKIE_SHIM_QUEUE == null) { 755 window.__TREKKIE_SHIM_QUEUE = []; 756 } 757 window.__TREKKIE_SHIM_QUEUE.push({ 758 from: 'trekkie-stub', 759 method: method, 760 args: args.slice(1) 761 }); 762 } catch (e) { 763 // no-op 764 } 765 } 766 return trekkie; 767 }; 768 }; 769 for (var i = 0; i < trekkie.methods.length; i++) { 770 var key = trekkie.methods[i]; 771 trekkie[key] = trekkie.factory(key); 772 } 773 trekkie.load = function(config) { 774 trekkie.config = config || {}; 775 trekkie.config.initialDocumentCookie = document.cookie; 776 var first = document.getElementsByTagName('script')[0]; 777var script = document.createElement('script'); 778script.type = 'text/javascript'; 779script.onerror = function(e) { 780 var scriptFallback = document.createElement('script'); 781 scriptFallback.type = 'text/javascript'; 782 scriptFallback.onerror = function(error) { 783 var Monorail = { 784 produce: function produce(monorailDomain, schemaId, payload) { 785 var currentMs = new Date().getTime(); 786 var event = { 787 schema_id: schemaId, 788 payload: payload, 789 metadata: { 790 event_created_at_ms: currentMs, 791 event_sent_at_ms: currentMs 792 } 793 }; 794 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 795 }, 796 sendRequest: function sendRequest(endpointUrl, payload) { 797 // Try the sendBeacon API 798 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 799 var blobData = new window.Blob([payload], { 800 type: 'text/plain' 801 }); 802 803 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 804 return true; 805 } // sendBeacon was not successful 806 807 } // XHR beacon 808 809 var xhr = new XMLHttpRequest(); 810 811 try { 812 xhr.open('POST', endpointUrl); 813 xhr.setRequestHeader('Content-Type', 'text/plain'); 814 xhr.send(payload); 815 } catch (e) { 816 console.log(e); 817 } 818 819 return false; 820 }, 821 isIos12: function isIos12() { 822 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 823 } 824 }; 825 Monorail.produce('monorail-edge.shopifysvc.com', 826 'trekkie_storefront_load_errors/1.1', 827 {shop_id: 9327770, 828 theme_id: 121693798499, 829 app_name: "storefront", 830 context_url: window.location.href, 831 source_url: "//sparxhockey.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js"}); 832 833 }; 834 scriptFallback.async = true; 835 scriptFallback.src = '//sparxhockey.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js'; 836 first.parentNode.insertBefore(scriptFallback, first); 837}; 838script.async = true; 839script.src = '//sparxhockey.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js'; 840first.parentNode.insertBefore(script, first); 841 842 }; 843 trekkie.load( 844 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":9327770,"isMerchantRequest":null,"themeId":121693798499,"themeCityHash":"18305120534709913284","contentLanguage":"en","currency":"USD","eventMetadataId":"95eef575-78a0-47c7-bf72-58a1533b12a9"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 845 ); 846 847 var loaded = false;
848 trekkie.ready(function() { 849 if (loaded) return; 850 loaded = true; 851 852 window.ShopifyAnalytics.lib = window.trekkie; 853 854 var originalDocumentWrite = document.write; 855 document.write = customDocumentWrite; 856 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 857 document.write = originalDocumentWrite; 858 859 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 860 var token = match? match[1]: undefined; 861 if (!hasLoggedConversion(token)) { 862 setCookieIfConversion(token); 863 864 } 865 }); 866 867 window.ShopifyAnalytics.lib.page(null,{"pageType":"home","requestId":"caeef708-09fe-418b-9ae3-d53c0587579b-1790279457","shopifyEmitted":true}); 868 869 var eventsListenerScript = document.createElement('script'); 870 eventsListenerScript.async = true; 871 eventsListenerScript.src = "//sparxhockey.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 872 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 873})();</script>
873 874
874<script> 875 if (!window.ga || (window.ga && typeof window.ga !== 'function')) { 876 window.ga = function ga() { 877 (window.ga.q = window.ga.q || []).push(arguments); 878 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 879 window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"}); 880 } 881 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."); 882 }; 883 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 884 window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"}); 885 } 886 } 887</script>
vendor: 1 bytes, line 887
887
888<script 889 defer 890 src="https://sparxhockey.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 891 data-application="storefront-renderer" 892 data-shop-id="9327770" 893 data-render-region="gcp-us-central1" 894 data-page-type="index" 895 data-theme-instance-id="121693798499" 896 data-theme-name="Reformation" 897 data-theme-version="1.5.0" 898 data-monorail-region="shop_domain" 899 data-resource-timing-sampling-rate="10" 900 data-shs="true" 901 data-shs-beacon="true" 902 data-shs-export-with-fetch="true" 903 data-shs-logs-sample-rate="1" 904 data-shs-beacon-endpoint="https://sparxhockey.com/api/collect" 905></script>
905 906<meta name="shopify-y" content="dc1b70d9-347c-41e2-99d9-51d802d6c03b" data-expiration="1821837058000"><meta name="shopify-s" content="5db8f502-fde3-4379-b088-ab53693bf699" data-expiration="1790281258000"><meta name="new-cookie-storage-activated" content="t"> 907</head> 908<body class="animations-true button-uppercase-true navigation-uppercase-true product-title-uppercase-true template-index template-index"> 909 <a class="screen-reader-shortcut" href="#main-content">Skip to content</a> 910 <div id="wrapper"> 911 <!-- BEGIN sections: header-group --> 912<div id="shopify-section-sections--14453891924067__announcement-bar" class="shopify-section shopify-section-group-header-group announcement-bar-section"><link href="//sparxhockey.com/cdn/shop/t/283/assets/announcement-bar.css?v=88360378848898091951720033189" rel="stylesheet" type="text/css" media="all" /><div class="announcement-bar"> 913 <div class="announcement-bar--inner direction-left announcement-bar--carousel" style="--marquee-speed: 50s"><div class="carousel"><div class="announcement-bar--item carousel__slide" ><a href="/collections/sharpeners" target="_blank" class="fw-medium">BACK TO HOCKEY SALE - FREE SOFT TRAVEL CASE AND FREE SHIPPING ON ALL SHARPENERS</a></div></div></div> 914 </div> 915</div><div id="shopify-section-sections--14453891924067__header" class="shopify-section shopify-section-group-header-group header-section"><style> 916 .top-menu{ 917 height: 70px; 918 width: 100%; 919 color: #ffffff; 920 } 921 .top-menu .top-menu-content{ 922 display: flex; 923 justify-content: space-between; 924 align-items: center; 925 height: 100%; 926 padding: 15px; 927 } 928 .top-menu .currency-wrapper{ 929 display: flex; 930 align-items: center; 931 gap: 12px; 932 } 933 .top-menu .text-container{ 934 display: none; 935 } 936 .top-menu .menu-site-switcher a.button{ 937 font-style: normal; 938 font-weight: 600; 939 font-size: 11px; 940 line-height: 110%; 941 color: #ffffff; 942 border-color: #ffffff; 943 background-color: transparent; 944 letter-spacing: 0.1em; 945 padding: 14px; 946 } 947 .top-menu .menu-site-switcher a.button:hover{ 948 color: #ffffff; 949 } 950 @media only screen and (min-width: 1100px){ 951 .top-menu .top-menu-content{ 952 padding: 15px 20px; 953 } 954 .top-menu .text-container{ 955 display: flex; 956 text-align: center; 957 } 958 .top-menu .text-container p { 959 margin: 0; 960 font-style: normal; 961 font-size: 16px; 962 line-height: 160%; 963 letter-spacing: 0.02em; 964 color: #ffffff; 965 } 966 .top-menu .text-container p a { 967 font-style: normal; 968 font-weight: 600; 969 font-size: 16px; 970 line-height: 160%; 971 letter-spacing: 0.02em; 972 color: #ffffff; 973 text-decoration: underline; 974 } 975 .top-menu .text-container strong { 976 font-weight: 600; 977 } 978 } 979 @media only screen and (min-width: 1240px) { 980 .top-menu .top-menu-content { 981 padding: 15px 50px; 982 } 983 } 984</style><div class="top-menu" style="background-color: #2d2926" data-rp="/"> 985 <div class="top-menu-content"> 986 <div class="currency-wrapper"> 987 <div><div class="currency-picker-contain"> 988 989 <select class="currency-picker" name="currencies"> 990 991 992 <option value="USD" selected="selected">USD</option> 993 994 995 996 997 <option value="CAD">CAD</option> 998 999 1000 </select> 1001 1002 <div class="dropdown-currency desktop" > 1003 <a href="javascript:;" class="selected dropbtn" tabindex="1" > 1004 <svg width="24" height="18" viewBox="0 0 24 18" fill="none" xmlns="http://www.w3.org/2000/svg"> 1005 <path fill-rule="evenodd" clip-rule="evenodd" d="M0 0.156006H24V1.47185H0V0.156006ZM0 2.78769H24V4.10352H0V2.78769ZM0 5.41603H24V6.7352H0V5.41603ZM0 8.0477H24V9.36354H0V8.0477ZM0 10.6794H24V11.9952H0V10.6794ZM0 13.3077H24V14.6236H0V13.3077ZM0 15.9394H24V17.2552H0V15.9394Z" fill="#BD3D44"/> 1006 <path fill-rule="evenodd" clip-rule="evenodd" d="M0 1.47192H24V2.78776H0V1.47192ZM0 4.1036H24V5.4161H0V4.1036ZM0 6.73194H24V8.04778H0V6.73194ZM0 9.36362H24V10.6795H0V9.36362ZM0 11.9953H24V13.3111H0V11.9953ZM0 14.6236H24V15.9395H0V14.6236Z" fill="white"/> 1007 <path fill-rule="evenodd" clip-rule="evenodd" d="M0 0.156006H9.59951V9.36354H0V0.156006Z" fill="#192F5D"/> 1008 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.799753 0.550049L0.888569 0.914076H1.16982L0.942845 1.13784L1.
100802919 1.5052L0.799753 1.2781L0.57278 1.50186L0.659128 1.13784L0.429688 0.914076H0.715872L0.799753 0.550049ZM2.4009 0.550049L2.48725 0.914076H2.77097L2.54153 1.13784L2.62788 1.5052L2.4009 1.2781L2.17146 1.50186L2.25781 1.13784L2.03084 0.914076H2.31209L2.4009 0.550049ZM3.99959 0.550049L4.08841 0.914076H4.36719L4.14021 1.13784L4.22656 1.5052L3.99712 1.2781L3.77015 1.50186L3.8565 1.13784L3.62706 0.914076H3.91077L3.99959 0.550049ZM5.60074 0.550049L5.68709 0.914076H5.97081L5.74137 1.13784L5.83018 1.5052L5.60074 1.2781L5.3713 1.50186L5.46012 1.13784L5.23068 0.914076H5.51192L5.60074 0.550049ZM7.19942 0.550049L7.28824 0.914076H7.56949L7.34252 1.13784L7.42887 1.5052L7.19942 1.2781L6.97245 1.50186L7.0588 1.13784L6.83183 0.914076H7.11308L7.19942 0.550049ZM8.80058 0.550049L8.88693 0.914076H9.17064L8.9412 1.13784L9.03002 1.5052L8.80058 1.2781L8.57114 1.50186L8.65995 1.13784L8.43051 0.914076H8.71423L8.80058 0.550049ZM1.60156 1.4718L1.68791 1.83583H1.97163L1.74219 2.05959L1.82607 2.42362L1.60403 2.19986L1.37459 2.42362L1.456 2.05959L1.23396 1.83583H1.51521L1.60156 1.4718ZM3.20025 1.4718L3.28906 1.83583H3.57031L3.34087 2.05959L3.42969 2.42362L3.20025 2.19986L2.97081 2.42362L3.05962 2.05959L2.83018 1.83583H3.1139L3.20025 1.4718ZM4.8014 1.4718L4.88775 1.83583H5.17146L4.94202 2.05959L5.02837 2.42362L4.8014 2.19986L4.57196 2.42362L4.65831 2.05959L4.43133 1.83583H4.71258L4.8014 1.4718ZM6.40008 1.4718L6.4889 1.83583H6.77015L6.54071 2.05959L6.62952 2.42362L6.40008 2.19986L6.17311 2.42362L6.25946 2.05959L6.03002 1.83583H6.3162L6.40008 1.4718ZM8.00123 1.4718L8.08758 1.83583H8.3713L8.14186 2.05959L8.22821 2.42362L8.00123 2.19986L7.77179 2.42362L7.85814 2.05959L7.63117 1.83583H7.91242L8.00123 1.4718ZM0.799753 2.39022L0.888569 2.76093H1.16982L0.942845 2.98469L1.02919 3.34871L0.799753 3.12161L0.57278 3.34871L0.659128 2.98135L0.429688 2.75759H0.71
10085872L0.799753 2.39022ZM2.4009 2.39022L2.48725 2.75759H2.77097L2.54153 2.98135L2.62788 3.34537L2.4009 3.11827L2.17146 3.34537L2.25781 2.97801L2.03084 2.75425H2.31209L2.4009 2.39022ZM3.99959 2.39022L4.08841 2.75759H4.36719L4.14021 2.98135L4.22656 3.34537L3.99712 3.11827L3.77015 3.34537L3.8565 2.97801L3.62706 2.75425H3.91077L3.99959 2.39022ZM5.60074 2.39022L5.68709 2.75759H5.97081L5.74137 2.98135L5.83018 3.34537L5.60074 3.11827L5.3713 3.34537L5.46012 2.97801L5.23068 2.75425H5.51192L5.60074 2.39022ZM7.19942 2.39022L7.28824 2.75759H7.56949L7.34252 2.98135L7.42887 3.34537L7.19942 3.11827L6.97245 3.34537L7.0588 2.97801L6.83183 2.75425H7.11308L7.19942 2.39022ZM8.80058 2.39022L8.88693 2.75759H9.17064L8.9412 2.98135L9.03002 3.34537L8.80058 3.11827L8.57114 3.34537L8.65995 2.97801L8.43051 2.75425H8.71423L8.80058 2.39022ZM1.60156 3.31198L1.68791 3.676H1.97163L1.74219 3.89976L1.82854 4.26713L1.60156 4.04003L1.37212 4.26379L1.45847 3.89976L1.2315 3.676H1.51275L1.60156 3.31198ZM3.20025 3.31198L3.28906 3.676H3.57031L3.34087 3.89976L3.42969 4.26713L3.20025 4.04003L2.97081 4.26379L3.05962 3.89976L2.83018 3.676H3.1139L3.20025 3.31198ZM4.8014 3.31198L4.88775 3.676H5.17146L4.94202 3.89976L5.02837 4.26713L4.8014 4.04003L4.57196 4.26379L4.65831 3.89976L4.43133 3.676H4.71258L4.8014 3.31198ZM6.40008 3.31198L6.4889 3.676H6.77015L6.54318 3.89976L6.62952 4.26713L6.40008 4.04003L6.17311 4.26379L6.25946 3.89976L6.03002 3.676H6.3162L6.40008 3.31198ZM8.00123 3.31198L8.08758 3.676H8.3713L8.14186 3.89976L8.22821 4.26713L8.00123 4.04003L7.77179 4.26379L7.85814 3.89976L7.63117 3.676H7.91242L8.00123 3.31198ZM0.799753 4.23373L0.888569 4.59776H1.16982L0.942845 4.82152L1.02919 5.18888L0.799753 4.96179L0.57278 5.18555L0.659128 4.82152L0.429688 4.59776H0.715872L0.799753 4.23373ZM2.4009 4.23373L2.48725 4.59776H2.77097L2.54153 4.82152L2.62788 5.18555L2.4009 4.96179L2.17146 5.18555L2.25781 4.82152L2.03084 4.59776H2.31209L2.4009 4.23373ZM3.99959 4.23373L4.08841 4.59776H4.36719L4.14021 4.82152L4.22656 5.18888L3.99712 4.96179L3.77015 5.18555L3.8565 4.82152L3.62706 4.59776H3.91077L3.99959 4.23373ZM5.60074 4.23373L5.68709 4.59776H5.97081L5.74137 4.82152L5.83018 5.18888L5.60074 4.96179L5.3713 5.18555L5.46012 4.82152L5.23068 4.59776H5.51192L5.60074 4.23373ZM7.19942 4.23373L7.28824 4.59776H7.56949L7.34252 4.82152L7.42887 5.18888L7.19942 4.96179L6.97245 5.18555L7.0588 4.82152L6.83183 4.59776H7.11308L7.19942 4.23373ZM8.80058 4.23373L8.88693 4.59776H9.17064L8.9412 4.82152L9.03002 5.18888L8.80058 4.96179L8.57114 5.18555L8.65995 4.82152L8.43051 4.59776H8.71423L8.80058 4.23373ZM1.60156 5.15549L1.68791 5.51952H1.97163L1.74219 5.74327L1.82854 6.1073L1.60156 5.8802L1.37212 6.1073L1.45847 5.73993L1.2315 5.51617H1.51275L1.60156 5.15549ZM3.20025 5.15549L3.28906 5.51952H3.57031L3.34087 5.74327L3.42969 6.1073L3.20025 5.8802L2.97081 6.1073L3.05962 5.73993L2.83018 5.51617H3.1139L3.20025 5.15549ZM4.8014 5.15549L4.88775 5.51952H5.17146L4.94202 5.74327L5.02837 6.1073L4.8014 5.8802L4.57196 6.1073L4.65831 5.73993L4.43133 5.51617H4.71258L4.8014 5.15549ZM6.40008 5.15549L6.4889 5.51952H6.77015L6.54318 5.74327L6.62952 6.1073L6.40008 5.8802L6.17311 6.1073L6.25946 5.73993L6.03002 5.51617H6.3162L6.40008 5.15549ZM8.00123 5.15549L8.08758 5.51952H8.3713L8.14186 5.74327L8.22821 6.1073L8.00123 5.8802L7.77179 6.1073L7.85814 5.73993L7.63117 5.51617H7.91242L8.00123 5.15549ZM0.799753 6.0739L0.888569 6.44127H1.16982L0.942845 6.66503L1.02919 7.02572L0.799753 6.80196L0.57278 7.02572L0.659128 6.66169L0.429688 6.43793H0.715872L0.799753 6.0739ZM2.4009 6.0739L2.48725 6.44127H2.77097L2.54153 6.66503L2.63035 7.02572L2.4009 6.80196L2.17146 7.02572L2.26028 6.66169L2.03084 6.43793H2.31209L2.4009 6.0739ZM3.99959 6.0739L4.08841 6.44127H4.36719L4.14021 6.66503L4.22656 7.02572L3.99712 6.80196L3.77015 7.02572L3.8565 6.66169L3.62706 6.43793H3.91077L3.99959 6.0739ZM5.60074 6.0739L5.68709 6.44127H5.97081L5.74137 6.66503L5.83018 7.02572L5.60074 6.80196L5.3713 7.02572L5.46012 6.66169L5.23068 6.43793H5.51192L5.60074 6.0739ZM7.19942 6.0739L7.28824 6.44127H7.56949L7.34252 6.66503L7.42887 7.02572L7.19942 6.80196L6.97245 7.02572L7.0588 6.66169L6.83183 6.43793H7.11308L7.19942 6.0739ZM8.80058 6.0739L8.88693 6.44127H9.17064L8.9412 6.66503L9.03002 7.025
100872L8.80058 6.80196L8.57114 7.02572L8.65995 6.66169L8.43051 6.43793H8.71423L8.80058 6.0739ZM1.60156 6.99566L1.68791 7.35969H1.97163L1.74219 7.58345L1.82854 7.95081L1.60156 7.72371L1.37212 7.94747L1.45847 7.58345L1.2315 7.35969H1.51275L1.60156 6.99566ZM3.20025 6.99566L3.28906 7.35969H3.57031L3.34087 7.58345L3.42969 7.95081L3.20025 7.72371L2.97081 7.94747L3.05962 7.58345L2.83018 7.35969H3.1139L3.20025 6.99566ZM4.8014 6.99566L4.88775 7.35969H5.17146L4.94202 7.58345L5.02837 7.95081L4.8014 7.72371L4.57196 7.94747L4.65831 7.58345L4.43133 7.35969H4.71258L4.8014 6.99566ZM6.40008 6.99566L6.4889 7.35969H6.77015L6.54318 7.58345L6.62952 7.95081L6.40008 7.72371L6.17311 7.94747L6.25946 7.58345L6.03002 7.35969H6.3162L6.40008 6.99566ZM8.00123 6.99566L8.08758 7.35969H8.3713L8.14186 7.58345L8.22821 7.95081L8.00123 7.72371L7.77179 7.94747L7.85814 7.58345L7.63117 7.35969H7.91242L8.00123 6.99566ZM0.799753 7.91742L0.888569 8.28144H1.16982L0.942845 8.5052L1.02919 8.86923L0.799753 8.64547L0.57278 8.86923L0.659128 8.50186L0.429688 8.2781H0.715872L0.799753 7.91742ZM2.4009 7.91742L2.48725 8.28144H2.77097L2.54153 8.5052L2.63035 8.86923L2.4009 8.64547L2.17146 8.86923L2.26028 8.50186L2.03084 8.2781H2.31209L2.4009 7.91742ZM3.99959 7.91742L4.08841 8.28144H4.36719L4.14515 8.5052L4.2315 8.86923L4.00206 8.64547L3.77508 8.86923L3.86143 8.50186L3.63199 8.2781H3.91571L3.99959 7.91742ZM5.60074 7.91742L5.68709 8.28144H5.97081L5.74137 8.5052L5.83018 8.86923L5.60074 8.64547L5.3713 8.86923L5.46012 8.50186L5.23068 8.2781H5.51192L5.60074 7.91742ZM7.19942 7.91742L7.28824 8.28144H7.56949L7.34252 8.5052L7.42887 8.86923L7.19942 8.64547L6.97245 8.86923L7.0588 8.50186L6.83183 8.2781H7.11308L7.19942 7.91742ZM8.80058 7.91742L8.88693 8.28144H9.17064L8.9412 8.5052L9.03002 8.86923L8.80058 8.64547L8.57114 8.86923L8.65995 8.50186L8.43051 8.2781H8.71423L8.80058 7.91742Z" fill="white"/> 1009</svg> 1010 1011 <span class="arrow-btn"> 1012 <svg width="8" height="5" viewBox="0 0 8 5" fill="none" xmlns="http://www.w3.org/2000/svg"> 1013 <path d="M1 1.20557L4 4.20557L7 1.20557" stroke="white"/> 1014 </svg> 1015 </span> 1016 </a> 1017 <div class="currencydropdown-content"> 1018 <a data-value="CAD" href="https://ca.sparxhockey.com" tabindex="1" class="USA_CAD"> 1019 <svg width="79" height="57" viewBox="0 0 79 57" fill="none" xmlns="http://www.w3.org/2000/svg"> 1020 <path d="M19.6473 0.5H58.9527V56.0462H19.6473V0.5Z" fill="white"/> 1021 <path d="M0 0.5H19.6473V56.0462H0V0.5ZM58.9527 0.5H78.6V56.0462H58.9636L58.9527 0.5ZM25.5382 27.3401L23.9977 27.8608L31.1037 34.0989C31.6461 35.6937 30.9193 36.1602 30.4528 37.0064L38.1554 36.03L37.971 43.787L39.5766 43.7436L39.2186 36.0409L46.943 36.963C46.4657 35.9541 46.0426 35.4225 46.4765 33.8169L53.5717 27.9042L52.3349 27.4486C51.3151 26.6675 52.7689 23.684 52.9858 21.7963C52.9858 21.7963 48.8524 23.2175 48.5812 22.4689L47.518 20.4402L43.7535 24.5845C43.3412 24.6821 43.1676 24.5194 43.07 24.1722L44.8058 15.5148L42.0502 17.0662C41.8224 17.1747 41.5945 17.0879 41.4426 16.8167L38.7847 11.5007L36.0508 17.0228C35.8446 17.2181 35.6385 17.2398 35.4649 17.1096L32.8395 15.6342L34.4234 24.2156C34.2932 24.5628 33.9895 24.6496 33.6423 24.4651L30.0296 20.3751C29.5631 21.1345 29.2485 22.3605 28.6193 22.6425C28.0009 22.9029 25.9071 22.1218 24.5076 21.818C24.9849 23.543 26.4821 26.4071 25.5382 27.3509V27.3401Z" fill="#D52B1E"/> 1022</svg> 1023<ly-as-175807>Canada (CAD/EN)</ly-as-175807> 1024 </a> 1025 <a data-value="CAD" href="https://ca.sparxhockey.com/fr" tabindex="1" class="USA_CAD FR" > 1026 <svg width="79" height="57" viewBox="0 0 79 57" fill="none" xmlns="http://www.w3.org/2000/svg"> 1027 <path d="M19.6473 0.5H58.9527V56.0462H19.6473V0.5Z" fill="white"/> 1028 <path d="M0 0.5H19.6473V56.0462H0V0.5ZM58.9527 0.5H78.6V56.0462H58.9636L58.9527 0.5ZM25.5382 27.3401L23.9977 27.8608L31.1037 34.0989C31.6461 35.6937 30.9193 36.1602 30.4528 37.0064L38.1554 36.03L37.971 43.787L39.5766 43.7436L39.2186 36.0409L46.943 36.963C46.4657 35.9541 46.0426 35.4225 46.4765 33.8169L53.5717 27.9042L52.3349 27.4486C51.3151 26.6675 52.7689 23.684 52.9858 21.7963C52.9858 21.7963 48.8524 23.2175 48.5812 22.4689L47.518 20.4402L43.7535 24.5845C43.3412 24.6821 43.1676 24.5194 43.07 24.1722L44.8058 15.5148L42.0502 17.0662C41.8224 17.1747 41.5945 17.0879 41.4426 16.8167L38.7847 11.5007L36.0508 17.0228C35.8446 17.2181 35.6385 17.2398 35.4649 17.1096L32.8395 15.6342L34.4234 24.2156C34.2932 24.5628 33.9895 24.6496 33.6423 24.4651L30.0296 20.3751C29.5631 21.1345 29.2485 22.3605 28.6193 22.6425C28.0009 22.9029 25.9071 22.1218 24.5076 21.818C24.9849 23.543 26.4821 26.4071 25.5382 27.3509V27.3401Z" fill="#D52B1E"/> 1029</svg> 1030<ly-as-175807>Canada (CAD/FR)</ly-as-175807> 1031 </a> 1032 </div> 1033 </div> 1034</div> 1035<style> 1036 1037 .currency-picker{ 1038 padding-left: 0; 1039 background:transparent; 1040 margin:0; 1041 color:#fff; 1042 border:0; 1043 font-size: 12px; 1044 font-weight: 500; 1045 letter-spacing: 0; 1046 line-height: 12px; 1047 text-align: center; 1048 display:none; 1049 } 1050 .currency-picker:focus { 1051 border:0; 1052 outline:0; 1053 } 1054 .dropdown-currency { 1055 position: relative; 1056 } 1057 .dropdown-currency .dropbtn { 1058 color: #FFFFFF; 1059 text-align: center; 1060 background: transparent; 1061 border: 0; 1062 display: flex; 1063 align-items: center; 1064 justify-content: space-between; 1065 outline: none; 1066 font-weight: 500; 1067 font-size: 11px; 1068 line-height: 160%; 1069 letter-spacing: 0.02em; 1070 text-transform: capitalize; 1071 } 1072 .dropdown-currency .dropbtn svg { 1073 width: 24px; 1074 height: 17px; 1075 margin-right: 5px; 1076 } 1077 .dropdown-currency .dropbtn .arrow-btn svg{ 1078 width: 18px; 1079 height: 6px; 1080 } 1081 .dropdown-currency .currencydropdown-content { 1082 background: #fff; 1083 box-shadow: 0 10px 15px 0 rgba(0, 0, 0, 0.1); 1084 text-shadow: 0 0 black; 1085 position: absolute; 1086 left: 0; 1087 top: 35px; 1088 z-index: 99; 1089 display: none; 1090 } 1091 .dropdown-currency .currencydropdown-content.active { 1092 display: block !important; 1093 } 1094 .dropdown-currency .currencydropdown-content a { 1095 text-align: left; 1096 padding: 14px; 1097 color: #000000; 1098 font-size: 12px; 1099 letter-spacing: 0; 1100 line-height: 12px; 1101 display: flex; 1102 align-items: center; 1103 justify-content: space-between; 1104 border-bottom: 1px solid #F9FAFB; 1105 white-space: nowrap; 1106 } 1107 .dropdown-currency .currencydropdown-content a svg { 1108 width: 24px; 1109 height: 17px; 1110 margin-right: 5px; 1111 } 1112</style> 1113 1114</div> 1115 <div style="visibility:hidden;display:none;"><ly-as-175702>xxx-xxx-xxx</ly-as-175702></div> 1116 1117 <div class="toph-custom-html"> 1118 <div class="preferred-sharpener"> 1119<img src="https://cdn.shopify.com/s/files/1/0563/4434/6789/files/nhl_logo_header.png?v=1738099574" width="27" height="30"> 1120<span>Preferred At-Home Skate Sharpener</span> 1121</div>
1122 </div> 1123 1124 </div> 1125 1126 <div class="text-container"> 1127 <p><strong>Sharpen Now, Pay Later |</strong> Financing Options Available <a href="/pages/financing-options" title="Financing Options">Learn More</a></p> 1128 </div> 1129 <div class="menu-site-switcher"> 1130 1131 <a href="/pages/commercial-homepage" class="button white" title="Go to the Commercial Site"> 1132 <span>COMMERCIAL SITE</span> 1133 </a> 1134 1135 </div> 1136 </div> 1137</div> 1138<header id="header" class="header header--shadow-small transparent--false header-sticky--active"> 1139 <div class="row expanded"> 1140 <div class="small-12 columns"> 1141 1142<div class="thb-header-mobile-left"> 1143 <details class="mobile-toggle-wrapper"> 1144 <summary class="mobile-toggle"> 1145 <span></span> 1146 <span></span> 1147 <span></span> 1148 </summary><nav id="mobile-menu" class="mobile-menu-drawer" role="dialog" tabindex="-1"> 1149 <button class="back-button"> 1150 <span> 1151 <svg width="14" height="10" viewBox="0 0 14 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1152 <path d="M13.1778 5H7.08891H1.00002M1.00002 5L5.00002 1M1.00002 5L5.00002 9" stroke="var(--color-accent)" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"></path> 1153 </svg> 1154 </span> 1155 <span class="back-link-name">Back</span> 1156 </button> 1157 <div class="mobile-menu-drawer--inner"><ul class="mobile-menu"> 1158 1159 1160 1161 1162 1163<li><a href="/collections/sharpeners" class="mobile-menu-simple-link" title="SHARPENERS" data-parent="sharpeners">SHARPENERS</a></li> 1164 1165 1166<li><a href="/products/sparx-samurai" class="mobile-menu-simple-link" title="SAMURAIâ¢" data-parent="samurai">SAMURAIâ¢</a></li> 1167 1168 1169<li><a href="/collections/grinding-rings" class="mobile-menu-simple-link" title="GRINDING RINGS" data-parent="grinding-rings">GRINDING RINGS</a></li> 1170 1171 1172<li><a href="/collections/bundles" class="mobile-menu-simple-link" title="BUNDLES" data-parent="bundles">BUNDLES</a></li> 1173 1174 1175<li><a href="/collections/accessories" class="mobile-menu-simple-link" title="ACCESSORIES" data-parent="accessories">ACCESSORIES</a></li> 1176 1177 1178<li><details class="link-container"> 1179 <summary class="parent-link"><span>EXPLORE</span><span> 1180<svg width="14" height="10" viewBox="0 0 14 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1181<path d="M1 5H7.08889H13.1778M13.1778 5L9.17778 1M13.1778 5L9.17778 9" stroke="var(--color-accent)" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/> 1182</svg> 1183</span></summary> 1184 <ul class="sub-menu"><li><a href="/pages/why-sparx" title="WHY SPARX">WHY SPARX</a></li><li><a href="/pages/sharpener-learn-more" title="THE SHARPENER">THE SHARPENER</a></li><li><a href="/pages/grinding-rings-learn-more" title="THE GRINDING RING">THE GRINDING RING</a></li><li><a href="/pages/featherblend" title="FEATHERBLENDâ¢">FEATHERBLENDâ¢</a></li><li><a href="/pages/sparx-samurai" title="SPARX SAMURAIâ¢">SPARX SAMURAIâ¢</a></li><li><a href="/pages/beam-learn-more" title="SPARX BEAMâ¢">SPARX BEAMâ¢</a></li><li><a href="/pages/sparx-hockey-app" title="SPARX HOCKEY APP">SPARX HOCKEY APP</a></li><li><a href="/pages/3d-print-resources" title="3D PRINT CENTER">3D PRINT CENTER</a></li><li><a href="/pages/skate-sharpening-near-me" title="FIND A SPARX SHARPENER">FIND A SPARX SHARPENER</a></li><li><a href="/pages/review" title="REVIEWS">REVIEWS</a></li><li><a href="/pages/payback-calculator" title="PAYBACK CALCULATOR">PAYBACK CALCULATOR</a></li></ul> 1185 </details></li> 1186 1187 1188<li><details class="link-container"> 1189 <summary class="parent-link"><span>EDGEUCATION</span><span> 1190<svg width="14" height="10" viewBox="0 0 14 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1191<path d="M1 5H7.08889H13.1778M13.1778 5L9.17778 1M13.1778 5L9.17778 9" stroke="var(--color-accent)" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/> 1192</svg> 1193</span></summary> 1194 <ul class="sub-menu"><li><a href="/pages/sharpening-101" title="SHARPENING 101">SHARPENING 101</a></li><li><a href="/pages/tips-and-tricks-videos" title="TIPS AND TRICKS">TIPS AND TRICKS</a></li><li><a href="/blogs/feed" title="SPARX BLOG">SPARX BLOG</a></li></ul> 1195 </details></li> 1196 1197 1198<li>
1198<details class="link-container"> 1199 <summary class="parent-link"><span>SUPPORT</span><span> 1200<svg width="14" height="10" viewBox="0 0 14 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1201<path d="M1 5H7.08889H13.1778M13.1778 5L9.17778 1M13.1778 5L9.17778 9" stroke="var(--color-accent)" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/> 1202</svg> 1203</span></summary> 1204 <ul class="sub-menu"><li><a href="/pages/help-center" title="SUPPORT CENTER">SUPPORT CENTER</a></li><li><a href="/pages/faq" title="FAQs">FAQs</a></li><li><a href="/pages/how-to-videos-for-sparx-sharpener-3" title="HOW-TO VIDEOS ES300">HOW-TO VIDEOS ES300</a></li><li><a href="/pages/how-to-videos" title="HOW-TO VIDEOS ES200">HOW-TO VIDEOS ES200</a></li><li><a href="/pages/how-to-videos-es100" title="HOW-TO VIDEOS ES100">HOW-TO VIDEOS ES100</a></li><li><a href="/pages/copy-of-how-to-videos-for-accessories" title="HOW-TO VIDEOS - ACCESSORIES">HOW-TO VIDEOS - ACCESSORIES</a></li><li><a href="/pages/warranty" title="WARRANTY / MANUALS">WARRANTY / MANUALS</a></li></ul> 1205 </details></li></ul><ul class="mobile-secondary-menu"></ul><div class="thb-mobile-menu-footer"> 1206 1207<a class="thb-mobile-account-link" href="/account/login" title="Login 1208"> 1209<svg width="19" height="21" viewBox="0 0 19 21" fill="none" xmlns="http://www.w3.org/2000/svg"> 1210<path d="M9.3486 1C15.5436 1 15.5436 10.4387 9.3486 10.4387C3.15362 10.4387 3.15362 1 9.3486 1ZM1 19.9202C1.6647 9.36485 17.4579 9.31167 18.0694 19.9468L17.0857 20C16.5539 10.6145 2.56869 10.6411 2.01034 19.9734L1.02659 19.9202H1ZM9.3486 2.01034C4.45643 2.01034 4.45643 9.42836 9.3486 9.42836C14.2408 9.42836 14.2408 2.01034 9.3486 2.01034Z" fill="var(--color-header-icons, --color-accent)" stroke="var(--color-header-icons, --color-accent)" stroke-width="0.1"/> 1211</svg> 1212 Login 1213</a> 1214 <div class="no-js-hidden"></div> 1215 </div> 1216 </div> 1217</nav> 1218<link rel="stylesheet" href="//sparxhockey.com/cdn/shop/t/283/assets/mobile-menu.css?v=135652165068868856511739387000" media="print" onload="this.media='all'"> 1219<noscript><link href="//sparxhockey.com/cdn/shop/t/283/assets/mobile-menu.css?v=135652165068868856511739387000" rel="stylesheet" type="text/css" media="all" /></noscript> 1220 1221<details class="link-container is-hidden" data-mobile-menu-helper-block> 1222 <summary class="parent-link"> 1223 <span class="link-name"></span> 1224 <span> 1225 <svg width="14" height="10" viewBox="0 0 14 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1226 <path d="M1 5H7.08889H13.1778M13.1778 5L9.17778 1M13.1778 5L9.17778 9" stroke="var(--color-accent)" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"></path> 1227 </svg> 1228 </span> 1229 </summary> 1230 <ul class="sub-menu fede2"> 1231 <li class="parent-link-back" style="display: none"> 1232 <button> 1233 <span> 1234 <svg width="14" height="10" viewBox="0 0 14 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 1235 <path d="M13.1778 5H7.08891H1.00002M1.00002 5L5.00002 1M1.00002 5L5.00002 9" stroke="var(--color-accent)" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"></path> 1236 </svg> 1237 </span> 1238 <span class="back-link-name"></span> 1239 </button> 1240 </li> 1241 <li class="mobile-mega-menu-wrapper"> 1242 </li> 1243 </ul> 1244</details> 1245</details> 1246 1247</div> 1248 1249 1250 <a class="logolink" href="/"> 1251 <img 1252 src="//sparxhockey.com/cdn/shop/files/test-logo-dark.png?v=1678998585" 1253 class="logoimg" 1254 alt="Sparx Hockey" 1255 width="764" 1256 height="96" 1257 ><img 1258 src="//sparxhockey.com/cdn/shop/files/test-logo-dark.png?v=1678998585" 1259 class="logoimg logoimg--light" 1260 alt="Sparx Hockey" 1261 width="764" 1262 height="96" 1263 > 1264 </a> 1265 1266 1267 1268<full-menu class="full-menu "> 1269 <ul class="thb-full-menu" role="menubar"> 1270 1271 1272 1273 1274 1275<li class="" data-item-title="SHARPENERS sharpeners"> 1276 <a href="/collections/sharpeners" title="SHARPENERS">SHARPENERS 1277<svg width="8" height="6" viewBox="0 0 8 6" fill="none" xmlns="http://www.w3.org/2000/svg"> 1278<path d="M6.75 1.5L3.75 4.5L0.75 1.5" stroke="var(--color-header-links, --color-accent)" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/> 1279</svg> 1280</a> 1281 <div class="mega-menu-helper sub-menu" data-parent="sharpeners"> 1282
1283 </div></li> 1284 1285 1286<li class="" data-item-title="SAMURAI⢠samurai"> 1287 <a href="/products/sparx-samurai" title="SAMURAIâ¢">SAMURAI⢠1288<svg width="8" height="6" viewBox="0 0 8 6" fill="none" xmlns="http://www.w3.org/2000/svg"> 1289<path d="M6.75 1.5L3.75 4.5L0.75 1.5" stroke="var(--color-header-links, --color-accent)" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/> 1290</svg> 1291</a> 1292 <div class="mega-menu-helper sub-menu" data-parent="samurai"> 1293 1294 </div></li> 1295 1296 1297<li class="" data-item-title="GRINDING RINGS grinding-rings"> 1298 <a href="/collections/grinding-rings" title="GRINDING RINGS">GRINDING RINGS 1299<svg width="8" height="6" viewBox="0 0 8 6" fill="none" xmlns="http://www.w3.org/2000/svg"> 1300<path d="M6.75 1.5L3.75 4.5L0.75 1.5" stroke="var(--color-header-links, --color-accent)" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/> 1301</svg> 1302</a> 1303 <div class="mega-menu-helper sub-menu" data-parent="grinding-rings"> 1304 1305 </div></li> 1306 1307 1308<li class="" data-item-title="BUNDLES bundles"> 1309 <a href="/collections/bundles" title="BUNDLES">BUNDLES 1310<svg width="8" height="6" viewBox="0 0 8 6" fill="none" xmlns="http://www.w3.org/2000/svg"> 1311<path d="M6.75 1.5L3.75 4.5L0.75 1.5" stroke="var(--color-header-links, --color-accent)" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/> 1312</svg> 1313</a> 1314 <div class="mega-menu-helper sub-menu" data-parent="bundles"> 1315 1316 </div></li> 1317 1318 1319<li class="" data-item-title="ACCESSORIES accessories"> 1320 <a href="/collections/accessories" title="ACCESSORIES">ACCESSORIES 1321<svg width="8" height="6" viewBox="0 0 8 6" fill="none" xmlns="http://www.w3.org/2000/svg"> 1322<path d="M6.75 1.5L3.75 4.5L0.75 1.5" stroke="var(--color-header-links, --color-accent)" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/> 1323</svg> 1324</a> 1325 <div class="mega-menu-helper sub-menu" data-parent="accessories"> 1326 1327 </div></li> 1328 1329 1330<li class="menu-item-has-children" data-item-title="EXPLORE explore"> 1331 <a href="#33" title="EXPLORE">EXPLORE 1332<svg width="8" height="6" viewBox="0 0 8 6" fill="none" xmlns="http://www.w3.org/2000/svg"> 1333<path d="M6.75 1.5L3.75 4.5L0.75 1.5" stroke="var(--color-header-links, --color-accent)" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/> 1334</svg> 1335</a><ul class="sub-menu" tabindex="-1"><li class="" role="none" > 1336 <a href="/pages/why-sparx" title="WHY SPARX" role="menuitem">WHY SPARX</a></li><li class="" role="none" > 1337 <a href="/pages/sharpener-learn-more" title="THE SHARPENER" role="menuitem">THE SHARPENER</a></li><li class="" role="none" > 1338 <a href="/pages/grinding-rings-learn-more" title="THE GRINDING RING" role="menuitem">THE GRINDING RING</a></li><li class="" role="none" > 1339 <a href="/pages/featherblend" title="FEATHERBLENDâ¢" role="menuitem">FEATHERBLENDâ¢</a></li><li class="" role="none" > 1340 <a href="/pages/sparx-samurai" title="SPARX SAMURAIâ¢" role="menuitem">SPARX SAMURAIâ¢</a></li><li class="" role="none" > 1341 <a href="/pages/beam-learn-more" title="SPARX BEAMâ¢" role="menuitem">SPARX BEAMâ¢</a></li><li class="" role="none" > 1342 <a href="/pages/sparx-hockey-app" title="SPARX HOCKEY APP" role="menuitem">SPARX HOCKEY APP</a></li><li class="" role="none" > 1343 <a href="/pages/3d-print-resources" title="3D PRINT CENTER" role="menuitem">3D PRINT CENTER</a></li><li class="" role="none" > 1344 <a href="/pages/skate-sharpening-near-me" title="FIND A SPARX SHARPENER" role="menuitem">FIND A SPARX SHARPENER</a></li><li class="" role="none" > 1345 <a href="/pages/review" title="REVIEWS" role="menuitem">REVIEWS</a></li><li class="" role="none" > 1346 <a href="/pages/payback-calculator" title="PAYBACK CALCULATOR" role="menuitem">PAYBACK CALCULATOR</a></li></ul> 1347 </li> 1348 1349 1350<li class="menu-item-has-children" data-item-title="EDGEUCATION edgeucation"> 1351 <a href="#" title="EDGEUCATION">EDGEUCATION 1352<svg width="8" height="6" viewBox="0 0 8 6" fill="none" xmlns="http://www.w3.org/2000/svg"> 1353<path d="M6.75 1.5L3.75 4.5L0.75 1.5" stroke="var(--color-header-links, --color-accent)" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/> 1354</svg> 1355</a><ul class="sub-menu" tabindex="-1"><li class="" role="none" > 1356 <a href="/pages/sharpening-101" title="SHARPENING 101" role="menuitem">SHARPENING 101</a></li><li class="" role="none" > 1357 <a href="/pages/tips-and-tricks-videos" title="TIPS AND TRICKS" role="menuitem">TIPS AND TRICKS</a></li><li class="" role="none" > 1358 <a href="/blogs/feed" title="SPARX BLOG" role="menuitem">SPARX BLOG</a></li></ul> 1359 </li> 1360 1361 1362<li class="menu-item-has-children" data-item-title="SUPPORT support"> 1363 <a href="/pages/help-center" title="SUPPORT">SUPPORT 1364<svg width="8" height="6" viewBox="0 0 8 6" fill="none" xmlns="http://www.w3.org/2000/svg"> 1365<path d="M6.75 1.5L3.75 4.5L0.75 1.5" stroke="var(--color-header-links, --color-accent)" stroke-width="1.1" stroke-linecap="round" stroke-linejoin="round"/> 1366</svg> 1367</a><ul class="sub-menu" tabindex="-1"><li class="" role="none" > 1368 <a href="/pages/help-center" title="SUPPORT CENTER" role="menuitem">SUPPORT CENTER</a></li><li class="" role="none" > 1369 <a href="/pages/faq" title="FAQs" role="menuitem">FAQs</a></li><li class="" role="none" > 1370 <a href="/pages/how-to-videos-for-sparx-sharpener-3" title="HOW-TO VIDEOS ES300" role="menuitem">HOW-TO VIDEOS ES300</a></li><li class="" role="none" > 1371 <a href="/pages/how-to-videos" title="HOW-TO VIDEOS ES200" role="menuitem">HOW-TO VIDEOS ES200</a></li><li class="" role="none" > 1372 <a href="/pages/how-to-videos-es100" title="HOW-TO VIDEOS ES100" role="menuitem">HOW-TO VIDEOS ES100</a></li><li class="" role="none" > 1373 <a href="/pages/copy-of-how-to-videos-for-accessories" title="HOW-TO VIDEOS - ACCESSORIES" role="menuitem">HOW-TO VIDEOS - ACCESSORIES</a></li><li class="" role="none" > 1374 <a href="/pages/warranty" title="WARRANTY / MANUALS" role="menuitem">WARRANTY / MANUALS</a></li></ul> 1375 </li></ul> 1376</full-menu> 1377 1378 1379<div class="thb-secondary-area thb-header-right"><div class="no-js-hidden"></div> 1380<a class="thb-secondary-area-item thb-secondary-myaccount" href="/account/login" title="My Account"><span>Login</span></a> 1381 <a class="thb-secondary-area-item thb-quick-search" href="/search" title="Search"> 1382<svg width="19" height="20" viewBox="0 0 19 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 1383<path d="M13 13.5L17.7495 18.5M15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8C1 4.13401 4.13401 1 8 1C11.866 1 15 4.13401 15 8Z" stroke="var(--color-header-icons, --color-accent)" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/> 1384</svg> 1385</a> 1386 <a class="thb-secondary-area-item thb-secondary-cart" href="/cart" id="cart-drawer-toggle"><div class="thb-secondary-item-icon"> 1387<svg width="19" height="20" viewBox="0 0 19 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 1388<path d="M1 4.58011L3.88304 1.09945V1H15.2164L18 4.58011M1 4.58011V17.2099C1 18.2044 1.89474 19 2.88889 19H16.1111C17.1053 19 18 18.2044 18 17.2099V4.58011M1 4.58011H18M13.3275 8.16022C13.3275 10.1492 11.6374 11.7403 9.54971 11.7403C7.46199 11.7403 5.67251 10.1492 5.67251 8.16022" stroke="var(--color-header-icons, --color-accent)" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/> 1389</svg> 1390 <span class="thb-item-count ">0</span></div></a> 1391</div> 1392 1393 1394 </div> 1395 </div><style data-shopify>:root { 1396 --logo-height: 24px; 1397 --logo-height-mobile: 27px; 1398 } 1399 </style></header> 1400
1401<script type="application/ld+json"> 1402 { 1403 "@context": "http://schema.org", 1404 "@type": "Organization", 1405 "name": "Sparx Hockey", 1406 1407 "logo": "https:\/\/sparxhockey.com\/cdn\/shop\/files\/test-logo-dark.png?v=1678998585\u0026width=764", 1408 1409 "sameAs": [ 1410 "https:\/\/twitter.com\/sparxhockey", 1411 "https:\/\/www.facebook.com\/sparxhockey", 1412 "", 1413 "https:\/\/www.instagram.com\/sparxhockey\/", 1414 "", 1415 "https:\/\/www.youtube.com\/channel\/UCgp7t_RvlG2T-vg8SIpmtsw", 1416 "", 1417 "https:\/\/www.linkedin.com\/company\/sparx-hockey\/", 1418 "" 1419 ], 1420 "url": "https:\/\/sparxhockey.com" 1421 } 1422</script>
1422 1423
1423<script type="application/ld+json"> 1424 { 1425 "@context": "http://schema.org", 1426 "@type": "WebSite", 1427 "name": "Sparx Hockey", 1428 "potentialAction": { 1429 "@type": "SearchAction", 1430 "target": "https:\/\/sparxhockey.com\/search?q={search_term_string}", 1431 "query-input": "required name=search_term_string" 1432 }, 1433 "url": "https:\/\/sparxhockey.com" 1434 } 1435 </script>
1435 1436<style> #shopify-section-sections--14453891924067__header .preferred-sharpener {display: flex; gap: 10px; align-items: center;} #shopify-section-sections--14453891924067__header .preferred-sharpener span {font-size: 10px; font-style: normal; font-weight: 600; line-height: normal;} @media only screen and (min-width: 520px) {#shopify-section-sections--14453891924067__header .preferred-sharpener span {font-size: 12px; }} </style></div><div id="shopify-section-sections--14453891924067__6b06893d-67d8-498a-bc53-6822c4a4deca" class="shopify-section shopify-section-group-header-group mega-menu"> 1437 1438<div class="mega-menu-wrapper is-hidden" data-mega-menu="sharpeners" data-mega-menu-title="Sharpeners"> 1439 1440 <div class="menu-large-items-wrapper"> 1441 1442 1443 <div class="menu-large-item"> 1444 <a href="/products/sparx-sharpener-3" class="image-wrapper" title="Sparx Sharpener 3"> 1445 <div class="img custom-lazyload"> 1446 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/Standard_Full_Straight-v2-nobeam.jpg?crop=center&height=280&v=1740509045&width=500" 1447 width="500" height="280" alt="Sparx Sharpener 3"/> 1448 </div> 1449 <span class="menu-title">Sparx Sharpener 3</span> 1450 </a> 1451 </div> 1452 1453 1454 1455 <div class="menu-large-item"> 1456 <a href="/products/sparx-sharpener-3-with-beam" class="image-wrapper" title="Sparx Sharpener 3 + BEAM"> 1457 <div class="img custom-lazyload"> 1458 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/Standard_Full_Straight.jpg?crop=center&height=280&v=1690420424&width=500" 1459 width="500" height="280" alt="Sparx Sharpener 3 + BEAM"/> 1460 </div> 1461 <span class="menu-title">Sparx Sharpener 3 + BEAM</span> 1462 </a> 1463 </div> 1464 1465 1466 1467 <div class="menu-large-item"> 1468 <a href="/products/sparx-sharpener-3-pro" class="image-wrapper" title="Sparx Sharpener 3 PRO"> 1469 <div class="img custom-lazyload"> 1470 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/Pro_Full_Straight.jpg?crop=center&height=280&v=1690420424&width=500" 1471 width="500" height="280" alt="Sparx Sharpener 3 PRO"/> 1472 </div> 1473 <span class="menu-title">Sparx Sharpener 3 PRO</span> 1474 </a> 1475 </div> 1476 1477 1478 1479 <div class="menu-large-item"> 1480 <a href="/collections/nhl" class="image-wrapper" title="NHL Custom Sharpeners"> 1481 <div class="img custom-lazyload"> 1482 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/NHL_Menu_d6f92c01-c4c2-49dc-940c-cb9d059a6a9c.png?crop=center&height=280&v=1756931870&width=500" 1483 width="500" height="280" alt="NHL Custom Sharpeners"/> 1484 </div> 1485 <span class="menu-title">NHL Custom Sharpeners</span> 1486 </a> 1487 </div> 1488 1489 1490 1491 <div class="menu-large-item"> 1492 <a href="/collections/bundles" class="image-wrapper" title="SHOP BUNDLES"> 1493 <div class="img custom-lazyload"> 1494 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/Bundles_2023_Menu_Pro_NEW.png?crop=center&height=280&v=1691074282&width=500" 1495 width="500" height="280" alt="SHOP BUNDLES"/> 1496 </div> 1497 <span class="menu-title">SHOP BUNDLES</span> 1498 </a> 1499 </div> 1500 1501 1502 </div> 1503 1504 1505 1506 1507 1508</div> 1509 1510 1511</div><div id="shopify-section-sections--14453891924067__mega_menu_7Lk8pw" class="shopify-section shopify-section-group-header-group mega-menu"> 1512 1513<div class="mega-menu-wrapper is-hidden" data-mega-menu="samurai" data-mega-menu-title="SAMURAI"> 1514 1515 <div class="menu-large-items-wrapper"> 1516 1517 1518 <div class="menu-large-item"> 1519 <a href="/products/sparx-samurai" class="image-wrapper" title="Sparx SAMURAI"> 1520 <div class="img custom-lazyload"> 1521 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/Samurai_-_Nav.png?crop=center&height=280&v=1763138862&width=500" 1522 width="500" height="280" alt="Sparx SAMURAI"/> 1523 </div>
1524 <span class="menu-title">Sparx SAMURAI</span> 1525 </a> 1526 </div> 1527 1528 1529 1530 <div class="menu-large-item"> 1531 <a href="/products/sparx-samurai-deburring-disc" class="image-wrapper" title="Sparx SAMURAI Disc"> 1532 <div class="img custom-lazyload"> 1533 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/Consumer_Deburring_Disc_-_Nav.png?crop=center&height=280&v=1763138862&width=500" 1534 width="500" height="280" alt="Sparx SAMURAI Disc"/> 1535 </div> 1536 <span class="menu-title">Sparx SAMURAI Disc</span> 1537 </a> 1538 </div> 1539 1540 1541 1542 <div class="menu-large-item"> 1543 <a href="/products/sparx-samurai-elite-stand" class="image-wrapper" title="Sparx Samurai Elite Stand"> 1544 <div class="img custom-lazyload"> 1545 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/Elite_Stand_-_Nav.png?crop=center&height=280&v=1763138862&width=500" 1546 width="500" height="280" alt="Sparx Samurai Elite Stand"/> 1547 </div> 1548 <span class="menu-title">Sparx Samurai Elite Stand</span> 1549 </a> 1550 </div> 1551 1552 1553 1554 1555 </div> 1556 1557 1558 1559 1560 1561 <div class="promotion-item-wrapper"> 1562 1563 1564 1565 1566 1567 1568 1569 1570 <div class="image-wrapper"> 1571 <img class="image" src="//sparxhockey.com/cdn/shop/files/Samurai_Nav_a863e5f2-4059-4017-bd51-82bbf47fa3de.png?crop=center&height=345&v=1763139886&width=600" 1572 width="600" height="345" loading="lazy" alt="<p>A Revolutionary Deburring Machine</p>"/> 1573 <div class="content"> 1574 <div class="title" style="color: #2a2a2b"> 1575 <p>A Revolutionary Deburring Machine</p> 1576 </div> 1577 <a href="/pages/sparx-samurai" class="button" title="LEARN MORE"> 1578 <span>LEARN MORE</span> 1579 </a> 1580 </div> 1581 </div> 1582 1583 1584 </div> 1585 1586</div> 1587 1588 1589</div><div id="shopify-section-sections--14453891924067__2fd8ebd4-7a64-4353-8368-b367c9f57a4c" class="shopify-section shopify-section-group-header-group mega-menu"> 1590 1591<div class="mega-menu-wrapper is-hidden" data-mega-menu="grinding-rings" data-mega-menu-title="Grinding Rings"> 1592 1593 <div class="menu-large-items-wrapper"> 1594 1595 1596 <div class="menu-large-item"> 1597 <a href="/products/1-2-radius-ring" class="image-wrapper" title="Radius"> 1598 <div class="img custom-lazyload"> 1599 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/menu_radius-rings_500x281_46d871fe-57f8-4a9a-884b-1c97a347760d.png?crop=center&height=280&v=1687380127&width=500" 1600 width="500" height="280" alt="Radius"/> 1601 </div> 1602 <span class="menu-title">Radius</span> 1603 </a> 1604 </div> 1605 1606 1607 1608 <div class="menu-large-item"> 1609 <a href="/products/3-8-fire-ring" class="image-wrapper" title="Fire"> 1610 <div class="img custom-lazyload"> 1611 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/menu_fire-rings_500x281_5bd2f9b4-3ba3-4aa2-a3f9-e140cdfbd155.png?crop=center&height=280&v=1687380072&width=500" 1612 width="500" height="280" alt="Fire"/> 1613 </div> 1614 <span class="menu-title">Fire</span> 1615 </a> 1616 </div> 1617 1618 1619 1620 <div class="menu-large-item"> 1621 <a href="/pages/flat-grinding-ring" class="image-wrapper" title="FLAT"> 1622 <div class="img custom-lazyload"> 1623 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/flat_ring_-_site.png?crop=center&height=280&v=1736173440&width=500" 1624 width="500" height="280" alt="FLAT"/> 1625 </div> 1626 <span class="menu-title">FLAT</span> 1627 </a> 1628 </div> 1629 1630 1631 1632 <div class="menu-large-item"> 1633 <a href="/products/the-starter-pack" class="image-wrapper" title="Starter Pack"> 1634 <div class="img custom-lazyload"> 1635 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/menu_grinding-ring-starter-pack_500x281_a236c175-0cdf-4a7d-b114-86e423c87f3a.png?crop=center&height=280&v=1762203990&width=500" 1636 width="500" height="280" alt="Starter Pack"/> 1637 </div>
1638 <span class="menu-title">Starter Pack</span> 1639 </a> 1640 </div> 1641 1642 1643 1644 1645 </div> 1646 1647 1648 1649 1650 1651 <div class="promotion-item-wrapper"> 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 <div class="image-wrapper"> 1663 <img class="image" src="//sparxhockey.com/cdn/shop/files/ES300_Ring_InUse.png?crop=center&height=345&v=1690422290&width=600" 1664 width="600" height="345" loading="lazy" alt="<p>The <strong>Heart</strong> of the Sparx <strong>Sharpening Ecosystem</strong></p>"/> 1665 <div class="content"> 1666 <div class="title" style="color: #ffffff"> 1667 <p>The <strong>Heart</strong> of the Sparx <strong>Sharpening Ecosystem</strong></p> 1668 </div> 1669 <a href="/collections/grinding-rings" class="button" title="SHOP ALL"> 1670 <span>SHOP ALL</span> 1671 </a> 1672 </div> 1673 </div> 1674 1675 1676 </div> 1677 1678</div> 1679 1680 1681</div><div id="shopify-section-sections--14453891924067__4687d205-4f6b-4287-a182-e1365767cf14" class="shopify-section shopify-section-group-header-group mega-menu"> 1682 1683<div class="mega-menu-wrapper is-hidden" data-mega-menu="bundles" data-mega-menu-title="Bundles"> 1684 1685 <div class="menu-large-items-wrapper"> 1686 1687 1688 <div class="menu-large-item"> 1689 <a href="/products/entry-level-bundle" class="image-wrapper" title="Entry Level Bundle"> 1690 <div class="img custom-lazyload"> 1691 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/Bundles_2023_Menu_Entry_NEW.png?crop=center&height=280&v=1691074282&width=500" 1692 width="500" height="280" alt="Entry Level Bundle"/> 1693 </div> 1694 <span class="menu-title">Entry Level Bundle</span> 1695 </a> 1696 </div> 1697 1698 1699 1700 <div class="menu-large-item"> 1701 <a href="/products/starter-bundle-1" class="image-wrapper" title="Starter Bundle"> 1702 <div class="img custom-lazyload"> 1703 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/Bundles_2023_Menu_Starter_NEW.png?crop=center&height=280&v=1691074282&width=500" 1704 width="500" height="280" alt="Starter Bundle"/> 1705 </div> 1706 <span class="menu-title">Starter Bundle</span> 1707 </a> 1708 </div> 1709 1710 1711 1712 <div class="menu-large-item"> 1713 <a href="/products/the-essentials-bundle" class="image-wrapper" title="Essentials Bundle"> 1714 <div class="img custom-lazyload"> 1715 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/Bundles_2023_Menu_Essentials_NEW.png?crop=center&height=280&v=1691074282&width=500" 1716 width="500" height="280" alt="Essentials Bundle"/> 1717 </div> 1718 <span class="menu-title">Essentials Bundle</span> 1719 </a> 1720 </div> 1721 1722 1723 1724 <div class="menu-large-item"> 1725 <a href="/products/the-elite-bundle" class="image-wrapper" title="Elite Bundle"> 1726 <div class="img custom-lazyload"> 1727 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/Bundles_2023_Menu_Elite_NEW.png?crop=center&height=280&v=1691074282&width=500" 1728 width="500" height="280" alt="Elite Bundle"/> 1729 </div> 1730 <span class="menu-title">Elite Bundle</span> 1731 </a> 1732 </div> 1733 1734 1735 1736 <div class="menu-large-item"> 1737 <a href="/products/the-pro-bundle" class="image-wrapper" title="Pro Bundle"> 1738 <div class="img custom-lazyload"> 1739 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/Bundles_2023_Menu_Pro_NEW.png?crop=center&height=280&v=1691074282&width=500" 1740 width="500" height="280" alt="Pro Bundle"/> 1741 </div> 1742 <span class="menu-title">Pro Bundle</span> 1743 </a> 1744 </div> 1745 1746 1747 </div> 1748 1749 1750 1751 1752 1753</div> 1754 1755 1756</div><div id="shopify-section-sections--14453891924067__5130077c-2fe3-4c9e-874a-67ab44897245" class="shopify-section shopify-section-group-header-group mega-menu"> 1757 1758<div class="mega-menu-wrapper is-hidden" data-mega-menu="accessories" data-mega-menu-title="Accessories"> 1759 1760 <div class="menu-large-items-wrapper"> 1761 1762 1763 <div class="menu-large-item"> 1764 <a href="/collections/accessories-es300" class="image-wrapper" title="ACCESSORIES FOR SPARX SHARPENER 3 & SHARPENER 3 PRO"> 1765 <div class="img custom-lazyload"> 1766 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/ACCESSORIES_FOR_SPARX_SHARPENER_3_SHARPENER_3_PRO.jpg?crop=center&height=280&v=1732216962&width=500" 1767 width="500" height="280" alt="ACCESSORIES FOR SPARX SHARPENER 3 & SHARPENER 3 PRO"/> 1768 </div>
1769 <span class="menu-title">ACCESSORIES FOR SPARX SHARPENER 3 & SHARPENER 3 PRO</span> 1770 </a> 1771 </div> 1772 1773 1774 1775 <div class="menu-large-item"> 1776 <a href="/collections/accessories-es200" class="image-wrapper" title="ACCESSORIES FOR SPARX SHARPENER 2 & SHARPENER 2 PRO"> 1777 <div class="img custom-lazyload"> 1778 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/ACCESSORIES_FOR_SPARX_SHARPENER_2_SHARPENER_2_PRO.jpg?crop=center&height=280&v=1732216962&width=500" 1779 width="500" height="280" alt="ACCESSORIES FOR SPARX SHARPENER 2 & SHARPENER 2 PRO"/> 1780 </div> 1781 <span class="menu-title">ACCESSORIES FOR SPARX SHARPENER 2 & SHARPENER 2 PRO</span> 1782 </a> 1783 </div> 1784 1785 1786 1787 <div class="menu-large-item"> 1788 <a href="/collections/accessories-1st-gen-sparx-sharpener-es100" class="image-wrapper" title="ACCESSORIES FOR SPARX SHARPENER FIRST GENERATION"> 1789 <div class="img custom-lazyload"> 1790 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/ACCESSORIES_FOR_SPARX_SHARPENER_FIRST_GENERATION.jpg?crop=center&height=280&v=1732216962&width=500" 1791 width="500" height="280" alt="ACCESSORIES FOR SPARX SHARPENER FIRST GENERATION"/> 1792 </div> 1793 <span class="menu-title">ACCESSORIES FOR SPARX SHARPENER FIRST GENERATION</span> 1794 </a> 1795 </div> 1796 1797 1798 1799 <div class="menu-large-item"> 1800 <a href="/collections/nhl" class="image-wrapper" title="NHL Sharpener Overlays"> 1801 <div class="img custom-lazyload"> 1802 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/NHL_overlay-_Web.png?crop=center&height=280&v=1756928559&width=500" 1803 width="500" height="280" alt="NHL Sharpener Overlays"/> 1804 </div> 1805 <span class="menu-title">NHL Sharpener Overlays</span> 1806 </a> 1807 </div> 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 </div> 1821 1822 1823 1824 <div class="menu-small-items-wrapper"> 1825 <div class="menu-small-items"> 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 <div class="menu-small-item "> 1837 1838 1839 <a href="/collections/sparx-gear"> 1840 <img class="image" src="//sparxhockey.com/cdn/shop/files/menu_apparel_500x500_49ece5db-fe5b-4738-932f-68abe63cd45c.png?crop=center&height=70&v=1687377830&width=70" 1841 width="70" height="70" loading="lazy" alt="Sparx Gear"/> 1842 <span class="title">Sparx Gear</span> 1843 </a> 1844 1845 1846 </div> 1847 1848 1849 1850 <div class="menu-small-item "> 1851 1852 1853 <a href="/collections/gift-cards"> 1854 <img class="image" src="//sparxhockey.com/cdn/shop/files/menu_gift-cards_500x500_a64c3e5a-d156-4fb1-b382-8713c4ea1ab9.png?crop=center&height=70&v=1687377830&width=70" 1855 width="70" height="70" loading="lazy" alt="Gift Cards"/> 1856 <span class="title">Gift Cards</span> 1857 </a> 1858 1859 1860 </div> 1861 1862 1863 1864 <div class="menu-small-item "> 1865 1866 1867 <a href="/collections/service-plans"> 1868 <img class="image" src="//sparxhockey.com/cdn/shop/files/menu_sparx-service-plans_500x500_d75c37ef-2b5a-49f5-9749-af4b08739840.png?crop=center&height=70&v=1687377830&width=70" 1869 width="70" height="70" loading="lazy" alt="Service Plans"/> 1870 <span class="title">Service Plans</span> 1871 </a> 1872 1873 1874 </div> 1875 1876 1877 1878 <div class="menu-small-item "> 1879 1880 1881 <a href="/collections/replacement-parts"> 1882 <img class="image" src="//sparxhockey.com/cdn/shop/files/menu_replacement-parts_500x500_e18a5879-db71-4c63-9331-8bcf17a97d9b.png?crop=center&height=70&v=1687377830&width=70" 1883 width="70" height="70" loading="lazy" alt="Replacement Parts"/>
1884 <span class="title">Replacement Parts</span> 1885 </a> 1886 1887 1888 </div> 1889 1890 1891 1892 <div class="menu-small-item "> 1893 1894 1895 <a href="/products/sparx-beam"> 1896 <img class="image" src="//sparxhockey.com/cdn/shop/files/Sparx_BEAM_Front_Update_60bf95ec-620e-4b05-bcfd-3cb912ecf1ec.png?crop=center&height=70&v=1700672789&width=70" 1897 width="70" height="70" loading="lazy" alt="SPARX BEAMâ¢"/> 1898 <span class="title">SPARX BEAMâ¢</span> 1899 </a> 1900 1901 1902 </div> 1903 1904 1905 </div> 1906 </div> 1907 1908 1909 1910</div> 1911 1912 1913</div><div id="shopify-section-sections--14453891924067__175e5ac7-491c-4676-9ee6-32a3dc9b9d9d" class="shopify-section shopify-section-group-header-group mega-menu"> 1914 1915<div class="mega-menu-wrapper is-hidden" data-mega-menu="why-sparx" data-mega-menu-title="Why Sparx"> 1916 1917 <div class="menu-large-items-wrapper"> 1918 1919 1920 <div class="menu-large-item"> 1921 <a href="/pages/commercial-learn-more-teams" class="image-wrapper" title="TEAMS"> 1922 <div class="img custom-lazyload"> 1923 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/teams_nav_img.png?crop=center&height=280&v=1623722702&width=500" 1924 width="500" height="280" alt="TEAMS"/> 1925 </div> 1926 <span class="menu-title">TEAMS</span> 1927 </a> 1928 </div> 1929 1930 1931 1932 <div class="menu-large-item"> 1933 <a href="/pages/commercial-learn-more-rinks" class="image-wrapper" title="RINKS"> 1934 <div class="img custom-lazyload"> 1935 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/rinks_nav_img.png?crop=center&height=280&v=1623722716&width=500" 1936 width="500" height="280" alt="RINKS"/> 1937 </div> 1938 <span class="menu-title">RINKS</span> 1939 </a> 1940 </div> 1941 1942 1943 1944 <div class="menu-large-item"> 1945 <a href="/pages/commercial-learn-more-retailers" class="image-wrapper" title="RETAILERS"> 1946 <div class="img custom-lazyload"> 1947 <img class="image custom-lazyload" data-src="//sparxhockey.com/cdn/shop/files/retailers_nav_img.png?crop=center&height=280&v=1623722728&width=500" 1948 width="500" height="280" alt="RETAILERS"/> 1949 </div> 1950 <span class="menu-title">RETAILERS</span> 1951 </a> 1952 </div> 1953 1954 1955 </div> 1956 1957 1958 1959 1960 1961</div> 1962 1963 1964</div> 1965<!-- END sections: header-group --> 1966 <div role="main" id="main-content"> 1967 <div id="shopify-section-template--14453892513891__slideshow_CKD64d" class="shopify-section section-slideshow">
1967<link href="//sparxhockey.com/cdn/shop/t/283/assets/slideshow.css?v=100365540460151131141699453359" rel="stylesheet" type="text/css" media="all" /><div class="row full-width-row"> 1968 <div class="small-12 columns"> 1969 <div 1970 class="slideshow main-slideshow carousel custom-dots mobile-height-500 desktop-height-650 section-spacing section-spacing--disable-top section-spacing--disable-bottom transition--swipe" 1971 data-dots="false" 1972 data-autoplay="5000" 1973 data-fade="true" 1974 data-transition="swipe" 1975 style="--dot-speed: 5s;--color-text: #fff;" 1976 ><div 1977 class="slideshow__slide carousel__slide mobile-height-500 desktop-height-650 text-center content-size-large" 1978 style="--overlay-color-rgb: 0,0,0; --overlay-opacity: 1.0;" 1979 1980 ><div class="slideshow__slide-bg"></div> 1981<div class="slideshow__slide-video-bg slideshow__slide-video-bg--desktop" data-provider="hosted" data-video-id="22653654073443"> 1982 <video playsinline="playsinline" autoplay="autoplay" loop="loop" muted="muted" preload="metadata" poster="//sparxhockey.com/cdn/shop/files/preview_images/f2451ff073db4b8aa370b7ed5f399946.thumbnail.0000000000_small.jpg?v=1690929570"><source src="//sparxhockey.com/cdn/shop/videos/c/vp/f2451ff073db4b8aa370b7ed5f399946/f2451ff073db4b8aa370b7ed5f399946.HD-1080p-7.2Mbps-16843057.mp4?v=0" type="video/mp4"><img src="//sparxhockey.com/cdn/shop/files/preview_images/f2451ff073db4b8aa370b7ed5f399946.thumbnail.0000000000_small.jpg?v=1690929570"></video> 1983 </div> 1984 1985<div class="slideshow__slide-video-bg slideshow__slide-video-bg--mobile" data-provider="hosted" data-video-id="22653033283683"> 1986 <video playsinline="playsinline" autoplay="autoplay" loop="loop" muted="muted" preload="metadata" poster="//sparxhockey.com/cdn/shop/files/preview_images/f0cd0e0b1c9748ea84d8be936d800941.thumbnail.0000000000_small.jpg?v=1690911202"><source src="//sparxhockey.com/cdn/shop/videos/c/vp/f0cd0e0b1c9748ea84d8be936d800941/f0cd0e0b1c9748ea84d8be936d800941.HD-720p-4.5Mbps-16824541.mp4?v=0" type="video/mp4"><img src="//sparxhockey.com/cdn/shop/files/preview_images/f0cd0e0b1c9748ea84d8be936d800941.thumbnail.0000000000_small.jpg?v=1690911202"></video> 1987 </div> 1988<div 1989 class="slideshow__slide-overlay" 1990 style="background: linear-gradient(180deg, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.4) 100%)" 1991 ></div> 1992 <div class="slideshow__slide-inner content-middle-center"> 1993 <div class="slideshow__slide-content"> 1994 1995 <p class="subheading fw-bold">BACK TO HOCKEY SALE - SAVE $200</p> 1996 1997 1998 <h1 class="split-text h1 fw-bold"> 1999 FREE SOFT TRAVEL CASE AND FREE SHIPPING ON ALL SHARPENERS 2000 </h1> 2001 2002 2003 <p class="split-text description-size--small fw-light"> 2004 ENTER CODE BACKTOHOCKEY AT CHECKOUT 2005 </p> 2006 2007 2008 2009 <div class="button-overflow-container"> 2010 <a 2011 class="button " 2012 href="/collections/sharpeners" 2013 role="button" 2014 title="SHOP SHARPENERS" 2015 ><span>SHOP SHARPENERS</span></a 2016 > 2017 </div> 2018 2019 2020 </div> 2021 </div> 2022 </div></div> 2023 </div> 2024</div> 2025 2026</div><div id="shopify-section-template--14453892513891__066e9311-f61e-41b5-bbcc-29bd2eed0d38" class="shopify-section"><link href="//sparxhockey.com/cdn/shop/t/283/assets/rich-text.css?v=52791694746776477541757001509" rel="stylesheet" type="text/css" media="all" /> 2027<div class="row full-width-row-full"> 2028 <div class="small-12 columns"> 2029 <div 2030 class="rich-text text-center text-position-center text-width-grid section-spacing-padding section-spacing--disable-top section-spacing--disable-bottom" 2031 style="--color-bg: rgba(0,0,0,0); --color-text: #151515; --color-accent: #151515; --color-accent-rgb: 21, 21, 21;" 2032 > 2033 <div class="rich-text__inner"> 2034 2035<div 2036 class="rte text-size-regular fw-light" 2037 2038 > 2039 <p><em>**Back To Hockey Bundle Savings Can Not Be Combined With Any Other Offer </em></p> 2040 </div> 2041 </div> 2042 </div> 2043 </div> 2044</div> 2045 2046 2047<style> #shopify-section-template--14453892513891__066e9311-f61e-41b5-bbcc-29bd2eed0d38 h3 {color: #f0383a;} </style></div><div id="shopify-section-template--14453892513891__1750875926f01ebbaf" class="shopify-section"> 2048 2049 <div id="shopify-block-AZDlGY0pRaGFLU0QzY__klarna_on_site_messaging_app_block_FhpUGp" class="shopify-block shopify-app-block"><klarna-placement 2050 id="shopify-osm-AZDlGY0pRaGFLU0QzY__klarna_on_site_messaging_app_block_FhpUGp" 2051 data-key="top-strip-promotion-auto-size" 2052 data-theme="dark" 2053 data-message-prefix="" 2054 data-integration-style="app-block" 2055></klarna-placement> 2056
2057<script type="application/javascript"> 2058 window.appBlockPlacements ||= []; 2059 2060 if (window.klarnaAppBlocksManager) { 2061 window.klarnaAppBlocksManager.push({ 2062 productVariants: null, 2063 templateName: 'index', 2064 dataKey: 'top-strip-promotion-auto-size', 2065 storefrontCurrency: 'USD', 2066 storefrontCountry: 'US', 2067 storefrontLanguage: 'en', 2068 shopLocale: 'en', 2069 shopDomain: 'sparxhockey.com', 2070 variantPrice: '', 2071 cartPrice: '0', 2072 selector: 'shopify-osm-AZDlGY0pRaGFLU0QzY__klarna_on_site_messaging_app_block_FhpUGp', 2073 topPadding: '0', 2074 bottomPadding: '0', 2075 }); 2076 } else { 2077 window.appBlockPlacements.push({ 2078 productVariants: null, 2079 templateName: 'index', 2080 shopLocale: 'en', 2081 dataKey: 'top-strip-promotion-auto-size', 2082 storefrontCurrency: 'USD', 2083 storefrontCountry: 'US', 2084 storefrontLanguage: 'en', 2085 shopDomain: 'sparxhockey.com', 2086 variantPrice: '', 2087 cartPrice: '0', 2088 selector: 'shopify-osm-AZDlGY0pRaGFLU0QzY__klarna_on_site_messaging_app_block_FhpUGp', 2089 topPadding: '0', 2090 bottomPadding: '0', 2091 }); 2092 } 2093</script>
2093 2094 2095 2096</div> 2097 2098 2099 2100 2101 2102</div><div id="shopify-section-template--14453892513891__b2b_collection_product_grid_KTAACE" class="shopify-section section--b2b-collection-product-grid"> 2103<link href="//sparxhockey.com/cdn/shop/t/283/assets/facets.css?v=42651875553987510681682107629" rel="stylesheet" type="text/css" media="all" /><link href="//sparxhockey.com/cdn/shop/t/283/assets/product-grid.css?v=24662087130431373221757001509" rel="stylesheet" type="text/css" media="all" /> 2104<div class="row b2b-collection-product-grid full-width-row" style="padding-top: 15px" id="sharpener-and-bundle"> 2105 <div class="small-12 columns"><div class="collection-container"> 2106 <div id="ProductGridContainer"> 2107 <div class="sidebar-container facets--drawer results--3"><div><facet-filters-form class="facets--bar"> 2108 <form id="FacetFiltersForm-bar" class="facets__form"> 2109 <div></div> 2110 2111 <div class="thb-filter-sort-count"></div> 2112 </form></facet-filters-form> 2113<ul id="product-grid" data-id="template--14453892513891__b2b_collection_product_grid_KTAACE" class="products collection row small-up-1 medium-up-3 pagination--paginated"><li class="column"><link href="//sparxhockey.com/cdn/shop/t/283/assets/product-card.css?v=173381139515360708871757001508" rel="stylesheet" type="text/css" media="all" /> 2114<product-card class="product-card text-left product-card--complex" data-team=""> 2115 <figure class="product-featured-image "> 2116 2117 2118 2119 2120 <a href="/products/sparx-sharpener-3" title="Sparx Sharpener 3" class="product-featured-image-link aspect-ratio aspect-ratio--adapt" style="--padding-bottom: 100.0%;"> 2121 2122<img class="lazyload product-primary-image" width="1000" height="1000" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sharpener_3_Transparent_Image_1000x1000_5ddb17d5-86f1-4df7-afb4-50e1d7f422a6_20x_crop_center.png?v=1743613397" data-srcset="//sparxhockey.com/cdn/shop/files/Sharpener_3_Transparent_Image_1000x1000_5ddb17d5-86f1-4df7-afb4-50e1d7f422a6_375x_crop_center.png?v=1743613397 375w, //sparxhockey.com/cdn/shop/files/Sharpener_3_Transparent_Image_1000x1000_5ddb17d5-86f1-4df7-afb4-50e1d7f422a6_770x_crop_center.png?v=1743613397 770w, " alt="Sparx Sharpener 3" style="object-position: 50.0% 50.0%;" /> 2123<noscript> 2124<img width="1000" height="1000" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sharpener_3_Transparent_Image_1000x1000_5ddb17d5-86f1-4df7-afb4-50e1d7f422a6.png?v=1743613397" srcset="//sparxhockey.com/cdn/shop/files/Sharpener_3_Transparent_Image_1000x1000_5ddb17d5-86f1-4df7-afb4-50e1d7f422a6_375x_crop_center.png?v=1743613397 375w, //sparxhockey.com/cdn/shop/files/Sharpener_3_Transparent_Image_1000x1000_5ddb17d5-86f1-4df7-afb4-50e1d7f422a6_770x_crop_center.png?v=1743613397 770w, " alt="Sparx Sharpener 3" loading="lazy" style="object-position: 50.0% 50.0%;" /> 2125</noscript> 2126</a> 2127 </figure> 2128 <div class="product-card-info"><a href="/products/sparx-sharpener-3" title="Sparx Sharpener 3" class="product-card-title"> 2129 Sparx Sharpener 3 2130 2131 </a> 2132 2133<span class="price"> 2134 2135<ins><span class="amount"><span class=money>$899.99 </span></span></ins> 2136 <small class="unit-price hidden"> 2137 <span></span> 2138 <span class="unit-price-separator">/</span> 2139 <span> 2140 </span> 2141 </small> 2142</span> 2143 2144 2145 2146<div class="product-card-quick-add"> 2147 <a class="product-quick-add-button button" href="/products/sparx-sharpener-3"> 2148 <span>Shop now</span> 2149 </a> 2150 </div></div> 2151</product-card></li><li class="column"><link href="//sparxhockey.com/cdn/shop/t/283/assets/product-card.css?v=173381139515360708871757001508" rel="stylesheet" type="text/css" media="all" /> 2152<product-card class="product-card text-left product-card--complex" data-team=""> 2153 <figure class="product-featured-image "> 2154 2155 2156 2157 2158 <a href="/products/sparx-sharpener-3-with-beam" title="Sparx Sharpener 3 + BEAM" class="product-featured-image-link aspect-ratio aspect-ratio--adapt" style="--padding-bottom: 100.0%;"> 2159 2160<img class="lazyload product-primary-image" width="1000" height="1000" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sharpener3_Img_1_20x_crop_center.png?v=1690834397" data-srcset="//sparxhockey.com/cdn/shop/files/Sharpe
2160ner3_Img_1_375x_crop_center.png?v=1690834397 375w, //sparxhockey.com/cdn/shop/files/Sharpener3_Img_1_770x_crop_center.png?v=1690834397 770w, " alt="Sparx Sharpener 3 + BEAM" style="object-position: 50.0% 50.0%;" /> 2161<noscript> 2162<img width="1000" height="1000" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sharpener3_Img_1.png?v=1690834397" srcset="//sparxhockey.com/cdn/shop/files/Sharpener3_Img_1_375x_crop_center.png?v=1690834397 375w, //sparxhockey.com/cdn/shop/files/Sharpener3_Img_1_770x_crop_center.png?v=1690834397 770w, " alt="Sparx Sharpener 3 + BEAM" loading="lazy" style="object-position: 50.0% 50.0%;" /> 2163</noscript> 2164</a> 2165 </figure> 2166 <div class="product-card-info"><a href="/products/sparx-sharpener-3-with-beam" title="Sparx Sharpener 3 + BEAM" class="product-card-title"> 2167 Sparx Sharpener 3 + BEAM 2168 2169 </a> 2170 2171<span class="price"> 2172 2173<ins><span class="amount"><span class=money>$1,124.99 </span></span></ins> 2174 <small class="unit-price hidden"> 2175 <span></span> 2176 <span class="unit-price-separator">/</span> 2177 <span> 2178 </span> 2179 </small> 2180</span> 2181 2182 2183 2184<div class="product-card-quick-add"> 2185 <a class="product-quick-add-button button" href="/products/sparx-sharpener-3-with-beam"> 2186 <span>Shop now</span> 2187 </a> 2188 </div></div> 2189</product-card></li><li class="column"><link href="//sparxhockey.com/cdn/shop/t/283/assets/product-card.css?v=173381139515360708871757001508" rel="stylesheet" type="text/css" media="all" /> 2190<product-card class="product-card text-left product-card--complex" data-team=""> 2191 <figure class="product-featured-image "> 2192 2193 2194 2195<span class="badge onsale top left">Sale 2196</span> 2197 2198 2199 <a href="/products/entry-level-bundle" title="Entry Level Bundle" class="product-featured-image-link aspect-ratio aspect-ratio--adapt" style="--padding-bottom: 100.0%;"> 2200 2201<img class="lazyload product-primary-image" width="1667" height="1667" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Entry_Level_Bundle_Image_20x_crop_center.jpg?v=1762203990" data-srcset="//sparxhockey.com/cdn/shop/files/Entry_Level_Bundle_Image_375x_crop_center.jpg?v=1762203990 375w, //sparxhockey.com/cdn/shop/files/Entry_Level_Bundle_Image_770x_crop_center.jpg?v=1762203990 770w, " alt="Entry Level Bundle" style="object-position: 50.0% 50.0%;" /> 2202<noscript> 2203<img width="1667" height="1667" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Entry_Level_Bundle_Image.jpg?v=1762203990" srcset="//sparxhockey.com/cdn/shop/files/Entry_Level_Bundle_Image_375x_crop_center.jpg?v=1762203990 375w, //sparxhockey.com/cdn/shop/files/Entry_Level_Bundle_Image_770x_crop_center.jpg?v=1762203990 770w, " alt="Entry Level Bundle" loading="lazy" style="object-position: 50.0% 50.0%;" /> 2204</noscript> 2205</a> 2206 </figure> 2207 <div class="product-card-info"><a href="/products/entry-level-bundle" title="Entry Level Bundle" class="product-card-title"> 2208 Entry Level Bundle 2209 2210 </a> 2211 2212<span class="price"> 2213 2214 <del> 2215 <span class="amount"> 2216 2217 <span class=money>$1,194.97 </span> 2218 2219 </span> 2220 </del> 2221 2222<ins><span class="amount"><span class=money>$1,174.99 </span></span></ins> 2223 <small class="unit-price hidden"> 2224 <span></span> 2225 <span class="unit-price-separator">/</span> 2226 <span> 2227 </span> 2228 </small> 2229</span> 2230 2231 2232 2233<div class="product-card-quick-add"> 2234 <a class="product-quick-add-button button" href="/products/entry-level-bundle"> 2235 <span>Shop now</span> 2236 </a> 2237 </div></div> 2238</product-card></li></ul> 2239</div> 2240 </div> 2241 </div> 2242 </div></div> 2243</div> 2244</div><div id="shopify-section-template--14453892513891__17745579842464e48f" class="shopify-section"> 2245 2246 <div id="shopify-block-AUXV6YlFwU2M4Y05RT__okendo_reviews_carousel_zTCbzn" class="shopify-block shopify-app-block"> 2247 2248 2249 2250 2251 <div 2252 data-oke-carousel 2253 data-oke-reviews-product-id="shopify-6954432168035" 2254 2255 2256 2257 ></div> 2258 2259 2260 2261</div> 2262 2263 2264 2265 2266 2267</div><div id="shopify-section-template--14453892513891__175692934033f4acec" class="shopify-section"> 2268 2269 2270<style data-shopify> 2271 .ai-custom-hero-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc { 2272 padding: 20px 10px 20px; 2273 background-color: #ffffff; 2274 width: 100%; 2275 } 2276 2277 .ai-custom-hero-container-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc { 2278 max-width: 1200px; 2279 margin: 0 auto; 2280 width: 100%; 2281 text-align: center; 2282 } 2283 2284 .ai-custom-hero-callout-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc { 2285 display: flex; 2286 align-items: center; 2287 gap: 12px; 2288 margin-bottom: 20px; 2289 2290 justify-content: center; 2291 2292 } 2293 2294 .ai-custom-hero-callout-logo-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc { 2295 width: 80px; 2296 height: 80px; 2297 flex-shrink: 0; 2298 } 2299 2300 .ai-custom-hero-callout-logo-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc img { 2301 width: 100%; 2302 height: 100%; 2303 object-fit: contain; 2304 } 2305 2306 .ai-custom-hero-callout-placeholder-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc { 2307 width: 100%; 2308 height: 100%; 2309 background-color: #f4f4f4; 2310 display: flex; 2311 align-items: center; 2312 justify-content: center; 2313 border-radius: 4px; 2314 } 2315 2316 .ai-custom-hero-callout-placeholder-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc svg { 2317 width: 24px; 2318 height: 24px; 2319 color: #999; 2320 } 2321 2322 .ai-custom-hero-callout-text-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc { 2323 color: #000000; 2324 font-size: 24px; 2325 font-weight: 600; 2326 margin: 0; 2327 text-transform: uppercase;letter-spacing: 1px; 2328 } 2329 2330 .ai-custom-hero-headline-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc { 2331 font-size: 24px; 2332 font-weight: 900; 2333 line-height: 1.2; 2334 margin: 0 0 30px; 2335 color: #2a2a2b; 2336 text-transform: uppercase; 2337 2338 } 2339 2340 .ai-custom-hero-headline-red-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc {
2341 color: #e00f00; 2342 font-style: italic; 2343 } 2344 2345 .ai-custom-hero-description-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc { 2346 font-size: 12px; 2347 line-height: 1.6; 2348 color: #2a2a2b; 2349 margin: 0 0 40px; 2350 max-width: 100%; 2351 2352 margin-left: auto; 2353 margin-right: auto; 2354 2355 } 2356 2357 .ai-custom-hero-button-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc { 2358 display: inline-flex; 2359 align-items: center; 2360 justify-content: center; 2361 padding: 10px 20px; 2362 background-color: #e00f00; 2363 color: #ffffff; 2364 text-decoration: none; 2365 border-radius: 0px; 2366 font-size: 12px; 2367 font-weight: 700; 2368 transition: all 0.3s ease; 2369 border: none; 2370 cursor: pointer; 2371 text-transform: uppercase; 2372 letter-spacing: 1px; 2373 } 2374 2375 .ai-custom-hero-button-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc:hover { 2376 background-color: #c00d00; 2377 color: #ffffff; 2378 transform: translateY(-2px); 2379 } 2380 2381 @media screen and (max-width: 768px) { 2382 .ai-custom-hero-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc { 2383 padding: 14.0px 7.0px 14.0px; 2384 } 2385 2386 .ai-custom-hero-headline-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc { 2387 font-size: 19.2px; 2388 } 2389 2390 .ai-custom-hero-callout-text-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc { 2391 font-size: 21.6px; 2392 } 2393 2394 .ai-custom-hero-description-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc { 2395 font-size: 10.8px; 2396 } 2397 } 2398</style><div class="ai-custom-hero-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc" > 2399 <div class="ai-custom-hero-container-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc"> 2400 2401 <div class="ai-custom-hero-callout-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc"><div class="ai-custom-hero-callout-logo-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc"> 2402 2403 <img 2404 src="//sparxhockey.com/cdn/shop/files/NHL-Logosmall.png?v=1727379060&width=100" 2405 alt="" 2406 loading="lazy" 2407 width="100" 2408 height="100" 2409 > 2410 2411 </div> 2412 2413 <p class="ai-custom-hero-callout-text-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc">The Preferred At-HOME Sharpener of the NHL</p> 2414 2415 </div> 2416 2417 2418 2419 2420 2421 <div class="ai-custom-hero-description-aulhwr2vquwv1n3aywaigenblock018720ekqqjkc"> 2422 <p><br/></p> 2423 </div> 2424 2425 2426 2427 </div> 2428</div> 2429 2430 2431 2432</div><div id="shopify-section-template--14453892513891__ad8462b4-30b4-494d-b925-84f855c8f56a" class="shopify-section section-slideshow">
2432<link href="//sparxhockey.com/cdn/shop/t/283/assets/slideshow.css?v=100365540460151131141699453359" rel="stylesheet" type="text/css" media="all" /><div class="row full-width-row"> 2433 <div class="small-12 columns"> 2434 <div 2435 class="slideshow main-slideshow carousel custom-dots mobile-height-500 desktop-height-750 section-spacing section-spacing--disable-top section-spacing--disable-bottom transition--slide" 2436 data-dots="true" 2437 data-autoplay="8000" 2438 data-fade="false" 2439 data-transition="slide" 2440 style="--dot-speed: 8s;--color-text: #fff;" 2441 ><div 2442 class="slideshow__slide carousel__slide mobile-height-500 desktop-height-750 text-left content-size-medium" 2443 style="--overlay-color-rgb: 42,42,43; --overlay-opacity: 0.0;" 2444 2445 ><div class="slideshow__slide-bg"> 2446<img class="lazyload " width="3188" height="1746" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Burns___BG_20x10_crop_center.png?v=1682960196" data-srcset="//sparxhockey.com/cdn/shop/files/Burns___BG_375x500_crop_center.png?v=1682960196 375w, //sparxhockey.com/cdn/shop/files/Burns___BG_3188x1746_crop_center.png?v=1682960196 3188w, " alt="" style="object-position: 63.9478% 23.4633%;" /> 2447<noscript> 2448<img width="3188" height="1746" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Burns___BG_375x500_crop_center.png?v=1682960196" srcset="//sparxhockey.com/cdn/shop/files/Burns___BG_375x500_crop_center.png?v=1682960196 375w, //sparxhockey.com/cdn/shop/files/Burns___BG_3188x1746_crop_center.png?v=1682960196 3188w, " alt="" loading="lazy" style="object-position: 63.9478% 23.4633%;" /> 2449</noscript> 2450</div><div 2451 class="slideshow__slide-overlay" 2452 style="background: linear-gradient(180deg, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.4) 100%)" 2453 ></div> 2454 <div class="slideshow__slide-inner content-bottom-left"> 2455 <div class="slideshow__slide-content"> 2456 2457 <p class="subheading fw-medium">NHL Player: Colorado Avalanche</p> 2458 2459 2460 <h1 class="split-text h1-large fw-black"> 2461 BRENT BURNS 2462 </h1> 2463 2464 2465 <p class="split-text description-size--large fw-book"> 2466 âThe Sparx Sharpener makes sense on every level. Itâs an unbelievable product to have for any hockey family - it makes everything so much easier." 2467 </p> 2468 2469 2470 <div class="button-overflow-container"> 2471 <a 2472 class="button " 2473 href="/pages/review" 2474 role="button" 2475 title="SEE MORE TESTIMONIALS" 2476 ><span>SEE MORE TESTIMONIALS</span></a 2477 > 2478 </div> 2479 2480 2481 2482 <a 2483 href="/pages/review" 2484 class="slideshow__slide-content-link" 2485 tabindex="-1" 2486 ></a> 2487 2488 </div> 2489 </div> 2490 </div><div 2491 class="slideshow__slide carousel__slide mobile-height-500 desktop-height-750 text-left content-size-medium" 2492 style="--overlay-color-rgb: 0,0,0; --overlay-opacity: 0.7;" 2493 2494 ><div class="slideshow__slide-bg"> 2495<img class="lazyload " width="2800" height="1000" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Modano_Testimoinal_New_copy_20x7_crop_center.jpg?v=1691032965" data-srcset="//sparxhockey.com/cdn/shop/files/Modano_Testimoinal_New_copy_375x500_crop_center.jpg?v=1691032965 375w, //sparxhockey.com/cdn/shop/files/Modano_Testimoinal_New_copy_2800x1000_crop_center.jpg?v=1691032965 2800w, " alt="" style="object-position: 50.0% 50.0%;" /> 2496<noscript> 2497<img width="2800" height="1000" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Modano_Testimoinal_New_copy_375x500_crop_center.jpg?v=1691032965" srcset="//sparxhockey.com/cdn/shop/files/Modano_Testimoinal_New_copy_375x500_crop_center.jpg?v=1691032965 375w, //sparxhockey.com/cdn/shop/files/M
2497odano_Testimoinal_New_copy_2800x1000_crop_center.jpg?v=1691032965 2800w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 2498</noscript> 2499</div><div 2500 class="slideshow__slide-overlay" 2501 style="background: linear-gradient(180deg, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.4) 100%)" 2502 ></div> 2503 <div class="slideshow__slide-inner content-bottom-left"> 2504 <div class="slideshow__slide-content"> 2505 2506 <p class="subheading ">NHL HALL OF FAME: Dallas Stars</p> 2507 2508 2509 <h1 class="split-text h1-large fw-black"> 2510 MIKE MODANO 2511 </h1> 2512 2513 2514 <p class="split-text description-size--medium "> 2515 âItâs almost too easy to use. You just pop the skate in, push the button and youâre good to go!" 2516 </p> 2517 2518 2519 <div class="button-overflow-container"> 2520 <a 2521 class="button white" 2522 href="/pages/review" 2523 role="button" 2524 title="SEE MORE TESTIMONIALS" 2525 ><span>SEE MORE TESTIMONIALS</span></a 2526 > 2527 </div> 2528 2529 2530 2531 </div> 2532 </div> 2533 </div><div 2534 class="slideshow__slide carousel__slide mobile-height-500 desktop-height-750 text-left content-size-medium" 2535 style="--overlay-color-rgb: 42,42,43; --overlay-opacity: 0.0;" 2536 2537 ><div class="slideshow__slide-bg"> 2538<img class="lazyload " width="2800" height="1000" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Heise_Testimonial_Take4_20x7_crop_center.jpg?v=1690994790" data-srcset="//sparxhockey.com/cdn/shop/files/Heise_Testimonial_Take4_375x500_crop_center.jpg?v=1690994790 375w, //sparxhockey.com/cdn/shop/files/Heise_Testimonial_Take4_2800x1000_crop_center.jpg?v=1690994790 2800w, " alt="" style="object-position: 50.0% 50.0%;" /> 2539<noscript> 2540<img width="2800" height="1000" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Heise_Testimonial_Take4_375x500_crop_center.jpg?v=1690994790" srcset="//sparxhockey.com/cdn/shop/files/Heise_Testimonial_Take4_375x500_crop_center.jpg?v=1690994790 375w, //sparxhockey.com/cdn/shop/files/Heise_Testimonial_Take4_2800x1000_crop_center.jpg?v=1690994790 2800w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 2541</noscript> 2542</div><div 2543 class="slideshow__slide-overlay" 2544 style="background: linear-gradient(180deg, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.4) 100%)" 2545 ></div> 2546 <div class="slideshow__slide-inner content-bottom-left"> 2547 <div class="slideshow__slide-content"> 2548 2549 <p class="subheading fw-medium">US WOMENâS NATIONAL TEAM</p> 2550 2551 2552 <h1 class="split-text h1-large fw-black"> 2553 TAYLOR HEISE 2554 </h1> 2555 2556 2557 <p class="split-text description-size--medium "> 2558 "The Sparx Sharpener has really been a dream and itâs something I really wish I had growing up." 2559 </p> 2560 2561 2562 <div class="button-overflow-container"> 2563 <a 2564 class="button " 2565 href="/pages/review" 2566 role="button" 2567 title="SEE MORE TESTIMONIALS" 2568 ><span>SEE MORE TESTIMONIALS</span></a 2569 > 2570 </div> 2571 2572 2573 2574 <a 2575 href="/pages/review" 2576 class="slideshow__slide-content-link" 2577 tabindex="-1" 2578 ></a> 2579 2580 </div> 2581 </div> 2582 </div><ol class="flickity-page-dots"><li class="dot" aria-label="1"> 2583<svg width="20px" height="20px" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" class="thb-pagination-svg" preserveAspectRatio="none"><circle cx="10" cy="10" r="9" stroke="var(--color-text, #fff)" stroke-width="1.5px" stroke-linecap="round" stroke-linejoin="round"></circle></svg> 2584</li><li class="dot" aria-label="2"> 2585<svg width="20px" height="20px" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" class="thb-pagination-svg" preserveAspectRatio="none"><circle cx="10" cy="10" r="9" stroke="var(--color-text, #fff)" stroke-width="1.5px" stroke-linecap="round" stroke-linejoin="round"></circle></svg> 2586</li><li class="dot" aria-label="3"> 2587<svg width="20px" height="20px" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" class="thb-pagination-svg" preserveAspectRatio="none"><circle cx="10" cy="10" r="9" stroke="var(--color-text, #fff)" stroke-width="1.5px" stroke-linecap="round" stroke-linejoin="round"></circle></svg> 2588</li></ol></div> 2589 </div> 2590</div> 2591 2592</div><div id="shopify-section-template--14453892513891__rich_text_XYwB3B" class="shopify-section"><link href="//sparxhockey.com/cdn/shop/t/283/assets/rich-text.css?v=52791694746776477541757001509" rel="stylesheet" type="text/css" media="all" /> 2593<div class="row full-width-row-full"> 2594 <div class="small-12 columns"> 2595 <div 2596 class="rich-text text-center text-position-center text-width-grid section-spacing-padding section-spacing--disable-bottom" 2597 style="--color-bg: rgba(0,0,0,0); --color-text: #151515; --color-accent: #151515; --color-accent-rgb: 21, 21, 21;" 2598 > 2599 <div class="rich-text__inner"> 2600 2601<p 2602 class="subheading " 2603 2604 > 2605 THE #1 SKATE SHARPENER IN HOCKEY 2606 </p> 2607<h3 2608 class="rich-text__heading h1 fw-black rich-text__heading--none" 2609 2610 > 2611 SPARX HOCKEY BY THE NUMBERS 2612 </h3> 2613 </div> 2614 </div> 2615 </div> 2616</div> 2617 2618 2619<style> #shopify-section-template--14453892513891__rich_text_XYwB3B h3 {color: #f0383a;} </style></div><div id="shopify-section-template--14453892513891__multicolumn_LwmxHt" class="shopify-section section-multicolumn"><link href="//sparxhockey.com/cdn/shop/t/283/assets/multicolumn.css?v=37156477969954335871739387144" rel="stylesheet" type="text/css" media="all" /><style> 2620 2621 #shopify-section-template--14453892513891__multicolumn_LwmxHt .image-margin-bottom-small{ 2622 margin-bottom: 10px; 2623 } 2624 #shopify-section-template--14453892513891__multicolumn_LwmxHt .image-margin-bottom-medium{ 2625 margin-bottom: 25px; 2626 } 2627 #shopify-section-template--14453892513891__multicolumn_LwmxHt .image-margin-bottom-large{ 2628 margin-bottom: 50px; 2629 } 2630 @media screen and (max-width: 767px) { 2631 #shopify-section-template--14453892513891__multicolumn_LwmxHt .multicolumn__column { 2632 padding-left: 11px !important; 2633 padding-right: 11px !important; 2634 } 2635 } 2636</style> 2637 2638<div class="multicolumn text-center section-spacing section-spacing--disable-top section-spacing--disable-bottom"> 2639 <div class="row full-width-row"> 2640 <div class="small-12 columns"> 2641
2642 <div class="multicolumn__inner display-type--grid"> 2643 <div 2644 class="row align-stretch no-padding grid " 2645 > 2646 <div 2647 class="multicolumn__column small-12 medium-3 columns " 2648 style="padding-right: 15px; margin: 36px 0;" 2649 > 2650 <div style="width: 100%; height: 100%; background-color: #ffffff;"> 2651 2652 2653 <figure 2654 class="multicolumn__image image-margin-bottom-small" 2655 style="width: 960px;" 2656 > 2657 <div 2658 class="multicolumn__image--inner aspect-ratio aspect-ratio--adapt" 2659 style="--ratio-percent: 41.5625%;" 2660 > 2661<img class="lazyload retina_size " width="960" height="399" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/10M_Number_20x_crop_center.png?v=1763144961" data-srcset="//sparxhockey.com/cdn/shop/files/10M_Number_407x_crop_center.png?v=1763144961 407w, //sparxhockey.com/cdn/shop/files/10M_Number_814x_crop_center.png?v=1763144961 814w, " alt="" style="object-position: 50.0% 50.0%;" /> 2662<noscript> 2663<img width="1920" height="798" sizes="auto" src="//sparxhockey.com/cdn/shop/files/10M_Number.png?v=1763144961" srcset="//sparxhockey.com/cdn/shop/files/10M_Number_407x_crop_center.png?v=1763144961 407w, //sparxhockey.com/cdn/shop/files/10M_Number_814x_crop_center.png?v=1763144961 814w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 2664</noscript> 2665</div> 2666 </figure> 2667 2668 </a> 2669 2670 2671 <div 2672 class="column-text" 2673 style="padding: 5px 24px" 2674 > 2675 2676 2677 <div 2678 class="rte fw-black" 2679 2680 style="color: #E00F00;" 2681 > 2682 <h1>SHARPENINGS PER YEAR</h1> 2683 </div> 2684 2685 2686 </div> 2687 </div> 2688 </div> 2689 <div 2690 class="multicolumn__column small-12 medium-3 columns " 2691 style="padding-right: 15px;padding-left: 15px; margin: 36px 0;" 2692 > 2693 <div style="width: 100%; height: 100%; background-color: #ffffff;"> 2694 2695 2696 <figure 2697 class="multicolumn__image image-margin-bottom-small" 2698 style="width: 480px;" 2699 > 2700 <div 2701 class="multicolumn__image--inner aspect-ratio aspect-ratio--adapt" 2702 style="--ratio-percent: 41.5625%;" 2703 > 2704<img class="lazyload retina_size " width="480" height="199" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/By-The-Numbers-100k_20x_crop_center.jpg?v=1774558866" data-srcset="//sparxhockey.com/cdn/shop/files/By-The-Numbers-100k_407x_crop_center.jpg?v=1774558866 407w, //sparxhockey.com/cdn/shop/files/By-The-Numbers-100k_814x_crop_center.jpg?v=1774558866 814w, " alt="" style="object-position: 50.0% 50.0%;" /> 2705<noscript> 2706<img width="960" height="399" sizes="auto" src="//sparxhockey.com/cdn/shop/files/By-The-Numbers-100k.jpg?v=1774558866" srcset="//sparxhockey.com/cdn/shop/files/By-The-Numbers-100k_407x_crop_center.jpg?v=1774558866 407w, //sparxhockey.com/cdn/shop/files/By-The-Numbers-100k_814x_crop_center.jpg?v=1774558866 814w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 2707</noscript> 2708</div> 2709 </figure> 2710 2711 </a> 2712 2713 2714 <div 2715 class="column-text" 2716 style="padding: 5px 24px" 2717 > 2718 2719 2720 <div 2721 class="rte fw-black" 2722 2723 style="color: #E00F00;" 2724 > 2725 <h1>SHARPENERS IN MARKET</h1> 2726 </div> 2727 2728 2729 </div> 2730 </div> 2731 </div> 2732 <div 2733 class="multicolumn__column small-12 medium-3 columns " 2734 style="padding-right: 15px;padding-left: 15px; margin: 36px 0;" 2735 > 2736 <div style="width: 100%; height: 100%; background-color: #ffffff;"> 2737 2738 2739 <figure 2740 class="multicolumn__image image-margin-bottom-small" 2741 style="width: 960px;" 2742 > 2743 <div 2744 class="multicolumn__image--inner aspect-ratio aspect-ratio--adapt" 2745 style="--ratio-percent: 41.5625%;" 2746 > 2747<img class="lazyload retina_size " width="960" height="399" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/4K_number_20x_crop_center.png?v=1763144961" data-srcset="//sparxhockey.com/cdn/shop/files/4K_number_407x_crop_center.png?v=1763144961 407w, //sparxhockey.com/cdn/shop/files/4K_number_814x_crop_center.png?v=1763144961 814w, " alt="" style="object-position: 50.0% 50.0%;" /> 2748<noscript> 2749<img width="1920" height="798" sizes="auto" src="//sparxhockey.com/cdn/shop/files/4K_number.png?v=1763144961" srcset="//sparxhockey.com/cdn/shop/files/4K_number_407x_crop_center.png?v=1763144961 407w, //sparxhockey.com/cdn/shop/files/4K_number_814x_crop_center.png?v=1763144961 814w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 2750</noscript> 2751</div> 2752 </figure> 2753 2754 </a> 2755 2756 2757 <div 2758 class="column-text" 2759 style="padding: 5px 24px" 2760 > 2761 2762 2763 <div 2764 class="rte fw-black" 2765 2766 style="color: #E00F00;" 2767 > 2768 <h1>RINKS & RETAILERS USING SPARX </h1> 2769 </div> 2770 2771 2772 </div> 2773 </div> 2774 </div> 2775 <div 2776 class="multicolumn__column small-12 medium-3 columns " 2777 style="padding-right: 15px;padding-left: 15px; margin: 36px 0;" 2778 > 2779 <div style="width: 100%; height: 100%; background-color: #ffffff;"> 2780 2781 2782 <figure 2783 class="multicolumn__image image-margin-bottom-small" 2784 style="width: 960px;" 2785 > 2786 <div 2787 class="multicolumn__image--inner aspect-ratio aspect-ratio--adapt" 2788 style="--ratio-percent: 41.5625%;" 2789 > 2790<img class="lazyload retina_size " width="960" height="399" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/2K_number_20x_crop_center.png?v=1763144961" data-srcset="//sparxhockey.com/cdn/shop/files/2K_number_407x_crop_center.png?v=1763144961 407w, //sparxhockey.com/cdn/shop/files/2K_number_814x_crop_center.png?v=1763144961 814w, " alt="" style="object-position: 50.0% 50.0%;" /> 2791<noscript> 2792<img width="1920" height="798" sizes="auto" src="//sparxhockey.com/cdn/shop/files/2K_number.png?v=1763144961" srcset="//sparxhockey.com/cdn/shop/files/2K_number_407x_crop_center.png?v=1763144961 407w, //sparxhockey.com/cdn/shop/files/2K_number_814x_crop_center.png?v=1763144961 814w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 2793</noscript> 2794</div> 2795 </figure> 2796 2797 </a> 2798 2799 2800 <div 2801 class="column-text" 2802 style="padding: 5px 24px" 2803 > 2804 2805 2806 <div 2807 class="rte fw-black" 2808 2809 style="color: #E00F00;" 2810 > 2811 <h1>TEAMS USING SPARX</h1> 2812 </div> 2813 2814 2815 </div> 2816 </div> 2817 </div></div></div> 2818 </div> 2819 </div> 2820</div> 2821 2822<style> #shopify-section-template--14453892513891__multicolumn_LwmxHt h1 {color: #f0383a; font-size: 20px; line-height: 24px;} </style></div><div id="shopify-section-template--14453892513891__e7f6897a-efdc-4701-9e40-68554a9edc12" class="shopify-section section-image-with-text"><link href="//sparxhockey.com/cdn/shop/t/283/assets/collapsible-content.css?v=41279224829157454911682107633" rel="stylesheet" type="text/css" media="all" /><link href="//sparxhockey.com/cdn/shop/t/283/assets/image-with-text.css?v=151691367311110066131682107634" rel="stylesheet" type="text/css" media="all" /><div class="row full-width-row-full"> 2823 <div class="small-12 columns"> 2824 <div 2825 class="image-with-text grid--image-small text_first text-left section-spacing section-spacing--disable-top section-spacing--disable-bottom" 2826 style="--color-bg:#ffffff;--color-text:#151515;--color-text-rgb: 21, 21, 21; --bg-body: #ffffff;--color-border: #e2e2e2" 2827 > 2828 <div class="image-with-text__image image-with-text__inner"> 2829 <div 2830 class="image-with-text__image-media aspect-ratio aspect-ratio--adapt" 2831 style="--ratio-percent: 100.0%;" 2832 > 2833<img class="lazyload " width="2792" height="2792" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sparx_Homepage_Beam_20x20_crop_center.jpg?v=1690462360" data-srcset="//sparxhockey.com/cdn/shop/files/Sparx_Homepage_Beam_690x690_crop_center.jpg?v=1690462360 690w, //sparxhockey.com/cdn/shop/files/Sparx_Homepage_Beam_1340x1340_crop_center.jpg?v=1690462360 1340w, //sparxhockey.com/cdn/shop/files/Sparx_Homepage_Beam_2792x2792_crop_center.jpg?v=1690462360 2792w, " alt="" style="object-position: 50.0% 50.0%;" /> 2834<noscript> 2835<img width="2792" height="2792" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sparx_Homepage_Beam_690x690_crop_center.jpg?v=1690462360" srcset="//sparxhockey.com/cdn/shop/files/Sparx_Homepage_Beam_690x690_crop_center.jpg?v=1690462360 690w, //sparxhockey.com/cdn/shop/files/Sparx_Homepage_Beam_1340x1340_crop_center.jpg?v=1690462360 1340w, //sparxhockey.com/cdn/shop/files/Sparx_Homepage_Beam_2792x2792_crop_center.jpg?v=1690462360 2792w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 2836</noscript> 2837</div> 2838 </div> 2839 <div class="image-with-text__content image-with-text__inner"> 2840 <div class="image-with-text__content--inner"><p 2841 class="subheading " 2842 2843 > 2844 THE SPARX BEAM 2845 </p><h3 2846 class="h2 fw-black" 2847 2848 > 2849 PRECISION LASER ALIGNMENT AND BLADE EDGE MEASUREMENT 2850 </h3><div 2851 class="rte " 2852 2853 > 2854 <p>The Sparx BEAM⢠- or<em> B</em>lade <em>E</em>dge <em>A</em>ccuracy <em>M</em>easurement device - is an add-on accessory that elevates your sharpening game. This patented high-tech and crazy-accurate device ensures your Sparx Sharpener is perfectly aligned and measures skate edges to 1/10,000<strong>th</strong> of an inch - the most precise skate edge measurement on the market.</p> 2855 </div> 2856 <a 2857 class="button " 2858 href="/pages/beam-learn-more" 2859 role="button" 2860 title="LEARN MORE" 2861 2862 ><span>LEARN MORE</span></a 2863 > 2864 2865 </div> 2866 </div> 2867 </div> 2868 </div> 2869</div> 2870 2871 2872<style> #shopify-section-template--14453892513891__e7f6897a-efdc-4701-9e40-68554a9edc12 h3 {color: #f0383a;} #shopify-section-template--14453892513891__e7f6897a-efdc-4701-9e40-68554a9edc12 p strong {font-size: 75%; vertical-align: top;} #shopify-section-template--14453892513891__e7f6897a-efdc-4701-9e40-68554a9edc12 p em {font-weight: 700;} </style></div><div id="shopify-section-template--14453892513891__a51ce75c-7100-44d4-8fbf-bdafab5a3ff4" class="shopify-section section-image-with-text"><link href="//sparxhockey.com/cdn/shop/t/283/assets/collapsible-content.css?v=41279224829157454911682107633" rel="stylesheet" type="text/css" media="all" /><link href="//sparxhockey.com/cdn/shop/t/283/assets/image-with-text.css?v=151691367311110066131682107634" rel="stylesheet" type="text/css" media="all" /><div class="row full-width-row-full"> 2873 <div class="small-12 columns"> 2874 <div 2875 class="image-with-text grid--image-large image_first text-left section-spacing section-spacing--disable-top section-spacing--disable-bottom" 2876 style="--color-bg:#ffffff;--color-text:#151515;--color-text-rgb: 21, 21, 21; --bg-body: #ffffff;--color-border: #e2e2e2" 2877 > 2878 <div class="image-with-text__image image-with-text__inner"> 2879 <div 2880 class="image-with-text__image-media aspect-ratio aspect-ratio--adapt" 2881 style="--ratio-percent: 60.80000000000001%;" 2882 > 2883<img class="lazyload " width="2250" height="1368" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sparx_Ecosytem_Circle_V2_20x12_crop_center.jpg?v=1690477907" data-srcset="//sparxhockey.com/cdn/shop/files/Sparx_Ecosytem_Circle_V2_690x419_crop_center.jpg?v=1690477907 690w, //sparxhockey.com/cdn/shop/files/Sparx_Ecosytem_Circle_V2_1340x814_crop_center.jpg?v=1690477907 1340w, //sparxhockey.com/cdn/shop/files/Sparx_Ecosytem_Circle_V2_2250x1368_
2883crop_center.jpg?v=1690477907 2250w, " alt="" style="object-position: 50.0% 50.0%;" /> 2884<noscript> 2885<img width="2250" height="1368" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sparx_Ecosytem_Circle_V2_690x419_crop_center.jpg?v=1690477907" srcset="//sparxhockey.com/cdn/shop/files/Sparx_Ecosytem_Circle_V2_690x419_crop_center.jpg?v=1690477907 690w, //sparxhockey.com/cdn/shop/files/Sparx_Ecosytem_Circle_V2_1340x814_crop_center.jpg?v=1690477907 1340w, //sparxhockey.com/cdn/shop/files/Sparx_Ecosytem_Circle_V2_2250x1368_crop_center.jpg?v=1690477907 2250w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 2886</noscript> 2887</div> 2888 </div> 2889 <div class="image-with-text__content image-with-text__inner"> 2890 <div class="image-with-text__content--inner"><p 2891 class="subheading " 2892 2893 > 2894 SPARX SHARPENER 3 FEATURES 2895 </p><h3 2896 class="h2 fw-black" 2897 2898 > 2899 THE FIRST FULLY INTEGRATED SHARPENING EXPERIENCE 2900 </h3><div 2901 class="rte " 2902 2903 > 2904 <p>The Sparx Sharpener 3 features Bluetooth and Wi-Fi connectivity - the first of its kind in the skate sharpening world. Connect the Sparx Sharpener 3 to the revolutionary Sparx BEAM and to the Sparx App and unlock a whole new world of controls and features. </p> 2905 </div> 2906 <a 2907 class="button " 2908 href="/pages/sharpener-learn-more" 2909 role="button" 2910 title="LEARN MORE" 2911 2912 ><span>LEARN MORE</span></a 2913 > 2914 2915 </div> 2916 </div> 2917 </div> 2918 </div> 2919</div> 2920 2921 2922<style> #shopify-section-template--14453892513891__a51ce75c-7100-44d4-8fbf-bdafab5a3ff4 h3 {color: #f0383a;} #shopify-section-template--14453892513891__a51ce75c-7100-44d4-8fbf-bdafab5a3ff4 p strong {font-size: 75%; vertical-align: top;} </style></div><div id="shopify-section-template--14453892513891__734d6f9b-9797-4f09-928c-7881ab539530" class="shopify-section section-image-with-text"><link href="//sparxhockey.com/cdn/shop/t/283/assets/collapsible-content.css?v=41279224829157454911682107633" rel="stylesheet" type="text/css" media="all" /><link href="//sparxhockey.com/cdn/shop/t/283/assets/image-with-text.css?v=151691367311110066131682107634" rel="stylesheet" type="text/css" media="all" /><div class="row full-width-row-full"> 2923 <div class="small-12 columns"> 2924 <div 2925 class="image-with-text grid--image-large text_first text-left section-spacing section-spacing--disable-top section-spacing--disable-bottom" 2926 style="--color-bg:#ffffff;--color-text:#151515;--color-text-rgb: 21, 21, 21; --bg-body: #ffffff;--color-border: #e2e2e2" 2927 > 2928 <div class="image-with-text__image image-with-text__inner"> 2929 <div 2930 class="image-with-text__image-media aspect-ratio aspect-ratio--adapt" 2931 style="--ratio-percent: 47.12308812818645%;" 2932 > 2933<img class="lazyload " width="1373" height="647" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Mutli_LCD_Update_20x9_crop_center.png?v=1691071116" data-srcset="//sparxhockey.com/cdn/shop/files/Mutli_LCD_Update_690x325_crop_center.png?v=1691071116 690w, //sparxhockey.com/cdn/shop/files/Mutli_LCD_Update_1340x631_crop_center.png?v=1691071116 1340w, //sparxhockey.com/cdn/shop/files/Mutli_LCD_Update_1373x647_crop_center.png?v=1691071116 1373w, " alt="" style="object-position: 50.0% 50.0%;" /> 2934<noscript> 2935<img width="1373" height="647" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Mutli_LCD_Update_690x325_crop_center.png?v=1691071116" srcset="//sparxhockey.com/cdn/shop/files/Mutli_LCD_Update_690x325_crop_center.png?v=1691071116 690w, //sparxhockey.com/cdn/shop/files/Mutli_LCD_Update_1340x631_crop_center.png?v=1691071116 1340w, //sparxhockey.com/cdn/shop/files/Mutli_LCD_Update_1373x647_crop_center.png?v=1691071116 1373w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 2936</noscript> 2937</div> 2938 </div> 2939 <div class="image-with-text__content image-with-text__inner"> 2940 <div class="image-with-text__content--inner"><p 2941 class="subheading " 2942 2943 > 2944 SPARX SHARPENER 3 FEATURES 2945 </p><h3 2946 class="h2 fw-black" 2947 2948 > 2949 QUICK AND EASY CONTROL NAVIGATION SYSTEM 2950 </h3><div 2951 class="rte " 2952 2953 > 2954 <p>Easily control the Sparx Sharpener 3 and Sharpener 3 Pro with the all-new multi-functional LCD display. Qu
2954ickly see how much Grinding Ring life is left and track sharpening cycles with the large Cycle Count display. The soft touch keypad puts all sharpener controls at your fingertips. </p> 2955 </div> 2956 <a 2957 class="button " 2958 href="/pages/sharpener-learn-more" 2959 role="button" 2960 title="LEARN MORE" 2961 2962 ><span>LEARN MORE</span></a 2963 > 2964 2965 </div> 2966 </div> 2967 </div> 2968 </div> 2969</div> 2970 2971 2972<style> #shopify-section-template--14453892513891__734d6f9b-9797-4f09-928c-7881ab539530 h3 {color: #f0383a;} </style></div><div id="shopify-section-template--14453892513891__0da7f084-bcdc-47b4-914a-5f6f67f9f5cd" class="shopify-section section-image-with-text"><link href="//sparxhockey.com/cdn/shop/t/283/assets/collapsible-content.css?v=41279224829157454911682107633" rel="stylesheet" type="text/css" media="all" /><link href="//sparxhockey.com/cdn/shop/t/283/assets/image-with-text.css?v=151691367311110066131682107634" rel="stylesheet" type="text/css" media="all" /><div class="row full-width-row"> 2973 <div class="small-12 columns"> 2974 <div 2975 class="image-with-text grid--image-large image_first text-left section-spacing section-spacing--disable-top" 2976 style="--color-bg:#ffffff;--color-text:#151515;--color-text-rgb: 21, 21, 21; --bg-body: #ffffff;--color-border: #e2e2e2" 2977 > 2978 <div class="image-with-text__image image-with-text__inner"> 2979 <div 2980 class="image-with-text__image-media aspect-ratio aspect-ratio--small" 2981 style="--ratio-percent: 100%;" 2982 > 2983<img class="lazyload " width="3000" height="2250" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Shopify_App_Hero_Scanning_QR_Code_20x15_crop_center.png?v=1691070939" data-srcset="//sparxhockey.com/cdn/shop/files/Shopify_App_Hero_Scanning_QR_Code_690x517_crop_center.png?v=1691070939 690w, //sparxhockey.com/cdn/shop/files/Shopify_App_Hero_Scanning_QR_Code_1340x1005_crop_center.png?v=1691070939 1340w, //sparxhockey.com/cdn/shop/files/Shopify_App_Hero_Scanning_QR_Code_3000x2250_crop_center.png?v=1691070939 3000w, " alt="" style="object-position: 50.0% 50.0%;" /> 2984<noscript> 2985<img width="3000" height="2250" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Shopify_App_Hero_Scanning_QR_Code_690x517_crop_center.png?v=1691070939" srcset="//sparxhockey.com/cdn/shop/files/Shopify_App_Hero_Scanning_QR_Code_690x517_crop_center.png?v=1691070939 690w, //sparxhockey.com/cdn/shop/files/Shopify_App_Hero_Scanning_QR_Code_1340x1005_crop_center.png?v=1691070939 1340w, //sparxhockey.com/cdn/shop/files/Shopify_App_Hero_Scanning_QR_Code_3000x2250_crop_center.png?v=1691070939 3000w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 2986</noscript> 2987</div> 2988 </div> 2989 <div class="image-with-text__content image-with-text__inner"> 2990 <div class="image-with-text__content--inner"><p 2991 class="subheading " 2992 2993 > 2994 SPARX SHARPENER 3 FEATURES 2995 </p><h3 2996 class="h2 fw-black" 2997 2998 > 2999 SHARPEN SMARTER WITH THE SPARX HOCKEY APP 3000 </h3><div 3001 class="rte " 3002 3003 > 3004 <p>Connect the Sparx Sharpener 3 to the all-new Sparx Hockey App and unlock expanded sharpener features and enhancements. Create player profiles to track sharpening and set reminders when it's time to buzz the wheels. Want to put the sharpener's LED lights in party mode or choose your team's colors? It can all be done for the Sparx Hockey App. </p> 3005 </div> 3006 <a 3007 class="button " 3008 href="/pages/sparx-hockey-app" 3009 role="button" 3010 title="LEARN MORE" 3011 3012 ><span>LEARN MORE</span></a 3013 > 3014 3015 </div> 3016 </div> 3017 </div> 3018 </div> 3019</div> 3020 3021 3022<style> #shopify-section-template--14453892513891__0da7f084-bcdc-47b4-914a-5f6f67f9f5cd h3 {color: #f0383a;} </style></div><div id="shopify-section-template--14453892513891__d2452e1c-56a8-4037-ba58-5b4e682fbf9b" class="shopify-section section-image-with-text"><link href="//sparxhockey.com/cdn/shop/t/283/assets/collapsible-content.css?v=41279224829157454911682107633" rel="stylesheet" type="text/css" media="all" /><link href="//sparxhockey.com/cdn/shop/t/283/assets/image-with-text.css?v=151691367311110066131682107634" rel="stylesheet" type="text/css" media="all" /><div class="row full-width-row-full"> 3023 <div class="small-12 columns"> 3024 <div 3025 class="image-with-text grid--image-large image_first text-left section-spacing section-spacing--disable-top section-spacing--disable-bottom" 3026 style="--color-bg:#ffffff;--color-text:#2a2a2b;--color-text-rgb: 42, 42, 43; --bg-body: #ffffff;--color-border: #e2e2e2" 3027 > 3028 <div class="image-with-text__image image-with-text__inner"> 3029 <div 3030 class="image-with-text__image-media aspect-ratio aspect-ratio--adapt" 3031 style="--ratio-percent: 56.25%;" 3032 > 3033<img class="lazyload " width="5760" height="3240" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sparx_Grinding_Rings_Hero_20x11_crop_center.jpg?v=1688581496" data-srcset="//sparxhockey.com/cdn/shop/files/Sparx_Grinding_Rings_Hero_690x388_crop_center.jpg?v=1688581496 690w, //sparxhockey.com/cdn/shop/files/Sparx_Grinding_Rings_Hero_1340x753_crop_center.jpg?v=1688581496 1340w, //sparxhockey.com/cdn/shop/files/Sparx_Grinding_Rings_Hero_5760x3240_crop_center.jpg?v=1688581496 5760w, " alt="" style="object-position: 50.0% 50.0%;" /> 3034<noscript> 3035<img width="5760" height="3240" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sparx_Grinding_Rings_Hero_690x388_crop_center.jpg?v=1688581496" srcset="//sparxhockey.com/cdn/shop/files/Sparx_Grinding_Rings_Hero_690x388_crop_center.jpg?v=1688581496 690w, //sparxhockey.com/cdn/shop/files/Sparx_Grinding_Rings_Hero_1340x753_crop_center.jpg?v=1688581496 1340w, //sparxhockey.com/cdn/shop/files/Sparx_Grinding_Rings_Hero_5760x3240_crop_center.jpg?v=1688581496 5760w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 3036</noscript> 3037</div> 3038 </div> 3039 <div class="image-with-text__content image-with-text__inner"> 3040 <div class="image-with-text__content--inner"><p 3041 class="subheading " 3042 3043 > 3044 Sparx Grinding Rings 3045 </p><h3 3046 class="h2 " 3047 3048 > 3049 THE HEART OF THE SPARX SHARPENING 3050 </h3><div 3051 class="rte fw-medium" 3052 3053 > 3054 <p>Sparx offers 21 different Grinding Rings including <strong>Traditional Hollow Radius Rings</strong><em>®</em><strong> </strong>and <strong>Flat Bottom FIRE Rings</strong><em>®</em> for extra glide while still maintaining grip.</p> 3055 </div> 3056 <a 3057 class="button " 3058 href="/pages/grinding-rings-learn-more" 3059 role="button" 3060 title="Shop Grinding Rings" 3061 3062 ><span>Shop Grinding Rings</span></a 3063 > 3064 3065 </div> 3066 </div> 3067 </div> 3068 </div> 3069</div> 3070 3071 3072<style> #shopify-section-template--14453892513891__d2452e1c-56a8-4037-ba58-5b4e682fbf9b h3 {color: #f0383a;} #shopify-section-template--14453892513891__d2452e1c-56a8-4037-ba58-5b4e682fbf9b p em {font-size: 75%; font-weight: 700; vertical-align: top;} #shopify-section-template--14453892513891__d2452e1c-56a8-4037-ba58-5b4e682fbf9b p strong {font-weight: 700;} </style></div><div id="shopify-section-template--14453892513891__5d726e65-3f77-4ae9-bf16-4f5467a0
30727063" class="shopify-section section-image-with-text"><link href="//sparxhockey.com/cdn/shop/t/283/assets/collapsible-content.css?v=41279224829157454911682107633" rel="stylesheet" type="text/css" media="all" /><link href="//sparxhockey.com/cdn/shop/t/283/assets/image-with-text.css?v=151691367311110066131682107634" rel="stylesheet" type="text/css" media="all" /><div class="row full-width-row-full"> 3073 <div class="small-12 columns"> 3074 <div 3075 class="image-with-text grid--image-medium text_first text-left section-spacing section-spacing--disable-top section-spacing--disable-bottom" 3076 style="--color-bg:#ffffff;--color-text:#151515;--color-text-rgb: 21, 21, 21; --bg-body: #ffffff;--color-border: #e2e2e2" 3077 > 3078 <div class="image-with-text__image image-with-text__inner"> 3079 <div 3080 class="image-with-text__image-media aspect-ratio aspect-ratio--small" 3081 style="--ratio-percent: 100%;" 3082 > 3083<img class="lazyload " width="3198" height="2159" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sparx_Sharpener3_Compatbaility_20x13_crop_center.jpg?v=1691067056" data-srcset="//sparxhockey.com/cdn/shop/files/Sparx_Sharpener3_Compatbaility_690x465_crop_center.jpg?v=1691067056 690w, //sparxhockey.com/cdn/shop/files/Sparx_Sharpener3_Compatbaility_1340x904_crop_center.jpg?v=1691067056 1340w, //sparxhockey.com/cdn/shop/files/Sparx_Sharpener3_Compatbaility_3198x2159_crop_center.jpg?v=1691067056 3198w, " alt="" style="object-position: 50.0% 50.0%;" /> 3084<noscript> 3085<img width="3198" height="2159" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sparx_Sharpener3_Compatbaility_690x465_crop_center.jpg?v=1691067056" srcset="//sparxhockey.com/cdn/shop/files/Sparx_Sharpener3_Compatbaility_690x465_crop_center.jpg?v=1691067056 690w, //sparxhockey.com/cdn/shop/files/Sparx_Sharpener3_Compatbaility_1340x904_crop_center.jpg?v=1691067056 1340w, //sparxhockey.com/cdn/shop/files/Sparx_Sharpener3_Compatbaility_3198x2159_crop_center.jpg?v=1691067056 3198w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 3086</noscript> 3087</div> 3088 </div> 3089 <div class="image-with-text__content image-with-text__inner"> 3090 <div class="image-with-text__content--inner"><h3 3091 class="h2 fw-black" 3092 3093 > 3094 FULLY COMPATIBLE WITH EVERY SKATE BRAND 3095 </h3><div 3096 class="rte " 3097 3098 > 3099 <p>At Sparx, our goal is always a perfect sharpening - regardless of skate brand. Our team painstakingly tests every skate and steel available on the market to ensure we always deliver on our promise of precision and accuracy. Sharpen with confidence knowing the Sparx Sharpener is fully compatible with every skate brand and virtually every blade every created. </p> 3100 </div> 3101 <a 3102 class="button " 3103 href="/collections/sharpeners" 3104 role="button" 3105 title="Shop Now" 3106 3107 ><span>Shop Now</span></a 3108 > 3109 3110 </div> 3111 </div> 3112 </div> 3113 </div> 3114</div> 3115 3116 3117<style> #shopify-section-template--14453892513891__5d726e65-3f77-4ae9-bf16-4f5467a07063 h3 {color: #f0383a;} </style></div><div id="shopify-section-template--14453892513891__704c0b74-39eb-4f96-99e9-c9b93ee4b53d" class="shopify-section section-promotional-banner"><link href="//sparxhockey.com/cdn/shop/t/283/assets/promotional-banner.css?v=169448100103032677461682107635" rel="stylesheet" type="text/css" media="all" /><div class="row full-width-row-full"> 3118 <div class="small-12 columns"> 3119 <div 3120 class="promotional-banner layout--split text_first frame-border--false section-spacing section-spacing--disable-top section-spacing--disable-bottom" 3121 style="--color-bg: #2a2a2b; --color-text: #ffffff; --overlay-color-rgb: 0, 0, 0; --overlay-opacity: 0.0; --bg-body: #2a2a2b" 3122 > 3123 <div class="promotional-banner--content text-center"> 3124 <div class="promotional-banner--content-inner"><div 3125 class="rte " 3126 3127 > 3128 <h5>WE WROTE THE BOOK ON SKATE SHARPENING</h5> 3129 </div><h3 3130 class="h1-xlarge " 3131 3132 > 3133 LITERALLY. 3134 </h3><div 3135 class="rte " 3136 3137 > 3138 <p>Enter your email below for a FREE download of The Book on Skate Sharpening.</p> 3139 </div> 3140 <a 3141 class="button " 3142 href="/pages/ebook-signup" 3143 role="button" 3144 title="get your ebook today" 3145 3146 ><span>get your ebook today</span></a 3147 > 3148 3149 </div> 3150 </div> 3151 <div class="promotional-banner--image"> 3152 <div 3153 class="promotional-banner--image-media aspect-ratio aspect-ratio--adapt mobile-aspect-ratio--false" 3154 style="--ratio-percent: 62.33333333333334%; --ratio-percent--mobile: Liquid error (sections/promotional-banner line 84): divided by 0%" 3155 > 3156<img class="lazyload " width="1800" height="1122" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sparx_Homepage_BookOfSharpening_637c0050-54b0-4cc4-a501-602bc3f5e858_20x32_crop_center.png?v=1690462799" data-srcset="//sparxhockey.com/cdn/shop/files/Sparx_Homepage_BookOfSharpening_637c0050-54b0-4cc4-a501-602bc3f5e858_375x233_crop_center.png?v=1690462799 375w, //sparxhockey.com/cdn/shop/files/Sparx_Homepage_BookOfSharpening_637c0050-54b0-4cc4-a501-602bc3f5e858_1122x1800_crop_center.png?v=1690462799 1122w, " alt="" style="object-position: 50.0% 50.0%;" /> 3157<noscript> 3158<img width="1800" height="1122" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sparx_Homepage_BookOfSharpening_637c0050-54b0-4cc4-a501-602bc3f5e858_375x233_crop_center.png?v=1690462799" srcset="//sparxhockey.com/cdn/shop/files/Sparx_Homepage_BookOfSharpening_637c0050-54b0-4cc4-a501-602bc3f5e858_375x233_crop_center.png?v=1690462799 375w, //sparxhockey.com/cdn/shop/files/Sparx_Homepage_BookOfSharpening_637c0050-54b0-4cc4-a501-602bc3f5e858_1122x1800_crop_center.png?v=1690462799 1122w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 3159</noscript> 3160</div> 3161 </div> 3162 </div> 3163 </div> 3164</div> 3165 3166 3167<style> #shopify-section-template--14453892513891__704c0b74-39eb-4f96-99e9-c9b93ee4b53d h5 {color: white;} </style></div><div id="shopify-section-template--14453892513891__3554815e-0a33-42ab-be7c-d82dad056a20" class="shopify-section collection-list-section"><div class="row"> 3168 <div class="small-12 columns"> 3169 <div 3170 class="list-collections section-spacing" 3171 style="--overlay-color-rgb: 0,0,0; --overlay-opacity: 0.0; --var-collection-list-columns:4" 3172 > 3173 3174 <div class="collection-grid collection-grid__grid swipe-on-mobile mobile-columns--1"> 3175 3176 3177 <div class="small-12 "> 3178 <div class="collection-card style1"> 3179 <div class="collection-card__image media-aspect-square" style="--var-media-aspect-ratio: 100%"> 3180 <a href="/collections/accessories" class="collection-card__link" title="Accessories"> 3181 3182 3183 3184<img class="lazyload " width="1843" height="1843" data-sizes="auto" src="//sparxhockey.com/cdn/shop/collections/deburr_social_20x20_crop_center.jpg?v=1690234271" data-srcset="//sparxhockey.com/cdn/shop/collections/deburr_social_320x320_crop_center.jpg?v=1690234271 320w, //sparxhockey.com/cdn/shop/collections/deburr_social_640x640_crop_center.jpg?v=1690234271 640w, //sparxhockey.com/cdn/shop/collections/deburr_social_960x960_crop_center.jpg?v=1690234271 960w, //sparxhockey.com/cdn/shop/collections/deburr_social_1280x1280_crop_center.jpg?v=1690234271 1280w, " alt="Accessories" /> 3185<noscript> 3186<img width="1843" height="1843" sizes="auto" src="//sparxhockey.com/cdn/shop/collections/deburr_social_320x320_crop_center.jpg?v=1690234271" srcset="//sparxhockey.com/cdn/shop/collections/deburr_social_320x320_crop_center.jpg?v=1690234271 320w, //sparxhockey.com/cdn/shop/collections/deburr_social_640x640_crop_center.jpg?v=1690234271 640w, //sparxhockey.com/cdn/shop/collections/deburr_social_960x960_crop_center.jpg?v=1690234271 960w, //sparxhockey.com/cdn/shop/collections/deburr_social_1280x1280_crop_center.jpg?v=1690234271 1280w, " alt="Accessories" loading="lazy" /> 3187</noscript> 3188 3189 3190 </a> 3191 </div> 3192 <div class="collection-card__content"> 3193 <a href="/collections/accessories" class="collection-card__link text-button" title="Accessories">Accessories </a> 3194 </div> 3195 </div> 3196</div> 3197 3198 3199 <div class="small-12 "> 3200 <div class="collection-card style1"> 3201 <div class="collection-card__image media-aspect-square" style="--var-media-aspect-ratio: 100%"> 3202 <a href="/collections/sparx-gear" class="collection-card__link" title="Sparx Gear"> 3203 3204 3205 3206<img class="lazyload " width="1275" height="1650" data-sizes="auto" src="//sparxhockey.com/cdn/shop/collections/Sparx_Shirt_Detail_20x20_crop_center.png?v=1690475659" data-srcset="//sparxhockey.com/cdn/shop/collections/Sparx_Shirt_Detail_320x320_crop_center.png?v=1690475659 320w, //sparxhockey.com/cdn/shop/collections/Sparx_Shirt_Detail_640x640_crop_center.png?v=1690475659
3206640w, //sparxhockey.com/cdn/shop/collections/Sparx_Shirt_Detail_960x960_crop_center.png?v=1690475659 960w, //sparxhockey.com/cdn/shop/collections/Sparx_Shirt_Detail_1280x1280_crop_center.png?v=1690475659 1280w, " alt="Sparx Gear" /> 3207<noscript> 3208<img width="1275" height="1650" sizes="auto" src="//sparxhockey.com/cdn/shop/collections/Sparx_Shirt_Detail_320x320_crop_center.png?v=1690475659" srcset="//sparxhockey.com/cdn/shop/collections/Sparx_Shirt_Detail_320x320_crop_center.png?v=1690475659 320w, //sparxhockey.com/cdn/shop/collections/Sparx_Shirt_Detail_640x640_crop_center.png?v=1690475659 640w, //sparxhockey.com/cdn/shop/collections/Sparx_Shirt_Detail_960x960_crop_center.png?v=1690475659 960w, //sparxhockey.com/cdn/shop/collections/Sparx_Shirt_Detail_1280x1280_crop_center.png?v=1690475659 1280w, " alt="Sparx Gear" loading="lazy" /> 3209</noscript> 3210 3211 3212 </a> 3213 </div> 3214 <div class="collection-card__content"> 3215 <a href="/collections/sparx-gear" class="collection-card__link text-button" title="Sparx Gear">Sparx Gear </a> 3216 </div> 3217 </div> 3218</div> 3219 3220 3221 <div class="small-12 "> 3222 <div class="collection-card style1"> 3223 <div class="collection-card__image media-aspect-square" style="--var-media-aspect-ratio: 100%"> 3224 <a href="/collections/bundles" class="collection-card__link" title="Bundles"> 3225 3226 3227 3228<img class="lazyload " width="2667" height="4000" data-sizes="auto" src="//sparxhockey.com/cdn/shop/collections/Sparx_Collections_Bundle_20x20_crop_center.jpg?v=1688655428" data-srcset="//sparxhockey.com/cdn/shop/collections/Sparx_Collections_Bundle_320x320_crop_center.jpg?v=1688655428 320w, //sparxhockey.com/cdn/shop/collections/Sparx_Collections_Bundle_640x640_crop_center.jpg?v=1688655428 640w, //sparxhockey.com/cdn/shop/collections/Sparx_Collections_Bundle_960x960_crop_center.jpg?v=1688655428 960w, //sparxhockey.com/cdn/shop/collections/Sparx_Collections_Bundle_1280x1280_crop_center.jpg?v=1688655428 1280w, " alt="Bundles" /> 3229<noscript> 3230<img width="2667" height="4000" sizes="auto" src="//sparxhockey.com/cdn/shop/collections/Sparx_Collections_Bundle_320x320_crop_center.jpg?v=1688655428" srcset="//sparxhockey.com/cdn/shop/collections/Sparx_Collections_Bundle_320x320_crop_center.jpg?v=1688655428 320w, //sparxhockey.com/cdn/shop/collections/Sparx_Collections_Bundle_640x640_crop_center.jpg?v=1688655428 640w, //sparxhockey.com/cdn/shop/collections/Sparx_Collections_Bundle_960x960_crop_center.jpg?v=1688655428 960w, //sparxhockey.com/cdn/shop/collections/Sparx_Collections_Bundle_1280x1280_crop_center.jpg?v=1688655428 1280w, " alt="Bundles" loading="lazy" /> 3231</noscript> 3232 3233 3234 </a> 3235 </div> 3236 <div class="collection-card__content"> 3237 <a href="/collections/bundles" class="collection-card__link text-button" title="Bundles">Bundles </a> 3238 </div> 3239 </div> 3240</div> 3241 3242 3243 <div class="small-12 "> 3244 <div class="collection-card style1"> 3245 <div class="collection-card__image media-aspect-square" style="--var-media-aspect-ratio: 100%"> 3246 <a href="/collections/gift-cards" class="collection-card__link" title="Gift Cards"> 3247 3248 3249 3250<img class="lazyload " width="600" height="863" data-sizes="auto" src="//sparxhockey.com/cdn/shop/collections/gift_card_main_3e4f156a-c0a3-4469-825a-28aeb618559d_20x20_crop_center.jpg?v=1688655022" data-srcset="//sparxhockey.com/cdn/shop/collections/gift_card_main_3e4f156a-c0a3-4469-825a-28aeb618559d_320x320_crop_center.jpg?v=1688655022 320w, //sparxhockey.com/cdn/shop/collections/gift_card_main_3e4f156a-c0a3-4469-825a-28aeb618559d_640x640_crop_center.jpg?v=1688655022 640w, //sparxhockey.com/cdn/shop/collections/gift_card_main_3e4f156a-c0a3-4469-825a-28aeb618559d_960x960_crop_center.jpg?v=1688655022 960w, //sparxhockey.com/cdn/shop/collections/gift_card_main_3e4f156a-c0a3-4469-825a-28aeb618559d_1280x1280_crop_center.jpg?v=1688655022 1280w, " alt="Gift Cards" /> 3251<noscript> 3252<img width="600" height="863" sizes="auto" src="//sparxhockey.com/cdn/shop/collections/gift_card_main_3e4f156a-c0a3-4469-825a-28aeb618559d_320x320_crop_center.jpg?v=1688655022" srcset="//sparxhockey.com/cdn/shop/collections/gift_card_main_3e4f156a-c0a3-4469-825a-28aeb618559d_320x320_crop_center.jpg?v=1688655022 320w, //sparxhockey.com/cdn/shop/collections/gift_card_main_3e4f156a-c0a3-4469-825a-28aeb618559d_640x640_crop_center.jpg?v=1688655022 640w, //sparxhockey.com/cdn/shop/collections/gift_card_main_3e4f156a-c0a3-4469-825a-28aeb618559d_960x960_crop_center.jpg?v=1688655022 960w, //sparxhockey.com/cdn/shop/collections/gift_card_main_3e4f156a-c0a3-4469-825a-28aeb618559d_1280x1280_crop_center.jpg?v=1688655022 1280w, " alt="Gift Cards" loading="lazy" /> 3253</noscript> 3254 3255 3256 </a> 3257 </div> 3258 <div class="collection-card__content"> 3259 <a href="/collections/gift-cards" class="collection-card__link text-button" title="Gift Cards">Gift Cards </a> 3260 </div> 3261 </div> 3262</div> 3263 3264 3265 3266</div></div> 3267 </div> 3268</div><link href="//sparxhockey.com/cdn/shop/t/283/assets/list-collections.css?v=108155047394426719771682107635" rel="stylesheet" type="text/css" media="all" /> 3269</div><div id="shopify-section-template--14453892513891__2d0ab374-02bf-4080-84b5-92105a43cd15" class="shopify-section section-image-with-text-overlay"><link href="//sparxhockey.com/cdn/shop/t/283/assets/image-with-text-overlay.css?v=181259895911320708751689712251" rel="stylesheet" type="text/css" media="all" /><div class="row full-width-row-full"> 3270 <div class="small-12 columns"> 3271 <image-with-text-overlay 3272 class="image-with-text-overlay text-center mobile-height-500 desktop-height-650 section-spacing section-spacing--disable-top section-spacing--disable-bottom" 3273 style="--overlay-opacity: 0.19" 3274 > 3275 <div class="image-with-text-overlay--bg parallax--false"> 3276 3277 3278<img class="lazyload " width="1667" height="1667" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Behind_The_X_Video_Placeholders3_20x20_crop_center.jpg?v=1690304564" data-srcset="//sparxhockey.com/cdn/shop/files/Behind_The_X_Video_Placeholders3_375x375_crop_center.jpg?v=1690304564 375w, //sparxhockey.com/cdn/shop/files/Behind_The_X_Video_Placeholders3_750x750_crop_center.jpg?v=1690304564 750w, //sparxhockey.com/cdn/shop/files/Behind_The_X_Video_Placeholders3_1200x1200_crop_center.jpg?v=1690304564 1200w, //sparxhockey.com/cdn/shop/files/Behind_The_X_Video_Placeholders3_1600x1600_crop_center.jpg?v=1690304564 1600w, //sparxhockey.com/cdn/shop/files/Behind_The_X_Video_Placeholders3_2000x2000_crop_center.jpg?v=1690304564 2000w, //sparxhockey.com/cdn/shop/files/Behind_The_X_Video_Placeholders3_1667x1667_crop_center.jpg?v=1690304564 1667w, " alt="" style="object-position: 50.0% 50.0%;" /> 3279<noscript> 3280<img width="1667" height="1667" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Behind_The_X_Video_Placeholders3_375x375_crop_center.jpg?v=1690304564" srcset="//sparxhockey.com/cdn/shop/files/Behind_The_X_Video_Placeholders3_375x375_crop_center.jpg?v=1690304564 375w, //sparxhockey.com/cdn/shop/files/Behind_The_X_Video_Placeholders3_750x750_crop_center.jpg?v=1690304564 750w, //sparxhockey.com/cdn/shop/files/Behind_The_X_Video_Placeholders3_1200x1200_crop_center.jpg?v=1690304564 1200w, //sparxhockey.com/cdn/shop/files/Behind_The_X_Video_Placeholders3_1600x1600_crop_center.jpg?v=1690304564 1600w, //sparxhockey.com/cdn/shop/files/Behind_The_X_Video_Placeholders3_2000x2000_crop_center.jpg?v=1690304564 2000w, //sparxhockey.com/cdn/shop/files/Behind_The_X_Video_Placeholders3_1667x1667_crop_center.jpg?v=1690304564 1667w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 3281</noscript> 3282 3283</div> 3284 3285 <div class="image-with-text-overlay--content content-bottom-center"> 3286 <div class="image-with-text-overlay--content-inner content-width-medium"> 3287 3288<p 3289 class="subheading fw-medium" 3290 3291 > 3292 AUTOMATED SKATE SHARPENING 3293 </p> 3294<h3 3295 class="h1-large fw-bold heading-h3" data-block-id="template--14453892513891__2d0ab374-02bf-4080-84b5-92105a43cd15-heading-1" 3296 3297 > 3298 IT'S ALL WE DO 3299 </h3> 3300<div 3301 class="rte description-size--small " 3302 3303 > 3304 <p>For more than a decade, Sparx Hockey has been the only company in the world solely focused on creating the most advanced, accurate and easy-to-use automated skate sharpeners for players of all levels. Learn more about our commitment to innovation and improving player performance </p> 3305 </div> 3306 3307 <a 3308 class="button " 3309 href="/pages/why-sparx" 3310 role="button" 3311 title="Learn More" 3312 3313 ><span>Learn More</span></a 3314 > 3315 3316 3317 </div> 3318 </div> 3319 </image-with-text-overlay> 3320 </div> 3321</div> 3322 3323 3324<style> 3325 @media only screen and (max-width: 749px) { 3326 .heading-h3.h2 { 3327 font-size: 24px; 3328 line-height: 24px; 3329 } 3330 .heading-h3.h1 { 3331 font-size: 36px; 3332 line-height: 36px; 3333 } 3334 .heading-h3.h1-large { 3335 font-size: 40px; 3336 line-height: 40px; 3337 } 3338 .heading-h3.h1-xlarge { 3339 font-size: 46px; 3340 line-height: 46px; 3341 } 3342 } 3343</style> 3344
3345<script 3346 src="//sparxhockey.com/cdn/shop/t/283/assets/image-with-text-overlay.js?v=59010736399981874961682107634" 3347 defer="defer" 3348></script>
3348 3349 3350</div> 3351 </div> 3352 <!-- BEGIN sections: footer-group --> 3353<div id="shopify-section-sections--14453891956835__c7523804-f850-45c0-9fa4-21f02108da50" class="shopify-section shopify-section-group-footer-group"><div 3354 class="email-signup section-spacing-padding" 3355 style="--bg-body:#2a2a2b; --color-bg:#2a2a2b; --color-text: #ffffff; --color-body-rgb: 255,255,255" 3356> 3357 <div class="email-signup--inner"> 3358 <div class="section-header section-header-left--false"> 3359 <div class="section-header--content"><h2 class="h3 fw-book">SUBSCRIBE TO OUR NEWSLETTER</h2><div class="rte fw-book"> 3360 <h1>KEEP UP WITH SPARX HOCKEY</h1> 3361 </div></div></div> 3362 3363 <div class="custom-newsletter-form signup-container"> 3364 <form method="post" action="/contact#contact_form" id="contact_form" accept-charset="UTF-8" class="signup-form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="â" /> 3365 <fieldset> 3366 <input name="contact[tags]" type="hidden" value="newsletter" /> 3367 <div class="form-notification error" id="Newsletter-error--sections--14453891956835__c7523804-f850-45c0-9fa4-21f02108da50"> 3368 3369 </div> 3370 <div class="form-notification success" id="Newsletter-success--sections--14453891956835__c7523804-f850-45c0-9fa4-21f02108da50"> 3371 3372 </div> 3373 <div id="form-element--sections--14453891956835__c7523804-f850-45c0-9fa4-21f02108da50"> 3374 <div class="field"> 3375 <input 3376 placeholder="Email" 3377 type="email" 3378 id="NewsletterForm--sections--14453891956835__c7523804-f850-45c0-9fa4-21f02108da50" 3379 name="contact[email]" 3380 autocorrect="off" 3381 autocapitalize="off" 3382 autocomplete="email" 3383 value="" 3384 pattern="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$" 3385 title="[email protected]" 3386 3387 required 3388 /> 3389 <label class="field__label" for="NewsletterForm--sections--14453891956835__c7523804-f850-45c0-9fa4-21f02108da50"> 3390 Email 3391 </label> 3392 </div> 3393 <button class="submit" type="submit" aria-label="Enter your email">
3394<svg width="15" height="11" viewBox="0 0 15 11" fill="none" xmlns="http://www.w3.org/2000/svg"> 3395<path d="M0.799805 5.5H12.7998" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 3396<path d="M9.49976 1L13.9998 5.5L9.49976 10" stroke="var(--color-accent)" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/> 3397</svg> 3398</button> 3399 </div> 3400 </fieldset> 3401 </form> 3402</div> 3403 3404
3405<script> 3406 3407 function sendNewsMail() { 3408 const emailInput = document.getElementById('NewsletterForm--sections--14453891956835__c7523804-f850-45c0-9fa4-21f02108da50'); 3409 const email = emailInput.value.trim(); 3410 const errorContainer = document.getElementById('Newsletter-error--sections--14453891956835__c7523804-f850-45c0-9fa4-21f02108da50'); 3411 const successContainer = document.getElementById('Newsletter-success--sections--14453891956835__c7523804-f850-45c0-9fa4-21f02108da50'); 3412 const formE = document.getElementById('form-element--sections--14453891956835__c7523804-f850-45c0-9fa4-21f02108da50') 3413 var customErrorMessage = "Please complete the required field."; 3414 var thanksMessage = "Thanks for signing up!"; 3415 3416 3417 3418 if (errorContainer === null) { 3419 console.error("Error: Element with ID 'Newsletter-error--sections--14453891956835__c7523804-f850-45c0-9fa4-21f02108da50' not found in the DOM."); 3420 return; 3421 } 3422 3423 errorContainer.style.display = 'none'; 3424 3425 if (email === '') { 3426 emailInput.classList.add('input-error'); 3427 errorContainer.textContent = customErrorMessage; 3428 errorContainer.style.display = 'block'; 3429 } else if (isEmail(email)) { 3430 emailInput.classList.remove('input-error'); 3431 var settings = { 3432 method: "POST", 3433 headers: { 3434 "Content-Type": "application/x-www-form-urlencoded", 3435 "Cache-Control": "no-cache" 3436 }, 3437 body: "g=XUChua" + 3438 "&$fields=$first_name,$last_name,$source" + 3439 "&email=" + encodeURIComponent(email) + 3440 "&$first_name=" + 3441 "&$last_name=" + 3442 "&$source=Custom Form" 3443 }; 3444 3445 fetch("https://manage.kmail-lists.com/ajax/subscriptions/subscribe", settings) 3446 .then(response => response.json()) 3447 .then(data => { 3448 if (data.errors.length === 0) { 3449 successContainer.innerHTML = '<p>'+thanksMessage+'</p>'; 3450 formE.style.display = 'none'; 3451 } else { 3452 emailInput.classList.add('input-error'); 3453 errorContainer.innerHTML = data.errors.join("<br>"); 3454 errorContainer.style.display = 'block'; 3455 } 3456 }) 3457 .catch(error => { 3458 console.error("Error:", error); 3459 }); 3460 } else { 3461 emailInput.classList.add('input-error'); 3462 errorContainer.textContent = customErrorMessage; 3463 errorContainer.style.display = 'block'; 3464 } 3465 } 3466 3467 function isEmail(email) { 3468 var regex = /^([a-zA-Z0-9_.+-])+@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; 3469 return regex.test(email); 3470 } 3471 3472 document.querySelector('.custom-newsletter-form button[type="submit"]').addEventListener('click', function(e) { 3473 e.preventDefault(); 3474 sendNewsMail(); 3475 }); 3476 3477 document.getElementById('NewsletterForm--sections--14453891956835__c7523804-f850-45c0-9fa4-21f02108da50').addEventListener('keydown', function(e) { 3478 if (e.key === "Enter") { 3479 e.preventDefault(); 3480 sendNewsMail(); 3481 } 3482 }); 3483 3484</script>
3484 3485 3486 3487 </div> 3488</div><link href="//sparxhockey.com/cdn/shop/t/283/assets/email-signup.css?v=147485442693002470281687989336" rel="stylesheet" type="text/css" media="all" /> 3489<style> #shopify-section-sections--14453891956835__c7523804-f850-45c0-9fa4-21f02108da50 H1 {color: WHITE;} #shopify-section-sections--14453891956835__c7523804-f850-45c0-9fa4-21f02108da50 h2 {font-size: 20px;} </style></div><div id="shopify-section-sections--14453891956835__footer" class="shopify-section shopify-section-group-footer-group"> 3490 3491<link rel="stylesheet" href="//sparxhockey.com/cdn/shop/t/283/assets/footer.css?v=78532721397503207861739386820" media="print" onload="this.media='all'"> 3492<noscript><link href="//sparxhockey.com/cdn/shop/t/283/assets/footer.css?v=78532721397503207861739386820" rel="stylesheet" type="text/css" media="all" /></noscript> 3493 3494<footer class="footer" id="footer"> 3495 <div class="row full-width-row"> 3496<div class="small-12 medium-4 large-2 columns" > 3497 <div class="widget widget--text"> 3498 3499 3500<img class="lazyload retina_size " width="382" height="48" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/test-logo-white_20x2_crop_center.png?v=1678998585" data-srcset="//sparxhockey.com/cdn/shop/files/test-logo-white_764x97_crop_center.png?v=1678998585 764w, " alt="" style="object-position: 50.0% 50.0%;" /> 3501<noscript> 3502<img width="764" height="97" sizes="auto" src="//sparxhockey.com/cdn/shop/files/test-logo-white_764x97_crop_center.png?v=1678998585" srcset="//sparxhockey.com/cdn/shop/files/test-logo-white_764x97_crop_center.png?v=1678998585 764w, " alt="" loading="lazy" style="object-position: 50.0% 50.0%;" /> 3503</noscript> 3504<ul class="social-links"> 3505 3506 <li><a href="https://www.facebook.com/sparxhockey" class="social facebook" target="_blank" rel="noreferrer" title="Facebook"> 3507<svg aria-hidden="true" aria-labelledby="facebook-icon" focusable="false" role="presentation" class="icon icon-facebook" viewBox="0 0 18 18"> 3508 <title id="facebook-icon">Facebook</title> 3509 <path fill="var(--color-accent)" d="M16.42.61c.27 0 .5.1.69.28.19.2.28.42.28.7v15.44c0 .27-.1.5-.28.69a.94.94 0 01-.7.28h-4.39v-6.7h2.25l.31-2.65h-2.56v-1.7c0-.4.1-.72.28-.93.18-.2.5-.32 1-.32h1.37V3.35c-.6-.06-1.27-.1-2.01-.1-1.01 0-1.83.3-2.45.9-.62.6-.93 1.44-.93 2.53v1.97H7.04v2.65h2.24V18H.98c-.28 0-.5-.1-.7-.28a.94.94 0 01-.28-.7V1.59c0-.27.1-.5.28-.69a.94.94 0 01.7-.28h15.44z"> 3510</svg> 3511 <span>Facebook</span></a></li> 3512 3513 3514 <li><a href="https://twitter.com/sparxhockey" class="social twitter" target="_blank" rel="noreferrer" title="Twitter"> 3515<svg aria-hidden="true" aria-labelledby="twitter-icon" focusable="false" role="presentation" class="icon icon-twitter" viewBox="0 0 18 15"> 3516 <title id="twitter-icon">Twitter</title> 3517 <path fill="var(--color-accent)" d="M17.64 2.6a7.33 7.33 0 01-1.75 1.82c0 .05 0 .13.02.23l.02.23a9.97 9.97 0 01-1.69 5.54c-.57.85-1.24 1.62-2.02 2.28a9.09 9.09 0 01-2.82 1.6 10.23 10.23 0 01-8.9-.98c.34.02.61.04.83.04 1.64 0 3.1-.5 4.38-1.5a3.6 3.6 0 01-3.3-2.45A2.91 2.91 0 004 9.35a3.47 3.47 0 01-2.02-1.21 3.37 3.37 0 01-.8-2.22v-.03c.46.24.98.37 1.58.4a3.45 3.45 0 01-1.54-2.9c0-.61.14-1.2.45-1.79a9.68 9.68 0 003.2 2.6 10 10 0 004.08 1.07 3 3 0 01-.13-.8c0-.97.34-1.8 1.03-2.48A3.45 3.45 0 0112.4.96a3.49 3.49 0 012.54 1.1c.8-.15 1.54-.44 2.23-.85a3.4 3.4 0 01-1.54 1.94c.74-.1 1.4-.28 2.01-.54z"> 3518</svg> 3519 <span>Twitter</span></a></li> 3520 3521 3522 <li><a href="https://www.instagram.com/sparxhockey/" class="social instagram" target="_blank" rel="noreferrer" title="Instagram"> 3523<svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-instagram" viewBox="0 0 18 18"> 3524 <path fill="var(--color-accent)" d="M8.77 1.58c2.34 0 2.62.01 3.54.05.86.04 1.32.18 1.63.3.41.17.7.35 1.01.66.3.3.5.6.65 1 .12.32.27.78.3 1.64.05.92.06 1.2.06 3.54s-.01 2.62-.05 3.54a4.79 4.79 0 01-.3 1.63c-.17.41-.35.7-.66 1.01-.3.3-.6.5-1.01.66-.31.12-.77.26-1.63.3-.92.04-1.2.05-3.54.05s-2.62 0-3.55-.05a4.79 4.79 0 01-1.62-.3c-.42-.16-.7-.35-1.01-.66-.31-.3-.5-.6-.66-1a4.87 4.87 0 01-.3-1.64c-.04-.92-.05-1.2-.05-3.54s0-2.62.05-3.54c.04-.86.18-1.32.3-1.63.16-.41.35-.7.66-1.01.3-.3.6-.5 1-.65.32-.12.78-.27 1.63-.3.93-.05 1.2-.06 3.55-.06zm0-1.58C6.39 0 6.09.01 5.15.05c-.93.04-1.57.2-2.13.4-.57.23-1.06.54-1.55 1.02C1 1.96.7 2.45.46 3.02c-.22.56-.37 1.2-.4 2.13C0 6.1 0 6.4 0 8.77s.01 2.68.05 3.61c.04.94.2 1.57.4 2.13.23.58.54 1.07 1.02 1.56.49.48.98.78 1.55 1.01.56.22 1.2.37 2.13.4.94.05 1.24.06 3.62.06 2.39 0 2.68-.01 3.62-.05.93-.04 1.57-.2 2.13-.41a4.27 4.27 0 001.55-1.01c.49-.49.79-.98 1.01-1.56.22-.55.37-1.19.41-2.13.04-.93.05-1.23.05-3.61 0-2.39 0-2.68-.05-3.62a6.47 6.47 0 00-.4-2.13 4.27 4.27 0 00-1.02-1.55A4.35 4.35 0 0014.52.46a6.43 6.43 0 00-2.13-.41A69 69 0 008.77 0z"/> 3525 <path fill="var(--color-accent)" d="M8.8 4a4.5 4.5 0 100 9 4.5 4.5 0 000-9zm0 7.43a2.92 2.92 0 110-5.85 2.92 2.92 0 010 5.85zM13.43 5a1.05 1.05 0 100-2.1 1.05 1.05 0 000 2.1z"> 3526</svg> 3527 <span>Instagram</span></a></li> 3528 3529 3530 <li><a href="https://www.youtube.com/channel/UCgp7t_RvlG2T-vg8SIpmtsw" class="social youtube" target="_blank" rel="noreferrer" title="YouTube"> 3531<svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-youtube" viewBox="0 0 100 70"> 3532 <path d="M98 11c2 7.7 2 24 2 24s0 16.3-2 24a12.5 12.5 0 01-9 9c-7.7 2-39 2-39 2s-31.3 0-39-2a12.5 12.5 0 01-9-9c-2-7.7-2-24-2-24s0-16.3 2-24c1.2-4.4 4.6-7.8 9-9 7.7-2 39-2 39-2s31.3 0 39 2c4.4 1.2 7.8 4.6 9 9zM40 50l26-15-26-15v30z" fill="var(--color-accent)"> 3533</svg> 3534 <span>YouTube</span></a></li> 3535 3536 3537 3538 3539 3540 <li><a href="https://www.linkedin.com/company/sparx-hockey/" class="social linkedin" target="_blank" rel="noreferrer" title="Linkedin"> 3541<svg role="presentation" focusable="false" width="27" height="27" class="icon icon-linkedin" viewB
3541ox="0 0 24 24"> 3542 <path fill-rule="evenodd" clip-rule="evenodd" d="M7.349 5.478a1.875 1.875 0 1 0-3.749 0 1.875 1.875 0 1 0 3.749 0ZM7.092 19.2H3.857V8.78h3.235V19.2ZM12.22 8.78H9.121V19.2h3.228v-5.154c0-1.36.257-2.676 1.94-2.676 1.658 0 1.68 1.554 1.68 2.763V19.2H19.2v-5.715c0-2.806-.605-4.963-3.877-4.963-1.573 0-2.629.863-3.06 1.683h-.044V8.78Z" fill="var(--color-accent)"></path> 3543</svg> 3544 <span>Linkedin</span></a></li> 3545 3546 3547</ul> 3548</div> 3549 </div> 3550 3551 3552<div class="small-12 medium-4 large-2 columns widget--menu-column" > 3553 <div class="widget widget--menu"> 3554 <button class="thb-widget-title collapsible" tabindex="0">SHOP <span></span></button><ul class="thb-widget-menu"> 3555 3556 3557 3558 <li class=""> 3559 <a href="/collections/sharpeners" title="Sharpeners"> 3560 Sharpeners 3561 </a> 3562 3563 3564 </li> 3565 3566 3567 3568 <li class=""> 3569 <a href="/collections/grinding-rings" title="Grinding Rings"> 3570 Grinding Rings 3571 </a> 3572 3573 3574 </li> 3575 3576 3577 3578 <li class=""> 3579 <a href="/collections/bundles" title="Bundles"> 3580 Bundles 3581 </a> 3582 3583 3584 </li> 3585 3586 3587 3588 <li class=""> 3589 <a href="/products/sparx-beam" title="Sparx BEAMâ¢"> 3590 Sparx BEAM⢠3591 </a> 3592 3593 3594 </li> 3595 3596 3597 3598 <li class=""> 3599 <a href="/collections/accessories" title="Accessories"> 3600 Accessories 3601 </a> 3602 3603 3604 </li> 3605 3606 3607 3608 <li class=""> 3609 <a href="/collections/sparx-gear" title="Apparel"> 3610 Apparel 3611 </a> 3612 3613 3614 </li> 3615 3616 3617 3618 <li class=""> 3619 <a href="/collections/replacement-parts" title="Replacement Parts"> 3620 Replacement Parts 3621 </a> 3622 3623 3624 </li> 3625 3626 </ul></div> 3627 </div> 3628<div class="small-12 medium-4 large-2 columns widget--menu-column" > 3629 <div class="widget widget--menu"> 3630 <button class="thb-widget-title collapsible" tabindex="0">ABOUT <span></span></button><ul class="thb-widget-menu"> 3631 3632 3633 3634 <li class=""> 3635 <a href="/pages/our-company" title="Company"> 3636 Company 3637 </a> 3638 3639 3640 </li> 3641 3642 3643 3644 <li class=""> 3645 <a href="/blogs/feed" title="Blog"> 3646 Blog 3647 </a> 3648 3649 3650 </li> 3651 3652 3653 3654 <li class=""> 3655 <a href="/pages/wall-of-thanks" title="Wall of Thanks"> 3656 Wall of Thanks 3657 </a> 3658 3659 3660 </li> 3661 3662 3663 3664 <li class=""> 3665 <a href="/pages/careers" title="Careers"> 3666 Careers 3667 </a> 3668 3669 3670 </li> 3671 3672 3673 3674 <li class=""> 3675 <a href="/pages/financing-options" title="Financing Options"> 3676 Financing Options 3677 </a> 3678 3679 3680 </li> 3681 3682 </ul></div> 3683 </div> 3684<div class="small-12 medium-4 large-2 columns widget--menu-column" > 3685 <div class="widget widget--menu"> 3686 <button class="thb-widget-title collapsible" tabindex="0">EXPLORE <span></span></button><ul class="thb-widget-menu"> 3687 3688 3689 3690 <li class=""> 3691 <a href="/pages/why-sparx" title="Why Sparx"> 3692 Why Sparx 3693 </a> 3694 3695 3696 </li> 3697 3698 3699 3700 <li class=""> 3701 <a href="/pages/sharpener-learn-more" title="The Sharpener"> 3702 The Sharpener 3703 </a> 3704 3705 3706 </li> 3707 3708 3709 3710 <li class=""> 3711 <a href="/pages/grinding-rings-learn-more" title="The Rings"> 3712 The Rings 3713 </a> 3714 3715 3716 </li> 3717 3718 3719 3720 <li class=""> 3721 <a href="/pages/beam-learn-more" title="Sparx BEAMâ¢"> 3722 Sparx BEAM⢠3723 </a> 3724 3725 3726 </li> 3727 3728 3729 3730 <li class=""> 3731 <a href="/pages/3d-print-resources" title="3D PRINT CENTER"> 3732 3D PRINT CENTER 3733 </a> 3734 3735 3736 </li> 3737 3738 3739 3740 <li class=""> 3741 <a href="/pages/sparx-hockey-app" title="Sparx Hockey App"> 3742 Sparx Hockey App 3743 </a> 3744 3745 3746 </li> 3747 3748 3749 3750 <li class="">
3751 <a href="/pages/skate-sharpening-near-me" title="Find a Sharpener"> 3752 Find a Sharpener 3753 </a> 3754 3755 3756 </li> 3757 3758 3759 3760 <li class=""> 3761 <a href="/pages/payback-calculator" title="Payback Calculator"> 3762 Payback Calculator 3763 </a> 3764 3765 3766 </li> 3767 3768 </ul></div> 3769 </div> 3770<div class="small-12 medium-4 large-2 columns widget--menu-column" > 3771 <div class="widget widget--menu"> 3772 <button class="thb-widget-title collapsible" tabindex="0">SUPPORT <span></span></button><ul class="thb-widget-menu"> 3773 3774 3775 3776 <li class=""> 3777 <a href="/pages/help-center" title="Help Center"> 3778 Help Center 3779 </a> 3780 3781 3782 </li> 3783 3784 3785 3786 <li class=""> 3787 <a href="/pages/faq" title="FAQs"> 3788 FAQs 3789 </a> 3790 3791 3792 </li> 3793 3794 3795 3796 <li class=""> 3797 <a href="/pages/how-to-videos-for-sparx-sharpener-3" title="How-To Videos ES300"> 3798 How-To Videos ES300 3799 </a> 3800 3801 3802 </li> 3803 3804 3805 3806 <li class=""> 3807 <a href="/pages/how-to-videos" title="How-To Videos ES200"> 3808 How-To Videos ES200 3809 </a> 3810 3811 3812 </li> 3813 3814 3815 3816 <li class=""> 3817 <a href="/pages/warranty" title="Warranty/Manuals"> 3818 Warranty/Manuals 3819 </a> 3820 3821 3822 </li> 3823 3824 </ul></div> 3825 </div> 3826<div class="small-12 medium-4 large-2 columns widget--menu-column" > 3827 <div class="widget widget--menu"> 3828 <button class="thb-widget-title collapsible" tabindex="0">LEGAL <span></span></button><ul class="thb-widget-menu"> 3829 3830 3831 3832 <li class=""> 3833 <a href="/pages/terms-of-service" title="Terms of Service "> 3834 Terms of Service 3835 </a> 3836 3837 3838 </li> 3839 3840 3841 3842 <li class=""> 3843 <a href="/pages/privacy-policy" title="Privacy Policy"> 3844 Privacy Policy 3845 </a> 3846 3847 3848 </li> 3849 3850 3851 3852 <li class=""> 3853 <a href="/pages/shipping-returns" title="Shipping & Returns"> 3854 Shipping & Returns 3855 </a> 3856 3857 3858 </li> 3859 3860 3861 3862 <li class=""> 3863 <a href="/pages/patents" title="Patent Information"> 3864 Patent Information 3865 </a> 3866 3867 3868 </li> 3869 3870 3871 3872 <li class=""> 3873 <a href="/pages/product-registration" title="Product Registration"> 3874 Product Registration 3875 </a> 3876 3877 3878 </li> 3879 3880 3881 3882 <li class=""> 3883 <a href="/pages/privacy-data-request" title="Do Not Sell or Share My Information"> 3884 Do Not Sell or Share My Information 3885 </a> 3886 3887 3888 </li> 3889 3890 </ul></div> 3891 </div></div> 3892 <div class="sub-footer"> 3893 <div class="row full-width-row"> 3894 <div class="small-12 medium-8 columns"> 3895 3896 </div> 3897 <div class="small-12 medium-4 columns"></div> 3898 <div class="small-12 columns"> 3899 <p>© 2026 Sparx Hockey, All rights reserved. <a target="_blank" rel="nofollow" href="https://www.shopify.com?utm_campaign=poweredby&utm_medium=shopify&utm_source=onlinestore"> </a></p> 3900 </div> 3901 </div> 3902 </div> 3903</footer> 3904 3905 3906</div> 3907<!-- END sections: footer-group --> 3908
3908<script src="//sparxhockey.com/cdn/shop/t/283/assets/cart-drawer-addons.js?v=39029280538845870791775569258" type="text/javascript"></script>
3908 3909<div class="side-panel cart-drawer" id="Cart-Drawer" tabindex="-1"> 3910 <div class="side-panel-inner"> 3911 <div class="side-panel-header"> 3912 <div> 3913 <h4 class="body-font">Cart</h4> 3914 <side-panel-close class="side-panel-close"> 3915<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 3916<path d="M13 1L1 13M13 13L1 1" stroke="var(--color-body)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3917</svg> 3918</side-panel-close> 3919 </div> 3920 </div> 3921 <div class="side-panel-content"><div class="cart-drawer__empty-cart"> 3922 3923<svg width="82" height="82" viewBox="0 0 82 82" fill="none" xmlns="http://www.w3.org/2000/svg"> 3924<path d="M63.2133 82.0001C58.4983 82.0001 54.6765 78.1637 54.6765 73.4633C54.6765 68.7483 58.5129 64.9265 63.2133 64.9265C67.9137 64.9265 71.7501 68.7629 71.7501 73.4633C71.7501 78.1637 67.9137 82.0001 63.2133 82.0001ZM63.2133 68.3383C60.3872 68.3383 58.0883 70.6372 58.0883 73.4633C58.0883 76.2894 60.3872 78.5883 63.2133 78.5883C66.0394 78.5883 68.3383 76.2894 68.3383 73.4633C68.3383 70.6372 66.0394 68.3383 63.2133 68.3383Z" fill="var(--color-accent)"/> 3925<path d="M29.0368 82.0001C24.3218 82.0001 20.5 78.1637 20.5 73.4633C20.5 68.7483 24.3364 64.9265 29.0368 64.9265C33.7372 64.9265 37.5736 68.7629 37.5736 73.4633C37.5882 78.1637 33.7518 82.0001 29.0368 82.0001ZM29.0368 68.3383C26.2107 68.3383 23.9118 70.6372 23.9118 73.4633C23.9118 76.2894 26.2107 78.5883 29.0368 78.5883C31.8629 78.5883 34.1618 76.2894 34.1618 73.4633C34.1618 70.6372 31.8629 68.3383 29.0368 68.3383Z" fill="var(--color-accent)"/> 3926<path d="M70.0368 61.4999H30.6036C24.9221 61.4999 20.0021 57.4585 18.8746 51.8942L10.5575 10.2499H1.71321C0.761429 10.2499 0 9.48849 0 8.5367C0 7.59956 0.761429 6.82349 1.71321 6.82349H11.9632C12.7832 6.82349 13.4714 7.39456 13.6325 8.19991L22.2425 51.206C23.0332 55.1888 26.5621 58.0735 30.6182 58.0735H70.0514C70.9886 58.0735 71.7646 58.8349 71.7646 59.7867C71.75 60.7385 70.9886 61.4999 70.0368 61.4999Z" fill="var(--color-accent)"/> 3927<path d="M67.4304 47.8383H20.5001C19.5629 47.8383 18.7869 47.0768 18.7869 46.125C18.7869 45.1733 19.5483 44.4118 20.5001 44.4118H67.4304C70.0076 44.4118 72.204 42.479 72.5115 39.9165C72.6286 38.9793 73.5365 38.3204 74.4151 38.4376C75.3522 38.5547 76.0111 39.404 75.894 40.3411C75.3668 44.6168 71.7208 47.8383 67.4304 47.8383Z" fill="var(--color-accent)"/> 3928<path d="M39.2869 20.4999H15.3751C14.4379 20.4999 13.6619 19.7385 13.6619 18.7867C13.6619 17.8496 14.4233 17.0735 15.3751 17.0735H39.2869C40.224 17.0735 41.0001 17.8349 41.0001 18.7867C41.0001 19.7385 40.2386 20.4999 39.2869 20.4999Z" fill="var(--color-accent)"/> 3929<path d="M63.2133 37.5882C52.8608 37.5882 44.4265 29.1539 44.4265 18.8014C44.4265 8.44893 52.8462 0 63.2133 0C73.5658 0 82.0001 8.43429 82.0001 18.7868C82.0001 29.1393 73.5658 37.5882 63.2133 37.5882ZM63.2133 3.41179C54.7351 3.41179 47.8383 10.3086 47.8383 18.7868C47.8383 27.265 54.7351 34.1618 63.2133 34.1618C71.6915 34.1618 78.5883 27.265 78.5883 18.7868C78.5883 10.3086 71.6915 3.41179 63.2133 3.41179Z" fill="var(--color-accent)"/> 3930<path d="M70.0368 27.3382C69.5976 27.3382 69.1583 27.1771 68.8215 26.8404L55.1597 13.1786C54.4861 12.505 54.4861 11.4361 55.1597 10.7625C55.8333 10.0889 56.9022 10.0889 57.5758 10.7625L71.2376 24.4243C71.9111 25.0979 71.9111 26.1668 71.2376 26.8404C70.9154 27.1625 70.4761 27.3382 70.0368 27.3382Z" fill="var(--color-accent)"/> 3931<path d="M56.3751 27.3382C55.9358 27.3382 55.4965 27.1771 55.1597 26.8404C54.4861 26.1668 54.4861 25.0979 55.1597 24.4243L68.8215 10.7625C69.4951 10.0889 70.564 10.0889 71.2376 10.7625C71.9111 11.4361 71.9111 12.505 71.2376 13.1786L57.5758 26.8404C57.2536 27.1625 56.8144 27.3382 56.3751 27.3382Z" fill="var(--color-accent)"/> 3932</svg> 3933 3934 <p>Your cart is currently empty.</p> 3935 <a class="button accent2" href="/collections/all" 3936 ><span>Start Shopping</span></a 3937 > 3938 </div> 3939 3940 3941 </div></div> 3942 </div> 3943 3944 <div class="side-panel search-drawer" tabindex="-1" id="Search-Drawer"> 3945 <div class="side-panel-inner"> 3946 <div class="side-panel-header"> 3947 <div> 3948 <form role="search" method="get" class="searchform" action="/search"> 3949 <fieldset> 3950 <label for="side-panel-search-input visually-hidden">Search</label> 3951 <input id="side-panel-search-input" type="search" class="search-field" placeholder="Search for anything" value="" name="q" autocomplete="off"> 3952 </fieldset> 3953 </form> 3954 <side-panel-close class="side-panel-close"> 3955<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 3956<path d="M13 1L1 13M13 13L1 1" stroke="var(--color-body)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3957</svg> 3958</side-panel-close> 3959 </div> 3960 </div><div class="side-panel-content side-panel-content--has-tabs"> 3961 3962 </div><div class="side-panel-content side-panel-content--initial"> 3963 <div class="thb-predictive-search"><div class="thb-predictive-search--promotion"> 3964 <span class="thb-predictive-search--label">Trending Now</span> 3965 <div class="thb-predictive-search--promotion-products"> 3966 <ul class="products collection row small-up-1 medium-up-2"><li class="columns"> 3967 <link href="//sparxhockey.com/cdn/shop/t/283/assets/product-card.css?v=173381139515360708871757001508" rel="stylesheet" type="text/css" media="all" /> 3968<product-card class="product-card text-left " data-team=""> 3969 <figure class="product-featured-image "> 3970 3971 3972 3973 3974 <a href="/products/sparx-sharpener-3" title="Sparx Sharpener 3" class="product-featured-image-link aspect-ratio aspect-ratio--adapt" style="--padding-bottom: 100.0%;"> 3975 3976<img class="lazyload product-primary-image" width="1000" height="1000" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sharpe
3976ner_3_Transparent_Image_1000x1000_5ddb17d5-86f1-4df7-afb4-50e1d7f422a6_20x_crop_center.png?v=1743613397" data-srcset="//sparxhockey.com/cdn/shop/files/Sharpener_3_Transparent_Image_1000x1000_5ddb17d5-86f1-4df7-afb4-50e1d7f422a6_375x_crop_center.png?v=1743613397 375w, //sparxhockey.com/cdn/shop/files/Sharpener_3_Transparent_Image_1000x1000_5ddb17d5-86f1-4df7-afb4-50e1d7f422a6_770x_crop_center.png?v=1743613397 770w, " alt="Sparx Sharpener 3" style="object-position: 50.0% 50.0%;" /> 3977<noscript> 3978<img width="1000" height="1000" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sharpener_3_Transparent_Image_1000x1000_5ddb17d5-86f1-4df7-afb4-50e1d7f422a6.png?v=1743613397" srcset="//sparxhockey.com/cdn/shop/files/Sharpener_3_Transparent_Image_1000x1000_5ddb17d5-86f1-4df7-afb4-50e1d7f422a6_375x_crop_center.png?v=1743613397 375w, //sparxhockey.com/cdn/shop/files/Sharpener_3_Transparent_Image_1000x1000_5ddb17d5-86f1-4df7-afb4-50e1d7f422a6_770x_crop_center.png?v=1743613397 770w, " alt="Sparx Sharpener 3" loading="lazy" style="object-position: 50.0% 50.0%;" /> 3979</noscript> 3980</a> 3981 </figure> 3982 <div class="product-card-info"><a href="/products/sparx-sharpener-3" title="Sparx Sharpener 3" class="product-card-title"> 3983 Sparx Sharpener 3 3984 3985 </a> 3986 3987<span class="price"> 3988 3989<ins><span class="amount"><span class=money>$899.99 </span></span></ins> 3990 <small class="unit-price hidden"> 3991 <span></span> 3992 <span class="unit-price-separator">/</span> 3993 <span> 3994 </span> 3995 </small> 3996</span> 3997 3998 3999 4000</div> 4001</product-card> 4002 </li><li class="columns"> 4003 <link href="//sparxhockey.com/cdn/shop/t/283/assets/product-card.css?v=173381139515360708871757001508" rel="stylesheet" type="text/css" media="all" /> 4004<product-card class="product-card text-left " data-team=""> 4005 <figure class="product-featured-image "> 4006 4007 4008 4009 4010 <a href="/products/sparx-sharpener-3-with-beam" title="Sparx Sharpener 3 + BEAM" class="product-featured-image-link aspect-ratio aspect-ratio--adapt" style="--padding-bottom: 100.0%;"> 4011 4012<img class="lazyload product-primary-image" width="1000" height="1000" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sharpener3_Img_1_20x_crop_center.png?v=1690834397" data-srcset="//sparxhockey.com/cdn/shop/files/Sharpener3_Img_1_375x_crop_center.png?v=1690834397 375w, //sparxhockey.com/cdn/shop/files/Sharpener3_Img_1_770x_crop_center.png?v=1690834397 770w, " alt="Sparx Sharpener 3 + BEAM" style="object-position: 50.0% 50.0%;" /> 4013<noscript> 4014<img width="1000" height="1000" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sharpener3_Img_1.png?v=1690834397" srcset="//sparxhockey.com/cdn/shop/files/Sharpener3_Img_1_375x_crop_center.png?v=1690834397 375w, //sparxhockey.com/cdn/shop/files/Sharpener3_Img_1_770x_crop_center.png?v=1690834397 770w, " alt="Sparx Sharpener 3 + BEAM" loading="lazy" style="object-position: 50.0% 50.0%;" /> 4015</noscript> 4016</a> 4017 </figure> 4018 <div class="product-card-info"><a href="/products/sparx-sharpener-3-with-beam" title="Sparx Sharpener 3 + BEAM" class="product-card-title"> 4019 Sparx Sharpener 3 + BEAM 4020 4021 </a> 4022 4023<span class="price"> 4024 4025<ins><span class="amount"><span class=money>$1,124.99 </span></span></ins> 4026 <small class="unit-price hidden"> 4027 <span></span> 4028 <span class="unit-price-separator">/</span> 4029 <span> 4030 </span> 4031 </small> 4032</span> 4033 4034 4035 4036</div> 4037</product-card> 4038 </li><li class="columns"> 4039 <link href="//sparxhockey.com/cdn/shop/t/283/assets/product-card.css?v=173381139515360708871757001508" rel="stylesheet" type="text/css" media="all" /> 4040<product-card class="product-card text-left " data-team=""> 4041 <figure class="product-featured-image "> 4042 4043 4044 4045 4046 <a href="/products/sparx-sharpener-3-pro" title="Sparx Sharpener 3 Pro" class="product-featured-image-link aspect-ratio aspect-ratio--adapt" style="--padding-bottom: 100.0%;"> 4047 4048<img class="lazyload product-primary-image" width="1000" height="1000" data-sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sharpener3Pro_20x_crop_center.png?v=1690833644" data-srcset="//sparxhockey.com/cdn/shop/files/Sharpener3Pro_375x_crop_center.png?v=1690833644 375w, //sparxhockey.com/cdn/shop/files/Sharpe
4048ner3Pro_770x_crop_center.png?v=1690833644 770w, " alt="Sparx Sharpener 3 Pro" style="object-position: 50.0% 50.0%;" /> 4049<noscript> 4050<img width="1000" height="1000" sizes="auto" src="//sparxhockey.com/cdn/shop/files/Sharpener3Pro.png?v=1690833644" srcset="//sparxhockey.com/cdn/shop/files/Sharpener3Pro_375x_crop_center.png?v=1690833644 375w, //sparxhockey.com/cdn/shop/files/Sharpener3Pro_770x_crop_center.png?v=1690833644 770w, " alt="Sparx Sharpener 3 Pro" loading="lazy" style="object-position: 50.0% 50.0%;" /> 4051</noscript> 4052</a> 4053 </figure> 4054 <div class="product-card-info"><a href="/products/sparx-sharpener-3-pro" title="Sparx Sharpener 3 Pro" class="product-card-title"> 4055 Sparx Sharpener 3 Pro 4056 4057 </a> 4058 4059<span class="price"> 4060 4061<ins><span class="amount"><span class=money>$1,354.99 </span></span></ins> 4062 <small class="unit-price hidden"> 4063 <span></span> 4064 <span class="unit-price-separator">/</span> 4065 <span> 4066 </span> 4067 </small> 4068</span> 4069 4070 4071 4072</div> 4073</product-card> 4074 </li></ul> 4075 </div> 4076 </div></div> 4077 </div> 4078 4079 </div> 4080</div> 4081 4082<link rel="stylesheet" href="//sparxhockey.com/cdn/shop/t/283/assets/product-grid.css?v=24662087130431373221757001509" media="print" onload="this.media='all'"> 4083<link rel="stylesheet" href="//sparxhockey.com/cdn/shop/t/283/assets/predictive-search.css?v=33505859135841645561739390837" media="print" onload="this.media='all'"> 4084<noscript> 4085 <link href="//sparxhockey.com/cdn/shop/t/283/assets/product-grid.css?v=24662087130431373221757001509" rel="stylesheet" type="text/css" media="all" /> 4086 <link href="//sparxhockey.com/cdn/shop/t/283/assets/predictive-search.css?v=33505859135841645561739390837" rel="stylesheet" type="text/css" media="all" /> 4087</noscript> 4088 4089 <div class="click-capture"></div> 4090 </div> 4091 4092
4092<script src="//sparxhockey.com/cdn/shop/t/283/assets/vendor.min.js?v=25283403515773363701722457213" type="text/javascript"></script>
4092 4093 4094
4094<script src="//sparxhockey.com/cdn/shop/t/283/assets/animations.min.js?v=43857518744990237831682107628" type="text/javascript"></script>
4094 4095
4095<script> 4096 gsap.defaults({ 4097 ease: Power4.easeOut 4098 }); 4099 gsap.config({ 4100 nullTargetWarn: false 4101 }); 4102 gsap.registerPlugin(ScrollTrigger); 4103 </script>
4103 4104 4105 4106
4106<script src="//sparxhockey.com/cdn/shop/t/283/assets/slideshow.js?v=173579497955750101941682107635" type="text/javascript"></script>
4106 4107
4107<script src="//sparxhockey.com/cdn/shop/t/283/assets/app.js?v=130344362403991186621739387000" type="text/javascript"></script>
4107 4108
4108<script type="module" src="//sparxhockey.com/cdn/shop/t/283/assets/scroll-shadow.js?v=20320457967675250001682107636" defer="defer"></script>
4108 4109
4109<script src="//sparxhockey.com/cdn/shop/t/283/assets/predictive-search.js?v=165469390560483649961682107633" defer="defer"></script>
4109<script src="//sparxhockey.com/cdn/shop/t/283/assets/back-to-top.js?v=8284912484804092081682107633" defer="defer"></script>
4109 4110<back-to-top class="back-to-top"> 4111<svg width="11" height="16" viewBox="0 0 11 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 4112<path class="back-to-top--bar" d="M4.87654 2.34497C4.87654 1.99178 5.16285 1.70547 5.51604 1.70547C5.86922 1.70547 6.15554 1.99179 6.15554 2.34497V15.5613C6.15554 15.9144 5.86922 16.2008 5.51604 16.2008C5.16285 16.2008 4.87654 15.9144 4.87654 15.5613V2.34497Z" fill="var(--color-accent)"/> 4113<path class="back-to-top--handle" d="M0.197525 5.0502L5.02195 0.225769C5.14739 0.100345 5.32293 0.0251028 5.48588 0C5.66143 -7.67342e-09 5.83696 0.0752197 5.96239 0.200647L10.7994 5.03761C10.9373 5.17554 11 5.33858 11 5.51412C11 5.68967 10.9248 5.8652 10.7994 5.99063C10.5486 6.254 10.1223 6.254 9.85892 5.99063L6.16301 2.30726C5.72921 2.1318 5.72921 1.70547 4.83387 2.29472L1.13796 5.99063C0.887198 6.254 0.460891 6.254 0.197525 5.99063C-0.0658415 5.73987 -0.0658415 5.31356 0.197525 5.0502Z" fill="var(--color-accent)"/> 4114</svg> 4115</back-to-top> 4116
4116<script> 4117 4118 window.dataLayer = window.dataLayer || []; 4119 switch("index") { 4120 case "index": 4121 // do nothing, the ee datalayer does not populate anything on the homepage 4122 break; 4123 case "product": 4124 dataLayer.push({ 4125 'ecommerce': { 4126 'detail': { 4127 'currencyCode': 'USD', 4128 'products': [ 4129 { 4130 'name': '', 4131 'id': '', 4132 'variant_id': '', 4133 'variant_sku': '', 4134 'handle': '', 4135 'price': '', 4136 'availability': '', 4137 'product_type': '', 4138 'vendor': '', 4139 } 4140 ] 4141 } 4142 } 4143 }); 4144 break; 4145 case "collection": 4146 dataLayer.push({ 4147 'ecommerce': { 4148 'currencyCode': 'USD', 4149 'impressions': [ 4150 4151 ]} 4152 }); 4153 break; 4154 case "search": 4155 dataLayer.push({ 4156 'ecommerce': { 4157 'currencyCode': 'USD', 4158 'impressions': [ 4159 4160 ], 4161 'keyword': '', 4162 } 4163 }); 4164 break; 4165 case "cart": 4166 dataLayer.push({ 4167 'event': 'checkout', 4168 'ecommerce': { 4169 'currencyCode': 'USD', 4170 'checkout': { 4171 'products': [ 4172 4173 ] 4174 } 4175 } 4176 }); 4177 break; 4178 default: 4179 // do nothing since its not a page we can get info on 4180 } 4181</script>
4181 4182 4183
4183<script> 4184 Geolizr.init(function($) { 4185 let body = $('body'); 4186 body.addClass('geolizr-redirect-loading'); 4187 Geolizr.addEventListener('redirect.notExecuted', function(result) { 4188 body.removeClass('geolizr-redirect-loading'); 4189 if(result.code === "200") { 4190 body.addClass('geolizr-redirect-start'); 4191 } else { 4192 body.addClass('geolizr-redirect-blocked'); 4193 } 4194 }); 4195 }); 4196 4197 Geolizr.addSystemEventListener('geolizr.init.redirect', function(e) { 4198 let $ = e.jquery; 4199 const regex = /Mozilla\/(.*)AppleWebKit\/(.*)HeadlessChrome\/(.*)/gm; 4200 if(regex.exec(navigator.userAgent) === null) { 4201 Geolizr.getGeoData(function() { 4202 Geolizr.redirects = {"8765":{"id":8765,"shop":8320,"type":"url","url":"https://ca.sparxhockey.com/%path%","ignoreReferrers":"sparxhockey.com,ca.sparxhockey.com,fr.sparxhockey.com,sparxhockey.eu,sparxhockey.eu/de-at/,sparxhockey.eu/cs-cz/,sparxhockey.eu/fi-fi/,sparxhockey.eu/fr-fr/,sparxhockey.eu/de-de/,sparxhockey.eu/cs-sk/,sparxhockey.eu/sv-se/,sparxhockey.eu/de-ch/,sparxhockey.eu/fr-ch/,sparxhockey.eu/en-no/,sparxhockey.eu/en-gb/","filterlistType":"none","filterlistUrls":null},"11176":{"id":11176,"shop":8320,"type":"url","url":"https://sparxhockey.eu/%path%","ignoreReferrers":"sparxhockey.com,ca.sparxhockey.com,fr.sparxhockey.com,sparxhockey.eu,sparxhockey.eu/de-at/,sparxhockey.eu/cs-cz/,sparxhockey.eu/fi-fi/,sparxhockey.eu/fr-fr/,sparxhockey.eu/de-de/,sparxhockey.eu/cs-sk/,sparxhockey.eu/sv-se/,sparxhockey.eu/de-ch/,sparxhockey.eu/fr-ch/,sparxhockey.eu/en-no/,sparxhockey.eu/en-gb/","filterlistType":"none","filterlistUrls":null}}; 4203 Geolizr.countryToRedirect = {"CA":8765,"AL":11176,"AD":11176,"AM":11176,"AT":11176,"AZ":11176,"BY":11176,"BE":11176,"BA":11176,"BG":11176,"HR":11176,"CY":11176,"CZ":11176,"DK":11176,"EE":11176,"FO":11176,"FI":11176,"FR":11176,"GE":11176,"DE":11176,"GR":11176,"HU":11176,"IS":11176,"IE":11176,"IM":11176,"IT":11176,"JE":11176,"KZ":11176,"LV":11176,"LI":11176,"LT":11176,"LU":11176,"MK":11176,"MT":11176,"MD":11176,"MC":11176,"ME":11176,"NL":11176,"NO":11176,"PL":11176,"PT":11176,"RO":11176,"RU":11176,"SM":11176,"RS":11176,"SK":11176,"SI":11176,"ES":11176,"SE":11176,"CH":11176,"TR":11176,"UA":11176,"GB":11176,"VA":11176}; 4204 Geolizr.redirect(); 4205 }, true); 4206 } else { 4207 Geolizr.redirectExcutionMessage = `UserAgent Blocked [${navigator.userAgent}]`; 4208 } 4209 }); 4210 </script>
4210 4211 4212 4213 4214 4215
4215<script> 4216 document.addEventListener('DOMContentLoaded', function() { 4217 var menuItems = document.querySelectorAll('.thb-full-menu > li'); 4218 4219 menuItems.forEach(function(menuItem) { 4220 menuItem.addEventListener('mouseover', function() { 4221 loadImages(menuItem); 4222 }); 4223 }); 4224 4225 var parentLinks = document.querySelectorAll('#mobile-menu .parent-link'); 4226 parentLinks.forEach(function(parentLink) { 4227 parentLink.addEventListener('click', function() { 4228 loadImages(parentLink.nextElementSibling); 4229 }); 4230 }); 4231 4232 function loadImages(menuItem) { 4233 var images = menuItem.querySelectorAll('.custom-lazyload'); 4234 4235 images.forEach(function(image) { 4236 if (image.dataset.src) { 4237 image.src = image.dataset.src; 4238 image.removeAttribute('data-src'); 4239 image.parentElement.classList.remove('custom-lazyload'); 4240 image.classList.remove('custom-lazyload'); 4241 } 4242 }); 4243 } 4244 }); 4245 </script>
4245 4246 4247<style> </style> 4248<div id="shopify-block-AY0VhdC9WTVhBNG50M__124348908681409149" class="shopify-block shopify-app-block">
4248<script> 4249 window.SimpleBundles = { 4250 productVariants: {}, 4251 settings: { 4252 selectPlaceholder: 'Please select an option', 4253 showPriceVariance: true, 4254 rankOptionsByPriceDiff: true 4255 }, 4256 currencyFormatter: new Intl.NumberFormat(window.Shopify.locale, { 4257 style: 'currency', 4258 currency: "USD", 4259 roundingMode: "halfCeil", 4260 }) 4261 }; 4262 4263 4264</script>
4264 4265 4266<style type="text/css"> 4267 [data-simple-bundles-options] { 4268 display: flex; 4269 flex-direction: column; 4270 padding-bottom: 10px; 4271 } 4272 4273 [data-simple-bundles-options] label { 4274 margin-bottom: 8px; 4275 font-weight: normal; 4276 font-family: inherit; 4277 text-align: left; 4278 } 4279 4280 [data-simple-bundles-options] select { 4281 padding: 8px; 4282 font-size: 16px; 4283 border-radius: 0px; 4284 border: 1px solid #333; 4285 width: 100%; 4286 margin-bottom: 8px; 4287 appearance: none; 4288 -webkit-appearance: none; 4289 -moz-appearance: none; 4290 background-image: url('data:image/svg+xml;utf8,<svg fill="%23444" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M7 10l5 5 5-5z"/><path d="M0 0h24v24H0z" fill="none"/></svg>'); 4291 background-repeat: no-repeat; 4292 background-position: right 8px center; 4293 font-family: inherit; 4294 font-weight: normal; 4295 color: #000; 4296 } 4297</style> 4298 4299<style type="text/css"> 4300 4301</style> 4302
4303<script type="text/javascript"> 4304 4305</script>
4305 4306 4307 4308</div>
4308<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
4308 4309</body> 4310</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.