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" 180Hz Gaming Monitor VX2779-HD-PRO 13</title> 14 15 16 <meta name="description" content="ViewSonic VX2779-HD-PRO 27" 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" 180Hz Gaming Monitor VX2779-HD-PRO"> 24<meta property="og:type" content="product"> 25<meta property="og:description" content="ViewSonic VX2779-HD-PRO 27" 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" 180Hz Gaming Monitor VX2779-HD-PRO"> 31<meta name="twitter:description" content="ViewSonic VX2779-HD-PRO 27" 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 & Accessories" 2012 tabindex="-1" 2013 >Laptops & 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 & Power" 2024 tabindex="-1" 2025 >Solar & 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 & CCTV" 2036 tabindex="-1" 2037 >Security & 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" 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" 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" Full HD IPS Monitor - 1080p, 120Hz, 1ms, HDMI & 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 & 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" LED Monitor - 1366x768 HD, HDMI & 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 & 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 & Accessories" 2904 tabindex="-1" 2905 >Laptops & 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 & Power" 2916 tabindex="-1" 2917 >Solar & 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 & CCTV" 2928 tabindex="-1" 2929 >Security & 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" 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" 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" Full HD IPS Monitor - 1080p, 120Hz, 1ms, HDMI & 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 & 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" LED Monitor - 1366x768 HD, HDMI & 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 & 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 & 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&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&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" 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&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&width=400 400w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&width=600 600w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&width=1000 1000w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&width=1200 1200w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&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&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&width=400 400w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&width=600 600w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&width=1000 1000w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&width=1200 1200w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&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&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&width=400 400w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&width=600 600w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&width=1000 1000w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&width=1200 1200w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&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&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&width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=1100 1100w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=1445 1445w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=1680 1680w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&width=2048 2048w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_17b4512e-bf49-4a40-aec9-8f1623f098ef.jpg?v=1782311857&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&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&width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&width=1100 1100w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&width=1445 1445w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&width=1680 1680w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&width=2048 2048w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_2_4d277ac3-5e8e-4762-ae45-04b173061ef3.jpg?v=1782311857&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&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&width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&width=1100 1100w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&width=1445 1445w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&width=1680 1680w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&width=2048 2048w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_3_9510c23c-889a-4728-8c4b-05de0d5251f3.jpg?v=1782311858&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&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&width=800 800w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&width=1100 1100w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&width=1445 1445w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&width=1680 1680w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&width=2048 2048w, //alcell.co.za/cdn/shop/files/vx2779-hd-pro_4.jpg?v=1782311857&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" 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 & 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–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" 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–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" 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&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&width=300 300w, //alcell.co.za/cdn/shop/files/za-mp002_1.jpg?v=1778851580&width=500 500w, //alcell.co.za/cdn/shop/files/za-mp002_1.jpg?v=1778851580&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&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&width=300 300w, //alcell.co.za/cdn/shop/files/zr-701.jpg?v=1778851757&width=500 500w, //alcell.co.za/cdn/shop/files/zr-701.jpg?v=1778851757&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&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&width=300 300w, //alcell.co.za/cdn/shop/files/usb-701.jpg?v=1778850941&width=500 500w, //alcell.co.za/cdn/shop/files/usb-701.jpg?v=1778850941&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&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&width=300 300w, //alcell.co.za/cdn/shop/files/za-mp003-blue.jpg?v=1778851581&width=500 500w, //alcell.co.za/cdn/shop/files/za-mp003-blue.jpg?v=1778851581&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 & 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 & Accessories</a></li> 5998 <li><a class="alcell-footer__link" href="/collections/mobile-tablet-accessories">Mobile & 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 & 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 & 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 & Chargers</a></li> 6016 <li><a class="alcell-footer__link" href="/collections/diy-tools-machinery">DIY Tools & Machinery</a></li> 6017 <li><a class="alcell-footer__link" href="/collections/office-stationery">Office & 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 & 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 & 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.