1<!doctype html> 2<html class="no-js" lang="en"> 3 <head><!-- Start of Shoplift scripts --> 4<!-- 2026-06-03T14:08:40.4323176Z --> 5<style>.shoplift-hide { opacity: 0 !important; }</style> 6<style id="sl-preview-bar-hide">#preview-bar-iframe, #PBarNextFrameWrapper { display: none !important; }</style>
7<script type="text/javascript">(function(rootPath, template, themeRole, themeId, isThemePreview){ /* Generated on 2026-09-24T08:30:01.5243936Z */(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
77|;\\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}
7const 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=>
7o.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;
7const 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)}
7else 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);
7if(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];
7if(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);
7urlParams=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":false,"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=>
7S.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()}
7async 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);
7const 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
7ategoryFromExistingTests(),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")}
7),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
7ing 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;
7if(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=>
7i.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()=>
7{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}`};
7this.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
7ndToGa??!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 )|
7sy(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")}
7,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",
7y):(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}
7const 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
7CookieState(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
7andex\.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
7pera\.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)}
7,{"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
7akao|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
7andex\.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
7: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("emlid-store.myshopify.com","https://app.shoplift.ai","https://events.shoplift.ai",true,false,false,{"sendEvents":false,"mode":"gtag"},false,false,1000,[{"id":"019dcfd2-4b7c-7f40-93b1-9b6668ac3816","startAt":"2026-04-27T16:42:38.842194Z","requiresCountry":false,"requiresRegion":false,"bayesianRevision":5,"device":"all","status":"active","visitorOption":"all","ignoreTestViewParameterEnforcement":false,"statusHistory":[{"status":"active","createdAt":"2026-04-27T16:42:38.847498Z"}],"hypotheses":[{"visitorCount":3605,"trafficPercentage":0.47254922656431053,"title":"RS3 Original","domSelectors":[],"id":"019daac6-6c3f-7f14-963d-afd007f53c40","type":"product","themeId":176026124593,"affix":"rs3","isControl":true},{"visitorCount":4024,"trafficPercentage":0.5274507734356895,"title":"RS3 Step-by-step","domSelectors":[],"id":"019daac8-6257-7faa-8697-db93c1d83e74","type":"product","themeId":176026124593,"affix":"sl-B631D8F7","isControl":false}],"targetAudiences":[],"title":"RS3 Step-by-step template test"}
7],[],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: "rs4-pro", type: "product" }, "main", 176026124593, false)</script>
7 8<!-- End of Shoplift scripts --> 9<!-- create a new Snippet called 'gtm-customer-events-storefront' and paste the below code into it --> 10 11<!-- click tracking -->
12<script> 13 // function that gets the path of the clicked element. Borrowed from Simo Ahava. https://www.simoahava.com/analytics/create-css-path-variable-for-click-element/ 14 function gtm_get_click_element_path(element) { 15 var el = element; 16 if (el instanceof Node) { 17 // Build the list of elements along the path 18 var elList = []; 19 do { 20 if (el instanceof Element) { 21 var classString = el.classList ? [].slice.call(el.classList).join('.') : ''; 22 var elementName = (el.tagName ? el.tagName.toLowerCase() : '') + 23 (classString ? '.' + classString : '') + 24 (el.id ? '#' + el.id : ''); 25 if (elementName) elList.unshift(elementName); 26 } 27 el = el.parentNode 28 } while (el != null); 29 // Get the stringified element object name 30 var objString = element.toString().match(/\[object (\w+)\]/); 31 var elementType = objString ? objString[1] : element.toString(); 32 var cssString = elList.join(' > '); 33 // Return the CSS path as a string, prefixed with the element object name 34 return cssString ? elementType + ': ' + cssString : elementType; 35 } 36 } 37 38 window.addEventListener("click", function(event){ 39 40 // track clicks on any element and push it to Shopify customer events 41 Shopify.analytics.publish("custom_click",{ 42 click_element : gtm_get_click_element_path(event.target) || '', 43 click_id : event.target.id || '', 44 click_classes : event.target.className || '', 45 click_text : event.target.innerText || '', 46 click_target : event.target.target || '', 47 click_url : event.target.href || '' 48 }); 49 50 // track link clicks and push it to Shopify customer events 51 var closestLink = event.target.closest('a') 52 if (closestLink){ 53 Shopify.analytics.publish("custom_link_click",{ 54 click_element : gtm_get_click_element_path(closestLink.target) || '', 55 click_id : closestLink.id || '', 56 click_classes : closestLink.className || '', 57 click_text : closestLink.innerText || '', 58 click_target : closestLink.target || '', 59 click_url : closestLink.href || '' 60 }) 61 } 62 }); 63</script>
63 64<!-- end of click tracking --> 65 <!--CookieBot script--> 66 67 <!-- end CookieBot script--> 68 <meta name="google-site-verification" content="CwgcBRWf4LzH0lmAQ5hsZnh24ZipTA89UtMDfGPQV70"> 69 <!-- Google Tag Manager --> 70
70<script>
vendor: 358 bytes, lines 70-75
70 71 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 72 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 73 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 74 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 75 })(window,document,'script','dataLayer','
75GTM-W6RV3K67
vendor: 8 bytes, lines 75-76
75'); 76
76</script>
76 77 <!-- End Google Tag Manager --> 78
78<script 79 type="text/javascript" 80 src="https://www.bugherd.com/sidebarv2.js?apikey=vsil19vhoobtosdzxbal1q" 81 async="true" 82 ></script>
82 83 84 <meta charset="utf-8"> 85 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 86 <meta name="viewport" content="width=device-width,initial-scale=1"> 87 <meta name="theme-color" content=""> 88 <link rel="canonical" href="https://store.emlid.com/products/reach-rs4-pro"> 89 90 <!-- begin Convert Experiences code --> 91
91<script type="text/javascript"> 92 var _conv_page_type = "product";var _conv_category_id = "";var _conv_category_name = "";var _conv_product_sku = "";var _conv_product_name = "Reach RS4 Pro";var _conv_product_price = "4,599.00";var _conv_customer_id = "";var _conv_custom_v1 = "";var _conv_custom_v2 = "";var _conv_custom_v3 = "0";var _conv_custom_v4 = "0.00"; 93 </script>
93 94
94<script type="text/javascript" src="//cdn-4.convertexperiments.com/v1/js/10048011-100414549.js?environment=production"></script>
94 95 <!-- end Convert Experiences code --><link rel="icon" type="image/png" href="//store.emlid.com/cdn/shop/files/favicon_c260a1f4-da11-4a42-aab7-d56f8810a6ef.svg?crop=center&height=32&v=1759305109&width=32"><link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin><title> 96 Buy Reach RS4 Pro â an RTK GNSS receiver with dual cameras â Emlid Store 97 – Emlid Store US</title> 98 99 100 <meta name="description" content="Order Reach RS4 Pro, an all-band RTK GNSS receiver with dual cameras and tilt compensation. Features include AR stakeout and measurements from photos."> 101 102 103 104 105<meta property="og:site_name" content="Emlid Store US"> 106<meta property="og:url" content="https://store.emlid.com/products/reach-rs4-pro"> 107<meta property="og:title" content="Buy Reach RS4 Pro â an RTK GNSS receiver with dual cameras â Emlid Store"> 108<meta property="og:type" content="product"> 109<meta property="og:description" content="Order Reach RS4 Pro, an all-band RTK GNSS receiver with dual cameras and tilt compensation. Features include AR stakeout and measurements from photos."><meta property="og:image" content="http://store.emlid.com/cdn/shop/files/RS4RENDERS04.663.webp?v=1759528847"> 110 <meta property="og:image:secure_url" content="https://store.emlid.com/cdn/shop/files/RS4RENDERS04.663.webp?v=1759528847"> 111 <meta property="og:image:width" content="3200"> 112 <meta property="og:image:height" content="3200"><meta property="og:price:amount" content="4,599.00"> 113 <meta property="og:price:currency" content="USD"><meta name="twitter:site" content="@emlid"><meta name="twitter:card" content="summary_large_image"> 114<meta name="twitter:title" content="Buy Reach RS4 Pro â an RTK GNSS receiver with dual cameras â Emlid Store"> 115<meta name="twitter:description" content="Order Reach RS4 Pro, an all-band RTK GNSS receiver with dual cameras and tilt compensation. Features include AR stakeout and measurements from photos."> 116 117 118
118<script src="//store.emlid.com/cdn/shop/t/13/assets/constants.js?v=58251544750838685771741637493" defer="defer"></script>
118 119
119<script src="//store.emlid.com/cdn/shop/t/13/assets/pubsub.js?v=158357773527763999511741637493" defer="defer"></script>
119 120
120<script src="//store.emlid.com/cdn/shop/t/13/assets/global.js?v=139248116715221171191741637493" defer="defer"></script>
120<script src="//store.emlid.com/cdn/shop/t/13/assets/animations.js?v=114255849464433187621741637493" defer="defer"></script>
120<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
120<meta name="google-site-verification" content="-Q38xYnR3ZZYX9Y0a83GFghhBvRrle_sQIFnACmGsmU"> 121<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/78202306865/digital_wallets/dialog"> 122<link rel="alternate" type="application/json+oembed" href="https://store.emlid.com/products/reach-rs4-pro.oembed">
123<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=5517639985"></script>
vendor: 1 bytes, line 123
123
124<script id="shopify-features" type="application/json">{"accessToken":"5fc9160dc975edbd36d17f2043444e87","betas":["rich-media-storefront-analytics"],"domain":"store.emlid.com","predictiveSearch":true,"shopId":78202306865,"locale":"en"}</script>
vendor: 1 bytes, line 124
124
125<script>var Shopify = Shopify || {}; 126Shopify.shop = "emlid-store.myshopify.com"; 127Shopify.locale = "en"; 128Shopify.currency = {"active":"USD","rate":"1.0"}; 129Shopify.country = "US"; 130Shopify.theme = {"name":"BAD | CRO UPDATED Product Templates","id":176026124593,"schema_name":"Dawn","schema_version":"10.0.0","theme_store_id":887,"role":"main"}; 131Shopify.theme.handle = "null"; 132Shopify.theme.style = {"id":null,"handle":null}; 133Shopify.cdnHost = "store.emlid.com/cdn"; 134Shopify.routes = Shopify.routes || {}; 135Shopify.routes.root = "/"; 136Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 137Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 138Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 139Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 139
139
140<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 140
140
141<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 141
141
142<script> 143 window.Shopify = window.Shopify || {}; 144 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 145 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 146 window.Shopify.SignInWithShop.eligible = true; 147</script>
vendor: 1 bytes, line 147
147
148<script id="shop-js-analytics" type="application/json">{"pageType":"product"}</script>
vendor: 1 bytes, line 148
148
149<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 149
149
150<script type="module"> 151 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 152 153 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 154 155</script>
vendor: 1 bytes, line 155
155
156<script> 157 window.Shopify = window.Shopify || {}; 158 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 159 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"]}; 160</script>
vendor: 1 bytes, line 160
160
161<script>(function() { 162 var isLoaded = false; 163 function asyncLoad() { 164 if (isLoaded) return; 165 isLoaded = true; 166 var urls = ["https:\/\/load.csell.co\/assets\/js\/cross-sell.js?shop=emlid-store.myshopify.com","https:\/\/load.csell.co\/assets\/v2\/js\/core\/xsell.js?shop=emlid-store.myshopify.com","\/\/cdn.shopify.com\/proxy\/5532e4a40abbfdfab68eef59f8ef9035d185159f356026601586fad776a5881b\/sa-prod.saincserv.com\/i\/notification-GLYWGG6T.js?shop=emlid-store.myshopify.com\u0026sp-cache-control=cHVibGljLCBtYXgtYWdlPTkwMA"]; 167 for (var i = 0; i < urls.length; i++) { 168 var s = document.createElement('script'); 169 s.type = 'text/javascript'; 170 s.async = true; 171 s.src = urls[i]; 172 var x = document.getElementsByTagName('script')[0]; 173 x.parentNode.insertBefore(s, x); 174 } 175 }; 176 if(window.attachEvent) { 177 window.attachEvent('onload', asyncLoad); 178 } else { 179 window.addEventListener('load', asyncLoad, false); 180 } 181})();</script>
vendor: 1 bytes, line 181
181
182<script id="__st">var __st={"a":78202306865,"offset":-14400,"reqid":"fbbae800-8b7f-4f30-b87a-39043512edaf-1790240471","pageurl":"store.emlid.com\/products\/reach-rs4-pro","u":"eef61f17f1a7","p":"product","rtyp":"product","rid":10409911648561};</script>
vendor: 1 bytes, line 182
182
183<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 183
183
184<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 184
184
185<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//store.emlid.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 185
185
186<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 = "//store.emlid.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>
186<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 186
186
187<script> 188 window.Shopify = window.Shopify || {}; 189 window.Shopify.MCP = window.Shopify.MCP || {}; 190 window.Shopify.MCP.enabled = true; 191 window.Shopify.MCP.shop = "emlid-store.myshopify.com"; 192 window.Shopify.MCP.mcpEndpoint = "https:\/\/store.emlid.com\/api\/mcp"; 193 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"]}}]; 194</script>
vendor: 1 bytes, line 194
194
195<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("\/\/store.emlid.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-f1e1e155.js","sha256-86F2r\/8tANRiv732G7Azvy4FxZLwNMjSp3zeaR2BCbY=");})(); 196</script>
vendor: 1 bytes, line 196
196
197<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://store.emlid.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 198</script>
vendor: 1 bytes, line 198
198
199<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 200 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); 201</script>
vendor: 1 bytes, line 201
201
202<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})}})); 203</script>
203 204<link rel="stylesheet" media="screen" href="//store.emlid.com/cdn/shop/t/13/compiled_assets/styles.css?v=102358688165801936931784111811">
205<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
205 206
206<script> 207function feedback() { 208 const p = window.Shopify.customerPrivacy; 209 console.log(`Tracking ${p.userCanBeTracked() ? "en" : "dis"}abled`); 210} 211window.Shopify.loadFeatures( 212 [ 213 { 214 name: "consent-tracking-api", 215 version: "0.1", 216 }, 217 ], 218 function (error) { 219 if (error) throw error; 220 if ("Cookiebot" in window) 221 window.Shopify.customerPrivacy.setTrackingConsent({ 222 "analytics": false, 223 "marketing": false, 224 "preferences": false, 225 "sale_of_data": false, 226 }, () => console.log("Awaiting consent") 227 ); 228 } 229); 230 231window.addEventListener("CookiebotOnConsentReady", function () { 232 const C = Cookiebot.consent, 233 existConsentShopify = setInterval(function () { 234 if (window.Shopify.customerPrivacy) { 235 clearInterval(existConsentShopify); 236 window.Shopify.customerPrivacy.setTrackingConsent({ 237 "analytics": C["statistics"], 238 "marketing": C["marketing"], 239 "preferences": C["preferences"], 240 "sale_of_data": C["marketing"], 241 }, () => console.log("Consent captured")) 242 } 243 }, 100); 244}); 245</script>
245 246 247 248 <style data-shopify> 249 @font-face { 250 font-family: "Geist Mono"; 251 font-weight: 400; 252 font-style: normal; 253 font-display: swap; 254 src: url("//store.emlid.com/cdn/fonts/geist_mono/geistmono_n4.d2c42f9657ae5019fd3bd6f1f69bc0f5360c7412.woff2") format("woff2"), 255 url("//store.emlid.com/cdn/fonts/geist_mono/geistmono_n4.e0effbb465651e712e60e5a3ffd5f1a723616bf3.woff") format("woff"); 256} 257 258 @font-face { 259 font-family: "Geist Mono"; 260 font-weight: 700; 261 font-style: normal; 262 font-display: swap; 263 src: url("//store.emlid.com/cdn/fonts/geist_mono/geistmono_n7.e26217627a6c0fced57172be2f943673c67727bf.woff2") format("woff2"), 264 url("//store.emlid.com/cdn/fonts/geist_mono/geistmono_n7.c529ddbd5686a887f2a4be5e0bae1f686dc981b8.woff") format("woff"); 265} 266 267 268 269 @font-face { 270 font-family: Geist; 271 font-weight: 400; 272 font-style: normal; 273 font-display: swap; 274 src: url("//store.emlid.com/cdn/fonts/geist/geist_n4.6e27f20c83b0a07405328f98ff3b0be957c5d6d5.woff2") format("woff2"), 275 url("//store.emlid.com/cdn/fonts/geist/geist_n4.492f36219dd328eb9d6fa578986db9fe6d514f67.woff") format("woff"); 276} 277 278 279 280 :root, 281 .color-background-1 { 282 --color-background: 255,255,255; 283 284 --gradient-background: #ffffff; 285 286 --color-foreground: 18,18,18; 287 --color-shadow: 18,18,18; 288 --color-button: 18,18,18; 289 --color-button-text: 255,255,255; 290 --color-secondary-button: 255,255,255; 291 --color-secondary-button-text: 18,18,18; 292 --color-link: 18,18,18; 293 --color-badge-foreground: 18,18,18; 294 --color-badge-background: 255,255,255; 295 --color-badge-border: 18,18,18; 296 --payment-terms-background-color: rgb(255 255 255); 297 } 298 299 300 .color-background-2 { 301 --color-background: 243,243,243; 302 303 --gradient-background: #f3f3f3; 304 305 --color-foreground: 18,18,18; 306 --color-shadow: 18,18,18; 307 --color-button: 18,18,18; 308 --color-button-text: 243,243,243; 309 --color-secondary-button: 243,243,243; 310 --color-secondary-button-text: 18,18,18; 311 --color-link: 18,18,18; 312 --color-badge-foreground: 18,18,18; 313 --color-badge-background: 243,243,243; 314 --color-badge-border: 18,18,18; 315 --payment-terms-background-color: rgb(243 243 243); 316 } 317 318 319 .color-inverse { 320 --color-background: 36,40,51; 321 322 --gradient-background: #242833; 323 324 --color-foreground: 255,255,255; 325 --color-shadow: 18,18,18; 326 --color-button: 255,255,255; 327 --color-button-text: 0,0,0; 328 --color-secondary-button: 36,40,51; 329 --color-secondary-button-text: 255,255,255; 330 --color-link: 255,255,255; 331 --color-badge-foreground: 255,255,255; 332 --color-badge-background: 36,40,51; 333 --color-badge-border: 255,255,255; 334 --payment-terms-background-color: rgb(36 40 51); 335 } 336 337 338 .color-accent-1 { 339 --color-background: 18,18,18; 340 341 --gradient-background: #121212; 342 343 --color-foreground: 255,255,255; 344 --color-shadow: 18,18,18; 345 --color-button: 255,255,255; 346 --color-button-text: 18,18,18; 347 --color-secondary-button: 18,18,18; 348 --color-secondary-button-text: 255,255,255; 349 --color-link: 255,255,255; 350 --color-badge-foreground: 255,255,255; 351 --color-badge-background: 18,18,18; 352 --color-badge-border: 255,255,255; 353 --payment-terms-background-color: rgb(18 18 18); 354 } 355 356 357 .color-accent-2 { 358 --color-background: 51,79,180; 359 360 --gradient-background: #334fb4; 361 362 --color-foreground: 255,255,255; 363 --color-shadow: 18,18,18; 364 --color-button: 255,255,255; 365 --color-button-text: 51,79,180; 366 --color-secondary-button: 51,79,180; 367 --color-secondary-button-text: 255,255,255; 368 --color-link: 255,255,255; 369 --color-badge-foreground: 255,255,255; 370 --color-badge-background: 51,79,180; 371 --color-badge-border: 255,255,255; 372 --payment-terms-background-color: rgb(51 79 180); 373 } 374 375 376 body, .color-background-1, .color-background-2, .color-inverse, .color-accent-1, .color-accent-2 { 377 color: rgba(var(--color-foreground), 0.75); 378 background-color: rgb(var(--color-background)); 379 } 380 381 :root { 382 --font-body-family: "Geist Mono", monospace; 383 --font-body-style: normal; 384 --font-body-weight: 400; 385 --font-body-weight-bold: 700; 386 387 --font-heading-family: Geist, sans-serif; 388 --font-heading-style: normal; 389 --font-heading-weight: 400; 390 391 --font-body-scale: 1.0; 392 --font-heading-scale: 1.0; 393 394 --media-padding: px; 395 --media-border-opacity: 0.05; 396 --media-border-width: 1px; 397 --media-radius: 0px;
398 --media-shadow-opacity: 0.0; 399 --media-shadow-horizontal-offset: 0px; 400 --media-shadow-vertical-offset: 4px; 401 --media-shadow-blur-radius: 5px; 402 --media-shadow-visible: 0; 403 404 --page-width: 140rem; 405 --page-width-margin: 0rem; 406 407 --product-card-image-padding: 2.0rem; 408 --product-card-corner-radius: 0.0rem; 409 --product-card-text-alignment: left; 410 --product-card-border-width: 0.0rem; 411 --product-card-border-opacity: 0.15; 412 --product-card-shadow-opacity: 0.0; 413 --product-card-shadow-visible: 0; 414 --product-card-shadow-horizontal-offset: 0.0rem; 415 --product-card-shadow-vertical-offset: 0.4rem; 416 --product-card-shadow-blur-radius: 0.5rem; 417 418 --collection-card-image-padding: 0.0rem; 419 --collection-card-corner-radius: 0.0rem; 420 --collection-card-text-alignment: left; 421 --collection-card-border-width: 0.0rem; 422 --collection-card-border-opacity: 0.1; 423 --collection-card-shadow-opacity: 0.0; 424 --collection-card-shadow-visible: 0; 425 --collection-card-shadow-horizontal-offset: 0.0rem; 426 --collection-card-shadow-vertical-offset: 0.4rem; 427 --collection-card-shadow-blur-radius: 0.5rem; 428 429 --blog-card-image-padding: 0.0rem; 430 --blog-card-corner-radius: 0.0rem; 431 --blog-card-text-alignment: left; 432 --blog-card-border-width: 0.0rem; 433 --blog-card-border-opacity: 0.1; 434 --blog-card-shadow-opacity: 0.0; 435 --blog-card-shadow-visible: 0; 436 --blog-card-shadow-horizontal-offset: 0.0rem; 437 --blog-card-shadow-vertical-offset: 0.4rem; 438 --blog-card-shadow-blur-radius: 0.5rem; 439 440 --badge-corner-radius: 4.0rem; 441 442 --popup-border-width: 1px; 443 --popup-border-opacity: 0.1; 444 --popup-corner-radius: 0px; 445 --popup-shadow-opacity: 0.0; 446 --popup-shadow-horizontal-offset: 0px; 447 --popup-shadow-vertical-offset: 4px; 448 --popup-shadow-blur-radius: 5px; 449 450 --drawer-border-width: 1px; 451 --drawer-border-opacity: 0.1; 452 --drawer-shadow-opacity: 0.0; 453 --drawer-shadow-horizontal-offset: 0px; 454 --drawer-shadow-vertical-offset: 4px; 455 --drawer-shadow-blur-radius: 5px; 456 457 --spacing-sections-desktop: 32px; 458 --spacing-sections-mobile: 22px; 459 460 --grid-desktop-vertical-spacing: 16px; 461 --grid-desktop-horizontal-spacing: 16px; 462 --grid-tablet-vertical-spacing: 12px; 463 --grid-tablet-horizontal-spacing: 12px; 464 --grid-mobile-vertical-spacing: 10px; 465 --grid-mobile-horizontal-spacing: 10px; 466 467 --text-boxes-border-opacity: 0.1; 468 --text-boxes-border-width: 0px; 469 --text-boxes-radius: 0px; 470 --text-boxes-shadow-opacity: 0.0; 471 --text-boxes-shadow-visible: 0; 472 --text-boxes-shadow-horizontal-offset: 0px; 473 --text-boxes-shadow-vertical-offset: 4px; 474 --text-boxes-shadow-blur-radius: 5px; 475 476 --buttons-radius: 0px; 477 --buttons-radius-outset: 0px; 478 --buttons-border-width: 1px; 479 --buttons-border-opacity: 1.0; 480 --buttons-shadow-opacity: 0.0; 481 --buttons-shadow-visible: 0; 482 --buttons-shadow-horizontal-offset: 0px; 483 --buttons-shadow-vertical-offset: 4px; 484 --buttons-shadow-blur-radius: 5px; 485 --buttons-border-offset: 0px; 486 487 --inputs-radius: 0px; 488 --inputs-border-width: 1px; 489 --inputs-border-opacity: 0.55; 490 --inputs-shadow-opacity: 0.0; 491 --inputs-shadow-horizontal-offset: 0px; 492 --inputs-margin-offset: 0px; 493 --inputs-shadow-vertical-offset: 4px; 494 --inputs-shadow-blur-radius: 5px; 495 --inputs-radius-outset: 0px; 496 497 --variant-pills-radius: 40px; 498 --variant-pills-border-width: 1px; 499 --variant-pills-border-opacity: 0.55; 500 --variant-pills-shadow-opacity: 0.0; 501 --variant-pills-shadow-horizontal-offset: 0px; 502 --variant-pills-shadow-vertical-offset: 4px; 503 --variant-pills-shadow-blur-radius: 5px; 504 } 505 506 *, 507 *::before, 508 *::after { 509 box-sizing: inherit; 510 } 511 512 html { 513 box-sizing: border-box; 514 font-size: calc(var(--font-body-scale) * 62.5%); 515 height: 100%; 516 } 517 518 body { 519 display: grid; 520 grid-template-rows: auto auto 1fr auto; 521 grid-template-columns: 100%; 522 min-height: 100%; 523 margin: 0; 524 font-size: 1.5rem; 525 letter-spacing: 0.06rem; 526 line-height: calc(1 + 0.8 / var(--font-body-scale)); 527 font-family: var(--font-body-family); 528 font-style: var(--font-body-style); 529 font-weight: var(--font-body-weight); 530 } 531 532 @media screen and (min-width: 750px) { 533 body { 534 font-size: 1.6rem; 535 } 536 } 537 </style> 538 539 540 <link href="//store.emlid.com/cdn/shop/t/13/assets/base.css?v=127864834034596633251780558110" rel="stylesheet" type="text/css" media="all" /> 541<link rel="preload" as="font" href="//store.emlid.com/cdn/fonts/geist_mono/geistmono_n4.d2c42f9657ae5019fd3bd6f1f69bc0f5360c7412.woff2" type="font/woff2" crossorigin><link rel="preload" as="font" href="//store.emlid.com/cdn/fonts/geist/geist_n4.6e27f20c83b0a07405328f98ff3b0be957c5d6d5.woff2" type="font/woff2" crossorigin>
541<script type="application/json" data-theme-information> 542 { 543 "locale": { 544 "addToCart": "Add to cart", 545 "makeASelection": "Select a variant", 546 "soldOut": "Sold out", 547 "unavailable": "Unavailable", 548 "free": "Free" 549 }, 550 "moneyFormat": "${{amount}}", 551 "rootURL": "" 552 } 553 </script>
553 554 555 <link href="//store.emlid.com/cdn/shop/t/13/assets/ffc.css?v=110474626771266057301788529987" rel="stylesheet" type="text/css" media="all" /> 556 <link href="//store.emlid.com/cdn/shop/t/13/assets/product-grid-item.css?v=181246065608690491931780656789" rel="stylesheet" type="text/css" media="all" /> 557 558
558<script> 559 document.documentElement.className = document.documentElement.className.replace('no-js', 'js'); 560 if (Shopify.designMode) { 561 document.documentElement.classList.add('shopify-design-mode'); 562 } 563 </script>
563 564 565 <!-- TrustBox script --> 566
566<script type="text/javascript" src="//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js" async></script>
566 567 <!-- End TrustBox script --> 568 569<!-- Hreflang tags â reciprocal to EU store 2 --> 570 571 <link rel="alternate" hreflang="en-US" href="https://store.emlid.com/products/reach-rs4-pro"> 572 573 <link rel="alternate" hreflang="x-default" href="https://store.emlid.com/products/reach-rs4-pro"> 574 <link rel="alternate" hreflang="en" href="https://store.emlid.com/products/reach-rs4-pro"> 575 576 577 <link rel="alternate" hreflang="fr" href="https://eu.store.emlid.com/fr/products/reach-rs4-pro"> 578 <link rel="alternate" hreflang="de" href="https://eu.store.emlid.com/de/products/reach-rs4-pro"> 579 <link rel="alternate" hreflang="es" href="https://eu.store.emlid.com/es/products/reach-rs4-pro"> 580 <link rel="alternate" hreflang="en-DE" href="https://eu.store.emlid.com/en-de/products/reach-rs4-pro"> 581 <link rel="alternate" hreflang="de-DE" href="https://eu.store.emlid.com/de-de/products/reach-rs4-pro"> 582 <link rel="alternate" hreflang="en-ES" href="https://eu.store.emlid.com/en-es/products/reach-rs4-pro"> 583 <link rel="alternate" hreflang="es-ES" href="https://eu.store.emlid.com/es-es/products/reach-rs4-pro"> 584 <link rel="alternate" hreflang="en-FR" href="https://eu.store.emlid.com/en-fr/products/reach-rs4-pro"> 585 <link rel="alternate" hreflang="fr-FR" href="https://eu.store.emlid.com/fr-fr/products/reach-rs4-pro"> 586 <link rel="alternate" hreflang="en-AT" href="https://eu.store.emlid.com/products/reach-rs4-pro"> 587 <link rel="alternate" hreflang="de-AT" href="https://eu.store.emlid.com/de/products/reach-rs4-pro"> 588 589 590 <!-- BEGIN app block: shopify://apps/simple-affiliate/blocks/sa-tracker/da6b7ee2-2e27-43e4-9184-0df8dc5be07a --> 591
592<script id="saets">(()=>{function _(){return new Promise((t,o)=>{window.Shopify.loadFeatures([{name:"consent-tracking-api",version:"0.1"}],async r=>{r?o(r):window.Shopify.customerPrivacy.userCanBeTracked()?t():document.addEventListener("trackingConsentAccepted",()=>t())})})}var U=4320*60;var s="Affiliate code",E="sacode",a="sa_signup";var i="saetc";var A="sa_email";var c=3600*24*7;function e(t){return new URLSearchParams(window.location?.search).get(t)}function p(t){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",t):t()}var n=e(E);if(n){let t={[s]:n};fetch(window.Shopify.routes.root+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:t})}).then()}_().then(()=>{n&&(document.cookie=`${i}=${n}_${new Date().getTime()};Path=/;Max-Age=${c}`)});var S=e(A);S&&p(()=>{let t=document.querySelector('form[action="/account/login"] input[type=email]');t&&(t.value=S)});var O=e(a);O!==null&&(document.documentElement.dataset.sasignup="true");})(); 593</script>
593 594 595<!-- END app block --><!-- BEGIN app block: shopify://apps/yotpo-product-reviews/blocks/settings/eb7dfd7d-db44-4334-bc49-c893b51b36cf --> 596 597 598
598<script type="text/javascript" src="https://cdn-widgetsrepository.yotpo.com/v1/loader/rj3LvwSKSqo2GwaYPyBXdRgh2Wn0PKtoNQJilpol?languageCode=en" async></script>
598 599 600 601 602 603<!-- END app block --><!-- BEGIN app block: shopify://apps/noindexly/blocks/gropulse-noindex/1ebb161d-2855-45b0-be8b-0de45dbb5725 --> 604 605 606 607 608 609 610 611 612 613 614<!-- END app block --><!-- BEGIN app block: shopify://apps/yotpo-product-reviews/blocks/reviews_tab/eb7dfd7d-db44-4334-bc49-c893b51b36cf --> 615 616 617 618<!-- END app block -->
618<script src="https://cdn.shopify.com/extensions/01a0c6e4-8955-7ed4-a674-0f4382a492f1/multistep-255/assets/global.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 618
618
619<script src="https://cdn.shopify.com/extensions/01a0cf4b-e17d-79a4-82bf-0d53cc57a8ae/simple-bundle-2-124/assets/io.min.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 619
619
620<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>
620 621<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
622<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: 78202306865,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "product"};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 622
622
623<script> 624 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 625</script>
vendor: 1 bytes, line 625
625
626<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}
626).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: 78202306865,storefrontBaseUrl: "https://store.emlid.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://store.emlid.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["16072cab","8450a54b"],webPixelsConfigList: [{"id":"2929688881","configuration":"{\"accountID\":\"78202306865\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"9cf281f576a3744d05c8685f9f7f3f72","type":"APP","apiClientId":10250649601,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
626,"dataSharingState":"unrestricted"},{"id":"2799796529","configuration":"{\"redditPixelId\":\"a2_fb3dot1cgsy4\",\"dataSharingType\":\"advanced\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"27a6dc1e95874487d57379b5c016869f","type":"APP","apiClientId":304258285569,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2519138609","configuration":"{\"accountID\":\"123\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"1095f19384e963940b8ed3282af77664","type":"APP","apiClientId":5394113,"privacyPurposes":["ANALYTICS"],"capabilities":["advanced_dom_events"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"2499772721","configuration":"{\"shop\":\"emlid-store.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":"716964145","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-2L30ZMM7Q4\\\",\\\"G-60Q7CJGK91\\\",\\\"GT-WPDLDHMX\\\"],\\\"target_country\\\":\\\"US\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-2L30ZMM7Q4\\\",\\\"AW-11111719334\\\/npqcCO2Sl8oaEKbDvbIp\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":\\\"G-2L30ZMM7Q4\\\"},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-2L30ZMM7Q4\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-2L30ZMM7Q4\\\",\\\"MC-N8SW4DCRGM\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-2L30ZMM7Q4\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-2L30ZMM7Q4\\\",\\\"AW-11111719334\\\/T64LCPCSl8oaEKbDvbIp\\\",\\\"MC-N8SW4DCRGM\\\",\\\"AW-11111719334\\\/qbpzCKynv5EYEKbDvbIp\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-2L30ZMM7Q4\\\",\\\"MC-N8SW4DCRGM\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-2L30ZMM7Q4\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":\\\"G-2L30ZMM7Q4\\\"},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-2L30ZMM7Q4\\\",\\\"AW-11111719334\\\/-FR3COqSl8oaEKbDvbIp\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-2L30ZMM7Q4\\\"}],\\\"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":"326926641","configuration":"{\"pixel_id\":\"2900577193364309\",\"pixel_type\":\"facebook_pixel\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"117047601","configuration":"{\"sh_shop\":\"emlid-store.myshopify.com\",\"sh_shop_id\":\"78202306865\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"913af02b02ba3bd1e6022c45db467386","type":"APP","apiClientId":2395080,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
626,"dataSharingState":"unrestricted"},{"id":"118456625","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"4","type":"CUSTOM","privacyPurposes":[],"name":"piwik"},{"id":"126517553","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"2","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Convert Revenue Tracking"},{"id":"209125681","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"2","type":"CUSTOM","privacyPurposes":[],"name":"GTM pixel 21.04.2026"},{"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":"Emlid Store US","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"emlid-store.myshopify.com","countryCode":"HU","storefrontUrl":"https:\/\/store.emlid.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[{"price":{"amount":4599.0,"currencyCode":"USD"},"product":{"title":"Reach RS4 Pro","vendor":"Emlid Store US","id":"10409911648561","untranslatedTitle":"Reach RS4 Pro","url":"\/products\/reach-rs4-pro","type":""},"id":"55594169827633","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.663.webp?v=1759528847"},"sku":"RCH402","title":"Free year","untranslatedTitle":"Free year"},{"price":{"amount":5798.0,"currencyCode":"USD"},"product":{"title":"Reach RS4 Pro","vendor":"Emlid Store US","id":"10409911648561","untranslatedTitle":"Reach RS4 Pro","url":"\/products\/reach-rs4-pro","type":""},"id":"55594169860401","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.663.webp?v=1759528847"},"sku":null,"title":"+3 years of corrections","untranslatedTitle":"+3 years of corrections"}],"products":[{"id":"10409911648561","handle":"reach-rs4-pro","isCollective":null,"title":"Reach RS4 Pro","type":null,"untranslatedTitle":"Reach RS4 Pro","url":"\/products\/reach-rs4-pro","vendor":"Emlid Store US","remoteShopId":null,"variants":[{"id":"55594169827633","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.663.webp?v=1759528847"},"price":{"amount":4599.0,"currencyCode":"USD"},"sku":"RCH402","title":"Free year","untranslatedTitle":"Free year"},{"id":"55594169860401","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.663.webp?v=1759528847"},"price":{"amount":5798.0,"currencyCode":"USD"},"sku":null,"title":"+3 years of corrections","untranslatedTitle":"+3 years of corrections"}]},{"id":"8978451923249","handle":"survey-pole","isCollective":null,"title":"Survey Pole with a smartphone mount","type":null,"untranslatedTitle":"Survey Pole with a smartphone mount","url":"\/products\/survey-pole","vendor":"Emlid Store US","remoteShopId":null,"variants":[{"id":"47253694841137","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/Pole-Mount-2.webp?v=1761055076"},"price":{"amount":349.0,"currencyCode":"USD"},"sku":"SPL102","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"9822385111345","handle":"seco-bipod","isCollective":null,"title":"Seco bipod","type":null,"untranslatedTitle":"Seco bipod","url":"\/products\/seco-bipod","vendor":"Emlid Store US","remoteShopId":null,"variants":[{"id":"49485038911793","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/p1219593.webp?v=1718364898"},"price":{"amount":189.0,"currencyCode":"USD"},"sku":"5217-40-RED","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"9819263533361","handle":"seco-aluminium-tripod","isCollective":null,"title":"Seco aluminium tripod","type":null,"untranslatedTitle":"Seco aluminium tripod","url":"\/products\/seco-aluminium-tripod","vendor":"Emlid Store US","remoteShopId":null,"variants":[{"id":"49480471478577","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/P1219500-L1.webp?v=1721741345"},"price":{"amount":109.0,"currencyCode":"USD"},"sku":"5301-25-BLK-L","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"9819413446961","handle":"seco-wooden-tripod","isCollective":null,"title":"Seco wooden tripod","type":null,"untranslatedTitle":"Seco wooden tripod","url":"\/products\/seco-wooden-tripod","vendor":"Emlid Store US","remoteShopId":null,"variants":[{"id":"49480624144689","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/P1219555-L1.webp?v=1721741564"},"price":{"amount":279.0,"currencyCode":"USD"},"sku":"5220-13-BLK-L","title":"Default Title","untranslatedTitle":"Default Title"}]}
626,{"id":"10044209234225","handle":"base-and-rover-accessories-kit","isCollective":null,"title":"Base and Rover accessories kit","type":null,"untranslatedTitle":"Base and Rover accessories kit","url":"\/products\/base-and-rover-accessories-kit","vendor":"Emlid Store US","remoteShopId":null,"variants":[{"id":"50155959779633","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/Base-and-Rover-accessories-kit_Main-render.webp?v=1778504142"},"price":{"amount":1294.0,"currencyCode":"USD"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"10044167979313","handle":"rover-accessories-kit","isCollective":null,"title":"Rover accessories kit","type":null,"untranslatedTitle":"Rover accessories kit","url":"\/products\/rover-accessories-kit","vendor":"Emlid Store US","remoteShopId":null,"variants":[{"id":"50155843977521","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/2-P1459554.webp?v=1732880518"},"price":{"amount":538.0,"currencyCode":"USD"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"10681460687153","handle":"emlid-corrections","isCollective":null,"title":"Emlid Corrections","type":"Software","untranslatedTitle":"Emlid Corrections","url":"\/products\/emlid-corrections","vendor":"Emlid Store US","remoteShopId":null,"variants":[{"id":"54337106084145","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/3_year_license_1x_d3521735-7dad-44c0-a236-57b9c99784ab.webp?v=1781802792"},"price":{"amount":1199.0,"currencyCode":"USD"},"sku":"CORS-3","title":"3-year ($399\/year)","untranslatedTitle":"3-year ($399\/year)"}]},{"id":"10408368505137","handle":"reach-rs4","isCollective":null,"title":"Reach RS4","type":null,"untranslatedTitle":"Reach RS4","url":"\/products\/reach-rs4","vendor":"Emlid Store US","remoteShopId":null,"variants":[{"id":"55594186866993","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.643_1b191a1e-c83d-42f9-8597-7c7b7119964c.webp?v=1759140485"},"price":{"amount":3899.0,"currencyCode":"USD"},"sku":"RCH401-I","title":"Free year","untranslatedTitle":"Free year"}]},{"id":"10392181997873","handle":"reachrx2","isCollective":null,"title":"Reach RX2","type":null,"untranslatedTitle":"Reach RX2","url":"\/products\/reachrx2","vendor":"Emlid Store US","remoteShopId":null,"variants":[{"id":"55593981968689","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/Store_RX2-render2.webp?v=1757341977"},"price":{"amount":2399.0,"currencyCode":"USD"},"sku":"RCH303-I","title":"Free year","untranslatedTitle":"Free year"}]},{"id":"8978452250929","handle":"reach-rs3","isCollective":null,"title":"Reach RS3","type":null,"untranslatedTitle":"Reach RS3","url":"\/products\/reach-rs3","vendor":"Emlid Store US","remoteShopId":null,"variants":[{"id":"55594149937457","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS3-Store-4-scaled.webp?v=1695032132"},"price":{"amount":2999.0,"currencyCode":"USD"},"sku":"RCH205-I","title":"Free year","untranslatedTitle":"Free year"}]},{"id":"8978448548145","handle":"reachm2","isCollective":null,"title":"Reach M2","type":null,"untranslatedTitle":"Reach M2","url":"\/products\/reachm2","vendor":"Emlid Store US","remoteShopId":null,"variants":[{"id":"47253684519217","image":{"src":"\/\/store.emlid.com\/cdn\/shop\/files\/ReachM2-1b-1.webp?v=1773241567"},"price":{"amount":749.0,"currencyCode":"USD"},"sku":"RCH103","title":"Default Title","untranslatedTitle":"Default Title"}]}],"purchasingCompany":null},},"https://store.emlid.com/cdn","c8540278we853e1abpb62b2c4amde256306",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"176026124593","themeStoreId":"887","themePublished":"true","eventMetadataId":"7389e922-0c73-48ac-9d5f-4d4b11729329","pageType":"product","resourceId":"10409911648561","shopId":"78202306865","storefrontBaseUrl":"https:\/\/store.emlid.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\",{}],[\"product_viewed\",{\"productVariant\":{\"price\":{\"amount\":4599.0,\"currencyCode\":\"USD\"},\"product\":{\"title\":\"Reach RS4 Pro\",\"vendor\":\"Emlid Store US\",\"id\":\"10409911648561\",\"untranslatedTitle\":\"Reach RS4 Pro\",\"url\":\"\/products\/reach-rs4-pro\",\"type\":\"\"},\"id\":\"55594169827633\",\"image\":{\"src\":\"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.663.webp?v=1759528847\"},\"sku\":\"RCH402\",\"title\":\"Free year\",\"untranslatedTitle\":\"Free year\"}}]]"});})();</script>
626<script> 627 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 628 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 629 window.ShopifyAnalytics.meta.currency = 'USD'; 630 var meta = {"product":{"id":10409911648561,"gid":"gid:\/\/shopify\/Product\/10409911648561","vendor":"Emlid Store US","type":"","handle":"reach-rs4-pro","variants":[{"id":55594169827633,"price":459900,"name":"Reach RS4 Pro - Free year","public_title":"Free year","sku":"RCH402"},{"id":55594169860401,"price":579800,"name":"Reach RS4 Pro - +3 years of corrections","public_title":"+3 years of corrections","sku":null}],"remote":false},"page":{"pageType":"product","resourceType":"product","resourceId":10409911648561,"requestId":"fbbae800-8b7f-4f30-b87a-39043512edaf-1790240471"}}; 631 for (var attr in meta) { 632 window.ShopifyAnalytics.meta[attr] = meta[attr]; 633 } 634</script>
vendor: 1 bytes, line 634
634
635<script class="analytics"> 636 (function () { 637 var customDocumentWrite = function(content) { 638 var jquery = null; 639 640 if (window.jQuery) { 641 jquery = window.jQuery; 642 } else if (window.Checkout && window.Checkout.$) { 643 jquery = window.Checkout.$; 644 } 645 646 if (jquery) { 647 jquery('body').append(content); 648 } 649 }; 650 651 var hasLoggedConversion = function(token) { 652 if (token) { 653 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 654 } 655 return false; 656 } 657 658 var setCookieIfConversion = function(token) { 659 if (token) { 660 var twoMonthsFromNow = new Date(Date.now()); 661 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 662 663 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 664 } 665 } 666 667 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 668 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 669 if (trekkie.integrations) { 670 return; 671 } 672 trekkie.methods = [ 673 'identify', 674 'page', 675 'ready', 676 'track', 677 'trackForm', 678 'trackLink' 679 ]; 680 trekkie.factory = function(method) { 681 return function() { 682 var args = Array.prototype.slice.call(arguments); 683 args.unshift(method); 684 trekkie.push(args); 685 if (method == 'track' || method == 'page') { 686 try { 687 if (window.__TREKKIE_SHIM_QUEUE == null) { 688 window.__TREKKIE_SHIM_QUEUE = []; 689 } 690 window.__TREKKIE_SHIM_QUEUE.push({ 691 from: 'trekkie-stub', 692 method: method, 693 args: args.slice(1) 694 }); 695 } catch (e) { 696 // no-op 697 } 698 } 699 return trekkie; 700 }; 701 }; 702 for (var i = 0; i < trekkie.methods.length; i++) { 703 var key = trekkie.methods[i]; 704 trekkie[key] = trekkie.factory(key); 705 } 706 trekkie.load = function(config) { 707 trekkie.config = config || {}; 708 trekkie.config.initialDocumentCookie = document.cookie; 709 var first = document.getElementsByTagName('script')[0]; 710var script = document.createElement('script'); 711script.type = 'text/javascript'; 712script.onerror = function(e) { 713 var scriptFallback = document.createElement('script'); 714 scriptFallback.type = 'text/javascript'; 715 scriptFallback.onerror = function(error) { 716 var Monorail = { 717 produce: function produce(monorailDomain, schemaId, payload) { 718 var currentMs = new Date().getTime(); 719 var event = { 720 schema_id: schemaId, 721 payload: payload, 722 metadata: { 723 event_created_at_ms: currentMs, 724 event_sent_at_ms: currentMs 725 } 726 }; 727 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 728 }, 729 sendRequest: function sendRequest(endpointUrl, payload) { 730 // Try the sendBeacon API 731 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 732 var blobData = new window.Blob([payload], { 733 type: 'text/plain' 734 }); 735 736 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 737 return true; 738 } // sendBeacon was not successful 739 740 } // XHR beacon 741 742 var xhr = new XMLHttpRequest(); 743 744 try { 745 xhr.open('POST', endpointUrl); 746 xhr.setRequestHeader('Content-Type', 'text/plain'); 747 xhr.send(payload); 748 } catch (e) { 749 console.log(e); 750 } 751 752 return false; 753 }, 754 isIos12: function isIos12() { 755 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 756 } 757 }; 758 Monorail.produce('monorail-edge.shopifysvc.com', 759 'trekkie_storefront_load_errors/1.1', 760 {shop_id: 78202306865, 761 theme_id: 176026124593, 762 app_name: "storefront", 763 context_url: window.location.href, 764 source_url: "//store.emlid.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js"}); 765 766 }; 767 scriptFallback.async = true; 768 scriptFallback.src = '//store.emlid.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js'; 769 first.parentNode.insertBefore(scriptFallback, first); 770}; 771script.async = true; 772script.src = '//store.emlid.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js'; 773first.parentNode.insertBefore(script, first); 774 775 }; 776 trekkie.load( 777 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":78202306865,"isMerchantRequest":null,"themeId":176026124593,"themeCityHash":"18111320525484886814","contentLanguage":"en","currency":"USD","eventMetadataId":"7389e922-0c73-48ac-9d5f-4d4b11729329"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 778 ); 779 780 var loaded = false;
781 trekkie.ready(function() { 782 if (loaded) return; 783 loaded = true; 784 785 window.ShopifyAnalytics.lib = window.trekkie; 786 787 var originalDocumentWrite = document.write; 788 document.write = customDocumentWrite; 789 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 790 document.write = originalDocumentWrite; 791 792 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 793 var token = match? match[1]: undefined; 794 if (!hasLoggedConversion(token)) { 795 setCookieIfConversion(token); 796 window.ShopifyAnalytics.lib.track("Viewed Product",{"currency":"USD","variantId":55594169827633,"productId":10409911648561,"productGid":"gid:\/\/shopify\/Product\/10409911648561","name":"Reach RS4 Pro - Free year","price":"4599.00","sku":"RCH402","brand":"Emlid Store US","variant":"Free year","category":"","nonInteraction":true,"remote":false,"available":true},undefined,undefined,{"shopifyEmitted":true}); 797 } 798 }); 799 800 window.ShopifyAnalytics.lib.page(null,{"pageType":"product","resourceType":"product","resourceId":10409911648561,"requestId":"fbbae800-8b7f-4f30-b87a-39043512edaf-1790240471","shopifyEmitted":true}); 801 802 var eventsListenerScript = document.createElement('script'); 803 eventsListenerScript.async = true; 804 eventsListenerScript.src = "//store.emlid.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 805 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 806})();</script>
vendor: 1 bytes, line 806
806
807<script 808 defer 809 src="https://store.emlid.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 810 data-application="storefront-renderer" 811 data-shop-id="78202306865" 812 data-render-region="gcp-us-central1" 813 data-page-type="product" 814 data-theme-instance-id="176026124593" 815 data-theme-name="Dawn" 816 data-theme-version="10.0.0" 817 data-monorail-region="shop_domain" 818 data-resource-timing-sampling-rate="10" 819 data-shs="true" 820 data-shs-beacon="true" 821 data-shs-export-with-fetch="true" 822 data-shs-logs-sample-rate="1" 823 data-shs-beacon-endpoint="https://store.emlid.com/api/collect" 824></script>
824 825<meta name="shopify-y" content="c2203afd-7113-444a-b198-0c4e56df1f64" data-expiration="1821798072000"><meta name="shopify-s" content="654b19e2-96b6-449a-af79-35f90c66b424" data-expiration="1790242272000"><meta name="new-cookie-storage-activated" content="t"> 826</head> 827 828 <body 829 class="template--product gradient animate--hover-3d-lift flex f-d-column" 830 data-lazy-load 831 data-set-css-var=' 832 [ 833 { 834 "selector": ".radiant--header", 835 "get": "height", 836 "var": "--header-height", 837 "updateOnResize": true 838 }, 839 { 840 "selector": ".radiant--header .top-area", 841 "get": "height", 842 "var": "--header-top-bar-height", 843 "updateOnResize": true 844 } 845 ] 846 ' 847 > 848 <a class="skip-to-content-link button visually-hidden" href="#MainContent"> 849 Skip to content 850 </a><div id="shopify-section-black-friday-banner" class="shopify-section"> 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880<!-- START BLACK FRIDAY RUN LINE and BANNER --> 881 882<div class="bf__banner"> 883 <div class="bf__inner"> 884 <!-- BF item 1 --> 885 <div class="bf__item"> 886 <div class=""> 887 <span class="bf__crossline"></span> 888 <span>1 year of RTK corrections included</span> 889 </div> 890 <div class=""> 891 <span></span> 892 </div> 893 <div class=""> 894 <span></span> 895 </div> 896 </div> 897 898 </div> 899</div> 900 901 902 903
904<script> 905 document.addEventListener('DOMContentLoaded', function () { 906 const banner = document.querySelector('.bf__banner'); 907 if (!banner) return; 908 909 const inner = banner.querySelector('.bf__inner'); 910 if (!inner) return; 911 912 const originalHTML = inner.innerHTML.trim(); 913 const targetUrl = "https:\/\/store.emlid.com\/products\/emlid-corrections?variant=54337106084145"; 914 915 let track1, track2; 916 let trackWidth = 0; 917 let x1 = 0; 918 let x2 = 0; 919 const speed = 60; 920 let lastTime = null; 921 let animFrameId = null; 922 923 function buildTracks() { 924 inner.innerHTML = ''; 925 926 track1 = document.createElement('div'); 927 track1.className = 'bf__track'; 928 track1.innerHTML = originalHTML; 929 inner.appendChild(track1); 930 931 const bannerWidth = banner.offsetWidth; 932 let safety = 0; 933 while (track1.offsetWidth < bannerWidth && safety < 10) { 934 track1.innerHTML += originalHTML; 935 safety++; 936 } 937 938 track2 = track1.cloneNode(true); 939 inner.appendChild(track2); 940 941 trackWidth = track1.offsetWidth; 942 943 x1 = 0; 944 x2 = 0; 945 946 track1.style.transform = 'translateX(0px)'; 947 track2.style.transform = 'translateX(0px)'; 948 949 lastTime = null; 950 } 951 952 function animate(timestamp) { 953 if (!lastTime) lastTime = timestamp; 954 const dt = (timestamp - lastTime) / 1000; 955 lastTime = timestamp; 956 957 const dx = speed * dt; 958 959 x1 -= dx; 960 x2 -= dx; 961 962 let X1 = x1; 963 let X2 = trackWidth + x2; 964 965 if (X1 + trackWidth <= 0) { 966 X1 = X2 + trackWidth; 967 x1 = X1; 968 } 969 970 X1 = x1; 971 X2 = trackWidth + x2; 972 973 if (X2 + trackWidth <= 0) { 974 X2 = X1 + trackWidth; 975 x2 = X2 - trackWidth; 976 } 977 978 track1.style.transform = 'translateX(' + x1 + 'px)'; 979 track2.style.transform = 'translateX(' + x2 + 'px)'; 980 981 animFrameId = requestAnimationFrame(animate); 982 } 983 984 buildTracks(); 985 requestAnimationFrame(animate); 986 987 window.addEventListener('resize', function () { 988 if (animFrameId) { 989 cancelAnimationFrame(animFrameId); 990 } 991 buildTracks(); 992 requestAnimationFrame(animate); 993 }); 994 995 banner.addEventListener('click', function () { 996 if (targetUrl) { 997 window.open(targetUrl, '_blank'); 998 } 999 }); 1000 }); 1001</script>
1001 1002 1003<style> 1004 .bf__banner { 1005 background-color: #4e18ff; 1006 color: #fafafa; 1007 font-size: 14px; 1008 font-style: normal; 1009 font-weight: 550; 1010 line-height: 130%; 1011 text-transform: uppercase; 1012 width: 100%; 1013 position: relative; 1014 z-index: 4; 1015 padding: 14px 0; 1016 overflow: hidden; 1017 cursor: pointer; 1018 font-family: 'Geist Mono'; 1019} 1020 .bf__banner .bf__inner { 1021 display: flex; 1022 align-items: center; 1023 flex-wrap: nowrap; 1024 white-space: nowrap; 1025 will-change: transform; 1026 overflow: hidden; 1027 height: 100%; 1028} 1029 .bf__banner .bf__track { 1030 display: flex; 1031 align-items: center; 1032 flex-shrink: 0; 1033 white-space: nowrap; 1034} 1035.bf__banner .bf__item { 1036 display: flex; 1037 align-items: center; 1038 gap: 12px; 1039 margin-right: 60px; 1040} 1041 1042.bf__banner .bf__item span { 1043 margin-right: 0; 1044} 1045 1046.bf__banner .bf__item div { 1047 display: flex; 1048 align-items: center; 1049 gap: 12px; 1050} 1051 .bf__banner .bf__sep { 1052 display: flex; 1053 margin-right: 60px; 1054} 1055 .bf__banner .bf__crossline { 1056 position: relative; 1057 display: inline-block; 1058 text-decoration: none; 1059} 1060 .bf__banner .bf__crossline::after { 1061 content: ""; 1062 position: absolute; 1063 left: -0.1em; 1064 right: -0.1em; 1065 top: 44%; 1066 height: 4px; 1067 background-color: currentColor; 1068 transform-origin: center; 1069 transform: rotate(-1.2deg); 1070 pointer-events: none; 1071 border: 1px solid #4e18ff; 1072} 1073</style> 1074 1075<style> 1076 .cw__banner { 1077 position: fixed; 1078 bottom: 36px; 1079 right: 36px; 1080 z-index: 5; 1081 background-image: url("https://web-emlid.s3.eu-central-1.amazonaws.com/cyber_week_25/banner+for+store.emlid.com.webp"); 1082 background-repeat: no-repeat; 1083 background-size: cover; 1084 max-width: 288px; 1085 height: 356px; 1086} 1087 @media (max-width: 465px) { 1088 .cw__banner { 1089 bottom: 48px; 1090 left: 50%; 1091 right: auto; 1092 transform: translateX(-50%); 1093 width: calc(100% - 32px); 1094 max-width: 288px; 1095 } 1096} 1097.cw__banner .cw__banner-close { 1098 position: absolute; 1099 right: 10px; 1100 top: 0px; 1101} 1102.cw__banner-close a { 1103 display: block; 1104 padding: 10px; 1105 cursor: pointer; 1106} 1107 .cw__banner:hover .cw__title { 1108 filter: drop-shadow(0 0 2px rgba(89, 77, 255, 0.70)) drop-shadow(0 0 7.5px rgba(80, 77, 255, 0.50)) drop-shadow(0 0 15px rgba(98, 77, 255, 0.50)); 1109} 1110 .cw__banner:hover .btn { 1111 background-color: #4e18ff; 1112 border: #4e18ff; 1113} 1114 .cw__banner:hover .cw__imges { 1115 filter: drop-shadow(0 0 2px rgba(89, 77, 255, 0.70)) drop-shadow(0 0 7.5px rgba(80, 77, 255, 0.50)) drop-shadow(0 0 15px rgba(98, 77, 255, 0.50)); 1116} 1117 .cw__banner .cw__title { 1118 display: flex; 1119 flex-direction: column; 1120} 1121 .cw__banner .cw__title .cw__top-title { 1122 font-size: 29px; 1123 font-weight: 500; 1124 line-height: 105%; 1125 font-feature-settings: 'ss01' on, 'ss03' on; 1126 margin-bottom: 8px; 1127} 1128 .cw__banner .cw__title .cw__bot-title { 1129 font-size: 20px; 1130 font-weight: 450; 1131 line-height: 105%; 1132 font-feature-settings: 'ss01' on, 'ss03' on; 1133} 1134 .cw__banner .cw__inner { 1135 color: #fafafa; 1136 padding: 32px 32px; 1137 text-align: center; 1138 display: flex; 1139 flex-direction: column; 1140 justify-content: space-between; 1141 height: 100%; 1142} 1143.btn__store_buy--dark, a.btn__store_buy--dark { 1144 display: inline-flex; 1145 padding: 12px 24px; 1146 justify-content: center; 1147 align-items: center; 1148 gap: 16px; 1149 flex-shrink: 0; 1150 font-size: 13px; 1151 font-style: normal; 1152 font-weight: 570; 1153 line-height: 130%; 1154 letter-spacing: -0.13px; 1155 text-transform: uppercase; 1156 text-decoration: none; 1157 color: var(--white); 1158 border-color: var(--white); 1159 border: 2px solid; 1160 height: 41px; 1161} 1162.btn__store_buy--dark:hover, a.btn__store_buy--dark:hover { 1163 background: var(--accent); 1164 border-color: var(--accent); 1165 text-decoration: none; 1166 color: var(--white); 1167 opacity: 1; 1168} 1169.bf__banner .bf__crossline:empty::after { 1170 content: none; 1171 display: none; 1172} 1173</style> 1174
1175<script> 1176 document.addEventListener('DOMContentLoaded', function () { 1177 const closeBtn = document.querySelector('.cw__banner-close a'); 1178 1179 if (closeBtn) { 1180 closeBtn.addEventListener('click', function (e) { 1181 e.preventDefault(); 1182 1183 const banner = document.querySelector('.cw__banner'); 1184 if (banner) { 1185 banner.style.display = 'none'; 1186 } 1187 }); 1188 } 1189 }); 1190</script>
1190 1191 1192<!-- END BLACK FRIDAY RUN LINE and BANNER --> 1193 1194 1195</div> 1196 <div id="shopify-section-static-text-banner" class="shopify-section"> 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217</div> 1218 <div id="shopify-section-dynamic-text-banner" class="shopify-section"> 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242</div> 1243 <div id="shopify-section-radiant--header" class="shopify-section"><header class="hdr" data-hdr> 1244 <style> 1245 :root{ 1246 --hdr-h-desktop: 58px; 1247 --hdr-h-mobile: 55px; 1248 --hdr-container: 1440px; 1249 --hdr-pad-d: 80px; 1250 --hdr-pad-t: 26px; 1251 --hdr-pad-m: 12px; 1252 --hdr-border: #e7e7e7; 1253 --hdr-dd-border: #e9e9e9; 1254 --hdr-text: #151515; 1255 --hdr-shadow: 0 18px 40px rgba(0,0,0,.10); 1256 --hdr-tt: 180ms; 1257 --hdr-ease: ease; 1258 } 1259 1260 *{ box-sizing:border-box; } 1261 a{ color:inherit; text-decoration:none; } 1262 button{ font:inherit; color:inherit; } 1263 img{ display:block; } 1264 1265 .hdr{ 1266 position: fixed; 1267 top:0; 1268 left:0; 1269 right:0; 1270 width:100%; 1271 z-index: 50; 1272 background:#FAFAFA; 1273 border-bottom:1px solid var(--hdr-border); 1274 } 1275 1276 body{ 1277 padding-top: var(--hdr-h-desktop); 1278 } 1279 @media (max-width:1200px){ 1280 body{ padding-top: var(--hdr-h-mobile); } 1281 } 1282 1283 .hdr__container{ 1284 max-width: 1264px; 1285 width: 100%; 1286 margin:0 auto; 1287 padding-inline: 9px; 1288 } 1289 @media (max-width:991px){ 1290 .hdr__container{ padding-inline: 32px; } 1291 } 1292 @media (max-width:768px){ 1293 .hdr__container{ padding-inline: 16px; } 1294 } 1295 @media (max-width:1200px){ 1296 .hdr__container{ background:#FAFAFA; } 1297 } 1298 1299 .hdr-ic{ width:24px; height:24px; display:block; } 1300 .hdr-ic--globe{ width:24px; height:24px; } 1301 .hdr-action.geoip-popup-trigger svg, 1302 .mfooter__lang.geoip-popup-trigger svg{ 1303 width:24px; 1304 height:24px; 1305 } 1306 1307 .hdr__desktop{ 1308 display:block; 1309 position: relative; 1310 z-index: 2; 1311 } 1312 .hdr__mobile{ 1313 display:none; 1314 position: relative; 1315 z-index: 2; 1316 } 1317 1318 .hdr__row{ 1319 height: var(--hdr-h-desktop); 1320 display:grid; 1321 grid-template-columns: auto minmax(0, 1fr) auto; 1322 align-items:center; 1323 gap: 100px; 1324 } 1325 @media (max-width:1280px){ 1326 .hdr__row{ gap: 60px; } 1327 } 1328 @media (max-width:1200px){ 1329 .hdr__row{ gap: 24px; } 1330 } 1331 1332 .hdr__logo{ 1333 display:block; 1334 flex-shrink: 0; 1335 min-width: 92px; 1336 color: var(--hdr-text); 1337 } 1338 .hdr__logo:hover{ color:#707070; opacity:1; } 1339 .hdr__logo:active{ color:#9E9E9E; } 1340 .hdr__logo svg{ 1341 width:92px; 1342 height:14px; 1343 display:block; 1344 } 1345 1346 .hdr-nav{ 1347 display:flex; 1348 align-items:center; 1349 gap: 36px; 1350 margin:0; padding:0; 1351 list-style:none; 1352 white-space: nowrap; 1353 } 1354 @media (max-width:1280px){ 1355 .hdr-nav{ gap: 28px; } 1356 } 1357 @media (max-width:1200px){ 1358 .hdr-nav{ gap: 16px; } 1359 } 1360 .hdr-nav__item{ 1361 position:relative; 1362 height: var(--hdr-h-desktop); 1363 display:flex; 1364 align-items:center; 1365 } 1366 .hdr-nav__link{ 1367 display:inline-flex; 1368 align-items:center; 1369 gap: 8px; 1370 padding: 10px 0; 1371 font-family: "Geist Mono", monospace; 1372 font-size: 14px; 1373 font-weight: 600; 1374 line-height: 1.3; 1375 text-align: right; 1376 font-feature-settings: 'ss01' on, 'ss09' on; 1377 text-transform: uppercase; 1378 color: var(--hdr-text); 1379 } 1380 .hdr-nav__link:hover{ opacity:.7; } 1381 .hdr-nav__link:active{ color:#9E9E9E; } 1382 .hdr-nav__link:focus-visible{ 1383 outline: 2px solid rgba(0,0,0,.25); 1384 outline-offset: 4px; 1385 border-radius: 6px; 1386 } 1387 .hdr-nav__chev{ 1388 width:11px; height:7px; 1389 transition: transform 300ms cubic-bezier(0.4, 0, 1, 1); 1390 } 1391 .hdr-nav__item.is-open .hdr-nav__chev{ transform: rotate(180deg); } 1392 1393 .hdr-dd{ 1394 position:absolute; 1395 top: calc(var(--hdr-h-desktop) - 7px); 1396 left: 0; 1397 width: max-content; 1398 min-width: 162px; 1399 background:#FAFAFA; 1400 border: 1px solid var(--hdr-dd-border); 1401 padding: 8px 0; 1402 opacity:0; 1403 visibility:hidden; 1404 transform: translateY(-8px); 1405 transition: opacity var(--hdr-tt) var(--hdr-ease), 1406 transform var(--hdr-tt) var(--hdr-ease), 1407 visibility var(--hdr-tt) var(--hdr-ease); 1408 } 1409 .hdr-nav__item.is-open .hdr-dd{ 1410 opacity:1; 1411 visibility:visible; 1412 transform: translateY(0); 1413 } 1414 .hdr-dd__list{ list-style:none; margin:0; padding:0; } 1415 .hdr-dd__link{ 1416 display:block; 1417 padding: 8px 20px; 1418 font-family: "Geist Mono", monospace; 1419 font-size:14px; 1420 font-weight: 600; 1421 line-height:1.3; 1422 text-align:left; 1423 font-feature-settings: 'ss01' on, 'ss09' on; 1424 text-transform: uppercase; 1425 color: var(--hdr-text); 1426 } 1427 .hdr-dd__link:hover{ color:#707070; background:transparent; }
1428 .hdr-dd__link:active{ color:#9E9E9E; } 1429 .hdr-dd__link:focus-visible{ 1430 outline: 2px solid rgba(0,0,0,.25); 1431 outline-offset: -2px; 1432 color:#707070; 1433 background:transparent; 1434 } 1435 1436 .hdr__actions{ 1437 display:flex; 1438 align-items:center; 1439 justify-content:flex-end; 1440 gap: 15px; 1441 } 1442 .hdr-action{ 1443 position:relative; 1444 display:inline-flex; 1445 align-items:center; 1446 justify-content:center; 1447 gap: 8px; 1448 padding: 4px; 1449 border:0; 1450 background:transparent; 1451 cursor:pointer; 1452 color: var(--hdr-text); 1453 border-radius: 10px; 1454 transition: none; 1455 } 1456 .hdr-action svg{ transition: none; } 1457 .hdr-action:hover{ 1458 color:#707070; 1459 opacity:1; 1460 } 1461 .hdr-action:active{ 1462 color:#9E9E9E; 1463 } 1464 .hdr-action:focus-visible{ 1465 outline: 2px solid rgba(0,0,0,.35); 1466 outline-offset: 2px; 1467 } 1468 .hdr-action__text{ 1469 font-size:12px; 1470 letter-spacing:.03em; 1471 text-transform: uppercase; 1472 } 1473 .hdr-action.geoip-popup-trigger, 1474 .mfooter__lang.geoip-popup-trigger{ 1475 gap: 8px; 1476 font-family: "Geist Mono", monospace; 1477 font-size: 13px; 1478 font-weight: 600; 1479 line-height: 1.3; 1480 text-align: right; 1481 font-feature-settings: 'ss01' on, 'ss09' on; 1482 text-transform: uppercase; 1483 } 1484 .hdr-action.geoip-popup-trigger{ padding:0; } 1485 .hdr-action.geoip-popup-trigger .hdr-action__text, 1486 .mfooter__lang.geoip-popup-trigger .hdr-action__text{ 1487 font-size: 13px; 1488 font-weight: 600; 1489 line-height: 1.3; 1490 letter-spacing: 0; 1491 font-feature-settings: 'ss01' on, 'ss09' on; 1492 text-transform: uppercase; 1493 } 1494 .hdr-cart-badge{ 1495 position:absolute; 1496 top: -3px; 1497 right: -6px; 1498 font-size:10px; 1499 font-weight: 700; 1500 line-height:1; 1501 width: 16px; 1502 height: 16px; 1503 padding: 0; 1504 border-radius: 50%; 1505 display:flex; 1506 align-items:center; 1507 justify-content:center; 1508 border: 1px solid rgba(0,0,0,.25); 1509 background:#4e18ff; 1510 color:#fff; 1511 } 1512 @media (min-width:1201px){ 1513 .hdr-cart-badge{ 1514 top: -1px; 1515 right: -3px; 1516 } 1517 } 1518 1519 @media (max-width:1200px){ 1520 .hdr__desktop{ display:none; } 1521 .hdr__mobile{ display:block; } 1522 .hdr-action{ padding: 0px; } 1523 1524 .mrow{ 1525 height: var(--hdr-h-mobile); 1526 display:flex; 1527 align-items:center; 1528 } 1529 1530 .mrow__burger{ 1531 display:inline-flex; 1532 align-items:center; 1533 justify-content:start; 1534 border:0; 1535 background:transparent; 1536 cursor:pointer; 1537 } 1538 .mrow__burger:focus-visible{ 1539 outline: 2px solid rgba(0,0,0,.35); 1540 outline-offset: 2px; 1541 } 1542 1543 .burger{ 1544 position: relative; 1545 width: 18px; 1546 height: 12px; 1547 display:block; 1548 } 1549 .burger__line{ 1550 position:absolute; 1551 left:0; 1552 width:100%; 1553 height:2px; 1554 background: var(--hdr-text); 1555 transform-origin: center; 1556 transition: 1557 transform var(--hdr-tt) var(--hdr-ease), 1558 top var(--hdr-tt) var(--hdr-ease), 1559 opacity var(--hdr-tt) var(--hdr-ease); 1560 } 1561 .burger__line--1{ top:0; } 1562 .burger__line--2{ top:5px; } 1563 .burger__line--3{ top:10px; } 1564 1565 .mrow__burger.is-active .burger__line--1{ top: 5px; transform: rotate(45deg); } 1566 .mrow__burger.is-active .burger__line--2{ opacity: 0; } 1567 .mrow__burger.is-active .burger__line--3{ top: 5px; transform: rotate(-45deg); } 1568 1569 .mrow__logo{ 1570 display:flex; 1571 justify-content:flex-start; 1572 margin-left: 24px; 1573 color: var(--hdr-text); 1574 } 1575 .mrow__logo:hover{ color:#707070; } 1576 .mrow__logo:active{ color:#9E9E9E; } 1577 .mrow__actions{ 1578 display:flex; 1579 gap: 7px; 1580 justify-content:flex-end; 1581 margin-left: auto; 1582 } 1583 .mrow__logo svg{ 1584 width:92px; 1585 height:14px; 1586 display:block; 1587 } 1588 } 1589 .hdr-drawer{ 1590 position: fixed; 1591 top: var(--hdr-h-mobile); 1592 left: 0; 1593 right: 0; 1594 bottom: 0; 1595 z-index: 40; 1596 pointer-events: none; 1597 background: transparent; 1598 } 1599 .hdr-drawer::before{ 1600 content:""; 1601 position:absolute; 1602 inset:0; 1603 background: rgba(21, 21, 21, 0.4); 1604 opacity: 0; 1605 transition: opacity var(--hdr-tt) var(--hdr-ease); 1606 } 1607 .hdr-drawer.is-open{ 1608 pointer-events:auto; 1609 background: transparent; 1610 } 1611 .hdr-drawer.is-open::before{ 1612 opacity: 1; 1613 } 1614 1615 .hdr-drawer__panel{ 1616 position: relative; 1617 z-index: 41; 1618 width: 100%; 1619 background:#FAFAFA; 1620 transform: translateY(calc(-100% - var(--hdr-h-mobile))); 1621 transition: transform var(--hdr-tt) var(--hdr-ease); 1622 border-top: 1px solid var(--hdr-border); 1623 box-shadow: var(--hdr-shadow); 1624 max-height: calc(100vh - var(--hdr-h-mobile)); 1625 overflow:auto; 1626 } 1627 .hdr-drawer.is-open .hdr-drawer__panel{ 1628 transform: translateY(0)!important; 1629 } 1630 1631 .hdr-drawer__nav{ 1632 position: relative; 1633 padding: 17px 16px 20px; 1634 } 1635 @media (max-width: 1200px) { 1636 .hdr-drawer__nav{ padding: 17px 8px 24px; } 1637 } 1638 @media (max-width: 991px) { 1639 .hdr-drawer__nav{ padding: 17px 32px 24px; } 1640 } 1641 @media (max-width: 768px) { 1642 .hdr-drawer__nav{ padding: 17px 16px 24px; } 1643 } 1644 1645 1646 .mnav{ list-style:none; margin:0; padding:0; } 1647 .mnav__item{ padding: 0; } 1648 1649 .mnav__link, .mnav__summary{ 1650 display:flex; 1651 align-items:center; 1652 justify-content:flex-start; 1653 gap: 8px; 1654 width:100%; 1655 padding: 11px 0; 1656 font-family: "Geist Mono", monospace; 1657 font-size:14px; 1658 font-weight: 600; 1659 line-height:1.3; 1660 letter-spacing: 0; 1661 font-feature-settings: 'ss01' on, 'ss09' on; 1662 text-transform: uppercase; 1663 color: var(--hdr-text); 1664 } 1665 .mnav__link:hover, .mnav__summary:hover{ opacity:.7; }
1666 .mnav__link:active, .mnav__summary:active{ color:#9E9E9E; } 1667 .mnav__link:focus-visible, .mnav__summary:focus-visible{ 1668 outline: 2px solid rgba(0,0,0,.25); 1669 outline-offset: 3px; 1670 border-radius: 6px; 1671 } 1672 1673 .mnav__details summary{ cursor:pointer; list-style:none; } 1674 .mnav__details summary::-webkit-details-marker{ display:none; } 1675 1676 .mnav__chev{ 1677 width:11px; height:7px; display:block; 1678 transition: transform 520ms cubic-bezier(0.22, 1, 0.36, 1); 1679 } 1680 .mnav__details[open] .mnav__chev{ transform: rotate(180deg); } 1681 1682 .msub{ list-style:none; margin: 2px 0 14px; padding:0 0 0 16px; } 1683 .msub a{ 1684 display:block; 1685 padding: 9px 0; 1686 font-family: "Geist Mono", monospace; 1687 font-size:14px; 1688 font-weight: 600; 1689 line-height:1.3; 1690 letter-spacing: 0; 1691 font-feature-settings: 'ss01' on, 'ss09' on; 1692 text-transform: uppercase; 1693 color: var(--hdr-text); 1694 } 1695 .msub a:hover{ color:#707070; } 1696 .msub a:active{ color:#9E9E9E; } 1697 1698 .mfooter{ 1699 margin-top: 22px; 1700 padding-top: 0; 1701 border-top: 0; 1702 } 1703 @media (min-width:576px) and (max-width:1200px){ 1704 .mfooter{ 1705 position:absolute; 1706 top: 23px; 1707 right: 8px; 1708 margin:0; 1709 padding:0; 1710 border-top:0; 1711 } 1712 } 1713 @media (max-width:991px){ 1714 .mfooter { 1715 right: 32px; 1716 } 1717 } 1718 @media (max-width:768px){ 1719 .mfooter { 1720 right: 16px; 1721 } 1722 } 1723 @media (max-width:768px){ 1724 .mfooter { 1725 right: 16px; 1726 } 1727 } 1728 .mfooter__lang{ 1729 display:inline-flex; 1730 align-items:center; 1731 gap: 10px; 1732 border:0; 1733 background:transparent; 1734 padding: 6px 0; 1735 cursor:pointer; 1736 font-size:12px; 1737 letter-spacing:.03em; 1738 text-transform: uppercase; 1739 color: var(--hdr-text); 1740 border-radius: 10px; 1741 } 1742 .mfooter__lang:focus-visible{ 1743 outline: 2px solid rgba(0,0,0,.35); 1744 outline-offset: 2px; 1745 } 1746 1747 .hdr-scroll-lock{ overflow:hidden; } 1748 .geoip-popup-trigger span { 1749 margin-right: 0px !important; 1750 } 1751 </style> 1752 1753 <div class="hdr__desktop"> 1754 <div class="hdr__container"> 1755 <div class="hdr__row"> 1756 <a class="hdr__logo" href="/" aria-label="Home"> 1757 <svg width="92" height="14" viewBox="0 0 92 14" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 1758 <path d="M70.4898 -0.000976562H67.3398V13.999H70.4898V-0.000976562Z" fill="currentColor"/> 1759 <path d="M73.6406 -0.000976562L74.2426 2.70802C74.2776 2.86202 74.2916 2.94602 74.3336 3.00202C74.3686 3.05102 74.4176 3.09302 74.4806 3.12102C74.5436 3.14902 74.6276 3.14902 74.7886 3.14902H88.6906V10.849H74.7886C74.6276 10.849 74.5506 10.849 74.4806 10.877C74.4246 10.905 74.3686 10.94 74.3336 10.996C74.2916 11.052 74.2776 11.136 74.2426 11.29L73.6406 13.999H86.8006C88.5646 13.999 89.4466 13.999 90.1186 13.656C90.7136 13.355 91.1896 12.872 91.4976 12.277C91.8406 11.605 91.8406 10.723 91.8406 8.95902V5.03902C91.8406 3.27502 91.8406 2.39302 91.4976 1.72102C91.1966 1.12602 90.7136 0.643023 90.1186 0.342023C89.4466 -0.000976562 88.5646 -0.000976562 86.8006 -0.000976562H73.6406Z" fill="currentColor"/> 1760 <path d="M50.5406 10.849V-0.000976562H47.9506C47.7546 -0.000976562 47.6566 -0.000976562 47.5796 0.0340234C47.5166 0.0690234 47.4606 0.118023 47.4256 0.188023C47.3906 0.265023 47.3906 0.363023 47.3906 0.559023V8.95902C47.3906 10.723 47.3906 11.605 47.7336 12.277C48.0346 12.872 48.5176 13.355 49.1126 13.656C49.7846 13.999 50.6666 13.999 52.4306 13.999H63.0426C63.2036 13.999 63.2806 13.999 63.3506 13.971C63.4066 13.943 63.4626 13.908 63.4976 13.852C63.5396 13.796 63.5536 13.712 63.5886 13.558L64.1906 10.849H50.5406Z" fill="currentColor"/> 1761 <path d="M3.15 3.14902H12.838L8.638 6.20102L10.486 8.74902L18.193 3.14902L17.591 0.440023C17.556 0.286023 17.542 0.202023 17.5 0.146023C17.465 0.0970234 17.416 0.0550234 17.353 0.0270234C17.29 -0.000976562 17.213 -0.000976562 17.052 -0.000976562H5.04C3.276 -0.000976562 2.394 -0.000976562 1.722 0.342023C1.127 0.643 0.644 1.12602 0.343 1.72102C0 2.39302 0 3.27502 0 5.03902V8.95902C0 10.723 0 11.605 0.343 12.277C0.644 12.872 1.127 13.355 1.722 13.656C2.394 13.999 3.276 13.999 5.04 13.999H17.052C17.213 13.999 17.29 13.999 17.36 13.971C17.416 13.943 17.472 13.908 17.507 13.852C17.549 13.796 17.563 13.712 17.598 13.558L18.2 10.849H3.15V3.14902Z" fill="currentColor"/> 1762 <path d="M41.0906 -0.000976562L32.6906 6.10302L24.2906 -0.000976562H21.7006C21.5046 -0.000976562 21.4066 -0.000976562 21.3296 0.0340234C21.2666 0.0690234 21.2106 0.118023 21.1756 0.188023C21.1406 0.265023 21.1406 0.363023 21.1406 0.559023V13.439C21.1406 13.635 21.1406 13.733 21.1756 13.81C21.2106 13.873 21.2596 13.929 21.3296 13.964C21.4066 13.999 21.5046 13.999 21.7006 13.999H24.2906V3.89802L32.6906 10.002L41.0906 3.89802V13.999H43.6806C43.8766 13.999 43.9746 13.999 44.0516 13.964C44.1146 13.929 44.1706 13.88 44.2056 13.81C44.2406 13.733 44.2406 13.635 44.2406 13.439V0.559023C44.2406 0.363023 44.2406 0.265023 44.2056 0.188023C44.1706 0.125023 44.1216 0.0690234 44.0516 0.0340234C43.9746 -0.000976562 43.8766 -0.
1762000976562 43.6806 -0.000976562H41.0906Z" fill="currentColor"/> 1763 </svg> 1764 </a> 1765 1766 <nav aria-label="Main"> 1767 <ul class="hdr-nav"> 1768 1769 1770 1771 1772 <li class="hdr-nav__item" data-dd> 1773 <a class="hdr-nav__link" href="/collections/rtk-receivers" aria-haspopup="true" aria-expanded="false" data-dd-trigger> 1774 <span>RTK Receivers</span> 1775 <svg class="hdr-nav__chev" viewBox="0 0 11 7" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 1776 <path d="M9.72938 -8.2566e-08L10.6738 0.944445L5.33702 6.28125L0.000216395 1.01389L0.934244 0.0659705L5.33008 4.3993L9.72938 -8.2566e-08Z" fill="currentColor"/> 1777 </svg> 1778 </a> 1779 <div class="hdr-dd" role="menu" aria-label="RTK Receivers"> 1780 <ul class="hdr-dd__list"> 1781 1782 <li><a class="hdr-dd__link" href="/products/reach-rs4-pro">Reach RS4 Pro</a></li> 1783 1784 <li><a class="hdr-dd__link" href="/products/reach-rs4">Reach RS4</a></li> 1785 1786 <li><a class="hdr-dd__link" href="/products/reachrx2">Reach RX2</a></li> 1787 1788 <li><a class="hdr-dd__link" href="/products/reach-rs3">Reach RS3</a></li> 1789 1790 <li><a class="hdr-dd__link" href="/products/reach-rs2-plus">Reach RS2+</a></li> 1791 1792 <li><a class="hdr-dd__link" href="/products/reachm2">Reach M2</a></li> 1793 1794 <li><a class="hdr-dd__link" href="/products/reachm2-with-gnss-antenna">Reach M2 with GNSS Antenna</a></li> 1795 1796 </ul> 1797 </div> 1798 </li> 1799 1800 1801 1802 <li class="hdr-nav__item" data-dd> 1803 <a class="hdr-nav__link" href="/collections/rtk-kits" aria-haspopup="true" aria-expanded="false" data-dd-trigger> 1804 <span>RTK Kits</span> 1805 <svg class="hdr-nav__chev" viewBox="0 0 11 7" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 1806 <path d="M9.72938 -8.2566e-08L10.6738 0.944445L5.33702 6.28125L0.000216395 1.01389L0.934244 0.0659705L5.33008 4.3993L9.72938 -8.2566e-08Z" fill="currentColor"/> 1807 </svg> 1808 </a> 1809 <div class="hdr-dd" role="menu" aria-label="RTK Kits"> 1810 <ul class="hdr-dd__list"> 1811 1812 <li><a class="hdr-dd__link" href="/products/emlid-base-and-rover-kit">Emlid Base & Rover Kit</a></li> 1813 1814 <li><a class="hdr-dd__link" href="/products/reach-rs4-pro-essential-kit">Reach RS4 Pro Essential Kit</a></li> 1815 1816 <li><a class="hdr-dd__link" href="/products/reach-rs4-drone-base-station-kit">Reach RS4 Drone Base Station Kit</a></li> 1817 1818 <li><a class="hdr-dd__link" href="/products/reach-rx2-rover-kit">Reach RX2 Rover Kit</a></li> 1819 1820 <li><a class="hdr-dd__link" href="/products/reach-rs3-survey-kit">Reach RS3 Survey Kit</a></li> 1821 1822 <li><a class="hdr-dd__link" href="/products/rtk-scanning-kit">Pix4D & Emlid Scanning Kit</a></li> 1823 1824 <li><a class="hdr-dd__link" href="/products/emlid-scanning-kit">Emlid Scanning kit</a></li> 1825 1826 <li><a class="hdr-dd__link" href="/products/reach-m2-unmanned-systems-kit">Reach M2 Unmanned Systems Kit</a></li> 1827 1828 </ul> 1829 </div> 1830 </li> 1831 1832 1833 1834 <li class="hdr-nav__item"> 1835 <a class="hdr-nav__link" href="https://store.emlid.com/products/emlid-corrections?variant=54337106084145">
1836 <span>Emlid Corrections</span> 1837 </a> 1838 </li> 1839 1840 1841 1842 <li class="hdr-nav__item"> 1843 <a class="hdr-nav__link" href="/collections/accessories"> 1844 <span>Accessories</span> 1845 </a> 1846 </li> 1847 1848 1849 1850 <li class="hdr-nav__item"> 1851 <a class="hdr-nav__link" href="/collections/all"> 1852 <span>All Products</span> 1853 </a> 1854 </li> 1855 1856 1857 1858 </ul> 1859 </nav> 1860 1861 <div class="hdr__actions"> 1862 <a href="#" class="hdr-action geoip-popup-trigger" data-open-geoip-popup aria-label="Region"> 1863 <svg 1864 width="20" 1865 height="20" 1866 viewBox="0 0 20 20" 1867 fill="none" 1868 xmlns="http://www.w3.org/2000/svg" 1869> 1870 <path 1871 d="M16.667 0C14.8262 0 13.3337 1.4925 13.3337 3.33333C13.3337 5.71417 16.667 9.16667 16.667 9.16667C16.667 9.16667 20.0003 5.71417 20.0003 3.33333C20.0003 1.4925 18.5078 0 16.667 0ZM10.0003 1.66667C5.40533 1.66667 1.66699 5.405 1.66699 10C1.66699 14.595 5.40533 18.3333 10.0003 18.3333C14.5953 18.3333 18.3337 14.595 18.3337 10C18.3337 9.94167 18.3264 9.88497 18.3255 9.82747C18.128 10.0491 17.9649 10.2231 17.8665 10.3239L16.3757 11.9206C16.2073 12.4714 15.9749 12.9933 15.679 13.4749C15.4157 12.9016 14.8387 12.5 14.167 12.5H13.3337V10.8333C13.3337 10.3725 12.9603 10 12.5003 10H7.50033V8.33333H8.33366C8.79366 8.33333 9.16699 7.96083 9.16699 7.5V5.85286L10.8467 5.83984C11.3325 5.83651 11.7649 5.61908 12.0674 5.28158C11.9291 4.91158 11.8233 4.5375 11.7533 4.16667L8.32715 4.19271C7.86965 4.19604 7.50033 4.56854 7.50033 5.02604V6.66667H6.66699C6.20699 6.66667 5.83366 7.03917 5.83366 7.5V8.48796L4.15072 6.80664C5.28405 4.73914 7.48116 3.33333 10.0003 3.33333H11.667C11.667 2.83083 11.7427 2.34715 11.8818 1.88965C11.276 1.74882 10.6478 1.66667 10.0003 1.66667ZM16.667 2.14193C17.3245 2.14193 17.8584 2.67583 17.8584 3.33333C17.8584 3.99083 17.3245 4.52474 16.667 4.52474C16.0095 4.52474 15.4756 3.99083 15.4756 3.33333C15.4756 2.67583 16.0095 2.14193 16.667 2.14193ZM3.50618 8.51725L7.50033 12.5114V13.3333C7.50033 14.2525 8.24783 15 9.16699 15V16.6097C5.88366 16.1972 3.33366 13.3933 3.33366 10C3.33366 9.49 3.39702 8.99559 3.50618 8.51725ZM8.98307 11.6667H11.667V13.3333C11.667 13.7942 12.0403 14.1667 12.5003 14.1667H14.167V15.1953C13.2295 15.9486 12.0853 16.4514 10.8337 16.6081V14.1667C10.8337 13.7058 10.4603 13.3333 10.0003 13.3333H9.16699V12.1663C9.16699 11.9813 9.09391 11.8117 8.98307 11.6667Z" 1872 fill="currentColor" 1873 /> 1874</svg> 1875 1876 <span class="hdr-action__text">US</span> 1877 </a> 1878 1879 <a class="hdr-action" href="/search" aria-label="Search"> 1880 <svg class="hdr-ic" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 1881 <path d="M9 2C5.14585 2 2 5.14585 2 9C2 12.8541 5.14585 16 9 16C10.748 16 12.345 15.348 13.5742 14.2812L14 14.707V16L20 22L22 20L16 14H14.707L14.2812 13.5742C15.348 12.345 16 10.748 16 9C16 5.14585 12.8541 2 9 2ZM9 4C11.7733 4 14 6.22673 14 9C14 11.7733 11.7733 14 9 14C6.22673 14 4 11.7733 4 9C4 6.22673 6.22673 4 9 4Z" fill="currentColor"/> 1882 </svg> 1883 </a> 1884 1885 <a class="hdr-action cart-trigger" href="/cart" aria-label="Cart" data-cart-trigger data-cart-mount 1886 data-class-change='[ 1887 { 1888 "target": ".side-cart", 1889 "class": "shown", 1890 "method": "add", 1891 "on": "click", 1892 "preventDefault": true 1893 } 1894 ]' 1895 data-lock-scroll='[ 1896 { 1897 "target": ".side-cart [data-side-cart-items]", 1898 "method": "lockScroll", 1899 "on": "click", 1900 "preventDefault": true 1901 } 1902 ]'> 1903 <svg class="hdr-ic" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 1904 <path d="M7.65811 2C6.86144 2 6.1344 2.47916 5.82022 3.21094L3.33975 9H2.00186C1.68886 9 1.39498 9.14553 1.20498 9.39453C1.01698 9.64253 0.95306 9.96462 1.03506 10.2656L3.59561 19.5312C3.83461 20.3953 4.62734 21 5.52334 21H18.4765C19.3725 21 20.1642 20.3962 20.4022 19.5332L22.9628 10.2676C23.0458 9.96658 22.9828 9.64253 22.7948 9.39453C22.6048 9.14553 22.31 9 21.998 9H20.6601L18.1776 3.21289H18.1796C17.8659 2.47772 17.1364 2 16.3397 2H7.65811ZM7.65811 4H16.3397L18.4823 9H5.51748L7.65811 4ZM3.31436 11H20.6855L18.4745 19H5.52334L3.31436 11ZM7.9999 13C7.4479 13 6.9999 13.448 6.9999 14V16C6.9999 16.552 7.4479 17 7.9999 17C8.5519 17 8.9999 16.552 8.9999 16V14C8.9999 13.448 8.5519 13 7.9999 13ZM11.9999 13C11.4479 13 10.9999 13.448 10.9999 14V16C10.9999 16.552 11.4479 17 11.9999 17C12.5
1904519 17 12.9999 16.552 12.9999 16V14C12.9999 13.448 12.5519 13 11.9999 13ZM15.9999 13C15.4479 13 14.9999 13.448 14.9999 14V16C14.9999 16.552 15.4479 17 15.9999 17C16.5519 17 16.9999 16.552 16.9999 16V14C16.9999 13.448 16.5519 13 15.9999 13Z" fill="currentColor"/> 1905 </svg> 1906 1907 </a> 1908 </div> 1909 </div> 1910 </div> 1911 </div> 1912 1913 <div class="hdr__mobile"> 1914 <div class="hdr__container"> 1915 <div class="mrow"> 1916 <button class="mrow__burger" type="button" aria-label="Toggle menu" aria-expanded="false" data-mtoggle> 1917 <span class="burger" aria-hidden="true"> 1918 <span class="burger__line burger__line--1"></span> 1919 <span class="burger__line burger__line--2"></span> 1920 <span class="burger__line burger__line--3"></span> 1921 </span> 1922 </button> 1923 1924 <a class="mrow__logo" href="/" aria-label="Home"> 1925 <svg width="92" height="14" viewBox="0 0 92 14" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 1926 <path d="M70.4898 -0.000976562H67.3398V13.999H70.4898V-0.000976562Z" fill="currentColor"/> 1927 <path d="M73.6406 -0.000976562L74.2426 2.70802C74.2776 2.86202 74.2916 2.94602 74.3336 3.00202C74.3686 3.05102 74.4176 3.09302 74.4806 3.12102C74.5436 3.14902 74.6276 3.14902 74.7886 3.14902H88.6906V10.849H74.7886C74.6276 10.849 74.5506 10.849 74.4806 10.877C74.4246 10.905 74.3686 10.94 74.3336 10.996C74.2916 11.052 74.2776 11.136 74.2426 11.29L73.6406 13.999H86.8006C88.5646 13.999 89.4466 13.999 90.1186 13.656C90.7136 13.355 91.1896 12.872 91.4976 12.277C91.8406 11.605 91.8406 10.723 91.8406 8.95902V5.03902C91.8406 3.27502 91.8406 2.39302 91.4976 1.72102C91.1966 1.12602 90.7136 0.643023 90.1186 0.342023C89.4466 -0.000976562 88.5646 -0.000976562 86.8006 -0.000976562H73.6406Z" fill="currentColor"/> 1928 <path d="M50.5406 10.849V-0.000976562H47.9506C47.7546 -0.000976562 47.6566 -0.000976562 47.5796 0.0340234C47.5166 0.0690234 47.4606 0.118023 47.4256 0.188023C47.3906 0.265023 47.3906 0.363023 47.3906 0.559023V8.95902C47.3906 10.723 47.3906 11.605 47.7336 12.277C48.0346 12.872 48.5176 13.355 49.1126 13.656C49.7846 13.999 50.6666 13.999 52.4306 13.999H63.0426C63.2036 13.999 63.2806 13.999 63.3506 13.971C63.4066 13.943 63.4626 13.908 63.4976 13.852C63.5396 13.796 63.5536 13.712 63.5886 13.558L64.1906 10.849H50.5406Z" fill="currentColor"/> 1929 <path d="M3.15 3.14902H12.838L8.638 6.20102L10.486 8.74902L18.193 3.14902L17.591 0.440023C17.556 0.286023 17.542 0.202023 17.5 0.146023C17.465 0.0970234 17.416 0.0550234 17.353 0.0270234C17.29 -0.000976562 17.213 -0.000976562 17.052 -0.000976562H5.04C3.276 -0.000976562 2.394 -0.000976562 1.722 0.342023C1.127 0.643 0.644 1.12602 0.343 1.72102C0 2.39302 0 3.27502 0 5.03902V8.95902C0 10.723 0 11.605 0.343 12.277C0.644 12.872 1.127 13.355 1.722 13.656C2.394 13.999 3.276 13.999 5.04 13.999H17.052C17.213 13.999 17.29 13.999 17.36 13.971C17.416 13.943 17.472 13.908 17.507 13.852C17.549 13.796 17.563 13.712 17.598 13.558L18.2 10.849H3.15V3.14902Z" fill="currentColor"/> 1930 <path d="M41.0906 -0.000976562L32.6906 6.10302L24.2906 -0.000976562H21.7006C21.5046 -0.000976562 21.4066 -0.000976562 21.3296 0.0340234C21.2666 0.0690234 21.2106 0.118023 21.1756 0.188023C21.1406 0.265023 21.1406 0.363023 21.1406 0.559023V13.439C21.1406 13.635 21.1406 13.733 21.1756 13.81C21.2106 13.873 21.2596 13.929 21.3296 13.964C21.4066 13.999 21.5046 13.999 21.7006 13.999H24.2906V3.89802L32.6906 10.002L41.0906 3.89802V13.999H43.6806C43.8766 13.999 43.9746 13.999 44.0516 13.964C44.1146 13.929 44.1706 13.88 44.2056 13.81C44.2406 13.733 44.2406 13.635 44.2406 13.439V0.559023C44.2406 0.363023 44.2406 0.265023 44.2056 0.188023C44.1706 0.125023 44.1216 0.0690234 44.0516 0.0340234C43.9746 -0.000976562 43.8766 -0.000976562 43.6806 -0.000976562H41.0906Z" fill="currentColor"/> 1931 </svg> 1932 </a> 1933 1934 <div class="mrow__actions"> 1935 <a class="hdr-action" href="/search" aria-label="Search"> 1936 <svg class="hdr-ic" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 1937 <path d="M9 2C5.14585 2 2 5.14585 2 9C2 12.8541 5.14585 16 9 16C10.748 16 12.345 15.348 13.5742 14.2812L14 14.707V16L20 22L22 20L16 14H14.707L14.2812 13.5742C15.348 12.345 16 10.748 16 9C16 5.14585 12.8541 2 9 2ZM9 4C11.7733 4 14 6.22673 14 9C14 11.7733 11.7733 14 9 14C6.22673 14 4 11.7733 4 9C4 6.22673 6.22673 4 9 4Z" fill="currentColor"/> 1938 </svg> 1939 </a>
1940 <a class="hdr-action cart-trigger" href="/cart" aria-label="Cart" data-cart-trigger data-cart-mount 1941 data-class-change='[ 1942 { 1943 "target": ".side-cart", 1944 "class": "shown", 1945 "method": "add", 1946 "on": "click", 1947 "preventDefault": true 1948 } 1949 ]' 1950 data-lock-scroll='[ 1951 { 1952 "target": ".side-cart [data-side-cart-items]", 1953 "method": "lockScroll", 1954 "on": "click", 1955 "preventDefault": true 1956 } 1957 ]'> 1958 <svg class="hdr-ic" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 1959 <path d="M7.65811 2C6.86144 2 6.1344 2.47916 5.82022 3.21094L3.33975 9H2.00186C1.68886 9 1.39498 9.14553 1.20498 9.39453C1.01698 9.64253 0.95306 9.96462 1.03506 10.2656L3.59561 19.5312C3.83461 20.3953 4.62734 21 5.52334 21H18.4765C19.3725 21 20.1642 20.3962 20.4022 19.5332L22.9628 10.2676C23.0458 9.96658 22.9828 9.64253 22.7948 9.39453C22.6048 9.14553 22.31 9 21.998 9H20.6601L18.1776 3.21289H18.1796C17.8659 2.47772 17.1364 2 16.3397 2H7.65811ZM7.65811 4H16.3397L18.4823 9H5.51748L7.65811 4ZM3.31436 11H20.6855L18.4745 19H5.52334L3.31436 11ZM7.9999 13C7.4479 13 6.9999 13.448 6.9999 14V16C6.9999 16.552 7.4479 17 7.9999 17C8.5519 17 8.9999 16.552 8.9999 16V14C8.9999 13.448 8.5519 13 7.9999 13ZM11.9999 13C11.4479 13 10.9999 13.448 10.9999 14V16C10.9999 16.552 11.4479 17 11.9999 17C12.5519 17 12.9999 16.552 12.9999 16V14C12.9999 13.448 12.5519 13 11.9999 13ZM15.9999 13C15.4479 13 14.9999 13.448 14.9999 14V16C14.9999 16.552 15.4479 17 15.9999 17C16.5519 17 16.9999 16.552 16.9999 16V14C16.9999 13.448 16.5519 13 15.9999 13Z" fill="currentColor"/> 1960 </svg> 1961 1962 </a> 1963 </div> 1964 </div> 1965 </div> 1966 </div> 1967 1968 <div class="hdr-drawer" aria-hidden="true" data-mdrawer> 1969 <div class="hdr-drawer__panel" role="dialog" aria-modal="true" aria-label="Menu"> 1970 <nav class="hdr-drawer__nav" aria-label="Mobile navigation"> 1971 <ul class="mnav"> 1972 1973 1974 1975 1976 <li class="mnav__item"> 1977 <details class="mnav__details"> 1978 <summary class="mnav__summary"> 1979 <span>RTK Receivers</span> 1980 <svg class="mnav__chev" viewBox="0 0 11 7" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 1981 <path d="M9.72938 -8.2566e-08L10.6738 0.944445L5.33702 6.28125L0.000216395 1.01389L0.934244 0.0659705L5.33008 4.3993L9.72938 -8.2566e-08Z" fill="currentColor"/> 1982 </svg> 1983 </summary> 1984 <ul class="msub"> 1985 1986 <li><a href="/products/reach-rs4-pro">Reach RS4 Pro</a></li> 1987 1988 <li><a href="/products/reach-rs4">Reach RS4</a></li> 1989 1990 <li><a href="/products/reachrx2">Reach RX2</a></li> 1991 1992 <li><a href="/products/reach-rs3">Reach RS3</a></li> 1993 1994 <li><a href="/products/reach-rs2-plus">Reach RS2+</a></li> 1995 1996 <li><a href="/products/reachm2">Reach M2</a></li> 1997 1998 <li><a href="/products/reachm2-with-gnss-antenna">Reach M2 with GNSS Antenna</a></li> 1999 2000 </ul> 2001 </details> 2002 </li> 2003 2004 2005 2006 <li class="mnav__item"> 2007 <details class="mnav__details"> 2008 <summary class="mnav__summary"> 2009 <span>RTK Kits</span> 2010 <svg class="mnav__chev" viewBox="0 0 11 7" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 2011 <path d="M9.72938 -8.2566e-08L10.6738 0.944445L5.33702 6.28125L0.000216395 1.01389L0.934244 0.0659705L5.33008 4.3993L9.72938 -8.2566e-08Z" fill="currentColor"/> 2012 </svg> 2013 </summary> 2014 <ul class="msub"> 2015 2016 <li><a href="/products/emlid-base-and-rover-kit">Emlid Base & Rover Kit</a></li> 2017 2018 <li><a href="/products/reach-rs4-pro-essential-kit">Reach RS4 Pro Essential Kit</a></li> 2019 2020 <li><a href="/products/reach-rs4-drone-base-station-kit">Reach RS4 Drone Base Station Kit</a></li> 2021 2022 <li><a href="/products/reach-rx2-rover-kit">Reach RX2 Rover Kit</a></li> 2023 2024 <li><a href="/products/reach-rs3-survey-kit">Reach RS3 Survey Kit</a></li> 2025 2026 <li><a href="/products/rtk-scanning-kit">Pix4D & Emlid Scanning Kit</a></li> 2027 2028 <li><a href="/products/emlid-scanning-kit">Emlid Scanning kit</a></li> 2029 2030 <li><a href="/products/reach-m2-unmanned-systems-kit">Reach M2 Unmanned Systems Kit</a></li> 2031 2032 </ul> 2033 </details> 2034 </li> 2035 2036 2037 2038 <li class="mnav__item"> 2039 <a class="mnav__link" href="https://store.emlid.com/products/emlid-corrections?variant=54337106084145">
2040 <span>Emlid Corrections</span> 2041 </a> 2042 </li> 2043 2044 2045 2046 <li class="mnav__item"> 2047 <a class="mnav__link" href="/collections/accessories"> 2048 <span>Accessories</span> 2049 </a> 2050 </li> 2051 2052 2053 2054 <li class="mnav__item"> 2055 <a class="mnav__link" href="/collections/all"> 2056 <span>All Products</span> 2057 </a> 2058 </li> 2059 2060 2061 2062 </ul> 2063 2064 <div class="mfooter"> 2065 <a href="#" class="mfooter__lang geoip-popup-trigger" data-open-geoip-popup aria-label="Region"> 2066 <svg 2067 width="20" 2068 height="20" 2069 viewBox="0 0 20 20" 2070 fill="none" 2071 xmlns="http://www.w3.org/2000/svg" 2072> 2073 <path 2074 d="M16.667 0C14.8262 0 13.3337 1.4925 13.3337 3.33333C13.3337 5.71417 16.667 9.16667 16.667 9.16667C16.667 9.16667 20.0003 5.71417 20.0003 3.33333C20.0003 1.4925 18.5078 0 16.667 0ZM10.0003 1.66667C5.40533 1.66667 1.66699 5.405 1.66699 10C1.66699 14.595 5.40533 18.3333 10.0003 18.3333C14.5953 18.3333 18.3337 14.595 18.3337 10C18.3337 9.94167 18.3264 9.88497 18.3255 9.82747C18.128 10.0491 17.9649 10.2231 17.8665 10.3239L16.3757 11.9206C16.2073 12.4714 15.9749 12.9933 15.679 13.4749C15.4157 12.9016 14.8387 12.5 14.167 12.5H13.3337V10.8333C13.3337 10.3725 12.9603 10 12.5003 10H7.50033V8.33333H8.33366C8.79366 8.33333 9.16699 7.96083 9.16699 7.5V5.85286L10.8467 5.83984C11.3325 5.83651 11.7649 5.61908 12.0674 5.28158C11.9291 4.91158 11.8233 4.5375 11.7533 4.16667L8.32715 4.19271C7.86965 4.19604 7.50033 4.56854 7.50033 5.02604V6.66667H6.66699C6.20699 6.66667 5.83366 7.03917 5.83366 7.5V8.48796L4.15072 6.80664C5.28405 4.73914 7.48116 3.33333 10.0003 3.33333H11.667C11.667 2.83083 11.7427 2.34715 11.8818 1.88965C11.276 1.74882 10.6478 1.66667 10.0003 1.66667ZM16.667 2.14193C17.3245 2.14193 17.8584 2.67583 17.8584 3.33333C17.8584 3.99083 17.3245 4.52474 16.667 4.52474C16.0095 4.52474 15.4756 3.99083 15.4756 3.33333C15.4756 2.67583 16.0095 2.14193 16.667 2.14193ZM3.50618 8.51725L7.50033 12.5114V13.3333C7.50033 14.2525 8.24783 15 9.16699 15V16.6097C5.88366 16.1972 3.33366 13.3933 3.33366 10C3.33366 9.49 3.39702 8.99559 3.50618 8.51725ZM8.98307 11.6667H11.667V13.3333C11.667 13.7942 12.0403 14.1667 12.5003 14.1667H14.167V15.1953C13.2295 15.9486 12.0853 16.4514 10.8337 16.6081V14.1667C10.8337 13.7058 10.4603 13.3333 10.0003 13.3333H9.16699V12.1663C9.16699 11.9813 9.09391 11.8117 8.98307 11.6667Z" 2075 fill="currentColor" 2076 /> 2077</svg> 2078 2079 <span>US</span> 2080 </a> 2081 </div> 2082 </nav> 2083 </div> 2084 </div> 2085 2086
2086<script> 2087 (function () { 2088 const root = document.querySelector('[data-hdr]'); 2089 if (!root) return; 2090 2091 console.log('geoip-country', 'US'); 2092 2093 const ddItems = root.querySelectorAll('[data-dd]'); 2094 const closeAllDesktop = () => { 2095 ddItems.forEach((it) => { 2096 it.classList.remove('is-open'); 2097 const t = it.querySelector('[data-dd-trigger]'); 2098 if (t) t.setAttribute('aria-expanded', 'false'); 2099 }); 2100 }; 2101 2102 ddItems.forEach((item) => { 2103 const trigger = item.querySelector('[data-dd-trigger]'); 2104 if (!trigger) return; 2105 2106 item.addEventListener('mouseenter', () => { 2107 closeAllDesktop(); 2108 item.classList.add('is-open'); 2109 trigger.setAttribute('aria-expanded', 'true'); 2110 }); 2111 2112 item.addEventListener('mouseleave', () => { 2113 item.classList.remove('is-open'); 2114 trigger.setAttribute('aria-expanded', 'false'); 2115 }); 2116 2117 trigger.addEventListener('click', (e) => { 2118 const href = (trigger.getAttribute('href') || '').trim(); 2119 const isFallbackLink = !href || href === '#'; 2120 2121 if (!isFallbackLink) return; 2122 2123 e.preventDefault(); 2124 const open = item.classList.contains('is-open'); 2125 closeAllDesktop(); 2126 if (!open) { 2127 item.classList.add('is-open'); 2128 trigger.setAttribute('aria-expanded', 'true'); 2129 } 2130 }); 2131 }); 2132 2133 document.addEventListener('keydown', (e) => { 2134 if (e.key === 'Escape') closeAllDesktop(); 2135 }); 2136 2137 root.classList.remove('is-hidden'); 2138 2139 const drawer = root.querySelector('[data-mdrawer]'); 2140 const burgerBtn = root.querySelector('[data-mtoggle]'); 2141 const cartTriggers = root.querySelectorAll('[data-cart-trigger]'); 2142 2143 if (drawer && burgerBtn) { 2144 const setMobileOpen = (open) => { 2145 drawer.classList.toggle('is-open', open); 2146 drawer.setAttribute('aria-hidden', open ? 'false' : 'true'); 2147 burgerBtn.setAttribute('aria-expanded', open ? 'true' : 'false'); 2148 burgerBtn.classList.toggle('is-active', open); 2149 document.documentElement.classList.toggle('hdr-scroll-lock', open); 2150 }; 2151 2152 burgerBtn.addEventListener('click', () => { 2153 setMobileOpen(!drawer.classList.contains('is-open')); 2154 }); 2155 2156 document.addEventListener('keydown', (e) => { 2157 if (e.key === 'Escape' && drawer.classList.contains('is-open')) setMobileOpen(false); 2158 }); 2159 } 2160 2161 const mobileDetails = root.querySelectorAll('.mnav__details'); 2162 if (mobileDetails.length) { 2163 mobileDetails.forEach((detailsEl) => { 2164 detailsEl.addEventListener('toggle', () => { 2165 if (!detailsEl.open) return; 2166 mobileDetails.forEach((other) => { 2167 if (other !== detailsEl) other.open = false; 2168 }); 2169 }); 2170 }); 2171 } 2172 2173 const updateBadges = (count) => { 2174 cartTriggers.forEach((trigger) => { 2175 let badge = trigger.querySelector('.hdr-cart-badge'); 2176 if (!badge) { 2177 badge = document.createElement('span'); 2178 badge.className = 'hdr-cart-badge'; 2179 trigger.appendChild(badge); 2180 } 2181 badge.textContent = count; 2182 badge.setAttribute('aria-label', `${count} items in cart`); 2183 badge.style.display = count > 0 ? 'flex' : 'none'; 2184 }); 2185 }; 2186 2187 const renderCart = (cart) => { 2188 const count = cart && typeof cart.item_count === 'number' ? cart.item_count : 0; 2189 updateBadges(count); 2190 }; 2191 2192 const fetchCart = () => { 2193 return fetch('/cart.js', { 2194 credentials: 'same-origin', 2195 headers: { Accept: 'application/json' }, 2196 }).then((res) => (res.ok ? res.json() : null)); 2197 }; 2198 2199 let cartRefreshTimer = null; 2200 const refreshCart = () => { 2201 return fetchCart() 2202 .then((cart) => { 2203 renderCart(cart); 2204 return cart; 2205 }) 2206 .catch(() => {}); 2207 }; 2208 const queueCartRefresh = () => { 2209 if (cartRefreshTimer) clearTimeout(cartRefreshTimer); 2210 cartRefreshTimer = setTimeout(refreshCart, 150); 2211 }; 2212 2213 document.addEventListener('cart:updated', queueCartRefresh); 2214 2215 if (!window.__hdrCartHooked) { 2216 window.__hdrCartHooked = true; 2217 const isCartRequest = (url) => { 2218 if (!url) return false;
2219 const cleanUrl = String(url).split('?')[0]; 2220 return /\/cart\/(add|change|update|clear)(\.js)?$/.test(cleanUrl); 2221 }; 2222 2223 if (window.fetch) { 2224 const originalFetch = window.fetch.bind(window); 2225 window.fetch = (...args) => { 2226 const url = typeof args[0] === 'string' ? args[0] : args[0] && args[0].url; 2227 return originalFetch(...args).then((res) => { 2228 if (res.ok && isCartRequest(url)) queueCartRefresh(); 2229 return res; 2230 }); 2231 }; 2232 } 2233 2234 const originalOpen = XMLHttpRequest.prototype.open; 2235 const originalSend = XMLHttpRequest.prototype.send; 2236 XMLHttpRequest.prototype.open = function (method, url) { 2237 this._hdrCartUrl = url; 2238 return originalOpen.apply(this, arguments); 2239 }; 2240 XMLHttpRequest.prototype.send = function () { 2241 if (isCartRequest(this._hdrCartUrl)) { 2242 this.addEventListener('load', () => { 2243 if (this.status >= 200 && this.status < 300) queueCartRefresh(); 2244 }); 2245 } 2246 return originalSend.apply(this, arguments); 2247 }; 2248 } 2249 })(); 2250 </script>
2250 2251</header> 2252 2253 2254<style> #shopify-section-radiant--header .radiant--header .top-bar-area .keen-slider .keen-slider__slide .rte {font-size: 14px; height: 45px;} </style></div> 2255 2256 <style> 2257 :root { 2258 --emld-banner-offset: 0px; 2259 } 2260 2261 body { 2262 padding-top: 0 !important; 2263 } 2264 2265 #MainContent { 2266 padding-top: var(--hdr-h-desktop); 2267 } 2268 2269 @media (max-width: 1200px) { 2270 #MainContent { 2271 padding-top: var(--hdr-h-mobile); 2272 } 2273 } 2274 2275 .hdr { 2276 top: var(--emld-banner-offset) !important; 2277 } 2278 2279 .hdr-drawer { 2280 top: calc(var(--hdr-h-mobile) + var(--emld-banner-offset)) !important; 2281 } 2282 2283 .hdr-drawer__panel { 2284 transform: translateY(calc(-100% - var(--hdr-h-mobile) - var(--emld-banner-offset))) !important; 2285 max-height: calc(100vh - var(--hdr-h-mobile) - var(--emld-banner-offset)) !important; 2286 } 2287 </style> 2288 2289
2289<script> 2290 document.addEventListener('DOMContentLoaded', function () { 2291 var root = document.documentElement; 2292 var ticking = false; 2293 2294 function updateHeaderOffsetFromBanners() { 2295 var offset = 0; 2296 var banners = document.querySelectorAll('.bf__banner, .emld-store-static-banner, .emld-store-rotating-banner'); 2297 2298 banners.forEach(function (banner) { 2299 if (window.getComputedStyle(banner).display === 'none') { 2300 return; 2301 } 2302 2303 var rect = banner.getBoundingClientRect(); 2304 var visibleHeight = Math.max(0, Math.min(rect.bottom, window.innerHeight) - Math.max(rect.top, 0)); 2305 offset += visibleHeight; 2306 }); 2307 2308 root.style.setProperty('--emld-banner-offset', offset + 'px'); 2309 } 2310 2311 function queueHeaderOffsetUpdate() { 2312 if (ticking) { 2313 return; 2314 } 2315 2316 ticking = true; 2317 2318 window.requestAnimationFrame(function () { 2319 ticking = false; 2320 updateHeaderOffsetFromBanners(); 2321 }); 2322 } 2323 2324 updateHeaderOffsetFromBanners(); 2325 window.addEventListener('load', queueHeaderOffsetUpdate); 2326 window.addEventListener('resize', queueHeaderOffsetUpdate); 2327 window.addEventListener('scroll', queueHeaderOffsetUpdate, { passive: true }); 2328 document.addEventListener('shopify:section:load', queueHeaderOffsetUpdate); 2329 document.addEventListener('shopify:section:unload', queueHeaderOffsetUpdate); 2330 document.addEventListener('shopify:section:reorder', queueHeaderOffsetUpdate); 2331 }); 2332 </script>
2332 2333 2334 <main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1"> 2335 <div id="shopify-section-template--25153989706033__main" class="shopify-section product-page">
2336<script type="application/ld+json"> 2337{ 2338 "@context": "https://schema.org", 2339 "@type": "Product", 2340 "name": "Reach RS4 Pro", 2341 "image": ["https:\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.663.webp?v=1759528847\u0026width=1200", 2342"https:\/\/store.emlid.com\/cdn\/shop\/files\/for_receivers.webp?v=1783692975\u0026width=1200", 2343"https:\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.677.webp?v=1763661645\u0026width=1200", 2344"https:\/\/store.emlid.com\/cdn\/shop\/files\/RS4_RENDERS_04.1174.webp?v=1763661645\u0026width=1200", 2345"https:\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.683.webp?v=1763661645\u0026width=1200" 2346], 2347 "description": "All-band RTK GNSS receiver with dual cameras and tilt compensation Next-level stakeout with augmented reality and measuring from photos. Comes with a mobile app. Two Full-HD cameras AR guidance for stakeout Measurements from images High precision RTK: 7 mm + 1 ppmTilt compensation: RTK + 2 mm + 0.3 mm\/° Emlid Corrections To achieve centimeter-level (sub-inch) accuracy with RTK, you need a source of corrections â positioning enhancement data that upgrades standard GNSS accuracy from meters to centimeters in real time. Your receiver includes one free year of Emlid Corrections â a built-in network service to receive corrections over the internet. Learn more and check coverage in your area. All-band support GPS: L1C\/A, L2C, L5 GLONASS: L1OF, L2OF Galileo: E1-B\/C, E5a, E6 BeiDou: B1I, B1C, B2a, B3I QZSS: L1C\/A, L1C\/B11, L2C, L5 NavIC: L1-SPS Data, L5-SPS Base and rover 915 MHz LoRa, 450 MHz UHF, NTRIP Rugged and powerful 16 hours on one charge Magnesium alloy body IP68 rating Withstands temperatures from -40 to +65°C (-40 to +149ºF) Explore all Reach RS4 Pro features and user reviews Package includes - Reach RS4 Pro- Carrying case - USB Type-C cable - LoRa Antenna 860-930 MHz - UHF Antenna 410-470 MHz", 2348 "sku": "RCH402", 2349 "mpn": "RCH402", 2350 "category": "Surveying Equipment", 2351 "brand": { 2352 "@type": "Brand", 2353 "name": "Emlid Store US" 2354 }, 2355"offers": { 2356 "@type": "Offer", 2357 "url": "https:\/\/store.emlid.com\/products\/reach-rs4-pro", 2358 "priceCurrency": "USD", 2359 "price": "4599.00", 2360 "availability": "https://schema.org/InStock", 2361 "itemCondition": "https://schema.org/NewCondition", 2362 "priceValidUntil": "2026-12-23", 2363 "sku": "RCH402", 2364 2365 "shippingDetails": { 2366 "@type": "OfferShippingDetails", 2367 "shippingRate": { 2368 "@type": "MonetaryAmount", 2369 "value": 0, 2370 "currency": "USD" 2371 }, 2372 "shippingDestination": { 2373 "@type": "DefinedRegion", 2374 "addressCountry": "US" 2375 }, 2376 "deliveryTime": { 2377 "@type": "ShippingDeliveryTime", 2378 "handlingTime": { 2379 "@type": "QuantitativeValue", 2380 "minValue": 0, 2381 "maxValue": 1, 2382 "unitCode": "DAY" 2383 }, 2384 "transitTime": { 2385 "@type": "QuantitativeValue", 2386 "minValue": 2, 2387 "maxValue": 7, 2388 "unitCode": "DAY" 2389 } 2390 } 2391 }, 2392 2393 "hasMerchantReturnPolicy": { 2394 "@type": "MerchantReturnPolicy", 2395 "applicableCountry": "US", 2396 "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow", 2397 "merchantReturnDays": 91, 2398 "returnMethod": "https://schema.org/ReturnByMail", 2399 "returnFees": "https://schema.org/ReturnShippingFees" 2400 } 2401 }, 2402 "additionalProperty": [{ 2403 "@type": "PropertyValue", 2404 "name": "Imaging", 2405 "value": "Image sensors: 1\/2.6 in, CMOS, global shutter, Full HD Field of view Front camera: H: 64.6°, V: 42.8° Bottom camera: H: 63°, V: 42° Video frame rate: 25 fps" 2406 }, 2407{ 2408 "@type": "PropertyValue", 2409 "name": "Mechanical", 2410 "value": "Dimensions: 128.6 x 128.6 x 99.3 mm Weight: 943 g (2.08 lb) Operating tº: -40 to +65 °C (-40 to 149 °F) Ingress protection: IP68" 2411 }, 2412{ 2413 "@type": "PropertyValue", 2414 "name": "Electrical", 2415 "value": "Autonomy: 16 hrs as RTK rover with tilt Battery: Li-Ion 5000 mAh, 7.2 V, 36 Wh Charging: USB Type-C (PD): 5Vâ3A, 9Vâ3A, 12Vâ3A, 15Vâ3A" 2416 }, 2417{ 2418 "@type": "PropertyValue", 2419 "name": "Positioning",
2420 "value": "Static: H: 4âmm + 0.5âppm | V: 8âmm + 1âppm PPK: H: 5âmm + 0.5âppm | V: 10âmm + 1âppm RTK: H: 7âmm + 1âppm | V: 14âmm + 1âppm Tilt compensation: RTK + 2 mm + 0.3 mm\/° Convergence time: ~5âs typically" 2421 }, 2422{ 2423 "@type": "PropertyValue", 2424 "name": "Data protocols", 2425 "value": "Corrections: NTRIP, RTCM3 Position output: NMEA, LLH\/XYZ Data logging: RINEX, NMEA, LLH\/XYZ, UBX Internal storage: 16âGB" 2426 }, 2427{ 2428 "@type": "PropertyValue", 2429 "name": "GNSS", 2430 "value": "Signal tracked: GPS: L1C\/A, L2C, L5, GLONASS: L1OF, L2OF, Galileo: E1-B\/C, E5a, E6, BeiDou: B1I, B1C, B2a, B3I, QZSS: L1C\/A, L1C\/B11, L2C, L5, NavIC: L1-SPS Data, L5-SPS Number of channels: 672 Update rates: up to 10âHz" 2431 }, 2432{ 2433 "@type": "PropertyValue", 2434 "name": "Connectivity", 2435 "value": "Lora radio* Frequency range: 868\/915âMHz Power: Up to 1W Distance: Up to 8âkm UHF radio* Frequency range: 410 - 470 MHz Power: Up to 2W Protocols: TRIMTALK 450S** Modulation type: GMSK LTE modem Regions: Global Bands: FDD-LTE: 1, 2, 3, 4, 5, 7, 8, 12, 13, 18, 19, 20, 26, 28 TD-LTE: 38, 39, 40, 41 UMTS (UHPS\/FDD): 1, 2, 5, 8 Quad-band, 850\/1900, 900\/1800 MHz SIM card: Nano-SIM Wi-Fi: 802.11 b\/g\/n Bluetooth: Bluetooth 5.1 (BR\/EDR + LE) Ports: RS-232, USB Type-C *Use the correct antenna, LoRa or UHF, for your setup. The exact power and the available frequency range are subject to regional regulations. See the datasheet for more information. **TRIMTALK is a trademark of Trimble Inc." 2436 } 2437]} 2438</script>
2438 2439 2440 2441<div class="product-top-area flex f-wrap f-a-start wrapper wrapper--only-pad" data-product> 2442 <div class="product--left-area sticky"> 2443 <style> 2444 2445 2446 .keen-slider--wrapper { 2447 overflow: hidden; 2448} 2449 2450.custom-slide-nav { 2451 position: relative; 2452 display: inline-flex; 2453} 2454 2455.custom-slide-nav .slide-counts { 2456 position: absolute; 2457 left: 0; 2458 top: 50%; 2459 transform: translateY(-50%); 2460 text-align: center; 2461 padding: 0 40px; 2462 font-size: 12px; 2463 width: 100%; 2464 pointer-events: none; 2465} 2466 2467@media (max-width: 834px) { 2468 .custom-slide-nav .slide-counts { 2469 padding: 0 30px; 2470 } 2471} 2472 2473.custom-slide-nav .keen-nav { 2474 display: flex; 2475} 2476 2477.custom-slide-nav .keen-nav li { 2478 margin: 0; 2479 line-height: 0; 2480} 2481 2482.custom-slide-nav .keen-nav li:last-child { 2483 margin-left: 50px; 2484} 2485 2486@media (max-width: 834px) { 2487 .custom-slide-nav .keen-nav li:last-child { 2488 margin-left: 30px; 2489 } 2490} 2491 2492.custom-slide-nav .keen-nav li .keen-arrow-prev { 2493 transform: rotate(180deg); 2494} 2495 2496.custom-slide-nav .keen-nav li button[disabled] { 2497 display: none; 2498} 2499 2500.custom-slide-nav .keen-nav svg { 2501 width: 33px; 2502 height: 33px; 2503} 2504 2505@media (max-width: 834px) { 2506 .custom-slide-nav .keen-nav svg { 2507 width: 23px; 2508 height: 23px; 2509 } 2510} 2511 2512.keen-slider { 2513 display: flex; 2514 overflow: hidden; 2515 position: relative; 2516 -webkit-user-select: none; 2517 -moz-user-select: none; 2518 user-select: none; 2519 -webkit-touch-callout: none; 2520 -khtml-user-select: none; 2521 touch-action: pan-y; 2522 -webkit-tap-highlight-color: transparent; 2523 flex-wrap: nowrap !important; 2524 transition: opacity 0.35s ease, visibility 0.35s ease; 2525} 2526 2527.keen-slider li:not(.flex) { 2528 display: block; 2529} 2530 2531.keen-slider:not(.keen-slider--ready) { 2532 opacity: 0; 2533 visibility: hidden; 2534} 2535 2536.keen-slider.keen--adaptive-height { 2537 align-items: flex-start; 2538 transition: height 0.15s ease, opacity 0.35s ease, visibility 0.35s ease; 2539} 2540 2541.keen-slider.keen--adaptive-height .keen-slider__slide { 2542 min-height: 0; 2543} 2544 2545.keen-slider__slide { 2546 position: relative; 2547 overflow: hidden; 2548 width: 100%; 2549 min-height: 100%; 2550} 2551 2552.keen-slider[data-keen-slider-v] { 2553 flex-wrap: wrap; 2554} 2555 2556.keen-slider[data-keen-slider-v] .keen-slider__slide { 2557 width: 100%; 2558} 2559 2560.keen-slider[data-keen-slider-moves] * { 2561 pointer-events: none; 2562} 2563 2564.keen-slider.fade-slider { 2565 transition: height 0.25s; 2566} 2567 2568.keen-slider.fade-slider .fader-slide { 2569 transform: none !important; 2570 position: absolute; 2571 top: 0; 2572 opacity: 0; 2573 width: 100%; 2574 height: 100%; 2575} 2576 2577.keen-slider.fade-slider .fader-slide:not(.active) { 2578 pointer-events: none; 2579} 2580 2581.keen-arrow { 2582 pointer-events: auto; 2583 transition: opacity 0.35s ease, visibility 0.35s ease, background 0.35s ease; 2584 position: relative; 2585} 2586 2587.keen-arrow[disabled] { 2588 opacity: 0; 2589 visibility: hidden; 2590} 2591 2592.keen-arrow.keen-arrow-prev { 2593 transform: rotate(180deg); 2594} 2595 2596.keen-dots { 2597 display: flex; 2598 align-items: center; 2599 justify-content: center; 2600 position: absolute; 2601 bottom: 0; 2602 left: 0; 2603 width: 100%; 2604} 2605 2606.keen-dots li { 2607 margin: 0 4px; 2608} 2609 2610.keen-dots li button { 2611 display: block; 2612 width: 9px; 2613 height: 9px; 2614 background: currentColor; 2615 border-radius: 50%; 2616 padding: 0; 2617 transition: opacity 0.35s ease; 2618 border: 1px solid currentColor; 2619} 2620 2621.keen-dots li button:not(.active) { 2622 background: transparent; 2623} 2624 2625.keen-nav-group { 2626 display: flex; 2627 align-items: center; 2628 justify-content: center; 2629 position: absolute; 2630 bottom: 0; 2631 left: 0; 2632 width: 100%; 2633} 2634 2635@media (max-width: 834px) { 2636 .keen-nav-group { 2637 justify-content: space-between; 2638 } 2639} 2640 2641.keen-nav-group .keen-dots { 2642 margin: 0 40px; 2643 display: inline-flex; 2644 width: auto; 2645 position: static; 2646} 2647 2648.keen-nav { 2649 position: absolute; 2650 top: 50%; 2651 left: 0; 2652 width: 100%; 2653 justify-content: space-between; 2654 display: flex; 2655 align-items: center; 2656 margin: 0; 2657 z-index: 1; 2658 pointer-events: none; 2659 transform: translateY(-50%); 2660} 2661 2662@media (max-width: 834px) { 2663 .keen-nav { 2664 padding: 0 8px; 2665 } 2666} 2667 2668.keen-nav li { 2669 padding: 0; 2670 line-height: 0; 2671}</style> 2672 <div class="product-images"> 2673 2674 2675 <ul class="keen-slider" data-keen-slider='{ 2676 "dots": false, 2677 "arrows": true, 2678 "loop": true, 2679 "id": "mainProductSlider", 2680 "adaptiveHeight": false, 2681 "dotsContainer": ".product--left-area .slider-dots", 2682 "appendArrows": ".product-images .slider-arrows", 2683 "arrowSvg": "<svg width=\"13\" height=\"8\" viewBox=\"0 0 13 8\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7.25 5.5C7.25 5.08579 6.91421 4.75 6.5 4.75C6.08579 4.75 5.75 5.08579 5.75 5.5H7.25ZM5.96967 7.03033C6.26256 7.32322 6.73744 7.32322 7.03033 7.03033L11.8033 2.25736C12.0962 1.96447 12.0962 1.48959 11.8033 1.1967C11.5104 0.903806 11.0355 0.903806 10.7426 1.1967L6.5 5.43934L2.25736 1.1967C1.96447 0.903806 1.48959 0.903806 1.1967 1.1967C0.903806 1.48959 0.903806 1.96447 1.1967 2.25736L5.96967 7.03033ZM5.75 5.5V6.5H7.25V5.5H5.75Z\" fill=\"currentColor\"/></svg>", 2684 "responsive": [ 2685 { 2686 "breakpoint": "834px", 2687 "settings": { 2688 "arrows": false, 2689 "dots": true, 2690 "dotsContainer": false 2691 } 2692 } 2693 ] 2694 }'> 2695 2696 2697 <li data-product-image=''> 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716<div class="picture-element-wrapper wrapper--53468530049329 " style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 2717 2718 <picture> 2719 2720 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.663_48
27200x.webp?v=1759528847 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1759528847 2x"> 2721 2722 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.663_834x.webp?v=1759528847 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1759528847 2x"> 2723 2724 2725 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.663_1200x.webp?v=1759528847 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1759528847 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 2726 </picture> 2727 2728 2729 2730</div> 2731 2732 2733 </li> 2734 2735 2736 <li data-product-image=''> 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755<div class="picture-element-wrapper wrapper--58927197552945 " style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 2756 2757 <picture> 2758 2759 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/for_receivers_480x.webp?v=1783692975 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1783692975 2x"> 2760 2761 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/for_receivers_834x.webp?v=1783692975 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1783692975 2x"> 2762 2763 2764 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/for_receivers_1200x.webp?v=1783692975 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1783692975 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 2765 </picture> 2766 2767 2768 2769</div> 2770 2771 2772 </li> 2773 2774 2775 <li data-product-image=''> 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794<div class="picture-element-wrapper wrapper--53468529885489 " style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 2795 2796 <picture> 2797 2798 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.677_480x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 2799 2800 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.677_834x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 2801 2802 2803 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.677_1200x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 2804 </picture> 2805 2806 2807 2808</div> 2809 2810 2811 </li> 2812 2813 2814 <li data-product-image=''> 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833<div class="picture-element-wrapper wrapper--53468530082097 " style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 2834 2835 <picture> 2836 2837 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4_RENDERS_04.1174_480x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 2838 2839 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4_RENDERS_04.1174_834x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 2840 2841 2842 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4_RENDERS_04.1174_1200x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 2843 </picture> 2844 2845 2846 2847</div> 2848 2849 2850 </li> 2851 2852 2853 <li data-product-image=''> 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872<div class="picture-element-wrapper wrapper--53468530147633 " style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 2873 2874 <picture> 2875 2876 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.683_480x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 2877 2878 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.683_834x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 2879 2880 2881 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.683_1200x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 2882 </picture> 2883 2884 2885 2886</div> 2887 2888 2889 </li> 2890 2891 2892 <li data-product-image=''> 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911<div class="picture-element-wrapper wrapper--53468530180401 " style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 2912 2913 <picture> 2914 2915 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.685_480x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 2916 2917 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.685_834x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 2918 2919 2920 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.685_1200x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 2921 </picture> 2922 2923 2924 2925</div> 2926 2927 2928 </li> 2929 2930 2931 <li data-product-image=''> 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950<div class="picture-element-wrapper wrapper--53468529983793 " style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 2951 2952 <picture> 2953 2954 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.679_480x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 2955 2956 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.679_834x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 2957 2958 2959 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.679_1200x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 2960 </picture> 2961 2962 2963 2964</div> 2965 2966 2967 </li> 2968 2969 2970 <li data-product-image=''> 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989<div class="picture-element-wrapper wrapper--53518871101745 " style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 2990 2991 <picture> 2992 2993 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4_RENDERS_PRO_480x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 2994 2995 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4_RENDERS_PRO_834x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 2996 2997 2998 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4_RENDERS_PRO_1200x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 2999 </picture> 3000 3001 3002 3003</div> 3004 3005 3006 </li> 3007 3008 </ul> 3009 3010 <div class="slider-arrows"></div> 3011 </div> 3012 3013
3014 <ul class="slider-dots flex"> 3015 3016 3017 <li data-dot="0"> 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036<div class="picture-element-wrapper wrapper--53468530049329 object-fit--cover" style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 3037 3038 <picture> 3039 3040 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.663_480x.webp?v=1759528847 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1759528847 2x"> 3041 3042 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.663_834x.webp?v=1759528847 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1759528847 2x"> 3043 3044 3045 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.663_350x.webp?v=1759528847 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1759528847 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 3046 </picture> 3047 3048 3049 3050</div> 3051 3052 3053 </li> 3054 3055 3056 <li data-dot="1"> 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075<div class="picture-element-wrapper wrapper--58927197552945 object-fit--cover" style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 3076 3077 <picture> 3078 3079 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/for_receivers_480x.webp?v=1783692975 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1783692975 2x"> 3080 3081 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/for_receivers_834x.webp?v=1783692975 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1783692975 2x"> 3082 3083 3084 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/for_receivers_350x.webp?v=1783692975 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1783692975 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 3085 </picture> 3086 3087 3088 3089</div> 3090 3091 3092 </li> 3093 3094 3095 <li data-dot="2"> 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114<div class="picture-element-wrapper wrapper--53468529885489 object-fit--cover" style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 3115 3116 <picture> 3117 3118 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.677_480x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 3119 3120 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.677_834x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 3121 3122 3123 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.677_350x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 3124 </picture> 3125 3126 3127 3128</div> 3129 3130 3131 </li> 3132 3133 3134 <li data-dot="3"> 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153<div class="picture-element-wrapper wrapper--53468530082097 object-fit--cover" style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 3154 3155 <picture> 3156 3157 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4_RENDERS_04.1174_480x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 3158 3159 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4_RENDERS_04.1174_834x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 3160 3161 3162 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4_RENDERS_04.1174_350x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 3163 </picture> 3164 3165 3166 3167</div> 3168 3169 3170 </li> 3171 3172 3173 <li data-dot="4"> 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192<div class="picture-element-wrapper wrapper--53468530147633 object-fit--cover" style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 3193 3194 <picture> 3195 3196 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.683_480x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 3197 3198 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.683_834x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 3199 3200 3201 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.683_350x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 3202 </picture> 3203 3204 3205 3206</div> 3207 3208 3209 </li> 3210 3211 3212 <li data-dot="5"> 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231<div class="picture-element-wrapper wrapper--53468530180401 object-fit--cover" style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 3232 3233 <picture> 3234 3235 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.685_480x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 3236 3237 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.685_834x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 3238 3239 3240 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.685_350x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 3241 </picture> 3242 3243 3244 3245</div> 3246 3247 3248 </li> 3249 3250 3251 <li data-dot="6"> 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270<div class="picture-element-wrapper wrapper--53468529983793 object-fit--cover" style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 3271 3272 <picture> 3273 3274 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.679_480x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 3275 3276 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.679_834x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 3277 3278 3279 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.679_350x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 3280 </picture> 3281 3282 3283 3284</div> 3285 3286 3287 </li> 3288 3289 3290 <li data-dot="7"> 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309<div class="picture-element-wrapper wrapper--53518871101745 object-fit--cover" style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 3310 3311 <picture> 3312 3313 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4_RENDERS_PRO_480x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 3314 3315 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/RS4_RENDERS_PRO_834x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x"> 3316 3317 3318 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4_RENDERS_PRO_350x.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1763661645 2x" alt="Reach RS4 Pro" data-lazy class="picture-element-image" style=" "> 3319 </picture> 3320 3321 3322 3323</div> 3324 3325 3326 </li> 3327 3328 </ul> 3329 3330 3331</div> 3332 <style> 3333 .freeShippingMessage {margin-bottom: 16px; margin-top: 5px; } 3334 3335 .product-page .product--right-area .product-prices { 3336 margin: 0 !important; 3337 padding: 0 !important; 3338 border-bottom: none !important; 3339 align-items: baseline; 3340 } 3341 .product-option { 3342 ul.flex { 3343 gap: 8px; 3344 flex-wrap: wrap; 3345 } 3346 3347 input[type="radio"] { 3348 position: absolute; 3349 opacity: 0; 3350 width: 0; 3351 height: 0; 3352 pointer-events: none; 3353 } 3354 3355 label { 3356 display: inline-flex; 3357 align-items: center; 3358 justify-content: center; 3359 padding: 8px 14px; 3360 white-space: nowrap; 3361 border: 2px solid #eaeaea; 3362 cursor: pointer; 3363 transition: border-color 0.15s, color 0.15s; 3364 font-family: "Geist Mono", monospace; 3365 font-size: 12px; 3366 font-weight: 570; 3367 line-height: 130%; 3368 text-transform: uppercase; 3369 letter-spacing: -0.01em; 3370 } 3371 3372 input[type="radio"]:checked + label { 3373 border-color: #4e18ff; 3374 color: #4e18ff; 3375 } 3376 3377 input[type="radio"]:disabled + label { 3378 opacity: 0.4;
3379 cursor: not-allowed; 3380 } 3381} 3382 3383.variant-naming { 3384 margin-left: -15px; 3385 } 3386 .product-page .product--right-area .product-short-description { 3387 3388 margin: 32px 0 !important; 3389 } 3390 3391 .product-page .product--right-area .product-short-description h4 { 3392 3393 margin-bottom: 10px !important; 3394 } 3395 3396 @media only screen and (max-width: 600px) { 3397 /* .freeShipping { border-top: 1px solid #eaeaea;padding-top: 16px;} */ 3398 } 3399</style> 3400 3401 3402 3403 3404 3405 3406 3407 3408<div class="product--right-area"> 3409 3410 3411 3412 3413 3414<nav class="breadcrumbs"> 3415 <a href="/" title="Home">Home</a> 3416 3417 3418 3419 3420 3421 3422 <span class="breadcrumbs-divider">|</span> 3423 3424 <span>Reach RS4 Pro</span> 3425 3426 3427 3428</nav> 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439<style data-shopify> 3440 .indicator { 3441 width: 13px !important; 3442 height: 13px !important; 3443 border-radius: 50% !important; 3444 background-color: #ed7520 !important; /* Inner green circle */ 3445 display: flex !important; 3446 align-items: center !important; 3447 justify-content: center !important; 3448 margin-right: 8px !important; 3449 border: 1px solid white !important; /* White ring */ 3450 box-shadow: 0 0 0 2px #f3c8ab !important; /* Light green outer border */ 3451 } 3452</style> 3453 3454 3455 3456<style data-shopify> 3457 .indicator { 3458 width: 13px !important; 3459 height: 13px !important; 3460 border-radius: 50% !important; 3461 background-color: #ed7520 !important; /* Inner green circle */ 3462 display: flex !important; 3463 align-items: center !important; 3464 justify-content: center !important; 3465 margin-right: 8px !important; 3466 border: 1px solid white !important; /* White ring */ 3467 box-shadow: 0 0 0 2px #f3c8ab !important; /* Light green outer border */ 3468 } 3469</style> 3470 3471 3472 <h1 class="product-title">Reach RS4 Pro</h1> 3473 3474 <div class="product-review-stars"> 3475 <div class="yotpo bottomLine" data-product-id="10409911648561"></div> 3476 </div> 3477 3478 3479 <div class="product-specifications-description rte freeShippingMessage"> 3480 <div class="metafield-rich_text_field"><p>All-band RTK GNSS receiver with dual cameras and tilt compensation.<br /> 3481<br /> 3482Comes with a free year of <a href="#promo-free-year"><strong>Emlid Corrections</strong></a>. Top up now to lock in the lowest rate â just $300/year for 4 years total.</p></div> 3483 </div> 3484 3485 3486 <form class="product-form" action="/cart/add" data-add-to-cart> 3487 3488 <div class="product-options"> 3489 3490 3491 3492 3493 3494 3495 3496 <div class="product-option "> 3497 <span class="option-title">Corrections Top-Up:</span> 3498 <ul class="flex f-grid--xs"> 3499 3500 3501 3502 3503 3504 <li> 3505 <input 3506 type="radio" 3507 name="option1" 3508 value="Free year" 3509 3510 id="value-reach-rs4-pro----free-year" 3511 3512 3513 data-variant-option-trigger 3514 data-index="option1" 3515 > 3516 <label for="value-reach-rs4-pro----free-year"> 3517 <span class="p">Free year</span> 3518 3519 3520</label> 3521 </li> 3522 3523 3524 3525 3526 3527 <li> 3528 <input 3529 type="radio" 3530 name="option1" 3531 value="+3 years of corrections" 3532 3533 id="value-reach-rs4-pro----3-years-of-corrections" 3534 3535 3536 data-variant-option-trigger 3537 data-index="option1" 3538 > 3539 <label for="value-reach-rs4-pro----3-years-of-corrections"> 3540 <span class="p">+3 years of corrections</span> 3541 3542 3543</label> 3544 </li> 3545 3546 </ul> 3547 </div> 3548 3549 </div> 3550 3551 3552 <select name="id" data-master-select class="hide"> 3553 3554 <option 3555 value="55594169827633" 3556 3557 > 3558 Free year 3559 </option> 3560 3561 <option 3562 value="55594169860401" 3563 3564 > 3565 +3 years of corrections 3566 </option> 3567 3568 </select> 3569 3570 <input 3571 type="hidden" 3572 name="properties[_variant_description]" 3573 value="" 3574 data-line-item-variant-description 3575 > 3576 3577 3578 <p class="product-prices flex" data-product-prices>
3579 <span data-price class="money product-price "> 3580 3581 $4,599 3582 3583 </span> 3584 <span class="money compare-at-price hide "> 3585 <svg class="price-cross" viewBox="0 0 100 14" xmlns="http://www.w3.org/2000/svg"> 3586 <!-- outline (bottom) --> 3587 <line x1="0" y1="7" x2="100" y2="7" stroke="#FAFAFA" stroke-width="3" vector-effect="non-scaling-stroke" 3588 stroke-linecap="round" /> 3589 <!-- main line (top) --> 3590 <line x1="0" y1="7" x2="100" y2="7" stroke="#717171" stroke-width="1" vector-effect="non-scaling-stroke" 3591 stroke-linecap="round" /> 3592 </svg> 3593 <span data-compare-price class="money"></span> 3594 </span> 3595 3596 3597 <span class="tax-info">tax excl.</span> 3598 3599 3600 </p> 3601 3602 3603 <p class="freeShippingMessage">Free shipping from Chicago (2-7 days)</p> 3604 3605 3606 <div class="quantity-atc-area flex f-j-between f-a-center"> 3607 <div class="quantity-selector flex" data-number-selector> 3608 <button type="button" data-minus> 3609 <svg 3610 xmlns="http://www.w3.org/2000/svg" 3611 aria-hidden="true" 3612 focusable="false" 3613 class="icon icon-minus" 3614 fill="none" 3615 viewBox="0 0 10 2" 3616> 3617 <path fill-rule="evenodd" clip-rule="evenodd" d="M.5 1C.5.7.7.5 1 .5h8a.5.5 0 110 1H1A.5.5 0 01.5 1z" fill="currentColor"> 3618</svg> 3619 3620 </button> 3621 <input type="text" data-quantity data-input min="0" max="999" value="1" name="quantity"> 3622 <button type="button" data-plus> 3623 <svg 3624 xmlns="http://www.w3.org/2000/svg" 3625 aria-hidden="true" 3626 focusable="false" 3627 class="icon icon-plus" 3628 fill="none" 3629 viewBox="0 0 10 10" 3630> 3631 <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"> 3632</svg> 3633 3634 </button> 3635 </div> 3636 3637 3638 <button 3639 data-submit 3640 class="product-atc btn btn--accent" 3641 type="submit" 3642 3643 > 3644 3645 Add to cart 3646 3647 </button> 3648 3649 3650 3651 3652 3653 3654 </div> 3655 </form> 3656 3657 <style> 3658 .testClass { 3659 display: none; 3660 } 3661 .alterAccordion { 3662 display: none; 3663 } 3664 </style> 3665 3666 3667 <!-- Selectors --> 3668 <style> 3669 .BAD-collection-slider { 3670 display: flex; 3671 flex-direction: row; 3672 align-items: center; 3673 justify-content: space-between; 3674 text-align: center; 3675 3676 } 3677 3678 .bundleItemContainer { 3679 background: white; 3680 3681 padding: 5px 10px; 3682 border: 1px solid #eaeaea; 3683 margin-bottom: 35px; 3684 } 3685 3686 .BAD-collection-slider img { 3687 max-width: 75px; 3688 height: auto; 3689 3690 } 3691 3692 .BAD-collection-product-name { 3693 font-size: 16px; 3694 3695 max-width: 350px; 3696 3697 } 3698 3699 @media only screen and (max-width: 600px) { 3700 .BAD-collection-product-name { 3701 max-width: 150px; 3702 font-size: 14px; 3703 } 3704 } 3705 3706 .BAD-add-to-cart-btn { 3707 background-color: #4E18FF; 3708 color: white; 3709 padding: 4px 10px; 3710 font-size: 13px; 3711 cursor: pointer; 3712 transition: all 0.2s ease-in; 3713 } 3714 3715 .BAD-add-to-cart-btn:hover { 3716 background-color: #4100C4; 3717 color: #FAFAFA; 3718 } 3719 .BAD-add-to-cart-btn:active { 3720 background: #4946FF; 3721 color: #FAFAFA; 3722 border-color: #4946FF; 3723} 3724 3725 3726 .BAD-slider-controls { 3727 display: flex; 3728 justify-content: center; 3729 gap: 10px; 3730 margin-top: 10px; 3731 background: #fff; 3732 apdding:.05rem; 3733 border: #eaeaea solid 0px; 3734 margin-bottom:2rem; 3735 } 3736@media screen and (max-width: 768px) { 3737 .BAD-slider-controls { 3738 display: flex; 3739 justify-content: center; 3740 gap: 10px; 3741 margin-top: 10px; 3742 background: #fff; 3743 apdding:.05rem; 3744 border: #eaeaea solid 0px; 3745 margin-bottom:1rem; 3746 } 3747} 3748 .BAD-slider-controls button { 3749 background: none; 3750 color: grey; 3751 padding: 0 5px; 3752 cursor: pointer; 3753 } 3754 .block-title {font-family: Open Sans, Arial, sans-serif; 3755 font-size:18px; 3756 font-weight:500; 3757 } 3758</style> 3759 3760 3761 3762 3763 3764 3765 3766 <!-- end of selectors --> 3767 3768 <div class="product-accordion accordion mainAccordion"> 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 <div class="accordion-item"> 3780 <input 3781 type="checkbox" 3782 id="accordion-1" 3783 class="accordion-toggle" 3784 3785 checked 3786 3787 hidden 3788 > 3789 <label for="accordion-1" class="accordion-header flex f-j-between f-a-center"> 3790 <h4>Key Features</h4>
3791 <span class="accordion-icon"></span> 3792 </label> 3793 3794 <div class="accordion-content-wrapper"> 3795 <div class="accordion-content"> 3796 <div class="accordion-content-inner"> 3797 <div class="rte"> 3798 <h3> 3799<meta charset="utf-8"> <meta charset="utf-8"> <span class="notion-enable-hover">All-band RTK GNSS receiver with dual cameras and tilt compensation</span><!-- notionvc: f945a537-2827-4457-aad5-c86781b43bed --><br><!-- notionvc: 2bdb135e-f6d1-408e-aefb-75b3eb1b2ea4 --> 3800</h3> 3801<p><meta charset="utf-8"><meta charset="utf-8">Next-level stakeout with augmented reality and measuring from photos. Comes with a mobile app.<!-- notionvc: dabb0560-3686-4b17-8029-b585b8ec8bee --><br><!-- notionvc: b4e8c65c-edf6-48cc-8b5f-8350bdad3e14 --></p> 3802<h4> 3803<meta charset="utf-8"> <span class="notion-enable-hover">Two Full-HD cameras</span><!-- notionvc: df805441-2ac7-4514-a3da-ecbdb313f460 --><br><!-- --> <!-- notionvc: 3c853c7f-e1db-45b6-bfa7-eddc5e052542 --> 3804</h4> 3805<p><meta charset="utf-8"><meta charset="utf-8">AR guidance for stakeout <br>Measurements from images<!-- notionvc: 43a949ff-34eb-4e86-a5ef-d123c752a78b --><br></p> 3806<h4>High precision</h4> 3807<p><meta charset="utf-8">RTK: 7 mm + 1 ppm<br><meta charset="utf-8">Tilt compensation: RTK + 2 mm + 0.3 mm/°<br><!-- notionvc: 614c0fe3-caa3-4b76-b3ac-f0858a390a57 --></p> 3808<h4>Emlid Corrections</h4> 3809<p>To achieve centimeter-level (sub-inch) accuracy with RTK, you need a source of corrections â positioning enhancement data that upgrades standard GNSS accuracy from meters to centimeters in real time. <br><br>Your receiver includes one free year of Emlid Corrections â a built-in network service to receive corrections over the internet. <a href="#promo-free-year">Learn more and check coverage in your area.</a></p> 3810<h4> 3811<meta charset="utf-8"> <meta charset="utf-8"> <span class="notion-enable-hover">All-band support</span><!-- notionvc: 4c88f207-00c5-4ded-9ee0-4dccacdf8f36 --><br><!-- notionvc: cd7027db-5551-4cc0-8d0e-a8a7a3863d7a --> 3812</h4> 3813<p><meta charset="utf-8">GPS: L1C/A, L2C, L5 <br>GLONASS: L1OF, L2OF <br>Galileo: E1-B/C, E5a, E6 <br>BeiDou: B1I, B1C, B2a, B3I <br>QZSS: L1C/A, L1C/B11, L2C, L5 <br>NavIC: L1-SPS Data, L5-SPS<!-- notionvc: e435eac9-7fe4-40c5-b52b-6060098de1f3 --></p> 3814<h4> 3815<meta charset="utf-8"> <span class="notion-enable-hover">Base and rover</span><!-- notionvc: 3186ade2-c7c4-480d-8e36-23a5f5410169 --> 3816</h4> 3817<p><meta charset="utf-8"><meta charset="utf-8">915 MHz LoRa, 450 MHz UHF, NTRIP<br><!-- notionvc: cfa37089-e5be-4bd2-b0e8-bc7687177524 --></p> 3818<h4> 3819<meta charset="utf-8"> <meta charset="utf-8"> <span class="notion-enable-hover">Rugged and powerful</span><!-- notionvc: fdaa66e2-5532-4335-a2e5-6f50d5a7b542 --><br><!-- notionvc: 44a10220-0fe9-4ac7-8254-441ec31054a1 --> 3820</h4> 3821<p><meta charset="utf-8"><meta charset="utf-8">16 hours on one charge<span class="notion-enable-hover"> <br></span>Magnesium alloy body <br>IP68 rating <br>Withstands temperatures <span class="discussion-level-1 discussion-id-273498ed-188c-8077-849b-001cb6c798f7 notion-enable-hover">from -40 to +65°C <meta charset="utf-8"> <span class="discussion-level-1 discussion-id-273498ed-188c-80ad-96b6-001c11e598aa notion-enable-hover">(-40 to +149ºF)<br><br></span></span><!-- notionvc: b2f7a1e0-d3e4-4a66-8a01-e4735ec3f723 --><!-- notionvc: 85a39ad5-7876-4b30-b07c-660ef90ae048 --><meta charset="utf-8"></p> 3822<p><meta charset="utf-8"><meta charset="utf-8"><a href="https://emlid.com/reachrs4pro/" rel="noopener" target="_blank"><span>Explore all Reach RS4 Pro features and user reviews</span></a></p> 3823<h4>Package includes</h4> 3824<p><meta charset="utf-8"><span class="discussion-id-273498ed-188c-8061-ae20-001c3a079042 notion-enable-hover">- </span><span class="discussion-id-273498ed-188c-8061-ae20-001c3a079042 notion-enable-hover">Reach RS4 Pro<br></span><span>- Carrying case <br>- USB Type-C cable</span><span> <br>- LoRa Antenna 860-930 MHz <br>- UHF Antenna 410-470 MHz<br><strong><br><br></strong></span></p> 3825 </div> 3826 </div> 3827 </div> 3828 </div> 3829 </div> 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 <div class="accordion-item"> 3840 <input 3841 type="checkbox" 3842 id="accordion-2" 3843 class="accordion-toggle" 3844 3845 checked 3846 3847 hidden 3848 > 3849 <label for="accordion-2" class="accordion-header flex f-j-between f-a-center"> 3850 <h4>Shipping</h4>
3851 <span class="accordion-icon"></span> 3852 </label> 3853 3854 <div class="accordion-content-wrapper"> 3855 <div class="accordion-content"> 3856 <div class="accordion-content-inner"> 3857 <div class="rte"> 3858 <h4>Shipping from Chicago</h4><p>2-7 days by FedEx or UPS</p> 3859 </div> 3860 </div> 3861 </div> 3862 </div> 3863 </div> 3864 3865 3866 3867 <div class="accordion-item"> 3868 <input 3869 type="checkbox" 3870 id="accordion-warranty" 3871 class="accordion-toggle" 3872 hidden 3873 > 3874 <label for="accordion-warranty" class="accordion-header flex f-j-between f-a-center"> 3875 <h4>Free 1-Year Warranty</h4> 3876 <span class="accordion-icon"></span> 3877 </label> 3878 3879 <div class="accordion-content-wrapper"> 3880 <div class="accordion-content"> 3881 <div class="accordion-content-inner"> 3882 <div class="rte"> 3883 <div class="metafield-rich_text_field"><p>Emlid Reach RS4 Pro comes with a free 1-year warranty. If you experience any issues, please contact us at <a href="/cdn-cgi/l/email-protection#aad9dfdadac5d8deeacfc7c6c3ce84c9c5c7" target="_blank"><span class="__cf_email__" data-cfemail="9be8eeebebf4e9efdbfef6f7f2ffb5f8f4f6">[email protected]</span></a>, providing your order number.</p></div> 3884 </div> 3885 </div> 3886 </div> 3887 </div> 3888 </div> 3889 3890 3891 3892 <div 3893 style="border-bottom: none;" 3894 class="accordion-item" 3895 data-scroll-to=' 3896 { 3897 "target": ".radiant--product-specifications", 3898 "on": "click" 3899 } 3900 ' 3901 > 3902 <div class="accordion-header flex f-j-between f-a-center"> 3903 <h4>Specifications</h4> 3904 <svg width="34" height="14" viewBox="0 0 12 6" fill="none" xmlns="http://www.w3.org/2000/svg"> 3905 <path d="M5.46967 5.53033C5.76256 5.82322 6.23744 5.82322 6.53033 5.53033L11.3033 0.757359C11.5962 0.464466 11.5962 -0.010407 11.3033 -0.3033C11.0104 -0.596194 10.5355 -0.596194 10.2426 -0.3033L6 3.93934L1.75736 -0.3033C1.46447 -0.596194 0.989592 -0.596194 0.696698 -0.3033C0.403805 -0.010407 0.403805 0.464466 0.696698 0.757359L5.46967 5.53033Z" fill="white"/> 3906</svg> 3907 3908 </div> 3909 </div> 3910 3911 </div> 3912 3913 <style> 3914 .accordion-toggle:checked + .accordion-header + .accordion-content-wrapper .accordion-content { 3915 max-height: 1500px; 3916 transition: max-height 0.3s ease; 3917 } 3918 3919 .accordion-icon::before { 3920 content: "+"; 3921 font-size: 20px; 3922 display: inline-block; 3923 transition: transform 0.3s ease; 3924 } 3925 3926 .accordion-toggle:checked + .accordion-header .accordion-icon::before { 3927 content: "â"; 3928 transform: rotate(180deg); /* Rotate the icon when toggled */ 3929 } 3930 3931 .accordion-icon::before { 3932 transform: rotate(0deg); /* Initial position for the plus sign */ 3933 } 3934 3935 3936 3937 3938 .accordion-content { 3939 max-height: 0; 3940 overflow: hidden; 3941 transition: max-height 0.3s ease; 3942 } 3943 3944 .accordion-toggle { 3945 display: none !important; 3946 } 3947 </style> 3948 3949 3950 <nav class="payment-methods"> 3951 <ul class="flex f-grid--xs"> 3952 3953 <li> 3954 <img data-lazy="" data-src="//store.emlid.com/cdn/shopifycloud/shopify/assets/payment_icons/american_express-12858714bc10cdf384b62b8f41d20f56d8c32c1b8fed98b662f2bfc158dcbcf0.svg" alt="american_express" data-ll-status="loaded" class="entered loaded" src="//store.emlid.com/cdn/shopifycloud/shopify/assets/payment_icons/american_express-12858714bc10cdf384b62b8f41d20f56d8c32c1b8fed98b662f2bfc158dcbcf0.svg"> 3955 </li> 3956 <li> 3957 <img data-lazy="" data-src="//https://cdn.shopify.com/shopifycloud/web/assets/v1/vite/client/en/assets/discover-BV9fGXxjUnzR.svg" alt="discover" data-ll-status="loaded" class="entered loaded" src="https://cdn.shopify.com/shopifycloud/web/assets/v1/vite/client/en/assets/discover-BV9fGXxjUnzR.svg"> 3958 </li> 3959 <li> 3960 <img data-lazy="" data-src="https://store.emlid.com/cdn/shopifycloud/shopify/assets/payment_icons/master-173035bc8124581983d4efa50cf8626e8553c2b311353fbf67485f9c1a2b88d1.svg" alt="master_card" data-ll-status="loaded" class="entered loaded" src="https://eu.store.emlid.com/cdn/shopifycloud/shopify/assets/payment_icons/master-173035bc8124581983d4efa50cf8626e8553c2b311353fbf67485f9c1a2b88d1.svg"> 3961 </li> 3962 <li> 3963 <img data-lazy="" data-src="https://store.emlid.com/cdn/shopifycloud/shopify/assets/payment_icons/visa-319d545c6fd255c9aad5eeaad21fd6f7f7b4fdbdb1a35ce83b89cca12a187f00.svg" alt="visa" data-ll-status="loaded" class="entered loaded" src="https://eu.store.emlid.com/cdn/shopifycloud/shopify/assets/payment_icons/visa-319d545c6fd255c9aad5eeaad21fd6f7f7b4fdbdb1a35ce83b89cca12a187f00.svg"> 3964 </li> 3965 </ul> 3966</nav> 3967 3968</div>
vendor: 110 bytes, lines 3968-3970
3968 3969 3970<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
3970<script> 3971window.variantDescriptions = { 3972 3973 55594169827633: "", 3974 3975 55594169860401: "" 3976 3977}; 3978document.addEventListener('change', function (e) { 3979// react only to variant option radios 3980if (!e.target.matches('[data-variant-option-trigger]')) return; 3981 3982const variantSelect = document.querySelector('[data-master-select]'); 3983const hiddenInput = document.querySelector('[data-line-item-variant-description]'); 3984 3985if (!variantSelect || !hiddenInput) return; 3986 3987const variantId = variantSelect.value; 3988const description = window.variantDescriptions?.[variantId] || ''; 3989 3990hiddenInput.value = description; 3991}); 3992 3993</script>
3993 3994 3995 3996 3997 3998
3998<script type="application/json" data-product-json> 3999 {"id":10409911648561,"title":"Reach RS4 Pro","handle":"reach-rs4-pro","description":"\u003ch3\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eAll-band RTK GNSS receiver with dual cameras and tilt compensation\u003c\/span\u003e\u003c!-- notionvc: f945a537-2827-4457-aad5-c86781b43bed --\u003e\u003cbr\u003e\u003c!-- notionvc: 2bdb135e-f6d1-408e-aefb-75b3eb1b2ea4 --\u003e\n\u003c\/h3\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eNext-level stakeout with augmented reality and measuring from photos. Comes with a mobile app.\u003c!-- notionvc: dabb0560-3686-4b17-8029-b585b8ec8bee --\u003e\u003cbr\u003e\u003c!-- notionvc: b4e8c65c-edf6-48cc-8b5f-8350bdad3e14 --\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eTwo Full-HD cameras\u003c\/span\u003e\u003c!-- notionvc: df805441-2ac7-4514-a3da-ecbdb313f460 --\u003e\u003cbr\u003e\u003c!-- --\u003e \u003c!-- notionvc: 3c853c7f-e1db-45b6-bfa7-eddc5e052542 --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eAR guidance for stakeout \u003cbr\u003eMeasurements from images\u003c!-- notionvc: 43a949ff-34eb-4e86-a5ef-d123c752a78b --\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch4\u003eHigh precision\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003eRTK: 7 mm + 1 ppm\u003cbr\u003e\u003cmeta charset=\"utf-8\"\u003eTilt compensation: RTK + 2 mm + 0.3 mm\/°\u003cbr\u003e\u003c!-- notionvc: 614c0fe3-caa3-4b76-b3ac-f0858a390a57 --\u003e\u003c\/p\u003e\n\u003ch4\u003eEmlid Corrections\u003c\/h4\u003e\n\u003cp\u003eTo achieve centimeter-level (sub-inch) accuracy with RTK, you need a source of corrections â positioning enhancement data that upgrades standard GNSS accuracy from meters to centimeters in real time. \u003cbr\u003e\u003cbr\u003eYour receiver includes one free year of Emlid Corrections â a built-in network service to receive corrections over the internet. \u003ca href=\"#promo-free-year\"\u003eLearn more and check coverage in your area.\u003c\/a\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eAll-band support\u003c\/span\u003e\u003c!-- notionvc: 4c88f207-00c5-4ded-9ee0-4dccacdf8f36 --\u003e\u003cbr\u003e\u003c!-- notionvc: cd7027db-5551-4cc0-8d0e-a8a7a3863d7a --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003eGPS: L1C\/A, L2C, L5 \u003cbr\u003eGLONASS: L1OF, L2OF \u003cbr\u003eGalileo: E1-B\/C, E5a, E6 \u003cbr\u003eBeiDou: B1I, B1C, B2a, B3I \u003cbr\u003eQZSS: L1C\/A, L1C\/B11, L2C, L5 \u003cbr\u003eNavIC: L1-SPS Data, L5-SPS\u003c!-- notionvc: e435eac9-7fe4-40c5-b52b-6060098de1f3 --\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eBase and rover\u003c\/span\u003e\u003c!-- notionvc: 3186ade2-c7c4-480d-8e36-23a5f5410169 --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003e915 MHz LoRa, 450 MHz UHF, NTRIP\u003cbr\u003e\u003c!-- notionvc: cfa37089-e5be-4bd2-b0e8-bc7687177524 --\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eRugged and powerful\u003c\/span\u003e\u003c!-- notionvc: fdaa66e2-5532-4335-a2e5-6f50d5a7b542 --\u003e\u003cbr\u003e\u003c!-- notionvc: 44a10220-0fe9-4ac7-8254-441ec31054a1 --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003e16 hours on one charge\u003cspan class=\"notion-enable-hover\"\u003e \u003cbr\u003e\u003c\/span\u003eMagnesium alloy body \u003cbr\u003eIP68 rating \u003cbr\u003eWithstands temperatures \u003cspan class=\"discussion-level-1 discussion-id-273498ed-188c-8077-849b-001cb6c798f7 notion-enable-hover\"\u003efrom -40 to +65°C \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"discussion-level-1 discu
3999ssion-id-273498ed-188c-80ad-96b6-001c11e598aa notion-enable-hover\"\u003e(-40 to +149ºF)\u003cbr\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!-- notionvc: b2f7a1e0-d3e4-4a66-8a01-e4735ec3f723 --\u003e\u003c!-- notionvc: 85a39ad5-7876-4b30-b07c-660ef90ae048 --\u003e\u003cmeta charset=\"utf-8\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003ca href=\"https:\/\/emlid.com\/reachrs4pro\/\" rel=\"noopener\" target=\"_blank\"\u003e\u003cspan\u003eExplore all Reach RS4 Pro features and user reviews\u003c\/span\u003e\u003c\/a\u003e\u003c\/p\u003e\n\u003ch4\u003ePackage includes\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cspan class=\"discussion-id-273498ed-188c-8061-ae20-001c3a079042 notion-enable-hover\"\u003e- \u003c\/span\u003e\u003cspan class=\"discussion-id-273498ed-188c-8061-ae20-001c3a079042 notion-enable-hover\"\u003eReach RS4 Pro\u003cbr\u003e\u003c\/span\u003e\u003cspan\u003e- Carrying case \u003cbr\u003e- USB Type-C cable\u003c\/span\u003e\u003cspan\u003e \u003cbr\u003e- LoRa Antenna 860-930 MHz \u003cbr\u003e- UHF Antenna 410-470 MHz\u003cbr\u003e\u003cstrong\u003e\u003cbr\u003e\u003cbr\u003e\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e","published_at":"2025-10-06T03:30:14-04:00","created_at":"2025-09-29T06:08:06-04:00","vendor":"Emlid Store US","type":"","tags":[],"price":459900,"price_min":459900,"price_max":579800,"available":true,"price_varies":true,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":55594169827633,"title":"Free year","option1":"Free year","option2":null,"option3":null,"sku":"RCH402","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Reach RS4 Pro - Free year","public_title":"Free year","options":["Free year"],"price":459900,"weight":2000,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":55594169860401,"title":"+3 years of corrections","option1":"+3 years of corrections","option2":null,"option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Reach RS4 Pro - +3 years of corrections","public_title":"+3 years of corrections","options":["+3 years of corrections"],"price":579800,"weight":2000,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}],"images":["\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.663.webp?v=1759528847","\/\/store.emlid.com\/cdn\/shop\/files\/for_receivers.webp?v=1783692975","\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.677.webp?v=1763661645","\/\/store.emlid.com\/cdn\/shop\/files\/RS4_RENDERS_04.1174.webp?v=1763661645","\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.683.webp?v=1763661645","\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.685.webp?v=1763661645","\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.679.webp?v=1763661645","\/\/store.emlid.com\/cdn\/shop\/files\/RS4_RENDERS_PRO.webp?v=1763661645"],"featured_image":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.663.webp?v=1759528847","options":["Corrections Top-Up"],"media":[{"alt":null,"id":43514506576177,"position":1,"preview_image":{"aspect_ratio":1.0,"height":3200,"width":3200,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.663.webp?v=1759528847"},"aspect_ratio":1.0,"height":3200,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.663.webp?v=1759528847","width":3200},{"alt":null,"id":48569027592497,"position":2,"preview_image":{"aspect_ratio":1.0,"height":1440,"width":1440,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/for_receivers.webp?v=1783692975"},"aspect_ratio":1.0,"height":1440,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/for_receivers.webp?v=1783692975","width":1440},{"alt":null,"id":43514506412337,"position":3,"preview_image":{"aspect_ratio":1.0,"height":3200,"width":3200,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.677.webp?v=1763661645"},"aspect_ratio":1.0,"height":3200,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.677.webp?v=1763661645","width":3200},{"alt":null,"id":43514506608945,"position":4,"preview_image":{"aspect_ratio":1.0,"height":2624,"width":2624,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4_RENDERS_04.1174.webp?v=1763661645"},"aspect_ratio":1.0,"height":2624,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4_RENDERS_04.1174.webp?v=1763661645","width":2624},{"alt":null,"id":43514506674481,"position":5,"preview_image":{"aspect_ratio":1.0,"height":3200,"width":3200,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.683.webp?v=1763661645"},"aspect_ratio":1.0,"height":3200,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.683.webp?v=1763661645","width":3200},{"alt":null,"id":43514506707249,"position":6,"preview_image":{"aspect_ratio":1.0,"height":1200,"width":1200,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.685.webp?v=1763661645"},"aspect_ratio":1.0,"height":1200,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.685.webp?v=1763661645","width":1200},{"alt":null,"id":43514506510641,"position":7,"preview_image":{"aspect_ratio":1.0,"height":3200,"width":3200,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.679.webp?v=1763661645"},"aspect_ratio":1.0,"height":3200,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.679.webp?v=1763661645","width":3200},{"alt":null,"id":43564215075121,"position":8,"preview_image":{"aspect_ratio":1.0,"height":3200,"width":3200,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4_RENDERS_PRO.webp?v=1763661645"},"aspect_ratio":1.0,"height":3200,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4_RENDERS_PRO.webp?v=1763661645","width":3200}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003ch3\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eAll-band RTK GNSS receiver with dual cameras and tilt compensation\u003c\/span\u003e\u003c!-- notionvc: f945a537-2827-4457-aad5-c86781b43bed --\u003e\u003cbr\u003e\u003c!-- notionvc: 2bdb135e-f6d1-408e-aefb-75b3eb1b2ea4 --\u003e\n\u003c\/h3\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eNext-level stakeout with augmented reality and measuring from photos. Comes with a mobile app.\u003c!-- notionvc: dabb0560-3686-4b17-8029-b585b8ec8bee --\u003e\u003cbr\u003e\u003c!-- notionvc: b4e8c65c-edf6-48cc-8b5f-8350bdad3e14 --\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eTwo Full-HD cameras\u003c\/span\u003e\u003c!-- notionvc: df805441-2ac7-4514-a3da-ecbdb313f460 --\u003e\u003cbr\u003e\u003c!-- --\u003e \u003c!-- notionvc: 3c853c7f-e1db-45b6-bfa7-eddc5e052542 --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eAR guidance for stakeout \u003cbr\u003eMeasurements from images\u003c!-- notionvc: 43a949ff-34eb-4e86-a5ef-d123c752a78b --\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch4\u003eHigh precision\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003eRTK: 7 mm + 1 ppm\u003cbr\u003e\u003cmeta charset=\"utf-8\"\u003eTilt compensation: RTK + 2 mm + 0.3 mm\/°\u003cbr\u003e\u003c!-- notionvc: 614c0fe3-caa3-4b76-b3ac-f0858a390a57 --\u003e\u003c\/p\u003e\n\u003ch4\u003eEmlid Corrections\u003c\/h4\u003e\n\u003cp\u003eTo achieve centimeter-level (sub-inch) accuracy with RTK, you need a source of corrections â positioning enhancement data that upgrades standard GNSS accuracy from meters to centimeters in real time. \u003cbr\u003e\u003cbr\u003eYour receiver includes one free year of Emlid Corrections â a built-in network service to receive corrections over the internet. \u003ca href=\"#promo-free-year\"\u003eLearn more and check coverage in your area.\u003c\/a\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eAll-band support\u003c\/span\u003e\u003c!-- notionvc: 4c88f207-00c5-4ded-9ee0-4dccacdf8f36 --\u003e\u003cbr\u003e\u003c!-- notionvc: cd7027db-5551-4cc0-8d0e-a8a7a3863d7a --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003eGPS: L1C\/A, L2C, L5 \u003cbr\u003eGLONASS: L1OF, L2OF \u003cbr\u003eGalileo: E1-B\/C, E5a, E6 \u003cbr\u003eBeiDou: B1I, B1C, B2a, B3I \u003cbr\u003eQZSS: L1C\/A, L1C\/B11, L2C, L5 \u003cbr\u003eNavIC: L1-SPS Data, L5-SPS\u003c!-- notionvc: e435eac9-7fe4-40c5-b52b-6060098de1f3 --\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eBase and rover\u003c\/span\u003e\u003c!-- notionvc: 3186ade2-c7c4-480d-8e36-23a5f5410169 --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003e915 MHz LoRa, 450 MHz UHF, NTRIP\u003cbr\u003e\u003c!-- notionvc: cfa37089-e5be-4bd2-b0e8-bc7687177524 --\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eRugged and powerful\u003c\/span\u003e\u003c!-- notionvc: fdaa66e2-5532-4335-a2e5-6f50d5a7b542 --\u003e\u003cbr\u003e\u003c!-- notionvc: 44a10220-0fe9-4ac7-8254-441ec31054a1 --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003e16 hours on one charge\u003cspan class=\"notion-enable-hover\"\u003e \u003cbr\u003e\u003c\/span\u003eMagnesium alloy body \u003cbr\u003eIP68 rating \u003cbr\u003eWithstands temperatures \u003cspan class=\"discussion-level-1 discu
3999ssion-id-273498ed-188c-8077-849b-001cb6c798f7 notion-enable-hover\"\u003efrom -40 to +65°C \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"discussion-level-1 discussion-id-273498ed-188c-80ad-96b6-001c11e598aa notion-enable-hover\"\u003e(-40 to +149ºF)\u003cbr\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!-- notionvc: b2f7a1e0-d3e4-4a66-8a01-e4735ec3f723 --\u003e\u003c!-- notionvc: 85a39ad5-7876-4b30-b07c-660ef90ae048 --\u003e\u003cmeta charset=\"utf-8\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003ca href=\"https:\/\/emlid.com\/reachrs4pro\/\" rel=\"noopener\" target=\"_blank\"\u003e\u003cspan\u003eExplore all Reach RS4 Pro features and user reviews\u003c\/span\u003e\u003c\/a\u003e\u003c\/p\u003e\n\u003ch4\u003ePackage includes\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cspan class=\"discussion-id-273498ed-188c-8061-ae20-001c3a079042 notion-enable-hover\"\u003e- \u003c\/span\u003e\u003cspan class=\"discussion-id-273498ed-188c-8061-ae20-001c3a079042 notion-enable-hover\"\u003eReach RS4 Pro\u003cbr\u003e\u003c\/span\u003e\u003cspan\u003e- Carrying case \u003cbr\u003e- USB Type-C cable\u003c\/span\u003e\u003cspan\u003e \u003cbr\u003e- LoRa Antenna 860-930 MHz \u003cbr\u003e- UHF Antenna 410-470 MHz\u003cbr\u003e\u003cstrong\u003e\u003cbr\u003e\u003cbr\u003e\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e"} 4000 </script>
4000 4001</div> 4002 4003 4004<style> #shopify-section-template--25153989706033__main h1 {font-size: 33px !important;} #shopify-section-template--25153989706033__main h2 {font-size: 32px;} #shopify-section-template--25153989706033__main h3 {font-size: 24px;} #shopify-section-template--25153989706033__main h4 {font-size: 18px;} #shopify-section-template--25153989706033__main .product-prices {font-weight: 600;} </style></div><section id="shopify-section-template--25153989706033__1699268365ccac4e49" class="shopify-section section"><div class="page-width scroll-trigger animate--slide-in"><div id="shopify-block-AS2ZIazNCaGR4V2ZtN__91dc0ebb-39e3-4b8e-91e1-8fdfcb012217" class="shopify-block shopify-app-block"> 4005<!-- BEGIN app snippet: parse-variables -->
4005<script> 4006 function xsParseVariables(metafieldName, metafieldJSON ){ 4007 if (typeof metafieldJSON != 'undefined' && typeof window.xsellSettings != 'undefined' 4008 && typeof window.xsellSettings.shopMetafields != 'undefined' 4009 && typeof window.xsellSettings.shopMetafields[metafieldName] != 'undefined'){ 4010 const xsSettings = JSON.parse(decodeURIComponent(window.xsellSettings.shopMetafields[metafieldName])); 4011 4012 metafieldJSON.title = metafieldJSON.title_upsell || xsSettings.title; 4013 4014 const xsMergedSettings = {...xsSettings, ...metafieldJSON }; 4015 window.xsellData.settings.shopMetafields[metafieldName] = encodeURIComponent(JSON.stringify(xsMergedSettings)); 4016 } 4017 4018 } 4019 function xsParseVariablesSettings(settings){ 4020 if (typeof settings != 'undefined' && typeof window.xsellData != 'undefined' && typeof window.xsellData.settings != 'undefined'){ 4021 const xsSettingsLegacy = window.xsellData.settings.crosssellsettings[0]; 4022 const xsSettings = window.xsellData.settings; 4023 4024 settings.skip_xsell_theme_font = false; 4025 settings.use_xsell_font_family = true; 4026 4027 if(settings.xsrandomize){ 4028 settings.xsrandomizeproductpage = settings.xsrandomize; 4029 settings.xsrandomizecartpage = settings.xsrandomize; 4030 } 4031 4032 const xsMergedSettingsLegacy = {...xsSettingsLegacy, ...settings }; 4033 window.xsellData.settings.crosssellsettings[0] = xsMergedSettingsLegacy; 4034 4035 const xsMergedSettings = {...xsSettings, ...settings }; 4036 window.xsellData.settings = xsMergedSettings; 4037 } 4038 } 4039</script>
4039<!-- END app snippet -->
4040<script> 4041 window.xsBlockQuickview = eval({"quickview_enabled":true,"quick_add_to_cart_enabled":true}); 4042 xsParseVariables("popupsettings", xsBlockQuickview); 4043</script>
4043 4044 4045</div> 4046<div id="shopify-block-AdGRNZ25YdDZ6anJBK__980f68ae-7130-4ddd-8f4b-0e0da7129997" class="shopify-block shopify-app-block"> 4047<!-- BEGIN app snippet: simple-bundles-options --><div id="simple-bundles-io-options" data-simple-bundles-variant-id="55594169827633"> 4048 4049 4050 4051 4052 4053 4054</div> 4055<!-- END app snippet --> 4056 4057 4058
4058<script> 4059 window.SimpleBundles = { 4060 currentProductVariant: { 4061 id: 55594169827633, 4062 title: "Free year", 4063 variant_options: null, 4064 variant_options_v2: null 4065 }, 4066 settings: { 4067 selectPlaceholder: 'Please select an option', 4068 showPriceVariance: true, 4069 rankOptionsByPriceDiff: true 4070 }, 4071 currencyFormatter: new Intl.NumberFormat(window.Shopify.locale, { 4072 style: 'currency', 4073 currency: "USD", 4074 roundingMode: "halfCeil", 4075 }) 4076 }; 4077 </script>
4077 4078 4079 4080<style type="text/css"> 4081 #simple-bundles-io-options { 4082 display: flex; 4083 flex-direction: column; 4084 } 4085 4086 #simple-bundles-io-options label { 4087 margin-bottom: 8px; 4088 font-weight: bold; 4089 } 4090 4091 #simple-bundles-io-options select { 4092 padding: 8px; 4093 font-size: 16px; 4094 border-radius: 4px; 4095 border: 1px solid #ccc; 4096 width: 100%; 4097 margin-bottom: 8px; 4098 appearance: none; 4099 -webkit-appearance: none; 4100 -moz-appearance: none; 4101 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>'); 4102 background-repeat: no-repeat; 4103 background-position: right 8px center; 4104 } 4105</style> 4106 4107<style type="text/css"> 4108 4109</style> 4110
4111<script type="text/javascript"> 4112 4113</script>
4113 4114 4115 4116</div> 4117</div> 4118 4119 4120</section><section id="shopify-section-template--25153989706033__featured_collection_4tyEnM" class="shopify-section section"><link href="//store.emlid.com/cdn/shop/t/13/assets/component-card.css?v=153897544549437130131741637493" rel="stylesheet" type="text/css" media="all" /> 4121<link href="//store.emlid.com/cdn/shop/t/13/assets/component-price.css?v=65402837579211014041741637493" rel="stylesheet" type="text/css" media="all" /> 4122 4123<link href="//store.emlid.com/cdn/shop/t/13/assets/component-slider.css?v=142503135496229589681741637493" rel="stylesheet" type="text/css" media="all" /> 4124<link href="//store.emlid.com/cdn/shop/t/13/assets/template-collection.css?v=145944865380958730931741637493" rel="stylesheet" type="text/css" media="all" /> 4125 4126<link href="//store.emlid.com/cdn/shop/t/13/assets/quick-add.css?v=167457951211641553491741637493" rel="stylesheet" type="text/css" media="all" /> 4127
4127<script src="//store.emlid.com/cdn/shop/t/13/assets/quick-add.js?v=123988568102861521811741637493" defer="defer"></script>
4127 4128
4128<script src="//store.emlid.com/cdn/shop/t/13/assets/product-form.js?v=138816392078825582251741637493" defer="defer"></script>
4128<style data-shopify>.section-template--25153989706033__featured_collection_4tyEnM-padding { 4129 padding-top: 27px; 4130 padding-bottom: 27px; 4131 } 4132 4133 @media screen and (min-width: 750px) { 4134 .section-template--25153989706033__featured_collection_4tyEnM-padding { 4135 padding-top: 36px; 4136 padding-bottom: 36px; 4137 padding-left: 20px; 4138 } 4139 } 4140 4141 @media screen and (max-width: 750px) { 4142 .section-template--25153989706033__featured_collection_4tyEnM-padding { 4143 padding-left: 20px; 4144 } 4145 } 4146 4147 4148 .collection__title.title-wrapper--self-padded-tablet-down { 4149 padding: 0; 4150 } 4151 4152 4153 .title { 4154 font-size: 32px !important; 4155 } 4156 4157 slider-component { 4158 --desktop-margin-left-first-item: max(5rem, calc((100vw - var(--page-width) - var(--grid-desktop-horizontal-spacing)) / 2)) !important; 4159 }</style><div class="color-background-1 isolate gradient"> 4160 <div class="collection section-template--25153989706033__featured_collection_4tyEnM-padding"> 4161 <div class="collection__title title-wrapper title-wrapper--no-top-margin page-width title-wrapper--self-padded-tablet-down collection__title--desktop-slider"><h2 class="title inline-richtext h1 scroll-trigger animate--slide-in"> 4162 Pair It With 4163 </h2></div> 4164 4165 <slider-component class="slider-mobile-gutter slider-component-desktop scroll-trigger animate--slide-in"> 4166 <ul 4167 id="Slider-template--25153989706033__featured_collection_4tyEnM" 4168 class="grid product-grid contains-card contains-card--product grid--4-col-desktop grid--2-col-tablet-down slider slider--desktop slider--tablet grid--peek" 4169 role="list" 4170 aria-label="Slider" 4171 ><li 4172 id="Slide-template--25153989706033__featured_collection_4tyEnM-1" 4173 class="grid__item slider__slide scroll-trigger animate--slide-in" 4174 4175 data-cascade 4176 style="--animation-order: 1;" 4177 4178 > 4179 4180 4181 4182 4183<div class="product-grid-item product-grid-item--8978451923249"> 4184 <div class="product-image-area"> 4185 <a href="/products/survey-pole"></a> 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208<div class="picture-element-wrapper wrapper--42725152227633 object-fit--cover has-hover-image" style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 4209 4210 <picture> 4211 4212 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/Pole-Mount-2_480x.webp?v=1761055076 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1761055076 2x"> 4213 4214 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/Pole-Mount-2_834x.webp?v=1761055076 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1761055076 2x"> 4215 4216 4217 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/Pole-Mount-2_350x.webp?v=1761055076 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1761055076 2x" alt="Survey Pole with a smartphone mount" data-lazy class="picture-element-image" style=" "> 4218 </picture> 4219 4220 4221 4222</div> 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259<div class="picture-element-wrapper wrapper--42725151703345 hover-image desktop-only object-fit--cover" style="--aspect-desktop: 100.0%; --aspect-tablet: Infinity%;" > 4260 4261 <picture> 4262 4263 <source media="(max-width: 834px)" data-srcset="about:blank"> 4264 4265 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/Pole-Mount-1-1-1-scaled_350x.webp?v=1695032129 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1695032129 2x" alt="Survey Pole with a smartphone mount" data-lazy class="picture-element-image" style=" "> 4266 </picture> 4267 4268 4269 4270</div> 4271 4272 4273 4274 4275 4276 4277 4278 4279 </div> 4280 4281 <div class="product-info-area "> 4282 <a class="product-info-area__link" href="/products/survey-pole"></a> 4283 4284 <h3 class="product-title"> 4285 Survey Pole with a smartphone mount 4286 </h3> 4287 4288 <div class="product-description"> 4289 The three-section construction delivers reliable stability with the help of solid flip locks. It comes equipped with ... 4290 </div> 4291 4292 <div 4293 class="button-wrapper" 4294 > 4295 <div class="prices-wrapper"> 4296 <div class="product-prices flex f-a-center">
4297 <span class="money product-price "> 4298 $349 4299 </span> 4300 <span class="money compare-at-price hide "> 4301 <svg class="price-cross" viewBox="0 0 100 14" xmlns="http://www.w3.org/2000/svg"> 4302 <!-- outline (bottom) --> 4303 <line x1="0" y1="7" x2="100" y2="7" stroke="#FAFAFA" stroke-width="3" vector-effect="non-scaling-stroke" 4304 stroke-linecap="round" /> 4305 <!-- main line (top) --> 4306 <line x1="0" y1="7" x2="100" y2="7" stroke="#717171" stroke-width="1" vector-effect="non-scaling-stroke" 4307 stroke-linecap="round" /> 4308 </svg> 4309 4310 </span> 4311 </div> 4312 4313 <div class="tax-info">tax excl.</div> 4314 4315 </div> 4316 4317 <div class="customBtnsWrap"> 4318 <a 4319 href="/products/survey-pole" 4320 class="btn btn--accent" 4321 data-add-to-cart='{ "disableWhenAdding": true }' 4322 data-quantity="1" 4323 data-variant-id="47253694841137" 4324 data-variant-description='Excluded' 4325 4326 > 4327 4328 <img src="https://cdn.emlid.com/store/plp-icon-buy.svg" alt="" width="13" height="13"> 4329 <span>Add to cart</span> 4330 4331 </a> 4332 <a 4333 class="btn btn--black" 4334 href="/products/survey-pole" 4335 4336 >Explore</a 4337 > 4338 </div> 4339 4340 </div> 4341 </div> 4342</div> 4343 </li><li 4344 id="Slide-template--25153989706033__featured_collection_4tyEnM-2" 4345 class="grid__item slider__slide scroll-trigger animate--slide-in" 4346 4347 data-cascade 4348 style="--animation-order: 2;" 4349 4350 > 4351 4352 4353 4354 4355<div class="product-grid-item product-grid-item--9822385111345"> 4356 <div class="product-image-area"> 4357 <a href="/products/seco-bipod"></a> 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380<div class="picture-element-wrapper wrapper--45495704518961 object-fit--cover has-hover-image" style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 4381 4382 <picture> 4383 4384 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/p1219593_480x.webp?v=1718364898 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1718364898 2x"> 4385 4386 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/p1219593_834x.webp?v=1718364898 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1718364898 2x"> 4387 4388 4389 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/p1219593_350x.webp?v=1718364898 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1718364898 2x" alt="Seco bipod" data-lazy class="picture-element-image" style=" "> 4390 </picture> 4391 4392 4393 4394</div> 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427<div class="picture-element-wrapper wrapper--45495704486193 hover-image desktop-only object-fit--cover" style="--aspect-desktop: 100.0%; --aspect-tablet: Infinity%;" > 4428 4429 <picture> 4430 4431 <source media="(max-width: 834px)" data-srcset="about:blank"> 4432 4433 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/p1219542_350x.webp?v=1718364934 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1718364934 2x" alt="Seco bipod" data-lazy class="picture-element-image" style=" "> 4434 </picture> 4435 4436 4437 4438</div> 4439 4440 4441 4442 4443 4444 4445 4446 4447 </div> 4448 4449 <div class="product-info-area "> 4450 <a class="product-info-area__link" href="/products/seco-bipod"></a> 4451 4452 <h3 class="product-title"> 4453 Seco bipod 4454 </h3> 4455 4456 <div class="product-description"> 4457 4458Thumb-release bipod for setting up a freestanding survey pole. 4459Package includes:Â 4460- 1 x Bipod- 1 x No-crush bipod he... 4461 </div> 4462 4463 <div 4464 class="button-wrapper" 4465 > 4466 <div class="prices-wrapper"> 4467 <div class="product-prices flex f-a-center"> 4468 <span class="money product-price "> 4469 $189 4470 </span> 4471 <span class="money compare-at-price hide ">
4472 <svg class="price-cross" viewBox="0 0 100 14" xmlns="http://www.w3.org/2000/svg"> 4473 <!-- outline (bottom) --> 4474 <line x1="0" y1="7" x2="100" y2="7" stroke="#FAFAFA" stroke-width="3" vector-effect="non-scaling-stroke" 4475 stroke-linecap="round" /> 4476 <!-- main line (top) --> 4477 <line x1="0" y1="7" x2="100" y2="7" stroke="#717171" stroke-width="1" vector-effect="non-scaling-stroke" 4478 stroke-linecap="round" /> 4479 </svg> 4480 4481 </span> 4482 </div> 4483 4484 <div class="tax-info">tax excl.</div> 4485 4486 </div> 4487 4488 <div class="customBtnsWrap"> 4489 <a 4490 href="/products/seco-bipod" 4491 class="btn btn--accent" 4492 data-add-to-cart='{ "disableWhenAdding": true }' 4493 data-quantity="1" 4494 data-variant-id="49485038911793" 4495 data-variant-description='Excluded' 4496 4497 > 4498 4499 <img src="https://cdn.emlid.com/store/plp-icon-buy.svg" alt="" width="13" height="13"> 4500 <span>Add to cart</span> 4501 4502 </a> 4503 <a 4504 class="btn btn--black" 4505 href="/products/seco-bipod" 4506 4507 >Explore</a 4508 > 4509 </div> 4510 4511 </div> 4512 </div> 4513</div> 4514 </li><li 4515 id="Slide-template--25153989706033__featured_collection_4tyEnM-3" 4516 class="grid__item slider__slide scroll-trigger animate--slide-in" 4517 4518 data-cascade 4519 style="--animation-order: 3;" 4520 4521 > 4522 4523 4524 4525 4526<div class="product-grid-item product-grid-item--9819263533361"> 4527 <div class="product-image-area"> 4528 <a href="/products/seco-aluminium-tripod"></a> 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551<div class="picture-element-wrapper wrapper--45985444659505 object-fit--cover has-hover-image" style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 4552 4553 <picture> 4554 4555 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/P1219500-L1_480x.webp?v=1721741345 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1721741345 2x"> 4556 4557 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/P1219500-L1_834x.webp?v=1721741345 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1721741345 2x"> 4558 4559 4560 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/P1219500-L1_350x.webp?v=1721741345 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1721741345 2x" alt="Seco aluminium tripod" data-lazy class="picture-element-image" style=" "> 4561 </picture> 4562 4563 4564 4565</div> 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598<div class="picture-element-wrapper wrapper--45985444626737 hover-image desktop-only object-fit--cover" style="--aspect-desktop: 100.0%; --aspect-tablet: Infinity%;" > 4599 4600 <picture> 4601 4602 <source media="(max-width: 834px)" data-srcset="about:blank"> 4603 4604 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/P1219511-L1_350x.webp?v=1760966188 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1760966188 2x" alt="Seco aluminium tripod" data-lazy class="picture-element-image" style=" "> 4605 </picture> 4606 4607 4608 4609</div> 4610 4611 4612 4613 4614 4615 4616 4617 4618 </div> 4619 4620 <div class="product-info-area "> 4621 <a class="product-info-area__link" href="/products/seco-aluminium-tripod"></a> 4622 4623 <h3 class="product-title"> 4624 Seco aluminium tripod 4625 </h3> 4626 4627 <div class="product-description"> 4628 Emlid-branded lightweight aluminum tripod with standard 5/8" thread. Fits Reach RS3/RS2/RS2+ base. 4629 </div> 4630 4631 <div 4632 class="button-wrapper" 4633 > 4634 <div class="prices-wrapper"> 4635 <div class="product-prices flex f-a-center"> 4636 <span class="money product-price "> 4637 $109 4638 </span> 4639 <span class="money compare-at-price hide "> 4640 <svg class="price-cross" viewBox="0 0 100 14" xmlns="http://www.w3.org/2000/svg"> 4641 <!-- outline (bottom) --> 4642 <line x1="0" y1="7" x2="100" y2="7" stroke="#FAFAFA" stroke-width="3" vector-effect="non-scaling-stroke" 4643 stroke-linecap="round" /> 4644 <!-- main line (top) --> 4645 <line x1="0" y1="7" x2="100" y2="7" stroke="#717171" stroke-width="1" vector-effect="non-scaling-stroke" 4646 stroke-linecap="round" /> 4647 </svg> 4648 4649 </span> 4650 </div> 4651 4652 <div class="tax-info">tax excl.</div> 4653 4654 </div> 4655 4656 <div class="customBtnsWrap"> 4657 <a 4658 href="/products/seco-aluminium-tripod" 4659 class="btn btn--accent" 4660 data-add-to-cart='{ "disableWhenAdding": true }' 4661 data-quantity="1" 4662 data-variant-id="49480471478577" 4663 data-variant-description='Excluded' 4664 4665 > 4666 4667 <img src="https://cdn.emlid.com/store/plp-icon-buy.svg" alt="" width="13" height="13">
4668 <span>Add to cart</span> 4669 4670 </a> 4671 <a 4672 class="btn btn--black" 4673 href="/products/seco-aluminium-tripod" 4674 4675 >Explore</a 4676 > 4677 </div> 4678 4679 </div> 4680 </div> 4681</div> 4682 </li><li 4683 id="Slide-template--25153989706033__featured_collection_4tyEnM-4" 4684 class="grid__item slider__slide scroll-trigger animate--slide-in" 4685 4686 data-cascade 4687 style="--animation-order: 4;" 4688 4689 > 4690 4691 4692 4693 4694<div class="product-grid-item product-grid-item--9819413446961"> 4695 <div class="product-image-area"> 4696 <a href="/products/seco-wooden-tripod"></a> 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719<div class="picture-element-wrapper wrapper--45985478902065 object-fit--cover has-hover-image" style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 4720 4721 <picture> 4722 4723 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/P1219555-L1_480x.webp?v=1721741564 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1721741564 2x"> 4724 4725 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/P1219555-L1_834x.webp?v=1721741564 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1721741564 2x"> 4726 4727 4728 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/P1219555-L1_350x.webp?v=1721741564 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1721741564 2x" alt="Seco wooden tripod" data-lazy class="picture-element-image" style=" "> 4729 </picture> 4730 4731 4732 4733</div> 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766<div class="picture-element-wrapper wrapper--45985478967601 hover-image desktop-only object-fit--cover" style="--aspect-desktop: 100.0%; --aspect-tablet: Infinity%;" > 4767 4768 <picture> 4769 4770 <source media="(max-width: 834px)" data-srcset="about:blank"> 4771 4772 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/P1219571-L1_350x.webp?v=1721741565 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1721741565 2x" alt="Seco wooden tripod" data-lazy class="picture-element-image" style=" "> 4773 </picture> 4774 4775 4776 4777</div> 4778 4779 4780 4781 4782 4783 4784 4785 4786 </div> 4787 4788 <div class="product-info-area "> 4789 <a class="product-info-area__link" href="/products/seco-wooden-tripod"></a> 4790 4791 <h3 class="product-title"> 4792 Seco wooden tripod 4793 </h3> 4794 4795 <div class="product-description"> 4796 Emlid-branded, durable wooden tripod with standard 5/8" thread. Fits Reach RS3/RS2/RS2+ base. 4797Â 4798Package includes:Â 4799- ... 4800 </div> 4801 4802 <div 4803 class="button-wrapper" 4804 > 4805 <div class="prices-wrapper"> 4806 <div class="product-prices flex f-a-center"> 4807 <span class="money product-price "> 4808 $279 4809 </span> 4810 <span class="money compare-at-price hide "> 4811 <svg class="price-cross" viewBox="0 0 100 14" xmlns="http://www.w3.org/2000/svg"> 4812 <!-- outline (bottom) --> 4813 <line x1="0" y1="7" x2="100" y2="7" stroke="#FAFAFA" stroke-width="3" vector-effect="non-scaling-stroke" 4814 stroke-linecap="round" /> 4815 <!-- main line (top) --> 4816 <line x1="0" y1="7" x2="100" y2="7" stroke="#717171" stroke-width="1" vector-effect="non-scaling-stroke" 4817 stroke-linecap="round" /> 4818 </svg> 4819 4820 </span> 4821 </div> 4822 4823 <div class="tax-info">tax excl.</div> 4824 4825 </div> 4826 4827 <div class="customBtnsWrap"> 4828 <a 4829 href="/products/seco-wooden-tripod" 4830 class="btn btn--accent" 4831 data-add-to-cart='{ "disableWhenAdding": true }' 4832 data-quantity="1" 4833 data-variant-id="49480624144689" 4834 data-variant-description='Excluded' 4835 4836 > 4837 4838 <img src="https://cdn.emlid.com/store/plp-icon-buy.svg" alt="" width="13" height="13"> 4839 <span>Add to cart</span> 4840 4841 </a> 4842 <a 4843 class="btn btn--black" 4844 href="/products/seco-wooden-tripod" 4845 4846 >Explore</a 4847 > 4848 </div> 4849 4850 </div> 4851 </div> 4852</div> 4853 </li><li 4854 id="Slide-template--25153989706033__featured_collection_4tyEnM-5"
4855 class="grid__item slider__slide scroll-trigger animate--slide-in" 4856 4857 data-cascade 4858 style="--animation-order: 5;" 4859 4860 > 4861 4862 4863 4864 4865<div class="product-grid-item product-grid-item--10044209234225"> 4866 <div class="product-image-area"> 4867 <a href="/products/base-and-rover-accessories-kit"></a> 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890<div class="picture-element-wrapper wrapper--58013007577393 object-fit--cover has-hover-image" style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 4891 4892 <picture> 4893 4894 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/Base-and-Rover-accessories-kit_Main-render_480x.webp?v=1778504142 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1778504142 2x"> 4895 4896 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/Base-and-Rover-accessories-kit_Main-render_834x.webp?v=1778504142 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1778504142 2x"> 4897 4898 4899 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/Base-and-Rover-accessories-kit_Main-render_350x.webp?v=1778504142 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1778504142 2x" alt="Base and Rover accessories kit" data-lazy class="picture-element-image" style=" "> 4900 </picture> 4901 4902 4903 4904</div> 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951<div class="picture-element-wrapper wrapper--53468535914801 hover-image desktop-only object-fit--cover" style="--aspect-desktop: 100.0%; --aspect-tablet: Infinity%;" > 4952 4953 <picture> 4954 4955 <source media="(max-width: 834px)" data-srcset="about:blank"> 4956 4957 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.1341_350x.webp?v=1759140508 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1759140508 2x" alt="Base and Rover accessories kit" data-lazy class="picture-element-image" style=" "> 4958 </picture> 4959 4960 4961 4962</div> 4963 4964 4965 4966 4967 4968 4969 4970 4971 <span class="backorder-status backorder-status--badge"> 4972 4973 Backorder 4974 4975 </span> 4976 4977 </div> 4978 4979 <div class="product-info-area "> 4980 <a class="product-info-area__link" href="/products/base-and-rover-accessories-kit"></a> 4981 4982 <h3 class="product-title"> 4983 Base and Rover accessories kit 4984 </h3> 4985 4986 <div class="product-description"> 4987 A complete set of base and rover accessories to accomplish any job with Reach receivers. Fits Reach RS3/RX2/RS2/RS2+.... 4988 </div> 4989 4990 <div 4991 class="button-wrapper" 4992 > 4993 <div class="prices-wrapper"> 4994 <div class="product-prices flex f-a-center"> 4995 <span class="money product-price "> 4996 $1,294 4997 </span> 4998 <span class="money compare-at-price hide "> 4999 <svg class="price-cross" viewBox="0 0 100 14" xmlns="http://www.w3.org/2000/svg"> 5000 <!-- outline (bottom) --> 5001 <line x1="0" y1="7" x2="100" y2="7" stroke="#FAFAFA" stroke-width="3" vector-effect="non-scaling-stroke" 5002 stroke-linecap="round" /> 5003 <!-- main line (top) --> 5004 <line x1="0" y1="7" x2="100" y2="7" stroke="#717171" stroke-width="1" vector-effect="non-scaling-stroke" 5005 stroke-linecap="round" /> 5006 </svg> 5007 5008 </span> 5009 </div> 5010 5011 <div class="tax-info">tax excl.</div> 5012 5013 </div> 5014 5015 <div class="customBtnsWrap"> 5016 <a 5017 href="/products/base-and-rover-accessories-kit" 5018 class="btn btn--accent" 5019 data-add-to-cart='{ "disableWhenAdding": true }' 5020 data-quantity="1" 5021 data-variant-id="50155959779633" 5022 data-variant-description='Excluded' 5023 data-variant-backorder="Backorder" 5024 > 5025 5026 <img src="https://cdn.emlid.com/store/plp-icon-backorder.svg" alt="" width="13" height="13">
5027 <span>Backorder now</span> 5028 5029 </a> 5030 <a 5031 class="btn btn--black" 5032 href="/products/base-and-rover-accessories-kit" 5033 5034 >Explore</a 5035 > 5036 </div> 5037 5038 </div> 5039 </div> 5040</div> 5041 </li><li 5042 id="Slide-template--25153989706033__featured_collection_4tyEnM-6" 5043 class="grid__item slider__slide scroll-trigger animate--slide-in" 5044 5045 data-cascade 5046 style="--animation-order: 6;" 5047 5048 > 5049 5050 5051 5052 5053<div class="product-grid-item product-grid-item--10044167979313"> 5054 <div class="product-image-area"> 5055 <a href="/products/rover-accessories-kit"></a> 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078<div class="picture-element-wrapper wrapper--47447864049969 object-fit--cover has-hover-image" style="--aspect-desktop: 100.0%; --aspect-tablet: 100.0%;" > 5079 5080 <picture> 5081 5082 <source media="(max-width: 480px)" data-srcset="//store.emlid.com/cdn/shop/files/2-P1459554_480x.webp?v=1732880518 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1732880518 2x"> 5083 5084 <source media="(max-width: 834px)" data-srcset="//store.emlid.com/cdn/shop/files/2-P1459554_834x.webp?v=1732880518 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1732880518 2x"> 5085 5086 5087 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/2-P1459554_350x.webp?v=1732880518 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1732880518 2x" alt="Rover accessories kit" data-lazy class="picture-element-image" style=" "> 5088 </picture> 5089 5090 5091 5092</div> 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135<div class="picture-element-wrapper wrapper--47447863984433 hover-image desktop-only object-fit--cover" style="--aspect-desktop: 100.0%; --aspect-tablet: Infinity%;" > 5136 5137 <picture> 5138 5139 <source media="(max-width: 834px)" data-srcset="about:blank"> 5140 5141 <img draggable="false" data-srcset="//store.emlid.com/cdn/shop/files/2-P1459308_350x.webp?v=1732880517 1x, //store.emlid.com/cdn/shop/files/[email protected]?v=1732880517 2x" alt="Rover accessories kit" data-lazy class="picture-element-image" style=" "> 5142 </picture> 5143 5144 5145 5146</div> 5147 5148 5149 5150 5151 5152 5153 5154 5155 </div> 5156 5157 <div class="product-info-area "> 5158 <a class="product-info-area__link" href="/products/rover-accessories-kit"></a> 5159 5160 <h3 class="product-title"> 5161 Rover accessories kit 5162 </h3> 5163 5164 <div class="product-description"> 5165 Survey pole to collect data with a rover and a bipod to fix it over a point when needed. Fits Reach RS3/RX2/RS2/RS2+.... 5166 </div> 5167 5168 <div 5169 class="button-wrapper" 5170 > 5171 <div class="prices-wrapper"> 5172 <div class="product-prices flex f-a-center"> 5173 <span class="money product-price "> 5174 $538 5175 </span> 5176 <span class="money compare-at-price hide "> 5177 <svg class="price-cross" viewBox="0 0 100 14" xmlns="http://www.w3.org/2000/svg"> 5178 <!-- outline (bottom) --> 5179 <line x1="0" y1="7" x2="100" y2="7" stroke="#FAFAFA" stroke-width="3" vector-effect="non-scaling-stroke" 5180 stroke-linecap="round" /> 5181 <!-- main line (top) --> 5182 <line x1="0" y1="7" x2="100" y2="7" stroke="#717171" stroke-width="1" vector-effect="non-scaling-stroke" 5183 stroke-linecap="round" /> 5184 </svg> 5185 5186 </span> 5187 </div> 5188 5189 <div class="tax-info">tax excl.</div> 5190 5191 </div> 5192 5193 <div class="customBtnsWrap"> 5194 <a 5195 href="/products/rover-accessories-kit" 5196 class="btn btn--accent" 5197 data-add-to-cart='{ "disableWhenAdding": true }' 5198 data-quantity="1" 5199 data-variant-id="50155843977521" 5200 data-variant-description='Excluded' 5201 5202 > 5203 5204 <img src="https://cdn.emlid.com/store/plp-icon-buy.svg" alt="" width="13" height="13">
5205 <span>Add to cart</span> 5206 5207 </a> 5208 <a 5209 class="btn btn--black" 5210 href="/products/rover-accessories-kit" 5211 5212 >Explore</a 5213 > 5214 </div> 5215 5216 </div> 5217 </div> 5218</div> 5219 </li></ul><div class="slider-buttons no-js-hidden"> 5220 <button 5221 type="button" 5222 class="slider-button slider-button--prev" 5223 name="previous" 5224 aria-label="Slide left" 5225 aria-controls="Slider-template--25153989706033__featured_collection_4tyEnM" 5226 > 5227 <svg aria-hidden="true" focusable="false" class="icon icon-caret" viewBox="0 0 10 6"> 5228 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"> 5229</svg> 5230 5231 </button> 5232 <div class="slider-counter caption"> 5233 <span class="slider-counter--current">1</span> 5234 <span aria-hidden="true"> / </span> 5235 <span class="visually-hidden">of</span> 5236 <span class="slider-counter--total">6</span> 5237 </div> 5238 <button 5239 type="button" 5240 class="slider-button slider-button--next" 5241 name="next" 5242 aria-label="Slide right" 5243 aria-controls="Slider-template--25153989706033__featured_collection_4tyEnM" 5244 > 5245 <svg aria-hidden="true" focusable="false" class="icon icon-caret" viewBox="0 0 10 6"> 5246 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"> 5247</svg> 5248 5249 </button> 5250 </div></slider-component></div> 5251</div> 5252 5253 5254</section><div id="shopify-section-template--25153989706033__ec92180b-99c4-492c-adb4-4f42c7fd3729" class="shopify-section radiant-section radiant--product-specifications"> 5255 5256 5257<style> 5258 .product-specs-container { 5259 max-width: 1280px; 5260 width: 100%; 5261 margin: auto; 5262 padding-inline: 8px; 5263 } 5264 5265 .product-specifications-tables { 5266 display: grid; 5267 grid-template-columns: repeat(3, 1fr); 5268 gap: 8rem 6rem; 5269 align-items: start; 5270 } 5271 5272 .product-specifications-tables tbody { 5273 display: table-row-group; 5274 } 5275 5276 @media (max-width: 768px) { 5277 .product-specifications-tables { 5278 grid-template-columns: 1fr; 5279 gap: 3rem 0; 5280 } 5281 5282 .product-specifications-tables th, 5283 .product-specifications-tables td { 5284 width: auto; 5285 padding: 0; 5286 } 5287 5288 .product-specifications-tables th { 5289 padding-top: 0.4rem; 5290 } 5291 5292 .product-specifications-tables td { 5293 padding-bottom: 0.6rem; 5294 } 5295 } 5296 5297 /* Structured (bold label/value) tables */ 5298 .product-specifications-tables .spec-table { 5299 width: 100%; 5300 border-collapse: collapse; 5301 table-layout: fixed; 5302 border: none !important; 5303 box-shadow: none !important; 5304 outline: none !important; 5305 } 5306 5307 .product-specifications-tables col.col-label { 5308 width: 40%; 5309 } 5310 5311 .product-specifications-tables col.col-value { 5312 width: 60%; 5313 } 5314 5315 .product-specifications-tables .spec-table caption { 5316 text-align: left; 5317 font-size: 1.7rem; 5318 padding-bottom: 1rem; 5319 font-weight: 600; 5320 border-bottom: 1px solid #eaeaea; 5321 margin-bottom: 0.5rem; 5322 caption-side: top; 5323 } 5324 5325 .product-specifications-tables .spec-table tr, 5326 .product-specifications-tables .spec-table tr:nth-child(even), 5327 .product-specifications-tables .spec-table tr:nth-child(odd) { 5328 border: none !important; 5329 background: transparent !important; 5330 } 5331 5332 .product-specifications-tables .spec-table th, 5333 .product-specifications-tables .spec-table td { 5334 text-align: left; 5335 padding: 0.7rem 0 0.7rem 0 !important; 5336 font-weight: 400; 5337 vertical-align: top; 5338 font-size: 15px; 5339 line-height: 28px; 5340 border: none !important; 5341 background: transparent !important; 5342 box-shadow: none !important; 5343 overflow-wrap: break-word; 5344 word-break: normal; 5345 color: #151515; 5346 } 5347 5348 .product-specifications-tables .spec-table th { 5349 font-weight: 500; 5350 padding-right: 0.5rem !important; 5351 } 5352 5353 /* Section subheadings within a group (e.g. "LoRa radio", "UHF radio") */ 5354 .product-specifications-tables .spec-subheading th { 5355 padding-top: 1.5rem !important; 5356 font-weight: 650; 5357 } 5358 5359 /* Footnotes */ 5360 .product-specifications-tables .spec-footnote td { 5361 font-size: 18px; 5362 color: #555555; 5363 padding-top: 2rem !important; 5364 line-height: 1.2; 5365 } 5366 5367 /* Plain text groups (e.g. Scanning Kit Compatibility) â rendered as div/p, not table */ 5368 .product-specifications-tables .spec-plain-group { 5369 font-size: 15px; 5370 color: #151515; 5371 } 5372 5373 .product-specifications-tables .spec-plain-title { 5374 font-size: 1.7rem; 5375 font-weight: 600; 5376 padding-bottom: 1rem; 5377 border-bottom: 1px solid #eaeaea; 5378 margin-bottom: 0.5rem; 5379 margin-top: 0; 5380 display: block; 5381 } 5382 5383 .product-specifications-tables .spec-plain-row { 5384 line-height: 1.5; 5385 margin: 0; 5386 padding: 0.15rem 0; 5387 display: block; 5388 } 5389 5390 .product-specifications-popup .product-specifications-tables { 5391 margin-top: 2rem; 5392 } 5393 5394 @media (max-width: 991px) { 5395 .product-specs-container { 5396 padding-inline: 32px; 5397 } 5398 } 5399 5400 @media (max-width: 767px) { 5401 .product-specs-container { 5402 padding-inline: 16px; 5403 } 5404 } 5405</style> 5406 5407 5408 5409 5410 5411<div class="product-specs-container"> 5412 5413 5414 5415 <div class="product-specifications-simple"> 5416 5417 <p class="product-specifications-title">Specification</p> 5418 5419 5420 5421 <div class="product-specifications-tables"> 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 <table class="spec-table"> 5438 <caption>Imaging</caption> 5439 <colgroup> 5440 <col class="col-label"> 5441 <col class="col-value"> 5442 </colgroup> 5443 <tbody> 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 <tr> 5467 <th scope="row">Image sensors:</th> 5468 <td>1/2.6 in, CMOS, global shutter, Full HD</td> 5469 </tr> 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 <tr class="spec-subheading"> 5494 <th colspan="2" scope="colgroup">Field of view</th> 5495 </tr> 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 <tr> 5522 <th scope="row">Front camera:</th> 5523 <td>H 64.6°, V: 42.8°</td> 5524 </tr> 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 <tr> 5551 <th scope="row">Bottom camera:</th> 5552 <td>H 63°, V: 42°</td> 5553 </tr> 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 <tr> 5580 <th scope="row">Video frame rate:</th> 5581 <td>25 fps</td> 5582 </tr> 5583 5584 5585 5586 5587 </tbody> 5588 </table> 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 <table class="spec-table"> 5606 <caption>Mechanical</caption> 5607 <colgroup> 5608 <col class="col-label"> 5609 <col class="col-value"> 5610 </colgroup> 5611 <tbody> 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 <tr> 5635 <th scope="row">Dimensions:</th> 5636 <td>128.6 x 128.6 x 99.3 mm</td> 5637 </tr> 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 <tr> 5664 <th scope="row">Weight:</th> 5665 <td>943 g (2.08 lb)</td> 5666 </tr> 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 <tr> 5693 <th scope="row">Operating tº:</th> 5694 <td>-40 to +65 °C (-40 to 149 °F)</td> 5695 </tr> 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 <tr> 5722 <th scope="row">Ingress protection:</th> 5723 <td>IP68</td> 5724 </tr> 5725 5726 5727 5728 5729 </tbody> 5730 </table> 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 <table class="spec-table"> 5748 <caption>Electrical</caption> 5749 <colgroup> 5750 <col class="col-label"> 5751 <col class="col-value"> 5752 </colgroup> 5753 <tbody> 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 <tr> 5777 <th scope="row">Autonomy:</th> 5778 <td>16 hrs as RTK rover with tilt</td> 5779 </tr> 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 <tr> 5806 <th scope="row">Battery:</th> 5807 <td>Li-Ion 5000 mAh, 7.2 V, 36 Wh</td> 5808 </tr> 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 <tr> 5835 <th scope="row">Charging:</th> 5836 <td>USB Type-C (PD) 5Vâ3A, 9Vâ3A, 12Vâ3A, 15Vâ3A</td> 5837 </tr> 5838 5839 5840 5841 5842 </tbody> 5843 </table> 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 <table class="spec-table"> 5861 <caption>Positioning</caption> 5862 <colgroup> 5863 <col class="col-label"> 5864 <col class="col-value"> 5865 </colgroup> 5866 <tbody> 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 <tr> 5890 <th scope="row">Static:</th> 5891 <td>
5891H 4âmm + 0.5âppm | V: 8âmm + 1âppm</td> 5892 </tr> 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 <tr> 5919 <th scope="row">PPK:</th> 5920 <td>H 5âmm + 0.5âppm | V: 10âmm + 1âppm</td> 5921 </tr> 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 <tr> 5948 <th scope="row">RTK:</th> 5949 <td>H 7âmm + 1âppm | V: 14âmm + 1âppm</td> 5950 </tr> 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 <tr> 5977 <th scope="row">Tilt compensation:</th> 5978 <td>RTK + 2 mm + 0.3 mm/°</td> 5979 </tr> 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 <tr> 6006 <th scope="row">Convergence time:</th> 6007 <td>~5âs typically</td> 6008 </tr> 6009 6010 6011 6012 6013 </tbody> 6014 </table> 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 <table class="spec-table"> 6032 <caption>Data protocols</caption> 6033 <colgroup> 6034 <col class="col-label"> 6035 <col class="col-value"> 6036 </colgroup> 6037 <tbody> 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 <tr> 6061 <th scope="row">Corrections:</th> 6062 <td>NTRIP, RTCM3</td> 6063 </tr> 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 <tr> 6090 <th scope="row">Position output:</th> 6091 <td>NMEA, LLH/XYZ</td> 6092 </tr> 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 <tr> 6119 <th scope="row">Data logging:</th> 6120 <td>RINEX, NMEA, LLH/XYZ, UBX</td> 6121 </tr> 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 <tr> 6148 <th scope="row">Internal storage:</th> 6149 <td>16âGB</td> 6150 </tr> 6151 6152 6153 6154 6155 </tbody> 6156 </table> 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 <table class="spec-table"> 6174 <caption>GNSS</caption> 6175 <colgroup> 6176 <col class="col-label"> 6177 <col class="col-value"> 6178 </colgroup> 6179 <tbody> 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 <tr> 6203 <th scope="row">Signal tracked:</th> 6204 <td>GPS L1C/A, L2C, L5, GLONASS: L1OF, L2OF, Galileo: E1-B/C, E5a, E6, BeiDou: B1I, B1C, B2a, B3I, QZSS: L1C/A, L1C/B11, L2C, L5, NavIC: L1-SPS Data, L5-SPS</td> 6205 </tr> 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 <tr> 6232 <th scope="row">Number of channels:</th> 6233 <td>672</td> 6234 </tr> 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 <tr> 6261 <th scope="row">Update rates:</th> 6262 <td>up to 10âHz</td> 6263 </tr> 6264 6265 6266 6267 6268 </tbody> 6269 </table> 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 <table class="spec-table"> 6287 <caption>Connectivity</caption> 6288 <colgroup> 6289 <col class="col-label"> 6290 <col class="col-value"> 6291 </colgroup> 6292 <tbody> 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 <tr class="spec-subheading"> 6314 <th colspan="2" scope="colgroup">Lora radio*</th> 6315 </tr> 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 <tr> 6342 <th scope="row">Frequency range:</th> 6343 <td>868/915âMHz</td> 6344 </tr> 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 <tr> 6371 <th scope="row">Power:</th> 6372 <td>Up to 1W</td> 6373 </tr> 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 <tr> 6400 <th scope="row">Distance:</th> 6401 <td>Up to 8âkm</td> 6402 </tr> 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 <tr class="spec-subheading"> 6427 <th colspan="2" scope="colgroup">UHF radio*</th> 6428 </tr> 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 <tr> 6455 <th scope="row">Frequency range:</th> 6456 <td>410 - 470 MHz</td> 6457 </tr> 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 <tr> 6484 <th scope="row">Power:</th> 6485 <td>Up to 2W</td> 6486 </tr> 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 <tr> 6513 <th scope="row">Protocols:</th> 6514 <td>
6514TRIMTALK 450S**</td> 6515 </tr> 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 <tr> 6542 <th scope="row">Modulation type:</th> 6543 <td>GMSK</td> 6544 </tr> 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 <tr class="spec-subheading"> 6569 <th colspan="2" scope="colgroup">LTE modem</th> 6570 </tr> 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 <tr> 6597 <th scope="row">Regions:</th> 6598 <td>Global</td> 6599 </tr> 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 <tr> 6626 <th scope="row">Bands:</th> 6627 <td>FDD-LTE 1, 2, 3, 4, 5, 7, 8, 12, 13, 18, 19, 20, 26, 28 TD-LTE: 38, 39, 40, 41 UMTS (UHPS/FDD): 1, 2, 5, 8 Quad-band, 850/1900, 900/1800 MHz</td> 6628 </tr> 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 <tr> 6655 <th scope="row">SIM card:</th> 6656 <td>Nano-SIM</td> 6657 </tr> 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 <tr> 6684 <th scope="row">Wi-Fi:</th> 6685 <td>802.11 b/g/n</td> 6686 </tr> 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 <tr> 6713 <th scope="row">Bluetooth:</th> 6714 <td>Bluetooth 5.1 (BR/EDR + LE)</td> 6715 </tr> 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 <tr> 6742 <th scope="row">Ports:</th> 6743 <td>RS-232, USB Type-C</td> 6744 </tr> 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 <tr class="spec-footnote"> 6780 <td colspan="2"><small>*Use the correct antenna, LoRa or UHF, for your setup. The exact power and the available frequency range are subject to regional regulations. See the datasheet for more information.</small></td> 6781 </tr> 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 <tr class="spec-footnote"> 6808 <td colspan="2"><small>**TRIMTALK is a trademark of Trimble Inc.</small></td> 6809 </tr> 6810 6811 6812 6813 6814 </tbody> 6815 </table> 6816 6817 6818 6819 6820 </div> 6821 6822 </div> 6823 6824 6825</div> 6826 6827 6828<style> #shopify-section-template--25153989706033__ec92180b-99c4-492c-adb4-4f42c7fd3729.radiant--product-specifications .section-header .h2 {font-size: 32px;} #shopify-section-template--25153989706033__ec92180b-99c4-492c-adb4-4f42c7fd3729.radiant--product-specifications {margin-top: 0px;} #shopify-section-template--25153989706033__ec92180b-99c4-492c-adb4-4f42c7fd3729 h3 {font-weight: 530; font-size: 18px;} #shopify-section-template--25153989706033__ec92180b-99c4-492c-adb4-4f42c7fd3729 .product-specifications-title {font-size: 32px; font-weight: 530;} #shopify-section-template--25153989706033__ec92180b-99c4-492c-adb4-4f42c7fd3729 strong {font-weight: 600;} </style></div><div id="shopify-section-template--25153989706033__promo_free_year_cKgiJ6" class="shopify-section"> 6829 6830 6831<section class="pfy" id="promo-free-year"> 6832 <div class="pfy__container"> 6833 <div class="pfy__inner"> 6834 6835 <!-- Left: Logo + Heading + Badges --> 6836 <div class="pfy__info"> 6837 <img 6838 class="pfy__logo" 6839 src="https://cdn.emlid.com/Correction/Emlid+corrections+logo+horizontal.svg" 6840 alt="Emlid Corrections" 6841 width="169" 6842 height="16" 6843 loading="lazy" 6844 > 6845 <div class="pfy__heading-block"> 6846 <h2 class="pfy__heading"> 6847 Your first year of <span class="pfy__heading-accent">RTK corrections</span> is included 6848 </h2> 6849 <div class="pfy__badges">
6850 <span class="pfy__badge">VRS-based RTK</span> 6851 <span class="pfy__badge">1â2 cm accuracy</span> 6852 <span class="pfy__badge">Zero configuration required</span> 6853 </div> 6854 </div> 6855 </div> 6856 6857 <!-- Right: Description + Price + Actions --> 6858 <div class="pfy__content"> 6859 <p class="pfy__desc"> 6860 Emlid Corrections is built into your receiver. No base station, no NTRIP setup â just open Emlid Flow, tap Emlid Corrections, and get centimeter accuracy in seconds.<br><br>Love it from day one? Lock-in 3 years of savings: 6861 </p> 6862 6863 <div class="pfy__price-box"> 6864 <div class="pfy__price-inner"><span class="pfy__price-old">$699<span class="pfy__price-old-suffix">/ per year</span> 6865 </span><div class="pfy__price-main"> 6866 <span class="pfy__price-or">or</span> 6867 <span class="pfy__price-accent">$1,199</span><span class="pfy__price-or">/ for 3 years</span></div></div> 6868 </div> 6869 6870 <div class="pfy__actions"> 6871 <a href="#MainContent" class="btn btn--accent"> 6872 Get 3 more years 6873 </a> 6874 <a href="#coverage" class="btn btn--black"> 6875 Check coverage 6876 </a> 6877 </div> 6878 6879 <p class="pfy__disclaimer">Not satisfied? Full refund, no questions asked.</p> 6880 </div> 6881 6882 </div> 6883 </div> 6884</section></div><div id="shopify-section-template--25153989706033__coverage_section_kMF3ex" class="shopify-section"> 6885 6886 6887 6888<section id="coverage" class="coverage-section"> 6889 <div class="container"> 6890 <div class="coverage"> 6891 6892 <div class="coverage-grid"> 6893 6894 <!-- Text panel --> 6895 <div class="coverage-text"> 6896 <h2>Coverage</h2> 6897 <p class="rte">Emlid Corrections is available in the United States, the UK, Europe, Australia, and New Zealand.</p> 6898 </div> 6899 6900 <!-- Map (right column, spans both rows) --> 6901 <div class="coverage-map"> 6902 <iframe 6903 src="https://emlid.com/coverage-map/#2/43/-28" 6904 allow="geolocation" 6905 loading="lazy" 6906 title="Emlid Corrections coverage map" 6907 ></iframe> 6908 </div> 6909 6910 <!-- Newsletter CTA (bottom of left column) --> 6911 <div class="coverage-cta"> 6912 <h5>Not in your region yet?</h5> 6913 <p class="rte"> 6914 <a href="https://share-eu1.hsforms.com/14iiW1DubT0ukU801WyfdiAg6ns6" target="_blank" rel="noopener">Subscribe</a> 6915 to our newsletter and be the first to know when we expand. 6916 </p> 6917 </div> 6918 6919 </div><!-- /.coverage-grid --> 6920 6921 </div><!-- /.coverage --> 6922 </div><!-- /.container --> 6923</section> 6924<style> #shopify-section-template--25153989706033__coverage_section_kMF3ex .coverage-section .coverage {padding-bottom: 7rem;} </style></div><div id="shopify-section-template--25153989706033__bad_comparison_table_rEHcQp" class="shopify-section"><div class="comparison-table-section page-width"> 6925 6926 6927 6928 6929 <h2 class="comparison-table-title">Which Receiver Is Right for You?</h2> 6930 6931 6932 <div class="comparison-table-wrapper"> 6933 <table class="comparison-table"> 6934 <thead> 6935 <tr> 6936 <th scope="col" class="comparison-table__corner"> 6937 <span class="visually-hidden">Feature</span> 6938 </th> 6939 6940 6941<th scope="col" class="comparison-table__col-header"><a href="/products/reach-rs4-pro" class="comparison-table__col-link"><img 6942 src="//store.emlid.com/cdn/shop/files/RS4RENDERS04.677_small.webp?v=1763661645" 6943 srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.677_small.webp?v=1763661645 1x, //store.emlid.com/cdn/shop/files/RS4RENDERS04.677_medium.webp?v=1763661645 2x" 6944 alt="Reach RS4 Pro" 6945 loading="lazy" 6946 width="3200" 6947 height="3200" 6948 ><span class="comparison-table__col-title">Reach RS4 Pro</span></a></th><th scope="col" class="comparison-table__col-header"><a href="/products/reach-rs4" class="comparison-table__col-link"><img 6949 src="//store.emlid.com/cdn/shop/files/RS4RENDERS04.643_small.webp?v=1761059557" 6950 srcset="//store.emlid.com/cdn/shop/files/RS4RENDERS04.643_small.webp?v=1761059557 1x, //store.emlid.com/cdn/shop/files/RS4RENDERS04.643_medium.webp?v=1761059557 2x" 6951 alt="Reach RS4" 6952 loading="lazy" 6953 width="3200" 6954 height="3200" 6955 ><span class="comparison-table__col-title">Reach RS4</span></a></th><th scope="col" class="comparison-table__col-header"><a href="/products/reachrx2" class="comparison-table__col-link"><img 6956 src="//store.emlid.com/cdn/shop/files/Store_RX2-render5_small.webp?v=1757341977" 6957 srcset="//store.emlid.com/cdn/shop/files/Store_RX2-render5_small.webp?v=1757341977 1x, //store.emlid.com/cdn/shop/files/Store_RX2-render5_medium.webp?v=1757341977 2x" 6958 alt="Reach RX2" 6959 loading="lazy" 6960 width="1440" 6961 height="1440" 6962 ><span class="comparison-table__col-title">Reach RX2</span></a></th><th scope="col" class="comparison-table__col-header"><a href="/products/reach-rs3" class="comparison-table__col-link"><img 6963 src="//store.emlid.com/cdn/shop/files/RS3-Store-4-scaled_small.webp?v=1695032132" 6964 srcset="//store.emlid.com/cdn/shop/files/RS3-Store-4-scaled_small.webp?v=1695032132 1x, //store.emlid.com/cdn/shop/files/RS3-Store-4-scaled_medium.webp?v=1695032132 2x" 6965 alt="Reach RS3" 6966 loading="lazy" 6967 width="2560" 6968 height="2560" 6969 ><span class="comparison-table__col-title">Reach RS3</span></a></th></tr> 6970 </thead> 6971 6972 <tbody> 6973 6974 6975 <tr > 6976 <th scope="row" class="comparison-table__row-label"> 6977 <p>
6977Best for</p> 6978 </th> 6979 <td class="comparison-table__cell"><p>Large-scale construction, civil engineering and mining on complex, limited-access or hazardous sites</p></td> 6980 <td class="comparison-table__cell"><p>Topo, residential construction and drone mapping across rugged, forested and urban sites</p></td> 6981 <td class="comparison-table__cell"><p>Utility construction, GIS, asset mapping and mobile scanning â the lightest Reach, wherever mobile coverage reaches</p></td> 6982 <td class="comparison-table__cell"><p>Individual surveyors and small businesses working mixed, largely open sites</p></td> 6983 </tr> 6984 6985 6986 <tr > 6987 <th scope="row" class="comparison-table__row-label"> 6988 <p>RTK accuracy</p> 6989 </th> 6990 <td class="comparison-table__cell"><p>7 mm + 1 ppm</p></td> 6991 <td class="comparison-table__cell"><p>7 mm + 1 ppm</p></td> 6992 <td class="comparison-table__cell"><p>7 mm + 1 ppm</p></td> 6993 <td class="comparison-table__cell"><p>7 mm + 1 ppm</p></td> 6994 </tr> 6995 6996 6997 <tr > 6998 <th scope="row" class="comparison-table__row-label"> 6999 <p>Tilt compensation</p> 7000 </th> 7001 <td class="comparison-table__cell"><p>Unlimited angle</p></td> 7002 <td class="comparison-table__cell"><p>Unlimited angle</p></td> 7003 <td class="comparison-table__cell"><p>Unlimited angle</p></td> 7004 <td class="comparison-table__cell"><p>Up to 60°</p></td> 7005 </tr> 7006 7007 7008 <tr > 7009 <th scope="row" class="comparison-table__row-label"> 7010 <p>AR stakeout</p> 7011 </th> 7012 <td class="comparison-table__cell"><span class="comparison-table__icon comparison-table__icon--on" role="img" aria-label="Yes"><svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.5335 3.53125L6.00488 11.0599L3.1429 8.19792L2.2002 9.14063L6.00488 12.9453L14.4762 4.47396L13.5335 3.53125Z" fill="#4E18FF"/></svg></span></td> 7013 <td class="comparison-table__cell"><span class="comparison-table__icon comparison-table__icon--off" role="img" aria-label="No"><svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 7.33105V8.66439H14V7.33105H2Z" fill="black" opacity="0.4"/></svg></span></td> 7014 <td class="comparison-table__cell"><span class="comparison-table__icon comparison-table__icon--off" role="img" aria-label="No"><svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 7.33105V8.66439H14V7.33105H2Z" fill="black" opacity="0.4"/></svg></span></td> 7015 <td class="comparison-table__cell"><span class="comparison-table__icon comparison-table__icon--off" role="img" aria-label="No"><svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 7.33105V8.66439H14V7.33105H2Z" fill="black" opacity="0.4"/></svg></span></td> 7016 </tr> 7017 7018 7019 <tr > 7020 <th scope="row" class="comparison-table__row-label"> 7021 <p>Visual capture</p> 7022 </th> 7023 <td class="comparison-table__cell"><span class="comparison-table__icon comparison-table__icon--on" role="img" aria-label="Yes"><svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.5335 3.53125L6.00488 11.0599L3.1429 8.19792L2.2002 9.14063L6.00488 12.9453L14.4762 4.47396L13.5335 3.53125Z" fill="#4E18FF"/></svg></span></td> 7024 <td class="comparison-table__cell"><span class="comparison-table__icon comparison-table__icon--off" role="img" aria-label="No"><svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 7.33105V8.66439H14V7.33105H2Z" fill="black" opacity="0.4"/></svg></span></td> 7025 <td class="comparison-table__cell"><span class="comparison-table__icon comparison-table__icon--off" role="img" aria-label="No">
7025<svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 7.33105V8.66439H14V7.33105H2Z" fill="black" opacity="0.4"/></svg></span></td> 7026 <td class="comparison-table__cell"><span class="comparison-table__icon comparison-table__icon--off" role="img" aria-label="No"><svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 7.33105V8.66439H14V7.33105H2Z" fill="black" opacity="0.4"/></svg></span></td> 7027 </tr> 7028 7029 7030 <tr > 7031 <th scope="row" class="comparison-table__row-label"> 7032 <p>Setup</p> 7033 </th> 7034 <td class="comparison-table__cell"><p>Base + Rover</p></td> 7035 <td class="comparison-table__cell"><p>Base + Rover</p></td> 7036 <td class="comparison-table__cell"><p>Rover only</p></td> 7037 <td class="comparison-table__cell"><p>Base + Rover</p></td> 7038 </tr> 7039 7040 7041 <tr > 7042 <th scope="row" class="comparison-table__row-label"> 7043 <p>RINEX logging</p> 7044 </th> 7045 <td class="comparison-table__cell"><span class="comparison-table__icon comparison-table__icon--on" role="img" aria-label="Yes"><svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.5335 3.53125L6.00488 11.0599L3.1429 8.19792L2.2002 9.14063L6.00488 12.9453L14.4762 4.47396L13.5335 3.53125Z" fill="#4E18FF"/></svg></span></td> 7046 <td class="comparison-table__cell"><span class="comparison-table__icon comparison-table__icon--on" role="img" aria-label="Yes"><svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.5335 3.53125L6.00488 11.0599L3.1429 8.19792L2.2002 9.14063L6.00488 12.9453L14.4762 4.47396L13.5335 3.53125Z" fill="#4E18FF"/></svg></span></td> 7047 <td class="comparison-table__cell"><span class="comparison-table__icon comparison-table__icon--off" role="img" aria-label="No"><svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 7.33105V8.66439H14V7.33105H2Z" fill="black" opacity="0.4"/></svg></span></td> 7048 <td class="comparison-table__cell"><span class="comparison-table__icon comparison-table__icon--on" role="img" aria-label="Yes"><svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.5335 3.53125L6.00488 11.0599L3.1429 8.19792L2.2002 9.14063L6.00488 12.9453L14.4762 4.47396L13.5335 3.53125Z" fill="#4E18FF"/></svg></span></td> 7049 </tr> 7050 7051 7052 <tr > 7053 <th scope="row" class="comparison-table__row-label"> 7054 <p>IP rating</p> 7055 </th> 7056 <td class="comparison-table__cell"><p>IP68</p></td> 7057 <td class="comparison-table__cell"><p>IP68</p></td> 7058 <td class="comparison-table__cell"><p>IP68</p></td> 7059 <td class="comparison-table__cell"><p>IP67</p></td> 7060 </tr> 7061 7062 7063 <tr > 7064 <th scope="row" class="comparison-table__row-label"> 7065 <p>Battery life</p> 7066 </th> 7067 <td class="comparison-table__cell"><p>16 h</p></td> 7068 <td class="comparison-table__cell"><p>16 h</p></td> 7069 <td class="comparison-table__cell"><p>16 h</p></td> 7070 <td class="comparison-table__cell"><p>18 h</p></td> 7071 </tr> 7072 7073 7074 <tr > 7075 <th scope="row" class="comparison-table__row-label"> 7076 <p>Weight</p> 7077 </th> 7078 <td class="comparison-table__cell"><p>943 g</p></td> 7079 <td class="comparison-table__cell"><p>927 g</p></td> 7080 <td class="comparison-table__cell"><p>280 g</p></td> 7081 <td class="comparison-table__cell"><p>950 g</p></td> 7082 </tr> 7083 7084 7085 <tr > 7086 <th scope="row" class="comparison-table__row-label"> 7087 <p>Price</p> 7088 </th> 7089 <td class="comparison-table__cell"><p>$4599</p></td> 7090 <td class="comparison-table__cell"><p>$3899</p></td> 7091 <td class="comparison-table__cell"><p>$2399</p></td> 7092 <td class="comparison-table__cell"><p>
7092$2999</p></td> 7093 </tr> 7094 7095 </tbody> 7096 </table> 7097 7098 7099 </div> 7100</div> 7101 7102<style> 7103 .comparison-table-section { 7104 padding-top: 32px; 7105 padding-bottom: 32px; 7106 } 7107 7108 .page-width { 7109 max-width: 1280px; 7110 width: 100%; 7111 margin: 0 auto; 7112 padding-inline: 8px; 7113 } 7114 7115 .comparison-table-title { 7116 margin-bottom: 40px; 7117 text-align: left; 7118 } 7119 7120 .comparison-table-wrapper { 7121 overflow-x: auto; 7122 -webkit-overflow-scrolling: touch; 7123 } 7124 7125 .comparison-table { 7126 width: 100%; 7127 border-collapse: collapse; 7128 min-width: 700px; 7129 table-layout: fixed; 7130 } 7131 7132 .comparison-table th, 7133 .comparison-table td { 7134 padding: 16px; 7135 text-align: left; 7136 vertical-align: top; 7137 border-top: 1px solid #e5e5e5; 7138 } 7139 7140 .comparison-table thead th { 7141 border-top: none; 7142 } 7143 7144 .comparison-table__corner { 7145 width: 20%; 7146 } 7147 7148 .comparison-table__col-header { 7149 width: 20%; 7150 } 7151 7152 .comparison-table__col-header { 7153 font-weight: normal; 7154 } 7155 7156 .comparison-table__col-link { 7157 display: block; 7158 color: #4e18ff; 7159 text-decoration: none; 7160 } 7161 7162 .comparison-table__col-link:hover .comparison-table__col-title, 7163 .comparison-table__col-link:focus .comparison-table__col-title { 7164 text-decoration: underline; 7165 } 7166 7167 .comparison-table__col-header img { 7168 max-width: 100%; 7169 height: auto; 7170 display: block; 7171 margin: 0 0 16px 0; 7172 width: 40%; 7173 } 7174 7175 .comparison-table__col-title { 7176 display: block; 7177 color: #151515; 7178 font-size: 17px; 7179 font-weight: 550; 7180 } 7181 7182 .comparison-table__row-label { 7183 font-weight: 550; 7184 padding: 16px 16px 16px 0; 7185 } 7186 7187 .comparison-table__cell p { 7188 color: #151515; 7189 margin: 0 0 8px 0; 7190 } 7191 7192 .comparison-table__cell p:last-child { 7193 margin-bottom: 0; 7194 } 7195 7196 .comparison-table__footnotes { 7197 margin-top: 16px; 7198 font-size: 13px; 7199 color: #666666; 7200 } 7201 7202 .comparison-table__footnotes p { 7203 margin: 0 0 4px 0; 7204 } 7205 7206 .comparison-table__icon { 7207 display: inline-flex; 7208 align-items: center; 7209 } 7210 7211 .comparison-table__icon svg { 7212 display: block; 7213 } 7214 7215 .visually-hidden { 7216 position: absolute; 7217 width: 1px; 7218 height: 1px; 7219 padding: 0; 7220 margin: -1px; 7221 overflow: hidden; 7222 clip: rect(0, 0, 0, 0); 7223 white-space: nowrap; 7224 border: 0; 7225 } 7226 7227 @media (max-width: 768px) { 7228 .comparison-table__col-title { 7229 font-size: 14px; 7230 } 7231 } 7232</style> 7233 7234 7235</div><div id="shopify-section-template--25153989706033__software_section_zrYrWt" class="shopify-section"> 7236 7237 7238<section id="software" class="software-section"> 7239 <div class="container"> 7240 <div class="software__inner"> 7241 <h2 class="h2-promo software__title"> 7242 Comes With Software for the Field and the Office 7243 </h2> 7244 7245 <div class="software__text-blocks"> 7246 <div id="software_slide-1" class="software__item software__item-active"> 7247 <div class="row"> 7248 <div class="col-lg-5 d-lg-block software__content-block"> 7249 <div class="software__content-title software__content-title__1"> 7250 <p class="large-promo">
7251 The Emlid Flow mobile app efficiently manages all field-related tasks, including receiver configuration, RINEX logging, data collection, and stakeout. In its web versionâEmlid Flow 360âyou can prepare and manage projects, and quickly export and share your data. 7252 </p> 7253 </div> 7254 <div class="software__content-text"> 7255 <p style="margin-bottom: 8px;"> 7256 <img src="https://emlid.com/wp-content/uploads/2023/09/Group-1218.svg" alt=""> 7257 </p> 7258 <p style="color: #9fa0a1;"> 7259 The basic features are available for free to all users. 7260 <a href="https://emlid.com/emlid-flow" target="_blank" class="op-10">Upgrade</a> 7261 your Emlid Flow and Flow 360 with a single subscription. 7262 </p> 7263 <p></p> 7264 <div class="software-content-points"> 7265 <div class="software-content-points__item"> 7266 <span class="is-flex"> 7267 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7268 <span class="op-1">Tilt Compensation</span> 7269 </span> 7270 <span class="is-flex"> 7271 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt="">Base and rover setup 7272 </span> 7273 </div> 7274 <div class="software-content-points__item"> 7275 <span class="is-flex"> 7276 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt="">Coding 7277 </span> 7278 <span class="is-flex"> 7279 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7280 <span class="op-1">Points, lines, and polygons</span> 7281 </span> 7282 </div> 7283 <div class="software-content-points__item"> 7284 <span class="is-flex"> 7285 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt="">Inverse & Traverse 7286 </span> 7287 <span class="is-flex"> 7288 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7289 <span class="op-1">WMS layers</span> 7290 </span> 7291 </div> 7292 <div class="software-content-points__item"> 7293 <span class="is-flex"> 7294 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt="">DTM support 7295 </span> 7296 <span class="is-flex"> 7297 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7298 <span class="op-1">Stakeout reports</span> 7299 </span> 7300 </div> 7301 <div class="software-content-points__item"> 7302 <span class="is-flex"> 7303 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7304 <span class="op-1">CSV, DXF, SHP, and KML</span> 7305 </span> 7306 </div> 7307 </div> 7308 </div> 7309 </div> 7310 <div class="col-lg-7 software__media-block"> 7311 <video 7312 class="img-fluid" 7313 autoplay="" 7314 loop="" 7315 playsinline="" 7316 muted="" 7317 src="https://cdn.emlid.com/rs3/flow.webm" 7318 ></video> 7319 </div> 7320 </div> 7321 </div> 7322 <!-- 7323 <div id="software_slide-2" class="software__item"> 7324 <div class="row"> 7325 <div class="col-lg-5 d-lg-block software__content-block"> 7326 <div class="software__content-title software__content-title__2"> 7327 <p class="large-promo"> 7328 You can access your survey data via the cloud-based Emlid Flow 360. It allows you to prepare, manage, 7329 and export your projects from a browser. 7330 </p> 7331 </div> 7332 <div class="software__content-text"> 7333 <p class="mb-5" style="color: #9fa0a1;"> 7334 The basic features are available for free to all users. 7335 <a href="https://emlid.com/emlidflow360/" target="_blank">Upgrade</a> your Emlid Flow and Flow 360 7336 with a single subscription. 7337 </p> 7338 <div class="software-content-points"> 7339 <div class="software-content-points__item">
7340 <span class="is-flex"> 7341 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7342 <span class="op-07">Prepare and manage projects</span> 7343 </span> 7344 </div> 7345 <div class="software-content-points__item"> 7346 <span class="is-flex"> 7347 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7348 <span class="op-07">Instantly share data between field and office</span> 7349 </span> 7350 </div> 7351 <div class="software-content-points__item"> 7352 <span class="is-flex"> 7353 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7354 <span class="op-07">Always have a backup of your work</span> 7355 </span> 7356 </div> 7357 </div> 7358 </div> 7359 </div> 7360 <div class="col-lg-7 software__media-block"> 7361 <img class="img-fluid" src="https://emlid.com/wp-content/uploads/2023/09/ef360-scaled.webp" alt=""> 7362 </div> 7363 </div> 7364 </div> 7365 <div id="software_slide-3" class="software__item"> 7366 <div class="row"> 7367 <div class="col-lg-5 d-lg-block software__content-block"> 7368 <div class="software__content-title software__content-title__3"> 7369 <p class="large-promo">Our free post-processing software for macOS and Windows.</p> 7370 </div> 7371 <div class="software__content-text"> 7372 <p style="margin-bottom: 8px;"> 7373 <img class="" src="https://emlid.com/wp-content/uploads/2023/09/Group-1302.svg" alt=""> 7374 </p> 7375 <p class="mb-5" style="color: #9fa0a1;"> 7376 Learn more about Emlid Studio <a href="https://emlid.com/emlid-studio/" target="_blank">here</a>. 7377 </p> 7378 <div class="software-content-points"> 7379 <div class="software-content-points__item"> 7380 <span class="is-flex"> 7381 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7382 <span class="op-07">Kinematic processing</span> 7383 </span> 7384 <span class="is-flex"> 7385 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7386 <span class="op-07">Static processing</span> 7387 </span> 7388 </div> 7389 <div class="software-content-points__item"> 7390 <span class="is-flex"> 7391 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7392 <span class="op-07">RTK Drone data processing</span> 7393 </span> 7394 <span class="is-flex"> 7395 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7396 <span class="op-07">Raw data analysis</span> 7397 </span> 7398 </div> 7399 <div class="software-content-points__item"> 7400 <span class="is-flex"> 7401 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7402 <span class="op-07">Stop & Go with Emlid Flow</span> 7403 </span> 7404 </div> 7405 </div> 7406 </div> 7407 </div> 7408 <div class="col-lg-7 software__media-block"> 7409 <video 7410 class="img-fluid" 7411 autoplay="" 7412 loop="" 7413 playsinline="" 7414 muted="" 7415 src="https://emlid.com/wp-content/uploads/2023/09/Studio.mp4" 7416 ></video> 7417 </div> 7418 </div> 7419 </div> 7420 <div id="software_slide-4" class="software__item"> 7421 <div class="row"> 7422 <div class="col-lg-5 d-lg-block software__content-block"> 7423 <div class="software__content-title software__content-title__4"> 7424 <p class="large-promo"> 7425 Connect up to 10 rovers to your base station via the internet or set up your own NTRIP network 7426 with Emlid Caster. 7427 </p> 7428 </div> 7429 <div class="software__content-text"> 7430 <p class="mb-5" style="color: #9fa0a1;"> 7431 Learn more about Emlid Caster <a href="https://emlid.com/ntrip-caster/" target="_blank">here</a>. 7432 </p> 7433 <div class="software-content-points"> 7434 <div class="software-content-points__item">
7435 <span class="is-flex"> 7436 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7437 <span class="op-07">Available for free and works worldwide</span> 7438 </span> 7439 </div> 7440 <div class="software-content-points__item"> 7441 <span class="is-flex"> 7442 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7443 <span class="op-07">Works with Reach and other receivers with NTRIP support</span> 7444 </span> 7445 </div> 7446 <div class="software-content-points__item"> 7447 <span class="is-flex"> 7448 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7449 <span class="op-07">RTCM3 and other correction formats support</span> 7450 </span> 7451 </div> 7452 <div class="software-content-points__item"> 7453 <span class="is-flex"> 7454 <img src="https://emlid.com/wp-content/uploads/2023/09/Vector.svg" alt=""> 7455 <span class="op-07">Up to 5 bases and 10 rovers at the same time</span> 7456 </span> 7457 </div> 7458 </div> 7459 </div> 7460 </div> 7461 <div class="col-lg-7 software__media-block"> 7462 <img class="img-fluid" src="https://emlid.com/wp-content/uploads/2023/09/caster-1-scaled.webp" alt=""> 7463 </div> 7464 </div> 7465 </div> 7466 --> 7467 </div> 7468 </div> 7469 </div> 7470</section> 7471
7472<script> 7473 // Use const/let appropriately 7474 const sliderItems = document.querySelectorAll(".rapid-scroll-slider__item"); 7475 const navItems = document.querySelectorAll(".software-nav__item"); 7476 const softwareItems = document.querySelectorAll(".software__item"); 7477 7478 // Refactor sliderItems click event 7479 sliderItems.forEach((item) => { 7480 item.addEventListener("click", () => { 7481 sliderItems.forEach((item) => item.classList.remove("active-item")); 7482 item.classList.add("active-item"); 7483 }); 7484 }); 7485 7486 // Refactor software items click event 7487 navItems.forEach((navItem, index) => { 7488 navItem.addEventListener("click", () => { 7489 softwareItems.forEach((item) => 7490 item.classList.remove("software__item-active") 7491 ); 7492 softwareItems[index].classList.add("software__item-active"); 7493 navItems.forEach((item) => item.classList.remove("active-tab")); 7494 navItem.classList.add("active-tab"); 7495 }); 7496 }); 7497</script>
7497 7498</div><div id="shopify-section-template--25153989706033__79ae976b-9ba1-4179-9206-3bb6606d61ba" class="shopify-section radiant-section radiant--product-image-cards"> 7499 7500 7501 7502 7503</div><section id="shopify-section-template--25153989706033__custom_liquid_JJrUVa" class="shopify-section section"><style data-shopify>.section-template--25153989706033__custom_liquid_JJrUVa-padding { 7504 padding-top: calc(0px * 0.75); 7505 padding-bottom: calc(0px * 0.75); 7506 } 7507 7508 @media screen and (min-width: 750px) { 7509 .section-template--25153989706033__custom_liquid_JJrUVa-padding { 7510 padding-top: 0px; 7511 padding-bottom: 0px; 7512 } 7513 }</style><div class="color-background-1 gradient"> 7514 <div class="section-template--25153989706033__custom_liquid_JJrUVa-padding"> 7515 <style> 7516#cross-sell, 7517#upsell, 7518#xs_bundle { 7519display: none;} 7520</style> 7521 </div> 7522</div> 7523 7524 7525</section><section id="shopify-section-template--25153989706033__174551890927fd6f7d" class="shopify-section section"><div class="page-width scroll-trigger animate--slide-in"><div id="shopify-block-AamtMQ0pabjdxOTR5Z__yotpo_product_reviews_reviews_wnNYhg" class="shopify-block shopify-app-block"> 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535<div 7536 class="yotpo-widget-instance" 7537 data-yotpo-instance-id="1026143" 7538 data-yotpo-product-id="10409911648561" 7539 data-yotpo-name="Reach RS4 Pro" 7540 data-yotpo-url="https://store.emlid.com/products/reach-rs4-pro" 7541 data-yotpo-price="4599.0" 7542 data-yotpo-currency="USD" 7543 data-yotpo-image-url="https://store.emlid.com/cdn/shop/files/RS4RENDERS04.663.webp?v=1759528847&width=480" 7544 data-yotpo-description=" 7545 All-band RTK GNSS receiver with dual cameras and tilt compensation 7546 7547Next-level stakeout with augmented reality and measuring from photos. Comes with a mobile app. 7548 7549 Two Full-HD cameras 7550 7551AR guidance for stakeout Measurements from images 7552High precision 7553RTK: 7 mm + 1 ppmTilt compensation: RTK + 2 mm + 0.3 mm/° 7554Emlid Corrections 7555To achieve centimeter-level (sub-inch) accuracy with RTK, you need a source of corrections â positioning enhancement data that upgrades standard GNSS accuracy from meters to centimeters in real time. Your receiver includes one free year of Emlid Corrections â a built-in network service to receive corrections over the internet. Learn more and check coverage in your area. 7556 7557 All-band support 7558 7559GPS: L1C/A, L2C, L5 GLONASS: L1OF, L2OF Galileo: E1-B/C, E5a, E6 BeiDou: B1I, B1C, B2a, B3I QZSS: L1C/A, L1C/B11, L2C, L5 NavIC: L1-SPS Data, L5-SPS 7560 7561 Base and rover 7562 7563915 MHz LoRa, 450 MHz UHF, NTRIP 7564 7565 Rugged and powerful 7566 756716 hours on one charge Magnesium alloy body IP68 rating Withstands temperatures from -40 to +65°C (-40 to +149ºF) 7568Explore all Reach RS4 Pro features and user reviews 7569Package includes 7570- Reach RS4 Pro- Carrying case - USB Type-C cable - LoRa Antenna 860-930 MHz - UHF Antenna 410-470 MHz" 7571 data-yotpo-prevent-load-rs="true" 7572 > 7573</div> 7574 7575
7575<script type="application/ld+json" class="y-rich-snippet-script"> 7576 { 7577 "@context": "https://schema.org", 7578 "@type": "Product", 7579 "aggregateRating": { 7580 "@type": "AggregateRating", 7581 "ratingValue": "5.0", 7582 "reviewCount": "4" 7583 }, 7584 "name":"Reach RS4 Pro", 7585 "image":["https://store.emlid.com/cdn/shop/files/RS4RENDERS04.663.webp?v=1759528847&width=480"], 7586 "offers": { 7587 "@type": "Offer", 7588 "availability": "https://schema.org/InStock", 7589 "price": "4599.0", 7590 "priceCurrency": "USD", 7591 "sku": "RCH402" 7592, 7593 "url": "https://store.emlid.com/products/reach-rs4-pro?variant=55594169827633" 7594 }, 7595 "brand": { 7596 "@type": "Brand", 7597 "name": "Emlid Store US" 7598 }, 7599 "description": "\n All-band RTK GNSS receiver with dual cameras and tilt compensation\n\nNext-level stakeout with augmented reality and measuring from photos. Comes with a mobile app.\n\n Two Full-HD cameras \n\nAR guidance for stakeout Measurements from images\nHigh precision\nRTK: 7 mm + 1 ppmTilt compensation: RTK + 2 mm + 0.3 mm\/°\nEmlid Corrections\nTo achieve centimeter-level (sub-inch) accuracy with RTK, you need a source of corrections â positioning enhancement data that upgrades standard GNSS accuracy from meters to centimeters in real time. Your receiver includes one free year of Emlid Corrections â a built-in network service to receive corrections over the internet. Learn more and check coverage in your area.\n\n All-band support\n\nGPS: L1C\/A, L2C, L5 GLONASS: L1OF, L2OF Galileo: E1-B\/C, E5a, E6 BeiDou: B1I, B1C, B2a, B3I QZSS: L1C\/A, L1C\/B11, L2C, L5 NavIC: L1-SPS Data, L5-SPS\n\n Base and rover\n\n915 MHz LoRa, 450 MHz UHF, NTRIP\n\n Rugged and powerful\n\n16 hours on one charge Magnesium alloy body IP68 rating Withstands temperatures from -40 to +65°C (-40 to +149ºF)\nExplore all Reach RS4 Pro features and user reviews\nPackage includes\n- Reach RS4 Pro- Carrying case - USB Type-C cable - LoRa Antenna 860-930 MHz - UHF Antenna 410-470 MHz", 7600 "sku": "RCH402" 7601 7602 } 7603 </script>
7603 7604 7605
7605<script> 7606 function addReviewsDataToRichSnippetLDScript() { 7607 var jsonLdScript = document.querySelector('.y-rich-snippet-script'); 7608 var preloadedReviews = JSON.parse("{\"pagination\":{\"page\":1,\"perPage\":3,\"total\":4},\"bottomline\":{\"totalReview\":4,\"averageScore\":5.0,\"totalOrganicReviews\":0,\"organicAverageScore\":0.0,\"starDistribution\":{\"1\":0,\"2\":0,\"3\":0,\"4\":0,\"5\":4},\"customFieldsBottomline\":{}},\"products\":[{\"id\":948838617,\"domainKey\":\"10409911648561\",\"name\":\"Reach RS4 Pro\",\"socialLinks\":{\"linkedin\":\"https:\/\/yotpo.com\/go\/v9nhlBuY\",\"facebook\":\"https:\/\/yotpo.com\/go\/czOqt9D3\",\"twitter\":\"https:\/\/yotpo.com\/go\/1fnnsa5Z\",\"googleOauth2\":\"https:\/\/yotpo.com\/go\/Ze22kwuy\"},\"embeddedWidgetLink\":\"https:\/\/yotpo.com\/go\/yENwVWZr\",\"testimonialsProductLink\":\"https:\/\/yotpo.com\/go\/cHkQPcZZ\",\"productLink\":\"https:\/\/yotpo.com\/go\/kejaLABX\",\"imageUrl\":\"https:\/\/cdn-yotpo-images-production.yotpo.com\/Product\/911625705\/766850940\/square.png?1759528856\"}],\"reviews\":[{\"id\":835734945,\"score\":5,\"votesUp\":0,\"votesDown\":0,\"content\":\"Working Great!\",\"title\":\"Working Great!\",\"createdAt\":\"2026-05-03T20:04:51\",\"verifiedBuyer\":true,\"sentiment\":0.9880189,\"isIncentivized\":false,\"isShop\":false,\"topics\":{},\"fieldsHighlights\":{},\"customFields\":{},\"user\":{\"userId\":195376495,\"userType\":\"User\",\"isSocialConnected\":0,\"displayName\":\"Steven O.\"},\"country\":{\"code\":\"US\",\"label\":\"ðºð¸ United States\"},\"productVariants\":{},\"language\":\"en\"},{\"id\":811354012,\"score\":5,\"votesUp\":0,\"votesDown\":0,\"content\":\"The RS4 Pro is a huge leap for Emlid. We already used our Reach RS3 over our Trimble gear for many tasks and this solidifies it.\",\"title\":\"The RS4 Pro is a\",\"createdAt\":\"2026-02-17T20:14:27\",\"verifiedBuyer\":false,\"sentiment\":0.9197805,\"isIncentivized\":false,\"isShop\":false,\"topics\":{\"rs4 pro\":{\"name\":\"rs4 pro\",\"sentence\":\"The RS4 Pro is a huge leap for Emlid.\"},\"reach rs3\":{\"name\":\"reach rs3\",\"sentence\":\"We already used our Reach RS3 over our Trimble gear for many tasks and this solidifies it.\"},\"leap\":{\"name\":\"leap\",\"sentence\":\"The RS4 Pro is a huge leap for Emlid.\"}},\"fieldsHighlights\":{},\"customFields\":{},\"imagesData\":[{\"id\":812930154,\"thumbUrl\":\"https:\/\/cdn-yotpo-images-production.yotpo.com\/Review\/811354012\/812930154\/square.jpg?1771359318\",\"originalUrl\":\"https:\/\/cdn-yotpo-images-production.yotpo.com\/Review\/811354012\/812930154\/original.jpg?1771359318\",\"imageWidth\":1440,\"imageHeight\":1080},{\"id\":812930143,\"thumbUrl\":\"https:\/\/cdn-yotpo-images-production.yotpo.com\/Review\/811354012\/812930143\/square.jpg?1771359312\",\"originalUrl\":\"https:\/\/cdn-yotpo-images-production.yotpo.com\/Review\/811354012\/812930143\/original.jpg?1771359312\",\"imageWidth\":1440,\"imageHeight\":1080}],\"user\":{\"userId\":181245710,\"userType\":\"User\",\"isSocialConnected\":0,\"displayName\":\"Michael L.\"},\"country\":{\"code\":\"US\",\"label\":\"ðºð¸ United States\"},\"productVariants\":{},\"language\":\"en\"},{\"id\":809795911,\"score\":5,\"votesUp\":0,\"votesDown\":0,\"content\":\"The RS4 Pro is my go-to GNSS receiver when reliability matters most.\\nWith full all-band support, a slick design, and a more stable, trustworthy fix, it delivers consistent performance in demanding conditions\",\"title\":\"The RS4 Pro is my\",\"createdAt\":\"2026-02-13T05:35:35\",\"verifiedBuyer\":false,\"sentiment\":0.9292808,\"isIncentivized\":false,\"isShop\":false,\"topics\":{\"performance\":{\"name\":\"performance\",\"sentence\":\"With full all-band support, a slick design, and a more stable, trustworthy fix, it delivers consistent performance in demanding conditions\"},\"design\":{\"name\":\"design\",\"sentence\":\"With full all-band support, a slick design, and a more stable, trustworthy fix, it delivers consistent performance in demanding conditions\"},\"fixes\":{\"name\":\"fixes\",\"sentence\":\"With full all-band support, a slick design, and a more stable, trustworthy fix, it delivers consistent performance in demanding conditions\"}},\"fieldsHighlights\":{},\"customFields\":{},\"user\":{\"userId\":181122513,\"userType\":\"User\",\"isSocialConnected\":0,\"displayName\":\"Tore B.\"},\"country\":{\"code\":\"NO\",\"label\":\"ð³ð´ Norway\"},\"productVariants\":{},\"language\":\"en\"}]}"); 7609 if ( 7610 !jsonLdScript || 7611 !jsonLdScript.textContent || 7612 !preloadedReviews || 7613 !preloadedReviews.reviews || 7614 preloadedReviews.reviews.length === 0) { 7615 return; 7616 } 7617 var data = JSON.parse(jsonLdScript.textContent); 7618 if (!data) { 7619 return; 7620 } 7621 7622 // Update script with the reviews data 7623 data.review = []; 7624 preloadedReviews.reviews.map(function(elem) { 7625 data.review.push({ 7626 "@type": "Review", 7627 "reviewRating": { 7628 "@type": "Rating", 7629 "ratingValue": elem.score ? elem.score : '', 7630 "bestRating": 5, 7631 }, 7632 "author": { 7633 "@type": "Person", 7634 "name": elem.user && elem.user.displayName ? elem.user.displayName : '' 7635 }, 7636 "reviewBody": elem.content ? elem.content : '', 7637 }); 7638 }); 7639 // Serialize and update the script tag 7640 jsonLdScript.textContent = JSON.stringify(data, null, 2); 7641 } 7642 7643 addReviewsDataToRichSnippetLDScript(); 7644 </script>
7644 7645 7646 7647 7648 7649 7650 7651 7652 <div id="yotpo-reviews-section-data" style="margin-top:4px; font-size:11px; line-height:1.35; color:#555; max-height:220px; overflow:auto; padding:6px 8px; border:1px solid #eee; border-radius:4px; background:#fafafa;"> <section id="yotpo-reviews-overall-rating"> <p><strong>Overall rating:</strong> 5.0 / 5 from 4 reviews.</p> </section> <section id="yotpo-reviews-ai-summary"> <h3>AI Generated Review Summary</h3> <p></p> </section> <section id="yotpo-reviews-summary-topics"> <h3>Summary topics</h3> <ul> </ul> </section> <section id="yotpo-reviews-review-topics"> <p><strong>Review topics:</strong> [].</p> </section> <section id="yotpo-reviews-highlights"> <h3>Review highlights</h3> <ul> </ul> </section> <section id="yotpo-reviews-individual-reviews"> <h3>Reviews</h3> <article class="yotpo-review" data-reviewer="Steven O." data-rating="5"> <h4 class="yotpo-review-title">Working Great!</h4> <p class="yotpo-review-body">"Working Great!"</p> <p class="yotpo-review-author">— <span class="yotpo-reviewer-name">Steven O.</span> (<span class="yotpo-review-rating">5/5</span>)</p> </article><article class="yotpo-review" data-reviewer="Michael L." data-rating="5"> <h4 class="yotpo-review-title">The RS4 Pro is a</h4> <p class="yotpo-review-body">"The RS4 Pro is a huge leap for Emlid. We already used our Reach RS3 over our Trimble gear for many tasks and this solidifies it."</p> <p class="yotpo-review-author">— <span class="yotpo-reviewer-name">Michael L.</span> (<span class="yotpo-review-rating">5/5</span>)</p> </article><article class="yotpo-review" data-reviewer="Tore B." data-rating="5"> <h4 class="yotpo-review-title">The RS4 Pro is my</h4> <p class="yotpo-review-body">"The RS4 Pro is my go-to GNSS receiver when reliability matters most. With full all-band support, a slick design, and a more stable, trustworthy fix, it delivers consistent performance in demanding conditions"</p> <p class="yotpo-review-author">— <span class="yotpo-reviewer-name">Tore B.</span> (<span class="yotpo-review-rating">5/5</span>)</p> </article><article class="yotpo-review" data-reviewer="Luke W." data-rating="5"> <h4 class="yotpo-review-title">Love how this is the</h4> <p class="yotpo-review-body">"Love how this is the only gps I own that will work under tress and near buildings. Nice and compact and the battery lasts forever"</p> <p class="yotpo-review-author">— <span class="yotpo-reviewer-name">Luke W.</span> (<span class="yotpo-review-rating">5/5</span>)</p> </article> </section> <section id="yotpo-reviews-qa"> <h3>Q&A</h3> <dl> </dl> </section> </div> 7653 7654 7655 7656 7657</div> 7658</div> 7659 7660 7661</section><div id="shopify-section-template--25153989706033__bad_faq_yRgYkH" class="shopify-section"> 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 <section id="faq" class="faq" style="background: #F8F8F8;"> 7673 <div class="container"> 7674 <h2>FAQ</h2> 7675 <div class="faq__inner"> 7676 <div class="faq_items"> 7677 7678 7679 <div class="faq__elem"> 7680 <div class="faq__title" onclick="toggleFaq(this)"> 7681 <h3 class="h4-promo">Whatâs the accuracy of Emlid Reach RS4 Pro?</h3> 7682 <span class="arrow"> 7683 <svg width="18" height="10" viewBox="0 0 18 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 7684 <path d="M2 1.60596L9 8.39384L16 1.60596" stroke="black" stroke-opacity="0.5" stroke-width="2" stroke-linecap="square"></path> 7685 </svg> 7686 </span> 7687 </div> 7688 <div class="faq__content" style="display: none;"> 7689 <p class="regular-promo rte"> 7690 All Emlid receivers offer centimeter-level accuracy (1 cm â 0.39 in). The Reach RS4 Pro also features tilt compensation, allowing you to maintain the same level of accuracy even if the pole is tilted. 7691 </p> 7692 </div> 7693 </div> 7694 7695 7696 <div class="faq__elem"> 7697 <div class="faq__title" onclick="toggleFaq(this)"> 7698 <h3 class="h4-promo">What are the capabilities of the Reach RS4 Pro dual camera system?</h3>
7699 <span class="arrow"> 7700 <svg width="18" height="10" viewBox="0 0 18 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 7701 <path d="M2 1.60596L9 8.39384L16 1.60596" stroke="black" stroke-opacity="0.5" stroke-width="2" stroke-linecap="square"></path> 7702 </svg> 7703 </span> 7704 </div> 7705 <div class="faq__content" style="display: none;"> 7706 <p class="regular-promo rte"> 7707 The dual camera feature provides two functions: AR guidance and measurement from photos.<br /> 7708<br /> 7709With the RS4 Pro, stakeout becomes visual. Rather than just following coordinates on a map, your designs are overlaid directly onto the real world, clearly showing where to place stakes.<br /> 7710<br /> 7711You can also use the cameras to measure building facades, areas behind fences, across busy roads, and any other inaccessible points. 7712 </p> 7713 </div> 7714 </div> 7715 7716 7717 <div class="faq__elem"> 7718 <div class="faq__title" onclick="toggleFaq(this)"> 7719 <h3 class="h4-promo">What do I need to achieve cm-level (sub-inch) accuracy?</h3> 7720 <span class="arrow"> 7721 <svg width="18" height="10" viewBox="0 0 18 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 7722 <path d="M2 1.60596L9 8.39384L16 1.60596" stroke="black" stroke-opacity="0.5" stroke-width="2" stroke-linecap="square"></path> 7723 </svg> 7724 </span> 7725 </div> 7726 <div class="faq__content" style="display: none;"> 7727 <p class="regular-promo rte"> 7728 The RTK technique allows you to get cm-level (sub-inch) accuracy, but requires a receiver (rover) and a source of corrections (a base), which can be another receiver or a correction service. Both are valid approaches. Two receivers can communicate with each other via radio or internet, giving you full independence, and are great for permanent or semi-permanent setups. <br /> 7729<br /> 7730A correction service, also called an NTRIP/VRS service, always requires an internet connection, but allows you to skip the base station logistics entirely and move between job sites freely.<br /> 7731<br /> 7732If you want to explore the second option, check Emlid Corrections â a professional VRS NTRIP service, built into Reach receivers, providing cm-level (sub-inch) accuracy out of the box. The first year is included for free. 7733 </p> 7734 </div> 7735 </div> 7736 7737 7738 <div class="faq__elem"> 7739 <div class="faq__title" onclick="toggleFaq(this)"> 7740 <h3 class="h4-promo">Is the Reach RS4 Pro suitable for construction work?</h3> 7741 <span class="arrow"> 7742 <svg width="18" height="10" viewBox="0 0 18 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 7743 <path d="M2 1.60596L9 8.39384L16 1.60596" stroke="black" stroke-opacity="0.5" stroke-width="2" stroke-linecap="square"></path> 7744 </svg> 7745 </span> 7746 </div> 7747 <div class="faq__content" style="display: none;"> 7748 <p class="regular-promo rte"> 7749 The Reach RS4 Pro offers a dual camera system, tilt compensation and all-band support, all of which are useful for construction work. It provides a stable fix, even in areas with a lot of interference. Tilt compensation saves time by eliminating the need to level the pole during stakeout. One of the dual camera features, AR guidance, helps you stake out even faster because it makes everything visual. Another useful feature is the ability to measure points you canât reach, even with tilt compensation, allowing you to stay safe from hazardous areas.<br /> 7750<br /> 7751The software could also be instrumental in decision-making. Each Reach RS4 Pro device comes with the Emlid Flow mobile and cloud app, which has all the features required for construction applications.<br /> 7752- Topo surveys<br /> 7753- Gathering terrain and elevation data<br /> 7754- Design layout and stakeout<br /> 7755- Staking centre lines, offsets and curves with precision for road construction<br /> 7756- Cut and fill calculations<br /> 7757- As-builts<br /> 7758<br /> 7759The Emlid Flow 360 cloud also allows you to create a workspace for your team, monitor field progress in real time from the office, and ensure that everyone is working with up-to-date data. 7760 </p> 7761 </div> 7762 </div> 7763 7764 7765 <div class="faq__elem"> 7766 <div class="faq__title" onclick="toggleFaq(this)"> 7767 <h3 class="h4-promo">Is the Reach RS4 Pro suitable for teamwork?</h3>
7768 <span class="arrow"> 7769 <svg width="18" height="10" viewBox="0 0 18 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 7770 <path d="M2 1.60596L9 8.39384L16 1.60596" stroke="black" stroke-opacity="0.5" stroke-width="2" stroke-linecap="square"></path> 7771 </svg> 7772 </span> 7773 </div> 7774 <div class="faq__content" style="display: none;"> 7775 <p class="regular-promo rte"> 7776 Yes. The Reach RS4 Pro is a professional GNSS receiver that is also intuitive and easy to learn. All team members, whether professional surveyors or not, can get started with it quickly without complicated training or lengthy manuals.<br /> 7777<br /> 7778The Reach RS4 Pro also comes with the Emlid Flow mobile and cloud app, which offers not only data collection features, but also tools for seamless collaboration and teamwork.<br /> 7779<br /> 7780- Create a shared workspace, invite team members, and manage access to secure data ownership.<br /> 7781- Monitor field progress from the office and exchange data instantly with real-time sync.<br /> 7782- Ensure the whole team is working with the latest data. 7783 </p> 7784 </div> 7785 </div> 7786 7787 7788 <div class="faq__elem"> 7789 <div class="faq__title" onclick="toggleFaq(this)"> 7790 <h3 class="h4-promo">Do you provide documentation and training?</h3> 7791 <span class="arrow"> 7792 <svg width="18" height="10" viewBox="0 0 18 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 7793 <path d="M2 1.60596L9 8.39384L16 1.60596" stroke="black" stroke-opacity="0.5" stroke-width="2" stroke-linecap="square"></path> 7794 </svg> 7795 </span> 7796 </div> 7797 <div class="faq__content" style="display: none;"> 7798 <p class="regular-promo rte"> 7799 Reach RS4 Pro is designed for ease of use, requiring no specialized training. Its plug-and-play functionality allows both professional surveyors and non-surveyors to operate the device effectively without additional setup.<br /> 7800<br /> 7801We offer an extended documentation section that covers all essential topics, including getting started, base setup, and integrations. Additionally, you will receive onboarding emails to guide you through your first steps with the equipment.<br /> 7802<br /> 7803We also provide lifelong technical support for all Reach users, delivered by our team of Application Engineers. Contact us at <a href="/cdn-cgi/l/email-protection#d7a4a2a7a7b8a5a397b2babbbeb3f9b4b8ba"><span class="__cf_email__" data-cfemail="b7c4c2c7c7d8c5c3f7d2dadbded399d4d8da">[email protected]</span></a>. 7804 </p> 7805 </div> 7806 </div> 7807 7808 7809 <div class="faq__elem"> 7810 <div class="faq__title" onclick="toggleFaq(this)"> 7811 <h3 class="h4-promo">How long is the warranty period, and what should I do if my unit stops working?</h3> 7812 <span class="arrow"> 7813 <svg width="18" height="10" viewBox="0 0 18 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 7814 <path d="M2 1.60596L9 8.39384L16 1.60596" stroke="black" stroke-opacity="0.5" stroke-width="2" stroke-linecap="square"></path> 7815 </svg> 7816 </span> 7817 </div> 7818 <div class="faq__content" style="display: none;"> 7819 <p class="regular-promo rte"> 7820 If your unit is not functioning as expected, please contact us at <a href="/cdn-cgi/l/email-protection#9deee8ededf2efe9ddf8f0f1f4f9b3fef2f0"><span class="__cf_email__" data-cfemail="f3808683839c8187b3969e9f9a97dd909c9e">[email protected]</span></a> so we can assist with troubleshooting.<br /> 7821<br /> 7822If a unit is found to be defective or does not meet specifications during the warranty period, we will provide a replacement. A new unit will be shipped within one month after examination, free of charge. If a replacement is not possible, a full refund will be issued within one month after the unitâs examination.<br /> 7823<br />
7824For more details, please refer to our Terms and Conditions. 7825 </p> 7826 </div> 7827 </div> 7828 7829 7830 <div class="faq__elem"> 7831 <div class="faq__title" onclick="toggleFaq(this)"> 7832 <h3 class="h4-promo">What are the differences between Reach RS4 and Reach RS4 Pro?</h3> 7833 <span class="arrow"> 7834 <svg width="18" height="10" viewBox="0 0 18 10" fill="none" xmlns="http://www.w3.org/2000/svg"> 7835 <path d="M2 1.60596L9 8.39384L16 1.60596" stroke="black" stroke-opacity="0.5" stroke-width="2" stroke-linecap="square"></path> 7836 </svg> 7837 </span> 7838 </div> 7839 <div class="faq__content" style="display: none;"> 7840 <p class="regular-promo rte"> 7841 The Reach RS4 Pro has all the capabilities of the Reach RS4, plus dual cameras for stakeout with augmented reality and measurements from photos. 7842 </p> 7843 </div> 7844 </div> 7845 7846 </div> 7847 </div> 7848 </div> 7849 </section> 7850 7851 7852<style> 7853 .faq { 7854 margin: 0; 7855 padding: 90px 0 120px; 7856 background: #F8F8F8; 7857 border-top: 1px solid rgba(0,0,0,.12); 7858 } 7859 .faq .container { 7860 max-width: var(--page-width); 7861 margin-left: auto; 7862 margin-right: auto; 7863 padding: 0px 25px; 7864 } 7865 7866 .faq .faq__elem { 7867 margin-bottom: 10px; 7868 cursor: pointer; 7869 border-bottom: 1px solid rgba(0,0,0,.12); 7870 padding: 24px 0; 7871 } 7872 .faq .faq__title { 7873 display: flex; 7874 align-items: center; 7875 justify-content: space-between; 7876 } 7877 .faq .faq__content { 7878 margin-top: 5px; 7879 max-width: 900px; 7880 padding-top: 24px; 7881 padding-bottom: 24px; 7882 } 7883 .faq .arrow { 7884 transition: transform .3s ease; 7885 } 7886 .faq .arrow.rotate { 7887 transform: rotate(180deg); 7888 } 7889 .faq ul { 7890 list-style: disc !important; 7891 padding-left: 14px; 7892 } 7893 7894 .h4-promo { 7895 font-size: 18px; 7896 } 7897</style>
vendor: 110 bytes, lines 7897-7899
7897 7898 7899<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
7899<script> 7900 document.addEventListener("DOMContentLoaded", function () { 7901 var faqs = document.querySelectorAll(".faq__elem"); 7902 7903 faqs.forEach(function (faq) { 7904 faq.addEventListener("click", function () { 7905 var content = this.querySelector(".faq__content"); 7906 var arrow = this.querySelector(".arrow"); 7907 if (content.style.display === "block") { 7908 content.style.display = "none"; 7909 arrow.classList.remove("rotate"); 7910 } else { 7911 content.style.display = "block"; 7912 arrow.classList.add("rotate"); 7913 } 7914 }); 7915 }); 7916 }); 7917</script>
7917 7918</div> 7919 </main> 7920 7921 <footer id="shopify-section-radiant--footer" class="shopify-section radiant--footer"> 7922 7923<link href="//store.emlid.com/cdn/shop/t/13/assets/footer.css?v=183302757546645663841786625494" rel="stylesheet" type="text/css" media="all" /> 7924 7925<div class="container"> 7926 <div class="container-wrapper railing-x railing--dark"> 7927 <div class="footer-top"> 7928 <div class="footer-top__start"> 7929 <div class="description"> 7930 <a class="footer-logo" href="/"> 7931 <svg width="92" height="14" viewBox="0 0 92 14" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 7932 <path d="M70.4898 -0.000976562H67.3398V13.999H70.4898V-0.000976562Z" fill="currentColor"/> 7933 <path d="M73.6406 -0.000976562L74.2426 2.70802C74.2776 2.86202 74.2916 2.94602 74.3336 3.00202C74.3686 3.05102 74.4176 3.09302 74.4806 3.12102C74.5436 3.14902 74.6276 3.14902 74.7886 3.14902H88.6906V10.849H74.7886C74.6276 10.849 74.5506 10.849 74.4806 10.877C74.4246 10.905 74.3686 10.94 74.3336 10.996C74.2916 11.052 74.2776 11.136 74.2426 11.29L73.6406 13.999H86.8006C88.5646 13.999 89.4466 13.999 90.1186 13.656C90.7136 13.355 91.1896 12.872 91.4976 12.277C91.8406 11.605 91.8406 10.723 91.8406 8.95902V5.03902C91.8406 3.27502 91.8406 2.39302 91.4976 1.72102C91.1966 1.12602 90.7136 0.643023 90.1186 0.342023C89.4466 -0.000976562 88.5646 -0.000976562 86.8006 -0.000976562H73.6406Z" fill="currentColor"/> 7934 <path d="M50.5406 10.849V-0.000976562H47.9506C47.7546 -0.000976562 47.6566 -0.000976562 47.5796 0.0340234C47.5166 0.0690234 47.4606 0.118023 47.4256 0.188023C47.3906 0.265023 47.3906 0.363023 47.3906 0.559023V8.95902C47.3906 10.723 47.3906 11.605 47.7336 12.277C48.0346 12.872 48.5176 13.355 49.1126 13.656C49.7846 13.999 50.6666 13.999 52.4306 13.999H63.0426C63.2036 13.999 63.2806 13.999 63.3506 13.971C63.4066 13.943 63.4626 13.908 63.4976 13.852C63.5396 13.796 63.5536 13.712 63.5886 13.558L64.1906 10.849H50.5406Z" fill="currentColor"/> 7935 <path d="M3.15 3.14902H12.838L8.638 6.20102L10.486 8.74902L18.193 3.14902L17.591 0.440023C17.556 0.286023 17.542 0.202023 17.5 0.146023C17.465 0.0970234 17.416 0.0550234 17.353 0.0270234C17.29 -0.000976562 17.213 -0.000976562 17.052 -0.000976562H5.04C3.276 -0.000976562 2.394 -0.000976562 1.722 0.342023C1.127 0.643 0.644 1.12602 0.343 1.72102C0 2.39302 0 3.27502 0 5.03902V8.95902C0 10.723 0 11.605 0.343 12.277C0.644 12.872 1.127 13.355 1.722 13.656C2.394 13.999 3.276 13.999 5.04 13.999H17.052C17.213 13.999 17.29 13.999 17.36 13.971C17.416 13.943 17.472 13.908 17.507 13.852C17.549 13.796 17.563 13.712 17.598 13.558L18.2 10.849H3.15V3.14902Z" fill="currentColor"/> 7936 <path d="M41.0906 -0.000976562L32.6906 6.10302L24.2906 -0.000976562H21.7006C21.5046 -0.000976562 21.4066 -0.000976562 21.3296 0.0340234C21.2666 0.0690234 21.2106 0.118023 21.1756 0.188023C21.1406 0.265023 21.1406 0.363023 21.1406 0.559023V13.439C21.1406 13.635 21.1406 13.733 21.1756 13.81C21.2106 13.873 21.2596 13.929 21.3296 13.964C21.4066 13.999 21.5046 13.999 21.7006 13.999H24.2906V3.89802L32.6906 10.002L41.0906 3.89802V13.999H43.6806C43.8766 13.999 43.9746 13.999 44.0516 13.964C44.1146 13.929 44.1706 13.88 44.2056 13.81C44.2406 13.733 44.2406 13.635 44.2406 13.439V0.559023C44.2406 0.363023 44.2406 0.265023 44.2056 0.188023C44.1706 0.125023 44.1216 0.0690234 44.0516 0.0340234C43.9746 -0.000976562 43.8766 -0.000976562 43.6806 -0.000976562H41.0906Z" fill="currentColor"/> 7937 </svg> 7938 </a> 7939 7940 <div class="footer-text rte"> 7941 <p>Discover <a href="/collections/all-products" title="All Products">Reach GNSS RTK receivers</a> - the high precision surveying equipment from Emlid.</p> 7942 </div> 7943 7944 </div> 7945 <ul class="footer__list-social list-unstyled list-social"><li class="list-social__item"> 7946 <a href="https://www.linkedin.com/company/emlidtech" class="link list-social__link" target="_blank"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 7947<path d="M4.16667 2.5C3.24544 2.5 2.5 3.24544 2.5 4.16667V15.8333C2.5 16.7546 3.24544 17.5 4.16667 17.5H15.8333C16.7546 17.5 17.5 16.7546 17.5 15.8333V4.16667C17.5 3.24544 16.7546 2.5 15.8333 2.5H4.16667ZM4.16667 4.16667H15.8333V15.8333H4.16667V4.16667ZM6.48329 5.26367C5.76823 5.26367 5.33963 5.69336 5.33963 6.26411C5.33963 6.83594 5.76823 7.26454 6.41168 7.26454C7.12565 7.26454 7.55317 6.83594 7.55317 6.26411C7.55317 5.69336 7.12565 5.26367 6.48329 5.26367ZM5.39714 8.33333V14.1667H7.5V8.33333H5.39714ZM9.23503 8.33333V14.1667H11.3379V10.9776C11.3379 10.0293 12.015 9.89258 12.2179 9.89258C12.4219 9.89258 12.9655 10.0966 12.9655 10.9776V14.1667H15V10.9776C15 9.14714 14.1862 8.33333 13.1684 8.33333C12.1517 8.33333 11.6092 8.67188 11.3379 9.14714V8.33333H9.23503Z" fill="currentColor"/> 7948</svg> 7949<span class="visually-hidden">LinkedIn</span> 7950 </a> 7951 </li><li class="list-social__item"> 7952 <a href="https://www.facebook.com/emlidtech" class="link list-social__link" target="_blank"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 7953<path d="M4.16667 2.5C3.24653 2.5 2.5 3.24653 2.5 4.16667V15.8333C2.5 16.7535 3.24653 17.5 4.16667 17.5H15.8333C16.7535 17.5 17.5 16.7535 17.5 15.8333V4.16667C17.5 3.24653 16.7535 2.5 15.8333 2.5H4.16667ZM4.16667 4.16667H15.8333L15.8355 15.8333H12.0117V12.5282H13.9822L14.2752 10.2582H12.0247V8.81293C12.0247 8.15538 12.207 7.7105 13.1489 7.7105H14.3381V5.68576C13.7609 5.625 13.1793 5.59679 12.5955 5.59896C10.8681 5.59896 9.68533 6.65365 9.68533 8.59158V10.2626H7.7322V12.5326H9.68533V15.8333H4.16667V4.16667Z" fill="currentColor"/> 7954</svg> 7955<span class="visually-hidden">Facebook</span> 7956 </a> 7957 </li><li class="list-social__item"> 7958 <a href="https://www.instagram.com/emlid" class="link list-social__link" target="_blank"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 7959<path d="M6.66667 2.5C4.36849 2.5 2.5 4.36849 2.5 6.66667V13.3333C2.5 15.6315 4.36849 17.5 6.66667 17.5H13.3333C15.6315 17.5 17.5 15.6315 17.5 13.3333V6.66667C17.5 4.36849 15.6315 2.5 13.3333 2.5H6.66667ZM6.66667 4.16667H13.3333C14.7114 4.16667 15.8333 5.28863 15.8333 6.66667V13.3333C15.8333 14.7114 14.7114 15.8333 13.3333 15.8333H6.66667C5.28863 15.8333 4.16667 14.7114 4.16667 13.3333V6.66667C4.16667 5.28863 5.28863 4.16667 6.66667 4.16667ZM14.1667 5C13.7066 5 13.3333 5.37326 13.3333 5.83333C13.3333 6.2934 13.7066 6.66667 14.1667 6.66667C14.6267 6.66667 15 6.2934 15 5.83333C15 5.37326 14.6267 5 14.1667 5ZM10 5.83333C7.70182 5.83333 5.83333 7.70182 5.83333 10C5.83333 12.2982 7.70182 14.1667 10 14.1667C12.2982 14.1667 14.1667 12.2982 14.1667 10C14.1667 7.70182 12.2982 5.83333 10 5.83333ZM10 7.5C11.378 7.5 12.5 8.62196 12.5 10C12.5 11.378 11.378 12.5 10 12.5C8.62196 12.5 7.5 11.378 7.5 10C7.5 8.62196 8.62196 7.5 10 7.5Z" fill="currentColor"/> 7960</svg> 7961<span class="visually-hidden">Instagram</span> 7962 </a> 7963 </li><li class="list-social__item"> 7964 <a href="https://www.youtube.com/emlid" class="link list-social__link" target="_blank"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 7965<path d="M10.0013 3.33203C10.0013 3.33203 4.78863 3.33203 3.48872 3.68142C2.77257 3.8724 2.20833 4.43663 2.01736 5.15278C1.66797 6.45269 1.66797 9.9987 1.66797 9.9987C1.66797 9.9987 1.66797 13.5447 2.01736 14.8446C2.20833 15.5608 2.77257 16.125 3.48872 16.316C4.78863 16.6654 10.0013 16.6654 10.0013 16.6654C10.0013 16.6654 15.214 16.6654 16.5139 16.316C17.23 16.125 17.7943 15.5608 17.9852 14.8446C18.3346 13.5447 18.3346 9.9987 18.3346 9.9987C18.3346 9.9987 18.3346 6.45269 17.9852 5.15278C17.7943 4.43663 17.23 3.8724 16.5139 3.68142C15.214 3.33203 10.0013 3.33203 10.0013 3.33203ZM10.0013 4.9987C12.4036 4.9987 15.4093 5.10938 16.082 5.2895C16.2231 5.32856 16.3381 5.44358 16.3772 5.58464C16.5768 6.33333 16.668 8.61632 16.668 9.9987C16.668 11.3811 16.5768 13.6641 16.3772 14.4128C16.3381 14.5538 16.2231 14.6688 16.082 14.7079C15.4115 14.888 12.4036 14.9987 10.0013 14.9987C7.60113 14.9987 4.59332 14.888 3.92057 14.7079C3.77951 14.6688 3.6645 14.5538 3.62543 14.4128C3.42578 13.6641 3.33464 11.3811 3.33464 9.9987C3.33464 8.61632 3.42578 6.33333 3.62543 5.58247C3.6645 5.44358 3.77951 5.32856 3.92057 5.2895C4.59115 5.10938 7.59896 4.9987 10.0013 4.9987ZM8.33463 7.11024V12.8872L13.3346 9.9987L8.33463 7.11024Z" fill="currentColor"/> 7966</svg> 7967<span class="visually-hidden">YouTube</span> 7968 </a> 7969 </li><li class="list-social__item"> 7970 <a href="https://www.twitter.com/emlid" class="link list-social__link" target="_blank"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 7971<path d="M1.97266 2.5L7.88628 10.9505L2.28299 17.5H4.48351L8.86936 12.3589L12.4674 17.5H18.227L12.0421 8.64583L17.283 2.5H15.1172L11.059 7.23958L7.7495
79717 2.5H1.97266ZM5.17144 4.16667H6.87934L15.0282 15.8333H13.3355L5.17144 4.16667Z" fill="currentColor"/> 7972</svg> 7973<span class="visually-hidden">Twitter</span> 7974 </a> 7975 </li><li class="list-social__item"> 7976 <a href="/cdn-cgi/l/email-protection#503f2234352210353d3c39347e333f3d" class="link list-social__link"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 7977<path d="M3.33464 3.33203C2.4145 3.33203 1.66797 4.07856 1.66797 4.9987V14.9987C1.66797 15.9188 2.4145 16.6654 3.33464 16.6654H16.668C17.5881 16.6654 18.3346 15.9188 18.3346 14.9987V4.9987C18.3346 4.07856 17.5881 3.33203 16.668 3.33203H3.33464ZM3.33464 4.9987H16.668V5.8342L10.0013 9.9987L3.33464 5.8342V4.9987ZM3.33464 7.50087L10.0013 11.6654L16.668 7.50087V14.9987H3.33464V7.50087Z" fill="currentColor"/> 7978</svg> 7979<span class="visually-hidden">Email us</span> 7980 </a> 7981 </li></ul> 7982 </div> 7983 <div class="footer-top__end"> 7984 <div class="footer-menu"> 7985 7986 <h3 class="heading"> 7987 Shopping 7988 </h3> 7989 7990 <ul class="menu"> 7991 7992 <li> 7993 <a href="/pages/delivery-payment" > 7994 Delivery & Payment 7995 </a> 7996 </li> 7997 7998 <li> 7999 <a href="/pages/return-and-cancellation-policy" > 8000 Return & Cancellation 8001 </a> 8002 </li> 8003 8004 <li> 8005 <a href="https://emlid.com/dealers/" target="_blank" rel="noopener" > 8006 Dealers 8007 </a> 8008 </li> 8009 8010 <li> 8011 <a href="/pages/contacts" > 8012 Contacts 8013 </a> 8014 </li> 8015 8016 </ul> 8017 </div> 8018 <div class="footer-menu"> 8019 8020 <h3 class="heading"> 8021 Products 8022 </h3> 8023 8024 <ul class="menu"> 8025 8026 <li> 8027 <a href="/collections/rtk-receivers" > 8028 RTK Receivers 8029 </a> 8030 </li> 8031 8032 <li> 8033 <a href="/collections/rtk-kits" > 8034 RTK Kits 8035 </a> 8036 </li> 8037 8038 <li> 8039 <a href="https://store.emlid.com/products/emlid-corrections?variant=54337106084145" target="_blank" rel="noopener" > 8040 Emlid Corrections 8041 </a> 8042 </li> 8043 8044 <li> 8045 <a href="/collections/accessories" > 8046 Accessories 8047 </a> 8048 </li> 8049 8050 </ul> 8051 </div> 8052 <div class="footer-menu"> 8053 8054 <h3 class="heading"> 8055 Terms and conditions 8056 </h3> 8057 8058 <ul class="menu"> 8059 8060 <li> 8061 <a href="/pages/emlid-privacy-policy" > 8062 Privacy Policy 8063 </a> 8064 </li> 8065 8066 <li> 8067 <a href="/pages/website-terms" > 8068 Website T&C 8069 </a> 8070 </li> 8071 8072 <li> 8073 <a href="/pages/terms-and-conditions-of-sale" > 8074 Sale T&C 8075 </a> 8076 </li> 8077 8078 <li> 8079 <a href="/pages/apps-terms" > 8080 App T&C 8081 </a> 8082 </li> 8083 8084 <li> 8085 <a href="/pages/caster-terms" > 8086 Caster ToS 8087 </a> 8088 </li> 8089 8090 <li> 8091 <a href="/pages/affiliate-terms" > 8092 Affiliate Program ToS 8093 </a> 8094 </li> 8095 8096 </ul> 8097 </div> 8098 <div class="footer-menu"> 8099 8100 <h3 class="heading"> 8101 Resources 8102 </h3> 8103 8104 <ul class="menu"> 8105 8106 <li> 8107 <a href="https://blog.emlid.com/" target="_blank" rel="noopener" > 8108 Emlid Blog 8109 </a> 8110 </li> 8111 8112 <li> 8113 <a href="https://blog.emlid.com/choose-emlid-reach-receiver-that-fits-your-job/" target="_blank" rel="noopener" > 8114 How to choose your Emlid receiver 8115 </a> 8116 </li> 8117 8118 <li> 8119 <a href="https://blog.emlid.com/introduction-to-rtk-gps/" target="_blank" rel="noopener" > 8120 Introduction to RTK 8121 </a> 8122 </li> 8123 8124 <li> 8125 <a href="https://blog.emlid.com/rtk-corrections-explained-from-base-station-to-ntrip-service/" target="_blank" rel="noopener" > 8126 RTK corrections explained 8127 </a> 8128 </li> 8129 8130 <li> 8131 <a href="https://blog.emlid.com/gnss-vs-gps-what-is-the-difference-and-accuracy/" target="_blank" rel="noopener" > 8132 GNSS vs GPS 8133 </a> 8134 </li> 8135 8136 <li> 8137 <a href="https://docs.emlid.com/" target="_blank" rel="noopener" > 8138 Emlid Docs 8139 </a> 8140 </li> 8141 8142 </ul> 8143 </div> 8144 </div> 8145 </div>
8146 <div class="footer-controls"> 8147 8148 <a href="#" class="geoip-popup-trigger" data-open-geoip-popup> 8149 <svg 8150 width="20" 8151 height="20" 8152 viewBox="0 0 20 20" 8153 fill="none" 8154 xmlns="http://www.w3.org/2000/svg" 8155> 8156 <path 8157 d="M16.667 0C14.8262 0 13.3337 1.4925 13.3337 3.33333C13.3337 5.71417 16.667 9.16667 16.667 9.16667C16.667 9.16667 20.0003 5.71417 20.0003 3.33333C20.0003 1.4925 18.5078 0 16.667 0ZM10.0003 1.66667C5.40533 1.66667 1.66699 5.405 1.66699 10C1.66699 14.595 5.40533 18.3333 10.0003 18.3333C14.5953 18.3333 18.3337 14.595 18.3337 10C18.3337 9.94167 18.3264 9.88497 18.3255 9.82747C18.128 10.0491 17.9649 10.2231 17.8665 10.3239L16.3757 11.9206C16.2073 12.4714 15.9749 12.9933 15.679 13.4749C15.4157 12.9016 14.8387 12.5 14.167 12.5H13.3337V10.8333C13.3337 10.3725 12.9603 10 12.5003 10H7.50033V8.33333H8.33366C8.79366 8.33333 9.16699 7.96083 9.16699 7.5V5.85286L10.8467 5.83984C11.3325 5.83651 11.7649 5.61908 12.0674 5.28158C11.9291 4.91158 11.8233 4.5375 11.7533 4.16667L8.32715 4.19271C7.86965 4.19604 7.50033 4.56854 7.50033 5.02604V6.66667H6.66699C6.20699 6.66667 5.83366 7.03917 5.83366 7.5V8.48796L4.15072 6.80664C5.28405 4.73914 7.48116 3.33333 10.0003 3.33333H11.667C11.667 2.83083 11.7427 2.34715 11.8818 1.88965C11.276 1.74882 10.6478 1.66667 10.0003 1.66667ZM16.667 2.14193C17.3245 2.14193 17.8584 2.67583 17.8584 3.33333C17.8584 3.99083 17.3245 4.52474 16.667 4.52474C16.0095 4.52474 15.4756 3.99083 15.4756 3.33333C15.4756 2.67583 16.0095 2.14193 16.667 2.14193ZM3.50618 8.51725L7.50033 12.5114V13.3333C7.50033 14.2525 8.24783 15 9.16699 15V16.6097C5.88366 16.1972 3.33366 13.3933 3.33366 10C3.33366 9.49 3.39702 8.99559 3.50618 8.51725ZM8.98307 11.6667H11.667V13.3333C11.667 13.7942 12.0403 14.1667 12.5003 14.1667H14.167V15.1953C13.2295 15.9486 12.0853 16.4514 10.8337 16.6081V14.1667C10.8337 13.7058 10.4603 13.3333 10.0003 13.3333H9.16699V12.1663C9.16699 11.9813 9.09391 11.8117 8.98307 11.6667Z" 8158 fill="currentColor" 8159 /> 8160</svg> 8161 8162 <span>US</span> 8163 </a> 8164 8165 8166 <a href="https://emlid.com/" class="arrow-link"> 8167 emlid.com <span>â</span> 8168 </a> 8169 </div> 8170 <div class="footer-bottom flex f-j-between"> 8171 <p class="copy"> 8172 © 2026 Emlid Store US Esztergomi út 31-39. HUB3. ép. 5. em. Budapest, 1138 8173 </p> 8174 <nav class="payment-methods"> 8175 <ul class="flex f-grid--xs"> 8176 8177 <li> 8178 <img data-lazy="" data-src="//store.emlid.com/cdn/shopifycloud/shopify/assets/payment_icons/american_express-12858714bc10cdf384b62b8f41d20f56d8c32c1b8fed98b662f2bfc158dcbcf0.svg" alt="american_express" data-ll-status="loaded" class="entered loaded" src="//store.emlid.com/cdn/shopifycloud/shopify/assets/payment_icons/american_express-12858714bc10cdf384b62b8f41d20f56d8c32c1b8fed98b662f2bfc158dcbcf0.svg"> 8179 </li> 8180 <li> 8181 <img data-lazy="" data-src="//https://cdn.shopify.com/shopifycloud/web/assets/v1/vite/client/en/assets/discover-BV9fGXxjUnzR.svg" alt="discover" data-ll-status="loaded" class="entered loaded" src="https://cdn.shopify.com/shopifycloud/web/assets/v1/vite/client/en/assets/discover-BV9fGXxjUnzR.svg"> 8182 </li> 8183 <li> 8184 <img data-lazy="" data-src="https://store.emlid.com/cdn/shopifycloud/shopify/assets/payment_icons/master-173035bc8124581983d4efa50cf8626e8553c2b311353fbf67485f9c1a2b88d1.svg" alt="master_card" data-ll-status="loaded" class="entered loaded" src="https://eu.store.emlid.com/cdn/shopifycloud/shopify/assets/payment_icons/master-173035bc8124581983d4efa50cf8626e8553c2b311353fbf67485f9c1a2b88d1.svg"> 8185 </li> 8186 <li> 8187 <img data-lazy="" data-src="https://store.emlid.com/cdn/shopifycloud/shopify/assets/payment_icons/visa-319d545c6fd255c9aad5eeaad21fd6f7f7b4fdbdb1a35ce83b89cca12a187f00.svg" alt="visa" data-ll-status="loaded" class="entered loaded" src="https://eu.store.emlid.com/cdn/shopifycloud/shopify/assets/payment_icons/visa-319d545c6fd255c9aad5eeaad21fd6f7f7b4fdbdb1a35ce83b89cca12a187f00.svg"> 8188 </li> 8189 </ul> 8190</nav> 8191 </div> 8192 </div> 8193</div> 8194 8195</footer> 8196 8197 <div id="shopify-section-side-cart" class="shopify-section"> 8198 8199<section class="side-cart flex f-j-end loading section-side-cart" data-cart-mount data-side-cart rv-class-loading="data.cart.loading" 8200data-class-change=' 8201 [ 8202 { 8203 "target": ".side-cart", 8204 "class": "shown", 8205 "method": "remove", 8206 "on": "click", 8207 "onlyThisElem": true, 8208 "preventDefault": true 8209 } 8210 ] 8211' data-lock-scroll=' 8212 [ 8213 { 8214 "target": "[data-side-cart-items]", 8215 "method": "unlockScroll", 8216 "on": "click", 8217 "onlyThisElem": true, 8218 "preventDefault": true 8219 } 8220 ] 8221'> 8222 8223 8224 <section class="upsell-area loading flex f-j-center f-a-start desktop-only" rv-if="data.hasUpsell"> 8225 <div class="upsell-inner has-loader" rv-class-loading="data.upsellLoading" data-cart-upsell-inner> 8226 <h4>Related accessories</h4> 8227 <div class="upsell-grid flex f-grid f-j-center"> 8228 <div class="cart-item--upsell" rv-each-item="data.upsellProducts"> 8229 8230 <div class="image-area"> 8231 <a rv-href="item.handle | getUrl" class="object-fit--cover"><img loading="lazy" rv-src="item | getImage item.currentVariant | getSizedImage '200x200' " rv-srcset="item | getImage item.currentVariant | getSrcSet '200x200' "></a> 8232 8233 <ul class="badges"> 8234 <li rv-if="item.currentVariant.compare_at_price | gt item.currentVariant.price"> 8235 Sale
8236 </li> 8237 </ul> 8238 </div> 8239 8240 <div class="content-area"> 8241 <a class="cart-item-product-title" rv-href="item.handle | getUrl" rv-text="item.title"></a> 8242 8243 <div class="flex f-a-center f-grid--xs"> 8244 <p class="cart-item-product-price" rv-data-money="item.currentVariant.price" rv-html="item.currentVariant.price | money"></p> 8245 8246 <p class="cart-item-product-price compare-price" rv-data-money="item.currentVariant.compare_at_price" rv-html="item.currentVariant.compare_at_price | money" rv-if="item.currentVariant.compare_at_price | gt item.currentVariant.price"></p> 8247 8248 </div> 8249 8250 8251 <button type="button" class="btn btn--outline" rv-on-click="controller.addUpsellItem"> 8252 Add to cart 8253 </button> 8254 8255 8256 </div> 8257</div> 8258 </div> 8259 </div> 8260 </section> 8261 8262 8263 <div rv-class-shown="data.errorMessage" class="error-popup"> 8264 8265 <div class="popup-inner"> 8266 8267 <p rv-html="data.errorMessage"></p> 8268 8269 <a href="#" rv-on-click="controller.clearError" class="btn btn--centered">Close</a> 8270 8271 </div> 8272 8273 </div> 8274 8275 <div class="has-loader inner" data-loading-text="Updating..."> 8276 8277 <header class="flex f-a-center f-j-between"> 8278 8279 <h2>My cart</h2> 8280 8281 <a class="close" href="#" 8282 8283 data-class-change=' 8284 [ 8285 { 8286 "target": ".side-cart", 8287 "class": "shown", 8288 "method": "remove", 8289 "on": "click", 8290 "preventDefault": true 8291 } 8292 ] 8293 ' 8294 8295 data-lock-scroll=' 8296 [ 8297 { 8298 "target": ".side-cart .main-items", 8299 "method": "unlockScroll", 8300 "on": "click", 8301 "preventDefault": true 8302 } 8303 ] 8304 ' 8305 > 8306 <svg width="7" height="7" viewBox="0 0 7 7" fill="none" xmlns="http://www.w3.org/2000/svg"> 8307 <path fill-rule="evenodd" clip-rule="evenodd" d="M6.649 1.611 5.389.351 3.5 2.242 1.611.35l-1.26 1.26 1.89 1.89L.35 5.388l1.26 1.26 1.89-1.89 1.888 1.89 1.26-1.26L4.759 3.5l1.89-1.889z" fill="#000"/> 8308 </svg> 8309 </a> 8310 </header> 8311 8312 8313 8314 <div class="main-items" rv-if="data.cart.item_count | gt 0"> 8315 <div class="main-items-scroll" data-side-cart-items> 8316 <div class="cart-item--rivets flex" rv-extra-class="item.line_price | money" rv-each-item="data.cart.items"> 8317 <div class="left-area"> 8318 <a rv-href="item.url" class="object-fit--cover"><img loading="lazy" loading="lazy" rv-src="item.image | getSizedImage '90x90' " rv-srcset="item.image | getSrcSet '90x90' "></a> 8319 </div> 8320 8321 <div class="right-area"> 8322 8323 <header class="flex f-j-between f-a-center"> 8324 8325 <a class="cart-item-product-title" rv-href="item.url" rv-text="item.product_title"></a> 8326 8327 <button type="button" rv-on-click="controller.removeItem" class="cart-item-remove"> 8328 Remove 8329 </button> 8330 8331 </header> 8332 8333 <p class="cart-item-product-price flex f-a-center"> 8334 <span class="cart-item-line-price money" rv-data-money="item.line_price" rv-html="item.line_price | money"></span> 8335 8336 <span class="cart-item-line-price money compare-price" rv-data-money="item.variant.compare_at_price" rv-html="item.variant.compare_at_price | money" rv-if="item.variant.compare_at_price | gt item.line_price"></span> 8337 </p> 8338 8339 <div rv-unless="item.product_has_only_default_variant"> 8340 <small rv-each-prop="item.options_with_values"> 8341 <span rv-text="prop.name"></span>: 8342 <span rv-text="prop.value | optionValue item"></span> 8343 </small> 8344 </div> 8345 8346 <small rv-each-prop="item | getProps"><span rv-text="prop.name"></span>: <span rv-html="prop.value"></span></small> 8347 <small class="backorder-status backorder-status--inline" rv-if="item.properties._backorder_note"> 8348 <span class="backorder-status__text" rv-text="item.properties._backorder_note"></span> 8349 </small> 8350 8351 <small class="cart-item-selling-plan" rv-if="item.selling_plan_allocation" rv-text="item.selling_plan_allocation.selling_plan.name"></small> 8352 8353 <div class="cart-item-quantity-selector flex" rv-if="item.price | gt 0"> 8354 <button type="button" rv-on-click="controller.decrementQuantity"> 8355 <svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" fill="none" viewBox="0 0 10 10"> 8356 <path fill="#2E2E2E" d="M0 4.333h10v1H0v-1z"></path> 8357 </svg> 8358 </button> 8359 <input autocomplete="off" type="text" readonly min="1" max="999"rv-value="item.quantity" name="quantity"> 8360 <button type="button" rv-on-click="controller.incrementQuantity" rv-if="item.price | gt 0"> 8361 <svg class="icon-plus" xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15"><g><g><path class="horizontal-line" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="20" d="M0 7.5h15"></path></g><g><path fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="20" d="M7.5 0v15"></path></g></g></svg> 8362 </button> 8363 </div> 8364 8365 </div> 8366</div> 8367 8368 </div> 8369 </div> 8370 8371 <p class="empty-cart" rv-unless="data.cart.item_count | gt 0"> 8372 Your cart is empty 8373 </p> 8374 8375 <footer rv-if="data.cart.item_count | gt 0"> 8376 8377 <div class="total-area"> 8378 <div class="flex f-a-center f-j-between"> 8379 <p>Subtotal</p>
8380 <span class="money" rv-data-money='data.cart.total_price' rv-html='data.cart.total_price | money'></span> 8381 </div> 8382 </div> 8383 8384 8385 <div class="klarna-container"> 8386 <klarna-placement class="klarna-plcmnt" 8387 data-key="credit-promotion-small" 8388 data-locale="en-GB" 8389 rv-data-purchase-amount="data.cart.total_price" 8390 ></klarna-placement> 8391 </div> 8392 8393 8394 8395 <div class="button-container"> 8396 <a href="/cart" class="btn btn--black view-cart-btn"> 8397 View cart 8398 </a> 8399 </div> 8400 8401 8402 <div class="button-container"> 8403 <a href="/checkout" class="btn btn--accent"> 8404 Check out 8405 </a> 8406 </div> 8407 8408 </footer> 8409 8410 </div> 8411 8412</section>
vendor: 110 bytes, lines 8412-8414
8412 8413 8414<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
8414<script type="application/json" data-shipping-threshold-options> 8415 { 8416 "enabled": false, 8417 "threshold": 0, 8418 "under": "\u003cp\u003eYou only need to spend $55 more to get \u003cstrong\u003efree day delivery!\u003c\/strong\u003e\u003c\/p\u003e", 8419 "reached": "\u003cp\u003eCongratulations you quailify for \u003cstrong\u003efree day delivery!\u003c\/strong\u003e\u003c\/p\u003e" 8420 } 8421</script>
8421 8422
8423<script type="application/json" data-upsell-options> 8424 { 8425 "limit": 10, 8426 "enabled": true, 8427 "handles": [] 8428 } 8429</script>
8429 8430 8431 8432 8433</div> 8434 <div id="shopify-section-geo-ip--popup" class="shopify-section"> 8435 8436 8437 8438 8439 8440 <div class="geoip-popup flex f-a-center f-j-center" data-geo-ip-popup='{ 8441 "siteCountry": "US", 8442 "title": "It looks like youâre in [Region]", 8443 "globalTitle": "It seems you need to switch the store", 8444 "preferText": "Switch to your local store to get accurate delivery estimates and lower shipping costs.", 8445 "switchText": "Switch To [country] Store", 8446 "continueText": "Continue to US Store", 8447 "sites": [ 8448 { 8449 "countries": "US", 8450 "redirect": "US" 8451 }, 8452 { 8453 "countries": "AT,BE,BG,HR,CY,CZ,DK,EE,FI,FR,DE,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,RO,SK,SI,ES,RS,CH,NO,AX,AL,AD,BA,FO,XK,MK,MD,ME,SM,SJ,VA,MC,SE", 8454 "redirect": "EU" 8455 }, 8456 { 8457 "countries": "AF,DZ,AS,AO,AI,AQ,AG,AR,AM,AW,AU,AZ,BS,BH,BD,BB,BY,BZ,BJ,BM,BT,BO,BQ,BW,BV,BR,IO,BN,BF,BI,CV,KH,CM,CA,KY,CF,TD,CL,CN,CX,CC,CO,KM,CG,CD,CK,CR,CI,CU,CW,DJ,DM,DO,EC,EG,SV,GQ,ER,SZ,ET,FK,FJ,GF,PF,TF,GA,GM,GE,GH,GI,GL,GD,GP,GU,GT,GG,GN,GW,GY,HT,HM,HN,HK,IS,IN,ID,IR,IQ,IM,IL,JM,JP,JE,JO,KZ,KE,KI,KP,KR,KW,KG,LA,LB,LS,LR,LY,LI,MO,MG,MW,MY,MV,ML,MH,MQ,MR,MU,YT,MX,FM,MN,MS,MA,MZ,MM,NA,NR,NP,NC,NZ,NI,NE,NG,NU,NF,MP,OM,PK,PW,PS,PA,PG,PY,PE,PH,PN,PR,QA,RE,RU,RW,BL,SH,KN,LC,MF,PM,VC,WS,ST,SA,SN,SC,SL,SG,SX,SB,SO,ZA,GS,SS,LK,SD,SR,SY,TW,TJ,TZ,TH,TL,TG,TK,TO,TT,TN,TR,TM,TC,TV,UG,UA,AE,GB,UM,UY,UZ,VU,VE,VN,VG,VI,WF,EH,YE,ZM,ZW", 8458 "redirect": "GLOBAL" 8459 } 8460 ] 8461 }'> 8462 <div class="geoip-popup--inner"> 8463 <div class="geoip-popup__header"> 8464 <div class="geo-currency"> 8465 8466 <svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"> 8467<path d="M25.2501 3.375V3.30436C23.5935 2.78255 21.8298 2.5 20.0001 2.5C10.334 2.5 2.5 10.334 2.5 20.0001C2.5 20.5902 2.5319 21.1736 2.58887 21.7501H25.2501V3.375Z" fill="#4E18FF"/> 8468<path d="M25.25 8.62476H33.2823C32.446 7.64722 31.5003 6.77222 30.4681 5.99976H25.25V8.62476Z" fill="#FAFAFA"/> 8469<path d="M37.4112 21.75H2.58887C2.67773 22.6501 2.85319 23.5205 3.07422 24.375H36.9259C37.1469 23.5205 37.3224 22.6501 37.4112 21.75Z" fill="#FAFAFA"/> 8470<path d="M32.4858 32.25H7.51172C8.49838 33.2549 9.61036 34.1299 10.8135 34.875H29.184C30.3871 34.1299 31.4991 33.2549 32.4858 32.25Z" fill="#FAFAFA"/> 8471<path d="M36.0356 26.9998H3.96582C4.36686 27.9181 4.84538 28.7953 5.39226 29.6248H34.6092C35.156 28.7953 35.6323 27.9181 36.0356 26.9998Z" fill="#FAFAFA"/> 8472<path d="M25.25 13.8748H36.3767C36.0349 12.961 35.6224 12.0837 35.1394 11.2498H25.25V13.8748Z" fill="#FAFAFA"/> 8473<path d="M25.25 19.125H37.4567C37.4112 18.2318 37.3223 17.3522 37.1491 16.5H25.25V19.125Z" fill="#FAFAFA"/> 8474<path d="M25.25 6.00001H30.4681C28.9619 4.87208 27.2734 3.97429 25.446 3.375H25.25V6.00001Z" fill="#B32135"/> 8475<path d="M25.25 11.25H35.1394C34.5993 10.318 33.9795 9.43848 33.2845 8.625H25.25V11.25Z" fill="#B32135"/> 8476<path d="M25.25 16.4998H37.1491C36.9646 15.5951 36.6934 14.7224 36.3767 13.8748H25.25V16.4998Z" fill="#B32135"/> 8477<path d="M25.25 21.75H37.4112C37.4681 21.1735 37.5 20.5902 37.5 20C37.5 19.7038 37.4704 19.4167 37.4567 19.125H25.25V21.75Z" fill="#B32135"/> 8478<path d="M36.9269 24.375H3.0752C3.30762 25.2796 3.59929 26.1592 3.96843 27H36.0359C36.4028 26.1592 36.6944 25.2796 36.9269 24.375Z" fill="#B32135"/> 8479<path d="M34.6085 29.625H5.3916C6.01367 30.5684 6.72461 31.4456 7.51303 32.25H32.4871C33.2755 31.4456 33.9864 30.5684 34.6085 29.625Z" fill="#B32135"/> 8480<path d="M10.8154 34.875C13.4883 36.5293 16.626 37.5 20.0007 37.5C23.3754 37.5 26.5131 36.5293 29.1859 34.875H10.8154Z" fill="#B32135"/> 8481<path d="M7.96875 10.375L8.37663 11.2386L9.28126 11.3753L8.62501 12.0498L8.78223 13L7.96875 12.5511L7.15528 13L7.3125 12.0498L6.65625 11.3753L7.56088 11.2386L7.96875 10.375Z" fill="#FAFAFA"/> 8482<path d="M11.4688 10.375L11.8766 11.2386L12.7813 11.3753L12.125 12.0498L12.2822 13L11.4688 12.5511L10.6553 13L10.8125 12.0498L10.1562 11.3753L11.0609 11.2386L11.4688 10.375Z" fill="#FAFAFA"/> 8483<path d="M4.46973 12.551L5.28321 12.9999L5.12598 12.0497L5.78223 11.3752L4.87761 11.2385L4.87305 11.2317C4.58366 11.7284 4.31934 12.2389 4.08008 12.7652L4.46973 12.551Z" fill="#FAFAFA"/> 8484<path d="M14.9688 10.375L15.3766 11.2386L16.2813 11.3753L15.625 12.0498L15.7822 13L14.9688 12.5511L14.1553 13L14.3125 12.0498L13.6562 11.3753L14.5609 11.2386L14.9688 10.375Z" fill="#FAFAFA"/> 8485<path d="M18.4688 10.375L18.8766 11.2386L19.7813 11.3753L19.125 12.0498L19.2822 13L18.4688 12.5511L17.6553 13L17.8125 12.0498L17.1562 11.3753L18.0609 11.2386L18.4688 10.375Z" fill="#FAFAFA"/> 8486<path d="M21.75 10.375L22.1579 11.2386L23.0625 11.3753L22.4063 12.0498L22.5635 13L21.75 12.5511L20.9365 13L21.0938 12.0498L20.4375 11.3753L21.3421 11.2386L21.75 10.375Z" fill="#FAFAFA"/> 8487<path d="M7.96875 17.3752L8.37663 18.2389L9.28126 18.3756L8.62501 19.0501L8.78223 20.0003L7.96875 19.5514L7.15528 20.0003L7.3125 19.0501L6.65625 18.3756L7.56088 18.2389L7.96875 17.3752Z" fill="#FAFAFA"/> 8488<path d="M11.4688 17.3752L11.8766 18.2389L12.7813 18.3756L12.125 19.0501L12.2822 20.0003L11.4688 19.5514L10.6553 20.0003L10.8125 19.0501L10.1562 18.3756L11.0609 18.2389L11.4688 17.3752Z" fill="#FAFAFA"/> 8489<path d="M14.9688 17.3752L15.3766 18.2389L16.2813 18.3756L15.625 19.0501L15.7822 20.0003L14.9688 19.5514L14.1553 20.0003L14.3125 19.0501L13.6562 18.3756L14.5609 18.2389L14.9688 17.3752Z" fill="#FAFAFA"/> 8490<path d="M4.46875 17.3752L4.87663 18.2389L5.78126 18.3756L5.12501 19.0501L5.28223 20.0003L4.46875 19.5514L3.65528 20.0003L3.8125 19.0501L3.15625 18.3756L4.06088 18.2389L4.46875 17.3752Z" fill="#FAFAFA"/> 8491<path d="M18.4688 17.3752L18.8766 18.2389L19.7813 18.3756L19.125 19.0501L19.2822 20.0003L18.4688 19.5514L17.6553 20.0003L17.8125 19.0501L17.1562 18.3756L18.0609 18.2389L18.4688 17.3752Z" fill="#FAFAFA"/> 8492<path d="M21.75 17.3752L22.1579 18.2389L23.0625 18.3756L22.4063 19.0501L22.5635 20.0003L21.75 19.5514L20.9365 20.0003L21.0938 19.0501L20.4375 18.3756L21.3421 18.2389L21.75 17.3752Z" fill="#FAFAFA"/> 8493<path d="M8.84278 13.8748L9.25066 14.7384L10.1553 14.8751L9.49903 15.5496L9.65626 16.4998L8.84278 16.0509L8.0293 16.4998L8.18653 15.5496L7.53027 14.8751L8.4349 14.7384L8.84278 13.8748Z" fill="#FAFAFA"/> 8494<path d="M12.3438 13.8748L12.7516 14.7384L13.6563 14.8751L13 15.5496L13.1572 16.4998L12.3438 16.0509L11.5303 16.4998L11.6875 15.5496L11.0312 14.8751L11.9359 14.7384L12.3438 13.8748Z" fill="#FAFAFA"/> 8495<path d="M5.34375 13.8748L5.75163 14.7384L6.65626 14.8751L6.00001 15.5496L6.15723 16.4998L5.34375 16.0509L4.53028 16.4998L4.6875 15.5496L4.03125 14.8751L4.93588 14.7384L5.34375 13.8748Z" fill="#FAFAFA"/> 8496<path d="M15.8438 13.8748L16.2516 14.7384L17.1563 14.8751L16.5 15.5496L16.6572 16.4998L15.8438 16.0509L15.0303 16.4998L15.1875 15.5496L14.5312 14.8751L15.4359 14.7384L15.8438 13.8748Z" fill="#FAFAFA"/> 8497<path d="M19.3438 13.8748L19.7516 14.7384L20.6563 14.8751L20 15.5496L20.1572 16.4998L19.3438 16.0509L18.5303 16.4998L18.6875 15.5496L18.0312 14.8751L18.9359 14.7384L19.3438 13.8748Z" fill="#FAFAFA"/> 8498<path d="M22.625 13.8748L23.0329 14.7384L23.9375 14.8751L23.2813 15.5496L23.4385 16.4998L22.625 16.0509L21.8115 16.4998L21.9688 15.5496L21.3125 14.8751L22.2171 14.7384L22.625 13.8748Z" fill="#FAFAFA"/> 8499<path d="M8.84278 6.875L9.25066 7.73861L10.1553 7.87533L9.49903 8.54981L9.65626 9.50001L8.84278 9.05111L8.0293 9.50001L8.18653 8.54981L7.53027 7.87533L8.4349 7.73861L8.84278 6.875Z" fill="#FAFAFA"/> 8500<path d="M12.3438 6.875L12.7516 7.73861L13.6563 7.87533L13 8.54981L13.1572 9.50001L12.3438 9.05111L11.5303 9.50001L11.6875 8.54981L11.0312 7.87533L11.9359 7.73861L12.3438 6.875Z" fill="#FAFAFA"/> 8501<path d="M15.8438 6.875L16.2516 7.73861L17.1563 7.87533L16.5 8.54981L16.6572 9.50001L15.8438 9.05111L15.0303 9.50001L15.1875 8.54981L14.5312 7.87533L15.4359 7.73861L15.8438 6.875Z" fill="#FAFAFA"/> 8502<path d="M19.3438 6.875L19.7516 7.73861L20.6563 7.87533L20 8.54981L20.1572 9.50001L19.3438 9.05111L18.5303 9.50001L18.6875 8.54981L18.0312 7.87533L18.9359 7.73861L19.3438 6.875Z" fill="#FAFAFA"/> 8503<path d="M22.625 6.875L23.0329 7.73861L23.9375 7.87533L23.2813 8.54981L23.4385 9.50001L22.625 9.05111L21.8115 9.50001L21.9688 8.54981L21.3125 7.87533L22.2171 7.73861L22.625 6.875Z" fill="#FAFAFA"/> 8504<path d="M12.2822 5.99984L12.125 5.04964L12.7813 4.37516L12.2982 4.30225C11.7832 4.55518 11.2842 4.83317 10.7988 5.13395L10.6553 5.99984L11.4688 5.55095L12.2822 5.99984Z" fill="#FAFAFA"/> 8505<path d="M14.9688 3.375L15.3766 4.23861L16.2813 4.37533L15.625 5.04981L15.7822 6.00001L14.9688 5.55111L14.1553 6.00001L14.3125 5.04981L13.6562 4.37533L14.5609 4.23861L14.9688 3.375Z" fill="#FAFAFA"/> 8506<path d="M18.4688 3.375L18.8766 4.23861L19.7813 4.37533L19.125 5.04981L19.2822 6.00001L18.4688 5.55111L17.6553 6.00001L17.8125 5.04981L17.1562 4.37533L18.0609 4.23861L18.4688 3.375Z" fill="#FAFAFA"/> 8507<path d="M21.75 3.375L22.1579 4.23861L23.0625 4.37761L22.4063 5.04981L22.5635 6.00001L21.75 5.55111L20.9365 6.00001L21.0938 5.04981L20.4375 4.37533L21.3421 4.23861L21.75 3.375Z" fill="#FAFAFA"/> 8508</svg> 8509 8510
8511 <span>USD, $</span> 8512 </div> 8513 <a data-close-popup> 8514 <svg 8515 xmlns="http://www.w3.org/2000/svg" 8516 aria-hidden="true" 8517 focusable="false" 8518 class="icon icon-close" 8519 fill="none" 8520 viewBox="0 0 24 24" 8521> 8522 <path 8523 d="M4.70703 3.29297L3.29297 4.70703L10.5859 12L3.29297 19.293L4.70703 20.707L12 13.4141L19.293 20.707L20.707 19.293L13.4141 12L20.707 4.70703L19.293 3.29297L12 10.5859L4.70703 3.29297Z" 8524 fill="currentColor" 8525 /> 8526</svg> 8527 8528 </a> 8529 </div> 8530 8531 <div class="popup-geo-container"> 8532 <div data-switch-site-container></div> 8533 </div> 8534 </div> 8535 </div> 8536 8537 8538 8539</div> 8540 8541 <ul hidden> 8542 <li id="a11y-refresh-page-message">Choosing a selection results in a full page refresh.</li> 8543 <li id="a11y-new-window-message">Opens in a new window.</li> 8544 </ul> 8545 8546
8546<script> 8547 window.shopUrl = 'https://store.emlid.com'; 8548 window.routes = { 8549 cart_add_url: '/cart/add', 8550 cart_change_url: '/cart/change', 8551 cart_update_url: '/cart/update', 8552 cart_url: '/cart', 8553 predictive_search_url: '/search/suggest', 8554 }; 8555 8556 window.cartStrings = { 8557 error: `There was an error while updating your cart. Please try again.`, 8558 quantityError: `You can only add [quantity] of this item to your cart.`, 8559 }; 8560 8561 window.variantStrings = { 8562 addToCart: `Add to cart`, 8563 soldOut: `Sold out`, 8564 unavailable: `Unavailable`, 8565 unavailable_with_option: `[value] - Unavailable`, 8566 }; 8567 8568 window.accessibilityStrings = { 8569 imageAvailable: `Image [index] is now available in gallery view`, 8570 shareSuccess: `Link copied to clipboard`, 8571 pauseSlideshow: `Pause slideshow`, 8572 playSlideshow: `Play slideshow`, 8573 }; 8574 </script>
8574 8575 8576
8576<script data-cart type="application/json"> 8577 {"note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"USD","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0} 8578 </script>
8578 8579 8580 8581 8582
8582<script> 8583 window.__webpack_public_path__ = "//store.emlid.com/cdn/shop/t/13/assets/" 8584 </script>
8584 8585
8585<script src="//store.emlid.com/cdn/shop/t/13/assets/ffc.js?v=40609231837919713031787586334" defer="defer"></script>
8585 8586 <style> 8587 .menu-area { 8588 padding-left: 205px; 8589 } 8590 8591 8592 8593 .product-info-area { 8594 justify-content: space-between !important; 8595 } 8596 8597 @media only screen and (max-width: 834px) { 8598 .radiant--content-cards .content-card { 8599 flex: 50% 1 0 !important; 8600 } 8601 } 8602 8603 @media (max-width: 768px) { 8604 .banner__content { 8605 text-align: left !important; 8606 left: 7px !important; 8607 } 8608 } 8609 8610 @media only screen and (max-width: 500px) { 8611 .radiant--content-cards .content-card { 8612 flex: 100% 1 0 !important; 8613 } 8614 8615 .radiant--callout .content-area .rte h1, 8616 .radiant--callout .content-area .rte h3 { 8617 font-weight: 500 !important; 8618 } 8619 8620 #shopify-section-template--24148914864433__radiant_content_cards_6qNfMg.radiant--content-cards { 8621 padding-top: 45px !important; 8622 padding-bottom: 0px !important; 8623 overflow: hidden; 8624 } 8625 8626 #shopify-section-template--24148914864433__21975911-e820-4345-bf70-fde6a8a0c4cb { 8627 margin-bottom: 82px !important; 8628 } 8629 8630 #Section-template--24148914864433__custom_banner_APMM3K { 8631 height: 440px !important; 8632 } 8633 8634 8635 .wrapper--42725153833265 { 8636 transform: translateY(51px); 8637 } 8638 } 8639</style> 8640 8641 <style> .radiant--featured-collection .content-area .image-area {height: 90%;} .radiant--featured-collection .content-area {height: 90%;} .rte {font-size: 16px; line-height: 140%;} h1 {font-size: 2.5empx;} h2 {font-size: 2em;} h3 {font-size: 1.5em;} .xsell__modal .xsell__modal-header .xsell__modal-content-title {text-transform: none; letter-spacing: -0.7px;} .xsell__modal.xsell__modal-gallery--list.xsell__modal--v2 .xsell__modal-product-title {color: #151515;} .xsell__modal .xsell__button--outline {color: #151515; background-color: transparent; border-color: #151515;} .xsell__modal .xsell__button--outline:hover {background: #cccccc; color: #151515; border-color: #cccccc;} .xsell__modal .xsell__button--outline:active {background: #9e9e9e; color: #151515; border-color: #9e9e9e;} .xsell__modal .xsell__modal-more-info .xsell__modal-more-info-title {text-transform: none;} .product-page .product--right-area .product-prices .tax-info {font-size: 16px; font-weight: 400;} .radiant--featured-collection {margin-bottom: 132px;} .radiant--product-specifications .product-specifications-popup .h2 {font-size: 32px;} .page-width {padding: 0 rem;} .radiant--image-with-text .content-area .info-items > li .title {} .xsell__modal .xsell__button {font-weight: 400;} #xsell-app--upsell h4 {font-family: "Geist", Arial !important; margin-bottom: 5px;} .xsell__modal .xsell__button--md {font-size: 13px;} .xsell-quick-add-to-cart-buy-icon {color: white;} </style> 8642<div id="shopify-block-AeWtjZE1LT2Irb3pva__7079518687644006178" class="shopify-block shopify-app-block">
8642<script> 8643 (function () { 8644 const cartAttributes = {}; 8645 8646 // Helper function to retrieve the UTM from Url 8647 function getUTMFromUrl() { 8648 const url_string = window.location.href; 8649 const url = new URL(url_string); 8650 8651 const utm_id = url.searchParams.get("utm_id"); 8652 const utm_source = url.searchParams.get("utm_source"); 8653 const utm_medium = url.searchParams.get("utm_medium"); 8654 const utm_campaign = url.searchParams.get("utm_campaign"); 8655 const utm_term = url.searchParams.get("utm_term"); 8656 const ref = url.searchParams.get("ref"); 8657 8658 if (!utm_id && !utm_source && !utm_medium && !utm_campaign && !ref) { 8659 return null; 8660 } 8661 8662 let utmParameters = {}; 8663 8664 if (utm_id) { 8665 utmParameters.utm_id = utm_id; 8666 } 8667 if (utm_source) { 8668 utmParameters.utm_source = utm_source; 8669 } 8670 if (utm_medium) { 8671 utmParameters.utm_medium = utm_medium; 8672 } 8673 if (utm_campaign) { 8674 utmParameters.utm_campaign = utm_campaign; 8675 } 8676 if (utm_term) { 8677 utmParameters.utm_term = utm_term; 8678 } 8679 if (ref) { 8680 utmParameters.ref = ref; 8681 } 8682 8683 8684 return Object.keys(utmParameters).length === 0 8685 ? null 8686 : utmParameters; 8687 } 8688 8689 // Helper function to retrieve the UTM from Cookie 8690 function getUTMAttributes() { 8691 const urlUtmParams = getUTMFromUrl(); 8692 8693 if (urlUtmParams) { 8694 return urlUtmParams; 8695 } 8696 8697 // No longer reading from deprecated Shopify cookies 8698 return undefined; 8699 } 8700 8701 function saveUtmParameters() { 8702 const utmParams = getUTMAttributes(); 8703 if (utmParams) { 8704 const cartHasUtmAttributes = Object.keys(cartAttributes).find(attributeKey => attributeKey.startsWith("utm_") || attributeKey === "ref"); 8705 if (cartHasUtmAttributes) { 8706 // Don't call API if it already contains our UTM parameters 8707 return; 8708 } 8709 8710 // Handle both Shopify.routes.root and routes.root_url for better compatibility 8711 var rootUrl = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root) 8712 || (window.routes && window.routes.root_url) 8713 || '/'; 8714 8715 var updateCart = fetch(rootUrl + 'cart/update.js', 8716 { 8717 headers: { 8718 'Content-Type': 'application/json', 8719 }, 8720 method: "POST", 8721 body: JSON.stringify({ 8722 attributes: { 8723 ...utmParams 8724 }, 8725 }) 8726 }) 8727 .then(response => response.json()) 8728 .then(data => { 8729 return data 8730 }); 8731 } 8732 } 8733 8734 saveUtmParameters(); 8735 })(); 8736</script>
8736 8737 8738 8739 8740 8741</div><!-- Failed to render app block "10605408327587305396": app block path "shopify://apps/eg-auto-add-to-cart/blocks/app-embed/0f7d4f74-1e89-4820-aec4-6564d7e535d2" does not exist --><div id="shopify-block-AVUp3dkJFcTY0UGE1Q__7313114205116804392" class="shopify-block shopify-app-block">
8741<script> 8742window.srn = {}; 8743window.srn.datastore = {}; 8744window.srn.datastore.installed = true; 8745 8746 8747 8748 8749 8750 window.srn.product = { 8751 id: 10409911648561, 8752 }; 8753 window.srn.product.collections = [] 8754 8755 window.srn.product.collections.push(510283809073) 8756 8757 window.srn.product.collections.push(462414446897) 8758 8759 window.srn.product.collections.push(508765372721) 8760 8761 window.srn.product.collections.push(532418003249) 8762 8763 window.srn.product.collections.push(520181940529) 8764 8765 window.srn.product.collections.push(510316871985) 8766 8767 window.srn.product.collections.push(520195801393) 8768 8769 window.srn.product.collections.push(463756853553) 8770 8771 8772 8773 8774if (window.Shopify && window.Shopify.shop) { 8775 window.srn.datastore.shopify_domain = window.Shopify.shop 8776} else { 8777 console.error('SRN: unable to get shop domain') 8778 window.srn.datastore.shopify_domain = '' 8779} 8780 8781function loadPropelJS(url, async = true) { 8782 let scriptEle = document.createElement("script"); 8783 8784 scriptEle.setAttribute("src", url); 8785 scriptEle.setAttribute("type", "text/javascript"); 8786 scriptEle.setAttribute("async", async); 8787 8788 document.body.appendChild(scriptEle); 8789} 8790 8791if ( 8792 window.Shopify && 8793 window.Shopify.shop && 8794 typeof window.Shopify.shop === 'string' && 8795 window.Shopify.shop !== 'null' && 8796 window.Shopify.shop !== '' 8797) { 8798 loadPropelJS("https://cdn.shopify.com/extensions/01a0a81b-326b-71aa-ac4c-9c64404679ad/propel-replays-65/assets/propel.js", true) 8799} else { 8800 console.error('SRN: unable to load script, shopify domain not found') 8801} 8802</script>
8802 8803 8804 8805</div><!-- Failed to render app block "17676059084223943535": app block path "shopify://apps/triplewhale/blocks/triple_pixel_snippet/483d496b-3f1a-4609-aea7-8eee3b6b7a2a" does not exist --><div id="shopify-block-AamxyQUtxN05DRzNZW__13184734980857975850" class="shopify-block shopify-app-block"> 8806<div class="merchant-copilot mc__multistep"> 8807 <div class="mc__multistep-modal" style="display: none"> 8808 <button class="mc__multistep-close-btn mc__multistep-close-trigger">✕</button> 8809 <div class="mc__toast"> 8810 <span class="mc__toast-icon"> 8811 <svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30" fill="none"><circle cx="15" cy="15" r="13" stroke="green" stroke-width="2" fill="white" /><path d="M10 15l4 4 8-8" stroke="green" stroke-width="2" fill="none" /></svg> 8812 </span> 8813 <span style="text-align: center" class="mc__toast-text"></span> 8814 </div> 8815 <div class="mc__multistep-modal-inner mc__content"> 8816 8817 8818 8819 <div class="mc__path-content mc__hidden"> 8820 <div class="content-loader-wrapper"><span class="mc__loader-animation"></span></div> 8821 </div> 8822 8823 </div> 8824 </div> 8825</div> 8826 8827 8828 8829</div><div id="shopify-block-AY0VhdC9WTVhBNG50M__124348908681409149" class="shopify-block shopify-app-block">
8829<script> 8830 window.SimpleBundles = { 8831 productVariants: {}, 8832 settings: { 8833 selectPlaceholder: 'Please select an option', 8834 showPriceVariance: true, 8835 rankOptionsByPriceDiff: true 8836 }, 8837 currencyFormatter: new Intl.NumberFormat(window.Shopify.locale, { 8838 style: 'currency', 8839 currency: "USD", 8840 roundingMode: "halfCeil", 8841 }) 8842 }; 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855</script>
8855 8856 8857<style type="text/css"> 8858 [data-simple-bundles-options] { 8859 display: flex; 8860 flex-direction: column; 8861 padding-bottom: 10px; 8862 } 8863 8864 [data-simple-bundles-options] label { 8865 margin-bottom: 8px; 8866 font-weight: normal; 8867 font-family: inherit; 8868 text-align: left; 8869 } 8870 8871 [data-simple-bundles-options] select { 8872 padding: 8px; 8873 font-size: 16px; 8874 border-radius: 0px; 8875 border: 1px solid #333; 8876 width: 100%; 8877 margin-bottom: 8px; 8878 appearance: none; 8879 -webkit-appearance: none; 8880 -moz-appearance: none; 8881 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>'); 8882 background-repeat: no-repeat; 8883 background-position: right 8px center; 8884 font-family: inherit; 8885 font-weight: normal; 8886 color: #000; 8887 } 8888</style> 8889 8890<style type="text/css"> 8891 8892</style> 8893
8894<script type="text/javascript"> 8895 8896</script>
8896 8897 8898 8899</div><div id="shopify-block-ANVdQdEZnS2lYWWdFS__4159492616563116687" class="shopify-block shopify-app-block"><!-- BEGIN app snippet: cross-sell --> 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909<style> 8910 .xs-clearfix:after { 8911 content: "."; 8912 visibility: hidden; 8913 display: block; 8914 height: 0; 8915 clear: both; 8916 } 8917 .xsell_product_info { 8918 display: none; 8919 } 8920</style> 8921 <div class="xsell_product_info"> 8922 {"id":10409911648561,"title":"Reach RS4 Pro","handle":"reach-rs4-pro","description":"\u003ch3\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eAll-band RTK GNSS receiver with dual cameras and tilt compensation\u003c\/span\u003e\u003c!-- notionvc: f945a537-2827-4457-aad5-c86781b43bed --\u003e\u003cbr\u003e\u003c!-- notionvc: 2bdb135e-f6d1-408e-aefb-75b3eb1b2ea4 --\u003e\n\u003c\/h3\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eNext-level stakeout with augmented reality and measuring from photos. Comes with a mobile app.\u003c!-- notionvc: dabb0560-3686-4b17-8029-b585b8ec8bee --\u003e\u003cbr\u003e\u003c!-- notionvc: b4e8c65c-edf6-48cc-8b5f-8350bdad3e14 --\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eTwo Full-HD cameras\u003c\/span\u003e\u003c!-- notionvc: df805441-2ac7-4514-a3da-ecbdb313f460 --\u003e\u003cbr\u003e\u003c!-- --\u003e \u003c!-- notionvc: 3c853c7f-e1db-45b6-bfa7-eddc5e052542 --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eAR guidance for stakeout \u003cbr\u003eMeasurements from images\u003c!-- notionvc: 43a949ff-34eb-4e86-a5ef-d123c752a78b --\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch4\u003eHigh precision\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003eRTK: 7 mm + 1 ppm\u003cbr\u003e\u003cmeta charset=\"utf-8\"\u003eTilt compensation: RTK + 2 mm + 0.3 mm\/°\u003cbr\u003e\u003c!-- notionvc: 614c0fe3-caa3-4b76-b3ac-f0858a390a57 --\u003e\u003c\/p\u003e\n\u003ch4\u003eEmlid Corrections\u003c\/h4\u003e\n\u003cp\u003eTo achieve centimeter-level (sub-inch) accuracy with RTK, you need a source of corrections â positioning enhancement data that upgrades standard GNSS accuracy from meters to centimeters in real time. \u003cbr\u003e\u003cbr\u003eYour receiver includes one free year of Emlid Corrections â a built-in network service to receive corrections over the internet. \u003ca href=\"#promo-free-year\"\u003eLearn more and check coverage in your area.\u003c\/a\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eAll-band support\u003c\/span\u003e\u003c!-- notionvc: 4c88f207-00c5-4ded-9ee0-4dccacdf8f36 --\u003e\u003cbr\u003e\u003c!-- notionvc: cd7027db-5551-4cc0-8d0e-a8a7a3863d7a --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003eGPS: L1C\/A, L2C, L5 \u003cbr\u003eGLONASS: L1OF, L2OF \u003cbr\u003eGalileo: E1-B\/C, E5a, E6 \u003cbr\u003eBeiDou: B1I, B1C, B2a, B3I \u003cbr\u003eQZSS: L1C\/A, L1C\/B11, L2C, L5 \u003cbr\u003eNavIC: L1-SPS Data, L5-SPS\u003c!-- notionvc: e435eac9-7fe4-40c5-b52b-6060098de1f3 --\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eBase and rover\u003c\/span\u003e\u003c!-- notionvc: 3186ade2-c7c4-480d-8e36-23a5f5410169 --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003e915 MHz LoRa, 450 MHz UHF, NTRIP\u003cbr\u003e\u003c!-- notionvc: cfa37089-e5be-4bd2-b0e8-bc7687177524 --\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eRugged and powerful\u003c\/span\u003e\u003c!-- notionvc: fdaa66e2-5532-4335-a2e5-6f50d5a7b542 --\u003e\u003cbr\u003e\u003c!-- notionvc: 44a10220-0fe9-4ac7-8254-441ec31054a1 --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003e16 hours on one charge\u003cspan class=\"notion-enable-hover\"\u003e \u003cbr\u003e\u003c\/span\u003eMagnesium alloy body \u003cbr\u003eIP68 rating \u003cbr\u003eWithstands temperatures \u003cspan class=\"discussion-level-1 discu
8922ssion-id-273498ed-188c-8077-849b-001cb6c798f7 notion-enable-hover\"\u003efrom -40 to +65°C \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"discussion-level-1 discussion-id-273498ed-188c-80ad-96b6-001c11e598aa notion-enable-hover\"\u003e(-40 to +149ºF)\u003cbr\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!-- notionvc: b2f7a1e0-d3e4-4a66-8a01-e4735ec3f723 --\u003e\u003c!-- notionvc: 85a39ad5-7876-4b30-b07c-660ef90ae048 --\u003e\u003cmeta charset=\"utf-8\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003ca href=\"https:\/\/emlid.com\/reachrs4pro\/\" rel=\"noopener\" target=\"_blank\"\u003e\u003cspan\u003eExplore all Reach RS4 Pro features and user reviews\u003c\/span\u003e\u003c\/a\u003e\u003c\/p\u003e\n\u003ch4\u003ePackage includes\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cspan class=\"discussion-id-273498ed-188c-8061-ae20-001c3a079042 notion-enable-hover\"\u003e- \u003c\/span\u003e\u003cspan class=\"discussion-id-273498ed-188c-8061-ae20-001c3a079042 notion-enable-hover\"\u003eReach RS4 Pro\u003cbr\u003e\u003c\/span\u003e\u003cspan\u003e- Carrying case \u003cbr\u003e- USB Type-C cable\u003c\/span\u003e\u003cspan\u003e \u003cbr\u003e- LoRa Antenna 860-930 MHz \u003cbr\u003e- UHF Antenna 410-470 MHz\u003cbr\u003e\u003cstrong\u003e\u003cbr\u003e\u003cbr\u003e\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e","published_at":"2025-10-06T03:30:14-04:00","created_at":"2025-09-29T06:08:06-04:00","vendor":"Emlid Store US","type":"","tags":[],"price":459900,"price_min":459900,"price_max":579800,"available":true,"price_varies":true,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":55594169827633,"title":"Free year","option1":"Free year","option2":null,"option3":null,"sku":"RCH402","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Reach RS4 Pro - Free year","public_title":"Free year","options":["Free year"],"price":459900,"weight":2000,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":55594169860401,"title":"+3 years of corrections","option1":"+3 years of corrections","option2":null,"option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Reach RS4 Pro - +3 years of corrections","public_title":"+3 years of corrections","options":["+3 years of corrections"],"price":579800,"weight":2000,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}],"images":["\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.663.webp?v=1759528847","\/\/store.emlid.com\/cdn\/shop\/files\/for_receivers.webp?v=1783692975","\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.677.webp?v=1763661645","\/\/store.emlid.com\/cdn\/shop\/files\/RS4_RENDERS_04.1174.webp?v=1763661645","\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.683.webp?v=1763661645","\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.685.webp?v=1763661645","\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.679.webp?v=1763661645","\/\/store.emlid.com\/cdn\/shop\/files\/RS4_RENDERS_PRO.webp?v=1763661645"],"featured_image":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.663.webp?v=1759528847","options":["Corrections Top-Up"],"media":[{"alt":null,"id":43514506576177,"position":1,"preview_image":{"aspect_ratio":1.0,"height":3200,"width":3200,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.663.webp?v=1759528847"},"aspect_ratio":1.0,"height":3200,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.663.webp?v=1759528847","width":3200},{"alt":null,"id":48569027592497,"position":2,"preview_image":{"aspect_ratio":1.0,"height":1440,"width":1440,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/for_receivers.webp?v=1783692975"},"aspect_ratio":1.0,"height":1440,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/for_receivers.webp?v=1783692975","width":1440},{"alt":null,"id":43514506412337,"position":3,"preview_image":{"aspect_ratio":1.0,"height":3200,"width":3200,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.677.webp?v=1763661645"},"aspect_ratio":1.0,"height":3200,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.677.webp?v=1763661645","width":3200},{"alt":null,"id":43514506608945,"position":4,"preview_image":{"aspect_ratio":1.0,"height":2624,"width":2624,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4_RENDERS_04.1174.webp?v=1763661645"},"aspect_ratio":1.0,"height":2624,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4_RENDERS_04.1174.webp?v=1763661645","width":2624},{"alt":null,"id":43514506674481,"position":5,"preview_image":{"aspect_ratio":1.0,"height":3200,"width":3200,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.683.webp?v=1763661645"},"aspect_ratio":1.0,"height":3200,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.683.webp?v=1763661645","width":3200},{"alt":null,"id":43514506707249,"position":6,"preview_image":{"aspect_ratio":1.0,"height":1200,"width":1200,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.685.webp?v=1763661645"},"aspect_ratio":1.0,"height":1200,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.685.webp?v=1763661645","width":1200},{"alt":null,"id":43514506510641,"position":7,"preview_image":{"aspect_ratio":1.0,"height":3200,"width":3200,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.679.webp?v=1763661645"},"aspect_ratio":1.0,"height":3200,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4RENDERS04.679.webp?v=1763661645","width":3200},{"alt":null,"id":43564215075121,"position":8,"preview_image":{"aspect_ratio":1.0,"height":3200,"width":3200,"src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4_RENDERS_PRO.webp?v=1763661645"},"aspect_ratio":1.0,"height":3200,"media_type":"image","src":"\/\/store.emlid.com\/cdn\/shop\/files\/RS4_RENDERS_PRO.webp?v=1763661645","width":3200}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003ch3\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eAll-band RTK GNSS receiver with dual cameras and tilt compensation\u003c\/span\u003e\u003c!-- notionvc: f945a537-2827-4457-aad5-c86781b43bed --\u003e\u003cbr\u003e\u003c!-- notionvc: 2bdb135e-f6d1-408e-aefb-75b3eb1b2ea4 --\u003e\n\u003c\/h3\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eNext-level stakeout with augmented reality and measuring from photos. Comes with a mobile app.\u003c!-- notionvc: dabb0560-3686-4b17-8029-b585b8ec8bee --\u003e\u003cbr\u003e\u003c!-- notionvc: b4e8c65c-edf6-48cc-8b5f-8350bdad3e14 --\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eTwo Full-HD cameras\u003c\/span\u003e\u003c!-- notionvc: df805441-2ac7-4514-a3da-ecbdb313f460 --\u003e\u003cbr\u003e\u003c!-- --\u003e \u003c!-- notionvc: 3c853c7f-e1db-45b6-bfa7-eddc5e052542 --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003eAR guidance for stakeout \u003cbr\u003eMeasurements from images\u003c!-- notionvc: 43a949ff-34eb-4e86-a5ef-d123c752a78b --\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch4\u003eHigh precision\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003eRTK: 7 mm + 1 ppm\u003cbr\u003e\u003cmeta charset=\"utf-8\"\u003eTilt compensation: RTK + 2 mm + 0.3 mm\/°\u003cbr\u003e\u003c!-- notionvc: 614c0fe3-caa3-4b76-b3ac-f0858a390a57 --\u003e\u003c\/p\u003e\n\u003ch4\u003eEmlid Corrections\u003c\/h4\u003e\n\u003cp\u003eTo achieve centimeter-level (sub-inch) accuracy with RTK, you need a source of corrections â positioning enhancement data that upgrades standard GNSS accuracy from meters to centimeters in real time. \u003cbr\u003e\u003cbr\u003eYour receiver includes one free year of Emlid Corrections â a built-in network service to receive corrections over the internet. \u003ca href=\"#promo-free-year\"\u003eLearn more and check coverage in your area.\u003c\/a\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eAll-band support\u003c\/span\u003e\u003c!-- notionvc: 4c88f207-00c5-4ded-9ee0-4dccacdf8f36 --\u003e\u003cbr\u003e\u003c!-- notionvc: cd7027db-5551-4cc0-8d0e-a8a7a3863d7a --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003eGPS: L1C\/A, L2C, L5 \u003cbr\u003eGLONASS: L1OF, L2OF \u003cbr\u003eGalileo: E1-B\/C, E5a, E6 \u003cbr\u003eBeiDou: B1I, B1C, B2a, B3I \u003cbr\u003eQZSS: L1C\/A, L1C\/B11, L2C, L5 \u003cbr\u003eNavIC: L1-SPS Data, L5-SPS\u003c!-- notionvc: e435eac9-7fe4-40c5-b52b-6060098de1f3 --\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eBase and rover\u003c\/span\u003e\u003c!-- notionvc: 3186ade2-c7c4-480d-8e36-23a5f5410169 --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003e915 MHz LoRa, 450 MHz UHF, NTRIP\u003cbr\u003e\u003c!-- notionvc: cfa37089-e5be-4bd2-b0e8-bc7687177524 --\u003e\u003c\/p\u003e\n\u003ch4\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"notion-enable-hover\"\u003eRugged and powerful\u003c\/span\u003e\u003c!-- notionvc: fdaa66e2-5532-4335-a2e5-6f50d5a7b542 --\u003e\u003cbr\u003e\u003c!-- notionvc: 44a10220-0fe9-4ac7-8254-441ec31054a1 --\u003e\n\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003e16 hours on one charge\u003cspan class=\"notion-enable-hover\"\u003e \u003cbr\u003e\u003c\/span\u003eMagnesium alloy body \u003cbr\u003eIP68 rating \u003cbr\u003eWithstands temperatures \u003cspan class=\"discussion-level-1 discu
8922ssion-id-273498ed-188c-8077-849b-001cb6c798f7 notion-enable-hover\"\u003efrom -40 to +65°C \u003cmeta charset=\"utf-8\"\u003e \u003cspan class=\"discussion-level-1 discussion-id-273498ed-188c-80ad-96b6-001c11e598aa notion-enable-hover\"\u003e(-40 to +149ºF)\u003cbr\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c!-- notionvc: b2f7a1e0-d3e4-4a66-8a01-e4735ec3f723 --\u003e\u003c!-- notionvc: 85a39ad5-7876-4b30-b07c-660ef90ae048 --\u003e\u003cmeta charset=\"utf-8\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003ca href=\"https:\/\/emlid.com\/reachrs4pro\/\" rel=\"noopener\" target=\"_blank\"\u003e\u003cspan\u003eExplore all Reach RS4 Pro features and user reviews\u003c\/span\u003e\u003c\/a\u003e\u003c\/p\u003e\n\u003ch4\u003ePackage includes\u003c\/h4\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cspan class=\"discussion-id-273498ed-188c-8061-ae20-001c3a079042 notion-enable-hover\"\u003e- \u003c\/span\u003e\u003cspan class=\"discussion-id-273498ed-188c-8061-ae20-001c3a079042 notion-enable-hover\"\u003eReach RS4 Pro\u003cbr\u003e\u003c\/span\u003e\u003cspan\u003e- Carrying case \u003cbr\u003e- USB Type-C cable\u003c\/span\u003e\u003cspan\u003e \u003cbr\u003e- LoRa Antenna 860-930 MHz \u003cbr\u003e- UHF Antenna 410-470 MHz\u003cbr\u003e\u003cstrong\u003e\u003cbr\u003e\u003cbr\u003e\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e"} 8923 </div> 8924<div class="xs-clearfix"></div> 8925<div id="cross-sell"></div> 8926<div id="upsell"></div> 8927<div id="xs_bundle"></div> 8928<div class="xs-clearfix"></div> 8929
8930<script type="text/javascript" charset="utf-8"> 8931 8932 var xsellSettings = xsellSettings || {}; 8933 8934 var cartitems = ''; 8935 xsellSettings.cartitems = cartitems.split(','); 8936 8937 8938 xsellSettings.shopMetafields = eval({"cart_cross_sell_global_product":"[{\"order\":1, \"id\":8978452906289, \"handle\":\"emlid-flow\", \"title\":\"3-month Survey plan subscription in Emlid Flow\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/flow-store.webp?v=1695032138\"}, {\"order\":2, \"id\":10044117483825, \"handle\":\"base-accessory-kit\", \"title\":\"Base accessories kit\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/1-P1459553_1.webp?v=1732874511\"}, {\"order\":3, \"id\":10044209234225, \"handle\":\"base-and-rover-accessories-kit\", \"title\":\"Base and Rover accessories kit\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/3-P1459438_1.webp?v=1732882018\"}, {\"order\":4, \"id\":9233191960881, \"handle\":\"dual-car-fast-charger\", \"title\":\"Dual Car Fast Charger\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/Duocharger2.webp?v=1701959410\"}, {\"order\":5, \"id\":8978451726641, \"handle\":\"emlid-ntrip-caster\", \"title\":\"Emlid NTRIP Caster\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/emlid-cloud.png?v=1695032125\"}]","cart_upsell_global_product":"[]","checkout":"[{\"order\":1, \"id\":8978452906289, \"handle\":\"emlid-flow\", \"title\":\"3-month Survey plan subscription in Emlid Flow\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/flow-store.webp?v=1695032138\"}, {\"order\":2, \"id\":10044117483825, \"handle\":\"base-accessory-kit\", \"title\":\"Base accessories kit\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/1-P1459553_1.webp?v=1732874511\"}, {\"order\":3, \"id\":10044209234225, \"handle\":\"base-and-rover-accessories-kit\", \"title\":\"Base and Rover accessories kit\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/3-P1459438_1.webp?v=1732882018\"}, {\"order\":4, \"id\":9233191960881, \"handle\":\"dual-car-fast-charger\", \"title\":\"Dual Car Fast Charger\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/Duocharger2.webp?v=1701959410\"}, {\"order\":5, \"id\":8978451726641, \"handle\":\"emlid-ntrip-caster\", \"title\":\"Emlid NTRIP Caster\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/emlid-cloud.png?v=1695032125\"}]","default":"[]","popupsettings":"%7B%22active%22%3Atrue%2C%22title%22%3A%22Don%27t%20Forget%20the%20Essentials%22%2C%22more_info%22%3A%22Explore%22%2C%22skip%22%3A%22No%2C%20thank%20you.%22%2C%22shown_products%22%3A%2212%22%2C%22display_compare_at_price%22%3Afalse%2C%22hide_mobile%22%3Afalse%2C%22product_description_on_bottom%22%3Afalse%2C%22hide_product_description%22%3Afalse%2C%22apply_max_shows%22%3Afalse%2C%22max_shows%22%3A0%2C%22add_to_cart_text%22%3A%22Add%20to%20cart%22%2C%22added_to_cart_text%22%3A%22added%20to%20cart%21%22%2C%22add_to_cart_btn_text_color%22%3A%22%22%2C%22add_to_cart_btn_bg_color%22%3A%22%234e18ff%22%2C%22continue_shopping_text%22%3A%22Continue%20shopping%22%2C%22continue_shopping_btn_text_color%22%3A%22%22%2C%22continue_shopping_btn_bg_color%22%3A%22%22%2C%22go_to_cart_text%22%3A%22Go%20to%20cart%22%2C%22go_to_cart_btn_text_color%22%3A%22%22%2C%22go_to_cart_btn_bg_color%22%3A%22%23000000%22%2C%22more_info_text%22%3A%22Explore%22%2C%22sold_out_text%22%3A%22Sold%20out%22%2C%22options_text%22%3A%22Options%22%2C%22quantity_text%22%3A%22Quantity%22%2C%22quickview_enabled%22%3Atrue%2C%22quickview_mobile_enabled%22%3Atrue%2C%22quickview_skipped_if_unavailable%22%3Afalse%2C%22quickview_theme%22%3A%22charlie%22%2C%22quickview_btn_text%22%3A%22EXPLORE%22%2C%22quickview_btn_text_color%22%3A%22%23fafafa%22%2C%22quickview_btn_bg_color%22%3A%22%23151515%22%2C%22disable_close_after_add_to_cart%22%3Afalse%2C%22cart_refresh_callback_js%22%3A%22%22%2C%22windowshop_product_theme%22%3A%22%22%2C%22windowshop_gallery_theme%22%3A%22list%22%2C%22bypass_more_info_to_product_page%22%3Afalse%2C%22delay_popup_t
8938ill_cart%22%3Afalse%2C%22windowshop_quick_add_to_cart_enabled%22%3Atrue%2C%22quick_add_to_cart_dropdown%22%3Afalse%2C%22quick_add_to_cart_enabled%22%3Atrue%2C%22quick_add_to_cart_btn_bg_color%22%3A%22%234946ff%22%2C%22quick_add_to_cart_btn_icon%22%3A%22plus%22%2C%22quick_add_to_cart_position%22%3A%22right_corner%22%2C%22quick_add_to_cart_hide_mobile%22%3Afalse%2C%22quick_add_to_cart_text%22%3A%22ADD%22%2C%22submit_after_close%22%3Atrue%2C%22redirect_after_close%22%3Afalse%2C%22showdefault%22%3A%223%22%7D","settings":"[{\"show_post_purchase_page\":false, \"title_post_purchase_page\":\"Thank you for the purchase! Would you like to add more?\", \"options_post_purchase_page\":\"3\", \"hide_post_purchase_on_cart\":false, \"new_version\":false, \"drawer_upsell_show_close_button\":true, \"upsell_smart_drawer\":\"2\", \"drawer_upsell_title\":\"Explore More Options\", \"drawer_upsell_maxitems\":\"4\", \"cssmart_drawer\":\"2\", \"drawer_cross_sell_title\":\"Recommended Additions\", \"drawer_cross_sell_maxitems\":\"4\", \"upsell_smartcart\":true, \"upsell_titlecheckoutpage\":\"Don't Forget the Essentials\", \"show_bundle_on_product_page\":false, \"bundletitleproductpage\":\"Frequently Bought Together\", \"show_upsell_on_product_page\":false, \"upsellshowdefault\":\"3\", \"upselltitleproductpage\":\"Pair It With\", \"apply_all_upsell_logic\":true, \"show_on_homepage\":false, \"show_on_collection\":false, \"show_on_checkout\":false, \"randomizeproductpage\":\"\", \"display_popular_products\":false, \"randomizecartpage\"
8938:false, \"mustbeavailable\":false, \"hideifincart\":false, \"displaycompareatprice\":true, \"displaysalebadge\":true, \"displaypricevarieslabel\":true, \"displayvendor\":\"\", \"hoover_secondary_image\":true, \"taxmultiplier\":\"\", \"carousel_enabled\":true, \"carousel_repeat\":false, \"theme\":\"xsell_basic\", \"carousel_enabled_on\":\"responsive\", \"carousel_auto_play\":false, \"carousel_page_dots\":false, \"cssmartcart\":\"off\", \"show_upsell_on_cart_page\":false, \"image_size\":\"large\", \"image_width\":\"200px\", \"image_height\":\"\", \"productpagemaxitems\":\"12\", \"show_on_product_page\":false, \"titleproductpage\":\"Pair It With\", \"titleproductpagedefault\":\"Pair It With\", \"upsell_titleproductpagedefault\":\"Pair It With\", \"titlecheckoutpage\":\"Additional accessories\", \"showdefault\":\"3\", \"checkoutpagemaxitems\":\"10\", \"showcheckout\":1, \"cstr\":\"on\", \"skip_xsell_theme_font\":true, \"font_size\":\"\", \"font_color\":\"\", \"font_family\":\"\", \"use_xsell_font_family\":false, \"xsell_theme_rounded\":false, \"use_collection_recommendations\":false, \"use_recommendations\":false, \"use_cart_recommendations\":false, \"from_label\":\"From\", \"hide_prices\":false, \"bundle_discount\":\"on\", \"bisshowdefault\":\"2\", \"bisproductpagemaxitems\":\"4\", \"bundle_discount_details\":[], \"img_class\":\"\"}]","shop_css":"%22%22"}); 8939 xsellSettings.crosssellsettings = eval("[{\"show_post_purchase_page\":false, \"title_post_purchase_page\":\"Thank you for the purchase! Would you like to add more?\", \"options_post_purchase_page\":\"3\", \"hide_post_purchase_on_cart\":false, \"new_version\":false, \"drawer_upsell_show_close_button\":true, \"upsell_smart_drawer\":\"2\", \"drawer_upsell_title\":\"Explore More Options\", \"drawer_upsell_maxitems\":\"4\", \"cssmart_drawer\":\"2\", \"drawer_cross_sell_title\":\"Recommended Additions\", \"drawer_cross_sell_maxitems\":\"4\", \"upsell_smartcart\":true, \"upsell_titlecheckoutpage\":\"Don't Forget the Essentials\", \"show_bundle_on_product_page\":false, \"bundletitleproductpage\":\"Frequently Bought Together\", \"show_upsell_on_product_page\":false, \"upsellshowdefault\":\"3\", \"upselltitleproductpage\":\"Pair It With\", \"apply_all_upsell_logic\":true, \"show_on_homepage\":false, \"show_on_collection\":false, \"show_on_checkout\":false, \"randomizeproductpage\":\"\", \"display_popular_products\":false, \"randomizecartpage\"
8939:false, \"mustbeavailable\":false, \"hideifincart\":false, \"displaycompareatprice\":true, \"displaysalebadge\":true, \"displaypricevarieslabel\":true, \"displayvendor\":\"\", \"hoover_secondary_image\":true, \"taxmultiplier\":\"\", \"carousel_enabled\":true, \"carousel_repeat\":false, \"theme\":\"xsell_basic\", \"carousel_enabled_on\":\"responsive\", \"carousel_auto_play\":false, \"carousel_page_dots\":false, \"cssmartcart\":\"off\", \"show_upsell_on_cart_page\":false, \"image_size\":\"large\", \"image_width\":\"200px\", \"image_height\":\"\", \"productpagemaxitems\":\"12\", \"show_on_product_page\":false, \"titleproductpage\":\"Pair It With\", \"titleproductpagedefault\":\"Pair It With\", \"upsell_titleproductpagedefault\":\"Pair It With\", \"titlecheckoutpage\":\"Additional accessories\", \"showdefault\":\"3\", \"checkoutpagemaxitems\":\"10\", \"showcheckout\":1, \"cstr\":\"on\", \"skip_xsell_theme_font\":true, \"font_size\":\"\", \"font_color\":\"\", \"font_family\":\"\", \"use_xsell_font_family\":false, \"xsell_theme_rounded\":false, \"use_collection_recommendations\":false, \"use_recommendations\":false, \"use_cart_recommendations\":false, \"from_label\":\"From\", \"hide_prices\":false, \"bundle_discount\":\"on\", \"bisshowdefault\":\"2\", \"bisproductpagemaxitems\":\"4\", \"bundle_discount_details\":[], \"img_class\":\"\"}]"); 8940 const crossSellSettings = xsellSettings.crosssellsettings?.[0] || {}; 8941 const customCss = crossSellSettings.custom_css || ""; 8942 const customCssEnabled = crossSellSettings.enable_custom_css; 8943 8944 const existingStyle = document.getElementById("xsell-custom-css"); 8945 8946 if (existingStyle) { 8947 existingStyle.remove(); 8948 } 8949 8950 if (customCssEnabled && customCss.trim()) { 8951 const style = document.createElement("style"); 8952 style.id = "xsell-custom-css"; 8953 style.textContent = customCss; 8954 document.head.appendChild(style); 8955 } 8956 xsellSettings.upsellsettings = eval({"active":true,"title":"Don't Forget the Essentials","more_info":"Explore","skip":"No, thank you.","shown_products":"12","display_compare_at_price":false,"hide_mobile":false,"product_description_on_bottom":false,"hide_product_description":false,"apply_max_shows":false,"max_shows":0,"add_to_cart_text":"Add to cart","added_to_cart_text":"added to cart!","add_to_cart_btn_text_color":"","add_to_cart_btn_bg_color":"#4e18ff","continue_shopping_text":"Continue shopping","continue_shopping_btn_text_color":"","continue_shopping_btn_bg_color":"","go_to_cart_text":"Go to cart","go_to_cart_btn_text_color":"","go_to_cart_btn_bg_color":"#000000","more_info_text":"Explore","sold_out_text":"Sold out","options_text":"Options","quantity_text":"Quantity","quickview_enabled":true,"quickview_mobile_enabled":true,"quickview_skipped_if_unavailable":false,"quickview_theme":"charlie","quickview_btn_text":"EXPLORE","quickview_btn_text_color":"#fafafa","quickview_btn_bg_color":"#151515","disable_close_after_add_to_cart":false,"cart_refresh_callback_js":"","windowshop_product_theme":"","windowshop_gallery_theme":"list","bypass_more_info_to_product_page":false,"delay_popup_till_cart":false,"windowshop_quick_add_to_cart_enabled":true,"quick_add_to_cart_dropdown":false,"quick_add_to_cart_enabled":true,"quick_add_to_cart_btn_bg_color":"#4946ff","quick_add_to_cart_btn_icon":"plus","quick_add_to_cart_position":"right_corner","quick_add_to_cart_hide_mobile":false,"quick_add_to_cart_text":"ADD","submit_after_close":true,"redirect_after_close":false,"showdefault":"3"}) || {}; 8957 var xsellOriginalPopupsettings = xsellSettings.shopMetafields.popupsettings; 8958 var xsellCurrentMarketId = "gid://shopify/Market/61269737777"; 8959 var xsellCurrentLanguage = "en"; 8960 8961 function xsellGetMarketTranslation(marketTranslation, language) { 8962 if (!marketTranslation) { 8963 return {}; 8964 } 8965 8966 var langLower = (language || "").toLowerCase(); 8967 for (var key in marketTranslation) { 8968 if (Object.prototype.hasOwnProperty.call(marketTranslation, key) && key.toLowerCase() === langLower) { 8969 return marketTranslation[key]; 8970 } 8971 } 8972 8973 if (marketTranslation.en) { 8974 return marketTranslation.en; 8975 } 8976 8977 if (marketTranslation["en-US"]) { 8978 return marketTranslation["en-US"]; 8979 } 8980 8981 if (marketTranslation.default) { 8982 return marketTranslation.default; 8983 } 8984 8985 if ( 8986 marketTranslation.titlecheckoutpage || 8987 marketTranslation.upsell_titlecheckoutpage || 8988 marketTranslation.homepage_cross_sell_title || 8989 marketTranslation.collection_cross_sell_title || 8990 marketTranslation.checkout_cross_sell_title || 8991 marketTranslation.drawer_cross_sell_title || 8992 marketTranslation.drawer_upsell_title || 8993 marketTranslation.title_post_purchase_page || 8994 marketTranslation.titleproductpage || 8995 marketTranslation.titleproductpagedefault || 8996 marketTranslation.upselltitleproductpage || 8997 marketTranslation.upsell_titleproductpagedefault || 8998 marketTranslation.bundletitleproductpage 8999 ) { 9000 return marketTranslation; 9001 } 9002 9003 return {}; 9004 } 9005 9006 function xsellApplyMarketTranslations(settings, translationKeys) {
9007 if (!settings || !xsellCurrentMarketId || !settings.market_translations) { 9008 return settings; 9009 } 9010 if (settings['on_free']) { 9011 return settings; 9012 } 9013 9014 var marketTranslation = settings.market_translations[xsellCurrentMarketId]; 9015 var translation = xsellGetMarketTranslation( 9016 marketTranslation, 9017 xsellCurrentLanguage 9018 ); 9019 9020 for (var i = 0; i < translationKeys.length; i++) { 9021 var translationKey = translationKeys[i]; 9022 9023 // Settings > Configuration: 9024 // Keep root value same for all markets/languages. 9025 if ( 9026 settings.use_all_markets_heading_settings_config && 9027 [ 9028 'add_to_cart_text', 9029 'continue_shopping_text', 9030 'go_to_cart_text', 9031 'more_info_text', 9032 'added_to_cart_text', 9033 'sold_out_text', 9034 'options_text', 9035 'quantity_text' 9036 ].includes(translationKey) 9037 ) { 9038 continue; 9039 } 9040 9041 // Settings > Quickview: 9042 // Keep root quickview button text same for all markets/languages. 9043 if ( 9044 settings.use_all_markets_heading_settings_quickview && 9045 translationKey === 'quickview_btn_text' 9046 ) { 9047 continue; 9048 } 9049 9050 if (translation[translationKey] !== undefined) { 9051 settings[translationKey] = translation[translationKey]; 9052 } 9053 } 9054 9055 return settings; 9056 } 9057 9058 // Popup-specific settings are stored in `popupsettings`, not in the main settings metafield. 9059 // Reading the flag from the main settings caused market translations to overwrite the shared popup heading. 9060 var popupTranslationKeys = xsellSettings.upsellsettings['use_all_markets_heading_popup'] 9061 ? [ 9062 'add_to_cart_text', 9063 'continue_shopping_text', 9064 'go_to_cart_text', 9065 'more_info_text', 9066 'added_to_cart_text', 9067 'sold_out_text', 9068 'options_text', 9069 'quantity_text', 9070 'quickview_btn_text' 9071 ] 9072 : [ 9073 'title', 9074 'more_info', 9075 'skip', 9076 'add_to_cart_text', 9077 'continue_shopping_text', 9078 'go_to_cart_text', 9079 'more_info_text', 9080 'added_to_cart_text', 9081 'sold_out_text', 9082 'options_text', 9083 'quantity_text', 9084 'quickview_btn_text' 9085 ]; 9086 9087 xsellApplyMarketTranslations( 9088 xsellSettings.upsellsettings, 9089 popupTranslationKeys 9090 ); 9091 9092 var configSettings = xsellSettings.crosssellsettings[0]; 9093 9094 var configTranslationKeys = [ 9095 'add_to_cart_text', 9096 'continue_shopping_text', 9097 'go_to_cart_text', 9098 'more_info_text', 9099 'added_to_cart_text', 9100 'sold_out_text', 9101 'options_text', 9102 'quantity_text' 9103 ]; 9104 9105 xsellApplyMarketTranslations( 9106 configSettings, 9107 configTranslationKeys 9108 ); 9109 9110 if (xsellSettings.shopMetafields && xsellSettings.upsellsettings) { 9111 xsellSettings.shopMetafields.popupsettings = 9112 typeof xsellOriginalPopupsettings === 'string' 9113 ? encodeURIComponent(JSON.stringify(xsellSettings.upsellsettings)) 9114 : xsellSettings.upsellsettings; 9115 } 9116 xsellSettings.money_format = xsellSettings.money_format || "${{amount}}"; 9117 xsellSettings.xsmainproducthandle = 'reach-rs4-pro'; 9118 xsellSettings.current_product_type = ""; 9119 xsellSettings.currentpagetype = 'product'; 9120 xsellSettings.is_globalpage = false; 9121 9122 xsellSettings.xsrandomizeproductpage = xsellSettings.crosssellsettings[0]['randomizeproductpage']; 9123 xsellSettings.xsrandomizecartpage = xsellSettings.crosssellsettings[0]['randomizecartpage']; 9124 xsellSettings.xsmustbeavailable = xsellSettings.crosssellsettings[0]['mustbeavailable']; 9125 xsellSettings.xshideifincart = xsellSettings.crosssellsettings[0]['hideifincart']; 9126 9127 xsellSettings.xsdisplaycompareatprice = xsellSettings.crosssellsettings[0]['displaycompareatprice']; 9128 xsellSettings.xsdisplaysalebadge = xsellSettings.crosssellsettings[0]['displaysalebadge']; 9129 xsellSettings.xsdisplaypricevarieslabel = xsellSettings.crosssellsettings[0]['displaypricevarieslabel']; 9130 xsellSettings.xsdisplayvendor = xsellSettings.crosssellsettings[0]['displayvendor']; 9131 xsellSettings.showcrosssellsonsignup = xsellSettings.crosssellsettings[0]['show_sign_up_cross_sells'] 9132 9133 xsellSettings.maxcrosssellsonsignup = xsellSettings.crosssellsettings[0]['sign_up_product_page_max_tems'] 9134 9135 xsellSettings.sign_up_page_product_crosssells = eval("[{\"order\":1, \"id\":\"10409912303921\", \"handle\":\"reach-rs4-pro-bumper\", \"title\":\"Reach RS4 Pro Bumper\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.864.webp?v=1759140503\", \"begin_delete\":false, \"is_hover\":false, \"image_url\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.864.webp?v=1761059557\"}, {\"order\":2, \"id\":\"10409912598833\", \"handle\":\"quick-release-adapter\", \"title\":\"Quick Release Adapter\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1222.webp?v=1759140506\", \"begin_delete\":false, \"is_hover\":false, \"image_url\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1222.webp?v=1761055076\"}, {\"order\":3, \"id\":\"8978451923249\", \"handle\":\"survey-pole\", \"title\":\"Survey Pole with a smartphone mount\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/Pole-Mount-2.webp?v=1695032129\", \"begin_delete\":false, \"is_hover\":false, \"image_url\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/Pole-Mount-2.webp?v=1761055076\"}, {\"order\":4, \"id\":\"10409912697137\", \"handle\":\"extension-pole\", \"title\":\"Extension Pole\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1339.webp?v=1759140508\", \"begin_delete\":false, \"is_hover\":false, \"image_url\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1339.webp?v=1760966188\"}]"); 9136 9137 xsellSettings.sign_up_page_default_crosssells = eval("[]"); 9138 9139 9140 xsellSettings.sign_up_upsells = eval("[{\"order\":1, \"id\":\"10409912598833\", \"handle\":\"quick-release-adapter\", \"title\":\"Quick Release Adapter\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1222.webp?v=1759140506\"}, {\"order\":2, \"id\":\"10409912303921\", \"handle\":\"reach-rs4-pro-bumper\", \"title\":\"Reach RS4 Pro Bumper\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.864.webp?v=1759140503\"}, {\"order\":3, \"id\":\"10044167979313\", \"handle\":\"rover-accessories-kit\", \"title\":\"Rover accessories kit\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/2-P1459554.webp?v=1732880518\"}, {\"order\":4, \"id\":\"8978451923249\", \"handle\":\"survey-pole\", \"title\":\"Survey Pole with a smartphone mount\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/Pole-Mount-2.webp?v=1695032129\"}, {\"order\":5, \"id\":\"10409912697137\", \"handle\":\"extension-pole\", \"title\":\"Extension Pole\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1339.webp?v=1759140508\"}]"); 9141 9142 9143 9144 var crossselltitleproductpage = xsellSettings.crosssellsettings[0]['titleproductpage'] || ""; 9145 var upselltitleproductpage = xsellSettings.crosssellsettings[0]['upselltitleproductpage']; 9146 var upsell_titleproductpagedefault = xsellSettings.crosssellsettings[0]['upsell_titleproductpagedefault']; 9147 var bundletitleproductpage = xsellSettings.crosssellsettings[0]['bundletitleproductpage']; 9148 9149var settings = xsellSettings.crosssellsettings[0]; 9150var currentMarketId = "gid://shopify/Market/61269737777"; 9151var currentLanguage = "en"; 9152 9153/* Handpicked Cross Sell */ 9154var crossselltitleproductpage = 9155 settings.titleproductpage || ""; 9156 9157var crossselltitleproductpagedefault = 9158 settings.titleproductpagedefault || ""; 9159 9160/* Upsell */ 9161var upselltitleproductpage = 9162 settings.upselltitleproductpage || ""; 9163 9164var upsell_titleproductpagedefault = 9165 settings.upsell_titleproductpagedefault || ""; 9166 9167/* Bundle */ 9168var bundletitleproductpage = 9169 settings.bundletitleproductpage || ""; 9170 9171/* Market Translations */ 9172if ( 9173 currentMarketId && 9174 !settings.on_free && 9175 settings.market_translations && 9176 settings.market_translations[currentMarketId] 9177) { 9178 var marketTranslation = 9179 settings.market_translations[currentMarketId]; 9180 9181 var translation = xsellGetMarketTranslation(marketTranslation, currentLanguage); 9182
9183 if (translation.titleproductpage !== undefined && !settings.use_all_markets_heading) { 9184 crossselltitleproductpage = translation.titleproductpage; 9185 } 9186 9187 if (translation.titleproductpagedefault !== undefined && !settings.use_all_markets_heading) { 9188 crossselltitleproductpagedefault = translation.titleproductpagedefault; 9189 } 9190 9191 if (translation.upselltitleproductpage !== undefined && !settings.use_all_markets_heading_upsell) { 9192 upselltitleproductpage = translation.upselltitleproductpage; 9193 } 9194 9195 if (translation.upsell_titleproductpagedefault !== undefined && !settings.use_all_markets_heading_upsell) { 9196 upsell_titleproductpagedefault = translation.upsell_titleproductpagedefault; 9197 } 9198 9199 if (translation.bundletitleproductpage !== undefined && !settings.use_all_markets_heading_bundle) { 9200 bundletitleproductpage = translation.bundletitleproductpage; 9201 } 9202} 9203var crosssellshowdefault = 9204 xsellSettings.crosssellsettings[0]['showdefault']; 9205 9206var upsell_carousel_show = 9207 xsellSettings.crosssellsettings[0]['upsellshowdefault']; 9208 9209var upsell_modal_show = 9210 xsellSettings.upsellsettings['showdefault']; 9211 9212xsellSettings.crosssellmaxitems = 9213 xsellSettings.crosssellsettings[0]['productpagemaxitems']; 9214 9215 var upsell_carousel_show = xsellSettings.crosssellsettings[0]['upsellshowdefault']; 9216 var upsell_modal_show = xsellSettings.upsellsettings['showdefault']; 9217 9218 xsellSettings.crosssellmaxitems = xsellSettings.crosssellsettings[0]['productpagemaxitems']; 9219 9220 9221 9222var settings = settings || xsellSettings.crosssellsettings[0]; 9223var title_post_purchase_page = settings.title_post_purchase_page || ""; 9224xsellSettings.title_post_purchase_page = title_post_purchase_page; 9225 9226var xsproductsData = ''; 9227xsellSettings.xstitle = ""; 9228xsellSettings.carousel_upsells = ''; 9229xsellSettings.carousel_bundle = ''; 9230 9231 switch(crosssellshowdefault){ 9232 case '4': 9233 break; 9234 default: 9235 9236 xsellSettings.product_crosssells = eval("[{\"order\":1, \"id\":\"10409912303921\", \"handle\":\"reach-rs4-pro-bumper\", \"title\":\"Reach RS4 Pro Bumper\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.864.webp?v=1759140503\", \"begin_delete\":false, \"is_hover\":false, \"image_url\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.864.webp?v=1761059557\"}, {\"order\":2, \"id\":\"10409912598833\", \"handle\":\"quick-release-adapter\", \"title\":\"Quick Release Adapter\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1222.webp?v=1759140506\", \"begin_delete\":false, \"is_hover\":false, \"image_url\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1222.webp?v=1761055076\"}, {\"order\":3, \"id\":\"8978451923249\", \"handle\":\"survey-pole\", \"title\":\"Survey Pole with a smartphone mount\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/Pole-Mount-2.webp?v=1695032129\", \"begin_delete\":false, \"is_hover\":false, \"image_url\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/Pole-Mount-2.webp?v=1761055076\"}, {\"order\":4, \"id\":\"10409912697137\", \"handle\":\"extension-pole\", \"title\":\"Extension Pole\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1339.webp?v=1759140508\", \"begin_delete\":false, \"is_hover\":false, \"image_url\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1339.webp?v=1760966188\"}]"); 9237 xsproductsData = xsellSettings.product_crosssells; 9238 xsellSettings.cross_sell_set = 'product'; 9239 if(crossselltitleproductpage.length){ 9240 xsellSettings.xstitle = crossselltitleproductpage; 9241 } 9242 9243 break; 9244 } 9245 if(crosssellshowdefault == '1' || (crosssellshowdefault == '2' && xsproductsData == '')){ 9246 xsellSettings.default_crosssells = ''; 9247 9248 xsellSettings.default_crosssells = eval("[]"); 9249 9250 9251 xsproductsData = xsellSettings.default_crosssells; 9252 xsellSettings.cross_sell_set = 'default'; 9253 if(crossselltitleproductpagedefault.length){ 9254 xsellSettings.xstitle = crossselltitleproductpagedefault; 9255 } 9256 } 9257 9258 xsellSettings.carousel_upsells = eval("[{\"order\":1, \"id\":\"10409912598833\", \"handle\":\"quick-release-adapter\", \"title\":\"Quick Release Adapter\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1222.webp?v=1759140506\"}, {\"order\":2, \"id\":\"10409912303921\", \"handle\":\"reach-rs4-pro-bumper\", \"title\":\"Reach RS4 Pro Bumper\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.864.webp?v=1759140503\"}, {\"order\":3, \"id\":\"10044167979313\", \"handle\":\"rover-accessories-kit\", \"title\":\"Rover accessories kit\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/2-P1459554.webp?v=1732880518\"}, {\"order\":4, \"id\":\"8978451923249\", \"handle\":\"survey-pole\", \"title\":\"Survey Pole with a smartphone mount\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/Pole-Mount-2.webp?v=1695032129\"}, {\"order\":5, \"id\":\"10409912697137\", \"handle\":\"extension-pole\", \"title\":\"Extension Pole\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1339.webp?v=1759140508\"}]"); 9259 xsellSettings.xsupselltitle = upselltitleproductpage || ''; 9260 9261 9262 9263 9264 if(upsell_carousel_show == '1' || (upsell_carousel_show == '2' && xsellSettings.carousel_upsells == '')){ 9265 xsellSettings.xsupselltitle = upsell_titleproductpagedefault || ''; 9266 9267 xsellSettings.carousel_upsells = eval("[]"); 9268 9269 9270 } 9271 9272 xsellSettings.modal_upsells = ''; 9273 switch(upsell_modal_show){ 9274 case '4': 9275 break; 9276 case '5': 9277 case '6': 9278 9279 xsellSettings.modal_upsells = eval("[{\"order\":1, \"id\":\"10409912598833\", \"handle\":\"quick-release-adapter\", \"title\":\"Quick Release Adapter\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1222.webp?v=1759140506\"}, {\"order\":2, \"id\":\"10409912303921\", \"handle\":\"reach-rs4-pro-bumper\", \"title\":\"Reach RS4 Pro Bumper\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.864.webp?v=1759140503\"}, {\"order\":3, \"id\":\"10044167979313\", \"handle\":\"rover-accessories-kit\", \"title\":\"Rover accessories kit\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/2-P1459554.webp?v=1732880518\"}, {\"order\":4, \"id\":\"8978451923249\", \"handle\":\"survey-pole\", \"title\":\"Survey Pole with a smartphone mount\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/Pole-Mount-2.webp?v=1695032129\"}, {\"order\":5, \"id\":\"10409912697137\", \"handle\":\"extension-pole\", \"title\":\"Extension Pole\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1339.webp?v=1759140508\"}]"); 9280 9281 9282 break; 9283 default: 9284 if(xsellSettings.crosssellsettings[0]['new_version']){ 9285 9286 xsellSettings.modal_upsells = eval("[{\"order\":1, \"id\":\"10409912303921\", \"handle\":\"reach-rs4-pro-bumper\", \"title\":\"Reach RS4 Pro Bumper\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.864.webp?v=1761059557\"}, {\"order\":2, \"id\":\"10409912598833\", \"handle\":\"quick-release-adapter\", \"title\":\"Quick Release Adapter\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1222.webp?v=1761055076\"}, {\"order\":3, \"id\":\"8978451923249\", \"handle\":\"survey-pole\", \"title\":\"Survey Pole with a smartphone mount\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/Pole-Mount-2.webp?v=1761055076\"}, {\"order\":4, \"id\":\"10409912697137\", \"handle\":\"extension-pole\", \"title\":\"Extension Pole\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1339.webp?v=1760966188\"}, {\"order\":5, \"id\":\"8978449236273\", \"handle\":\"fast-charger\", \"title\":\"Fast Charger\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/CHR104.webp?v=1701963785\"}, {\"order\":6, \"id\":\"9235138445617\", \"handle\":\"fast-charger-usb-c\", \"title\":\"Fast Charger USB-C Cable\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/CBL111_1.webp?v=1701963082\"}, {\"order\":7, \"id\":\"9233191960881\", \"handle\":\"dual-car-fast-charger\", \"title\":\"Dual Car Fast Charger\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/Duocharger2.webp?v=1701959410\"}]"); 9287 9288 } else { 9289 9290 xsellSettings.modal_upsells = eval("[{\"order\":1, \"id\":\"10409912303921\", \"handle\":\"reach-rs4-pro-bumper\", \"title\":\"Reach RS4 Pro Bumper\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.864.webp?v=1759140503\", \"begin_delete\":false, \"is_hover\":false, \"image_url\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.864.webp?v=1761059557\"}, {\"order\":2, \"id\":\"10409912598833\", \"handle\":\"quick-release-adapter\", \"title\":\"Quick Release Adapter\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1222.webp?v=1759140506\", \"begin_delete\":false, \"is_hover\":false, \"image_url\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1222.webp?v=1761055076\"}, {\"order\":3, \"id\":\"8978451923249\", \"handle\":\"survey-pole\", \"title\":\"Survey Pole with a smartphone mount\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/Pole-Mount-2.webp?v=1695032129\", \"begin_delete\":false, \"is_hover\":false, \"image_url\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/Pole-Mount-2.webp?v=1761055076\"}, {\"order\":4, \"id\":\"10409912697137\", \"handle\":\"extension-pole\", \"title\":\"Extension Pole\", \"imgsrc\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1339.webp?v=1759140508\", \"begin_delete\":false, \"is_hover\":false, \"image_url\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0782\/0230\/6865\/files\/RS4RENDERS04.1339.webp?v=1760966188\"}]"); 9291 9292 } 9293 break; 9294 } 9295 if(upsell_modal_show == '1' || (upsell_modal_show == '2' && xsellSettings.modal_upsells == '') || (upsell_modal_show == '6' && xsellSettings.modal_upsells == '')){ 9296 9297 xsellSettings.modal_upsells = eval("[]"); 9298 9299 9300 } 9301 9302 9303window.xsellData = window.xsellData || {}; 9304window.xsellData.data = xsproductsData; 9305window.xsellData.settings = xsellSettings; 9306</script>
9306 9307 9308<!-- END app snippet --> 9309<!-- BEGIN app snippet: cross-sell-drawer-cart --> 9310 9311 9312 9313 9314 9315<style> 9316 body:has(.xsell__modal) .xsell_drawer_cart{ 9317 visibility: hidden; 9318 } 9319 @media(max-width: 700px){ 9320 .xsell_drawer_cart.xsell_slide{ 9321 display: none; 9322 } 9323 } 9324 .xsell_drawer_cart.xsell_inside{ 9325 height: 228px; 9326 overflow: hidden; 9327 text-align: center; 9328 } 9329 .xsell_drawer_cart.xsell_inside .crosssell-title{ 9330 margin: 5px 0px; 9331 padding-right: 32px; 9332 } 9333 .xsell_drawer_cart.xsell_inside .xs-card { 9334 display: flex; 9335 justify-content: center; 9336 align-items: center; 9337 width: 100%; 9338 margin: 10px 10px 0px 0px !important; 9339 padding: 0px 0px 8px 0px !important; 9340 } 9341 .xsell_drawer_cart.xsell_inside .xs-image{ 9342 margin-top: 0px !important; 9343 } 9344 .xsell_drawer_cart.xsell_inside{ 9345 position: relative; 9346 } 9347 .xsell_drawer_cart.xsell_inside .close_section_xsell svg{ 9348 height: 17px; 9349 } 9350 .xsell_drawer_cart.xsell_inside .close_section_xsell { 9351 cursor: pointer; 9352 position: absolute; 9353 top: 6px; 9354 right: 10px; 9355 display: inline-flex; 9356 align-items: center; 9357 justify-content: center; 9358 } 9359 .xsell_drawer_cart.xsell_inside .close_section_xsell:focus-visible { 9360 outline: 2px solid #000; 9361 outline-offset: 2px; 9362 border-radius: 2px; 9363 } 9364</style> 9365<style> 9366.xsell_drawer_cart:empty{ 9367 display: none; 9368} 9369.xsell_drawer_cart.xsell_slide{ 9370 background: white; 9371 border: 1px solid #cfcfcf; 9372 z-index: 2; 9373} 9374.xsell_drawer_cart.xsell_slide > div { 9375 display: flex; 9376 flex-direction: column; 9377 align-items: center; 9378 overflow: auto; 9379 height: 100%; 9380} 9381.xsell_drawer_cart.xsell_slide .crosssell-title { 9382 margin: 25px 25px; 9383 width: 200px; 9384} 9385.xsell_drawer_cart.xsell_slide #cross-sells { 9386 display: flex; 9387 flex-direction: column; 9388 overflow: auto; 9389} 9390.xsell_drawer_cart.xsell_slide{ 9391 position: relative; 9392} 9393 9394.xsell_drawer_cart.xsell_slide .close_section_xsell svg{ 9395 height: 17px; 9396} 9397.xsell_drawer_cart.xsell_slide .close_section_xsell { 9398 cursor: pointer; 9399 position: absolute; 9400 top: 11px; 9401 right: 18px; 9402 display: inline-flex; 9403 align-items: center; 9404 justify-content: center; 9405} 9406.xsell_drawer_cart.xsell_slide .close_section_xsell:focus-visible { 9407 outline: 2px solid #000; 9408 outline-offset: 2px; 9409 border-radius: 2px; 9410} 9411/* 9412.xsell_drawer_cart.xsell_slide .close_section_xsell { 9413 cursor: pointer; 9414 font-weight: 700; 9415 padding: 3px 16px; 9416 background: black; 9417 color: white; 9418 margin: 10px 0px 10px 0px; 9419 border-radius: 8px; 9420 font-size: 13px; 9421} 9422*/ 9423#CartDrawer:has(#cross_sell_drawer_cart.xsell_slide){ 9424 overflow: visible; 9425} 9426#CartDrawer .xsell_drawer_cart.xsell_slide { 9427 position: fixed; 9428 top: 0; 9429 bottom: 0; 9430} 9431#CartDrawer #cross_sell_drawer_cart.xsell_slide{ 9432 right: 300px; 9433} 9434#CartDrawer #upsell_drawer_cart.xsell_slide{ 9435 right: 598px; 9436} 9437</style> 9438<div id="cross_sell_drawer_cart" class="xsell_drawer_cart"></div> 9439<div id="upsell_drawer_cart" class="xsell_drawer_cart"></div> 9440
9441<script type="text/javascript" charset="utf-8"> 9442 var xsellSettings = xsellSettings || {}; 9443 9444 var crosssellshowcheckout = xsellSettings.crosssellsettings[0]['show_on_drawer']; 9445 var crossselltitlecheckoutpage = xsellSettings.crosssellsettings[0]['drawer_cross_sell_title']; 9446 9447 var upsellshowcheckout = xsellSettings.crosssellsettings[0]['show_upsell_on_drawer']; 9448 var upsell_titlecheckoutpage = xsellSettings.crosssellsettings[0]['drawer_upsell_title']; 9449 9450 var settings = xsellSettings.crosssellsettings[0]; 9451 9452 var currentMarketId = "gid://shopify/Market/61269737777"; 9453 var currentLanguage = "en"; 9454 9455 if ( 9456 currentMarketId && 9457 !settings.on_free && 9458 settings.market_translations && 9459 settings.market_translations[currentMarketId] 9460 ) { 9461 var marketTranslation = 9462 settings.market_translations[currentMarketId]; 9463 var translation = xsellGetMarketTranslation(marketTranslation, currentLanguage); 9464 9465 if ( 9466 translation.drawer_cross_sell_title && 9467 !settings.use_all_markets_heading_drawer 9468 ) { 9469 crossselltitlecheckoutpage = 9470 translation.drawer_cross_sell_title; 9471 } 9472 9473 if ( 9474 translation.drawer_upsell_title && 9475 !settings.use_all_markets_heading_upsell_drawer 9476 ) { 9477 upsell_titlecheckoutpage = 9478 translation.drawer_upsell_title; 9479 } 9480 } 9481 9482 if(typeof crosssellshowcheckout != 'undefined' && (crosssellshowcheckout || crosssellshowcheckout == '2')){ 9483 9484 9485 9486 9487 9488 9489 9490 9491 9492 xsellSettings.drawer_cross_sell = eval(null); 9493 xsellSettings.drawer_cross_sell_title = crossselltitlecheckoutpage || ''; 9494 } 9495 if(typeof upsellshowcheckout != 'undefined' && (upsellshowcheckout || upsellshowcheckout == "true")){ 9496 9497 9498 9499 9500 9501 9502 9503 xsellSettings.drawer_upsell = eval(null); 9504 xsellSettings.drawer_upsell_title = upsell_titlecheckoutpage || ''; 9505 } 9506</script>
9506 9507 9508 9509<!-- END app snippet -->
9510<script> 9511 window.xellWindowShopURL = "https://cdn.shopify.com/extensions/01a0ce9c-98ea-7877-827e-fbca0db47e08/cross_sell-175/assets/windowshop.js"; 9512</script>
vendor: 1 bytes, line 9512
9512
9513<script src="https://cdn.shopify.com/extensions/01a0ce9c-98ea-7877-827e-fbca0db47e08/cross_sell-175/assets/custom.js" defer></script>
vendor: 1 bytes, line 9513
9513
9514<script src="https://cdn.shopify.com/extensions/01a0ce9c-98ea-7877-827e-fbca0db47e08/cross_sell-175/assets/cross-sell.js" defer></script>
vendor: 1 bytes, line 9514
9514
9515<script src="https://cdn.shopify.com/extensions/01a0ce9c-98ea-7877-827e-fbca0db47e08/cross_sell-175/assets/xsell.js" defer></script>
vendor: 1 bytes, line 9515
9515
9516<script src="https://cdn.shopify.com/extensions/01a0ce9c-98ea-7877-827e-fbca0db47e08/cross_sell-175/assets/custom_drawer.js" defer></script>
9516 9517 9518</div>
9518<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
vendor: 1 bytes, line 9518
9518
9519<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a4009a658c1a4138',t:'MTc5MDI0MDQ3MQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
9519<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"be0f85262dd746aa8e4a6c8ae0a60f7c","spa":2}' crossorigin="anonymous"></script>
9519 9520</body> 9521</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.