PageSourceSearch

https://sparxhockey.com/

html sparxhockey.com collected 2026-09-24 19:50:59 UTC 450,776 bytes, 4,310 lines download raw bytes

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 &amp; 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 &amp; 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 &amp; 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":"&#10005;","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 &amp; 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>&copy; 2026 Sparx Hockey, All rights reserved. <a target="_blank" rel="nofollow" href="https://www.shopify.com?utm_campaign=poweredby&amp;utm_medium=shopify&amp;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.