PageSourceSearch

https://alcell.co.za/products/viewsonic-27-180hz-gaming-monitor

html alcell.co.za collected 2026-10-07 12:36:46 UTC 499,384 bytes, 6,647 lines download raw bytes

1<!doctype html>
2<html class="js" lang="en">
3  <head>
4    <meta charset="utf-8">
5    <meta http-equiv="X-UA-Compatible" content="IE=edge">
6    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
7    <meta name="theme-color" content="#F2F2F4">
8    <link rel="canonical" href="https://alcell.co.za/products/viewsonic-27-180hz-gaming-monitor"><link rel="icon" type="image/png" href="//alcell.co.za/cdn/shop/files/favicon-rounded.svg?crop=center&height=32&v=1780640814&width=32"><link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin><link rel="preload" as="font" type="font/otf" href="//alcell.co.za/cdn/shop/t/2/assets/samsungsharpsans.otf?v=130922532289964231811784104759" crossorigin>
9    <link rel="preload" as="font" type="font/otf" href="//alcell.co.za/cdn/shop/t/2/assets/samsungsharpsans-bold.otf?v=23489944268534585621784104758" crossorigin>
10
11    <title>
12      ViewSonic 27&quot; 180Hz Gaming Monitor VX2779-HD-PRO
13</title>
14
15    
16      <meta name="description" content="ViewSonic VX2779-HD-PRO 27&quot; Full HD IPS gaming monitor with 180Hz refresh, 1ms MPRT, AMD FreeSync and HDR10. HDMI + DisplayPort. Fast delivery across South Africa.">
17    
18
19    
20
21<meta property="og:site_name" content="Alcell">
22<meta property="og:url" content="https://alcell.co.za/products/viewsonic-27-180hz-gaming-monitor">
23<meta property="og:title" content="ViewSonic 27&quot; 180Hz Gaming Monitor VX2779-HD-PRO">
24<meta property="og:type" content="product">
25<meta property="og:description" content="ViewSonic VX2779-HD-PRO 27&quot; Full HD IPS gaming monitor with 180Hz refresh, 1ms MPRT, AMD FreeSync and HDR10. HDMI + DisplayPort. Fast delivery across South Africa."><meta property="og:image" content="http://alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857">
26  <meta property="og:image:secure_url" content="https://alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857">
27  <meta property="og:image:width" content="800">
28  <meta property="og:image:height" content="600"><meta property="og:price:amount" content="2,912.00">
29  <meta property="og:price:currency" content="ZAR"><meta name="twitter:card" content="summary_large_image">
30<meta name="twitter:title" content="ViewSonic 27&quot; 180Hz Gaming Monitor VX2779-HD-PRO">
31<meta name="twitter:description" content="ViewSonic VX2779-HD-PRO 27&quot; Full HD IPS gaming monitor with 180Hz refresh, 1ms MPRT, AMD FreeSync and HDR10. HDMI + DisplayPort. Fast delivery across South Africa.">
32
33
34    
34<script src="//alcell.co.za/cdn/shop/t/2/assets/constants.js?v=132983761750457495441778844526" defer="defer"></script>
34
35    
35<script src="//alcell.co.za/cdn/shop/t/2/assets/pubsub.js?v=25310214064522200911778844526" defer="defer"></script>
35
36    
36<script src="//alcell.co.za/cdn/shop/t/2/assets/global.js?v=146300553914416974151780903069" defer="defer"></script>
36
37    
37<script src="//alcell.co.za/cdn/shop/t/2/assets/details-disclosure.js?v=13653116266235556501778844523" defer="defer"></script>
37
38    
38<script src="//alcell.co.za/cdn/shop/t/2/assets/details-modal.js?v=25581673532751508451778844524" defer="defer"></script>
38
39    
39<script src="//alcell.co.za/cdn/shop/t/2/assets/search-form.js?v=133129549252120666541778844527" defer="defer"></script>
39
40    
40<script src="//alcell.co.za/cdn/shop/t/2/assets/wishlist.js?v=61383581785775339331782909459" defer="defer"></script>
40<script src="//alcell.co.za/cdn/shop/t/2/assets/animations.js?v=88693664871331136111778844523" defer="defer"></script>
40<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
40<meta name="google-site-verification" content="3Ebyaz5wQNXy4iXDYsTvA7SIXvdIiLQziXYY47y1xxY">
41<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/76430475311/digital_wallets/dialog">
42<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="buy" href="/cart/45356979683375:1?ucp/version=2026-08-25" payment="com.google.pay dev.shopify.card dev.shopify.shop_pay"><link rel="alternate" type="application/json+oembed" href="https://alcell.co.za/products/viewsonic-27-180hz-gaming-monitor.oembed">
43<script async="async" src="/checkouts/internal/preloads.js?locale=en-ZA"></script>
vendor: 1 bytes, line 43
43
44<script id="shopify-features" type="application/json">{"accessToken":"a52cd7c18bcf08b84f0715725b466db2","betas":["rich-media-storefront-analytics"],"domain":"alcell.co.za","predictiveSearch":true,"shopId":76430475311,"locale":"en"}</script>
vendor: 1 bytes, line 44
44
45<script>var Shopify = Shopify || {};
46Shopify.shop = "4ryqyx-mf.myshopify.com";
47Shopify.locale = "en";
48Shopify.currency = {"active":"ZAR","rate":"1.0"};
49Shopify.country = "ZA";
50Shopify.theme = {"name":"Alcell-Website\/main","id":156650274863,"schema_name":"Dawn","schema_version":"15.4.1","theme_store_id":null,"role":"main"};
51Shopify.theme.handle = "null";
52Shopify.theme.style = {"id":null,"handle":null};
53Shopify.cdnHost = "alcell.co.za/cdn";
54Shopify.routes = Shopify.routes || {};
55Shopify.routes.root = "/";
56Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js";
57Shopify.SignInWithShop = Shopify.SignInWithShop || {};
58Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {};
59Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 59
59
60<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 60
60
61<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 61
61
62<script>
63  window.Shopify = window.Shopify || {};
64  window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {};
65  window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 };
66  window.Shopify.SignInWithShop.eligible = false;
67</script>
vendor: 1 bytes, line 67
67
68<script id="shop-js-analytics" type="application/json">{"pageType":"product"}</script>
vendor: 1 bytes, line 68
68
69<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 69
69
70<script type="module">
71  await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js");
72
73  window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true});
74
75</script>
vendor: 1 bytes, line 75
75
76<script id="__st">var __st={"a":76430475311,"offset":7200,"reqid":"ba57d535-845d-41dc-af9a-8a2519adfee7-1791376606","pageurl":"alcell.co.za\/products\/viewsonic-27-180hz-gaming-monitor","u":"06f0a9c24b51","p":"product","rtyp":"product","rid":8270253555759};</script>
vendor: 1 bytes, line 76
76
77<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 77
77
78<script id="form-persister">!function(){'use strict';const t='contact',e='new_comment',n=[[t,t],['blogs',e],['comments',e],[t,'customer']],o='password',r='form_key',c=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',o],s=()=>{try{return window.sessionStorage}catch{return}},i='__shopify_v',u=t=>t.elements[r],a=function(){const t=[...n].map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(',');var e;return e=t,()=>e?[...document.querySelectorAll(e)].map((t=>t.form)):[]}();function m(t){const e=u(t);a().includes(t)&&(!e||!e.value)&&function(t){try{if(!s())return;!function(t){const e=s();if(!e)return;const n=u(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){u(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:r})),t.elements[r].value=e}(t,e),function(t,e){const n=s();if(!n)return;const r=[...t.querySelectorAll(`input[type='${o}']`)].map((({name:t})=>t)),u=[...c,...r],a={};for(const[o,c]of new FormData(t).entries())u.includes(o)||(a[o]=c);n.setItem(e,JSON.stringify({[i]:1,action:t.action,data:a}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(t)}const f=t=>{if('true'===t.dataset.persistBound)return;const e=function(t,e){const n=function(t){return'function'==typeof t.submit?t.submit:HTMLFormElement.prototype.submit}(t).bind(t);return function(){let t;return()=>{t||(t=!0,(()=>{try{e(),n()}catch(t){(t=>{console.error('form submit failed',t)})(t)}})(),setTimeout((()=>t=!1),250))}}()}(t,(()=>{m(t)}));!function(t,e){if('function'==typeof t.submit&&'function'==typeof e)try{t.submit=e}catch{}}(t,e),t.addEventListener('submit',(t=>{t.preventDefault(),e()})),t.dataset.persistBound='true'};!function(){function t(t){const e=(t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form})(t);e&&m(e)}document.addEventListener('submit',t),document.addEventListener('DOMContentLoaded',(()=>{const e=a();for(const t of e)f(t);var n;n=document.body,new window.MutationObserver((t=>{for(const e of t)if('childList'===e.type&&e.addedNodes.length)for(const t of e.addedNodes)1===t.nodeType&&'FORM'===t.tagName&&a().includes(t)&&f(t)})).observe(n,{childList:!0,subtree:!0,attributes:!1}),document.removeEventListener('submit',t)}))}()}();</script>
vendor: 1 bytes, line 78
78
79<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//alcell.co.za/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 79
79
80<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 = "//alcell.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>
80<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 80
80
81<script>
82  window.Shopify = window.Shopify || {};
83  window.Shopify.MCP = window.Shopify.MCP || {};
84  window.Shopify.MCP.enabled = true;
85  window.Shopify.MCP.shop = "4ryqyx-mf.myshopify.com";
86  window.Shopify.MCP.mcpEndpoint = "https:\/\/alcell.co.za\/api\/mcp";
87  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?\"\nSet policy_types to also get the store's written policies (full text and URL).\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."},"policy_types":{"type":"array","items":{"type":"string","enum":["refund","shipping","privacy","terms_of_service","terms_of_sale","subscription","legal_notice","contact"]},"description":"Policy kinds to fetch, chosen from the user's question — e.g. [\"refund\"] for returns\/exchanges\/damaged items, [\"contact\"] for phone\/hours\/address. Include every kind the question touches. Omit it to get only FAQ answers."}},"required":["query"]}}];
88</script>
vendor: 1 bytes, line 88
88
89<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("\/\/alcell.co.za\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})();
90</script>
vendor: 1 bytes, line 90
90
91<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://alcell.co.za/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}};
92</script>
vendor: 1 bytes, line 92
92
93<script data-source-attribution="shopify.dynamic_checkout.buyer_consent">
94  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);
95</script>
vendor: 1 bytes, line 95
95
96<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})}}));
97</script>
97
98
99<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
99
100
101
102    <style data-shopify>
103      @font-face {
104  font-family: Montserrat;
105  font-weight: 400;
106  font-style: normal;
107  font-display: swap;
108  src: url("//alcell.co.za/cdn/fonts/montserrat/montserrat_n4.81949fa0ac9fd2021e16436151e8eaa539321637.woff2") format("woff2"),
109       url("//alcell.co.za/cdn/fonts/montserrat/montserrat_n4.a6c632ca7b62da89c3594789ba828388aac693fe.woff") format("woff");
110}
111
112      @font-face {
113  font-family: Montserrat;
114  font-weight: 700;
115  font-style: normal;
116  font-display: swap;
117  src: url("//alcell.co.za/cdn/fonts/montserrat/montserrat_n7.3c434e22befd5c18a6b4afadb1e3d77c128c7939.woff2") format("woff2"),
118       url("//alcell.co.za/cdn/fonts/montserrat/montserrat_n7.5d9fa6e2cae713c8fb539a9876489d86207fe957.woff") format("woff");
119}
120
121      @font-face {
122  font-family: Montserrat;
123  font-weight: 400;
124  font-style: italic;
125  font-display: swap;
126  src: url("//alcell.co.za/cdn/fonts/montserrat/montserrat_i4.5a4ea298b4789e064f62a29aafc18d41f09ae59b.woff2") format("woff2"),
127       url("//alcell.co.za/cdn/fonts/montserrat/montserrat_i4.072b5869c5e0ed5b9d2021e4c2af132e16681ad2.woff") format("woff");
128}
129
130      @font-face {
131  font-family: Montserrat;
132  font-weight: 700;
133  font-style: italic;
134  font-display: swap;
135  src: url("//alcell.co.za/cdn/fonts/montserrat/montserrat_i7.a0d4a463df4f146567d871890ffb3c80408e7732.woff2") format("woff2"),
136       url("//alcell.co.za/cdn/fonts/montserrat/montserrat_i7.f6ec9f2a0681acc6f8152c40921d2a4d2e1a2c78.woff") format("woff");
137}
138
139      @font-face {
140  font-family: Montserrat;
141  font-weight: 500;
142  font-style: normal;
143  font-display: swap;
144  src: url("//alcell.co.za/cdn/fonts/montserrat/montserrat_n5.07ef3781d9c78c8b93c98419da7ad4fbeebb6635.woff2") format("woff2"),
145       url("//alcell.co.za/cdn/fonts/montserrat/montserrat_n5.adf9b4bd8b0e4f55a0b203cdd84512667e0d5e4d.woff") format("woff");
146}
147
148      @font-face {
149  font-family: Montserrat;
150  font-weight: 400;
151  font-style: normal;
152  font-display: swap;
153  src: url("//alcell.co.za/cdn/fonts/montserrat/montserrat_n4.81949fa0ac9fd2021e16436151e8eaa539321637.woff2") format("woff2"),
154       url("//alcell.co.za/cdn/fonts/montserrat/montserrat_n4.a6c632ca7b62da89c3594789ba828388aac693fe.woff") format("woff");
155}
156
157      @font-face {
158  font-family: Montserrat;
159  font-weight: 600;
160  font-style: normal;
161  font-display: swap;
162  src: url("//alcell.co.za/cdn/fonts/montserrat/montserrat_n6.1326b3e84230700ef15b3a29fb520639977513e0.woff2") format("woff2"),
163       url("//alcell.co.za/cdn/fonts/montserrat/montserrat_n6.652f051080eb14192330daceed8cd53dfdc5ead9.woff") format("woff");
164}
165
166
167      /* Brand font — Samsung Sharp Sans, site-wide (same setup as Sirair).
168         Loaded here once and prepended to --font-body-family /
169         --font-heading-family below, so every component that uses the theme
170         font variables picks it up while keeping its existing weights and
171         sizes. Weight map: 500 AND 600 → medium, 700 → bold. 600→medium is
172         deliberate — the site's 600-weight components (header pills, carousel
173         headings, etc.) were designed against the medium face; mapping 600 to
174         bold reads too heavy.
175
176         Metric overrides: the OTFs declare ascent 950 / descent 283 with cap
177         height 730 (per 1000 upm) — only 220 units above caps vs 283 below the
178         baseline, so uncorrected text rides ~3% of the font-size too high in
179         every line box. 98% / 25% keeps the same total (1233 → 1230) but splits
180         the slack evenly around cap-height text. Declared ONLY here — a later
181         @font-face for the same family+weight would silently replace these, so
182         don't re-declare the family in section/snippet CSS. */
183      @font-face {
184        font-family: 'Samsung Sharp Sans';
185        font-style: normal; font-weight: 400; font-display: swap;
186        ascent-override: 98%; descent-override: 25%; line-gap-override: 0%;
187        src: url('//alcell.co.za/cdn/shop/t/2/assets/samsungsharpsans.otf?v=130922532289964231811784104759') format('opentype');
188      }
189      @font-face {
190        font-family: 'Samsung Sharp Sans';
191        font-style: normal; font-weight: 500; font-display: swap;
192        ascent-override: 98%; descent-override: 25%; line-gap-override: 0%;
193        src: url('//alcell.co.za/cdn/shop/t/2/assets/samsungsharpsans-medium.otf?v=14712113869149329641784104758') format('opentype');
194      }
195      @font-face {
196        font-family: 'Samsung Sharp Sans';
197        font-style: normal; font-weight: 600; font-display: swap;
198        ascent-override: 98%; descent-override: 25%; line-gap-override: 0%;
199        src: url('//alcell.co.za/cdn/shop/t/2/assets/samsungsharpsans-medium.otf?v=14712113869149329641784104758') format('opentype');
200      }
201      @font-face {
202        font-family: 'Samsung Sharp Sans';
203        font-style: normal; font-weight: 700; font-display: swap;
204        ascent-override: 98%; descent-override: 25%; line-gap-override: 0%;
205        src: url('//alcell.co.za/cdn/shop/t/2/assets/samsungsharpsans-bold.otf?v=23489944268534585621784104758') format('opentype');
206      }
207
208      /* Form controls don't inherit fonts by default (they fall back to the
209         UA font, e.g. Arial) — pin them to the theme font. Element-level
210         selector, so any component that sets its own font-family still wins. */
211      button, input, select, textarea {
212        font-family: var(--font-body-family);
213      }
214
215      
216        :root,
217        .color-scheme-1 {
218          --color-background: 255,255,255;
219        
220          --gradient-background: #ffffff;
221        
222
223        
224
225        --color-foreground: 14,20,17;
226        --color-background-contrast: 191,191,191;
227        --color-shadow: 14,20,17;
228        --color-button: 222,73,73;
229        --color-button-text: 255,255,255;
230        --color-secondary-button: 255,255,255;
231        --color-secondary-button-text: 14,20,17;
232        --color-link: 14,20,17;
233        --color-badge-foreground: 14,20,17;
234        --color-badge-background: 255,255,255;
235        --color-badge-border: 14,20,17;
236        --payment-terms-background-color: rgb(255 255 255);
237      }
238      
239        
240        .color-scheme-2 {
241          --color-background: 244,242,236;
242        
243          --gradient-background: #f4f2ec;
244        
245
246        
247
248        --color-foreground: 14,20,17;
249        --color-background-contrast: 197,187,155;
250        --color-shadow: 14,20,17;
251        --color-button: 222,73,73;
252        --color-button-text: 255,255,255;
253        --color-secondary-button: 244,242,236;
254        --color-secondary-button-text: 14,20,17;
255        --color-link: 14,20,17;
256        --color-badge-foreground: 14,20,17;
257        --color-badge-background: 244,242,236;
258        --color-badge-border: 14,20,17;
259        --payment-terms-background-color: rgb(244 242 236);
260      }
261      
262        
263        .color-scheme-3 {
264          --color-background: 222,73,73;
265        
266          --gradient-background: #de4949;
267        
268
269        
270
271        --color-foreground: 255,255,255;
272        --color-background-contrast: 142,26,26;
273        --color-shadow: 14,20,17;
274        --color-button: 255,255,255;
275        --color-button-text: 222,73,73;
276        --color-secondary-button: 222,73,73;
277        --color-secondary-button-text: 255,255,255;
278        --color-link: 255,255,255;
279        --color-badge-foreground: 255,255,255;
280        --color-badge-background: 222,73,73;
281        --color-badge-border: 255,255,255;
282        --payment-terms-background-color: rgb(222 73 73);
283      }
284      
285        
286        .color-scheme-4 {
287          --color-background: 14,20,17;
288        
289          --gradient-background: #0e1411;
290        
291
292        
293
294        --color-foreground: 255,255,255;
295        --color-background-contrast: 125,164,145;
296        --color-shadow: 14,20,17;
297        --color-button: 222,73,73;
298        --color-button-text: 255,255,255;
299        --color-secondary-button: 14,20,17;
300        --color-secondary-button-text: 255,255,255;
301        --color-link: 255,255,255;
302        --color-badge-foreground: 255,255,255;
303        --color-badge-background: 14,20,17;
304        --color-badge-border: 255,255,255;
305        --payment-terms-background-color: rgb(14 20 17);
306      }
307      
308        
309        .color-scheme-5 {
310          --color-background: 222,73,73;
311        
312          --gradient-background: #de4949;
313        
314
315        
316
317        --color-foreground: 255,255,255;
318        --color-background-contrast: 142,26,26;
319        --color-shadow: 14,20,17;
320        --color-button: 255,255,255;
321        --color-button-text: 222,73,73;
322        --color-secondary-button: 222,73,73;
323        --color-secondary-button-text: 255,255,255;
324        --color-link: 255,255,255;
325        --color-badge-foreground: 255,255,255;
326        --color-badge-background: 222,73,73;
327        --color-badge-border: 255,255,255;
328        --payment-terms-background-color: rgb(222 73 73);
329      }
330      
331
332      body, .color-scheme-1, .color-scheme-2, .color-scheme-3, .color-scheme-4, .color-scheme-5 {
333        color: rgba(var(--color-foreground), 0.75);
334        background-color: rgb(var(--color-background));
335      }
336
337      :root {
338        --font-body-family: 'Samsung Sharp Sans', Montserrat, sans-serif;
339        --font-body-style: normal;
340        --font-body-weight: 400;
341        --font-body-weight-bold: 700;
342
343        --font-heading-family: 'Samsung Sharp Sans', Montserrat, sans-serif;
344        --font-heading-style: normal;
345        --font-heading-weight: 400;
346
347        --font-body-scale: 1.0;
348        --font-heading-scale: 1.1;
349
350        --media-padding: px;
351        --media-border-opacity: 0.05;
352        --media-border-width: 0px;
353        --media-radius: 0px;
354        --media-shadow-opacity: 0.0;
355        --media-shadow-horizontal-offset: 0px;
356        --media-shadow-vertical-offset: 4px;
357        --media-shadow-blur-radius: 5px;
358        --media-shadow-visible: 0;
359
360        --page-width: 140rem;
361        --page-width-margin: 0rem;
362
363        --product-card-image-padding: 0.0rem;
364        --product-card-corner-radius: 0.0rem;
365        --product-card-text-alignment: left;
366        --product-card-border-width: 0.0rem;
367        --product-card-border-opacity: 0.1;
368        --product-card-shadow-opacity: 0.0;
369        --product-card-shadow-visible: 0;
370        --product-card-shadow-horizontal-offset: 0.0rem;
371        --product-card-shadow-vertical-offset: 0.4rem;
372        --product-card-shadow-blur-radius: 0.5rem;
373
374        --collection-card-image-padding: 0.0rem;
375        --collection-card-corner-radius: 0.0rem;
376        --collection-card-text-alignment: left;
377        --collection-card-border-width: 0.0rem;
378        --collection-card-border-opacity: 0.1;
379        --collection-card-shadow-opacity: 0.0;
380        --collection-card-shadow-visible: 0;
381        --collection-card-shadow-horizontal-offset: 0.0rem;
382        --collection-card-shadow-vertical-offset: 0.4rem;
383        --collection-card-shadow-blur-radius: 0.5rem;
384
385        --blog-card-image-padding: 0.0rem;
386        --blog-card-corner-radius: 0.0rem;
387        --blog-card-text-alignment: left;
388        --blog-card-border-width: 0.0rem;
389        --blog-card-border-opacity: 0.1;
390        --blog-card-shadow-opacity: 0.0;
391        --blog-card-shadow-visible: 0;
392        --blog-card-shadow-horizontal-offset: 0.0rem;
393        --blog-card-shadow-vertical-offset: 0.4rem;
394        --blog-card-shadow-blur-radius: 0.5rem;
395
396        --badge-corner-radius: 0.0rem;
397
398        --popup-border-width: 1px;
399        --popup-border-opacity: 0.1;
400        --popup-corner-radius: 0px;
401        --popup-shadow-opacity: 0.05;
402        --popup-shadow-horizontal-offset: 0px;
403        --popup-shadow-vertical-offset: 4px;
404        --popup-shadow-blur-radius: 5px;
405
406        --drawer-border-width: 1px;
407        --drawer-border-opacity: 0.1;
408        --drawer-shadow-opacity: 0.0;
409        --drawer-shadow-horizontal-offset: 0px;
410        --drawer-shadow-vertical-offset: 4px;
411        --drawer-shadow-blur-radius: 5px;
412
413        --spacing-sections-desktop: 0px;
414        --spacing-sections-mobile: 0px;
415
416        --grid-desktop-vertical-spacing: 8px;
417        --grid-desktop-horizontal-spacing: 8px;
418        --grid-mobile-vertical-spacing: 4px;
419        --grid-mobile-horizontal-spacing: 4px;
420
421        --text-boxes-border-opacity: 0.1;
422        --text-boxes-border-width: 0px;
423        --text-boxes-radius: 0px;
424        --text-boxes-shadow-opacity: 0.0;
425        --text-boxes-shadow-visible: 0;
426        --text-boxes-shadow-horizontal-offset: 0px;
427        --text-boxes-shadow-vertical-offset: 4px;
428        --text-boxes-shadow-blur-radius: 5px;
429
430        --buttons-radius: 16px;
431        --buttons-radius-outset: 17px;
432        --buttons-border-width: 1px;
433        --buttons-border-opacity: 1.0;
434        --buttons-shadow-opacity: 0.0;
435        --buttons-shadow-visible: 0;
436        --buttons-shadow-horizontal-offset: 0px;
437        --buttons-shadow-vertical-offset: 4px;
438        --buttons-shadow-blur-radius: 5px;
439        --buttons-border-offset: 0.3px;
440
441        --inputs-radius: 0px;
442        --inputs-border-width: 1px;
443        --inputs-border-opacity: 0.55;
444        --inputs-shadow-opacity: 0.0;
445        --inputs-shadow-horizontal-offset: 0px;
446        --inputs-margin-offset: 0px;
447        --inputs-shadow-vertical-offset: 4px;
448        --inputs-shadow-blur-radius: 5px;
449        --inputs-radius-outset: 0px;
450
451        --variant-pills-radius: 0px;
452        --variant-pills-border-width: 1px;
453        --variant-pills-border-opacity: 0.55;
454        --variant-pills-shadow-opacity: 0.0;
455        --variant-pills-shadow-horizontal-offset: 0px;
456        --variant-pills-shadow-vertical-offset: 4px;
457        --variant-pills-shadow-blur-radius: 5px;
458      }
459
460      *,
461      *::before,
462      *::after {
463        box-sizing: inherit;
464      }
465
466      html {
467        box-sizing: border-box;
468        font-size: calc(var(--font-body-scale) * 62.5%);
469        height: 100%;
470      }
471
472      body {
473        display: grid;
474        grid-template-rows: auto auto 1fr auto;
475        grid-template-columns: 100%;
476        min-height: 100%;
477        margin: 0;
478        font-size: 1.5rem;
479        letter-spacing: 0.06rem;
480        line-height: calc(1 + 0.8 / var(--font-body-scale));
481        font-family: var(--font-body-family);
482        font-style: var(--font-body-style);
483        font-weight: var(--font-body-weight);
484      }
485
486      @media screen and (min-width: 750px) {
487        body {
488          font-size: 1.6rem;
489        }
490      }
491    </style>
492
493    <link href="//alcell.co.za/cdn/shop/t/2/assets/base.css?v=1009017871951493201780651908" rel="stylesheet" type="text/css" media="all" />
494    <link href="//alcell.co.za/cdn/shop/t/2/assets/agri-custom.css?v=29707650770993925781780855987" rel="stylesheet" type="text/css" media="all" />
495    <link href="//alcell.co.za/cdn/shop/t/2/assets/header-mega.css?v=81878100577633791941778851728" rel="stylesheet" type="text/css" media="all" />
496    <link href="//alcell.co.za/cdn/shop/t/2/assets/collection-page.css?v=105642221280870565551790095687" rel="stylesheet" type="text/css" media="all" />
497    <link href="//alcell.co.za/cdn/shop/t/2/assets/wishlist.css?v=84501308364128637261781075225" rel="stylesheet" type="text/css" media="all" />
498    
498<script src="//alcell.co.za/cdn/shop/t/2/assets/header-mega-hover.js?v=159896636450886081891778844526" defer></script>
498
499    <link rel="stylesheet" href="//alcell.co.za/cdn/shop/t/2/assets/component-cart-items.css?v=13033300910818915211778844525" media="print" onload="this.media='all'">
500      <link rel="preload" as="font" href="//alcell.co.za/cdn/fonts/montserrat/montserrat_n4.81949fa0ac9fd2021e16436151e8eaa539321637.woff2" type="font/woff2" crossorigin>
501      
502
503      <link rel="preload" as="font" href="//alcell.co.za/cdn/fonts/montserrat/montserrat_n4.81949fa0ac9fd2021e16436151e8eaa539321637.woff2" type="font/woff2" crossorigin>
504      
505<link
506        rel="stylesheet"
507        href="//alcell.co.za/cdn/shop/t/2/assets/component-predictive-search.css?v=79363724003456793641790095687"
508        media="print"
509        onload="this.media='all'"
510      >
510<script>
511      if (Shopify.designMode) {
512        document.documentElement.classList.add('shopify-design-mode');
513      }
514    </script>
514
515  
515<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>
515
516<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
517<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: 76430475311,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "product"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 517
517
518<script>
519  window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || [];
520</script>
vendor: 1 bytes, line 520
520
521<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}
521).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: 76430475311,storefrontBaseUrl: "https://alcell.co.za",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://alcell.co.za/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b"],webPixelsConfigList: [{"id":"2731147311","configuration":"{\"shopId\":\"76430475311\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"83adcaf06c5deacff41ffdf8f92d9129","type":"APP","apiClientId":246667608065,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_phone","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2492661807","configuration":"{\"pixel_id\":\"1867449620880527\",\"pixel_type\":\"facebook_pixel\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"bd2f978c17a94bbb8a74d43de2165dc5","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":"2492596271","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-S8VQXWWN3Q\\\",\\\"AW-16595706303\\\",\\\"GT-NGMSX7GK\\\"],\\\"target_country\\\":\\\"ZZ\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-S8VQXWWN3Q\\\",\\\"AW-16595706303\\\/YIXOCIir0sMcEL_Duek9\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-S8VQXWWN3Q\\\",\\\"AW-16595706303\\\/rBzTCJSr0sMcEL_Duek9\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-S8VQXWWN3Q\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-S8VQXWWN3Q\\\",\\\"AW-16595706303\\\/Ny1ZCJGr0sMcEL_Duek9\\\",\\\"MC-TPX4XXPVSB\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-S8VQXWWN3Q\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-S8VQXWWN3Q\\\",\\\"AW-16595706303\\\/2bRKCIWr0sMcEL_Duek9\\\",\\\"MC-TPX4XXPVSB\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-S8VQXWWN3Q\\\",\\\"AW-16595706303\\\/lKI9CI6r0sMcEL_Duek9\\\",\\\"MC-TPX4XXPVSB\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-S8VQXWWN3Q\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-S8VQXWWN3Q\\\",\\\"AW-16595706303\\\/dpD6CJer0sMcEL_Duek9\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-S8VQXWWN3Q\\\",\\\"AW-16595706303\\\/zfbSCIur0sMcEL_Duek9\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-S8VQXWWN3Q\\\"}],\\\"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":"2456289327","configuration":"{\"apiURL\":\"https:\/\/api.omnisend.com\",\"appURL\":\"https:\/\/app.omnisend.com\",\"brandID\":\"6a2ad00a669779e94cf986ed\",\"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":[]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"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":"Alcell","paymentSettings":{"currencyCode":"ZAR"},"myshopifyDomain":"4ryqyx-mf.myshopify.com","countryCode":"ZA","storefrontUrl":"https:\/\/alcell.co.za"},"customer":null,"cart":null,"checkout":null,"productVariants":[{"price":{"amount":2912.0,"currencyCode":"ZAR"},"product":{"title":"ViewSonic VX2779-HD-PRO 27\" Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10","vendor":"VIEWSONIC","id":"8270253555759","untranslatedTitle":"ViewSonic VX2779-HD-PRO 27\" Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10","url":"\/products\/viewsonic-27-180hz-gaming-monitor","type":"TVs \u0026 Screens"},"id":"45356979683375","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857"},"sku":"VX2779-HD-PRO","title":"Default Title","untranslatedTitle":"Default Title"}],"products":[{"id":"8270253555759","handle":"viewsonic-27-180hz-gaming-monitor","isCollective":null,"title":"ViewSonic VX2779-HD-PRO 27\" Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10","type":"TVs \u0026 Screens","untranslatedTitle":"ViewSonic VX2779-HD-PRO 27\" Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10","url":"\/products\/viewsonic-27-180hz-gaming-monitor","vendor":"VIEWSONIC","remoteShopId":null,"variants":[{"id":"45356979683375","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857"},"price":{"amount":2912.0,"currencyCode":"ZAR"},"sku":"VX2779-HD-PRO","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270300413999","handle":"viewsonic-27-240hz-2k-gaming-monitor","isCollective":null,"title":"ViewSonic 27\" QHD IPS Gaming Monitor (VX2758A-2K-PRO-3) - 240Hz, 1ms, HDMI 2.1, HDR10","type":"TVs \u0026 Screens","untranslatedTitle":"ViewSonic 27\" QHD IPS Gaming Monitor (VX2758A-2K-PRO-3) - 240Hz, 1ms, HDMI 2.1, HDR10","url":"\/products\/viewsonic-27-240hz-2k-gaming-monitor","vendor":"VIEWSONIC","remoteShopId":null,"variants":[{"id":"45357067829295","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/vx2758a-2k-pro-3_d6912097-37bf-45bc-b486-27a97740f97b.jpg?v=1782311877"},"price":{"amount":5339.0,"currencyCode":"ZAR"},"sku":"VX2758A-2K-PRO-3","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270299267119","handle":"viewsonic-315curved-gaming-monitor","isCollective":null,"title":"ViewSonic VX3219-PC-MHD 3
5211.5\" FHD 240Hz Curved Gaming Monitor - 1ms, HDR10, FreeSync Premium","type":"Gaming","untranslatedTitle":"ViewSonic VX3219-PC-MHD 31.5\" FHD 240Hz Curved Gaming Monitor - 1ms, HDR10, FreeSync Premium","url":"\/products\/viewsonic-315curved-gaming-monitor","vendor":"VIEWSONIC","remoteShopId":null,"variants":[{"id":"45357063929903","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/vx3219-pc-mhd_b07a2a97-9084-493d-b2b3-18c5b2cdde85.jpg?v=1782311873"},"price":{"amount":5048.0,"currencyCode":"ZAR"},"sku":"VX3219-PC-MHD","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270300217391","handle":"viewsonic-27-led-gaming-monitor-240hz","isCollective":null,"title":"ViewSonic 27\" FHD IPS Gaming Monitor (XG2709A) - 240Hz, 1ms, FreeSync, HDR10","type":"TVs \u0026 Screens","untranslatedTitle":"ViewSonic 27\" FHD IPS Gaming Monitor (XG2709A) - 240Hz, 1ms, FreeSync, HDR10","url":"\/products\/viewsonic-27-led-gaming-monitor-240hz","vendor":"VIEWSONIC","remoteShopId":null,"variants":[{"id":"45357067305007","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/xg2709a_62813131-64eb-4729-a6e2-42d955649155.jpg?v=1782311875"},"price":{"amount":3689.0,"currencyCode":"ZAR"},"sku":"XG2709A","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8321315242031","handle":"gaming-monitor-24-240hz-ips-viewsonic-vx2479a-hd-pro","isCollective":null,"title":"ViewSonic 24\" 240Hz IPS Gaming Monitor VX2479A-HD-PRO - FHD 1080p, 1ms, FreeSync Premium","type":null,"untranslatedTitle":"ViewSonic 24\" 240Hz IPS Gaming Monitor VX2479A-HD-PRO - FHD 1080p, 1ms, FreeSync Premium","url":"\/products\/gaming-monitor-24-240hz-ips-viewsonic-vx2479a-hd-pro","vendor":"VIEWSONIC","remoteShopId":null,"variants":[{"id":"45521689673775","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/vx2479a-hd-pro_8eb6cd71-5cf8-4bce-be3f-f7d1c8802ad9.jpg?v=1782981773"},"price":{"amount":2912.0,"currencyCode":"ZAR"},"sku":"VX2479A-HD-PRO","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270312603695","handle":"viewsonic-24-240hz-gaming-monitor","isCollective":null,"title":"ViewSonic 24\" Full HD 240Hz IPS Gaming Monitor (XG2409A) - 1ms, HDR10, FreeSync","type":"TVs \u0026 Screens","untranslatedTitle":"ViewSonic 24\" Full HD 240Hz IPS Gaming Monitor (XG2409A) - 1ms, HDR10, FreeSync","url":"\/products\/viewsonic-24-240hz-gaming-monitor","vendor":"VIEWSONIC","remoteShopId":null,"variants":[{"id":"45357092995119","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/xg2409a_a574014b-98ff-419f-b397-48b519d2d458.jpg?v=1782311881"},"price":{"amount":2912.0,"currencyCode":"ZAR"},"sku":"XG2409A","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270279409711","handle":"amog-graphic-card-gtx1050-4gb-ddr5-128b","isCollective":null,"title":"AMOG GeForce GTX 1050 4GB GDDR5 Gaming Graphics Card - 128-bit, HDMI\/VGA\/DVI","type":"Computers","untranslatedTitle":"AMOG GeForce GTX 1050 4GB GDDR5 Gaming Graphics Card - 128-bit, HDMI\/VGA\/DVI","url":"\/products\/amog-graphic-card-gtx1050-4gb-ddr5-128b","vendor":"AMOG","remoteShopId":null,"variants":[{"id":"45357016449071","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/am-gtx1050-4gb-d5.jpg?v=1778851827"},"price":{"amount":2912.0,"currencyCode":"ZAR"},"sku":"AM-GTX1050-4GB-D5","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8310528409647","handle":"viewsonic-24-240hz-superclear-ips","isCollective":null,"title":"ViewSonic VX24G30 24\" Full HD IPS Gaming Monitor - 240Hz, 0.8ms, HDMI \u0026 DP","type":"TVs \u0026 SCREENS","untranslatedTitle":"ViewSonic VX24G30 24\" Full HD IPS Gaming Monitor - 240Hz, 0.8ms, HDMI \u0026 DP","url":"\/products\/viewsonic-24-240hz-superclear-ips","vendor":"VIEWSONIC","remoteShopId":null,"variants":[{"id":"45490916851759","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/vx24g30_31a3fb85-8180-41a8-9ac2-fb77c6daf6bf.jpg?v=1782312003"},"price":{"amount":2815.0,"currencyCode":"ZAR"},"sku":"VX24G30","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8459208032303","handle":"viewsonic-27led-gaming-monitor-240hz-fast-refresh-rate-smooth-gameplay-pre-loved","isCollective":null,"title":"ViewSonic XG2709A 27\" Gaming Monitor - 240Hz, Fast IPS (Pre-Owned)","type":"TVs \u0026 SCREENS","untranslatedTitle":"ViewSonic XG2709A 27\" Gaming Monitor - 240Hz, Fast IPS (Pre-Owned)","url":"\/products\/viewsonic-27led-gaming-monitor-240hz-fast-refresh-rate-smooth-gameplay-pre-loved","vendor":"VIEWSONIC","remoteShopId":null,"variants":[{"id":"46103294050351","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/XG2709A_ac2490b1-0759-463b-9f36-3a51179301c1.jpg?v=1788336359"},"price":{"amount":2199.0,"currencyCode":"ZAR"},"sku":"USED-XG2709A","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8406037659695","handle":"viewsonic-24-180hz-gaming-monitor-pre-loved","isCollective":null,"title":"ViewSonic VX2479-HD-PRO 24\" 180Hz Full HD Gaming Monitor (Pre-Owned)","type":"TVs \u0026 SCREENS","untranslatedTitle":"ViewSonic VX2479-HD-PRO 24\" 180Hz Full HD Gaming Monitor (Pre-Owned)","url":"\/products\/viewsonic-24-180hz-gaming-monitor-pre-loved","vendor":"VIEWSONIC","remoteShopId":null,"variants":[{"id":"45760848527407","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/61s5Zy1AUNL._SX679.webp?v=1786004948"},"price":{"amount":1399.0,"currencyCode":"ZAR"},"sku":"Used-vx2479-hd-pro","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270281834543","handle":"zatech-850w-gaming-power-supply-gold","isCollective":null,"title":"ZATECH 850W Gaming Power Supply - 80 PLUS Gold, Single Rail, Multi-GPU (ZA-GPS850W)","type":"Gaming","untranslatedTitle":"ZATECH 850W Gaming Power Supply - 80 PLUS Gold, Single Rail, Multi-GPU (ZA-GPS850W)","url":"\/products\/zatech-850w-gaming-power-supply-gold","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45357019332655","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/za-gps850w.jpg?v=1778851905"},"price":{"amount":1359.0,"currencyCode":"ZAR"},"sku":"ZA-GPS850W","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270281998383","handle":"zatech-gaming-computer-case-602-black","isCollective":null,"title":"ZATECH ZA-GCC-602B E-ATX Gaming PC Case - Black, Tempered Glass, USB 3.0","type":"Gaming","untranslatedTitle":"ZATECH ZA-GCC-602B E-ATX Gaming PC Case - Black, Tempered Glass, USB 3.0","url":"\/products\/zatech-gaming-computer-case-602-black","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45357019496495","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/za-gcc-602b.jpg?v=1778851909"},"price":{"amount":1165.0,"currencyCode":"ZAR"},"sku":"ZA-GCC-602B","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8474530775087","handle":"m9-5-in-1-mobile-gaming-keyboard-mouse-s","isCollective":null,"title":"Havit M9 5-in-1 Mobile Gaming Keyboard \u0026 Mouse Combo Pack - RGB Set with Stand \u0026 Cable","type":"GAMING","untranslatedTitle":"Havit M9 5-in-1 Mobile Gaming Keyboard \u0026 Mouse Combo Pack - RGB Set with Stand \u0026 Cable","url":"\/products\/m9-5-in-1-mobile-gaming-keyboard-mouse-s","vendor":"HAVIT","remoteShopId":null,"variants":[{"id":"46181732810799","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/m9-5in1-1.jpg?v=1789723796"},"price":{"amount":899.0,"currencyCode":"ZAR"},"sku":"M9-5IN1","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270281801775","handle":"zatech-650w-gaming-power-supply-bronze","isCollective":null,"title":"ZATECH 650W Gaming Power Supply - 80 PLUS Bronze, ATX, OVP\/OPP\/SCP (ZA
521-GPS650W)","type":"Gaming","untranslatedTitle":"ZATECH 650W Gaming Power Supply - 80 PLUS Bronze, ATX, OVP\/OPP\/SCP (ZA-GPS650W)","url":"\/products\/zatech-650w-gaming-power-supply-bronze","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45357019299887","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/za-gps650w.jpg?v=1778851903"},"price":{"amount":899.0,"currencyCode":"ZAR"},"sku":"ZA-GPS650W","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270289895471","handle":"acerlaptop-charg-195v-118a-dc-5517m","isCollective":null,"title":"Acer Laptop Charger 230W 19.5V 11.8A - 5.5x1.7mm, Predator\/Nitro Gaming","type":"Laptops \u0026 Laptop Accessories","untranslatedTitle":"Acer Laptop Charger 230W 19.5V 11.8A - 5.5x1.7mm, Predator\/Nitro Gaming","url":"\/products\/acerlaptop-charg-195v-118a-dc-5517m","vendor":"ACER","remoteShopId":null,"variants":[{"id":"45357031227439","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/ac19.5v-11.8a-230w.jpg?v=1778852160"},"price":{"amount":825.0,"currencyCode":"ZAR"},"sku":"AC19.5V-11.8A-230W","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"15837032284326","handle":"1080p-60fps-full-hd-usb-webcam-gaming-le","isCollective":null,"title":"1080p 60FPS Full HD USB Gaming Webcam with RGB LED \u0026 Built-in Microphone (WC-1080P60)","type":"COMPUTERS","untranslatedTitle":"1080p 60FPS Full HD USB Gaming Webcam with RGB LED \u0026 Built-in Microphone (WC-1080P60)","url":"\/products\/1080p-60fps-full-hd-usb-webcam-gaming-le","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"57507129196710","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/wc-1080p60-1.jpg?v=1790181388"},"price":{"amount":749.0,"currencyCode":"ZAR"},"sku":"WC-1080P60","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8474545127471","handle":"mix-lite-mobile-gaming-keyboard-mouse","isCollective":null,"title":"Havit MIX-LITE+ 4-in-1 Mobile Gaming Keyboard \u0026 Mouse Combo - RGB Set for Android","type":"GAMING","untranslatedTitle":"Havit MIX-LITE+ 4-in-1 Mobile Gaming Keyboard \u0026 Mouse Combo - RGB Set for Android","url":"\/products\/mix-lite-mobile-gaming-keyboard-mouse","vendor":"HAVIT","remoteShopId":null,"variants":[{"id":"46181811388463","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/mix-lite_-1.jpg?v=1789723799"},"price":{"amount":679.0,"currencyCode":"ZAR"},"sku":"MIX-LITE+","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270282063919","handle":"zatech-gaming-computer-case-h100-black","isCollective":null,"title":"ZATECH ZA-GCC-H100B Micro ATX Gaming PC Case - Black, Tempered Glass, USB 3.0","type":"Gaming","untranslatedTitle":"ZATECH ZA-GCC-H100B Micro ATX Gaming PC Case - Black, Tempered Glass, USB 3.0","url":"\/products\/zatech-gaming-computer-case-h100-black","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45357019562031","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/za-gcc-h100b.jpg?v=1778851911"},"price":{"amount":582.0,"currencyCode":"ZAR"},"sku":"ZA-GCC-H100B","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8473729859631","handle":"4-in-1-mobile-gaming-keyboard-mouse-comb","isCollective":null,"title":"Havit MIX SE 4-in-1 Mobile Gaming Keyboard \u0026 Mouse Combo - RGB Set with Converter \u0026 Stand","type":"GAMING","untranslatedTitle":"Havit MIX SE 4-in-1 Mobile Gaming Keyboard \u0026 Mouse Combo - RGB Set with Converter \u0026 Stand","url":"\/products\/4-in-1-mobile-gaming-keyboard-mouse-comb","vendor":"HAVIT","remoteShopId":null,"variants":[{"id":"46180511252527","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/mix-se-4in1-1.jpg?v=1789723802"},"price":{"amount":549.0,"currencyCode":"ZAR"},"sku":"MIX-SE-4IN1","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8474425065519","handle":"mix-se-4-in-1-mobile-gaming-keyboard-set","isCollective":null,"title":"Havit MIX SE 4-in-1 Mobile Gaming Keyboard \u0026 Mouse Combo 2 - RGB Set for Android","type":"GAMING","untranslatedTitle":"Havit MIX SE 4-in-1 Mobile Gaming Keyboard \u0026 Mouse Combo 2 - RGB Set for Android","url":"\/products\/mix-se-4-in-1-mobile-gaming-keyboard-set","vendor":"HAVIT","remoteShopId":null,"variants":[{"id":"46181465915439","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/mix-se-combo2-1.jpg?v=1789723805"},"price":{"amount":469.0,"currencyCode":"ZAR"},"sku":"MIX-SE-COMBO2","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270237990959","handle":"7in1-bluetooth-gamepad-stk-7024x","isCollective":null,"title":"STK-7024X 7-in-1 Bluetooth Gamepad Controller - Bluetooth 3.0, Android\/iOS, 350mAh","type":"Gaming","untranslatedTitle":"STK-7024X 7-in-1 Bluetooth Gamepad Controller - Bluetooth 3.0, Android\/iOS, 350mAh","url":"\/products\/7in1-bluetooth-gamepad-stk-7024x","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356957433903","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/stk-7024x.jpg?v=1778850544"},"price":{"amount":320.0,"currencyCode":"ZAR"},"sku":"STK-7024X","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8472987500591","handle":"wireless-ps4-gamepad-controller","isCollective":null,"title":"Wireless PS4 Gamepad Controller Black - Ergonomic Wireless Controller for PlayStation 4","type":"GAMING","untranslatedTitle":"Wireless PS4 Gamepad Controller Black - Ergonomic Wireless Controller for PlayStation 4","url":"\/products\/wireless-ps4-gamepad-controller","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"46175943360559","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/ps4-gp01-1.jpg?v=1789723817"},"price":{"amount":269.0,"currencyCode":"ZAR"},"sku":"PS4-GP01","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8310528999471","handle":"zatech-5in1-wireless-gamepad","isCollective":null,"title":"ZATECH ZA-3050 Wireless Gamepad 5-in-1 - 2.4G for PS1\/PS2\/PS3, PC \u0026 Android","type":"GAMING","untranslatedTitle":"ZATECH ZA-3050 Wireless Gamepad 5-in-1 - 2.4G for PS1\/PS2\/PS3, PC \u0026 Android","url":"\/products\/zatech-5in1-wireless-gamepad","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45490917474351","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/za-3050_f635a88c-d05f-4cee-8988-732626481dee.jpg?v=1781795487"},"price":{"amount":242.0,"currencyCode":"ZAR"},"sku":"ZA-3050","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270179336239","handle":"fire-cam-gaming-headset","isCollective":null,"title":"Gaming Headset with Omnidirectional Mic - 40mm Drivers, 20Hz-20kHz (FCGH-001)","type":"Gaming","untranslatedTitle":"Gaming Headset with Omnidirectional Mic - 40mm Drivers, 20Hz-20kHz (FCGH-001)","url":"\/products\/fire-cam-gaming-headset","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356880429103","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/fcgh-001.jpg?v=1778848777"},"price":{"amount":242.0,"currencyCode":"ZAR"},"sku":"FCGH-001","title":"Default Title","untranslatedTitle":"Default Title"}]}
521,{"id":"15837909221542","handle":"7-in-1-gaming-audio-mixer-usb-type-c-car","isCollective":null,"title":"SC-7GM1 7.1 Gaming Audio Mixer - USB \u0026 Type-C External Sound Card","type":"AUDIO \u0026 VIDEO","untranslatedTitle":"SC-7GM1 7.1 Gaming Audio Mixer - USB \u0026 Type-C External Sound Card","url":"\/products\/7-in-1-gaming-audio-mixer-usb-type-c-car","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"57510933725350","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/sc-7gm1-1.jpg?v=1790244977"},"price":{"amount":229.0,"currencyCode":"ZAR"},"sku":"SC-7GM1","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"15837017407654","handle":"10-port-usb-3-0-gaming-hub-7-color-led","isCollective":null,"title":"10-Port USB 3.0 Gaming Hub with 7-Colour RGB LED (USB3-H10R2)","type":"COMPUTERS","untranslatedTitle":"10-Port USB 3.0 Gaming Hub with 7-Colour RGB LED (USB3-H10R2)","url":"\/products\/10-port-usb-3-0-gaming-hub-7-color-led","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"57506891104422","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/usb3-h10r2-1.jpg?v=1790174189"},"price":{"amount":219.0,"currencyCode":"ZAR"},"sku":"USB3-H10R2","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"15837017440422","handle":"10-port-usb-3-0-gaming-hub-7-color-led-1","isCollective":null,"title":"10-Port USB 3.0 Gaming Hub with 7-Colour RGB LED - 5Gbps (USB3-H10RGB)","type":"COMPUTERS","untranslatedTitle":"10-Port USB 3.0 Gaming Hub with 7-Colour RGB LED - 5Gbps (USB3-H10RGB)","url":"\/products\/10-port-usb-3-0-gaming-hub-7-color-led-1","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"57506891137190","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/usb3-h10rgb-1.jpg?v=1790174192"},"price":{"amount":219.0,"currencyCode":"ZAR"},"sku":"USB3-H10RGB","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"15837014229158","handle":"7-port-usb-3-0-gaming-hub-7-color-led-rg","isCollective":null,"title":"7-Port USB 3.0 Gaming Hub with 7-Colour RGB LED - 1.2m Cable (USB3-H7RGB)","type":"COMPUTERS","untranslatedTitle":"7-Port USB 3.0 Gaming Hub with 7-Colour RGB LED - 1.2m Cable (USB3-H7RGB)","url":"\/products\/7-port-usb-3-0-gaming-hub-7-color-led-rg","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"57506862203046","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/usb3-h7rgb-1.jpg?v=1790174198"},"price":{"amount":199.0,"currencyCode":"ZAR"},"sku":"USB3-H7RGB","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270275805231","handle":"zatech-gaming-combo-wired-keyboard-mouse","isCollective":null,"title":"ZATECH Gaming Keyboard \u0026 Mouse Combo - Backlit, Suspension Keycaps, Adjustable DPI","type":"Gaming","untranslatedTitle":"ZATECH Gaming Keyboard \u0026 Mouse Combo - Backlit, Suspension Keycaps, Adjustable DPI","url":"\/products\/zatech-gaming-combo-wired-keyboard-mouse","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45357008977967","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/zagckm-001.jpg?v=1778851717"},"price":{"amount":169.0,"currencyCode":"ZAR"},"sku":"ZAGCKM-001","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8472982257711","handle":"zornwee-ch001-wireless-gaming-mouse-2-4g","isCollective":null,"title":"Zornwee CH001 Wireless Gaming Mouse - 2.4G + Bluetooth, Rechargeable Type-C","type":"COMPUTERS","untranslatedTitle":"Zornwee CH001 Wireless Gaming Mouse - 2.4G + Bluetooth, Rechargeable Type-C","url":"\/products\/zornwee-ch001-wireless-gaming-mouse-2-4g","vendor":"ZORNWEE","remoteShopId":null,"variants":[{"id":"46175933661231","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/ch001-1.jpg?v=1789723755"},"price":{"amount":159.0,"currencyCode":"ZAR"},"sku":"CH001","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270269055023","handle":"zatech-gaming-mouse-pad-300x800x4mm","isCollective":null,"title":"ZATECH RGB LED Gaming Mouse Pad XL 800x300x4mm - 12 Light Modes, USB, Braided","type":"Gaming","untranslatedTitle":"ZATECH RGB LED Gaming Mouse Pad XL 800x300x4mm - 12 Light Modes, USB, Braided","url":"\/products\/zatech-gaming-mouse-pad-300x800x4mm","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45356999639087","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/za-gmp-002.jpg?v=1778851508"},"price":{"amount":145.0,"currencyCode":"ZAR"},"sku":"ZA-GMP-002","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270218395695","handle":"gaming-headphone-with-mic-p40","isCollective":null,"title":"P40 Gaming Headset with Mic - 40mm Drivers, 3.5mm, PS4, Xbox One, PC","type":"Gaming","untranslatedTitle":"P40 Gaming Headset with Mic - 40mm Drivers, 3.5mm, PS4, Xbox One, PC","url":"\/products\/gaming-headphone-with-mic-p40","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356932169775","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/p40.jpg?v=1778849923"},"price":{"amount":145.0,"currencyCode":"ZAR"},"sku":"P40","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8471981293615","handle":"zornwee-d19-7d-gaming-usb-mouse-for-pc","isCollective":null,"title":"Zornwee D19 7D Gaming USB Mouse - Wired Optical, Adjustable DPI, RGB Backlight","type":"COMPUTERS","untranslatedTitle":"Zornwee D19 7D Gaming USB Mouse - Wired Optical, Adjustable DPI, RGB Backlight","url":"\/products\/zornwee-d19-7d-gaming-usb-mouse-for-pc","vendor":"ZORNWEE","remoteShopId":null,"variants":[{"id":"46169525977135","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/d19-1.jpg?v=1789222760"},"price":{"amount":129.0,"currencyCode":"ZAR"},"sku":"D19","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8457376038959","handle":"zatech-gaming-mousepad-400x900x3mm-silk-1","isCollective":null,"title":"ZATECH Gaming Mousepad 900 x 400mm - Extended Silk Surface, 3mm","type":null,"untranslatedTitle":"ZATECH Gaming Mousepad 900 x 400mm - Extended Silk Surface, 3mm","url":"\/products\/zatech-gaming-mousepad-400x900x3mm-silk-1","vendor":"Zatech","remoteShopId":null,"variants":[{"id":"46053802508335","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/za-mp008_77f8d5d0-d809-4170-bb2e-b60babc4010a.jpg?v=1788265449"},"price":{"amount":126.0,"currencyCode":"ZAR"},"sku":"za-mp008","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8310528835631","handle":"zornwee-backlit-usb-gaming-mouse-z091","isCollective":null,"title":"Zornwee Z091 Wired Gaming Mouse - 2400 DPI, 6 Buttons, 4-Colour Backlight","type":"GAMING","untranslatedTitle":"Zornwee Z091 Wired Gaming Mouse - 2400 DPI, 6 Buttons, 4-Colour Backlight","url":"\/products\/zornwee-backlit-usb-gaming-mouse-z091","vendor":"ZORNWEE","remoteShopId":null,"variants":[{"id":"45490917310511","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/z091.jpg?v=1781795483"},"price":{"amount":126.0,"currencyCode":"ZAR"},"sku":"Z091","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270269022255","handle":"zatech-gaming-mouse-pad-250x350x4mm","isCollective":null,"title":"ZATECH RGB LED Gaming Mouse Pad 350x250x3mm - 7 Light Modes, USB, Hard Surface","type":"Gaming","untranslatedTitle":"ZATECH RGB LED Gaming Mouse Pad 350x250x3mm - 7 Light Modes, USB, Hard Surface","url":"\/products\/zatech-gaming-mouse-pad-250x350x4mm","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45356999606319","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/za-gmp-001.jpg?v=1778851507"},"price":{"amount":126.0,"currencyCode":"ZAR"},"sku":"ZA-GMP-001","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8472863768623","handle":"zornwee-gaming-keyboard-mouse-combousb","isCollective":null,"title":"Zornwee K550 Gaming Keyboard \u0026 Mouse Combo - USB Wired Set for PC \u0026 Laptop","type":"GAMING","untranslatedTitle":"Zornwee K550 Gaming Keyboard \u0026 Mouse Combo - USB Wired Set for PC \u0026 Laptop","url":"\/products\/zornwee-gaming-keyboard-mouse-combousb","vendor":"ZORNWEE","remoteShopId":null,"variants":[{"id":"46175094046767","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/k550-1.jpg?v=1789378262"},"price":{"amount":119.0,"currencyCode":"ZAR"},"sku":"K550","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270186709039","handle":"hdmi-4k-10-mtr-cable","isCollective":null,"title":"HDMI 4K Cable 10m - Ultra HD 4K 60Hz, TV Gaming Console (HDMIC10M-4K)","type":"Cables","untranslatedTitle":"HDMI 4K Cable 10m - Ultra HD 4K 60Hz, TV Gaming Console (HDMIC10M-4K)","url":"\/products\/hdmi-4k-10-mtr-cable","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356890128431","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/hdmic10m-4k_1.jpg?v=1778849001"},"price":{"amount":116.0,"currencyCode":"ZAR"},"sku":"HDMIC10M-4K","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270184087599","handle":"zornwee-gaming-usb-mouse-gx10-gx20","isCollective":null,"title":"Zornwee Wired Gaming Mouse (GX10\/GX20) - 3200 DPI, 6 Buttons, RGB Backlight","type":"Gaming","untranslatedTitle":"Zornwee Wired Gaming Mouse (GX10\/GX20) - 3200 DPI, 6 Buttons, RGB Backlight","url":"\/products\/zornwee-gaming-usb-mouse-gx10-gx20","vendor":"ZORNWEE","remoteShopId":null,"variants":[{"id":"45356887244847","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/gx10-20.jpg?v=1778848923"},"price":{"amount":116.0,"currencyCode":"ZAR"},"sku":"GX10-20","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270181236783","handle":"gaming-usb-mouse-3200-dpi-g-509-g-706","isCollective":null,"title":"Gaming USB Mouse 3200 DPI Optical Wired - Adjustable DPI (G-509 \/ G-706)","type":"Gaming","untranslatedTitle":"Gaming USB Mouse 3200 DPI Optical Wired - Adjustable DPI (G-509 \/ G-706)","url":"\/products\/gaming-usb-mouse-3200-dpi-g-509-g-706","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356882559023","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/g509-706_2.jpg?v=1778848835"},"price":{"amount":97.0,"currencyCode":"ZAR"},"sku":"G509-706","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270277247023","handle":"zornwee-usb-wired-keyboard-ze-930","isCollective":null,"title":"Zornwee ZE-930 Wired Gaming Keyboard - USB, LED Backlight, Anti-Ghosting","type":"Computers","untranslatedTitle":"Zornwee ZE-930 Wired Gaming Keyboard - USB, LED Backlight, Anti-Ghosting","url":"\/products\/zornwee-usb-wired-keyboard-ze-930","vendor":"ZORNWEE","remoteShopId":null,"variants":[{"id":"45357012910127","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/ze-930.jpg?v=1778851751"},"price":{"amount":87.0,"currencyCode":"ZAR"},"sku":"ZE-930","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8310529687599","handle":"zatech-l1000-single-usb-analog-gamepad","isCollective":null,"title":"ZATECH L1000 USB Analog Gamepad - 12-Button, Dual Vibration, Plug \u0026 Play","type":"GAMING","untranslatedTitle":"ZATECH L1000 USB Analog Gamepad - 12-Button, Dual Vibration, Plug \u0026 Play","url":"\/products\/zatech-l1000-single-usb-analog-gamepad","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45490918522927","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/za-l1000.jpg?v=1781795497"},"price":{"amount":87.0,"currencyCode":"ZAR"},"sku":"ZA-L1000","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270270922799","handle":"zatech-l3000-single-usb-analog-gamepad","isCollective":null,"title":"ZATECH L3000 USB Analog Gamepad - 12-Button, Dual Vibration, Plug \u0026 Play","type":"Gaming","untranslatedTitle":"ZATECH L3000 USB Analog Gamepad - 12-Button, Dual Vibration, Plug \u0026 Play","url":"\/products\/zatech-l3000-single-usb-analog-gamepad","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45357001506863","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/za-l3000.jpg?v=1778851565"},"price":{"amount":87.0,"currencyCode":"ZAR"},"sku":"ZA-L3000","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8471890952239","handle":"zornwee-wired-keyboard-mouse-combo-usb","isCollective":null,"title":"Zornwee ZE-9100 Wired Keyboard \u0026 Mouse Combo USB - Gaming Keycaps, Splash Resistant","type":"COMPUTERS","untranslatedTitle":"Zornwee ZE-9100 Wired Keyboard \u0026 Mouse Combo USB - Gaming Keycaps, Splash Resistant","url":"\/products\/zornwee-wired-keyboard-mouse-combo-usb","vendor":"ZORNWEE","remoteShopId":null,"variants":[{"id":"46168452497455","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/ze-9100-1.jpg?v=1789380640"},"price":{"amount":79.0,"currencyCode":"ZAR"},"sku":"ZE-9100","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270270955567","handle":"zatech-l4000-single-usb-analog-gamepad","isCollective":null,"title":"ZATECH L4000 USB Analog Gamepad - 12-Button, Dual Vibration, Plug \u0026 Play","type":"Gaming","untranslatedTitle":"ZATECH L4000 USB Analog Gamepad - 12-Button, Dual Vibration, Plug \u0026 Play","url":"\/products\/zatech-l4000-single-usb-analog-gamepad","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45357001539631","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/za-l4000.jpg?v=1778851566"},"price":{"amount":79.0,"currencyCode":"ZAR"},"sku":"ZA-L4000","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270270890031","handle":"zatech-l2000-single-usb-analog-gamepad","isCollective":null,"title":"ZATECH L2000 USB Analog Gamepad - 12-Button, Dual Vibration, Turbo","type":"Gaming","untranslatedTitle":"ZATECH L2000 USB Analog Gamepad - 12-Button, Dual Vibration, Turbo","url":"\/products\/zatech-l2000-single-usb-analog-gamepad","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45357001474095","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/za-l2000-1.jpg?v=1784816777"},"price":{"amount":79.0,"currencyCode":"ZAR"},"sku":"ZA-L2000","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270271578159","handle":"zatech-gaming-mousepad-300x700x2mm-silk","isCollective":null,"title":"ZATECH Gaming Mouse Pad 300x700x2mm - Stitched Edge, Non-Slip, Water-Resistant","type":"Gaming","untranslatedTitle":"ZATECH Gaming Mouse Pad 300x700x2mm - Stitched Edge, Non-Slip, Water-Resistant","url":"\/products\/zatech-gaming-mousepad-300x700x2mm-silk","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45357002162223","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/za-mp003-blue.jpg?v=1778851581"},"price":{"amount":77.0,"currencyCode":"ZAR"},"sku":"ZA-MP003","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270250377263","handle":"joystick-usb-single","isCollective":null,"title":"USB Wired Game Pad Joystick Single (USB-701) - 8-Way, 10 Fire Buttons, Turbo, PC","type":"Gaming","untranslatedTitle":"USB Wired Game Pad Joystick Single (USB-701) - 8-Way, 10 Fire Buttons, Turbo, PC","url":"\/products\/joystick-usb-single","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356975259695","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/usb-701.jpg?v=1778850941"},"price":{"amount":49.0,"currencyCode":"ZAR"},"sku":"USB-701","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270277476399","handle":"zatech-usb-joystick-single","isCollective":null,"title":"ZATECH ZR-701 USB Single Joystick Gamepad - 11 Fire Buttons, Dual Shock Vibration","type":"Gaming","untranslatedTitle":"ZATECH ZR-701 USB Single Joystick Gamepad - 11 Fire Buttons, Dual Shock Vibration","url":"\/products\/zatech-usb-joystick-single","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45357014122543","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/zr-701.jpg?v=1778851757"},"price":{"amount":38.0,"currencyCode":"ZAR"},"sku":"ZR-701","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270271545391","handle":"zatech-gaming-mouse-pad-a-11-razor","isCollective":null,"title":"ZATECH A-11 Razor Gaming Mouse Pad - Smooth Low-Friction, Anti-Slip Base","type":"Gaming","untranslatedTitle":"ZATECH A-11 Razor Gaming Mouse Pad - Smooth Low-Friction, Anti-Slip Base","url":"\/products\/zatech-gaming-mouse-pad-a-11-razor","vendor":"ZATECH","remoteShopId":null,"variants":[{"id":"45357002129455","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/za-mp002_1.jpg?v=1778851580"},"price":{"amount":29.0,"currencyCode":"ZAR"},"sku":"ZA-MP002","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270291796015","handle":"ezviz-hb8-4k-smart-home-battery-camera","isCol
521lective":null,"title":"EZVIZ HB8 4K 8MP Battery Camera - Pan\/Tilt, 10400mAh, Wi-Fi 6, IP65 (CS-HB8-R200-1M8WFL)","type":"Security \u0026 Surveillance","untranslatedTitle":"EZVIZ HB8 4K 8MP Battery Camera - Pan\/Tilt, 10400mAh, Wi-Fi 6, IP65 (CS-HB8-R200-1M8WFL)","url":"\/products\/ezviz-hb8-4k-smart-home-battery-camera","vendor":"EZVIZ","remoteShopId":null,"variants":[{"id":"45357034864687","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/cs-hb8-4k.jpg?v=1778852212"},"price":{"amount":2299.0,"currencyCode":"ZAR"},"sku":"CS-HB8-4K","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270251589679","handle":"viewsonic-24-full-hd-monitor-with-fast-2","isCollective":null,"title":"ViewSonic VA240A-H 24\" Full HD IPS Monitor - 1080p, 120Hz, 1ms, HDMI \u0026 VGA","type":"TVs \u0026 Screens","untranslatedTitle":"ViewSonic VA240A-H 24\" Full HD IPS Monitor - 1080p, 120Hz, 1ms, HDMI \u0026 VGA","url":"\/products\/viewsonic-24-full-hd-monitor-with-fast-2","vendor":"VIEWSONIC","remoteShopId":null,"variants":[{"id":"45356977225775","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/va240a-h.jpg?v=1778850984"},"price":{"amount":1796.0,"currencyCode":"ZAR"},"sku":"VA240A-H","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270142439471","handle":"ezviz-h80x-8mp2mp-4mm-smart-home-camera","isCollective":null,"title":"EZVIZ H80x Dual 4K 8MP+2MP Outdoor Pan \u0026 Tilt Wi-Fi Camera - 360°, AI Tracking, ColorFULL","type":"Security \u0026 Surveillance","untranslatedTitle":"EZVIZ H80x Dual 4K 8MP+2MP Outdoor Pan \u0026 Tilt Wi-Fi Camera - 360°, AI Tracking, ColorFULL","url":"\/products\/ezviz-h80x-8mp2mp-4mm-smart-home-camera","vendor":"EZVIZ","remoteShopId":null,"variants":[{"id":"45356836618287","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/cs-h80x.jpg?v=1778847783"},"price":{"amount":1299.0,"currencyCode":"ZAR"},"sku":"CS-H80X","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270251458607","handle":"viewsonic-185-hdmivga-monitor","isCollective":null,"title":"ViewSonic VA1903H-2 18.5\" LED Monitor - 1366x768 HD, HDMI \u0026 VGA, 5ms","type":"TVs \u0026 Screens","untranslatedTitle":"ViewSonic VA1903H-2 18.5\" LED Monitor - 1366x768 HD, HDMI \u0026 VGA, 5ms","url":"\/products\/viewsonic-185-hdmivga-monitor","vendor":"VIEWSONIC","remoteShopId":null,"variants":[{"id":"45356977094703","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/va1903h-2.jpg?v=1778850980"},"price":{"amount":1269.0,"currencyCode":"ZAR"},"sku":"VA1903H-2","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270141259823","handle":"ezviz-c3tn-1080p-28mm-wifi-camera","isCollective":null,"title":"EZVIZ C3TN 2MP 1080p Outdoor Wi-Fi Camera (CS-C3TN) - 2.8mm Lens, 30m IR, IP67, H.265","type":"Security \u0026 Surveillance","untranslatedTitle":"EZVIZ C3TN 2MP 1080p Outdoor Wi-Fi Camera (CS-C3TN) - 2.8mm Lens, 30m IR, IP67, H.265","url":"\/products\/ezviz-c3tn-1080p-28mm-wifi-camera","vendor":"EZVIZ","remoteShopId":null,"variants":[{"id":"45356835242031","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/cs-c3tn.jpg?v=1778847755"},"price":{"amount":589.0,"currencyCode":"ZAR"},"sku":"CS-C3TN","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270113833007","handle":"hiksemi-wave-m2-pcie-30-nvme-128gb-ssd","isCollective":null,"title":"Hiksemi Wave 128GB M.2 NVMe SSD - PCIe 3.0, 2500MB\/s, 3D NAND","type":"Drives \u0026 Storage","untranslatedTitle":"Hiksemi Wave 128GB M.2 NVMe SSD - PCIe 3.0, 2500MB\/s, 3D NAND","url":"\/products\/hiksemi-wave-m2-pcie-30-nvme-128gb-ssd","vendor":"HIKSEMI","remoteShopId":null,"variants":[{"id":"45356805783599","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/6974202725693_1.jpg?v=1778847018"},"price":{"amount":389.0,"currencyCode":"ZAR"},"sku":"6974202725693","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"15845786452134","handle":"1-5m-standard-computer-power-cable-for-p","isCollective":null,"title":"1.5m Computer Power Cable - SA 3-Pin to IEC for PC, Monitor \u0026 UPS (ZT-PC-S15)","type":"CABLES","untranslatedTitle":"1.5m Computer Power Cable - SA 3-Pin to IEC for PC, Monitor \u0026 UPS (ZT-PC-S15)","url":"\/products\/1-5m-standard-computer-power-cable-for-p","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"57536622723238","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/zt-pc-s15-1.jpg?v=1790696395"},"price":{"amount":29.0,"currencyCode":"ZAR"},"sku":"ZT-PC-S15","title":"Default Title","untranslatedTitle":"Default Title"}]}
521,{"id":"15845817221286","handle":"1-5m-laptop-power-cable-for-notebook-use","isCollective":null,"title":"1.5m Laptop Charger Power Cable - SA Mains Lead for Notebook Adapters (ZT-PC-L15)","type":"CABLES","untranslatedTitle":"1.5m Laptop Charger Power Cable - SA Mains Lead for Notebook Adapters (ZT-PC-L15)","url":"\/products\/1-5m-laptop-power-cable-for-notebook-use","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"57536883556518","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/zt-pc-l15-1.jpg?v=1790696393"},"price":{"amount":29.0,"currencyCode":"ZAR"},"sku":"ZT-PC-L15","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"15838988730534","handle":"10-in-1-usb-3-0-multi-port-hub-5gbps-spe","isCollective":null,"title":"10-in-1 USB 3.0 Multi-Port Hub 5Gbps (USB3-H10M1)","type":"BATTERIES \u0026 CHARGERS","untranslatedTitle":"10-in-1 USB 3.0 Multi-Port Hub 5Gbps (USB3-H10M1)","url":"\/products\/10-in-1-usb-3-0-multi-port-hub-5gbps-spe","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"57518056112294","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/usb3-h10m1-1.jpg?v=1790339695"},"price":{"amount":899.0,"currencyCode":"ZAR"},"sku":"USB3-H10M1","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8428642697263","handle":"network-tool-kit-10-pcs-for-computer-1","isCollective":null,"title":"10-Piece Network Cable Tool Kit - Crimper, Tester, Stripper with Case","type":"NETWORKING","untranslatedTitle":"10-Piece Network Cable Tool Kit - Crimper, Tester, Stripper with Case","url":"\/products\/network-tool-kit-10-pcs-for-computer-1","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45846263496751","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/ntk-10p_1.1.jpg?v=1787177812"},"price":{"amount":329.0,"currencyCode":"ZAR"},"sku":"NTK-10P","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270216069167","handle":"network-tool-kit-11-pcs-for-computer","isCollective":null,"title":"11-Piece Network Tool Kit - Crimper, Cable Tester, Punch Down, Cat6 RJ45 Leads","type":"Networking","untranslatedTitle":"11-Piece Network Tool Kit - Crimper, Cable Tester, Punch Down, Cat6 RJ45 Leads","url":"\/products\/network-tool-kit-11-pcs-for-computer","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356929679407","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/ntk-11p.jpg?v=1778849857"},"price":{"amount":368.0,"currencyCode":"ZAR"},"sku":"NTK-11P","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270091157551","handle":"powersupply-12v2amp-5525-dstv","isCollective":null,"title":"12V 2A Power Supply 5.5 x 2.5mm - AC\/DC Adapter for DStv, CCTV, Routers \u0026 LED Strips","type":"Satellite Accessories","untranslatedTitle":"12V 2A Power Supply 5.5 x 2.5mm - AC\/DC Adapter for DStv, CCTV, Routers \u0026 LED Strips","url":"\/products\/powersupply-12v2amp-5525-dstv","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356777898031","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/12v2a5.5x2.5.jpg?v=1778846404"},"price":{"amount":59.0,"currencyCode":"ZAR"},"sku":"12V2A5.5*2.5","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"15845701877926","handle":"laptop-screen-14-slim-30-pin-without","isCollective":null,"title":"14\" Slim 30-Pin Laptop Replacement Screen - LCD Display, Without Brackets","type":"LAPTOPS \u0026 LAPTOP ACCESSORIES","untranslatedTitle":"14\" Slim 30-Pin Laptop Replacement Screen - LCD Display, Without Brackets","url":"\/products\/laptop-screen-14-slim-30-pin-without","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"57535868403878","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/led14-30pin-1.jpg?v=1790685219"},"price":{"amount":949.0,"currencyCode":"ZAR"},"sku":"LED14\"30PIN","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8370572623919","handle":"type-c-to-lan-tc-sd-usb3-0x5-audio-hdmi2","isCollective":null,"title":"14-in-1 USB-C Docking Station - Dual HDMI, VGA, Gigabit LAN, 5x USB 3.0, SD \u0026 Wireless Charging","type":"CABLES","untranslatedTitle":"14-in-1 USB-C Docking Station - Dual HDMI, VGA, Gigabit LAN, 5x USB 3.0, SD \u0026 Wireless Charging","url":"\/products\/type-c-to-lan-tc-sd-usb3-0x5-audio-hdmi2","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45646444036143","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/tct14in1-01-1.jpg?v=1784709685"},"price":{"amount":968.0,"currencyCode":"ZAR"},"sku":"TCT14IN1-01","title":"Default Title","untranslatedTitle":"Default Title"}]}
521,{"id":"15845704499366","handle":"laptop-screen-15-6-wxga-hd-30-pin","isCollective":null,"title":"15.6\" WXGA HD 30-Pin Laptop Replacement Screen - Bottom-Left Connector","type":"LAPTOPS \u0026 LAPTOP ACCESSORIES","untranslatedTitle":"15.6\" WXGA HD 30-Pin Laptop Replacement Screen - Bottom-Left Connector","url":"\/products\/laptop-screen-15-6-wxga-hd-30-pin","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"57535886065830","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/sled156-1366l40-1.jpg?v=1790690616"},"price":{"amount":999.0,"currencyCode":"ZAR"},"sku":"SLED156-1366L40","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270152564783","handle":"2in1-mini-money-detector-uvmg","isCollective":null,"title":"2-in-1 Mini Money Detector - UV + Magnetic Ink, Portable Clip-On (DP-323)","type":"Point of Sale","untranslatedTitle":"2-in-1 Mini Money Detector - UV + Magnetic Ink, Portable Clip-On (DP-323)","url":"\/products\/2in1-mini-money-detector-uvmg","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356849332271","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/dp-323.jpg?v=1778848056"},"price":{"amount":77.0,"currencyCode":"ZAR"},"sku":"DP-323","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"15838137909414","handle":"2-4ghz-wireless-laser-pointer-presenter","isCollective":null,"title":"2.4GHz Wireless Laser Pointer Presenter - USB Presentation Remote (LP-24G1)","type":"OFFICE \u0026 STATIONERY","untranslatedTitle":"2.4GHz Wireless Laser Pointer Presenter - USB Presentation Remote (LP-24G1)","url":"\/products\/2-4ghz-wireless-laser-pointer-presenter","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"57513616408742","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/lp-24g1.jpg?v=1790247699"},"price":{"amount":159.0,"currencyCode":"ZAR"},"sku":"LP-24G1","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8487775961135","handle":"wireless-presenter-2-4ghz-usb-remote-100","isCollective":null,"title":"2.4GHz Wireless Presenter USB Remote - 100m Range","type":"OFFICE \u0026 STATIONERY","untranslatedTitle":"2.4GHz Wireless Presenter USB Remote - 100m Range","url":"\/products\/wireless-presenter-2-4ghz-usb-remote-100","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"46236902490159","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/wp-24g1.jpg?v=1790065799"},"price":{"amount":169.0,"currencyCode":"ZAR"},"sku":"WP-24G1","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8483219898415","handle":"200w-solar-led-flood-light-with-solar","isCollective":null,"title":"200W Solar LED Flood Light with Solar Panel \u0026 Remote (SL-FL-200W-001)","type":"ELECTRICAL","untranslatedTitle":"200W Solar LED Flood Light with Solar Panel \u0026 Remote (SL-FL-200W-001)","url":"\/products\/200w-solar-led-flood-light-with-solar","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"46221546455087","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/sl-fl-200w-001-1.jpg?v=1789899155"},"price":{"amount":1299.0,"currencyCode":"ZAR"},"sku":"SL-FL-200W-001","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8424889155631","handle":"21v-lithium-ion-cordless-hammer-drill","isCollective":null,"title":"21V Cordless Hammer Drill \u0026 Impact Driver Set - Lithium-Ion, DIY","type":"DIY TOOLS \u0026 MACHINERY","untranslatedTitle":"21V Cordless Hammer Drill \u0026 Impact Driver Set - Lithium-Ion, DIY","url":"\/products\/21v-lithium-ion-cordless-hammer-drill","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45837871906863","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/cdh-21v-li.jpg?v=1787062080"},"price":{"amount":849.0,"currencyCode":"ZAR"},"sku":"CDH-21V-LI","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270203420719","handle":"24-port-cat6-utp-rack-mount-patch-panel","isCollective":null,"title":"24-Port Cat6 UTP Patch Panel - 19\" Rack Mount, 110 Punch Down, 1Gbps, Black","type":"Networking","untranslatedTitle":"24-Port Cat6 UTP Patch Panel - 19\" Rack Mount, 110 Punch Down, 1Gbps, Black","url":"\/products\/24-port-cat6-utp-rack-mount-patch-panel","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356912148527","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/lb-pp246.jpg?v=1778849474"},"price":{"amount":485.0,"currencyCode":"ZAR"},"sku":"LB-PP246","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8429696548911","handle":"280kg-electromagnetic-magnetic-door-lock","isCollective":null,"title":"280kg Electromagnetic Door Lock - Access Control Maglock","type":"SECURITY \u0026 SURVEILLANCE","untranslatedTitle":"280kg Electromagnetic Door Lock - Access Control Maglock","url":"\/products\/280kg-electromagnetic-magnetic-door-lock","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45849716555823","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/ml-280kg.jpg?v=1787237076"},"price":{"amount":349.0,"currencyCode":"ZAR"}
521,"sku":"ML-280KG","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8418622898223","handle":"demo-2tb-surveillance-drive-for-cctv","isCollective":null,"title":"2TB Surveillance Hard Drive for CCTV - 24\/7 DVR \u0026 NVR Recording (Demo)","type":"DRIVES \u0026 STORAGE","untranslatedTitle":"2TB Surveillance Hard Drive for CCTV - 24\/7 DVR \u0026 NVR Recording (Demo)","url":"\/products\/demo-2tb-surveillance-drive-for-cctv","vendor":"WESTERN DIGITAL","remoteShopId":null,"variants":[{"id":"45811965001775","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/dlwd2tb.jpg?v=1786519407"},"price":{"amount":1649.0,"currencyCode":"ZAR"},"sku":"DLWD2TB","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270228324399","handle":"cable-management-2u-for-server-rk","isCollective":null,"title":"2U Cable Management Panel for Server Rack - Guides \u0026 Straps Organiser (RM-CM-2U)","type":"Networking","untranslatedTitle":"2U Cable Management Panel for Server Rack - Guides \u0026 Straps Organiser (RM-CM-2U)","url":"\/products\/cable-management-2u-for-server-rk","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356944621615","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/rm-cm-2u_1.jpg?v=1778850221"},"price":{"amount":199.0,"currencyCode":"ZAR"},"sku":"RM-CM-2U","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270093320239","handle":"cable-3rca-to-3rca-15m-gold","isCollective":null,"title":"3 RCA to 3 RCA Composite AV Cable - 1.5m, Gold-Plated, for TV \u0026 DVD","type":"Cables","untranslatedTitle":"3 RCA to 3 RCA Composite AV Cable - 1.5m, Gold-Plated, for TV \u0026 DVD","url":"\/products\/cable-3rca-to-3rca-15m-gold","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356780355631","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/3x3r1.5g.jpg?v=1778846474"},"price":{"amount":30.0,"currencyCode":"ZAR"},"sku":"3X3R1.5G","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270245789743","handle":"connector-f-instalation-tool","isCollective":null,"title":"3-in-1 F-Connector Installation Tool - RG59 \u0026 RG6 Coax, Lock and Twist Compression","type":"DIY Tools \u0026 Machinery","untranslatedTitle":"3-in-1 F-Connector Installation Tool - RG59 \u0026 RG6 Coax, Lock and Twist Compression","url":"\/products\/connector-f-instalation-tool","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356969459759","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/tl224d.jpg?v=1778850803"},"price":{"amount":97.0,"currencyCode":"ZAR"},"sku":"TL224D","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270201946159","handle":"audio-splitter","isCollective":null,"title":"3.5mm Stereo Audio Splitter (KY-148) - 4-Pole to Mic + Headset, Cell Phone \u0026 PC Adapter","type":"Mobile\\","untranslatedTitle":"3.5mm Stereo Audio Splitter (KY-148) - 4-Pole to Mic + Headset, Cell Phone \u0026 PC Adapter","url":"\/products\/audio-splitter","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356910673967","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/ky-148.jpg?v=1778849429"},"price":{"amount":29.0,"currencyCode":"ZAR"},"sku":"KY-148","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270092206127","handle":"cable-2rca-to-1stereo-15m-sil","isCollective":null,"title":"3.5mm to 2 RCA Stereo Audio Cable - 1.5m, Gold-Plated, Dual-Shielded","type":"Cables","untranslatedTitle":"3.5mm to 2 RCA Stereo Audio Cable - 1.5m, Gold-Plated, Dual-Shielded","url":"\/products\/cable-2rca-to-1stereo-15m-sil","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356779044911","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/2rx1s1.5s.jpg?v=1778846438"},"price":{"amount":30.0,"currencyCode":"ZAR"},"sku":"2RX1S1.5S","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8429109805103","handle":"350kg-electromagnetic-magnetic-door-lock","isCollective":null,"title":"350kg Electromagnetic Door Lock - Access Control Maglock","type":"SECURITY \u0026 SURVEILLANCE","untranslatedTitle":"350kg Electromagnetic Door Lock - Access Control Maglock","url":"\/products\/350kg-electromagnetic-magnetic-door-lock","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45848706089007","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/ml-350kg.jpg?v=1787214606"},"price":{"amount":599.0,"currencyCode":"ZAR"},"sku":"ML-350KG","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8418626568239","handle":"demo-3tb-surveillance-drive-for-cctv","isCollective":null,"title":"3TB Surveillance Hard Drive for CCTV - 24\/7 DVR \u0026 NVR Recording (Demo)","type":"DRIVES \u0026 STORAGE","untranslatedTitle":"3TB Surveillance Hard Drive for CCTV - 24\/7 DVR \u0026 NVR Recording (Demo)","url":"\/products\/demo-3tb-surveillance-drive-for-cctv","vendor":"WESTERN DIGITAL","remoteShopId":null,"variants":[{"id":"45812140605487","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/dlwd3tb.jpg?v=1786519420"},"price":{"amount":1999.0,"currencyCode":"ZAR"},"sku":"DLWD3TB","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270232944687","handle":"sound-card-4-channel","isCollective":null,"title":"4 Channel PCI Sound Card - 32-bit ESS Chipset, DirectSound3D, Surround Audio","type":"Computers","untranslatedTitle":"4 Channel PCI Sound Card - 32-bit ESS Chipset, DirectSound3D, Surround Audio","url":"\/products\/sound-card-4-channel","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356950913071","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/sc4c.jpg?v=1778850373"},"price":{"amount":98.0,"currencyCode":"ZAR"},"sku":"SC4C","title":"Default Title","untranslatedTitle":"Default Title"}]}
521,{"id":"15837021896870","handle":"4-in-1-usb-3-0-multi-port-hub-adapter-pc","isCollective":null,"title":"4-in-1 USB 3.0 Multi-Port Hub Adapter for Laptop \u0026 PC (USB3-H4M1)","type":"BATTERIES \u0026 CHARGERS","untranslatedTitle":"4-in-1 USB 3.0 Multi-Port Hub Adapter for Laptop \u0026 PC (USB3-H4M1)","url":"\/products\/4-in-1-usb-3-0-multi-port-hub-adapter-pc","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"57506913255590","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/usb3-h4m1-1.jpg?v=1790174194"},"price":{"amount":399.0,"currencyCode":"ZAR"},"sku":"USB3-H4M1","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8310526771247","handle":"cable-sata-power","isCollective":null,"title":"4-Pin Molex LP4 to SATA Power Adapter Cable - 6 inch, Power SATA Drives","type":"CABLES","untranslatedTitle":"4-Pin Molex LP4 to SATA Power Adapter Cable - 6 inch, Power SATA Drives","url":"\/products\/cable-sata-power","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45490912591919","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/spcable.jpg?v=1781795453"},"price":{"amount":20.0,"currencyCode":"ZAR"},"sku":"SPCABLE","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270201880623","handle":"4-port-usb-20-kvm-switch","isCollective":null,"title":"4-Port USB 2.0 KVM Switch (KVM-41UA) - 250MHz VGA, LED Status, Auto Scan, Plug and Play","type":"Networking","untranslatedTitle":"4-Port USB 2.0 KVM Switch (KVM-41UA) - 250MHz VGA, LED Status, Auto Scan, Plug and Play","url":"\/products\/4-port-usb-20-kvm-switch","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356910608431","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/kvm-41ua_1.jpg?v=1778849427"},"price":{"amount":242.0,"currencyCode":"ZAR"},"sku":"KVM-41UA","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8340015153199","handle":"4-port-usb-switch","isCollective":null,"title":"4-Port USB 2.0 Manual Sharing Switch (4x1) – Share a Printer or Scanner","type":"COMPUTERS","untranslatedTitle":"4-Port USB 2.0 Manual Sharing Switch (4x1) – Share a Printer or Scanner","url":"\/products\/4-port-usb-switch","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45585462001711","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/1a4b.jpg?v=1783666375"},"price":{"amount":149.0,"currencyCode":"ZAR"},"sku":"1A4B","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270251819055","handle":"4-port-vga-switch-1920-x-1080-res-wi-sc","isCollective":null,"title":"4-Port VGA Switch - 1 In 4 Out 1920x1080, Metal Multi-Source Selector","type":"Computers","untranslatedTitle":"4-Port VGA Switch - 1 In 4 Out 1920x1080, Metal Multi-Source Selector","url":"\/products\/4-port-vga-switch-1920-x-1080-res-wi-sc","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356977455151","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/vga-15-4.jpg?v=1778850991"},"price":{"amount":165.0,"currencyCode":"ZAR"},"sku":"VGA-15-4","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270254604335","handle":"web-cam-480p-with-built-in-mic-stand","isCollective":null,"title":"480p HD Webcam with Built-in Microphone \u0026 Stand - USB, Fill Light, Plug \u0026 Play","type":"Computers","untranslatedTitle":"480p HD Webcam with Built-in Microphone \u0026 Stand - USB, Fill Light, Plug \u0026 Play","url":"\/products\/web-cam-480p-with-built-in-mic-stand","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356980928559","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/wc480p-01.jpg?v=1778851074"},"price":{"amount":242.0,"currencyCode":"ZAR"},"sku":"WC480P-01","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270254669871","handle":"web-cam-480p-with-built-in-mic","isCollective":null,"title":"480p HD Webcam with Built-in Microphone - USB, 30fps, LED Fill Light, Plug \u0026 Play","type":"Computers","untranslatedTitle":"480p HD Webcam with Built-in Microphone - USB, 30fps, LED Fill Light, Plug \u0026 Play","url":"\/products\/web-cam-480p-with-built-in-mic","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356980994095","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/wc480p-03.jpg?v=1778851076"},"price":{"amount":262.0,"currencyCode":"ZAR"},"sku":"WC480P-03","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270254637103","handle":"web-cam-480p-with-built-in-mic-stand-2","isCollective":null,"title":"480p VGA Webcam with Built-in Microphone \u0026 Stand - USB, 4 LED, Face Tracking","type":"Computers","untranslatedTitle":"480p VGA Webcam with Built-in Microphone \u0026 Stand - USB, 4 LED, Face Tracking","url":"\/products\/web-cam-480p-with-built-in-mic-stand-2","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356980961327","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/wc480p-02.jpg?v=1778851074"},"price":{"amount":97.0,"currencyCode":"ZAR"},"sku":"WC480P-02","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270086111279","handle":"4g5gmobile-wifi-pocket-router-d3200","isCollective":null,"title":"4G\/5G Mobile WiFi Pocket Router D3200 - 150Mbps LTE, 300Mbps Wi-Fi, 3200mAh, 10 Devices","type":"Networking","untranslatedTitle":"4G\/5G Mobile WiFi Pocket Router D3200 - 150Mbps LTE, 300Mbps Wi-Fi, 3200mAh, 10 Devices","url":"\/products\/4g5gmobile-wifi-pocket-router-d3200","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356768100399","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/4gmr-d3200_1.jpg?v=1778846277"},"price":{"amount":679.0,"currencyCode":"ZAR"},"sku":"4GMR-D3200","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8310522118191","handle":"ram-laptop-ddr3-1600mhz-204-pin-low-volt-1","isCollective":null,"title":"4GB DDR3 1600MHz Laptop RAM - 204-Pin SODIMM, 1.5V, Non-ECC (PC3-12800)","type":"RAM","untranslatedTitle":"4GB DDR3 1600MHz Laptop RAM - 204-Pin SODIMM, 1.5V, Non-ECC (PC3-12800)","url":"\/products\/ram-laptop-ddr3-1600mhz-204-pin-low-volt-1","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45490899877935","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/lr4.0_1600.jpg?v=1781795386"},"price":{"amount":194.0,"currencyCode":"ZAR"},"sku":"LR4.0(1600)","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8418642788399","handle":"demo-4tb-surveillance-drive-for-cctv","isCollective":null,"title":"4TB Surveillance Hard Drive for CCTV - 24\/7 DVR \u0026 NVR Recording (Demo)","type":"DRIVES \u0026 STORAGE","untranslatedTitle":"4TB Surveillance Hard Drive for CCTV - 24\/7 DVR \u0026 NVR Recording (Demo)","url":"\/products\/demo-4tb-surveillance-drive-for-cctv","vendor":"WESTERN DIGITAL","remoteShopId":null,"variants":[{"id":"45812236615727","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/dlwd4tb_1.1.jpg?v=1786522690"},"price":{"amount":3399.0,"currencyCode":"ZAR"},"sku":"DLWD4TB","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8467143655471","handle":"demo-500gb-surveillance-drive-for-cctv","isCollective":null,"title":"500GB 3.5-Inch Surveillance Hard Drive for CCTV DVR \u0026 NVR - Demo, 6 Month Warranty","type":"DRIVES \u0026 STORAGE","untranslatedTitle":"500GB 3.5-Inch Surveillance Hard Drive for CCTV DVR \u0026 NVR - Demo, 6 Month Warranty","url":"\/products\/demo-500gb-surveillance-drive-for-cctv","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"46145445167151","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/dlwd500gb-1.jpg?v=1788864671"},"price":{"amount":389.0,"currencyCode":"ZAR"},"sku":"DLWD500GB","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270101741615","handle":"power-supply-5v1amp-35135","isCollective":null,"title":"5V 1A DC Power Supply Adapter - 3.5 x 1.35mm Plug, Plug-and-Play","type":"Satellite Accessories","untranslatedTitle":"5V 1A DC Power Supply Adapter - 3.5 x 1.35mm Plug, Plug-and-Play","url":"\/products\/power-supply-5v1amp-35135","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356789170223","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/5v1a3.5-1.35.jpg?v=1778846687"},"price":{"amount":37.0,"currencyCode":"ZAR"},"sku":"5V1A3.5*1.35","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270101807151","handle":"power-supply-5v2amp-2508","isCollective":null,"title":"5V 2A DC Power Supply Adapter - 2.5 x 0.8mm Plug, Switching PSU","type":"Satellite Accessories","untranslatedTitle":"5V 2A DC Power Supply Adapter - 2.5 x 0.8mm Plug, Switching PSU","url":"\/products\/power-supply-5v2amp-2508","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356789235759","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/5v2a2.5-0.8.jpg?v=1778846689"},"price":{"amount":39.0,"currencyCode":"ZAR"},"sku":"5V2A2.5*0.8","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270101839919","handle":"power-supply-5v2amp-35135","isCollective":null,"title":"5V 2A DC Power Supply Adapter - 3.5 x 1.35mm Plug, Switching PSU","type":"Satellite Accessories","untranslatedTitle":"5V 2A DC Power Supply Adapter - 3.5 x 1.35mm Plug, Switching PSU","url":"\/products\/power-supply-5v2amp-35135","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356789268527","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/5v2a.jpg?v=1778846690"},"price":{"amount":48.0,"currencyCode":"ZAR"},"sku":"5V2A3.5*1.35","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8310526378031","handle":"sound-card-6-chanel-pci-express","isCollective":null,"title":"6-Channel 5.1 Surround PCI-Express Sound Card - 24-bit 48kHz, S\/PDIF, VIA Envy24","type":"COMPUTERS","untranslatedTitle":"6-Channel 5.1 Surround PCI-Express Sound Card - 24-bit 48kHz, S\/PDIF, VIA Envy24","url":"\/products\/sound-card-6-chanel-pci-express","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45490912067631","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/sc6c-pcie-1.jpg?v=1784819409"},"price":{"amount":291.0,"currencyCode":"ZAR"},"sku":"SC6C-PCIE","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8270256668719","handle":"wall-plug-socket-mic-female-65-stereo","isCollective":null,"title":"6.35mm Stereo Mic Female Wall Plate Socket - 1\/4\" Audio Faceplate for AV Installs","type":"Electrical","untranslatedTitle":"6.35mm Stereo Mic Female Wall Plate Socket - 1\/4\" Audio Faceplate for AV Installs","url":"\/products\/wall-plug-socket-mic-female-65-stereo","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45356983713839","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/wps-micf6.5.jpg?v=1778851131"},"price":{"amount":34.0,"currencyCode":"ZAR"},"sku":"WPS-MICF6.5","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8422083297327","handle":"7-ip-wifi-video-door-phone-intercom","isCollective":null,"title":"7\" IP Wi-Fi Video Door Phone Intercom Kit - 1080p HD, Door Release","type":"SECURITY \u0026 SURVEILLANCE","untranslatedTitle":"7\" IP Wi-Fi Video Door Phone Intercom Kit - 1080p HD, Door Release","url":"\/products\/7-ip-wifi-video-door-phone-intercom","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45827974332463","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/vdp-ip7-830st-wf.jpg?v=1786786599"},"price":{"amount":1899.0,"currencyCode":"ZAR"},"sku":"VDP-IP7-830ST-WF","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8420028874799","handle":"7-analogue-video-door-phone-intercom","isCollective":null,"title":"7\" Video Door Phone Intercom Kit - Colour Monitor, Door Release, Analogue","type":"SECURITY \u0026 SURVEILLANCE","untranslatedTitle":"7\" Video Door Phone Intercom Kit - Colour Monitor, Door Release, Analogue","url":"\/products\/7-analogue-video-door-phone-intercom","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"45820231090223","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/vdp-a7-950c19c.jpg?v=1786609172"},"price":{"amount":1149.0,"currencyCode":"ZAR"},"sku":"VDP-A7-950C19C","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8487214121007","handle":"7-in-1-multifunctional-cleaning-brush-ki","isCollective":null,"title":"7-in-1 Multifunctional Cleaning Brush Kit for Keyboard, Earbuds \u0026 Phones","type":"COMPUTERS","untranslatedTitle":"7-in-1 Multifunctional Cleaning Brush Kit for Keyboard, Earbuds \u0026 Phones","url":"\/products\/7-in-1-multifunctional-cleaning-brush-ki","vendor":"HANDBOSS","remoteShopId":null,"variants":[{"id":"46233937772591","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/q6e-1.jpg?v=1790008718"},"price":{"amount":39.0,"currencyCode":"ZAR"},"sku":"Q6E","title":"Default Title","untranslatedTitle":"Default Title"}]}
521,{"id":"15837909254310","handle":"7-in-1-usb-3-2-multi-port-hub-adapter-pc","isCollective":null,"title":"7-in-1 USB 3.2 Multi-Port Hub Adapter for Laptop \u0026 PC (USB32-H7M1)","type":"COMPUTERS","untranslatedTitle":"7-in-1 USB 3.2 Multi-Port Hub Adapter for Laptop \u0026 PC (USB32-H7M1)","url":"\/products\/7-in-1-usb-3-2-multi-port-hub-adapter-pc","vendor":"Alcell","remoteShopId":null,"variants":[{"id":"57510933758118","image":{"src":"\/\/alcell.co.za\/cdn\/shop\/files\/usb32-h7m1-1.jpg?v=1790245752"},"price":{"amount":599.0,"currencyCode":"ZAR"},"sku":"USB32-H7M1","title":"Default Title","untranslatedTitle":"Default Title"}]}],"purchasingCompany":null},},"https://alcell.co.za/cdn","87a86122w399bf3b8pd0403c97m2c07468c",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"156650274863","themePublished":"true","eventMetadataId":"a9c3cbbe-dcdc-46dd-921b-9c5fb5e056bd","pageType":"product","resourceId":"8270253555759","shopId":"76430475311","storefrontBaseUrl":"https:\/\/alcell.co.za","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\"]","isMerchantRequest":"false","hashVersion":"87a86122w399bf3b8pd0403c97m2c07468c","publish":"custom","events":"[[\"page_viewed\",{}],[\"product_viewed\",{\"productVariant\":{\"price\":{\"amount\":2912.0,\"currencyCode\":\"ZAR\"},\"product\":{\"title\":\"ViewSonic VX2779-HD-PRO 27\\\" Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10\",\"vendor\":\"VIEWSONIC\",\"id\":\"8270253555759\",\"untranslatedTitle\":\"ViewSonic VX2779-HD-PRO 27\\\" Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10\",\"url\":\"\/products\/viewsonic-27-180hz-gaming-monitor\",\"type\":\"TVs \u0026 Screens\"},\"id\":\"45356979683375\",\"image\":{\"src\":\"\/\/alcell.co.za\/cdn\/shop\/files\/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857\"},\"sku\":\"VX2779-HD-PRO\",\"title\":\"Default Title\",\"untranslatedTitle\":\"Default Title\"}}]]"});})();</script>
521<script>
522  window.ShopifyAnalytics = window.ShopifyAnalytics || {};
523  window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
524  window.ShopifyAnalytics.meta.currency = 'ZAR';
525  var meta = {"product":{"id":8270253555759,"gid":"gid:\/\/shopify\/Product\/8270253555759","vendor":"VIEWSONIC","type":"TVs \u0026 Screens","handle":"viewsonic-27-180hz-gaming-monitor","variants":[{"id":45356979683375,"price":291200,"name":"ViewSonic VX2779-HD-PRO 27\" Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10","public_title":null,"sku":"VX2779-HD-PRO"}],"remote":false},"page":{"pageType":"product","resourceType":"product","resourceId":8270253555759,"requestId":"ba57d535-845d-41dc-af9a-8a2519adfee7-1791376606"}};
526  for (var attr in meta) {
527    window.ShopifyAnalytics.meta[attr] = meta[attr];
528  }
529</script>
vendor: 1 bytes, line 529
529
530<script class="analytics">
531  (function () {
532    var customDocumentWrite = function(content) {
533      var jquery = null;
534
535      if (window.jQuery) {
536        jquery = window.jQuery;
537      } else if (window.Checkout && window.Checkout.$) {
538        jquery = window.Checkout.$;
539      }
540
541      if (jquery) {
542        jquery('body').append(content);
543      }
544    };
545
546    var hasLoggedConversion = function(token) {
547      if (token) {
548        return document.cookie.indexOf('loggedConversion=' + token) !== -1;
549      }
550      return false;
551    }
552
553    var setCookieIfConversion = function(token) {
554      if (token) {
555        var twoMonthsFromNow = new Date(Date.now());
556        twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2);
557
558        document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow;
559      }
560    }
561
562    var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || [];
563    window.ShopifyAnalytics.lib.trekkie = window.trekkie;
564    if (trekkie.integrations) {
565      return;
566    }
567    trekkie.methods = [
568      'identify',
569      'page',
570      'ready',
571      'track',
572      'trackForm',
573      'trackLink'
574    ];
575    trekkie.factory = function(method) {
576      return function() {
577        var args = Array.prototype.slice.call(arguments);
578        args.unshift(method);
579        trekkie.push(args);
580        if (method == 'track' || method == 'page') {
581          var pageUrl;
582          try {
583            pageUrl = window.location.href;
584          } catch (e) {}
585          var pageReferrer;
586          try {
587            pageReferrer = document.referrer;
588          } catch (e) {}
589          try {
590            if (window.__TREKKIE_SHIM_QUEUE == null) {
591              window.__TREKKIE_SHIM_QUEUE = [];
592            }
593            window.__TREKKIE_SHIM_QUEUE.push({
594              from: 'trekkie-stub',
595              method: method,
596              args: args.slice(1),
597              pageContext: {
598                url: pageUrl,
599                referrer: pageReferrer
600              }
601            });
602          } catch (e) {
603            // no-op
604          }
605        }
606        return trekkie;
607      };
608    };
609    for (var i = 0; i < trekkie.methods.length; i++) {
610      var key = trekkie.methods[i];
611      trekkie[key] = trekkie.factory(key);
612    }
613    trekkie.load = function(config) {
614      trekkie.config = config || {};
615      trekkie.config.initialDocumentCookie = document.cookie;
616      var first = document.getElementsByTagName('script')[0];
617var script = document.createElement('script');
618script.type = 'text/javascript';
619script.onerror = function(e) {
620  var scriptFallback = document.createElement('script');
621  scriptFallback.type = 'text/javascript';
622  scriptFallback.onerror = function(error) {
623          var Monorail = {
624      produce: function produce(monorailDomain, schemaId, payload) {
625        var currentMs = new Date().getTime();
626        var event = {
627          schema_id: schemaId,
628          payload: payload,
629          metadata: {
630            event_created_at_ms: currentMs,
631            event_sent_at_ms: currentMs
632          }
633        };
634        return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event));
635      },
636      sendRequest: function sendRequest(endpointUrl, payload) {
637        // Try the sendBeacon API
638        if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) {
639          var blobData = new window.Blob([payload], {
640            type: 'text/plain'
641          });
642
643          if (window.navigator.sendBeacon(endpointUrl, blobData)) {
644            return true;
645          } // sendBeacon was not successful
646
647        } // XHR beacon
648
649        var xhr = new XMLHttpRequest();
650
651        try {
652          xhr.open('POST', endpointUrl);
653          xhr.setRequestHeader('Content-Type', 'text/plain');
654          xhr.send(payload);
655        } catch (e) {
656          console.log(e);
657        }
658
659        return false;
660      },
661      isIos12: function isIos12() {
662        return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1;
663      }
664    };
665    Monorail.produce('monorail-edge.shopifysvc.com',
666      'trekkie_storefront_load_errors/1.1',
667      {shop_id: 76430475311,
668      theme_id: 156650274863,
669      app_name: "storefront",
670      context_url: window.location.href,
671      source_url: "//alcell.co.za/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js"});
672
673  };
674  scriptFallback.async = true;
675  scriptFallback.src = '//alcell.co.za/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js';
676  first.parentNode.insertBefore(scriptFallback, first);
677};
678script.async = true;
679script.src = '//alcell.co.za/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js';
680first.parentNode.insertBefore(script, first);
681
682    };
683    trekkie.load(
684      {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":76430475311,"isMerchantRequest":null,"themeId":1566
68450274863,"themeCityHash":"684115218173608072","contentLanguage":"en","currency":"ZAR","eventMetadataId":"a9c3cbbe-dcdc-46dd-921b-9c5fb5e056bd"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}}
685    );
686
687    var loaded = false;
688    trekkie.ready(function() {
689      if (loaded) return;
690      loaded = true;
691
692      window.ShopifyAnalytics.lib = window.trekkie;
693
694      var originalDocumentWrite = document.write;
695      document.write = customDocumentWrite;
696      try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {};
697      document.write = originalDocumentWrite;
698
699      var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/)
700      var token = match? match[1]: undefined;
701      if (!hasLoggedConversion(token)) {
702        setCookieIfConversion(token);
703        window.ShopifyAnalytics.lib.track("Viewed Product",{"currency":"ZAR","variantId":45356979683375,"productId":8270253555759,"productGid":"gid:\/\/shopify\/Product\/8270253555759","name":"ViewSonic VX2779-HD-PRO 27\" Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10","price":"2912.00","sku":"VX2779-HD-PRO","brand":"VIEWSONIC","variant":null,"category":"TVs \u0026 Screens","nonInteraction":true,"remote":false,"available":true},undefined,undefined,{"shopifyEmitted":true});
704      }
705    });
706
707    window.ShopifyAnalytics.lib.page(null,{"pageType":"product","resourceType":"product","resourceId":8270253555759,"requestId":"ba57d535-845d-41dc-af9a-8a2519adfee7-1791376606","shopifyEmitted":true});
708
709    var eventsListenerScript = document.createElement('script');
710    eventsListenerScript.async = true;
711    eventsListenerScript.src = "//alcell.co.za/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js";
712    document.getElementsByTagName('head')[0].appendChild(eventsListenerScript);
713})();</script>
vendor: 1 bytes, line 713
713
714<script
715  defer
716  src="https://alcell.co.za/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.6.min.js"
717  data-application="storefront-renderer"
718  data-shop-id="76430475311"
719  data-render-region="gcp-us-central1"
720  data-page-type="product"
721  data-theme-instance-id="156650274863"
722  data-theme-name="Dawn"
723  data-theme-version="15.4.1"
724  data-monorail-region="shop_domain"
725  data-resource-timing-sampling-rate="10"
726  data-shs="true"
727  data-shs-beacon="true"
728  data-shs-export-with-fetch="true"
729  data-shs-logs-sample-rate="1"
730  data-shs-beacon-endpoint="https://alcell.co.za/api/collect"
731></script>
731
732<meta name="shopify-y" content="0b1401e8-f60f-4314-b08f-b14e0d64174c" data-expiration="1822934206000"><meta name="shopify-s" content="25a3e84b-502d-453f-8637-f9e476dc3d80" data-expiration="1791378406000"><meta name="new-cookie-storage-activated" content="t">
733</head>
734
735  <body class="gradient animate--hover-default">
736    <a class="skip-to-content-link button visually-hidden" href="#MainContent">
737      Skip to content
738    </a><!-- BEGIN sections: header-group -->
739<div id="shopify-section-sections--21741424476207__header" class="shopify-section shopify-section-group-header-group"><link href="//alcell.co.za/cdn/shop/t/2/assets/component-menu-drawer.css?v=160753904054174222001784144594" rel="stylesheet" type="text/css" media="all" />
740<link href="//alcell.co.za/cdn/shop/t/2/assets/mini-cart.css?v=125616077145382119651783317762" rel="stylesheet" type="text/css" media="all" />
741<script src="//alcell.co.za/cdn/shop/t/2/assets/mini-cart.js?v=128246485129193563701781271871" defer="defer"></script>
741
742
743<style>
744  .tk-header { background:#fff; font-family: inherit; }
745  .tk-wrap { max-width:1600px; margin:0 auto; padding: 0 24px; }
746
747  /* ───── TOP WHITE BAR ───── */
748  .tk-topbar {
749    display:flex; align-items:center; gap:24px;
750    padding: 14px 0;
751    border-bottom:1px solid #E6E8EC;
752  }
753  .tk-topbar-outer { border-bottom:1px solid #E6E8EC; }
754  .tk-topbar { border-bottom:none; }
755  .tk-topbar__logo { display:flex; align-items:center; }
756  .tk-topbar__logo img { display:block; height:64px; width:auto; }
757
758  .tk-util {
759    display:flex; align-items:center; gap:20px;
760    margin-left: 8px;
761  }
762  .tk-util a { color:#1B1B1B; font-size:13px; text-decoration:none; font-weight:400; }
763  .tk-util a:hover { color:#2a3270; }
764  /* Thin vertical divider between the utility links (Help Centre | Company Profile). */
765  .tk-util__sep { width:1px; height:18px; background:#d7d9de; flex:0 0 auto; }
766
767  .tk-topbar__right {
768    margin-left:auto;
769    display:flex; align-items:center; gap:20px;
770  }
771  .tk-topbar__right .tk-auth {
772    display:flex; align-items:center; gap:18px;
773  }
774  .tk-topbar__right .tk-auth a {
775    color:#1B1B1B; font-size:13px; text-decoration:none; font-weight:400;
776  }
777  .tk-topbar__right .tk-auth a:hover { color:#2a3270; }
778
779  /* Heart + cart sit together as a tight pair; stretch makes the heart
780     exactly the same height as the cart pill. */
781  .tk-cartgroup { display:flex; align-items:stretch; gap:8px; }
782  .tk-icon-btn {
783    display:inline-flex; align-items:center; justify-content:center;
784    align-self:stretch; aspect-ratio:1; min-width:40px; border-radius:50%;
785    background:#de4949; color:#fff;             /* red circle, white heart */
786    text-decoration:none;
787    position:relative;
788    transition:background .12s ease;
789  }
790  .tk-icon-btn:hover { background:#c93f3f; }
791  .tk-icon-btn svg { width:22px; height:22px; }
792  .tk-icon-btn__count {
793    position:absolute; top:-4px; right:-4px;
794    background:#de4949; color:#fff;             /* red scheme, not blue */
795    min-width:16px; height:16px; border-radius:8px;
796    font-size:10px; line-height:16px; text-align:center;
797    padding:0 3px; font-weight:700;
798    box-shadow:0 0 0 1.5px #fff;                /* white ring off the red circle */
799  }
800  .tk-icon-btn__count[hidden] { display:none; }
801
802  .tk-cart-pill {
803    display:inline-flex; align-items:center; gap:8px;
804    background:#2a3270; color:#fff;
805    padding:6px 14px 6px 10px;
806    border-radius:999px;
807    text-decoration:none;
808    font-weight:600; font-size:14px;
809    transition:background .12s ease;          /* match the heart's hover transition */
810  }
811  .tk-cart-pill:hover { background:#222a5e; } /* darken navy on hover, like the heart darkens its red */
812  .tk-cart-pill svg { width:22px; height:22px; }
813
814  /* ───── MOBILE BURGER DRAWER ───── */
815  /* The full-screen open behaviour lives in component-menu-drawer.css (the
816     `#Details-menu-drawer-container[open]` rules). Here we only hide the burger
817     on desktop and style/position the closed burger button on mobile. */
818  .tk-drawer { display:none; }
819  .tk-drawer__toggle {
820    list-style:none; cursor:pointer;
821    display:inline-flex; align-items:center; justify-content:center;
822    width:40px; height:40px; padding:0; margin:0;
823    background:transparent; border:none; color:#1B1B1B;
824    -webkit-tap-highlight-color:transparent;
825  }
826  .tk-drawer__toggle::-webkit-details-marker { display:none; }
827  .tk-drawer__toggle .svg-wrapper { width:26px; height:26px; }
828  /* The drawer's close (X) button is styled in assets/component-menu-drawer.css
829     (it lives in the .tkmenu heading row now). Don't re-style it here — an
830     absolute-position rule here would override that and pull the X out of the row. */
831
832  /* ───── BLUE BAR ───── */
833  /* Two rows: search row 1, tabs row 2. The homepage sidebar uses
834     negative margin to overlap up into row 2 of column 1 (see hero). */
835  .tk-bluebar-outer { background:#2a3270; }
836  .tk-bluebar {
837    padding: 12px 0 12px;
838    display:grid;
839    grid-template-columns: 230px 1fr;
840    grid-template-rows: auto auto;
841    column-gap: 18px;
842    row-gap: 10px;
843  }
844  /* Non-homepage pages have no category-tabs row. Collapse to a single row
845     and drop the row-gap so the bottom padding equals the top (both 12px);
846     otherwise the leftover row-gap adds 10px below the search bar only. */
847  .tk-bluebar--single {
848    grid-template-rows: auto;
849    row-gap: 0;
850  }
851  .tk-dept-btn {
852    grid-column: 1;
853    grid-row: 1;
854    align-self: stretch;
855    background:#1B1B1B; color:#fff;
856    border:none;
857    padding:0 18px;
858    border-radius:6px 6px 0 0;
859    font-weight:600; font-size:13px;
860    display:flex; align-items:center; gap:10px;
861    cursor:pointer;
862    justify-content:space-between;
863    width:100%;
864    height:100%;
865  }
866  .tk-dept-btn svg { width:14px; height:14px; }
867  /* On non-homepage pages, round the bottom corners since there's no
868     sidebar below to merge into. */
869  .tk-dept-btn--rounded { border-radius: 6px; }
870
871  /* ───── DEPT DROPDOWN (non-homepage) ───── */
872  /* When the panel is open, the button "merges" with it (square bottom).
873     When closed, the button has all corners rounded. */
874  .tk-dept-wrap {
875    grid-column: 1;
876    grid-row: 1;
877    position: relative;
878  }
879  .tk-dept-wrap:has(.tk-dept-panel:not([hidden])) .tk-dept-btn--rounded {
880    border-radius: 6px 6px 0 0;
881  }
882  .tk-dept-panel {
883    position: absolute;
884    top: 100%;
885    left: 0;
886    width: 230px;
887    z-index: 40;
888    background: #fff;
889    border-radius: 0 0 8px 8px;
890    box-shadow: 0 8px 24px rgba(0,0,0,.15);
891    overflow: visible;
892  }
893  .tk-dept-panel[hidden] { display: none; }
894  /* Hover opens the panel; mouse leaving the wrap (button + panel) closes it. */
895  .tk-dept-wrap:hover .tk-dept-panel[hidden] { display: block !important; }
896  .tk-dept-wrap:hover .tk-dept-btn--rounded { border-radius: 6px 6px 0 0; }
897
898  /* Sidebar + mega-menu styles (mirrored exactly from alcell-hero.liquid
899     so the dropdown looks identical to the homepage sidebar). */
900  .tk-dept-panel .tk-sidebar {
901    background: #fff;
902    border-radius: 0 0 8px 8px;
903    position: relative;
904  }
905  .tk-dept-panel .tk-sidebar__list { list-style: none; margin: 0; padding: 2px 0; }
906  .tk-dept-panel .tk-sidebar__list li a {
907    display: flex; align-items: center; justify-content: space-between;
908    padding: 6px 14px;
909    color: #1B1B1B; font-size: 13px; text-decoration: none;
910    border-bottom: 1px solid #F1F2F4;
911    line-height: 1.3;
912  }
913  .tk-dept-panel .tk-sidebar__list li:last-child a { border-bottom: none; }
914  .tk-dept-panel .tk-sidebar__item { position: static; }
915  .tk-dept-panel .tk-sidebar__item:hover > a { background: #F4F8FF; color: #2a3270; }
916  .tk-dept-panel .tk-sidebar__list li a svg { width: 12px; height: 12px; color: #9aa1a8; flex-shrink: 0; }
917
918  /* "Big AlCell Day" promo button — mirrored from alcell-hero.liquid so the
919     dropdown matches the homepage sidebar exactly (height, type, corners). */
920  .tk-dept-panel .tk-sidebar__promo {
921    margin: 0;
922    background: #de4949;
923    color: #fff;
924    padding: 7px 14px;
925    text-decoration: none;
926    border-radius: 0 0 8px 8px;
927    display: flex;
928    flex-direction: column;
929    align-items: center;
930    justify-content: center;
931    gap: 0;
932    line-height: 1.1;
933    text-align: center;
934    transition: background .12s ease;
935  }
936  .tk-dept-panel .tk-sidebar__promo:hover { background: #c93f3f; color: #fff; }
937  .tk-dept-panel .tk-sidebar__promo-title {
938    font-family: 'Poppins', var(--font-heading-family, inherit);
939    font-size: 19px;
940    font-weight: 600;
941    letter-spacing: -.01em;
942    line-height: 1.05;
943    margin: 1px 0;
944    color: #fff;
945    text-shadow: 0 1px 1px rgba(0,0,0,.18);
946  }
947  .tk-dept-panel .tk-sidebar__promo-brand { font-weight: inherit; }
948  .tk-dept-panel .tk-sidebar__promo-sub {
949    display: flex;
950    align-items: center;
951    gap: 6px;
952    font-family: var(--font-body-family, inherit);
953    font-size: 9.5px;
954    font-weight: 500;
955    font-style: italic;
956    letter-spacing: .04em;
957    color: #fff;
958  }
959  .tk-dept-panel .tk-sidebar__promo-sub::before,
960  .tk-dept-panel .tk-sidebar__promo-sub::after {
961    content: "";
962    width: 7px; height: 1px;
963    background: #fff;
964  }
965  /* When a mega-menu is open it runs the full sidebar height; square the promo's
966     bottom-right corner so its 8px radius doesn't gap against the flyout's left edge. */
967  .tk-dept-panel .tk-sidebar:has(.tk-sidebar__item:hover) .tk-sidebar__promo {
968    border-bottom-right-radius: 0;
969  }
970
971  .tk-dept-panel .tk-megamenu {
972    position: absolute;
973    top: 0;
974    left: 100%;
975    width: 280px;
976    height: 100%;
977    background: #fff;
978    /* No border, and rounded only on the outer (right) edge at 8px to match the
979       dropdown — so it reads as an extension of the menu, not a separate card.
980       overflow:hidden clips the promo image to those rounded corners. */
981    border-radius: 0 8px 8px 0;
982    box-shadow: 8px 4px 16px rgba(0,0,0,.08);
983    padding: 14px 18px;
984    display: none;
985    overflow: hidden;
986    z-index: 50;
987  }
988  .tk-dept-panel .tk-sidebar__item:hover .tk-megamenu { display: block; }
989
990  /* Variant with a full-height promo image on the right. */
991  .tk-dept-panel .tk-megamenu--with-image {
992    width: auto;
993    padding: 0;
994    display: none;
995  }
996  .tk-dept-panel .tk-sidebar__item:hover .tk-megamenu--with-image { display: flex; }
997  .tk-dept-panel .tk-megamenu--with-image .tk-megamenu__col {
998    flex: 0 0 280px;
999    width: 280px;
1000    min-width: 0;
1001    padding: 14px 18px;
1002  }
1003  .tk-dept-panel .tk-megamenu__image {
1004    position: relative;
1005    flex: 0 0 280px;
1006    width: 280px;
1007    align-self: stretch;
1008    display: block;
1009    overflow: hidden;
1010    line-height: 0;
1011  }
1012  .tk-dept-panel .tk-megamenu__image img {
1013    position: absolute;
1014    inset: 0;
1015    width: 100%;
1016    height: 100%;
1017    object-fit: cover;
1018    object-position: center;
1019    display: block;
1020  }
1021  .tk-dept-panel .tk-megamenu__title {
1022    margin: 0 0 10px;
1023    font-size: 14px;
1024    font-weight: 700;
1025    color: #2a3270;
1026  }
1027  .tk-dept-panel .tk-megamenu__list { list-style: none; margin: 0; padding: 0; }
1028  .tk-dept-panel .tk-megamenu__list li { margin: 0; padding: 0; }
1029  /* Higher specificity than ".tk-dept-panel .tk-sidebar__list li a" so the
1030     sidebar divider does not bleed into the mega-menu sub-category links. */
1031  .tk-dept-panel .tk-megamenu__col .tk-megamenu__list li a {
1032    display: block;
1033    padding: 7px 0;
1034    color: #1B1B1B;
1035    font-size: 13px;
1036    text-decoration: none;
1037    line-height: 1.3;
1038    border-bottom: none;
1039    box-shadow: none;
1040  }
1041  .tk-dept-panel .tk-megamenu__col .tk-megamenu__list li a:hover {
1042    color: #2a3270;
1043    text-decoration: underline;
1044  }
1045  @media (max-width: 989px) {
1046    .tk-dept-panel .tk-megamenu { display: none !important; }
1047  }
1048
1049  /* Wrapper = the <predictive-search> (or <search-form>) custom element.
1050     It takes the grid cell and is the positioning context for the dropdown. */
1051  .tk-search-wrap {
1052    grid-column: 2;
1053    grid-row: 1;
1054    display:block;
1055    position:relative;
1056    width:100%;
1057  }
1058  /* The form must NOT clip (overflow) or the dropdown would be cut off.
1059     The rounded/clipped "field" lives in an inner wrapper instead. */
1060  .tk-search {
1061    position:relative;
1062    display:block;
1063    width:100%;
1064    margin:0;
1065  }
1066  .tk-search__field {
1067    display:flex; align-items:center;
1068    background:#fff; border-radius:6px;
1069    overflow:hidden;
1070    width:100%;
1071  }
1072  .tk-search__field input {
1073    flex:1;
1074    border:none; outline:none;
1075    padding:13px 18px;
1076    /* Match the "Top suggestions" text exactly. Inputs do NOT inherit
1077       font-family or line-height by default (they use the OS font / `normal`),
1078       so set them explicitly to the same values as .ps-empty__term — identical
1079       family, size, weight, line-height, letter-spacing and colour. */
1080    font-family: var(--font-body-family);
1081    font-size:14px;
1082    font-weight:400;
1083    line-height:1.3;
1084    letter-spacing:normal;
1085    color:#2b2f38;
1086    background:transparent;
1087    min-width:0;
1088  }
1089  .tk-search__field input::placeholder {
1090    color:#8a8f9c;
1091    font-weight:400;
1092  }
1093  /* No appearance change on interaction — kill any global focus border/shadow. */
1094  .tk-search__field,
1095  .tk-search__field:focus-within,
1096  .tk-search__field input,
1097  .tk-search__field input:focus,
1098  .tk-search__field input:focus-visible {
1099    border:none !important;
1100    box-shadow:none !important;
1101    outline:none !important;
1102  }
1103  /* Hide the browser's native search "✕" — the custom "Clear" button is the one
1104     way to clear, so we don't duplicate it. */
1105  .tk-search__field input[type="search"]::-webkit-search-cancel-button,
1106  .tk-search__field input[type="search"]::-webkit-search-decoration {
1107    -webkit-appearance: none;
1108    appearance: none;
1109    display: none;
1110  }
1111  /* Desktop: the magnifier is a seamless icon inside the white field — no grey
1112     box / border, so nothing reads as a separator next to "Clear". The blue
1113     button treatment is applied only at the mobile breakpoint below. */
1114  .tk-search__field button[type="submit"] {
1115    background:transparent;
1116    border:none; cursor:pointer;
1117    padding:0 14px 0 6px; height:46px;
1118    color:#1B1B1B;
1119    display:flex; align-items:center; justify-content:center;
1120    flex-shrink:0;
1121  }
1122  .tk-search__field button[type="submit"]:hover { color:#2a3270; }
1123  .tk-search__field button[type="submit"] svg { width:18px; height:18px; }
1124
1125  /* ───── PREDICTIVE SEARCH DROPDOWN ───── */
1126  /* Dawn's component-predictive-search.css already positions .predictive-search
1127     as an absolute panel under the input. These rules just fit it to the
1128     Alcell search bar: full width of the field, capped height, on top of
1129     the dept panel / tabs / hero sidebar. */
1130  /* Hidden from first paint (inline CSS applies immediately, unlike the
1131     async component-predictive-search.css) so the results box + its loading
1132     spinner never flash on page load. Only shown once the field is in use. */
1133  .tk-search .predictive-search {
1134    display: none;
1135    position: absolute;
1136    top: calc(100% + 6px);
1137    left: 0;
1138    width: 100%;
1139    /* The panel grows to its content height; --ps-max-height (set by JS to the
1140       distance from the panel's top to the bottom of the viewport) is only a
1141       safety cap so it can never run off-screen on a tiny viewport. Falls back
1142       to a generous 92vh before the script runs. The empty state additionally
1143       fills to the department-sidebar's height (see --ps-fill-height below) so
1144       the two panels' bottoms align. */
1145    max-height: var(--ps-max-height, 92vh);
1146    /* No border — clean white all around, matching the search field. A soft
1147       shadow keeps it reading as a floating layer. */
1148    border: none;
1149    border-radius: 8px;
1150    background: #fff;
1151    box-shadow: 0 12px 32px rgba(0,0,0,.12);
1152    z-index: 100;
1153  }
1154  predictive-search[open] .tk-search .predictive-search,
1155  predictive-search[loading] .tk-search .predictive-search {
1156    display: block;
1157  }
1158  /* "Clear" button — subtle outline pill, matching the dropdown's "View all"
1159     button (same height/padding/border/colours) for a consistent look. Sits
1160     just left of the magnifier. */
1161  .tk-search__clear {
1162    display:inline-flex; align-items:center;
1163    height:24px; padding:0 12px;
1164    margin-right:6px;
1165    border:1px solid #E1E3E9; border-radius:999px;
1166    background:#fff; box-shadow:none; outline:none; cursor:pointer;
1167    color:#2a3270; font-size:12px; font-weight:600; line-height:1;
1168    white-space:nowrap; flex-shrink:0;
1169    transition:background-color 120ms ease, border-color 120ms ease, color 120ms ease;
1170  }
1171  .tk-search__clear:hover { background:#F4F8FF; border-color:#2a3270; color:#2a3270; }
1172  .tk-search__clear:focus-visible { outline:2px solid #2a3270; outline-offset:2px; }
1173  .tk-search__clear.hidden { display:none; }
1174
1175  /* Tabs row inside the bluebar, below the search */
1176  .tk-bluebar .tk-tabs {
1177    grid-column: 2;
1178    grid-row: 2;
1179    display:flex;
1180    gap:6px;
1181    overflow-x:auto;
1182    scrollbar-width:none;
1183  }
1184  .tk-bluebar .tk-tabs::-webkit-scrollbar { display:none; }
1185  .tk-bluebar .tk-tab {
1186    flex: 1 0 auto;
1187    background:#fff;
1188    border:1px solid #fff;
1189    padding:6px 14px;
1190    border-radius:4px;
1191    font-size:12px; font-weight:600;
1192    color:#1B1B1B; text-decoration:none;
1193    text-align:center;
1194    white-space:nowrap;
1195  }
1196  .tk-bluebar .tk-tab:hover { color:#2a3270; }
1197  .tk-bluebar .tk-tab.is-active { background:#de4949; color:#fff; border-color:#de4949; }
1198
1199  /* mobile */
1200  @media (max-width: 989px) {
1201    .tk-wrap { padding: 0 14px; }
1202
1203    /* Light-gray header on mobile (no blue search bar), one smooth section.
1204       Set the header bg gray too so no white line shows between the bars. */
1205    .tk-header { background:#F1F2F4; }
1206    /* Match the iOS status-bar / safe-area strip above the header to the
1207       header colour (the page root otherwise shows white there). */
1208    html, body.gradient { background:#F1F2F4; }
1209    .tk-topbar-outer { background:#F1F2F4; border:none; box-shadow:none; }
1210    .tk-bluebar-outer { background:#F1F2F4; border:none; box-shadow:none; }
1211    .tk-topbar { border:none; }
1212    .tk-search__field { border:1px solid #E2E5EA; }
1213
1214    /* Top bar: burger pinned left, logo absolutely centered, cart on the right */
1215    .tk-topbar { position:relative; gap:0; padding:20px 0; justify-content:flex-end; min-height:46px; }
1216
1217    /* Show the burger drawer on mobile, pinned to the left of the top bar. */
1218    .tk-drawer { display:block; margin-right:auto; }
1219    /* Brand navy-blue burger, thickened: the icon bars are filled paths (no
1220       stroke), so a same-colour stroke fattens each bar outward to read bolder. */
1221    .tk-drawer__toggle { color:#2a3270; }
1222    .tk-drawer__icon--open svg path {
1223      stroke: currentColor;
1224      stroke-width: 1;
1225    }
1226    .tk-util { display:none; }
1227    .tk-topbar__logo { position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); margin:0; }
1228    .tk-topbar__logo img { height:56px; }
1229    .tk-topbar__right { margin-left:auto; gap:0; }
1230    .tk-topbar__right .tk-auth { display:none; }
1231    /* Wishlist + cart on mobile: mirror the desktop design (red circle heart
1232       + navy cart pill). Pair them at a matching height so neither stretches. */
1233    .tk-cartgroup { gap:8px; align-items:center; }
1234    /* Red circular heart — square box so the circle stays perfectly round. */
1235    .tk-icon-btn { align-self:auto; aspect-ratio:1; width:40px; height:40px; min-width:0; }
1236    .tk-icon-btn svg { width:20px; height:20px; }
1237    .tk-icon-btn__count {
1238      top:-4px; right:-4px;
1239      min-width:16px; height:16px; border-radius:8px;
1240      font-size:10px; line-height:16px; padding:0 3px;
1241    }
1242    /* Cart becomes a circular icon (mirrors the wishlist heart) — there isn't
1243       room for the pill on mobile. Navy circle + count as a top-right badge. */
1244    .tk-cart-pill {
1245      width:40px; height:40px; min-width:0; padding:0;
1246      aspect-ratio:1; border-radius:50%;
1247      background:#2a3270; color:#fff; box-shadow:none;
1248      gap:0; position:relative; justify-content:center; align-items:center;
1249    }
1250    .tk-cart-pill:hover { background:#222a5e; }
1251    .tk-cart-pill svg { width:20px; height:20px; }
1252    /* Count badge — same treatment as the wishlist count (top-right badge with
1253       a white ring), but navy to keep the cart's blue scheme. Shown only when
1254       there are items in the cart. */
1255    .tk-cart-pill span[data-cart-count] {
1256      position:absolute; top:-4px; right:-4px;
1257      background:#2a3270; color:#fff;
1258      min-width:16px; height:16px; border-radius:8px;
1259      font-size:10px; line-height:16px; text-align:center;
1260      padding:0 3px; font-weight:700;
1261      box-shadow:0 0 0 1.5px #fff;
1262    }
1263    .tk-cart-pill span[data-cart-count].is-empty { display:none; }
1264
1265    /* Blue bar: search field only (hide the department button + category tabs) */
1266    .tk-bluebar { padding:10px 0 20px; grid-template-columns:1fr; row-gap:0; }
1267    .tk-dept-wrap { display:none; }
1268    .tk-bluebar .tk-tabs { display:none; }
1269    .tk-search-wrap { grid-column:1; grid-row:1; }
1270    .tk-search__field input { padding:11px 14px; font-size:14px; }
1271    /* Mobile: blue submit button with a white icon. */
1272    .tk-search__field button[type="submit"] { padding:0 14px; height:42px; background:#2a3270; color:#fff; }
1273    .tk-search__field button[type="submit"]:hover { background:#232a5e; color:#fff; }
1274
1275    /* On mobile the header field is just a trigger — tapping it opens the
1276       full-screen search drawer (see snippets/mobile-search-drawer.liquid),
1277       so the inline dropdown must never appear here. */
1278    .tk-search .predictive-search { display:none !important; }
1279  }
1280</style><style>
1281    @media (max-width: 989px) { .tk-header { display: none; } }
1282  </style><header class="tk-header"><div class="tk-topbar-outer">
1283    <div class="tk-wrap">
1284      <div class="tk-topbar"><header-drawer class="tk-drawer" data-breakpoint="tablet">
1285  <details id="Details-menu-drawer-container" class="menu-drawer-container">
1286    <summary
1287      class="tk-drawer__toggle header__icon header__icon--menu header__icon--summary link focus-inset"
1288      aria-label="Menu"
1289    >
1290      <span class="svg-wrapper tk-drawer__icon--open"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-hamburger" viewBox="0 0 18 16"><path fill="currentColor" d="M1 .5a.5.5 0 1 0 0 1h15.71a.5.5 0 0 0 0-1zM.5 8a.5.5 0 0 1 .5-.5h15.71a.5.5 0 0 1 0 1H1A.5.5 0 0 1 .5 8m0 7a.5.5 0 0 1 .5-.5h15.71a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5"/></svg>
1291</span>
1292    </summary>
1293
1294    <div id="menu-drawer" class="menu-drawer motion-reduce">
1295      <div class="menu-drawer__inner-container">
1296        <div class="tkmenu"><div class="tkmenu__header">
1297            <button
1298              type="button"
1299              class="menu-drawer__custom-close tkmenu__close"
1300              aria-label="Close menu"
1301              onclick="document.getElementById('Details-menu-drawer-container').open=false"
1302            >
1303              <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-close" viewBox="0 0 18 17"><path fill="currentColor" d="M.865 15.978a.5.5 0 0 0 .707.707l7.433-7.431 7.579 7.282a.501.501 0 0 0 .846-.37.5.5 0 0 0-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 1 0-.707-.708L8.991 7.853 1.413.573a.5.5 0 1 0-.693.72l7.563 7.268z"/></svg>
1304</span>
1305            </button>
1306          </div>
1307          <div class="tkmenu__sep"></div><nav class="menu-drawer__navigation--mobile" aria-label="Site menu">
1308            <ul class="menu-drawer__mobile-list" role="list"><li style="--i: 0;">
1309                <a
1310                  href="/"
1311                  class="menu-drawer__mobile-link"
1312                  
1313                >
1314                  <span class="menu-drawer__mobile-text">Home</span>
1315                </a>
1316              </li><li style="--i: 1;">
1317                <details class="tkmenu__acc">
1318                  <summary class="menu-drawer__mobile-link tkmenu__acc-toggle">
1319                    <span class="menu-drawer__mobile-text">Shop by Department</span>
1320                    <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1321                  </summary>
1322                  <div class="tkmenu__acc-panel"><details class="tkmenu__acc tkmenu__acc--sub">
1323                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1324                          <span>Appliances</span>
1325                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1326                        </summary>
1327                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/fridges-freezers">Fridges & Freezers</a><a class="tkmenu__leaf" href="/collections/all/washing-machines">Washing Machines</a><a class="tkmenu__leaf" href="/collections/all/air-fryers">Air Fryers</a><a class="tkmenu__leaf" href="/collections/all/kettles">Kettles</a><a class="tkmenu__leaf" href="/collections/appliances">Shop All Appliances</a>
1328                        </div>
1329                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1330                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1331                          <span>Audio & Video</span>
1332                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1333                        </summary>
1334                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/bluetooth-speakers">Bluetooth Speakers</a><a class="tkmenu__leaf" href="/collections/all/soundbars">Soundbars</a><a class="tkmenu__leaf" href="/collections/all/bluetooth-headphones">Bluetooth Headphones</a><a class="tkmenu__leaf" href="/collections/all/wireless-earphones">Wireless Earphones</a><a class="tkmenu__leaf" href="/collections/audio-video">Shop All Audio & Video</a>
1335                        </div>
1336                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1337                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1338                          <span>Baby Care</span>
1339                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1340                        </summary>
1341                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/baby-bottles-nipples">Baby Bottles & Nipples</a><a class="tkmenu__leaf" href="/collections/all/breast-pumps-care">Breast Pumps & Care</a><a class="tkmenu__leaf" href="/collections/all/pacifiers">Pacifiers</a><a class="tkmenu__leaf" href="/collections/baby-care">Shop All Baby Care</a>
1342                        </div>
1343                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1344                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1345                          <span>Batteries & Chargers</span>
1346                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1347                        </summary>
1348                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/power-banks">Power Banks</a><a class="tkmenu__leaf" href="/collections/all/ups">UPS</a><a class="tkmenu__leaf" href="/collections/all/chargers">Chargers</a><a class="tkmenu__leaf" href="/collections/all/batteries">Batteries</a><a class="tkmenu__leaf" href="/collections/batteries-chargers">Shop All Batteries & Chargers</a>
1349                        </div>
1350                      </details>
1350<details class="tkmenu__acc tkmenu__acc--sub">
1351                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1352                          <span>Beauty & Health Care</span>
1353                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1354                        </summary>
1355                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/shavers">Shavers</a><a class="tkmenu__leaf" href="/collections/all/hair-dryers">Hair Dryers</a><a class="tkmenu__leaf" href="/collections/all/hair-styling-tools-accessories">Hair styling tools & accessories</a><a class="tkmenu__leaf" href="/collections/all/toothpaste-toothbrushes">Toothpaste & Toothbrushes</a><a class="tkmenu__leaf" href="/collections/beauty-health-care">Shop All Beauty & Health Care</a>
1356                        </div>
1357                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1358                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1359                          <span>Camping & Outdoors</span>
1360                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1361                        </summary>
1362                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/backpacks">Backpacks</a><a class="tkmenu__leaf" href="/collections/all/binoculars-scopes">Binoculars & Scopes</a><a class="tkmenu__leaf" href="/collections/all/fitness-tracker-smart-watches">Fitness Tracker & Smart Watches</a><a class="tkmenu__leaf" href="/collections/all/trolley-bags">Trolley Bags</a><a class="tkmenu__leaf" href="/collections/camping-outdoors">Shop All Camping & Outdoors</a>
1363                        </div>
1364                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1365                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1366                          <span>Computers</span>
1367                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1368                        </summary>
1369                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/all-in-one-computers">All-in-One Computers</a><a class="tkmenu__leaf" href="/collections/all/graphic-cards">Graphic Cards</a><a class="tkmenu__leaf" href="/collections/all/drives-storage">Drives & Storage</a><a class="tkmenu__leaf" href="/collections/all/computer-accessories">Computer Accessories</a><a class="tkmenu__leaf" href="/collections/computers">Shop All Computers</a>
1370                        </div>
1371                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1372                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1373                          <span>DIY Tools & Machinery</span>
1374                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1375                        </summary>
1376                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/hand-tools">Hand Tools</a><a class="tkmenu__leaf" href="/collections/all/network-tools">Network Tools</a><a class="tkmenu__leaf" href="/collections/all/crimping-tools">Crimping Tools</a><a class="tkmenu__leaf" href="/collections/all/multimeter">Multimeter</a><a class="tkmenu__leaf" href="/collections/diy-tools-machinery">Shop All DIY Tools & Machinery</a>
1377                        </div>
1378                      </details>
1378<details class="tkmenu__acc tkmenu__acc--sub">
1379                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1380                          <span>Gaming</span>
1381                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1382                        </summary>
1383                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/consoles">Consoles</a><a class="tkmenu__leaf" href="/collections/all/playstation">Playstation</a><a class="tkmenu__leaf" href="/collections/all/gaming-monitors">Gaming Monitors</a><a class="tkmenu__leaf" href="/collections/all/gaming-headphones">Gaming Headphones</a><a class="tkmenu__leaf" href="/collections/gaming">Shop All Gaming</a>
1384                        </div>
1385                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1386                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1387                          <span>Garden</span>
1388                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1389                        </summary>
1390                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/pool-and-patio">Pool and Patio</a><a class="tkmenu__leaf" href="/collections/all/pressure-washers">Pressure Washers</a><a class="tkmenu__leaf" href="/collections/garden">Shop All Garden</a>
1391                        </div>
1392                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1393                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1394                          <span>Home Safety & Security</span>
1395                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1396                        </summary>
1397                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/gate-garage-door-motors">Gate & Garage Door Motors</a><a class="tkmenu__leaf" href="/collections/all/smoke-detectors">Smoke Detectors</a><a class="tkmenu__leaf" href="/collections/all/fire-alarm-panels">Fire Alarm Panels</a><a class="tkmenu__leaf" href="/collections/all/surge-protectors">Surge Protectors</a><a class="tkmenu__leaf" href="/collections/home-safety-security">Shop All Home Safety & Security</a>
1398                        </div>
1399                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1400                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1401                          <span>Laptops & Accessories</span>
1402                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1403                        </summary>
1404                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/laptops">Laptops</a><a class="tkmenu__leaf" href="/collections/all/laptop-bags">Laptop Bags</a><a class="tkmenu__leaf" href="/collections/all/laptop-chargers">Laptop Chargers</a><a class="tkmenu__leaf" href="/collections/all/laptop-ram">Laptop RAM</a><a class="tkmenu__leaf" href="/collections/laptops-accessories">Shop All Laptops & Accessories</a>
1405                        </div>
1406                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1407                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1408                          <span>Mobile & Tablet Accessories</span>
1409                          <svg class="tkmenu__chev tkmenu__chev--acc" viewB
1409ox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1410                        </summary>
1411                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/tablets">Tablets</a><a class="tkmenu__leaf" href="/collections/all/power-banks">Power Banks</a><a class="tkmenu__leaf" href="/collections/all/screen-protectors">Screen Protectors</a><a class="tkmenu__leaf" href="/collections/all/usb-cables">USB Cables</a><a class="tkmenu__leaf" href="/collections/mobile-tablet-accessories">Shop All Mobile & Tablet Accessories</a>
1412                        </div>
1413                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1414                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1415                          <span>Networking</span>
1416                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1417                        </summary>
1418                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/routers">Routers</a><a class="tkmenu__leaf" href="/collections/all/access-point">Access Point</a><a class="tkmenu__leaf" href="/collections/all/hub-switches">Hub & Switches</a><a class="tkmenu__leaf" href="/collections/all/network-cables">Network Cables</a><a class="tkmenu__leaf" href="/collections/networking">Shop All Networking</a>
1419                        </div>
1420                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1421                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1422                          <span>Office & Stationery</span>
1423                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1424                        </summary>
1425                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/till-rolls">Till Rolls</a><a class="tkmenu__leaf" href="/collections/all/calculators">Calculators</a><a class="tkmenu__leaf" href="/collections/all/cash-drawers">Cash Drawers</a><a class="tkmenu__leaf" href="/collections/all/paper">Paper</a><a class="tkmenu__leaf" href="/collections/office-stationery">Shop All Office & Stationery</a>
1426                        </div>
1427                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1428                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1429                          <span>Printers</span>
1430                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1431                        </summary>
1432                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/ink-tank-printers">Ink Tank Printers</a><a class="tkmenu__leaf" href="/collections/all/laser-printers">Laser Printers</a><a class="tkmenu__leaf" href="/collections/all/toners">Toners</a><a class="tkmenu__leaf" href="/collections/all/ink-cartridges">Ink Cartridges</a><a class="tkmenu__leaf" href="/collections/printers">Shop All Printers</a>
1433                        </div>
1434                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1435                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1436                          <span>Security & Surveillance</span>
1437                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1438                        </summary>
1439                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/ip-cameras">IP Cameras</a><a class="tkmenu__leaf" href="/collections/all/wi-fi-cameras">Wi-Fi Cameras</a><a class="tkmenu__leaf" href="/collections/all/nvrs">NVRs</a><a class="tkmenu__leaf" href="/collections/all/alarm-systems">Alarm Systems</a><a class="tkmenu__leaf" href="/collections/security-surveillance">Shop All Security & Surveillance</a>
1440                        </div>
1441                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1442                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1443                          <span>Solar Solutions</span>
1444                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1445                        </summary>
1446                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/inverters">Inverters</a><a class="tkmenu__leaf" href="/collections/all/solar-panels">Solar Panels</a><a class="tkmenu__leaf" href="/collections/all/lithium-ion-batteries">Lithium Ion Batteries</a><a class="tkmenu__leaf" href="/collections/all/solar-kits">Solar Kits</a><a class="tkmenu__leaf" href="/collections/solar-solutions">Shop All Solar Solutions</a>
1447                        </div>
1448                      </details><details class="tkmenu__acc tkmenu__acc--sub">
1449                        <summary class="tkmenu__sub-link tkmenu__acc-toggle">
1450                          <span>TVs & Screens</span>
1451                          <svg class="tkmenu__chev tkmenu__chev--acc" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
1452                        </summary>
1453                        <div class="tkmenu__acc-panel tkmenu__acc-panel--sub"><a class="tkmenu__leaf" href="/collections/all/smart-tvs">Smart TVs</a><a class="tkmenu__leaf" href="/collections/all/led-tvs">LED TVs</a><a class="tkmenu__leaf" href="/collections/all/projectors">Projectors</a><a class="tkmenu__leaf" href="/collections/all/decoder">Decoder</a><a class="tkmenu__leaf" href="/collections/tvs-screens">Shop All TVs & Screens</a>
1454                        </div>
1455                      </details></div>
1456                </details>
1457              </li><li style="--i: 2;">
1458                <a href="/collections/all" class="menu-drawer__mobile-link">
1459                  <span class="menu-drawer__mobile-text">All Products</span>
1460                </a>
1461              </li>
1462              <li style="--i: 3;">
1463                <a href="/collections/specials" class="menu-drawer__mobile-link">
1464                  <span class="menu-drawer__mobile-text">Hot Specials</span>
1465                </a>
1466              </li>
1467              <li style="--i: 4;">
1468                <a href="/pages/touch365" class="menu-drawer__mobile-link">
1469                  <span class="menu-drawer__mobile-text">Touch365 POS</span>
1470                </a>
1471              </li>
1472              <li style="--i: 5;">
1473                <a href="/pages/my-account#orders" class="menu-drawer__mobile-link">
1474                  <span class="menu-drawer__mobile-text">My Orders</span>
1475                </a>
1476              </li>
1477              <li style="--i: 6;">
1478                <a href="/pages/wishlist" class="menu-drawer__mobile-link">
1479                  <span class="menu-drawer__mobile-text">My Wishlist</span>
1480                </a>
1481              </li>
1482              <li style="--i: 7;">
1483                <a href="/a/track" class="menu-drawer__mobile-link">
1484                  <span class="menu-drawer__mobile-text">Track Order</span>
1485                </a>
1486              </li><li style="--i: 8;">
1487                <a href="/pages/my-account" class="menu-drawer__mobile-link tkmenu__mobile-link--support">
1488                  <span class="tkmenu__row-leading">
1489                    <span class="tkmenu__row-icon" aria-hidden="true">
1490                      <svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 12a5 5 0 1 0 0-10 5 5 0 0 0 0 10zm0 2c-4.4 0-8 2.5-8 5.6V22h16v-2.4c0-3.1-3.6-5.6-8-5.6z"/></svg>
1491                    </span>
1492                    <span class="menu-drawer__mobile-text">My Account</span>
1493                  </span>
1494                </a>
1495              </li>
1496              <li style="--i: 9;">
1497                <a href="/pages/contact#store-locator" class="menu-drawer__mobile-link tkmenu__mobile-link--support">
1498                  <span class="tkmenu__row-leading">
1499                    <span class="tkmenu__row-icon" aria-hidden="true">
1500                      <svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2a8 8 0 0 0-8 8c0 5.6 8 12 8 12s8-6.4 8-12a8 8 0 0 0-8-8zm0 10.6a2.6 2.6 0 1 1 0-5.2 2.6 2.6 0 0 1 0 5.2z"/></svg>
1501                    </span>
1502                    <span class="menu-drawer__mobile-text">Store Locator</span>
1503                  </span>
1504                </a>
1505              </li>
1506              <li style="--i: 10;">
1507                <a href="/pages/about" class="menu-drawer__mobile-link tkmenu__mobile-link--support">
1508                  <span class="tkmenu__row-leading">
1509                    <span class="tkmenu__row-icon" aria-hidden="true">
1510                      <svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm1.1 15.4h-2.2V10h2.2zm0-9h-2.2V6.2h2.2z"/></svg>
1511                    </span>
1512                    <span class="menu-drawer__mobile-text">Company Profile</span>
1513                  </span>
1514                </a>
1515              </li>
1516              <li style="--i: 11;">
1517                <a href="/pages/contact" class="menu-drawer__mobile-link tkmenu__mobile-link--support">
1518                  <span class="tkmenu__row-leading">
1519                    <span class="tkmenu__row-icon" aria-hidden="true">
1520                      <svg viewBox="0 0 24 24" fill="currentColor"><path d="M2.5 6.2A2 2 0 0 1 4.5 5h15a2 2 0 0 1 2 1.2L12 12.8z"/><path d="M2.5 8.6 12 15.2l9.5-6.6V17a2 2 0 0 1-2 2h-15a2 2 0 0 1-2-2z"/></svg>
1521                    </span>
1522                    <span class="menu-drawer__mobile-text">Customer Support</span>
1523                  </span>
1524                </a>
1525              </li>
1526            </ul>
1527          </nav>
1528
1529        </div>
1530      </div>
1531    </div>
1532  </details>
1533</header-drawer>
1534
1535<script>
1536  (function () {
1537    var details = document.getElementById('Details-menu-drawer-container');
1538    if (!details) return;
1539    var mq = window.matchMedia('(max-width: 989px)');
1540    var scrollY = 0;
1541
1542    // Mobile only: pin the body so the page behind the full-screen menu can't
1543    // touch-scroll (iOS Safari ignores overflow:hidden). top:-scrollY keeps the
1544    // page visually still; the scroll position is restored on close. The native
1545    // <details> toggle event fires for both the summary and the close button.
1546    details.addEventListener('toggle', function () {
1547      if (details.open) {
1548        if (!mq.matches) return;
1549        scrollY = window.scrollY || window.pageYOffset || 0;
1550        document.body.style.top = -scrollY + 'px';
1551        document.body.classList.add('menu-drawer-lock');
1552      } else if (document.body.classList.contains('menu-drawer-lock')) {
1553        document.body.classList.remove('menu-drawer-lock');
1554        document.body.style.top = '';
1555        window.scrollTo(0, scrollY);
1556      }
1557    });
1558
1559    // Accordions: only one open per level — opening one closes its open
1560    // sibling, keeping the tall menu tidy.
1561    details.addEventListener('toggle', function (e) {
1562      var t = e.target;
1563      if (!t.classList || !t.classList.contains('tkmenu__acc') || !t.open) return;
1564      var parent = t.parentElement.closest('.tkmenu__acc-panel, .menu-drawer__mobile-list') || details;
1565      parent.querySelectorAll(':scope details.tkmenu__acc[open]').forEach(function (d) {
1566        if (d !== t && d.parentElement.closest('.tkmenu__acc-panel, .menu-drawer__mobile-list') === parent) d.open = false;
1567      });
1568    }, true);
1569  })();
1570</script>
1570
1571<a href="/" class="tk-topbar__logo" aria-label="Alcell">
1572          <img
1573            src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/Alcell_logo.svg?v=1778845706"
1574            alt="Alcell"
1575          >
1576        </a>
1577
1578        <nav class="tk-util" aria-label="Utility">
1579          <a href="/pages/contact">Help Centre</a>
1580          <span class="tk-util__sep" aria-hidden="true"></span>
1581          <a href="/pages/about">Company Profile</a>
1582        </nav>
1583
1584        <div class="tk-topbar__right">
1585          <nav class="tk-auth" aria-label="Account"><a href="/pages/my-account#orders">Orders</a>
1586
1587<span
1588  class="tk-util__sep"
1589  data-acct-logout-sep
1590  aria-hidden="true"
1591  
1592    hidden
1593  
1594></span>
1595<a
1596  href="/account/logout"
1597  data-acct-logout
1598  data-oidc-logout="https://shopify.com/authentication/76430475311/logout"
1599  
1600    hidden
1601  
1602>Log out</a>
1603
1604<script>
1605  (function () {
1606    if (window.__acctLogoutBound) return;
1607    window.__acctLogoutBound = true;
1608
1609    var readToken = function (key) {
1610      try {
1611        return localStorage.getItem('acctPortal:' + key);
1612      } catch (e) {
1613        return null;
1614      }
1615    };
1616
1617    document.addEventListener('DOMContentLoaded', function () {
1618      if (!readToken('accessToken')) return;
1619      document.querySelectorAll('[data-acct-logout], [data-acct-logout-sep]').forEach(function (el) {
1620        el.hidden = false;
1621      });
1622    });
1623
1624    document.addEventListener('click', function (ev) {
1625      var a = ev.target.closest && ev.target.closest('[data-acct-logout]');
1626      if (!a) return;
1627      var idToken = readToken('idToken');
1628      try {
1629        Object.keys(localStorage)
1630          .filter(function (k) {
1631            return k.indexOf('acctPortal:') === 0;
1632          })
1633          .forEach(function (k) {
1634            localStorage.removeItem(k);
1635          });
1636      } catch (e) {
1637        /* storage unavailable — fall through to classic logout */
1638      }
1639      if (idToken) {
1640        ev.preventDefault();
1641        location.assign(a.dataset.oidcLogout + '?id_token_hint=' + encodeURIComponent(idToken));
1642      }
1643    });
1644  })();
1645</script>
1645
1646</nav>
1647
1648          <div class="tk-cartgroup">
1649          <a href="/pages/wishlist" class="tk-icon-btn" aria-label="Wishlist">
1650            <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></svg>
1651            <span class="tk-icon-btn__count" data-wishlist-count hidden></span>
1652          </a>
1653
1654          <mini-cart class="tk-minicart" data-mini-cart>
1655            <a href="/cart" class="tk-cart-pill" aria-label="Cart" aria-haspopup="dialog" aria-expanded="false">
1656              <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
1657                <path d="M7.5 18a1.75 1.75 0 100 3.5 1.75 1.75 0 000-3.5zm9 0a1.75 1.75 0 100 3.5 1.75 1.75 0 000-3.5zM2 3a1 1 0 000 2h1.6l2.5 10.6A2 2 0 008 17h9.3a2 2 0 002-1.55l1.9-8.2A1 1 0 0020.2 6H6.3l-.5-2.2A1 1 0 004.8 3H2z"/>
1658              </svg>
1659              <span data-cart-count class="is-empty">0</span>
1660            </a><div class="mini-cart__panel" data-mini-cart-panel role="dialog" aria-label="Cart preview">
1661  <span class="mini-cart__arrow" aria-hidden="true"></span><div class="mini-cart__empty">
1662      <p class="mini-cart__empty-title">Your cart is empty.</p>
1663    </div><div class="mini-cart__overlay" data-mini-cart-overlay aria-hidden="true">
1664    <span class="mini-cart__spinner"></span>
1665  </div>
1666</div>
1667</mini-cart>
1668          </div>
1669        </div>
1670      </div>
1671    </div>
1672  </div><div class="tk-bluebar-outer">
1673    <div class="tk-wrap">
1674      <div class="tk-bluebar tk-bluebar--single"><div class="tk-dept-wrap">
1675          <button type="button" class="tk-dept-btn tk-dept-btn--rounded" aria-label="Shop by Department" data-tk-dept-toggle aria-expanded="false">
1676            <span>Shop by Department</span>
1677            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>
1678          </button><div class="tk-dept-panel" data-tk-dept-panel hidden>
1679              <aside class="tk-sidebar" aria-label="Departments"><ul class="tk-sidebar__list"><li class="tk-sidebar__item">
1680      <a href="/collections/appliances">
1681        <span>Appliances</span>
1682        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1683      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1684          <div class="tk-megamenu__col">
1685            <h3 class="tk-megamenu__title">Appliances</h3>
1686            <ul class="tk-megamenu__list"><li><a href="/collections/all/air-fryers">Air Fryers</a></li><li><a href="/collections/all/aircons-air-coolers-and-accessories">Aircons & Air Coolers and Accessories</a></li><li><a href="/collections/all/blenders">Blenders</a></li><li><a href="/collections/all/ceiling-fans">Ceiling Fans</a></li><li><a href="/collections/all/choppers-slicers">Choppers & Slicers</a></li><li><a href="/collections/all/coffee-machines">Coffee Machines</a></li><li><a href="/collections/all/dishwashers">Dishwashers</a></li><li><a href="/collections/all/food-processors-mixers">Food Processors & Mixers</a></li><li><a href="/collections/all/fridges-freezers">Fridges & Freezers</a></li><li><a href="/collections/all/heaters">Heaters</a></li><li><a href="/collections/all/hobs">Hobs</a></li><li><a href="/collections/all/hoods">Hoods</a></li><li><a href="/collections/all/irons-steam-presses">Irons & Steam Presses</a></li><li><a href="/collections/all/juice-blenders">Juice Blenders</a></li><li><a href="/collections/all/kettles">Kettles</a></li></ul>
1687          </div><a class="tk-megamenu__image" href="/collections/appliances" aria-label="Shop Appliances">
1688              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/APPLIANCES_Image.png?v=1780655770&width=600" alt="Appliances" width="600" height="600" loading="lazy" style="object-position: center 65%;">
1689            </a></div></li><li class="tk-sidebar__item">
1690      <a href="/collections/audio-video">
1691        <span>Audio & Video</span>
1692        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1693      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1694          <div class="tk-megamenu__col">
1695            <h3 class="tk-megamenu__title">Audio & Video</h3>
1696            <ul class="tk-megamenu__list"><li><a href="/collections/all/bluetooth-headphones">Bluetooth Headphones</a></li><li><a href="/collections/all/bluetooth-speakers">Bluetooth Speakers</a></li><li><a href="/collections/all/car-radio-speakers">Car Radio & Speakers</a></li><li><a href="/collections/all/cd-dvd-players">CD-DVD Players</a></li><li><a href="/collections/all/p-a-system">P.A System</a></li><li><a href="/collections/all/portable-radio">Portable Radio</a></li><li><a href="/collections/all/soundbars">Soundbars</a></li><li><a href="/collections/all/stage-equipments">Stage Equipments</a></li><li><a href="/collections/all/voice-recorder">Voice Recorder</a></li><li><a href="/collections/all/wired-earphones">Wired Earphones</a></li><li><a href="/collections/all/wired-headphones">Wired Headphones</a></li><li><a href="/collections/all/wired-speakers">Wired Speakers</a></li><li><a href="/collections/all/wireless-earphones">Wireless Earphones</a></li></ul>
1697          </div><a class="tk-megamenu__image" href="/collections/audio-video" aria-label="Shop Audio & Video">
1698              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_01_54_03_PM.png?v=1780660455&width=600" alt="Audio & Video" width="600" height="600" loading="lazy" style="object-position: center 50%;">
1699            </a></div></li><li class="tk-sidebar__item">
1700      <a href="/collections/baby-care">
1701        <span>Baby Care</span>
1702        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1703      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1704          <div class="tk-megamenu__col">
1705            <h3 class="tk-megamenu__title">Baby Care</h3>
1706            <ul class="tk-megamenu__list"><li><a href="/collections/all/baby-bottles-nipples">Baby Bottles & Nipples</a></li><li><a href="/collections/all/breast-pumps-care">Breast Pumps & Care</a></li><li><a href="/collections/all/pacifiers">Pacifiers</a></li></ul>
1707          </div><a class="tk-megamenu__image" href="/collections/baby-care" aria-label="Shop Baby Care">
1708              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_6_2026_08_04_30_PM.png?v=1780769089&width=600" alt="Baby Care" width="600" height="600" loading="lazy" style="object-position: center 60%;">
1709            </a></div></li><li class="tk-sidebar__item">
1710      <a href="/collections/batteries-chargers">
1711        <span>Batteries & Chargers</span>
1712        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1713      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1714          <div class="tk-megamenu__col">
1715            <h3 class="tk-megamenu__title">Batteries & Chargers</h3>
1716            <ul class="tk-megamenu__list"><li><a href="/collections/all/batteries">Batteries</a></li><li><a href="/collections/all/chargers">Chargers</a></li><li><a href="/collections/all/deep-cycle-batteries">Deep Cycle Batteries</a></li><li><a href="/collections/all/laptop-chargers">Laptop Chargers</a></li><li><a href="/collections/all/lithium-battrey">Lithium Battrey</a></li><li><a href="/collections/all/lithium-ion-batteries">Lithium Ion Batteries</a></li><li><a href="/collections/all/power-adapters">Power Adapters</a></li><li><a href="/collections/all/power-banks">Power Banks</a></li><li><a href="/collections/all/ups">UPS</a></li><li><a href="/collections/all/ups-power-banks">UPS & Power Banks</a></li></ul>
1717          </div><a class="tk-megamenu__image" href="/collections/batteries-chargers" aria-label="Shop Batteries & Chargers">
1718              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_01_59_01_PM.png?v=1780660760&width=600" alt="Batteries & Chargers" width="600" height="600" loading="lazy" style="object-position: center 50%;">
1719            </a></div></li><li class="tk-sidebar__item">
1720      <a href="/collections/beauty-health-care">
1721        <span>Beauty & Health Care</span>
1722        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1723      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1724          <div class="tk-megamenu__col">
1725            <h3 class="tk-megamenu__title">Beauty & Health Care</h3>
1726            <ul class="tk-megamenu__list"><li><a href="/collections/all/hair-dryers">Hair Dryers</a></li><li><a href="/collections/all/hair-styling-tools-accessories">Hair styling tools & accessories</a></li><li><a href="/collections/all/infrared-thermometer">Infrared Thermometer</a></li><li><a href="/collections/all/medicine">Medicine</a></li><li><a href="/collections/all/shavers">Shavers</a></li><li><a href="/collections/all/shaving-equipment-devices">Shaving Equipment & Devices</a></li><li><a href="/collections/all/toothpaste-toothbrushes">Toothpaste & Toothbrushes</a></li></ul>
1727          </div><a class="tk-megamenu__image" href="/collections/beauty-health-care" aria-label="Shop Beauty & Health Care">
1728              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_02_15_47_PM.png?v=1780661760&width=600" alt="Beauty & Health Care" width="600" height="600" loading="lazy" style="object-position: center 65%;">
1729            </a></div></li><li class="tk-sidebar__item">
1730      <a href="/collections/camping-outdoors">
1731        <span>Camping & Outdoors</span>
1732        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1733      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1734          <div class="tk-megamenu__col">
1735            <h3 class="tk-megamenu__title">Camping & Outdoors</h3>
1736            <ul class="tk-megamenu__list"><li><a href="/collections/all/backpacks">Backpacks</a></li><li><a href="/collections/all/binoculars-scopes">Binoculars & Scopes</a></li><li><a href="/collections/all/fitness-tracker-smart-watches">Fitness Tracker & Smart Watches</a></li><li><a href="/collections/all/trolley-bags">Trolley Bags</a></li></ul>
1737          </div><a class="tk-megamenu__image" href="/collections/camping-outdoors" aria-label="Shop Camping & Outdoors">
1738              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_02_24_15_PM.png?v=1780662271&width=600" alt="Camping & Outdoors" width="600" height="600" loading="lazy" style="object-position: center 50%;">
1739            </a></div></li><li class="tk-sidebar__item">
1740      <a href="/collections/computers">
1741        <span>Computers</span>
1742        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1743      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1744          <div class="tk-megamenu__col">
1745            <h3 class="tk-megamenu__title">Computers</h3>
1746            <ul class="tk-megamenu__list"><li><a href="/collections/all/all-in-one-computers">All-in-One Computers</a></li><li><a href="/collections/all/computer-accessories">Computer Accessories</a></li><li><a href="/collections/all/computer-case">Computer Case</a></li><li><a href="/collections/all/desktop-ram">Desktop RAM</a></li><li><a href="/collections/all/drives-storage">Drives & Storage</a></li><li><a href="/collections/all/external-hard-drives">External Hard Drives</a></li><li><a href="/collections/all/external-hdd-cases">External HDD Cases</a></li><li><a href="/collections/all/flash-drives">Flash Drives</a></li><li><a href="/collections/all/graphic-cards">Graphic Cards</a></li><li><a href="/collections/all/internal-hard-drives">Internal Hard Drives</a></li><li><a href="/collections/all/memory-cards">Memory Cards</a></li><li><a href="/collections/all/motherboards">Motherboards</a></li><li><a href="/collections/all/optical-disk-drive">Optical Disk Drive</a></li><li><a href="/collections/all/power-supplies">Power Supplies</a></li><li><a href="/collections/all/ram">RAM</a></li></ul>
1747          </div><a class="tk-megamenu__image" href="/collections/computers" aria-label="Shop Computers">
1748              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_02_24_59_PM.png?v=1780662311&width=600" alt="Computers" width="600" height="600" loading="lazy" style="object-position: center 70%;">
1749            </a></div></li><li class="tk-sidebar__item">
1750      <a href="/collections/diy-tools-machinery">
1751        <span>DIY Tools & Machinery</span>
1752        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1753      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1754          <div class="tk-megamenu__col">
1755            <h3 class="tk-megamenu__title">DIY Tools & Machinery</h3>
1756            <ul class="tk-megamenu__list"><li><a href="/collections/all/cable-tools">Cable Tools</a></li><li><a href="/collections/all/crimping-tools">Crimping Tools</a></li><li><a href="/collections/all/hand-tools">Hand Tools</a></li><li><a href="/collections/all/multimeter">Multimeter</a></li><li><a href="/collections/all/network-tools">Network Tools</a></li><li><a href="/collections/all/toolkit">Toolkit</a></li></ul>
1757          </div><a class="tk-megamenu__image" href="/collections/diy-tools-machinery" aria-label="Shop DIY Tools & Machinery">
1758              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_02_43_17_PM.png?v=1780663409&width=600" alt="DIY Tools & Machinery" width="600" height="600" loading="lazy" style="object-position: center 35%;">
1759            </a></div></li><li class="tk-sidebar__item">
1760      <a href="/collections/gaming">
1761        <span>Gaming</span>
1762        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1763      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1764          <div class="tk-megamenu__col">
1765            <h3 class="tk-megamenu__title">Gaming</h3>
1766            <ul class="tk-megamenu__list"><li><a href="/collections/all/consoles">Consoles</a></li><li><a href="/collections/all/gaming-cases">Gaming Cases</a></li><li><a href="/collections/all/gaming-headphones">Gaming Headphones</a></li><li><a href="/collections/all/gaming-led-strip-lights">Gaming LED Strip Lights</a></li><li><a href="/collections/all/gaming-monitors">Gaming Monitors</a></li><li><a href="/collections/all/gaming-mouse-pads">Gaming Mouse Pads</a></li><li><a href="/collections/all/gaming-power-supply">Gaming Power Supply</a></li><li><a href="/collections/all/gaming-wired-joysticks">Gaming Wired Joysticks</a></li><li><a href="/collections/all/gaming-wired-keyboards">Gaming Wired Keyboards</a></li><li><a href="/collections/all/gaming-wired-mouse">Gaming Wired Mouse</a></li><li><a href="/collections/all/gaming-wireless-joysticks">Gaming Wireless Joysticks</a></li><li><a href="/collections/all/playstation">Playstation</a></li><li><a href="/collections/all/usb-gamepad">USB Gamepad</a></li></ul>
1767          </div><a class="tk-megamenu__image" href="/collections/gaming" aria-label="Shop Gaming">
1768              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_02_43_51_PM.png?v=1780663443&width=600" alt="Gaming" width="600" height="600" loading="lazy" style="object-position: center 65%;">
1769            </a></div></li><li class="tk-sidebar__item">
1770      <a href="/collections/garden">
1771        <span>Garden</span>
1772        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1773      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1774          <div class="tk-megamenu__col">
1775            <h3 class="tk-megamenu__title">Garden</h3>
1776            <ul class="tk-megamenu__list"><li><a href="/collections/all/pool-and-patio">Pool and Patio</a></li><li><a href="/collections/all/pressure-washers">Pressure Washers</a></li></ul>
1777          </div><a class="tk-megamenu__image" href="/collections/garden" aria-label="Shop Garden">
1778              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_6_2026_08_04_13_PM.png?v=1780769065&width=600" alt="Garden" width="600" height="600" loading="lazy" style="object-position: center 65%;">
1779            </a></div></li><li class="tk-sidebar__item">
1780      <a href="/collections/home-safety-security">
1781        <span>Home Safety & Security</span>
1782        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1783      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1784          <div class="tk-megamenu__col">
1785            <h3 class="tk-megamenu__title">Home Safety & Security</h3>
1786            <ul class="tk-megamenu__list"><li><a href="/collections/all/down-light">Down Light</a></li><li><a href="/collections/all/extension-cables">Extension Cables</a></li><li><a href="/collections/all/extension-cord">Extension Cord</a></li><li><a href="/collections/all/fire-alarm-panels">Fire Alarm Panels</a></li><li><a href="/collections/all/fire-alarm-sounders">Fire Alarm Sounders</a></li><li><a href="/collections/all/gate-garage-door-motors">Gate & Garage Door Motors</a></li><li><a href="/collections/all/gate-garage-motors-accessories">Gate-Garage Motors Accessories</a></li><li><a href="/collections/all/lamp-lights">Lamp Lights</a></li><li><a href="/collections/all/manual-call-points">Manual Call Points</a></li><li><a href="/collections/all/money-counters">Money Counters</a></li><li><a href="/collections/all/money-detectors">Money Detectors</a></li><li><a href="/collections/all/panel-light">Panel Light</a></li><li><a href="/collections/all/security-accessories">Security Accessories</a></li><li><a href="/collections/all/security-inspection-systems">Security Inspection Systems</a></li><li><a href="/collections/all/smoke-detectors">Smoke Detectors</a></li></ul>
1787          </div><a class="tk-megamenu__image" href="/collections/home-safety-security" aria-label="Shop Home Safety & Security">
1788              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_02_59_47_PM.png?v=1780664408&width=600" alt="Home Safety & Security" width="600" height="600" loading="lazy" style="object-position: center 65%;">
1789            </a></div></li><li class="tk-sidebar__item">
1790      <a href="/collections/laptops-accessories">
1791        <span>Laptops & Accessories</span>
1792        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1793      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1794          <div class="tk-megamenu__col">
1795            <h3 class="tk-megamenu__title">Laptops & Accessories</h3>
1796            <ul class="tk-megamenu__list"><li><a href="/collections/all/brand-new-screens">Brand New Screens</a></li><li><a href="/collections/all/laptops">Laptops</a></li><li><a href="/collections/all/laptop-bags">Laptop Bags</a></li><li><a href="/collections/all/laptop-chargers">Laptop Chargers</a></li><li><a href="/collections/all/laptop-cooling-pads">Laptop Cooling Pads</a></li><li><a href="/collections/all/laptop-ram">Laptop RAM</a></li><li><a href="/collections/all/laptop-skins">Laptop Skins</a></li></ul>
1797          </div><a class="tk-megamenu__image" href="/collections/laptops-accessories" aria-label="Shop Laptops & Accessories">
1798              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_02_50_24_PM.png?v=1780663835&width=600" alt="Laptops & Accessories" width="600" height="600" loading="lazy" style="object-position: center 75%;">
1799            </a></div></li><li class="tk-sidebar__item">
1800      <a href="/collections/mobile-tablet-accessories">
1801        <span>Mobile & Tablet Accessories</span>
1802        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1803      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1804          <div class="tk-megamenu__col">
1805            <h3 class="tk-megamenu__title">Mobile & Tablet Accessories</h3>
1806            <ul class="tk-megamenu__list"><li><a href="/collections/all/car-holder">Car Holder</a></li><li><a href="/collections/all/power-banks">Power Banks</a></li><li><a href="/collections/all/screen-protectors">Screen Protectors</a></li><li><a href="/collections/all/tablets">Tablets</a></li><li><a href="/collections/all/tablet-accessories">Tablet & Accessories</a></li><li><a href="/collections/all/usb-cables">USB Cables</a></li><li><a href="/collections/all/usb-data-cables">USB Data Cables</a></li></ul>
1807          </div><a class="tk-megamenu__image" href="/collections/mobile-tablet-accessories" aria-label="Shop Mobile & Tablet Acce
1807ssories">
1808              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_02_51_16_PM.png?v=1780663888&width=600" alt="Mobile & Tablet Accessories" width="600" height="600" loading="lazy" style="object-position: center 75%;">
1809            </a></div></li><li class="tk-sidebar__item">
1810      <a href="/collections/networking">
1811        <span>Networking</span>
1812        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1813      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1814          <div class="tk-megamenu__col">
1815            <h3 class="tk-megamenu__title">Networking</h3>
1816            <ul class="tk-megamenu__list"><li><a href="/collections/all/access-point">Access Point</a></li><li><a href="/collections/all/fibre-accessories">Fibre Accessories</a></li><li><a href="/collections/all/fibre-cables">Fibre Cables</a></li><li><a href="/collections/all/fibre-optic-cables">Fibre Optic Cables</a></li><li><a href="/collections/all/hub-switches">Hub & Switches</a></li><li><a href="/collections/all/modems">Modems</a></li><li><a href="/collections/all/network-adapters">Network Adapters</a></li><li><a href="/collections/all/network-cables">Network Cables</a></li><li><a href="/collections/all/network-tools">Network Tools</a></li><li><a href="/collections/all/patch-panels">Patch Panels</a></li><li><a href="/collections/all/poe-adaptors">POE Adaptors</a></li><li><a href="/collections/all/routers">Routers</a></li><li><a href="/collections/all/server-cabinets">Server Cabinets</a></li><li><a href="/collections/all/sfp-transceiver">SFP Transceiver</a></li><li><a href="/collections/all/wireless-networking">Wireless Networking</a></li></ul>
1817          </div><a class="tk-megamenu__image" href="/collections/networking" aria-label="Shop Networking">
1818              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_02_51_42_PM.png?v=1780663918&width=600" alt="Networking" width="600" height="600" loading="lazy" style="object-position: center 75%;">
1819            </a></div></li><li class="tk-sidebar__item">
1820      <a href="/collections/office-stationery">
1821        <span>Office & Stationery</span>
1822        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1823      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1824          <div class="tk-megamenu__col">
1825            <h3 class="tk-megamenu__title">Office & Stationery</h3>
1826            <ul class="tk-megamenu__list"><li><a href="/collections/all/calculators">Calculators</a></li><li><a href="/collections/all/cardboard-box">Cardboard Box</a></li><li><a href="/collections/all/cash-drawers">Cash Drawers</a></li><li><a href="/collections/all/cellotape">Cellotape</a></li><li><a href="/collections/all/lamination-machines">Lamination Machines</a></li><li><a href="/collections/all/lamination-pouches">Lamination Pouches</a></li><li><a href="/collections/all/mug-heat-press-machines">Mug Heat Press Machines</a></li><li><a href="/collections/all/paper">Paper</a></li><li><a href="/collections/all/photo-paper">Photo Paper</a></li><li><a href="/collections/all/price-tag-guns">Price Tag Guns</a></li><li><a href="/collections/all/sublimation-mugs">Sublimation Mugs</a></li><li><a href="/collections/all/sublimation-papers">Sublimation Papers</a></li><li><a href="/collections/all/tapes-labels">Tapes & Labels</a></li><li><a href="/collections/all/till-rolls">Till Rolls</a></li><li><a href="/collections/all/tissue-paper">Tissue Paper</a></li></ul>
1827          </div><a class="tk-megamenu__image" href="/collections/office-stationery" aria-label="Shop Office & Stationery">
1828              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_02_52_32_PM.png?v=1780663962&width=600" alt="Office & Stationery" width="600" height="600" loading="lazy" style="object-position: center 75%;">
1829            </a></div></li><li class="tk-sidebar__item">
1830      <a href="/collections/printers">
1831        <span>Printers</span>
1832        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1833      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1834          <div class="tk-megamenu__col">
1835            <h3 class="tk-megamenu__title">Printers</h3>
1836            <ul class="tk-megamenu__list"><li><a href="/collections/all/compatible-ink-bottles">Compatible Ink Bottles</a></li><li><a href="/collections/all/compatible-toners">Compatible Toners</a></li><li><a href="/collections/all/dot-matrix-printers">Dot Matrix Printers</a></li><li><a href="/collections/all/ink-bottles">Ink Bottles</a></li><li><a href="/collections/all/ink-cartridges">Ink Cartridges</a></li><li><a href="/collections/all/ink-tank-printers">Ink Tank Printers</a></li><li><a href="/collections/all/inkjet-printers">Inkjet Printers</a></li><li><a href="/collections/all/label-printers">Label Printers</a></li><li><a href="/collections/all/laser-printers">Laser Printers</a></li><li><a href="/collections/all/p-o-s-printers">P.O.S Printers</a></li><li><a href="/collections/all/photo-printers">Photo Printers</a></li><li><a href="/collections/all/printer-accessories">Printer Accessories</a></li><li><a href="/collections/all/printer-cables">Printer Cables</a></li><li><a href="/collections/all/ribbon-cartridges">Ribbon Cartridges</a></li><li><a href="/collections/all/toners">Toners</a></li></ul>
1837          </div><a class="tk-megamenu__image" href="/collections/printers" aria-label="Shop Printers">
1838              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_02_53_07_PM.png?v=1780663997&width=600" alt="Printers" width="600" height="600" loading="lazy" style="object-position: center 75%;">
1839            </a></div></li><li class="tk-sidebar__item">
1840      <a href="/collections/security-surveillance">
1841        <span>Security & Surveillance</span>
1842        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1843      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1844          <div class="tk-megamenu__col">
1845            <h3 class="tk-megamenu__title">Security & Surveillance</h3>
1846            <ul class="tk-megamenu__list"><li><a href="/collections/all/access-control">Access Control</a></li><li><a href="/collections/all/alarm-systems">Alarm Systems</a></li><li><a href="/collections/all/analog-cameras">Analog Cameras</a></li><li><a href="/collections/all/cabinet-and-enclosure-accessories">Cabinet and Enclosure Accessories</a></li><li><a href="/collections/all/cctv-bundle">CCTV Bundle</a></li><li><a href="/collections/all/cctv-cables">CCTV Cables</a></li><li><a href="/collections/all/cctv-diy-kits">CCTV DIY Kits</a></li><li><a href="/collections/all/dashcam">Dashcam</a></li><li><a href="/collections/all/door-closer">Door Closer</a></li><li><a href="/collections/all/door-station">Door Station</a></li><li><a href="/collections/all/dvrs">DVRs</a></li><li><a href="/collections/all/fingprint-reader">Fingprint Reader</a></li><li><a href="/collections/all/ip-cameras">IP Cameras</a></li><li><a href="/collections/all/ip-kits">IP Kits</a></li><li><a href="/collections/all/nvrs">NVRs</a></li></ul>
1847          </div><a class="tk-megamenu__image" href="/collections/security-surveillance" aria-label="Shop Security & Surveillance">
1848              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_02_54_21_PM.png?v=1780664074&width=600" alt="Security & Surveillance" width="600" height="600" loading="lazy" style="object-position: center 75%;">
1849            </a></div></li><li class="tk-sidebar__item">
1850      <a href="/collections/solar-solutions">
1851        <span>Solar Solutions</span>
1852        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1853      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1854          <div class="tk-megamenu__col">
1855            <h3 class="tk-megamenu__title">Solar Solutions</h3>
1856            <ul class="tk-megamenu__list"><li><a href="/collections/all/deep-cycle-batteries">Deep Cycle Batteries</a></li><li><a href="/collections/all/inverters">Inverters</a></li><li><a href="/collections/all/lithium-ion-batteries">Lithium Ion Batteries</a></li><li><a href="/collections/all/solar-cables-connectors">Solar Cables & Connectors</a></li><li><a href="/collections/all/solar-cameras">Solar Cameras</a></li><li><a href="/collections/all/solar-kits">Solar Kits</a></li><li><a href="/collections/all/solar-panels">Solar Panels</a></li></ul>
1857          </div><a class="tk-megamenu__image" href="/collections/solar-solutions" aria-label="Shop Solar Solutions">
1858              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_02_55_14_PM.png?v=1780664126&width=600" alt="Solar Solutions" width="600" height="600" loading="lazy" style="object-position: center 75%;">
1859            </a></div></li><li class="tk-sidebar__item">
1860      <a href="/collections/tvs-screens">
1861        <span>TVs & Screens</span>
1862        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
1863      </a><div class="tk-megamenu tk-megamenu--with-image" role="menu">
1864          <div class="tk-megamenu__col">
1865            <h3 class="tk-megamenu__title">TVs & Screens</h3>
1866            <ul class="tk-megamenu__list"><li><a href="/collections/all/android-box">Android Box</a></li><li><a href="/collections/all/decoder">Decoder</a></li><li><a href="/collections/all/diplexer">Diplexer</a></li><li><a href="/collections/all/diseqc-switches">Diseqc Switches</a></li><li><a href="/collections/all/dstv-accessories">DSTV Accessories</a></li><li><a href="/collections/all/dstv-cables">DSTV Cables</a></li><li><a href="/collections/all/dstv-remote">DSTV Remote</a></li><li><a href="/collections/all/interactive-panels">Interactive Panels</a></li><li><a href="/collections/all/led-tvs">LED TVs</a></li><li><a href="/collections/all/lnb">LNB</a></li><li><a href="/collections/all/modulators">Modulators</a></li><li><a href="/collections/all/multiswitchs">Multiswitchs</a></li><li><a href="/collections/all/projector-bundle">Projector Bundle</a></li><li><a href="/collections/all/projectors">Projectors</a></li><li><a href="/collections/all/satellite-finders">Satellite Finders</a></li></ul>
1867          </div><a class="tk-megamenu__image" href="/collections/tvs-screens" aria-label="Shop TVs & Screens">
1868              <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/ChatGPT_Image_Jun_5_2026_02_55_59_PM.png?v=1780664170&width=600" alt="TVs & Screens" width="600" height="600" loading="lazy" style="object-position: center 75%;">
1869            </a></div></li></ul>
1870<a href="/collections/specials" class="tk-sidebar__promo">
1871                  <span class="tk-sidebar__promo-title">Big <span class="tk-sidebar__promo-brand">AlCell</span> Day</span>
1872                  <span class="tk-sidebar__promo-sub">Limited-time savings</span>
1873                </a>
1874              </aside>
1875            </div></div><predictive-search class="tk-search-wrap" data-loading-text="Loading..."><form action="/search" method="get" role="search" class="tk-search">
1876            <input type="hidden" name="options[prefix]" value="last">
1877            <input type="hidden" name="type" value="product">
1878            <div class="tk-search__field">
1879              <input
1880                type="search"
1881                name="q"
1882                value=""
1883                placeholder="Search for products, brands..."
1884                aria-label="Search"
1885                  role="combobox"
1886                  aria-expanded="false"
1887                  aria-owns="predictive-search-results-tk"
1888                  aria-controls="predictive-search-results-tk"
1889                  aria-haspopup="listbox"
1890                  aria-autocomplete="list"
1891                autocomplete="off"
1892                autocorrect="off"
1893                autocapitalize="off"
1894                spellcheck="false"
1895              ><button type="reset" class="tk-search__clear hidden" aria-label="Clear search term">Clear</button><button type="submit" aria-label="Search">
1896                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1897                  <circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.65" y2="16.65"/>
1898                </svg>
1899              </button>
1900            </div><div class="predictive-search predictive-search--header" id="predictive-search-results-tk" tabindex="-1"><div class="predictive-search__empty" data-predictive-empty>
1901  <div class="predictive-search__results-groups-wrapper"><div class="predictive-search__result-group"><div class="ps-empty__section ps-empty__section--terms">
1902          <h2 class="predictive-search__heading">Popular searches</h2>
1903          <ul class="ps-empty__terms" role="group" aria-label="Popular searches"><li
1904                  class="predictive-search__list-item"
1905                  id="predictive-search-empty-term-1"
1906                  role="option"
1907                  aria-selected="false"
1908                >
1909                  <a
1910                    class="ps-empty__term"
1911                    href="/search?q=Laptops&type=product&options[prefix]=last"
1912                    data-predictive-term="Laptops"
1913                    tabindex="-1"
1914                  >Laptops</a>
1915                </li><li
1916                  class="predictive-search__list-item"
1917                  id="predictive-search-empty-term-2"
1918                  role="option"
1919                  aria-selected="false"
1920                >
1921                  <a
1922                    class="ps-empty__term"
1923                    href="/search?q=Solar&type=product&options[prefix]=last"
1924                    data-predictive-term="Solar"
1925                    tabindex="-1"
1926                  >Solar</a>
1927                </li><li
1928                  class="predictive-search__list-item"
1929                  id="predictive-search-empty-term-3"
1930                  role="option"
1931                  aria-selected="false"
1932                >
1933                  <a
1934                    class="ps-empty__term"
1935                    href="/search?q=CCTV&type=product&options[prefix]=last"
1936                    data-predictive-term="CCTV"
1937                    tabindex="-1"
1938                  >CCTV</a>
1939                </li><li
1940                  class="predictive-search__list-item"
1941                  id="predictive-search-empty-term-4"
1942                  role="option"
1943                  aria-selected="false"
1944                >
1945                  <a
1946                    class="ps-empty__term"
1947                    href="/search?q=Printers&type=product&options[prefix]=last"
1948                    data-predictive-term="Printers"
1949                    tabindex="-1"
1950                  >Printers</a>
1951                </li><li
1952                  class="predictive-search__list-item"
1953                  id="predictive-search-empty-term-5"
1954                  role="option"
1955                  aria-selected="false"
1956                >
1957                  <a
1958                    class="ps-empty__term"
1959                    href="/search?q=Gaming&type=product&options[prefix]=last"
1960                    data-predictive-term="Gaming"
1961                    tabindex="-1"
1962                  >Gaming</a>
1963                </li><li
1964                  class="predictive-search__list-item"
1965                  id="predictive-search-empty-term-6"
1966                  role="option"
1967                  aria-selected="false"
1968                >
1969                  <a
1970                    class="ps-empty__term"
1971                    href="/search?q=Batteries&type=product&options[prefix]=last"
1972                    data-predictive-term="Batteries"
1973                    tabindex="-1"
1974                  >Batteries</a>
1975                </li><li
1976                  class="predictive-search__list-item"
1977                  id="predictive-search-empty-term-7"
1978                  role="option"
1979                  aria-selected="false"
1980                >
1981                  <a
1982                    class="ps-empty__term"
1983                    href="/search?q=TVs&type=product&options[prefix]=last"
1984                    data-predictive-term="TVs"
1985                    tabindex="-1"
1986                  >TVs</a>
1987                </li><li
1988                  class="predictive-search__list-item"
1989                  id="predictive-search-empty-term-8"
1990                  role="option"
1991                  aria-selected="false"
1992                >
1993                  <a
1994                    class="ps-empty__term"
1995                    href="/search?q=Networking&type=product&options[prefix]=last"
1996                    data-predictive-term="Networking"
1997                    tabindex="-1"
1998                  >Networking</a>
1999                </li></ul>
2000        </div><div class="ps-empty__section">
2001          <h2 class="predictive-search__heading">Suggested categories</h2>
2002          <ul class="ps-cat-chips" role="group" aria-label="Suggested categories"><li
2003                  class="predictive-search__list-item"
2004                  id="predictive-search-empty-cat-1"
2005                  role="option"
2006                  aria-selected="false"
2007                >
2008                  <a
2009                    class="ps-cat-chip"
2010                    href="/search?q=Laptops+%26+Accessories&type=product&options[prefix]=last"
2011                    data-predictive-term="Laptops &amp; Accessories"
2012                    tabindex="-1"
2013                  >Laptops &amp; Accessories</a>
2014                </li><li
2015                  class="predictive-search__list-item"
2016                  id="predictive-search-empty-cat-2"
2017                  role="option"
2018                  aria-selected="false"
2019                >
2020                  <a
2021                    class="ps-cat-chip"
2022                    href="/search?q=Solar+%26+Power&type=product&options[prefix]=last"
2023                    data-predictive-term="Solar &amp; Power"
2024                    tabindex="-1"
2025                  >Solar &amp; Power</a>
2026                </li><li
2027                  class="predictive-search__list-item"
2028                  id="predictive-search-empty-cat-3"
2029                  role="option"
2030                  aria-selected="false"
2031                >
2032                  <a
2033                    class="ps-cat-chip"
2034                    href="/search?q=Security+%26+CCTV&type=product&options[prefix]=last"
2035                    data-predictive-term="Security &amp; CCTV"
2036                    tabindex="-1"
2037                  >Security &amp; CCTV</a>
2038                </li><li
2039                  class="predictive-search__list-item"
2040                  id="predictive-search-empty-cat-4"
2041                  role="option"
2042                  aria-selected="false"
2043                >
2044                  <a
2045                    class="ps-cat-chip"
2046                    href="/search?q=Printers&type=product&options[prefix]=last"
2047                    data-predictive-term="Printers"
2048                    tabindex="-1"
2049                  >Printers</a>
2050                </li><li
2051                  class="predictive-search__list-item"
2052                  id="predictive-search-empty-cat-5"
2053                  role="option"
2054                  aria-selected="false"
2055                >
2056                  <a
2057                    class="ps-cat-chip"
2058                    href="/search?q=Networking&type=product&options[prefix]=last"
2059                    data-predictive-term="Networking"
2060                    tabindex="-1"
2061                  >Networking</a>
2062                </li><li
2063                  class="predictive-search__list-item"
2064                  id="predictive-search-empty-cat-6"
2065                  role="option"
2066                  aria-selected="false"
2067                >
2068                  <a
2069                    class="ps-cat-chip"
2070                    href="/search?q=Gaming&type=product&options[prefix]=last"
2071                    data-predictive-term="Gaming"
2072                    tabindex="-1"
2073                  >Gaming</a>
2074                </li></ul>
2075        </div></div><div class="predictive-search__result-group">
2076        <div class="predictive-search__products">
2077          <h2 class="predictive-search__heading">Trending now</h2>
2078          <ul id="predictive-search-empty-products" class="predictive-search__results-list list-unstyled" role="group" aria-label="Trending now">
2079            <li
2080            class="predictive-search__list-item"
2081            id="predictive-search-empty-product-1"
2082            role="option"
2083            aria-selected="false"
2084          ><a
2085  href="/products/viewsonic-27-180hz-gaming-monitor"
2086  class="ps-card predictive-search__item"
2087  tabindex="-1"
2088>
2089  <span class="ps-card__media"><img
2090        class="ps-card__img"
2091        src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=300"
2092        alt="ViewSonic VX2779-HD-PRO 27-inch gaming monitor front view with IPS SuperClear wallpaper"
2093        width="150"
2094        height="150"
2095        loading="lazy"
2096      ><span class="ps-card__badge ps-card__badge--sale">-21%</span></span>
2097  <span class="ps-card__title">ViewSonic VX2779-HD-PRO 27&quot; Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10</span>
2098  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">
2098R 2,912</span>
2099      <s class="ps-card__price-was">R 3,699</s></span>
2100</a></li><li
2101            class="predictive-search__list-item"
2102            id="predictive-search-empty-product-2"
2103            role="option"
2104            aria-selected="false"
2105          ><a
2106  href="/products/viewsonic-24-240hz-gaming-monitor"
2107  class="ps-card predictive-search__item"
2108  tabindex="-1"
2109>
2110  <span class="ps-card__media"><img
2111        class="ps-card__img"
2112        src="//alcell.co.za/cdn/shop/files/xg2409a_a574014b-98ff-419f-b397-48b519d2d458.jpg?v=1782311881&width=300"
2113        alt="ViewSonic XG2409A 24-inch gaming monitor, front view with purple gaming screen art"
2114        width="150"
2115        height="150"
2116        loading="lazy"
2117      ><span class="ps-card__badge ps-card__badge--sale">-23%</span></span>
2118  <span class="ps-card__title">ViewSonic 24&quot; Full HD 240Hz IPS Gaming Monitor (XG2409A) - 1ms, HDR10, FreeSync</span>
2119  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 2,912</span>
2120      <s class="ps-card__price-was">R 3,799</s></span>
2121</a></li><li
2122            class="predictive-search__list-item"
2123            id="predictive-search-empty-product-3"
2124            role="option"
2125            aria-selected="false"
2126          ><a
2127  href="/products/ezviz-hb8-4k-smart-home-battery-camera"
2128  class="ps-card predictive-search__item"
2129  tabindex="-1"
2130>
2131  <span class="ps-card__media"><img
2132        class="ps-card__img"
2133        src="//alcell.co.za/cdn/shop/files/cs-hb8-4k.jpg?v=1778852212&width=300"
2134        alt="EZVIZ HB8 4K pan-tilt camera, front view of round housing and lens"
2135        width="150"
2136        height="150"
2137        loading="lazy"
2138      ><span class="ps-card__badge ps-card__badge--sale">-20%</span></span>
2139  <span class="ps-card__title">EZVIZ HB8 4K 8MP Battery Camera - Pan/Tilt, 10400mAh, Wi-Fi 6, IP65 (CS-HB8-R200-1M8WFL)</span>
2140  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 2,299</span>
2141      <s class="ps-card__price-was">R 2,899</s></span>
2142</a></li><li
2143            class="predictive-search__list-item"
2144            id="predictive-search-empty-product-4"
2145            role="option"
2146            aria-selected="false"
2147          ><a
2148  href="/products/viewsonic-24-full-hd-monitor-with-fast-2"
2149  class="ps-card predictive-search__item"
2150  tabindex="-1"
2151>
2152  <span class="ps-card__media"><img
2153        class="ps-card__img"
2154        src="//alcell.co.za/cdn/shop/files/va240a-h.jpg?v=1778850984&width=300"
2155        alt="ViewSonic VA240A-H monitor, front view with red screen showing 120Hz and IPS SuperClear branding"
2156        width="150"
2157        height="150"
2158        loading="lazy"
2159      ><span class="ps-card__badge ps-card__badge--sale">-21%</span></span>
2160  <span class="ps-card__title">ViewSonic VA240A-H 24&quot; Full HD IPS Monitor - 1080p, 120Hz, 1ms, HDMI &amp; VGA</span>
2161  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 1,796</span>
2162      <s class="ps-card__price-was">R 2,299</s></span>
2163</a></li><li
2164            class="predictive-search__list-item"
2165            id="predictive-search-empty-product-5"
2166            role="option"
2167            aria-selected="false"
2168          ><a
2169  href="/products/ezviz-h80x-8mp2mp-4mm-smart-home-camera"
2170  class="ps-card predictive-search__item"
2171  tabindex="-1"
2172>
2173  <span class="ps-card__media"><img
2174        class="ps-card__img"
2175        src="//alcell.co.za/cdn/shop/files/cs-h80x.jpg?v=1778847783&width=300"
2176        alt="EZVIZ H80x Dual outdoor camera, three-quarter view showing the dual lenses and IR array"
2177        width="150"
2178        height="150"
2179        loading="lazy"
2180      ><span class="ps-card__badge ps-card__badge--sale">-23%</span></span>
2181  <span class="ps-card__title">EZVIZ H80x Dual 4K 8MP+2MP Outdoor Pan &amp; Tilt Wi-Fi Camera - 360°, AI Tracking, ColorFULL</span>
2182  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 1,299</span>
2183      <s class="ps-card__price-was">R 1,699</s></span>
2184</a></li><li
2185            class="predictive-search__list-item"
2186            id="predictive-search-empty-product-6"
2187            role="option"
2188            aria-selected="false"
2189          ><a
2190  href="/products/viewsonic-185-hdmivga-monitor"
2191  class="ps-card predictive-search__item"
2192  tabindex="-1"
2193>
2194  <span class="ps-card__media"><img
2195        class="ps-card__img"
2196        src="//alcell.co.za/cdn/shop/files/va1903h-2.jpg?v=1778850980&width=300"
2197        alt="ViewSonic VA1903H-2 monitor, front view with red promotional screen and blue light filter branding"
2198        width="150"
2199        height="150"
2200        loading="lazy"
2201      ><span class="ps-card__badge ps-card__badge--sale">-20%</span></span>
2202  <span class="ps-card__title">ViewSonic VA1903H-2 18.5&quot; LED Monitor - 1366x768 HD, HDMI &amp; VGA, 5ms</span>
2203  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 1,269</span>
2204      <s class="ps-card__price-was">R 1,599</s></span>
2205</a></li><li
2206            class="predictive-search__list-item"
2207            id="predictive-search-empty-product-7"
2208            role="option"
2209            aria-selected="false"
2210          ><a
2211  href="/products/ezviz-c3tn-1080p-28mm-wifi-camera"
2212  class="ps-card predictive-search__item"
2213  tabindex="-1"
2214>
2215  <span class="ps-card__media"><img
2216        class="ps-card__img"
2217        src="//alcell.co.za/cdn/shop/files/cs-c3tn.jpg?v=1778847755&width=300"
2218        alt="EZVIZ C3TN outdoor Wi-Fi camera on wall mount bracket, three-quarter view"
2219        width="150"
2220        height="150"
2221        loading="lazy"
2222      ><span class="ps-card__badge ps-card__badge--sale">-19%</span></span>
2223  <span class="ps-card__title">EZVIZ C3TN 2MP 1080p Outdoor Wi-Fi Camera (CS-C3TN) - 2.8mm Lens, 30m IR, IP67, H.265</span>
2224  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 589</span>
2225      <s class="ps-card__price-was">R 729</s></span>
2226</a></li><li
2227            class="predictive-search__list-item"
2228            id="predictive-search-empty-product-8"
2229            role="option"
2230            aria-selected="false"
2231          ><a
2232  href="/products/hiksemi-wave-m2-pcie-30-nvme-128gb-ssd"
2233  class="ps-card predictive-search__item"
2234  tabindex="-1"
2235>
2236  <span class="ps-card__media"><img
2237        class="ps-card__img"
2238        src="//alcell.co.za/cdn/shop/files/6974202725693_1.jpg?v=1778847018&width=300"
2239        alt="HIKSEMI Wave 128GB M.2 NVMe SSD, front view of the drive on a white background"
2240        width="150"
2241        height="150"
2242        loading="lazy"
2243      ><span class="ps-card__badge ps-card__badge--sale">-35%</span></span>
2244  <span class="ps-card__title">
2244Hiksemi Wave 128GB M.2 NVMe SSD - PCIe 3.0, 2500MB/s, 3D NAND</span>
2245  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 389</span>
2246      <s class="ps-card__price-was">R 599</s></span>
2247</a></li><li
2248            class="predictive-search__list-item"
2249            id="predictive-search-empty-product-9"
2250            role="option"
2251            aria-selected="false"
2252          ><a
2253  href="/products/1-5m-standard-computer-power-cable-for-p"
2254  class="ps-card predictive-search__item"
2255  tabindex="-1"
2256>
2257  <span class="ps-card__media"><img
2258        class="ps-card__img"
2259        src="//alcell.co.za/cdn/shop/files/zt-pc-s15-1.jpg?v=1790696395&width=300"
2260        alt="1.5M Standard Computer Power Cable for P"
2261        width="150"
2262        height="150"
2263        loading="lazy"
2264      ><span class="ps-card__badge ps-card__badge--sale">-40%</span></span>
2265  <span class="ps-card__title">1.5m Computer Power Cable - SA 3-Pin to IEC for PC, Monitor &amp; UPS (ZT-PC-S15)</span>
2266  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 29</span>
2267      <s class="ps-card__price-was">R 49</s></span>
2268</a></li><li
2269            class="predictive-search__list-item"
2270            id="predictive-search-empty-product-10"
2271            role="option"
2272            aria-selected="false"
2273          ><a
2274  href="/products/1-5m-laptop-power-cable-for-notebook-use"
2275  class="ps-card predictive-search__item"
2276  tabindex="-1"
2277>
2278  <span class="ps-card__media"><img
2279        class="ps-card__img"
2280        src="//alcell.co.za/cdn/shop/files/zt-pc-l15-1.jpg?v=1790696393&width=300"
2281        alt="1.5M Laptop Power Cable for Notebook Use"
2282        width="150"
2283        height="150"
2284        loading="lazy"
2285      ><span class="ps-card__badge ps-card__badge--sale">-40%</span></span>
2286  <span class="ps-card__title">1.5m Laptop Charger Power Cable - SA Mains Lead for Notebook Adapters (ZT-PC-L15)</span>
2287  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 29</span>
2288      <s class="ps-card__price-was">R 49</s></span>
2289</a></li>
2290          </ul>
2291        </div>
2292      </div></div>
2293</div>
2294<div class="ps-skeleton" data-predictive-skeleton aria-hidden="true">
2295  <div class="predictive-search__results-groups-wrapper"><div class="predictive-search__result-group">
2296      <span class="ps-skel ps-skel--heading"></span>
2297      <div class="ps-skel__rows"><span class="ps-skel ps-skel--row"></span><span class="ps-skel ps-skel--row"></span><span class="ps-skel ps-skel--row"></span><span class="ps-skel ps-skel--row"></span><span class="ps-skel ps-skel--row"></span><span class="ps-skel ps-skel--row"></span></div>
2298    </div><div class="predictive-search__result-group"><div class="predictive-search__products">
2299        <div class="ps-skel__head">
2300          <span class="ps-skel ps-skel--heading"></span>
2301          <span class="ps-skel ps-skel--pill"></span>
2302        </div>
2303        <div class="ps-skeleton__grid"><div class="ps-skel-card">
2304              <span class="ps-skel ps-skel-card__media"></span>
2305              <span class="ps-skel-card__text">
2306                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
2307                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
2308              </span>
2309              <span class="ps-skel-card__price">
2310                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
2311              </span>
2312            </div><div class="ps-skel-card">
2313              <span class="ps-skel ps-skel-card__media"></span>
2314              <span class="ps-skel-card__text">
2315                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
2316                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
2317              </span>
2318              <span class="ps-skel-card__price">
2319                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
2320              </span>
2321            </div><div class="ps-skel-card">
2322              <span class="ps-skel ps-skel-card__media"></span>
2323              <span class="ps-skel-card__text">
2324                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
2325                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
2326              </span>
2327              <span class="ps-skel-card__price">
2328                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
2329              </span>
2330            </div><div class="ps-skel-card">
2331              <span class="ps-skel ps-skel-card__media"></span>
2332              <span class="ps-skel-card__text">
2333                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
2334                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
2335              </span>
2336              <span class="ps-skel-card__price">
2337                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
2338              </span>
2339            </div><div class="ps-skel-card">
2340              <span class="ps-skel ps-skel-card__media"></span>
2341              <span class="ps-skel-card__text">
2342                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
2343                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
2344              </span>
2345              <span class="ps-skel-card__price">
2346                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
2347              </span>
2348            </div><div class="ps-skel-card">
2349              <span class="ps-skel ps-skel-card__media"></span>
2350              <span class="ps-skel-card__text">
2351                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
2352                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
2353              </span>
2354              <span class="ps-skel-card__price">
2355                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
2356              </span>
2357            </div><div class="ps-skel-card">
2358              <span class="ps-skel ps-skel-card__media"></span>
2359              <span class="ps-skel-card__text">
2360                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
2361                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
2362              </span>
2363              <span class="ps-skel-card__price">
2364                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
2365              </span>
2366            </div><div class="ps-skel-card">
2367              <span class="ps-skel ps-skel-card__media"></span>
2368              <span class="ps-skel-card__text">
2369                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
2370                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
2371              </span>
2372              <span class="ps-skel-card__price">
2373                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
2374              </span>
2375            </div><div class="ps-skel-card">
2376              <span class="ps-skel ps-skel-card__media"></span>
2377              <span class="ps-skel-card__text">
2378                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
2379                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
2380              </span>
2381              <span class="ps-skel-card__price">
2382                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
2383              </span>
2384            </div><div class="ps-skel-card">
2385              <span class="ps-skel ps-skel-card__media"></span>
2386              <span class="ps-skel-card__text">
2387                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
2388                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
2389              </span>
2390              <span class="ps-skel-card__price">
2391                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
2392              </span>
2393            </div></div>
2394      </div>
2395    </div>
2396
2397  </div>
2398</div>
2399<div class="predictive-search__results-panel" data-predictive-search></div>
2400              </div>
2401              <span class="predictive-search-status visually-hidden" role="status" aria-hidden="true"></span></form></predictive-search></div>
2402    </div>
2403  </div>
2404</header>
2404<script>
2405  /* ── Predictive-search dropdown height alignment ───────────────────────────
2406     The dropdown's EMPTY state should finish exactly where the "Shop by
2407     Department" sidebar finishes, so the two panels read as one balanced row on
2408     every width. Rather than fight the content (the two columns are independent
2409     and either can be the taller one), we measure the dept-sidebar's height and
2410     fill the empty state to it:
2411
2412       • --ps-fill-height → a min-height on the empty-state wrapper, so its
2413         columns stretch to the sidebar's bottom. The popular-searches list
2414         already spreads (space-between) and the trending grid pins to the top,
2415         so the fill looks intentional. Live RESULTS don't get this — they keep
2416         their natural height (no awkward stretching).
2417       • --ps-max-height → a safety cap (panel top → viewport bottom) so the
2418         panel can never run off-screen on a short viewport. */
2419  (function () {
2420    var panel = document.getElementById('predictive-search-results-tk');
2421    if (!panel) return;
2422
2423    var emptyWrapper = panel.querySelector('[data-predictive-empty] .predictive-search__results-groups-wrapper');
2424
2425    function sync() {
2426      /* The always-visible homepage department sidebar is the alignment target;
2427         off the homepage it's absent, so we only apply the viewport safety cap.
2428         Queried lazily HERE (not once at parse time) because this inline script
2429         runs before the hero section that owns .tk-sidebar has rendered. */
2430      var deptSidebar = document.querySelector('.tk-sidebar');
2431      var panelTop = panel.getBoundingClientRect().top;
2432
2433      /* When the dropdown is opened from the scroll-up STICKY BAR, the browser
2434         fires the panel's [open] mutation BEFORE it has finished scrolling the
2435         header back to the top — so the panel is still measured far off-screen
2436         and panelTop is a large NEGATIVE number. Clamp it to the viewport before
2437         the cap math so an off-screen measurement can't blow the height up. */
2438      var safeTop = Math.max(0, panelTop);
2439      var viewportCap = Math.max(240, window.innerHeight - safeTop - 16);
2440
2441      /* Only fill to the sidebar when it is GENUINELY rendered — i.e. the
2442         homepage's persistent department rail. On inner pages (product,
2443         collection, …) the sole .tk-sidebar lives inside the header's hover
2444         dropdown and is display:none; a hidden element reports a 0-height rect
2445         fixed at the top of the document that does NOT scroll with the panel.
2446         Filling to that — especially while panelTop is off-screen negative —
2447         yields a wildly over-tall dropdown (the "stretched popular searches"
2448         glitch). getClientRects() is empty for a display:none element, so this
2449         guard skips it and we fall through to the natural-height branch. */
2450      var sidebarVisible = deptSidebar && deptSidebar.getClientRects().length > 0;
2451
2452      /* Align the EMPTY state's bottom with the dept-sidebar's bottom:
2453           • Cap the panel height to exactly (sidebarBottom − panelTop) so it can
2454             never extend past the sidebar — the few px clipped are the wrapper's
2455             empty bottom padding, so nothing visible is lost.
2456           • Fill the wrapper to the same height so, when the sidebar is the
2457             taller side, the columns stretch down to meet it (popular-searches
2458             list spreads via space-between, trending grid pins to the top).
2459         Both are clamped to the viewport cap so a short screen can't push the
2460         panel off-screen. Requires the panel itself to be on-screen (panelTop
2461         >= 0) so we never fill against a stale off-screen measurement. Off the
2462         homepage (no visible sidebar) we keep only the cap. */
2463      if (sidebarVisible && panelTop >= 0) {
2464        var sidebarBottom = deptSidebar.getBoundingClientRect().bottom;
2465        var target = Math.min(Math.floor(sidebarBottom - panelTop), viewportCap);
2466        if (target > 80) {
2467          panel.style.setProperty('--ps-max-height', target + 'px');
2468          panel.style.setProperty('--ps-fill-height', target + 'px');
2469          return;
2470        }
2471      }
2472      /* No visible sidebar / off-screen / unmeasurable: natural height, cap only. */
2473      panel.style.setProperty('--ps-max-height', viewportCap + 'px');
2474      panel.style.setProperty('--ps-fill-height', '0px');
2475    }
2476
2477    /* rAF-dedupe bursty resize events; sync after layout settles. */
2478    var raf;
2479    function schedule() {
2480      if (raf) cancelAnimationFrame(raf);
2481      raf = requestAnimationFrame(sync);
2482    }
2483
2484    window.addEventListener('resize', schedule, { passive: true });
2485    /* The <predictive-search> custom element toggles [open]/[loading] on itself
2486       when the field is used — refresh on those so the fill is correct the
2487       moment the panel is shown (its top/measurements are only valid then). */
2488    var host = panel.closest('predictive-search');
2489    if (host && 'MutationObserver' in window) {
2490      new MutationObserver(schedule).observe(host, {
2491        attributes: true,
2492        attributeFilter: ['open', 'loading'],
2493      });
2494    }
2495    var input = panel.parentElement && panel.parentElement.querySelector('input[type="search"]');
2496    if (input) input.addEventListener('focus', schedule, { passive: true });
2497
2498    /* This inline script runs before the hero (.tk-sidebar) has parsed, so the
2499       first measurement must wait for the full DOM + initial layout. */
2500    if (document.readyState === 'loading') {
2501      document.addEventListener('DOMContentLoaded', schedule);
2502    } else {
2503      schedule();
2504    }
2505    window.addEventListener('load', schedule);
2506  })();
2507</script>
2507<style>
2508  /* Hidden at every width by default — desktop never shows it, and it stays out
2509     of the layout/tab order until JS activates it on mobile. */
2510  .msearch { display: none; }
2511
2512  @media (max-width: 989px) {
2513    /* `is-active` = mounted (display) ; `is-open` = animated-in. The two-step
2514       lets the fade/rise transition run from the hidden state. */
2515    .msearch.is-active {
2516      display: flex;
2517      flex-direction: column;
2518      position: fixed;
2519      inset: 0;
2520      z-index: 9999;
2521      background: #fff;
2522      opacity: 0;
2523      transition: opacity 220ms ease;
2524    }
2525    .msearch.is-active.is-open { opacity: 1; }
2526
2527    /* The <predictive-search> custom element fills the screen and is the rise
2528       target. min-height:0 lets the inner results panel own the scroll. */
2529    .msearch__ps {
2530      display: flex;
2531      flex-direction: column;
2532      flex: 1 1 auto;
2533      min-height: 0;
2534      transform: translateY(-12px);
2535      transition: transform 280ms cubic-bezier(0.22, 0.61, 0.36, 1);
2536    }
2537    .msearch.is-open .msearch__ps { transform: translateY(0); }
2538
2539    .msearch__form {
2540      display: flex;
2541      flex-direction: column;
2542      flex: 1 1 auto;
2543      min-height: 0;
2544      margin: 0;
2545    }
2546
2547    /* ── Top bar: [🔍 field  · Clear] · Cancel ── */
2548    .msearch__topbar {
2549      flex: 0 0 auto;
2550      display: flex;
2551      align-items: center;
2552      gap: 4px;
2553      /* Less right padding than left so the dismiss X sits closer to the screen
2554         edge and the field gets more room (left keeps its comfortable inset). */
2555      padding: calc(10px + env(safe-area-inset-top)) 2px 10px 12px;
2556      background: #fff;
2557      border-bottom: 1px solid #E6E8EC;
2558    }
2559    .msearch__field {
2560      flex: 1 1 auto;
2561      display: flex;
2562      align-items: center;
2563      gap: 6px;
2564      min-width: 0;
2565      height: 44px;
2566      padding: 0 6px 0 10px;
2567      background: #fff;
2568      border: 1px solid #E2E5EA;
2569      border-radius: 10px;
2570    }
2571    .msearch__submit {
2572      display: flex;
2573      align-items: center;
2574      justify-content: center;
2575      flex-shrink: 0;
2576      padding: 0;
2577      margin: 0;
2578      background: none;
2579      border: none;
2580      color: #2a3270;
2581      cursor: pointer;
2582    }
2583    .msearch__submit svg { width: 19px; height: 19px; }
2584    .msearch__field input {
2585      flex: 1 1 auto;
2586      min-width: 0;
2587      padding: 10px 4px;
2588      border: none;
2589      outline: none;
2590      background: transparent;
2591      font-family: var(--font-body-family);
2592      /* 16px keeps iOS from auto-zooming the page when the field is focused. */
2593      font-size: 16px;
2594      font-weight: 400;
2595      line-height: 1.3;
2596      letter-spacing: normal;
2597      color: #2b2f38;
2598    }
2599    .msearch__field input::placeholder { color: #8a8f9c; font-weight: 400; }
2600    .msearch__field input::-webkit-search-cancel-button,
2601    .msearch__field input::-webkit-search-decoration {
2602      -webkit-appearance: none;
2603      appearance: none;
2604      display: none;
2605    }
2606    /* Match the desktop header field exactly: NO active/focus effects. The
2607       resting and typing states are identical — no drop shadow, no outline, no
2608       border-colour change (the theme's global input :focus styles add a shadow
2609       otherwise). */
2610    .msearch__field:focus-within,
2611    .msearch__field input:focus,
2612    .msearch__field input:focus-visible {
2613      border-color: #E2E5EA;
2614      box-shadow: none !important;
2615      outline: none !important;
2616    }
2617    .msearch__clear {
2618      display: inline-flex;
2619      align-items: center;
2620      flex-shrink: 0;
2621      height: 24px;
2622      padding: 0 12px;
2623      border: 1px solid #E1E3E9;
2624      border-radius: 999px;
2625      background: #fff;
2626      color: #2a3270;
2627      font-size: 12px;
2628      font-weight: 600;
2629      line-height: 1;
2630      white-space: nowrap;
2631      cursor: pointer;
2632    }
2633    .msearch__clear.hidden { display: none; }
2634    .msearch__cancel {
2635      flex: 0 0 auto;
2636      display: inline-flex;
2637      align-items: center;
2638      justify-content: center;
2639      width: 40px;
2640      height: 40px;
2641      padding: 0;
2642      background: none;
2643      border: none;
2644      color: #2a3270;
2645      cursor: pointer;
2646      -webkit-tap-highlight-color: transparent;
2647    }
2648    .msearch__cancel svg { width: 22px; height: 22px; }
2649
2650    /* ── Results body — turn the floating dropdown into a full-height, scrollable
2651       panel. Forced visible regardless of the [open] attribute so the content
2652       stays put even when focus leaves the input (e.g. while scrolling). The
2653       inner empty/skeleton/results swapping still works via its own rules. ── */
2654    .msearch .predictive-search {
2655      display: flex !important;
2656      flex-direction: column;
2657      position: static !important;
2658      top: auto;
2659      left: auto;
2660      right: auto;
2661      flex: 1 1 auto;
2662      min-height: 0;
2663      width: 100% !important;
2664      max-width: none !important;
2665      max-height: none !important;
2666      margin: 0;
2667      border: none !important;
2668      border-radius: 0 !important;
2669      box-shadow: none !important;
2670      background: #fff;
2671      overflow-y: auto;
2672      /* Don't chain this panel's scroll to the page behind it. */
2673      overscroll-behavior: contain;
2674      -webkit-overflow-scrolling: touch;
2675    }
2676
2677    /* In the desktop dropdown the empty-state sidebar stretches to fill height
2678       (space-between). In this tall drawer that would scatter the rows — keep
2679       them naturally top-aligned instead. */
2680    .msearch .predictive-search__empty .predictive-search__result-group:first-child { display: block; }
2681    .msearch .ps-empty__section--terms { flex: 0 0 auto; display: block; }
2682    .msearch .ps-empty__terms { flex: 0 0 auto; justify-content: flex-start; }
2683
2684    /* Roomy drawer — show all trending tiles (the header dropdown caps at 6). */
2685    .msearch #predictive-search-empty-products .predictive-search__list-item { display: block; }
2686
2687    .msearch .predictive-search__results-groups-wrapper {
2688      padding-top: 14px;
2689      padding-bottom: calc(28px + env(safe-area-inset-bottom));
2690    }
2691
2692    /* Hide the floating WhatsApp widget while the search drawer is open — same
2693       as the burger menu does (see snippets/whatsapp-widget.liquid). is-active
2694       stays set through the fade-out, so the widget reappears only once closed. */
2695    body:has([data-msearch].is-active) .whatsapp-widget { display: none !important; }
2696
2697    /* Hide the fixed bottom tab bar (Home/Categories/Search/Software/Account)
2698       while the drawer is open — on EVERY page, not just the home page. The
2699       drawer is z-9999 and the bar is z-1000, but on collection/search/product/
2700       cart pages the header section sits in its own stacking context, so the bar
2701       bled OVER the drawer there and blocked the footer of the results panel
2702       (the "View all results" row couldn't be reached). display:none removes it
2703       regardless of stacking context — same signal/approach as the burger menu
2704       rule in snippets/mobile-nav.liquid. is-active keeps it hidden through the
2705       fade-out, so it reappears only once the drawer has fully closed. */
2706    body:has([data-msearch].is-active) .m-tabbar { display: none !important; }
2707
2708    /* Cross-fade the page's OWN fixed header with the full-screen drawer.
2709       The collection/search bar (.tkcol__stickyhead) and the product/wishlist
2710       bar (.mtopbar) sit in their own sticky stacking context, so they'd bleed
2711       through over the top of the (z-9999) drawer — a duplicate top bar + a
2712       second separator. We fade them to opacity 0 (and visibility:hidden so the
2713       invisible bar can't intercept taps meant for the drawer) instead of
2714       display:none, so the change can animate.
2715
2716       Driven by is-open (the ANIMATED state), NOT is-active: that way the header
2717       fades OUT as the drawer fades in, and fades back IN as the drawer fades
2718       out — a smooth cross-fade. (is-active only clears after the drawer has
2719       fully gone, which is what made the header snap back in late.)
2720
2721       The visibility timing is the standard trick: when hiding (is-open present)
2722       its change is delayed 220ms so the bar stays visible through the opacity
2723       fade; when showing (rule drops) it flips to visible immediately so it can
2724       fade straight back in. */
2725    .tkcol__stickyhead,
2726    .mtopbar {
2727      transition: opacity 220ms ease, visibility 0s;
2728    }
2729    body:has([data-msearch].is-open) .tkcol__stickyhead,
2730    body:has([data-msearch].is-open) .mtopbar {
2731      opacity: 0;
2732      visibility: hidden;
2733      transition: opacity 220ms ease, visibility 0s 220ms;
2734    }
2735  }
2736
2737  @media (max-width: 989px) and (prefers-reduced-motion: reduce) {
2738    .msearch.is-active { transition: none; }
2739    .msearch__ps { transition: none; transform: none; }
2740    /* No cross-fade — toggle the page header instantly (still hidden while open). */
2741    .tkcol__stickyhead,
2742    .mtopbar { transition: none !important; }
2743  }
2744
2745  /* Lock the page behind the drawer. position:fixed (set with an inline
2746     top:-scrollY by the JS) is the only reliable way to stop iOS Safari from
2747     touch-scrolling the background; the JS restores the scroll position on
2748     close. width/left/right keep the pinned body full-width. */
2749  body.msearch-lock {
2750    position: fixed;
2751    left: 0;
2752    right: 0;
2753    width: 100%;
2754    overflow: hidden;
2755  }
2756</style>
2757
2758<div class="msearch" data-msearch role="dialog" aria-modal="true" aria-label="Search" aria-hidden="true"><predictive-search class="msearch__ps" data-loading-text="Loading..."><form action="/search" method="get" role="search" class="msearch__form">
2759      <input type="hidden" name="options[prefix]" value="last">
2760      <input type="hidden" name="type" value="product">
2761
2762      <div class="msearch__topbar">
2763        <div class="msearch__field">
2764          <button type="submit" class="msearch__submit" aria-label="Search">
2765            <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
2766              <circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.65" y2="16.65"/>
2767            </svg>
2768          </button>
2769          <input
2770            type="search"
2771            name="q"
2772            value=""
2773            placeholder="Search for products, brands..."
2774            aria-label="Search"
2775            enterkeyhint="search"
2776              role="combobox"
2777              aria-expanded="false"
2778              aria-owns="predictive-search-results-msearch"
2779              aria-controls="predictive-search-results-msearch"
2780              aria-haspopup="listbox"
2781              aria-autocomplete="list"
2782            autocomplete="off"
2783            autocorrect="off"
2784            autocapitalize="off"
2785            spellcheck="false"
2786          ><button type="reset" class="msearch__clear hidden" aria-label="Clear search term">Clear</button></div>
2787        <button type="button" class="msearch__cancel" data-msearch-close aria-label="Close search">
2788          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
2789            <line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
2790          </svg>
2791        </button>
2792      </div><div class="predictive-search predictive-search--msearch" id="predictive-search-results-msearch" tabindex="-1"><div class="predictive-search__empty" data-predictive-empty>
2793  <div class="predictive-search__results-groups-wrapper"><div class="predictive-search__result-group"><div class="ps-empty__section ps-empty__section--terms">
2794          <h2 class="predictive-search__heading">Popular searches</h2>
2795          <ul class="ps-empty__terms" role="group" aria-label="Popular searches"><li
2796                  class="predictive-search__list-item"
2797                  id="predictive-search-empty-term-1"
2798                  role="option"
2799                  aria-selected="false"
2800                >
2801                  <a
2802                    class="ps-empty__term"
2803                    href="/search?q=Laptops&type=product&options[prefix]=last"
2804                    data-predictive-term="Laptops"
2805                    tabindex="-1"
2806                  >Laptops</a>
2807                </li><li
2808                  class="predictive-search__list-item"
2809                  id="predictive-search-empty-term-2"
2810                  role="option"
2811                  aria-selected="false"
2812                >
2813                  <a
2814                    class="ps-empty__term"
2815                    href="/search?q=Solar&type=product&options[prefix]=last"
2816                    data-predictive-term="Solar"
2817                    tabindex="-1"
2818                  >Solar</a>
2819                </li><li
2820                  class="predictive-search__list-item"
2821                  id="predictive-search-empty-term-3"
2822                  role="option"
2823                  aria-selected="false"
2824                >
2825                  <a
2826                    class="ps-empty__term"
2827                    href="/search?q=CCTV&type=product&options[prefix]=last"
2828                    data-predictive-term="CCTV"
2829                    tabindex="-1"
2830                  >CCTV</a>
2831                </li><li
2832                  class="predictive-search__list-item"
2833                  id="predictive-search-empty-term-4"
2834                  role="option"
2835                  aria-selected="false"
2836                >
2837                  <a
2838                    class="ps-empty__term"
2839                    href="/search?q=Printers&type=product&options[prefix]=last"
2840                    data-predictive-term="Printers"
2841                    tabindex="-1"
2842                  >Printers</a>
2843                </li><li
2844                  class="predictive-search__list-item"
2845                  id="predictive-search-empty-term-5"
2846                  role="option"
2847                  aria-selected="false"
2848                >
2849                  <a
2850                    class="ps-empty__term"
2851                    href="/search?q=Gaming&type=product&options[prefix]=last"
2852                    data-predictive-term="Gaming"
2853                    tabindex="-1"
2854                  >Gaming</a>
2855                </li><li
2856                  class="predictive-search__list-item"
2857                  id="predictive-search-empty-term-6"
2858                  role="option"
2859                  aria-selected="false"
2860                >
2861                  <a
2862                    class="ps-empty__term"
2863                    href="/search?q=Batteries&type=product&options[prefix]=last"
2864                    data-predictive-term="Batteries"
2865                    tabindex="-1"
2866                  >Batteries</a>
2867                </li><li
2868                  class="predictive-search__list-item"
2869                  id="predictive-search-empty-term-7"
2870                  role="option"
2871                  aria-selected="false"
2872                >
2873                  <a
2874                    class="ps-empty__term"
2875                    href="/search?q=TVs&type=product&options[prefix]=last"
2876                    data-predictive-term="TVs"
2877                    tabindex="-1"
2878                  >TVs</a>
2879                </li><li
2880                  class="predictive-search__list-item"
2881                  id="predictive-search-empty-term-8"
2882                  role="option"
2883                  aria-selected="false"
2884                >
2885                  <a
2886                    class="ps-empty__term"
2887                    href="/search?q=Networking&type=product&options[prefix]=last"
2888                    data-predictive-term="Networking"
2889                    tabindex="-1"
2890                  >Networking</a>
2891                </li></ul>
2892        </div><div class="ps-empty__section">
2893          <h2 class="predictive-search__heading">Suggested categories</h2>
2894          <ul class="ps-cat-chips" role="group" aria-label="Suggested categories"><li
2895                  class="predictive-search__list-item"
2896                  id="predictive-search-empty-cat-1"
2897                  role="option"
2898                  aria-selected="false"
2899                >
2900                  <a
2901                    class="ps-cat-chip"
2902                    href="/search?q=Laptops+%26+Accessories&type=product&options[prefix]=last"
2903                    data-predictive-term="Laptops &amp; Accessories"
2904                    tabindex="-1"
2905                  >Laptops &amp; Accessories</a>
2906                </li><li
2907                  class="predictive-search__list-item"
2908                  id="predictive-search-empty-cat-2"
2909                  role="option"
2910                  aria-selected="false"
2911                >
2912                  <a
2913                    class="ps-cat-chip"
2914                    href="/search?q=Solar+%26+Power&type=product&options[prefix]=last"
2915                    data-predictive-term="Solar &amp; Power"
2916                    tabindex="-1"
2917                  >Solar &amp; Power</a>
2918                </li><li
2919                  class="predictive-search__list-item"
2920                  id="predictive-search-empty-cat-3"
2921                  role="option"
2922                  aria-selected="false"
2923                >
2924                  <a
2925                    class="ps-cat-chip"
2926                    href="/search?q=Security+%26+CCTV&type=product&options[prefix]=last"
2927                    data-predictive-term="Security &amp; CCTV"
2928                    tabindex="-1"
2929                  >Security &amp; CCTV</a>
2930                </li><li
2931                  class="predictive-search__list-item"
2932                  id="predictive-search-empty-cat-4"
2933                  role="option"
2934                  aria-selected="false"
2935                >
2936                  <a
2937                    class="ps-cat-chip"
2938                    href="/search?q=Printers&type=product&options[prefix]=last"
2939                    data-predictive-term="Printers"
2940                    tabindex="-1"
2941                  >Printers</a>
2942                </li><li
2943                  class="predictive-search__list-item"
2944                  id="predictive-search-empty-cat-5"
2945                  role="option"
2946                  aria-selected="false"
2947                >
2948                  <a
2949                    class="ps-cat-chip"
2950                    href="/search?q=Networking&type=product&options[prefix]=last"
2951                    data-predictive-term="Networking"
2952                    tabindex="-1"
2953                  >Networking</a>
2954                </li><li
2955                  class="predictive-search__list-item"
2956                  id="predictive-search-empty-cat-6"
2957                  role="option"
2958                  aria-selected="false"
2959                >
2960                  <a
2961                    class="ps-cat-chip"
2962                    href="/search?q=Gaming&type=product&options[prefix]=last"
2963                    data-predictive-term="Gaming"
2964                    tabindex="-1"
2965                  >Gaming</a>
2966                </li></ul>
2967        </div></div><div class="predictive-search__result-group">
2968        <div class="predictive-search__products">
2969          <h2 class="predictive-search__heading">Trending now</h2>
2970          <ul id="predictive-search-empty-products" class="predictive-search__results-list list-unstyled" role="group" aria-label="Trending now">
2971            <li
2972            class="predictive-search__list-item"
2973            id="predictive-search-empty-product-1"
2974            role="option"
2975            aria-selected="false"
2976          ><a
2977  href="/products/viewsonic-27-180hz-gaming-monitor"
2978  class="ps-card predictive-search__item"
2979  tabindex="-1"
2980>
2981  <span class="ps-card__media"><img
2982        class="ps-card__img"
2983        src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=300"
2984        alt="ViewSonic VX2779-HD-PRO 27-inch gaming monitor front view with IPS SuperClear wallpaper"
2985        width="150"
2986        height="150"
2987        loading="lazy"
2988      ><span class="ps-card__badge ps-card__badge--sale">-21%</span></span>
2989  <span class="ps-card__title">ViewSonic VX2779-HD-PRO 27&quot; Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10</span>
2990  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">
2990R 2,912</span>
2991      <s class="ps-card__price-was">R 3,699</s></span>
2992</a></li><li
2993            class="predictive-search__list-item"
2994            id="predictive-search-empty-product-2"
2995            role="option"
2996            aria-selected="false"
2997          ><a
2998  href="/products/viewsonic-24-240hz-gaming-monitor"
2999  class="ps-card predictive-search__item"
3000  tabindex="-1"
3001>
3002  <span class="ps-card__media"><img
3003        class="ps-card__img"
3004        src="//alcell.co.za/cdn/shop/files/xg2409a_a574014b-98ff-419f-b397-48b519d2d458.jpg?v=1782311881&width=300"
3005        alt="ViewSonic XG2409A 24-inch gaming monitor, front view with purple gaming screen art"
3006        width="150"
3007        height="150"
3008        loading="lazy"
3009      ><span class="ps-card__badge ps-card__badge--sale">-23%</span></span>
3010  <span class="ps-card__title">ViewSonic 24&quot; Full HD 240Hz IPS Gaming Monitor (XG2409A) - 1ms, HDR10, FreeSync</span>
3011  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 2,912</span>
3012      <s class="ps-card__price-was">R 3,799</s></span>
3013</a></li><li
3014            class="predictive-search__list-item"
3015            id="predictive-search-empty-product-3"
3016            role="option"
3017            aria-selected="false"
3018          ><a
3019  href="/products/ezviz-hb8-4k-smart-home-battery-camera"
3020  class="ps-card predictive-search__item"
3021  tabindex="-1"
3022>
3023  <span class="ps-card__media"><img
3024        class="ps-card__img"
3025        src="//alcell.co.za/cdn/shop/files/cs-hb8-4k.jpg?v=1778852212&width=300"
3026        alt="EZVIZ HB8 4K pan-tilt camera, front view of round housing and lens"
3027        width="150"
3028        height="150"
3029        loading="lazy"
3030      ><span class="ps-card__badge ps-card__badge--sale">-20%</span></span>
3031  <span class="ps-card__title">EZVIZ HB8 4K 8MP Battery Camera - Pan/Tilt, 10400mAh, Wi-Fi 6, IP65 (CS-HB8-R200-1M8WFL)</span>
3032  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 2,299</span>
3033      <s class="ps-card__price-was">R 2,899</s></span>
3034</a></li><li
3035            class="predictive-search__list-item"
3036            id="predictive-search-empty-product-4"
3037            role="option"
3038            aria-selected="false"
3039          ><a
3040  href="/products/viewsonic-24-full-hd-monitor-with-fast-2"
3041  class="ps-card predictive-search__item"
3042  tabindex="-1"
3043>
3044  <span class="ps-card__media"><img
3045        class="ps-card__img"
3046        src="//alcell.co.za/cdn/shop/files/va240a-h.jpg?v=1778850984&width=300"
3047        alt="ViewSonic VA240A-H monitor, front view with red screen showing 120Hz and IPS SuperClear branding"
3048        width="150"
3049        height="150"
3050        loading="lazy"
3051      ><span class="ps-card__badge ps-card__badge--sale">-21%</span></span>
3052  <span class="ps-card__title">ViewSonic VA240A-H 24&quot; Full HD IPS Monitor - 1080p, 120Hz, 1ms, HDMI &amp; VGA</span>
3053  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 1,796</span>
3054      <s class="ps-card__price-was">R 2,299</s></span>
3055</a></li><li
3056            class="predictive-search__list-item"
3057            id="predictive-search-empty-product-5"
3058            role="option"
3059            aria-selected="false"
3060          ><a
3061  href="/products/ezviz-h80x-8mp2mp-4mm-smart-home-camera"
3062  class="ps-card predictive-search__item"
3063  tabindex="-1"
3064>
3065  <span class="ps-card__media"><img
3066        class="ps-card__img"
3067        src="//alcell.co.za/cdn/shop/files/cs-h80x.jpg?v=1778847783&width=300"
3068        alt="EZVIZ H80x Dual outdoor camera, three-quarter view showing the dual lenses and IR array"
3069        width="150"
3070        height="150"
3071        loading="lazy"
3072      ><span class="ps-card__badge ps-card__badge--sale">-23%</span></span>
3073  <span class="ps-card__title">EZVIZ H80x Dual 4K 8MP+2MP Outdoor Pan &amp; Tilt Wi-Fi Camera - 360°, AI Tracking, ColorFULL</span>
3074  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 1,299</span>
3075      <s class="ps-card__price-was">R 1,699</s></span>
3076</a></li><li
3077            class="predictive-search__list-item"
3078            id="predictive-search-empty-product-6"
3079            role="option"
3080            aria-selected="false"
3081          ><a
3082  href="/products/viewsonic-185-hdmivga-monitor"
3083  class="ps-card predictive-search__item"
3084  tabindex="-1"
3085>
3086  <span class="ps-card__media"><img
3087        class="ps-card__img"
3088        src="//alcell.co.za/cdn/shop/files/va1903h-2.jpg?v=1778850980&width=300"
3089        alt="ViewSonic VA1903H-2 monitor, front view with red promotional screen and blue light filter branding"
3090        width="150"
3091        height="150"
3092        loading="lazy"
3093      ><span class="ps-card__badge ps-card__badge--sale">-20%</span></span>
3094  <span class="ps-card__title">ViewSonic VA1903H-2 18.5&quot; LED Monitor - 1366x768 HD, HDMI &amp; VGA, 5ms</span>
3095  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 1,269</span>
3096      <s class="ps-card__price-was">R 1,599</s></span>
3097</a></li><li
3098            class="predictive-search__list-item"
3099            id="predictive-search-empty-product-7"
3100            role="option"
3101            aria-selected="false"
3102          ><a
3103  href="/products/ezviz-c3tn-1080p-28mm-wifi-camera"
3104  class="ps-card predictive-search__item"
3105  tabindex="-1"
3106>
3107  <span class="ps-card__media"><img
3108        class="ps-card__img"
3109        src="//alcell.co.za/cdn/shop/files/cs-c3tn.jpg?v=1778847755&width=300"
3110        alt="EZVIZ C3TN outdoor Wi-Fi camera on wall mount bracket, three-quarter view"
3111        width="150"
3112        height="150"
3113        loading="lazy"
3114      ><span class="ps-card__badge ps-card__badge--sale">-19%</span></span>
3115  <span class="ps-card__title">EZVIZ C3TN 2MP 1080p Outdoor Wi-Fi Camera (CS-C3TN) - 2.8mm Lens, 30m IR, IP67, H.265</span>
3116  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 589</span>
3117      <s class="ps-card__price-was">R 729</s></span>
3118</a></li><li
3119            class="predictive-search__list-item"
3120            id="predictive-search-empty-product-8"
3121            role="option"
3122            aria-selected="false"
3123          ><a
3124  href="/products/hiksemi-wave-m2-pcie-30-nvme-128gb-ssd"
3125  class="ps-card predictive-search__item"
3126  tabindex="-1"
3127>
3128  <span class="ps-card__media"><img
3129        class="ps-card__img"
3130        src="//alcell.co.za/cdn/shop/files/6974202725693_1.jpg?v=1778847018&width=300"
3131        alt="HIKSEMI Wave 128GB M.2 NVMe SSD, front view of the drive on a white background"
3132        width="150"
3133        height="150"
3134        loading="lazy"
3135      ><span class="ps-card__badge ps-card__badge--sale">-35%</span></span>
3136  <span class="ps-card__title">
3136Hiksemi Wave 128GB M.2 NVMe SSD - PCIe 3.0, 2500MB/s, 3D NAND</span>
3137  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 389</span>
3138      <s class="ps-card__price-was">R 599</s></span>
3139</a></li><li
3140            class="predictive-search__list-item"
3141            id="predictive-search-empty-product-9"
3142            role="option"
3143            aria-selected="false"
3144          ><a
3145  href="/products/1-5m-standard-computer-power-cable-for-p"
3146  class="ps-card predictive-search__item"
3147  tabindex="-1"
3148>
3149  <span class="ps-card__media"><img
3150        class="ps-card__img"
3151        src="//alcell.co.za/cdn/shop/files/zt-pc-s15-1.jpg?v=1790696395&width=300"
3152        alt="1.5M Standard Computer Power Cable for P"
3153        width="150"
3154        height="150"
3155        loading="lazy"
3156      ><span class="ps-card__badge ps-card__badge--sale">-40%</span></span>
3157  <span class="ps-card__title">1.5m Computer Power Cable - SA 3-Pin to IEC for PC, Monitor &amp; UPS (ZT-PC-S15)</span>
3158  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 29</span>
3159      <s class="ps-card__price-was">R 49</s></span>
3160</a></li><li
3161            class="predictive-search__list-item"
3162            id="predictive-search-empty-product-10"
3163            role="option"
3164            aria-selected="false"
3165          ><a
3166  href="/products/1-5m-laptop-power-cable-for-notebook-use"
3167  class="ps-card predictive-search__item"
3168  tabindex="-1"
3169>
3170  <span class="ps-card__media"><img
3171        class="ps-card__img"
3172        src="//alcell.co.za/cdn/shop/files/zt-pc-l15-1.jpg?v=1790696393&width=300"
3173        alt="1.5M Laptop Power Cable for Notebook Use"
3174        width="150"
3175        height="150"
3176        loading="lazy"
3177      ><span class="ps-card__badge ps-card__badge--sale">-40%</span></span>
3178  <span class="ps-card__title">1.5m Laptop Charger Power Cable - SA Mains Lead for Notebook Adapters (ZT-PC-L15)</span>
3179  <span class="ps-card__price"><span class="ps-card__price-now ps-card__price-now--sale">R 29</span>
3180      <s class="ps-card__price-was">R 49</s></span>
3181</a></li>
3182          </ul>
3183        </div>
3184      </div></div>
3185</div>
3186<div class="ps-skeleton" data-predictive-skeleton aria-hidden="true">
3187  <div class="predictive-search__results-groups-wrapper"><div class="predictive-search__result-group">
3188      <span class="ps-skel ps-skel--heading"></span>
3189      <div class="ps-skel__rows"><span class="ps-skel ps-skel--row"></span><span class="ps-skel ps-skel--row"></span><span class="ps-skel ps-skel--row"></span><span class="ps-skel ps-skel--row"></span><span class="ps-skel ps-skel--row"></span><span class="ps-skel ps-skel--row"></span></div>
3190    </div><div class="predictive-search__result-group"><div class="predictive-search__products">
3191        <div class="ps-skel__head">
3192          <span class="ps-skel ps-skel--heading"></span>
3193          <span class="ps-skel ps-skel--pill"></span>
3194        </div>
3195        <div class="ps-skeleton__grid"><div class="ps-skel-card">
3196              <span class="ps-skel ps-skel-card__media"></span>
3197              <span class="ps-skel-card__text">
3198                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
3199                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
3200              </span>
3201              <span class="ps-skel-card__price">
3202                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
3203              </span>
3204            </div><div class="ps-skel-card">
3205              <span class="ps-skel ps-skel-card__media"></span>
3206              <span class="ps-skel-card__text">
3207                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
3208                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
3209              </span>
3210              <span class="ps-skel-card__price">
3211                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
3212              </span>
3213            </div><div class="ps-skel-card">
3214              <span class="ps-skel ps-skel-card__media"></span>
3215              <span class="ps-skel-card__text">
3216                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
3217                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
3218              </span>
3219              <span class="ps-skel-card__price">
3220                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
3221              </span>
3222            </div><div class="ps-skel-card">
3223              <span class="ps-skel ps-skel-card__media"></span>
3224              <span class="ps-skel-card__text">
3225                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
3226                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
3227              </span>
3228              <span class="ps-skel-card__price">
3229                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
3230              </span>
3231            </div><div class="ps-skel-card">
3232              <span class="ps-skel ps-skel-card__media"></span>
3233              <span class="ps-skel-card__text">
3234                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
3235                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
3236              </span>
3237              <span class="ps-skel-card__price">
3238                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
3239              </span>
3240            </div><div class="ps-skel-card">
3241              <span class="ps-skel ps-skel-card__media"></span>
3242              <span class="ps-skel-card__text">
3243                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
3244                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
3245              </span>
3246              <span class="ps-skel-card__price">
3247                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
3248              </span>
3249            </div><div class="ps-skel-card">
3250              <span class="ps-skel ps-skel-card__media"></span>
3251              <span class="ps-skel-card__text">
3252                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
3253                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
3254              </span>
3255              <span class="ps-skel-card__price">
3256                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
3257              </span>
3258            </div><div class="ps-skel-card">
3259              <span class="ps-skel ps-skel-card__media"></span>
3260              <span class="ps-skel-card__text">
3261                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
3262                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
3263              </span>
3264              <span class="ps-skel-card__price">
3265                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
3266              </span>
3267            </div><div class="ps-skel-card">
3268              <span class="ps-skel ps-skel-card__media"></span>
3269              <span class="ps-skel-card__text">
3270                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
3271                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
3272              </span>
3273              <span class="ps-skel-card__price">
3274                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
3275              </span>
3276            </div><div class="ps-skel-card">
3277              <span class="ps-skel ps-skel-card__media"></span>
3278              <span class="ps-skel-card__text">
3279                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title"></span>
3280                <span class="ps-skel ps-skel-card__line ps-skel-card__line--title2"></span>
3281              </span>
3282              <span class="ps-skel-card__price">
3283                <span class="ps-skel ps-skel-card__line ps-skel-card__line--price"></span>
3284              </span>
3285            </div></div>
3286      </div>
3287    </div>
3288
3289  </div>
3290</div>
3291<div class="predictive-search__results-panel" data-predictive-search></div>
3292        </div>
3293        <span class="predictive-search-status visually-hidden" role="status" aria-hidden="true"></span></form></predictive-search></div>
3294
3295<script>
3296  (function () {
3297    var drawer = document.querySelector('[data-msearch]');
3298    if (!drawer) return;
3299
3300    var input = drawer.querySelector('input[type="search"]');
3301    var mq = window.matchMedia('(max-width: 989px)');
3302    var isMobile = function () { return mq.matches; };
3303    var closing = false;
3304    var scrollY = 0;
3305
3306    // Pin the body in place so the page behind the full-screen drawer can't
3307    // scroll. overflow:hidden alone is ignored by iOS Safari for touch scroll;
3308    // position:fixed with a negative top is the reliable lock. The negative top
3309    // keeps the page visually still, and we restore the exact scroll on unlock.
3310    function lockScroll() {
3311      scrollY = window.scrollY || window.pageYOffset || 0;
3312      document.body.style.top = -scrollY + 'px';
3313      document.body.classList.add('msearch-lock');
3314    }
3315    function unlockScroll() {
3316      document.body.classList.remove('msearch-lock');
3317      document.body.style.top = '';
3318      window.scrollTo(0, scrollY);
3319    }
3320
3321    function open() {
3322      if (!isMobile() || drawer.classList.contains('is-open')) return;
3323      closing = false;
3324      lockScroll();
3325      drawer.classList.add('is-active');
3326      // Force a reflow so the fade/rise transitions run from the hidden state.
3327      void drawer.offsetWidth;
3328      drawer.classList.add('is-open');
3329      drawer.setAttribute('aria-hidden', 'false');
3330      // Focus synchronously (still inside the user gesture) so iOS opens the
3331      // keyboard; the empty state shows via predictive-search's focus handler.
3332      if (input) {
3333        try { input.focus({ preventScroll: true }); } catch (e) { input.focus(); }
3334      }
3335    }
3336
3337    function close() {
3338      if (!drawer.classList.contains('is-open')) return;
3339      closing = true;
3340      drawer.classList.remove('is-open');
3341      drawer.setAttribute('aria-hidden', 'true');
3342      unlockScroll();
3343      if (input) input.blur();
3344    }
3345
3346    // Unmount (display:none) only after the fade-out finishes.
3347    drawer.addEventListener('transitionend', function (e) {
3348      if (closing && e.target === drawer && e.propertyName === 'opacity') {
3349        drawer.classList.remove('is-active');
3350        closing = false;
3351      }
3352    });
3353
3354    drawer.querySelectorAll('[data-msearch-close]').forEach(function (btn) {
3355      btn.addEventListener('click', function (e) { e.preventDefault(); close(); });
3356    });
3357
3358    document.addEventListener('keydown', function (e) {
3359      if (e.key === 'Escape' && drawer.classList.contains('is-open')) close();
3360    });
3361
3362    // Trigger 1 — the header's inline search field. Desktop behaviour is left
3363    // alone; on mobile we block its own focus/dropdown and open the drawer.
3364    var headerInput = document.querySelector('.tk-search-wrap input[type="search"]');
3365    if (headerInput) {
3366      headerInput.addEventListener('mousedown', function (e) {
3367        if (isMobile()) { e.preventDefault(); open(); }
3368      });
3369      headerInput.addEventListener('click', function (e) {
3370        if (isMobile()) { e.preventDefault(); open(); }
3371      });
3372      headerInput.addEventListener('focus', function () {
3373        if (isMobile()) { headerInput.blur(); open(); }
3374      });
3375    }
3376
3377    // The header's magnifier icon mirrors clicking the bar itself: open the
3378    // drawer on mobile, focus/open the dropdown on desktop. It never fires an
3379    // (often empty) form submit anymore. Enter still submits a typed query.
3380    var headerSubmit = document.querySelector('.tk-search-wrap button[type="submit"]');
3381    if (headerSubmit) {
3382      headerSubmit.addEventListener('mousedown', function (e) { e.preventDefault(); });
3383      headerSubmit.addEventListener('click', function (e) {
3384        e.preventDefault();
3385        if (isMobile()) { open(); }
3386        else if (headerInput) { headerInput.focus(); }
3387      });
3388    }
3389
3390    // Trigger 2 — the bottom tab-bar "Search" button. Delegated so it works
3391    // regardless of script/DOM order, on every page (the drawer lives outside
3392    // the header, so it's available even where the header is hidden).
3393    document.addEventListener('click', function (e) {
3394      var t = e.target.closest('[data-m-search]');
3395      if (!t) return;
3396      e.preventDefault();
3397      if (isMobile()) { open(); }
3398      else if (headerInput) { headerInput.focus(); }
3399    });
3400
3401    // Resizing up to desktop while open: tidy up.
3402    var onMq = function () { if (!isMobile()) close(); };
3403    if (mq.addEventListener) { mq.addEventListener('change', onMq); }
3404    else if (mq.addListener) { mq.addListener(onMq); }
3405  })();
3406</script>
3406
3407<tk-sticky-bar>
3408  <header class="tksb" role="banner" aria-label="Condensed navigation bar">
3409    <div class="tksb__grid"><div class="tksb__left">
3410        <button type="button" class="tksb__burger" data-tksb-burger aria-label="Open menu">
3411          <span class="tksb__burger-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-hamburger" viewBox="0 0 18 16"><path fill="currentColor" d="M1 .5a.5.5 0 1 0 0 1h15.71a.5.5 0 0 0 0-1zM.5 8a.5.5 0 0 1 .5-.5h15.71a.5.5 0 0 1 0 1H1A.5.5 0 0 1 .5 8m0 7a.5.5 0 0 1 .5-.5h15.71a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5"/></svg>
3412</span>
3413        </button>
3414        <a href="/" class="tksb__logo" aria-label="Alcell">
3415          <img
3416            src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/Alcell_logo.svg?v=1778845706"
3417            alt="Alcell"
3418            width="120" height="34" loading="lazy"
3419          >
3420        </a>
3421      </div><nav class="tksb__nav" aria-label="Primary">
3422        <a class="tksb__link" href="/"><span>Home</span></a>
3423        <a class="tksb__link" href="/collections/all"><span>All Products</span></a>
3424        <a class="tksb__link" href="/collections/security-surveillance"><span>Surveillance</span></a>
3425        <a class="tksb__link" href="/collections/tvs-screens"><span>Monitors &amp; Displays</span></a>
3426        <a class="tksb__link" href="/collections/computers"><span>Computers</span></a>
3427        <a class="tksb__link" href="/collections/networking"><span>Networking</span></a>
3428      </nav><div class="tksb__actions">
3429        <button type="button" class="tksb__icon tksb__icon--search" data-m-search aria-label="Search">
3430          <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
3431            <circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.65" y2="16.65"/>
3432          </svg>
3433        </button><a href="/pages/wishlist" class="tksb__icon tksb__icon--wishlist" aria-label="Wishlist">
3434          <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
3435            <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/>
3436          </svg>
3437          <span class="tksb__count tksb__count--wishlist" data-wishlist-count hidden></span>
3438        </a>
3439
3440        <a href="/cart" class="tksb__icon tksb__icon--cart" aria-label="Cart">
3441          <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
3442            <path d="M7.5 18a1.75 1.75 0 100 3.5 1.75 1.75 0 000-3.5zm9 0a1.75 1.75 0 100 3.5 1.75 1.75 0 000-3.5zM2 3a1 1 0 000 2h1.6l2.5 10.6A2 2 0 008 17h9.3a2 2 0 002-1.55l1.9-8.2A1 1 0 0020.2 6H6.3l-.5-2.2A1 1 0 004.8 3H2z"/>
3443          </svg>
3444          <span class="tksb__count is-empty" data-cart-count>0</span>
3445        </a>
3446      </div>
3447
3448    </div>
3449  </header>
3450</tk-sticky-bar><style>
3451  tk-sticky-bar {
3452    /* Brand palette (icon badges + hover underline) */
3453    --tksb-red: #de4949;
3454    --tksb-navy: #2a3270;
3455    --tksb-navy-deep: #222a5e;
3456    --tksb-ink: #0e1411;
3457    --tksb-bg: rgba(255, 255, 255, 0.86);
3458    --tksb-h: 94px; /* taller bar = more top/bottom breathing room around the content */
3459  }
3460
3461  .tksb {
3462    position: fixed;
3463    top: 0; left: 0; right: 0;
3464    z-index: 500; /* above page content, below drawers/modals */
3465    height: var(--tksb-h);
3466    background: var(--tksb-bg);
3467    -webkit-backdrop-filter: saturate(180%) blur(18px);
3468    backdrop-filter: saturate(180%) blur(18px);
3469    border-bottom: 1px solid rgba(14, 20, 17, 0.08);
3470    box-shadow: 0 6px 24px -12px rgba(0, 0, 0, 0.22);
3471    /* Reveal = pure cross-fade, NO positional movement.
3472       The "half-pixel shuffle when the animation ends" is a sub-pixel
3473       re-rasterisation snap: an animated *transform* lives on a GPU layer
3474       mid-flight and then re-rasters its content onto the pixel grid when it
3475       settles, so everything nudges. We remove that entirely by never animating
3476       position — only opacity changes. A CONSTANT translateZ(0) keeps the bar
3477       permanently on its own compositor layer (it never changes, so it never
3478       re-rasterises), and will-change:opacity stops the opacity layer from
3479       flattening at the end. Nothing moves → nothing can shuffle. */
3480    opacity: 0;
3481    visibility: hidden;
3482    transform: translateZ(0);
3483    -webkit-transform: translateZ(0);
3484    will-change: opacity;
3485    -webkit-backface-visibility: hidden;
3486    backface-visibility: hidden;
3487    transition:
3488      opacity 360ms cubic-bezier(0.22, 1, 0.36, 1),
3489      visibility 0s linear 360ms; /* delay hiding visibility until the fade-out ends */
3490  }
3491
3492  .tksb.is-visible {
3493    opacity: 1;
3494    visibility: visible;
3495    transition:
3496      opacity 360ms cubic-bezier(0.22, 1, 0.36, 1),
3497      visibility 0s; /* show visibility immediately */
3498  }
3499
3500  .tksb__grid {
3501    height: 100%;
3502    max-width: 1600px;
3503    margin: 0 auto;
3504    padding: 0 24px;
3505    display: grid;
3506    grid-template-columns: 1fr auto 1fr;
3507    align-items: center;
3508    gap: 16px;
3509  }
3510
3511  /* LEFT */
3512  .tksb__left { display: flex; align-items: center; gap: 10px; min-width: 0; }
3513  /* Brand mark — same size as the main header (64px), fully contained within
3514     the bar so nothing overflows the hairline. */
3515  .tksb__logo { display: inline-flex; align-items: center; }
3516  .tksb__logo img { display: block; height: 64px; width: auto; }
3517
3518  /* Burger — identical to the main header's: 40px button, 26px icon-hamburger.svg,
3519     brand navy #2a3270 with bars thickened by a same-colour stroke (matches
3520     alcell-header's .tk-drawer__toggle). */
3521  .tksb__burger {
3522    display: none; /* desktop: hidden */
3523    align-items: center; justify-content: center;
3524    width: 40px; height: 40px;
3525    padding: 0;
3526    border: 0; background: transparent; color: #2a3270; cursor: pointer;
3527  }
3528  /* Icon renders at 20px inside a centred 26px wrapper — the main header's
3529     burger inherits Dawn's `.header__icon--menu .icon{position:absolute}` so it
3530     actually draws 20×20 (NOT the 26px its wrapper suggests). Match that. */
3531  .tksb__burger-icon { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; }
3532  .tksb__burger-icon svg { width: 20px; height: 20px; display: block; }
3533  .tksb__burger-icon svg path { stroke: currentColor; stroke-width: 1; }
3534
3535  /* CENTER NAV */
3536  .tksb__nav { display: flex; align-items: center; justify-content: center; gap: 28px; }
3537  .tksb__link {
3538    position: relative;
3539    font-size: 15px;
3540    line-height: 1;
3541    letter-spacing: 0.01em;
3542    color: var(--tksb-ink);
3543    text-decoration: none;
3544    padding: 6px 0;
3545    white-space: nowrap;
3546  }
3547  .tksb__link span { display: inline-block; }
3548  .tksb__link::after {
3549    content: "";
3550    position: absolute;
3551    left: 0; right: 0; bottom: 0;
3552    height: 2px;
3553    background: var(--tksb-red);
3554    transform: scaleX(0);
3555    transform-origin: center;
3556    transition: transform 220ms ease;
3557  }
3558  .tksb__link:hover::after,
3559  .tksb__link:focus-visible::after { transform: scaleX(1); }
3560
3561  /* RIGHT ACTIONS — circular icon badges */
3562  .tksb__actions { display: flex; align-items: center; justify-content: flex-end; gap: 12px; }
3563  .tksb__icon {
3564    position: relative;
3565    display: inline-flex;
3566    align-items: center; justify-content: center;
3567    width: 44px; height: 44px;
3568    border: 0; border-radius: 50%;
3569    color: #fff;
3570    cursor: pointer;
3571    text-decoration: none;
3572    transition: transform 160ms ease, filter 160ms ease;
3573  }
3574  .tksb__icon:hover { transform: translateY(-1px); filter: brightness(1.06); }
3575  .tksb__icon svg { width: 20px; height: 20px; }
3576  .tksb__icon--search   { background: var(--tksb-ink); }   /* black */
3577  .tksb__icon--wishlist { background: var(--tksb-red); }   /* red */
3578  .tksb__icon--cart     { background: var(--tksb-navy); }  /* blue */
3579
3580  /* Count bubble — pinned to the outer top-right with a ring in the bar bg.
3581     Centred the same way the main header does it: a fixed square box with
3582     line-height equal to its height (vertical) + text-align centre (horizontal).
3583     This is more reliable than flex/grid for a single small glyph. */
3584  .tksb__count {
3585    position: absolute;
3586    top: -4px; right: -4px;
3587    min-width: 16px; height: 16px;
3588    /* Same box/centring logic as the main header (16px, line-height == height,
3589       text-align centre). The extra 1px of LEFT padding optically centres the
3590       numeral: a single "1" sits left within its glyph box, so pure centring
3591       reads as left-of-centre. Net horizontal padding stays 6px → still a circle. */
3592    padding: 0 2px 0 4px;
3593    font-size: 10px; font-weight: 700;
3594    line-height: 16px;            /* == height → vertically centred (same as main header) */
3595    text-align: center;           /* horizontally centred */
3596    color: #fff;
3597    border-radius: 8px;
3598    box-shadow: 0 0 0 2px var(--tksb-bg); /* ring in the bar bg so it stays legible */
3599  }
3600  /* Count colours match their badge: wishlist red, cart blue */
3601  .tksb__icon--wishlist .tksb__count { background: var(--tksb-red); }
3602  .tksb__icon--cart .tksb__count     { background: var(--tksb-navy); }
3603  .tksb__count.is-empty,
3604  .tksb__count[hidden] { display: none; }
3605
3606  /* RESPONSIVE — mobile ≤990px */
3607  @media (max-width: 990px) {
3608    /* Match the main header's mobile background (#F1F2F4, set on .tk-header at
3609       this breakpoint) so the sticky bar blends with the header / Safari
3610       status-bar area instead of reading as a disconnected white strip. Kept
3611       slightly translucent so the frosted-glass effect stays. Mobile only —
3612       desktop keeps the frosted white. */
3613    tk-sticky-bar { --tksb-h: 86px; --tksb-bg: rgba(241, 242, 244, 0.86); }
3614    .tksb__nav { display: none; }             /* hide center nav */
3615    .tksb__burger { display: flex; }          /* show hamburger */
3616    .tksb__grid {
3617      grid-template-columns: auto 1fr auto;    /* burger | centred logo | actions */
3618      padding: 0 16px;
3619    }
3620    /* The hidden nav is removed from the grid, so without explicit placement the
3621       actions would auto-flow into the MIDDLE column and look centred. Pin the
3622       burger to column 1 and the actions to column 3 so the icons stay hard right. */
3623    .tksb__left { grid-column: 1; justify-content: flex-start; }
3624    .tksb__actions { grid-column: 3; gap: 8px; } /* match main header's .tk-cartgroup gap */
3625    .tksb__icon--wishlist { display: none; }  /* mobile: search + cart only */
3626    .tksb__logo {
3627      justify-self: center;
3628      position: absolute; left: 50%; transform: translateX(-50%);
3629    }
3630    .tksb__logo img { height: 56px; } /* match the main header's mobile logo size */
3631
3632    /* Icons mirror the main header on mobile: 40px circles, 20px glyphs,
3633       search = red (like the wishlist heart), cart = navy. */
3634    .tksb__icon { width: 40px; height: 40px; }
3635    .tksb__icon svg { width: 20px; height: 20px; }
3636    .tksb__icon--search { background: var(--tksb-red); } /* red, not black, on mobile */
3637    .tksb__icon--cart   { background: var(--tksb-navy); }
3638
3639    /* Count badge — identical to the main header's mobile badge: symmetric
3640       padding, solid 1.5px white ring (no optical nudge / frosted ring here). */
3641    .tksb__count {
3642      padding: 0 3px;
3643      box-shadow: 0 0 0 1.5px #fff;
3644    }
3645
3646    /* The existing burger drawer (#Details-menu-drawer-container) lives inside
3647       .tk-header, which is hidden on mobile collection/search/product/cart
3648       pages. When our sticky-bar burger opens it there, reveal .tk-header so the
3649       (position:fixed, full-screen, z-index:9999) drawer panel can render. The
3650       rest of the header sits in normal flow behind the opaque panel and is
3651       never seen; body scroll is locked while the drawer is open. No-op on
3652       pages where .tk-header is already visible. */
3653    body:has(#Details-menu-drawer-container[open]) .tk-header { display: block !important; }
3654
3655    /* ── Suppress the sticky bar on pages with a PERMANENT in-page header ──
3656       Product/collection/search/cart/wishlist pages replace the site header on
3657       mobile with their own permanent top bar (Back · title · search · cart).
3658       On those pages the condensed sticky header is redundant and overlaps the
3659       permanent bar as you scroll up — the "glitch". Detect any of the known
3660       permanent-header bars and hide the sticky bar (mobile only; desktop, which
3661       keeps the full .tk-header, is unaffected because this is media-scoped).
3662       Keys off the bar's actual presence in the DOM, so the product page's
3663       reviews "View all" modal is covered too (it lives on the product page,
3664       which has .mtopbar). */
3665    body:has(.mtopbar) tk-sticky-bar,
3666    body:has(.tkcol__topbar) tk-sticky-bar,
3667    body:has(.mcart-topbar) tk-sticky-bar,
3668    body:has(.wl-topbar) tk-sticky-bar {
3669      display: none !important;
3670    }
3671  }
3672
3673  /* Respect reduced-motion — disable transitions/animations */
3674  @media (prefers-reduced-motion: reduce) {
3675    .tksb,
3676    .tksb.is-visible { transition: none; }
3677    .tksb__link::after { transition: none; }
3678    .tksb__icon { transition: none; }
3679  }
3680</style>
3680<script>
3681  (function () {
3682    if (customElements.get('tk-sticky-bar')) return;
3683
3684    class TkStickyBar extends HTMLElement {
3685      constructor() {
3686        super();
3687        this.threshold = 400;   // px from top before the bar may appear
3688        this.showDelta = 6;     // up-scroll needed to reveal
3689        this.hideDelta = 14;    // down-scroll needed to hide — larger so trackpad
3690                                // momentum jitter while revealing can't flicker it
3691        this.lastY = window.scrollY || window.pageYOffset || 0;
3692        this.anchorY = this.lastY; // reference point for accumulating direction
3693        this.ticking = false;
3694        this.longEnough = false; // adaptive: only operate on pages long enough to scroll
3695        this.onScroll = this.onScroll.bind(this);
3696        this.update = this.update.bind(this);
3697        this.measureLength = this.measureLength.bind(this);
3698      }
3699
3700      connectedCallback() {
3701        this.bar = this.querySelector('.tksb');
3702
3703        // Burger → open the existing native <details> menu drawer.
3704        var burger = this.querySelector('[data-tksb-burger]');
3705        if (burger) {
3706          burger.addEventListener('click', function () {
3707            var d = document.getElementById('Details-menu-drawer-container');
3708            if (d) {
3709              d.open = true;
3710              var summary = d.querySelector('summary');
3711              if (summary) summary.setAttribute('aria-expanded', 'true');
3712            }
3713          });
3714        }
3715        // The search button uses the existing [data-m-search] delegated handler,
3716        // so no extra wiring is needed here.
3717
3718        window.addEventListener('scroll', this.onScroll, { passive: true });
3719        // Length-adaptive: re-evaluate whether the page is long enough on resize
3720        // and after load (when the true page height is known).
3721        window.addEventListener('resize', this.measureLength, { passive: true });
3722        window.addEventListener('load', this.measureLength);
3723        this.measureLength();
3724      }
3725
3726      disconnectedCallback() {
3727        window.removeEventListener('scroll', this.onScroll);
3728        window.removeEventListener('resize', this.measureLength);
3729        window.removeEventListener('load', this.measureLength);
3730      }
3731
3732      // The bar only operates on LONG pages — those you can scroll by at least a
3733      // full viewport. Short pages (short products, short content) never reveal it.
3734      // Cheap, cached: read once here (resize/load), never in the per-frame path.
3735      measureLength() {
3736        this.longEnough = (document.documentElement.scrollHeight - window.innerHeight) >= window.innerHeight;
3737      }
3738
3739      onScroll() {
3740        if (this.ticking) return;
3741        this.ticking = true;
3742        requestAnimationFrame(this.update);
3743      }
3744
3745      update() {
3746        this.ticking = false;
3747
3748        // Short page → the bar is disabled entirely (adaptive by length).
3749        if (!this.longEnough) {
3750          this.bar.classList.remove('is-visible');
3751          return;
3752        }
3753
3754        var current = window.scrollY || window.pageYOffset || 0;
3755
3756        // Near the top: the main header owns this zone — always hide.
3757        if (current <= this.threshold) {
3758          this.bar.classList.remove('is-visible');
3759          this.lastY = current;
3760          this.anchorY = current;
3761          return;
3762        }
3763
3764        // Reset the anchor whenever direction flips, then measure how far we've
3765        // travelled in the current direction. Acting on the accumulated distance
3766        // (not the per-frame delta) is what stops momentum jitter from toggling
3767        // the class mid-animation — the cause of the "amateur" stutter.
3768        if ((current - this.lastY) * (this.lastY - this.anchorY) < 0) {
3769          this.anchorY = this.lastY;
3770        }
3771        var travel = current - this.anchorY;
3772
3773        if (travel <= -this.showDelta) {
3774          this.bar.classList.add('is-visible');       // travelled up far enough
3775        } else if (travel >= this.hideDelta) {
3776          this.bar.classList.remove('is-visible');     // travelled down far enough
3777        }
3778        this.lastY = current;
3779      }
3780    }
3781
3782    customElements.define('tk-sticky-bar', TkStickyBar);
3783  })();
3784</script>
3784
3785<tk-scroll-top data-footer-locked>
3786  <button type="button" class="tkstt" aria-label="Scroll back to top">
3787    <svg width="20" height="20" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
3788      <polyline points="4,13 10,6 16,13"></polyline>
3789    </svg>
3790  </button>
3791</tk-scroll-top>
3792
3793<style>
3794  .tkstt {
3795    position: fixed;
3796    bottom: 24px;
3797    right: 24px; /* refined at runtime to match the carousel "next" button */
3798    z-index: 450; /* above content, below drawers/modals */
3799    /* ── identical to .ftabs__nav-btn ── */
3800    width: 40px; height: 40px; border-radius: 50%;
3801    background: #F4F5F7; border: 0;
3802    box-shadow: 0 2px 8px rgba(0, 0, 0, .08);
3803    color: #1B1B1B;
3804    display: flex; align-items: center; justify-content: center;
3805    padding: 0; cursor: pointer;
3806    /* Reveal: subtle fade + rise, no layout shift. */
3807    opacity: 0;
3808    visibility: hidden;
3809    transform: translateY(6px);
3810    transition:
3811      opacity 240ms cubic-bezier(0.22, 1, 0.36, 1),
3812      transform 240ms cubic-bezier(0.22, 1, 0.36, 1),
3813      visibility 0s linear 240ms,
3814      background 200ms ease, color 200ms ease;
3815  }
3816  .tkstt svg { display: block; }
3817  .tkstt.is-visible {
3818    opacity: 1; visibility: visible; transform: translateY(0);
3819    transition:
3820      opacity 240ms cubic-bezier(0.22, 1, 0.36, 1),
3821      transform 240ms cubic-bezier(0.22, 1, 0.36, 1),
3822      visibility 0s,
3823      background 200ms ease, color 200ms ease;
3824  }
3825  .tkstt:hover { background: #E6E8EC; color: #2a3270; }
3826  .tkstt:active { transform: translateY(0) scale(0.96); }
3827  .tkstt:focus-visible { outline: 2px solid #2a3270; outline-offset: 2px; }
3828
3829  /* MOBILE ONLY: docked into the footer (absolute, half-in/half-out on its top
3830     edge). Applied by JS at ≤989px; desktop never gets this class. `top` is
3831     relative to the footer's PADDING box, so it lands on the dark footer edge
3832     even on the homepage's white-banded footer. */
3833  .tkstt--docked {
3834    position: absolute;
3835    top: -20px;
3836    bottom: auto;
3837    z-index: 10;
3838  }
3839
3840  @media (prefers-reduced-motion: reduce) {
3841    .tkstt, .tkstt.is-visible { transition: background 200ms ease, color 200ms ease; }
3842  }
3843</style>
3844
3845<script>
3846  (function () {
3847    if (customElements.get('tk-scroll-top')) return;
3848
3849    class TkScrollTop extends HTMLElement {
3850      constructor() {
3851        super();
3852        this.ticking = false;
3853        // Cached layout values — refreshed only by measure() (resize/load), never
3854        // in the per-frame scroll path.
3855        this.footer = null;
3856        this.borderTop = 0; // home footer's white border-top band (skipped)
3857        this.btnH = 40;     // button height
3858        this.rightPx = 8;   // horizontal alignment to the carousel chevron column
3859        this.restBottom = 24;          // floating rest position (mobile lifts above the tab bar)
3860        this.lockedByTemplate = false; // brand/contact/product: always footer-locked
3861        this.longEnough = false;       // page tall enough to float (else footer-locked)
3862        this.isMobile = false;         // ≤989px → dock into the footer (native, no jump)
3863        this.docked = false;           // mobile only: button moved into the footer
3864        this.io = null;                // mobile only: IntersectionObserver reveal
3865        this.onScroll = this.onScroll.bind(this);
3866        this.onResize = this.onResize.bind(this);
3867        this.update = this.update.bind(this);
3868      }
3869
3870      connectedCallback() {
3871        this.btn = this.querySelector('.tkstt');
3872        // Set by Liquid on brand/content (page) + product templates — these
3873        // always footer-lock instead of floating.
3874        this.lockedByTemplate = this.hasAttribute('data-footer-locked');
3875
3876        this.btn.addEventListener('click', function () {
3877          var reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
3878          window.scrollTo({ top: 0, behavior: reduce ? 'auto' : 'smooth' });
3879        });
3880        window.addEventListener('scroll', this.onScroll, { passive: true });
3881        window.addEventListener('resize', this.onResize, { passive: true });
3882        // The footer & carousels parse AFTER this header snippet, so the first
3883        // accurate measure happens on load; resize keeps it correct thereafter.
3884        window.addEventListener('load', this.onResize);
3885        this.measure();
3886        this.update();
3887      }
3888
3889      disconnectedCallback() {
3890        window.removeEventListener('scroll', this.onScroll);
3891        window.removeEventListener('resize', this.onResize);
3892        window.removeEventListener('load', this.onResize);
3893        if (this.io) this.io.disconnect();
3894      }
3895
3896      // COLD path — everything that only changes on resize/layout is computed and
3897      // cached here, so the scroll handler does zero querySelector/getComputedStyle.
3898      measure() {
3899        if (!this.footer) this.footer = document.querySelector('.alcell-footer');
3900        this.btnH = this.btn.offsetHeight || 40;
3901        this.isMobile = window.matchMedia('(max-width: 989px)').matches;
3902        // Floating rest position: lift above the bottom tab bar on mobile.
3903        this.restBottom = window.matchMedia('(max-width: 990px)').matches ? 74 : 24;
3904        // Long enough to float? (scrollable by at least one viewport.) Pages that
3905        // aren't long enough fall back to footer-locked so the button still shows.
3906        this.longEnough = (document.documentElement.scrollHeight - window.innerHeight) >= window.innerHeight;
3907        // Home footer's white border-top band (48/64px) — skip it so the button
3908        // locks to the footer's VISIBLE dark top. Other pages: 0.
3909        this.borderTop = this.footer ? (parseFloat(getComputedStyle(this.footer).borderTopWidth) || 0) : 0;
3910
3911        // Align the right edge to the carousel "next" chevron. clientWidth EXCLUDES
3912        // the scrollbar, matching getBoundingClientRect + the CSS `right` reference
3913        // (innerWidth would be off by the scrollbar width). The chevron's x is fixed
3914        // horizontally, so this only needs recomputing on resize — not per frame.
3915        var vw = document.documentElement.clientWidth;
3916        var ref = document.querySelector('.vs__nav--next') || document.querySelector('.ftabs__nav-btn--next');
3917        var rightPx = null;
3918        if (ref) {
3919          var r = ref.getBoundingClientRect();
3920          if (r.width > 0) rightPx = vw - r.right;
3921        }
3922        if (rightPx == null) rightPx = (vw - 1600) / 2 + 8; // brand-chevron x when no carousel present
3923        this.rightPx = Math.max(8, rightPx);
3924        this.btn.style.right = this.rightPx + 'px';
3925
3926        // MOBILE ONLY: dock into the footer. DESKTOP keeps the original fixed
3927        // float / edge-ride handled per-frame in update() (unchanged).
3928        if (this.isMobile && !this.docked && this.footer) this.dock();
3929        else if (!this.isMobile && this.docked) this.undock();
3930      }
3931
3932      dock() {
3933        this.docked = true;
3934        if (getComputedStyle(this.footer).position === 'static') {
3935          this.footer.style.position = 'relative';
3936        }
3937        this.footer.appendChild(this.btn);
3938        this.btn.classList.add('tkstt--docked');
3939        this.btn.style.bottom = 'auto';
3940        this.btn.style.top = '';
3941        // Reveal off the scroll path (fades in as it scrolls into view).
3942        if (!('IntersectionObserver' in window)) {
3943          this.btn.classList.add('is-visible');
3944          return;
3945        }
3946        var self = this;
3947        this.io = new IntersectionObserver(function (entries) {
3948          self.btn.classList.toggle('is-visible', entries[0].isIntersecting);
3949        });
3950        this.io.observe(this.btn);
3951      }
3952
3953      // Restore the original desktop (fixed) button if the viewport grows past the
3954      // mobile breakpoint (e.g. desktop dev-tools resize / tablet rotation).
3955      undock() {
3956        this.docked = false;
3957        if (this.io) { this.io.disconnect(); this.io = null; }
3958        this.btn.classList.remove('tkstt--docked', 'is-visible');
3959        this.btn.style.top = '';
3960        this.btn.style.bottom = '';   // update() sets this per-frame on desktop
3961        this.appendChild(this.btn);   // move back into <tk-scroll-top> (header)
3962      }
3963
3964      onResize() {
3965        this.measure();
3966        this.onScroll();
3967      }
3968
3969      onScroll() {
3970        if (this.ticking) return;
3971        this.ticking = true;
3972        requestAnimationFrame(this.update);
3973      }
3974
3975      // HOT path (per scroll frame). On MOBILE the button is docked (native), so
3976      // this returns immediately — no per-frame work. On DESKTOP it runs the
3977      // original fixed float / footer-edge-ride, exactly as before.
3978      update() {
3979        this.ticking = false;
3980
3981        // Footer hadn't parsed yet at connect; grab it once when it appears and
3982        // re-measure the cached values that depend on it. (Runs only until found.)
3983        if (!this.footer) {
3984          this.footer = document.querySelector('.alcell-footer');
3985          if (this.footer) this.measure();
3986        }
3987
3988        // MOBILE: docked into the footer (position: absolute), revealed via
3989        // IntersectionObserver — nothing to compute per scroll frame.
3990        if (this.docked) return;
3991
3992        // ── DESKTOP: unchanged original behaviour ──
3993        // ── READ (single layout pass; no writes interleaved) ──
3994        var winH = window.innerHeight;
3995        var max = document.documentElement.scrollHeight - winH;
3996        // footerTop = visible (dark) top of the footer in viewport coords; Infinity
3997        // until the footer exists so parking is simply skipped.
3998        var footerTop = this.footer ? (this.footer.getBoundingClientRect().top + this.borderTop) : Infinity;
3999        var h = this.btnH;
4000        var show;
4001
4002        // Footer-locked on opted-in templates (brand/contact/product) AND on any
4003        // page too short to float; otherwise it floats. Either way it's available.
4004        var locked = this.lockedByTemplate || !this.longEnough;
4005
4006        // ── WRITE ──
4007        if (locked) {
4008          // Locked to the footer top (half-in / half-out): appears only when the
4009          // footer scrolls into view. Never floats mid-page.
4010          show = max > 300 && footerTop < winH;
4011          if (show) this.btn.style.bottom = (winH - footerTop - h / 2) + 'px';
4012        } else {
4013          // Long page: reveal once past 40% of the scroll; float at the rest
4014          // position and ride the footer's top edge once it scrolls into view.
4015          var y = window.scrollY || window.pageYOffset || 0;
4016          var progress = max > 0 ? y / max : 0;
4017          show = progress >= 0.4;
4018          var bottom = (footerTop === Infinity) ? this.restBottom
4019                     : Math.max(this.restBottom, winH - footerTop - h / 2);
4020          this.btn.style.bottom = bottom + 'px';
4021        }
4022
4023        this.btn.classList.toggle('is-visible', show);
4024      }
4025    }
4026
4027    customElements.define('tk-scroll-top', TkScrollTop);
4028  })();
4029</script>
4029
4030
4031</div>
4032<!-- END sections: header-group -->
4033
4034    <main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1">
4035      <section id="shopify-section-template--21741425459247__main" class="shopify-section section section-main-product-custom"><link href="//alcell.co.za/cdn/shop/t/2/assets/section-main-product-custom.css?v=182638041562415501201790095688" rel="stylesheet" type="text/css" media="all" />
4036<link href="//alcell.co.za/cdn/shop/t/2/assets/component-product-variant-picker.css?v=101198305663325844211778844526" rel="stylesheet" type="text/css" media="all" />
4037<link href="//alcell.co.za/cdn/shop/t/2/assets/component-price.css?v=47596247576480123001778844525" rel="stylesheet" type="text/css" media="all" />
4038<link rel="preload" as="image" href="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=600" imagesrcset="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=400 400w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=600 600w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=1000 1000w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=1200 1200w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=1600 1600w" imagesizes="(min-width: 990px) 560px, 100vw" fetchpriority="high"><style>
4039  /* Hidden at all widths by default; switched on for mobile only. */
4040  .mtopbar { display: none; }
4041
4042  @media (max-width: 989px) {
4043    /* ── Sticky top bar: Back · title · search · cart ── */
4044    .mtopbar {
4045      display: flex; align-items: center; gap: 4px;
4046      position: sticky; top: 0; z-index: 60;
4047      background: #fff;
4048      border-bottom: 1px solid #E6E8EC;
4049      padding: 8px 8px;
4050      padding-top: calc(8px + env(safe-area-inset-top));
4051    }
4052    .mtopbar__back {
4053      display: inline-flex; align-items: center; gap: 1px;
4054      background: none; border: none; padding: 4px;
4055      color: #2a3270; font-family: inherit; font-size: 16px; font-weight: 500;
4056      line-height: 1.2;
4057      cursor: pointer; flex-shrink: 0;
4058    }
4059    .mtopbar__back svg { width: 18px; height: 18px; }
4060    /* Absolutely centred so unequal left (Back) / right (icons) widths can't
4061       push it off-centre; shrinks + ellipsises to stay clear. */
4062    .mtopbar__title {
4063      position: absolute; left: 50%; transform: translateX(-50%);
4064      max-width: calc(100% - 160px);
4065      text-align: center;
4066      font-size: 15px; font-weight: 700; color: #1B1B1B;
4067      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
4068    }
4069    .mtopbar__actions { display: flex; align-items: center; margin-left: auto; }
4070    .mtopbar__icon-btn {
4071      display: inline-flex; align-items: center; justify-content: center;
4072      width: 38px; height: 38px;
4073      background: none; border: none; cursor: pointer;
4074      color: #1B1B1B; text-decoration: none;
4075      position: relative; flex-shrink: 0;
4076    }
4077    .mtopbar__icon-btn svg { width: 22px; height: 22px; }
4078    /* Navy search magnifier + navy filled cart, matching the collection top bar. */
4079    .mtopbar__icon-btn--search { color: #2a3270; }
4080    .mtopbar__icon-btn--cart { color: #2a3270; }
4081    /* Pull the cart a touch closer to search — the flush 38px tap targets
4082       otherwise leave a wide gap between the two glyphs. */
4083    .mtopbar__icon-btn--search { margin-right: -8px; }
4084    /* Nudge the magnifier up + right a hair so it lines up optically with the
4085       filled cart icon beside it (the handle pulls its mass down-right). */
4086    .mtopbar__icon-btn--search svg { transform: translate(2px, -1.5px); }
4087    /* Drop both glyphs a touch so they sit centred against the product title.
4088       Applied at the button level (not the svg) so the cart count badge drops
4089       with its glyph; the search svg keeps its optical up-nudge above, so
4090       search + cart stay aligned to each other as they move down together. */
4091    .mtopbar__icon-btn--search,
4092    .mtopbar__icon-btn--cart { transform: translateY(2px); }
4093    .mtopbar__cart-count {
4094      position: absolute; top: 2px; right: 2px;
4095      background: #de4949; color: #fff;
4096      min-width: 16px; height: 16px; border-radius: 8px;
4097      font-size: 10px; line-height: 16px; text-align: center;
4098      padding: 0 3px; font-weight: 700;
4099    }
4100    /* Cart count uses the same blue as the cart icon for a consistent look. */
4101    .mtopbar__cart-count--cart { background: #2a3270; }
4102  }
4103</style>
4104
4105<div class="mtopbar">
4106  <button type="button" class="mtopbar__back" data-mtopbar-back aria-label="Back">
4107    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"/></svg>
4108    <span>Back</span>
4109  </button>
4110  <span class="mtopbar__title">ViewSonic VX2779-…</span>
4111  <div class="mtopbar__actions"><button type="button" class="mtopbar__icon-btn mtopbar__icon-btn--search" data-m-search aria-label="Search">
4112      <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
4113    </button>
4114    <a href="/cart" class="mtopbar__icon-btn mtopbar__icon-btn--cart" aria-label="Cart">
4115      <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M7.5 18a1.75 1.75 0 100 3.5 1.75 1.75 0 000-3.5zm9 0a1.75 1.75 0 100 3.5 1.75 1.75 0 000-3.5zM2 3a1 1 0 000 2h1.6l2.5 10.6A2 2 0 008 17h9.3a2 2 0 002-1.55l1.9-8.2A1 1 0 0020.2 6H6.3l-.5-2.2A1 1 0 004.8 3H2z"/></svg></a>
4116  </div>
4117</div>
4118
4119<script>
4120  (function() {
4121    // Only step back when the previous page was on this site. history.length
4122    // alone is unreliable — it counts off-site pages too, so a visitor arriving
4123    // from Google/an ad/a direct link would get sent back OUT of the store (or
4124    // nowhere on a fresh tab). Fall back to the home page in those cases.
4125    function backInSite() {
4126      var sameOrigin = false;
4127      try { sameOrigin = new URL(document.referrer).origin === window.location.origin; } catch (e) {}
4128      if (sameOrigin && window.history.length > 1) { window.history.back(); }
4129      else { window.location.href = '/'; }
4130    }
4131    document.querySelectorAll('[data-mtopbar-back]').forEach(function(btn) {
4132      btn.addEventListener('click', function(e) {
4133        e.preventDefault();
4134        backInSite();
4135      });
4136    });
4137  })();
4138</script>
4138
4139<product-info
4140  id="MainProduct-template--21741425459247__main"
4141  class="cprod color-scheme-1"
4142  data-section="template--21741425459247__main"
4143  data-product-id="8270253555759"
4144  data-update-url="true"
4145  data-url="/products/viewsonic-27-180hz-gaming-monitor"
4146  style="padding-top: 0px; padding-bottom: 16px;"
4147>
4148  
4148<script src="//alcell.co.za/cdn/shop/t/2/assets/product-info.js?v=16203316012296685121778844525" defer="defer"></script>
4148
4149  
4149<script src="//alcell.co.za/cdn/shop/t/2/assets/product-form.js?v=16477139885528072191778844525" defer="defer"></script>
4149
4150
4151  <div class="cprod__wrap"><div class="cprod__topbar">
4152      <nav class="cprod__crumbs" aria-label="Breadcrumb">
4153        <a href="/">Home</a>
4154        <span class="cprod__crumb-sep">/</span>
4155        <a href="/collections/all">All Products</a><span class="cprod__crumb-sep">/</span>
4156          <a href="/collections/all/tvs-screens">TVs & Screens</a></nav>
4157      <div class="cprod__actions">
4158        <button type="button" class="cprod__action-btn" data-share-btn aria-haspopup="dialog" aria-label="Share">
4159          <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="5" r="3"/><circle cx="6" cy="12" r="3"/><circle cx="18" cy="19" r="3"/><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"/><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"/></svg>
4160          Share
4161        </button>
4162      </div>
4163    </div><div class="cprod__share" data-share hidden>
4164      <div class="cprod__share-panel" role="dialog" aria-modal="true" aria-labelledby="share-title-template--21741425459247__main">
4165        <button type="button" class="cprod__share-close" data-share-close aria-label="Close">
4166          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M5 5l14 14M19 5L5 19"/></svg>
4167        </button>
4168        <h3 id="share-title-template--21741425459247__main" class="cprod__share-title">Share This Product</h3>
4169        <div class="cprod__share-options">
4170          <a class="cprod__share-opt" href="https://www.facebook.com/sharer/sharer.php?u=https://alcell.co.za/products/viewsonic-27-180hz-gaming-monitor" target="_blank" rel="noopener" aria-label="Share on Facebook">
4171            <span class="cprod__share-icon cprod__share-icon--fb">
4172              <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M14 13.5h2.5l1-4H14v-2c0-1.03 0-2 2-2h1.5V2.14c-.33-.04-1.55-.14-2.84-.14C11.93 2 10 3.66 10 6.7v2.8H7v4h3V22h4v-8.5z"/></svg>
4173            </span>
4174            <span class="cprod__share-label">Facebook</span>
4175          </a>
4176          <a class="cprod__share-opt" href="https://twitter.com/intent/tweet?url=https://alcell.co.za/products/viewsonic-27-180hz-gaming-monitor&text=ViewSonic%20VX2779-HD-PRO%2027%22%20Full%20HD%20180Hz%20IPS%20Gaming%20Monitor%20-%201ms,%20FreeSync,%20HDR10" target="_blank" rel="noopener" aria-label="Share on X">
4177            <span class="cprod__share-icon cprod__share-icon--x">
4178              <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24h-6.66l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231 5.45-6.231zm-1.161 17.52h1.833L7.084 4.126H5.117L17.083 19.77z"/></svg>
4179            </span>
4180            <span class="cprod__share-label">X</span>
4181          </a>
4182          <a class="cprod__share-opt" href="https://api.whatsapp.com/send?text=ViewSonic%20VX2779-HD-PRO%2027%22%20Full%20HD%20180Hz%20IPS%20Gaming%20Monitor%20-%201ms,%20FreeSync,%20HDR10%20https://alcell.co.za/products/viewsonic-27-180hz-gaming-monitor" target="_blank" rel="noopener" aria-label="Share on WhatsApp">
4183            <span class="cprod__share-icon cprod__share-icon--wa">
4184              <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12.04 2C6.58 2 2.13 6.45 2.13 11.91c0 1.75.46 3.45 1.32 4.95L2 22l5.25-1.38a9.9 9.9 0 0 0 4.79 1.22h.01c5.46 0 9.91-4.45 9.91-9.91 0-2.65-1.03-5.14-2.9-7.01A9.82 9.82 0 0 0 12.04 2zm0 1.67c2.2 0 4.27.86 5.83 2.41a8.2 8.2 0 0 1 2.41 5.83c0 4.54-3.7 8.24-8.25 8.24a8.2 8.2 0 0 1-4.2-1.15l-.3-.18-3.12.82.83-3.04-.2-.31a8.2 8.2 0 0 1-1.26-4.38c0-4.54 3.7-8.24 8.25-8.24zm4.52 9.93c-.25-.12-1.47-.72-1.69-.81-.23-.08-.39-.12-.56.13-.16.25-.64.81-.79.97-.14.17-.29.19-.54.06-.25-.12-1.05-.39-1.99-1.23-.74-.66-1.23-1.47-1.38-1.72-.14-.25-.01-.38.11-.5.11-.11.25-.29.37-.43.13-.14.17-.25.25-.41.08-.17.04-.31-.02-.43-.06-.12-.56-1.34-.76-1.84-.2-.48-.41-.42-.56-.43h-.48c-.17 0-.43.06-.66.31-.23.25-.86.85-.86 2.07 0 1.22.89 2.4 1.01 2.56.12.17 1.75 2.67 4.23 3.74.59.26 1.05.41 1.41.52.59.19 1.13.16 1.56.1.48-.07 1.47-.6 1.68-1.18.21-.58.21-1.07.14-1.18-.06-.1-.22-.16-.47-.28z"/></svg>
4185            </span>
4186            <span class="cprod__share-label">WhatsApp</span>
4187          </a>
4188          <a class="cprod__share-opt" href="https://www.linkedin.com/sharing/share-offsite/?url=https://alcell.co.za/products/viewsonic-27-180hz-gaming-monitor" target="_blank" rel="noopener" aria-label="Share on LinkedIn">
4189            <span class="cprod__share-icon cprod__share-icon--li">
4190              <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M20.45 20.45h-3.56v-5.57c0-1.33-.02-3.04-1.85-3.04-1.85 0-2.14 1.45-2.14 2.94v5.67H9.35V9h3.42v1.56h.05c.48-.9 1.64-1.85 3.37-1.85 3.6 0 4.27 2.37 4.27 5.46v6.28zM5.34 7.43a2.06 2.06 0 1 1 0-4.13 2.07 2.07 0 0 1 0 4.13zM7.12 20.45H3.56V9h3.56v11.45zM22.22 0H1.77C.79 0 0 .77 0 1.73v20.54C0 23.22.79 24 1.77 24h20.45c.98 0 1.78-.78 1.78-1.73V1.73C24 .77 23.2 0 22.22 0z"/></svg>
4191            </span>
4192            <span class="cprod__share-label">LinkedIn</span>
4193          </a>
4194          <a class="cprod__share-opt" href="mailto:?subject=ViewSonic%20VX2779-HD-PRO%2027%22%20Full%20HD%20180Hz%20IPS%20Gaming%20Monitor%20-%201ms,%20FreeSync,%20HDR10&body=https://alcell.co.za/products/viewsonic-27-180hz-gaming-monitor" aria-label="Share via Email">
4195            <span class="cprod__share-icon cprod__share-icon--mail">
4196              <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/></svg>
4197            </span>
4198            <span class="cprod__share-label">Email</span>
4199          </a>
4200        </div>
4201        <div class="cprod__share-copy">
4202          <input type="text" class="cprod__share-url" value="https://alcell.co.za/products/viewsonic-27-180hz-gaming-monitor" readonly aria-label="Product link" data-share-url>
4203          <button type="button" class="cprod__share-copybtn" data-share-copy aria-label="Copy link">
4204            <svg class="cprod__share-copyicon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>
4205            <svg class="cprod__share-checkicon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg>
4206          </button>
4207        </div>
4208      </div>
4209    </div><div class="cprod__layout">
4210
4211        <div class="cprod__card"><div class="cprod__media"><div class="cprod__gallery">
4212
4213            <div class="cprod__thumbs" role="list"><button type="button" class="cprod__thumb is-active" data-thumb-index="0" aria-label="View image 1"><img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=200" alt="ViewSonic VX2779-HD-PRO 27-inch gaming monitor front view with IPS SuperClear wallpaper" loading="lazy" width="80" height="80"></button><button type="button" class="cprod__thumb" data-thumb-index="1" aria-label="View image 2"><img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&width=200" alt="ViewSonic VX2779-HD-PRO monitor from a left three-quarter angle on its stand" loading="lazy" width="80" height="80"></button><button type="button" class="cprod__thumb" data-thumb-index="2" aria-label="View image 3"><img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&width=200" alt="ViewSonic VX2779-HD-PRO monitor from a right three-quarter angle showing the slim bezel" loading="lazy" width="80" height="80"></button><button type="button" class="cprod__thumb" data-thumb-index="3" aria-label="View image 4"><img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&width=200" alt="Rear view of the ViewSonic VX2779-HD-PRO showing the ports and stand mount" loading="lazy" width="80" height="80"></button></div>
4214
4215            <div class="cprod__viewer"><span class="cprod__badge cprod__badge--off">
4216                  <span class="cprod__badge-pct">21%</span>
4217                  <span class="cprod__badge-label">OFF</span>
4218                </span><button type="button" class="cprod__zoom" aria-label="Zoom image">
4219                <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 3h6v6"/><path d="M9 21H3v-6"/><path d="M21 3l-7 7"/><path d="M3 21l7-7"/></svg>
4220              </button>
4221
4222              <div class="cprod__slider"><div class="cprod__slide is-active" data-slide-index="0" data-media-id="30457769459759"><img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&amp;width=1600" alt="ViewSonic VX2779-HD-PRO 27-inch gaming monitor front view with IPS SuperClear wallpaper" srcset="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&amp;width=400 400w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&amp;width=600 600w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&amp;width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&amp;width=1000 1000w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&amp;width=1200 1200w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&amp;width=1600 1600w" width="1600" height="1200" loading="eager" fetchpriority="high" sizes="(min-width: 990px) 560px, 100vw" class="cprod__img">
4223</div><div class="cprod__slide" data-slide-index="1" data-media-id="30457769492527"><img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&amp;width=1600" alt="ViewSonic VX2779-HD-PRO monitor from a left three-quarter angle on its stand" srcset="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&amp;width=400 400w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&amp;width=600 600w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&amp;width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&amp;width=1000 1000w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&amp;width=1200 1200w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&amp;width=1600 1600w" width="1600" height="1200" loading="eager" fetchpriority="low" sizes="(min-width: 990px) 560px, 100vw" class="cprod__img">
4224</div><div class="cprod__slide" data-slide-index="2" data-media-id="30457769525295"><img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&amp;width=1600" alt="ViewSonic VX2779-HD-PRO monitor from a right three-quarter angle showing the slim bezel" srcset="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&amp;width=400 400w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&amp;width=600 600w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&amp;width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&amp;width=1000 1000w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&amp;width=1200 1200w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&amp;width=1600 1600w" width="1600" height="1200" loading="eager" fetchpriority="low" sizes="(min-width: 990px) 560px, 100vw" class="cprod__img">
4225</div><div class="cprod__slide" data-slide-index="3" data-media-id="30457769558063"><img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&amp;width=1600" alt="Rear view of the ViewSonic VX2779-HD-PRO showing the ports and stand mount" srcset="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&amp;width=400 400w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&amp;width=600 600w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&amp;width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&amp;width=1000 1000w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&amp;width=1200 1200w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&amp;width=1600 1600w" width="1600" height="1200" loading="eager" fetchpriority="low" sizes="(min-width: 990px) 560px, 100vw" class="cprod__img">
4226</div></div>
4227
4228            </div><div class="cprod__dots" data-dots><button type="button" class="cprod__dot is-active" data-dot-index="0" aria-label="Go to image 1"></button><button type="button" class="cprod__dot" data-dot-index="1" aria-label="Go to image 2"></button><button type="button" class="cprod__dot" data-dot-index="2" aria-label="Go to image 3"></button><button type="button" class="cprod__dot" data-dot-index="3" aria-label="Go to image 4"></button></div></div><div class="cprod__lightbox" data-lightbox hidden>
4229            <div class="cprod__lightbox-panel">
4230              <button type="button" class="cprod__lightbox-close" data-lightbox-close aria-label="Close">
4231                <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>
4232              </button>
4233
4234              <div class="cprod__lightbox-thumbs" role="list"><button type="button" class="cprod__lightbox-thumb is-active" data-lightbox-index="0" aria-label="View image 1"><img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=200" alt="ViewSonic VX2779-HD-PRO 27-inch gaming monitor front view with IPS SuperClear wallpaper" loading="lazy" width="80" height="80"></button><button type="button" class="cprod__lightbox-thumb" data-lightbox-index="1" aria-label="View image 2"><img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.
4234jpg?v=1782311857&width=200" alt="ViewSonic VX2779-HD-PRO monitor from a left three-quarter angle on its stand" loading="lazy" width="80" height="80"></button><button type="button" class="cprod__lightbox-thumb" data-lightbox-index="2" aria-label="View image 3"><img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&width=200" alt="ViewSonic VX2779-HD-PRO monitor from a right three-quarter angle showing the slim bezel" loading="lazy" width="80" height="80"></button><button type="button" class="cprod__lightbox-thumb" data-lightbox-index="3" aria-label="View image 4"><img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&width=200" alt="Rear view of the ViewSonic VX2779-HD-PRO showing the ports and stand mount" loading="lazy" width="80" height="80"></button></div>
4235
4236              <div class="cprod__lightbox-stage"><div class="cprod__lightbox-slide is-active" data-lightbox-slide="0">
4237                      <img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&amp;width=2200" alt="ViewSonic VX2779-HD-PRO 27-inch gaming monitor front view with IPS SuperClear wallpaper" srcset="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&amp;width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&amp;width=1100 1100w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&amp;width=1445 1445w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&amp;width=1680 1680w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&amp;width=2048 2048w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&amp;width=2200 2200w" width="2200" height="1650" loading="lazy" sizes="90vw" class="cprod__lightbox-img">
4238                    </div><div class="cprod__lightbox-slide" data-lightbox-slide="1">
4239                      <img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&amp;width=2200" alt="ViewSonic VX2779-HD-PRO monitor from a left three-quarter angle on its stand" srcset="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&amp;width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&amp;width=1100 1100w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&amp;width=1445 1445w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&amp;width=1680 1680w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&amp;width=2048 2048w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&amp;width=2200 2200w" width="2200" height="1650" loading="lazy" sizes="90vw" class="cprod__lightbox-img">
4240                    </div><div class="cprod__lightbox-slide" data-lightbox-slide="2">
4241                      <img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&amp;width=2200" alt="ViewSonic VX2779-HD-PRO monitor from a right three-quarter angle showing the slim bezel" srcset="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&amp;width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&amp;width=1100 1100w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&amp;width=1445 1445w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&amp;width=1680 1680w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&amp;width=2048 2048w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&amp;width=2200 2200w" width="2200" height="1650" loading="lazy" sizes="90vw" class="cprod__lightbox-img">
4242                    </div><div class="cprod__lightbox-slide" data-lightbox-slide="3">
4243                      <img src="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&amp;width=2200" alt="Rear view of the ViewSonic VX2779-HD-PRO showing the ports and stand mount" srcset="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&amp;width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&amp;width=1100 1100w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&amp;width=1445 1445w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&amp;width=1680 1680w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&amp;width=2048 2048w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&amp;width=2200 2200w" width="2200" height="1650" loading="lazy" sizes="90vw" class="cprod__lightbox-img">
4244                    </div></div>
4245
4246              <div class="cprod__lightbox-caption"><span>ViewSonic VX2779-HD-PRO 27&quot; Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10</span></div>
4247            </div>
4248          </div></div><div class="cprod__info">
4249          <h1 class="cprod__title">ViewSonic VX2779-HD-PRO 27" Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10</h1><p class="cprod__subtitle">Fast Refresh Rate, Smooth Gameplay</p><a href="/search?q=VIEWSONIC" class="cprod__vendor">VIEWSONIC</a><div class="cprod__rating">
4250              <span class="cprod__stars" aria-label="Average rating 4.6 out of 5"><svg class="cprod__star cprod__star--filled" width="14" height="14" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/></svg><svg class="cprod__star cprod__star--filled" width="14" height="14" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/></svg><svg class="cprod__star cprod__star--filled" width="14" height="14" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/></svg><svg class="cprod__star cprod__star--filled" width="14" height="14" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/></svg><svg class="cprod__star cprod__star--filled" width="14" height="14" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/></svg></span>
4251              <a href="#product-reviews" class="cprod__rating-text">4.6 · 31 Reviews</a>
4252            </div><div class="cprod__price-inline" data-price-container>
4253            <span class="cprod__price-now">R 2,912</span><span class="cprod__price-was">R 3,699</span></div><div class="cprod__status">
4254            <div class="cprod__status-row cprod__status-row--del">
4255              <span class="cprod__status-delhead">
4256                <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="1" y="3" width="15" height="13"/><path d="M16 8h4l3 3v5h-7V8z"/><circle cx="5.5" cy="18.5" r="2.5"/><circle cx="18.5" cy="18.5" r="2.5"/></svg>
4257                <strong>Estimated delivery</strong>
4258              </span>
4259              <span class="cprod__status-delwhen">1–3 working days</span>
4260            </div>
4261            <div class="cprod__status-stock"><span class="cprod__stock-pill cprod__stock-pill--in">In stock</span></div>
4262            <div class="cprod__shipping-note">
4263              <strong>FAST NATIONWIDE DELIVERY</strong><br>Reliable delivery, every order
4264            </div>
4265            <div class="cprod__status-row cprod__status-row--qty">
4266              <span class="cprod__status-qtylabel">Quantity</span>
4267              <quantity-input class="cprod__qty">
4268                <button class="cprod__qty-btn quantity__button" type="button" name="minus" aria-label="Decrease quantity">
4269                  <svg width="12" height="12" viewBox="0 0 14 14" fill="none"><path d="M2 7H12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
4270                </button>
4271                <input class="cprod__qty-input" type="number" id="QuantityMobile-template--21741425459247__main" data-min="1" min="1" value="1" aria-label="Quantity">
4272                <button class="cprod__qty-btn quantity__button" type="button" name="plus" aria-label="Increase quantity">
4273                  <svg width="12" height="12" viewBox="0 0 14 14" fill="none"><path d="M7 2V12M2 7H12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
4274                </button>
4275              </quantity-input>
4276            </div><div class="cprod__status-actions">
4277              <button type="button" class="cprod__buy-now" data-buy-now >Buy It Now</button>
4278              <button type="submit" name="add" form="product-form-template--21741425459247__main" class="cprod__atc" >
4279                <span>Add to Cart</span>
4280              </button>
4281            </div>
4282          </div>
4283
4284          <div class="cprod__divider"></div>
4285
4286          <div class="cprod__stock-row"><span class="cprod__stock-pill cprod__stock-pill--in">In stock</span>
4287              <button type="button" class="cprod__stock-learn" data-delivery-open aria-haspopup="dialog">Learn More</button></div><div class="cprod__deliv" data-delivery hidden>
4288            <div class="cprod__deliv-panel" role="dialog" aria-modal="true" aria-labelledby="delivery-title-template--21741425459247__main">
4289              <button type="button" class="cprod__deliv-close" data-delivery-close aria-label="Close">
4290                <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M5 5l14 14M19 5L5 19"/></svg>
4291              </button>
4292              <h3 id="delivery-title-template--21741425459247__main" class="cprod__deliv-title">
4292When do I get it?</h3>
4293              <p class="cprod__deliv-intro">Estimated delivery times depend on where you are. Your exact date is confirmed at checkout.</p>
4294              <table class="cprod__deliv-table">
4295                <thead>
4296                  <tr>
4297                    <th scope="col">Delivery destination</th>
4298                    <th scope="col">Delivery time</th>
4299                  </tr>
4300                </thead>
4301                <tbody>
4302                  <tr>
4303                    <td class="cprod__deliv-area">Cape Town, Durban, Johannesburg &amp; Pretoria</td>
4304                    <td class="cprod__deliv-time">1–3 working days</td>
4305                  </tr>
4306                  <tr>
4307                    <td class="cprod__deliv-area">Regional areas</td>
4308                    <td class="cprod__deliv-time">5–6 working days</td>
4309                  </tr>
4310                  <tr>
4311                    <td class="cprod__deliv-area">Remote areas</td>
4312                    <td class="cprod__deliv-time">3–7 working days</td>
4313                  </tr>
4314                </tbody>
4315              </table>
4316            </div>
4317          </div><ul class="cprod__features">
4318            <li>
4319              <svg width="14" height="14" viewBox="0 0 24 24" fill="#de4949" aria-hidden="true"><circle cx="12" cy="12" r="10"/><polyline points="9 12 11 14 15 10" stroke="#fff" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
4320              Interest Free Payments available
4321            </li>
4322            <li>
4323              <svg width="14" height="14" viewBox="0 0 24 24" fill="#de4949" aria-hidden="true"><circle cx="12" cy="12" r="10"/><polyline points="9 12 11 14 15 10" stroke="#fff" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
4324              Hassle Free Returns within 7 days
4325            </li>
4326            <li>
4327              <svg width="14" height="14" viewBox="0 0 24 24" fill="#de4949" aria-hidden="true"><circle cx="12" cy="12" r="10"/><polyline points="9 12 11 14 15 10" stroke="#fff" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
4328              12-month limited warranty
4329            </li>
4330          </ul><div class="cprod__bnpl" data-bnpl>
4331            <span class="cprod__bnpl-line"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 908.152 171" fill="#100E13" role="img" aria-label="Stitch" class="cprod__bnpl-logo" focusable="false">
4332  <path d="M182.115 85.5L190.451 77.1637C203.347 64.2675 220.875 57 239.186 57H307.301C338.723 57 364.23 82.5075 364.23 113.929C364.23 145.492 338.722 171 307.23 171H110.865V142.5H307.23C322.976 142.5 335.73 129.746 335.73 114C335.73 98.2537 322.976 85.5 307.23 85.5H182.115ZM57 85.5C41.2537 85.5 28.5 72.7463 28.5 57C28.5 41.2537 41.2537 28.5 57 28.5H253.365V0H57C25.5075 0 0 25.5075 0 57C0 88.4925 25.5075 114 57 114H125.044C143.284 114 160.811 106.733 173.779 93.8363L182.115 85.5H57Z"/>
4333  <path d="M495.9 90.63C499.819 95.2613 501.814 101.531 501.814 109.44C501.814 116.28 499.819 122.336 495.757 127.538C491.767 132.739 486.281 136.8 479.441 139.579C472.601 142.429 464.977 143.854 456.641 143.854C441.75 143.854 429.78 140.434 420.731 133.594C411.682 126.754 407.122 117.206 406.98 104.951H425.291C425.576 111.791 428.64 117.42 434.34 121.695C440.04 126.041 447.521 128.179 456.57 128.179C464.621 128.179 471.105 126.611 476.164 123.405C481.151 120.199 483.645 115.995 483.645 110.794C483.645 106.305 482.434 102.885 480.083 100.534C477.731 98.1825 474.596 96.5438 470.82 95.6175C467.044 94.6913 461.629 93.8363 454.646 92.91C444.814 91.6988 436.763 90.1313 430.493 88.2075C424.223 86.2838 419.164 83.1488 415.316 78.945C411.469 74.67 409.474 68.8275 409.474 61.4175C409.474 54.72 411.397 48.735 415.174 43.5338C418.95 38.3325 424.151 34.2713 430.706 31.35C437.261 28.4288 444.671 27.0038 452.865 27.0038C466.26 27.0038 477.161 30.1388 485.64 36.4088C494.047 42.6788 498.75 51.585 499.605 63.1988H481.294C480.581 57.2138 477.66 52.2975 472.601 48.45C467.542 44.6025 461.201 42.6075 453.577 42.6075C445.954 42.6075 439.541 44.175 434.767 47.3813C429.994 50.5875 427.642 54.7913 427.642 59.9925C427.642 63.84 428.783 66.8325 430.991 68.8988C433.2 70.965 436.121 72.39 439.612 73.1738C443.104 73.8863 448.447 74.7413 455.572 75.6675C465.547 76.8788 473.812 78.5175 480.296 80.5838C486.78 82.65 491.981 85.9988 495.971 90.63H495.9ZM544.208 45.2438H573.064V28.5H544.208V0H525.896V28.5H505.305V45.2438H525.896V112.718C525.896 122.978 528.176 130.53 532.736 135.304C537.296 140.078 544.92 142.429 555.679 142.429H576.697V125.685H544.279V45.2438H544.208ZM744.42 43.4625C752.471 43.4625 759.311 45.6 765.011 49.9463C770.64 54.2925 774.416 60.0638 776.198 67.4025H794.722C792.514 54.8625 787.028 45.03 778.264 37.905C769.5 30.78 758.456 27.1463 745.061 27.1463C734.018 27.1463 724.256 29.5688 715.778 34.4138C707.299 39.2588 700.673 46.0988 695.97 54.8625C691.268 63.6263 688.916 73.815 688.916 85.2863C688.916 96.7575 691.196 106.946 695.828 115.781C700.459 124.616 706.943 131.528 715.279 136.444C723.615 141.36 733.305 143.854 744.349 143.854C757.886 143.854 769.073 140.22 777.908 133.024C786.671 125.828 792.3 115.853 794.651 103.17H776.34C774.701 110.794 771.068 116.708 765.368 121.054C759.668 125.4 752.685 127.538 744.349 127.538C733.447 127.538 724.613 123.619 717.844 115.781C711.075 107.944 707.655 97.755 707.655 85.2863C707.655 72.8175 711.075 62.8425 717.844 55.0763C724.613 47.31 733.447 43.4625 744.349 43.4625H744.42ZM895.47 39.6863C886.991 31.35 875.805 27.1463 861.911 27.1463C853.005 27.1463 845.381 28.9988 839.254 32.7038C833.055 36.4088 828.139 41.2538 824.363 47.2388V0H806.051V142.5H824.363V85.5C824.363 72.675 827.426 62.5575 833.625 55.0763C839.824 47.595 848.16 43.89 858.776 43.89C868.751 43.89 876.446 46.9538 881.79 53.1525C887.134 59.3513 889.841 68.3288 889.841 80.085V142.429H908.153V78.945C908.153 61.0613 903.878 47.9513 895.399 39.615L895.47 39.6863ZM655.429 45.2438H684.285V28.5H655.429V0H637.118V28.5H616.526V45.2438H637.118V112.718C637.118 122.978 639.398 130.53 643.958 135.304C648.518 140.078 656.141 142.429 666.9 142.429H687.919V125.685H655.5V45.2438H655.429ZM585.604 18.3113H603.915V0H585.604V18.3113ZM585.604 142.5H603.915V28.5H585.604V142.5Z"/>
4334</svg>
4335
4336              <span class="cprod__bnpl-lead">Flexible payments from</span>
4337            </span>
4338            <span class="cprod__bnpl-line">
4339              <span class="cprod__bnpl-lead">only</span>
4340              <strong class="cprod__bnpl-amount" data-bnpl-amount>R 485.33</strong>
4341              <span class="cprod__bnpl-lead">over 2&ndash;6 instalments</span>
4342            </span>
4343          </div></div>
4344
4345    </div><aside class="cprod__buy"><form method="post" action="/cart/add" id="product-form-template--21741425459247__main" accept-charset="UTF-8" class="cprod__form" enctype="multipart/form-data" novalidate="novalidate"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="✓" /><input type="hidden" name="id" value="45356979683375" >
4346          <div class="cprod__buy-panel">
4347            <div class="cprod__price-row" data-price-container>
4348              <span class="cprod__price-now">R 2,912</span><span class="cprod__price-was">R 3,699</span></div>
4349
4350            <div class="cprod__delivery">
4351              <span class="cprod__delivery-label">Estimated Delivery</span>
4352            </div>
4353            <div class="cprod__delivery-when">1–3 working days</div>
4354
4355            <div class="cprod__shipping-note">
4356              <strong>FAST NATIONWIDE DELIVERY</strong><br>Reliable delivery, every order
4357            </div><div class="cprod__stock-low" data-stock-indicator hidden>
4358              Only <span data-stock-count>195</span> left in stock
4359            </div>
4360
4361            <div class="cprod__qty-row">
4362              <quantity-input class="cprod__qty">
4363                <button class="cprod__qty-btn" type="button" name="minus" aria-label="Decrease quantity">
4364                  <svg width="12" height="12" viewBox="0 0 14 14" fill="none"><path d="M2 7H12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
4365                </button>
4366                <input class="cprod__qty-input" type="number" name="quantity" id="Quantity-template--21741425459247__main" data-cart-quantity="0" data-min="1" min="1" max="195" data-max="195" value="1" form="product-form-template--21741425459247__main" aria-label="Quantity">
4367                <button class="cprod__qty-btn" type="button" name="plus" aria-label="Increase quantity">
4368                  <svg width="12" height="12" viewBox="0 0 14 14" fill="none"><path d="M7 2V12M2 7H12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
4369                </button>
4370              </quantity-input>
4371            </div>
4372
4373            <button type="submit" name="add" class="cprod__atc" >
4374              <span>Add to Cart</span>
4375            </button>
4376
4377            <button type="button" class="cprod__buy-now" data-buy-now >Buy It Now</button>
4378
4379            <button
4380              type="button"
4381              class="cprod__wishlist"
4382              data-wishlist-toggle
4383              data-wishlist-id="8270253555759"
4384              data-wishlist-handle="viewsonic-27-180hz-gaming-monitor"
4385              data-wishlist-title="ViewSonic VX2779-HD-PRO 27&quot; Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10"
4386              data-wishlist-url="/products/viewsonic-27-180hz-gaming-monitor"
4387              data-wishlist-image="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=400"
4388              data-wishlist-price="291200"
4389              data-wishlist-compare="369900"
4390              data-wishlist-available="true"
4391              data-wishlist-variant="45356979683375"
4392              aria-pressed="false"
4393              aria-label="Add to wishlist"
4394            >
4395              <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
4396              <span data-wishlist-label>Add to List</span>
4397            </button>
4398          </div><div class="cprod__bnpl-panel" data-bnpl><div class="cprod__bnpl-card">
4399              <span class="cprod__bnpl-line">
4400                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 908.152 171" fill="#100E13" role="img" aria-label="Stitch" class="cprod__bnpl-logo" focusable="false">
4401  <path d="M182.115 85.5L190.451 77.1637C203.347 64.2675 220.875 57 239.186 57H307.301C338.723 57 364.23 82.5075 364.23 113.929C364.23 145.492 338.722 171 307.23 171H110.865V142.5H307.23C322.976 142.5 335.73 129.746 335.73 114C335.73 98.2537 322.976 85.5 307.23 85.5H182.115ZM57 85.5C41.2537 85.5 28.5 72.7463 28.5 57C28.5 41.2537 41.2537 28.5 57 28.5H253.365V0H57C25.5075 0 0 25.5075 0 57C0 88.4925 25.5075 114 57 114H125.044C143.284 114 160.811 106.733 173.779 93.8363L182.115 85.5H57Z"/>
4402  <path d="M495.9 90.63C499.819 95.2613 501.814 101.531 501.814 109.44C501.814 116.28 499.819 122.336 495.757 127.538C491.767 132.739 486.281 136.8 479.441 139.579C472.601 142.429 464.977 143.854 456.641 143.854C441.75 143.854 429.78 140.434 420.731 133.594C411.682 126.754 407.122 117.206 406.98 104.951H425.291C425.576 111.791 428.64 117.42 434.34 121.695C440.04 126.041 447.521 128.179 456.57 128.179C464.621 128.179 471.105 126.611 476.164 123.405C481.151 120.199 483.645 115.995 483.645 110.794C483.645 106.305 482.434 102.885 480.083 100.534C477.731 98.1825 474.596 96.5438 470.82 95.6175C467.044 94.6913 461.629 93.8363 454.646 92.91C444.814 91.6988 436.763 90.1313 430.493 88.2075C424.223 86.2838 419.164 83.1488 415.316 78.945C411.469 74.67 409.474 68.8275 409.474 61.4175C409.474 54.72 411.397 48.735 415.174 43.5338C418.95 38.3325 424.151 34.2713 430.706 31.35C437.261 28.4288 444.671 27.0038 452.865 27.0038C466.26 27.0038 477.161 30.1388 485.64 36.4088C494.047 42.6788 498.75 51.585 499.605 63.1988H481.294C480.581 57.2138 477.66 52.2975 472.601 48.45C467.542 44.6025 461.201 42.6075 453.577 42.6075C445.954 42.6075 439.541 44.175 434.767 47.3813C429.994 50.5875 427.642 54.7913 427.642 59.9925C427.642 63.84 428.783 66.8325 430.991 68.8988C433.2 70.965 436.121 72.39 439.612 73.1738C443.104 73.8863 448.447 74.7413 455.572 75.6675C465.547 76.8788 473.812 78.5175 480.296 80.5838C486.78 82.65 491.981 85.9988 495.971 90.63H495.9ZM544.208 45.2438H573.064V28.5H544.208V0H525.896V28.5H505.305V45.2438H525.896V112.718C525.896 122.978 528.176 130.53 532.736 135.304C537.296 140.078 544.92 142.429 555.679 142.429H576.697V125.685H544.279V45.2438H544.208ZM744.42 43.4625C752.471 43.4625 759.311 45.6 765.011 49.9463C770.64 54.2925 774.416 60.0638 776.198 67.4025H794.722C792.514 54.8625 787.028 45.03 778.264 37.905C769.5 30.78 758.456 27.1463 745.061 27.1463C734.018 27.1463 724.256 29.5688 715.778 34.4138C707.299 39.2588 700.673 46.0988 695.97 54.8625C691.268 63.6263 688.916 73.815 688.916 85.2863C688.916 96.7575 691.196 106.946 695.828 115.781C700.459 124.616 706.943 131.528 715.279 136.444C723.615 141.36 733.305 143.854 744.349 143.854C757.886 143.854 769.073 140.22 777.908 133.024C786.671 125.828 792.3 115.853 794.651 103.17H776.34C774.701 110.794 771.068 116.708 765.368 121.054C759.668 125.4 752.685 127.538 744.349 127.538C733.447 127.538 724.613 123.619 717.844 115.781C711.075 107.944 707.655 97.755 707.655 85.2863C707.655 72.8175 711.075 62.8425 717.844 55.0763C724.613 47.31 733.447 43.4625 744.349 43.4625H744.42ZM895.47 39.6863C886.991 31.35 875.805 27.1463 861.911 27.1463C853.005 27.1463 845.381 28.9988 839.254 32.7038C833.055 36.4088 828.139 41.2538 824.363 47.2388V0H806.051V142.5H824.363V85.5C824.363 72.675 827.426 62.5575 833.625 55.0763C839.824 47.595 848.16 43.89 858.776 43.89C868.751 43.89 876.446 46.9538 881.79 53.1525C887.134 59.3513 889.841 68.3288 889.841 80.085V142.429H908.153V78.945C908.153 61.0613 903.878 47.9513 895.399 39.615L895.47 39.6863ZM655.429 45.2438H684.285V28.5H655.429V0H637.118V28.5H616.526V45.2438H637.118V112.718C637.118 122.978 639.398 130.53 643.958 135.304C648.518 140.078 656.141 142.429 666.9 142.429H687.919V125.685H655.5V45.2438H655.429ZM585.604 18.3113H603.915V0H585.604V18.3113ZM585.604 142.5H603.915V28.5H585.604V142.5Z"/>
4403</svg>
4404
4405                <span class="cprod__bnpl-lead">Flexible payments from</span><strong class="cprod__bnpl-amount" data-bnpl-amount data-bnpl-whole>R 485</strong>
4406              </span>
4407              <p class="cprod__bnpl-note">Pay over 2&ndash;6 interest-free instalments</p>
4408            </div>
4409          </div>
4410
4411          <div class="cprod__pay-panel">
4412            <div class="cprod__pay-title">Payment options</div><div class="cprod__pay-row">
4413              <span class="cprod__pay-item">EFT</span>
4414              <span class="cprod__pay-item cprod__pay-item--mobile">Card</span>
4415              <span class="cprod__pay-item">Payfast</span>
4416              <span class="cprod__pay-item">Payflex</span>
4417              <span class="cprod__pay-item">Stitch</span>
4418              <span class="cprod__pay-item">Mobicred</span>
4419              <span class="cprod__pay-item cprod__pay-item--desktop">Peach</span>
4420              <span class="cprod__pay-item cprod__pay-item--desktop">Pay Just now</span>
4421            </div>
4422          </div><input type="hidden" name="product-id" value="8270253555759" /><input type="hidden" name="section-id" value="template--21741425459247__main" /></form></aside>
4423
4424    </div></div><div class="cprod__stickybar">
4425    <div class="cprod__stickybar-price" data-price-container>
4426      <span class="cprod__stickybar-label">Price:</span>
4427      <span class="cprod__price-now">R 2,912</span>
4428    </div>
4429    <div class="cprod__stickybar-actions">
4430      <button
4431        type="button"
4432        class="cprod__stickybar-wishlist"
4433        data-wishlist-toggle
4434        data-wishlist-id="8270253555759"
4435        data-wishlist-handle="viewsonic-27-180hz-gaming-monitor"
4436        data-wishlist-title="ViewSonic VX2779-HD-PRO 27&quot; Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10"
4437        data-wishlist-url="/products/viewsonic-27-180hz-gaming-monitor"
4438        data-wishlist-image="//alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=400"
4439        data-wishlist-price="291200"
4440        data-wishlist-compare="369900"
4441        data-wishlist-available="true"
4442        data-wishlist-variant="45356979683375"
4443        aria-pressed="false"
4444        aria-label="Add to wishlist"
4445      >
4446        <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
4447      </button>
4448      <button type="submit" name="add" form="product-form-template--21741425459247__main" class="cprod__atc cprod__stickybar-atc" >
4449        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg>
4450        <span>Add to Cart</span>
4451      </button>
4452    </div>
4453  </div>
4454</product-info>
4455
4456<script>
4457(function() {
4458  const section = document.getElementById('MainProduct-template--21741425459247__main');
4459  if (!section) return;
4460  const slides = section.querySelectorAll('.cprod__slide');
4461  const thumbs = section.querySelectorAll('.cprod__thumb');
4462  const dots = section.querySelectorAll('.cprod__dot');
4463  const navBtns = section.querySelectorAll('[data-gallery-direction]');
4464
4465  let current = 0;
4466  if (slides.length === 0) return;
4467
4468  function show(idx) {
4469    if (idx < 0 || idx >= slides.length) return;
4470    current = idx;
4471    slides.forEach((s, i) => s.classList.toggle('is-active', i === idx));
4472    thumbs.forEach((t, i) => t.classList.toggle('is-active', i === idx));
4473    dots.forEach((d, i) => d.classList.toggle('is-active', i === idx));
4474    syncThumbHeight();
4475  }
4476
4477  const viewer = section.querySelector('.cprod__viewer');
4478  const thumbsList = section.querySelector('.cprod__thumbs');
4479  function syncThumbHeight() {
4480    if (!viewer || !thumbsList) return;
4481    const h = viewer.getBoundingClientRect().height;
4482    // Match the rail height to the main image so the thumbnails span its full
4483    // height (distributed via justify-content: space-between in the CSS).
4484    if (h > 0) {
4485      thumbsList.style.height = h + 'px';
4486      thumbsList.style.maxHeight = h + 'px';
4487    }
4488  }
4489  if (viewer) {
4490    section.querySelectorAll('.cprod__img').forEach((img) => {
4491      if (img.complete) syncThumbHeight();
4492      else img.addEventListener('load', syncThumbHeight, { once: true });
4493    });
4494    if ('ResizeObserver' in window) {
4495      new ResizeObserver(syncThumbHeight).observe(viewer);
4496    } else {
4497      window.addEventListener('resize', syncThumbHeight);
4498    }
4499    requestAnimationFrame(syncThumbHeight);
4500  }
4501
4502  thumbs.forEach((t) => t.addEventListener('click', () => {
4503    // The "+N more" thumb opens the fullscreen lightbox instead of just
4504    // switching the main viewer — wired in the lightbox block below.
4505    if (t.classList.contains('cprod__thumb--more')) return;
4506    show(parseInt(t.dataset.thumbIndex, 10));
4507  }));
4508  dots.forEach((d) => d.addEventListener('click', () => show(parseInt(d.dataset.dotIndex, 10))));
4509  navBtns.forEach((btn) => {
4510    btn.addEventListener('click', () => {
4511      const dir = btn.dataset.galleryDirection;
4512      const next = dir === 'next' ? (current + 1) % slides.length : (current - 1 + slides.length) % slides.length;
4513      show(next);
4514    });
4515  });
4516
4517  const slider = section.querySelector('.cprod__slider');
4518  if (slider && slides.length > 1) {
4519    let touchStartX = 0;
4520    let touchStartY = 0;
4521    let tracking = false;
4522    slider.addEventListener('touchstart', (e) => {
4523      if (e.touches.length !== 1) return;
4524      touchStartX = e.touches[0].clientX;
4525      touchStartY = e.touches[0].clientY;
4526      tracking = true;
4527    }, { passive: true });
4528    slider.addEventListener('touchend', (e) => {
4529      if (!tracking) return;
4530      tracking = false;
4531      const t = e.changedTouches[0];
4532      const dx = t.clientX - touchStartX;
4533      const dy = t.clientY - touchStartY;
4534      if (Math.abs(dx) < 40 || Math.abs(dx) < Math.abs(dy)) return;
4535      const next = dx < 0 ? (current + 1) % slides.length : (current - 1 + slides.length) % slides.length;
4536      show(next);
4537    }, { passive: true });
4538  }
4539
4540  // ---- Image lightbox ----
4541  const lightbox = section.querySelector('[data-lightbox]');
4542  if (lightbox) {
4543    const lbSlides = lightbox.querySelectorAll('[data-lightbox-slide]');
4544    const lbThumbs = lightbox.querySelectorAll('[data-lightbox-index]');
4545    const zoomBtn = section.querySelector('.cprod__zoom');
4546    let lbCurrent = 0;
4547
4548    const lbImgs = lightbox.querySelectorAll('.cprod__lightbox-img');
4549    const LB_ZOOM_SCALE = 1.8;
4550
4551    // Per-image pan state. tx/ty are the translate offsets (in px) applied
4552    // on top of the zoom scale so a zoomed image can be dragged around.
4553    const lbApplyTransform = (img) => {
4554      const s = img._zoom;
4555      if (!s || !s.zoomed) {
4556        img.style.transform = '';
4557        return;
4558      }
4559      img.style.transform = 'translate(' + s.tx + 'px, ' + s.ty + 'px) scale(' + LB_ZOOM_SCALE + ')';
4560    };
4561
4562    // Clamp the pan so the (scaled) image can't be dragged completely off the
4563    // stage — limit travel to the overflow on each axis.
4564    const lbClampPan = (img) => {
4565      const s = img._zoom;
4566      const rect = img.getBoundingClientRect();
4567      // rect already reflects the current scale; derive the unscaled size.
4568      const baseW = rect.width / LB_ZOOM_SCALE;
4569      const baseH = rect.height / LB_ZOOM_SCALE;
4570      const maxX = (baseW * (LB_ZOOM_SCALE - 1)) / 2;
4571      const maxY = (baseH * (LB_ZOOM_SCALE - 1)) / 2;
4572      s.tx = Math.max(-maxX, Math.min(maxX, s.tx));
4573      s.ty = Math.max(-maxY, Math.min(maxY, s.ty));
4574    };
4575
4576    const lbResetZoom = (img) => {
4577      if (!img) return;
4578      img._zoom = { zoomed: false, tx: 0, ty: 0 };
4579      img.classList.remove('is-zoomed');
4580      lbApplyTransform(img);
4581    };
4582
4583    const lbShow = (idx) => {
4584      if (idx < 0 || idx >= lbSlides.length) return;
4585      lbImgs.forEach(lbResetZoom);
4586      lbCurrent = idx;
4587      lbSlides.forEach((s, i) => s.classList.toggle('is-active', i === idx));
4588      lbThumbs.forEach((t, i) => t.classList.toggle('is-active', i === idx));
4589      const active = lbThumbs[idx];
4590      if (active) active.scrollIntoView({ block: 'nearest', inline: 'nearest' });
4591    };
4592
4593    // Click to zoom in toward the cursor, then drag to pan. A click that didn't
4594    // move (no drag) while zoomed resets back out.
4595    lbImgs.forEach((img) => {
4596      img._zoom = { zoomed: false, tx: 0, ty: 0 };
4597
4598      let dragging = false;
4599      let moved = false;
4600      let startX = 0;
4601      let startY = 0;
4602      let startTx = 0;
4603      let startTy = 0;
4604
4605      const onPointerDown = (e) => {
4606        if (!img._zoom.zoomed) return; // only drag when zoomed in
4607        e.preventDefault();
4608        dragging = true;
4609        moved = false;
4610        startX = e.clientX;
4611        startY = e.clientY;
4612        startTx = img._zoom.tx;
4613        startTy = img._zoom.ty;
4614        img.classList.add('is-dragging');
4615        img.setPointerCapture?.(e.pointerId);
4616      };
4617
4618      const onPointerMove = (e) => {
4619        if (!dragging) return;
4620        const dx = e.clientX - startX;
4621        const dy = e.clientY - startY;
4622        if (Math.abs(dx) > 3 || Math.abs(dy) > 3) moved = true;
4623        img._zoom.tx = startTx + dx;
4624        img._zoom.ty = startTy + dy;
4625        lbClampPan(img);
4626        lbApplyTransform(img);
4627      };
4628
4629      const onPointerUp = (e) => {
4630        if (!dragging) return;
4631        dragging = false;
4632        img.classList.remove('is-dragging');
4633        img.releasePointerCapture?.(e.pointerId);
4634      };
4635
4636      img.addEventListener('pointerdown', onPointerDown);
4637      img.addEventListener('pointermove', onPointerMove);
4638      img.addEventListener('pointerup', onPointerUp);
4639      img.addEventListener('pointercancel', onPointerUp);
4640
4641      img.addEventListener('click', (e) => {
4642        e.stopPropagation();
4643        if (moved) return; // ignore the click that ends a drag
4644        const s = img._zoom;
4645        if (s.zoomed) {
4646          lbResetZoom(img);
4647        } else {
4648          // Center the zoom on the clicked point.
4649          const rect = img.getBoundingClientRect();
4650          const offsetX = e.clientX - (rect.left + rect.width / 2);
4651          const offsetY = e.clientY - (rect.top + rect.height / 2);
4652          s.zoomed = true;
4653          s.tx = -offsetX * (LB_ZOOM_SCALE - 1);
4654          s.ty = -offsetY * (LB_ZOOM_SCALE - 1);
4655          img.classList.add('is-zoomed');
4656          lbApplyTransform(img);
4657          lbClampPan(img);
4658          lbApplyTransform(img);
4659        }
4660      });
4661    });
4662
4663    const lbOpen = (idx) => {
4664      lbShow(typeof idx === 'number' ? idx : current);
4665      lightbox.hidden = false;
4666      document.body.classList.add('overflow-hidden', 'cprod-lightbox-open');
4667      const closeBtn = lightbox.querySelector('[data-lightbox-close]');
4668      if (closeBtn) closeBtn.focus();
4669    };
4670
4671    const lbClose = () => {
4672      lbImgs.forEach(lbResetZoom);
4673      lightbox.hidden = true;
4674      document.body.classList.remove('overflow-hidden', 'cprod-lightbox-open');
4675      // Keep the main gallery in sync with the last viewed image.
4676      show(lbCurrent);
4677      if (zoomBtn) zoomBtn.focus();
4678    };
4679
4680    if (zoomBtn) zoomBtn.addEventListener('click', () => lbOpen(current));
4681
4682    // Clicking the active main image also opens the lightbox.
4683    section.querySelectorAll('.cprod__slide').forEach((slide, i) => {
4684      slide.addEventListener('click', () => {
4685        if (slide.classList.contains('is-active')) lbOpen(i);
4686      });
4687    });
4688
4689    lbThumbs.forEach((t) =>
4690      t.addEventListener('click', () => lbShow(parseInt(t.dataset.lightboxIndex, 10)))
4691    );
4692
4693    // The "+N more" gallery thumb opens the lightbox at that image so the user
4694    // can browse the remaining (hidden) images without first having to zoom.
4695    const moreThumb = section.querySelector('.cprod__thumb--more');
4696    if (moreThumb) {
4697      moreThumb.addEventListener('click', () => {
4698        lbOpen(parseInt(moreThumb.dataset.thumbIndex, 10) || 0);
4699      });
4700    }
4701
4702    lightbox.querySelectorAll('[data-lightbox-close]').forEach((btn) =>
4703      btn.addEventListener('click', lbClose)
4704    );
4705
4706    // Click on the dimmed backdrop (outside the panel) closes.
4707    lightbox.addEventListener('click', (e) => {
4708      if (!e.target.closest('.cprod__lightbox-panel')) lbClose();
4709    });
4710
4711    document.addEventListener('keydown', (e) => {
4712      if (lightbox.hidden) return;
4713      if (e.key === 'Escape') lbClose();
4714      else if (e.key === 'ArrowRight') lbShow((lbCurrent + 1) % lbSlides.length);
4715      else if (e.key === 'ArrowLeft') lbShow((lbCurrent - 1 + lbSlides.length) % lbSlides.length);
4716    });
4717
4718    // Swipe between images on touch devices.
4719    if (lbSlides.length > 1) {
4720      const stage = lightbox.querySelector('.cprod__lightbox-stage');
4721      let sx = 0;
4722      let sy = 0;
4723      let tracking = false;
4724      const anyZoomed = () => Array.prototype.some.call(lbImgs, (img) => img._zoom && img._zoom.zoomed);
4725      stage.addEventListener('touchstart', (e) => {
4726        if (e.touches.length !== 1 || anyZoomed()) return; // panning takes over when zoomed
4727        sx = e.touches[0].clientX;
4728        sy = e.touches[0].clientY;
4729        tracking = true;
4730      }, { passive: true });
4731      stage.addEventListener('touchend', (e) => {
4732        if (!tracking || anyZoomed()) return;
4733        tracking = false;
4734        const t = e.changedTouches[0];
4735        const dx = t.clientX - sx;
4736        const dy = t.clientY - sy;
4737        if (Math.abs(dx) < 40 || Math.abs(dx) < Math.abs(dy)) return;
4738        const next = dx < 0 ? (lbCurrent + 1) % lbSlides.length : (lbCurrent - 1 + lbSlides.length) % lbSlides.length;
4739        lbShow(next);
4740      }, { passive: true });
4741    }
4742  }
4743
4744  // ---- "When do I get it?" delivery modal ----
4745  const delivery = section.querySelector('[data-delivery]');
4746  if (delivery) {
4747    const openBtns = section.querySelectorAll('[data-delivery-open]');
4748    const dlClose = () => {
4749      delivery.hidden = true;
4750      document.body.classList.remove('overflow-hidden');
4751    };
4752    const dlOpen = () => {
4753      delivery.hidden = false;
4754      document.body.classList.add('overflow-hidden');
4755      const closeBtn = delivery.querySelector('[data-delivery-close]');
4756      if (closeBtn) closeBtn.focus();
4757    };
4758
4759    openBtns.forEach((btn) => btn.addEventListener('click', dlOpen));
4760    delivery.querySelectorAll('[data-delivery-close]').forEach((btn) =>
4761      btn.addEventListener('click', dlClose)
4762    );
4763    // Click on the dimmed backdrop (outside the panel) closes.
4764    delivery.addEventListener('click', (e) => {
4765      if (!e.target.closest('.cprod__deliv-panel')) dlClose();
4766    });
4767    document.addEventListener('keydown', (e) => {
4768      if (delivery.hidden) return;
4769      if (e.key === 'Escape') dlClose();
4770    });
4771  }
4772
4773  // ---- Variant picker ----
4774  const variantsScript = section.querySelector('[data-product-variants]');
4775  let allVariants = [];
4776  if (variantsScript) {
4777    try { allVariants = JSON.parse(variantsScript.textContent); } catch (e) { allVariants = []; }
4778  }
4779
4780  const productUrl = section.querySelector('[data-variant-picker]')?.dataset.productUrl;
4781  const idInput = section.querySelector('input[name="id"]');
4782  // Multiple price displays now exist (buy column, inline, sticky bar).
4783  const priceWraps = section.querySelectorAll('[data-price-container]');
4784  const variantInputs = section.querySelectorAll('.cprod__variants input[type="radio"]');
4785
4786  function getSelectedOptions() {
4787    const options = [];
4788    section.querySelectorAll('.cprod__option').forEach((fieldset) => {
4789      const checked = fieldset.querySelector('input[type="radio"]:checked');
4790      if (checked) options.push(checked.value);
4791    });
4792    return options;
4793  }
4794
4795  function findVariant(options) {
4796    return allVariants.find((v) => options.every((opt, i) => v.options[i] === opt));
4797  }
4798
4799  function formatMoney(cents) {
4800    const rand = cents / 100;
4801    const whole = Math.floor(rand);
4802    return 'R ' + whole.toLocaleString('en-ZA');
4803  }
4804
4805  // Mirrors the Liquid above: price / 6, hidden below R100.
4806  const bnplRows = section.querySelectorAll('[data-bnpl]');
4807  const BNPL_MIN_CENTS = 10000;
4808
4809  // Grouped by hand rather than via toLocaleString('en-ZA') — that locale's group
4810  // separator varies by browser ICU version, and would drift from the comma the
4811  // Liquid-rendered money_without_currency figure uses on first paint.
4812  // `whole` drops the cents, for the mobile panel's [data-bnpl-whole] amount.
4813  // Truncated, never rounded, matching the Liquid `| split: '.' | first`: the
4814  // "from" figure must stay a floor and never advertise a payment below the real one.
4815  function formatInstalment(cents, whole) {
4816    const part = Math.floor(cents / 6);
4817    const rands = Math.floor(part / 100).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
4818    if (whole) return 'R ' + rands;
4819    return 'R ' + rands + '.' + String(part % 100).padStart(2, '0');
4820  }
4821
4822  function updateUI(variant) {
4823    if (!variant) return;
4824    if (idInput) { idInput.value = variant.id; idInput.disabled = !variant.available; }
4825    if (productUrl) window.history.replaceState({}, '', productUrl + '?variant=' + variant.id);
4826    section.querySelectorAll('.cprod__option').forEach((fieldset) => {
4827      const valueLabel = fieldset.querySelector('[data-selected-value]');
4828      const checked = fieldset.querySelector('input[type="radio"]:checked');
4829      if (valueLabel && checked) valueLabel.textContent = checked.value;
4830    });
4831    priceWraps.forEach((priceWrap) => {
4832      const now = priceWrap.querySelector('.cprod__price-now');
4833      const was = priceWrap.querySelector('.cprod__price-was');
4834      if (now) now.textContent = formatMoney(variant.price);
4835      if (was) {
4836        if (variant.compare_at_price && variant.compare_at_price > variant.price) {
4837          was.textContent = formatMoney(variant.compare_at_price);
4838          was.style.display = '';
4839        } else {
4840          was.style.display = 'none';
4841        }
4842      }
4843    });
4844    bnplRows.forEach((row) => {
4845      row.hidden = variant.price < BNPL_MIN_CENTS;
4846      const amount = row.querySelector('[data-bnpl-amount]');
4847      if (amount) amount.textContent = formatInstalment(variant.price, amount.hasAttribute('data-bnpl-whole'));
4848    });
4849    section.querySelectorAll('.cprod__atc').forEach((atc) => {
4850      atc.disabled = !variant.available;
4851      const lbl = atc.querySelector('span');
4852      if (lbl) lbl.textContent = variant.available ? 'Add to Cart' : 'Sold out';
4853    });
4854    section.querySelectorAll('.cprod__buy-now').forEach((buyNow) => {
4855      buyNow.disabled = !variant.available;
4856    });
4857    const stockEl = section.querySelector('[data-stock-indicator]');
4858    const inv = variant.inventory_quantity;
4859    const tracked = variant.inventory_management === 'shopify';
4860    if (stockEl) {
4861      const showStock = tracked && inv > 0 && inv <= 10;
4862      if (showStock) {
4863        stockEl.removeAttribute('hidden');
4864        const countEl = stockEl.querySelector('[data-stock-count]');
4865        if (countEl) countEl.textContent = inv;
4866      } else {
4867        stockEl.setAttribute('hidden', '');
4868      }
4869    }
4870    section.querySelectorAll('.cprod__qty-input').forEach((qtyInput) 
4870=> {
4871      if (tracked && inv > 0) {
4872        qtyInput.max = inv;
4873        qtyInput.dataset.max = inv;
4874        if ((parseInt(qtyInput.value, 10) || 1) > inv) qtyInput.value = inv;
4875      } else {
4876        qtyInput.removeAttribute('max');
4877        delete qtyInput.dataset.max;
4878      }
4879      // Re-evaluate +/- disabled states against the new max (defined below).
4880      if (typeof refreshBtnState === 'function') {
4881        refreshBtnState(qtyInput.closest('quantity-input') || qtyInput.parentElement);
4882      }
4883    });
4884    if (variant.featured_media) {
4885      let target = -1;
4886      slides.forEach((s, i) => { if (s.dataset.mediaId == variant.featured_media.id) target = i; });
4887      if (target >= 0) show(target);
4888    }
4889  }
4890
4891  variantInputs.forEach((input) => {
4892    input.addEventListener('change', () => updateUI(findVariant(getSelectedOptions())));
4893  });
4894
4895  // ----- Quantity steppers ------------------------------------------------
4896  // Self-contained, instant stepper: clamps to min/max, updates the value
4897  // synchronously on click (no native stepUp/stepDown lag), gives immediate
4898  // disabled-state feedback, and supports press-and-hold to repeat with a
4899  // short acceleration ramp. We take over the +/- buttons inside these
4900  // steppers and stop the click from bubbling to the global <quantity-input>
4901  // handler so the value is only stepped once.
4902  const realQty = section.querySelector('.cprod__buy-panel .cprod__qty-input');
4903  const proxyQty = section.querySelector('.cprod__status .cprod__qty-input');
4904
4905  function clampQty(input, val) {
4906    const min = parseInt(input.dataset.min, 10) || parseInt(input.min, 10) || 1;
4907    const maxAttr = input.dataset.max || input.max;
4908    const max = maxAttr ? parseInt(maxAttr, 10) : Infinity;
4909    if (isNaN(val)) val = min;
4910    return Math.min(Math.max(val, min), max);
4911  }
4912
4913  function refreshBtnState(stepper) {
4914    const input = stepper.querySelector('.cprod__qty-input');
4915    if (!input) return;
4916    const val = clampQty(input, parseInt(input.value, 10));
4917    const min = parseInt(input.dataset.min, 10) || parseInt(input.min, 10) || 1;
4918    const maxAttr = input.dataset.max || input.max;
4919    const max = maxAttr ? parseInt(maxAttr, 10) : Infinity;
4920    const minus = stepper.querySelector('[name="minus"]');
4921    const plus = stepper.querySelector('[name="plus"]');
4922    if (minus) minus.classList.toggle('is-disabled', val <= min);
4923    if (plus) plus.classList.toggle('is-disabled', val >= max);
4924  }
4925
4926  function enhanceStepper(stepper) {
4927    if (!stepper) return;
4928    const input = stepper.querySelector('.cprod__qty-input');
4929    if (!input) return;
4930
4931    const setValue = (val) => {
4932      const next = clampQty(input, val);
4933      if (String(next) === input.value) return;
4934      input.value = next;
4935      input.dispatchEvent(new Event('input', { bubbles: true }));
4936      input.dispatchEvent(new Event('change', { bubbles: true }));
4937    };
4938
4939    const step = (dir) => setValue((parseInt(input.value, 10) || 0) + dir);
4940
4941    stepper.querySelectorAll('.cprod__qty-btn').forEach((btn) => {
4942      const dir = btn.name === 'minus' ? -1 : 1;
4943      let holdTimer, repeatTimer, ticks;
4944
4945      const startHold = (e) => {
4946        if (e.button != null && e.button !== 0) return; // left / touch only
4947        e.preventDefault();
4948        step(dir);
4949        refreshBtnState(stepper);
4950        ticks = 0;
4951        // After a brief pause, begin repeating; speed up as the hold continues.
4952        holdTimer = setTimeout(function tick() {
4953          step(dir);
4954          refreshBtnState(stepper);
4955          ticks++;
4956          const delay = ticks > 12 ? 50 : ticks > 5 ? 90 : 150;
4957          repeatTimer = setTimeout(tick, delay);
4958        }, 400);
4959      };
4960      const stopHold = () => {
4961        clearTimeout(holdTimer);
4962        clearTimeout(repeatTimer);
4963      };
4964
4965      // pointerdown drives the action for instant response; swallow the click
4966      // so the global <quantity-input> handler doesn't step a second time.
4967      btn.addEventListener('pointerdown', startHold);
4968      btn.addEventListener('pointerup', stopHold);
4969      btn.addEventListener('pointerleave', stopHold);
4970      btn.addEventListener('pointercancel', stopHold);
4971      btn.addEventListener('click', (e) => { e.preventDefault(); e.stopImmediatePropagation(); });
4972    });
4973
4974    // Typed input: clamp on change/blur.
4975    input.addEventListener('change', () => {
4976      input.value = clampQty(input, parseInt(input.value, 10));
4977      refreshBtnState(stepper);
4978    });
4979
4980    refreshBtnState(stepper);
4981  }
4982
4983  [proxyQty, realQty].forEach((inp) => {
4984    if (inp) enhanceStepper(inp.closest('quantity-input') || inp.parentElement);
4985  });
4986
4987  // The mobile stepper is a UI proxy; mirror its value into the real (form)
4988  // quantity input, which is what actually submits.
4989  if (realQty && proxyQty) {
4990    proxyQty.value = realQty.value;
4991    const syncToReal = () => {
4992      realQty.value = proxyQty.value;
4993      const realStepper = realQty.closest('quantity-input') || realQty.parentElement;
4994      refreshBtnState(realStepper);
4995    };
4996    proxyQty.addEventListener('input', syncToReal);
4997    proxyQty.addEventListener('change', syncToReal);
4998  }
4999
5000  // Buy Now: AJAX to cart, then checkout. Shared by every [data-buy-now].
5001  section.querySelectorAll('[data-buy-now]').forEach((buyNowBtn) => {
5002    buyNowBtn.addEventListener('click', async () => {
5003      const form = section.querySelector('form[action*="/cart/add"]');
5004      if (!form) return;
5005      const formData = new FormData(form);
5006      buyNowBtn.disabled = true;
5007      const orig = buyNowBtn.textContent;
5008      buyNowBtn.textContent = 'Adding...';
5009      try {
5010        const res = await fetch('/cart/add.js', { method: 'POST', body: formData });
5011        if (!res.ok) throw new Error('add failed');
5012        window.location.href = '/checkout';
5013      } catch (err) {
5014        console.error('Buy Now failed:', err);
5015        buyNowBtn.disabled = false;
5016        buyNowBtn.textContent = orig;
5017      }
5018    });
5019  });
5020
5021  // ---- "Share This Product" modal ----
5022  const shareBtn = section.querySelector('[data-share-btn]');
5023  const share = section.querySelector('[data-share]');
5024  if (shareBtn && share) {
5025    const shClose = () => {
5026      share.hidden = true;
5027      document.body.classList.remove('overflow-hidden');
5028    };
5029    const shOpen = () => {
5030      share.hidden = false;
5031      document.body.classList.add('overflow-hidden');
5032      const closeBtn = share.querySelector('[data-share-close]');
5033      if (closeBtn) closeBtn.focus();
5034    };
5035
5036    shareBtn.addEventListener('click', shOpen);
5037    share.querySelectorAll('[data-share-close]').forEach((btn) =>
5038      btn.addEventListener('click', shClose)
5039    );
5040    // Click on the dimmed backdrop (outside the panel) closes.
5041    share.addEventListener('click', (e) => {
5042      if (!e.target.closest('.cprod__share-panel')) shClose();
5043    });
5044    document.addEventListener('keydown', (e) => {
5045      if (share.hidden) return;
5046      if (e.key === 'Escape') shClose();
5047    });
5048
5049    // Copy-link field.
5050    const copyBtn = share.querySelector('[data-share-copy]');
5051    const urlInput = share.querySelector('[data-share-url]');
5052    if (copyBtn && urlInput) {
5053      copyBtn.addEventListener('click', async () => {
5054        try {
5055          await navigator.clipboard.writeText(urlInput.value);
5056        } catch (e) {
5057          urlInput.select();
5058          document.execCommand('copy');
5059        }
5060        copyBtn.classList.add('is-copied');
5061        setTimeout(() => copyBtn.classList.remove('is-copied'), 1500);
5062      });
5063    }
5064  }
5065
5066  // ----- Mobile sticky add-to-cart: reveal only after the user scrolls past
5067  // the on-page Add to Cart / Buy It Now buttons (i.e. they leave the viewport
5068  // above). Hidden at the top of the page and whenever those buttons are in
5069  // view. Desktop never shows the sticky bar (CSS keeps it display:none). -----
5070  const stickyBar = section.querySelector('.cprod__stickybar');
5071  const stickyAnchor = section.querySelector('.cprod__status-actions');
5072  if (stickyBar && stickyAnchor && 'IntersectionObserver' in window) {
5073    const mql = window.matchMedia('(max-width: 989px)');
5074    const obs = new IntersectionObserver((entries) => {
5075      const entry = entries[0];
5076      // Show only on mobile, only once the buttons have scrolled off the TOP
5077      // of the viewport (boundingClientRect.bottom <= 0 means above the fold).
5078      const scrolledPast = !entry.isIntersecting && entry.boundingClientRect.bottom <= 0;
5079      stickyBar.classList.toggle('is-visible', mql.matches && scrolledPast);
5080    }, { threshold: 0, rootMargin: '0px' });
5081    obs.observe(stickyAnchor);
5082    // Re-evaluate when crossing the mobile breakpoint so the bar hides on desktop.
5083    mql.addEventListener('change', () => {
5084      if (!mql.matches) stickyBar.classList.remove('is-visible');
5085    });
5086  }
5087})();
5088</script>
5088<script type="application/json" data-rv-current>
5089{
5090  "id": 8270253555759,
5091  "handle": "viewsonic-27-180hz-gaming-monitor",
5092  "title": "ViewSonic VX2779-HD-PRO 27\" Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10",
5093  "url": "\/products\/viewsonic-27-180hz-gaming-monitor",
5094  "image": "\/\/alcell.co.za\/cdn\/shop\/files\/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857\u0026width=800",
5095  "price": 291200,
5096  "compare": 369900,
5097  "available": true,
5098  "variant": 45356979683375,
5099  "new": false
5100}
5101</script>
vendor: 1 bytes, line 5101
5101
5102<script src="//alcell.co.za/cdn/shop/t/2/assets/recently-viewed.js?v=163219252848138621641782917457" defer></script>
vendor: 1 bytes, line 5102
5102
5103<script type="application/ld+json">
5104{
5105  "@context": "https://schema.org/",
5106  "@type": "Product",
5107  "@id": "https:\/\/alcell.co.za\/products\/viewsonic-27-180hz-gaming-monitor#product",
5108  "name": "ViewSonic VX2779-HD-PRO 27\" Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10",
5109  "url": "https:\/\/alcell.co.za\/products\/viewsonic-27-180hz-gaming-monitor"
5110, "description": "The ViewSonic VX2779-HD-PRO is a versatile 27-inch Full HD monitor designed to elevate your visual experience,whether you're working or gaming. With a high 180Hz refresh rate and lightning-fast 1ms MPRT response time, thismonitor ensures smooth visuals and minimal input lag – ideal for gamers seeking a competitive advantage. Equippedwith SuperClear® IPS technology, it boasts wide viewing angles and breathtaking visuals, perfect for immersivegaming sessions, creative endeavors, and efficient office work. Beyond performance, the monitor's sleek designelevates your workspace aesthetics, combining form and function for a complete package.Key features\nFast Refresh Rate, Smooth Gameplay\nSuperClear® IPS panel\nAMD FreeSync™ eliminates screen tearing and reduce stuttering\nHDMI, Display Port inputs for simple connectivity\nSpecifications\n27” 180Hz Gaming Monitor\n180Hz Refresh rate delivers fluid visuals\nRapid 1ms MPRT for crisp image\nHDR10 Delivers Stellar Contrast and Color Accuracy\n", "image": ["https:\/\/alcell.co.za\/cdn\/shop\/files\/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857\u0026width=2048", "https:\/\/alcell.co.za\/cdn\/shop\/files\/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857\u0026width=2048", "https:\/\/alcell.co.za\/cdn\/shop\/files\/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858\u0026width=2048", "https:\/\/alcell.co.za\/cdn\/shop\/files\/vx2779-hd-pro_4.jpg?v=1782311857\u0026width=2048"], "brand": { "@type": "Brand", "name": "VIEWSONIC" }, "sku": "VX2779-HD-PRO", "mpn": "VX2779-HD-PRO", "gtin": "766907022124", "category": "TVs \u0026 Screens", "offers": {
5111    "@type": "Offer",
5112    "price": "2912.0",
5113    "priceCurrency": "ZAR",
5114    "availability": "https://schema.org/InStock",
5115    "itemCondition": "https://schema.org/NewCondition",
5116    "priceValidUntil": "2027-10-07",
5117    "url": "https:\/\/alcell.co.za\/products\/viewsonic-27-180hz-gaming-monitor?variant=45356979683375",
5118    "seller": { "@type": "Organization", "name": "Alcell" },
5119    "hasMerchantReturnPolicy": {
5120      "@type": "MerchantReturnPolicy",
5121      "applicableCountry": "ZA",
5122      "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow","merchantReturnDays": 7,
5123      "returnMethod": ["https://schema.org/ReturnByMail", "https://schema.org/ReturnInStore"],
5124      "returnFees": "https://schema.org/ReturnFeesCustomerResponsibility",
5125      "merchantReturnLink": "https:\/\/alcell.co.za\/pages\/return-policy"
5126    }
5127  }
5128}
5129</script>
vendor: 1 bytes, line 5129
5129
5130<script type="application/ld+json">
5131{
5132  "@context": "https://schema.org",
5133  "@type": "BreadcrumbList",
5134  "itemListElement": [
5135    { "@type": "ListItem", "position": 1, "name": "Home", "item": "https:\/\/alcell.co.za\/" },{ "@type": "ListItem", "position": 2, "name": "TVs \u0026 Screens", "item": "https:\/\/alcell.co.za\/collections\/all\/tvs-screens" }
5136    ,{ "@type": "ListItem", "position": 3, "name": "ViewSonic VX2779-HD-PRO 27\" Full HD 180Hz IPS Gaming Monitor - 1ms, FreeSync, HDR10", "item": "https:\/\/alcell.co.za\/products\/viewsonic-27-180hz-gaming-monitor" }]
5137}
5138</script>
5138
5139</section><section id="shopify-section-template--21741425459247__description" class="shopify-section section section-product-description"><link href="//alcell.co.za/cdn/shop/t/2/assets/section-product-description.css?v=45090919605183338621782918142" rel="stylesheet" type="text/css" media="all" />
5140<section class="pdesc" style="padding-top: 12px; padding-bottom: 0px;">
5141    <div class="pdesc__wrap">
5142      <div class="pdesc__card" data-pdesc>
5143        <h2 class="pdesc__heading">Description</h2>
5144
5145        <div class="pdesc__body" data-pdesc-body>
5146          <p>The ViewSonic VX2779-HD-PRO is a versatile 27-inch Full HD monitor designed to elevate your visual experience,whether you're working or gaming. With a high 180Hz refresh rate and lightning-fast 1ms MPRT response time, thismonitor ensures smooth visuals and minimal input lag – ideal for gamers seeking a competitive advantage. Equippedwith SuperClear® IPS technology, it boasts wide viewing angles and breathtaking visuals, perfect for immersivegaming sessions, creative endeavors, and efficient office work. Beyond performance, the monitor's sleek designelevates your workspace aesthetics, combining form and function for a complete package.</p><p><strong>Key features</strong></p><ul>
5147<li>Fast Refresh Rate, Smooth Gameplay</li>
5148<li>SuperClear® IPS panel</li>
5149<li>AMD FreeSync™ eliminates screen tearing and reduce stuttering</li>
5150<li>HDMI, Display Port inputs for simple connectivity</li>
5151</ul><p><strong>Specifications</strong></p><ul>
5152<li>27” 180Hz Gaming Monitor</li>
5153<li>180Hz Refresh rate delivers fluid visuals</li>
5154<li>Rapid 1ms MPRT for crisp image</li>
5155<li>HDR10 Delivers Stellar Contrast and Color Accuracy</li>
5156</ul>
5157        </div>
5158
5159        <button type="button" class="pdesc__toggle" data-pdesc-toggle hidden>
5160          <span class="pdesc__toggle-more">Show More</span>
5161          <span class="pdesc__toggle-less">Show Less</span>
5162        </button>
5163      </div><aside class="pdesc__aside"><img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/Ezviz_2.jpg?v=1779980026" alt="Ezviz" class="pdesc__aside-img" loading="lazy"></aside></div>
5164  </section>
5165
5166  
5166<script>
5167    (function() {
5168      document.querySelectorAll('[data-pdesc]').forEach((card) => {
5169        const body = card.querySelector('[data-pdesc-body]');
5170        const toggle = card.querySelector('[data-pdesc-toggle]');
5171        if (!body || !toggle) return;
5172
5173        const COLLAPSED_HEIGHT = 280;
5174        // Measure full content height; only show toggle if it overflows.
5175        requestAnimationFrame(() => {
5176          const fullHeight = body.scrollHeight;
5177          if (fullHeight > COLLAPSED_HEIGHT + 20) {
5178            card.classList.add('is-collapsed');
5179            toggle.hidden = false;
5180          }
5181        });
5182
5183        toggle.addEventListener('click', () => {
5184          card.classList.toggle('is-collapsed');
5185        });
5186      });
5187    })();
5188  </script>
5188
5189</section><section id="shopify-section-template--21741425459247__flix-media" class="shopify-section section section-flix-media"><section class="flix"><div class="flix__wrap">
5190      <div class="flix__col">
5191        <div id="flix-minisite"></div>
5192        <div id="flix-inpage"></div>
5193      </div>
5194    </div>
5195
5196    
5196<script
5197      async
5198      type="text/javascript"
5199      src="//media.flixfacts.com/js/loader.js"
5200      data-flix-distributor="18662"
5201      data-flix-language="za"
5202      data-flix-brand="VIEWSONIC"
5203      data-flix-mpn="VX2779-HD-PRO"
5204      data-flix-ean="766907022124"
5205      data-flix-button="flix-minisite"
5206      data-flix-inpage="flix-inpage"
5207      data-flix-price=""
5208    ></script>
5208
5209  </section>
5210
5211  <style>
5212    .flix {
5213      width: 100%;
5214      /* No vertical padding by default — on products Flix has no content for,
5215         #flix-inpage stays empty and the section must collapse to zero height
5216         so it never adds a gap between the description and the next section. */
5217      padding-top: 0;
5218      padding-bottom: 0;
5219    }
5220    /* Reinstate the configured padding ONLY once Flix injects real, RENDERED
5221       content into #flix-inpage. The class is toggled from JS by measuring the
5222       block's height — NOT via :has(#flix-inpage > *), because Flix can leave an
5223       empty / hidden placeholder child in #flix-inpage (notably on iOS Safari).
5224       :has() fires on that empty child and paints 48px of phantom padding, which
5225       on mobile lands directly under the reordered Product Information section. */
5226    .flix.flix--has-content {
5227      padding-top: 24px;
5228      padding-bottom: 24px;
5229    }
5230    /* Match the Description section's container exactly (.pdesc__wrap:
5231       1600px max + 24px gutters, 32px ≥990px, 0 on mobile) so the Flix
5232       block lines up edge-for-edge with the description, not full-bleed.
5233       overflow-x: clip contains any full-bleed Flix module backgrounds. */
5234    .flix__heading,
5235    .flix__wrap {
5236      max-width: 1600px;
5237      margin-inline: auto;
5238      padding-inline: 24px;
5239      box-sizing: border-box;
5240    }
5241    /* Same grid as .pdesc__wrap: flexible left column + fixed 320px right
5242       column, 18px gap. Flix lives in the left column only, so it matches
5243       the white description card's width and sits left-aligned. */
5244    .flix__wrap {
5245      display: grid;
5246      grid-template-columns: 1fr;
5247      gap: 18px;
5248    }
5249    .flix__col {
5250      min-width: 0;        /* let the column shrink; stops Flix forcing it wider */
5251      overflow-x: clip;    /* contain any full-bleed Flix module backgrounds */
5252    }
5253    @media (min-width: 990px) {
5254      .flix__heading,
5255      .flix__wrap { padding-inline: 32px; }
5256      .flix__wrap { grid-template-columns: minmax(0, 1fr) 320px; }
5257    }
5258    @media (max-width: 989px) {
5259      .flix__heading,
5260      .flix__wrap { padding-inline: 0; }
5261    }
5262  </style>
5263
5264  
5264<script>
5265    (function () {
5266      var flix = document.querySelector('.flix');
5267      if (!flix) return;
5268      var inpage = flix.querySelector('#flix-inpage');
5269      if (!inpage) return;
5270      // Only frame the block with padding when Flix has injected REAL, rendered
5271      // content. An empty or hidden placeholder (which some Flix builds leave in
5272      // #flix-inpage — notably on iOS Safari) measures ~0px tall, so the section
5273      // stays collapsed instead of adding a phantom gap above the next section.
5274      function sync() {
5275        flix.classList.toggle('flix--has-content', inpage.getBoundingClientRect().height > 4);
5276      }
5277      sync();
5278      // Flix loads asynchronously and reflows as its modules/images arrive.
5279      try {
5280        new ResizeObserver(sync).observe(inpage);
5281      } catch (e) {
5282        new MutationObserver(sync).observe(inpage, { childList: true, subtree: true });
5283      }
5284      window.addEventListener('load', sync);
5285    })();
5286  </script>
5286
5287</section><section id="shopify-section-template--21741425459247__17785031832c25f2ae" class="shopify-section section"><div class="page-width scroll-trigger animate--slide-in"></div>
5288
5289
5290</section><section id="shopify-section-template--21741425459247__feature-accordion" class="shopify-section section"><link href="//alcell.co.za/cdn/shop/t/2/assets/section-product-blocks.css?v=28334982821278172421778851735" rel="stylesheet" type="text/css" media="all" />
5291
5292</section><section id="shopify-section-template--21741425459247__frequently-bought-together" class="shopify-section section"><link href="//alcell.co.za/cdn/shop/t/2/assets/component-card.css?v=19729832699168407201780997736" rel="stylesheet" type="text/css" media="all" />
5293<link href="//alcell.co.za/cdn/shop/t/2/assets/component-price.css?v=47596247576480123001778844525" rel="stylesheet" type="text/css" media="all" />
5294<link href="//alcell.co.za/cdn/shop/t/2/assets/section-related-products.css?v=8487592862479025431781088153" rel="stylesheet" type="text/css" media="all" />
5295<link href="//alcell.co.za/cdn/shop/t/2/assets/section-featured-tabs.css?v=51084217407839345161790095688" rel="stylesheet" type="text/css" media="all" />
5296<div class="color-scheme-1 gradient">
5297    <div
5298      class="related-products page-width section-fbt-padding isolate"
5299      style="padding-top: 0px; padding-bottom: 40px;"
5300    >
5301      <h2 class="related-products__heading inline-richtext h2"><span class="fbt-heading--desktop">Frequently Bought Together</span>
5302        <span class="fbt-heading--mobile">Frequently bought</span>
5303      </h2>
5304      <style>
5305        .fbt-heading--mobile { display: none; }
5306        @media screen and (max-width: 749px) {
5307          .fbt-heading--desktop { display: none; }
5308          .fbt-heading--mobile { display: inline; }
5309        }
5310      </style>
5311      <ul
5312        class="grid product-grid grid--4-col-desktop grid--2-col-tablet-down"
5313        role="list"
5314      ><li class="grid__item"><article class="ftabs__card" tabindex="0">
5315  <div class="ftabs__media">
5316    <a href="/products/zatech-gaming-mouse-pad-a-11-razor" class="ftabs__media-link" aria-label="ZATECH A-11 Razor Gaming Mouse Pad - Smooth Low-Friction, Anti-Slip Base"><img src="//alcell.co.za/cdn/shop/files/za-mp002_1.jpg?v=1778851580&amp;width=800" alt="Zatech gaming mouse pad with green Razer Mantis-style snake logo print, flat top view" srcset="//alcell.co.za/cdn/shop/files/za-mp002_1.jpg?v=1778851580&amp;width=300 300w, //alcell.co.za/cdn/shop/files/za-mp002_1.jpg?v=1778851580&amp;width=500 500w, //alcell.co.za/cdn/shop/files/za-mp002_1.jpg?v=1778851580&amp;width=700 700w" width="800" height="600" loading="lazy" sizes="(min-width: 990px) 22vw, (min-width: 750px) 33vw, 46vw" class="ftabs__img">
5317</a><button
5318      type="button"
5319      class="ftabs__wishlist"
5320      data-wishlist-toggle
5321      data-wishlist-id="8270271545391"
5322      data-wishlist-handle="zatech-gaming-mouse-pad-a-11-razor"
5323      data-wishlist-title="ZATECH A-11 Razor Gaming Mouse Pad - Smooth Low-Friction, Anti-Slip Base"
5324      data-wishlist-url="/products/zatech-gaming-mouse-pad-a-11-razor"
5325      data-wishlist-image="//alcell.co.za/cdn/shop/files/za-mp002_1.jpg?v=1778851580&width=400"
5326      data-wishlist-price="2900"
5327      data-wishlist-compare="2500"
5328      data-wishlist-available="true"
5329      data-wishlist-variant="45357002129455"
5330      aria-pressed="false"
5331      aria-label="Add to wishlist"
5332    >
5333      <svg width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
5334    </button><a
5335        href="/products/zatech-gaming-mouse-pad-a-11-razor"
5336        class="ftabs__atc"
5337        tabindex="-1"
5338        aria-label="Add ZATECH A-11 Razor Gaming Mouse Pad - Smooth Low-Friction, Anti-Slip Base to cart"
5339        data-card-atc
5340        data-url="/products/zatech-gaming-mouse-pad-a-11-razor"
5341        data-variant="45357002129455">
5342        Add To Cart
5343        <svg width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg>
5344      </a></div>
5345
5346  <div class="ftabs__body">
5347    <a href="/products/zatech-gaming-mouse-pad-a-11-razor" class="ftabs__title-link">
5348      <p class="ftabs__title">ZATECH A-11 Razor Gaming Mouse Pad - Smooth Low-Friction, Anti-Slip Base</p>
5349    </a><span class="ftabs__stock">In stock</span><div class="ftabs__price-row"><span class="ftabs__price">R 29</span></div>
5350  </div>
5351</article></li><li class="grid__item"><article class="ftabs__card" tabindex="0">
5352  <div class="ftabs__media">
5353    <a href="/products/zatech-usb-joystick-single" class="ftabs__media-link" aria-label="ZATECH ZR-701 USB Single Joystick Gamepad - 11 Fire Buttons, Dual Shock Vibration"><span class="ftabs__badge ftabs__badge--sale">-2%</span><img src="//alcell.co.za/cdn/shop/files/zr-701.jpg?v=1778851757&amp;width=800" alt="Zatech ZR-701 USB joystick gamepad with coiled cable, angled front view" srcset="//alcell.co.za/cdn/shop/files/zr-701.jpg?v=1778851757&amp;width=300 300w, //alcell.co.za/cdn/shop/files/zr-701.jpg?v=1778851757&amp;width=500 500w, //alcell.co.za/cdn/shop/files/zr-701.jpg?v=1778851757&amp;width=700 700w" width="800" height="600" loading="lazy" sizes="(min-width: 990px) 22vw, (min-width: 750px) 33vw, 46vw" class="ftabs__img">
5354</a><button
5355      type="button"
5356      class="ftabs__wishlist"
5357      data-wishlist-toggle
5358      data-wishlist-id="8270277476399"
5359      data-wishlist-handle="zatech-usb-joystick-single"
5360      data-wishlist-title="ZATECH ZR-701 USB Single Joystick Gamepad - 11 Fire Buttons, Dual Shock Vibration"
5361      data-wishlist-url="/products/zatech-usb-joystick-single"
5362      data-wishlist-image="//alcell.co.za/cdn/shop/files/zr-701.jpg?v=1778851757&width=400"
5363      data-wishlist-price="3800"
5364      data-wishlist-compare="3900"
5365      data-wishlist-available="true"
5366      data-wishlist-variant="45357014122543"
5367      aria-pressed="false"
5368      aria-label="Add to wishlist"
5369    >
5370      <svg width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
5371    </button><a
5372        href="/products/zatech-usb-joystick-single"
5373        class="ftabs__atc"
5374        tabindex="-1"
5375        aria-label="Add ZATECH ZR-701 USB Single Joystick Gamepad - 11 Fire Buttons, Dual Shock Vibration to cart"
5376        data-card-atc
5377        data-url="/products/zatech-usb-joystick-single"
5378        data-variant="45357014122543">
5379        Add To Cart
5380        <svg width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg>
5381      </a></div>
5382
5383  <div class="ftabs__body">
5384    <a href="/products/zatech-usb-joystick-single" class="ftabs__title-link">
5385      <p class="ftabs__title">ZATECH ZR-701 USB Single Joystick Gamepad - 11 Fire Buttons, Dual Shock Vibration</p>
5386    </a><span class="ftabs__stock">In stock</span><div class="ftabs__price-row"><span class="ftabs__price ftabs__price--sale">R 38</span>
5387        <span class="ftabs__price ftabs__price--compare">R 39</span></div>
5388  </div>
5389</article></li><li class="grid__item"><article class="ftabs__card" tabindex="0">
5390  <div class="ftabs__media">
5391    <a href="/products/joystick-usb-single" class="ftabs__media-link" aria-label="USB Wired Game Pad Joystick Single (USB-701) - 8-Way, 10 Fire Buttons, Turbo, PC"><img src="//alcell.co.za/cdn/shop/files/usb-701.jpg?v=1778850941&amp;width=800" alt="USB-701 wired single game pad with its coiled cable, angled product shot" srcset="//alcell.co.za/cdn/shop/files/usb-701.jpg?v=1778850941&amp;width=300 300w, //alcell.co.za/cdn/shop/files/usb-701.jpg?v=1778850941&amp;width=500 500w, //alcell.co.za/cdn/shop/files/usb-701.jpg?v=1778850941&amp;width=700 700w" width="800" height="600" loading="lazy" sizes="(min-width: 990px) 22vw, (min-width: 750px) 33vw, 46vw" class="ftabs__img">
5392</a><button
5393      type="button"
5394      class="ftabs__wishlist"
5395      data-wishlist-toggle
5396      data-wishlist-id="8270250377263"
5397      data-wishlist-handle="joystick-usb-single"
5398      data-wishlist-title="USB Wired Game Pad Joystick Single (USB-701) - 8-Way, 10 Fire Buttons, Turbo, PC"
5399      data-wishlist-url="/products/joystick-usb-single"
5400      data-wishlist-image="//alcell.co.za/cdn/shop/files/usb-701.jpg?v=1778850941&width=400"
5401      data-wishlist-price="4900"
5402      data-wishlist-compare="4900"
5403      data-wishlist-available="true"
5404      data-wishlist-variant="45356975259695"
5405      aria-pressed="false"
5406      aria-label="Add to wishlist"
5407    >
5408      <svg width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
5409    </button><a
5410        href="/products/joystick-usb-single"
5411        class="ftabs__atc"
5412        tabindex="-1"
5413        aria-label="Add USB Wired Game Pad Joystick Single (USB-701) - 8-Way, 10 Fire Buttons, Turbo, PC to cart"
5414        data-card-atc
5415        data-url="/products/joystick-usb-single"
5416        data-variant="45356975259695">
5417        Add To Cart
5418        <svg width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg>
5419      </a></div>
5420
5421  <div class="ftabs__body">
5422    <a href="/products/joystick-usb-single" class="ftabs__title-link">
5423      <p class="ftabs__title">
5423USB Wired Game Pad Joystick Single (USB-701) - 8-Way, 10 Fire Buttons, Turbo, PC</p>
5424    </a><span class="ftabs__stock">In stock</span><div class="ftabs__price-row"><span class="ftabs__price">R 49</span></div>
5425  </div>
5426</article></li><li class="grid__item"><article class="ftabs__card" tabindex="0">
5427  <div class="ftabs__media">
5428    <a href="/products/zatech-gaming-mousepad-300x700x2mm-silk" class="ftabs__media-link" aria-label="ZATECH Gaming Mouse Pad 300x700x2mm - Stitched Edge, Non-Slip, Water-Resistant"><span class="ftabs__badge ftabs__badge--sale">-2%</span><img src="//alcell.co.za/cdn/shop/files/za-mp003-blue.jpg?v=1778851581&amp;width=800" alt="Zatech extended gaming mouse pad printed with PUBG characters fleeing an explosion" srcset="//alcell.co.za/cdn/shop/files/za-mp003-blue.jpg?v=1778851581&amp;width=300 300w, //alcell.co.za/cdn/shop/files/za-mp003-blue.jpg?v=1778851581&amp;width=500 500w, //alcell.co.za/cdn/shop/files/za-mp003-blue.jpg?v=1778851581&amp;width=700 700w" width="800" height="600" loading="lazy" sizes="(min-width: 990px) 22vw, (min-width: 750px) 33vw, 46vw" class="ftabs__img">
5429</a><button
5430      type="button"
5431      class="ftabs__wishlist"
5432      data-wishlist-toggle
5433      data-wishlist-id="8270271578159"
5434      data-wishlist-handle="zatech-gaming-mousepad-300x700x2mm-silk"
5435      data-wishlist-title="ZATECH Gaming Mouse Pad 300x700x2mm - Stitched Edge, Non-Slip, Water-Resistant"
5436      data-wishlist-url="/products/zatech-gaming-mousepad-300x700x2mm-silk"
5437      data-wishlist-image="//alcell.co.za/cdn/shop/files/za-mp003-blue.jpg?v=1778851581&width=400"
5438      data-wishlist-price="7700"
5439      data-wishlist-compare="7900"
5440      data-wishlist-available="true"
5441      data-wishlist-variant="45357002162223"
5442      aria-pressed="false"
5443      aria-label="Add to wishlist"
5444    >
5445      <svg width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
5446    </button><a
5447        href="/products/zatech-gaming-mousepad-300x700x2mm-silk"
5448        class="ftabs__atc"
5449        tabindex="-1"
5450        aria-label="Add ZATECH Gaming Mouse Pad 300x700x2mm - Stitched Edge, Non-Slip, Water-Resistant to cart"
5451        data-card-atc
5452        data-url="/products/zatech-gaming-mousepad-300x700x2mm-silk"
5453        data-variant="45357002162223">
5454        Add To Cart
5455        <svg width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg>
5456      </a></div>
5457
5458  <div class="ftabs__body">
5459    <a href="/products/zatech-gaming-mousepad-300x700x2mm-silk" class="ftabs__title-link">
5460      <p class="ftabs__title">ZATECH Gaming Mouse Pad 300x700x2mm - Stitched Edge, Non-Slip, Water-Resistant</p>
5461    </a><span class="ftabs__stock">In stock</span><div class="ftabs__price-row"><span class="ftabs__price ftabs__price--sale">R 77</span>
5462        <span class="ftabs__price ftabs__price--compare">R 79</span></div>
5463  </div>
5464</article></li></ul>
5465    </div>
5466  </div>
5467</section><section id="shopify-section-template--21741425459247__product-info-card" class="shopify-section section"><link href="//alcell.co.za/cdn/shop/t/2/assets/section-product-info-card.css?v=143514893810288655981786430333" rel="stylesheet" type="text/css" media="all" />
5468<section class="pinfo" style="padding-top: 0px; padding-bottom: 0px;">
5469    <div class="pinfo__wrap">
5470      <div class="pinfo__card" data-pinfo>
5471        <h2 class="pinfo__heading">Product Information</h2><div class="pinfo__body" data-pinfo-body>
5472          <table class="pinfo__table">
5473            <tbody><tr class="pinfo__row pinfo__row--mobile">
5474                <td class="pinfo__label">Warranty</td>
5475                <td class="pinfo__value">12-month limited warranty</td>
5476              </tr><tr class="pinfo__row">
5477                  <td class="pinfo__label">Categories</td>
5478                  <td class="pinfo__value"><a href="/collections/gaming" class="pinfo__link">Gaming</a> / <a href="/collections/new-arrivals" class="pinfo__link">New Arrivals</a> / <a href="/collections/search-trending" class="pinfo__link">Search Trending</a> / <a href="/collections/specials" class="pinfo__link">Specials</a> / <a href="/collections/tvs-screens" class="pinfo__link">TVs & Screens</a> / <a href="/collections/viewsonic" class="pinfo__link">ViewSonic</a> / <a href="/collections/viewsonic-gaming-monitors" class="pinfo__link">ViewSonic Gaming Monitors</a> / <a href="/collections/viewsonic-monitors" class="pinfo__link">ViewSonic Monitors</a></td>
5479                </tr><tr class="pinfo__row">
5480                  <td class="pinfo__label">Brand</td>
5481                  <td class="pinfo__value">
5482                    <a href="/search?q=Viewsonic" class="pinfo__link">Viewsonic</a>
5483                  </td>
5484                </tr><tr class="pinfo__row">
5485                      <td class="pinfo__label">Model</td>
5486                      <td class="pinfo__value">VX2779-HD-PRO</td>
5487                    </tr><tr class="pinfo__row">
5488                      <td class="pinfo__label">Screen Size</td>
5489                      <td class="pinfo__value">27"</td>
5490                    </tr><tr class="pinfo__row">
5491                      <td class="pinfo__label">Panel Type</td>
5492                      <td class="pinfo__value">SuperClear IPS</td>
5493                    </tr><tr class="pinfo__row">
5494                      <td class="pinfo__label">Resolution</td>
5495                      <td class="pinfo__value">Full HD</td>
5496                    </tr><tr class="pinfo__row">
5497                      <td class="pinfo__label">Refresh Rate</td>
5498                      <td class="pinfo__value">180Hz</td>
5499                    </tr><tr class="pinfo__row">
5500                      <td class="pinfo__label">Response Time</td>
5501                      <td class="pinfo__value">1ms MPRT</td>
5502                    </tr><tr class="pinfo__row">
5503                      <td class="pinfo__label">HDR</td>
5504                      <td class="pinfo__value">HDR10</td>
5505                    </tr><tr class="pinfo__row">
5506                      <td class="pinfo__label">Adaptive Sync</td>
5507                      <td class="pinfo__value">AMD FreeSync</td>
5508                    </tr><tr class="pinfo__row">
5509                      <td class="pinfo__label">Ports</td>
5510                      <td class="pinfo__value">HDMI, DisplayPort</td>
5511                    </tr><tr class="pinfo__row">
5512                  <td class="pinfo__label">SKU</td>
5513                  <td class="pinfo__value">VX2779-HD-PRO</td>
5514                </tr><tr class="pinfo__row">
5515                  <td class="pinfo__label">Barcode</td>
5516                  <td class="pinfo__value">766907022124</td>
5517                </tr></tbody>
5518          </table>
5519        </div>
5520
5521        <button type="button" class="pinfo__toggle" data-pinfo-toggle hidden>
5522          <span class="pinfo__toggle-more">Show More</span>
5523          <span class="pinfo__toggle-less">Show Less</span>
5524        </button>
5525      </div>
5526    </div>
5527  </section>
5528
5529  
5529<script>
5530    (function() {
5531      document.querySelectorAll('[data-pinfo]').forEach(function(card) {
5532        var body = card.querySelector('[data-pinfo-body]');
5533        var toggle = card.querySelector('[data-pinfo-toggle]');
5534        if (!body || !toggle) return;
5535        var COLLAPSED = 360;
5536        requestAnimationFrame(function() {
5537          var full = body.scrollHeight;
5538          if (full > COLLAPSED + 20) {
5539            card.classList.add('is-collapsed');
5540            toggle.hidden = false;
5541          }
5542        });
5543        toggle.addEventListener('click', function() {
5544          card.classList.toggle('is-collapsed');
5545        });
5546      });
5547    })();
5548  </script>
5548
5549</section><section id="shopify-section-template--21741425459247__reviews" class="shopify-section section"><link href="//alcell.co.za/cdn/shop/t/2/assets/section-customer-reviews.css?v=177083835545072518031782970456" rel="stylesheet" type="text/css" media="all" />
5550<section
5551    id="product-reviews"
5552    class="reviews color-scheme-1"
5553    style="padding-top: 0px; padding-bottom: 0px;"
5554  >
5555    <div class="reviews__wrap"><div class="reviews__mobile" data-reviews-mobile>
5556        <div class="reviews__mobile-head">
5557          <h2 class="reviews__mobile-title">Customer reviews</h2>
5558          <div class="reviews__mobile-score">
5559            <span class="reviews-star reviews-star--filled" aria-hidden="true">★</span>
5560            <span class="reviews__mobile-num">4.6</span>
5561          </div>
5562        </div>
5563
5564        <div class="reviews__scroller" role="list"><article class="reviews__pcard" role="listitem">
5565              <div class="reviews__pcard-top">
5566                <span class="reviews__pcard-author">Mosez</span><span class="reviews__pcard-date">25 Mar 2025</span></div>
5567              <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="reviews__pcard-title">Excellent value</h3><p class="reviews__pcard-body">The monitor provides excellent value for money. Given the panel type, refresh rate and size. It will be very hard to find an equiavalent 27" monitor for this price. Easy to setup. Has a VESA mount if you need. Games look great with the brightness. The refresh rate and 1ms response is immediately noticable. Absolute smooth gaming now. I could'nt be happier.</p></article><article class="reviews__pcard" role="listitem">
5568              <div class="reviews__pcard-top">
5569                <span class="reviews__pcard-author">Zakhir</span><span class="reviews__pcard-date">30 Jun 2025</span></div>
5570              <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><p class="reviews__pcard-body">Recommended monitor. Good colour and details.</p></article><article class="reviews__pcard" role="listitem">
5571              <div class="reviews__pcard-top">
5572                <span class="reviews__pcard-author">Nikita</span><span class="reviews__pcard-date">07 Jul 2025</span></div>
5573              <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="reviews__pcard-title">Next-Level Visuals - ViewSonic 180Hz is a BEAST!</h3><p class="reviews__pcard-body">I've been using the ViewSonic 180Hz gaming monitor for a few weeks now and all I can say is: WOW. If you're serious about gaming, this monitor is a total game-changer. This monitor doesn't just display your games - it elevates them. I genuinely feel like it's given me a competitive edge. If you're on the fence, jump over. You won't regret it.</p></article><article class="reviews__pcard" role="listitem">
5574              <div class="reviews__pcard-top">
5575                <span class="reviews__pcard-author">brandon</span><span class="reviews__pcard-date">12 Jun 2025</span></div>
5576              <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="reviews__pcard-title">ViewSonic</h3><p class="reviews__pcard-body">The ViewSonic will stasfied your needs especially the quality and screen view is super clear plus the ips does the job for gaming and watching movies is the best monitor</p></article><article class="reviews__pcard" role="listitem">
5577              <div class="reviews__pcard-top">
5578                <span class="reviews__pcard-author">TG David</span><span class="reviews__pcard-date">26 Aug 2025</span></div>
5579              <div class="review-item__stars" aria-label="4 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star " aria-hidden="true">★</span></div><p class="reviews__pcard-body">Nice monitor. Good quality.</p></article><article class="reviews__pcard" role="listitem">
5580              <div class="reviews__pcard-top">
5581                <span class="reviews__pcard-author">Charles</span><span class="reviews__pcard-date">25 Aug 2025</span></div>
5582              <div class="review-item__stars" aria-label="3 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star " aria-hidden="true">★</span><span class="reviews-star " aria-hidden="true">★</span></div><h3 class="reviews__pcard-title">price</h3><p class="reviews__pcard-body">This is a good monitor for its price</p></article></div>
5583
5584        <button type="button" class="reviews__viewall" data-reviews-open>
5585          View all
5586          <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="9 6 15 12 9 18"/></svg>
5587        </button>
5588      </div><div class="reviews__card" data-reviews-panel><div class="reviews__modal-head">
5589          <button type="button" class="reviews__modal-back" data-reviews-close aria-label="Back">
5590            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="15 18 9 12 15 6"/></svg>
5591            <span>Back</span>
5592          </button>
5593          <span class="reviews__modal-title">ViewSonic VX2779-HD-PRO 27"…</span>
5594          <div class="reviews__modal-actions">
5595            <a href="/pages/wishlist" class="reviews__modal-icon reviews__modal-icon--wishlist" aria-label="Wishlist">
5596              <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></svg>
5597              <span class="reviews__modal-count" data-wishlist-count hidden></span>
5598            </a>
5599            <a href="/cart" class="reviews__modal-icon reviews__modal-icon--cart" aria-label="Cart">
5600              <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M7.5 18a1.75 1.75 0 100 3.5 1.75 1.75 0 000-3.5zm9 0a1.75 1.75 0 100 3.5 1.75 1.75 0 000-3.5zM2 3a1 1 0 000 2h1.6l2.5 10.6A2 2 0 008 17h9.3a2 2 0 002-1.55l1.9-8.2A1 1 0 0020.2 6H6.3l-.5-2.2A1 1 0 004.8 3H2z"/></svg></a>
5601          </div>
5602        </div>
5603
5604        <div class="reviews__layout"><aside class="reviews__summary"><h2 class="reviews__heading">Customer reviews</h2><div class="reviews-summary__score">
5605            <div class="reviews-summary__stars" aria-label="Average rating 4.6 out of 5"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div>
5606            <span class="reviews-summary__number">4.6 out of 5</span>
5607          </div><div class="reviews-bars" data-reviews-filters role="group" aria-label="Filter reviews by rating"><button
5608                type="button"
5609                class="reviews-bars__row"
5610                data-reviews-filter="5"
5611                aria-pressed="false"
5612                
5613              >
5614                <span class="reviews-bars__level">5 star</span>
5615                <span class="reviews-bars__track">
5616                  <span class="reviews-bars__fill" style="width: 77%;"></span>
5617                </span>
5618                <span class="reviews-bars__num">77%</span>
5619              </button><button
5620                type="button"
5621                class="reviews-bars__row"
5622                data-reviews-filter="4"
5623                aria-pressed="false"
5624                
5625              >
5626                <span class="reviews-bars__level">4 star</span>
5627                <span class="reviews-bars__track">
5628                  <span class="reviews-bars__fill" style="width: 16%;"></span>
5629                </span>
5630                <span class="reviews-bars__num">16%</span>
5631              </button><button
5632                type="button"
5633                class="reviews-bars__row"
5634                data-reviews-filter="3"
5635                aria-pressed="false"
5636                
5637              >
5638                <span class="reviews-bars__level">3 star</span>
5639                <span class="reviews-bars__track">
5640                  <span class="reviews-bars__fill" style="width: 3%;"></span>
5641                </span>
5642                <span class="reviews-bars__num">3%</span>
5643              </button><button
5644                type="button"
5645                class="reviews-bars__row"
5646                data-reviews-filter="2"
5647                aria-pressed="false"
5648                disabled
5649              >
5650                <span class="reviews-bars__level">2 star</span>
5651                <span class="reviews-bars__track">
5652                  <span class="reviews-bars__fill" style="width: 0%;"></span>
5653                </span>
5654                <span class="reviews-bars__num">0%</span>
5655              </button><button
5656                type="button"
5657                class="reviews-bars__row"
5658                data-reviews-filter="1"
5659                aria-pressed="false"
5660                
5661              >
5662                <span class="reviews-bars__level">1 star</span>
5663                <span class="reviews-bars__track">
5664                  <span class="reviews-bars__fill" style="width: 3%;"></span>
5665                </span>
5666                <span class="reviews-bars__num">3%</span>
5667              </button></div><div class="reviews__cta">
5668            <h3 class="reviews__cta-title">Review this product</h3>
5669            <p class="reviews__cta-text">Share your honest thoughts with other potential customers.</p><a
5670              href="/pages/my-account"
5671              class="reviews__cta-btn"
5672            >
5673              Write a customer review
5674            </a>
5675          </div>
5676        </aside><div class="reviews__list-col">
5677          <div class="reviews__list-head">
5678            <div class="reviews__list-head-left">
5679              <span class="reviews__list-count" data-reviews-count>
5680                31 Reviews
5681              </span>
5682            </div>
5683            <label class="reviews__sort">
5684              <span class="reviews__sort-label">Sort by:</span>
5685              <span class="reviews__sort-select">
5686                <select data-reviews-sort aria-label="Sort reviews">
5687                  <option value="recent">Most recent</option>
5688                  <option value="helpful">Most helpful</option>
5689                  <option value="high">Highest rated</option>
5690                  <option value="low">Lowest rated</option>
5691                </select>
5692                <svg width="24" height="24" class="reviews__sort-caret" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
5693              </span>
5694            </label>
5695          </div><style>
5696            #product-reviews [data-reviews-list]:not(.is-initialized) .review-item:nth-child(n+7) { display: none; }
5697          </style>
5698          <ul
5699            class="reviews__list"
5700            role="list"
5701            data-reviews-list
5702            data-per-page="6"
5703          ><li class="review-item" data-review-index="0" data-review-rating="5" data-review-date="1742853600">
5704                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">Excellent value</h3><div class="review-item__meta"><span class="review-item__author">Mosez</span><span class="review-item__date">Reviewed on 25 Mar 2025</span></div><p class="review-item__body">The monitor provides excellent value for money. Given the panel type, refresh rate and size. It will be very hard to find an equiavalent 27" monitor for this price. Easy to setup. Has a VESA mount if you need. Games look great with the brightness. The refresh rate and 1ms response is immediately noticable. Absolute smooth gaming now. I could'nt be happier.</p></li><li class="review-item" data-review-index="1" data-review-rating="5" data-review-date="1751234400">
5705                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><div class="review-item__meta"><span class="review-item__author">Zakhir</span><span class="review-item__date">Reviewed on 30 Jun 2025</span></div><p class="review-item__body">Recommended monitor. Good colour and details.</p></li><li class="review-item" data-review-index="2" data-review-rating="5" data-review-date="1751839200">
5706                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">Next-Level Visuals - ViewSonic 180Hz is a BEAST!</h3><div class="review-item__meta"><span class="review-item__author">Nikita</span><span class="review-item__date">Reviewed on 07 Jul 2025</span></div><p class="review-item__body">I've been using the ViewSonic 180Hz gaming monitor for a few weeks now and all I can say is: WOW. If you're serious about gaming, this monitor is a total game-changer. This monitor doesn't just display your games - it elevates them. I genuinely feel like it's given me a competitive edge. If you're on the fence, jump over. You won't regret it.</p></li><li class="review-item" data-review-index="3" data-review-rating="5" data-review-date="1749679200">
5707                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">ViewSonic</h3><div class="review-item__meta"><span class="review-item__author">brandon</span><span class="review-item__date">Reviewed on 12 Jun 2025</span></div><p class="review-item__body">The ViewSonic will stasfied your needs especially the quality and screen view is super clear plus the ips does the job for gaming and watching movies is the best monitor</p></li><li class="review-item" data-review-index="4" data-review-rating="4" data-review-date="17561
570759200">
5708                <div class="review-item__stars" aria-label="4 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star " aria-hidden="true">★</span></div><div class="review-item__meta"><span class="review-item__author">TG David</span><span class="review-item__date">Reviewed on 26 Aug 2025</span></div><p class="review-item__body">Nice monitor. Good quality.</p></li><li class="review-item" data-review-index="5" data-review-rating="3" data-review-date="1756072800">
5709                <div class="review-item__stars" aria-label="3 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star " aria-hidden="true">★</span><span class="reviews-star " aria-hidden="true">★</span></div><h3 class="review-item__title">price</h3><div class="review-item__meta"><span class="review-item__author">Charles</span><span class="review-item__date">Reviewed on 25 Aug 2025</span></div><p class="review-item__body">This is a good monitor for its price</p></li><li class="review-item" data-review-index="6" data-review-rating="5" data-review-date="1755468000">
5710                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">10/10</h3><div class="review-item__meta"><span class="review-item__author">Mitchell</span><span class="review-item__date">Reviewed on 18 Aug 2025</span></div><p class="review-item__body">The difference from a 60hz monitor is crazy. Must get</p></li><li class="review-item" data-review-index="7" data-review-rating="4" data-review-date="1754517600">
5711                <div class="review-item__stars" aria-label="4 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star " aria-hidden="true">★</span></div><div class="review-item__meta"><span class="review-item__author">Ozayr</span><span class="review-item__date">Reviewed on 07 Aug 2025</span></div><p class="review-item__body">Very good for gaming, easy to set up</p></li><li class="review-item" data-review-index="8" data-review-rating="5" data-review-date="1779314400">
5712                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><div class="review-item__meta"><span class="review-item__author">Lesareng</span><span class="review-item__date">Reviewed on 21 May 2026</span></div><p class="review-item__body">1. Speed that actually matters -The 180Hz refresh rate + 0.5ms to 1ms MPRT response time makes motion feel buttery smooth. In FPS games like Valorant, CS2, and Apex, you notice less blur and faster target acquisition compared to 144Hz. 2. Tear-free gaming out of the box -You get triple sync support on the higher-end models: AMD FreeSync Premium, VESA AdaptiveSync, and G-Sync compatibility. That means no screen tearing or stutter whether you're on Nvidia or AMD. Setup is plug-and-play with DisplayPort 1.4 and dual HDMI 1.4 ports. 3. Ergonomics and build -The stand is height, tilt, swivel, and pivot adjustable on most Omni series models, so you can dial in a comfortable setup for long sessions. 4. Fast IPS panel c
5712olour + speed -Most of these models use Fast IPS tech. You get 178 viewing angles, so colors don't shift when you're leaning back, plus better color coverage than typical budget TN panels. Bottom line: The ViewSonic 27" 180Hz line delivers best of what a esports monitor gives you, at half the price. If your GPU can push 180fps at 1080p, this is one of the best value upgrades you can make.</p></li><li class="review-item" data-review-index="9" data-review-rating="5" data-review-date="1778709600">
5713                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">Great graphics</h3><div class="review-item__meta"><span class="review-item__author">Ame</span><span class="review-item__date">Reviewed on 14 May 2026</span></div><p class="review-item__body">I love this monitor and ordered a second one! Amazing graphics and nice large size</p></li><li class="review-item" data-review-index="10" data-review-rating="5" data-review-date="1778191200">
5714                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><div class="review-item__meta"><span class="review-item__author">Prince</span><span class="review-item__date">Reviewed on 08 May 2026</span></div><p class="review-item__body">Great monitor for gaming</p></li><li class="review-item" data-review-index="11" data-review-rating="5" data-review-date="1778104800">
5715                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">The Best?</h3><div class="review-item__meta"><span class="review-item__author">Kuveshan</span><span class="review-item__date">Reviewed on 07 May 2026</span></div><p class="review-item__body">
5715I was drawn towards this due to the pricepoint and of course the 180hz tag. Ive been using it for a week now. It is by far the best monitor ive ever used, even over two 4Ks. Its crisp, the colours are good and its very easy on the eyes. 5/5 would recommend to anyone.</p></li><li class="review-item" data-review-index="12" data-review-rating="4" data-review-date="1773439200">
5716                <div class="review-item__stars" aria-label="4 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star " aria-hidden="true">★</span></div><div class="review-item__meta"><span class="review-item__author">fritz</span><span class="review-item__date">Reviewed on 14 Mar 2026</span></div><p class="review-item__body">Very Good Monitor Just A Little But dark But other than that not to bad</p></li><li class="review-item" data-review-index="13" data-review-rating="5" data-review-date="1772143200">
5717                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">Amazing</h3><div class="review-item__meta"><span class="review-item__author">Macaela</span><span class="review-item__date">Reviewed on 27 Feb 2026</span></div><p class="review-item__body">Everything works well and as expected. highly recommend</p></li><li class="review-item" data-review-index="14" data-review-rating="5" data-review-date="1771365600">
5718                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><div class="review-item__meta"><span class="review-item__author">Dale</span><span class="review-item__date">Reviewed on 18 Feb 2026</span></div><p class="review-item__body">Great monitor great price I can recommend this product</p></li><li class="review-item" data-review-index="15" data-review-rating="5" data-review-date="1770933600">
5719                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">relief in dry hot kalahari</h3><div class="review-item__meta"><span class="review-item__author">aletta</span><span class="review-item__date">Reviewed on 13 Feb 2026</span></div><p class="review-item__body">I bought 2 of these Bo Master water coolers in October 2025. Excellent products. I use them daily and during the night. One is in my son's room downstairs and I have one in my room. It has a big water tank, 70 liters and the electricity useage is minimum. My room is huge and open planned, so it don't cool my room. I have it in front of my bed and the cool wind gives me a very good night sleep. Our temperature goes in mid 40's in summer. The fan is also very strong with 3 setting. A must buy!</p></li><li class="review-item" data-review-index="16" data-review-rating="5" data-review-date="1765490400">
5720                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><div class="review-item__meta"><span class="review-item__author">Prince</span><span class="review-item__date">Reviewed on 12 Dec 2025</span></div><p class="review-item__body">I'm definitely loving the product great value for money, would definitely recommend this</p></li><li class="review-item" data-review-index="17" data-review-rating="4" data-review-date="1765317600">
5721                <div class="review-item__stars" aria-label="4 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star " aria-hidden="true">★</span></div><h3 class="review-item__title">monitor for gaming</h3><div class="review-item__meta"><span class="review-item__author">Sherene</span><span class="review-item__date">Reviewed on 10 Dec 2025</span></div><p class="review-item__body">Guys...any idea why there is no sound from the monitor..other then that it's perfect.</p></li><li class="review-item" data-review-index="18" data-review-rating="5" data-review-date="1765317600">
5722                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">5 star for the price</h3><div class="review-item__meta"><span class="review-item__author">Jason</span><span class="review-item__date">Reviewed on 10 Dec 2025</span></div><p class="review-item__body">you can't expect much more for the price. general quality is 4 stars but you gotta know that you get what you pay for. bought this as a gift for my gf for her first pc setup and everything works perfectly. minimal angle adjustments but luckily it's perfect out the box for her desk height.</p></li><li class="review-item" data-review-index="19" data-review-rating="5" data-review-date="1765058400">
5723                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">Fantastic 27" gaming monitor - my son absolutely loves it</h3><div class="review-item__meta"><span class="review-item__author">Victoria</span><span class="review-item__date">Reviewed on 07 Dec 2025</span></div><p class="review-item__body">
5723If you're upgrading from a basic monitor, this ViewSonic 27" 180 Hz model is a huge step up. It's a great balance of performance, quality, and value - perfect for a gamer (or even a student) who wants a responsive, attractive screen that handles anything from high-speed games to everyday tasks. It's made our setup feel much more premium.</p></li><li class="review-item" data-review-index="20" data-review-rating="5" data-review-date="1762552800">
5724                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">awesome!</h3><div class="review-item__meta"><span class="review-item__author">hanneli</span><span class="review-item__date">Reviewed on 08 Nov 2025</span></div><p class="review-item__body">Awesome monitor.. much better than our tv! Visual perfection, no lagging. Brilliant!</p></li><li class="review-item" data-review-index="21" data-review-rating="5" data-review-date="1761775200">
5725                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">Very good monitor</h3><div class="review-item__meta"><span class="review-item__author">Review Guy</span><span class="review-item__date">Reviewed on 30 Oct 2025</span></div><p class="review-item__body">i enjoy using this monitor. It was my first upgrade, so it is very very good quality</p></li><li class="review-item" data-review-index="22" data-review-rating="5" data-review-date="1761688800">
5726                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">Good quality</h3><div class="review-item__meta"><span class="review-item__author">Paul</span><span class="review-item__date">Reviewed on 29 Oct 2025</span></div><p class="review-item__body">Overall good quality, even the base section is made from metal.</p></li><li class="review-item" data-review-index="23" data-review-rating="4" data-review-date="1761429600">
5727                <div class="review-item__stars" aria-label="4 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star " aria-hidden="true">★</span></div><div class="review-item__meta"><span class="review-item__author">Tadiwa</span><span class="review-item__date">Reviewed on 26 Oct 2025</span></div><p class="review-item__body">Great product in terms on visual and in game performance I'm just concerned as to the audio and how I thought the monitor would have audio</p></li><li class="review-item" data-review-index="24" data-review-rating="5" data-review-date="1760824800">
5728                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">Great monitor</h3><div class="review-item__meta"><span class="review-item__author">Jason</span><span class="review-item__date">Reviewed on 19 Oct 2025</span></div><p class="review-item__body">
5728I was a bit worried it would be too small to really enjoy since I'm used to bigger monitors, but the quality really sucks you in and makes you feel very immersed. the thin borders on the display make it look really premium. Really impressed with the monitor and all its features.</p></li><li class="review-item" data-review-index="25" data-review-rating="5" data-review-date="1759874400">
5729                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">Gaming monitor</h3><div class="review-item__meta"><span class="review-item__author">Roche</span><span class="review-item__date">Reviewed on 08 Oct 2025</span></div><p class="review-item__body">Great quality, very satisfied with the delivery as well.</p></li><li class="review-item" data-review-index="26" data-review-rating="5" data-review-date="1755036000">
5730                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><div class="review-item__meta"><span class="review-item__author">Youssef</span><span class="review-item__date">Reviewed on 13 Aug 2025</span></div><p class="review-item__body">The best screen ever I like it the quality is so amazing</p></li><li class="review-item" data-review-index="27" data-review-rating="5" data-review-date="1753999200">
5731                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">Excellent Value for money</h3><div class="review-item__meta"><span class="review-item__author">Earl</span><span class="review-item__date">Reviewed on 01 Aug 2025</span></div><p class="review-item__body">You seldom get monitors with 180hz refresh rate and when I came across this one I had to have it. The price was worryingly low but I went for it anyway. After testing it extensively with every game I usually play and movie I usually watch, I can confirm the specs and the fact that this Monitor does what it promises! Great quality and great value for money!</p></li><li class="review-item" data-review-index="28" data-review-rating="1" data-review-date="1780005600">
5732                <div class="review-item__stars" aria-label="1 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star " aria-hidden="true">★</span><span class="reviews-star " aria-hidden="true">★</span><span class="reviews-star " aria-hidden="true">★</span><span class="reviews-star " aria-hidden="true">★</span></div><div class="review-item__meta"><span class="review-item__author">Jako</span><span class="review-item__date">Reviewed on 29 May 2026</span></div></li><li class="review-item" data-review-index="29" data-review-rating="5" data-review-date="1752098400">
5733                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">Amazing</h3><div class="review-item__meta"><span class="review-item__author">Great!</span><span class="review-item__date">Reviewed on 10 Jul 2025</span></div><p class="review-item__body">This monitor looks amazing. My laptop caps it at 120hz but when I get a pc it'll go to the full 180, I'm definitely buying a second one. Takealot took care of the monitor and was in perfect condition</p></li><li class="review-item" data-review-index="30" data-review-rating="5" data-review-date="1752012000">
5734                <div class="review-item__stars" aria-label="5 out of 5 stars"><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span><span class="reviews-star reviews-star--filled" aria-hidden="true">★</span></div><h3 class="review-item__title">Absolutely brilliant</h3><div class="review-item__meta"><span class="review-item__author">Marc</span><span class="review-item__date">Reviewed on 09 Jul 2025</span></div><p class="review-item__body">got this one on sale, worth every penny. size is great, fps is even better and it's bright and colorful. would buy again</p></li></ul>
5735
5736          <p class="reviews__empty" data-reviews-empty hidden>No reviews match this rating.</p>
5737
5738          <nav class="reviews__pagination" data-reviews-pagination aria-label="Reviews pages" hidden>
5739            <button type="button" class="reviews-page__btn reviews-page__btn--prev" data-reviews-prev>
5740              <span aria-hidden="true">‹</span> Previous
5741            </button>
5742            <button type="button" class="reviews-page__btn reviews-page__btn--next" data-reviews-next>
5743              Next <span aria-hidden="true">›</span>
5744            </button>
5745          </nav>
5746        </div>
5747        </div>
5748      </div>
5749    </div>
5750  </section>
5751
5752  
5752<script>
5753    (function () {
5754      var root = document.getElementById('product-reviews');
5755      if (!root) return;
5756      var list = root.querySelector('[data-reviews-list]');
5757      var pager = root.querySelector('[data-reviews-pagination]');
5758      if (!list) return;
5759
5760      // JS now controls visibility — release the pre-JS CSS height cap.
5761      list.classList.add('is-initialized');
5762
5763      var allItems = Array.prototype.slice.call(list.querySelectorAll('.review-item'));
5764      var perPage = parseInt(list.getAttribute('data-per-page'), 10) || 6;
5765      var prevBtn = pager.querySelector('[data-reviews-prev]');
5766      var nextBtn = pager.querySelector('[data-reviews-next]');
5767      var filterBtns = Array.prototype.slice.call(root.querySelectorAll('[data-reviews-filter]'));
5768      var clearBtn = root.querySelector('[data-reviews-clear]');
5769      var emptyMsg = root.querySelector('[data-reviews-empty]');
5770      var sortSelect = root.querySelector('[data-reviews-sort]');
5771
5772      var activeFilter = null; // null = all, or an integer rating
5773      var current = 1;
5774
5775      // Cache each item's sort keys (original order = "most helpful").
5776      allItems.forEach(function (el, i) {
5777        el._index = i;
5778        el._rating = parseInt(el.getAttribute('data-review-rating'), 10) || 0;
5779        el._date = parseInt(el.getAttribute('data-review-date'), 10) || 0;
5780      });
5781
5782      function sortItems(mode) {
5783        allItems.sort(function (a, b) {
5784          switch (mode) {
5785            case 'recent': return b._date - a._date;
5786            case 'high':   return b._rating - a._rating || b._date - a._date;
5787            case 'low':    return a._rating - b._rating || b._date - a._date;
5788            default:       return a._index - b._index; // 'helpful' = original order
5789          }
5790        });
5791        // Reflect the new order in the DOM so pagination slices match.
5792        allItems.forEach(function (el) { list.appendChild(el); });
5793        current = 1;
5794        render();
5795      }
5796
5797      function filtered() {
5798        if (activeFilter == null) return allItems;
5799        return allItems.filter(function (el) {
5800          return parseInt(el.getAttribute('data-review-rating'), 10) === activeFilter;
5801        });
5802      }
5803
5804      function render() {
5805        var visible = filtered();
5806        var pageCount = Math.ceil(visible.length / perPage) || 1;
5807        if (current > pageCount) current = pageCount;
5808
5809        // Hide everything, then reveal the current page of the filtered set.
5810        allItems.forEach(function (el) { el.hidden = true; });
5811        var start = (current - 1) * perPage;
5812        visible.slice(start, start + perPage).forEach(function (el) { el.hidden = false; });
5813
5814        if (emptyMsg) emptyMsg.hidden = visible.length !== 0;
5815
5816        // Pagination — just Previous / Next, shown only when there's more than one page.
5817        if (pager) {
5818          pager.hidden = pageCount <= 1;
5819          prevBtn.disabled = current === 1;
5820          nextBtn.disabled = current === pageCount;
5821        }
5822      }
5823
5824      function go(page) {
5825        var visible = filtered();
5826        var pageCount = Math.ceil(visible.length / perPage) || 1;
5827        current = Math.min(Math.max(page, 1), pageCount);
5828        render();
5829        var top = root.querySelector('.reviews__list-head');
5830        if (top) top.scrollIntoView({ behavior: 'smooth', block: 'start' });
5831      }
5832
5833      function setFilter(rating) {
5834        activeFilter = rating;
5835        current = 1;
5836        filterBtns.forEach(function (btn) {
5837          var on = parseInt(btn.getAttribute('data-reviews-filter'), 10) === rating;
5838          btn.setAttribute('aria-pressed', on ? 'true' : 'false');
5839          btn.classList.toggle('is-active', on);
5840        });
5841        if (clearBtn) clearBtn.hidden = rating == null;
5842        render();
5843      }
5844
5845      filterBtns.forEach(function (btn) {
5846        btn.addEventListener('click', function () {
5847          var rating = parseInt(btn.getAttribute('data-reviews-filter'), 10);
5848          // Clicking the active filter toggles it back off.
5849          setFilter(activeFilter === rating ? null : rating);
5850        });
5851      });
5852
5853      if (clearBtn) clearBtn.addEventListener('click', function () { setFilter(null); });
5854      if (prevBtn) prevBtn.addEventListener('click', function () { go(current - 1); });
5855      if (nextBtn) nextBtn.addEventListener('click', function () { go(current + 1); });
5856      if (sortSelect) sortSelect.addEventListener('change', function () { sortItems(sortSelect.value); });
5857
5858      render();
5859
5860      // ---- Mobile full-screen "View all" modal ----
5861      var panel = root.querySelector('[data-reviews-panel]');
5862      var openBtn = root.querySelector('[data-reviews-open]');
5863      var closeBtn = root.querySelector('[data-reviews-close]');
5864      var mq = window.matchMedia('(max-width: 989px)');
5865      var modalScrollY = 0;
5866
5867      function openModal() {
5868        if (!mq.matches) return;
5869        modalScrollY = window.scrollY || window.pageYOffset || 0;
5870        root.classList.add('reviews--modal-open');
5871        document.body.style.top = -modalScrollY + 'px';
5872        document.body.classList.add('reviews-modal-lock');
5873        if (closeBtn) closeBtn.focus();
5874      }
5875      function closeModal() {
5876        root.classList.remove('reviews--modal-open');
5877        if (document.body.classList.contains('reviews-modal-lock')) {
5878          document.body.classList.remove('reviews-modal-lock');
5879          document.body.style.top = '';
5880          window.scrollTo(0, modalScrollY);
5881        }
5882      }
5883
5884      if (openBtn) openBtn.addEventListener('click', openModal);
5885      if (closeBtn) closeBtn.addEventListener('click', closeModal);
5886      document.addEventListener('keydown', function (e) {
5887        if (e.key === 'Escape' && root.classList.contains('reviews--modal-open')) closeModal();
5888      });
5889      // If the viewport grows past mobile while open, release the lock.
5890      mq.addEventListener('change', function () { if (!mq.matches) closeModal(); });
5891    })();
5892  </script>
5892
5893</section><section id="shopify-section-template--21741425459247__related-products" class="shopify-section section"><link href="//alcell.co.za/cdn/shop/t/2/assets/component-card.css?v=19729832699168407201780997736" rel="stylesheet" type="text/css" media="all" />
5894<link href="//alcell.co.za/cdn/shop/t/2/assets/component-price.css?v=47596247576480123001778844525" rel="stylesheet" type="text/css" media="all" />
5895<link href="//alcell.co.za/cdn/shop/t/2/assets/section-related-products.css?v=8487592862479025431781088153" rel="stylesheet" type="text/css" media="all" />
5896<link href="//alcell.co.za/cdn/shop/t/2/assets/section-featured-tabs.css?v=51084217407839345161790095688" rel="stylesheet" type="text/css" media="all" />
5897
5898<style data-shopify>.section-template--21741425459247__related-products-padding {
5899    padding-top: 0px;
5900    padding-bottom: 45px;
5901  }
5902
5903  @media screen and (min-width: 750px) {
5904    .section-template--21741425459247__related-products-padding {
5905      padding-top: 0px;
5906      padding-bottom: 60px;
5907    }
5908  }</style><div class="color-scheme-1 gradient"><product-recommendations
5909    class="related-products page-width section-template--21741425459247__related-products-padding isolate"
5910    data-url="/recommendations/products?limit=4"
5911    data-section-id="template--21741425459247__related-products"
5912    data-product-id="8270253555759"
5913    data-eager-load
5914  >
5915    
5916  </product-recommendations>
5917  </div>
5918
5919
5920</section>
5921</main>
5922
5923    <!-- BEGIN sections: footer-group -->
5924<section id="shopify-section-sections--21741424377903__footer" class="shopify-section shopify-section-group-footer-group footer-section"><link href="//alcell.co.za/cdn/shop/t/2/assets/section-footer-custom.css?v=182704914800267747411781717119" rel="stylesheet" type="text/css" media="all" />
5925<footer class="alcell-footer">
5926  <div class="alcell-footer__inner">
5927
5928    <div class="alcell-footer__top">
5929
5930      <!-- ── Brand: newsletter + socials + map ── -->
5931      <div class="alcell-footer__brand">
5932        <div class="alcell-footer__newsletter"><h2 class="alcell-footer__newsletter-label">SUBSCRIBE TO OUR NEWSLETTER</h2><p class="alcell-footer__newsletter-text alcell-footer__newsletter-text--desktop">Sign up for exclusive offers, events, launches and the latest news.</p><p class="alcell-footer__newsletter-text alcell-footer__newsletter-text--mobile">Exclusive offers & the latest news</p><form method="post" action="/contact#footer-newsletter" id="footer-newsletter" accept-charset="UTF-8" class="alcell-footer__newsletter-form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="✓" /><input type="hidden" name="contact[tags]" value="newsletter"><div class="alcell-footer__newsletter-row">
5933                <input
5934                  type="email"
5935                  name="contact[email]"
5936                  class="alcell-footer__email-input"
5937                  placeholder="Your email address"
5938                  required
5939                  autocomplete="email"
5940                  aria-label="Email address"
5941                >
5942                <button type="submit" class="alcell-footer__submit" aria-label="Subscribe">
5943                  <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
5944                    <polyline points="9 6 15 12 9 18"/>
5945                  </svg>
5946                </button>
5947              </div></form></div>
5948
5949        <div class="alcell-footer__socials">
5950          <a href="https://www.facebook.com/alcell.co.za" class="alcell-footer__social" aria-label="Facebook" target="_blank" rel="noopener noreferrer">
5951            <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M9.198 21.5h4v-8.01h3.604l.396-3.98h-4V7.5a1 1 0 0 1 1-1h3v-4h-3a5 5 0 0 0-5 5v2.01h-2l-.396 3.98h2.396v8.01Z"/></svg>
5952          </a>
5953          <a href="https://www.instagram.com/alcell_online?igsh=bXJ2OTRjYjg2dmhw" class="alcell-footer__social" aria-label="Instagram" target="_blank" rel="noopener noreferrer">
5954            <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
5954<path d="M12 2c2.717 0 3.056.01 4.122.06 1.065.05 1.79.217 2.428.465.66.254 1.216.598 1.772 1.153a4.908 4.908 0 0 1 1.153 1.772c.247.637.415 1.363.465 2.428.047 1.066.06 1.405.06 4.122 0 2.717-.01 3.056-.06 4.122-.05 1.065-.218 1.79-.465 2.428a4.883 4.883 0 0 1-1.153 1.772 4.915 4.915 0 0 1-1.772 1.153c-.637.247-1.363.415-2.428.465-1.066.047-1.405.06-4.122.06-2.717 0-3.056-.01-4.122-.06-1.065-.05-1.79-.218-2.428-.465a4.89 4.89 0 0 1-1.772-1.153 4.904 4.904 0 0 1-1.153-1.772c-.248-.637-.415-1.363-.465-2.428C2.013 15.056 2 14.717 2 12c0-2.717.01-3.056.06-4.122.05-1.066.217-1.79.465-2.428a4.88 4.88 0 0 1 1.153-1.772A4.897 4.897 0 0 1 5.45 2.525c.638-.248 1.362-.415 2.428-.465C8.944 2.013 9.283 2 12 2Z"/><path fill="#0F0F0F" d="M12 7a5 5 0 1 0 0 10 5 5 0 0 0 0-10Zm0 8a3 3 0 1 1 0-6 3 3 0 0 1 0 6Zm5-8a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"/></svg>
5955          </a>
5956          <a href="https://www.youtube.com/@AlCell_Online" class="alcell-footer__social" aria-label="YouTube" target="_blank" rel="noopener noreferrer">
5957            <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814ZM9.545 15.568V8.432L15.818 12l-6.273 3.568Z"/></svg>
5958          </a>
5959          <a href="https://www.tiktok.com/@alcell070?is_from_webapp=1&sender_device=pc" class="alcell-footer__social" aria-label="TikTok" target="_blank" rel="noopener noreferrer">
5960            <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19.59 6.69a4.83 4.83 0 0 1-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 0 1-5.2 1.74 2.89 2.89 0 0 1 2.31-4.64 2.93 2.93 0 0 1 .88.13V9.4a6.84 6.84 0 0 0-1-.05A6.33 6.33 0 0 0 5 20.1a6.34 6.34 0 0 0 10.86-4.43v-7a8.16 8.16 0 0 0 4.77 1.52v-3.4a4.85 4.85 0 0 1-1-.1Z"/></svg>
5961          </a>
5962        </div><div class="alcell-footer__map"><img
5963              class="alcell-footer__map-frame"
5964              src="//alcell.co.za/cdn/shop/t/2/assets/footer-store.webp?v=23980792442228241671780905070"
5965              alt="Inside the Alcell store"
5966              width="680"
5967              height="322"
5968              loading="eager"
5969              fetchpriority="low"
5970              decoding="async"
5971            >
5972            <a
5973              class="alcell-footer__map-link"
5974              href="https://www.google.com/maps?cid=938121243230629485"
5975              target="_blank"
5976              rel="noopener noreferrer"
5977              aria-label="View Alcell on Google Maps"
5978            >
5979              <span class="alcell-footer__map-pill">
5980                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14" fill="currentColor" aria-hidden="true"><path d="M12 2a7 7 0 0 0-7 7c0 5.25 7 13 7 13s7-7.75 7-13a7 7 0 0 0-7-7Zm0 9.5A2.5 2.5 0 1 1 12 6.5a2.5 2.5 0 0 1 0 5Z"/></svg>
5981                View on Google Maps
5982              </span>
5983            </a>
5984          </div></div>
5985
5986      <!-- ── Navigation columns (collapsible accordions on mobile) ── -->
5987      <nav class="alcell-footer__nav" aria-label="Footer">
5988        <details class="alcell-footer__col">
5989          <summary class="alcell-footer__col-title">
5990            Information
5991            <svg class="alcell-footer__col-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
5992          </summary>
5993          <ul class="alcell-footer__col-list">
5994            <li><a class="alcell-footer__link" href="/collections/all">All Products</a></li>
5995            <li><a class="alcell-footer__link" href="/collections/tvs-screens">TVs &amp; Screens</a></li>
5996            <li><a class="alcell-footer__link" href="/collections/computers">Computers</a></li>
5997            <li><a class="alcell-footer__link" href="/collections/laptops-accessories">Laptops &amp; Accessories</a></li>
5998            <li><a class="alcell-footer__link" href="/collections/mobile-tablet-accessories">Mobile &amp; Tablet</a></li>
5999            <li><a class="alcell-footer__link" href="/collections/appliances">Appliances</a></li>
6000            <li><a class="alcell-footer__link" href="/collections/solar-solutions">Solar Solutions</a></li>
6001            <li><a class="alcell-footer__link" href="/collections/gaming">Gaming</a></li>
6002          </ul>
6003        </details>
6004
6005        <details class="alcell-footer__col">
6006          <summary class="alcell-footer__col-title">
6007            Explore
6008            <svg class="alcell-footer__col-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
6009          </summary>
6010          <ul class="alcell-footer__col-list">
6011            <li><a class="alcell-footer__link" href="/collections/audio-video">Audio &amp; Video</a></li>
6012            <li><a class="alcell-footer__link" href="/collections/networking">Networking</a></li>
6013            <li><a class="alcell-footer__link" href="/collections/security-surveillance">Security &amp; Surveillance</a></li>
6014            <li><a class="alcell-footer__link" href="/collections/printers">Printers</a></li>
6015            <li><a class="alcell-footer__link" href="/collections/batteries-chargers">Batteries &amp; Chargers</a></li>
6016            <li><a class="alcell-footer__link" href="/collections/diy-tools-machinery">DIY Tools &amp; Machinery</a></li>
6017            <li><a class="alcell-footer__link" href="/collections/office-stationery">Office &amp; Stationery</a></li>
6018            <li><a class="alcell-footer__link" href="/collections/second-hand">Pre-Owned</a></li>
6019          </ul>
6020        </details>
6021
6022        <details class="alcell-footer__col">
6023          <summary class="alcell-footer__col-title">
6024            Support
6025            <svg class="alcell-footer__col-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
6026          </summary>
6027          <ul class="alcell-footer__col-list">
6028            <li><a class="alcell-footer__link" href="/pages/contact">Contact Us</a></li>
6029            <li><a class="alcell-footer__link" href="https://wa.me/27152978666" target="_blank" rel="noopener noreferrer">WhatsApp Us</a></li>
6030            <li><a class="alcell-footer__link" href="/a/track">Track My Order</a></li>
6031            <li><a class="alcell-footer__link" href="/pages/return-policy">Returns &amp; Refunds</a></li>
6032            <li><a class="alcell-footer__link" href="/pages/about">Company Profile</a></li>
6033            <li><a class="alcell-footer__link" href="/pages/touch365">Touch365 POS</a></li>
6034            <li><a class="alcell-footer__link" href="https://www.takealot.com/seller/alcell?sellers=29828029" target="_blank" rel="noopener noreferrer">Shop on Takealot</a></li>
6035          </ul>
6036        </details>
6037
6038        <details class="alcell-footer__col">
6039          <summary class="alcell-footer__col-title">
6040            My Account
6041            <svg class="alcell-footer__col-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
6042          </summary>
6043          <ul class="alcell-footer__col-list">
6044            <li><a class="alcell-footer__link" href="/pages/my-account">Sign In / Register</a></li>
6045            <li><a class="alcell-footer__link" href="/pages/my-account#orders">My Orders</a></li>
6046            <li><a class="alcell-footer__link" href="/pages/wishlist">My Wishlist</a></li>
6047            <li><a class="alcell-footer__link" href="/cart">View Cart</a></li>
6048            <li><a class="alcell-footer__link" href="/pages/terms-of-service">Terms &amp; Conditions</a></li>
6049            <li><a class="alcell-footer__link" href="/pages/privacy-policy">Privacy Policy</a></li>
6050          </ul>
6051        </details>
6052      </nav>
6053
6054    </div>
6055
6056    <!-- ── Bottom bar: copyright + payment methods ── -->
6057    <div class="alcell-footer__bottom"><p class="alcell-footer__copyright">© 2026 Alcell. All rights reserved.</p><div class="alcell-footer__payments" aria-label="Accepted payment methods">
6058        <img class="alcell-footer__pay" src="//alcell.co.za/cdn/shop/t/2/assets/pay-visa.svg?v=287537460491200561780759870" alt="Visa" width="62" height="19" loading="lazy">
6059        <img class="alcell-footer__pay" src="//alcell.co.za/cdn/shop/t/2/assets/pay-mastercard.svg?v=87751971001264798391780768325" alt="Mastercard" width="39" height="30" loading="lazy">
6060        <img class="alcell-footer__pay" src="//alcell.co.za/cdn/shop/t/2/assets/pay-payflex.svg?v=14182174279978728141780768326" alt="Payflex" width="130" height="30" loading="lazy">
6061        <img class="alcell-footer__pay" src="//alcell.co.za/cdn/shop/t/2/assets/pay-payjustnow.svg?v=17272900802
60616053047591780759869" alt="PayJustNow" width="157" height="30" loading="lazy">
6062        <img class="alcell-footer__pay" src="//alcell.co.za/cdn/shop/t/2/assets/pay-mobicred.svg?v=75492300304385467401780759867" alt="Mobicred" width="76" height="15" loading="lazy">
6063        <img class="alcell-footer__pay" src="//alcell.co.za/cdn/shop/t/2/assets/pay-ozow.svg?v=26016764073363513811780759867" alt="Ozow" width="82" height="23" loading="lazy">
6064        <img class="alcell-footer__pay" src="//alcell.co.za/cdn/shop/t/2/assets/pay-payfast.svg?v=14080587927722176561780759868" alt="PayFast" width="81" height="45" loading="lazy">
6065      </div>
6066    </div>
6067
6068  </div>
6069</footer>
6070
6071
6072</section>
6073<!-- END sections: footer-group -->
6074
6075    <ul hidden>
6076      <li id="a11y-refresh-page-message">Choosing a selection results in a full page refresh.</li>
6077      <li id="a11y-new-window-message">Opens in a new window.</li>
6078    </ul>
6079
6080    
6080<script>
6081      window.shopUrl = 'https://alcell.co.za';
6082      window.routes = {
6083        cart_add_url: '/cart/add',
6084        cart_change_url: '/cart/change',
6085        cart_update_url: '/cart/update',
6086        cart_url: '/cart',
6087        predictive_search_url: '/search/suggest',
6088        search_url: '/search',
6089      };
6090
6091      window.cartStrings = {
6092        error: `There was an error while updating your cart. Please try again.`,
6093        quantityError: `You can only add [quantity] of this item to your cart.`,
6094      };
6095
6096      window.variantStrings = {
6097        addToCart: `Add to cart`,
6098        soldOut: `Sold out`,
6099        unavailable: `Unavailable`,
6100        unavailable_with_option: `[value] - Unavailable`,
6101      };
6102
6103      window.quickOrderListStrings = {
6104        itemsAdded: `[quantity] items added`,
6105        itemAdded: `[quantity] item added`,
6106        itemsRemoved: `[quantity] items removed`,
6107        itemRemoved: `[quantity] item removed`,
6108        viewCart: `View cart`,
6109        each: `[money]/ea`,
6110        min_error: `This item has a minimum of [min]`,
6111        max_error: `This item has a maximum of [max]`,
6112        step_error: `You can only add this item in increments of [step]`,
6113      };
6114
6115      window.accessibilityStrings = {
6116        imageAvailable: `Image [index] is now available in gallery view`,
6117        shareSuccess: `Link copied to clipboard`,
6118        pauseSlideshow: `Pause slideshow`,
6119        playSlideshow: `Play slideshow`,
6120        recipientFormExpanded: `Gift card recipient form expanded`,
6121        recipientFormCollapsed: `Gift card recipient form collapsed`,
6122        countrySelectorSearchCount: `[count] countries/regions found`,
6123      };
6124    </script>
6124<script src="//alcell.co.za/cdn/shop/t/2/assets/predictive-search.js?v=67543930887917361661782914309" defer="defer"></script>
6124
6125
6126<div class="whatsapp-widget">
6127  <!-- Chat Popup -->
6128  <div class="whatsapp-popup" id="whatsapp-popup">
6129    <div class="whatsapp-popup__header">
6130      <div class="whatsapp-popup__header-content">
6131        <div class="whatsapp-popup__avatar">
6132          <svg width="32" height="32" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
6133            <path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z" fill="white"/>
6134          </svg>
6135        </div>
6136        <div class="whatsapp-popup__header-text">
6137          <div class="whatsapp-popup__title">Start a Conversation</div>
6138          <div class="whatsapp-popup__subtitle">How can we be of assistance?</div>
6139        </div>
6140      </div>
6141    </div>
6142    <div class="whatsapp-popup__body">
6143      <div class="whatsapp-popup__info">
6144        Typically replies within a couple of minutes
6145      </div>
6146      <a
6147        href="https://wa.me/27152978666"
6148        target="_blank"
6149        rel="noopener noreferrer"
6150        class="whatsapp-popup__agent"
6151      >
6152        <div class="whatsapp-popup__agent-avatar">
6153          <img src="https://cdn.shopify.com/s/files/1/0764/3047/5311/files/Whatsapp_Icon_4c104ab9-3998-499d-8699-95fbee912e5b.jpg?v=1780401842" alt="Alcell" />
6154        </div>
6155        <div class="whatsapp-popup__agent-info">
6156          <div class="whatsapp-popup__agent-name">Alcell</div>
6157          <div class="whatsapp-popup__agent-role">Customer Support</div>
6158        </div>
6159        <div class="whatsapp-popup__agent-icon">
6160          <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
6161            <path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z" fill="#20b956"/>
6162          </svg>
6163        </div>
6164      </a>
6165    </div>
6166  </div>
6167
6168  <!-- Main Button -->
6169  <button
6170    class="whatsapp-widget__button"
6171    id="whatsapp-button"
6172    aria-label="Chat with us on WhatsApp"
6173  >
6174    <svg class="whatsapp-widget__icon whatsapp-widget__icon--whatsapp" width="28" height="28" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
6175      <path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.
6175198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z" fill="white"/>
6176    </svg>
6177    <svg class="whatsapp-widget__icon whatsapp-widget__icon--close" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
6178      <path d="M18 6L6 18M6 6L18 18" stroke="white" stroke-width="2.5" stroke-linecap="round"/>
6179    </svg>
6180  </button>
6181</div>
6182
6183<script>
6184  (function() {
6185    const button = document.getElementById('whatsapp-button');
6186    const popup = document.getElementById('whatsapp-popup');
6187
6188    button.addEventListener('click', function(e) {
6189      e.preventDefault();
6190      const isOpen = popup.classList.contains('whatsapp-popup--open');
6191
6192      if (isOpen) {
6193        popup.classList.remove('whatsapp-popup--open');
6194        button.classList.remove('whatsapp-widget__button--active');
6195      } else {
6196        popup.classList.add('whatsapp-popup--open');
6197        button.classList.add('whatsapp-widget__button--active');
6198      }
6199    });
6200
6201    document.addEventListener('click', function(event) {
6202      if (!popup.contains(event.target) && !button.contains(event.target)) {
6203        popup.classList.remove('whatsapp-popup--open');
6204        button.classList.remove('whatsapp-widget__button--active');
6205      }
6206    });
6207
6208    // Fade the widget out once the footer scrolls into view so the icon never
6209    // overlaps the footer; fade it back in when the footer leaves the viewport.
6210    var widget = document.querySelector('.whatsapp-widget');
6211    var footer = document.querySelector('.alcell-footer') || document.querySelector('footer');
6212    if (widget && footer && 'IntersectionObserver' in window) {
6213      var footerObserver = new IntersectionObserver(function(entries) {
6214        entries.forEach(function(entry) {
6215          if (entry.isIntersecting) {
6216            widget.classList.add('whatsapp-widget--hidden');
6217            popup.classList.remove('whatsapp-popup--open');
6218            button.classList.remove('whatsapp-widget__button--active');
6219          } else {
6220            widget.classList.remove('whatsapp-widget--hidden');
6221          }
6222        });
6223      }, { rootMargin: '0px 0px -40px 0px', threshold: 0 });
6224      footerObserver.observe(footer);
6225    }
6226  })();
6227</script>
6227
6228
6229<style>
6230  .whatsapp-widget {
6231    position: fixed !important;
6232    bottom: 24px !important;
6233    left: 24px !important;
6234    z-index: 9999 !important;
6235    transition: opacity 0.35s ease, visibility 0.35s ease !important;
6236  }
6237
6238  /* Faded out once the footer is in view so the icon never overlaps the footer. */
6239  .whatsapp-widget--hidden {
6240    opacity: 0 !important;
6241    visibility: hidden !important;
6242    pointer-events: none !important;
6243  }
6244
6245  .whatsapp-popup {
6246    position: absolute !important;
6247    bottom: 80px !important;
6248    left: 0 !important;
6249    width: 360px !important;
6250    background: white !important;
6251    border-radius: 12px !important;
6252    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15) !important;
6253    opacity: 0 !important;
6254    visibility: hidden !important;
6255    transform: translateY(10px) scale(0.95) !important;
6256    transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), visibility 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
6257    overflow: hidden !important;
6258  }
6259
6260  .whatsapp-popup--open {
6261    opacity: 1 !important;
6262    visibility: visible !important;
6263    transform: translateY(0) scale(1) !important;
6264  }
6265
6266  .whatsapp-popup__header {
6267    background: #20b956 !important;
6268    padding: 16px !important;
6269    display: flex !important;
6270    align-items: flex-start !important;
6271    justify-content: space-between !important;
6272    gap: 12px !important;
6273  }
6274
6275  .whatsapp-popup__header-content {
6276    display: flex !important;
6277    align-items: center !important;
6278    gap: 12px !important;
6279    flex: 1 !important;
6280  }
6281
6282  .whatsapp-popup__avatar {
6283    width: 48px !important;
6284    height: 48px !important;
6285    background: transparent !important;
6286    border-radius: 50% !important;
6287    display: flex !important;
6288    align-items: center !important;
6289    justify-content: center !important;
6290    flex-shrink: 0 !important;
6291  }
6292
6293  .whatsapp-popup__header-text {
6294    flex: 1 !important;
6295  }
6296
6297  .whatsapp-popup__title {
6298    color: white !important;
6299    font-size: 17px !important;
6300    font-weight: 600 !important;
6301    margin: 0 0 4px 0 !important;
6302    line-height: 1.2 !important;
6303  }
6304
6305  .whatsapp-popup__subtitle {
6306    color: rgba(255, 255, 255, 0.9) !important;
6307    font-size: 12px !important;
6308    margin: 0 !important;
6309    line-height: 1.3 !important;
6310  }
6311
6312  .whatsapp-popup__body {
6313    padding: 20px !important;
6314    background: white !important;
6315  }
6316
6317  .whatsapp-popup__info {
6318    color: #888 !important;
6319    font-size: 14.5px !important;
6320    margin: 0 0 16px 0 !important;
6321    text-align: left !important;
6322    font-weight: 500 !important;
6323  }
6324
6325  .whatsapp-popup__agent {
6326    background: #f5f5f5 !important;
6327    border-radius: 8px !important;
6328    padding: 14px !important;
6329    display: flex !important;
6330    align-items: center !important;
6331    gap: 12px !important;
6332    border-left: 3px solid #20b956 !important;
6333    transition: background-color 0.2s ease !important;
6334    cursor: pointer !important;
6335    text-decoration: none !important;
6336  }
6337
6338  .whatsapp-popup__agent:hover {
6339    background: #fafafa !important;
6340  }
6341
6342  .whatsapp-popup__agent-avatar {
6343    width: 44px !important;
6344    height: 44px !important;
6345    background: white !important;
6346    border-radius: 50% !important;
6347    display: flex !important;
6348    align-items: center !important;
6349    justify-content: center !important;
6350    flex-shrink: 0 !important;
6351    overflow: hidden !important;
6352  }
6353
6354  .whatsapp-popup__agent-avatar img {
6355    width: 100% !important;
6356    height: 100% !important;
6357    object-fit: contain !important;
6358    padding: 4px !important;
6359    box-sizing: border-box !important;
6360  }
6361
6362  .whatsapp-popup__agent-info {
6363    flex: 1 !important;
6364  }
6365
6366  .whatsapp-popup__agent-name {
6367    color: #1a1a1a !important;
6368    font-size: 15px !important;
6369    font-weight: 500 !important;
6370    margin: 0 0 3px 0 !important;
6371    line-height: 1.2 !important;
6372  }
6373
6374  .whatsapp-popup__agent-role {
6375    color: #888 !important;
6376    font-size: 13px !important;
6377    margin: 0 !important;
6378    line-height: 1.2 !important;
6379    font-weight: 400 !important;
6380  }
6381
6382  .whatsapp-popup__agent-icon {
6383    width: 36px !important;
6384    height: 36px !important;
6385    background: transparent !important;
6386    border-radius: 50% !important;
6387    display: flex !important;
6388    align-items: center !important;
6389    justify-content: center !important;
6390    flex-shrink: 0 !important;
6391  }
6392
6393  .whatsapp-widget__button {
6394    display: flex !important;
6395    align-items: center !important;
6396    justify-content: center !important;
6397    width: 56px !important;
6398    height: 56px !important;
6399    background: #20b956 !important;
6400    border: none !important;
6401    border-radius: 50% !important;
6402    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3) !important;
6403    cursor: pointer !important;
6404    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
6405    position: relative !important;
6406  }
6407
6408  .whatsapp-widget__button:hover {
6409    transform: scale(1.05) !important;
6410    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.4) !important;
6411  }
6412
6413  .whatsapp-widget__button:active {
6414    transform: scale(0.95) !important;
6415  }
6416
6417  .whatsapp-widget__icon {
6418    position: absolute !important;
6419    top: 50% !important;
6420    left: 50% !important;
6421    transform: translate(-50%, -50%) !important;
6422    transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
6423    filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1)) !important;
6424  }
6425
6426  .whatsapp-widget__icon--whatsapp {
6427    opacity: 1 !important;
6428    transform: translate(-50%, -50%) rotate(0deg) scale(1) !important;
6429  }
6430
6431  .whatsapp-widget__icon--close {
6432    opacity: 0 !important;
6433    transform: translate(-50%, -50%) rotate(-90deg) scale(0.8) !important;
6434  }
6435
6436  .whatsapp-widget__button--active .whatsapp-widget__icon--whatsapp {
6437    opacity: 0 !important;
6438    transform: translate(-50%, -50%) rotate(90deg) scale(0.8) !important;
6439  }
6440
6441  .whatsapp-widget__button--active .whatsapp-widget__icon--close {
6442    opacity: 1 !important;
6443    transform: translate(-50%, -50%) rotate(0deg) scale(1) !important;
6444  }
6445
6446  @media screen and (max-width: 749px) {
6447    /* Align the launcher's left edge with the site container gutter
6448       (.tk-wrap is padding:0 14px below 989px) instead of the old 20px. */
6449    .whatsapp-widget {
6450      bottom: 20px !important;
6451      left: 14px !important;
6452    }
6453
6454    body[class*="product"] .whatsapp-widget,
6455    .template-product .whatsapp-widget,
6456    [data-template="product"] .whatsapp-widget {
6457      display: none !important;
6458    }
6459
6460    /* Hide the widget while the mobile burger menu is open (same drawer-open
6461       signal the header uses for its scroll-lock). */
6462    body:has(#Details-menu-drawer-container[open]) .whatsapp-widget {
6463      display: none !important;
6464    }
6465
6466    /* Hide the widget while the mobile "Sort by" or Filters full-screen drawer
6467       is open on collection/search pages (they carry .is-open when active). */
6468    body:has(.tkcol__sortsheet.is-open) .whatsapp-widget,
6469    body:has(.tkcol__sidebar.is-open) .whatsapp-widget {
6470      display: none !important;
6471    }
6472
6473    .whatsapp-popup {
6474      width: calc(100vw - 60px) !important;
6475      max-width: 320px !important;
6476      bottom: 70px !important;
6477    }
6478
6479    .whatsapp-popup__header {
6480      padding: 14px !important;
6481    }
6482
6483    .whatsapp-popup__avatar {
6484      width: 42px !important;
6485      height: 42px !important;
6486    }
6487
6488    .whatsapp-popup__avatar svg {
6489      width: 26px !important;
6490      height: 26px !important;
6491    }
6492
6493    .whatsapp-popup__title {
6494      font-size: 15px !important;
6495    }
6496
6497    .whatsapp-popup__subtitle {
6498      font-size: 11px !important;
6499    }
6500
6501    .whatsapp-popup__body {
6502      padding: 16px !important;
6503    }
6504
6505    .whatsapp-popup__info {
6506      font-size: 13px !important;
6507      margin: 0 0 14px 0 !important;
6508    }
6509
6510    .whatsapp-popup__agent {
6511      padding: 12px !important;
6512    }
6513
6514    .whatsapp-popup__agent-avatar {
6515      width: 38px !important;
6516      height: 38px !important;
6517    }
6518
6519    .whatsapp-popup__agent-name {
6520      font-size: 14px !important;
6521    }
6522
6523    .whatsapp-popup__agent-role {
6524      font-size: 12px !important;
6525    }
6526
6527    .whatsapp-popup__agent-icon {
6528      width: 32px !important;
6529      height: 32px !important;
6530    }
6531
6532    .whatsapp-popup__agent-icon svg {
6533      width: 20px !important;
6534      height: 20px !important;
6535    }
6536
6537    .whatsapp-widget__button {
6538      width: 52px !important;
6539      height: 52px !important;
6540    }
6541
6542    .whatsapp-widget__icon--whatsapp {
6543      width: 26px !important;
6544      height: 26px !important;
6545    }
6546
6547    .whatsapp-widget__icon--close {
6548      width: 22px !important;
6549      height: 22px !important;
6550    }
6551  }
6552
6553  @media screen and (min-width: 750px) and (max-width: 1024px) {
6554    .whatsapp-widget {
6555      bottom: 20px !important;
6556      left: 20px !important;
6557    }
6558  }
6559
6560  @media screen and (max-height: 600px) {
6561    .whatsapp-widget {
6562      bottom: 16px !important;
6563    }
6564
6565    .whatsapp-popup {
6566      bottom: 70px !important;
6567    }
6568  }
6569</style>
6570
6571<style>
6572    @media (max-width: 989px) {
6573      /* On product pages the fixed sticky Add-to-Cart bar replaces the tab bar. */
6574      .m-tabbar { display:none !important; }
6575      /* Reserve exactly the sticky bar's height as bottom padding so the bar never
6576         covers the footer — the whole footer (and its bottom spacing) scrolls into
6577         view, with the bar sitting in the reserved space below it, as if it were
6578         placed beneath the footer.
6579         Height = 21px price row + 8px gap + 48px action row + 20px vertical padding
6580         + 1px border ≈ 98px, plus env(safe-area-inset-bottom) (the bar's own
6581         padding-bottom includes the home-indicator inset, so we mirror it here). */
6582      body { padding-bottom: calc(98px + env(safe-area-inset-bottom)) !important; }
6583    }
6584  </style><nav class="m-tabbar" aria-label="Mobile navigation">
6585  <a href="/" class="m-tabbar__item">
6586    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 10.5 12 3l9 7.5"/><path d="M5 9.5V21h14V9.5"/></svg>
6587    <span>Home</span>
6588  </a>
6589  <a href="/collections" class="m-tabbar__item">
6590    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="3" width="7" height="7" rx="1.5"/><rect x="3" y="14" width="7" height="7" rx="1.5"/><rect x="14" y="14" width="7" height="7" rx="1.5"/></svg>
6591    <span>Categories</span>
6592  </a>
6593  <button type="button" class="m-tabbar__item" data-m-search aria-label="Search">
6594    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
6595    <span>Search</span>
6596  </button>
6597  <a href="/pages/touch365" class="m-tabbar__item">
6598    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/><path d="M7 8h2v5H7zM11 8h6M11 11h4"/></svg>
6599    <span>Software</span>
6600  </a>
6601  <a href="/pages/my-account" class="m-tabbar__item">
6602    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="4"/><path d="M4 21c0-4 3.6-7 8-7s8 3 8 7"/></svg>
6603    <span>Account</span>
6604  </a>
6605</nav><style data-shopify>.m-tabbar { display:none; }
6606  @media (max-width: 989px) {
6607    .m-tabbar {
6608      display:grid; grid-template-columns:repeat(5,1fr);
6609      position:fixed; left:0; right:0; bottom:0; z-index:1000;
6610      background:rgba(255,255,255,0.6);
6611      -webkit-backdrop-filter:blur(14px) saturate(120%); backdrop-filter:blur(14px) saturate(120%);
6612      border-top:1px solid rgba(230,232,236,0.8);
6613      box-shadow:0 -2px 14px rgba(0,0,0,.06);
6614      padding:7px 0 calc(7px + env(safe-area-inset-bottom));
6615    }
6616    .m-tabbar__item {
6617      display:flex; flex-direction:column; align-items:center; justify-content:center; gap:3px;
6618      background:none; border:none; cursor:pointer; text-decoration:none;
6619      color:#5B6478; font-size:11px; font-weight:600; padding:3px 0; font-family:inherit;
6620      line-height:1; -webkit-appearance:none; appearance:none; box-sizing:border-box;
6621      margin:0;
6622    }
6623    .m-tabbar__item svg { width:23px; height:23px; flex-shrink:0; }
6624    .m-tabbar__item.is-active { color:#2a3270; }
6625    /* Hide the bottom bar while the mobile burger menu is open — same
6626       drawer-open signal the header scroll-lock and WhatsApp widget use. */
6627    body:has(#Details-menu-drawer-container[open]) .m-tabbar { display:none !important; }
6628    /* Reserve exactly the bar's height (incl. the home-indicator safe area) so the
6629       footer sits flush against the bar — no empty strip to scroll past below it,
6630       and no footer content hidden behind it on notched phones. */
6631    body { padding-bottom:calc(58px + env(safe-area-inset-bottom)); }
6632    /* lift the WhatsApp widget above the bar */
6633    .whatsapp-widget { bottom:70px !important; }
6634  }</style>
6635
6636    
6636<script>
6637      // Zoom lock: the viewport meta (maximum-scale=1, user-scalable=no) stops
6638      // double-tap zoom, but iOS Safari can ignore it for pinch — so also block
6639      // its multi-touch gesture events. Single-touch taps/scrolling are untouched.
6640      ['gesturestart', 'gesturechange', 'gestureend'].forEach(function (evt) {
6641        document.addEventListener(evt, function (e) { e.preventDefault(); }, { passive: false });
6642      });
6643    </script>
6643
6644  <div id="shopify-block-AYkpjcWFINkF3RWlJV__1513253815146976218" class="shopify-block shopify-app-block">
6645</div>
6645<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
6645
6646</body>
6647</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.