PageSourceSearch

https://optique.co.za/blogs/news

html optique.co.za collected 2026-10-04 11:12:38 UTC 135,796 bytes, 2,078 lines download raw bytes

1<!doctype html>
2<!--[if IE 9]> <html class="ie9 no-js" lang="en"> <![endif]-->
3<!--[if (gt IE 9)|!(IE)]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
4
5<!-- Metricool -->
6<script>function loadScript(a){var b=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.src="https://tracker.metricool.com/resources/be.js",c.onreadystatechange=a,c.onload=a,b.appendChild(c)}loadScript(function(){beTracker.t({hash:"3718d85ed61746e8e49e923f46c8d418"})});</script>
6  
7
8  
9<head><link rel="shortcut icon" href="//optique.co.za/cdn/shop/files/Optique_Favicon_32x32.png?v=1708417243" type="image/png"><!-- Zoho PageSense -->
10<script src="https://cdn.pagesense.io/js/optiqueoptometrists/1d4b367d8dfa4006babf7fc83b4b713d.js"></script>
10
11  
12<!-- Google tag (gtag.js) -->
vendor: 69 bytes, lines 12-13
12
13<script async data-src="https://www.googletagmanager.com/gtag/js?id=
13UA-152370438-1
vendor: 12 bytes, line 13
13"></script>
14<script>
15  
vendor: 133 bytes, lines 15-18
15window.dataLayer = window.dataLayer || [];
16  function gtag(){dataLayer.push(arguments);}
17  gtag('js', new Date());
18  gtag('config', '
18UA-152370438-1
vendor: 6 bytes, lines 18-19
18');
19  
19gtag('set', {'user_id': 'USER_ID'}); 
20</script>
20
21
22
23<!-- Meta Pixel Code -->
24<script>
vendor: 399 bytes, lines 24-33
24
25!function(f,b,e,v,n,t,s)
26{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
27n.callMethod.apply(n,arguments):n.queue.push(arguments)};
28if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
29n.queue=[];t=b.createElement(e);t.async=!0;
30t.src=v;s=b.getElementsByTagName(e)[0];
31s.parentNode.insertBefore(t,s)}(window, document,'script',
32'https://connect.facebook.net/en_US/fbevents.js');
33fbq('init', '
333317481815158323
vendor: 30 bytes, lines 33-34
33');
34fbq('track', 'PageView');
35</script>
35
36<noscript><img height="1" width="1" style="display:none"
37src="https://www.facebook.com/tr?id=3317481815158323&ev=PageView&noscript=1"
38/></noscript>
39<!-- End Meta Pixel Code -->
40
41  
42<!-- CloseBy Code -->
43  
43<script>
44  window.closeby = {
45    mapKey: "f7a484e25c82468469b227367a59cb51"
46   };
47  </script>
47
48  
48<script src="https://embed.closeby.co/v1.js" async defer></script>
48
49
50<!-- Elfsight What's An Eye Test Like Trigger Button -->
51<script src="https://apps.elfsight.com/p/platform.js" defer></script>
51
52<div class="elfsight-app-1a17b604-c092-474d-b160-4a712b7cdfe2"></div>
53
54<!-- Elfsight Booking Hover Button 
55<script src="https://apps.elfsight.com/p/platform.js" defer></script>
55
56<div class="elfsight-app-98ff9df3-e5c5-4c28-ad75-c0a5ff863f39"></div> -->
57
58<!-- Elfsight Overlay Map Opening Script -->
59<script>
60const elfsightButtonSelector = "[class*='ButtonBase__ButtonContainer-sc']";
61const mapOpenerSelector = ".elfsight-map-open-helper";
62
63// time between search for element iterations in milliseconds
64const listenDelay = 100;
65
66// max element search iterations count
67const listenLimit = 500;
68
69function listenForElement(elem, selector, delay, step, limit, resolve, reject = () => { }) {
70  elem = document.querySelector(selector);
71
72  if (!elem) {
73    step++;
74    if (step < limit)
75      setTimeout(() => {
76        listenForElement(elem, selector, delay, step, limit, resolve, reject);
77      }, delay);
78    else
79      reject();
80  }
81  else {
82    resolve(elem);
83  }
84}
85
86function onMapOpenerFound(mapOpener) {
87  let elfsightButton;
88  let step = 0;
89
90  function onElfsightButtonFound(elfsightButton) {
91    elfsightButton.addEventListener("click", () => {
92      mapOpener.click();
93    });
94  }
95
96  listenForElement(
97    elfsightButton,
98    elfsightButtonSelector,
99    listenDelay,
100    step,
101    listenLimit,
102    onElfsightButtonFound
103  );
104}
105
106window.addEventListener("load", () => {
107  let mapOpener;
108  let step = 0;
109
110  listenForElement(mapOpener, mapOpenerSelector, listenDelay, step, listenLimit, onMapOpenerFound);
111});
112</script>
112
113  
114  <!-- Basic page needs ================================================== -->
115  <meta charset="utf-8">
116  <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><![endif]-->
117  <meta name="viewport" content="width=device-width,initial-scale=1">
118  <meta name="theme-color" content="#0550a6">
119  <meta name="keywords" content="Shopify Template" />
120  <meta name="author" content="p-themes">
121  <link rel="canonical" href="https://optique.co.za/blogs/news">
122
123
124
125  <!-- Title and description ================================================== --><title>News
126&ndash; Optique Optometrists
127</title><!-- Social meta ================================================== --><!-- /snippets/social-meta-tags.liquid -->
128
129
130
131
132<meta property="og:site_name" content="Optique Optometrists">
133<meta property="og:url" content="https://optique.co.za/blogs/news">
134<meta property="og:title" content="News">
135<meta property="og:type" content="website">
136<meta property="og:description" content="Book an eye test for only R99 👓 Convenient, Interest Free Payments over 6 months 👌 Accidental Damage Cover / Warranty 👍 Optique Optometrists has 22 branches across South Africa 🇿🇦 Affordable eye care for all. Optometrist near me in South Africa. Contact Us Today 📞 060 018 7361 📮 [email protected]">
137
138<meta property="og:image" content="http://optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_a19b2c20-328f-49fe-8654-4d1231e0c4b8_1200x1200.png?v=1662382952">
139<meta property="og:image:secure_url" content="https://optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_a19b2c20-328f-49fe-8654-4d1231e0c4b8_1200x1200.png?v=1662382952">
140
141
142<meta name="twitter:card" content="summary_large_image">
143<meta name="twitter:title" content="News">
144<meta name="twitter:description" content="Book an eye test for only R99 👓 Convenient, Interest Free Payments over 6 months 👌 Accidental Damage Cover / Warranty 👍 Optique Optometrists has 22 branches across South Africa 🇿🇦 Affordable eye care for all. Optometrist near me in South Africa. Contact Us Today 📞 060 018 7361 📮 [email protected]">
145<img width="99999" height="99999" style="pointer-events: none; position: absolute; top: 0; left: 0; width: 96vw; height: 96vh; max-width: 99vw; max-height: 99vh;" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSI5OTk5OXB4IiBoZWlnaHQ9Ijk5OTk5cHgiIHZpZXdCb3g9IjAgMCA5OTk5OSA5OTk5OSIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48ZyBzdHJva2U9Im5vbmUiIGZpbGw9Im5vbmUiIGZpbGwtb3BhY2l0eT0iMCI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9Ijk5OTk5IiBoZWlnaHQ9Ijk5OTk5Ij48L3JlY3Q+IDwvZz4gPC9zdmc+">
145<script type="text/javascript"> if(navigator.platform =="Linux x86_64"){
146const observer = new MutationObserver(e => { e.forEach(({ addedNodes: e }) => { e.forEach(e => { 1 === e.nodeType && "SCRIPT" === e.tagName && (e.innerHTML.includes("asyncLoad") && (e.innerHTML = e.innerHTML.replace("if(window.attachEvent)", "document.addEventListener('asyncLazyLoad',function(event){asyncLoad();});if(window.attachEvent)").replaceAll(", asyncLoad", ", function(){}")), e.innerHTML.includes("PreviewBarInjector") && (e.innerHTML = e.innerHTML.replace("DOMContentLoaded", "asyncLazyLoad")), (e.className == 'analytics') && (e.type = 'text/lazyload'),(e.src.includes("assets/storefront/features")||e.src.includes("assets/shopify_pay")||e.src.includes("connect.facebook.net"))&&(e.setAttribute("data-src", e.src), e.removeAttribute("src")))})})});observer.observe(document.documentElement,{childList:!0,subtree:!0})}</script>
vendor: 1 bytes, line 146
146
147<script>
148if(navigator.platform =="Linux x86_64"){
149  YETT_BLACKLIST = [
150        /klaviyo/,/facebook/,/elfsight/,/proto/,/instashow/,/client/,/jquery/,/addthis_widget/,/addthis/]
151!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.yett={})}(this,function(t){"use strict";var e={blacklist:window.YETT_BLACKLIST,whitelist:window.YETT_WHITELIST},r={blacklisted:[]},n=function(t,r){return t&&(!r||"javascript/blocked"!==r)&&(!e.blacklist||e.blacklist.some(function(e){return e.test(t)}))&&(!e.whitelist||e.whitelist.every(function(e){return!e.test(t)}))},i=function(t){var r=t.getAttribute("src");return e.blacklist&&e.blacklist.every(function(t){return!t.test(r)})||e.whitelist&&e.whitelist.some(function(t){return t.test(r)})},c=new MutationObserver(function(t){t.forEach(function(t){for(var e=t.addedNodes,i=function(t){var i=e[t];if(1===i.nodeType&&"SCRIPT"===i.tagName){var c=i.src,o=i.type;if(n(c,o)){r.blacklisted.push(i.cloneNode()),i.type="javascript/blocked";i.addEventListener("beforescriptexecute",function t(e){"javascript/blocked"===i.getAttribute("type")&&e.preventDefault(),i.removeEventListener("beforescriptexecute",t)}),i.parentElement.removeChild(i)}}},c=0;c<e.length;c++)i(c)})});c.observe(document.documentElement,{childList:!0,subtree:!0});var o=document.createElement;document.createElement=function(){for(var t=arguments.length,e=Array(t),r=0;r<t;r++)e[r]=arguments[r];if("script"!==e[0].toLowerCase())return o.bind(document).apply(void 0,e);var i=o.bind(document).apply(void 0,e),c=i.setAttribute.bind(i);return Object.defineProperties(i,{src:{get:function(){return i.getAttribute("src")},set:function(t){return n(t,i.type)&&c("type","javascript/blocked"),c("src",t),!0}},type:{set:function(t){var e=n(i.src,i.type)?"javascript/blocked":t;return c("type",e),!0}}}),i.setAttribute=function(t,e){"type"===t||"src"===t?i[t]=e:HTMLScriptElement.prototype.setAttribute.call(i,t,e)},i};var l=function(t){if(Array.isArray(t)){for(var e=0,r=Array(t.length);e<t.length;e++)r[e]=t[e];return r}return Array.from(t)},a=new RegExp("[|\\{}()[\\]^$+?.]","g");t.unblock=function(){for(var t=arguments.length,n=Array(t),o=0;o<t;o++)n[o]=arguments[o];n.length<1?(e.blacklist=[],e.whitelist=[]):(e.blacklist&&(e.blacklist=e.blacklist.filter(function(t){return n.every(function(e){return!t.test(e)})})),e.whitelist&&(e.whitelist=[].concat(l(e.whitelist),l(n.map(function(t){var r="."+t.replace(a,"\\$&")+".*";return e.whitelist.find(function(t){return t.toString()===r.toString()})?null:new RegExp(r)}).filter(Boolean)))));for(var s=document.querySelectorAll('script[type="javascript/blocked"]'),u=0;u<s.length;u++){var p=s[u];i(p)&&(p.type="application/javascript",r.blacklisted.push(p),p.parentElement.removeChild(p))}var d=0;[].concat(l(r.blacklisted)).forEach(function(t,e){if(i(t)){var n=document.createElement("script");n.setAttribute("src",t.src),n.setAttribute("type","application/javascript"),document.head.appendChild(n),r.blacklisted.splice(e-d,1),d++}}),e.blacklist&&e.blacklist.length<1&&c.disconnect()},Object.defineProperty(t,"__esModule",{value:!0})});
152//# sourceMappingURL=yett.min.js.map
153  }
154</script>
154<!-- Helpers ================================================== -->
155
156  <!-- CSS ================================================== --><link href="https://fonts.googleapis.com/css?family=Work Sans:100,200,300,400,500,600,700,800,900" rel="stylesheet" defer>
157<link href="//optique.co.za/cdn/shop/t/5/assets/theme.css?v=100286195149326868021763984616" rel="stylesheet" type="text/css" media="all" />
158
159<script src="//optique.co.za/cdn/shop/t/5/assets/jquery.min.js?v=146653844047132007351667511656" defer="defer"></script>
159<!-- Header hook for plugins ================================================== -->
160  
160<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
160<meta name="facebook-domain-verification" content="7z27r0ooxceam721gah1rdz42cqd8w">
161<meta name="google-site-verification" content="iLIxHm_d2YYs00kebos1ettslMP1IZ62dNSA-BIi6Bs">
162<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/57147555972/digital_wallets/dialog">
163<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="alternate" type="application/atom+xml" title="Feed" href="/blogs/news.atom" />
164<link rel="next" href="/blogs/news?page=2">
165<script async="async" src="/checkouts/internal/preloads.js?locale=en-ZA"></script>
vendor: 1 bytes, line 165
165
166<script id="shopify-features" type="application/json">{"accessToken":"7330c8cba6f340d0f8f76be6692c2a04","betas":["rich-media-storefront-analytics"],"domain":"optique.co.za","predictiveSearch":true,"shopId":57147555972,"locale":"en"}</script>
vendor: 1 bytes, line 166
166
167<script>var Shopify = Shopify || {};
168Shopify.shop = "optiqueoptometrists.myshopify.com";
169Shopify.locale = "en";
170Shopify.currency = {"active":"ZAR","rate":"1.0"};
171Shopify.country = "ZA";
172Shopify.theme = {"name":"Wokiee | OPTIMIZED","id":127972540548,"schema_name":"Wokiee","schema_version":"2.2.0 shopify 2.0","theme_store_id":null,"role":"main"};
173Shopify.theme.handle = "null";
174Shopify.theme.style = {"id":null,"handle":null};
175Shopify.cdnHost = "optique.co.za/cdn";
176Shopify.routes = Shopify.routes || {};
177Shopify.routes.root = "/";
178Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js";
179Shopify.SignInWithShop = Shopify.SignInWithShop || {};
180Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {};
181Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 181
181
182<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 182
182
183<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 183
183
184<script>
185  window.Shopify = window.Shopify || {};
186  window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {};
187  window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 };
188  window.Shopify.SignInWithShop.eligible = true;
189</script>
vendor: 1 bytes, line 189
189
190<script id="shop-js-analytics" type="application/json">{"pageType":"blog"}</script>
vendor: 1 bytes, line 190
190
191<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 191
191
192<script type="module">
193  await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js");
194
195  window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true});
196
197</script>
vendor: 1 bytes, line 197
197
198<script>
199  window.Shopify = window.Shopify || {};
200  if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {};
201  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"]};
202</script>
vendor: 1 bytes, line 202
202
203<script>(function() {
204  var isLoaded = false;
205  function asyncLoad() {
206    if (isLoaded) return;
207    isLoaded = true;
208    var urls = ["https:\/\/chimpstatic.com\/mcjs-connected\/js\/users\/3b0b40e6bf7e1e59f4cddf488\/8afdb807d0622b93c8d51ed31.js?shop=optiqueoptometrists.myshopify.com","https:\/\/embed.closeby.co\/v1.js?closeby.mapKey=f7a484e25c82468469b227367a59cb51\u0026shop=optiqueoptometrists.myshopify.com","https:\/\/script.pop-convert.com\/new-micro\/production.pc.min.js?unique_id=optiqueoptometrists.myshopify.com\u0026shop=optiqueoptometrists.myshopify.com","https:\/\/cdn.s3.pop-convert.com\/pcjs.production.min.js?unique_id=optiqueoptometrists.myshopify.com\u0026shop=optiqueoptometrists.myshopify.com"];
209    for (var i = 0; i < urls.length; i++) {
210      var s = document.createElement('script');
211      s.type = 'text/javascript';
212      s.async = true;
213      s.src = urls[i];
214      var x = document.getElementsByTagName('script')[0];
215      x.parentNode.insertBefore(s, x);
216    }
217  };
218  if(window.attachEvent) {
219    window.attachEvent('onload', asyncLoad);
220  } else {
221    window.addEventListener('load', asyncLoad, false);
222  }
223})();</script>
vendor: 1 bytes, line 223
223
224<script id="__st">var __st={"a":57147555972,"offset":7200,"reqid":"d61cc479-e8cb-45fd-b653-0bd55172b1fe-1791112358","pageurl":"optique.co.za\/blogs\/news","s":"blogs-79486648452","u":"4610e7acc763","p":"blog","rtyp":"blog","rid":79486648452};</script>
vendor: 1 bytes, line 224
224
225<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 225
225
226<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 226
226
227<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//optique.co.za/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 227
227
228<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 = "//optique.co.za/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>
228<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 228
228
229<script>
230  window.Shopify = window.Shopify || {};
231  window.Shopify.MCP = window.Shopify.MCP || {};
232  window.Shopify.MCP.enabled = true;
233  window.Shopify.MCP.shop = "optiqueoptometrists.myshopify.com";
234  window.Shopify.MCP.mcpEndpoint = "https:\/\/optique.co.za\/api\/mcp";
235  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"]}}];
236</script>
vendor: 1 bytes, line 236
236
237<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("\/\/optique.co.za\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})();
238</script>
vendor: 1 bytes, line 238
238
239<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://optique.co.za/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}};
240</script>
vendor: 1 bytes, line 240
240
241<script data-source-attribution="shopify.dynamic_checkout.buyer_consent">
242  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);
243</script>
vendor: 1 bytes, line 243
243
244<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})}}));
245</script>
vendor: 1 bytes, line 245
245
246<script id="sections-script" data-sections="promo-fixed" defer="defer" src="//optique.co.za/cdn/shop/t/5/compiled_assets/scripts.js?v=44968547983345904171739799352"></script>
vendor: 1 bytes, line 246
246
247<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
247
248  <!-- /Header hook for plugins ================================================== --><style>
249    .tt-flbtn.disabled{
250    opacity: 0.3;
251    }
252  </style>
253
254  
255<!--Gem_Page_Header_Script-->
256    
257
258
259<!--End_Gem_Page_Header_Script-->
260
261
262<!-- Clarity Code -->
263<script type="text/javascript">
264    (function(c,l,a,r,i,t,y){
265        c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
266        t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
267        y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
268    })(window, document, "clarity", "script", "6k3anrhu80");
269</script>
269
270  
271
272
273<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" type="text/css" media="all" />
274<link href="//optique.co.za/cdn/shop/t/5/assets/genie-storepickup.css?v=124706122008199981251750720086" rel="stylesheet" type="text/css" media="all" />
275<script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js" type="text/javascript"></script>
vendor: 1 bytes, line 275
275
276<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js" type="text/javascript"></script>
vendor: 1 bytes, line 276
276
277<script src="//optique.co.za/cdn/shop/t/5/assets/genie-storepickup-vender.js?v=41363972481628940391750720039" type="text/javascript"></script>
vendor: 1 bytes, line 277
277
278<script src="//optique.co.za/cdn/shop/t/5/assets/genie-storepickup.js?v=164050702589216178431750719656" type="text/javascript"></script>
vendor: 1 bytes, line 278
278
279<script>
280(function() {
281  var script = document.createElement('script');
282  script.setAttribute('data-project-id', '5e756503-e327-4eb2-a76e-75061474c3a6');
283  script.src = 'https://ingest.promptwatch.com/js/client.min.js';
284  document.head.appendChild(script);
285})();
286</script>
286
287<!-- BEGIN app block: shopify://apps/sk-whatsapp-chat-button/blocks/app-embed/f26357f3-3b4f-4ccc-8c8a-a4df2fc1dfc5 -->
287<script type="text/javascript">
288  window.whatsappchatsk = window.whatsappchatsk || {};
289  if(typeof(window.whatsappchatsk) != undefined) {
290    // The free widget's own style/position settings (icon, color, size,
291    // page rules, ...) still come from our manual metafield below. Once the
292    // AI assistant is connected, the go-live-computed app-data metafield
293    // `squadkin.whatsapp_config` ({enabled, phone}) takes over just the
294    // enabled/phone decision (per SHOPIFY_TEAM_CHANGES_GO_LIVE.md §2.6), so
295    // the button always shows the assistant's own connected number and
296    // hides itself the moment the assistant isn't ready never a second,
297    // conflicting on/off switch for the merchant to manage.
298    var skWaConfig = {};
299    try {
300      skWaConfig = JSON.parse("{\"phoneNumber\":\"+27 690 212 760\",\"useMultipleAgents\":false,\"agents\":[],\"contactChannels\":{\"email\":\"\",\"phone\":\"\",\"telegram\":\"\",\"instagram\":\"\"},\"iconOption\":\"option1\",\"selectedSize\":\"medium\",\"bgcolor\":\"#44CD66\",\"iconcolor\":\"#FFFFFF\",\"textcolor\":\"#fafafa\",\"bgHsbColors\":{\"hue\":100.18,\"alpha\":1,\"brightness\":0.625,\"saturation\":1},\"iconHsbColors\":{\"hue\":178.11,\"alpha\":1,\"brightness\":1,\"saturation\":0},\"textHsbColors\":{\"hue\":178.11,\"alpha\":1,\"brightness\":0.98,\"saturation\":0.003},\"bgcolorFormat\":\"HSB\",\"iconcolorFormat\":\"HSB\",\"textcolorFormat\":\"HSB\",\"logo_with_text\":\"WhatsApp\",\"logo_with_image\":\"https:\\\/\\\/cdn.shopify.com\\\/s\\\/files\\\/1\\\/0646\\\/2160\\\/9012\\\/files\\\/avatar-transparent.png?v=1716215930\",\"useCustomLogo\":false,\"customLogo\":\"\",\"iconalignment\":\"right_bottom\",\"disancefromtop\":6,\"disancefromleft\":7,\"disancefromright\":7,\"disancefrombottom\":17,\"iconModelPopup\":false,\"iconModelPopupHeaderHeading\":\"Support\",\"iconModelPopupHeaderResponseTime\":\"Typically replies within an hour\",\"iconModelPopupHeaderLogo\":\"https:\\\/\\\/cdn.shopify.com\\\/s\\\/files\\\/1\\\/0646\\\/2160\\\/9012\\\/files\\\/sample_image.jpg\",\"iconModelPopupChatText\":\"Hi there \\ud83d\\udc4b \u003cbr\u003e\u003cbr\u003e How can I help you today?\",\"devicevisible\":[\"mobile\",\"desktop\"],\"businessHoursEnabled\":false,\"businessHoursTimezone\":\"Africa\\\/Johannesburg\",\"businessHours\":{\"fri\":{\"open\":\"09:00\",\"close\":\"18:00\",\"enabled\":true},\"mon\":{\"open\":\"09:00\",\"close\":\"18:00\",\"enabled\":true},\"sat\":{\"open\":\"09:00\",\"close\":\"18:00\",\"enabled\":false},\"sun\":{\"open\":\"09:00\",\"close\":\"18:00\",\"enabled\":false},\"thu\":{\"open\":\"09:00\",\"close\":\"18:00\",\"enabled\":true},\"tue\":{\"open\":\"09:00\",\"close\":\"18:00\",\"enabled\":true},\"wed\":{\"open\":\"09:00\",\"close\":\"18:00\",\"enabled\":true}},\"offlineMessage\":\"We're offline right now. Please check back during our business hours! \\ud83d\\udd50\",\"gdprEnabled\":false,\"gdprText\":\"I agree to be contacted via WhatsApp\",\"pageRules\":{\"mode\":\"include\",\"rules\":[{\"type\":\"url_contains\",\"value\":\"https:\\\/\\\/optique.co.za\\\/collections\\\/contact-lenses\"}]},\"activateDefaultMessage\":true,\"defaultMessage\":\"Hi there, can you assist me on your website? {{ current_page_url }}\",\"chatInputPlaceholder\":\"\",\"greetingEnabled\":false,\"greetingText\":\"\",\"greetingDelay\":3,\"proactiveTrigger\":{\"type\":\"time\",\"delay\":5,\"enabled\":false,\"dontRepeat\":true,\"scrollPercent\":50},\"floatingLabelEnabled\":false,\"floatingLabelText\":\"Chat with us! \\ud83d\\udc4b\",\"floatingLabelDelay\":0,\"buttonShowDelay\":0,\"buttonAnimation\":true,\"buttonAnimationColor\":\"\",\"enableGoodAnalyticsTracking\":false,\"enableMetaPixelTracking\":false,\"rtlLayout\":false,\"customCss\":\"\"}" || 'null') || {};
301    } catch (e) {
302      skWaConfig = {};
303    }
304    // The backend writes squadkin.whatsapp_config with ownerId =
305    // currentAppInstallation.id (an AppInstallation-owned metafield), not
306    // the Shop resource, since Jay bhai's backend authenticates as this
307    // same Shopify app. `shop.metafields.*` only ever reads Shop-owned
308    // metafields, so that value is always nil there the correct read is
309    // through Liquid's `app.metafields`, which is scoped to this app's own
310    // AppInstallation.
311    //
312    // `app.metafields.squadkin.whatsapp_config` is the metafield object; its
313    // `.value` is the parsed JSON ({enabled, phone}). The value is encoded
314    // twice so it always lands here as a plain JS string, then parsed inside
315    // try/catch: whatever this outputs, it can never break the script and
316    // take the free widget's button down with it.
317    var skAiWidget = null;
318    try {
319      skAiWidget = JSON.parse("null");
320    } catch (e) {
321      skAiWidget = null;
322    }
323    // Only take over once the assistant has actually connected a real number
324    // (skAiWidget.phone set). A shop that never touched WhatsApp AI still
325    // gets this metafield written by the backend (defaulting to
326    // enabled:false, phone:null), so treating its mere presence as "hide the
327    // button" would break the free widget for every merchant who never
328    // opted into the AI assistant at all.
329    var skAiLive = !!(skAiWidget && skAiWidget.enabled && skAiWidget.phone);
330    if (skWaConfig.useMultipleAgents) {
331      // Multiple agents: the AI assistant is one agent in the list, with its
332      // number from WhatsApp AI Automation and name/avatar/pages/visibility
333      // from the merchant's saved AI agent (or these defaults, kept in step
334      // with DEFAULT_AI_AGENT in resources/js/components/Settings/ContactTab.jsx).
335      // It's removed whenever the AI isn't live (disconnected, paused, plan or
336      // free limit reached) or the merchant hid it; human agents and the main
337      // number stay as the merchant set them.
338      var skAgents = Array.isArray(skWaConfig.agents) ? skWaConfig.agents : [];
339      var skAiIndex = -1;
340      for (var i = 0; i < skAgents.length; i++) {
341        if (skAgents[i] && skAgents[i].isAi) { skAiIndex = i; break; }
342      }
343      var skAiSaved = skAiIndex >= 0 ? skAgents[skAiIndex] : null;
344      var skHumans = [];
345      for (var j = 0; j < skAgents.length; j++) {
346        if (skAgents[j] && !skAgents[j].isAi) skHumans.push(skAgents[j]);
347      }
348      if (skAiLive && !(skAiSaved && skAiSaved.hidden)) {
349        var skAiAgent = {
350          id: 'ai-assistant',
351          name: 'AI Shopping Assistant',
352          title: 'Replies instantly, 24/7',
353          avatar: '',
354          greeting: 'Hi! I can help you with products, stock and your order.',
355          pages: []
356        };
357        if (skAiSaved) {
358          for (var k in skAiSaved) {
359            if (Object.prototype.hasOwnProperty.call(skAiSaved, k)) skAiAgent[k] = skAiSaved[k];
360          }
361        }
362        skAiAgent.isAi = true;
363        skAiAgent.phone = skAiWidget.phone;
364        skHumans.unshift(skAiAgent);
365      }
366      skWaConfig.agents = skHumans;
367    } else if (skAiWidget && skAiWidget.phone) {
368      skWaConfig.phoneNumber = skAiWidget.enabled ? skAiWidget.phone : null;
369    }
370    window.whatsappchatsk = {
371      configurations: skWaConfig,
372      appDomain: "https:\/\/whatsappmarketing.magento2extensions.com",
373      shopDomain: "optiqueoptometrists.myshopify.com"
374    };
375  }
376</script>
376
377
378<style>
379
380</style><!-- END app block -->
380<script src="https://cdn.shopify.com/extensions/01a0f217-4010-71ad-9a7f-80dd70c19699/whatsapp-chat-button-squadkin-76/assets/tsdjsdfkasfdiajhdcknakjcnijwe.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 380
380
381<script src="https://cdn.shopify.com/extensions/01a0aa7a-f99f-7ab6-a36e-9673fd70d8d4/omnisend-57/assets/omnisend-in-shop.js" type="text/javascript" defer="defer"></script>
381
382<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
383<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: 57147555972,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "blog"};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 383
383
384<script>
385  window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || [];
386</script>
vendor: 1 bytes, line 386
386
387<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}
387).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: 57147555972,storefrontBaseUrl: "https://optique.co.za",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://optique.co.za/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2398683268","configuration":"{\"apiURL\":\"https:\/\/api.omnisend.com\",\"appURL\":\"https:\/\/app.omnisend.com\",\"brandID\":\"68aef96417ed960e3182f4d3\",\"trackingURL\":\"https:\/\/wt.omnisendlink.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"1e2b45bbee5b360dff908f60423b89f8","type":"APP","apiClientId":186001,"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":"243138692","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"GT-KVN3DKW\\\"],\\\"target_country\\\":\\\"ZA\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"AW-619028685\\\/m_TsCJHq_YIYEM3BlqcC\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"AW-619028685\\\/ioHNCJTq_YIYEM3BlqcC\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-5SQ6XZNC6M\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"AW-619028685\\\/MfWdCIvq_YIYEM3BlqcC\\\",\\\"MC-FYPFYVS956\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-5SQ6XZNC6M\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"AW-619028685\\\/nGYwCIjq_YIYEM3BlqcC\\\",\\\"MC-FYPFYVS956\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"AW-619028685\\\/KE_wCIXq_YIYEM3BlqcC\\\",\\\"MC-FYPFYVS956\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-5SQ6XZNC6M\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"AW-619028685\\\/C_gNCJfq_YIYEM3BlqcC\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"AW-619028685\\\/e1ZpCI7q_YIYEM3BlqcC\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-5SQ6XZNC6M\\\"}],\\\"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":"77529220","configuration":"{\"pixel_id\":\"3317481815158323\",\"pixel_type\":\"facebook_pixel\",\"metaapp_system_user_token\":\"-\"}","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":"28475524","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":[],"name":"New GTM Datalayer"},{"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":"Optique Optometrists","paymentSettings":{"currencyCode":"ZAR"},"myshopifyDomain":"optiqueoptometrists.myshopify.com","countryCode":"ZA","storefrontUrl":"https:\/\/optique.co.za"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://optique.co.za/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"127972540548","themePublished":"true","eventMetadataId":"fc70084a-3c63-4d16-9369-fecd5483bb3a","pageType":"blog","resourceId":"79486648452","shopId":"57147555972","storefrontBaseUrl":"https:\/\/optique.co.za","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
387<script>
388  window.ShopifyAnalytics = window.ShopifyAnalytics || {};
389  window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
390  window.ShopifyAnalytics.meta.currency = 'ZAR';
391  var meta = {"page":{"pageType":"blog","resourceType":"blog","resourceId":79486648452,"requestId":"d61cc479-e8cb-45fd-b653-0bd55172b1fe-1791112358"}};
392  for (var attr in meta) {
393    window.ShopifyAnalytics.meta[attr] = meta[attr];
394  }
395</script>
vendor: 1 bytes, line 395
395
396<script class="analytics">
397  (function () {
398    var customDocumentWrite = function(content) {
399      var jquery = null;
400
401      if (window.jQuery) {
402        jquery = window.jQuery;
403      } else if (window.Checkout && window.Checkout.$) {
404        jquery = window.Checkout.$;
405      }
406
407      if (jquery) {
408        jquery('body').append(content);
409      }
410    };
411
412    var hasLoggedConversion = function(token) {
413      if (token) {
414        return document.cookie.indexOf('loggedConversion=' + token) !== -1;
415      }
416      return false;
417    }
418
419    var setCookieIfConversion = function(token) {
420      if (token) {
421        var twoMonthsFromNow = new Date(Date.now());
422        twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2);
423
424        document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow;
425      }
426    }
427
428    var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || [];
429    window.ShopifyAnalytics.lib.trekkie = window.trekkie;
430    if (trekkie.integrations) {
431      return;
432    }
433    trekkie.methods = [
434      'identify',
435      'page',
436      'ready',
437      'track',
438      'trackForm',
439      'trackLink'
440    ];
441    trekkie.factory = function(method) {
442      return function() {
443        var args = Array.prototype.slice.call(arguments);
444        args.unshift(method);
445        trekkie.push(args);
446        if (method == 'track' || method == 'page') {
447          var pageUrl;
448          try {
449            pageUrl = window.location.href;
450          } catch (e) {}
451          var pageReferrer;
452          try {
453            pageReferrer = document.referrer;
454          } catch (e) {}
455          try {
456            if (window.__TREKKIE_SHIM_QUEUE == null) {
457              window.__TREKKIE_SHIM_QUEUE = [];
458            }
459            window.__TREKKIE_SHIM_QUEUE.push({
460              from: 'trekkie-stub',
461              method: method,
462              args: args.slice(1),
463              pageContext: {
464                url: pageUrl,
465                referrer: pageReferrer
466              }
467            });
468          } catch (e) {
469            // no-op
470          }
471        }
472        return trekkie;
473      };
474    };
475    for (var i = 0; i < trekkie.methods.length; i++) {
476      var key = trekkie.methods[i];
477      trekkie[key] = trekkie.factory(key);
478    }
479    trekkie.load = function(config) {
480      trekkie.config = config || {};
481      trekkie.config.initialDocumentCookie = document.cookie;
482      var first = document.getElementsByTagName('script')[0];
483var script = document.createElement('script');
484script.type = 'text/javascript';
485script.onerror = function(e) {
486  var scriptFallback = document.createElement('script');
487  scriptFallback.type = 'text/javascript';
488  scriptFallback.onerror = function(error) {
489          var Monorail = {
490      produce: function produce(monorailDomain, schemaId, payload) {
491        var currentMs = new Date().getTime();
492        var event = {
493          schema_id: schemaId,
494          payload: payload,
495          metadata: {
496            event_created_at_ms: currentMs,
497            event_sent_at_ms: currentMs
498          }
499        };
500        return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event));
501      },
502      sendRequest: function sendRequest(endpointUrl, payload) {
503        // Try the sendBeacon API
504        if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) {
505          var blobData = new window.Blob([payload], {
506            type: 'text/plain'
507          });
508
509          if (window.navigator.sendBeacon(endpointUrl, blobData)) {
510            return true;
511          } // sendBeacon was not successful
512
513        } // XHR beacon
514
515        var xhr = new XMLHttpRequest();
516
517        try {
518          xhr.open('POST', endpointUrl);
519          xhr.setRequestHeader('Content-Type', 'text/plain');
520          xhr.send(payload);
521        } catch (e) {
522          console.log(e);
523        }
524
525        return false;
526      },
527      isIos12: function isIos12() {
528        return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1;
529      }
530    };
531    Monorail.produce('monorail-edge.shopifysvc.com',
532      'trekkie_storefront_load_errors/1.1',
533      {shop_id: 57147555972,
534      theme_id: 127972540548,
535      app_name: "storefront",
536      context_url: window.location.href,
537      source_url: "//optique.co.za/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"});
538
539  };
540  scriptFallback.async = true;
541  scriptFallback.src = '//optique.co.za/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js';
542  first.parentNode.insertBefore(scriptFallback, first);
543};
544script.async = true;
545script.src = '//optique.co.za/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js';
546first.parentNode.insertBefore(script, first);
547
548    };
549    trekkie.load(
550      {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":57147555972,"isMerchantRequest":null,"themeId":127972540548,"themeCityHash":"2704458628052749461","contentLanguage":"en","currency":"ZAR","eventMetadataId":"fc70084a-3c63-4d16-9369-fecd5483bb3a"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}}
551    );
552
553    var loaded = false;
554    trekkie.ready(function() {
555      if (loaded) return;
556      loaded = true;
557
558      window.ShopifyAnalytics.lib = window.trekkie;
559
560      var originalDocumentWrite = document.write;
561      document.write = customDocumentWrite;
562      try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {};
563      document.write = originalDocumentWrite;
564
565      var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/)
566      var token = match? match[1]: undefined;
567      if (!hasLoggedConversion(token)) {
568        setCookieIfConversion(token);
569        
570      }
571    });
572
573    window.ShopifyAnalytics.lib.page(null,{"pageType":"blog","resourceType":"blog","resourceId":79486648452,"requestId":"d61cc479-e8cb-45fd-b653-0bd55172b1fe-1791112358","shopifyEmitted":true});
574
575    var eventsListenerScript = document.createElement('script');
576    eventsListenerScript.async = true;
577    eventsListenerScript.src = "//optique.co.za/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js";
578    document.getElementsByTagName('head')[0].appendChild(eventsListenerScript);
579})();</script>
579
580  
580<script>
581  if (!window.ga || (window.ga && typeof window.ga !== 'function')) {
582    window.ga = function ga() {
583      (window.ga.q = window.ga.q || []).push(arguments);
584      if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {
585        window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"});
586      }
587      console.error("Shopify's Google Analytics stub called with:", Array.from(arguments), "\nSee https://help.shopify.com/manual/promoting-marketing/pixels/pixel-migration#google for more information.");
588    };
589    if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {
590      window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"});
591    }
592  }
593</script>
vendor: 1 bytes, line 593
593
594<script
595  defer
596  src="https://optique.co.za/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js"
597  data-application="storefront-renderer"
598  data-shop-id="57147555972"
599  data-render-region="gcp-us-central1"
600  data-page-type="blog"
601  data-theme-instance-id="127972540548"
602  data-theme-name="Wokiee"
603  data-theme-version="2.2.0 shopify 2.0"
604  data-monorail-region="shop_domain"
605  data-resource-timing-sampling-rate="10"
606  data-shs="true"
607  data-shs-beacon="true"
608  data-shs-export-with-fetch="true"
609  data-shs-logs-sample-rate="1"
610  data-shs-beacon-endpoint="https://optique.co.za/api/collect"
611></script>
611
612<meta name="shopify-y" content="c68f53bc-9869-4107-9ddf-941951623d03" data-expiration="1822669958000"><meta name="shopify-s" content="db333abd-ad20-4168-80c0-d76d1f92537e" data-expiration="1791114158000"><meta name="new-cookie-storage-activated" content="t">
613</head>
614<body class="pageblog" 
615      ><div id="shopify-section-show-helper" class="shopify-section"></div><div id="shopify-section-header-template" class="shopify-section"><header class="desctop-menu-large small-header tt-hover-03"><nav class="panel-menu mobile-main-menu">
616  <ul><li>
617      <a href="/">HOME</a></li><li>
618      <a href="/pages/book-a-r99-eye-test-online">EYE TEST</a><ul><li>
619          <a href="/pages/book-a-r99-eye-test-online">book online</a></li><li>
620          <a href="/pages/book-a-r99-eye-test-online">branches</a></li><li>
621          <a href="/pages/r99-eye-test">why is our eye test only R99?</a></li><li>
622          <a href="/pages/what-is-it-like-getting-an-eye-test">what's an eye test like @ Optique?</a></li></ul></li><li>
623      <a href="/pages/pricing">PRICES</a><ul><li>
624          <a href="/pages/pricing">prices</a></li><li>
625          <a href="/pages/payment-options-2">payment options</a></li></ul></li><li>
626      <a href="/collections/frames">FRAMES</a><ul><li>
627          <a href="https://optique.co.za/collections/frames">ALL FRAMES</a><ul><li><a href="https://optique.co.za/collections/frames?filter.p.m.custom.gender=women">WOMEN</a></li><li><a href="https://optique.co.za/collections/frames?filter.p.m.custom.gender=men">MEN</a></li></ul></li><li>
628          <a href="https://optique.co.za/collections/frames">SIZE</a><ul><li><a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_size=small">SMALL</a></li><li><a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_size=medium">MEDIUM</a></li><li><a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_size=large">LARGE</a></li></ul></li><li>
629          <a href="https://optique.co.za/collections/frames">MATERIAL TYPE</a><ul><li><a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_material=acetate">ACETATE</a></li><li><a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_material=metal">METAL</a></li></ul></li></ul></li><li>
630      <a href="/pages/essilor">LENSES</a><ul><li>
631          <a href="/pages/essilor">our supplier | essilor</a></li><li>
632          <a href="/pages/anti-reflective-coating">our coating | crizal easy®</a></li><li>
633          <a href="/pages/multifocal-lenses">our multifocal | Optique DS</a></li><li>
634          <a href="/pages/self-tinting-lenses">self-tinting lenses | transitions®</a></li><li>
635          <a href="/pages/blue-light-protection">blue-light | crizal prevencia®</a></li><li>
636          <a href="/pages/accommodative-support-lenses">digital lenses | eyeZen® </a></li></ul></li><li>
637      <a href="/collections/contact-lenses">CONTACT LENSES</a><ul><li>
638          <a href="/pages/cooper-vision">our supplier | cooper vision</a></li><li>
639          <a href="/collections/contact-lenses">online store</a></li></ul></li><li>
640      <a href="/pages/the-story-of-the-most-affordable-eye-care-in-south-africa">MORE</a><ul><li>
641          <a href="/pages/faq">faq's</a></li><li>
642          <a href="/pages/our-why">our why</a></li><li>
643          <a href="/pages/reviews-and-testimonials">our reviews</a></li><li>
644          <a href="/pages/ambassadors">famous fans</a></li><li>
645          <a href="/pages/book-a-r99-eye-test-online">our branches</a></li><li>
646          <a href="/pages/optique-optometrists-vision-and-values">vision & values</a></li><li>
647          <a href="/pages/join-our-team">work @ Optique</a></li><li>
648          <a href="/pages/accountability-and-transparency">accountability meter</a></li><li>
649          <a href="/pages/other-services-we-offer-at-optique-optometrists">other services we offer</a></li><li>
650          <a href="/pages/what-makes-us-different">what makes us different</a></li><li>
651          <a href="/pages/the-story-of-the-most-affordable-eye-care-in-south-africa">the story behind optique</a></li></ul></li></ul>
652</nav><!-- tt-mobile-header -->
653<div class="tt-mobile-header tt-mobile-header-inline tt-mobile-header-inline-stuck">
654  <div class="container-fluid">
655    <div class="tt-header-row">
656      <div class="tt-mobile-parent-menu">
657        <div class="tt-menu-toggle mainmenumob-js">
658          <svg width="17" height="15" viewBox="0 0 17 15" fill="none" xmlns="http://www.w3.org/2000/svg">
659<path d="M16.4023 0.292969C16.4935 0.397135 16.5651 0.507812 16.6172 0.625C16.6693 0.742188 16.6953 0.865885 16.6953 0.996094C16.6953 1.13932 16.6693 1.26953 16.6172 1.38672C16.5651 1.50391 16.4935 1.60807 16.4023 1.69922C16.2982 1.80339 16.1875 1.88151 16.0703 1.93359C15.9531 1.97266 15.8294 1.99219 15.6992 1.99219H1.69531C1.55208 1.99219 1.42188 1.97266 1.30469 1.93359C1.1875 1.88151 1.08333 1.80339 0.992188 1.69922C0.888021 1.60807 0.809896 1.50391 0.757812 1.38672C0.71875 1.26953 0.699219 1.13932 0.699219 0.996094C0.699219 0.865885 0.71875 0.742188 0.757812 0.625C0.809896 0.507812 0.888021 0.397135 0.992188 0.292969C1.08333 0.201823 1.1875 0.130208 1.30469 0.078125C1.42188 0.0260417 1.55208 0 1.69531 0H15.6992C15.8294 0 15.9531 0.0260417 16.0703 0.078125C16.1875 0.130208 16.2982 0.201823 16.4023 0.292969ZM16.4023 6.28906C16.4935 6.39323 16.5651 6.50391 16.6172 6.62109C16.6693 6.73828 16.6953 6.86198 16.6953 6.99219C16.6953 7.13542 16.6693 7.26562 16.6172 7.38281C16.5651 7.5 16.4935 7.60417 16.4023 7.69531C16.2982 7.79948 16.1875 7.8776 16.0703 7.92969C15.9531 7.98177 15.8294 8.00781 15.6992 8.00781H1.69531C1.55208 8.00781 1.42188 7.98177 1.30469 7.92969C1.1875 7.8776 1.08333 7.79948 0.992188 7.69531C0.888021 7.60417 0.809896 7.5 0.757812 7.38281C0.71875 7.26562 0.699219 7.13542 0.699219 6.99219C0.699219 6.86198 0.71875 6.73828 0.757812 6.62109C0.809896 6.50391 0.888021 6.39323 0.992188 6.28906C1.08333 6.19792 1.1875 6.1263 1.30469 6.07422C1.42188 6.02214 1.55208 5.99609 1.69531 5.99609H15.6992C15.8294 5.99609 15.9531 6.02214 16.0703 6.07422C16.1875 6.1263 16.2982 6.19792 16.4023 6.28906ZM16.4023 12.3047C16.4935 12.3958 16.5651 12.5 16.6172 12.6172C16.6693 12.7344 16.6953 12.8646 16.6953 13.0078C16.6953 13.138 16.6693 13.2617 16.6172 13.3789C16.5651 13.4961 16.4935 13.6068 16.4023 13.7109C16.2982 13.8021 16.1875 13.8737 16.0703 13.9258C15.9531 13.9779 15.8294 14.0039 15.6992 14.0039H1.69531C1.55208 14.0039 1.42188 13.9779 1.30469 13.9258C1.1875 13.8737 1.08333 13.8021 0.992188 13.7109C0.888021 13.6068 0.809896 13.4961 0.757812 13.3789C0.71875 13.2617 0.699219 13.138 0.699219 13.0078C0.699219 12.8646 0.71875 12.7344 0.757812 12.6172C0.809896 12.5 0.888021 12.3958 0.992188 12.3047C1.08333 12.2005 1.1875 12.1224 1.30469 12.0703C1.42188 12.0182 1.55208 11.9922 1.69531 11.9922H15.6992C15.8294 11.9922 15.9531 12.0182 16.0703 12.0703C16.1875 12.1224 16.2982 12.2005 16.4023 12.3047Z" fill="#191919"/>
660</svg>
661        </div>
662      </div>
663      
664      <div class="tt-logo-container">
665        <a class="tt-logo tt-logo-alignment" href="/"><img src="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_95x.png?v=1662381977"
666                           srcset="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_95x.png?v=1662381977 1x, //optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_190x.png?v=1662381977 2x"
667                           alt=""
668                           class="tt-retina"></a>
669      </div>
670      
671      <div class="tt-mobile-parent-menu-icons">
672        <!-- search -->
673        <div class="tt-mobile-parent-search tt-parent-box"></div>
674        <!-- /search --><!-- cart -->
675        <div class="tt-mobile-parent-cart tt-parent-box"></div>
676        <!-- /cart --></div>
677
678      
679      
680    </div>
681  </div>
682</div>
683  
684  <!-- tt-desktop-header -->
685  <div class="tt-desktop-header">
686
687    
688    
689    <div class="container-fluid">
690      <div class="tt-header-holder">
691
692        
693        <div class="tt-col-obj tt-obj-logo
694" itemscope itemtype="http://schema.org/Organization"><a href="/" class="tt-logo" itemprop="url"><img src="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_c25193ff-565c-484c-b519-eb0e7c254719_175x.png?v=1662382006"
695                   srcset="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_c25193ff-565c-484c-b519-eb0e7c254719_175x.png?v=1662382006 1x, //optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_c25193ff-565c-484c-b519-eb0e7c254719_350x.png?v=1662382006 2x"
696                   alt=""
697                   class="tt-retina" itemprop="logo" style="top:0px"/></a></div><div class="tt-col-obj tt-obj-menu obj-aligment-left">
698          <!-- tt-menu -->
699          <div class="tt-desctop-parent-menu tt-parent-box">
700            <div class="tt-desctop-menu"><nav>
701  <ul><li class="dropdown tt-megamenu-col-01" >
702      <a href="/"><span>HOME</span></a></li><li class="dropdown tt-megamenu-col-01 submenuarrow" >
703      <a href="/pages/book-a-r99-eye-test-online"><span>EYE TEST</span></a><div class="dropdown-menu">
704  <div class="row tt-col-list">
705    <div class="col">
706      <ul class="tt-megamenu-submenu tt-megamenu-preview"><li><a href="/pages/book-a-r99-eye-test-online"><span>book online</span></a></li><li><a href="/pages/book-a-r99-eye-test-online"><span>branches</span></a></li><li><a href="/pages/r99-eye-test"><span>why is our eye test only R99?</span></a></li><li><a href="/pages/what-is-it-like-getting-an-eye-test"><span>what's an eye test like @ Optique?</span></a></li></ul>
707    </div>
708  </div>
709</div></li><li class="dropdown tt-megamenu-col-01 submenuarrow" >
710      <a href="/pages/pricing"><span>PRICES</span></a><div class="dropdown-menu">
711  <div class="row tt-col-list">
712    <div class="col">
713      <ul class="tt-megamenu-submenu tt-megamenu-preview"><li><a href="/pages/pricing"><span>prices</span></a></li><li><a href="/pages/payment-options-2"><span>payment options</span></a></li></ul>
714    </div>
715  </div>
716</div></li><li class="dropdown megamenu submenuarrow" >
717      <a href="/collections/frames"><span>FRAMES</span></a><div class="dropdown-menu">
718  <div class="row">
719    <div class="col-sm-12">
720      <div class="row tt-col-list"><div class="col-sm-4">
721          <a href="https://optique.co.za/collections/frames" class="tt-title-submenu">
722            ALL FRAMES
723</a><ul class="tt-megamenu-submenu"><li>
724              <a href="https://optique.co.za/collections/frames?filter.p.m.custom.gender=women"><span>WOMEN</span></a></li><li>
725              <a href="https://optique.co.za/collections/frames?filter.p.m.custom.gender=men"><span>MEN</span></a></li></ul></div><div class="col-sm-4">
726          <a href="https://optique.co.za/collections/frames" class="tt-title-submenu">
727            SIZE
728</a><ul class="tt-megamenu-submenu"><li>
729              <a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_size=small"><span>SMALL</span></a></li><li>
730              <a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_size=medium"><span>MEDIUM</span></a></li><li>
731              <a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_size=large"><span>LARGE</span></a></li></ul></div><div class="col-sm-4">
732          <a href="https://optique.co.za/collections/frames" class="tt-title-submenu">
733            MATERIAL TYPE
734</a><ul class="tt-megamenu-submenu"><li>
735              <a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_material=acetate"><span>ACETATE</span></a></li><li>
736              <a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_material=metal"><span>METAL</span></a></li></ul></div></div>
737    </div></div><div class="row"><div class="col-sm-6">
738      <a href="https://optique.co.za/collections/frames?filter.p.m.custom.gender=men" class="tt-promo-02"><img class="lazyload"
739             data-src="//optique.co.za/cdn/shop/files/1_2c600bbd-4b7a-4e1d-8ecf-8132874e3bfa_560x.png?v=1748958909"
740             alt=""/><div class="tt-description tt-point-h-l">
741          <div class="tt-description-wrapper"><div class="tt-title-small" style="color:#ffffff">
741NEW <span class="tt-base-color">COLLECTION</span></div><div class="tt-title-large" style="color:#ffffff">SHOP MEN</div></div>
742        </div>
743      </a>
744    </div><div class="col-sm-6">
745      <a href="https://optique.co.za/collections/frames?filter.p.m.custom.gender=women" class="tt-promo-02"><img class="lazyload"
746             data-src="//optique.co.za/cdn/shop/files/2_b9bee080-74c8-4fb1-95ef-59aa8a07fc66_560x.png?v=1748958909"
747             alt=""/><div class="tt-description tt-point-h-l">
748          <div class="tt-description-wrapper"><div class="tt-title-small" style="color:#ffffff">NEW <span class="tt-base-color">COLLECTION</span></div><div class="tt-title-large" style="color:#ffffff">SHOP WOMEN</div></div>
749        </div>
750      </a>
751    </div></div></div></li><li class="dropdown tt-megamenu-col-01 submenuarrow" >
752      <a href="/pages/essilor"><span>LENSES</span></a><div class="dropdown-menu">
753  <div class="row tt-col-list">
754    <div class="col">
755      <ul class="tt-megamenu-submenu tt-megamenu-preview"><li><a href="/pages/essilor"><span>our supplier | essilor</span></a></li><li><a href="/pages/anti-reflective-coating"><span>our coating | crizal easy®</span></a></li><li><a href="/pages/multifocal-lenses"><span>our multifocal | Optique DS</span></a></li><li><a href="/pages/self-tinting-lenses"><span>self-tinting lenses | transitions®</span></a></li><li><a href="/pages/blue-light-protection"><span>blue-light | crizal prevencia®</span></a></li><li><a href="/pages/accommodative-support-lenses"><span>digital lenses | eyeZen® </span></a></li></ul>
756    </div>
757  </div>
758</div></li><li class="dropdown tt-megamenu-col-01 submenuarrow" >
759      <a href="/collections/contact-lenses"><span>CONTACT LENSES</span></a><div class="dropdown-menu">
760  <div class="row tt-col-list">
761    <div class="col">
762      <ul class="tt-megamenu-submenu tt-megamenu-preview"><li><a href="/pages/cooper-vision"><span>our supplier | cooper vision</span></a></li><li><a href="/collections/contact-lenses"><span>online store</span></a></li></ul>
763    </div>
764  </div>
765</div></li><li class="dropdown tt-megamenu-col-01 submenuarrow" >
766      <a href="/pages/the-story-of-the-most-affordable-eye-care-in-south-africa"><span>MORE</span></a><div class="dropdown-menu">
767  <div class="row tt-col-list">
768    <div class="col">
769      <ul class="tt-megamenu-submenu tt-megamenu-preview"><li><a href="/pages/faq"><span>faq's</span></a></li><li><a href="/pages/our-why"><span>our why</span></a></li><li><a href="/pages/reviews-and-testimonials"><span>our reviews</span></a></li><li><a href="/pages/ambassadors"><span>famous fans</span></a></li><li><a href="/pages/book-a-r99-eye-test-online"><span>our branches</span></a></li><li><a href="/pages/optique-optometrists-vision-and-values"><span>vision & values</span></a></li><li><a href="/pages/join-our-team"><span>work @ Optique</span></a></li><li><a href="/pages/accountability-and-transparency"><span>accountability meter</span></a></li><li>
769<a href="/pages/other-services-we-offer-at-optique-optometrists"><span>other services we offer</span></a></li><li><a href="/pages/what-makes-us-different"><span>what makes us different</span></a></li><li><a href="/pages/the-story-of-the-most-affordable-eye-care-in-south-africa"><span>the story behind optique</span></a></li></ul>
770    </div>
771  </div>
772</div></li></ul>
773</nav></div>
774          </div>
775        </div>
776
777        <div class="tt-col-obj tt-obj-options obj-move-right"><div class="tt-parent-box tt-desctop-parent-headtype1">
778  <div class="tt-search-opened-headtype1 headerformplaceholderstyles">
779    <form action="/search" method="get" role="search">
780      <button type="submit" class="tt-btn-search">
781        <i class="icon-f-85"></i>
782      </button>
783      <input class="tt-search-input"
784             type="search"
785             name="q"
786             placeholder="search products...">
787      <input type="hidden" name="type" value="product" />
788    </form>
789  </div>
790</div>
791
792<!-- tt-search -->
793<div class="tt-desctop-parent-search tt-parent-box serchisopen">
794  <div class="tt-search tt-dropdown-obj">
795    <button class="tt-dropdown-toggle"
796            data-tooltip="search"
797            data-tposition="bottom"
798            >
799      <i class="icon-f-85"></i>
800    </button>
801    <div class="tt-dropdown-menu">
802      <div class="container">
803        <form action="/search" method="get" role="search">
804          <div class="tt-col">
805            <input type="hidden" name="type" value="product" />
806            <input class="tt-search-input"
807                   type="search"
808                   name="q"
809                   placeholder="search products..."
810                   aria-label="search products...">
811            <button type="submit" class="tt-btn-search"></button>
812          </div>
813          <div class="tt-col">
814            <button class="tt-btn-close icon-f-84"></button>
815          </div>
816          <div class="tt-info-text">what are you looking for?</div>
817        </form>
818      </div>
819    </div>
820  </div>
821</div>
822<!-- /tt-search --><!-- tt-cart -->
823<div class="tt-desctop-parent-cart tt-parent-box">
824  <div class="tt-cart tt-dropdown-obj">
825    <button class="tt-dropdown-toggle"
826            data-tooltip="cart"
827            data-tposition="bottom"
828            >
829      
830
831      
832      <i class="icon-f-39"></i>
833      
834      <span class="tt-text">
835      
836      </span>
837      <span class="tt-badge-cart hide">0</span>
838      
839            
840    </button>
841
842    <div class="tt-dropdown-menu">
843      <div class="tt-mobile-add">
844        <h6 class="tt-title">SHOPPING CART</h6>
845        <button class="tt-close">CLOSE</button>
846      </div>
847      <div class="tt-dropdown-inner">
848        <div class="tt-cart-layout">
849          <div class="tt-cart-content">
850
851            <a href="/cart" class="tt-cart-empty" title="VIEW CART">
852              <i class="icon-f-39"></i>
853              <p>No Products in the Cart</p>
854            </a>
855            
856            <div class="tt-cart-box hide">
857              <div class="tt-cart-list"></div>
858              <div class="flex-align-center header-cart-more-message-js" style="display: none;">
859                <a href="/cart" class="btn-link-02" title="View cart">. . .</a>
860              </div>
861              <div class="tt-cart-total-row">
862                <div class="tt-cart-total-title">TOTAL:</div>
863                <div class="tt-cart-total-price">R 0.00</div>
864              </div>
865              
866              <div class="checkbox-group m-term-conditions-checkbox term-conditions-checkbox-js">
867                <input type="checkbox" id="cart-term-conditions-checkbox" value="1">
868                <label for="cart-term-conditions-checkbox">
869                  <span class="check"></span>
870                  <span class="box"></span>
871                  I agree with the terms and conditions
872                </label>
873              </div>
874              
875              <div class="tt-cart-btn">
876                
877                <div class="tt-item">
878                  <a href="/cart" class="btn-link-02">VIEW CART</a>
879                </div>
880              </div>
881            </div>
882
883          </div>
884        </div>
885      </div><div class='item-html-js hide'>
886  <div class="tt-item">
887    <a href="#" title="View Product">
888      <div class="tt-item-img">
889        img
890      </div>
891      <div class="tt-item-descriptions">
892        <h2 class="tt-title">title</h2>
893
894        <ul class="tt-add-info">
895          <li class="details">
895details</li>
896        </ul>
897
898        <div class="tt-quantity"><span class="qty">qty</span> X</div> <div class="tt-price">price</div>
899      </div>
900    </a>
901    <div class="tt-item-close">
902      <a href="/cart/change?id=0&quantity=0" class="tt-btn-close svg-icon-delete header_delete_cartitem_js" title="Delete">
903        <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
904     viewBox="0 0 22 22" style="enable-background:new 0 0 22 22;" xml:space="preserve">
905  <g>
906    <path d="M3.6,21.1c-0.1-0.1-0.2-0.3-0.2-0.4v-15H2.2C2,5.7,1.9,5.6,1.7,5.5C1.6,5.4,1.6,5.2,1.6,5.1c0-0.2,0.1-0.3,0.2-0.4
907             C1.9,4.5,2,4.4,2.2,4.4h5V1.9c0-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.3-0.2,0.4-0.2h6.3c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.3,0.2,0.4
908             v2.5h5c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.3,0.2,0.4c0,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.2-0.4,0.2h-1.3v15
909             c0,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.2-0.4,0.2H4.1C3.9,21.3,3.7,21.2,3.6,21.1z M17.2,5.7H4.7v14.4h12.5V5.7z M8.3,9
910             c0.1,0.1,0.2,0.3,0.2,0.4v6.9c0,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.2-0.4,0.2s-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.3-0.2-0.4V9.4
911             c0-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.3-0.2,0.4-0.2S8.1,8.9,8.3,9z M8.4,4.4h5V2.6h-5V4.4z M11.4,9c0.1,0.1,0.2,0.3,0.2,0.4v6.9
912             c0,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.2-0.4,0.2s-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.3-0.2-0.4V9.4c0-0.2,0.1-0.3,0.2-0.4
913             c0.1-0.1,0.3-0.2,0.4-0.2S11.3,8.9,11.4,9z M13.6,9c0.1-0.1,0.3-0.2,0.4-0.2s0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.3,0.2,0.4v6.9
914             c0,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.2-0.4,0.2s-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.3-0.2-0.4V9.4C13.4,9.3,13.5,9.1,13.6,9z"/>
915  </g>
916</svg>
917      </a>
918    </div>
919  </div>
920</div></div>
921  </div>
922</div>
923<!-- /tt-cart --><!-- tt-account -->
924<div class="tt-desctop-parent-account tt-parent-box">
925  <div class="tt-account tt-dropdown-obj">
926    <button class="tt-dropdown-toggle"
927            data-tooltip="my account"
928            data-tposition="bottom"
929            >
930      <i class="icon-f-94"></i>
931      
932    </button>
933    <div class="tt-dropdown-menu">
934      <div class="tt-mobile-add">
935        <button class="tt-close">close</button>
936      </div>
937      <div class="tt-dropdown-inner">
938        <ul><li><a href="https://optique.co.za/customer_authentication/redirect?locale=en&region_country=ZA"><i class="icon-f-77"></i>sign In</a></li>
939          <li><a href="https://shopify.com/57147555972/account?locale=en&region_country=ZA&buyer_flags=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJvcHRpcXVlb3B0b21ldHJpc3RzLm15c2hvcGlmeS5jb20iLCJmbGFncyI6W10sImV4cCI6MTc5MTcxNzE1OCwibmJmIjoxNzkxMTEyMzU4fQ.sgUWfQoQq0s-2OPI0cGoWaaywh8_49pztJUndZnG_QE"><i class="icon-f-94"></i>register</a></li><li><a href="/cart"><i class="icon-f-39"></i>view cart</a></li>
940          
941        </ul>
942      </div>
943    </div>
944  </div>
945</div>
946<!-- /tt-account --><!-- tt-langue and tt-currency -->
947<div class="tt-desctop-parent-multi tt-parent-box">
948  <div class="tt-multi-obj tt-dropdown-obj">
949    <button class="tt-dropdown-toggle"
950            data-tooltip="settings"
951            data-tposition="bottom"
952            ><i class="icon-f-79"></i></button>
953    <div class="tt-dropdown-menu">
954      <div class="tt-mobile-add">
955        <button class="tt-close">Close</button>
956      </div>
957      <div class="tt-dropdown-inner"></div>
958    </div>
959  </div>
960</div>
961<!-- /tt-langue and tt-currency --></div>
962
963      </div>
964    </div></div>
965  <!-- stuck nav -->
966  <div class="tt-stuck-nav notshowinmobile">
967    <div class="container-fluid">
968      <div class="tt-header-row "><div class="tt-stuck-parent-logo">
969          <a href="/" class="tt-logo" itemprop="url"><img src="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_c25193ff-565c-484c-b519-eb0e7c254719_175x.png?v=1662382006"
970                             srcset="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_c25193ff-565c-484c-b519-eb0e7c254719_175x.png?v=1662382006 1x, //optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_c25193ff-565c-484c-b519-eb0e7c254719_350x.png?v=1662382006 2x"
971                             alt=""
972                             class="tt-retina" itemprop="logo"/></a>
973        </div><div class="tt-stuck-parent-menu"></div>
974        <div class="tt-stuck-parent-search tt-parent-box"></div><div class="tt-stuck-parent-cart tt-parent-box"></div><div class="tt-stuck-parent-account tt-parent-box"></div><div class="tt-stuck-parent-multi tt-parent-box"></div></div>
975    </div></div>
976</header>
977
978
979</div>
980<div class="tt-breadcrumb">
981  <div class="container-fluid">
982    <ul>
983      <li><a href="/">Home</a></li><li>News</li></ul>
984  </div>
985</div>
986  <div id="tt-pageContent" class="show_unavailable_variants">
987    <div id="shopify-section-template--15407144960132__main" class="shopify-section"><div class="container-indent">
988  <div class="container container-fluid-custom-mobile-padding">
989    <h1 class="tt-title-subpages noborder">News</h1><div class="row">
990      <div class="col-sm-12 col-md-8 col-lg-9"><div class="tt-listing-post"><div class="tt-post"><div class="tt-post-img">
991    <a href="/blogs/news/eye-test-for-driver-s-license-what-to-expect"><img src="//optique.co.za/cdn/shop/articles/Optique_Aug2025_239_1024x1024.jpg?v=1760952817" alt="Eye Test For Driver’s License - What To Expect"></a>
992  </div><div class="tt-post-content"><h2 class="tt-title"><a href="/blogs/news/eye-test-for-driver-s-license-what-to-expect">Eye Test For Driver’s License - What To Expect</a></h2>
993    <div class="tt-description">The Ultimate Guide to the Eye Test for a Driver's...</div><div class="tt-meta"><div class="tt-autor">
994        by <span>Garry Meston</span> on October 20, 2025
995      </div></div><div class="tt-btn">
996      <a href="/blogs/news/eye-test-for-driver-s-license-what-to-expect" class="btn ttbtnmainstyle">READ MORE</a>
997    </div></div>
998</div><div class="tt-post"><div class="tt-post-img">
999    <a href="/blogs/news/looking-for-an-eye-specialist"><img src="//optique.co.za/cdn/shop/articles/Optique_Aug2025_228_668bf14f-34de-4dad-bee6-0e392b32a398_1024x1024.jpg?v=1760952215" alt="eye specialist"></a>
1000  </div><div class="tt-post-content"><div class="tt-tag text-uppercase"><a href="/blogs/news/tagged/eye-specialist" title="Show articles tagged eye specialist">eye specialist</a></div><h2 class="tt-title"><a href="/blogs/news/looking-for-an-eye-specialist">Looking For An Eye Specialist?</a></h2>
1001    <div class="tt-description">Have you ever had one of those moments where you're...</div><div class="tt-meta"><div class="tt-autor">
1002        by <span>Garry Meston</span> on October 20, 2025
1003      </div></div><div class="tt-btn">
1004      <a href="/blogs/news/looking-for-an-eye-specialist" class="btn ttbtnmainstyle">READ MORE</a>
1005    </div></div>
1006</div><div class="tt-post"><div class="tt-post-img">
1007    <a href="/blogs/news/comprehensive-eyesight-test-your-guide-to-optimal-vision-health-with-optique-lets-get-clear"><img src="//optique.co.za/cdn/shop/articles/2_99c8fbf9-6b7c-4575-8a4b-63561759ec71_1024x1024.png?v=1759386407" alt="Comprehensive Eyesight Test: Your Guide to Optimal Vision Health with Optique – Let's Get Clear!"></a>
1008  </div><div class="tt-post-content"><h2 class="tt-title"><a href="/blogs/news/comprehensive-eyesight-test-your-guide-to-optimal-vision-health-with-optique-lets-get-clear">Comprehensive Eyesight Test: Your Guide to Optimal Vision Health with Optique – Let's Get Clear!</a></h2>
1009    <div class="tt-description">Ever found yourself squinting at the TV like it's a...</div><div class="tt-meta"><div class="tt-autor">
1010        by <span>Garry Meston</span> on July 29, 2025
1011      </div></div><div class="tt-btn">
1012      <a href="/blogs/news/comprehensive-eyesight-test-your-guide-to-optimal-vision-health-with-optique-lets-get-clear" class="btn ttbtnmainstyle">READ MORE</a>
1013    </div></div>
1014</div><div class="tt-post"><div class="tt-post-img">
1015    <a href="/blogs/news/eye-doctors-a-fun-guide-to-your-eye-care-professionals"><img src="//optique.co.za/cdn/shop/articles/3_2f0e9a6f-5743-4270-b318-f33e832b2106_1024x1024.png?v=1759386387" alt="Eye Doctors: A Fun Guide to Your Eye Care Professionals"></a>
1016  </div><div class="tt-post-content"><h2 class="tt-title"><a href="/blogs/news/eye-doctors-a-fun-guide-to-your-eye-care-professionals">Eye Doctors: A Fun Guide to Your Eye Care Professionals</a></h2>
1017    <div class="tt-description">Ever had one of those mornings where everything looks like...</div><div class="tt-meta"><div class="tt-autor">
1018        by <span>Garry Meston</span> on July 29, 2025
1019      </div></div><div class="tt-btn">
1020      <a href="/blogs/news/eye-doctors-a-fun-guide-to-your-eye-care-professionals" class="btn ttbtnmainstyle">READ MORE</a>
1021    </div></div>
1022</div><div class="tt-post"><div class="tt-post-img">
1023    <a href="/blogs/news/the-ultimate-guide-to-colour-blindness-tests-see-the-world-in-full-spectrum"><img src="//optique.co.za/cdn/shop/articles/1_458311e5-8238-42fe-9c5e-c2a9977f0481_1024x1024.png?v=1759386349" alt="The Ultimate Guide to Colour Blindness Tests: See the World in Full Spectrum"></a>
1024  </div><div class="tt-post-content"><h2 class="tt-title"><a href="/blogs/news/the-ultimate-guide-to-colour-blindness-tests-see-the-world-in-full-spectrum">The Ultimate Guide to Colour Blindness Tests: See the World in Full Spectrum</a></h2>
1025    <div class="tt-description">I've got 99 vision problems, but seeing red ain't one!...</div><div class="tt-meta"><div class="tt-autor">
1026        by <span>Garry Meston</span> on June 23, 2025
1027      </div></div><div class="tt-btn">
1028      <a href="/blogs/news/the-ultimate-guide-to-colour-blindness-tests-see-the-world-in-full-spectrum" class="btn ttbtnmainstyle">READ MORE</a>
1029    </div></div>
1030</div><div class="tt-post"><div class="tt-post-img">
1031    <a href="/blogs/news/the-ultimate-guide-to-astigmatism-eye-tests-everything-you
1031-need-to-know"><img src="//optique.co.za/cdn/shop/articles/3_788b6d21-f05d-462f-8f3e-214164bcb0dd_1024x1024.png?v=1759386036" alt="The Ultimate Guide to Astigmatism Eye Tests: Everything You Need to Know"></a>
1032  </div><div class="tt-post-content"><h2 class="tt-title"><a href="/blogs/news/the-ultimate-guide-to-astigmatism-eye-tests-everything-you-need-to-know">The Ultimate Guide to Astigmatism Eye Tests: Everything You Need to Know</a></h2>
1033    <div class="tt-description">Okay, real talk, have you ever wondered why your vision...</div><div class="tt-meta"><div class="tt-autor">
1034        by <span>Garry Meston</span> on June 20, 2025
1035      </div></div><div class="tt-btn">
1036      <a href="/blogs/news/the-ultimate-guide-to-astigmatism-eye-tests-everything-you-need-to-know" class="btn ttbtnmainstyle">READ MORE</a>
1037    </div></div>
1038</div><div class="tt-pagination">
1039  <ul><li class="active"><a href="#">1</a></li><li><a href="/blogs/news?page=2" title="">2</a></li><li><a href="/blogs/news?page=3" title="">3</a></li><li><a href="/blogs/news?page=4" title="">4</a></li></ul><a class="btn-pagination btn-next" href="/blogs/news?page=2"></a></div></div></div>
1040      <div class="col-sm-12 col-md-4 col-lg-3 rightColumn"><div class="tt-block-aside">
1041  <h3 class="tt-aside-title">BLOGS</h3>
1042  <div class="tt-aside-content"><ul class="tt-list-row">
1043      
1044    </ul></div>
1045</div><div class="tt-block-aside">
1046  <h3 class="tt-aside-title">ABOUT</h3>
1047  <div class="tt-aside-content"><div class="tt-aside-info"><p>Lorem ipsum dolor sit amet conse ctetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit.</p><a href="" class="btn-link btn-top">READ MORE</a></div></div>
1048</div><div class="tt-block-aside">
1049  <h3 class="tt-aside-title">TAGS</h3>
1050  <div class="tt-aside-content"><ul class="tt-list-inline text-uppercase"><li><a href="/blogs/news/tagged/eye-specialist" title="Show articles tagged eye specialist">eye specialist</a></li></ul></div>
1051</div><div class="tt-block-aside">
1052  <h3 class="tt-aside-title">RECENT POST</h3>
1053  <div class="tt-aside-content"><div class="tt-aside-post"><div class="item"><a href="/blogs/news/eye-test-for-driver-s-license-what-to-expect">
1054          <div class="tt-title">Eye Test For Driver’s License - What To Expect</div>
1055          <div class="tt-description">The Ultimate Guide to the Eye Test for a Driver's License That feeling when you...</div>
1056        </a><div class="tt-info">
1057          by <span>Garry Meston</span> on October 20, 2025
1058        </div></div><div class="item"><div class="tt-tag text-uppercase"><a href="/blogs/news/tagged/eye-specialist" title="Show articles tagged eye specialist">eye specialist</a></div><a href="/blogs/news/looking-for-an-eye-specialist">
1059          <div class="tt-title">Looking For An Eye Specialist?</div>
1060          <div class="tt-description">Have you ever had one of those moments where you're trying to read a text...</div>
1061        </a><div class="tt-info">
1062          by <span>Garry Meston</span> on October 20, 2025
1063        </div></div><div class="item"><a href="/blogs/news/comprehensive-eyesight-test-your-guide-to-optimal-vision-health-with-optique-lets-get-clear">
1064          <div class="tt-title">Comprehensive Eyesight Test: Your Guide to Optimal Vision Health with Optique – Let's Get Clear!</div>
1065          <div class="tt-description">Ever found yourself squinting at the TV like it's a blurry abstract painting, or mistaking...</div>
1066        </a><div class="tt-info">
1067          by <span>Garry Meston</span> on July 29, 2025
1068        </div></div></div></div>
1069</div></div>
1070    </div></div>
1071</div></div>
1072  </div><div id="shopify-section-footer-template" class="shopify-section"><footer class="for-footer-blocks  tt-offset-small_base"><div class="tt-footer-custom tt-color-scheme-02">
1073  <div class="container-fluid-custom-mobile-padding container-fluid-custom">
1074    <div class="tt-row">
1075      <div class="tt-col-left">
1076        
1077        <div class="tt-col-item">
1078          <div class="tt-newsletter">
1079            <div class="tt-mobile-collapse">
1080              <h4 class="tt-collapse-title">
1081                join our fan base
1082              </h4>
1083              <div class="tt-collapse-content">
1084                <div class="form-default"><form action="456456456" method="post" name="mc-embedded-subscribe-form" target="_blank" class="form-inline form-default">
1085                    <div class="form-group">
1086                      <input type="email" name="EMAIL" class="form-control" placeholder="email address">
1087                      <button type="submit" class="btn">subscribe</button>
1088                    </div>
1089                  </form></div>
1090              </div>
1091            </div>
1092          </div>
1093        </div>
1094      </div><div class="tt-col-right">
1095        <div class="tt-col-item">
1096          <ul class="tt-social-icon"><li><a class="icon-g-64" target="_blank" href="https://www.facebook.com/optiqueoptometristsSA/"></a></li><li><a class="icon-g-66" target="_blank" href="mailto:[email protected]"></a></li><li><a class="icon-g-67" target="_blank" href="https://www.instagram.com/optique_optometrist/"></a></li><li><a class="icon-g-76" target="_blank" href="https://www.youtube.com/@optiqueoptometrists"></a></li><li><a target="_blank" href="https://wa.me/27644825425"><svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
1097<path fill-rule="evenodd" clip-rule="evenodd" d="M255.936 0H256.064C397.216 0 512 114.848 512 256C512 397.152 397.216 512 256.064 512C204 512 155.712 496.512 115.232 469.696L16.832 501.152L48.7358 406.048C18.0479 363.904 0 312 0 256C0 114.816 114.784 0 255.936 0ZM354.784 397.632C374.336 393.408 398.848 378.944 405.024 361.504C411.2 344.032 411.2 329.152 409.408 325.984C407.961 323.47 404.539 321.823 399.431 319.364C398.102 318.723 396.657 318.028 395.104 317.248C387.584 313.504 351.008 295.424 344.096 293.024C337.312 290.464 330.848 291.36 325.728 298.592C324.753 299.957 323.78 301.324 322.813 302.685C316.638 311.371 310.681 319.748 305.728 325.088C301.216 329.888 293.856 330.496 287.68 327.936C287.007 327.655 286.235 327.344 285.371 326.994C275.592 323.045 253.902 314.285 227.648 290.912C205.504 271.2 190.464 246.656 186.112 239.296C181.839 231.913 185.525 227.583 188.931 223.582L189.12 223.36C191.316 220.643 193.447 218.38 195.589 216.106C197.13 214.47 198.676 212.829 200.256 211.008L200.939 210.222C204.295 206.363 206.293 204.067 208.544 199.264C211.104 194.304 209.28 189.184 207.456 185.408C206.201 182.762 198.441 163.937 191.784 147.785C188.94 140.884 186.297 134.47 184.448 130.016C179.488 118.144 175.712 117.696 168.192 117.376L167.485 117.34C165.11 117.22 162.496 117.088 159.616 117.088C149.824 117.088 139.616 119.968 133.44 126.272L132.766 126.958C124.865 134.994 107.264 152.894 107.264 188.576C107.264 224.329 132.633 258.929 137.325 265.328L137.664 265.792C137.946 266.163 138.479 266.934 139.253 268.055C148.836 281.933 195.514 349.531 265.12 378.368C323.936 402.752 341.408 400.48 354.784 397.632Z" fill="black"/>
1098</svg></a></li></ul>
1099        </div>
1100      </div></div>
1101  </div>
1102</div><div class="tt-footer-col tt-color-scheme-03">
1103  <div class="container-fluid-custom-mobile-padding container-fluid-custom">
1104    <div class="row"><div class="col-md-6 col-lg-3 col-xl-3">
1105<div class="tt-mobile-collapse">
1106          <h4 class="tt-collapse-title">QUICK LINKS</h4>
1107          <div class="tt-collapse-content">
1108<ul class="tt-list"><li><a href="/pages/book-a-r99-eye-test-online">book an eye test</a></li><li><a href="/pages/pricing">our pricing</a></li><li><a href="/pages/payment-options-2">payment options</a></li><li><a href="/pages/ambassadors">famous fans</a></li><li><a href="/pages/reviews-and-testimonials">honest reviews</a></li><li><a href="/pages/delivery-returns">delivery, returns & refunds</a></li><li><a href="/pages/terms-and-conditions">terms & conditions</a></li><li><a href="/pages/privacy-policy">privacy policy & popia</a></li><li><a href="/policies/terms-of-service">Terms of Service</a></li><li><a href="/policies/refund-policy">Refund policy</a></li></ul>
1109          </div>
1110        </div></div>
1111<div class="col-md-6 col-lg-3 col-xl-3">
1112<div class="tt-mobile-collapse">
1113          <h4 class="tt-collapse-title">SHOP EYE CARE</h4>
1114          <div class="tt-collapse-content">
1115<ul class="tt-list"><li><a href="/collections/all-products">all products</a></li><li><a href="/collections/women">women</a></li><li><a href="/collections/men">men</a></li><li><a href="/collections/contact-lenses">contact lenses</a></li><li><a href="/collections/frames">blue-light protection</a></li><li><a href="/collections/sunnies">sunglasses</a></li></ul>
1116            
1117            
1118          </div>
1119        </div></div>
1120<div class="col-md-6 col-lg-3 col-xl-3">
1121<div class="tt-mobile-collapse">
1122          <h4 class="tt-collapse-title">OUR VISION</h4>
1123          <div class="tt-collapse-content">
1124
1125            we believe in simplifying exceptional eye care to drive our vision of more affordable and accessible eye care for all.
1126<p></p><p>
1127<a href="https://optique.co.za/pages/book-a-r99-eye-test-online">book now </a>at any of our 22 branches across South Africa.</p>
1128            
1129          </div>
1130        </div></div>
1131<div class="col-md-6 col-lg-3 col-xl-3">
1132<div class="tt-mobile-collapse">
1133          <h4 class="tt-collapse-title">CONTACT US</h4>
1134          <div class="tt-collapse-content">
1135
1136            <p><span>phone:</span> +27 64 482 5425</p>
1137	<p><span>hours:</span> monday-friday: 8h30-17h00, saturday: 8h30-13h00</p>
1138	<p><span>email:</span> <a href="mailto:[email protected]">[email protected]</a></p>
1139            
1140          </div>
1141        </div></div>
1142</div>
1143  </div>
1144</div><div class="tt-footer-custom tt-color-scheme-04">
1145  <div class="container-fluid-custom-mobile-padding container-fluid-custom">
1146    <div class="tt-row">
1147      
1148      
1149
1150      <div class="tt-col-left"><div class="tt-col-item tt-logo-col">
1151          <a href="/" class="tt-logo tt-logo-alignment"><img src="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_125x.png?v=1662381977" srcset="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_125x.png?v=1662381977 1x, //optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_250x.png?v=1662381977 2x" alt="" class="tt-retina"></a>
1152        </div><div class="tt-col-item">
1153          <div class="tt-box-copyright">Copyright 2026 Optique Optometrists</div>
1154        </div></div><div class="tt-col-right">
1155  <div class="tt-col-item">
1156    <ul class="tt-payment-list"><li>
1157        
1158        <a href="https://paystack.com">
1159        
1160          
1161          
1162          
1163          <img class="lazyload"
1164               data-src="//optique.co.za/cdn/shop/files/Optique_Optometrist_Payment_Option_Visa_x30.png?v=1664822832"
1165               data-srcset="//optique.co.za/cdn/shop/files/Optique_Optometrist_Payment_Option_Visa_x30.png?v=1664822832 1x, //optique.co.za/cdn/shop/files/Optique_Optometrist_Payment_Option_Visa_x60.png?v=1664822832 2x"
1166               alt=""
1167               style="height:30px;">
1168        
1169        </a>
1170        
1171      </li><li>
1172        
1173        <a href="https://paystack.com">
1174        
1175          
1176          
1177          
1178          <img class="lazyload"
1179               data-src="//optique.co.za/cdn/shop/files/Optique_Optometrist_Payment_Option_Mastercard_x30.jpg?v=1664822857"
1180               data-srcset="//optique.co.za/cdn/shop/files/Optique_Optometrist_Payment_Option_Mastercard_x30.jpg?v=1664822857 1x, //optique.co.za/cdn/shop/files/Optique_Optometrist_Payment_Option_Mastercard_x60.jpg?v=1664822857 2x"
1181               alt=""
1182               style="height:30px;">
1183        
1184        </a>
1185        
1186      </li><li>
1187        
1188        <a href="https://paystack.com">
1189        
1190          
1191          
1192          
1193          <img class="lazyload"
1194               data-src="//optique.co.za/cdn/shop/files/Paystack_Logo_x30.png?v=1788960878"
1195               data-srcset="//optique.co.za/cdn/shop/files/Paystack_Logo_x30.png?v=1788960878 1x, //optique.co.za/cdn/shop/files/Paystack_Logo_x60.png?v=1788960878 2x"
1196               alt=""
1197               style="height:30px;">
1198        
1199        </a>
1200        
1201      </li><li>
1202        
1203        <a href="https://www.stitch.me/">
1204        
1205          
1206          
1207          
1208          <img class="lazyload"
1209               data-src="//optique.co.za/cdn/shop/files/stitch-logo_1_x30.svg?v=1788960701"
1210               data-srcset="//optique.co.za/cdn/shop/files/stitch-logo_1_x30.svg?v=1788960701 1x, //optique.co.za/cdn/shop/files/stitch-logo_1_x60.svg?v=1788960701 2x"
1211               alt=""
1212               style="height:30px;">
1213        
1214        </a>
1215        
1216      </li><li>
1217        
1218        <a href="https://payjustnow.com/">
1219        
1220          
1221          
1222          
1223          <img class="lazyload"
1224               data-src="//optique.co.za/cdn/shop/files/payjustnow_x30.png?v=1759392312"
1225               data-srcset="//optique.co.za/cdn/shop/files/payjustnow_x30.png?v=1759392312 1x, //optique.co.za/cdn/shop/files/payjustnow_x60.png?v=1759392312 2x"
1226               alt=""
1227               style="height:30px;">
1228        
1229        </a>
1230        
1231      </li></ul>
1232  </div>
1233</div>
1234
1235
1236    </div>
1237  </div>
1238</div></footer>
1239
1240
1241</div><a href="#" class="tt-back-to-top">BACK TO TOP</a>
1242<!-- modalAddToCart -->
1243<div class="modal fade" id="modalAddToCartError" tabindex="-1" role="dialog" aria-label="myModalLabel" aria-hidden="true">
1244  <div class="modal-dialog modal-sm">
1245    <div class="modal-content ">
1246      <div class="modal-header">
1247        <button type="button" class="close" data-dismiss="modal" aria-hidden="true"><span class="icon icon-clear"></span></button>
1248      </div>
1249      <div class="modal-body">
1250        <div class="modal-add-cart">
1251          <i class="icon-h-10"></i>
1252          <p class="error_message"></p>
1253        </div>
1254      </div>
1255    </div>
1256  </div>
1257</div>
1258
1259<div class="modal fade" id="modalAddToCartProduct" tabindex="-1" role="dialog" aria-label="myModalLabel" aria-hidden="true">
1260  <div class="modal-dialog">
1261    <div class="modal-content ">
1262      <div class="modal-header">
1263        <button type="button" class="close" data-dismiss="modal" aria-hidden="true"><span class="icon icon-clear"></span></button>
1264      </div>
1265      <div class="modal-body">
1266        <div class="tt-modal-addtocart mobile">
1267          <div class="tt-modal-messages">
1268            <i class="icon-f-68"></i> Added to cart successfully!
1269          </div>
1270          <a href="#" class="btn-link btn-close-popup">CONTINUE SHOPPING</a>
1271          <a href="/cart" class="btn-link">VIEW CART</a>
1272          
1273          <div>
1274            <div class="checkbox-group pm-term-conditions-checkbox term-conditions-checkbox-js">
1275              <input type="checkbox" id="pmcart-term-conditions-checkbox" value="1">
1276              <label for="pmcart-term-conditions-checkbox">
1277                <span class="check"></span>
1278                <span class="box"></span>
1279                I agree with the terms and conditions
1280              </label>
1281            </div>
1282          </div>
1283          
1284          <a href="/checkout" class="btn-link disabled">PROCEED TO CHECKOUT</a>
1285        </div>
1286        <div class="tt-modal-addtocart desctope">
1287          <div class="row">
1288            <div class="col-12 col-lg-6">
1289              <div class="tt-modal-messages">
1290                <i class="icon-f-68"></i> Added to cart successfully!
1291              </div>
1292              <div class="tt-modal-product">
1293                <div class="tt-img"></div>
1294                <div class="tt-title tt-title-js"></div>
1295                <div class="description"></div>
1296                <div class="tt-qty">QTY: <span></span></div>
1297              </div>
1298              <div class="tt-product-discount"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
1299<path fill-rule="evenodd" clip-rule="evenodd" d="M0.943837 7.38877C-0.314613 8.64722 -0.314612 10.6876 0.943839 11.946L6.05398 17.0562C7.31243 18.3146 9.35278 18.3146 10.6112 17.0562L17.0562 10.6112C17.6605 10.0069 18 9.18726 18 8.33261V3.22246C18 1.44275 16.5573 0 14.7775 0H9.66739C8.81274 0 7.9931 0.339509 7.38877 0.943838L0.943837 7.38877ZM13.1663 6.44493C14.0562 6.44493 14.7775 5.72356 14.7775 4.8337C14.7775 3.94384 14.0562 3.22246 13.1663 3.22246C12.2764 3.22246 11.5551 3.94384 11.5551 4.8337C11.5551 5.72356 12.2764 6.44493 13.1663 6.44493Z" fill="#F8353E"/>
1300</svg><span class="tt-product-discount__text"></span>
1301              </div>
1302              <div class="tt-product-total">
1303                <div class="tt-total total-product-js">
1304                  TOTAL: <span class="tt-price"></span>
1305                </div>
1306              </div>
1307            </div>
1308            <div class="col-12 col-lg-6">
1309              <a href="/cart" class="tt-cart-total" title="VIEW CART">
1310                There are <span class="modal-total-quantity"></span> items<br> in your cart
1311                <div class="tt-total">
1312                  TOTAL: <span class="tt-price full-total-js"></span>
1313                </div>
1314              </a>
1315
1316              <a href="#" class="btn btn-border btn-close-popup ttmodalbtn">CONTINUE SHOPPING</a>
1317              <a href="/cart" class="btn btn-border ttmodalbtn ttmodalbtn">VIEW CART</a>
1318              
1319              <div class="checkbox-group pdm-term-conditions-checkbox term-conditions-checkbox-js">
1320                <input type="checkbox" id="pcart-term-conditions-checkbox" value="1">
1321                <label for="pcart-term-conditions-checkbox">
1322                  <span class="check"></span>
1323                  <span class="box"></span>
1324                  I agree with the terms and conditions
1325                </label>
1326              </div>
1327              
1328              <a href="/checkout" class="btn disabled ttmodalbtn">PROCEED TO CHECKOUT</a>
1329            </div>
1330          </div>
1331        </div><div class="tt-modal-slider hide">
1332          <hr>
1333          <div class="tt-title">With this product also buy:</div>
1334          <div class="tt-modal-slider-js header-menu-product arrow-location-03 row">
1335          </div>
1336        </div></div>
1337    </div>
1338  </div>
1339</div><div id="custom-preloader">
1340  <div class="custom-loader" style="display: none;">
1341    <img width="32" height="32" alt="Page Loader" class="lazyload" data-src="//optique.co.za/cdn/shop/t/5/assets/ajax-loader.gif?v=83335857307597093571667511599">
1342  </div>
1343</div>
1343<script>
1344    var theme = {},
1345		shop_url = 'https://optique.co.za',
1346    	money_format = 'R {{amount}}',
1347        color_with_border = 'White' || 'empty',
1348        colors_value = ',coat: #ff0000,yellow: #ffff00,black: #4d4d4d,blue: #2196f3,green: #8bc34a,purple: #800080,silver: #c0c0c0,white: #ffffff,brown: #a3794d,light-brown: #feb035,dark-turquoise: #23cddc,orange: #fea634,tan: #eacea7,violet: #ee82ee,pink: #ffc0cb,grey: #c0c0c0,red: #ff0000,light blue: #add8e6,beige: #fbdbb5,',
1349    	texture_obj = function(){return JSON.parse('{}');
1350    }
1351    texture_obj = texture_obj();
1352    
1353    var wokiee_app = {
1354      url: '',
1355      loader_text: 'just loading a bit',
1356      main_info: {
1357        customerid: '',
1358        iid: '',
1359        shop: 'optiqueoptometrists.myshopify.com',
1360      	domain: 'optique.co.za',
1361      	lic: '622b90da-51bb-4dcf-8823-54438ffb6acc',
1362      }
1363    };
1364    
1365    window.shopUrl = '';	
1366    
1367    var set_day = 'Day',
1368        set_hour = 'Hrs',
1369        set_minute = 'Min',
1370        set_second = 'Sec';
1371    
1372    var addtocart_text = '<span class="icon icon-shopping_basket"></span> <span>add to cart</span>',
1373    	unavailable_text = '<span>sold out</span>',
1374        addedhtml_text = '<span class="icon icon-shopping_basket"></span> added',
1375        errorhtml_text = '<span class="icon icon-shopping_basket"></span> LIMIT PRODUCTS',
1376        preorderhtml_text = '<span class="icon icon-f-47"></span> <span>PREORDER</span>',
1377        wait_text = '<span class="icon icon-shopping_basket"></span> WAIT',
1378        b_close = 'close',
1379        b_back = 'back',
1380        seeallresults = 'see all results';
1381        
1382    var small_image = '//optique.co.za/cdn/shop/t/5/assets/dummy.png?v=63149790037541194611667511605';
1383    
1384    
1385    window.addEventListener('DOMContentLoaded', function() {      
1386      var $buyinoneclick = $('.buyinoneclick');
1387      if($buyinoneclick.length){
1388        $buyinoneclick.first().bind('DOMNodeInserted', function() {
1389          setTimeout(function(){
1390            var $shopifypaymentbutton = $('.buyinoneclick').find(".shopify-payment-button__button");
1391            if($shopifypaymentbutton.length){
1392              $buyinoneclick.hide();
1393              setTimeout(function(){
1394                $(".shopify-payment-button__button").attr('disabled', true);
1395                $buyinoneclick.fadeIn()
1396              }, 300);
1397            }
1398          }, 0);
1399        });
1400      }
1401
1402      $('body').on('click', '.term-conditions-checkbox-js input', function(e){
1403        var _ = $(this).closest('.term-conditions-checkbox-js').parent().parent(),
1404            a = _.find('a[href*="checkout"]'),
1405            b = _.find('button[name=checkout]'),
1406            b2 = _.find('.buyinoneclick button'),
1407            text = '';
1408            if($(this).is(':checked')){
1409              a.length && a.removeClass('disabled');
1410              b.length && b.removeAttr('disabled');
1411              b2.length && b2.removeAttr('disabled');
1412            }
1413        else{
1414          a.length && a.addClass('disabled');
1415          b.length && b.attr('disabled', true);
1416          b2.length && b2.attr('disabled', true);
1417        }
1418      });
1419    });
1420    
1421  </script>
1421<script src="//optique.co.za/cdn/shop/t/5/assets/vendor.min.js?v=23966221973793086621667511669" defer="defer"></script>
1421<script src="//optique.co.za/cdn/shop/t/5/assets/theme.js?v=83444853024566489161737693215" defer="defer"></script>
1421<!-- modal (ModalSubsribeGood) -->
1422<div class="modal  fade"  id="ModalSubsribeGood" tabindex="-1" role="dialog" aria-label="myModalLabel" aria-hidden="true">
1423  <div class="modal-dialog modal-xs">
1424    <div class="modal-content ">
1425      <div class="modal-header">
1426        <button type="button" class="close" data-dismiss="modal" aria-hidden="true"><span class="icon icon-clear"></span></button>
1427      </div>
1428      <div class="modal-body">
1429        <div class="tt-modal-subsribe-good">
1430          <i class="icon-f-68"></i> <span>you have successfully subscribed!</span>
1431        </div>
1432      </div>
1433    </div>
1434  </div>
1435</div>
1436<script>
1437  function checkSubscribe(){
1438    if(location.search.indexOf('customer_posted=true') == -1) return false;
1439    $('.tt-modal-subsribe-good').find('span').html('you have successfully subscribed!');
1440    $('#ModalSubsribeGood').modal('show');
1441    setTimeout(function(){window.history.pushState("", "", location.pathname)}, 100);
1442  }
1443  function checkSended(){
1444    if(location.search.indexOf('contact_posted=true') == -1) return false;
1445    $('.tt-modal-subsribe-good').find('span').html('thanks for contacting us. we&#39;ll get back to you as soon as possible.');
1446    $('#ModalSubsribeGood').modal('show');
1447    setTimeout(function(){window.history.pushState("", "", location.pathname)}, 100);
1448  }  
1449  window.addEventListener('DOMContentLoaded', function() {
1450    checkSubscribe();
1451    checkSended();
1452  });
1453</script>
1453<!-- Modal (ModalMessage) -->
1454<div class="modal fade" id="ModalMessage" tabindex="-1" role="dialog" aria-label="myModalLabel" aria-hidden="true"  data-pause=1500>
1455  <div class="modal-dialog">
1456    <div class="modal-content ">
1457      <div class="modal-header">
1458        <button type="button" class="close" data-dismiss="modal" aria-hidden="true"><span class="icon icon-clear"></span></button>
1459      </div>
1460      <div class="modal-body">
1461        <div class="tt-login-wishlist">
1462          <p>please login to add product(s) to your wishlist</p>
1463          <div class="row-btn">
1464            <a href="https://optique.co.za/customer_authentication/redirect?locale=en&region_country=ZA" class="btn btn-small ttmodalbtn">SIGN IN</a>
1465            <a href="https://shopify.com/57147555972/account?locale=en&region_country=ZA&buyer_flags=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJvcHRpcXVlb3B0b21ldHJpc3RzLm15c2hvcGlmeS5jb20iLCJmbGFncyI6W10sImV4cCI6MTc5MTcxNzE1OCwibmJmIjoxNzkxMTEyMzU4fQ.sgUWfQoQq0s-2OPI0cGoWaaywh8_49pztJUndZnG_QE" class="btn btn-border btn-small ttmodalbtn">REGISTER</a>
1466          </div>
1467        </div>
1468      </div>
1469    </div>
1470  </div>
1471</div><div id="shopify-section-promo-fixed" class="shopify-section">
1472  
1473</div>
1473<script>
1474    window.addEventListener('DOMContentLoaded', function() {
1475      
1476      
1477      
1478      jQuery('a[href^="http"]').attr('target', '_blank')
1479      
1480    });
1481  </script>
1481
1482  
1483  
1484  
1485<!--Gem_Page_Footer_Script-->
1486  
1487<!--End_Gem_Page_Footer_Script-->
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552<!-- Invisible link that opens overlay map on click on Elfsight hovering button -->
1553<style>
1554  .elfsight-map-open-helper {
1555    display: none;
1556  }
1557</style>
1558<!--<a class="elfsight-map-open-helper" href="javascript:closeby-open"></a>-->
1559
1560
1561<!-- Proto Chat/Bot Input 
1562<script type="text/javascript">
1563  window.ProtoSettings = {
1564    gwId: 'gw_h8aynRKNR8yw9QKlkPWBY5',
1565    env: '',
1566    onLoad: function() { Proto.show(); }
1567  };
1568
1569  var d=document,s=d.createElement("script");
1570  s.type="text/javascript",s.async=true,s.src="https://app.proto.cx/webchat/client.js";
1571  var t=d.getElementsByTagName("script")[0];
1572  t.parentNode.insertBefore(s,t);
1573  s.addEventListener("load", function() {
1574    var p = window.ProtoSettings; Proto.init(p, p.onLoad);
1575  });
1576</script>
1576 -->
1577
1578<!-- Elfsight GetContacts Popup -->
1579<script src="https://static.elfsight.com/platform/platform.js" data-use-service-core defer></script>
1579
1580<div class="elfsight-app-31aa8a40-2406-49b3-833d-dbc0ce9576fc" data-elfsight-app-lazy></div>
1581
1582<!-- Elfsight WhatsApp Chat Button 
1583<script src="https://apps.elfsight.com/p/platform.js" defer></script>
1583
1584<div class="elfsight-app-53eba1a9-7454-44b6-bb8b-a1630533bad5"></div> -->
1585
1586<div id="shopify-block-AM2ZzcGZLUGxZZnBBa__17745481618859153576" class="shopify-block shopify-app-block"><span
1587  data-store-domain="optiqueoptometrists.myshopify.com"
1588  data-app-url="https://storepickup-admin.herokuapp.com"
1589  id="genie-domain">
1590</span>
1591
1592<div
1593  id="genie-feature-embed"
1594  data-app-url="https://storepickup-admin.herokuapp.com"
1595  data-page-type="blog"
1596  data-widget-js="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-store-pickup-app.js"
1597  data-widget-css="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-store-pickup-app.css"
1598  data-trusted-badges-css="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-trusted-badges.css"
1599  data-trusted-badges-js="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-trusted-badges.js"
1600  data-speed-optimizer-css="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-speed-optimizer.css"
1601  data-speed-optimizer-js="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-speed-optimizer.js"
1602  data-wishlist-css="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-wishlist.css"
1603  data-wishlist-js="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-wishlist.js"
1604  data-upsell-css="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-upsell.css"
1605  data-upsell-js="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-upsell.js"
1606  
1607>
1608  <input
1609    type="hidden"
1610    id="genie-shopify-domain"
1611    name="shopify_domain"
1612    value="optiqueoptometrists.myshopify.com"
1613    autocomplete="off"
1614  />
1615</div>
1616
1617
1618<script type="application/json" id="genie-upsell-config-json">null</script>
1618
1619
1620<script>
1621  (function () {
1622    // Shopify app preview + the installed embed can both print this block.
1623    // A second run would inject genie-store-pickup-app.js again and throw
1624    // "only one instance of babel-polyfill is allowed".
1625    if (window.__geniePickupEmbedBootstrapped) return;
1626    window.__geniePickupEmbedBootstrapped = true;
1627
1628    var root = document.getElementById('genie-feature-embed');
1629    if (!root) return;
1630
1631    var PAGE_TYPE = root.getAttribute('data-page-type') || '';
1632    var IS_CART_PAGE = PAGE_TYPE === 'cart';
1633
1634    // ------------------------------------------------------------------
1635    // Checkout lock helpers.
1636    //
1637    // The widget gates checkout behind the pickup/delivery flow, so checkout
1638    // must be locked from the moment we COMMIT to loading the widget until the
1639    // React app mounts and takes ownership (it manages the same
1640    // `genie-checkout-loading` class). Unlike before, this no longer runs on
1641    // every page at parse time — only once the widget load actually starts.
1642    // ------------------------------------------------------------------
1643    var LOCK_CLASS = 'genie-checkout-loading';
1644    var MOUNTED_SELECTOR = '[data-genie-store-pickup-mounted="1"]';
1645
1646    function lockCheckout() {
1647      var btns = document.querySelectorAll('[name="checkout"]');
1648      for (var i = 0; i < btns.length; i++) {
1649        if (!btns[i].classList.contains(LOCK_CLASS)) {
1650          btns[i].setAttribute('disabled', 'disabled');
1651          btns[i].classList.add(LOCK_CLASS);
1652        }
1653      }
1654    }
1655
1656    function releaseCheckout() {
1657      var btns = document.querySelectorAll('.' + LOCK_CLASS);
1658      for (var i = 0; i < btns.length; i++) {
1659        btns[i].removeAttribute('disabled');
1660        btns[i].classList.remove(LOCK_CLASS);
1661      }
1662    }
1663
1664    // Themes often render the cart/drawer checkout button after the lock ran,
1665    // so re-apply until the widget mounts and takes over. Failsafe: if the
1666    // widget never mounts (bundle failed, pickup disabled for this shop, etc.)
1667    // release the lock so checkout is NEVER permanently blocked.
1668    function startCheckoutLockLoop() {
1669      lockCheckout();
1670      var ticks = 0;
1671      var relockInterval = setInterval(function () {
1672        if (document.querySelector(MOUNTED_SELECTOR)) {
1673          clearInterval(relockInterval);
1674          return;
1675        }
1676        lockCheckout();
1677        if (++ticks >= 60) clearInterval(relockInterval); // ~9s of coverage at 150ms
1678      }, 150);
1679      setTimeout(function () {
1680        clearInterval(relockInterval);
1681        if (!document.querySelector(MOUNTED_SELECTOR)) {
1682          releaseCheckout();
1683        }
1684      }, 15000);
1685    }
1686
1687    // ------------------------------------------------------------------
1688    // Asset injection helpers
1689    // ------------------------------------------------------------------
1690    function addCss(href) {
1691      if (!href) return;
1692      var l = document.createElement('link');
1693      l.rel = 'stylesheet';
1694      l.href = href;
1695      document.head.appendChild(l);
1696    }
1697
1698    function addScript(src, opts) {
1699      opts = opts || {};
1700      if (!src) return;
1701      var s = document.createElement('script');
1702      s.src = src;
1703      if (src.indexOf('genie-store-pickup-app.js') !== -1) {
1704        s.setAttribute('data-genie-widget-bundle', '1');
1705      }
1706      if (opts.defer) {
1707        s.defer = true;
1708      }
1709      if (opts.onload) {
1710        s.onload = function () {
1711          try {
1712            opts.onload();
1713          } catch (e) {
1714            if (typeof console !== 'undefined' && console.error) {
1715              console.error('[Genie feature]', e);
1716            }
1717          }
1718        };
1719      }
1720      if (opts.onerror) {
1721        s.onerror = opts.onerror;
1722      }
1723      document.body.appendChild(s);
1724    }
1725
1726    // ------------------------------------------------------------------
1727    // Lazy widget loader
1728    // ------------------------------------------------------------------
1729    var widgetRequested = false;
1730
1731    function existingWidgetScript() {
1732      var scripts = document.getElementsByTagName('script');
1733      for (var i = 0; i < scripts.length; i++) {
1734        var el = scripts[i];
1735        if (el.getAttribute('data-genie-widget-bundle') === '1') return el;
1736        var src = el.getAttribute('src') || '';
1737        if (src.indexOf('genie-store-pickup-app.js') !== -1) return el;
1738      }
1739      return null;
1740    }
1741
1742    function placeAfterBundleReady() {
1743      if (typeof window.placeGenieDiv === 'function') {
1744        window.placeGenieDiv();
1745        window.setTimeout(window.placeGenieDiv, 200);
1746        window.setTimeout(window.placeGenieDiv, 800);
1747      }
1748    }
1749
1750    function loadWidget() {
1751      if (widgetRequested || window.__genieStorePickupWidgetRequested) return;
1752      widgetRequested = true;
1753      window.__genieStorePickupWidgetRequested = true;
1754      // Lock checkout the instant we commit to loading — before the bundle
1755      // downloads — so a shopper can't check out and bypass the pickup flow
1756      // during the load window. The widget re-enables the buttons once ready.
1757      startCheckoutLockLoop();
1758
1759      // Already on the page (schema auto-inject, app preview, or a prior
1760      // loadWidget). Do not insert a second copy — babel-polyfill throws.
1761      var already = existingWidgetScript();
1762      if (already) {
1763        if (typeof window.placeGenieDiv === 'function') {
1764          placeAfterBundleReady();
1765        } else {
1766          already.addEventListener('load', placeAfterBundleReady);
1767        }
1768        return;
1769      }
1770
1771      addCss(root.getAttribute('data-widget-css'));
1772      addScript(root.getAttribute('data-widget-js'), {
1773        defer: true,
1774        onload: placeAfterBundleReady,
1775      });
1776    }
1777    // The widget bundle's placement bootstrap re-checks placement on cart
1778    // interactions; expose the loader so late triggers can also start it.
1779    window.__genieLoadStorePickupWidget = loadWidget;
1780
1781    if (IS_CART_PAGE) {
1782      // Cart page: the widget is the point of this page — load immediately.
1783      loadWidget();
1784    } else {
1785      // Home / product / collection (Lighthouse pages): never download the
1786      // bundle until the shopper actually opens the cart or adds to cart.
1787      // Production themes vary: Dawn uses <cart-drawer open>, others toggle
1788      // #CartDrawer.active / .is-open, or open a mini-cart after AJAX add.
1789      var TRIGGER_SELECTOR =
1790        "button[name='add'], [name='add'], [data-testid*='cart'], [href*='/cart'], " +
1791        ".cart-icon, .header__icon--cart, .header__icon--cart *, " +
1792        "[aria-controls*='cart' i], [aria-controls*='CartDrawer' i], " +
1793        "[data-cart-drawer], [data-drawer='cart'], [data-open-cart], [data-cart-toggle], " +
1794        "cart-drawer, cart-notification, [id*='cart-icon' i], #cart-icon-bubble, " +
1795        ".js-drawer-open-cart, .cart-link, .cart-count-bubble, " +
1796        "a[href$='/cart'], summary.header__icon--cart";
1797
1798      var DRAWER_SELECTOR =
1799        "cart-drawer, cart-notification, #CartDrawer, [id*='CartDrawer' i], " +
1800        ".cart-drawer, [data-cart-drawer], .mini-cart, #mini-cart, #MiniCart, " +
1801        ".ajax-cart, .side-cart, .drawer--cart, .cart-sidebar, dialog#CartDrawer";
1802
1803      var OPEN_CLASS_RE =
1804        /(^|\s)(active|is-open|is-active|is-visible|open|visible|drawer--open|cart-drawer--open|mini-cart--open)(\s|$)/i;
1805
1806      function classNameOf(el) {
1807        var cls = el && el.className;
1808        return cls ? (typeof cls === 'string' ? cls : String(cls)) : '';
1809      }
1810
1811      function isCartDrawerOpen(el) {
1812        if (!el) return false;
1813        if (el.hasAttribute('open')) return true;
1814        if (el.open === true) return true; // <dialog>
1815        return OPEN_CLASS_RE.test(classNameOf(el));
1816      }
1817
1818      function becameOpen(el, mutation) {
1819        if (!mutation) return isCartDrawerOpen(el);
1820        if (mutation.attributeName === 'open') {
1821          return el.hasAttribute('open') || el.open === true;
1822        }
1823        if (mutation.attributeName === 'class') {
1824          var was = OPEN_CLASS_RE.test(mutation.oldValue || '');
1825          var now = OPEN_CLASS_RE.test(classNameOf(el));
1826          return !was && now;
1827        }
1828        return false;
1829      }
1830
1831      document.addEventListener(
1832        'click',
1833        function (event) {
1834          if (widgetRequested) return;
1835          var t = event.target;
1836          if (!t) return;
1837          if (t.closest && t.closest(TRIGGER_SELECTOR)) {
1838            loadWidget();
1839            return;
1840          }
1841          // Cart icon is often an SVG inside a button/summary that doesn't
1842          // match the selector list — walk up a few nodes for cart-ish ids.
1843          var node = t.nodeType === 1 ? t : t.parentElement;
1844          var hops = 0;
1845          while (node && hops < 6) {
1846            var id = (node.id || '').toLowerCase();
1847            var aria = ((node.getAttribute && node.getAttribute('aria-label')) || '').toLowerCase();
1848            if (
1849              /(^|[-_])cart([-_]|$)/.test(id) ||
1850              id === 'cart' ||
1851              /\bcart\b/.test(aria)
1852            ) {
1853              loadWidget();
1854              return;
1855            }
1856            node = node.parentElement;
1857            hops++;
1858          }
1859        },
1860        { capture: true, passive: true }
1861      );
1862
1863      document.addEventListener(
1864        'submit',
1865        function (event) {
1866          if (widgetRequested) return;
1867          var form = event.target;
1868          if (form && form.getAttribute && /\/cart\/add/.test(form.getAttribute('action') || '')) {
1869            loadWidget();
1870          }
1871        },
1872        true
1873      );
1874
1875      // AJAX add-to-cart (Dawn/Horizon intercept the form and fetch /cart/add,
1876      // so the submit listener above never fires).
1877      if (window.fetch && !window.__genieCartAddFetchWrapped) {
1878        window.__genieCartAddFetchWrapped = true;
1879        var origFetch = window.fetch;
1880        window.fetch = function () {
1881          try {
1882            var input = arguments[0];
1883            var url = typeof input === 'string' ? input : input && (input.url || input.href);
1884            if (!widgetRequested && url && /\/cart\/add(?:\.js)?(?:\?|$)/.test(String(url))) {
1885              loadWidget();
1886            }
1887          } catch (e) {}
1888          return origFetch.apply(this, arguments);
1889        };
1890      }
1891
1892      function watchDrawerEl(el) {
1893        if (!el || el.__genieDrawerWatched) return;
1894        el.__genieDrawerWatched = true;
1895        // Do not load from the drawer's initial class list. Themes often keep
1896        // utility classes like "active"/"visible" on a closed drawer, which
1897        // would download the widget on every homepage (Lighthouse + every shop).
1898        new MutationObserver(function (mutations) {
1899          for (var i = 0; i < mutations.length; i++) {
1900            var m = mutations[i];
1901            var opened =
1902              becameOpen(el, m) ||
1903              (m.attributeName === 'aria-expanded' && m.oldValue !== 'true' && el.getAttribute('aria-expanded') === 'true') ||
1904              (m.attributeName === 'aria-hidden' && m.oldValue === 'true' && el.getAttribute('aria-hidden') === 'false') ||
1905              (m.attributeName === 'inert' && m.oldValue !== null && !el.hasAttribute('inert'));
1906            if (!opened) continue;
1907            loadWidget();
1908            if (typeof window.placeGenieDiv === 'function') {
1909              window.placeGenieDiv();
1910            }
1911            return;
1912          }
1913        }).observe(el, {
1914          attributes: true,
1915          attributeOldValue: true,
1916          attributeFilter: ['open', 'class', 'aria-hidden', 'aria-expanded', 'inert'],
1917        });
1918      }
1919
1920      function watchAllDrawers() {
1921        var nodes = document.querySelectorAll(DRAWER_SELECTOR);
1922        for (var i = 0; i < nodes.length; i++) watchDrawerEl(nodes[i]);
1923      }
1924      watchAllDrawers();
1925      // Header/cart sections can render after this embed; pick them up once.
1926      if (document.readyState === 'loading') {
1927        document.addEventListener('DOMContentLoaded', watchAllDrawers);
1928      }
1929      window.addEventListener('load', watchAllDrawers);
1930
1931      // Theme custom events (never cart:updated — many themes fire that on
1932      // the initial cart.js fetch and that would load the bundle during Lighthouse).
1933      ['cart:open', 'ajaxCart:open', 'drawer:open', 'cartDrawer:open'].forEach(function (name) {
1934        document.addEventListener(name, function () {
1935          loadWidget();
1936        });
1937      });
1938    }
1939
1940    // ------------------------------------------------------------------
1941    // Extra feature loader (trusted badges / speed optimizer / wishlist /
1942    // upsell). Cached per session. Starts only after a shopper gesture so
1943    // Lighthouse home/product/collection runs never download these bundles.
1944    // ------------------------------------------------------------------
1945    (function () {
1946      var input = document.getElementById('genie-shopify-domain');
1947      if (!input || !input.value || !String(input.value).trim()) {
1948        return;
1949      }
1950      var domain = String(input.value).trim();
1951
1952      var apiBase = (root.getAttribute('data-app-url') || '').replace(/\/$/, '');
1953      if (!apiBase) {
1954        return;
1955      }
1956
1957      var FLAGS_CACHE_KEY = 'genie_feature_flags:' + domain;
1958      var FLAGS_CACHE_TTL = 10 * 60 * 1000; // 10 minutes
1959
1960      function readCachedFlags() {
1961        try {
1962          var raw = sessionStorage.getItem(FLAGS_CACHE_KEY);
1963          if (!raw) return null;
1964          var parsed = JSON.parse(raw);
1965          if (!parsed || typeof parsed.t !== 'number' || Date.now() - parsed.t > FLAGS_CACHE_TTL) {
1966            return null;
1967          }
1968          return parsed.flags || null;
1969        } catch (e) {
1970          return null;
1971        }
1972      }
1973
1974      function writeCachedFlags(flags) {
1975        try {
1976          sessionStorage.setItem(FLAGS_CACHE_KEY, JSON.stringify({ t: Date.now(), flags: flags }));
1977        } catch (e) {}
1978      }
1979
1980      function callInit(name) {
1981        var fn = window[name];
1982        if (typeof fn === 'function') {
1983          fn();
1984        }
1985      }
1986
1987      function applyFlags(flags) {
1988        if (!flags) return;
1989        if (flags.trusted_badges_enabled) {
1990          addCss(root.getAttribute('data-trusted-badges-css'));
1991          addScript(root.getAttribute('data-trusted-badges-js'), {
1992            onload: function () {
1993              callInit('GenieTrustedBadgesInit');
1994            },
1995          });
1996        }
1997        if (flags.speed_optimizer_enabled) {
1998          addCss(root.getAttribute('data-speed-optimizer-css'));
1999          addScript(root.getAttribute('data-speed-optimizer-js'), {
2000            defer: true,
2001            onload: function () {
2002              callInit('GenieSpeedOptimizerInit');
2003            },
2004          });
2005        }
2006        if (flags.wishlist_enabled) {
2007          addCss(root.getAttribute('data-wishlist-css'));
2008          addScript(root.getAttribute('data-wishlist-js'), {
2009            defer: true,
2010            onload: function () {
2011              callInit('GenieWishlistInit');
2012            },
2013          });
2014        }
2015        if (flags.upsell_enabled) {
2016          var cfgEl = document.getElementById('genie-upsell-config-json');
2017          try {
2018            window.GenieUpsellConfig = cfgEl ? JSON.parse(cfgEl.textContent || 'null') : null;
2019          } catch (e) {
2020            window.GenieUpsellConfig = null;
2021          }
2022          window.GenieUpsellPageType = PAGE_TYPE;
2023          if (root.getAttribute('data-upsell-product-id')) {
2024            window.GenieUpsellProduct = {
2025              id: root.getAttribute('data-upsell-product-id'),
2026              collections: root.getAttribute('data-upsell-collections') || '',
2027            };
2028          }
2029          addCss(root.getAttribute('data-upsell-css'));
2030          addScript(root.getAttribute('data-upsell-js'), {
2031            defer: true,
2032            onload: function () {
2033              if (PAGE_TYPE === 'collection' || PAGE_TYPE === 'index') {
2034                window.GenieAddProductIds = true;
2035              }
2036              callInit('GenieUpsellInit');
2037            },
2038          });
2039        }
2040      }
2041
2042      var flagsRequested = false;
2043      function fetchAndApplyFlags() {
2044        if (flagsRequested) return;
2045        flagsRequested = true;
2046        var cached = readCachedFlags();
2047        if (cached) {
2048          applyFlags(cached);
2049          return;
2050        }
2051        var url = apiBase + '/api/v1/shop_extra_feature_flags?shopify_domain=' + encodeURIComponent(domain);
2052        fetch(url, { method: 'GET', credentials: 'omit', mode: 'cors' })
2053          .then(function (r) {
2054            if (!r.ok) throw new Error('bad response');
2055            return r.json();
2056          })
2057          .then(function (flags) {
2058            writeCachedFlags(flags);
2059            applyFlags(flags);
2060          })
2061          .catch(function () {});
2062      }
2063
2064      // pointer/key/touch only — Lighthouse may scroll the page for screenshots,
2065      // so do not use scroll as a trigger.
2066      ['pointerdown', 'keydown', 'touchstart'].forEach(function (ev) {
2067        window.addEventListener(ev, fetchAndApplyFlags, { capture: true, passive: true, once: true });
2068      });
2069    })();
2070  })();
2071</script>
2071
2072
2073
2074</div><div id="shopify-block-AYkpjcWFINkF3RWlJV__1513253815146976218" class="shopify-block shopify-app-block">
2075</div>
2075<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
2075
2076</body>
2077
2078</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.