PageSourceSearch

https://store.emlid.com/products/reach-rs4-pro

html emlid.com collected 2026-09-24 09:01:12 UTC 555,104 bytes, 9,521 lines download raw bytes

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 &ndash; 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&#160;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&nbsp;a&nbsp;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&nbsp;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 &amp; 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&nbsp;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">&quot;Working Great!&quot;</p>       <p class="yotpo-review-author">&mdash; <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">&quot;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.&quot;</p>       <p class="yotpo-review-author">&mdash; <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">&quot;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&quot;</p>       <p class="yotpo-review-author">&mdash; <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">&quot;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&quot;</p>       <p class="yotpo-review-author">&mdash; <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&amp;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&#160;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&#160;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        &copy; 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">&#x2715;</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.