1<!doctype html> 2<html 3 class="no-js" 4 lang="en" 5 dir="ltr"> 6 <head> 7 <!-- SEA Survey & Quiz consent blocker. Blocks outbound IP without Analytics consent --> 8
8<script> 9(function () { 10 function cookie(name) { 11 var parts = document.cookie.split('; '); 12 for (var i = 0; i < parts.length; i++) { 13 var eq = parts[i].indexOf('='); 14 if (parts[i].slice(0, eq) === name) { 15 return decodeURIComponent(parts[i].slice(eq + 1)); 16 } 17 } 18 return null; 19 } 20 21 function analyticsAllowed() { 22 var status = cookie('cookieconsent_status'); 23 if (!status || status === 'deny') return false; 24 var disabled = cookie('cookieconsent_preferences_disabled') || ''; 25 return disabled.split(',').indexOf('analytics') === -1; 26 } 27 28 if (analyticsAllowed()) return; // consented: stay out of the way entirely 29 30 var store; 31 Object.defineProperty(window, 'AVADA_SURVEY', { 32 configurable: true, 33 get: function () { return store; }, 34 set: function (v) { 35 store = v; 36 if (store && typeof store === 'object') store._disabled = true; 37 } 38 }); 39})(); 40</script>
40 41 <meta charset="utf-8"> 42 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 43 <meta name="viewport" content="width=device-width,initial-scale=1"> 44 <meta name="theme-color" content="#5e6350"> 45 <link rel="canonical" href="https://ipowerresale.com/products/apple-ipad-pro-11-inch-m5"> 46 <link 47 rel="preconnect" 48 href="https://cdn.shopify.com" 49 crossorigin> 50 <link 51 rel="preconnect" 52 href="https://fonts.shopifycdn.com" 53 crossorigin> 54 <link rel="dns-prefetch" href="https://productreviews.shopifycdn.com"> 55 <link rel="dns-prefetch" href="https://ajax.googleapis.com"> 56 <link rel="dns-prefetch" href="https://maps.googleapis.com"> 57 <link rel="dns-prefetch" href="https://maps.gstatic.com"><link 58 rel="shortcut icon" 59 href="//ipowerresale.com/cdn/shop/files/favicon-cropped_32x32.png?v=1674766369" 60 type="image/png" /><title>Apple iPad Pro | iPowerResale 61</title> 62<meta name="description" content="Browse the Apple iPad Pro and more refurbished Apple products available online from iPowerResale. Start shopping today."><meta property="og:site_name" content="iPowerResale"> 63 <meta property="og:url" content="https://ipowerresale.com/products/apple-ipad-pro-11-inch-m5"> 64 <meta property="og:title" content="iPad Pro 11-inch M5"> 65 <meta property="og:type" content="product"> 66 <meta property="og:description" content="Browse the Apple iPad Pro and more refurbished Apple products available online from iPowerResale. Start shopping today."><meta property="og:image" content="http://ipowerresale.com/cdn/shop/files/media_cafccf73-53e7-4608-a7f4-863a08925a0c.png?v=1766104668"> 67 <meta property="og:image:secure_url" content="https://ipowerresale.com/cdn/shop/files/media_cafccf73-53e7-4608-a7f4-863a08925a0c.png?v=1766104668"> 68 <meta property="og:image:width" content="1140"> 69 <meta property="og:image:height" content="1140"><meta name="twitter:site" content="@"> 70 <meta name="twitter:card" content="summary_large_image"> 71 <meta name="twitter:title" content="iPad Pro 11-inch M5"> 72 <meta name="twitter:description" content="Browse the Apple iPad Pro and more refurbished Apple products available online from iPowerResale. Start shopping today.">
73<script async crossorigin fetchpriority="high" src="/cdn/shopifycloud/importmap-polyfill/es-modules-shim.2.4.0.js"></script>
vendor: 1 bytes, line 73
73
74<script type="importmap"> 75{ 76 "imports": { 77 "element.base-media": "//ipowerresale.com/cdn/shop/t/130/assets/element.base-media.js?v=35720", 78 "element.image.parallax": "//ipowerresale.com/cdn/shop/t/130/assets/element.image.parallax.js?v=59188309605188605141790277978", 79 "element.model": "//ipowerresale.com/cdn/shop/t/130/assets/element.model.js?v=104979259955732717291790277978", 80 "element.quantity-selector": "//ipowerresale.com/cdn/shop/t/130/assets/element.quantity-selector.js?v=68208048201360514121790277979", 81 "element.text.rte": "//ipowerresale.com/cdn/shop/t/130/assets/element.text.rte.js?v=28194737298593644281790277979", 82 "element.video": "//ipowerresale.com/cdn/shop/t/130/assets/element.video.js?v=110560105447302630031790277980", 83 "is-land": "//ipowerresale.com/cdn/shop/t/130/assets/is-land.min.js?v=92343381495565747271790278026", 84 "util.misc": "//ipowerresale.com/cdn/shop/t/130/assets/util.misc.js?v=117964846174238173191790278048", 85 "util.product-loader": "//ipowerresale.com/cdn/shop/t/130/assets/util.product-loader.js?v=71947287259713254281790278048", 86 "util.resource-loader": "//ipowerresale.com/cdn/shop/t/130/assets/util.resource-loader.js?v=81301169148003274841790278049", 87 "vendor.in-view": "//ipowerresale.com/cdn/shop/t/130/assets/vendor.in-view.js?v=126891093837844970591790278050" 88 } 89} 90</script>
90<script type="module" src="//ipowerresale.com/cdn/shop/t/130/assets/is-land.min.js?v=92343381495565747271790278026"></script>
90 91<style data-shopify>@font-face { 92 font-family: Inter; 93 font-weight: 400; 94 font-style: normal; 95 font-display: swap; 96 src: url("//ipowerresale.com/cdn/fonts/inter/inter_n4.b2a3f24c19b4de56e8871f609e73ca7f6d2e2bb9.woff2") format("woff2"), 97 url("//ipowerresale.com/cdn/fonts/inter/inter_n4.af8052d517e0c9ffac7b814872cecc27ae1fa132.woff") format("woff"); 98} 99 100 @font-face { 101 font-family: Inter; 102 font-weight: 400; 103 font-style: normal; 104 font-display: swap; 105 src: url("//ipowerresale.com/cdn/fonts/inter/inter_n4.b2a3f24c19b4de56e8871f609e73ca7f6d2e2bb9.woff2") format("woff2"), 106 url("//ipowerresale.com/cdn/fonts/inter/inter_n4.af8052d517e0c9ffac7b814872cecc27ae1fa132.woff") format("woff"); 107} 108 109 110 @font-face { 111 font-family: Inter; 112 font-weight: 600; 113 font-style: normal; 114 font-display: swap; 115 src: url("//ipowerresale.com/cdn/fonts/inter/inter_n6.771af0474a71b3797eb38f3487d6fb79d43b6877.woff2") format("woff2"), 116 url("//ipowerresale.com/cdn/fonts/inter/inter_n6.88c903d8f9e157d48b73b7777d0642925bcecde7.woff") format("woff"); 117} 118 119 @font-face { 120 font-family: Inter; 121 font-weight: 400; 122 font-style: italic; 123 font-display: swap; 124 src: url("//ipowerresale.com/cdn/fonts/inter/inter_i4.feae1981dda792ab80d117249d9c7e0f1017e5b3.woff2") format("woff2"), 125 url("//ipowerresale.com/cdn/fonts/inter/inter_i4.62773b7113d5e5f02c71486623cf828884c85c6e.woff") format("woff"); 126} 127 128 @font-face { 129 font-family: Inter; 130 font-weight: 600; 131 font-style: italic; 132 font-display: swap; 133 src: url("//ipowerresale.com/cdn/fonts/inter/inter_i6.3bbe0fe1c7ee4f282f9c2e296f3e4401a48cbe19.woff2") format("woff2"), 134 url("//ipowerresale.com/cdn/fonts/inter/inter_i6.8bea21f57a10d5416ddf685e2c91682ec237876d.woff") format("woff"); 135} 136 137</style><link href="//ipowerresale.com/cdn/shop/t/130/assets/theme.css?v=22760760703466984761790278101" rel="stylesheet" type="text/css" media="all" /> 138<style data-shopify>:root { 139 --typeHeaderPrimary: Inter; 140 --typeHeaderFallback: sans-serif; 141 --typeHeaderSize: 32px; 142 --typeHeaderWeight: 400; 143 --typeHeaderLineHeight: 1.1; 144 --typeHeaderSpacing: 0.1em; 145 146 --typeBasePrimary:Inter; 147 --typeBaseFallback:sans-serif; 148 --typeBaseSize: 16px; 149 --typeBaseWeight: 400; 150 --typeBaseSpacing: 0.05em; 151 --typeBaseLineHeight: 1.4; 152 --typeBaselineHeightMinus01: 1.3; 153 154 --typeCollectionTitle: 22px; 155 156 --iconWeight: 3px; 157 --iconLinecaps: round; 158 159 160 --buttonRadius: 3px; 161 162 163 --colorGridOverlayOpacity: 0.12; 164 --colorAnnouncement: #6b3f21; 165 --colorAnnouncementText: #ffffff; 166 167 --colorBody: #ffffff; 168 --colorBodyAlpha05: rgba(255, 255, 255, 0.05); 169 --colorBodyDim: #f2f2f2; 170 --colorBodyLightDim: #fafafa; 171 --colorBodyMediumDim: #f5f5f5; 172 173 174 --colorBorder: #e8e8e1; 175 176 --colorBtnPrimary: #5e6350; 177 --colorBtnPrimaryLight: #797f67; 178 --colorBtnPrimaryDim: #515545; 179 --colorBtnPrimaryText: #ffffff; 180 181 --colorCartDot: #d74a5d; 182 183 --colorDrawers: #ffffff; 184 --colorDrawersDim: #f2f2f2; 185 --colorDrawerBorder: #e8e8e1; 186 --colorDrawerText: #171717; 187 --colorDrawerTextDark: #000000; 188 --colorDrawerButton: #171717; 189 --colorDrawerButtonText: #ffffff; 190 191 --colorFooter: #ffffff; 192 --colorFooterText: #171717; 193 --colorFooterTextAlpha01: #171717; 194 195 --colorGridOverlay: #000000; 196 --colorGridOverlayOpacity: 0.1; 197 198 --colorHeaderTextAlpha01: rgba(23, 23, 23, 0.1); 199 200 --colorHeroText: #ffffff; 201 202 --colorSmallImageBg: #ffffff; 203 --colorLargeImageBg: #171717; 204 205 --colorImageOverlay: #171717; 206 --colorImageOverlayOpacity: 0.1; 207 --colorImageOverlayTextShadow: 0.2; 208 209 --colorLink: #171717; 210 211 --colorModalBg: rgba(230, 230, 230, 0.6); 212 213 --colorNav: #ffffff; 214 --colorNavText: #171717; 215 216 --colorPrice: #171717; 217 218 --colorSaleTag: #d74a5d; 219 --colorSaleTagText: #ffffff; 220 221 --colorTextBody: #171717; 222 --colorTextBodyAlpha015: rgba(23, 23, 23, 0.15); 223 --colorTextBodyAlpha005: rgba(23, 23, 23, 0.05); 224 --colorTextBodyAlpha008: rgba(23, 23, 23, 0.08); 225 --colorTextSavings: #d74a5d; 226 227 --urlIcoSelect: url(//ipowerresale.com/cdn/shop/t/130/assets/ico-select.svg);
228 --urlIcoSelectFooter: url(//ipowerresale.com/cdn/shop/t/130/assets/ico-select-footer.svg); 229 --urlIcoSelectWhite: url(//ipowerresale.com/cdn/shop/t/130/assets/ico-select-white.svg); 230 231 --grid-gutter: 17px; 232 --drawer-gutter: 20px; 233 234 --sizeChartMargin: 25px 0; 235 --sizeChartIconMargin: 5px; 236 237 --newsletterReminderPadding: 40px; 238 239 /*Shop Pay Installments*/ 240 --color-body-text: #171717; 241 --color-body: #ffffff; 242 --color-bg: #ffffff; 243 } 244 245 .placeholder-content { 246 background-image: linear-gradient(100deg, #ffffff 40%, #f7f7f7 63%, #ffffff 79%); 247 }</style>
247<script> 248 document.documentElement.className = document.documentElement.className.replace('no-js', 'js'); 249 250 window.theme = window.theme || {}; 251 theme.routes = { 252 home: "/", 253 cart: "/cart.js", 254 cartPage: "/cart", 255 cartAdd: "/cart/add.js", 256 cartChange: "/cart/change.js", 257 search: "/search", 258 predictiveSearch: "/search/suggest" 259 }; 260 theme.strings = { 261 soldOut: "Sold Out", 262 unavailable: "Unavailable", 263 inStockLabel: "In stock, ready to ship", 264 oneStockLabel: "Low stock - [count] item left", 265 otherStockLabel: "Low stock - [count] items left", 266 willNotShipUntil: "Ready to ship [date]", 267 willBeInStockAfter: "Back in stock [date]", 268 waitingForStock: "Backordered, shipping soon", 269 savePrice: "Save [saved_amount]", 270 cartEmpty: "Your cart is currently empty.", 271 cartTermsConfirmation: "You must agree with the terms and conditions of sales to check out", 272 searchCollections: "Collections", 273 searchPages: "Pages", 274 searchArticles: "Articles", 275 productFrom: "from ", 276 maxQuantity: "You can only have [quantity] of [title] in your cart." 277 }; 278 theme.settings = { 279 cartType: "drawer", 280 isCustomerTemplate: false, 281 moneyFormat: "${{amount}}", 282 saveType: "dollar", 283 productImageSize: "portrait", 284 productImageCover: true, 285 predictiveSearch: true, 286 predictiveSearchType: null, 287 predictiveSearchVendor: false, 288 predictiveSearchPrice: false, 289 quickView: true, 290 themeName: 'Impulse', 291 themeVersion: "8.1.0" 292 }; 293 </script>
293 294 295
295<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
295<meta name="google-site-verification" content="OiTKPs3JtK4D4R6Deui3jAKPBi79vsrbJD-fZ7whtxM"> 296<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/62136156329/digital_wallets/dialog"> 297<meta id="in-context-paypal-metadata" data-shop-id="62136156329" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD"> 298<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="buy" href="/cart/46682881720489:1?ucp/version=2026-08-25&context/payment/0/handler=dev.shopify.shop_pay" payment="dev.shopify.shop_pay com.google.pay dev.shopify.card"><link rel="alternate" hreflang="x-default" href="https://ipowerresale.com/products/apple-ipad-pro-11-inch-m5"> 299<link rel="alternate" hreflang="en" href="https://ipowerresale.com/products/apple-ipad-pro-11-inch-m5"> 300<link rel="alternate" hreflang="de" href="https://ipowerresale.com/de/products/apple-ipad-pro-11-inch-m5"> 301<link rel="alternate" type="application/json+oembed" href="https://ipowerresale.com/products/apple-ipad-pro-11-inch-m5.oembed">
302<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&configuration_id=4671242409&edited_at=1790268240"></script>
302 303<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
304<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&configuration_id=4671242409&edited_at=1790268240&shop_id=62136156329" crossorigin="anonymous"></script>
vendor: 1 bytes, line 304
304
305<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":62136156329,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/62136156329","merchantName":"iPowerResale","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","elo","jcb"],"total":{"type":"pending","label":"iPowerResale","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 305
305
306<script id="shopify-features" type="application/json">{"accessToken":"08e16357ba9f0749bef7b2a1df173be1","betas":["rich-media-storefront-analytics"],"domain":"ipowerresale.com","predictiveSearch":true,"shopId":62136156329,"locale":"en"}</script>
vendor: 1 bytes, line 306
306
307<script>var Shopify = Shopify || {}; 308Shopify.shop = "ipowerresale.myshopify.com"; 309Shopify.locale = "en"; 310Shopify.currency = {"active":"USD","rate":"1.0"}; 311Shopify.country = "US"; 312Shopify.theme = {"name":"iPad Pencil Promo 09.24.26","id":165931122857,"schema_name":"Impulse","schema_version":"8.1.0","theme_store_id":null,"role":"main"}; 313Shopify.theme.handle = "null"; 314Shopify.theme.style = {"id":null,"handle":null}; 315Shopify.cdnHost = "ipowerresale.com/cdn"; 316Shopify.routes = Shopify.routes || {}; 317Shopify.routes.root = "/"; 318Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 319Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 320Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 321Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 321
321
322<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 322
322
323<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 323
323
324<script> 325 window.ShopifyPay = window.ShopifyPay || {}; 326 window.ShopifyPay.apiHost = "shop.app\/pay"; 327 window.ShopifyPay.redirectState = null; 328</script>
vendor: 1 bytes, line 328
328
329<script> 330 window.Shopify = window.Shopify || {}; 331 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 332 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 333 window.Shopify.SignInWithShop.eligible = true; 334</script>
vendor: 1 bytes, line 334
334
335<script id="shop-js-analytics" type="application/json">{"pageType":"product"}</script>
vendor: 1 bytes, line 335
335
336<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 336
336
337<script type="module"> 338 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 339 340 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 341 342</script>
vendor: 1 bytes, line 342
342
343<script> 344 window.Shopify = window.Shopify || {}; 345 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 346 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]}; 347</script>
vendor: 1 bytes, line 347
347
348<script>(function() { 349 var isLoaded = false; 350 function asyncLoad() { 351 if (isLoaded) return; 352 isLoaded = true; 353 var urls = ["https:\/\/cdn-scripts.signifyd.com\/shopify\/script-tag.js?shop=ipowerresale.myshopify.com"]; 354 for (var i = 0; i < urls.length; i++) { 355 var s = document.createElement('script'); 356 s.type = 'text/javascript'; 357 s.async = true; 358 s.src = urls[i]; 359 var x = document.getElementsByTagName('script')[0]; 360 x.parentNode.insertBefore(s, x); 361 } 362 }; 363 if(window.attachEvent) { 364 window.attachEvent('onload', asyncLoad); 365 } else { 366 window.addEventListener('load', asyncLoad, false); 367 } 368})();</script>
vendor: 1 bytes, line 368
368
369<script id="__st">var __st={"a":62136156329,"offset":-25200,"reqid":"49261112-e20a-403a-bf82-814d5db81e5f-1791120319","pageurl":"ipowerresale.com\/products\/apple-ipad-pro-11-inch-m5","u":"aed239dcf936","p":"product","rtyp":"product","rid":8832364773545};</script>
vendor: 1 bytes, line 369
369
370<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 370
370
371<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 371
371
372<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//ipowerresale.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 372
372
373<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 = "//ipowerresale.com/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
373<script crossorigin="anonymous" defer="defer" src="//ipowerresale.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 373
373
374<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 374
374
375<script> 376 window.Shopify = window.Shopify || {}; 377 window.Shopify.MCP = window.Shopify.MCP || {}; 378 window.Shopify.MCP.enabled = true; 379 window.Shopify.MCP.shop = "ipowerresale.myshopify.com"; 380 window.Shopify.MCP.mcpEndpoint = "https:\/\/ipowerresale.com\/api\/mcp"; 381 window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n - What is your return policy?\n - What is your shipping policy?\n - What is your phone number?\n - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}]; 382</script>
vendor: 1 bytes, line 382
382
383<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("\/\/ipowerresale.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 384</script>
vendor: 1 bytes, line 384
384
385<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://ipowerresale.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 386</script>
vendor: 1 bytes, line 386
386
387<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 388 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); 389</script>
vendor: 1 bytes, line 389
389
390<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})}})); 391</script>
391 392<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://ipowerresale.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 393<style id="shopify-accelerated-checkout-cart"> 394 #shopify-buyer-consent { 395 margin-top: 1em; 396 display: inline-block; 397 width: 100%; 398} 399 400#shopify-buyer-consent.hidden { 401 display: none; 402} 403 404#shopify-subscription-policy-button { 405 background: none; 406 border: none; 407 padding: 0; 408 text-decoration: underline; 409 font-size: inherit; 410 cursor: pointer; 411} 412 413#shopify-subscription-policy-button::before { 414 box-shadow: none; 415} 416 417 </style> 418
419<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
419<script id="shop-promise-product" type="application/json"> 420 { 421 "productId": "8832364773545", 422 "variantId": "46682881720489" 423 } 424</script>
vendor: 1 bytes, line 424
424
425<script id="shop-promise-features" type="application/json"> 426 { 427 "supportedPromiseBrands": ["shop_promise"], 428 "f_b9ba94d16a7d18ccd91d68be01e37df6": false, 429 "f_85e460659f2e1fdd04f763b1587427a4": false 430 } 431</script>
vendor: 1 bytes, line 431
431
432<script fetchpriority="high" defer="defer" src="https://ipowerresale.com/cdn/shopifycloud/shop-promise-pdp/prod/shop_promise_pdp.js?v=1" data-source-attribution="shopify.shop-promise-pdp" crossorigin="anonymous"></script>
432 433 434 435 <style data-shopify>:root 436 { 437 /* Root Variables */ 438 /* ========================= */ 439 --root-color-primary: #171717; 440 --color-primary: #171717; 441 --root-color-secondary: #ffffff; 442 --color-secondary: #ffffff; 443 --color-sale-tag: #d74a5d; 444 --color-sale-tag-text: #ffffff; 445 --layout-section-padding-block: 3rem; 446 --layout-section-padding-inline--md: 40px; 447 --layout-section-max-inline-size: 1420px; 448 449 450 /* Text */ 451 /* ========================= */ 452 453 /* Body Font Styles */ 454 --element-text-font-family--body: Inter; 455 --element-text-font-family-fallback--body: sans-serif; 456 --element-text-font-weight--body: 400; 457 --element-text-letter-spacing--body: 0.05em; 458 --element-text-text-transform--body: none; 459 460 /* Body Font Sizes */ 461 --element-text-font-size--body: initial; 462 --element-text-font-size--body-xs: 12px; 463 --element-text-font-size--body-sm: 14px; 464 --element-text-font-size--body-md: 16px; 465 --element-text-font-size--body-lg: 18px; 466 467 /* Body Line Heights */ 468 --element-text-line-height--body: 1.4; 469 470 /* Heading Font Styles */ 471 --element-text-font-family--heading: Inter; 472 --element-text-font-family-fallback--heading: sans-serif; 473 --element-text-font-weight--heading: 400; 474 --element-text-letter-spacing--heading: 0.1em; 475 476 477 --element-text-text-transform--heading: uppercase; 478 479 480 481 /* Heading Font Sizes */ 482 --element-text-font-size--heading-2xl: 48px; 483 --element-text-font-size--heading-xl: 32px; 484 --element-text-font-size--heading-lg: 26px; 485 --element-text-font-size--heading-md: 24px; 486 --element-text-font-size--heading-sm: 18px; 487 --element-text-font-size--heading-xs: 16px; 488 489 /* Heading Line Heights */ 490 --element-text-line-height--heading: 1.1; 491 492 /* Buttons */ 493 /* ========================= */ 494 495 --element-button-radius: 3px; 496 497 498 --element-button-padding-block: 12px; 499 --element-button-text-transform: uppercase; 500 --element-button-font-weight: 800; 501 --element-button-font-size: max(calc(var(--typeBaseSize) - 4px), 13px); 502 --element-button-letter-spacing: 0.3em; 503 504 /* Base Color Variables */ 505 --element-button-color-primary: #5e6350; 506 --element-button-color-secondary: #ffffff; 507 --element-button-shade-border: 100%; 508 509 /* Hover State Variables */ 510 --element-button-shade-background--hover: 0; 511 --element-button-shade-border--hover: 100%; 512 513 /* Focus State Variables */ 514 --element-button-color-focus: var(--color-focus); 515 516 /* Inputs */ 517 /* ========================= */ 518 519 --element-icon-radius: 3px; 520 521 522 --element-input-font-size: var(--element-text-font-size--body-sm); 523 --element-input-box-shadow-shade: 100%; 524 525 /* Hover State Variables */ 526 --element-input-background-shade--hover: 0; 527 --element-input-box-shadow-spread-radius--hover: 1px; 528 } 529 530 @media only screen and (max-width: 768px) { 531 :root { 532 --element-button-font-size: max(calc(var(--typeBaseSize) - 5px), 11px); 533 } 534 } 535 536 .element-radio { 537 &:has(input[type='radio']:checked) { 538 --element-button-color: var(--element-button-color-secondary); 539 } 540 } 541 542 /* ATC Button Overrides */ 543 /* ========================= */ 544 545 .element-button[type="submit"], 546 .element-button[type="submit"] .element-text, 547 .element-button--shopify-payment-wrapper button { 548 --element-button-padding-block: 13px; 549 --element-button-padding-inline: 20px; 550 --element-button-line-height: 1.42; 551 --_font-size--body-md: var(--element-button-font-size); 552 553 line-height: 1.42 !important; 554 } 555 556 /* When dynamic checkout is enabled */ 557 product-form:has(.element-button--shopify-payment-wrapper) { 558 --element-button-color: #171717; 559 560 .element-button[type="submit"], 561 .element-button--shopify-payment-wrapper button { 562 min-height: 50px !important; 563 } 564 565 .shopify-payment-button { 566 margin: 0; 567 } 568 } 569 570 /* Hover animation for non-angled buttons */ 571 body:not([data-button_style='angled']) .element-button[type="submit"] { 572 position: relative; 573 overflow: hidden; 574 575 &:after { 576 content: ''; 577 position: absolute; 578 top: 0; 579 left: 150%; 580 width: 200%; 581 height: 100%; 582 transform: skewX(-20deg); 583 background-image: linear-gradient(to right,transparent, rgba(255,255,255,.25),transparent); 584 } 585 586 &:hover:after { 587 animation: shine 0.75s cubic-bezier(0.01, 0.56, 1, 1); 588 } 589 } 590 591 /* ANGLED STYLE - ATC Button Overrides */ 592 /* ========================= */[data-button_style='angled'] { 593 --element-button-shade-background--active: var(--element-button-shade-background); 594 --element-button-shade-border--active: var(--element-button-shade-border); 595 596 .element-button[type="submit"] { 597 --_box-shadow: none; 598 599 position: relative; 600 max-width: 94%; 601 border-top: 1px solid#5e6350; 602 border-bottom: 1px solid#5e6350; 603 604 &:before, 605 &:after { 606 content: ''; 607 position: absolute; 608 display: block; 609 top: -1px; 610 bottom: -1px;
611 width: 20px; 612 transform: skewX(-12deg); 613 background-color: #5e6350; 614 } 615 616 &:before { 617 left: -6px; 618 } 619 620 &:after { 621 right: -6px; 622 } 623 } 624 625 /* When dynamic checkout is enabled */ 626 product-form:has(.element-button--shopify-payment-wrapper) { 627 .element-button[type="submit"]:before, 628 .element-button[type="submit"]:after { 629 background-color: color-mix(in srgb,var(--_color-text) var(--_shade-background),var(--_color-background)); 630 border-top: 1px solid#5e6350; 631 border-bottom: 1px solid#5e6350; 632 } 633 634 .element-button[type="submit"]:before { 635 border-left: 1px solid#5e6350; 636 } 637 638 .element-button[type="submit"]:after { 639 border-right: 1px solid#5e6350; 640 } 641 } 642 643 .element-button--shopify-payment-wrapper { 644 --_color-background: #5e6350; 645 646 button:hover, 647 button:before, 648 button:after { 649 background-color: color-mix(in srgb,var(--_color-text) var(--_shade-background),var(--_color-background)) !important; 650 } 651 652 button:not(button:focus-visible) { 653 box-shadow: none !important; 654 } 655 } 656 } 657 </style> 658 659
659<script src="//ipowerresale.com/cdn/shop/t/130/assets/vendor-scripts-v11.js" defer="defer"></script>
659 660 661 662 663
663<script src="//ipowerresale.com/cdn/shop/t/130/assets/theme.js?v=22325264162658116151790278047" defer="defer"></script>
663 664 665 666 <link rel="stylesheet" href="//ipowerresale.com/cdn/shop/t/130/assets/swiper-bundle.min.css?v=180860052655026696261790278033"> 667 <meta name="google-site-verification" content="mT0-PDURl4kxpuKSF0i2zq36K1IDnkJ_Boeg_zzF1iM" /> 668 <!-- Klaviyo integration script from Consentmo GDPR app -->
669<script id="consentmo-klaviyo-integration-script"> 670 function checkConsentForKlaviyo(isMarketingEnabled) { 671 if (isMarketingEnabled) { 672 console.log('exec klaviyo'); 673 document.cookie = "__kla_off=;expires=Thu, 01 Jan 1970 00:00:00 GMT"; 674 } else { 675 console.log('blocked klaviyo'); 676 document.cookie = "__kla_off=true"; 677 } 678 } 679 680 document.addEventListener('consentmoSignal_onLoad', function(eventData) { 681 const csmLoadSignal = eventData.detail || {isActive:false}; 682 683 if (!csmLoadSignal.isActive) { 684 checkConsentForKlaviyo(true); 685 } else { 686 document.addEventListener('consentmoSignal', function(event) { 687 const csmPreferences = event.detail.preferences; 688 checkConsentForKlaviyo(csmPreferences.marketing); 689 }); 690 } 691 }); 692</script>
692 693 694 695<!-- BEGIN app block: shopify://apps/consentmo-gdpr/blocks/ada_compliance/4fbe573f-a377-4fea-9801-3ee0858cae41 --> 696<!-- END app block --><!-- BEGIN app block: shopify://apps/consentmo-gdpr/blocks/gdpr_cookie_consent/4fbe573f-a377-4fea-9801-3ee0858cae41 --> 697<link rel="preconnect" href="https://app.consentmo.com" crossorigin data-csm-preconnect="app"> 698<link rel="dns-prefetch" href="https://workers.consentmo.com" data-csm-preconnect="workers"> 699<link rel="dns-prefetch" href="https://storage.consentmo.com" data-csm-preconnect="storage"> 700<link rel="preconnect" href="https://cdn.consentmo.com" crossorigin data-csm-preconnect="cdn"><link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="banner"> 701 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-cookie-dialog.consentmo.js" crossorigin data-csm-layout-prefetch="dialog"> 702 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-cookie-box.consentmo.js" crossorigin data-csm-layout-prefetch="box"> 703 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-cookie-smart-banner.consentmo.js" crossorigin data-csm-layout-prefetch="smart"> 704 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-mobile-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="mobile">
704<script> 705(function () { 706 try { 707 document.documentElement.classList.add('csm-cookie-embed'); 708 } catch (e) {} 709})(); 710</script>
710<script data-consentmo-data-src-bootstrap> 711(function () { 712 'use strict'; 713 if (window.__consentmoDataSrcBootstrapInit) return; 714 window.__consentmoDataSrcBootstrapInit = true; 715 716 var DATA_SRC_SELECTOR = [ 717 'script[data-src*="consentmo_cookie_consent"]', 718 'script[data-src*="gdpr_cookie_consent.min"]', 719 'script[data-src*="gdrp_cookie_consent_unlimited"]' 720 ].join(','); 721 722 function activateConsentmoDataSrcScripts() { 723 if (!window.Shopify || !window.Shopify.shop) return; 724 document.querySelectorAll(DATA_SRC_SELECTOR).forEach(function (scriptEl) { 725 // getAttribute: src="" must not count as "already has src" (.src === page URL). 726 if (scriptEl.getAttribute('src')) return; 727 var url = scriptEl.getAttribute('data-src'); 728 if (!url) return; 729 if (scriptEl.getAttribute('type') === 'text/plain') { 730 scriptEl.removeAttribute('type'); 731 } 732 scriptEl.src = url; 733 }); 734 } 735 function scheduleActivation() { 736 activateConsentmoDataSrcScripts(); 737 // Retry on next task so other DCL handlers (lazy-loaders) can finish setting Shopify.shop / data-src first. 738 setTimeout(activateConsentmoDataSrcScripts, 0); 739 } 740 if (document.readyState === 'loading') { 741 document.addEventListener('DOMContentLoaded', scheduleActivation, { once: true }); 742 } else { 743 scheduleActivation(); 744 } 745})(); 746</script>
746 747 748 749<!-- END app block --><!-- BEGIN app block: shopify://apps/elevar-conversion-tracking/blocks/dataLayerEmbed/bc30ab68-b15c-4311-811f-8ef485877ad6 --> 750 751 752
753<script type="module" dynamic> 754 const configUrl = "/a/elevar/static/configs/edcaa1c365642731a75cdb639c73dfcfb6dd0e71/config.js"; 755 const config = (await import(configUrl)).default; 756 const scriptUrl = config.script_src_app_theme_embed; 757 758 if (scriptUrl) { 759 const { handler } = await import(scriptUrl); 760 761 await handler( 762 config, 763 { 764 cartData: { 765 marketId: "21378531497", 766 localeCountryCode:"US", 767 attributes:{}, 768 cartTotal: "0.0", 769 currencyCode:"USD", 770 items: [] 771} 772, 773 user: { 774 cartTotal: "0.0", 775 currencyCode:"USD", 776 customer: {}, 777} 778, 779 isOnCartPage:false, 780 collectionView:null, 781 searchResultsView:null, 782 productView:{ 783 attributes:{}, 784 currencyCode:"USD",defaultVariant: {id:"iPad Pro Parent 4",name:"iPad Pro 11-inch M5", 785 brand:"ipowerresale", 786 category:"iPad Pro", 787 variant:"Default Title", 788 price: "979.0", 789 productId: "8832364773545", 790 variantId: "46682881720489", 791 compareAtPrice: "0.0",image:"\/\/ipowerresale.com\/cdn\/shop\/files\/media_cafccf73-53e7-4608-a7f4-863a08925a0c.png?v=1766104668",url:"\/products\/apple-ipad-pro-11-inch-m5?variant=46682881720489"},items: [{id:"iPad Pro Parent 4",name:"iPad Pro 11-inch M5", 792 brand:"ipowerresale", 793 category:"iPad Pro", 794 variant:"Default Title", 795 price: "979.0", 796 productId: "8832364773545", 797 variantId: "46682881720489", 798 compareAtPrice: "0.0",image:"\/\/ipowerresale.com\/cdn\/shop\/files\/media_cafccf73-53e7-4608-a7f4-863a08925a0c.png?v=1766104668",url:"\/products\/apple-ipad-pro-11-inch-m5?variant=46682881720489"},] 799 }, 800 } 801 ); 802 } 803</script>
803 804 805 806<!-- END app block --><!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 --> 807 808 809 810 811 812 813 814 815 816 817 818 819
819<script async src="https://static.klaviyo.com/onsite/js/SEVKDs/klaviyo.js?company_id=SEVKDs"></script>
819 820
820<script>!function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}();</script>
820 821 822 823
823<script id="viewed_product"> 824 if (item == null) { 825 var _learnq = _learnq || []; 826 827 var MetafieldReviews = null 828 var MetafieldYotpoRating = null 829 var MetafieldYotpoCount = null 830 var MetafieldLooxRating = null 831 var MetafieldLooxCount = null 832 var okendoProduct = null 833 var okendoProductReviewCount = null 834 var okendoProductReviewAverageValue = null 835 try { 836 // The following fields are used for Customer Hub recently viewed in order to add reviews. 837 // This information is not part of __kla_viewed. Instead, it is part of __kla_viewed_reviewed_items 838 MetafieldReviews = {"rating":{"scale_min":"1.0","scale_max":"5.0","value":"4.89"},"rating_count":93}; 839 MetafieldYotpoRating = null 840 MetafieldYotpoCount = null 841 MetafieldLooxRating = null 842 MetafieldLooxCount = null 843 844 okendoProduct = null 845 // If the okendo metafield is not legacy, it will error, which then requires the new json formatted data 846 if (okendoProduct && 'error' in okendoProduct) { 847 okendoProduct = null 848 } 849 okendoProductReviewCount = okendoProduct ? okendoProduct.reviewCount : null 850 okendoProductReviewAverageValue = okendoProduct ? okendoProduct.reviewAverageValue : null 851 } catch (error) { 852 console.error('Error in Klaviyo onsite reviews tracking:', error); 853 } 854 855 var item = { 856 Name: "iPad Pro 11-inch M5", 857 ProductID: 8832364773545, 858 Categories: ["Discount Product (Excludes 5 Series \u0026 Accessories)","iPad Pro","Klaviyo Parent Products","Top 10 Homepage Products (Parent Product)"], 859 ImageURL: "https://ipowerresale.com/cdn/shop/files/media_cafccf73-53e7-4608-a7f4-863a08925a0c_grande.png?v=1766104668", 860 URL: "https://ipowerresale.com/products/apple-ipad-pro-11-inch-m5", 861 Brand: "ipowerresale", 862 Price: "$979.00", 863 Value: "979.00", 864 CompareAtPrice: "$0.00" 865 }; 866 _learnq.push(['track', 'Viewed Product', item]); 867 _learnq.push(['trackViewedItem', { 868 Title: item.Name, 869 ItemId: item.ProductID, 870 Categories: item.Categories, 871 ImageUrl: item.ImageURL, 872 Url: item.URL, 873 Metadata: { 874 Brand: item.Brand, 875 Price: item.Price, 876 Value: item.Value, 877 CompareAtPrice: item.CompareAtPrice 878 }, 879 metafields:{ 880 reviews: MetafieldReviews, 881 yotpo:{ 882 rating: MetafieldYotpoRating, 883 count: MetafieldYotpoCount, 884 }, 885 loox:{ 886 rating: MetafieldLooxRating, 887 count: MetafieldLooxCount, 888 }, 889 okendo: { 890 rating: okendoProductReviewAverageValue, 891 count: okendoProductReviewCount, 892 } 893 } 894 }]); 895 } 896 </script>
896 897 898 899 900 901 902
902<script> 903 window.klaviyoReviewsProductDesignMode = false 904 </script>
904 905 906 907 908 <!-- BEGIN app snippet: customer-hub-data -->
908<script> 909 if (!window.customerHub) { 910 window.customerHub = {}; 911 } 912 window.customerHub.storefrontRoutes = { 913 login: "https://ipowerresale.com/customer_authentication/redirect?locale=en®ion_country=US?return_url=%2F%23k-hub", 914 register: "https://account.ipowerresale.com?locale=en®ion_country=US&buyer_flags=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJpcG93ZXJyZXNhbGUubXlzaG9waWZ5LmNvbSIsImZsYWdzIjpbIntcImZsYWdcIjp7XCJsb3dpZFwiOlwiMTM4MTg0Nzc1ODI5NzE1ODEyNDlcIixcImhpZ2hpZFwiOlwiNTMzNDU3MzA1ODEwMzkyMjAzMFwifX0iXSwiZXhwIjoxNzkxNzI1MTE5LCJuYmYiOjE3OTExMjAzMTl9.9Os06njSKIJukurFvKdmNXqmq32i7N_qKbv065GenZk?return_url=%2F%23k-hub", 915 logout: "/account/logout", 916 profile: "/account", 917 addresses: "/account/addresses", 918 }; 919 920 window.customerHub.userId = null; 921 922 window.customerHub.storeDomain = "ipowerresale.myshopify.com"; 923 924 925 window.customerHub.activeProduct = { 926 name: "iPad Pro 11-inch M5", 927 category: null, 928 imageUrl: "https://ipowerresale.com/cdn/shop/files/media_cafccf73-53e7-4608-a7f4-863a08925a0c_grande.png?v=1766104668", 929 id: "8832364773545", 930 link: "https://ipowerresale.com/products/apple-ipad-pro-11-inch-m5", 931 options: [ 932 933 { 934 name: "Title", 935 values: [ 936 937 938 939 { 940 name: "Default Title", 941 colorHex: null, 942 swatchImageUrl: null 943 } 944 945 ] 946 } 947 948 ], 949 variants: [ 950 951 { 952 id: "46682881720489", 953 selectedOptions: [ 954 955 956 { 957 name: "Title", 958 value: "Default Title" 959 } 960 961 ], 962 963 imageUrl: null, 964 965 price: "97900", 966 currency: "USD", 967 availableForSale: true, 968 title: "Default Title", 969 }, 970 971 ], 972 };
973 window.customerHub.activeProduct.variants.forEach((variant) => { 974 975 variant.price = `${variant.price.slice(0, -2)}.${variant.price.slice(-2)}`; 976 }); 977 978 979 980 window.customerHub.storeLocale = { 981 currentLanguage: 'en', 982 currentCountry: 'US', 983 availableLanguages: [ 984 985 { 986 iso_code: 'en', 987 endonym_name: 'English' 988 }, 989 990 { 991 iso_code: 'de', 992 endonym_name: 'Deutsch' 993 } 994 995 ], 996 availableCountries: [ 997 998 { 999 iso_code: 'AX', 1000 name: 'à land Islands', 1001 currency_code: 'EUR' 1002 }, 1003 1004 { 1005 iso_code: 'AL', 1006 name: 'Albania', 1007 currency_code: 'ALL' 1008 }, 1009 1010 { 1011 iso_code: 'AD', 1012 name: 'Andorra', 1013 currency_code: 'EUR' 1014 }, 1015 1016 { 1017 iso_code: 'AU', 1018 name: 'Australia', 1019 currency_code: 'AUD' 1020 }, 1021 1022 { 1023 iso_code: 'AT', 1024 name: 'Austria', 1025 currency_code: 'EUR' 1026 }, 1027 1028 { 1029 iso_code: 'BS', 1030 name: 'Bahamas', 1031 currency_code: 'BSD' 1032 }, 1033 1034 { 1035 iso_code: 'BE', 1036 name: 'Belgium', 1037 currency_code: 'EUR' 1038 }, 1039 1040 { 1041 iso_code: 'BA', 1042 name: 'Bosnia & Herzegovina', 1043 currency_code: 'BAM' 1044 }, 1045 1046 { 1047 iso_code: 'BG', 1048 name: 'Bulgaria', 1049 currency_code: 'EUR' 1050 }, 1051 1052 { 1053 iso_code: 'CA', 1054 name: 'Canada', 1055 currency_code: 'CAD' 1056 }, 1057 1058 { 1059 iso_code: 'BQ', 1060 name: 'Caribbean Netherlands', 1061 currency_code: 'USD' 1062 }, 1063 1064 { 1065 iso_code: 'HR', 1066 name: 'Croatia', 1067 currency_code: 'EUR' 1068 }, 1069 1070 { 1071 iso_code: 'CZ', 1072 name: 'Czechia', 1073 currency_code: 'CZK' 1074 }, 1075 1076 { 1077 iso_code: 'DK', 1078 name: 'Denmark', 1079 currency_code: 'DKK' 1080 }, 1081 1082 { 1083 iso_code: 'EG', 1084 name: 'Egypt', 1085 currency_code: 'EGP' 1086 }, 1087 1088 { 1089 iso_code: 'EE', 1090 name: 'Estonia', 1091 currency_code: 'EUR' 1092 }, 1093 1094 { 1095 iso_code: 'FO', 1096 name: 'Faroe Islands', 1097 currency_code: 'DKK' 1098 }, 1099 1100 { 1101 iso_code: 'FI', 1102 name: 'Finland', 1103 currency_code: 'EUR' 1104 }, 1105 1106 { 1107 iso_code: 'FR', 1108 name: 'France', 1109 currency_code: 'EUR' 1110 }, 1111 1112 { 1113 iso_code: 'DE', 1114 name: 'Germany', 1115 currency_code: 'EUR' 1116 }, 1117 1118 { 1119 iso_code: 'GI', 1120 name: 'Gibraltar', 1121 currency_code: 'GBP' 1122 }, 1123 1124 { 1125 iso_code: 'GR', 1126 name: 'Greece', 1127 currency_code: 'EUR' 1128 }, 1129 1130 { 1131 iso_code: 'GL', 1132 name: 'Greenland', 1133 currency_code: 'DKK' 1134 }, 1135 1136 { 1137 iso_code: 'GG', 1138 name: 'Guernsey', 1139 currency_code: 'GBP' 1140 }, 1141 1142 { 1143 iso_code: 'HU', 1144 name: 'Hungary', 1145 currency_code: 'HUF' 1146 }, 1147 1148 { 1149 iso_code: 'IS', 1150 name: 'Iceland', 1151 currency_code: 'ISK' 1152 }, 1153 1154 { 1155 iso_code: 'IE', 1156 name: 'Ireland', 1157 currency_code: 'EUR' 1158 }, 1159 1160 { 1161 iso_code: 'IM', 1162 name: 'Isle of Man', 1163 currency_code: 'GBP' 1164 }, 1165 1166 { 1167 iso_code: 'IT', 1168 name: 'Italy', 1169 currency_code: 'EUR' 1170 }, 1171 1172 { 1173 iso_code: 'JP', 1174 name: 'Japan', 1175 currency_code: 'JPY' 1176 }, 1177 1178 { 1179 iso_code: 'JE', 1180 name: 'Jersey', 1181 currency_code: 'USD' 1182 }, 1183 1184 { 1185 iso_code: 'XK', 1186 name: 'Kosovo', 1187 currency_code: 'EUR' 1188 }, 1189 1190 { 1191 iso_code: 'KW', 1192 name: 'Kuwait', 1193 currency_code: 'USD' 1194 }, 1195 1196 { 1197 iso_code: 'LV', 1198 name: 'Latvia', 1199 currency_code: 'EUR' 1200 }, 1201 1202 { 1203 iso_code: 'LI', 1204 name: 'Liechtenstein', 1205 currency_code: 'CHF' 1206 }, 1207 1208 { 1209 iso_code: 'LT', 1210 name: 'Lithuania', 1211 currency_code: 'EUR' 1212 }, 1213 1214 { 1215 iso_code: 'LU', 1216 name: 'Luxembourg', 1217 currency_code: 'EUR' 1218 }, 1219 1220 { 1221 iso_code: 'MW', 1222 name: 'Malawi', 1223 currency_code: 'MWK' 1224 }, 1225 1226 { 1227 iso_code: 'MV', 1228 name: 'Maldives', 1229 currency_code: 'MVR' 1230 }, 1231 1232 { 1233 iso_code: 'MT', 1234 name: 'Malta', 1235 currency_code: 'EUR' 1236 }, 1237 1238 { 1239 iso_code: 'MQ', 1240 name: 'Martinique', 1241 currency_code: 'EUR' 1242 }, 1243 1244 { 1245 iso_code: 'MD', 1246 name: 'Moldova', 1247 currency_code: 'MDL' 1248 }, 1249 1250 { 1251 iso_code: 'MC', 1252 name: 'Monaco', 1253 currency_code: 'EUR' 1254 }, 1255 1256 { 1257 iso_code: 'ME', 1258 name: 'Montenegro', 1259 currency_code: 'EUR' 1260 }, 1261 1262 { 1263 iso_code: 'NL', 1264 name: 'Netherlands', 1265 currency_code: 'EUR' 1266 }, 1267 1268 { 1269 iso_code: 'NZ', 1270 name: 'New Zealand', 1271 currency_code: 'NZD' 1272 }, 1273 1274 { 1275 iso_code: 'MK', 1276 name: 'North Macedonia', 1277 currency_code: 'MKD' 1278 }, 1279 1280 { 1281 iso_code: 'NO', 1282 name: 'Norway', 1283 currency_code: 'USD' 1284 }, 1285 1286 { 1287 iso_code: 'PL', 1288 name: 'Poland', 1289 currency_code: 'PLN' 1290 }, 1291 1292 { 1293 iso_code: 'PT', 1294 name: 'Portugal', 1295 currency_code: 'EUR' 1296 }, 1297 1298 { 1299 iso_code: 'RO', 1300 name: 'Romania', 1301 currency_code: 'RON' 1302 }, 1303 1304 { 1305 iso_code: 'SM', 1306 name: 'San Marino', 1307 currency_code: 'EUR' 1308 }, 1309 1310 { 1311 iso_code: 'RS', 1312 name: 'Serbia', 1313 currency_code: 'RSD' 1314 }, 1315 1316 { 1317 iso_code: 'SG', 1318 name: 'Singapore', 1319 currency_code: 'SGD' 1320 }, 1321 1322 { 1323 iso_code: 'SX', 1324 name: 'Sint Maarten', 1325 currency_code: 'ANG' 1326 }, 1327 1328 { 1329 iso_code: 'SK', 1330 name: 'Slovakia', 1331 currency_code: 'EUR' 1332 }, 1333 1334 { 1335 iso_code: 'SI', 1336 name: 'Slovenia', 1337 currency_code: 'EUR' 1338 }, 1339 1340 { 1341 iso_code: 'ES', 1342 name: 'Spain', 1343 currency_code: 'EUR' 1344 }, 1345 1346 { 1347 iso_code: 'SJ', 1348 name: 'Svalbard & Jan Mayen', 1349 currency_code: 'USD' 1350 }, 1351 1352 { 1353 iso_code: 'SE', 1354 name: 'Sweden', 1355 currency_code: 'SEK' 1356 }, 1357 1358 { 1359 iso_code: 'CH', 1360 name: 'Switzerland', 1361 currency_code: 'CHF' 1362 }, 1363 1364 { 1365 iso_code: 'TW', 1366 name: 'Taiwan', 1367 currency_code: 'TWD' 1368 }, 1369 1370 { 1371 iso_code: 'TR', 1372 name: 'Türkiye', 1373 currency_code: 'USD' 1374 }, 1375 1376 { 1377 iso_code: 'UM', 1378 name: 'U.S. Outlying Islands', 1379 currency_code: 'USD' 1380 }, 1381 1382 { 1383 iso_code: 'UA', 1384 name: 'Ukraine', 1385 currency_code: 'UAH' 1386 }, 1387 1388 { 1389 iso_code: 'AE', 1390 name: 'United Arab Emirates', 1391 currency_code: 'AED' 1392 }, 1393 1394 { 1395 iso_code: 'GB', 1396 name: 'United Kingdom', 1397 currency_code: 'GBP' 1398 }, 1399 1400 { 1401 iso_code: 'US', 1402 name: 'United States', 1403 currency_code: 'USD' 1404 }, 1405 1406 { 1407 iso_code: 'VA', 1408 name: 'Vatican City', 1409 currency_code: 'EUR' 1410 } 1411 1412 ] 1413 }; 1414 1415</script>
1415 1416<!-- END app snippet --> 1417 1418 1419 1420 1421 1422 1423 1424<!-- END app block --><!-- BEGIN app block: shopify://apps/indexgpt/blocks/schema_markup/019ff2af-aa2f-763f-82f0-dea6ed984c56 --><!-- indexgpt-schema --><!-- BEGIN app snippet: breadcrumb-jsonld -->
1424<script type="application/ld+json"> 1425{ 1426 "@context": "https://schema.org", 1427 "@type": "BreadcrumbList", 1428 "itemListElement": [{ 1429 "@type": "ListItem", 1430 "position": 1, 1431 "name": "Home", 1432 "item": "https:\/\/ipowerresale.com" 1433 }, 1434{ 1435 "@type": "ListItem", 1436 "position": 2, 1437 "name": "Discount Product (Excludes 5 Series \u0026 Accessories)", 1438 "item": "https:\/\/ipowerresale.com\/collections\/discount-product-excludes-5-series" 1439 }, 1440{ 1441 "@type": "ListItem", 1442 "position": 3, 1443 "name": "iPad Pro 11-inch M5", 1444 "item": "https:\/\/ipowerresale.com\/products\/apple-ipad-pro-11-inch-m5" 1445 } 1446] 1447} 1448</script>
1448<!-- END app snippet --><!-- BEGIN app snippet: organization-jsonld --><!-- END app snippet --><!-- BEGIN app snippet: product-merchant-jsonld -->
1448<script type="application/ld+json"> 1449{ 1450 "@context": "https://schema.org", 1451 "@graph": [ 1452 {"@type": "OfferShippingDetails", "@id": "#indexgpt-shipping-1", "shippingRate": {"@type": "MonetaryAmount", "value": 0, "currency": "USD"}, "shippingDestination": [{"@type": "DefinedRegion", "addressCountry": "US"}], "deliveryTime": {"@type": "ShippingDeliveryTime", "handlingTime": {"@type": "QuantitativeValue", "minValue": 1, "maxValue": 3, "unitCode": "DAY"}, "transitTime": {"@type": "QuantitativeValue", "minValue": 1, "maxValue": 5, "unitCode": "DAY"}}},{"@type": "OfferShippingDetails", "@id": "#indexgpt-shipping-2", "shippingRate": {"@type": "MonetaryAmount", "value": 0, "currency": "USD"}, "shippingDestination": [{"@type": "DefinedRegion", "addressCountry": "US"}], "deliveryTime": {"@type": "ShippingDeliveryTime", "handlingTime": {"@type": "QuantitativeValue", "minValue": 1, "maxValue": 3, "unitCode": "DAY"}, "transitTime": {"@type": "QuantitativeValue", "minValue": 1, "maxValue": 5, "unitCode": "DAY"}}},{"@type": "OfferShippingDetails", "@id": "#indexgpt-shipping-3", "shippingRate": {"@type": "MonetaryAmount", "value": 0, "currency": "USD"}, "shippingDestination": [{"@type": "DefinedRegion", "addressCountry": "US"}], "deliveryTime": {"@type": "ShippingDeliveryTime", "handlingTime": {"@type": "QuantitativeValue", "minValue": 1, "maxValue": 3, "unitCode": "DAY"}, "transitTime": {"@type": "QuantitativeValue", "minValue": 1, "maxValue": 5, "unitCode": "DAY"}}} 1453, { 1454 "@type": "MerchantReturnPolicy", 1455 "@id": "#indexgpt-returns", 1456 "applicableCountry": ["US"], 1457 "returnPolicyCategory": "https:\/\/schema.org\/MerchantReturnFiniteReturnWindow" 1458, "returnFees": "https:\/\/schema.org\/FreeReturn", "merchantReturnDays": 14 1459, "returnMethod": ["https:\/\/schema.org\/ReturnByMail"]}, {"@type": "Offer", "@id": "\/products\/apple-ipad-pro-11-inch-m5?variant=46682881720489#offer", "itemCondition": "https://schema.org/NewCondition", "shippingDetails": [{"@id": "#indexgpt-shipping-1"},{"@id": "#indexgpt-shipping-2"},{"@id": "#indexgpt-shipping-3"}], "hasMerchantReturnPolicy": {"@id": "#indexgpt-returns"}} 1460] 1461} 1462</script>
1462<!-- END app snippet --><!-- BEGIN app snippet: article-jsonld --><!-- END app snippet --> 1463<!-- END app block -->
1463<script src="https://cdn.shopify.com/extensions/019d3c99-c401-7eb3-a8a0-ca11c99f6954/afterpay-on-site-messaging-2/assets/messaging-lib-loader.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1463
1463
1464<script src="https://cdn.shopify.com/extensions/01a0f14c-0eaa-7dcb-9809-3f49e8bbd346/sea-survey-163/assets/avada-survey.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1464
1464
1465<script src="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/consentmo_cookie_consent.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1465
1465
1466<script src="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/consentmo_ada.js" type="text/javascript" defer="defer"></script>
1466 1467<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
1468<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: 62136156329,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 1468
1468
1469<script> 1470 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 1471</script>
vendor: 1 bytes, line 1471
1471
1472<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}
1472).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: 62136156329,storefrontBaseUrl: "https://ipowerresale.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://ipowerresale.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"1899298985","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"6e6b2e32fe6866115b7e49e2ae3c75b2","type":"APP","apiClientId":5940125,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
1472,"dataSharingState":"unrestricted"},{"id":"1701806249","configuration":"{\"accountID\":\"shopjar\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"3695d58a4bdf3f78e3aa47292c161a2e","type":"APP","apiClientId":884572161,"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":"unrestricted"},{"id":"1671135401","configuration":"{\"eventPixelIdAddToCart\":\"tw-r57i4-r84xl\",\"eventPixelIdSiteVisit\":\"tw-r57i4-r84xm\",\"eventPixelIdPurchase\":\"tw-r57i4-r84xn\",\"eventPixelIdAddedPaymentInfo\":\"tw-r57i4-r84xk\",\"eventPixelIdCheckoutInitiated\":\"tw-r57i4-r84xj\",\"eventPixelIdContentView\":\"tw-r57i4-r84xo\",\"eventPixelIdSearch\":\"tw-r57i4-r84xp\",\"basePixelId\":\"r57i4\",\"adsAccountId\":\"dzwtl1\",\"isDisconnected\":\"0\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"3df823913fec4164b84eb9879cd9a3dd","type":"APP","apiClientId":6455335,"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":"unrestricted"},{"id":"1604649129","configuration":"{\"config_url\": \"https:\/\/shopify-gtm-suite.getelevar.com\/configs\/edcaa1c365642731a75cdb639c73dfcfb6dd0e71\/config.js\"}","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"7ae63d00911d5ee26809bf1e3232d852","type":"APP","apiClientId":2509311,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1354105001","configuration":"{\"accountID\":\"SEVKDs\",\"webPixelConfig\":\"eyJlbmFibGVBZGRlZFRvQ2FydEV2ZW50cyI6IHRydWV9\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c63c5b72c8d77be5f2d27d14c081da38","type":"APP","apiClientId":123074,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted","enabledFlags":["9a3ed68a"]},{"id":"535134377","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"AW-11234468749\\\",\\\"GT-KDBGD22\\\"],\\\"target_country\\\":\\\"US\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":\\\"AW-11234468749\\\/S291CJW81JQaEI3Hge0p\\\"},{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":\\\"AW-11234468749\\\/plAzCJu81JQaEI3Hge0p\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"AW-11234468749\\\/t4mICJK81JQaEI3Hge0p\\\",\\\"MC-1Z3M2ZDCFM\\\"]},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"AW-11234468749\\\/Zf05CIy81JQaEI3Hge0p\\\",\\\"MC-1Z3M2ZDCFM\\\",\\\"AW-11234468749\\\/yW3jCOr6vaIZEI3Hge0p\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"AW-11234468749\\\/EmvHCI-81JQaEI3Hge0p\\\",\\\"MC-1Z3M2ZDCFM\\\"]},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":\\\"AW-11234468749\\\/Or7GCJ681JQaEI3Hge0p\\\"},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":\\\"AW-11234468749\\\/dyF7CJi81JQaEI3Hge0p\\\"}],\\\"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"]}
1472,"dataSharingState":"unrestricted","enabledFlags":["9a3ed68a"]},{"id":"47841449","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":[],"name":"Signifyd"},{"id":"153714857","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"2","type":"CUSTOM","privacyPurposes":[],"name":"Elevar - Checkout Tracking"},{"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":"iPowerResale","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"ipowerresale.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/ipowerresale.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[{"price":{"amount":979.0,"currencyCode":"USD"},"product":{"title":"iPad Pro 11-inch M5","vendor":"ipowerresale","id":"8832364773545","untranslatedTitle":"iPad Pro 11-inch M5","url":"\/products\/apple-ipad-pro-11-inch-m5","type":"iPad Pro"},"id":"46682881720489","image":{"src":"\/\/ipowerresale.com\/cdn\/shop\/files\/media_cafccf73-53e7-4608-a7f4-863a08925a0c.png?v=1766104668"},"sku":"iPad Pro Parent 4","title":"Default Title","untranslatedTitle":"Default Title"}],"products":[{"id":"8832364773545","handle":"apple-ipad-pro-11-inch-m5","isCollective":null,"title":"iPad Pro 11-inch M5","type":"iPad Pro","untranslatedTitle":"iPad Pro 11-inch M5","url":"\/products\/apple-ipad-pro-11-inch-m5","vendor":"ipowerresale","remoteShopId":null,"variants":[{"id":"46682881720489","image":{"src":"\/\/ipowerresale.com\/cdn\/shop\/files\/media_cafccf73-53e7-4608-a7f4-863a08925a0c.png?v=1766104668"},"price":{"amount":979.0,"currencyCode":"USD"},"sku":"iPad Pro Parent 4","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"7713399963817","handle":"3-year-extended-warranty","isCollective":null,"title":"3-year Extended Warranty","type":null,"untranslatedTitle":"3-year Extended Warranty","url":"\/products\/3-year-extended-warranty","vendor":"ipowerresale","remoteShopId":null,"variants":[{"id":"42954528719017","image":{"src":"\/\/ipowerresale.com\/cdn\/shop\/products\/3-year-warranty_2.png?v=1679346251"},"price":{"amount":249.0,"currencyCode":"USD"},"sku":"3 Year Warranty","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"7717349851305","handle":"apple-ipad-pro-config-parent-better","isCollective":null,"title":"iPad Pro 11-inch M4","type":"iPad Pro","untranslatedTitle":"iPad Pro 11-inch M4","url":"\/products\/apple-ipad-pro-config-parent-better","vendor":"ipowerresale","remoteShopId":null,"variants":[{"id":"42970834075817","image":{"src":"\/\/ipowerresale.com\/cdn\/shop\/files\/media_98930e0b-f83b-459b-b91e-dad5d9fff883.png?v=1766096980"},"price":{"amount":849.0,"currencyCode":"USD"},"sku":"iPad Pro Parent 2","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"7717350244521","handle":"apple-ipad-pro-config-parent-good","isCollective":null,"title":"iPad Pro 13-inch M5","type":"iPad Pro","untranslatedTitle":"iPad Pro 13-inch M5","url":"\/products\/apple-ipad-pro-config-parent-good","vendor":"ipowerresale","remoteShopId":null,"variants":[{"id":"42970835779753","image":{"src":"\/\/ipowerresale.com\/cdn\/shop\/files\/media_1304f832-553c-4257-b230-54fa70dce890.png?v=1766096981"},"price":{"amount":1099.0,"currencyCode":"USD"},"sku":"iPad Pro Parent 1","title":"Default Title","untranslatedTitle":"Default Title"}]}],"purchasingCompany":null},},"https://ipowerresale.com/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"false","themeId":"165931122857","themePublished":"true","eventMetadataId":"69801013-0c88-4e2b-b750-34b918e1f788","pageType":"product","resourceId":"8832364773545","shopId":"62136156329","storefrontBaseUrl":"https:\/\/ipowerresale.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}],[\"product_viewed\",{\"productVariant\":{\"price\":{\"amount\":979.0,\"currencyCode\":\"USD\"},\"product\":{\"title\":\"iPad Pro 11-inch M5\",\"vendor\":\"ipowerresale\",\"id\":\"8832364773545\",\"untranslatedTitle\":\"iPad Pro 11-inch M5\",\"url\":\"\/products\/apple-ipad-pro-11-inch-m5\",\"type\":\"iPad Pro\"},\"id\":\"46682881720489\",\"image\":{\"src\":\"\/\/ipowerresale.com\/cdn\/shop\/files\/media_cafccf73-53e7-4608-a7f4-863a08925a0c.png?v=1766104668\"},\"sku\":\"iPad Pro Parent 4\",\"title\":\"Default Title\",\"untranslatedTitle\":\"Default Title\"}}]]"});})();</script>
1472<script> 1473 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 1474 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 1475 window.ShopifyAnalytics.meta.currency = 'USD'; 1476 var meta = {"product":{"id":8832364773545,"gid":"gid:\/\/shopify\/Product\/8832364773545","vendor":"ipowerresale","type":"iPad Pro","handle":"apple-ipad-pro-11-inch-m5","variants":[{"id":46682881720489,"price":97900,"name":"iPad Pro 11-inch M5","public_title":null,"sku":"iPad Pro Parent 4"}],"remote":false},"page":{"pageType":"product","resourceType":"product","resourceId":8832364773545,"requestId":"49261112-e20a-403a-bf82-814d5db81e5f-1791120319"}}; 1477 for (var attr in meta) { 1478 window.ShopifyAnalytics.meta[attr] = meta[attr]; 1479 } 1480</script>
vendor: 1 bytes, line 1480
1480
1481<script class="analytics"> 1482 (function () { 1483 var customDocumentWrite = function(content) { 1484 var jquery = null; 1485 1486 if (window.jQuery) { 1487 jquery = window.jQuery; 1488 } else if (window.Checkout && window.Checkout.$) { 1489 jquery = window.Checkout.$; 1490 } 1491 1492 if (jquery) { 1493 jquery('body').append(content); 1494 } 1495 }; 1496 1497 var hasLoggedConversion = function(token) { 1498 if (token) { 1499 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 1500 } 1501 return false; 1502 } 1503 1504 var setCookieIfConversion = function(token) { 1505 if (token) { 1506 var twoMonthsFromNow = new Date(Date.now()); 1507 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 1508 1509 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 1510 } 1511 } 1512 1513 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 1514 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 1515 if (trekkie.integrations) { 1516 return; 1517 } 1518 trekkie.methods = [ 1519 'identify', 1520 'page', 1521 'ready', 1522 'track', 1523 'trackForm', 1524 'trackLink' 1525 ]; 1526 trekkie.factory = function(method) { 1527 return function() { 1528 var args = Array.prototype.slice.call(arguments); 1529 args.unshift(method); 1530 trekkie.push(args); 1531 if (method == 'track' || method == 'page') { 1532 var pageUrl; 1533 try { 1534 pageUrl = window.location.href; 1535 } catch (e) {} 1536 var pageReferrer; 1537 try { 1538 pageReferrer = document.referrer; 1539 } catch (e) {} 1540 try { 1541 if (window.__TREKKIE_SHIM_QUEUE == null) { 1542 window.__TREKKIE_SHIM_QUEUE = []; 1543 } 1544 window.__TREKKIE_SHIM_QUEUE.push({ 1545 from: 'trekkie-stub', 1546 method: method, 1547 args: args.slice(1), 1548 pageContext: { 1549 url: pageUrl, 1550 referrer: pageReferrer 1551 } 1552 }); 1553 } catch (e) { 1554 // no-op 1555 } 1556 } 1557 return trekkie; 1558 }; 1559 }; 1560 for (var i = 0; i < trekkie.methods.length; i++) { 1561 var key = trekkie.methods[i]; 1562 trekkie[key] = trekkie.factory(key); 1563 } 1564 trekkie.load = function(config) { 1565 trekkie.config = config || {}; 1566 trekkie.config.initialDocumentCookie = document.cookie; 1567 var first = document.getElementsByTagName('script')[0]; 1568var script = document.createElement('script'); 1569script.type = 'text/javascript'; 1570script.onerror = function(e) { 1571 var scriptFallback = document.createElement('script'); 1572 scriptFallback.type = 'text/javascript'; 1573 scriptFallback.onerror = function(error) { 1574 var Monorail = { 1575 produce: function produce(monorailDomain, schemaId, payload) { 1576 var currentMs = new Date().getTime(); 1577 var event = { 1578 schema_id: schemaId, 1579 payload: payload, 1580 metadata: { 1581 event_created_at_ms: currentMs, 1582 event_sent_at_ms: currentMs 1583 } 1584 }; 1585 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 1586 }, 1587 sendRequest: function sendRequest(endpointUrl, payload) { 1588 // Try the sendBeacon API 1589 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 1590 var blobData = new window.Blob([payload], { 1591 type: 'text/plain' 1592 }); 1593 1594 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 1595 return true; 1596 } // sendBeacon was not successful 1597 1598 } // XHR beacon 1599 1600 var xhr = new XMLHttpRequest(); 1601 1602 try { 1603 xhr.open('POST', endpointUrl); 1604 xhr.setRequestHeader('Content-Type', 'text/plain'); 1605 xhr.send(payload); 1606 } catch (e) { 1607 console.log(e); 1608 } 1609 1610 return false; 1611 }, 1612 isIos12: function isIos12() { 1613 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 1614 } 1615 }; 1616 Monorail.produce('monorail-edge.shopifysvc.com', 1617 'trekkie_storefront_load_errors/1.1', 1618 {shop_id: 62136156329, 1619 theme_id: 165931122857, 1620 app_name: "storefront", 1621 context_url: window.location.href, 1622 source_url: "//ipowerresale.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 1623 1624 }; 1625 scriptFallback.async = true; 1626 scriptFallback.src = '//ipowerresale.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1627 first.parentNode.insertBefore(scriptFallback, first); 1628}; 1629script.async = true; 1630script.src = '//ipowerresale.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1631first.parentNode.insertBefore(script, first); 1632 1633 }; 1634 trekkie.load( 1635 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":62136156329,"isMerchantRequest":null,"themeId":165931122857,"themeCityHash":"2231133484116938434","contentLanguage":"en","currency":"USD","eventMetadataId":"69801013-0c88-4e2b-b750-34b918e1f788"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":false,"source":"trekkie-storefront-renderer","apiClientId":580111}} 1636 ); 1637 1638 var loaded = false;
1639 trekkie.ready(function() { 1640 if (loaded) return; 1641 loaded = true; 1642 1643 window.ShopifyAnalytics.lib = window.trekkie; 1644 1645 var originalDocumentWrite = document.write; 1646 document.write = customDocumentWrite; 1647 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 1648 document.write = originalDocumentWrite; 1649 1650 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 1651 var token = match? match[1]: undefined; 1652 if (!hasLoggedConversion(token)) { 1653 setCookieIfConversion(token); 1654 window.ShopifyAnalytics.lib.track("Viewed Product",{"currency":"USD","variantId":46682881720489,"productId":8832364773545,"productGid":"gid:\/\/shopify\/Product\/8832364773545","name":"iPad Pro 11-inch M5","price":"979.00","sku":"iPad Pro Parent 4","brand":"ipowerresale","variant":null,"category":"iPad Pro","nonInteraction":true,"remote":false,"available":true},undefined,undefined,{"shopifyEmitted":true}); 1655 } 1656 }); 1657 1658 window.ShopifyAnalytics.lib.page(null,{"pageType":"product","resourceType":"product","resourceId":8832364773545,"requestId":"49261112-e20a-403a-bf82-814d5db81e5f-1791120319","shopifyEmitted":true}); 1659 1660 var eventsListenerScript = document.createElement('script'); 1661 eventsListenerScript.async = true; 1662 eventsListenerScript.src = "//ipowerresale.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 1663 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 1664})();</script>
vendor: 1 bytes, line 1664
1664
1665<script 1666 defer 1667 src="https://ipowerresale.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 1668 data-application="storefront-renderer" 1669 data-shop-id="62136156329" 1670 data-render-region="gcp-us-central1" 1671 data-page-type="product" 1672 data-theme-instance-id="165931122857" 1673 data-theme-name="Impulse" 1674 data-theme-version="8.1.0" 1675 data-monorail-region="shop_domain" 1676 data-resource-timing-sampling-rate="10" 1677 data-shs="true" 1678 data-shs-beacon="true" 1679 data-shs-export-with-fetch="true" 1680 data-shs-logs-sample-rate="1" 1681 data-shs-beacon-endpoint="https://ipowerresale.com/api/collect" 1682></script>
1682 1683<meta name="shopify-y" content="00000000-0000-0000-5000-000000000000" data-expiration="1822677919000"><meta name="shopify-s" content="00000000-0000-0000-5000-000000000000" data-expiration="1791122119000"><meta name="new-cookie-storage-activated" content="t"> 1684</head> 1685 1686<body 1687 class="template-product" 1688 data-center-text="true" 1689 data-button_style="round-slight" 1690 data-type_header_capitalize="true" 1691 data-type_headers_align_text="true" 1692 data-type_product_capitalize="false" 1693 data-swatch_style="round" 1694 > 1695 1696 <a class="in-page-link visually-hidden skip-link" href="#MainContent">Skip to content</a> 1697 1698 <div id="PageContainer" class="page-container"> 1699 <div class="transition-body"><!-- BEGIN sections: header-group --> 1700<div id="shopify-section-sections--23893840232617__custom_header_DeLQhc" class="shopify-section shopify-section-group-header-group"><style data-shopify>/* ââ Announcement Bar ââ */ 1701 .custom-announcement-bar-sections--23893840232617__custom_header_DeLQhc { 1702 text-align: center; 1703 padding: 9px 36px; 1704 } 1705 1706 .custom-announcement-bar-sections--23893840232617__custom_header_DeLQhc .announcement-swiper { 1707 overflow: hidden; 1708 width: 100%; 1709 } 1710 1711 .custom-announcement-bar-sections--23893840232617__custom_header_DeLQhc .swiper-slide { 1712 text-align: center; 1713 } 1714 1715 .custom-announcement-bar-sections--23893840232617__custom_header_DeLQhc .announcement-bar__text { 1716 color: #ffffff; 1717 margin: 0; 1718 font-size: 14px; 1719 line-height: 20px; 1720 letter-spacing: -0.02em; 1721 font-family: 'Inter-Regular'; 1722 } 1723 1724 .custom-announcement-bar-sections--23893840232617__custom_header_DeLQhc .announcement-bar__text p { 1725 margin: 0; 1726 color: #ffffff; 1727 font-size: 14px; 1728 line-height: 18px; 1729 letter-spacing: -0.02em; 1730 font-family: 'Inter-Medium'; 1731 font-weight: 500; 1732 } 1733 1734 .custom-announcement-bar-sections--23893840232617__custom_header_DeLQhc .announcement-bar__text a { 1735 color: #ffffff; 1736 text-decoration: underline; 1737 } 1738 1739 /* ââ Header Wrapper ââ */ 1740 .custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc { 1741 position: relative; 1742 z-index: 100; 1743 background: #171717B2; 1744 border: 0.25px solid rgba(255, 255, 255, 0.4); 1745 border-top: none; 1746 border-radius: 0 0 30px 30px; 1747 backdrop-filter: blur(20px); 1748 -webkit-backdrop-filter: blur(20px); 1749 } 1750 1751 .custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc.sticky-header { 1752 position: sticky; 1753 top: 0; 1754 z-index: 100; 1755 } 1756 1757 .custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc.sticky-header.header--overlay { 1758 position: absolute; 1759 top: 0; 1760 } 1761 1762 .custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc.is-sticky { 1763 position: fixed !important; 1764 top: 0; 1765 left: 36px; 1766 right: 36px; 1767 width: auto; 1768 /* box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); */ 1769 } 1770 1771 /* ââ Overlay header for all pages ââ */ 1772 .custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc.header--overlay:not(.is-sticky) { 1773 position: absolute; 1774 top: 0; 1775 left: 36px; 1776 right: 36px; 1777 z-index: 100; 1778 } 1779 1780 .custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc.header--overlay .custom-header-sections--23893840232617__custom_header_DeLQhc { 1781 background: transparent !important; 1782 border-bottom-color: transparent !important; 1783 } 1784 1785 /* ââ Cart Drawer z-index override ââ */ 1786 #CartDrawer { z-index: 1001 !important; } 1787 .drawer { z-index: 1001 !important; } 1788 .drawer__overlay { z-index: 1000 !important; } 1789 1790 /* ââ Main Header ââ */ 1791 .custom-header-sections--23893840232617__custom_header_DeLQhc { 1792 position: relative; 1793 width: 100%; 1794 border-top: 0.25px solid rgba(255, 255, 255, 0.4); 1795 } 1796 1797 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__container { 1798 max-width: 1440px; 1799 margin: 0 auto; 1800 padding: 18px 36px; 1801 display: flex; 1802 align-items: center; 1803 justify-content: space-between; 1804 } 1805 1806 /* ââ Desktop Nav ââ */ 1807 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__left { 1808 flex: 1 1 0; 1809 display: flex; 1810 align-items: center; 1811 gap: 16px; 1812 } 1813 1814 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__menu-nav { 1815 flex: 0 0 auto; 1816 display: flex; 1817 justify-content: center; 1818 } 1819 1820 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__menu { 1821 display: flex; 1822 align-items: center; 1823 gap: 32px; 1824 list-style: none; 1825 margin: 0; 1826 padding: 0; 1827 } 1828 1829 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__menu-item { 1830 position: relative; 1831 margin: 0; 1832 } 1833 1834 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__menu-link { 1835 color: #ffffff; 1836 text-decoration: none; 1837 display: flex; 1838 align-items: center; 1839 gap: 5px; 1840 white-space: nowrap; 1841 transition: opacity 0.2s; 1842 font-size: 14px; 1843 line-height: 20px; 1844 letter-spacing: -0.05em; 1845 font-weight: 500; 1846 font-family: 'Inter-Medium'; 1847 text-align: center; 1848 padding: 0; 1849 margin: 0; 1850 } 1851 1852 1853 /* ââ Logo ââ */ 1854 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__logo { 1855 flex: 0 0 auto; 1856 margin: 0; 1857 } 1858 1859 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__logo img { 1860 display: block; 1861 max-width: 135px; 1862 height: auto; 1863 } 1864 1865 /* ââ Icons ââ */ 1866 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__icons { 1867 flex: 1 1 0; 1868 display: flex; 1869 align-items: center; 1870 justify-content: flex-end; 1871 gap: 24px; 1872 } 1873 1874 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__icon { 1875 color: #ffffff; 1876 text-decoration: none; 1877 position: relative; 1878 cursor: pointer; 1879 background: none; 1880 border: none; 1881 padding: 0; 1882 display: flex; 1883 align-items: center; 1884 justify-content: center; 1885 transition: opacity 0.2s; 1886 } 1887 1888 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__icon svg { 1889 display: block; 1890 } 1891 1892 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__icon:hover { 1893 opacity: 0.75; 1894 } 1895 1896 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__cart-count { 1897 background-color: #1D7F9A; 1898 color: #FFFFFF; 1899 border-radius: 50%; 1900 min-width: 23px; 1901 height: 23px; 1902 display: flex; 1903 align-items: center; 1904 justify-content: center; 1905 font-size: 13px; 1906 line-height: 13px; 1907 font-weight: 700; 1908 margin-left: 4px; 1909 font-family: "ABC Diatype"; 1910 letter-spacing: 0; 1911 } 1912 1913 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__mobile-menu-icon { 1914 display: none; 1915 } 1916 1917 /* ââ Dropdown ââ */ 1918 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__dropdown { 1919 position: absolute; 1920 top: 100%; 1921 left: 0; 1922 background: #1a1a1a; 1923 min-width: 200px; 1924 opacity: 0; 1925 visibility: hidden; 1926 transform: translateY(4px); 1927 transition: all 0.25s ease; 1928 z-index: 1000; 1929 padding: 24px 28px; 1930 pointer-events: none; 1931 list-style: none; 1932 margin: 0; 1933 border-radius: 8px; 1934 } 1935 1936 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__dropdown li { 1937 list-style: none; 1938 margin-bottom: 16px; 1939 } 1940 1941 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__dropdown li:last-child { 1942 margin-bottom: 0; 1943 } 1944 1945 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__menu-item.is-active .header__dropdown { 1946 opacity: 1; 1947 visibility: visible; 1948 transform: translateY(0); 1949 pointer-events: auto; 1950 } 1951 1952 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__dropdown-link { 1953 display: block; 1954 color: #ffffff; 1955 font-size: 15px; 1956 line-height: 20px; 1957 font-weight: 400; 1958 font-family: 'Inter-Regular'; 1959 letter-spacing: -0.02em; 1960 text-decoration: none; 1961 transition: opacity 0.2s; 1962 } 1963 1964 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__dropdown-link:hover { 1965 opacity: 0.7; 1966 } 1967 1968 /* ââ Mega Menu ââ */ 1969 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__megamenu-wrapper { 1970 position: absolute; 1971 top: 100%; 1972 left: -1px; 1973 right: -1px; 1974 width: auto; 1975 background: #171717B2; 1976 backdrop-filter: blur(20px); 1977 -webkit-backdrop-filter: blur(20px); 1978 border: 0.25px solid rgba(255, 255, 255, 0.4);
1979 border-radius: 0 0 30px 30px; 1980 opacity: 0; 1981 visibility: hidden; 1982 transition: opacity 0.25s ease, visibility 0.25s ease; 1983 pointer-events: none; 1984 z-index: 999; 1985 } 1986 1987 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__megamenu-wrapper.is-active { 1988 opacity: 1; 1989 visibility: visible; 1990 pointer-events: auto; 1991 } 1992 1993 /* Remove bottom radius from wrapper when mega menu is open */ 1994 .custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc:has(.header__megamenu-wrapper.is-active), 1995 .custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc.megamenu-open { 1996 border-radius: 0; 1997 border-bottom-color: transparent; 1998 } 1999 2000 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__megamenu { 2001 max-width: 1296px; 2002 padding: 54px 0; 2003 display: flex; 2004 gap: 36px; 2005 margin: 0 auto; 2006 } 2007 2008 /* Icon-grid layout for mega menu items */ 2009 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__megamenu-items { 2010 display: flex; 2011 gap: 36px; 2012 flex: 1; 2013 align-items: center; 2014 justify-content: center; 2015 } 2016 2017 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__megamenu-item { 2018 display: flex; 2019 flex-direction: column; 2020 align-items: center; 2021 gap: 10px; 2022 text-decoration: none; 2023 width: 108px; 2024 flex-shrink: 0; 2025 } 2026 2027 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__megamenu-item-icon { 2028 width: 108px; 2029 height: 66px; 2030 display: flex; 2031 align-items: center; 2032 justify-content: center; 2033 flex-shrink: 0; 2034 } 2035 2036 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__megamenu-item-icon img { 2037 width: 100%; 2038 height: 100%; 2039 object-fit: contain; 2040 display: block; 2041 } 2042 2043 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__megamenu-item-label { 2044 color: #ffffff; 2045 font-size: 14px; 2046 line-height: 20px; 2047 letter-spacing: -0.05em; 2048 font-family: 'Inter-Medium'; 2049 font-weight: 500; 2050 text-align: center; 2051 margin: 0; 2052 } 2053 2054 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__megamenu-cta-wrap { 2055 display: flex; 2056 align-items: center; 2057 align-self: flex-start; 2058 padding-top: 4px; 2059 flex-shrink: 0; 2060 } 2061 2062 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__megamenu-cta { 2063 color: #FFFFFF; 2064 font-size: 14px; 2065 line-height: 20px; 2066 letter-spacing: -0.05em; 2067 font-family: 'Inter'; 2068 max-width: 108px; 2069 text-align: center; 2070 width: 100%; 2071 padding: 0 23px; 2072 } 2073 2074 @media (max-width: 1030px) and (min-width: 769px) { 2075 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__megamenu-items { 2076 overflow-x: scroll; 2077 justify-content: unset; 2078 padding: 0 24px; 2079 } 2080 } 2081 2082 /* ââ Tablet adjustments ââ */ 2083 @media screen and (min-width: 956px) and (max-width: 1100px) { 2084 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__menu { 2085 gap: 16px; 2086 } 2087 2088 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__menu-link { 2089 font-size: 13px; 2090 } 2091 2092 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__logo { 2093 margin: 0; 2094 } 2095 } 2096 2097 @media screen and (min-width: 769px) and (max-width: 955px) { 2098 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__menu-link { 2099 font-size: 10px; 2100 } 2101 2102 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__menu { 2103 gap: 8px; 2104 } 2105 2106 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__logo { 2107 margin: 0; 2108 } 2109 } 2110 2111 /* ââ Mobile Styles ââ */ 2112 @media (max-width: 768px) { 2113 2114 .custom-announcement-bar-sections--23893840232617__custom_header_DeLQhc .announcement-bar__text p { 2115 font-size: 16px; 2116 line-height: 16px; 2117 font-family: 'Inter-Regular'; 2118 font-weight: 400; 2119 } 2120 2121 .custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc.header--overlay:not(.is-sticky) { 2122 position: absolute; 2123 top: 0; 2124 left: 0; 2125 right: 0; 2126 z-index: 100; 2127 margin: 0; 2128 } 2129 2130 .custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc, 2131 .custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc.is-sticky { 2132 margin: 0; 2133 left: 0; 2134 right: 0; 2135 } 2136 2137 /* When mobile drawer is open â remove all borders, only announcement bar gets border */ 2138 .custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc.drawer-open { 2139 border-radius: 0; 2140 border: none; 2141 } 2142 2143 .custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc.drawer-open .custom-announcement-bar-sections--23893840232617__custom_header_DeLQhc { 2144 border: 0.25px solid rgba(255, 255, 255, 0.4); 2145 } 2146 2147 .custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc.drawer-open .custom-header-sections--23893840232617__custom_header_DeLQhc { 2148 border-top: none; 2149 } 2150 2151 .custom-announcement-bar-sections--23893840232617__custom_header_DeLQhc { 2152 padding: 12px 0; 2153 } 2154 2155 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__container { 2156 padding: 27px; 2157 gap: 0; 2158 } 2159 2160 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__menu-nav { 2161 display: none; 2162 } 2163 2164 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__megamenu-wrapper { 2165 display: none; 2166 } 2167 2168 /* On mobile, header__left only shows hamburger + logo */ 2169 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__left { 2170 flex: 1 1 auto; 2171 gap: 0; 2172 } 2173 2174 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__container { 2175 position: relative; 2176 } 2177 2178 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__logo { 2179 position: absolute; 2180 left: 50%; 2181 transform: translateX(-50%); 2182 } 2183 2184 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__logo img { 2185 max-width: 135px; 2186 display: block; 2187 } 2188 2189 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__mobile-menu-icon { 2190 display: flex; 2191 align-items: center; 2192 justify-content: center; 2193 flex-shrink: 0; 2194 } 2195 2196 .hamburger-icon { 2197 width: 26px; 2198 height: 21px; 2199 } 2200 2201 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__icon--account { 2202 display: none; 2203 } 2204 2205 .custom-header-sections--23893840232617__custom_header_DeLQhc .header__icons { 2206 flex: 0 0 auto; 2207 gap: 18px; 2208 } 2209 } 2210 2211 /* ââ Mobile Drawer ââ */ 2212 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc { 2213 position: fixed; 2214 top: 0; 2215 left: -100%; 2216 width: 100%; 2217 max-width: 100%; 2218 height: 100vh; 2219 background: #222222; 2220 z-index: 1000; 2221 transition: left 0.3s ease; 2222 overflow-y: auto; 2223 } 2224 2225 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc.is-open { 2226 left: 0; 2227 } 2228 2229 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__menu { 2230 list-style: none; 2231 padding: 0; 2232 margin: 0; 2233 } 2234 2235 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__menu-item { 2236 margin-bottom: 18px; 2237 } 2238 2239 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__menu-item:last-child { 2240 margin-bottom: 0; 2241 } 2242 2243 /* Menu title (parent link â both with and without children) */ 2244 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__menu-link, 2245 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__menu-toggle { 2246 display: flex; 2247 align-items: center; 2248 justify-content: space-between; 2249 padding: 0; 2250 color: #FFFFFF; 2251 text-decoration: none; 2252 font-size: 16px; 2253 line-height: 16px; 2254 letter-spacing: -0.02em; 2255 font-weight: 500; 2256 background: none; 2257 border: none; 2258 cursor: pointer; 2259 width: 100%; 2260 text-align: left; 2261 margin-bottom: 18px; 2262 } 2263 2264 /* Submenu â first one open by default, rest closed */ 2265 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__submenu { 2266 list-style: none; 2267 padding: 0; 2268 margin: 0; 2269 padding-left: 18px; 2270 border-left: 1px solid #FFFFFF; 2271 display: none; 2272 } 2273 2274 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__submenu.is-open { 2275 display: block; 2276 } 2277 2278 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__submenu li { 2279 margin-bottom: 10px; 2280 } 2281 2282 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__submenu li:last-child { 2283 margin-bottom: 0; 2284 } 2285 2286 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__submenu-link { 2287 display: block; 2288 color: #FFFFFF; 2289 text-decoration: none; 2290 font-size: 16px; 2291 line-height: 16px; 2292 letter-spacing: -0.02em; 2293 font-weight: 500; 2294 opacity: 1; 2295 } 2296 2297 .custom_mobile_nav { 2298 padding: 36px; 2299 padding-top: 36px; 2300 padding-bottom: 0; 2301 } 2302 2303 /* Drawer Footer */ 2304 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__footer { 2305 padding: 0 36px 36px; 2306 margin-top: 86px; 2307 border: none; 2308 } 2309 2310 /* Account CTA */ 2311 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__account-link { 2312 display: inline-block; 2313 color: #FFFFFF; 2314 text-decoration: none; 2315 font-size: 18px; 2316 line-height: 20px; 2317 letter-spacing: -0.02em; 2318 font-family: 'Inter-Regular'; 2319 font-weight: 400; 2320 } 2321 2322 /* Drawer Social */ 2323 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__social-row { 2324 display: flex; 2325 gap: 22px; 2326 align-items: center; 2327 margin: 0 36px; 2328 border-top: 1px solid rgba(255,255,255,0.15); 2329 padding-top: 18px; 2330 padding-bottom: 36px; 2331 } 2332 2333 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__social-icon { 2334 color: #ffffff; 2335 text-decoration: none; 2336 display: flex; 2337 align-items: center; 2338 justify-content: center; 2339 opacity: 0.85; 2340 transition: opacity 0.2s; 2341 } 2342 2343 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__social-icon:hover { 2344 opacity: 1; 2345 } 2346 2347 /* Drawer Banner Slider */ 2348 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__slider-wrapper { 2349 overflow: hidden; 2350 position: relative; 2351 } 2352 2353 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .swiper-slide.drawer__slide { 2354 width: calc(70% - 18px); 2355 } 2356 2357 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__slide-link { 2358 display: block; 2359 text-decoration: none; 2360 } 2361 2362 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__slide-image { 2363 width: 100%; 2364 height: 280px; 2365 background-size: cover; 2366 background-position: center; 2367 background-repeat: no-repeat; 2368 display: flex; 2369 align-items: flex-end; 2370 overflow: hidden; 2371 border-radius: 12px; 2372 } 2373 2374 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__slide-content { 2375 background: rgba(255,255,255,0.92); 2376 padding: 14px 16px; 2377 margin: 12px; 2378 width: calc(100% - 24px); 2379 border-radius: 6px; 2380 } 2381 2382 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__slide-title { 2383 color: #171717; 2384 font-size: 16px; 2385 line-height: 20px; 2386 font-weight: 500; 2387 margin: 0 0 6px; 2388 letter-spacing: -0.02em; 2389 font-family: 'Inter-Medium'; 2390 } 2391 2392 .custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc .drawer__slide-cta { 2393 display: inline-block; 2394 color: #FFFFFF; 2395 background: #1D7F9A; 2396 border-radius: 100px; 2397 font-size: 13px; 2398 font-weight: 500; 2399 letter-spacing: 0.05em; 2400 text-transform: uppercase; 2401 padding: 6px 16px; 2402 text-decoration: none; 2403 font-family: 'Inter-Medium'; 2404 } 2405 2406 /* ââ Drawer Overlay ââ */ 2407 .custom-drawer-overlay-sections--23893840232617__custom_header_DeLQhc { 2408 position: fixed; 2409 top: 0; 2410 left: 0; 2411 width: 100%; 2412 height: 100vh; 2413 background: rgba(0,0,0,0.5); 2414 z-index: 999; 2415 opacity: 0; 2416 visibility: hidden; 2417 transition: all 0.3s ease; 2418 } 2419 2420 .custom-drawer-overlay-sections--23893840232617__custom_header_DeLQhc.is-open { 2421 opacity: 1; 2422 visibility: visible; 2423 } 2424 2425 /* ââ Predictive Search results ââ */ 2426 .predictive-search-results h3, 2427 .predictive-search-results .h4 { 2428 color: #222222; 2429 font-family: 'Inter-Regular'; 2430 font-size: 36px; 2431 line-height: 36px; 2432 letter-spacing: 0.03em; 2433 font-weight: 400; 2434 text-transform: unset !important; 2435 border-bottom: 1px solid #222222; 2436 padding-bottom: 8px; 2437 margin-bottom: 12px; 2438 } 2439 2440 .results-products__info span, 2441 .predictive-search-results li a span { 2442 color: #222222; 2443 font-family: 'Inter-Regular'; 2444 font-size: 16px; 2445 line-height: 16px; 2446 letter-spacing: -0.02em; 2447 font-weight: 700; 2448 } 2449 2450 .results__search-btn { 2451 color: #222222; 2452 font-family: 'Inter-Regular'; 2453 font-size: 18px; 2454 line-height: 24px; 2455 letter-spacing: -0.03em; 2456 font-weight: 500; 2457 background: transparent; 2458 border: none; 2459 border-top: 1px solid #222222; 2460 width: 100%; 2461 text-align: left; 2462 padding: 12px 16px; 2463 cursor: pointer; 2464 } 2465 @media only screen and (max-width: 768px) { 2466 .results__search-btn { 2467 font-size: 16px; 2468 letter-spacing: -0.02em; 2469 } 2470 .predictive-search-results h3, .predictive-search-results .h4 { 2471 font-size: 24px; 2472 line-height: 28px; 2473 letter-spacing: -0.03em; 2474 } 2475 }</style><div id="CartDrawer" class="drawer drawer--right"> 2476 <form id="CartDrawerForm" action="/cart" method="post" novalidate class="drawer__contents" data-location="cart-drawer"> 2477 <div class="drawer__fixed-header"> 2478 <div class="drawer__header appear-animation appear-delay-1"> 2479 <div class="h2 drawer__title">Cart</div> 2480 <div class="drawer__close"> 2481 <button type="button" class="drawer__close-button js-drawer-close"> 2482 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><title>icon-X</title><path d="m19 17.61 27.12 27.13m0-27.12L19 44.74"/></svg>
2483 <span class="icon__fallback-text">Close cart</span> 2484 </button> 2485 </div> 2486 </div> 2487 </div> 2488 2489 <div class="drawer__inner"> 2490 <div class="drawer__scrollable"> 2491 <div data-products class="appear-animation appear-delay-2"></div> 2492 2493 2494 </div> 2495 2496 <div class="drawer__footer appear-animation appear-delay-4"> 2497 <div data-discounts> 2498 2499 </div> 2500 2501 <div class="cart__item-sub cart__item-row"> 2502 <div class="ajaxcart__subtotal">Subtotal</div> 2503 <div data-subtotal>$0.00</div> 2504 </div> 2505 2506 <div class="cart__item-row text-center"> 2507 <small> 2508 Shipping, taxes, and discount codes calculated at checkout.<br /> 2509 </small> 2510 </div> 2511 2512 2513 2514 <div class="cart__checkout-wrapper"> 2515 <button type="submit" name="checkout" data-terms-required="false" class="btn cart__checkout"> 2516 Check out 2517 </button> 2518 2519 2520 </div> 2521 </div> 2522 </div> 2523 2524 <div class="drawer__cart-empty appear-animation appear-delay-2"> 2525 <div class="drawer__scrollable"> 2526 Your cart is currently empty. 2527 </div> 2528 </div> 2529 </form> 2530 </div><div 2531 class="custom-header-wrapper-sections--23893840232617__custom_header_DeLQhc sticky-header header--overlay" 2532 data-section-id="sections--23893840232617__custom_header_DeLQhc" 2533 data-sticky-enabled="true" 2534 data-overlay-enabled="true" 2535><div class="custom-announcement-bar-sections--23893840232617__custom_header_DeLQhc"> 2536 <div class="swiper announcement-swiper announcement-swiper--sections--23893840232617__custom_header_DeLQhc"> 2537 <div class="swiper-wrapper"><div class="swiper-slide" > 2538 <div class="announcement-bar__text"><p>Free 2-day Shipping</p></div> 2539 </div><div class="swiper-slide" > 2540 <div class="announcement-bar__text"><p>Shop now, pay later with Afterpay!</p></div> 2541 </div><div class="swiper-slide" > 2542 <div class="announcement-bar__text"><p>1-year Limited Warranty on All Devices</p></div> 2543 </div><div class="swiper-slide"> 2544 <div class="announcement-bar__text"><p>Free 2-day Shipping</p></div> 2545 </div><div class="swiper-slide"> 2546 <div class="announcement-bar__text"><p>Shop now, pay later with Afterpay!</p></div> 2547 </div><div class="swiper-slide"> 2548 <div class="announcement-bar__text"><p>1-year Limited Warranty on All Devices</p></div> 2549 </div></div> 2550 </div> 2551 </div><header class="custom-header-sections--23893840232617__custom_header_DeLQhc"> 2552 <div class="header__container"><div class="header__left"> 2553 <button 2554 class="header__icon header__mobile-menu-icon js-mobile-drawer-open-sections--23893840232617__custom_header_DeLQhc" 2555 aria-label="Open menu" 2556 > 2557 <img class="hamburger-icon" src="https://cdn.shopify.com/s/files/1/0621/3615/6329/files/Hamburger_2.png?v=1772984800" alt="Menu" width="26" height="20"> 2558 <svg class="close-icon" xmlns="http://www.w3.org/2000/svg" width="26" height="26" viewBox="0 0 26 26" fill="none" style="display:none;"> 2559 <path d="M0.5 0.5L25.5 25.5" stroke="white" stroke-linecap="round"/> 2560 <path d="M0.5 25.5L25.5 0.499996" stroke="white" stroke-linecap="round"/> 2561 </svg> 2562 </button><div class="header__logo"> 2563 <a href="/"><img 2564 src="//ipowerresale.com/cdn/shop/files/svg840.svg?v=1772971322&width=600" 2565 alt="iPowerResale" 2566 width="135" 2567 height="18.0" 2568 loading="eager" 2569 ></a> 2570 </div> 2571 </div><nav class="header__menu-nav" role="navigation" aria-label="Primary navigation"> 2572 <ul class="header__menu"><li class="header__menu-item header__menu-item--megamenu"> 2573 <a 2574 href="/pages/mac" 2575 class="header__menu-link" 2576 data-megamenu-trigger="mac" 2577 2578 > 2579 Mac 2580 </a></li><li class="header__menu-item header__menu-item--megamenu"> 2581 <a 2582 href="/pages/ipad" 2583 class="header__menu-link" 2584 data-megamenu-trigger="ipad" 2585 2586 > 2587 iPad 2588 </a></li><li class="header__menu-item"> 2589 <a 2590 href="/collections/iphone" 2591 class="header__menu-link" 2592 2593 > 2594 iPhone 2595 </a></li><li class="header__menu-item"> 2596 <a 2597 href="/collections/watch" 2598 class="header__menu-link" 2599 2600 > 2601 Watch 2602 </a></li><li class="header__menu-item"> 2603 <a 2604 href="/collections/airpods" 2605 class="header__menu-link" 2606 2607 > 2608 AirPods 2609 </a></li><li class="header__menu-item"> 2610 <a 2611 href="/collections/apple-display" 2612 class="header__menu-link" 2613 2614 > 2615 Displays 2616 </a></li><li class="header__menu-item"> 2617 <a 2618 href="/collections/accessories" 2619 class="header__menu-link" 2620 2621 > 2622 Accessories 2623 </a></li><li class="header__menu-item"> 2624 <a 2625 href="/pages/reviews" 2626 class="header__menu-link" 2627 2628 > 2629 Reviews 2630 </a></li><li class="header__menu-item header__menu-item--has-dropdown"> 2631 <a 2632 href="/pages/troubleshooting-guides" 2633 class="header__menu-link" 2634 data-dropdown-trigger="true" 2635 > 2636 Support 2637 </a><ul class="header__dropdown"><li> 2638 <a href="/pages/faq" class="header__dropdown-link">FAQs</a> 2639 </li><li> 2640 <a href="/pages/service-support" class="header__dropdown-link">Service & Support</a> 2641 </li><li> 2642 <a href="/pages/troubleshooting-guides" class="header__dropdown-link">Troubleshooting Guides</a> 2643 </li></ul></li></ul> 2644 </nav><div class="header__icons"><a 2645 href="/search" 2646 class="header__icon header__icon--search js-search-header" 2647 aria-label="Translation missing: en.general.search.search" 2648 > 2649 <svg xmlns="http://www.w3.org/2000/svg" width="17" height="18" viewBox="0 0 17 18" fill="none"> 2650 <path d="M11.6113 12.5L16.5002 17.3889" stroke="white" stroke-linecap="round"/> 2651 <path d="M7.16667 13.8333C10.8431 13.8333 13.8333 10.8427 13.8333 7.16636C13.8333 3.49005 10.8431 0.5 7.16667 0.5C3.49019 0.5 0.5 3.49066 0.5 7.16636C0.5 10.8421 3.4908 13.8333 7.16667 13.8333Z" stroke="white"/> 2652 </svg> 2653 </a><a href="/account" class="header__icon header__icon--account" aria-label="My account"> 2654 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="20" viewBox="0 0 18 20" fill="none"> 2655 <path d="M9.00033 9.24286C11.4111 9.24286 13.3718 7.28184 13.3718 4.87123C13.3718 2.46062 11.4111 0.5 9.00033 0.5C6.58961 0.5 4.62891 2.46102 4.62891 4.87123C4.62891 7.28144 6.59001 9.24286 9.00033 9.24286Z" stroke="white"/> 2656 <path d="M9.90655 10.2427H8.09303C3.90638 10.2427 0.5 13.7727 0.5 18.1114V18.1483C0.5 18.8778 1.07262 19.4712 1.77655 19.4712H16.2234C16.9274 19.4712 17.5 18.8778 17.5 18.1483V18.1114C17.5 13.7723 14.0936 10.2427 9.90655 10.2427Z" stroke="white"/> 2657 </svg> 2658 </a><a 2659 href="/cart" 2660 class="header__icon header__icon--cart" 2661 aria-label="Cart" 2662 > 2663 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="21" viewBox="0 0 18 21" fill="none"> 2664 <path d="M5.5 7.92858V3.97822C5.5 2.05154 7.01845 0.5 8.90477 0.5C10.7911 0.5 12.3095 2.05154 12.3095 3.97822V7.92858" stroke="white" stroke-linecap="round" stroke-linejoin="round"/> 2665 <path fill-rule="evenodd" clip-rule="evenodd" d="M16.3316 5.5L17.4947 18.6329C17.5859 19.6647 16.4965 20.5 15.2572 20.5H2.74279C1.50349 20.5 0.41408 19.664 0.505353 18.6329L1.66845 5.5H16.3316Z" stroke="white" stroke-linejoin="round"/> 2666 </svg>
2667 <span class="header__cart-count" style="display: none;">0</span> 2668 </a> 2669 </div> 2670 2671 </div><div class="header__megamenu-wrapper" data-megamenu-id="ipad" > 2672 <div class="header__megamenu"> 2673 <div class="header__megamenu-items"><a href="/collections/ipad-pro" class="header__megamenu-item"><div class="header__megamenu-item-icon"> 2674 <img 2675 src="//ipowerresale.com/cdn/shop/files/ipadpro-icon.png?v=1776372609&width=128" 2676 alt="iPad Pro" 2677 width="64" 2678 height="64" 2679 loading="lazy" 2680 > 2681 </div><span class="header__megamenu-item-label">iPad Pro</span> 2682 </a><a href="/collections/ipad-air" class="header__megamenu-item"><div class="header__megamenu-item-icon"> 2683 <img 2684 src="//ipowerresale.com/cdn/shop/files/ipadair-icon.png?v=1776372609&width=128" 2685 alt="iPad Air" 2686 width="64" 2687 height="64" 2688 loading="lazy" 2689 > 2690 </div><span class="header__megamenu-item-label">iPad Air</span> 2691 </a><a href="/collections/ipad" class="header__megamenu-item"><div class="header__megamenu-item-icon"> 2692 <img 2693 src="//ipowerresale.com/cdn/shop/files/ipad-icon.png?v=1776372609&width=128" 2694 alt="iPad" 2695 width="64" 2696 height="64" 2697 loading="lazy" 2698 > 2699 </div><span class="header__megamenu-item-label">iPad</span> 2700 </a><a href="/pages/ipad" class="header__megamenu-cta"> 2701 Explore all â¨iPads 2702 </a> 2703 </div> 2704 </div> 2705 </div><div class="header__megamenu-wrapper" data-megamenu-id="mac" > 2706 <div class="header__megamenu"> 2707 <div class="header__megamenu-items"><a href="/collections/macbook-pro" class="header__megamenu-item"><div class="header__megamenu-item-icon"> 2708 <img 2709 src="//ipowerresale.com/cdn/shop/files/mbp-icon.png?v=1776372609&width=128" 2710 alt="MacBook Pro" 2711 width="64" 2712 height="64" 2713 loading="lazy" 2714 > 2715 </div><span class="header__megamenu-item-label">MacBook Pro</span> 2716 </a><a href="/collections/macbook-air" class="header__megamenu-item"><div class="header__megamenu-item-icon"> 2717 <img 2718 src="//ipowerresale.com/cdn/shop/files/mba-icon.png?v=1776372610&width=128" 2719 alt="MacBook Air" 2720 width="64" 2721 height="64" 2722 loading="lazy" 2723 > 2724 </div><span class="header__megamenu-item-label">MacBook Air</span> 2725 </a><a href="/collections/macbook-neo" class="header__megamenu-item"><div class="header__megamenu-item-icon"> 2726 <img 2727 src="//ipowerresale.com/cdn/shop/files/mbn-icon.png?v=1777677439&width=128" 2728 alt="MacBook Neo" 2729 width="64" 2730 height="64" 2731 loading="lazy" 2732 > 2733 </div><span class="header__megamenu-item-label">MacBook Neo</span> 2734 </a><a href="/collections/imac" class="header__megamenu-item"><div class="header__megamenu-item-icon"> 2735 <img 2736 src="//ipowerresale.com/cdn/shop/files/imac-icon.png?v=1776372609&width=128" 2737 alt="iMac" 2738 width="64" 2739 height="64" 2740 loading="lazy" 2741 > 2742 </div><span class="header__megamenu-item-label">iMac</span> 2743 </a><a href="/collections/mac-pro" class="header__megamenu-item"><div class="header__megamenu-item-icon"> 2744 <img 2745 src="//ipowerresale.com/cdn/shop/files/macpro-icon.png?v=1776372610&width=128" 2746 alt="Mac Pro" 2747 width="64" 2748 height="64" 2749 loading="lazy" 2750 > 2751 </div><span class="header__megamenu-item-label">Mac Pro</span> 2752 </a><a href="/collections/macmini" class="header__megamenu-item"><div class="header__megamenu-item-icon"> 2753 <img 2754 src="//ipowerresale.com/cdn/shop/files/macmini-icon.png?v=1776372609&width=128" 2755 alt="Mac mini" 2756 width="64" 2757 height="64" 2758 loading="lazy" 2759 > 2760 </div><span class="header__megamenu-item-label">Mac mini</span> 2761 </a><a href="/collections/mac-studio" class="header__megamenu-item"><div class="header__megamenu-item-icon"> 2762 <img 2763 src="//ipowerresale.com/cdn/shop/files/macstudio-icon.png?v=1776372609&width=128" 2764 alt="Mac Studio" 2765 width="64" 2766 height="64" 2767 loading="lazy" 2768 > 2769 </div><span class="header__megamenu-item-label">Mac Studio</span> 2770 </a><a href="/pages/mac" class="header__megamenu-cta"> 2771 Explore all Macs 2772 </a> 2773 </div> 2774 </div> 2775 </div></header> 2776</div><div class="custom-mobile-drawer-sections--23893840232617__custom_header_DeLQhc js-mobile-drawer-sections--23893840232617__custom_header_DeLQhc"> 2777 2778 <nav class="custom_mobile_nav"> 2779 <ul class="drawer__menu"><li class="drawer__menu-item"><button 2780 class="drawer__menu-link drawer__menu-toggle js-drawer-submenu-toggle-sections--23893840232617__custom_header_DeLQhc" 2781 data-target="submenu-sections--23893840232617__custom_header_DeLQhc-1" 2782 aria-expanded="false" 2783 >
2784 <span>Mac</span> 2785 </button> 2786 <ul class="drawer__submenu is-open" id="submenu-sections--23893840232617__custom_header_DeLQhc-1"><li> 2787 <a href="/collections/macbook-pro" class="drawer__submenu-link">MacBook Pro</a> 2788 </li><li> 2789 <a href="/collections/macbook-air" class="drawer__submenu-link">MacBook Air</a> 2790 </li><li> 2791 <a href="/collections/macbook-neo" class="drawer__submenu-link">MacBook Neo</a> 2792 </li><li> 2793 <a href="/collections/imac" class="drawer__submenu-link">iMac</a> 2794 </li><li> 2795 <a href="/collections/mac-pro" class="drawer__submenu-link">Mac Pro</a> 2796 </li><li> 2797 <a href="/collections/macmini" class="drawer__submenu-link">Mac mini</a> 2798 </li><li> 2799 <a href="/collections/mac-studio" class="drawer__submenu-link">Mac Studio</a> 2800 </li><li> 2801 <a href="/pages/mac" class="drawer__submenu-link">Shop All Macs</a> 2802 </li></ul></li><li class="drawer__menu-item"><button 2803 class="drawer__menu-link drawer__menu-toggle js-drawer-submenu-toggle-sections--23893840232617__custom_header_DeLQhc" 2804 data-target="submenu-sections--23893840232617__custom_header_DeLQhc-2" 2805 aria-expanded="false" 2806 > 2807 <span>iPad</span> 2808 </button> 2809 <ul class="drawer__submenu" id="submenu-sections--23893840232617__custom_header_DeLQhc-2"><li> 2810 <a href="/collections/ipad" class="drawer__submenu-link">iPad</a> 2811 </li><li> 2812 <a href="/collections/ipad-air" class="drawer__submenu-link">iPad Air</a> 2813 </li><li> 2814 <a href="/collections/ipad-pro" class="drawer__submenu-link">iPad Pro</a> 2815 </li><li> 2816 <a href="/pages/ipad" class="drawer__submenu-link">Shop All iPads</a> 2817 </li></ul></li><li class="drawer__menu-item"><a href="/collections/iphone" class="drawer__menu-link">iPhone</a></li><li class="drawer__menu-item"><a href="/collections/watch" class="drawer__menu-link">Watch</a></li><li class="drawer__menu-item"><a href="/collections/airpods" class="drawer__menu-link">AirPods</a></li><li class="drawer__menu-item"><a href="/collections/apple-display" class="drawer__menu-link">Displays</a></li><li class="drawer__menu-item"><a href="/collections/accessories" class="drawer__menu-link">Accessories</a></li><li class="drawer__menu-item"><a href="/pages/reviews" class="drawer__menu-link">Reviews</a></li><li class="drawer__menu-item"><button 2818 class="drawer__menu-link drawer__menu-toggle js-drawer-submenu-toggle-sections--23893840232617__custom_header_DeLQhc" 2819 data-target="submenu-sections--23893840232617__custom_header_DeLQhc-9" 2820 aria-expanded="false" 2821 > 2822 <span>Support</span> 2823 </button> 2824 <ul class="drawer__submenu" id="submenu-sections--23893840232617__custom_header_DeLQhc-9"><li> 2825 <a href="/pages/faq" class="drawer__submenu-link">FAQs</a> 2826 </li><li> 2827 <a href="/pages/service-support" class="drawer__submenu-link">Service & Support</a> 2828 </li><li> 2829 <a href="/pages/troubleshooting-guides" class="drawer__submenu-link">Troubleshooting Guides</a> 2830 </li></ul></li></ul> 2831 </nav><div class="drawer__footer"> 2832 <a href="/account" class="drawer__account-link"> 2833 My Account 2834 </a> 2835 </div></div><div class="custom-drawer-overlay-sections--23893840232617__custom_header_DeLQhc js-drawer-overlay-sections--23893840232617__custom_header_DeLQhc"></div> 2836 2837 2838
2839<script> 2840(function () { 2841 var sectionId = 'sections--23893840232617__custom_header_DeLQhc'; 2842 var drawer = document.querySelector('.js-mobile-drawer-' + sectionId); 2843 var overlay = document.querySelector('.js-drawer-overlay-' + sectionId); 2844 var openBtn = document.querySelector('.js-mobile-drawer-open-' + sectionId); 2845 var submenuToggles = document.querySelectorAll('.js-drawer-submenu-toggle-' + sectionId); 2846 2847 var hamburgerIcon = openBtn ? openBtn.querySelector('.hamburger-icon') : null; 2848 var closeIcon = openBtn ? openBtn.querySelector('.close-icon') : null; 2849 2850 function setMenuIconState(isOpen) { 2851 if (hamburgerIcon) hamburgerIcon.style.display = isOpen ? 'none' : ''; 2852 if (closeIcon) closeIcon.style.display = isOpen ? '' : 'none'; 2853 } 2854 2855 function updateDrawerPosition() { 2856 var headerWrapper = document.querySelector('.custom-header-wrapper-' + sectionId); 2857 var bottom = headerWrapper ? headerWrapper.getBoundingClientRect().bottom : 0; 2858 if (drawer) { drawer.style.top = bottom + 'px'; drawer.style.height = (window.innerHeight - bottom) + 'px'; } 2859 if (overlay) { overlay.style.top = bottom + 'px'; overlay.style.height = (window.innerHeight - bottom) + 'px'; } 2860 } 2861 2862 function openDrawer() { 2863 updateDrawerPosition(); 2864 drawer.classList.add('is-open'); 2865 overlay.classList.add('is-open'); 2866 document.body.style.overflow = 'hidden'; 2867 setMenuIconState(true); 2868 if (headerWrapper) headerWrapper.classList.add('drawer-open'); 2869 // Recalculate after border-bottom removed (height changes by 1px) 2870 requestAnimationFrame(function() { updateDrawerPosition(); }); 2871 } 2872 2873 function closeDrawer() { 2874 drawer.classList.remove('is-open'); 2875 overlay.classList.remove('is-open'); 2876 document.body.style.overflow = ''; 2877 setMenuIconState(false); 2878 if (headerWrapper) headerWrapper.classList.remove('drawer-open'); 2879 } 2880 2881 if (openBtn) { 2882 openBtn.addEventListener('click', function () { 2883 drawer.classList.contains('is-open') ? closeDrawer() : openDrawer(); 2884 }); 2885 } 2886 2887 if (overlay) { overlay.addEventListener('click', closeDrawer); } 2888 2889 window.addEventListener('resize', function () { 2890 if (drawer && drawer.classList.contains('is-open')) updateDrawerPosition(); 2891 }); 2892 2893 submenuToggles.forEach(function (toggle) { 2894 toggle.addEventListener('click', function () { 2895 var targetId = this.getAttribute('data-target'); 2896 var submenu = document.getElementById(targetId); 2897 if (submenu) { 2898 var isOpen = submenu.classList.toggle('is-open'); 2899 this.setAttribute('aria-expanded', isOpen ? 'true' : 'false'); 2900 } 2901 }); 2902 }); 2903 2904 // ââ Cart Drawer ââ 2905 var cartButton = document.querySelector('.custom-header-' + sectionId + ' .js-drawer-open-cart'); 2906 if (cartButton) { 2907 cartButton.addEventListener('click', function (e) { 2908 e.preventDefault(); 2909 e.stopPropagation(); 2910 var cartDrawer = document.getElementById('CartDrawer'); 2911 if (cartDrawer) { 2912 document.documentElement.classList.add('js-drawer-open', 'js-drawer-open-cart'); 2913 cartDrawer.classList.add('drawer--is-open'); 2914 document.body.style.overflow = 'hidden'; 2915 } 2916 }); 2917 } 2918 2919 document.addEventListener('click', function (e) { 2920 var cartDrawer = document.getElementById('CartDrawer'); 2921 var cb = document.querySelector('.custom-header-' + sectionId + ' .js-drawer-open-cart'); 2922 if (cartDrawer && cartDrawer.classList.contains('drawer--is-open')) { 2923 if (!cartDrawer.contains(e.target) && cb && !cb.contains(e.target)) { 2924 document.documentElement.classList.remove('js-drawer-open', 'js-drawer-open-cart'); 2925 cartDrawer.classList.remove('drawer--is-open'); 2926 document.body.style.overflow = ''; 2927 } 2928 } 2929 }); 2930 2931 document.querySelectorAll('.js-drawer-close').forEach(function (btn) { 2932 btn.addEventListener('click', function () { 2933 var cartDrawer = document.getElementById('CartDrawer'); 2934 if (cartDrawer) { 2935 document.documentElement.classList.remove('js-drawer-open', 'js-drawer-open-cart'); 2936 cartDrawer.classList.remove('drawer--is-open'); 2937 document.body.style.overflow = ''; 2938 } 2939 }); 2940 }); 2941 2942 // ââ Mega Menu & Dropdown hover ââ 2943 var megaMenuTriggers = document.querySelectorAll('.custom-header-' + sectionId + ' [data-megamenu-trigger]'); 2944 var dropdownTriggers = document.querySelectorAll('.custom-header-' + sectionId + ' [data-dropdown-trigger]'); 2945 2946 var headerWrapperEl = document.querySelector('.custom-header-wrapper-' + sectionId); 2947 2948 function closeAllMenus() { 2949 document.querySelectorAll('.custom-header-' + sectionId + ' .header__menu-item').forEach(function (item) { 2950 item.classList.remove('is-active'); 2951 }); 2952 document.querySelectorAll('.custom-header-' + sectionId + ' .header__megamenu-wrapper').forEach(function (w) { 2953 w.classList.remove('is-active'); 2954 }); 2955 if (headerWrapperEl) headerWrapperEl.classList.remove('megamenu-open'); 2956 } 2957
2958 megaMenuTriggers.forEach(function (trigger) { 2959 var parentItem = trigger.closest('.header__menu-item'); 2960 var menuId = trigger.getAttribute('data-megamenu-trigger'); 2961 var megaMenu = document.querySelector('[data-megamenu-id="' + menuId + '"]'); 2962 var closeTimer = null; 2963 2964 function openMM() { 2965 clearTimeout(closeTimer); 2966 closeAllMenus(); 2967 parentItem.classList.add('is-active'); 2968 if (megaMenu) megaMenu.classList.add('is-active'); 2969 if (headerWrapperEl) headerWrapperEl.classList.add('megamenu-open'); 2970 } 2971 2972 function scheduleMMClose() { 2973 clearTimeout(closeTimer); 2974 closeTimer = setTimeout(function () { 2975 parentItem.classList.remove('is-active'); 2976 if (megaMenu) megaMenu.classList.remove('is-active'); 2977 if (headerWrapperEl) headerWrapperEl.classList.remove('megamenu-open'); 2978 }, 100); 2979 } 2980 2981 parentItem.addEventListener('mouseenter', openMM); 2982 parentItem.addEventListener('mouseleave', scheduleMMClose); 2983 if (megaMenu) { 2984 megaMenu.addEventListener('mouseenter', function () { clearTimeout(closeTimer); }); 2985 megaMenu.addEventListener('mouseleave', scheduleMMClose); 2986 } 2987 }); 2988 2989 dropdownTriggers.forEach(function (trigger) { 2990 var parentItem = trigger.closest('.header__menu-item'); 2991 parentItem.addEventListener('mouseenter', function () { 2992 closeAllMenus(); 2993 parentItem.classList.add('is-active'); 2994 }); 2995 parentItem.addEventListener('mouseleave', function () { 2996 parentItem.classList.remove('is-active'); 2997 }); 2998 }); 2999 3000 document.addEventListener('keydown', function (e) { 3001 if (e.key === 'Escape') closeAllMenus(); 3002 }); 3003 3004 // ââ Sticky Header ââ 3005 var headerWrapper = document.querySelector('.custom-header-wrapper-' + sectionId); 3006 var stickyEnabled = headerWrapper && headerWrapper.getAttribute('data-sticky-enabled') === 'true'; 3007 3008 if (stickyEnabled && headerWrapper) { 3009 var isSticky = false; 3010 var headerHeight = 0; 3011 var initialOffsetTop = 0; 3012 3013 function getOffsetTop() { 3014 if (!isSticky) { 3015 initialOffsetTop = headerWrapper.getBoundingClientRect().top + window.pageYOffset; 3016 } 3017 } 3018 3019 function onScroll() { 3020 var scrollTop = window.pageYOffset || document.documentElement.scrollTop; 3021 var isOverlay = headerWrapper.classList.contains('header--overlay'); 3022 if (scrollTop > initialOffsetTop) { 3023 if (!isSticky) { 3024 headerHeight = headerWrapper.offsetHeight; 3025 if (!isOverlay) { 3026 document.body.style.paddingTop = headerHeight + 'px'; 3027 } 3028 headerWrapper.classList.add('is-sticky'); 3029 isSticky = true; 3030 } 3031 } else { 3032 if (isSticky) { 3033 headerWrapper.classList.remove('is-sticky'); 3034 document.body.style.paddingTop = ''; 3035 isSticky = false; 3036 } 3037 } 3038 } 3039 3040 window.addEventListener('scroll', onScroll, { passive: true }); 3041 window.addEventListener('resize', function () { 3042 if (isSticky) { 3043 headerHeight = headerWrapper.offsetHeight; 3044 document.body.style.paddingTop = headerHeight + 'px'; 3045 } 3046 }); 3047 3048 getOffsetTop(); 3049 } 3050 3051 // ââ Overlay Header Logic ââ 3052 var overlayEnabled = headerWrapper && headerWrapper.getAttribute('data-overlay-enabled') === 'true'; 3053 3054 function applyOverlay() { 3055 if (!headerWrapper || !overlayEnabled) return; 3056 var isExcluded = document.querySelector('[data-ipr-no-overlay]') !== null; 3057 if (isExcluded) { 3058 headerWrapper.classList.remove('header--overlay'); 3059 } 3060 // If not excluded, class is already set from Liquid â no action needed 3061 } 3062 3063 applyOverlay(); 3064 3065 // ââ Announcement Swiper ââ 3066 var annSwiper = document.querySelector('.announcement-swiper--' + sectionId); 3067 3068 function initAnnouncementSwiper() { 3069 if (!annSwiper || typeof Swiper === 'undefined') return; 3070 new Swiper(annSwiper, { 3071 loop: true, 3072 autoplay: { delay: 3500, disableOnInteraction: false }, 3073 slidesPerView: 1, 3074 allowTouchMove: true, 3075 speed: 600, 3076 }); 3077 } 3078 3079 // Try immediately, then retry until Swiper is available 3080 function tryInitAnnouncement(attempts) { 3081 if (typeof Swiper !== 'undefined') { 3082 initAnnouncementSwiper(); 3083 } else if (attempts > 0) { 3084 setTimeout(function() { tryInitAnnouncement(attempts - 1); }, 200); 3085 } 3086 } 3087 3088 tryInitAnnouncement(10); 3089 3090 // ââ Drawer Banner Slider ââ 3091 var drawerSlider = document.querySelector('.js-drawer-slider-' + sectionId); 3092 if (drawerSlider && typeof Swiper !== 'undefined') { 3093 new Swiper(drawerSlider, { 3094 slidesPerView: 'auto', 3095 spaceBetween: 12, 3096 freeMode: false, 3097 allowTouchMove: true, 3098 simulateTouch: true, 3099 }); 3100 } 3101 3102 // ââ Mega Menu horizontal scroll via mousewheel ââ 3103 document.querySelectorAll('.custom-header-' + sectionId + ' .header__megamenu-items').forEach(function (el) { 3104 el.addEventListener('wheel', function (e) { 3105 if (e.deltaY !== 0) { e.preventDefault(); el.scrollLeft += e.deltaY; } 3106 }, { passive: false }); 3107 }); 3108 3109 // ââ Real-time Cart Count Update ââ 3110 function updateCartCountBubble(count) { 3111 var cartCountEl = document.querySelector('.custom-header-' + sectionId + ' .header__cart-count'); 3112 if (cartCountEl) { 3113 if (typeof count !== 'undefined') { 3114 cartCountEl.textContent = count; 3115 cartCountEl.style.display = count > 0 ? 'flex' : 'none'; 3116 } 3117 } 3118 } 3119 3120 var isFetchingCart = false;
3121 function fetchAndUpdateCart() { 3122 if (isFetchingCart) return; 3123 isFetchingCart = true; 3124 3125 fetch(window.Shopify.routes && window.Shopify.routes.root ? window.Shopify.routes.root + 'cart.js' : '/cart.js') 3126 .then(response => response.json()) 3127 .then(cart => { 3128 updateCartCountBubble(cart.item_count); 3129 }) 3130 .catch(err => console.error('Error fetching cart data:', err)) 3131 .finally(() => { 3132 setTimeout(() => { isFetchingCart = false; }, 500); 3133 }); 3134 } 3135 3136 document.addEventListener('cart:updated', function(event) { 3137 if (event.detail && event.detail.cart && typeof event.detail.cart.item_count !== 'undefined') { 3138 updateCartCountBubble(event.detail.cart.item_count); 3139 } else { 3140 fetchAndUpdateCart(); 3141 } 3142 }); 3143 3144 // Additional theme events 3145 document.addEventListener('ajaxProduct:added', fetchAndUpdateCart); 3146 document.addEventListener('cart:quantity', fetchAndUpdateCart); 3147 3148 // Global fetch interceptor for cart endpoints 3149 var originalFetch = window.fetch; 3150 window.fetch = function() { 3151 return originalFetch.apply(this, arguments).then(function(res) { 3152 var url = typeof arguments[0] === 'string' ? arguments[0] : (arguments[0] && arguments[0].url ? arguments[0].url : ''); 3153 if (url.indexOf('/cart/add') !== -1 || url.indexOf('/cart/change') !== -1 || url.indexOf('/cart/update') !== -1 || url.indexOf('/cart/clear') !== -1) { 3154 setTimeout(fetchAndUpdateCart, 150); 3155 } 3156 return res; 3157 }); 3158 }; 3159 3160 // Global XHR interceptor 3161 var originalXHR = window.XMLHttpRequest.prototype.open; 3162 window.XMLHttpRequest.prototype.open = function(method, url) { 3163 this.addEventListener('load', function() { 3164 if (typeof url === 'string' && (url.indexOf('/cart/add') !== -1 || url.indexOf('/cart/change') !== -1 || url.indexOf('/cart/update') !== -1 || url.indexOf('/cart/clear') !== -1)) { 3165 setTimeout(fetchAndUpdateCart, 150); 3166 } 3167 }); 3168 return originalXHR.apply(this, arguments); 3169 }; 3170 3171})(); 3172</script>
3172 3173 3174 3175</div> 3176<!-- END sections: header-group --><!-- BEGIN sections: popup-group --> 3177 3178<!-- END sections: popup-group --><main class="main-content" id="MainContent"> 3179 <section id="shopify-section-template--23893840003241__custom_product_yw7rBH" class="shopify-section section"><link href="//ipowerresale.com/cdn/shop/t/130/assets/custom-product.css?v=181190175705233607691790277977" rel="stylesheet" type="text/css" media="all" /> 3180<link href="//ipowerresale.com/cdn/shop/t/130/assets/product-configurator.css?v=156382306242021680431790278030" rel="stylesheet" type="text/css" media="all" /> 3181<link href="//ipowerresale.com/cdn/shop/t/130/assets/custom-product-default.css?v=37584658166066326331790277975" rel="stylesheet" type="text/css" media="all" /> 3182
3183<script id="swatches-data" type="application/json"> 3184{ 3185 "light-gold": { "hexValue": "#f9f3e6" }, 3186 "cloud-white": { "hexValue": "#fcfcfc" }, 3187 "deep-blue": { "hexValue": "#4d567e" }, 3188 "cosmic-orange": { "hexValue": "#e8854c" }, 3189 "lavender": { "hexValue": "#e5d9f0" }, 3190 "sage": { "hexValue": "#bcc7a0" }, 3191 "mist-blue": { "hexValue": "#adbcdb" }, 3192 "midnight-ink-loop": { "hexValue": "#4b4b4b" }, 3193 "silver-denim-band": { "hexValue": "#5a6478" }, 3194 "silver-blue-cloud-loop": { "hexValue": "#dde3f9" }, 3195 "starlight-lake-green-loop": { "hexValue": "#4d6b46" }, 3196 "red": { "hexValue": "#ba1515" }, 3197 "black": { "hexValue": "#222222" }, 3198 "blue": { "hexValue": "#4f90bf" }, 3199 "slate": { "hexValue": "#d1d1d1" }, 3200 "gray": { "hexValue": "#9b9b9b" }, 3201 "smoke": { "hexValue": "#808080" }, 3202 "green": { "hexValue": "#529159" }, 3203 "silver": { "hexValue": "#d8d8d8" }, 3204 "space-gray": { "hexValue": "#868686" }, 3205 "gold": { "hexValue": "#f5c891" }, 3206 "midnight": { "hexValue": "#2b445c" }, 3207 "starlight": { "hexValue": "#fbf3d8" }, 3208 "pink": { "hexValue": "#f0d3d8" }, 3209 "purple": { "hexValue": "#bdafcf" }, 3210 "orange": { "hexValue": "#fbb254" }, 3211 "yellow": { "hexValue": "#ffe574" }, 3212 "graphite": { "hexValue": "#515151" }, 3213 "white": { "hexValue": "#ffffff" }, 3214 "sky-blue": { "hexValue": "#8eb8d5" }, 3215 "titanium": { "hexValue": "#dadabf" }, 3216 "white-ocean-band": { "hexValue": "#f5f5f5" }, 3217 "yellow-ocean-band": { "hexValue": "#ffe574" }, 3218 "midnight-ocean-band": { "hexValue": "#293f54" }, 3219 "orange-alpine-loop": { "hexValue": "#fa6c36" }, 3220 "green-alpine-loop": { "hexValue": "#465c48" }, 3221 "starlight-alpine-loop": { "hexValue": "#ece5d0" }, 3222 "yellow-beige-trail-loop": { "hexValue": "#e8dac2" }, 3223 "blue-gray-trail-loop": { "hexValue": "#797b7c" }, 3224 "black-gray-trail-loop": { "hexValue": "#433535" }, 3225 "starlight-starlight-band": { "hexValue": "#efe9d6" }, 3226 "space-gray-midnight-band": { "hexValue": "#293f54" }, 3227 "space-gray-tornado-gray-loop": { "hexValue": "#675b5b" }, 3228 "space-gray-black-band": { "hexValue": "#333232" }, 3229 "space-gray-charcoal-loop": { "hexValue": "#3c3b3b" }, 3230 "silver-blue-abyss-band": { "hexValue": "#e2e0e0" }, 3231 "silver-abyss-blue-moss-green-loop": { "hexValue": "#2f4581" }, 3232 "silver-white-band": { "hexValue": "#e7e7e7" }, 3233 "red-red-band": { "hexValue": "#e53333" }, 3234 "midnight-midnight-band": { "hexValue": "#293f54" }, 3235 "green-clover-band": { "hexValue": "#529159" }, 3236 "gold-starlight-band": { "hexValue": "#efe9d6" }, 3237 "gold-maize-white-loop": { "hexValue": "#ffcd83" }, 3238 "gold-pink-band": { "hexValue": "#ffd7b5" }, 3239 "blue-abyss-blue-band": { "hexValue": "#2e71a1" }, 3240 "black-titanium": { "hexValue": "#515050" }, 3241 "white-titanium": { "hexValue": "#f5f5f5" }, 3242 "blue-titanium": { "hexValue": "#4f597e" }, 3243 "natural-titanium": { "hexValue": "#cec4bd" }, 3244 "starlight-starlight-loop": { "hexValue": "#efe9d6" }, 3245 "silver-winter-blue-loop": { "hexValue": "#8eb8d5" }, 3246 "silver-storm-blue-band": { "hexValue": "#4179a1" }, 3247 "midnight-midnight-loop": { "hexValue": "#293f54" }, 3248 "pink-light-pink-band": { "hexValue": "#fadbdb" }, 3249 "pink-light-pink-loop": { "hexValue": "#fadbdb" }, 3250 "orange-ocean-band": { "hexValue": "#fb9754" }, 3251 "blue-ocean-band": { "hexValue": "#4179a1" }, 3252 "olive-alpine-loop": { "hexValue": "#817544" }, 3253 "indigo-alpine-loop": { "hexValue": "#4c3c5c" }, 3254 "blue-alpine-loop": { "hexValue": "#2d5370" }, 3255 "orange-beige-trail-loop": { "hexValue": "#ff9538" }, 3256 "green-gray-trail-loop": { "hexValue": "#617153" }, 3257 "black-blue-trail-loop": { "hexValue": "#3c5271" }, 3258 "space-black": { "hexValue": "#696969" }, 3259 "black-ocean-band": { "hexValue": "#000000" }, 3260 "navy-ocean-band": { "hexValue": "#4b5b64" }, 3261 "dark-green-alpine-loop": { "hexValue": "#245629" }, 3262 "tan-alpine-loop": { "hexValue": "#ac9a73" }, 3263 "black-trail-loop": { "hexValue": "#000000" }, 3264 "rose-gold-plum-loop": { "hexValue": "#935b8e" }, 3265 "rose-gold-light-blush-band": { "hexValue": "#f6efec" }, 3266 "jet-black-ink-loop": { "hexValue": "#3d3d3d" }, 3267 "jet-black-black-band": { "hexValue": "#393939" }, 3268 "blue-trail-loop": { "hexValue": "#3c5271" }, 3269 "silver-purple-fog-band": { "hexValue": "#d1c0da" }, 3270 "anchor-blue-ocean-band": { "hexValue": "#9ab1bf" }, 3271 "bright-blue-trail-loop": { "hexValue": "#95b4ea" }, 3272 "light-blue-alpine-loop": { "hexValue": "#84c8d6" }, 3273 "black-alpine-loop": { "hexValue": "#454444" }, 3274 "black-charcoal-trail-loop": { "hexValue": "#3d3b3b" }, 3275 "natural-milanese-loop": { "hexValue": "#d4ce9e" }, 3276 "black-milanese-loop": { "hexValue": "#4d4c4c" }, 3277 "indigo": { "hexValue": "#646E84" }, 3278 "citrus": { "hexValue": "#dddc96"}, 3279 "blush": { "hexValue": "#e5d5d3"}, 3280 "no band": { "hexValue": "#f2f0ef"} 3281 3282} 3283</script>
3283 3284
3285<script> 3286 //Grab our metafield data. Pass through to window.Resources for SS react. Format as needed 3287 let initialFilterObject = JSON.parse('{"0":{"filterField":"mfield_cql_parent_product","filterValue":"false"},"1":{"filterField":"product_type","filterValue":"iPad Pro"},"2":{"filterField":"mfield_hidden_group_4","filterValue":"true"},"3":{"filterField":"ss_available","filterValue":"1"},"4":{"filterField":"mfield_cql_case_size","filterValue":"11-inch"}}'); 3288 3289 let filterOrder = false; 3290 3291 filterOrder = JSON.parse('{"mfield_cql_color":{"1":"Space Black","2":"Silver"},"mfield_custom_cosmetics":{"1":"New - Sealed in Box","2":"Open Box - Like New","3":"Grade A - Excellent","4":"Grade B - Fair"},"mfield_cql_storage":{"1":"128GB storage","2":"256GB storage","3":"512GB storage","4":"1TB storage","5":"2TB storage"},"mfield_custom_connectivity":{"1":"Wi-Fi","2":"Wi-Fi + Cellular"}}'); 3292 3293 3294 let preSelectedOption = false; 3295 3296 3297 //Set metafield data to corresponding window.Resources object(s) 3298 window.Resources = window.Resources || {}; 3299 window.Resources.currentPageTitle = `iPad Pro 11-inch M5`; 3300 window.Resources.learnMoreText = ""; 3301 window.Resources.filterOrder = filterOrder; 3302 window.Resources.preSelectedOption = preSelectedOption; 3303 window.Resources.initialFilterObject = initialFilterObject; 3304 3305 console.log("==>>> window.Resources :", window.Resources); 3306</script>
3306 3307 3308<div class="custom-product-container"> 3309 <div class="custom-product-wrapper page-width"> 3310 <div class="custom-product-images-gallery"> 3311 <style> 3312 .product-images-gallery { 3313 display: block; 3314 overflow: hidden; 3315 width: 100%; 3316 margin: 0 auto; 3317 position: sticky; 3318 top: 110px; 3319 } 3320 .product-images-gallery .swiper-wrapper { 3321 align-items: stretch; 3322 } 3323 .product-images-gallery .swiper-slide { 3324 width: 100%; 3325 max-width: 100%; 3326 } 3327 .product-images-gallery .swiper-zoom-container { 3328 width: 100%; 3329 height: 100%; 3330 } 3331 .product-images-gallery .swiper-zoom-container img, 3332 .product-images-gallery .swiper-zoom-container video { 3333 width: 100%; 3334 height: 100%; 3335 object-fit: cover; 3336 cursor: pointer; 3337 aspect-ratio: 800 / 760; 3338 background-color: #ffffff; 3339 border-radius: 30px; 3340 } 3341 .product-images-gallery__footer { 3342 display: flex; 3343 align-items: center; 3344 justify-content: space-between; 3345 padding: 24px 0 72px; 3346 } 3347 .product-images-gallery .swiper-pagination { 3348 display: flex !important; 3349 align-items: center; 3350 justify-content: center; 3351 gap: 8px; 3352 background: #ffffff; 3353 width: fit-content !important; 3354 height: 28px; 3355 padding: 9px 13px; 3356 border-radius: 100px; 3357 position: static !important; 3358 z-index: 1; 3359 } 3360 .product-images-gallery .swiper-pagination-bullet { 3361 width: 5px; 3362 height: 5px; 3363 background: #98b4d4; 3364 opacity: 1; 3365 border-radius: 100px; 3366 margin: 0 !important; 3367 transition: all 0.25s ease; 3368 } 3369 .product-images-gallery .swiper-pagination-bullet-active { 3370 width: 10px; 3371 height: 10px; 3372 background: #1d7f9a; 3373 } 3374 .product-images-gallery__arrow { 3375 display: flex; 3376 align-items: center; 3377 justify-content: center; 3378 width: 40px; 3379 height: 40px; 3380 border-radius: 100px; 3381 background: #ffffff; 3382 cursor: pointer; 3383 border: none; 3384 flex-shrink: 0; 3385 } 3386 3387 .product-images-gallery__arrow--prev svg { 3388 transform: scaleX(-1); 3389 } 3390 @media (max-width: 768px) { 3391 .product-images-gallery .swiper-zoom-container img, 3392 .product-images-gallery .swiper-zoom-container video { 3393 aspect-ratio: 357 / 338.59; 3394 } 3395 .product-images-gallery__footer { 3396 padding: 24px 0 0; 3397 } 3398 } 3399</style> 3400<!-- Left Side: Product Images and Videos --> 3401 3402<div class="product-images-gallery"> 3403 <div class="swiper-wrapper"> 3404 3405 <div id="product-media--34900660256937" class="swiper-slide" data-media-type="image"> 3406 <div class="swiper-zoom-container"> 3407 3408 <img src="//ipowerresale.com/cdn/shop/files/media_cafccf73-53e7-4608-a7f4-863a08925a0c.png?v=1766104668&width=1600" alt="iPad Pro 11-inch M5" width="1600" height="1520"> 3409 3410 </div> 3411 </div> 3412 3413 <div id="product-media--34900660289705" class="swiper-slide" data-media-type="image"> 3414 <div class="swiper-zoom-container"> 3415 3416 <img src="//ipowerresale.com/cdn/shop/files/media_a6b05452-6fc6-4456-b536-0b9f1b5ed8af.png?v=1766104669&width=1600" alt="iPad Pro 11-inch M5" width="1600" height="1520"> 3417 3418 </div> 3419 </div> 3420 3421 <div id="product-media--34900660322473" class="swiper-slide" data-media-type="image"> 3422 <div class="swiper-zoom-container"> 3423 3424 <img src="//ipowerresale.com/cdn/shop/files/media_d29247e0-3007-4e27-8518-9d8ebacc9308.png?v=1766104669&width=1600" alt="iPad Pro 11-inch M5" width="1600" height="1520"> 3425 3426 </div> 3427 </div> 3428 3429 </div> 3430 3431 <div class="product-images-gallery__footer"> 3432 <button 3433 class="product-images-gallery__arrow product-images-gallery__arrow--prev product-images-gallery__prev--template--23893840003241__custom_product_yw7rBH" 3434 aria-label="Previous slide" 3435 > 3436 <svg xmlns="http://www.w3.org/2000/svg" width="15" height="8" viewBox="0 0 15 8" fill="none"> 3437 <path d="M14.3536 4.03568C14.5488 3.84042 14.5488 3.52384 14.3536 3.32858L11.1716 0.146595C10.9763 -0.0486672 10.6597 -0.0486672 10.4645 0.146595C10.2692 0.341857 10.2692 0.65844 10.4645 0.853702L13.2929 3.68213L10.4645 6.51056C10.2692 6.70582 10.2692 7.0224 10.4645 7.21766C10.6597 7.41293 10.9763 7.41293 11.1716 7.21766L14.3536 4.03568ZM0 3.68213V4.18213H14V3.68213V3.18213H0V3.68213Z" fill="#171717"/> 3438 </svg> 3439 </button> 3440 3441 <div 3442 class="swiper-pagination product-images-gallery__pagination product-images-gallery__pagination--template--23893840003241__custom_product_yw7rBH" 3443 ></div> 3444 3445 <button 3446 class="product-images-gallery__arrow product-images-gallery__arrow--next product-images-gallery__next--template--23893840003241__custom_product_yw7rBH" 3447 aria-label="Next slide" 3448 > 3449 <svg xmlns="http://www.w3.org/2000/svg" width="15" height="8" viewBox="0 0 15 8" fill="none"> 3450 <path d="M14.3536 4.03568C14.5488 3.84042 14.5488 3.52384 14.3536 3.32858L11.1716 0.146595C10.9763 -0.0486672 10.6597 -0.0486672 10.4645 0.146595C10.2692 0.341857 10.2692 0.65844 10.4645 0.853702L13.2929 3.68213L10.4645 6.51056C10.2692 6.70582 10.2692 7.0224 10.4645 7.21766C10.6597 7.41293 10.9763 7.41293 11.1716 7.21766L14.3536 4.03568ZM0 3.68213V4.18213H14V3.68213V3.18213H0V3.68213Z" fill="#171717"/> 3451 </svg> 3452 </button> 3453 </div> 3454 3455</div> 3456 3457<div id="image-modal-gallery" class="image-modal" style="display: none;"> 3458 <div class="modal-backdrop"></div> 3459 <div class="modal-content"> 3460 <button class="modal-close" aria-label="Close modal"> 3461 <svg width="18" height="19" viewBox="0 0 25 26" fill="none" xmlns="http://www.w3.org/2000/svg"> 3462 <path d="M1 23.7963L23.0617 1.73457" stroke="#010101" stroke-width="2" stroke-linecap="round"/> 3463 <path d="M1.00708 2.2037L23.0688 24.2654" stroke="#010101" stroke-width="2" stroke-linecap="round"/> 3464 </svg> 3465 </button> 3466 <button class="modal-nav modal-prev" aria-label="Previous image"> 3467 <svg width="44" height="44" viewBox="0 0 44 44" fill="#F4F3ED" xmlns="http://www.w3.org/2000/svg"> 3468 <circle cx="22" cy="22.0083" r="21.375" transform="rotate(180 22 22.0083)" stroke="#1A1B1A" stroke-width="1.25"/> 3469 <path d="M26 31.0083L16 21.675L26 13.0083" stroke="#1A1B1A" stroke-width="1.25"/> 3470 </svg> 3471 </button> 3472 <button class="modal-nav modal-next" aria-label="Next image"> 3473 <svg width="44" height="44" viewBox="0 0 44 44" fill="#F4F3ED" xmlns="http://www.w3.org/2000/svg"> 3474 <circle cx="22" cy="22.0083" r="21.375" stroke="#1A1B1A" stroke-width="1.25"/> 3475 <path d="M18 13.0083L28 22.3416L18 31.0083" stroke="#1A1B1A" stroke-width="1.25"/> 3476 </svg> 3477 </button> 3478 <div class="modal-image-container"> 3479 <img class="modal-image" src="" alt="" loading="lazy" width="1" height="1" style="display: none;"> 3480 <video class="modal-video" style="display: none;" controls muted playsinline></video> 3481 <div class="modal-external-video" style="display: none;"></div> 3482 </div> 3483 </div> 3484</div> 3485 3486<style> 3487 .image-modal { 3488 position: fixed; 3489 top: 0; 3490 left: 0; 3491 width: 100%; 3492 height: 100%; 3493 z-index: 9999; 3494 display: flex; 3495 align-items: center; 3496 justify-content: center; 3497 opacity: 0; 3498 animation: fadeIn 0.3s ease-in-out forwards; 3499 padding: 20px 0; 3500 } 3501 3502 @keyframes fadeIn { 3503 to { 3504 opacity: 1; 3505 } 3506 } 3507 3508 .modal-backdrop { 3509 position: absolute; 3510 top: 0; 3511 left: 0; 3512 width: 100%; 3513 height: 100%; 3514 background: rgb(0 0 0 / 72%); 3515 z-index: 1; 3516 } 3517 3518 .modal-content { 3519 position: relative; 3520 z-index: 2; 3521 display: flex; 3522 flex-direction: column; 3523 align-items: center; 3524 } 3525 3526 .modal-image-container { 3527 position: relative; 3528 display: flex; 3529 align-items: center; 3530 justify-content: center; 3531 max-width: 100%; 3532 } 3533 3534 .modal-image, 3535 .modal-video { 3536 max-width: 667px; 3537 width: 100%; 3538 max-height: calc(100vh - 100px); 3539 object-fit: contain; 3540 border-radius: 8px; 3541 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); 3542 background: #fff; 3543 } 3544 .modal-external-video { 3545 max-width: 667px; 3546 width: 100%; 3547 max-height: calc(100vh - 100px); 3548 border-radius: 8px; 3549 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); 3550 background: #fff; 3551 position: relative; 3552 padding-bottom: 56.25%; 3553 height: 0; 3554 overflow: hidden; 3555 } 3556 .modal-external-video iframe { 3557 position: absolute; 3558 top: 0; 3559 left: 0; 3560 width: 100%; 3561 height: 100%; 3562 border: none; 3563 border-radius: 8px; 3564 } 3565 3566 .modal-close { 3567 position: absolute; 3568 top: -50px; 3569 right: -20px; 3570 background: #f4f3ed; 3571 border: none; 3572 border-radius: 50%; 3573 cursor: pointer; 3574 z-index: 3; 3575 display: flex; 3576 align-items: center; 3577 justify-content: center; 3578 transition: background 0.2s ease; 3579 padding: 10px; 3580 } 3581
3582 .modal-close:hover { 3583 background: #f4f3ed; 3584 } 3585 3586 .modal-nav { 3587 position: absolute; 3588 top: 50%; 3589 transform: translateY(-50%); 3590 border: none; 3591 border-radius: 50%; 3592 width: 50px; 3593 height: 50px; 3594 font-size: 28px; 3595 font-weight: bold; 3596 cursor: pointer; 3597 z-index: 3; 3598 display: flex; 3599 align-items: center; 3600 justify-content: center; 3601 transition: background 0.2s ease; 3602 background: transparent; 3603 } 3604 3605 .modal-prev { 3606 left: -70px; 3607 } 3608 3609 .modal-next { 3610 right: -70px; 3611 } 3612 3613 @media (max-width: 768px) { 3614 .modal-image { 3615 max-width: 85%; 3616 } 3617 .modal-image-container img, 3618 .modal-image-container video, 3619 .modal-content { 3620 max-height: 95%; 3621 } 3622 3623 .modal-close { 3624 right: 15px; 3625 } 3626 3627 .modal-prev { 3628 left: 0px; 3629 bottom: -100px; 3630 top: unset; 3631 } 3632 3633 .modal-next { 3634 right: 0px; 3635 bottom: -100px; 3636 top: unset; 3637 } 3638 } 3639 3640 .modal-nav[style*='display: none'] { 3641 display: none !important; 3642 } 3643</style> 3644
3645<script> 3646 (function () { 3647 function initImageModal() { 3648 const modalId = 'image-modal-gallery'; 3649 const modal = document.getElementById(modalId); 3650 3651 if (!modal) { 3652 setTimeout(initImageModal, 100); 3653 return; 3654 } 3655 3656 const modalImage = modal.querySelector('.modal-image'); 3657 const modalVideo = modal.querySelector('.modal-video'); 3658 const modalExternalVideo = modal.querySelector('.modal-external-video'); 3659 const modalClose = modal.querySelector('.modal-close'); 3660 const modalBackdrop = modal.querySelector('.modal-backdrop'); 3661 const modalPrev = modal.querySelector('.modal-prev'); 3662 const modalNext = modal.querySelector('.modal-next'); 3663 3664 let currentImageIndex = 0; 3665 let imageData = []; 3666 3667 function collectImageData() { 3668 imageData = []; 3669 const seenMedia = new Set(); 3670 const slides = document.querySelectorAll('.product-images-gallery .swiper-slide'); 3671 3672 slides.forEach(function (slide, index) { 3673 const img = slide.querySelector('img'); 3674 const video = slide.querySelector('video'); 3675 const externalVideo = slide.querySelector('.product-gallery-external-video'); 3676 3677 if (video) { 3678 const videoId = slide.id; 3679 const poster = video.getAttribute('poster') || ''; 3680 const sources = Array.from(video.querySelectorAll('source')).map(function (s) { 3681 return { url: s.src, type: s.type }; 3682 }); 3683 3684 imageData.push({ 3685 type: 'video', 3686 id: videoId, 3687 poster: poster, 3688 sources: sources, 3689 alt: video.alt || 'Product video', 3690 index: imageData.length, 3691 }); 3692 } else if (externalVideo) { 3693 const videoType = externalVideo.getAttribute('data-video-type'); 3694 const videoId = externalVideo.getAttribute('data-video-id'); 3695 const posterImg = externalVideo.querySelector('img'); 3696 const poster = posterImg ? posterImg.src : ''; 3697 3698 imageData.push({ 3699 type: 'external_video', 3700 videoType: videoType, 3701 videoId: videoId, 3702 poster: poster, 3703 alt: posterImg ? posterImg.alt || 'Product video' : 'Product video', 3704 index: imageData.length, 3705 }); 3706 } else if (img) { 3707 let imageSrc = img.src; 3708 const baseSrc = imageSrc.split('?')[0].replace(/_\d+x\d+\./, '_'); 3709 3710 if (!seenMedia.has(baseSrc)) { 3711 seenMedia.add(baseSrc); 3712 3713 if (imageSrc.includes('_') && imageSrc.match(/_\d+x\d+\./)) { 3714 imageSrc = imageSrc.replace(/_\d+x\d+\./, '_2048x2048.'); 3715 } else if (imageSrc.includes('/products/')) { 3716 imageSrc = imageSrc.replace(/(\.jpg|\.jpeg|\.png|\.webp)(\?|$)/i, '_2048x2048$1$2'); 3717 } 3718 3719 imageData.push({ 3720 type: 'image', 3721 src: imageSrc, 3722 alt: img.alt || 'Product image', 3723 index: imageData.length, 3724 }); 3725 } 3726 } 3727 }); 3728 } 3729 3730 function openModal(index) { 3731 collectImageData(); 3732 3733 if (imageData.length === 0) { 3734 return; 3735 } 3736 3737 if (index < 0) index = 0; 3738 if (index >= imageData.length) index = imageData.length - 1; 3739 3740 currentImageIndex = index; 3741 updateModalImage(); 3742 modal.style.display = 'flex'; 3743 document.body.style.overflow = 'hidden'; 3744 } 3745 3746 function closeModal() { 3747 modal.style.display = 'none'; 3748 document.body.style.overflow = ''; 3749 3750 if (modalVideo) { 3751 modalVideo.pause(); 3752 } 3753 if (modalExternalVideo) { 3754 modalExternalVideo.innerHTML = ''; 3755 } 3756 } 3757 3758 function updateModalImage() { 3759 if (imageData[currentImageIndex]) { 3760 const media = imageData[currentImageIndex]; 3761 3762 if (modalImage) modalImage.style.display = 'none'; 3763 if (modalVideo) modalVideo.style.display = 'none'; 3764 if (modalExternalVideo) modalExternalVideo.style.display = 'none'; 3765 3766 if (modalVideo) { 3767 modalVideo.pause(); 3768 modalVideo.currentTime = 0; 3769 const sources = modalVideo.querySelectorAll('source');
3770 sources.forEach(function (s) { 3771 s.remove(); 3772 }); 3773 } 3774 if (modalExternalVideo) { 3775 modalExternalVideo.innerHTML = ''; 3776 } 3777 3778 if (media.type === 'video') { 3779 if (modalVideo && media.sources && media.sources.length > 0) { 3780 modalVideo.poster = media.poster || ''; 3781 modalVideo.muted = true; 3782 3783 media.sources.forEach(function (source) { 3784 const sourceEl = document.createElement('source'); 3785 sourceEl.src = source.url; 3786 sourceEl.type = source.type; 3787 modalVideo.appendChild(sourceEl); 3788 }); 3789 3790 modalVideo.style.display = 'block'; 3791 modalVideo.load(); 3792 3793 const playVideo = function () { 3794 modalVideo.play().catch(function (error) {}); 3795 }; 3796 3797 modalVideo.addEventListener('loadeddata', playVideo, { once: true }); 3798 modalVideo.addEventListener('canplay', playVideo, { once: true }); 3799 3800 setTimeout(function () { 3801 if (modalVideo.readyState >= 2) { 3802 playVideo(); 3803 } 3804 }, 200); 3805 } 3806 } else if (media.type === 'external_video') { 3807 if (modalExternalVideo) { 3808 let iframeSrc = ''; 3809 if (media.videoType === 'youtube') { 3810 iframeSrc = 'https://www.youtube.com/embed/' + media.videoId + '?autoplay=1&rel=0&modestbranding=1'; 3811 } else if (media.videoType === 'vimeo') { 3812 iframeSrc = 'https://player.vimeo.com/video/' + media.videoId + '?autoplay=1'; 3813 } 3814 if (iframeSrc) { 3815 const iframe = document.createElement('iframe'); 3816 iframe.src = iframeSrc; 3817 iframe.allow = 'autoplay; encrypted-media'; 3818 iframe.allowFullscreen = true; 3819 modalExternalVideo.appendChild(iframe); 3820 modalExternalVideo.style.display = 'block'; 3821 } 3822 } 3823 } else { 3824 if (modalImage) { 3825 modalImage.src = media.src; 3826 modalImage.alt = media.alt || 'Product image'; 3827 modalImage.style.display = 'block'; 3828 } 3829 } 3830 3831 if (modalPrev) { 3832 modalPrev.style.display = imageData.length === 1 || currentImageIndex === 0 ? 'none' : 'flex'; 3833 } 3834 if (modalNext) { 3835 modalNext.style.display = 3836 imageData.length === 1 || currentImageIndex === imageData.length - 1 ? 'none' : 'flex'; 3837 } 3838 } 3839 } 3840 3841 function prevImage() { 3842 if (currentImageIndex > 0) { 3843 currentImageIndex--; 3844 updateModalImage(); 3845 } 3846 } 3847 3848 function nextImage() { 3849 if (currentImageIndex < imageData.length - 1) { 3850 currentImageIndex++; 3851 updateModalImage(); 3852 } 3853 } 3854 3855 function handleImageClick(e) { 3856 if (e.target.closest('.swiper-pagination')) { 3857 return; 3858 } 3859 3860 const clickedElement = e.target; 3861 let mediaContainer = null; 3862 let clickedIndex = -1; 3863 3864 if (clickedElement.tagName === 'VIDEO' || clickedElement.closest('video')) { 3865 const video = clickedElement.tagName === 'VIDEO' ? clickedElement : clickedElement.closest('video'); 3866 mediaContainer = video.closest('.swiper-slide'); 3867 } else if (clickedElement.tagName === 'IMG' || clickedElement.closest('img')) { 3868 const img = clickedElement.tagName === 'IMG' ? clickedElement : clickedElement.closest('img'); 3869 mediaContainer = img.closest('.swiper-slide'); 3870 } else { 3871 mediaContainer = clickedElement.closest('.swiper-slide'); 3872 } 3873 3874 if (!mediaContainer) return; 3875 3876 collectImageData(); 3877 3878 const containerId = mediaContainer.id; 3879 imageData.forEach(function (item, index) { 3880 if (item.id === containerId) { 3881 clickedIndex = index; 3882 } 3883 }); 3884 3885 if (clickedIndex === -1) { 3886 const slides = document.querySelectorAll('.product-images-gallery .swiper-slide');
3887 slides.forEach(function (slide, index) { 3888 if (slide === mediaContainer) { 3889 clickedIndex = index; 3890 } 3891 }); 3892 } 3893 3894 if (clickedIndex !== -1) { 3895 e.preventDefault(); 3896 e.stopPropagation(); 3897 openModal(clickedIndex); 3898 return false; 3899 } 3900 } 3901 3902 collectImageData(); 3903 3904 const gallery = document.querySelector('.product-images-gallery'); 3905 if (gallery) { 3906 gallery.addEventListener('click', handleImageClick); 3907 } 3908 3909 if (modalClose) { 3910 modalClose.addEventListener('click', closeModal); 3911 } 3912 3913 if (modalBackdrop) { 3914 modalBackdrop.addEventListener('click', closeModal); 3915 } 3916 3917 if (modalPrev) { 3918 modalPrev.addEventListener('click', prevImage); 3919 } 3920 3921 if (modalNext) { 3922 modalNext.addEventListener('click', nextImage); 3923 } 3924 3925 document.addEventListener('keydown', function (e) { 3926 if (modal.style.display === 'flex') { 3927 switch (e.key) { 3928 case 'Escape': 3929 closeModal(); 3930 break; 3931 case 'ArrowLeft': 3932 prevImage(); 3933 break; 3934 case 'ArrowRight': 3935 nextImage(); 3936 break; 3937 } 3938 } 3939 }); 3940 3941 let startX = 0; 3942 let endX = 0; 3943 3944 if (modalImage) { 3945 modalImage.addEventListener('touchstart', function (e) { 3946 startX = e.touches[0].clientX; 3947 }); 3948 3949 modalImage.addEventListener('touchend', function (e) { 3950 endX = e.changedTouches[0].clientX; 3951 handleSwipe(); 3952 }); 3953 } 3954 3955 function handleSwipe() { 3956 const swipeThreshold = 50; 3957 const diff = startX - endX; 3958 3959 if (Math.abs(diff) > swipeThreshold) { 3960 if (diff > 0) { 3961 nextImage(); 3962 } else { 3963 prevImage(); 3964 } 3965 } 3966 } 3967 3968 window.openGalleryModal = function (imageIndex) { 3969 openModal(imageIndex); 3970 }; 3971 } 3972 3973 if (document.readyState === 'loading') { 3974 document.addEventListener('DOMContentLoaded', initImageModal); 3975 } else { 3976 initImageModal(); 3977 } 3978 3979 function initSwiper() { 3980 if (typeof Swiper === 'undefined') { 3981 setTimeout(initSwiper, 100); 3982 return; 3983 } 3984 3985 const gallery = document.querySelector('.product-images-gallery'); 3986 if (gallery) { 3987 const autoplaySpeed = 3000; 3988 const clickSpeed = 500; 3989 3990 new Swiper('.product-images-gallery', { 3991 slidesPerView: 1, 3992 spaceBetween: 18, 3993 zoom: true, 3994 loop: true, 3995 autoplay: { 3996 disableOnInteraction: false, 3997 }, 3998 speed: autoplaySpeed, 3999 pagination: { 4000 el: '.product-images-gallery .swiper-pagination', 4001 clickable: true, 4002 }, 4003 navigation: { 4004 prevEl: '.product-images-gallery__prev--template--23893840003241__custom_product_yw7rBH', 4005 nextEl: '.product-images-gallery__next--template--23893840003241__custom_product_yw7rBH', 4006 }, 4007 on: { 4008 beforeTransitionStart: function (swiper, speed, internal) { 4009 const targetSpeed = internal ? autoplaySpeed : clickSpeed; 4010 swiper.params.speed = targetSpeed; 4011 swiper.setTransition(targetSpeed); 4012 }, 4013 }, 4014 }); 4015 } 4016 } 4017 4018 if (document.readyState === 'loading') { 4019 document.addEventListener('DOMContentLoaded', initSwiper); 4020 } else { 4021 initSwiper(); 4022 } 4023 })(); 4024</script>
4024 4025 4026 </div> 4027 4028 <div class="custom-product-content-wrapper"> 4029 <div class="custom-product-content-wrapper-header"> 4030 4031 <style> 4032 .breadcrumbs { 4033 margin-bottom: 18px; 4034 } 4035 .breadcrumbs__list { 4036 list-style-type: none; 4037 margin: 0; 4038 padding: 0; 4039 } 4040 4041 .breadcrumbs__item { 4042 display: inline-block; 4043 margin-bottom: 0; 4044 } 4045 4046 .breadcrumbs__link { 4047 text-decoration: underline; 4048 text-underline-offset: 6px; 4049 text-decoration-thickness: 3px; 4050 text-decoration-color: #1dacd6; 4051 font-family: 'Inter-Medium'; 4052 font-weight: 500; 4053 font-size: 16px; 4054 line-height: 18px; 4055 letter-spacing: -0.32px; 4056 color: #222222 !important; 4057 } 4058 4059 .breadcrumbs__link[aria-current='page'] { 4060 color: inherit; 4061 font-weight: 500; 4062 text-decoration: underline; 4063 text-underline-offset: 3px; 4064 text-decoration-thickness: 3px; 4065 text-decoration-color: #1dacd6; 4066 } 4067 .breadcrumbs__current { 4068 text-decoration: underline; 4069 text-underline-offset: 6px; 4070 text-decoration-thickness: 3px; 4071 text-decoration-color: #1dacd6; 4072 } 4073 4074 .breadcrumbs__current { 4075 color: #222222; 4076 line-height: 18px; 4077 font-size: 16px; 4078 letter-spacing: -0.02em; 4079 font-weight: 500; 4080 font-family: 'Inter-Medium'; 4081 } 4082 .breadcrumb-divider { 4083 margin-right: 8px; 4084 margin-left: 8px; 4085 } 4086 .breadcrumbs__link[aria-current='page']:hover, 4087 .breadcrumbs__link[aria-current='page']:focus { 4088 text-decoration: underline; 4089 } 4090 4091 @media (max-width: 768px) { 4092 .breadcrumbs__item { 4093 margin-bottom: 12px; 4094 } 4095 } 4096</style><nav class="breadcrumbs" role="navigation" aria-label="breadcrumbs"> 4097 <ol class="breadcrumbs__list"> 4098 <li class="breadcrumbs__item"> 4099 <a class="breadcrumbs__link" href="/">Home</a> 4100 <span class="breadcrumb-divider">/ </span> 4101 </li><li class="breadcrumbs__item" id="collection"></li> 4102 <li class="breadcrumbs__item"> 4103 <span class="breadcrumbs__current" aria-current="page">iPad Pro 11-inch M5</span> 4104 </li></ol> 4105 </nav>
4105<script> 4106 const collectionBreadcrumb = document.getElementById('collection'); 4107 const docRefferer = document.referrer; 4108 4109 if (docRefferer) { 4110 try { 4111 const referrerUrl = new URL(docRefferer); 4112 const linkDomain = referrerUrl.hostname; 4113 const currentDomain = window.location.hostname; 4114 4115 if (linkDomain === currentDomain) { 4116 const linkPath = referrerUrl.pathname; 4117 const searchParams = referrerUrl.searchParams; 4118 // Priority 2: If no filter and path is /collections/all, show "View All" 4119 if (linkPath === '/collections/all') { 4120 collectionBreadcrumb.innerHTML += `<a class="breadcrumbs__link" href='/collections/all'>All Products</a> 4121 <span class="breadcrumb-divider">/</span>`; 4122 } 4123 // Priority 3: Other collections - fetch JSON 4124 else if (linkPath.includes('/collections/')) { 4125 const collectionUrl = docRefferer.includes('?') ? docRefferer.split('?')[0] : docRefferer; 4126 fetch(`${collectionUrl}.json`) 4127 .then((res) => res.json()) 4128 .then((data) => { 4129 if (data.collection && data.collection.title) { 4130 collectionBreadcrumb.innerHTML += `<a class="breadcrumbs__link" href='${docRefferer}'>${data.collection.title}</a> 4131 <span class="breadcrumb-divider">/</span>`; 4132 } 4133 }) 4134 .catch((err) => console.error('Error fetching collection:', err)); 4135 } 4136 } 4137 } catch (e) { 4138 console.error('Error parsing referrer URL:', e); 4139 } 4140 } 4141</script>
4141 4142 4143 4144 4145 <h1 class="custom-product-title">iPad Pro 11-inch M5</h1> 4146 4147 4148 4149 <p class="custom-product-price"><span class="custom-product-price-label">Starting at</span> $979.00</p> 4150 4151 4152 4153 4154 <div class="product-config__detail-list"> 4155 <!-- Split by :: delimeter --> 4156 4157 <ul> 4158 4159 <li class="product-config__detail">11" Ultra Retina XDR display with True Tone</li> 4160 4161 <li class="product-config__detail">Apple M5 chip</li> 4162 4163 <li class="product-config__detail">Face ID security</li> 4164 4165 <li class="product-config__detail">Apple Pencil Pro support</li> 4166 4167 <li class="product-config__detail">12MP Ultra Wide front camera</li> 4168 4169 <li class="product-config__detail">12MP Wide 4K capable rear camera</li> 4170 4171 </ul> 4172 </div> 4173 4174 4175 4176 </div> 4177 <div class="custom-product-content-wrapper-inner"> 4178 <div id="klaviyo-custom-rating" class="product-rating"> 4179 <span class="rating-loader"></span> 4180 </div> 4181 4182 4183<div 4184 id="warranty-modal-warranty_modal_Dt8Edm" 4185 class="warranty-modal" 4186 role="dialog" 4187 aria-modal="true" 4188 aria-labelledby="warranty-modal-title-warranty_modal_Dt8Edm" 4189 aria-hidden="true" 4190 hidden 4191 4192 > 4193 <div class="warranty-modal__backdrop" data-warranty-modal-close tabindex="-1"></div> 4194 <div class="warranty-modal__panel"> 4195 <button 4196 type="button" 4197 class="warranty-modal__close" 4198 data-warranty-modal-close 4199 aria-label="Close" 4200 > 4201 <span aria-hidden="true">×</span> 4202 </button> 4203 4204 <h2 id="warranty-modal-title-warranty_modal_Dt8Edm" class="warranty-modal__title"> 4205 Extended Warranty Add-Ons 4206 </h2> 4207 4208 <div class="warranty-modal__intro"> 4209 <div class="warranty-modal__logo"><img 4210 src="//ipowerresale.com/cdn/shop/files/Frame_2.png?v=1774563868&width=160" 4211 alt="" 4212 width="80" 4213 height="80" 4214 loading="lazy" 4215 class="warranty-modal__logo-img" 4216 ></div> 4217 <div class="warranty-modal__description rte"> 4218 <p>iPowerResale guarantees the Apple-branded hardware product and Apple-branded accessories contained in the original packaging against defects in materials and workmanship when used normally (see <a href="#" title="#">Terms of Limited Warranty for more information</a>)</p> 4219 </div> 4220 </div><div class="warranty-modal__additional rte"> 4221 <p>Warranty does not cover</p><ul><li>Product that is oxidized/has liquid damage</li><li>Damage or failure arising out of an accident </li><li>One or several components of the products were manipulated by the buyer or by a third party not authorized by iPowerResale in connection with the defect for which the buyer seeks warranty coverage</li><li>Damage or failures arising out of a misuse, abuse, neglect, mishandling, misapplication, faulty installation, improper maintenance, or improper voltage supply<br/><br/></li></ul> 4222 </div><div class="warranty-modal__product-row"> 4223 <span class="warranty-modal__product-title">3-year Extended Warranty</span> 4224 <div class="warranty-modal__product-actions"> 4225 <span class="warranty-modal__product-price">$249.00</span> 4226 <label class="warranty-modal__checkbox-label" for="warranty-modal-check-warranty_modal_Dt8Edm"> 4227 <input 4228 type="checkbox" 4229 class="warranty-modal__checkbox" 4230 id="warranty-modal-check-warranty_modal_Dt8Edm" 4231 data-warranty-modal-checkbox 4232 4233 > 4234 <span class="warranty-modal__checkbox-ui" aria-hidden="true"></span> 4235 <span class="warranty-modal__visually-hidden">Select add-on</span> 4236 </label> 4237 </div> 4238 </div><div class="warranty-modal__footer"> 4239 <button type="button" class="warranty-modal__btn warranty-modal__btn--skip" data-warranty-modal-close> 4240 Skip for now 4241 </button> 4242 <button 4243 type="button" 4244 class="warranty-modal__btn warranty-modal__btn--primary" 4245 4246 data-warranty-modal-add 4247 data-variant-id="42954528719017" 4248 disabled 4249 4250 >Add to cart 4251</button> 4252 </div> 4253 </div> 4254 </div> 4255<div > 4256 4257
4257<script id="option-help-data" type="application/json"> 4258 {"custom_cosmetics": { 4259 "title": "Which is right for you?", 4260 "description": "\u003cp\u003eWe employ a letter grading system to assess the cosmetic condition of each of our machines. Our grading scale ranges from Open Box, which represents the highest quality, to C, indicating a slightly lower cosmetic condition.\u003c\/p\u003e\u003cp\u003e\u003cem\u003ePlease note: This grading system is ONLY describing the cosmetic condition of the machine â all of our machines are tested in-house by Apple-certified technicians and are guaranteed functional.\u003c\/em\u003e\u003c\/p\u003e", 4261 "images": [], 4262 "page_content": "\u003cdiv class=\"product__accordion accordion\" id=\"learnMoreAccordion\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003eAS-IS+\u003c\/summary\u003e\n\u003cdiv class=\"accordion__content rte accordion__delimiter\"\u003e\n\u003cp class=\"accordion__content__delimiter-item\"\u003eAn AS-IS+ device is brand-new, sealed from the manufacturer, in a plain white box. They are typically surplus or overstock devices meant for warranty replacements or wholesale markets, and come without the manufacturer's warranty. We still provide a full year of warranty.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"product__accordion accordion\" id=\"learnMoreAccordion\"\u003e\n\u003cdetails open=\"\"\u003e\n\u003csummary\u003eOpen Box\u003c\/summary\u003e\n\u003cdiv class=\"accordion__content rte accordion__delimiter\"\u003e\n\u003cp class=\"accordion__content__delimiter-item\"\u003eAn open box unit from iPowerResale is comparable to a 'mint condition' or 'like new' product. These devices are returned to the manufacturer or retailer for reasons such as buyer's remorse and then undergo extensive inspection and testing to ensure their functionality. With an open-box unit, customers should not expect to find any noticeable cosmetic blemishes. Please note that the item will come with OEM packaging though the packaging itself may show signs of distress.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"learn-more__accordion-img--wrap\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/Laptop_OB.jpg?v=1683673684\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/iPad_OB_1.jpg?v=1683673684\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/iPad_OB_2.jpg?v=1683673683\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/Watch_OB.jpg?v=1683673684\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/iPhone_OB_1.jpg?v=1683673684\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/iPhone_OB_2.jpg?v=1683673684\" class=\"learn-more__accordion-img\"\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"product__accordion accordion\" id=\"learnMoreAccordion\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003eGrade A - Excellent\u003c\/summary\u003e\n\u003cdiv class=\"accordion__content rte accordion__delimiter\"\u003e\n\u003cp class=\"accordion__content__delimiter-item\"\u003eA Grade A unit is generally considered 'very good' or 'like new.' Please note that this does not mean that a machine will come with OEM packaging. A Grade A cosmetic condition indicates that there may be very few and faint scratches or scuffs, if any. While a Grade A machine will not be flawless, you should not expect to find any significant, noticeable cosmetic blemishes.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"learn-more__accordion-img--wrap\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/Laptop_A.jpg?v=1683674094\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/iPad_A_1.jpg?v=1683674094\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/iPad_A_2.jpg?v=1683674094\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/Watch_A.jpg?v=1683674094\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/iPhone_A_1.jpg?v=1683674094\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/iPhone_A_2.jpg?v=1683674094\" class=\"learn-more__accordion-img\"\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"product__accordion accordion\" id=\"learnMoreAccordion\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003eGrade B - Fair\u003c\/summary\u003e\n\u003cdiv class=\"accordion__content rte accordion__delimiter\"\u003e\n\u003cp class=\"accordion__content__delimiter-item\"\u003eFor this cosmetic grade, cosmetic blemishes will be present and noticeable. These blemishes include scratches, scuffs, and nicks. Minor denting is possible, although this does not include large dents. Blemishes might occur more noticeably on areas that are not as often seen (such as the bottom of a laptop or desktop), but can be present on other areas of the machine. Keys may be slightly worn. A Grade B unit would be equivalent to a 'good' condition\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"learn-more__accordion-img--wrap\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/Laptop_B.jpg?v=1683674336\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/iPad_B_1.jpg?v=1683674336\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/iPad_B_2.jpg?v=1683674336\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/Watch_B.jpg?v=1683674336\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/iPhone_B_1.jpg?v=1683674336\" class=\"learn-more__accordion-img\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/iPhone_B_2.jpg?v=1683674336\" class=\"learn-more__accordion-img\"\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"learn-more__contact product__accordion accordion\" id=\"learnMoreAccordion\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003eHave a Question?\u003c\/summary\u003e\n\u003cdiv class=\"accordion__content rte accordion__delimiter\"\u003e\n\u003cp class=\"learn-more__contact-info accordion__content__delimiter-item\"\u003eOur group of dedicated Apple experts would be happy to help you with any questions. Our goal is to make buying an Apple as easy as possible for our customers.\u003c\/p\u003e\n\u003cp class=\"learn-more__contact-number accordion__content__delimiter-item\"\u003e1-805-745-8587\u003c\/p\u003e\n\u003cp class=\"learn-more__contact-dates accordion__content__delimiter-item\"\u003eMonday - Friday, 9am - 5pm PST.\u003c\/p\u003e\n\u003ca class=\"button button--primary\" href=\"\/pages\/contact\/\" target=\"_blank\"\u003eContact Us\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e" 4263 },"custom_cpu": { 4264 "title": "Which is right for you?", 4265 "description": "\u003cp\u003eHigher core counts are for users who need speed and power â video editors, developers, 3D designers, or gamers running intensive workloads.\u003c\/p\u003e\u003cp\u003eLower core counts are better for users who primarily browse, stream, email, and work with standard productivity tools.\u003c\/p\u003e", 4266 "images": [], 4267 "page_content": null 4268 },"cql_ram": { 4269 "title": "Which is right for you?", 4270 "description": "\u003cp\u003eLarger memory (RAM) is for users who multitask heavily, run demanding applications, or keep many browser tabs and creative tools open at once.\u003c\/p\u003e\u003cp\u003eSmaller memory (RAM) is better for users who focu
4270s on everyday tasks like browsing, streaming, and productivity apps without noticing slowdowns.\u003c\/p\u003e", 4271 "images": [], 4272 "page_content": null 4273 },"cql_storage": { 4274 "title": "Which is right for you?", 4275 "description": "\u003cp\u003eLarger storage is for users who work with large files â photos, videos, design projects, or games â and prefer keeping content stored locally.\u003c\/p\u003e\u003cp\u003eSmaller storage is better for users who mostly use cloud services and online storage. Check how much space you currently use and whether most of your content lives in the cloud before deciding.\u003c\/p\u003e", 4276 "images": [], 4277 "page_content": null 4278 },"custom_gpu": { 4279 "title": "Which is right for you?", 4280 "description": "\u003cp\u003eHigher core counts are for users who need speed and power â video editors, developers, 3D designers, or gamers running intensive workloads.\u003c\/p\u003e\u003cp\u003eLower core counts are better for users who primarily browse, stream, email, and work with standard productivity tools.\u003c\/p\u003e", 4281 "images": [], 4282 "page_content": null 4283 },"custom_connectivity": { 4284 "title": "Which is right for you?", 4285 "description": "", 4286 "images": [], 4287 "page_content": "\u003cdiv class=\"product__accordion accordion\" id=\"wirelessConnectivityAccordion\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWireless Connectivity (iPad)\u003c\/summary\u003e\n\u003cdiv class=\"accordion__content rte accordion__delimiter\"\u003e\n\u003cp class=\"accordion__content__delimiter-item\"\u003e\u003cstrong\u003eWiâFi + Cellular\u003c\/strong\u003e is for users who need reliable internet access everywhere â frequent travelers, commuters, or those working outside WiâFi networks.\u003c\/p\u003e\n\u003cp class=\"accordion__content__delimiter-item\"\u003e\u003cstrong\u003eWiâFi \u003c\/strong\u003eonly is better for users who mainly use their device at home, school, or the office, where WiâFi connections are always available.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"product__accordion accordion\" id=\"wirelessConnectivityAccordionWatch\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWireless Connectivity (Watch)\u003c\/summary\u003e\n\u003cdiv class=\"accordion__content rte accordion__delimiter\"\u003e\n\u003cp class=\"accordion__content__delimiter-item\"\u003e\u003cstrong\u003eGPS + Cellular\u003c\/strong\u003e is for users who want full freedom from their phone â you can take calls, stream music, and get messages even when your iPhone isnât with you. Perfect for runners, travelers, or anyone who likes to stay connected on the go.\u003c\/p\u003e\n\u003cp class=\"accordion__content__delimiter-item\"\u003e\u003cstrong\u003eGPS only\u003c\/strong\u003e is better for users who usually have their iPhone nearby. It offers all the same fitness and smart features while keeping things simple and more affordable.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e" 4288 }} 4289 </script>
4289 4290 4291 4292<div id="option-help-modal" class="ohm" role="dialog" aria-modal="true" style="display: none;"> 4293 <div class="ohm__backdrop" data-ohm-close> </div> 4294 <div class="ohm__container"> 4295 <button class="ohm__close" data-ohm-close aria-label="Close modal"> 4296 <svg xmlns="http://www.w3.org/2000/svg" width="8" height="9" viewBox="0 0 8 9" fill="none"> 4297 <path d="M1.54563 -0.000222206L3.63654 3.56796L5.72745 -0.000222206H7.2729L4.45472 4.36341L7.2729 8.72705H5.72745L3.63654 5.34069L1.54563 8.72705H0.000177562L2.7729 4.36341L0.000177562 -0.000222206H1.54563Z" fill="black"/> 4298 </svg> 4299 </button> 4300 <div class="ohm__content"> 4301 <h2 id="ohm-title" class="ohm__title"></h2> 4302 <div id="ohm-images" class="ohm__images-wrap" style="display:none;"></div> 4303 <div id="ohm-description" class="ohm__description"></div> 4304 <div id="ohm-page-content" class="ohm__page-content" style="display:none;"></div> 4305 </div> 4306 </div> 4307</div> 4308 4309<style> 4310 .ohm { 4311 position: fixed; 4312 top: 0; 4313 left: 0; 4314 right: 0; 4315 bottom: 0; 4316 z-index: 9999; 4317 display: flex; 4318 align-items: center; 4319 justify-content: center; 4320 padding: 20px; 4321 } 4322 .ohm__backdrop { 4323 position: absolute !important; 4324 top: 0; 4325 left: 0; 4326 right: 0; 4327 bottom: 0; 4328 background: #D9D9D9E5; 4329 backdrop-filter: blur(6px); 4330 -webkit-backdrop-filter: blur(6px); 4331 cursor: pointer; 4332 display: block !important; 4333 visibility: visible !important; 4334 opacity: 1 !important; 4335 font-size: 0; 4336 line-height: 0; 4337 } 4338 .ohm__container { 4339 position: relative; 4340 background: #fff; 4341 border-radius: 30px; 4342 max-width: 500px; 4343 width: 100%; 4344 max-height: 85vh; 4345 overflow: hidden; 4346 display: flex; 4347 flex-direction: column; 4348 animation: ohmSlideUp 0.25s ease; 4349 border: 1px solid #F5F5F5; 4350 } 4351 @keyframes ohmSlideUp { 4352 from { 4353 opacity: 0; 4354 transform: translateY(20px); 4355 } 4356 to { 4357 opacity: 1; 4358 transform: translateY(0); 4359 } 4360 } 4361 .ohm__close { 4362 position: absolute; 4363 top: 16px; 4364 right: 16px; 4365 background: transparent; 4366 border: none; 4367 padding: 8px; 4368 cursor: pointer; 4369 z-index: 10; 4370 color: #1d1d1f; 4371 transition: all 0.2s; 4372 border-radius: 50%; 4373 } 4374 .ohm__close:hover { 4375 background: #f5f5f7; 4376 } 4377 .ohm__content { 4378 overflow-y: auto; 4379 padding: 30px; 4380 } 4381 .ohm__title { 4382 font-size: 36px; 4383 font-weight: 400; 4384 line-height: 36px; 4385 letter-spacing: -0.03em; 4386 color: #000000; 4387 margin: 0 0 20px 0; 4388 padding-right: 32px; 4389 text-transform: none !important; 4390 } 4391 .ohm__images-wrap { 4392 display: flex; 4393 gap: 12px; 4394 margin-bottom: 20px; 4395 justify-content: center; 4396 flex-wrap: wrap; 4397 } 4398 .ohm__image { 4399 max-width: 30%; 4400 height: auto; 4401 display: block; 4402 border-radius: 12px; 4403 object-fit: contain; 4404 } 4405 .ohm__images-wrap .ohm__image:only-child { 4406 max-width: 30%; 4407 } 4408 .ohm__description { 4409 font-size: 16px; 4410 line-height: 1.65; 4411 color: #333; 4412 } 4413 .ohm__description p { 4414 margin: 0 0 12px 0; 4415 font-size: 13px; 4416 line-height: 16.25px; 4417 font-weight: 400; 4418 color: #000000; 4419 letter-spacing: 0; 4420 font-family: 'Inter-Regular'; 4421 } 4422 .ohm__description p:last-child { 4423 margin-bottom: 0; 4424 } 4425 .ohm__description a { 4426 text-decoration: underline; 4427 color: #0066cc; 4428 } 4429 .ohm__page-content { 4430 font-size: 16px; 4431 line-height: 1.65; 4432 color: #000; 4433 margin-top: 20px; 4434 padding-top: 20px; 4435 } 4436 .ohm__page-content a { 4437 text-decoration: underline; 4438 color: #0066cc; 4439 } 4440 .ohm__page-content img { 4441 max-width: 30%; 4442 height: auto; 4443 border-radius: 8px; 4444 display: inline-block; 4445 vertical-align: top; 4446 object-fit: contain; 4447 } 4448 .accordion__content__delimiter-item { 4449 font-size: 13px; 4450 line-height: 16.25px; 4451 font-weight: 400; 4452 color: #000000; 4453 letter-spacing: 0; 4454 font-family: 'Inter-Regular'; 4455 } 4456 .ohm__page-content details { 4457 border-bottom: 1px solid #e5e5e5; 4458 } 4459 .ohm__page-content details:first-child { 4460 border-top: 1px solid #e5e5e5; 4461 } 4462 .ohm__page-content summary { 4463 display: flex; 4464 justify-content: space-between; 4465 align-items: center; 4466 padding: 18px 0; 4467 cursor: pointer; 4468 list-style: none; 4469 font-size: 13px; 4470 line-height: 16.25px; 4471 font-weight: 400; 4472 color: #000000; 4473 letter-spacing: 0; 4474 font-family: 'Inter-Regular'; 4475 } 4476 .ohm__page-content summary::-webkit-details-marker { 4477 display: none; 4478 } 4479 .ohm__page-content summary::marker { 4480 display: none; 4481 content: ''; 4482 } 4483 .ohm__page-content summary::after { 4484 content: ''; 4485 width: 12px; 4486 height: 12px; 4487 border-right: 2px solid #333; 4488 border-bottom: 2px solid #333; 4489 transform: rotate(45deg); 4490 transition: transform 0.2s ease; 4491 flex-shrink: 0; 4492 margin-left: 16px; 4493 } 4494 .ohm__page-content details[open] > summary::after { 4495 transform: rotate(-135deg); 4496 } 4497 .ohm__page-content details > div, 4498 .ohm__page-content details > p { 4499 padding: 0 0 18px 0; 4500 font-size: 15px; 4501 line-height: 1.6; 4502 color: #555; 4503 } 4504 .ohm__page-content strong, 4505 .ohm__page-content b { 4506 font-weight: 700; 4507 } 4508 .ohm__page-content em, 4509 .ohm__page-content i { 4510 font-style: italic; 4511 } 4512 .ohm__page-content h1, 4513 .ohm__page-content h2, 4514 .ohm__page-content h3, 4515 .ohm__page-content h4, 4516 .ohm__page-content h5, 4517 .ohm__page-content h6 { 4518 font-weight: 600; 4519 color: #1d1d1f; 4520 margin: 0 0 8px 0; 4521 } 4522 .ohm__page-content .button, 4523 .ohm__page-content a.button, 4524 .ohm__page-content [class*='btn'] { 4525 display: inline-block; 4526 text-decoration: none !important; 4527 margin-top: 8px; 4528 border: none; 4529 border-radius: 20px; 4530 background: #1d7f9a; 4531 padding: 11px; 4532 color: #fff; 4533 transition: background .2s ease; 4534 font-weight: 500; 4535 font-size: 16px; 4536 line-height: 20px; 4537 letter-spacing: 1.6px; 4538 text-transform: uppercase; 4539 min-height: 42px; 4540 } 4541 .ohm__page-content ul, 4542 .ohm__page-content ol { 4543 padding-left: 20px; 4544 margin: 8px 0; 4545 } 4546 4547 @media (max-width: 768px) { 4548 .ohm { 4549 padding: 0; 4550 align-items: flex-end; 4551 } 4552 .ohm__container { 4553 max-width: 100%; 4554 max-height: 90vh; 4555 border-radius: 16px 16px 0 0;
4556 animation: ohmSlideUpMobile 0.25s ease; 4557 } 4558 @keyframes ohmSlideUpMobile { 4559 from { 4560 opacity: 0; 4561 transform: translateY(100%); 4562 } 4563 to { 4564 opacity: 1; 4565 transform: translateY(0); 4566 } 4567 } 4568 .ohm__content { 4569 padding: 20px; 4570 } 4571 .ohm__title { 4572 font-size: 22px; 4573 } 4574 .ohm__description { 4575 font-size: 15px; 4576 } 4577 } 4578</style> 4579
4580<script> 4581 (function () { 4582 var modal = document.getElementById('option-help-modal'); 4583 if (!modal) return; 4584 4585 var helpData = {}; 4586 try { 4587 var dataEl = document.getElementById('option-help-data'); 4588 if (dataEl) helpData = JSON.parse(dataEl.textContent); 4589 } catch (e) {} 4590 4591 // Open modal for a given option key 4592 window.openOptionHelpModal = function (optionKey) { 4593 var keyHyphen = optionKey 4594 .toLowerCase() 4595 .replace(/[^a-z0-9]+/g, '-') 4596 .replace(/^-|-$/g, ''); 4597 var keyDirect = optionKey.toLowerCase(); 4598 var data = helpData[keyHyphen] || helpData[keyDirect]; 4599 if (!data) return; 4600 4601 document.getElementById('ohm-title').textContent = data.title || optionKey; 4602 document.getElementById('ohm-description').innerHTML = data.description || ''; 4603 4604 var imagesWrap = document.getElementById('ohm-images'); 4605 imagesWrap.innerHTML = ''; 4606 var images = data.images || []; 4607 if (images.length > 0) { 4608 images.forEach(function (src) { 4609 var img = document.createElement('img'); 4610 img.src = src; 4611 img.alt = data.title || ''; 4612 img.className = 'ohm__image'; 4613 imagesWrap.appendChild(img); 4614 }); 4615 imagesWrap.style.display = 'flex'; 4616 } else { 4617 imagesWrap.style.display = 'none'; 4618 } 4619 4620 var pageContentEl = document.getElementById('ohm-page-content'); 4621 if (data.page_content) { 4622 pageContentEl.innerHTML = data.page_content; 4623 pageContentEl.style.display = 'block'; 4624 } else { 4625 pageContentEl.innerHTML = ''; 4626 pageContentEl.style.display = 'none'; 4627 } 4628 4629 modal.style.display = 'flex'; 4630 document.body.style.overflow = 'hidden'; 4631 }; 4632 4633 function closeModal() { 4634 modal.style.display = 'none'; 4635 document.body.style.overflow = ''; 4636 } 4637 4638 modal.querySelectorAll('[data-ohm-close]').forEach(function (btn) { 4639 btn.addEventListener('click', closeModal); 4640 }); 4641 4642 document.addEventListener('keydown', function (e) { 4643 if (e.key === 'Escape' && modal.style.display === 'flex') { 4644 closeModal(); 4645 } 4646 }); 4647 })(); 4648</script>
4648 4649 4650 <div id="react-app-custom" class="react-app-custom"></div> 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667
4667<script> 4668 4669 async function fetchAllChildCollectionProducts() { 4670 const endpoint = `https://ipowerresale.myshopify.com/api/2025-07/graphql.json`; 4671 const xShopifyStorefrontAccessToken = '8453b98395db3d33cb8995e0c50612e6'; 4672 4673 // Define base identifiers that are always needed 4674 const baseIdentifiers = [ 4675 { namespace: "cql", key: "color" }, 4676 { namespace: "cql", key: "parent_product" }, 4677 { namespace: "hidden", key: "group_6" }, 4678 { namespace: "hidden", key: "group_5" }, 4679 { namespace: "hidden", key: "group_4" }, 4680 { namespace: "hidden", key: "group_3" }, 4681 { namespace: "hidden", key: "group_2" }, 4682 { namespace: "hidden", key: "group_1" } 4683 ]; 4684 4685 // Get dynamic identifiers from the parent product's filter order 4686 const filterOrderData = {"mfield_cql_color":{"1":"Space Black","2":"Silver"},"mfield_custom_cosmetics":{"1":"New - Sealed in Box","2":"Open Box - Like New","3":"Grade A - Excellent","4":"Grade B - Fair"},"mfield_cql_storage":{"1":"128GB storage","2":"256GB storage","3":"512GB storage","4":"1TB storage","5":"2TB storage"},"mfield_custom_connectivity":{"1":"Wi-Fi","2":"Wi-Fi + Cellular"}}; 4687 const dynamicIdentifiers = []; 4688 4689 if (filterOrderData) { 4690 Object.keys(filterOrderData).forEach(key => { 4691 // Expected format: mfield_namespace_key 4692 if (key.startsWith('mfield_')) { 4693 const parts = key.replace('mfield_', '').split('_'); 4694 if (parts.length >= 2) { 4695 const namespace = parts[0]; 4696 const fieldKey = parts.slice(1).join('_'); 4697 dynamicIdentifiers.push({ namespace: namespace, key: fieldKey }); 4698 } 4699 } 4700 }); 4701 } 4702 4703 // Merge and deduplicate identifiers 4704 const allIdentifiers = [...baseIdentifiers]; 4705 4706 // Add dynamic ones if they don't exist yet 4707 dynamicIdentifiers.forEach(dynamicId => { 4708 const exists = allIdentifiers.some(id => 4709 id.namespace === dynamicId.namespace && id.key === dynamicId.key 4710 ); 4711 if (!exists) { 4712 allIdentifiers.push(dynamicId); 4713 } 4714 }); 4715 4716 // Add hardcoded fallback list for backward compatibility if filter_order is missing specific common fields 4717 const fallbackList = [ 4718 { namespace: "custom", key: "cosmetics" }, 4719 { namespace: "custom", key: "cpu" }, 4720 { namespace: "cql", key: "ram" }, 4721 { namespace: "cql", key: "storage" }, 4722 { namespace: "custom", key: "gpu" }, 4723 { namespace: "cql", key: "case_size" }, 4724 { namespace: "custom", key: "connectivity" }, 4725 { namespace: "custom", key: "band_size" }, 4726 { namespace: "custom", key: "model" }, 4727 { namespace: "custom", key: "ethernet" }, 4728 { namespace: "custom", key: "screen_type" }, 4729 { namespace: "custom", key: "afterburner" }, 4730 { namespace: "cql", key: "addon_product" } 4731 ]; 4732 4733 fallbackList.forEach(fallbackId => { 4734 const exists = allIdentifiers.some(id => 4735 id.namespace === fallbackId.namespace && id.key === fallbackId.key 4736 ); 4737 if (!exists) { 4738 allIdentifiers.push(fallbackId); 4739 } 4740 }); 4741 4742 // Generate the GraphQL identifiers string 4743 const identifiersString = allIdentifiers.map(id => 4744 `{ namespace: "${id.namespace}", key: "${id.key}" }` 4745 ).join(',\n'); 4746 4747 const getChildCollectionProductsGql = (cursor = null) => ` 4748 query getCollectionProducts {
4749 collection(id: "gid://shopify/Collection/320571900073") { 4750 products(first: 250${cursor ? `, after: "${cursor}"` : ''} filters:{available:true}) { 4751 pageInfo { 4752 hasNextPage 4753 endCursor 4754 } 4755 nodes{ 4756 id 4757 title 4758 handle 4759 productType 4760 variants(first:1){ 4761 nodes{ 4762 price{ 4763 amount 4764 } 4765 availableForSale 4766 quantityAvailable 4767 } 4768 } 4769 metafields(identifiers: [ 4770 ${identifiersString} 4771 ]) { 4772 namespace 4773 key 4774 value 4775 } 4776 } 4777 } 4778 } 4779 }`; 4780 4781 let hasNextPage = true; 4782 let endCursor = null; 4783 let allProducts = []; 4784 4785 try { 4786 while (hasNextPage) { 4787 const response = await fetch(endpoint, { 4788 method: 'POST', 4789 headers: { 4790 'Content-Type': 'application/json', 4791 'X-Shopify-storefront-Access-Token': xShopifyStorefrontAccessToken 4792 }, 4793 body: JSON.stringify({ query: getChildCollectionProductsGql(endCursor) }) 4794 }); 4795 4796 const result = await response.json(); 4797 4798 if (result.errors) { 4799 console.error('GraphQL errors:', result.errors); 4800 break; 4801 } 4802 4803 const collection = result.data.collection; 4804 if (!collection) { 4805 console.error('No collection found with that ID'); 4806 break; 4807 } 4808 4809 const { nodes, pageInfo } = collection.products; 4810 allProducts = allProducts.concat(nodes); 4811 4812 hasNextPage = pageInfo.hasNextPage; 4813 endCursor = pageInfo.endCursor; 4814 } 4815 4816 return allProducts; 4817 4818 } catch (error) { 4819 console.error('Error fetching collection products:', error); 4820 } 4821 } 4822 4823 (async () => { 4824 let allProducts = await fetchAllChildCollectionProducts(); 4825 allProducts = allProducts.filter(product => product.variants.nodes[0].availableForSale); 4826 window.collectionAllProducts = allProducts; 4827 })(); 4828 4829 // GraphQL-based Configurator Implementation 4830 (function() { 4831 // Parent product information 4832 const parentProductTitle = "iPad Pro 11-inch M5"; 4833 const parentProductPrice = "$979.00"; 4834 const learnMoreText = null; 4835 const initialFilterObject = {"0":{"filterField":"mfield_cql_parent_product","filterValue":"false"},"1":{"filterField":"product_type","filterValue":"iPad Pro"},"2":{"filterField":"mfield_hidden_group_4","filterValue":"true"},"3":{"filterField":"ss_available","filterValue":"1"},"4":{"filterField":"mfield_cql_case_size","filterValue":"11-inch"}} || {}; 4836 4837 // Fetch addon product details by GIDs (called when a valid child product is selected) 4838 async function fetchAddonProducts(productGids) { 4839 if (!productGids || productGids.length === 0) return []; 4840 4841 const endpoint = `https://ipowerresale.myshopify.com/api/2025-07/graphql.json`; 4842 const token = '8453b98395db3d33cb8995e0c50612e6'; 4843 4844 const query = ` 4845 query getAddonProducts($ids: [ID!]!) { 4846 nodes(ids: $ids) { 4847 ... on Product { 4848 id 4849 title 4850 description 4851 handle 4852 featuredImage { 4853 url 4854 altText 4855 } 4856 priceRange { 4857 minVariantPrice { 4858 amount 4859 currencyCode 4860 } 4861 } 4862 } 4863 } 4864 } 4865 `; 4866 4867 try { 4868 const response = await fetch(endpoint, { 4869 method: 'POST', 4870 headers: { 4871 'Content-Type': 'application/json', 4872 'X-Shopify-Storefront-Access-Token': token 4873 }, 4874 body: JSON.stringify({ query, variables: { ids: productGids } }) 4875 }); 4876 4877 const result = await response.json(); 4878 if (result.errors) { 4879 console.error('Addon products GraphQL errors:', result.errors); 4880 return []; 4881 }
4882 return result.data.nodes.filter(Boolean); 4883 } catch (error) { 4884 console.error('Error fetching addon products:', error); 4885 return []; 4886 } 4887 } 4888 4889 4890 // Parse metafield key to extract namespace and key 4891 // Example: "mfield_custom_connectivity" -> { namespace: "custom", key: "connectivity" } 4892 function parseMetafieldKey(mfieldKey) { 4893 // Remove "mfield_" prefix 4894 const withoutPrefix = mfieldKey.replace(/^mfield_/, ''); 4895 4896 // Split by underscore 4897 const parts = withoutPrefix.split('_'); 4898 4899 // First part is namespace, rest is key 4900 const namespace = parts[0]; 4901 const key = parts.slice(1).join('_'); 4902 4903 return { namespace, key, fullKey: `${namespace}_${key}` }; 4904 } 4905 4906 // Data normalization functions for GraphQL response 4907 function normalizeMetafields(metafieldsArray) { 4908 const result = {}; 4909 if (!metafieldsArray || !Array.isArray(metafieldsArray)) { 4910 return result; 4911 } 4912 4913 metafieldsArray.forEach(field => { 4914 if (field && field.key && field.value !== null) { 4915 let key; 4916 4917 if (field.namespace) { 4918 // Standard case: namespace is provided 4919 key = `${field.namespace}_${field.key}`; 4920 } 4921 result[key] = field.value; 4922 } 4923 }); 4924 4925 return result; 4926 } 4927 4928 function normalizeGraphQLProduct(gqlProduct) { 4929 if (!gqlProduct) { 4930 return null; 4931 } 4932 4933 // Extract price and inventory from variants 4934 let price = '$0.00'; 4935 let inventoryQuantity = 0; 4936 if (gqlProduct.variants && gqlProduct.variants.nodes && gqlProduct.variants.nodes.length > 0) { 4937 const variant = gqlProduct.variants.nodes[0]; 4938 if (variant.price && variant.price.amount) { 4939 price = `$${parseFloat(variant.price.amount).toFixed(2)}`; 4940 } 4941 inventoryQuantity = variant.quantityAvailable != null ? variant.quantityAvailable : 99; 4942 } 4943 4944 // Extract ID number from GraphQL ID 4945 const numericId = gqlProduct.id ? gqlProduct.id.split('/').pop() : 'unknown'; 4946 4947 // Normalize metafields 4948 const normalizedMetafields = normalizeMetafields(gqlProduct.metafields); 4949 4950 const normalizedProduct = { 4951 id: numericId, 4952 title: gqlProduct.title || '', 4953 handle: gqlProduct.handle || '', 4954 url: `/products/${gqlProduct.handle || ''}`, 4955 product_type: gqlProduct.productType || '', 4956 available: true, 4957 price: price, 4958 compare_at_price: null, 4959 inventoryQuantity: inventoryQuantity, 4960 metafields: normalizedMetafields 4961 }; 4962 4963 return normalizedProduct; 4964 } 4965 4966 // Wait for GraphQL data to be available 4967 function waitForGraphQLData(maxWaitTime = 10000) { 4968 return new Promise((resolve, reject) => { 4969 const startTime = Date.now(); 4970 4971 function checkData() { 4972 if (window.collectionAllProducts && Array.isArray(window.collectionAllProducts)) { 4973 resolve(window.collectionAllProducts); 4974 return; 4975 } 4976 4977 if (Date.now() - startTime > maxWaitTime) { 4978 reject(new Error('GraphQL data loading timeout')); 4979 return; 4980 } 4981 4982 setTimeout(checkData, 100); 4983 } 4984 4985 checkData(); 4986 }); 4987 } 4988 4989 // Show loading state UI 4990 function showLoadingState() { 4991 const container = document.getElementById('react-app-custom'); 4992 if (!container) return; 4993 4994 container.innerHTML = ` 4995 <div class="configurator-loading"> 4996 <div class="loading-content"> 4997 <div class="loading-spinner"> 4998 <div class="spinner"></div> 4999 </div> 5000 <h3 class="loading-title">Loading Configurator Options...</h3> 5001 <p class="loading-description">Please wait while we load all available product configurations.</p> 5002 </div> 5003 </div> 5004 `; 5005 } 5006 5007 // Show empty state UI 5008 function showEmptyState() { 5009 const container = document.getElementById('react-app-custom'); 5010 if (!container) return; 5011 5012 container.innerHTML = ` 5013 <div class="configurator-error" style="text-align: center; padding: 60px 20px;"> 5014 <div class="error-content"> 5015 <h3 class="error-title" style="font-size: 28px; margin-bottom: 15px;">Sorry..This has been so popular we ran out!</h3> 5016 <p class="error-description" style="font-size: 18px;">Contact our sales team to be first in line when this is back in stock!</p> 5017 </div> 5018 </div> 5019 `; 5020 } 5021 5022 // Show error state UI 5023 function showErrorState(error) { 5024 const container = document.getElementById('react-app-custom'); 5025 if (!container) return; 5026 5027 container.innerHTML = ` 5028 <div class="configurator-error"> 5029 <div class="error-content"> 5030 <div class="error-icon">â ï¸</div> 5031 <h3 class="error-title">
5031Unable to Load Configurator</h3> 5032 <p class="error-description">We're having trouble loading the product options. Please try refreshing the page.</p> 5033 <button class="error-retry-btn" onclick="location.reload()">Refresh Page</button> 5034 </div> 5035 </div> 5036 `; 5037 5038 console.error('Configurator error:', error); 5039 } 5040 5041 // Build dynamic filter configuration based on available metafields 5042 function buildFilterConfigFromProducts(products) { 5043 const filterConfig = {}; 5044 const colorFilters = []; 5045 const otherFilters = []; 5046 const metafieldSet = new Set(); 5047 5048 // Create a set of pre-defined filters to exclude 5049 const preDefinedFilters = new Set(); 5050 if (initialFilterObject) { 5051 Object.values(initialFilterObject).forEach(condition => { 5052 if (condition.filterField) { 5053 // Normalize the key: remove "mfield_" prefix 5054 // Example: "mfield_cql_case_size" -> "cql_case_size" 5055 const normalizedKey = condition.filterField.replace(/^mfield_/, ''); 5056 preDefinedFilters.add(normalizedKey); 5057 } 5058 }); 5059 } 5060 5061 // Collect all unique metafield keys from all products (excluding hidden namespace) 5062 products.forEach(product => { 5063 if (product.metafields) { 5064 Object.keys(product.metafields).forEach(metafieldKey => {
5065 // Skip hidden namespace metafields, pre-defined filters, and addon_product (data-only, no UI) 5066 if (!metafieldKey.startsWith('hidden_') && !metafieldKey.endsWith('_addon_product') && !preDefinedFilters.has(metafieldKey)) { 5067 metafieldSet.add(metafieldKey); 5068 } 5069 }); 5070 } 5071 }); 5072 5073 // Create filter configuration for each detected metafield and separate color filters 5074 metafieldSet.forEach(metafieldKey => { 5075 const parts = metafieldKey.split('_'); 5076 const namespace = parts[0]; 5077 const key = parts.slice(1).join('_'); 5078 5079 // Create display name from key 5080 let displayName = toTitleCase(key.replace(/_/g, ' ')); 5081 5082 filterConfig[metafieldKey] = { 5083 namespace: namespace, 5084 key: key, 5085 displayName: displayName, 5086 values: new Set() // Will be populated with actual values 5087 }; 5088 5089 // Separate color filters from others 5090 if (isColorFilter(metafieldKey)) { 5091 colorFilters.push(metafieldKey); 5092 } else { 5093 otherFilters.push(metafieldKey); 5094 } 5095 }); 5096 5097 // Get custom sort order from parent product's cql.filter_order metafield 5098 const customSortOrder = getCustomSortOrder(); 5099 5100 5101 5102 // Create final filter keys array with custom sorting 5103 let filterKeys; 5104 if (customSortOrder && customSortOrder.length > 0) { 5105 // Use custom sort order 5106 const orderedFilters = []; 5107 const unorderedFilters = []; 5108 5109 // First, add filters in the custom order 5110 customSortOrder.forEach(sortKey => { 5111 const matchingKey = Array.from(metafieldSet).find(metafieldKey => { 5112 // Handle the key normalization as described: 5113 // Remove "mfield_" prefix, split on "_", first part is namespace, rest is key 5114 // Example: "mfield_custom_cosmetics" -> namespace: "custom", key: "cosmetics" 5115 // Then reconstruct as "custom_cosmetics" to match sortKey format 5116 5117 if (metafieldKey.startsWith('mfield_')) { 5118 // Remove mfield_ prefix and reconstruct 5119 const withoutMfield = metafieldKey.substring(7); // Remove "mfield_" 5120 return withoutMfield === sortKey.substring(7); // Compare without "mfield_" 5121 } else { 5122 // For other namespaces, do direct comparison 5123 const parts = metafieldKey.split('_'); 5124 const namespace = parts[0]; 5125 const key = parts.slice(1).join('_'); 5126 const normalizedKey = `${namespace}_${key}`; 5127 return normalizedKey === sortKey; 5128 } 5129 }); 5130 5131 if (matchingKey) { 5132 orderedFilters.push(matchingKey); 5133 } 5134 }); 5135 5136 // Add any remaining filters that weren't in the custom order 5137 metafieldSet.forEach(metafieldKey => { 5138 if (!orderedFilters.includes(metafieldKey)) { 5139 if (isColorFilter(metafieldKey)) { 5140 // Keep color filters at the top if not in custom order 5141 unorderedFilters.unshift(metafieldKey); 5142 } else { 5143 unorderedFilters.push(metafieldKey); 5144 } 5145 } 5146 }); 5147 5148 filterKeys = [...orderedFilters, ...unorderedFilters]; 5149 } else { 5150 // Fallback to original behavior: color filters first, then others 5151 filterKeys = [...colorFilters, ...otherFilters]; 5152 console.log('Final filter order (default):', filterKeys); 5153 } 5154 5155 return { filterConfig, filterKeys }; 5156 } 5157 5158 // Get custom sort order from parent product's metafield 5159 function getCustomSortOrder() { 5160 try { 5161 // Get the filter order from parent product metafield 5162 const filterOrderData = {"mfield_cql_color":{"1":"Space Black","2":"Silver"}
5162,"mfield_custom_cosmetics":{"1":"New - Sealed in Box","2":"Open Box - Like New","3":"Grade A - Excellent","4":"Grade B - Fair"},"mfield_cql_storage":{"1":"128GB storage","2":"256GB storage","3":"512GB storage","4":"1TB storage","5":"2TB storage"},"mfield_custom_connectivity":{"1":"Wi-Fi","2":"Wi-Fi + Cellular"}}; 5163 5164 if (!filterOrderData) { 5165 console.log('No custom filter order found, using default sorting'); 5166 return null; 5167 } 5168 // Extract the keys in order based on their numeric values 5169 const sortOrder = []; 5170 const sortEntries = Object.entries(filterOrderData); 5171 5172 // Sort by the numeric order values 5173 sortEntries.sort((a, b) => { 5174 const orderA = Math.min(...Object.keys(a[1]).map(k => parseInt(k))); 5175 const orderB = Math.min(...Object.keys(b[1]).map(k => parseInt(k))); 5176 return orderA - orderB; 5177 }); 5178 5179 // Extract the keys in sorted order 5180 sortEntries.forEach(([key, values]) => { 5181 // Replace 'mfield' with empty string when adding to sort order 5182 const cleanKey = key.replace('mfield_', ''); 5183 sortOrder.push(cleanKey); 5184 }); 5185 5186 return sortOrder; 5187 5188 } catch (error) { 5189 console.error('Error parsing custom filter order:', error); 5190 return null; 5191 } 5192 } 5193 5194 // Initialize dynamic selected options based on detected filters 5195 function initializeSelectedOptions(filterKeys) { 5196 const selectedOptions = {}; 5197 filterKeys.forEach(key => { 5198 selectedOptions[key] = null; 5199 }); 5200 return selectedOptions; 5201 } 5202 5203 // Helper functions (defined early to avoid reference errors) 5204 // Determine if a filter is a color filter 5205 const isColorFilter = (filterKey) => { 5206 return filterKey.endsWith('_color') || filterKey === 'color'; 5207 }; 5208 5209 // Determine if a filter is cosmetics filter 5210 const isCosmeticsFilter = (filterKey) => { 5211 return filterKey.includes('cosmetics'); 5212 }; 5213 5214 // Build "Which is right?" link for an option if help data exists 5215 const optionHelpData = (() => { 5216 try { 5217 const el = document.getElementById('option-help-data'); 5218 return el ? JSON.parse(el.textContent) : {}; 5219 } catch (e) { return {}; } 5220 })(); 5221 5222 const getHelpLink = (filterKey) => { 5223 const keyHyphen = filterKey.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); 5224 const keyDirect = filterKey.toLowerCase(); 5225 const matchedKey = optionHelpData[keyHyphen] ? keyHyphen : (optionHelpData[keyDirect] ? keyDirect : null); 5226 5227 if (!matchedKey) return ''; 5228 return `<a href="#" class="learn-more" onclick="event.preventDefault(); openOptionHelpModal('${filterKey}');">Which is right?</a>`; 5229 }; 5230 5231 // Convert color name to Shopify handle format (matches Liquid's | handle filter) 5232 function toHandle(str) { 5233 return str.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); 5234 } 5235 5236 // Convert string to Title Case, preserving known acronyms 5237 const ACRONYMS = ['cpu', 'gpu', 'ram', 'ssd', 'hdd', 'nvme', 'usb', 'hdmi', 'lcd', 'led', 'tb', 'gb']; 5238 function toTitleCase(str) { 5239 if (!str) return ''; 5240 return str.replace(/\w+/g, word => { 5241 if (ACRONYMS.includes(word.toLowerCase())) return word.toUpperCase(); 5242 return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); 5243 }); 5244 } 5245 5246 // Get color hex value from theme swatches (custom-product section blocks) 5247 // Format price: remove .00 decimals, keep others like .50, .99 5248 function formatPrice(priceStr) { 5249 if (!priceStr) return priceStr; 5250 return priceStr.replace(/\.00$/, ''); 5251 } 5252 5253 const swatchesEl = document.getElementById('swatches-data'); 5254 const swatchesData = swatchesEl ? JSON.parse(swatchesEl.textContent) : {}; 5255 5256 function getColorHex(colorName) { 5257 const handle = toHandle(colorName); 5258 5259 // Exact handle match 5260 if (swatchesData[handle]) { 5261 return swatchesData[handle].hexValue; 5262 } 5263 5264 // Partial match (for complex names like "Silver - Denim Band") 5265 for (const [key, swatch] of Object.entries(swatchesData)) { 5266 if (key.includes(handle) || handle.includes(key)) { 5267 return swatch.hexValue; 5268 } 5269 } 5270 5271 return '#cccccc'; 5272 } 5273 5274 function checkIfChildrenQualifiedparentChecks(products) { 5275 5276 5277 // Filter out ss_available, mfield_cql_parent_product and product_type, keep only metafield conditions 5278 const filteredConditions = Object.values(initialFilterObject).filter(condition => { 5279 return condition.filterField !== 'ss_available' && 5280 condition.filterField !== 'product_type' && 5281 condition.filterField !== 'mfield_cql_parent_product'; 5282 }); 5283 5284 const normalizedConditions = filteredConditions.map(condition => { 5285 // Parse the filterField to extract namespace and key 5286 // Remove "mfield_" prefix and split by underscore 5287 const withoutPrefix = condition.filterField.replace(/^mfield_/, ''); 5288 const parts = withoutPrefix.split('_'); 5289 5290 // First part is namespace, rest is key 5291 const namespace = parts[0];
5292 const key = parts.slice(1).join('_'); 5293 5294 // Combine namespace and key as the normalized key 5295 const normalizedKey = `${namespace}_${key}`; 5296 5297 return { 5298 normalizedKey: normalizedKey, 5299 filterValue: condition.filterValue 5300 }; 5301 }); 5302 5303 let qualifiedChildren = [] 5304 const conditionLength = normalizedConditions.length 5305 products.forEach(product => { 5306 let conditionMet = 0 5307 normalizedConditions.forEach(condition => { 5308 if (String(product.metafields[condition.normalizedKey]).toLowerCase().trim() == String(condition.filterValue).toLowerCase().trim()) { 5309 conditionMet++; 5310 } 5311 }) 5312 if (conditionMet === conditionLength) { 5313 qualifiedChildren.push(product) 5314 } 5315 }) 5316 5317 5318 5319 return qualifiedChildren 5320 } 5321 5322 // Main configurator initialization 5323 async function initializeConfigurator() { 5324 try { 5325 // Show loading state immediately 5326 showLoadingState(); 5327 // Wait for GraphQL data 5328 const gqlProducts = await waitForGraphQLData(); 5329 5330 // Normalize GraphQL products to match expected structure 5331 let normalizedProducts = gqlProducts.map(normalizeGraphQLProduct).filter(Boolean); 5332 5333 if (normalizedProducts.length === 0) { 5334 console.log('No valid products found, showing empty state'); 5335 showEmptyState(); 5336 return; 5337 } 5338 5339 console.log(`SNR====>>>> Successfully normalized ${normalizedProducts.length} products`, normalizedProducts); 5340 5341 5342 const qualifiedChildren = checkIfChildrenQualifiedparentChecks(normalizedProducts) 5343 5344 normalizedProducts = qualifiedChildren 5345 5346 console.log("==> qualified children", normalizedProducts) 5347 5348 // Check if there are no qualified children after filtering 5349 if (normalizedProducts.length === 0) { 5350 console.log('No qualified children found, showing empty state'); 5351 showEmptyState(); 5352 return; 5353 } 5354 5355 // Build filter configuration dynamically from available metafields 5356 const { filterConfig, filterKeys } = buildFilterConfigFromProducts(normalizedProducts); 5357 5358 // Get option sort order from metafield 5359 const optionSortOrder = getOptionSortOrder(); 5360 5361 // Initialize selected options based on detected filters 5362 const selectedOptions = initializeSelectedOptions(filterKeys); 5363
5364 // Track the most recently changed option for smart highlighting 5365 const lastChangedOption = { key: null, value: null }; 5366 5367 // Store globally for other functions 5368 window.configuratorData = { 5369 products: normalizedProducts, 5370 filterConfig: filterConfig, 5371 filterKeys: filterKeys, 5372 selectedOptions: selectedOptions, 5373 lastChangedOption: lastChangedOption, 5374 optionSortOrder: optionSortOrder 5375 }; 5376 5377 // Build the configurator with normalized data and dynamic configuration 5378 buildConfigurator(normalizedProducts, filterConfig, filterKeys, selectedOptions, optionSortOrder); 5379 5380 } catch (error) { 5381 console.error('Failed to initialize configurator:', error); 5382 showErrorState(error); 5383 } 5384 } 5385 5386 // Get option sort order from metafield 5387 function getOptionSortOrder() { 5388 try { 5389 const filterOrderData = {"mfield_cql_color":{"1":"Space Black","2":"Silver"},"mfield_custom_cosmetics":{"1":"New - Sealed in Box","2":"Open Box - Like New","3":"Grade A - Excellent","4":"Grade B - Fair"},"mfield_cql_storage":{"1":"128GB storage","2":"256GB storage","3":"512GB storage","4":"1TB storage","5":"2TB storage"},"mfield_custom_connectivity":{"1":"Wi-Fi","2":"Wi-Fi + Cellular"}}; 5390 5391 if (!filterOrderData) { 5392 return null; 5393 } 5394 5395 // Build a map of field -> sorted option values 5396 const optionSortOrder = {}; 5397 5398 Object.entries(filterOrderData).forEach(([fieldKey, optionMap]) => { 5399 // Remove "mfield_" prefix to get the normalized key 5400 const normalizedKey = fieldKey.replace('mfield_', ''); 5401 5402 if (optionMap && typeof optionMap === 'object') { 5403 // Extract and sort by numeric keys 5404 const sortedOptions = Object.entries(optionMap) 5405 .sort((a, b) => parseInt(a[0]) - parseInt(b[0])) 5406 .map(entry => entry[1]); 5407 5408 optionSortOrder[normalizedKey] = sortedOptions; 5409 } 5410 }); 5411 5412 return optionSortOrder; 5413 } catch (error) { 5414 console.error('Error parsing option sort order:', error); 5415 return null; 5416 } 5417 } 5418 5419 // Extract unique options from products dynamically 5420 function extractOptions(products, filterKeys, optionSortOrder = null) { 5421 const options = {}; 5422 5423 // Initialize sets for each filter key 5424 filterKeys.forEach(key => { 5425 options[key] = new Set(); 5426 }); 5427 5428 // Collect unique values from products 5429 products.forEach((product, index) => { 5430 const m = product.metafields; 5431 5432 filterKeys.forEach(filterKey => { 5433 const value = m[filterKey]; 5434 if (value) { 5435 options[filterKey].add(value); 5436 } 5437 }); 5438 }); 5439 5440 // Convert sets to sorted arrays using custom sort order if available 5441 const result = {}; 5442 filterKeys.forEach(key => { 5443 const allOptions = Array.from(options[key]); 5444 5445 if (optionSortOrder && optionSortOrder[key]) { 5446 // Sort based on custom order, put unmapped items at the end 5447 const sortedOptions = []; 5448 const unmappedOptions = []; 5449 5450 // First add options in the custom sort order 5451 optionSortOrder[key].forEach(sortedOption => { 5452 if (allOptions.includes(sortedOption)) { 5453 sortedOptions.push(sortedOption); 5454 } 5455 }); 5456 5457 // Then add any remaining options not in sort order 5458 allOptions.forEach(option => { 5459 if (!sortedOptions.includes(option)) { 5460 unmappedOptions.push(option); 5461 } 5462 }); 5463 5464 // Sort unmapped options alphabetically for consistency 5465 unmappedOptions.sort(); 5466 5467 result[key] = [...sortedOptions, ...unmappedOptions]; 5468 } else { 5469 // Fallback to alphabetical sort if no custom order 5470 result[key] = allOptions.sort(); 5471 } 5472 }); 5473 5474 return result; 5475 } 5476 5477 // Apply preselected options from metafield if they form a valid variant 5478 function applyPreselectedOptions(products, filterKeys, selectedOptions) { 5479 try { 5480 // Get both metafields 5481 const filterOrderData = {"mfield_cql_color":{"1":"Space Black","2":"Silver"}
5481,"mfield_custom_cosmetics":{"1":"New - Sealed in Box","2":"Open Box - Like New","3":"Grade A - Excellent","4":"Grade B - Fair"},"mfield_cql_storage":{"1":"128GB storage","2":"256GB storage","3":"512GB storage","4":"1TB storage","5":"2TB storage"},"mfield_custom_connectivity":{"1":"Wi-Fi","2":"Wi-Fi + Cellular"}}; 5482 const preselectedOptionsData = null; 5483 5484 if (!filterOrderData || !preselectedOptionsData) { 5485 console.log('Preselection skipped: Missing metafield data'); 5486 return false; 5487 } 5488 5489 // Extract keys from both metafields in order 5490 const filterOrderKeys = Object.keys(filterOrderData); 5491 const preselectedKeys = Object.keys(preselectedOptionsData); 5492 5493 if (filterOrderKeys.length === 0 || preselectedKeys.length === 0) { 5494 console.log('Preselection skipped: Empty metafield data'); 5495 return false; 5496 } 5497 5498 // Create mapping: filter_order key -> preselected value 5499 // Map by index: filterOrderKeys[0] -> preselectedKeys[0], etc. 5500 const preselectionMap = {}; 5501 const maxLength = Math.min(filterOrderKeys.length, preselectedKeys.length); 5502 5503 for (let i = 0; i < maxLength; i++) { 5504 const filterOrderKey = filterOrderKeys[i]; // e.g., "mfield_custom_cosmetics" 5505 const preselectedValue = preselectedKeys[i]; // e.g., "Grade A - Excellent" 5506 5507 // Normalize the filter order key to match filterKeys format 5508 // Remove "mfield_" prefix: "mfield_custom_cosmetics" -> "custom_cosmetics" 5509 const normalizedKey = filterOrderKey.replace('mfield_', ''); 5510 5511 // Only add to map if this filter actually exists in our filterKeys 5512 if (filterKeys.includes(normalizedKey)) { 5513 preselectionMap[normalizedKey] = preselectedValue; 5514 } 5515 } 5516 5517 console.log('Preselection map created:', preselectionMap); 5518 5519 // Check if these preselections form a valid variant 5520 const isValidCombination = products.some(product => { 5521 const m = product.metafields; 5522 5523 // Check if all preselected values match this product 5524 for (const [key, value] of Object.entries(preselectionMap)) { 5525 if (m[key] !== value) { 5526 return false; 5527 } 5528 } 5529 5530 return true; 5531 }); 5532 5533 if (!isValidCombination) { 5534 console.log('Preselection skipped: No valid variant found for preselected combination'); 5535 return false; 5536 } 5537 5538 // Valid combination found - apply preselections to selectedOptions 5539 Object.entries(preselectionMap).forEach(([key, value]) => { 5540 selectedOptions[key] = value; 5541 }); 5542 5543 return true; 5544 } catch (error) { 5545 console.error('Error applying preselected options:', error); 5546 return false; 5547 } 5548 } 5549 5550 // Build floating visual feedback element 5551 function buildFloatingFeedback(filterKeys, filterConfig) { 5552 // Create floating container 5553 const floatingContainer = document.createElement('div'); 5554 floatingContainer.id = 'floating-feedback'; 5555 floatingContainer.className = 'floating-feedback collapsed'; 5556 5557 // Add toggle arrow on the left 5558 let html = ` 5559 <div class="floating-feedback__arrow"> 5560 <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 5561 <path d="M10 4L6 8L10 12" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 5562 </svg> 5563 </div> 5564 `; 5565 5566 // Create checkmark items 5567 html += '<div class="floating-feedback__items">'; 5568 5569 filterKeys.forEach((filterKey, index) => { 5570 const config = filterConfig[filterKey]; 5571 const displayName = config.displayName; 5572 5573 html += ` 5574 <div class="floating-feedback__item" data-filter-key="${filterKey}">
5575 <span class="config-label__check"> 5576 <span class="config-label__check-empty"></span> 5577 <img class="config-label__check-filled" src="//ipowerresale.com/cdn/shop/t/130/assets/checkmark.png?v=57208139336376101951790277972" alt="selected" width="20" height="20"> 5578 </span> 5579 <span class="floating-feedback__label">${displayName}</span> 5580 </div> 5581 `; 5582 }); 5583 5584 html += '</div>'; 5585 5586 floatingContainer.innerHTML = html; 5587 document.body.appendChild(floatingContainer); 5588 5589 // Add toggle functionality - entire container is clickable 5590 floatingContainer.addEventListener('click', function(e) { 5591 floatingContainer.classList.toggle('collapsed'); 5592 floatingContainer.classList.toggle('expanded'); 5593 }); 5594 } 5595 5596 // Update floating feedback and config section labels based on selections 5597 function updateFloatingFeedback(filterKeys, selectedOptions) { 5598 const floatingContainer = document.getElementById('floating-feedback'); 5599 5600 filterKeys.forEach(filterKey => { 5601 const isSelected = selectedOptions[filterKey] !== null && selectedOptions[filterKey] !== undefined; 5602 5603 // Update floating feedback item 5604 if (floatingContainer) { 5605 const item = floatingContainer.querySelector(`[data-filter-key="${filterKey}"]`); 5606 if (item) { 5607 if (isSelected) { 5608 item.classList.add('selected'); 5609 } else { 5610 item.classList.remove('selected'); 5611 } 5612 } 5613 } 5614 5615 // Update config section label checkmark and selected value 5616 const label = document.querySelector(`.config-label[data-filter-key="${filterKey}"]`); 5617 if (label) { 5618 const valueEl = label.querySelector('.config-label__value'); 5619 if (isSelected) { 5620 label.classList.add('selected'); 5621 if (valueEl) valueEl.textContent = selectedOptions[filterKey]; 5622 } else { 5623 label.classList.remove('selected'); 5624 if (valueEl) valueEl.textContent = ''; 5625 } 5626 } 5627 }); 5628 } 5629 5630 // Shared quantity state (accessible by attachEventListeners and checkSelection) 5631 let configuratorQty = 1; 5632 let maxAvailableQty = 99; 5633 5634 function syncQtyDisplay() { 5635 const qtyValue = document.getElementById('qty-value'); 5636 const inlineQtyValue = document.getElementById('inline-qty-value'); 5637 const qtyPlus = document.getElementById('qty-plus'); 5638 const inlineQtyPlus = document.getElementById('inline-qty-plus'); 5639 const qtyMinus = document.getElementById('qty-minus'); 5640 const inlineQtyMinus = document.getElementById('inline-qty-minus'); 5641 if (qtyValue) qtyValue.textContent = configuratorQty; 5642 if (inlineQtyValue) inlineQtyValue.textContent = configuratorQty; 5643 // Disable plus buttons when at max 5644 const atMax = configuratorQty >= maxAvailableQty; 5645 if (qtyPlus) qtyPlus.disabled = atMax; 5646 if (inlineQtyPlus) inlineQtyPlus.disabled = atMax; 5647 // Disable minus buttons when at min 5648 const atMin = configuratorQty <= 1; 5649 if (qtyMinus) qtyMinus.disabled = atMin; 5650 if (inlineQtyMinus) inlineQtyMinus.disabled = atMin; 5651 } 5652 5653 // Build the configurator UI dynamically 5654 function buildConfigurator(products, filterConfig, filterKeys, selectedOptions, optionSortOrder = null) { 5655 const container = document.getElementById('react-app-custom'); 5656 if (!container) { 5657 console.error('Container #react-app-custom not found'); 5658 return; 5659 } 5660 5661 // Extract all unique options from products with custom sort order 5662 const options = extractOptions(products, filterKeys, optionSortOrder); 5663 5664 // Helper to safely set data attribute values (handles quotes) 5665 const escapeDataValue = (value) => { 5666 if (value == null) return ''; 5667 return String(value).replaceAll('"', '"'); 5668 }; 5669 5670 // Build the UI dynamically 5671 let html = '<div class="product-configurator custom-configurator">'; 5672 let sectionsBuilt = 0; 5673 5674 // Iterate through each filter in the order they appear in filterKeys 5675 filterKeys.forEach(filterKey => { 5676 const config = filterConfig[filterKey]; 5677 const optionValues = options[filterKey]; 5678 5679 // Skip this filter if no values, but continue with others 5680 if (!optionValues || optionValues.length === 0) { 5681 return; // This only returns from the forEach callback, not the entire function 5682 } 5683 5684 sectionsBuilt++; 5685 5686 // Build section based on filter type 5687 if (isColorFilter(filterKey)) { 5688 // Color/Finish section with swatches 5689 html += '<div class="config-section">'; 5690 html += `<h3 class="config-label" data-filter-key="${filterKey}">
5691 <span class="config-label__check"> 5692 <span class="config-label__check-empty"></span> 5693 <img class="config-label__check-filled" src="//ipowerresale.com/cdn/shop/t/130/assets/checkmark.png?v=57208139336376101951790277972" alt="selected" width="24" height="24"> 5694 </span> 5695 <span class="config-label__text">Color/Finish:</span> 5696 <span class="config-label__value"></span> 5697 </h3>`; 5698 html += '<div class="config-options color-swatches">'; 5699 5700 optionValues.forEach(value => { 5701 const hexColor = getColorHex(value); 5702 html += ` 5703 <div class="color-option" data-option="${filterKey}" data-value="${escapeDataValue(value)}"> 5704 <div class="color-swatch" style="background-color: ${hexColor};"> </div> 5705 </div> 5706 `; 5707 }); 5708 5709 html += '</div></div>'; 5710 } else if (isCosmeticsFilter(filterKey)) { 5711 // Cosmetic Condition section with help link 5712 const helpLink = getHelpLink(filterKey); 5713 html += ` 5714 <div class="config-section"> 5715 <h3 class="config-label" data-filter-key="${filterKey}"> 5716 <span class="config-label__check"> 5717 <span class="config-label__check-empty"></span> 5718 <img class="config-label__check-filled" src="//ipowerresale.com/cdn/shop/t/130/assets/checkmark.png?v=57208139336376101951790277972" alt="selected" width="24" height="24"> 5719 </span> 5720 <span class="config-label__text">Cosmetic Condition:</span> 5721 <span class="config-label__value"></span> 5722 </h3> 5723 ${helpLink ? `<div class="config-help-link">${helpLink}</div>` : ''} 5724 <div class="config-options"> 5725 ${optionValues.map(value => ` 5726 <button class="config-button" data-option="${filterKey}" data-value="${escapeDataValue(value)}"> 5727 ${value} 5728 </button> 5729 `).join('')} 5730 </div> 5731 </div> 5732 `; 5733 } else { 5734 // Standard button section for all other filters 5735 const helpLink = getHelpLink(filterKey); 5736 html += ` 5737 <div class="config-section"> 5738 <h3 class="config-label" data-filter-key="${filterKey}"> 5739 <span class="config-label__check"> 5740 <span class="config-label__check-empty"></span> 5741 <img class="config-label__check-filled" src="//ipowerresale.com/cdn/shop/t/130/assets/checkmark.png?v=57208139336376101951790277972" alt="selected" width="24" height="24"> 5742 </span> 5743 <span class="config-label__text">${config.displayName}:</span> 5744 <span class="config-label__value"></span> 5745 </h3> 5746 ${helpLink ? `<div class="config-help-link">${helpLink}</div>` : ''} 5747 <div class="config-options"> 5748 ${optionValues.map(value => ` 5749 <button class="config-button" data-option="${filterKey}" data-value="${escapeDataValue(value)}"> 5750 ${value} 5751 </button> 5752 `).join('')} 5753 </div> 5754 </div> 5755 `; 5756 } 5757 }); 5758 5759 // Inline Add to Cart section (shown when valid child product is selected) 5760 html += ` 5761 <div id="inline-atc" class="inline-atc" style="display: none;"> 5762 <div class="inline-atc__controls"> 5763 <div class="inline-atc__qty"> 5764 <button class="inline-atc__qty-btn" id="inline-qty-minus" aria-label="Decrease quantity">â</button> 5765 <span class="inline-atc__qty-value" id="inline-qty-value">1</span> 5766 <button class="inline-atc__qty-btn" id="inline-qty-plus" aria-label="Increase quantity">+</button> 5767 </div> 5768 <button id="inline-atc-btn" class="inline-atc__button">ADD TO BAG</button> 5769 </div> 5770 </div> 5771 `; 5772 5773 // Continue button - fixed bottom bar (always visible) 5774 html += ` 5775 <div id="continue-bar" class="continue-bar"> 5776 <div class="continue-bar__content"> 5777 <div class="continue-bar__info"> 5778 <h3 id="continue-product-name" class="continue-bar__product-name"></h3> 5779 <div id="continue-bar-reviews" class="continue-bar__reviews" style="display:none;"></div> 5780 </div> 5781 <div class="continue-bar__actions"> 5782 <div id="continue-bar-qty" class="continue-bar__qty" style="display: none;"> 5783 <button class="continue-bar__qty-btn" id="qty-minus" aria-label="Decrease quantity">â</button>
5784 <span class="continue-bar__qty-value" id="qty-value">1</span> 5785 <button class="continue-bar__qty-btn" id="qty-plus" aria-label="Increase quantity">+</button> 5786 </div> 5787 <button id="continue-btn" class="continue-bar__button" disabled> 5788 0 OF 0 REQUIRED SELECTIONS COMPLETED 5789 </button> 5790 </div> 5791 </div> 5792 </div> 5793 `; 5794 5795 html += '</div>'; 5796 5797 container.innerHTML = html; 5798 5799 // Set parent product name 5800 document.getElementById('continue-product-name').textContent = parentProductTitle.replace('(Parent Product)', ''); 5801 5802 // Show stars/review count in bottom bar if data is already loaded 5803 if (typeof updateContinueBarReviews === 'function') { 5804 updateContinueBarReviews(); 5805 } 5806 5807 // Store products globally for other functions 5808 window.configuratorProducts = products; 5809 5810 // Build floating visual feedback element 5811 buildFloatingFeedback(filterKeys, filterConfig); 5812 5813 // Attach event listeners 5814 const lastChangedOption = window.configuratorData.lastChangedOption; 5815 attachEventListeners(products, filterKeys, selectedOptions, lastChangedOption); 5816 5817 // Set initial selection count on button 5818 const { selected: initSelected, total: initTotal } = getSelectionCounts(filterKeys, selectedOptions); 5819 document.getElementById('continue-btn').textContent = `${initSelected} OF ${initTotal} REQUIRED SELECTIONS COMPLETED`; 5820 5821 // Apply preselected options if available and valid 5822 const preselectionApplied = applyPreselectedOptions(products, filterKeys, selectedOptions); 5823 5824 if (preselectionApplied) { 5825 // Apply UI selections for preselected options 5826 filterKeys.forEach(filterKey => { 5827 const preselectedValue = selectedOptions[filterKey]; 5828 if (preselectedValue) { 5829 const isColorType = isColorFilter(filterKey); 5830 5831 if (isColorType) { 5832 // Select color swatch 5833 document.querySelectorAll(`.color-option[data-option="${filterKey}"]`).forEach(el => { 5834 if (el.dataset.value === preselectedValue) { 5835 el.classList.add('selected'); 5836 } 5837 }); 5838 } else { 5839 // Select button 5840 document.querySelectorAll(`.config-button[data-option="${filterKey}"]`).forEach(el => { 5841 if (el.dataset.value === preselectedValue) { 5842 el.classList.add('selected'); 5843 } 5844 }); 5845 } 5846 } 5847 }); 5848 5849 // Update floating feedback for preselected options 5850 updateFloatingFeedback(filterKeys, selectedOptions); 5851 5852 // Update the UI state after preselection 5853 checkSelection(products, filterKeys, selectedOptions, lastChangedOption); 5854 } else { 5855 // Initialize available options (all should be available on first load) 5856 // Only apply auto-selection logic if no preselection was applied 5857 updateAvailableOptions(products, filterKeys, selectedOptions); 5858 } 5859 } 5860 5861 // Get the lowest price from all products 5862 function getLowestPrice(products) { 5863 if (!products || products.length === 0) { 5864 return parentProductPrice; 5865 } 5866 5867 let lowestPrice = Infinity; 5868 let lowestPriceString = ''; 5869 5870 products.forEach(product => { 5871 if (product.price) { 5872 // Extract numeric value from price string (e.g., "$1,299.00") 5873 const numericValue = parseFloat(product.price.replace(/[$,]/g, '')); 5874 if (numericValue < lowestPrice) { 5875 lowestPrice = numericValue; 5876 lowestPriceString = product.price; 5877 } 5878 } 5879 }); 5880 5881 return lowestPriceString || parentProductPrice; 5882 } 5883 5884 // Initialize the configurator 5885 initializeConfigurator(); 5886 5887 // Attach event listeners to configurator elements 5888 function attachEventListeners(products, filterKeys, selectedOptions, lastChangedOption) { 5889 // Color swatches (for any color filter) 5890 document.querySelectorAll('.color-option').forEach(el => { 5891 el.addEventListener('click', function() { 5892 const optionKey = this.dataset.option; 5893 const newValue = this.dataset.value; 5894 5895 // If clicking on already selected color, do nothing (no toggle-off) 5896 if (this.classList.contains('selected')) { 5897 return; 5898 } 5899 5900 // Select the new color (remove selection from all others first) 5901 document.querySelectorAll(`.color-option[data-option="${optionKey}"]`).forEach(e => e.classList.remove('selected')); 5902 this.classList.add('selected'); 5903 selectedOptions[optionKey] = newValue; 5904 5905 // Track the change 5906 lastChangedOption.key = optionKey; 5907 lastChangedOption.value = newValue; 5908 5909 checkSelection(products, filterKeys, selectedOptions, lastChangedOption); 5910 }); 5911 }); 5912 5913 // Config buttons (for all other filters) 5914 document.querySelectorAll('.config-button').forEach(el => { 5915 el.addEventListener('click', function() { 5916 const option = this.dataset.option; 5917 const value = this.dataset.value; 5918 5919 // If clicking on already selected button, do nothing (no toggle-off) 5920 if (this.classList.contains('selected')) { 5921 return; 5922 } 5923 5924 // Select the new option 5925 this.parentElement.querySelectorAll('.config-button').forEach(e => e.classList.remove('selected')); 5926 this.classList.add('selected'); 5927 selectedOptions[option] = value; 5928 5929 // Track the change 5930 lastChangedOption.key = option; 5931 lastChangedOption.value = value; 5932 5933 checkSelection(products, filterKeys, selectedOptions, lastChangedOption); 5934 }); 5935 }); 5936 5937 // Bottom bar qty 5938 document.getElementById('qty-minus').addEventListener('click', function(e) { 5939 e.stopPropagation(); 5940 if (configuratorQty > 1) { configuratorQty--; syncQtyDisplay(); } 5941 }); 5942 document.getElementById('qty-plus').addEventListener('click', function(e) { 5943 e.stopPropagation(); 5944 if (configuratorQty < maxAvailableQty) { configuratorQty++; syncQtyDisplay(); } 5945 }); 5946 5947 // Inline qty 5948 document.getElementById('inline-qty-minus').addEventListener('click', function(e) { 5949 e.stopPropagation(); 5950 if (configuratorQty > 1) { configuratorQty--; syncQtyDisplay(); } 5951 }); 5952 document.getElementById('inline-qty-plus').addEventListener('click', function(e) { 5953 e.stopPropagation(); 5954 if (configuratorQty < maxAvailableQty) { configuratorQty++; syncQtyDisplay(); } 5955 }); 5956 5957 // Shared add to cart logic 5958 function addToCart(btn) { 5959 const matchedProduct = findMatchingProduct(products, filterKeys, selectedOptions); 5960 if (!matchedProduct) return; 5961 5962 const originalText = btn.textContent; 5963 btn.disabled = true; 5964 btn.textContent = 'ADDING...'; 5965
5966 fetch(`/products/${matchedProduct.handle}.js`) 5967 .then(res => res.json()) 5968 .then(productData => { 5969 const variantId = productData.variants[0].id; 5970 return fetch('/cart/add.js', { 5971 method: 'POST', 5972 headers: { 'Content-Type': 'application/json' }, 5973 body: JSON.stringify({ 5974 items: [{ 5975 id: variantId, 5976 quantity: configuratorQty 5977 }] 5978 }) 5979 }); 5980 }) 5981 .then(res => res.json()) 5982 .then(data => { 5983 // Update both buttons 5984 const bottomBtn = document.getElementById('continue-btn'); 5985 const inlineBtn = document.getElementById('inline-atc-btn'); 5986 bottomBtn.textContent = 'ADDED TO BAG!'; 5987 inlineBtn.textContent = 'ADDED TO BAG!'; 5988 btn.disabled = false; 5989 setTimeout(() => { 5990 bottomBtn.textContent = `ADD TO BAG - ${formatPrice(matchedProduct.price)}`; 5991 inlineBtn.textContent = `ADD TO BAG - ${formatPrice(matchedProduct.price)}`; 5992 }, 2000); 5993 }) 5994 .catch(err => { 5995 console.error('Error adding to cart:', err); 5996 btn.disabled = false; 5997 btn.textContent = originalText; 5998 }); 5999 } 6000 6001 // Bottom bar Add to Cart 6002 document.getElementById('continue-btn').addEventListener('click', function() { 6003 addToCart(this); 6004 }); 6005 6006 // Inline Add to Cart 6007 document.getElementById('inline-atc-btn').addEventListener('click', function() { 6008 addToCart(this); 6009 }); 6010 } 6011 6012 // Validate and fix selections to ensure no invalid state can persist 6013 function validateAndFixSelections(products, filterKeys, selectedOptions, lastChangedOption) { 6014 // Double-check that we never have an invalid combination selected 6015 const currentMatch = findMatchingProduct(products, filterKeys, selectedOptions); 6016 6017 if (!currentMatch) { 6018 // We have an invalid combination - this should have been prevented but let's fix it 6019 console.warn('Invalid combination detected, fixing...', selectedOptions); 6020 6021 // Use the same resolution logic as in highlightAvailableOptions 6022 resolveInvalidSelections(products, filterKeys, selectedOptions, lastChangedOption); 6023 6024 // Verify the fix worked 6025 const fixedMatch = findMatchingProduct(products, filterKeys, selectedOptions); 6026 if (!fixedMatch) { 6027 console.error('Failed to resolve invalid selection, clearing all except last changed'); 6028 6029 // Last resort: clear everything except the last changed option 6030 filterKeys.forEach(key => { 6031 if (key !== lastChangedOption.key) { 6032 const currentSelection = selectedOptions[key]; 6033 if (currentSelection) { 6034 selectedOptions[key] = null; 6035 6036 // Remove from UI 6037 const isColorType = isColorFilter(key); 6038 if (isColorType) { 6039 document.querySelectorAll(`.color-option[data-option="${key}"]`).forEach(el => { 6040 if (el.dataset.value === currentSelection) { 6041 el.classList.remove('selected'); 6042 } 6043 }); 6044 } else { 6045 document.querySelectorAll(`.config-button[data-option="${key}"]`).forEach(el => { 6046 if (el.dataset.value === currentSelection) { 6047 el.classList.remove('selected'); 6048 } 6049 }); 6050 } 6051 } 6052 } 6053 }); 6054 } 6055 } 6056 } 6057 6058 // Find all valid option combinations based on ALL currently selected options 6059 // Strategy: Find products that match ALL selections to show what's truly compatible 6060 function findValidOptionCombinations(products, filterKeys, selectedOptions, lastChangedOption) { 6061 const validOptions = {}; 6062 6063 // Initialize sets for each filter key 6064 filterKeys.forEach(key => { 6065 validOptions[key] = new Set(); 6066 }); 6067 6068 // Get all currently selected options 6069 const currentSelections = {}; 6070 filterKeys.forEach(key => { 6071 if (selectedOptions[key]) { 6072 currentSelections[key] = selectedOptions[key]; 6073 } 6074 }); 6075 6076 // If no selections, return all available options 6077 if (Object.keys(currentSelections).length === 0) {
6078 products.forEach(product => { 6079 const m = product.metafields; 6080 filterKeys.forEach(filterKey => { 6081 if (m[filterKey]) { 6082 validOptions[filterKey].add(m[filterKey]); 6083 } 6084 }); 6085 }); 6086 6087 const result = {}; 6088 filterKeys.forEach(key => { 6089 result[key] = Array.from(validOptions[key]); 6090 }); 6091 return result; 6092 } 6093 6094 // Strategy: Find products that match ALL current selections (excluding the group being tested) 6095 // For each option group, check what values would create valid products 6096 6097 6098 filterKeys.forEach(testFilterKey => { 6099 // For each group, find what values are compatible with ALL OTHER current selections 6100 // Build selections object WITHOUT this group's current selection 6101 const otherSelections = {}; 6102 for (const [key, value] of Object.entries(currentSelections)) { 6103 if (key !== testFilterKey) { 6104 otherSelections[key] = value; 6105 } 6106 } 6107 6108 6109 6110 6111 let matchCount = 0; 6112 // Find products that match ALL other selections 6113 products.forEach(product => { 6114 const m = product.metafields; 6115 6116 // Check if this product matches ALL other selected options 6117 let matchesAll = true; 6118 for (const [key, value] of Object.entries(otherSelections)) { 6119 if (m[key] !== value) { 6120 matchesAll = false; 6121 break; 6122 } 6123 } 6124 6125 // If it matches all other selections, this option value is valid 6126 if (matchesAll && m[testFilterKey]) { 6127 validOptions[testFilterKey].add(m[testFilterKey]); 6128 matchCount++; 6129 } 6130 }); 6131 6132 6133 6134 }); 6135 6136 // Convert sets to arrays 6137 const result = {}; 6138 filterKeys.forEach(key => { 6139 result[key] = Array.from(validOptions[key]); 6140 }); 6141 6142 6143 6144 return result; 6145 } 6146 6147 // Find options that are compatible with ONLY the last changed option 6148 // Used to decide whether to keep or unselect existing selections in other groups 6149 function findOptionsCompatibleWithLastChanged(products, filterKeys, lastChangedOption) { 6150 const compat = {}; 6151 filterKeys.forEach(key => (compat[key] = new Set())); 6152 6153 if (!lastChangedOption || !lastChangedOption.key || !lastChangedOption.value) { 6154 // No last change context; return empty sets 6155 const result = {}; 6156 filterKeys.forEach(key => (result[key] = [])); 6157 return result; 6158 } 6159 6160 // Collect all products that match the last changed option 6161 const matching = products.filter(p => p.metafields[lastChangedOption.key] === lastChangedOption.value); 6162 6163 // Aggregate values per group from those products 6164 matching.forEach(product => { 6165 const m = product.metafields; 6166 filterKeys.forEach(groupKey => { 6167 if (m[groupKey]) compat[groupKey].add(m[groupKey]); 6168 }); 6169 }); 6170 6171 const result = {}; 6172 filterKeys.forEach(key => (result[key] = Array.from(compat[key]))); 6173 return result; 6174 } 6175 6176 // Resolve invalid selections intelligently to handle race conditions 6177 function resolveInvalidSelections(products, filterKeys, selectedOptions, lastChangedOption) { 6178 let selectionsChanged = false; 6179 6180 // If no last changed option, we can't resolve intelligently 6181 if (!lastChangedOption || !lastChangedOption.key || !lastChangedOption.value) { 6182 return selectionsChanged; 6183 } 6184 6185 // Check if current selections create a valid product 6186 const currentMatch = findMatchingProduct(products, filterKeys, selectedOptions); 6187 if (currentMatch) { 6188 return selectionsChanged; // All selections are valid, no need to resolve 6189 } 6190 6191 // Find all possible valid combinations that include the last changed o
6191ption 6192 const validCombinationsWithLastChange = products.filter(product => { 6193 return product.metafields[lastChangedOption.key] === lastChangedOption.value; 6194 }); 6195 6196 if (validCombinationsWithLastChange.length === 0) { 6197 // The last changed option itself is invalid, this shouldn't happen but handle it 6198 console.warn('Last changed option creates no valid products:', lastChangedOption); 6199 return selectionsChanged; 6200 } 6201 6202 // Strategy: Find the minimal set of options to unselect to make a valid combination 6203 // Priority: Keep as many user selections as possible while ensuring validity 6204 6205 // Get all currently selected options (excluding the last changed one) 6206 const otherSelections = {}; 6207 filterKeys.forEach(key => { 6208 if (key !== lastChangedOption.key && selectedOptions[key]) { 6209 otherSelections[key] = selectedOptions[key]; 6210 } 6211 }); 6212 6213 // If no other selections, we're already valid (just the last changed option) 6214 if (Object.keys(otherSelections).length === 0) { 6215 return selectionsChanged; 6216 } 6217 6218 // Find which combinations of the other selections work with the last changed option 6219 const otherSelectionKeys = Object.keys(otherSelections); 6220 6221 // Try to find a valid product that matches the last changed option and as many other selections as possible 6222 let bestMatch = null; 6223 let maxMatchingSelections = 0; 6224 6225 validCombinationsWithLastChange.forEach(product => { 6226 let matchingCount = 0; 6227 const matchingKeys = []; 6228 6229 // Count how many other selections this product matches 6230 otherSelectionKeys.forEach(key => { 6231 if (product.metafields[key] === otherSelections[key]) { 6232 matchingCount++; 6233 matchingKeys.push(key); 6234 } 6235 }); 6236 6237 // Keep track of the product that matches the most selections 6238 if (matchingCount > maxMatchingSelections) { 6239 maxMatchingSelections = matchingCount; 6240 bestMatch = { product, matchingKeys }; 6241 } 6242 }); 6243 6244 if (bestMatch && bestMatch.matchingKeys.length > 0) { 6245 // We found a valid combination - unselect options that don't match the best combination 6246 otherSelectionKeys.forEach(key => { 6247 if (!bestMatch.matchingKeys.includes(key)) { 6248 // This selection needs to be unselected 6249 const currentSelection = selectedOptions[key]; 6250 selectedOptions[key] = null; 6251 selectionsChanged = true; 6252 6253 console.log(`Resolving race condition: Unselecting ${key}=${currentSelection} to maintain valid combination`); 6254 6255 // Remove selected class from UI 6256 const isColorType = isColorFilter(key); 6257 if (isColorType) { 6258 document.querySelectorAll(`.color-option[data-option="${key}"]`).forEach(el => { 6259 if (el.dataset.value === currentSelection) { 6260 el.classList.remove('selected'); 6261 } 6262 }); 6263 } else { 6264 document.querySelectorAll(`.config-button[data-option="${key}"]`).forEach(el => { 6265 if (el.dataset.value === currentSelection) { 6266 el.classList.remove('selected'); 6267 } 6268 }); 6269 } 6270 } 6271 }); 6272 } else { 6273 // No valid combination found that preserves any other selections 6274 // Unselect all other options to ensure the last changed option remains valid 6275 console.log('No compatible combinations found, clearing all other selections'); 6276 6277 otherSelectionKeys.forEach(key => { 6278 const currentSelection = selectedOptions[key]; 6279 selectedOptions[key] = null; 6280 selectionsChanged = true; 6281 6282 // Remove selected class from UI 6283 const isColorType = isColorFilter(key); 6284 if (isColorType) { 6285 document.querySelectorAll(`.color-option[data-option="${key}"]`).forEach(el => { 6286 if (el.dataset.value === currentSelection) { 6287 el.classList.remove('selected'); 6288 } 6289 }); 6290 } else { 6291 document.querySelectorAll(`.config-button[data-option="${key}"]`).forEach(el => { 6292 if (el.dataset.value === currentSelection) { 6293 el.classList.remove('selected'); 6294 } 6295 }); 6296 } 6297 }); 6298 } 6299 6300 return selectionsChanged; 6301 } 6302 6303 // Clear all highlighting from options
6304 function clearOptionHighlighting() { 6305 // Clear from buttons - remove all styling classes 6306 document.querySelectorAll('.config-button').forEach(el => { 6307 el.classList.remove('unavailable', 'available', 'invalid'); 6308 }); 6309 6310 // Clear from color options - remove all styling classes 6311 document.querySelectorAll('.color-option').forEach(el => { 6312 el.classList.remove('unavailable', 'available', 'invalid'); 6313 }); 6314 } 6315 6316 // Highlight available options with blue border (user must click to select - no auto-selection) 6317 function highlightAvailableOptions(products, filterKeys, selectedOptions, lastChangedOption) { 6318 6319 const hasAnySelection = filterKeys.filter(key => selectedOptions[key]); 6320 6321 if (hasAnySelection.length > 0) { 6322 let showStyle= false 6323 hasAnySelection.forEach(key => { 6324 const length = document.querySelectorAll(`[data-option="${key}"]`).length 6325 if (length > 1) { 6326 showStyle = true 6327 } 6328 }); 6329 if (!showStyle) { 6330 return; // Don't apply any highlighting on page load 6331 } 6332 } 6333 6334 // if (!hasAnySelection) { 6335 // return; // Don't apply any highlighting on page load 6336 // } 6337 6338 // Clear any existing highlighting 6339 clearOptionHighlighting(); 6340 6341 // STEP 1: Handle race condition - resolve invalid selections intelligently 6342 let selectionsChanged = resolveInvalidSelections(products, filterKeys, selectedOptions, lastChangedOption); 6343 6344 // Get valid option combinations based on current selections (after resolution) 6345 let validCombinations = findValidOptionCombinations(products, filterKeys, selectedOptions, lastChangedOption); 6346 6347 if (selectionsChanged) { 6348 // Recompute valid combinations after resolving conflicts 6349 validCombinations = findValidOptionCombinations(products, filterKeys, selectedOptions, lastChangedOption); 6350 } 6351 6352 // Get list of all groups that have selections (don't highlight options in these groups) 6353 const selectedGroups = new Set(); 6354 filterKeys.forEach(key => { 6355 if (selectedOptions[key]) { 6356 selectedGroups.add(key); 6357 } 6358 }); 6359 6360 // STEP 2: Highlight available options for all groups 6361 // Skip highlighting ONLY for the group that was just clicked by the user 6362 filterKeys.forEach(filterKey => { 6363 const validValues = validCombinations[filterKey]; 6364 const currentSelection = selectedOptions[filterKey]; 6365 const isColorType = isColorFilter(filterKey); 6366 6367 // Skip the group that was just clicked - don't show other options in that group 6368 if (lastChangedOption && filterKey === lastChangedOption.key) { 6369 // Only mark invalid options in the just-clicked group, don't highlight valid ones 6370 if (isColorType) { 6371 document.querySelectorAll(`.color-option[data-option="${filterKey}"]`).forEach(el => { 6372 const value = el.dataset.value; 6373 if (validValues.length > 0 && !validValues.includes(value)) { 6374 el.classList.add('invalid'); 6375 el.classList.remove('available'); 6376 } else { 6377 el.classList.remove('invalid', 'available'); 6378 } 6379 }); 6380 } else { 6381 document.querySelectorAll(`.config-button[data-option="${filterKey}"]`).forEach(el => { 6382 const value = el.dataset.value; 6383 if (validValues.length > 0 && !validValues.includes(value)) { 6384 el.classList.add('invalid'); 6385 el.classList.remove('available'); 6386 } else { 6387 el.classList.remove('invalid', 'available'); 6388 } 6389 }); 6390 } 6391 return; 6392 } 6393 6394 // For all OTHER groups (including those with selections): 6395 // Show valid options as available, mark invalid as gray 6396 if (isColorType) { 6397 document.querySelectorAll(`.color-option[data-option="${filterKey}"]`).forEach(el => { 6398 const value = el.dataset.value; 6399 const isSelected = el.classList.contains('selected'); 6400 6401 if (validValues.length > 0 && validValues.includes(value) && !isSelected) { 6402 // Valid but not selected - highlight as available 6403 el.classList.add('available'); 6404 el.classList.remove('invalid'); 6405 } else if (validValues.length > 0 && !validValues.includes(value)) { 6406 // Invalid - mark as gray 6407 el.classList.add('invalid'); 6408 el.classList.remove('available'); 6409 } else { 6410 // Selected or no valid options 6411 el.classList.remove('invalid', 'available'); 6412 } 6413 }); 6414 } else { 6415 document.querySelectorAll(`.config-button[data-option="${filterKey}"]`).forEach(el => { 6416 const value = el.dataset.value; 6417 const isSelected = el.classList.contains('selected'); 6418 6419 if (validValues.length > 0 && validValues.includes(value) && !isSelected) { 6420 // Valid but not selected - highlight as available 6421 el.classList.add('available'); 6422 el.classList.remove('invalid'); 6423 } else if (validValues.length > 0 && !validValues.includes(value)) { 6424 // Invalid - mark as gray 6425 el.classList.add('invalid'); 6426 el.classList.remove('available'); 6427 } else { 6428 // Selected or no valid options 6429 el.classList.remove('invalid', 'available'); 6430 } 6431 }); 6432 } 6433 }); 6434 } 6435 6436 // Render addon products into the add-ons container 6437 function renderAddonProducts(addonProducts) { 6438 const container = document.getElementById('configurator-addons'); 6439 const list = document.getElementById('configurator-addons-list'); 6440 if (!container || !list) return; 6441 6442 if (!addonProducts || addonProducts.length === 0) { 6443 container.style.display = 'none'; 6444 list.innerHTML = ''; 6445 return; 6446 } 6447 6448 const warrantyModalId = window.__warrantyModalId || null; 6449 6450 list.innerHTML = addonProducts.map(product => { 6451 const price = product.priceRange?.minVariantPrice?.amount
6452 ? `$${parseFloat(product.priceRange.minVariantPrice.amount).toFixed(2)}` 6453 : ''; 6454 const imageUrl = product.featuredImage?.url || ''; 6455 const imageAlt = product.featuredImage?.altText || product.title; 6456 const productId = product.id.split('/').pop(); 6457 const description = product.description 6458 ? (product.description.length > 80 ? product.description.substring(0, 80) + '...' : product.description) 6459 : ''; 6460 const isWarranty = productId === '7713399963817'; 6461 const warrantyIcon = (isWarranty && warrantyModalId) 6462 ? `<button type="button" class="add-ons-warranty-info-btn" data-warranty-modal-open="${warrantyModalId}" aria-label="Learn more about warranty"> 6463 <svg width="10" height="10" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 6464 <circle cx="10" cy="10" r="9" stroke="#1D7F9A" stroke-width="1.5"/> 6465 <rect x="9.25" y="9" width="1.5" height="6" rx="0.75" fill="#1D7F9A"/> 6466 <rect x="9.25" y="5.5" width="1.5" height="1.5" rx="0.75" fill="#1D7F9A"/> 6467 </svg> 6468 </button>` 6469 : ''; 6470 6471 return ` 6472 <div class="add-ons-card" data-product-id="${productId}" data-product-handle="${product.handle}"> 6473 <div class="add-ons-card-image"> 6474 ${imageUrl 6475 ? `<img src="${imageUrl}" alt="${imageAlt}" class="add-ons-product-image" loading="lazy" width="150" height="150">` 6476 : '<div class="add-ons-placeholder"></div>' 6477 } 6478 </div> 6479 <div class="add-ons-card-content"> 6480 <h3 class="add-ons-product-title">${product.title}${warrantyIcon}</h3> 6481 ${description ? `<p class="add-ons-product-description">${description}</p>` : ''} 6482 <div class="add-ons-product-price">${price}</div> 6483 <button type="button" class="add-ons-add-to-cart" data-product-handle="${product.handle}"> 6484 ADD TO BAG 6485 </button> 6486 </div> 6487 </div> 6488 `; 6489 }).join(''); 6490 6491 container.style.display = ''; 6492 6493 // Attach add-to-cart handlers 6494 list.querySelectorAll('.add-ons-add-to-cart').forEach(btn => { 6495 btn.addEventListener('click', async function() { 6496 const handle = this.dataset.productHandle; 6497 try { 6498 this.disabled = true; 6499 this.textContent = 'ADDING...'; 6500 6501 // Fetch product to get first available variant ID 6502 const res = await fetch(`/products/${handle}.js`); 6503 const productData = await res.json(); 6504 const variantId = productData.variants.find(v => v.available)?.id; 6505 6506 if (!variantId) { 6507 this.textContent = 'UNAVAILABLE'; 6508 return; 6509 } 6510 6511 // Add to cart with hidden line item property linking to the child product 6512 const childHandle = document.getElementById('configurator-addons')?.dataset.childHandle || ''; 6513 await fetch('/cart/add.js', { 6514 method: 'POST', 6515 headers: { 'Content-Type': 'application/json' }, 6516 body: JSON.stringify({ 6517 items: [{ 6518 id: variantId, 6519 quantity: 1, 6520 properties: { 6521 '_addon_for': childHandle 6522 } 6523 }] 6524 }) 6525 }); 6526 6527 this.textContent = 'ADDED!'; 6528 setTimeout(() => { 6529 this.textContent = 'ADD TO BAG'; 6530 this.disabled = false; 6531 }, 2000); 6532 } catch (error) { 6533 console.error('Error adding addon to cart:', error); 6534 this.textContent = 'ADD TO BAG'; 6535 this.disabled = false; 6536 } 6537 }); 6538 }); 6539 } 6540 6541 // Check if a valid product selection is made and update available options 6542 function checkSelection(products, filterKeys, selectedOptions, lastChangedOption) { 6543 // SAFETY CHECK: Ensure no invalid selections persist 6544 const hasInvalidSelections = filterKeys.some(key => { 6545 const selection = selectedOptions[key]; 6546 if (!selection) return false;
6547 6548 // Check if this selection creates any valid products when combined with other selections 6549 const testSelections = { ...selectedOptions }; 6550 return !products.some(product => { 6551 return filterKeys.every(filterKey => { 6552 return !testSelections[filterKey] || product.metafields[filterKey] === testSelections[filterKey]; 6553 }); 6554 }); 6555 }); 6556 6557 if (hasInvalidSelections) { 6558 console.error('Invalid selections detected in checkSelection, fixing...'); 6559 resolveInvalidSelections(products, filterKeys, selectedOptions, lastChangedOption); 6560 } 6561 6562 // Update floating feedback 6563 updateFloatingFeedback(filterKeys, selectedOptions); 6564 6565 const matchedProduct = findMatchingProduct(products, filterKeys, selectedOptions); 6566 const continueBtn = document.getElementById('continue-btn'); 6567 const qtyContainer = document.getElementById('continue-bar-qty'); 6568 const inlineAtc = document.getElementById('inline-atc'); 6569 6570 // Check if all required options are selected 6571 const allOptionsSelected = areAllOptionsSelected(filterKeys, selectedOptions); 6572 6573 // Check if we have any selections 6574 const hasAnySelection = filterKeys.some(key => selectedOptions[key]); 6575 6576 // ADDITIONAL SAFETY: Never enable continue button for invalid combinations 6577 const isValidCombination = matchedProduct !== null && matchedProduct !== undefined; 6578 6579 // Get dynamic selection counts 6580 const { selected: selectedCount, total: totalRequired } = getSelectionCounts(filterKeys, selectedOptions); 6581 const selectionText = `${selectedCount} OF ${totalRequired} REQUIRED SELECTIONS COMPLETED`; 6582 6583 // Update button state and price display 6584 if (isValidCombination && allOptionsSelected) { 6585 // All selections complete and valid - enable button, show qty selector and price in button 6586 continueBtn.disabled = false; 6587 continueBtn.textContent = `ADD TO BAG - ${formatPrice(matchedProduct.price)}`; 6588 qtyContainer.style.display = 'flex'; 6589 6590 // Update max available quantity and reset if current exceeds it 6591 maxAvailableQty = matchedProduct.inventoryQuantity > 0 ? matchedProduct.inventoryQuantity : 1; 6592 if (configuratorQty > maxAvailableQty) { 6593 configuratorQty = maxAvailableQty; 6594 } 6595 syncQtyDisplay(); 6596 6597 // Show inline add to cart 6598 if (inlineAtc) { 6599 inlineAtc.style.display = 'block'; 6600 document.getElementById('inline-atc-btn').textContent = `ADD TO BAG - ${formatPrice(matchedProduct.price)}`; 6601 } 6602 6603 // Store matched child product handle for addon line item properties 6604 const addonsContainer = document.getElementById('configurator-addons'); 6605 if (addonsContainer) addonsContainer.dataset.childHandle = matchedProduct.handle || ''; 6606 6607 // Fetch addon products for the matched child product 6608 const addonGidsRaw = matchedProduct.metafields?.cql_addon_product; 6609 if (addonGidsRaw) { 6610 try { 6611 const addonGids = JSON.parse(addonGidsRaw); 6612 if (Array.isArray(addonGids) && addonGids.length > 0) { 6613 fetchAddonProducts(addonGids).then(addonProducts => { 6614 window.configuratorData.addonProducts = addonProducts; 6615 renderAddonProducts(addonProducts); 6616 }); 6617 } else { 6618 renderAddonProducts([]); 6619 } 6620 } catch (e) { 6621 console.warn('Error parsing addon_product metafield:', e); 6622 renderAddonProducts([]); 6623 } 6624 } else { 6625 window.configuratorData.addonProducts = []; 6626 renderAddonProducts([]); 6627 } 6628 6629 // Update child product ID and load reviews 6630 window.configuratorData.childProductId = matchedProduct.id; 6631 window.loadProductRating(); 6632 6633 // Don't clear highlighting - show alternatives even with valid product 6634 // This allows users to see other valid options they can switch to 6635 highlightAvailableOptions(products, filterKeys, selectedOptions, lastChangedOption); 6636 } else if (hasAnySelection) { 6637 // User has made some selections (partial or complete) 6638 renderAddonProducts([]); 6639 qtyContainer.style.display = 'none'; 6640 if (inlineAtc) inlineAtc.style.display = 'none'; 6641 if (allOptionsSelected && !isValidCombination) { 6642 continueBtn.disabled = true; 6643 continueBtn.textContent = 'Invalid combination - please adjust selections'; 6644 } else { 6645 continueBtn.disabled = true; 6646 continueBtn.textContent = selectionText; 6647 } 6648 6649 // Highlight available options dynamically based on selections 6650 highlightAvailableOptions(products, filterKeys, selectedOptions, lastChangedOption); 6651 } else { 6652 // No selections yet 6653 renderAddonProducts([]); 6654 qtyContainer.style.display = 'none'; 6655 if (inlineAtc) inlineAtc.style.display = 'none'; 6656 continueBtn.disabled = true; 6657 continueBtn.textContent = selectionText; 6658 6659 // Clear any highlighting
6660 clearOptionHighlighting(); 6661 } 6662 6663 // Update available options based on current selections 6664 updateAvailableOptions(products, filterKeys, selectedOptions); 6665 } 6666 6667 // Count selected and total required options 6668 function getSelectionCounts(filterKeys, selectedOptions) { 6669 let total = 0; 6670 let selected = 0; 6671 for (const filterKey of filterKeys) { 6672 const hasColorOptions = document.querySelectorAll(`.color-option[data-option="${filterKey}"]`).length > 0; 6673 const hasButtonOptions = document.querySelectorAll(`.config-button[data-option="${filterKey}"]`).length > 0; 6674 if (hasColorOptions || hasButtonOptions) { 6675 total++; 6676 if (selectedOptions[filterKey]) { 6677 selected++; 6678 } 6679 } 6680 } 6681 return { selected, total }; 6682 } 6683 6684 // Check if all option types have been selected (dynamic) 6685 function areAllOptionsSelected(filterKeys, selectedOptions) { 6686 // Check that each filter key has a selection 6687 for (const filterKey of filterKeys) { 6688 // Check if this filter type exists in the DOM 6689 const hasColorOptions = document.querySelectorAll(`.color-option[data-option="${filterKey}"]`).length > 0; 6690 const hasButtonOptions = document.querySelectorAll(`.config-button[data-option="${filterKey}"]`).length > 0; 6691 6692 if ((hasColorOptions || hasButtonOptions) && !selectedOptions[filterKey]) { 6693 return false; 6694 } 6695 } 6696 6697 return true; 6698 } 6699 6700 // Update which options are available based on current selections (dynamic) 6701 function updateAvailableOptions(products, filterKeys, selectedOptions) { 6702 // Track if we auto-selected anything 6703 let autoSelected = false; 6704 6705 // SMART AUTO-SELECTION: Only auto-select if there's exactly ONE option in the entire group 6706 // This means the customer has no choice to make 6707 filterKeys.forEach(filterKey => { 6708 const isColorType = isColorFilter(filterKey); 6709 6710 if (!selectedOptions[filterKey]) { 6711 if (isColorType) { 6712 // For color filters, check .color-option elements 6713 const totalColorOptions = document.querySelectorAll(`.color-option[data-option="${filterKey}"]`).length; 6714 if (totalColorOptions === 1) { 6715 const optionValue = document.querySelector(`.color-option[data-option="${filterKey}"]`).dataset.value; 6716 autoSelectOption(filterKey, optionValue, filterKeys, selectedOptions); 6717 autoSelected = true; 6718 } 6719 } else { 6720 const totalOptionsInGroup = document.querySelectorAll(`.config-button[data-option="${filterKey}"]`).length; 6721 6722 // Only auto-select if the group has exactly 1 option total (not just 1 available) 6723 if (totalOptionsInGroup === 1) { 6724 const optionValue = document.querySelector(`.config-button[data-option="${filterKey}"]`).dataset.value; 6725 autoSelectOption(filterKey, optionValue, filterKeys, selectedOptions); 6726 autoSelected = true; 6727 } 6728 } 6729 } 6730 }); 6731 6732 // If we auto-selected anything, recursively update again 6733 if (autoSelected) { 6734 // Update floating feedback after auto-selection 6735 updateFloatingFeedback(filterKeys, selectedOptions); 6736 6737 const lastChangedOption = window.configuratorData ? window.configuratorData.lastChangedOption : null; 6738 checkSelection(products, filterKeys, selectedOptions, lastChangedOption); 6739 } 6740 } 6741 6742 // Get products that match current partial selections (dynamic) 6743 function getAvailableProducts(products, filterKeys, selectedOptions) { 6744 return products.filter(product => { 6745 const m = product.metafields; 6746 6747 // Check each selected option dynamically 6748 for (const filterKey of filterKeys) { 6749 if (selectedOptions[filterKey] && m[filterKey] !== selectedOptions[filterKey]) { 6750 return false;
6751 } 6752 } 6753 6754 return true; 6755 }); 6756 } 6757 6758 // Update availability of options for a specific type (dynamic) 6759 function updateOptionAvailability(optionType, availableValues, products, filterKeys, selectedOptions) { 6760 const isColorType = isColorFilter(optionType); 6761 6762 if (isColorType) { 6763 // Color options are always enabled - never disable them 6764 document.querySelectorAll(`.color-option[data-option="${optionType}"]`).forEach(el => { 6765 el.classList.remove('disabled'); 6766 el.style.pointerEvents = 'auto'; 6767 }); 6768 } else { 6769 // Handle buttons - check if each option can create a valid product 6770 const buttons = document.querySelectorAll(`.config-button[data-option="${optionType}"]`); 6771 6772 buttons.forEach(el => { 6773 const value = el.dataset.value; 6774 // Check if this option value can create a valid product with current selections 6775 const canCreateValidProduct = checkIfOptionCreatesValidProduct(products, optionType, value, filterKeys, selectedOptions); 6776 6777 // if (canCreateValidProduct) { 6778 // el.classList.remove('disabled'); 6779 // el.disabled = false; 6780 // } else { 6781 // el.classList.add('disabled'); 6782 // el.disabled = true; 6783 // } 6784 }); 6785 } 6786 } 6787 6788 // Check if a specific option value can create a valid product (dynamic) 6789 function checkIfOptionCreatesValidProduct(products, optionType, optionValue, filterKeys, selectedOptions) { 6790 return products.some(product => { 6791 const m = product.metafields; 6792 6793 // Must match this option value 6794 if (m[optionType] !== optionValue) return false; 6795 6796 // Must match all other selected options (except the one we're checking) 6797 for (const filterKey of filterKeys) { 6798 if (filterKey !== optionType && selectedOptions[filterKey]) { 6799 if (m[filterKey] !== selectedOptions[filterKey]) { 6800 return false; 6801 } 6802 } 6803 } 6804 6805 return true; // This product matches all criteria 6806 }); 6807 } 6808 6809 // Count how many options are enabled (not disabled) for a given type 6810 function getEnabledOptionsCount(optionType, products, filterKeys, selectedOptions) { 6811 let count = 0; 6812 document.querySelectorAll(`.config-button[data-option="${optionType}"]`).forEach(el => { 6813 const value = el.dataset.value; 6814 if (checkIfOptionCreatesValidProduct(products, optionType, value, filterKeys, selectedOptions)) { 6815 count++; 6816 } 6817 }); 6818 return count; 6819 } 6820 6821 // Reset only invalid selections when an option changes (dynamic) 6822 function resetInvalidSelections(products, filterKeys, selectedOptions) { 6823 // First, check if current selections make a valid product 6824 const matchedProduct = findMatchingProduct(products, filterKeys, selectedOptions); 6825 6826 if (matchedProduct) { 6827 return; // All selections are valid, don't reset anything 6828 } 6829 6830 // Get products available for currently selected options 6831 const availableProducts = getAvailableProducts(products, filterKeys, selectedOptions); 6832 6833 // Extract available options for current selections (with sort order) 6834 const optionSortOrder = window.configuratorData ? window.configuratorData.optionSortOrder : null; 6835 const availableForCurrent = extractOptions(availableProducts, filterKeys, optionSortOrder); 6836 6837 // Check each selection and reset if no longer valid 6838 filterKeys.forEach(filterKey => { 6839 const currentValue = selectedOptions[filterKey]; 6840 const available = availableForCurrent[filterKey]; 6841 6842 // If option is selected but not available with current selections, reset it 6843 if (currentValue && !available.includes(currentValue)) { 6844 selectedOptions[filterKey] = null; 6845 6846 // Remove selected class from UI 6847 const isColorType = isColorFilter(filterKey); 6848 if (isColorType) { 6849 document.querySelectorAll(`.color-option[data-option="${filterKey}"]`).forEach(el => { 6850 if (el.dataset.value === currentValue) { 6851 el.classList.remove('selected'); 6852 } 6853 }); 6854 } else { 6855 document.querySelectorAll(`.config-button[data-option="${filterKey}"]`).forEach(el => { 6856 if (el.dataset.value === currentValue) { 6857 el.classList.remove('selected'); 6858 } 6859 }); 6860 } 6861 } 6862 }); 6863 } 6864 6865 // Reset all selections except the specified key (dynamic) 6866 function resetOtherSelections(exceptKey, filterKeys, selectedOptions) { 6867 // Clear state for all options except the specified one 6868 filterKeys.forEach(filterKey => { 6869 if (filterKey !== exceptKey) { 6870 selectedOptions[filterKey] = null; 6871 } 6872 }); 6873 6874 // Remove selected class from UI elements 6875 document.querySelectorAll('.config-button').forEach(el => { 6876 el.classList.remove('selected'); 6877 }); 6878 6879 // Also remove from color options if not the except key 6880 filterKeys.forEach(filterKey => { 6881 if (filterKey !== exceptKey && isColorFilter(filterKey)) { 6882 document.querySelectorAll(`.color-option[data-option="${filterKey}"]`).forEach(el => { 6883 el.classList.remove('selected'); 6884 }); 6885 } 6886 }); 6887 } 6888 6889 // Auto-select an option when it's the only one available (dynamic) 6890 function autoSelectOption(optionType, value, filterKeys, selectedOptions) { 6891 // Update state 6892 selectedOptions[optionType] = value; 6893 6894 const isColorType = isColorFilter(optionType); 6895 6896 if (isColorType) { 6897 // Handle color swatches 6898 document.querySelectorAll(`.color-option[data-option="${optionType}"]`).forEach(el => { 6899 if (el.dataset.value === value) { 6900 el.classList.add('selected'); 6901 } else { 6902 el.classList.remove('selected'); 6903 } 6904 }); 6905 } else { 6906 // Handle buttons 6907 document.querySelectorAll(`.config-button[data-option="${optionType}"]`).forEach(el => { 6908 if (el.dataset.value === value) { 6909 el.classList.add('selected'); 6910 } else { 6911 el.classList.remove('selected'); 6912 } 6913 }); 6914 } 6915 } 6916 6917 // Find matching product based on current selections (dynamic) 6918 function findMatchingProduct(products, filterKeys, selectedOptions) { 6919 //to see what are the selected options to get the valid prodcts uncomment this 6920 // console.log('Finding matching product with selections:', selectedOptions); 6921 return products.find(product => { 6922 const m = product.metafields; 6923 6924 // Check all filter keys dynamically 6925 for (const filterKey of filterKeys) { 6926 if (selectedOptions[filterKey] && m[filterKey] !== selectedOptions[filterKey]) { 6927 return false;
6928 } 6929 } 6930 6931 return true; 6932 }); 6933 } 6934 6935 })(); 6936 6937 </script>
6937 6938
6938<script src="//ipowerresale.com/cdn/shop/t/130/assets/FetchKlaviyoReview.js?v=114453090226179426451790277981" defer></script>
6938 6939 6940 <style> 6941 /* Floating Feedback Styles */ 6942 .floating-feedback { 6943 position: fixed; 6944 top: 50%; 6945 right: 0; 6946 transform: translateY(-50%); 6947 background: white; 6948 border-radius: 12px 0 0 12px; 6949 border-left: 1px solid #E5E7EB; 6950 border-top: 1px solid #E5E7EB; 6951 border-bottom: 1px solid #E5E7EB; 6952 box-shadow: -2px 0 8px rgba(0, 0, 0, 0.1); 6953 z-index: 2; 6954 transition: transform 0.3s ease; 6955 padding: 10px 5px; 6956 display: flex; 6957 align-items: center; 6958 cursor: pointer; 6959 } 6960 6961 .floating-feedback:hover { 6962 background: #FAFAFA; 6963 } 6964 6965 .floating-feedback.collapsed { 6966 transform: translateY(-50%) translateX(0); 6967 } 6968 6969 .floating-feedback.expanded { 6970 transform: translateY(-50%) translateX(0); 6971 } 6972 6973 .floating-feedback__arrow { 6974 display: flex; 6975 align-items: center; 6976 justify-content: center; 6977 color: #9CA3AF; 6978 flex-shrink: 0; 6979 transition: transform 0.3s ease, color 0.2s ease; 6980 } 6981 6982 .floating-feedback:hover .floating-feedback__arrow { 6983 color: #6B7280; 6984 } 6985 6986 .floating-feedback.expanded .floating-feedback__arrow svg { 6987 transform: rotate(180deg); 6988 } 6989 6990 .floating-feedback__items { 6991 display: flex; 6992 flex-direction: column; 6993 gap: 12px; 6994 } 6995 6996 .floating-feedback__item { 6997 display: flex; 6998 align-items: center; 6999 gap: 8px; 7000 position: relative; 7001 } 7002 7003 .floating-feedback__item .config-label__check { 7004 width: 20px; 7005 height: 20px; 7006 flex-shrink: 0; 7007 } 7008 7009 .floating-feedback__item .config-label__check-empty { 7010 width: 20px; 7011 height: 20px; 7012 } 7013 7014 .floating-feedback__item .config-label__check-filled { 7015 width: 20px; 7016 height: 20px; 7017 } 7018 7019 .floating-feedback__label { 7020 font-size: 14px; 7021 font-weight: 500; 7022 color: #374151; 7023 white-space: nowrap; 7024 text-transform: none !important; 7025 opacity: 0; 7026 max-width: 0; 7027 overflow: hidden; 7028 transition: opacity 0.3s ease, max-width 0.3s ease; 7029 } 7030 7031 .floating-feedback.expanded .floating-feedback__label { 7032 opacity: 1; 7033 max-width: 200px; 7034 } 7035 7036 /* Responsive styles */ 7037 @media (max-width: 768px) { 7038 .floating-feedback { 7039 padding: 10px 4px; 7040 gap: 6px; 7041 } 7042 7043 .floating-feedback__items { 7044 gap: 10px; 7045 } 7046 7047 .floating-feedback__item .config-label__check { 7048 width: 18px; 7049 height: 18px; 7050 } 7051 .floating-feedback__item .config-label__check-empty { 7052 width: 18px; 7053 height: 18px; 7054 } 7055 .floating-feedback__item .config-label__check-filled { 7056 width: 18px; 7057 height: 18px; 7058 } 7059 7060 .floating-feedback__arrow svg { 7061 width: 14px; 7062 height: 14px; 7063 } 7064 7065 .floating-feedback__label { 7066 font-size: 12px; 7067 } 7068 7069 .floating-feedback.expanded .floating-feedback__label { 7070 max-width: 150px; 7071 } 7072 } 7073 </style> 7074 7075 7076 7077 7078 </div><div > 7079 <div id="shopify-block-AZXdITk53Vyt3clpIN__afterpay_on_site_messaging_payments_messaging_WgEwWp" class="shopify-block shopify-app-block"> 7080<!-- BEGIN app snippet: messaging-component --> 7081 7082<style data-shopify> 7083 #placement-AZXdITk53Vyt3clpIN__afterpay_on_site_messaging_payments_messaging_WgEwWp { 7084 text-align: inherit; 7085 7086 margin-top: 16px; 7087 7088 7089 margin-bottom: 16px; 7090 7091 7092 } 7093 7094 @media only screen and (max-width: 749px) { 7095 #placement-AZXdITk53Vyt3clpIN__afterpay_on_site_messaging_payments_messaging_WgEwWp { 7096 text-align: inherit; 7097 7098 margin-top: 16px; 7099 7100 7101 margin-bottom: 16px; 7102 7103 } 7104 } 7105 7106</style> 7107 7108<square-placement 7109 id="placement-AZXdITk53Vyt3clpIN__afterpay_on_site_messaging_payments_messaging_WgEwWp" 7110 data-mpid="ipowerresale.myshopify.com" 7111 data-currency="USD" 7112 data-consumer-locale="en_US" 7113 data-amount="" 7114 data-size="md" 7115 data-show-lower-limit="true" 7116 data-show-upper-limit="true" 7117 data-show-if-outside-limits="true" 7118 data-intro-text="or" 7119 data-show-interest-free="false" 7120 data-payment-amount-is-bold="true" 7121 data-show-with="true" 7122 data-logo-type="badge" 7123 7124 data-badge-theme="black-on-white" 7125 7126 data-modal-link-style="circled-info-icon" 7127 data-modal-theme="mint" 7128 data-platform="shopify-app-blocks" 7129></square-placement> 7130
7131<script> 7132 7133</script>
7133 7134 7135 7136 7137 7138 7139 7140<!-- END app snippet --> 7141 7142 7143</div> 7144 </div><div > 7145 <div id="configurator-addons" class="add-ons" style="display: none;"> 7146 <h3 class="add-ons-title">Add-Ons:</h3> 7147 <div class="add-ons-products" id="configurator-addons-list"> 7148 </div> 7149</div> 7150 7151 </div></div> 7152 </div> 7153 </div> 7154</div>
7154<script> 7155 window.__warrantyModalId = "warranty_modal_Dt8Edm"; 7156 </script>
7156<script> 7157 (function () { 7158 function openWarrantyModal(modal) { 7159 if (!modal) return; 7160 modal.removeAttribute('hidden'); 7161 modal.setAttribute('aria-hidden', 'false'); 7162 document.body.classList.add('warranty-modal-open'); 7163 const cb = modal.querySelector('[data-warranty-modal-checkbox]'); 7164 if (cb) { cb.checked = false; syncWarrantyAddBtn(modal); } 7165 const focusEl = modal.querySelector('.warranty-modal__close'); 7166 if (focusEl) focusEl.focus(); 7167 } 7168 7169 function closeWarrantyModal(modal) { 7170 if (!modal) return; 7171 modal.setAttribute('hidden', ''); 7172 modal.setAttribute('aria-hidden', 'true'); 7173 document.body.classList.remove('warranty-modal-open'); 7174 } 7175 7176 function syncWarrantyAddBtn(modal) { 7177 const addBtn = modal.querySelector('[data-warranty-modal-add]'); 7178 const checkbox = modal.querySelector('[data-warranty-modal-checkbox]'); 7179 if (!addBtn) return; 7180 addBtn.disabled = checkbox ? !checkbox.checked : true; 7181 } 7182 7183 document.querySelectorAll('.warranty-modal').forEach((modal) => { 7184 const checkbox = modal.querySelector('[data-warranty-modal-checkbox]'); 7185 if (checkbox) { 7186 checkbox.addEventListener('change', () => syncWarrantyAddBtn(modal)); 7187 syncWarrantyAddBtn(modal); 7188 } 7189 modal.querySelectorAll('[data-warranty-modal-close]').forEach((el) => { 7190 el.addEventListener('click', () => closeWarrantyModal(modal)); 7191 }); 7192 const addBtn = modal.querySelector('[data-warranty-modal-add]'); 7193 if (addBtn) { 7194 addBtn.addEventListener('click', () => { 7195 const variantId = addBtn.getAttribute('data-variant-id'); 7196 const cb = modal.querySelector('[data-warranty-modal-checkbox]'); 7197 if (!variantId || !cb || !cb.checked) return; 7198 const original = addBtn.textContent; 7199 const childHandle = document.getElementById('configurator-addons')?.dataset.childHandle || ''; 7200 fetch('/cart/add.js', { 7201 method: 'POST', 7202 headers: { 'Content-Type': 'application/json' }, 7203 body: JSON.stringify({ 7204 items: [{ 7205 id: variantId, 7206 quantity: 1, 7207 properties: { '_addon_for': childHandle } 7208 }] 7209 }), 7210 }) 7211 .then((r) => r.json()) 7212 .then(() => { 7213 addBtn.textContent = original; 7214 cb.checked = false; 7215 syncWarrantyAddBtn(modal); 7216 closeWarrantyModal(modal); 7217 document.dispatchEvent(new CustomEvent('cart:refresh')); 7218 }) 7219 .catch((err) => console.error(err)); 7220 }); 7221 } 7222 }); 7223 7224 // Use event delegation so dynamically-rendered addon info icons also work 7225 document.addEventListener('click', (e) => { 7226 const btn = e.target.closest('[data-warranty-modal-open]'); 7227 if (!btn) return; 7228 const id = btn.getAttribute('data-warranty-modal-open'); 7229 const modal = document.getElementById('warranty-modal-' + id); 7230 openWarrantyModal(modal); 7231 }); 7232 7233 document.addEventListener('keydown', (e) => { 7234 if (e.key !== 'Escape') return; 7235 document.querySelectorAll('.warranty-modal:not([hidden])').forEach((modal) => closeWarrantyModal(modal)); 7236 }); 7237 })(); 7238</script>
7238 7239 7240 7241</section><div id="shopify-section-template--23893840003241__why_buy_section_6HTzgw" class="shopify-section"><style> 7242 .why-buy { 7243 background-image: url('//ipowerresale.com/cdn/shop/files/Logo_Marquee.png?v=1775576355'); 7244 background-size: cover; 7245 background-position: center; 7246 background-repeat: no-repeat; 7247 border-radius: 50px; 7248 } 7249 7250 .why-buy__inner { 7251 padding: 144px 72px 234px; 7252 } 7253 7254 .why-buy__header { 7255 text-align: center; 7256 } 7257 7258 .why-buy__heading { 7259 color: #ffffff; 7260 font-size: 48px; 7261 line-height: 52px; 7262 letter-spacing: -1.44px; 7263 text-transform: unset !important; 7264 font-weight: 400; 7265 margin-bottom: 0; 7266 } 7267 7268 .why-buy__grid { 7269 display: flex; 7270 flex-wrap: wrap; 7271 max-width: 1440px; 7272 margin: 0 auto; 7273 } 7274 7275 .why-buy__block { 7276 width: 33.33%; 7277 display: flex; 7278 flex-direction: column; 7279 align-items: center; 7280 padding: 36px 72px; 7281 } 7282 7283 .why-buy__icon-img.image-element { 7284 margin-bottom: 22px; 7285 } 7286 7287 .why-buy__block-title { 7288 color: #ffffff; 7289 font-size: 16px; 7290 line-height: 20px; 7291 letter-spacing: -0.32px; 7292 font-weight: 700; 7293 text-transform: none !important; 7294 margin-bottom: 18px; 7295 text-align: center; 7296 } 7297 7298 .why-buy__block-description { 7299 color: #ffffff; 7300 font-size: 16px; 7301 line-height: 20px; 7302 letter-spacing: -0.32px; 7303 font-weight: 400; 7304 margin: 0; 7305 text-align: center; 7306 font-family: 'Inter-Regular'; 7307 } 7308 7309 @media screen and (max-width: 768px) { 7310 7311 .why-buy { 7312 7313 background-image: url('//ipowerresale.com/cdn/shop/files/Logo_Marquee_1.png?v=1775576377'); 7314 7315 } 7316 7317 .why-buy__inner { 7318 padding: 72px 72px 232px 72px; 7319 7320 } 7321 7322 .why-buy__heading { 7323 font-size: 28px; 7324 line-height: 32px; 7325 } 7326 7327 .why-buy__grid { 7328 flex-direction: column; 7329 gap: 0; 7330 } 7331 7332 .why-buy__block { 7333 width: 100%; 7334 padding: 36px 0 0; 7335 } 7336 } 7337</style><style data-shopify>.why-buy__block--feature_aLndzT .why-buy__icon-img.image-element { 7338 max-width: 100px; 7339 margin-bottom: 0px; 7340 } 7341 .why-buy__block--feature_aLndzT .why-buy__block-title { 7342 max-width: 156px; 7343 } 7344 .why-buy__block--feature_aLndzT .why-buy__block-description { 7345 max-width: 288px; 7346 } 7347 @media screen and (max-width: 768px) { 7348 .why-buy__block--feature_aLndzT .why-buy__icon-img.image-element { 7349 max-width: 100px; 7350 margin-bottom: 0px; 7351 } 7352 .why-buy__block--feature_aLndzT .why-buy__block-title { 7353 max-width: 156px; 7354 } 7355 .why-buy__block--feature_aLndzT .why-buy__block-description { 7356 max-width: 249px; 7357 } 7358 .why-buy__block--feature_aLndzT { 7359 padding-bottom: 0px; 7360 } 7361 }.why-buy__block--feature_e9GGGQ .why-buy__icon-img.image-element { 7362 max-width: 100px; 7363 margin-bottom: 0px; 7364 } 7365 .why-buy__block--feature_e9GGGQ .why-buy__block-title { 7366 max-width: 156px; 7367 } 7368 .why-buy__block--feature_e9GGGQ .why-buy__block-description { 7369 max-width: 288px; 7370 } 7371 @media screen and (max-width: 768px) { 7372 .why-buy__block--feature_e9GGGQ .why-buy__icon-img.image-element { 7373 max-width: 100px; 7374 margin-bottom: 0px; 7375 } 7376 .why-buy__block--feature_e9GGGQ .why-buy__block-title { 7377 max-width: 156px; 7378 } 7379 .why-buy__block--feature_e9GGGQ .why-buy__block-description { 7380 max-width: 249px; 7381 } 7382 .why-buy__block--feature_e9GGGQ { 7383 padding-bottom: 0px; 7384 } 7385 }.why-buy__block--feature_K3xc8R .why-buy__icon-img.image-element { 7386 max-width: 100px; 7387 margin-bottom: 0px; 7388 } 7389 .why-buy__block--feature_K3xc8R .why-buy__block-title { 7390 max-width: 156px; 7391 } 7392 .why-buy__block--feature_K3xc8R .why-buy__block-description { 7393 max-width: 288px; 7394 } 7395 @media screen and (max-width: 768px) { 7396 .why-buy__block--feature_K3xc8R .why-buy__icon-img.image-element { 7397 max-width: 100px; 7398 margin-bottom: 0px; 7399 } 7400 .why-buy__block--feature_K3xc8R .why-buy__block-title { 7401 max-width: 156px; 7402 } 7403 .why-buy__block--feature_K3xc8R .why-buy__block-description { 7404 max-width: 249px; 7405 } 7406 .why-buy__block--feature_K3xc8R { 7407 padding-bottom: 0px; 7408 } 7409 }</style><div 7410 class="why-buy why-buy--template--23893840003241__why_buy_section_6HTzgw" 7411 data-section-id="template--23893840003241__why_buy_section_6HTzgw" 7412 data-section-type="why-buy" 7413> 7414 <div class="why-buy__inner"> 7415 <div class="why-buy__header"><h2 class="why-buy__heading">Why Buy from iPowerResale</h2></div><div class="why-buy__grid"><div 7416 class="why-buy__block why-buy__block--feature_aLndzT" 7417 7418 ><div class="why-buy__icon"> 7419 7420 7421 7422<image-element data-aos="image-fade-in" data-aos-offset="150"> 7423 7424 7425 7426<img src="//ipowerresale.com/cdn/shop/files/Guarantee-icon.png?v=1773281615&width=300" alt="" srcset="//ipowerresale.com/cdn/shop/files/Guarantee-icon.png?v=1773281615&width=300 300w" width="300" height="300.0" loading="lazy" class="why-buy__icon-img image-element" sizes="100vw"> 7427 7428 7429 7430</image-element> 7431</div><h3 class="why-buy__block-title">Guaranteed 100% functional.</h3><p class="why-buy__block-description">Free 1-year warranty included with purchase.</p></div><div 7432 class="why-buy__block why-buy__block--feature_e9GGGQ" 7433 7434 ><div class="why-buy__icon"> 7435 7436 7437 7438<image-element data-aos="image-fade-in" data-aos-offset="150"> 7439 7440 7441 7442<img src="//ipowerresale.com/cdn/shop/files/shipping-icon.png?v=1773281614&width=300" alt="" srcset="//ipowerresale.com/cdn/shop/files/shipping-icon.png?v=1773281614&width=300 300w" width="300" height="300.0" loading="lazy" class="why-buy__icon-img image-element" sizes="100vw"> 7443 7444 7445 7446</image-element> 7447</div><h3 class="why-buy__block-title">Free Shipping</h3><p class="why-buy__block-description">Don't worry about the shipping. We ship for free anywhere in the continental U.S.</p></div><div 7448 class="why-buy__block why-buy__block--feature_K3xc8R" 7449 7450 ><div class="why-buy__icon"> 7451 7452 7453 7454<image-element data-aos="image-fade-in" data-aos-offset="150"> 7455 7456 7457 7458<img src="//ipowerresale.com/cdn/shop/files/return-icon.png?v=1773281614&width=300" alt="" srcset="//ipowerresale.com/cdn/shop/files/return-icon.png?v=1773281614&width=300 300w" width="300" height="300.0" loading="lazy" class="why-buy__icon-img image-element" sizes="100vw"> 7459 7460 7461 7462</image-element> 7463</div><h3 class="why-buy__block-title">14 Days to Decide</h3><p class="why-buy__block-description">With our free 14-day Return Policy, thereâs no pressure.</p></div></div></div> 7464</div> 7465 7466 7467</div><section id="shopify-section-template--23893840003241__whats_in_the_box_aaXX8J" class="shopify-section section-whats-in-the-box"><style> 7468 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J { 7469 } 7470 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J .whats-in-the-box__inner { 7471 display: flex; 7472 border-radius: 24px; 7473 gap: 72px; 7474 align-items: flex-start; 7475 } 7476 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J .whats-in-the-box__content { 7477 width: calc(30% - 36px); 7478 } 7479 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J .whats-in-the-box__heading { 7480 font-size: 48px; 7481 line-height: 52px; 7482 font-weight: 400; 7483 letter-spacing: -0.03em; 7484 text-transform: unset !important; 7485 margin: 0 0 36px; 7486 font-family: 'Inter-Regular'; 7487 color: #222222; 7488 max-width: 200px; 7489 } 7490 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J .whats-in-the-box__subheading { 7491 font-size: 36px; 7492 line-height: 36px; 7493 font-weight: 400; 7494 letter-spacing: -0.03em; 7495 font-family: 'Inter-Regular'; 7496 margin: 0; 7497 color: #222222; 7498 } 7499 7500 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J .whats-in-the-box__subheading> .metafield-rich_text_field> p> <br> { 7501 height: 18px; 7502 } 7503 7504 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J .whats-in-the-box__media { 7505 7506 width: calc(70% - 36px); 7507 7508 } 7509 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J .whats-in-the-box__media img { 7510 max-width: 100%; 7511 width: 100%; 7512 height: auto; 7513 object-fit: cover; 7514 aspect-ratio: 874 / 532; 7515 border-radius: 30px; 7516 } 7517 7518 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J { 7519 padding: 36px 18px; 7520 padding-bottom: 0; 7521 } 7522 @media screen and (min-width: 769px) { 7523 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J { 7524 padding: 72px; 7525 padding-bottom: 0; 7526 } 7527 } 7528 @media screen and (max-width: 768px) { 7529 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J .whats-in-the-box__inner { 7530 flex-direction: column; 7531 gap: 36px; 7532 border-radius: 24px; 7533 } 7534 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J .whats-in-the-box__content { 7535 width: 100%; 7536 } 7537 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J .whats-in-the-box__heading { 7538 font-size: 28px; 7539 max-width: 100%; 7540 margin: 0 auto; 7541 line-height: 32px; 7542 letter-spacing: -0.84px; 7543 margin-bottom: 18px; 7544 text-align: center; 7545 } 7546 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J .whats-in-the-box__subheading { 7547 font-size: 24px; 7548 line-height: 28px; 7549 letter-spacing: -0.72px; 7550 text-align: center; 7551 } 7552 .whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J .whats-in-the-box__media { 7553 min-height: 217px; 7554 width: 100%; 7555 } 7556 } 7557</style> 7558 7559<div 7560 class="whats-in-the-box whats-in-the-box--template--23893840003241__whats_in_the_box_aaXX8J page-width" 7561 data-section-id="template--23893840003241__whats_in_the_box_aaXX8J" 7562 data-section-type="whats-in-the-box" 7563> 7564 <div class="whats-in-the-box__inner"> 7565 <div class="whats-in-the-box__content"><h2 class="whats-in-the-box__heading">What's in the box</h2><div class="whats-in-the-box__subheading rte"> 7566 <div class="metafield-rich_text_field"><p>iPad Pro<br /> 7567Power adapter<br /> 7568Charging cable</p></div> 7569 </div></div> 7570 <div class="whats-in-the-box__media"><img 7571 src="//ipowerresale.com/cdn/shop/files/ipad-pro-witb.jpg?v=1776711136&width=1200" 7572 alt="" 7573 width="600" 7574 height="600" 7575 class="whats-in-the-box__image" 7576 ></div> 7577 </div> 7578</div> 7579 7580 7581</section><div id="shopify-section-template--23893840003241__compare_models_section_GMHyRU" class="shopify-section"><link href="//ipowerresale.com/cdn/shop/t/130/assets/custom-collection-
7581product-card.css?v=128704689821368263921790277974" rel="stylesheet" type="text/css" media="all" /> 7582 7583 7584 <div class="compare-models-section"> 7585 <div class="compare-models-section-inner page-width"> 7586 <div class="compare-models-section-inner-title"> 7587 <h2>Compare Models</h2> 7588 </div> 7589 7590 <div class="compare-models-section-inner-cards-wrapper"> 7591 7592 <div class="compare-models-section-inner-card"> 7593 <div class="custom-product-card" style=" background-color: ;"> 7594 <a 7595 href="/products/apple-ipad-pro-config-parent-better" 7596 class="product-image-wrapper has-secondary-image" 7597 > 7598 7599 <img 7600 class="product-img primary" 7601 width="100%" 7602 height="100%" 7603 src="//ipowerresale.com/cdn/shop/files/media_98930e0b-f83b-459b-b91e-dad5d9fff883.png?v=1766096980&width=400" 7604 alt="iPad Pro 11-inch M4" 7605 loading="lazy" 7606 > 7607 7608 </a> 7609 7610 <div class="custom-product-card__content"> 7611 <div class="custom-product-card__info"> 7612 <h3 class="custom-product-card__title">iPad Pro 11-inch M4</h3> 7613 <div class="custom-product-card__price"> 7614 Priced from $849.00 7615 </div><a 7616 href="/products/apple-ipad-pro-config-parent-better" 7617 class="product-card-button" 7618 style="cursor: pointer;" 7619 > 7620 Customize 7621 </a><div class="product-card-specs"><div class="product-card-spec-item"> 7622 <span class="spec-label">display</span> 7623 <span class="spec-sublabel">11" Ultra Retina XDR</span> 7624 </div><div class="product-card-spec-item"> 7625 <span class="spec-label">processor</span> 7626 <span class="spec-sublabel">Apple M4</span> 7627 </div><div class="product-card-spec-item"> 7628 <span class="spec-label">front camera</span> 7629 <span class="spec-sublabel">12MP Ultra Wide with Center Stage</span> 7630 </div><div class="product-card-spec-item"> 7631 <span class="spec-label">rear camera</span> 7632 <span class="spec-sublabel">12MP Wide Angle 4K Capable</span> 7633 </div><div class="product-card-spec-item"> 7634 <span class="spec-label">security</span> 7635 <span class="spec-sublabel">Face ID</span> 7636 </div><div class="product-card-spec-item"> 7637 <span class="spec-label">support</span> 7638 <span class="spec-sublabel">Apple Pencil Pro</span> 7639 </div></div> 7640 </div> 7641 </div> 7642</div> 7643 7644 </div> 7645 7646 <div class="compare-models-section-inner-card"> 7647 <div class="custom-product-card" style=" background-color: ;"> 7648 <a 7649 href="/products/apple-ipad-pro-11-inch-m5" 7650 class="product-image-wrapper has-secondary-image" 7651 > 7652 7653 <img 7654 class="product-img primary" 7655 width="100%" 7656 height="100%" 7657 src="//ipowerresale.com/cdn/shop/files/media_cafccf73-53e7-4608-a7f4-863a08925a0c.png?v=1766104668&width=400" 7658 alt="iPad Pro 11-inch M5" 7659 loading="lazy" 7660 > 7661 7662 </a> 7663 7664 <div class="custom-product-card__content"> 7665 <div class="custom-product-card__info"> 7666 <h3 class="custom-product-card__title">iPad Pro 11-inch M5</h3> 7667 <div class="custom-product-card__price"> 7668 Priced from $979.00 7669 </div><a 7670 href="/products/apple-ipad-pro-11-inch-m5" 7671 class="product-card-button" 7672 style="cursor: pointer;" 7673 > 7674 Customize 7675 </a><div class="product-card-specs"><div class="product-card-spec-item"> 7676 <span class="spec-label">display</span> 7677 <span class="spec-sublabel">11" Ultra Retina XDR</span> 7678 </div><div class="product-card-spec-item"> 7679 <span class="spec-label">processor</span> 7680 <span class="spec-sublabel">Apple M5</span> 7681 </div><div class="product-card-spec-item"> 7682 <span class="spec-label">front camera</span> 7683 <span class="spec-sublabel">12MP Ultra Wide with Center Stage</span> 7684 </div><div class="product-card-spec-item">
7685 <span class="spec-label">rear camera</span> 7686 <span class="spec-sublabel">12MP Wide Angle 4K Capable</span> 7687 </div><div class="product-card-spec-item"> 7688 <span class="spec-label">security</span> 7689 <span class="spec-sublabel">Face ID</span> 7690 </div><div class="product-card-spec-item"> 7691 <span class="spec-label">support</span> 7692 <span class="spec-sublabel">Apple Pencil Pro</span> 7693 </div></div> 7694 </div> 7695 </div> 7696</div> 7697 7698 </div> 7699 7700 <div class="compare-models-section-inner-card"> 7701 <div class="custom-product-card" style=" background-color: ;"> 7702 <a 7703 href="/products/apple-ipad-pro-config-parent-good" 7704 class="product-image-wrapper has-secondary-image" 7705 > 7706 7707 <img 7708 class="product-img primary" 7709 width="100%" 7710 height="100%" 7711 src="//ipowerresale.com/cdn/shop/files/media_1304f832-553c-4257-b230-54fa70dce890.png?v=1766096981&width=400" 7712 alt="iPad Pro 13-inch M5" 7713 loading="lazy" 7714 > 7715 7716 </a> 7717 7718 <div class="custom-product-card__content"> 7719 <div class="custom-product-card__info"> 7720 <h3 class="custom-product-card__title">iPad Pro 13-inch M5</h3> 7721 <div class="custom-product-card__price"> 7722 Priced from $1,099.00 7723 </div><a 7724 href="/products/apple-ipad-pro-config-parent-good" 7725 class="product-card-button" 7726 style="cursor: pointer;" 7727 > 7728 Customize 7729 </a><div class="product-card-specs"><div class="product-card-spec-item"> 7730 <span class="spec-label">display</span> 7731 <span class="spec-sublabel">13" Ultra Retina XDR</span> 7732 </div><div class="product-card-spec-item"> 7733 <span class="spec-label">processor</span> 7734 <span class="spec-sublabel">Apple M5</span> 7735 </div><div class="product-card-spec-item"> 7736 <span class="spec-label">front camera</span> 7737 <span class="spec-sublabel">12MP Ultra Wide with Center Stage</span> 7738 </div><div class="product-card-spec-item"> 7739 <span class="spec-label">rear camera</span> 7740 <span class="spec-sublabel">12MP Wide Angle 4K Capable</span> 7741 </div><div class="product-card-spec-item"> 7742 <span class="spec-label">security</span> 7743 <span class="spec-sublabel">Face ID</span> 7744 </div><div class="product-card-spec-item"> 7745 <span class="spec-label">support</span> 7746 <span class="spec-sublabel">Apple Pencil Pro</span> 7747 </div></div> 7748 </div> 7749 </div> 7750</div> 7751 7752 </div> 7753 7754 </div> 7755 7756 </div> 7757 </div> 7758 7759<style> 7760 .compare-models-section { 7761 padding: 72px 0; 7762 } 7763 7764 .compare-models-section-inner-title { 7765 text-align: center; 7766 } 7767 .compare-models-section-inner-cards { 7768 display: flex; 7769 flex-wrap: wrap; 7770 gap: 20px; 7771 } 7772 .compare-models-section-inner-cards-wrapper { 7773 display: grid; 7774 grid-template-columns: repeat(3, 1fr); 7775 gap: 18px; 7776 } 7777 .product-card-button { 7778 padding: 17.2px 26.56px; 7779 border-radius: 100px; 7780 font-weight: 500; 7781 font-size: 16px; 7782 line-height: 20px; 7783 letter-spacing: 1.6px; 7784 text-transform: uppercase; 7785 text-decoration: none; 7786 background-color: #1D7F9A; 7787 border: 1px solid #1D7F9A; 7788 box-shadow: inset 0 0 0 1px #1D7F9A; 7789 color: #fff; 7790 cursor: pointer; 7791 transition: all 0.9s ease; 7792 margin-top: 32px; 7793 } 7794 .product-card-button:hover { 7795 border: 1px solid #1D7F9A; 7796 color: #fff; 7797 background-color: #171717; 7798 } 7799 .product-card-specs { 7800 display: flex; 7801 flex-direction: column; 7802 align-items: center; 7803 gap: 14px; 7804 margin-top: 32px; 7805 } 7806 .product-card-spec-item { 7807 display: flex; 7808 flex-direction: column; 7809 align-items: center; 7810 justify-content: center; 7811 gap: 9px; 7812 } 7813 7814 .spec-label { 7815 font-family: Inter, sans-serif; 7816 font-size: 13px; 7817 line-height: 20px; 7818 letter-spacing: 1.3px; 7819 font-weight: 700; 7820 color: #1D7F9A; 7821 text-transform: uppercase; 7822 } 7823 .spec-sublabel { 7824 font-family: Inter, sans-serif; 7825 font-size: 16px; 7826 line-height: 20px; 7827 letter-spacing: -0.32px; 7828 font-weight: 400; 7829 color: #222222; 7830 text-align: center; 7831 margin-bottom: 9px; 7832 } 7833 .compare-models-section-inner-title h2 { 7834 font-size: 48px; 7835 line-height: 52px; 7836 letter-spacing: -1.44px; 7837 font-weight: 400; 7838 color: #222222; 7839 text-transform: unset !important; 7840 font-family: 'Inter-Regular'; 7841 text-align: left; 7842 margin-bottom: 36px; 7843 } 7844 @media screen and (max-width: 1024px) { 7845 .compare-models-section-inner-cards-wrapper { 7846 grid-template-columns: repeat(2, 1fr); 7847 } 7848 } 7849 @media screen and (max-width: 768px) { 7850 7851 7852 .compare-models-section { 7853 padding: 36px 18px; 7854 } 7855 .product-image-wrapper img { 7856 padding: 36px 53.5px; 7857 } 7858 .compare-models-section-inner { 7859 padding: 0; 7860 } 7861 .compare-models-section-inner-title h2 { 7862 font-size: 28px; 7863 line-height: 32px; 7864 letter-spacing: -0.84px; 7865 text-align: center; 7866 margin-bottom: 36px; 7867 } 7868 } 7869 @media screen and (max-width: 560px) { 7870 .compare-models-section-inner-cards-wrapper { 7871 grid-template-columns: repeat(1, 1fr); 7872 } 7873 } 7874</style> 7875 7876</div><div id="shopify-section-template--23893840003241__pdp_faqs_NWmcDi" class="shopify-section"><style> 7877 .faq-section { 7878 7879 background-color: #222222;
7880 background-image: url('//ipowerresale.com/cdn/shop/files/97626370abb83e4961b46809e7349407f3af6dac.png?v=1773283504'); 7881 background-size: cover; 7882 background-position: center; 7883 background-repeat: no-repeat; 7884 position: relative; 7885 border-radius: 50px; 7886 } 7887 7888 .faq-section__inner { 7889 width: 60%; 7890 backdrop-filter: blur(15px); 7891 border-radius: 50px; 7892 border: 1px solid #666666; 7893 padding: 72px; 7894 } 7895 7896 .faq-section__heading { 7897 color: #ffffff; 7898 font-size: 48px; 7899 line-height: 52px; 7900 letter-spacing: -1.44px; 7901 text-transform: unset !important; 7902 font-weight: 400; 7903 margin-bottom: 36px; 7904 } 7905 7906 .faq-section__list { 7907 list-style: none; 7908 padding: 0; 7909 margin: 0; 7910 display: flex; 7911 flex-direction: column; 7912 7913 } 7914 7915 .faq-item { 7916 7917 overflow: hidden; 7918 transition: all 0.3s ease; 7919 margin: 0; 7920 } 7921 7922 .faq-item__question { 7923 border-bottom: 1px solid #ffffff; 7924 max-width: 100%; 7925 margin: 0 auto; 7926 padding: 9px 0; 7927 cursor: pointer; 7928 display: flex; 7929 justify-content: space-between; 7930 align-items: center; 7931 color: #ffffff; 7932 font-size: 18px; 7933 line-height: 24px; 7934 font-weight: 500; 7935 letter-spacing: -0.54px; 7936 background: transparent; 7937 text-align: left; 7938 width: 100%; 7939 } 7940 7941 .faq-item__icon { 7942 width: 24px; 7943 height: 24px; 7944 display: flex; 7945 align-items: center; 7946 justify-content: center; 7947 flex-shrink: 0; 7948 margin-left: 20px; 7949 position: relative; 7950 } 7951 7952 .faq-item__icon svg { 7953 position: absolute; 7954 top: 50%; 7955 left: 50%; 7956 transform: translate(-50%, -50%); 7957 transition: opacity 0.3s ease; 7958 } 7959 7960 .faq-item__icon-plus { 7961 opacity: 1; 7962 } 7963 7964 .faq-item__icon-minus { 7965 opacity: 0; 7966 } 7967 7968 .faq-item.active .faq-item__icon-plus { 7969 opacity: 0; 7970 } 7971 7972 .faq-item.active .faq-item__icon-minus { 7973 opacity: 1; 7974 } 7975 7976 .faq-item__answer-wrapper { 7977 max-height: 0; 7978 overflow: hidden; 7979 transition: max-height 0.3s ease; 7980 } 7981 7982 .faq-item__answer { 7983 max-width: 100%; 7984 margin: 0 auto; 7985 padding: 27px 0; 7986 color: #ffffff; 7987 font-size: 16px; 7988 line-height: 20px; 7989 font-weight: 400; 7990 letter-spacing: -0.32px; 7991 } 7992 .faq-item__answer p { 7993 margin: 0; 7994 } 7995 .faq-item.active .faq-item__answer-wrapper { 7996 max-height: 1000px; 7997 } 7998 .faq-section__wrapper { 7999 padding-top: 122px; 8000 padding-bottom: 122px; 8001 } 8002 @media screen and (max-width: 1024px) { 8003 .faq-section__inner { 8004 width: 100%; 8005 } 8006 } 8007 @media screen and (max-width: 768px) { 8008 .faq-section { 8009 8010 } 8011 .faq-section__inner { 8012 padding: 36px 18px; 8013 border-radius: 30px; 8014 } 8015 .faq-section__wrapper { 8016 min-height: 800px; 8017 display: flex; 8018 align-items: flex-end; 8019 padding-top: 0; 8020 padding-bottom: 18px; 8021 } 8022 .faq-section__heading { 8023 font-size: 28px; 8024 line-height: 32px; 8025 letter-spacing: -0.84px; 8026 margin-bottom: 18px; 8027 } 8028 8029 .faq-item__question { 8030 padding: 9px 0; 8031 font-size: 18px; 8032 line-height: 24px; 8033 letter-spacing: -0.54px; 8034 8035 } 8036 8037 .faq-item__icon { 8038 width: 20px; 8039 height: 20px; 8040 margin-left: 16px; 8041 } 8042 } 8043</style> 8044 8045<div 8046 class="faq-section faq-section--template--23893840003241__pdp_faqs_NWmcDi" 8047 data-section-id="template--23893840003241__pdp_faqs_NWmcDi" 8048 data-section-type="faq-section" 8049> 8050 <div class="faq-section__wrapper page-width"> 8051 <div class="faq-section__inner"><h2 class="faq-section__heading">FAQs</h2><ul class="faq-section__list"><li 8052 class="faq-item active" 8053 data-faq-item 8054 8055 > 8056 <button 8057 type="button" 8058 class="faq-item__question" 8059 aria-expanded="true" 8060 > 8061 <span>What is Open Box?</span> 8062 <span class="faq-item__icon" aria-hidden="true"> 8063 <svg 8064 class="faq-item__icon-plus" 8065 width="9" 8066 height="9"
8067 viewBox="0 0 9 9" 8068 fill="none" 8069 xmlns="http://www.w3.org/2000/svg" 8070 > 8071 <path d="M3.00542 8.04534V-0.00011158H5.03951V8.04534H3.00542ZM-0.000266314 5.03966V3.00557H8.04519V5.03966H-0.000266314Z" fill="white"/> 8072 </svg> 8073 <svg 8074 class="faq-item__icon-minus" 8075 width="6" 8076 height="2" 8077 viewBox="0 0 6 2" 8078 fill="none" 8079 xmlns="http://www.w3.org/2000/svg" 8080 > 8081 <path d="M5.30673 -0.000111103V1.92034H-8.86917e-05V-0.000111103H5.30673Z" fill="white"/> 8082 </svg> 8083 </span> 8084 </button> 8085 <div class="faq-item__answer-wrapper"> 8086 <div class="faq-item__answer"> 8087 <p>Open Box devices are buyerâs-remorse retail returns from Apple® Authorized Retailers, returned within the retailerâs return window. Every device is rigorously inspected to meet our highest grading standard: like-new condition, no cosmetic blemishes, full functionality, and the original box and charging accessories included. The box itself may show signs of handling. Learn more about our cosmetic conditions <a href="/blogs/apple-buying-guides/buying-guide-understanding-cosmetic-conditions-for-refurbished-and-pre-owned-devices" target="_blank" title="Cosmetic Grade Breakdown">here</a>.</p> 8088 </div> 8089 </div> 8090 </li><li 8091 class="faq-item " 8092 data-faq-item 8093 8094 > 8095 <button 8096 type="button" 8097 class="faq-item__question" 8098 aria-expanded="false" 8099 > 8100 <span>Can I get a discount?</span> 8101 <span class="faq-item__icon" aria-hidden="true"> 8102 <svg 8103 class="faq-item__icon-plus" 8104 width="9" 8105 height="9"
8106 viewBox="0 0 9 9" 8107 fill="none" 8108 xmlns="http://www.w3.org/2000/svg" 8109 > 8110 <path d="M3.00542 8.04534V-0.00011158H5.03951V8.04534H3.00542ZM-0.000266314 5.03966V3.00557H8.04519V5.03966H-0.000266314Z" fill="white"/> 8111 </svg> 8112 <svg 8113 class="faq-item__icon-minus" 8114 width="6" 8115 height="2" 8116 viewBox="0 0 6 2" 8117 fill="none" 8118 xmlns="http://www.w3.org/2000/svg" 8119 > 8120 <path d="M5.30673 -0.000111103V1.92034H-8.86917e-05V-0.000111103H5.30673Z" fill="white"/> 8121 </svg> 8122 </span> 8123 </button> 8124 <div class="faq-item__answer-wrapper"> 8125 <div class="faq-item__answer"> 8126 <p>We offer our first-time buyers a $15 discount! You can sign up for the discount <a href="https://manage.kmail-lists.com/subscriptions/subscribe?a=SEVKDs&g=UP5aCd" target="_blank" title="Sign up for our email list to receive $15 off your first purchase">here.</a> </p><p></p><p>If you are a returning customer, you can enjoy a $25 discount after you refer your friends or family! They will get $20 off their first purchase! You can find your referral link <a href="https://account.ipowerresale.com/pages/019beaa6-7fca-74e3-b1e1-653f16cc943a" target="_blank" title="Refer your friends to iPowerResale! They get $20 off their first purchase and you get $25 off your next purchase!">here.</a></p><p></p> 8127 </div> 8128 </div> 8129 </li><li 8130 class="faq-item " 8131 data-faq-item 8132 8133 > 8134 <button 8135 type="button" 8136 class="faq-item__question" 8137 aria-expanded="false" 8138 > 8139 <span>What's the warranty?</span> 8140 <span class="faq-item__icon" aria-hidden="true"> 8141 <svg 8142 class="faq-item__icon-plus" 8143 width="9" 8144 height="9"
8145 viewBox="0 0 9 9" 8146 fill="none" 8147 xmlns="http://www.w3.org/2000/svg" 8148 > 8149 <path d="M3.00542 8.04534V-0.00011158H5.03951V8.04534H3.00542ZM-0.000266314 5.03966V3.00557H8.04519V5.03966H-0.000266314Z" fill="white"/> 8150 </svg> 8151 <svg 8152 class="faq-item__icon-minus" 8153 width="6" 8154 height="2" 8155 viewBox="0 0 6 2" 8156 fill="none" 8157 xmlns="http://www.w3.org/2000/svg" 8158 > 8159 <path d="M5.30673 -0.000111103V1.92034H-8.86917e-05V-0.000111103H5.30673Z" fill="white"/> 8160 </svg> 8161 </span> 8162 </button> 8163 <div class="faq-item__answer-wrapper"> 8164 <div class="faq-item__answer"> 8165 <p>We offer a 1-year limited warranty on all of our devices. In addition, most of our open box devices still have about 6-9 months of Apple® Limited Warranty remaining.</p><p><a href="https://ipowerresale.com/pages/terms-of-limited-warranty" target="_blank" title="https://ipowerresale.com/pages/terms-of-limited-warranty">Terms of our Limited Warranty</a></p> 8166 </div> 8167 </div> 8168 </li><li 8169 class="faq-item " 8170 data-faq-item 8171 8172 > 8173 <button 8174 type="button" 8175 class="faq-item__question" 8176 aria-expanded="false" 8177 > 8178 <span>Can I add AppleCare+?</span> 8179 <span class="faq-item__icon" aria-hidden="true"> 8180 <svg 8181 class="faq-item__icon-plus" 8182 width="9" 8183 height="9"
8184 viewBox="0 0 9 9" 8185 fill="none" 8186 xmlns="http://www.w3.org/2000/svg" 8187 > 8188 <path d="M3.00542 8.04534V-0.00011158H5.03951V8.04534H3.00542ZM-0.000266314 5.03966V3.00557H8.04519V5.03966H-0.000266314Z" fill="white"/> 8189 </svg> 8190 <svg 8191 class="faq-item__icon-minus" 8192 width="6" 8193 height="2" 8194 viewBox="0 0 6 2" 8195 fill="none" 8196 xmlns="http://www.w3.org/2000/svg" 8197 > 8198 <path d="M5.30673 -0.000111103V1.92034H-8.86917e-05V-0.000111103H5.30673Z" fill="white"/> 8199 </svg> 8200 </span> 8201 </button> 8202 <div class="faq-item__answer-wrapper"> 8203 <div class="faq-item__answer"> 8204 <p>While we are not able to add AppleCare+, most of our products are still under Apple's Limited Warranty, with about 6-9 months remaining.</p><p>We often hear from customers that they are able to add AppleCare+ by contacting Apple Support or taking it to an Apple Store.</p> 8205 </div> 8206 </div> 8207 </li><li 8208 class="faq-item " 8209 data-faq-item 8210 8211 > 8212 <button 8213 type="button" 8214 class="faq-item__question" 8215 aria-expanded="false" 8216 > 8217 <span>How much is shipping?</span> 8218 <span class="faq-item__icon" aria-hidden="true"> 8219 <svg 8220 class="faq-item__icon-plus" 8221 width="9" 8222 height="9"
8223 viewBox="0 0 9 9" 8224 fill="none" 8225 xmlns="http://www.w3.org/2000/svg" 8226 > 8227 <path d="M3.00542 8.04534V-0.00011158H5.03951V8.04534H3.00542ZM-0.000266314 5.03966V3.00557H8.04519V5.03966H-0.000266314Z" fill="white"/> 8228 </svg> 8229 <svg 8230 class="faq-item__icon-minus" 8231 width="6" 8232 height="2" 8233 viewBox="0 0 6 2" 8234 fill="none" 8235 xmlns="http://www.w3.org/2000/svg" 8236 > 8237 <path d="M5.30673 -0.000111103V1.92034H-8.86917e-05V-0.000111103H5.30673Z" fill="white"/> 8238 </svg> 8239 </span> 8240 </button> 8241 <div class="faq-item__answer-wrapper"> 8242 <div class="faq-item__answer"> 8243 <p>We ship our devices with FREE 2-day shipping. iMacs, Mac Pros, and Studio Displays are shipped via ground. Express shipping options are available at checkout.</p> 8244 </div> 8245 </div> 8246 </li><li 8247 class="faq-item " 8248 data-faq-item 8249 8250 > 8251 <button 8252 type="button" 8253 class="faq-item__question" 8254 aria-expanded="false" 8255 > 8256 <span>What is your return policy?</span> 8257 <span class="faq-item__icon" aria-hidden="true"> 8258 <svg 8259 class="faq-item__icon-plus" 8260 width="9" 8261 height="9"
8262 viewBox="0 0 9 9" 8263 fill="none" 8264 xmlns="http://www.w3.org/2000/svg" 8265 > 8266 <path d="M3.00542 8.04534V-0.00011158H5.03951V8.04534H3.00542ZM-0.000266314 5.03966V3.00557H8.04519V5.03966H-0.000266314Z" fill="white"/> 8267 </svg> 8268 <svg 8269 class="faq-item__icon-minus" 8270 width="6" 8271 height="2" 8272 viewBox="0 0 6 2" 8273 fill="none" 8274 xmlns="http://www.w3.org/2000/svg" 8275 > 8276 <path d="M5.30673 -0.000111103V1.92034H-8.86917e-05V-0.000111103H5.30673Z" fill="white"/> 8277 </svg> 8278 </span> 8279 </button> 8280 <div class="faq-item__answer-wrapper"> 8281 <div class="faq-item__answer"> 8282 <p>We include free 14-day returns on all of our products. We want you to be completely satisfied with your purchase!</p> 8283 </div> 8284 </div> 8285 </li></ul></div> 8286 </div> 8287</div> 8288
8289<script> 8290 (function () { 8291 const faqSection = document.querySelector('.faq-section--template--23893840003241__pdp_faqs_NWmcDi'); 8292 if (!faqSection) return; 8293 8294 const faqItems = faqSection.querySelectorAll('[data-faq-item]'); 8295 8296 faqItems.forEach(function (item) { 8297 const question = item.querySelector('.faq-item__question'); 8298 8299 question.addEventListener('click', function () { 8300 const isActive = item.classList.contains('active'); 8301 8302 // Close all items 8303 faqItems.forEach(function (otherItem) { 8304 otherItem.classList.remove('active'); 8305 const otherQuestion = otherItem.querySelector('.faq-item__question'); 8306 otherQuestion.setAttribute('aria-expanded', 'false'); 8307 }); 8308 8309 // Open clicked item if it wasn't active 8310 if (!isActive) { 8311 item.classList.add('active'); 8312 question.setAttribute('aria-expanded', 'true'); 8313 } 8314 }); 8315 }); 8316 })(); 8317</script>
8317 8318 8319 8320<style> #shopify-section-template--23893840003241__pdp_faqs_NWmcDi a {color: inherit; text-decoration: underline;} #shopify-section-template--23893840003241__pdp_faqs_NWmcDi p {margin: 0 0 1em;} #shopify-section-template--23893840003241__pdp_faqs_NWmcDi p:last-child {margin-bottom: 0;} </style></div><div id="shopify-section-template--23893840003241__klaviyo_product_reviews_Rv3xK7" class="shopify-section"><style> 8321 .kpr { 8322 display: none; 8323 padding: 60px 0; 8324 } 8325 .kpr.kpr--visible { 8326 display: block; 8327 } 8328 .kpr__container { 8329 max-width: 1400px; 8330 margin: 0 auto; 8331 padding: 0 36px; 8332 } 8333 .kpr__heading { 8334 font-family: var(--typeHeaderPrimary, inherit); 8335 font-size: 32px; 8336 font-weight: 700; 8337 color: #222; 8338 margin: 0 0 40px; 8339 text-align: center; 8340 } 8341 8342 .kpr__view-all-reviews { 8343 font-size: 15px; 8344 font-weight: 600; 8345 color: #1DACD6; 8346 text-decoration: none; 8347 display: block; 8348 margin-bottom: 24px; 8349 } 8350 8351 /* ââ Summary Row ââ */ 8352 .kpr__summary { 8353 display: flex; 8354 align-items: center; 8355 gap: 48px; 8356 margin-bottom: 48px; 8357 padding: 36px; 8358 background: #f2f4f7; 8359 border-radius: 20px; 8360 } 8361 8362 /* Left: big rating number */ 8363 .kpr__rating-overview { 8364 display: flex; 8365 flex-direction: column; 8366 align-items: center; 8367 min-width: 140px; 8368 gap: 8px; 8369 } 8370 .kpr__big-rating { 8371 font-family: var(--typeHeaderPrimary, inherit); 8372 font-size: 56px; 8373 font-weight: 700; 8374 line-height: 1; 8375 color: #222; 8376 } 8377 .kpr__stars-row { 8378 display: flex; 8379 align-items: center; 8380 gap: 3px; 8381 } 8382 .kpr__total-count { 8383 font-size: 14px; 8384 color: #666; 8385 margin-top: 4px; 8386 } 8387 8388 /* Right: histogram bars */ 8389 .kpr__histogram { 8390 flex: 1; 8391 display: flex; 8392 flex-direction: column; 8393 gap: 8px; 8394 } 8395 .kpr__hist-row { 8396 display: flex; 8397 align-items: center; 8398 gap: 10px; 8399 } 8400 .kpr__hist-label { 8401 font-size: 14px; 8402 font-weight: 600; 8403 color: #222; 8404 min-width: 14px; 8405 text-align: right; 8406 } 8407 .kpr__hist-star-icon { 8408 width: 12px; 8409 height: 12px; 8410 flex-shrink: 0; 8411 } 8412 .kpr__hist-bar-track { 8413 flex: 1; 8414 height: 10px; 8415 background: #d9dee5; 8416 border-radius: 100px; 8417 overflow: hidden; 8418 } 8419 .kpr__hist-bar-fill { 8420 height: 100%; 8421 background: #1DACD6; 8422 border-radius: 100px; 8423 transition: width 0.6s ease; 8424 } 8425 .kpr__hist-count { 8426 font-size: 13px; 8427 color: #666; 8428 min-width: 28px; 8429 } 8430 8431 /* ââ Reviews Carousel ââ */ 8432 .kpr__carousel-wrapper { 8433 position: relative; 8434 } 8435 .kpr__swiper { 8436 overflow: hidden; 8437 } 8438 .kpr__swiper .swiper-slide { 8439 height: auto !important; 8440 } 8441 8442 /* Review Card */ 8443 .kpr__card { 8444 background: #fff; 8445 border: 1px solid #e2e6ed; 8446 border-radius: 20px; 8447 padding: 28px; 8448 display: flex; 8449 flex-direction: column; 8450 gap: 14px; 8451 box-sizing: border-box; 8452 transition: box-shadow 0.25s ease; 8453 } 8454 .kpr__card:hover { 8455 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.06); 8456 } 8457 .kpr__card-header { 8458 display: flex; 8459 align-items: center; 8460 justify-content: space-between; 8461 gap: 10px; 8462 } 8463 .kpr__card-stars { 8464 display: flex; 8465 align-items: center; 8466 gap: 2px; 8467 } 8468 .kpr__card-date { 8469 font-size: 13px; 8470 color: #888; 8471 white-space: nowrap; 8472 } 8473 .kpr__card-title { 8474 font-weight: 700; 8475 font-size: 15px; 8476 color: #222; 8477 margin: 0; 8478 line-height: 1.4; 8479 } 8480 .kpr__card-content { 8481 font-size: 14px; 8482 line-height: 1.6; 8483 color: #444; 8484 margin: 0; 8485 } 8486 .kpr__read-more { 8487 color: #1DACD6; 8488 font-size: 13px; 8489 font-weight: 600; 8490 cursor: pointer; 8491 border: none; 8492 background: none; 8493 padding: 0; 8494 margin-top: 4px; 8495 display: inline; 8496 } 8497 .kpr__read-more:hover { 8498 text-decoration: underline; 8499 } 8500 .kpr__full-text { 8501 display: none; 8502 } 8503 .kpr__truncated-text.kpr--expanded .kpr__short-text { 8504 display: none; 8505 } 8506 .kpr__truncated-text.kpr--expanded .kpr__full-text { 8507 display: inline; 8508 } 8509 .kpr__truncated-text.kpr--expanded .kpr__read-more { 8510 display: none; 8511 } 8512 .kpr__card-images { 8513 display: flex; 8514 gap: 8px; 8515 flex-wrap: wrap; 8516 } 8517 .kpr__card-image { 8518 width: 64px; 8519 height: 64px; 8520 object-fit: cover; 8521 border-radius: 10px; 8522 border: 1px solid #e2e6ed; 8523 } 8524 .kpr__card-footer { 8525 display: flex; 8526 align-items: center; 8527 gap: 8px; 8528 padding-top: 10px; 8529 border-top: 1px solid #eef0f3; 8530 } 8531 .kpr__card-avatar { 8532 width: 32px; 8533 height: 32px; 8534 border-radius: 50%; 8535 background: #1DACD6; 8536 color: #fff; 8537 display: flex; 8538 align-items: center; 8539 justify-content: center; 8540 font-size: 14px; 8541 font-weight: 700; 8542 flex-shrink: 0; 8543 } 8544 .kpr__card-author { 8545 font-weight: 600; 8546 font-size: 14px; 8547 color: #222; 8548 } 8549 .kpr__card-verified { 8550 display: inline-flex; 8551 align-items: center; 8552 gap: 4px; 8553 font-size: 12px; 8554 color: #1DACD6; 8555 font-weight: 600; 8556 margin-left: auto; 8557 } 8558 .kpr__card-verified svg { 8559 width: 14px; 8560 height: 14px; 8561 } 8562 8563 /* Reply */ 8564 .kpr__card-reply { 8565 background: #f2f4f7; 8566 border-radius: 12px; 8567 padding: 14px; 8568 font-size: 13px; 8569 line-height: 1.5; 8570 color: #444; 8571 } 8572 .kpr__card-reply strong { 8573 display: block; 8574 margin-bottom: 4px; 8575 color: #222; 8576 } 8577 8578 /* Navigation */ 8579 .kpr__nav { 8580 display: flex; 8581 align-items: center; 8582 justify-content: center; 8583 gap: 16px; 8584 margin-top: 36px; 8585 } 8586 .kpr__nav-btn { 8587 display: flex; 8588 align-items: center; 8589 justify-content: center; 8590 width: 44px; 8591 height: 44px; 8592 border-radius: 50%; 8593 background: #ebeff5; 8594 border: none; 8595 cursor: pointer; 8596 transition: background 0.2s ease; 8597 flex-shrink: 0; 8598 } 8599 .kpr__nav-btn:hover { 8600 background: #1DACD6; 8601 } 8602 .kpr__nav-btn:hover svg path { 8603 fill: #fff; 8604 } 8605 .kpr__nav-btn--prev svg { 8606 transform: scaleX(-1); 8607 } 8608 .kpr__pagination { 8609 position: static !important; 8610 width: auto !important; 8611 min-height: 12px; 8612 transform: none !important; 8613 } 8614 .kpr__pagination .swiper-pagination-bullet { 8615 width: 8px !important; 8616 height: 8px !important; 8617 background: #c4d2e0; 8618 opacity: 1 !important; 8619 transform: scale(1) !important; 8620 margin: 0 3px !important; 8621 } 8622 .kpr__pagination .swiper-pagination-bullet-active, 8623 .kpr__pagination .swiper-pagination-bullet-active-main { 8624 background: #1DACD6; 8625 } 8626 8627 /* ââ Mobile ââ */ 8628 @media screen and (max-width: 768px) { 8629 .kpr { 8630 padding: 36px 0; 8631 } 8632 .kpr__container { 8633 padding: 0 18px; 8634 } 8635 .kpr__heading { 8636 font-size: 24px; 8637 margin-bottom: 24px; 8638 } 8639 .kpr__summary { 8640 flex-direction: column; 8641 align-items: center; 8642 gap: 24px; 8643 padding: 24px 20px; 8644 } 8645 .kpr__rating-overview { 8646 min-width: auto; 8647 } 8648 .kpr__big-rating { 8649 font-size: 44px; 8650 } 8651 .kpr__histogram { 8652 width: 100%; 8653 max-width: 100%; 8654 } 8655 .kpr__card { 8656 padding: 20px; 8657 border-radius: 16px; 8658 } 8659 .kpr__nav { 8660 margin-top: 24px; 8661 } 8662 } 8663</style> 8664 8665<div 8666 id="klaviyo-product-reviews" 8667 class="kpr" 8668 data-section-id="template--23893840003241__klaviyo_product_reviews_Rv3xK7" 8669 data-section-type="klaviyo-product-reviews" 8670> 8671 <div class="kpr__container"> 8672 <h2 class="kpr__heading">Customer Reviews</h2> 8673 <a class="kpr__view-all-reviews" href="/pages/reviews">View all reviews</a> 8674 <!-- Summary + Histogram (populated by JS) --> 8675 <div class="kpr__summary" id="kpr-summary"></div> 8676 8677 <!-- Reviews Carousel --> 8678 <div class="kpr__carousel-wrapper"> 8679 <div class="swiper kpr__swiper kpr__swiper--template--23893840003241__klaviyo_product_reviews_Rv3xK7"> 8680 <div class="swiper-wrapper" id="kpr-slides"></div> 8681 </div> 8682 8683 <div class="kpr__nav"> 8684 <button class="kpr__nav-btn kpr__nav-btn--prev kpr__prev--template--23893840003241__klaviyo_product_reviews_Rv3xK7" aria-label="Previous review"> 8685 <svg xmlns="http://www.w3.org/2000/svg" width="15" height="8" viewBox="0 0 15 8" fill="none"> 8686 <path d="M14.354 4.036C14.549 3.84 14.549 3.524 14.354 3.329L11.172 0.147C10.976-0.049 10.66-0.049 10.464 0.147C10.27 0.342 10.27 0.658 10.464 0.854L13.293 3.682L10.464 6.511C10.27 6.706 10.27 7.022 10.464 7.218C10.66 7.413 10.976 7.413 11.172 7.218L14.354 4.036ZM0 3.682V4.182H14V3.682V3.182H0V3.682Z" fill="#171717"/> 8687 </svg> 8688 </button> 8689 <div class="kpr__pagination kpr__pagination--template--23893840003241__klaviyo_product_reviews_Rv3xK7"></div>
8690 <button class="kpr__nav-btn kpr__nav-btn--next kpr__next--template--23893840003241__klaviyo_product_reviews_Rv3xK7" aria-label="Next review"> 8691 <svg xmlns="http://www.w3.org/2000/svg" width="15" height="8" viewBox="0 0 15 8" fill="none"> 8692 <path d="M14.354 4.036C14.549 3.84 14.549 3.524 14.354 3.329L11.172 0.147C10.976-0.049 10.66-0.049 10.464 0.147C10.27 0.342 10.27 0.658 10.464 0.854L13.293 3.682L10.464 6.511C10.27 6.706 10.27 7.022 10.464 7.218C10.66 7.413 10.976 7.413 11.172 7.218L14.354 4.036ZM0 3.682V4.182H14V3.682V3.182H0V3.682Z" fill="#171717"/> 8693 </svg> 8694 </button> 8695 </div> 8696 </div> 8697 </div> 8698</div> 8699
8700<script> 8701 (function () { 8702 var sectionId = 'template--23893840003241__klaviyo_product_reviews_Rv3xK7'; 8703 8704 function renderReviewsSection() { 8705 var reviewData = window.product && window.product.starReview; 8706 if (!reviewData || !reviewData.reviewCount || reviewData.reviewCount === 0) return; 8707 8708 var section = document.getElementById('klaviyo-product-reviews'); 8709 if (!section) return; 8710 8711 // Show the section 8712 section.classList.add('kpr--visible'); 8713 8714 // ââ Render Summary + Histogram ââ 8715 var histogram = reviewData.ratingHistogram || [0, 0, 0, 0, 0]; 8716 var totalReviews = reviewData.reviewCount; 8717 var maxCount = Math.max.apply(null, histogram); 8718 8719 var summaryHTML = ''; 8720 summaryHTML += '<div class="kpr__rating-overview">'; 8721 summaryHTML += ' <span class="kpr__big-rating">' + reviewData.starRating.toFixed(1) + '</span>'; 8722 summaryHTML += ' <div class="kpr__stars-row">' + generateStarsSVG(reviewData.starRating) + '</div>'; 8723 summaryHTML += ' <span class="kpr__total-count">' + totalReviews + ' ' + (totalReviews === 1 ? 'review' : 'reviews') + '</span>'; 8724 summaryHTML += '</div>'; 8725 8726 summaryHTML += '<div class="kpr__histogram">'; 8727 for (var i = 4; i >= 0; i--) { 8728 var count = histogram[i] || 0; 8729 var pct = totalReviews > 0 ? ((count / totalReviews) * 100).toFixed(1) : 0; 8730 summaryHTML += '<div class="kpr__hist-row">'; 8731 summaryHTML += ' <span class="kpr__hist-label">' + (i + 1) + '</span>'; 8732 summaryHTML += ' <svg class="kpr__hist-star-icon" width="12" height="12" viewBox="0 0 12 12" fill="none"><path d="M2.826 11.514C2.45 11.752 1.974 11.418 2.07 10.984L2.806 7.633C2.844 7.459 2.786 7.277 2.654 7.157L0.163 4.882C-0.158 4.59 0.022 4.055 0.455 4.015L3.7 3.718C3.887 3.701 4.049 3.581 4.119 3.407L5.36 0.314C5.528-0.105 6.12-0.105 6.288 0.314L7.53 3.407C7.6 3.581 7.761 3.701 7.948 3.718L11.193 4.015C11.626 4.055 11.806 4.59 11.485 4.882L8.994 7.157C8.862 7.277 8.804 7.459 8.843 7.633L9.579 10.984C9.674 11.418 9.198 11.752 8.822 11.514L6.092 9.779C5.929 9.675 5.72 9.675 5.556 9.779L2.826 11.514Z" fill="#1DACD6"/></svg>'; 8733 summaryHTML += ' <div class="kpr__hist-bar-track"><div class="kpr__hist-bar-fill" style="width:' + pct + '%"></div></div>'; 8734 summaryHTML += ' <span class="kpr__hist-count">' + count + '</span>'; 8735 summaryHTML += '</div>'; 8736 } 8737 summaryHTML += '</div>'; 8738 8739 document.getElementById('kpr-summary').innerHTML = summaryHTML; 8740 8741 // ââ Render Review Cards as Swiper Slides ââ 8742 var reviews = reviewData.reviews || []; 8743 var slidesHTML = ''; 8744 8745 reviews.forEach(function (review) { 8746 var initial = (review.author || '?').charAt(0).toUpperCase(); 8747 var dateStr = formatReviewDate(review.created_at); 8748 8749 slidesHTML += '<div class="swiper-slide">'; 8750 slidesHTML += ' <div class="kpr__card">'; 8751 8752 // Header: stars + date 8753 slidesHTML += ' <div class="kpr__card-header">'; 8754 slidesHTML += ' <div class="kpr__card-stars">' + generateStarsSVG(review.rating) + '</div>'; 8755 slidesHTML += ' <span class="kpr__card-date">' + dateStr + '</span>'; 8756 slidesHTML += ' </div>'; 8757 8758 // Title 8759 if (review.title) { 8760 slidesHTML += ' <h3 class="kpr__card-title">' + escapeHTML(review.title) + '</h3>'; 8761 } 8762 8763 // Content (170 char limit with read more) 8764 slidesHTML += ' <p class="kpr__card-content">' + truncateWithReadMore(review.content || 'No content', 170) + '</p>'; 8765 8766 // Review images 8767 if (review.images && review.images.length > 0) { 8768 slidesHTML += ' <div class="kpr__card-images">'; 8769 review.images.forEach(function (img) { 8770 var imgUrl = img.url || img.original || img.thumbnail || ''; 8771 if (imgUrl) { 8772 slidesHTML += ' <img class="kpr__card-image" src="' + imgUrl + '" alt="Review image" loading="lazy" />'; 8773 } 8774 }); 8775 slidesHTML += ' </div>'; 8776 } 8777 8778 // Reply 8779 if (review.public_reply_content) { 8780 slidesHTML += ' <div class="kpr__card-reply">'; 8781 slidesHTML += ' <strong>' + escapeHTML(review.public_reply_author || 'Store') + ':</strong>';
8782 slidesHTML += ' <span>' + truncateWithReadMore(review.public_reply_content, 100) + '</span>'; 8783 slidesHTML += ' </div>'; 8784 } 8785 8786 // Footer: avatar + author + verified 8787 slidesHTML += ' <div class="kpr__card-footer">'; 8788 slidesHTML += ' <div class="kpr__card-avatar">' + initial + '</div>'; 8789 slidesHTML += ' <span class="kpr__card-author">' + escapeHTML(review.author) + '</span>'; 8790 if (review.verified) { 8791 slidesHTML += ' <span class="kpr__card-verified">'; 8792 slidesHTML += ' <svg viewBox="0 0 24 24" fill="none"><path d="M9 12l2 2 4-4" stroke="#1DACD6" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/><circle cx="12" cy="12" r="10" stroke="#1DACD6" stroke-width="2"/></svg>'; 8793 slidesHTML += ' Verified'; 8794 slidesHTML += ' </span>'; 8795 } 8796 slidesHTML += ' </div>'; 8797 8798 slidesHTML += ' </div>'; 8799 slidesHTML += '</div>'; 8800 }); 8801 8802 document.getElementById('kpr-slides').innerHTML = slidesHTML; 8803 8804 // ââ Init Swiper ââ 8805 initSwiper(); 8806 } 8807 8808 function initSwiper() { 8809 if (typeof Swiper === 'undefined') { 8810 setTimeout(initSwiper, 100); 8811 return; 8812 } 8813 8814 new Swiper('.kpr__swiper--' + sectionId, { 8815 slidesPerView: 1, 8816 spaceBetween: 20, 8817 grabCursor: true, 8818 pagination: { 8819 el: '.kpr__pagination--' + sectionId, 8820 clickable: true, 8821 dynamicBullets: true, 8822 dynamicMainBullets: 1, 8823 }, 8824 navigation: { 8825 prevEl: '.kpr__prev--' + sectionId, 8826 nextEl: '.kpr__next--' + sectionId, 8827 }, 8828 breakpoints: { 8829 0: { 8830 slidesPerView: 1, 8831 slidesPerGroup: 1, 8832 spaceBetween: 16, 8833 }, 8834 640: { 8835 slidesPerView: 2, 8836 slidesPerGroup: 2, 8837 spaceBetween: 20, 8838 }, 8839 1024: { 8840 slidesPerView: 3, 8841 slidesPerGroup: 3, 8842 spaceBetween: 24, 8843 }, 8844 }, 8845 }); 8846 } 8847 8848 function escapeHTML(str) { 8849 if (!str) return ''; 8850 var div = document.createElement('div'); 8851 div.appendChild(document.createTextNode(str)); 8852 return div.innerHTML; 8853 } 8854 8855 function truncateWithReadMore(text, limit) { 8856 var escaped = escapeHTML(text || ''); 8857 if (!text || text.length <= limit) return escaped; 8858 var truncated = escapeHTML(text.substring(0, limit) + '...'); 8859 return '<span class="kpr__truncated-text">' 8860 + '<span class="kpr__short-text">' + truncated + '</span>' 8861 + '<span class="kpr__full-text">' + escaped + '</span>' 8862 + ' <button class="kpr__read-more" onclick="this.parentElement.classList.add(\'kpr--expanded\')">Read more</button>' 8863 + '</span>'; 8864 } 8865 8866 // Listen for data ready event 8867 document.addEventListener('klaviyo:reviews-loaded', renderReviewsSection); 8868 8869 // Also try if data already loaded 8870 if (window.product && window.product.starReview && window.product.starReview.reviewCount > 0) { 8871 renderReviewsSection(); 8872 } 8873 })(); 8874</script>
8874<script src="//ipowerresale.com/cdn/shop/t/130/assets/FetchKlaviyoReview.js?v=114453090226179426451790277981" defer></script>
8874 8875
8875<script> 8876 window.klaviyoProductId = 8832364773545; 8877 document.addEventListener('DOMContentLoaded', function () { 8878 if (typeof loadProductRating === 'function') { 8879 loadProductRating(8832364773545); 8880 } else { 8881 // Script may still be loading due to defer, wait for it 8882 var checkInterval = setInterval(function () { 8883 if (typeof loadProductRating === 'function') { 8884 clearInterval(checkInterval); 8885 loadProductRating(8832364773545); 8886 } 8887 }, 50); 8888 } 8889 }); 8890 </script>
8890 8891</div> 8892 </main><!-- BEGIN sections: footer-group --> 8893<section id="shopify-section-sections--23893840199849__custom_footer_AxCncV" class="shopify-section shopify-section-group-footer-group section"><style data-shopify>.custom-footer-sections--23893840199849__custom_footer_AxCncV { 8894 background: radial-gradient(80.42% 142.96% at 84.9% 55.37%, #003847 0%, #001E26 62.02%, #171717 100%); 8895 border-top-right-radius: 50px; 8896 border-top-left-radius: 50px; 8897 } 8898 8899 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__wrapper { 8900 max-width: 1440px; 8901 margin: 0 auto; 8902 padding: 72px; 8903 }.custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__wrapper { 8904 padding-bottom: 144px; 8905 }.custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__top { 8906 display: flex; 8907 justify-content: space-between; 8908 gap: 72px; 8909 margin-bottom: 72px; 8910 } 8911 8912 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__logo { 8913 flex-shrink: 0; 8914 max-width: 220px; 8915 } 8916 8917 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__logo img { 8918 max-width: 290px; 8919 height: auto; 8920 } 8921 8922 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__menus { 8923 display: flex; 8924 flex-grow: 1; 8925 justify-content: space-between; 8926 8927 } 8928 8929 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__menu-list { 8930 list-style: none; 8931 padding: 0; 8932 margin: 0; 8933 } 8934 8935 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__menu-item { 8936 margin-bottom: 18px; 8937 } 8938 8939 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__menu-item:last-child { 8940 margin-bottom: 0; 8941 } 8942 8943 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__menu-title { 8944 color: #ffffff; 8945 font-size: 16px; 8946 line-height: 16px; 8947 letter-spacing: -0.02em; 8948 font-weight: 500; 8949 font-family: 'Inter-Medium'; 8950 margin: 0 0 18px 0; 8951 text-transform: unset; 8952 } 8953 8954 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__menu-link { 8955 color: #ffffff; 8956 text-decoration: none; 8957 font-size: 16px; 8958 line-height: 16px; 8959 font-weight: 300; 8960 letter-spacing: -0.02em; 8961 font-family: 'Inter'; 8962 } 8963 8964 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__newsletter { 8965 max-width: 262px; 8966 flex-shrink: 0; 8967 } 8968 8969 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__newsletter-heading { 8970 color: #ffffff; 8971 font-size: 28px; 8972 line-height: 32px; 8973 font-weight: 500; 8974 margin: 0 0 9px 0; 8975 letter-spacing: -0.03em; 8976 font-family: 'Inter-Medium'; 8977 text-transform: unset !important; 8978 } 8979 8980 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__newsletter-text { 8981 color: #ffffff; 8982 font-size: 16px; 8983 line-height: 20px; 8984 margin: 0 0 24px 0; 8985 letter-spacing: -0.02em; 8986 font-weight: 400; 8987 } 8988 8989 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__newsletter-form { 8990 display: flex; 8991 margin-bottom: 36px; 8992 } 8993 8994 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__newsletter-input { 8995 flex: 1; 8996 border: none; 8997 border-bottom: 1px solid #ffffff; 8998 outline: none; 8999 font-size: 16px; 9000 line-height: 20px; 9001 letter-spacing: -0.02em; 9002 font-weight: 400; 9003 max-width: 156px; 9004 padding: 9px 18px; 9005 background: #fff; 9006 color: #222222; 9007 border-top-left-radius: 40px; 9008 border-bottom-left-radius: 40px; 9009 } 9010 9011 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__newsletter-input::placeholder { 9012 color: #222222; 9013 font-size: 16px; 9014 line-height: 20px; 9015 letter-spacing: -0.02em; 9016 } 9017 9018 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__newsletter-button { 9019 color: #FFFFFF; 9020 font-size: 16px; 9021 line-height: 20px; 9022 letter-spacing: 0.10em; 9023 font-weight: 500; 9024 font-family: 'Inter-Medium'; 9025 text-transform: uppercase; 9026 padding: 9px 18px; 9027 background: #1D7F9A; 9028 border: 1px solid #1D7F9A; 9029 cursor: pointer; 9030 transition: background 0.2s ease; 9031 white-space: nowrap; 9032 border-top-right-radius: 40px; 9033 border-bottom-right-radius: 40px; 9034 } 9035 9036 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__newsletter-button:hover { 9037 background: #171717; 9038 } 9039 9040 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__socials { 9041 display: flex; 9042 gap: 18px; 9043 align-items: center; 9044 } 9045 9046 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__social-link { 9047 color: #FFFFFF; 9048 } 9049 9050 9051 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__social-link svg { 9052 width: 25px; 9053 height: 25px; 9054 display: block; 9055 } 9056 9057 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__bottom { 9058 display: flex; 9059 justify-content: flex-start;
9060 align-items: center; 9061 gap: 9px; 9062 } 9063 9064 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__copyright { 9065 margin: 0; 9066 font-size: 16px; 9067 line-height: 20px; 9068 letter-spacing: -0.02em; 9069 font-weight: 400; 9070 color: #ffffff; 9071 9072 } 9073 9074 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__legal-links { 9075 display: flex; 9076 gap: 6px; 9077 align-items: center; 9078 font-size: 16px; 9079 line-height: 20px; 9080 color: #ffffff; 9081 letter-spacing: -0.02em; 9082 9083 } 9084 9085 9086 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__legal-link { 9087 color: #ffffff; 9088 font-size: 16px; 9089 line-height: 20px; 9090 text-decoration: underline; 9091 letter-spacing: -0.02em; 9092 font-weight: 400; 9093 font-family: "ABC Diatype Regular"; 9094 } 9095 9096 /* Mobile Accordion */ 9097 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__mobile { 9098 display: none; 9099 } 9100 9101 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion { 9102 border-bottom: 1px solid rgba(255,255,255,0.15); 9103 } 9104 9105 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-header { 9106 display: flex; 9107 justify-content: space-between; 9108 align-items: center; 9109 padding: 16px 0; 9110 cursor: pointer; 9111 background: none; 9112 border: none; 9113 width: 100%; 9114 text-align: left; 9115 } 9116 9117 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-title { 9118 color: #ffffff; 9119 margin: 0; 9120 letter-spacing: -0.02em; 9121 line-height: 16px; 9122 font-size: 16px; 9123 font-weight: 700; 9124 font-family: 'Inter-Bold'; 9125 text-transform: uppercase; 9126 } 9127 9128 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-icon { 9129 display: flex; 9130 align-items: center; 9131 justify-content: center; 9132 width: 20px; 9133 height: 20px; 9134 color: #ffffff; 9135 } 9136 9137 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-icon-plus { 9138 display: block; 9139 } 9140 9141 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-icon-minus { 9142 display: none; 9143 } 9144 9145 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion.active .footer__accordion-icon-plus { 9146 display: none; 9147 } 9148 9149 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion.active .footer__accordion-icon-minus { 9150 display: block; 9151 } 9152 9153 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-content { 9154 max-height: 0; 9155 overflow: hidden; 9156 transition: max-height 0.3s ease; 9157 } 9158 9159 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion.active .footer__accordion-content { 9160 max-height: 500px; 9161 } 9162 9163 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-list { 9164 list-style: none; 9165 padding: 0 0 16px 0; 9166 margin: 0; 9167 } 9168 9169 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-list li { 9170 margin-bottom: 14px; 9171 } 9172 9173 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-list li:last-child { 9174 margin-bottom: 0; 9175 } 9176 9177 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-list a { 9178 color: #ffffff; 9179 font-size: 16px; 9180 line-height: 16px; 9181 letter-spacing: -0.02em; 9182 font-weight: 400; 9183 text-decoration: none; 9184 font-family: 'Inter-Regular'; 9185 } 9186 9187 @media (max-width: 1050px) and (min-width: 939px) { 9188 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__bottom { 9189 flex-direction: column; 9190 } 9191 } 9192 9193 @media (max-width: 940px) and (min-width: 769px) { 9194 9195 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__wrapper { 9196 padding: 72px 36px; 9197 } 9198 9199 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__bottom { 9200 flex-direction: column; 9201 } 9202 } 9203 9204 @media (max-width: 1100px) and (min-width: 769px) { 9205 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__menus { 9206 gap: 16px; 9207 } 9208 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__top { 9209 gap: 36px; 9210 } 9211 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__newsletter-input { 9212 max-width: 100% !important; 9213 } 9214 } 9215 9216 @media (max-width: 880px) and (min-width: 769px) { 9217 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__menus { 9218 flex-wrap: wrap; 9219 } 9220 } 9221 9222 @media (max-width: 1020px) and (min-width: 769px) { 9223 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__newsletter { 9224 width: auto; 9225 } 9226 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__newsletter-form { 9227 /* flex-direction: column !important; */ 9228 } 9229 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__logo img { 9230 max-width: 180px !important; 9231 } 9232 } 9233 9234 @media screen and (max-width: 768px) { 9235 9236 .custom-footer-sections--23893840199849__custom_footer_AxCncV { 9237 background: linear-gradient(352.2deg, #003847 6.44%, #001E26 54.32%, #171717 83.65%); 9238 border-top-right-radius: 30px; 9239 border-top-left-radius: 30px; 9240 } 9241 9242 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__wrapper { 9243 padding: 36px; 9244 } 9245 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__top { 9246 display: none; 9247 } 9248 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__mobile { 9249 display: block; 9250 } 9251 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__mobile-logo { 9252 text-align: center; 9253 margin-bottom: 36px; 9254 } 9255 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__mobile-logo img { 9256 max-width: 100%; 9257 width: 100%; 9258 height: auto; 9259 margin: 0 auto; 9260 } 9261 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__mobile-newsletter { 9262 text-align: center; 9263 margin-bottom: 36px; 9264 } 9265 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__mobile-newsletter .footer__newsletter-heading { 9266 text-align: left; 9267 font-size: 28px; 9268 line-height: 32px; 9269 font-family: 'Inter-Medium'; 9270 font-weight: 500; 9271 margin-bottom: 9px; 9272 } 9273 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__mobile-newsletter .footer__newsletter-text { 9274 font-size: 14px; 9275 line-height: 20px; 9276 letter-spacing: 0; 9277 text-align: left; 9278 } 9279 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__mobile-newsletter .footer__newsletter-form { 9280 justify-content: center; 9281 } 9282 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__mobile-newsletter .footer__newsletter-input { 9283 max-width: 100% !important; 9284 } 9285 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__mobile-socials { 9286 display: flex; 9287 justify-content: flex-start; 9288 gap: 18px; 9289 margin-bottom: 36px; 9290 } 9291 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion { 9292 border: none; 9293 margin-bottom: 18px; 9294 } 9295 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-header { 9296 padding: 0; 9297 } 9298 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-list { 9299 padding: 0 !important; 9300 padding-top: 18px !important; 9301 } 9302 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-list li { 9303 margin-bottom: 18px; 9304 } 9305 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__bottom { 9306 flex-direction: column; 9307 align-items: center; 9308 gap: 18px; 9309 padding-top: 36px; 9310 } 9311 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__legal-links { 9312 flex-wrap: wrap; 9313 justify-content: center; 9314 } 9315 9316 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-title { 9317 font-weight: 500; 9318 font-family: 'Inter-Medium'; 9319 text-transform: capitalize !important; 9320 } 9321 9322 9323 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__accordion-list a { 9324 font-weight: 300; 9325 font-family: 'Inter'; 9326 } 9327 9328 .custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__legal-link { 9329 font-family: 'Inter'; 9330 } 9331 9332 }</style><footer class="custom-footer-sections--23893840199849__custom_footer_AxCncV"> 9333 <div class="footer__wrapper"><div class="footer__top"> 9334 <div class="footer__logo"><a href="/"> 9335 <img src="//ipowerresale.com/cdn/shop/files/svg840.svg?v=1772971322&width=300" alt="iPowerResale" loading="lazy"> 9336 </a></div> 9337 9338 <div class="footer__menus"><nav class="footer__menu-column" ><h3 class="footer__menu-title">Shop</h3><ul class="footer__menu-list"><li class="footer__menu-item"> 9339 <a href="/pages/mac" class="footer__menu-link">Mac</a> 9340 </li><li class="footer__menu-item"> 9341 <a href="/pages/ipad" class="footer__menu-link">iPad</a> 9342 </li><li class="footer__menu-item"> 9343 <a href="/collections/iphone" class="footer__menu-link">iPhone</a> 9344 </li><li class="footer__menu-item"> 9345 <a href="/collections/watch?filter.mfield_cql_parent_product=true" class="footer__menu-link">Watch</a> 9346 </li><li class="footer__menu-item"> 9347 <a href="/collections/airpods" class="footer__menu-link">Airpods</a> 9348 </li><li class="footer__menu-item"> 9349 <a href="/collections/accessories?filter.mfield_cql_parent_product=false" class="footer__menu-link">Accessories</a> 9350 </li></ul> 9351 </nav><nav class="footer__menu-column" ><h3 class="footer__menu-title">Service </h3><ul class="footer__menu-list"><li class="footer__menu-item"> 9352 <a href="/pages/service-support" class="footer__menu-link">Service & Support</a> 9353 </li><li class="footer__menu-item"> 9354 <a href="/pages/troubleshooting-guides" class="footer__menu-link">Troubleshooting Guides</a> 9355 </li><li class="footer__menu-item"> 9356 <a href="/blogs/apple-buying-guides" class="footer__menu-link">Buying Guides</a> 9357 </li><li class="footer__menu-item"> 9358 <a href="/pages/the-ipower-promise" class="footer__menu-link">The iPower Promise</a> 9359 </li><li class="footer__menu-item"> 9360 <a href="/blogs/tech-insights" class="footer__menu-link">iPower Insights</a> 9361 </li><li class="footer__menu-item"> 9362 <a href="/pages/faq" class="footer__menu-link">FAQs</a> 9363 </li></ul> 9364 </nav><nav class="footer__menu-column" ><h3 class="footer__menu-title">Company</h3><ul class="footer__menu-list"><li class="footer__menu-item"> 9365 <a href="/pages/about-us" class="footer__menu-link">About Us</a> 9366 </li><li class="footer__menu-item"> 9367 <a href="/pages/corporate-buyers" class="footer__menu-link">Corporate Buyers</a> 9368 </li><li class="footer__menu-item"> 9369 <a href="/pages/apple-for-education" class="footer__menu-link">Educational Buyers</a> 9370 </li><li class="footer__menu-item"> 9371 <a href="/pages/contact" class="footer__menu-link">Contact Us</a> 9372 </li><li class="footer__menu-item"> 9373 <a href="/pages/reviews" class="footer__menu-link">Reviews</a> 9374 </li><li class="footer__menu-item"> 9375 <a href="/pages/us-privacy-requests" class="footer__menu-link">Privacy</a> 9376 </li></ul> 9377 </nav></div><div class="footer__newsletter" ><h2 class="footer__newsletter-heading">Stay in Touch</h2><p class="footer__newsletter-text">Sign up today for exclusive offers!</p><form class="footer__newsletter-form" action="/contact#contact_form" method="post"> 9378 <input type="hidden" name="form_type" value="customer"> 9379 <input type="hidden" name="contact[tags]" value="newsletter"> 9380 <input 9381 type="email" 9382 name="contact[email]" 9383 class="footer__newsletter-input" 9384 placeholder="Email address" 9385 required 9386 > 9387 <button type="submit" class="footer__newsletter-button"> 9388 Submit 9389 </button> 9390 </form> 9391 <div class="footer__socials"><a href="https://www.facebook.com/people/iPowerResale/61560188386080/" class="footer__social-link" target="_blank" rel="noopener" aria-label="Facebook"> 9392 <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewB
9392ox="0 0 25 25" fill="none"> 9393 <path fill-rule="evenodd" clip-rule="evenodd" d="M14.4795 25V12.4985H18.0295L18.5 8.19046H14.4795L14.4855 6.03423C14.4855 4.91062 14.5953 4.30856 16.2555 4.30856H18.4749V0H14.9243C10.6595 0 9.1584 2.08988 9.1584 5.6044V8.19095H6.5V12.499H9.1584V25H14.4795Z" fill="white"/> 9394 </svg> 9395 </a><a href="https://www.linkedin.com/company/ipowerresale/" class="footer__social-link" target="_blank" rel="noopener" aria-label="LinkedIn"> 9396 <svg xmlns="http://www.w3.org/2000/svg" width="26" height="25" viewBox="0 0 26 25" fill="none"> 9397 <g clip-path="url(#clip0_footer_linkedin_desktop)"> 9398 <mask id="mask0_footer_linkedin_desktop" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="26" height="25"> 9399 <path fill-rule="evenodd" clip-rule="evenodd" d="M26 25H20.6126V16.8795C20.6126 14.9429 20.5784 12.4519 17.8132 12.4519C15.0105 12.4519 14.5825 14.5624 14.5825 16.7406V25H9.20063V8.30086H14.3657V10.5841H14.4394C15.158 9.27086 16.9152 7.88651 19.5364 7.88651C24.992 7.88651 26 11.3441 26 15.8418V25ZM3.12622 6.0199C1.39508 6.0199 0 4.67148 0 3.00934C0 1.34827 1.39508 0 3.12622 0C4.84946 0 6.24921 1.34827 6.24921 3.00934C6.24921 4.67148 4.84946 6.0199 3.12622 6.0199ZM5.82111 25H0.427959V8.30086H5.82111V25Z" fill="white"/> 9400 </mask> 9401 <g mask="url(#mask0_footer_linkedin_desktop)"> 9402 <path d="M-6.48828 -6.25H32.4879V31.25H-6.48828V-6.25Z" fill="#F6F1DC"/> 9403 </g> 9404 </g> 9405 <defs> 9406 <clipPath id="clip0_footer_linkedin_desktop"> 9407 <rect width="26" height="25" fill="white"/> 9408 </clipPath> 9409 </defs> 9410 </svg> 9411 </a></div> 9412 </div></div><div class="footer__mobile"><div class="footer__mobile-newsletter"><h2 class="footer__newsletter-heading">Stay in Touch</h2><p class="footer__newsletter-text">Sign up today for exclusive offers!</p><form class="footer__newsletter-form" action="/contact#contact_form" method="post"> 9413 <input type="hidden" name="form_type" value="customer"> 9414 <input type="hidden" name="contact[tags]" value="newsletter"> 9415 <input 9416 type="email" 9417 name="contact[email]" 9418 class="footer__newsletter-input" 9419 placeholder="Email address" 9420 required 9421 > 9422 <button type="submit" class="footer__newsletter-button"> 9423 Submit 9424 </button> 9425 </form> 9426 </div> 9427 9428 <div class="footer__mobile-socials"><a href="https://www.facebook.com/people/iPowerResale/61560188386080/" class="footer__social-link" target="_blank" rel="noopener" aria-label="Facebook"> 9429 <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 25 25" fill="none"> 9430 <path fill-rule="evenodd" clip-rule="evenodd" d="M14.4795 25V12.4985H18.0295L18.5 8.19046H14.4795L14.4855 6.03423C14.4855 4.91062 14.5953 4.30856 16.2555 4.30856H18.4749V0H14.9243C10.6595 0 9.1584 2.08988 9.1584 5.6044V8.19095H6.5V12.499H9.1584V25H14.4795Z" fill="white"/> 9431 </svg> 9432 </a><a href="https://www.linkedin.com/company/ipowerresale/" class="footer__social-link" target="_blank" rel="noopener" aria-label="LinkedIn"> 9433 <svg xmlns="http://www.w3.org/2000/svg" width="26" height="25" viewBox="0 0 26 25" fill="none"> 9434 <g clip-path="url(#clip0_footer_linkedin_mobile)"> 9435 <mask id="mask0_footer_linkedin_mobile" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="26" height="25"> 9436 <path fill-rule="evenodd" clip-rule="evenodd" d="M26 25H20.6126V16.8795C20.6126 14.9429 20.5784 12.4519 17.8132 12.4519C15.0105 12.4519 14.5825 14.5624 14.5825 16.7406V25H9.20063V8.30086H14.3657V10.5841H14.4394C15.158 9.27086 16.9152 7.88651 19.5364 7.88651C24.992 7.88651 26 11.3441 26 15.8418V25ZM3.12622 6.0199C1.39508 6.0199 0 4.67148 0 3.00934C0 1.34827 1.39508 0 3.12622 0C4.84946 0 6.24921 1.34827 6.24921 3.00934C6.24921 4.67148 4.84946 6.0199 3.12622 6.0199ZM5.82111 25H0.427959V8.30086H5.82111V25Z" fill="white"/> 9437 </mask> 9438 <g mask="url(#mask0_footer_linkedin_mobile)"> 9439 <path d="M-6.48828 -6.25H32.4879V31.25H-6.48828V-6.25Z" fill="#F6F1DC"/> 9440 </g> 9441 </g> 9442 <defs> 9443 <clipPath id="clip0_footer_linkedin_mobile"> 9444 <rect width="26" height="25" fill="white"/> 9445 </clipPath> 9446 </defs> 9447 </svg> 9448 </a></div><div class="footer__mobile-logo"><a href="/"> 9449 <img src="//ipowerresale.com/cdn/shop/files/svg840.svg?v=1772971322&width=240" alt="iPowerResale" loading="lazy"> 9450 </a></div><div class="footer__accordion" data-accordion > 9451 <button class="footer__accordion-header" type="button">
9452 <span class="footer__accordion-title">Shop</span> 9453 <span class="footer__accordion-icon"> 9454 <svg class="footer__accordion-icon-plus" xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"> 9455 <path d="M6 1V11M1 6H11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/> 9456 </svg> 9457 <svg class="footer__accordion-icon-minus" xmlns="http://www.w3.org/2000/svg" width="12" height="2" viewBox="0 0 12 2" fill="none"> 9458 <path d="M1 1H11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/> 9459 </svg> 9460 </span> 9461 </button> 9462 <div class="footer__accordion-content"> 9463 <ul class="footer__accordion-list"><li><a href="/pages/mac">Mac</a></li><li><a href="/pages/ipad">iPad</a></li><li><a href="/collections/iphone">iPhone</a></li><li><a href="/collections/watch?filter.mfield_cql_parent_product=true">Watch</a></li><li><a href="/collections/airpods">Airpods</a></li><li><a href="/collections/accessories?filter.mfield_cql_parent_product=false">Accessories</a></li></ul> 9464 </div> 9465 </div><div class="footer__accordion" data-accordion > 9466 <button class="footer__accordion-header" type="button"> 9467 <span class="footer__accordion-title">Service </span> 9468 <span class="footer__accordion-icon"> 9469 <svg class="footer__accordion-icon-plus" xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"> 9470 <path d="M6 1V11M1 6H11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/> 9471 </svg> 9472 <svg class="footer__accordion-icon-minus" xmlns="http://www.w3.org/2000/svg" width="12" height="2" viewBox="0 0 12 2" fill="none"> 9473 <path d="M1 1H11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/> 9474 </svg> 9475 </span> 9476 </button> 9477 <div class="footer__accordion-content"> 9478 <ul class="footer__accordion-list"><li><a href="/pages/service-support">Service & Support</a></li><li><a href="/pages/troubleshooting-guides">Troubleshooting Guides</a></li><li><a href="/blogs/apple-buying-guides">Buying Guides</a></li><li><a href="/pages/the-ipower-promise">The iPower Promise</a></li><li><a href="/blogs/tech-insights">iPower Insights</a></li><li><a href="/pages/faq">FAQs</a></li></ul> 9479 </div> 9480 </div><div class="footer__accordion" data-accordion > 9481 <button class="footer__accordion-header" type="button"> 9482 <span class="footer__accordion-title">Company</span> 9483 <span class="footer__accordion-icon"> 9484 <svg class="footer__accordion-icon-plus" xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"> 9485 <path d="M6 1V11M1 6H11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/> 9486 </svg> 9487 <svg class="footer__accordion-icon-minus" xmlns="http://www.w3.org/2000/svg" width="12" height="2" viewBox="0 0 12 2" fill="none"> 9488 <path d="M1 1H11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/> 9489 </svg> 9490 </span> 9491 </button> 9492 <div class="footer__accordion-content"> 9493 <ul class="footer__accordion-list"><li><a href="/pages/about-us">About Us</a></li><li><a href="/pages/corporate-buyers">Corporate Buyers</a></li><li><a href="/pages/apple-for-education">Educational Buyers</a></li><li><a href="/pages/contact">Contact Us</a></li><li><a href="/pages/reviews">Reviews</a></li><li><a href="/pages/us-privacy-requests">Privacy</a></li></ul> 9494 </div> 9495 </div></div><div class="footer__bottom"> 9496 <p class="footer__copyright">© 2026 iPower Resale. All Rights Reserved.</p> 9497 <div class="footer__legal-links"><a href="/policies/privacy-policy" class="footer__legal-link">Privacy Policy</a><span class="footer__legal-sep">|</span><a href="/pages/terms-of-limited-warranty" class="footer__legal-link">Terms of Limited Warranty</a><span class="footer__legal-sep">|</span><a href="/pages/accessibility-policy" class="footer__legal-link">Accessibility Policy</a><span class="footer__legal-sep">|</span><a href="/pages/terms-conditions" class="footer__legal-link">Terms & Conditions</a></div> 9498 </div> 9499 9500 </div> 9501</footer> 9502
9503<script> 9504 document.addEventListener('DOMContentLoaded', function () { 9505 9506 // Accordion 9507 var accordions = document.querySelectorAll('.custom-footer-sections--23893840199849__custom_footer_AxCncV [data-accordion]'); 9508 if (accordions.length > 0) { 9509 accordions[0].classList.add('active'); 9510 } 9511 accordions.forEach(function (accordion) { 9512 var header = accordion.querySelector('.footer__accordion-header'); 9513 header.addEventListener('click', function () { 9514 accordion.classList.toggle('active'); 9515 }); 9516 }); 9517 9518 // Newsletter Form Validation 9519 function initNewsletterForm(form) { 9520 if (!form) return; 9521 var input = form.querySelector('input[type="email"]'); 9522 var btn = form.querySelector('button[type="submit"]'); 9523 if (!input || !btn) return; 9524 9525 var errorEl = document.createElement('p'); 9526 errorEl.style.cssText = 'color:#FF6B6B;font-size:13px;line-height:18px;margin:6px 0;font-family:"Inter-Regular",sans-serif;display:none;'; 9527 form.insertAdjacentElement('afterend', errorEl); 9528 9529 var successEl = document.createElement('p'); 9530 successEl.style.cssText = 'color:#1D7F9A;font-size:13px;line-height:18px;margin:6px 0;font-family:"Inter-Regular",sans-serif;display:none;'; 9531 successEl.textContent = 'Thank you for subscribing!'; 9532 errorEl.insertAdjacentElement('afterend', successEl); 9533 9534 function validateEmail(val) { 9535 return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val.trim()); 9536 } 9537 function showError(msg) { 9538 errorEl.textContent = msg; 9539 errorEl.style.display = 'block'; 9540 successEl.style.display = 'none'; 9541 input.style.borderBottomColor = '#FF6B6B'; 9542 } 9543 function clearError() { 9544 errorEl.style.display = 'none'; 9545 input.style.borderBottomColor = ''; 9546 } 9547 9548 input.addEventListener('input', function () { 9549 if (this.value.trim()) clearError(); 9550 }); 9551 9552 form.addEventListener('submit', function (e) { 9553 e.preventDefault(); 9554 clearError(); 9555 var val = input.value.trim(); 9556 if (!val) { showError('Please enter your email address.'); return; } 9557 if (!validateEmail(val)) { showError('Please enter a valid email address.'); return; } 9558 successEl.style.display = 'block'; 9559 form.submit(); 9560 }); 9561 } 9562 9563 document.querySelectorAll('.custom-footer-sections--23893840199849__custom_footer_AxCncV .footer__newsletter-form').forEach(function (form) { 9564 initNewsletterForm(form); 9565 }); 9566 9567 }); 9568</script>
9568 9569 9570 9571</section> 9572<!-- END sections: footer-group --></div> 9573 </div><div id="VideoModal" class="modal modal--solid"> 9574 <div class="modal__inner"> 9575 <div class="modal__centered page-width text-center"> 9576 <div class="modal__centered-content"> 9577 <div class="video-wrapper video-wrapper--modal"> 9578 <div id="VideoHolder"></div> 9579 </div> 9580 </div> 9581 </div> 9582 </div> 9583 9584 <button type="button" class="modal__close js-modal-close text-link"> 9585 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><title>icon-X</title><path d="m19 17.61 27.12 27.13m0-27.12L19 44.74"/></svg> 9586 <span class="icon__fallback-text">"Close (esc)"</span> 9587 </button> 9588</div> 9589<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true"> 9590 <div class="pswp__bg"></div> 9591 <div class="pswp__scroll-wrap"> 9592 <div class="pswp__container"> 9593 <div class="pswp__item"></div> 9594 <div class="pswp__item"></div> 9595 <div class="pswp__item"></div> 9596 </div> 9597 9598 <div class="pswp__ui pswp__ui--hidden"> 9599 <button class="btn btn--body btn--circle pswp__button pswp__button--arrow--left" title="Previous"> 9600 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-left" viewBox="0 0 284.49 498.98"><path d="M249.49 0a35 35 0 0 1 24.75 59.75L84.49 249.49l189.75 189.74a35.002 35.002 0 1 1-49.5 49.5L10.25 274.24a35 35 0 0 1 0-49.5L224.74 10.25A34.89 34.89 0 0 1 249.49 0Z"/></svg> 9601 </button> 9602 9603 <button class="btn btn--body btn--circle btn--large pswp__button pswp__button--close" title="Close (esc)"> 9604 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><title>icon-X</title><path d="m19 17.61 27.12 27.13m0-27.12L19 44.74"/></svg> 9605 </button> 9606 9607 <button class="btn btn--body btn--circle pswp__button pswp__button--arrow--right" title="Next"> 9608 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-right" viewBox="0 0 284.49 498.98"><title>icon-chevron</title><path d="M35 498.98a35 35 0 0 1-24.75-59.75l189.74-189.74L10.25 59.75a35.002 35.002 0 0 1 49.5-49.5l214.49 214.49a35 35 0 0 1 0 49.5L59.75 488.73A34.89 34.89 0 0 1 35 498.98Z"/></svg> 9609 </button> 9610 </div> 9611 </div> 9612</div> 9613<tool-tip data-tool-tip=""> 9614 <div class="tool-tip__inner" data-tool-tip-inner> 9615 <button class="tool-tip__close" data-tool-tip-close=""><svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><title>icon-X</title><path d="m19 17.61 27.12 27.13m0-27.12L19 44.74"/></svg></button> 9616 <div data-tool-tip-title>Apple iPad Pro | iPowerResale</div> 9617 <div class="tool-tip__content" data-tool-tip-content> 9618 </div> 9619 </div> 9620</tool-tip> 9621 9622 <template id="naturalImageMarkup"> 9623 <div class="image-wrap" style="height: 0;"> 9624 <image-element data-aos="image-fade-in" data-aos-offset="150"> 9625 <img 9626 class="grid-product__image image-element" 9627 width 9628 height 9629 src 9630 srcset 9631 loading="lazy" 9632 alt> 9633 </image-element> 9634 </div> 9635 </template> 9636 <template id="fixedRatioImageMarkup"> 9637 <div class="grid__image-ratio"> 9638 <image-element data-aos="image-fade-in" data-aos-offset="150"> 9639 <img 9640 class="image-element" 9641 width 9642 height 9643 src 9644 srcset 9645 loading="lazy" 9646 alt> 9647 </image-element> 9648 </div> 9649 </template> 9650
9650<script src="//ipowerresale.com/cdn/shop/t/130/assets/swiper-bundle.min.js?v=155620977096792918481790278034"></script>
9650 9651 9652<style> </style> 9653<div id="shopify-block-AWU9qK05LWVIrYm9vV__14876220180117712452" class="shopify-block shopify-app-block"> 9654 <!-- BEGIN app snippet: app-data -->
9654<script> 9655 try { 9656 if (!window.AVADA_SURVEY) { 9657 window.AVADA_SURVEY = { 9658 // Slim survey/quiz arrays â enough for Tier 0 wrapper gating 9659 // (`surveys.length > 0` + `_disabled` check) and for early channel 9660 // routing decisions. Full content lazy-loaded via #avada-full-data. 9661 surveys: [ 9662 { 9663 "id": "U4VyHz4GGSLGft1O6eKO", 9664 "surveyType": "survey", 9665 "isActive": true, 9666 "channels": { 9667 "siteWidget": { "enabled": false }, 9668 "exitIntent": { "enabled": false }, 9669 "surveyForm": { "enabled": false }, 9670 "embedSurvey": { "enabled": true }, 9671 "dedicatedPageSurvey": { "enabled": true }, 9672 "postPurchasePage": { "enabled": false }, 9673 "postPurchaseEmail": { "enabled": false } 9674 } 9675 }, 9676 { 9677 "id": "02oM6Gal1EzXJ1DDvIK2", 9678 "surveyType": null, 9679 "isActive": true, 9680 "channels": { 9681 "siteWidget": { "enabled": false }, 9682 "exitIntent": { "enabled": false }, 9683 "surveyForm": { "enabled": false }, 9684 "embedSurvey": { "enabled": false }, 9685 "dedicatedPageSurvey": { "enabled": true }, 9686 "postPurchasePage": { "enabled": true }, 9687 "postPurchaseEmail": { "enabled": false } 9688 } 9689 }, 9690 { 9691 "id": "oQq5678ripcyz2rOXSmF", 9692 "surveyType": null, 9693 "isActive": true, 9694 "channels": { 9695 "siteWidget": { "enabled": false }, 9696 "exitIntent": { "enabled": true }, 9697 "surveyForm": { "enabled": false }, 9698 "embedSurvey": { "enabled": false }, 9699 "dedicatedPageSurvey": { "enabled": true }, 9700 "postPurchasePage": { "enabled": false }, 9701 "postPurchaseEmail": { "enabled": false } 9702 } 9703 } 9704 ], 9705 quizzes: [ 9706 ], 9707 // Settings: shopId + language detection needed eagerly (wrapper / 9708 // targeting). Full settings (channel colors, design configs) lazy. 9709 settings: { 9710 shopId: "3Bu61qLyUyPg67WmmPvY", 9711 detectLanguage: "shop", 9712 translationSettings: {}, 9713 moneyWithCurrencyFormat: "${{amount}} USD" 9714 }, 9715 // Targeting context â small, needed before mount. 9716 page: "product", 9717 product: { 9718 id: 8832364773545, 9719 variants: [{"id":46682881720489,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"iPad Pro Parent 4","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"iPad Pro 11-inch M5","public_title":null,"options":["Default Title"],"price":97900,"weight":2268,"compare_at_price":null,"inventory_management":"shopify","barcode":"iPad Pro Parent 4","requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}], 9720 selectedVariant: 46682881720489, 9721 hasOnlyDefaultVariant: true 9722 }, 9723 collection: { 9724 id: null 9725 }, 9726 customer: { 9727 tags: null, 9728 email: null, 9729 name: null, 9730 id: null, 9731 acceptsMarketing: null 9732 } 9733 }; 9734 } 9735 } catch (e) { 9736 console.error('Avada Survey Error:', e); 9737 } 9738 </script>
9738 9739 9740
9740<script type="application/json" id="avada-full-data"> 9741 { 9742 "surveys": [{"shopId":"3Bu61qLyUyPg67WmmPvY","questions":[{"type":"number_scale","heading":"How likely are you to recommend us to a friend?","description":"","image":{"url":"","alignment":"center","sizePercentage":"100"},"skippable":false,"position":0,"leftLabel":"Not likely","rightLabel":"Very likely","id":"question_1753304913316","chosen":false,"selected":false,"sectionId":null,"positionInSection":null},{"type":"number_scale","heading":"How easy was it to purchase from our online store?","description":"","image":{"url":"","alignment":"center","sizePercentage":"100"},"skippable":false,"position":1,"leftLabel":"Very difficult","rightLabel":"Very easy","id":"question_1753304913317","chosen":false,"selected":false,"sectionId":null,"positionInSection":null},{"type":"multiple","heading":"How was your delivery experience?","description":"","image":{"url":"","alignment":"center","sizePercentage":"100"},"skippable":false,"position":2,"answers":[{"id":"answer_1753304935410","content":"Excellent â Packaging arrived clean, undamaged, and looked professionally handled."},{"id":"answer_1753304935412","content":" Very Good â Minor wear, but overall the packaging was in good shape."},{"id":"answer_1753304935413","content":"Okay â Some scuffs, dents, or dust, but nothing concerning."},{"id":"answer_1753305373948","content":"Poor â Packaging was noticeably dirty, damaged, or gave a used feel."},{"id":"answer_1753305376496","content":"Very Poor â Packaging was torn, dusty, or made me question the care taken in shipping."}],"enabledCustomAnswer":false,"showWhen":"always_show","showCustomAnswerWhen":[],"customAnswerPlaceholder":"Please add more information","id":"question_1753304935411","chosen":false,"selected":false,"sectionId":null,"positionInSection":null},{"type":"short_answer","heading":"How could we improve?","description":"","image":{"url":"","alignment":"center","sizePercentage":"100"},"skippable":true,"position":3,"placeholder":"","id":"question_1753304913318","chosen":false,"selected":false,"sectionId":null,"positionInSection":null}],"thankYou":{"type":"thank_you","thankYouType":"default","heading":"Thank you for doing our survey","description":"If you have any question, please feel free to ask us","link":"samplelink.shopify.com","enableButton":true,"buttonText":"Discover more","buttonLink":""},"discount":{"enabled":false,"code":"","displayOn":"email","limitOnePerEmail":false,"card":{"heading":"Earn your discount code","description":"Enter your preferred shopping email to receive the coupon.","placeholder":"Enter your email","buttonText":"Get coupon"},"email":{"subject":"Thank you for taking the survey for {{shop.name}}. Here is your coupon reward.","fromName":"","fromEmail":"[email protected]","sendType":"default","body":"\n\u003ch2 style=\"font-size: 20px; font-weight: bold; margin: 0 0 24px 0; color: #000;\"\u003eCongratulations! Here is you coupon reward\u003c\/h2\u003e\n\u003cp\u003eHi {{customer.displayName}},\u003c\/p\u003e\n\u003cbr\u003e\n\u003cp\u003eWe truly appreciate you taking the time to complete our surveyâyour insights mean a lot to us.\u003c\/p\u003e\n\u003cp\u003eAs a thank-you, enjoy a special reward to use on your next purchase.\u003c\/p\u003e\n\u003cbr\u003e\n\u003cp\u003eYour coupon code is:\u003c\/p\u003e\n\u003cbr\u003e\n\u003cdiv style=\"padding: 16px;word-break: break-word; background-color: #f6f6f7; border-radius: 8px; text-align: center;\"\u003e\n \u003cspan style=\"font-size: 20px; font-weight: bold; color: #202223; letter-spacing: 4px;\"\u003e{{discount.code}}\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cbr\u003e\n\u003cp\u003eWarm regards,\u003c\/p\u003e\n\u003cp\u003e{{shop.name}}.\u003c\/p\u003e"},"banner":{"heading":"Earn DISCOUNT CODE","description":"Finish this survey and earn discount for your next purchase!","text":{"color":"#FFFFFF"},"background":{"type":"solid","color":"#1C1C1C","colorSolid":"#1C1C1C","gradientStart":"#1C1C1C","gradientEnd":"#637381","gradientDirection":70,"image":{"url":""}}},"template":"\n \u003cdiv class=\"Avada-Email\"\u003e\n \u003cdiv class=\"Avada-Email__Content\"\u003e\n {{email.content}}\n \u003c\/div\u003e\n \u003c\/div\u003e\n"},"name":"Post Purchase email survey","totalResponses":182,"createdAt":"2025-07-23T21:24:48.354Z","channelTypes":["embedSurvey","dedicatedPageSurvey","hyperLink"],"channels":{"postPurchaseEmail":{"type":"postPurchaseEmail","duplicateTime":2,"emailLayout":"ctaButton","userTargeting":{"type":"all_users","userTags":[],"enabledUserTag":false,"enabledProductPurchased":true,"productPurchased":[8637120348329,8637120315561,8637120282793,8637120217257,8637120184489,8637120151721,8637120118953,8637120086185,8637120053417,8508329853097,8502970024105,8502969925801,8502969860265,8502969761961,8502969663657,8502969630889,8502969499817,8502969434281,8502969335977,8502969237673,8502967369897,8502967271593,8502967206057,8502967074985,8502966976681,8502966878377,8502966845609,8502966812841,8502966714537,8502966583465,8502966550697,8502966452393,8502966321321,8502966255785,8502966026409,8502965895337,8502965829801,8502965764265,8502965731497,8502965600425,8502963699881,8502963601577,8502963470505,8502963339433,8502963306665,8502963142825,8502963044521,8502962880681,8502962749609,8502962684073,8502962553001,8502962454697,8502962323625,8502962192553,8502962127017,8502961963177,8502961864873,8502961733801,8502961701033,8502961275049,8502958981289,8502958850217,8502958751913,8502958686377,8502958555305,8502958424233,8502958293161,8502958162089,8502957998249,8502957965481,8502957801641,8502957768873,8502957572265,8502957506729,8502957375657,8502957179049,8502957047977,8502956916905,8435664322729,8435664257193,8435664224425,8435664191657,8435664158889,8435664093353,8435664060585,8435664027817,8435663995049,8435663962281,8435663929513,8435663896745,8435663863977,8435663831209,8435663798441,8435663732905,8435663667369,8435663634601,8435663601833,8435663569065,8435663536297,8435663470761,8435663437993,8435663405225,8435663372457,8435663339689,8435663274153,8435663241385,8435663208617,8435663175849,8435663143081,8435663044777,8435663012009,8435662979241,8435662946473,8435662880937,8435661734057,8435661668521,8435661635753,8435661570217,8435661504681,8435661471913,8435661406377,8435661373609,8435661308073,8435661275305,8435661177001,8435661013161,8435660488873,8435660456105,8435660390569,8435660357801,8435660325033,8435660226729,8435660193961,8435660128425,8435660095657,8435660030121,8435659964585,8376032788649,8376032690345,8376032559273,8376032428201,8376032264361,8376032133289,8376032034985,8376031903913,8376031838377,8376031674537,8376031576233,8376031445161,8376031379625,8376031248553,8376031117481,8376031019177,8376030888105,8376030724265,8376030625961,8376030494889,8376030396585,8376030331049,8376030199977,8376030134441,8376029970601,8376029839529,8376029741225,8376029675689,8375810097321,8375809933481,8375809769641,8375809671337,8374982410409,8374982181033,8374981886121,8374981755049,8374981656745,8374981427369,8374981230761,8374981099689,8374901801129,8374901768361,8374901670057,8374901637289,8374901604521,8374901538985,8374901440681,8374901407913,8369697751209,8369697521833,8369697325225,8369697128617,8369696964777,8369696800937,8369696604329,8369696440489,8369696276649,8369696080041,8369695948969,8369695752361,8369640374441,8369640341673,8369640243369,8369640210601,8369640177833,8369640112297,8369640079529,8369640013993,8369639981225,8369639882921,8369639817385,8369639751849,8322652831913,8322652766377,8322629435561,8322629337257,8322629304489,8322629238953,8322629206185,8322629173417,8322629140649,8322629075113,8322629042345,8322628976809,8322627207337,8322627174569,8322627141801,8322627076265,8322627043497,8322626977961,8322626912425,8322626846889,8322626814121,8322626715817,8322626683049,8322626617513,8322626551977,8322626486441,8322626420905,8322626388137,832262625
97427065,8322626191529,8322626125993,8322626093225,8322625994921,8322625962153,8322625863849,8322625765545,8322625700009,8322625634473,8322625601705,8322625503401,8322625470633,8322625339561,8322625306793,8322625208489,8322625175721,8322625077417,8322625044649,8322624946345,8209842438313,8181227323561,8181227290793,8181227225257,8181227192489,8181227126953,8181226995881,8181226963113,8181226897577,8181226864809,8181226799273,8181226766505,8181226700969,8181226602665,8181226569897,8181226504361,8181226471593,8181226438825,8181226406057,8181226307753,8181226242217,8181226209449,8181226176681,8181226111145,8181225980073,8181225914537,8181225849001,8181225783465,8181225750697,8181225685161,8181225619625,8181225554089,8181225488553,8181225390249,8181225324713,8181225291945,8181225259177,8181225193641,8181225128105,8181225062569,8181225029801,8181224964265,8181224898729,8181224865961,8181224800425,8181224702121,8181224603817,8181224505513,8181224341673,8181224210601,8181224079529,8181224013993,8181223882921,8181223751849,8181223620777,8181223489705,8181223391401,8181223293097,8181223194793,8181223129257,8181223063721,8181222998185,8181222965417,8181222899881,8181222867113,8181222801577,8181222768809,8181222703273,8181222604969,8181222572201,8181222473897,8181222441129,8181222375593,8181222342825,8181222310057,8181222277289,8181222244521,8181222178985,8181222146217,8181222113449,8181222080681,8181222047913,8181222015145,8181221982377,8181221949609,8181221884073,8181221818537,8181221753001,8181221720233,8181221687465,8181221621929,8181221589161,8181221523625,8181221490857,8181221458089,8181221392553,8181221359785,8181221327017,8181221261481,8181221228713,8181221163177,8181221130409,8181221097641,8181221064873,8181220999337,8181220966569,8181220901033,8181220868265,8181220835497,8181220737193,8181220704425,8181220671657,8181220638889,8177379410089,8177379344553,8177379246249,8177379049641,8177378984105,8177378885801,8177378754729,8177378656425,8177378558121,8177378492585,8177378394281,8177378295977,8177378164905,8177378099369,8177378001065,8177377837225,8177377771689,8177377673385,8177377575081,8177377509545,8177377444009,8177377312937,8177377247401,8177377214633,8177377018025,8177376723113,8177376493737,8177376231593,8177376002217,8177375838377,8177375674537,8177375609001,8177375510697,8177375281321,8177375117481,8177375019177,8087553147049,8085538537641,8085538373801,8085538242729,8085538111657,8085537882281,8085537620137,8085537292457,8085537128617,8085530214569,8085530050729,8085529821353,8085529690281,8085529559209,8085529428137,8085529198761,8085529067689,8085528805545,8085528608937,8085528346793,8085528117417,8085527953577,8085527756969,8085527527593,8085527232681,7939342663849,7939342631081,7939342565545,7939342532777,7939342434473,7939342368937,7939342336169,7939342270633,7939342237865,7939342172329,7939341975721,7939341877417,7939341746345,7939341189289,7939341058217,7939340927145,7939340796073,7939340665001,7898816676009,7898816512169,7898816348329,7898815889577,7898815529129,7898815234217,7898815070377,7898814873769,7896910495913,7896910299305,7896910102697,7896909873321,7896909742249,7896909545641,7896909349033,7896909185193,7896909054121,7896908857513,7845307744425,7845307547817,7845307416745,7845307285673,7845307023529,7845306957993,7845306859689,7845306826921,7845306597545,7845306466473,7845306335401,7845306171561,7845306040489,7845305843881,7845305647273,7845305548969,7845305385129,7845305188521,7822628421801,7822628389033,7822628323497,7822628290729,7822628257961,7822628225193,7822628192425,7822628159657,7822628126889,7822628094121,7822628061353,7822627963049,7822627930281,7822627897513,7822627864745,7822627831977,7822627799209,7822627733673,7822627700905,7822627635369,7788098519209,7788097765545,7742086283433,7742080811177,7742080680105,7742080319657,7742079303849,7721003745449,7721003712681,7721003647145,7721003614377,7721003581609,7721003516073,7721003483305,7721003417769,7721003385001,7721003352233,7716580819113,7716580786345,7716580622505,7716580589737,7716580524201,7716580458665,7716580425897,7716580360361,7716580294825,7716
9742580229289,7716580196521,7716580098217,7716580032681,7716579967145,7716579934377,7716579868841,7716579803305,7716579737769,7716579705001,7716579639465,7716579573929,7716579508393,7716579410089,7716579344553,7716521115817,7716519116969,7715587555497,7715587522729,7715587457193,7715547250857,7715547152553,7715547119785,7715547054249,7715547021481,7715546988713,7715546955945,7715546857641,7715546398889,7715546333353,7715546300585,7715546235049,7715546202281,7715546136745,7715546103977,7715546071209,7715536076969,7715533619369,7715533553833,7715533488297,7715533389993,7715533357225,7715533226153,7715533127849,7715533029545,7715532832937,7715532701865,7715532669097,7715532570793,7715532505257,7715532439721,7715532406953,7715532243113,7715532177577,7715532144809,7715532112041,7715532079273,7715532046505,7715532013737,7715531980969,7715528966313,7714884944041,7714884845737,7714884747433,7714884649129,7714884518057,7714884419753,7714884288681,7714884190377],"productPurchasedVariants":[46059117379753,46059117346985,46059117314217,46059117183145,46059117150377,46059117117609,46059117084841,46059117052073,46059117019305,45751884120233,45743010513065,45743010381993,45743010316457,45743010218153,45743010087081,45743010054313,45743009923241,45743009824937,45743009726633,45743009628329,45743007531177,45743007498409,45743007334569,45743007203497,45743007072425,45743006974121,45743006941353,45743006908585,45743006777513,45743006646441,45743006613673,45743006548137,45743006384297,45743006285993,45743006122153,45743005958313,45743005860009,45743005794473,45743005761705,45743005630633,45743003533481,45743003369641,45743003271337,45743003107497,45743003074729,45743002976425,45743002845353,45743002648745,45743002517673,45743002386601,45743002255529,45743002157225,45743001993385,45743001862313,45743001796777,45743001632937,45743001436329,45743001338025,45743001305257,45743000912041,45742998290601,45742998126761,45742994915497,45742994849961,45742994751657,45742994587817,45742994456745,45742994227369,45742994096297,45742993997993,45742993834153,45742993801385,45742993572009,45742993539241,45742993309865,45742993211561,45742993014953,45742992851113,45460662223017,45460662157481,45460662124713,45460662091945,45460662059177,45460661993641,45460661960873,45460661829801,45460661797033,45460661764265,45460661731497,45460661698729,45460661665961,45460661633193,45460661600425,45460661534889,45460661469353,45460661436585,45460661403817,45460661338281,45460661305513,45460661239977,45460661207209,45460661174441,45460661141673,45460661108905,45460661043369,45460661010601,45460660977833,45460660945065,45460660912297,45460660650153,45460660617385,45460660584617,45460660551849,45460660486313,45460659110057,45460659077289,45460659044521,45460658847913,45460658782377,45460658749609,45460658618537,45460658553001,45460658487465,45460658421929,45460658323625,45460658192553,45460657078441,45460657045673,45460656980137,45460656947369,45460656914601,45460656816297,45460656750761,45460656685225,45460656652457,45460656554153,45460656455849,45159534428329,45159534330025,45159533969577,45159533707433,45159533543593,45159533412521,45159533281449,45159533183145,45159533117609,45159532953769,45159532855465,45159532724393,45159532658857,45159532527785,45159532069033,45159531970729,45159531741353,45159531610281,45159531479209,45159531348137,45159531249833,45159530102953,45159529971881,45159529873577,45159529709737,45159529578665,45159529480361,45159529316521,45158870974633,45158870810793,45158870646953,45158870548649,45150932304041,45150928306345,45150927192233,45150925684905,45150924669097,45150922866857,45150922375337,45150920868009,45150350409897,45150350377129,45150349918377,45150349885609,45150349852841,45150349656233,45150347526313,45150347460777,45118764875945,45118762975401,45118762057897,45118760911017,45118759239849,45118758420649,45118757699753,45118755537065,45118754390185,45118753439913,45118751834281,45118750490793,45117816602793,45117815161001,45117814931625,45117814898857,45117814309033,45117813424297,45117812801705,45117812736169,45117812703401,45117811753129,45117810278569,45117810213033,44910913814697,44910913749161,44910857453737,44910857191593,44910857158825,44910856732841,44910856700073,44910856667305,44910856634537,44910856601769,44910856011945,44910855979177,44910854275241,44910854242473,44910854209705,44910853914793,44910853882025,44910853521577,44910853456041,44910853095593,44910853062825,44910852702377,44910852669609,44910852047017,44910852014249,44910851653801,44910851358889,44910851326121,44910850834601,44910850769065,44910850408617,44910850375849,44910849753257,44910849720489,44910849163433,44910848704681,44910848344233,44910848278697,44910848245929,44910847688873,449108472956
974257,44910847000745,44910846935209,44910846378153,44910846345385,44910845755561,44910845722793,44910845165737,44473056788649,44384578601129,44384578568361,44384578502825,44384578470057,44384576143529,44384575750313,44384575717545,44384575553705,44384575357097,44384575324329,44384575291561,44384575226025,44384575094953,44384575062185,44384574701737,44384574668969,44384574636201,44384574505129,44384574439593,44384574242985,44384574210217,44384574144681,44384574079145,44384572145833,44384571621545,44384571556009,44384571392169,44384571359401,44384571228329,44384571162793,44384571064489,44384570933417,44384570802345,44384570736809,44384570704041,44384570671273,44384570474665,44384570376361,44384570245289,44384570212521,44384569950377,44384569819305,44384569786537,44384569721001,44384568606889,44384567492777,44384566345897,44384561823913,44384560480425,44384557957289,44384556843177,44384554483881,44384553238697,44384551010473,44384548782249,44384547668137,44384547537065,44384547373225,44384547242153,44384547143849,44384547078313,44384547045545,44384546947241,44384546914473,44384546783401,44384546750633,44384546652329,44384546521257,44384545669289,44384544129193,44384544096425,44384542752937,44384542720169,44384542687401,44384542654633,44384542621865,44384539672745,44384539639977,44384539607209,44384539574441,44384539541673,44384539508905,44384539476137,44384538984617,44384536494249,44384536461481,44384536363177,44384536330409,44384536264873,44384536199337,44384536166569,44384534659241,44384534626473,44384534593705,44384534528169,44384534495401,44384534462633,44384534397097,44384534364329,44384534167721,44384534134953,44384534102185,44384534069417,44384533840041,44384533807273,44384533708969,44384533676201,44384533643433,44384533119145,44384533086377,44384533053609,44384533020841,44375722000553,44375721935017,44375721836713,44375721607337,44375721541801,44375721443497,44375721312425,44375721214121,44375721083049,44375721017513,44375720919209,44375720820905,44375720689833,44375720624297,44375720558761,44375720394921,44375720362153,44375720263849,44375720165545,44375720100009,44375720034473,44375719608489,44375719542953,44375719477417,44375719280809,44375718396073,44375717937321,44375716954281,44375716528297,44375716364457,44375715709097,44375715643561,44375715053737,44375714758825,44375714562217,44375713972393,44140642238633,44136407728297,44136407564457,44136407433385,44136407269545,44136407072937,44136406810793,44136406450345,44136406286505,44136398291113,44136398127273,44136397832361,44136397701289,44136397570217,44136397439145,44136397209769,44136397078697,44136396751017,44136396554409,44136396292265,44136396062889,44136395899049,44136395702441,44136395473065,44136395178153,43758119551145,43758119518377,43758119125161,43758119092393,43758118994089,43758118731945,43758118699177,43758118633641,43758118600873,43758118535337,43758118338729,43758118207657,43758118076585,43758116569257,43758116438185,43758116241577,43758116110505,43758115979433,43612712534185,43612712337577,43612712173737,43612711157929,43612710207657,43612709683369,43612709388457,43612709159081,43607418273961,43607418044585,43607417847977,43607417585833,43607417487529,43607417290921,43607417094313,43607416897705,43607416733865,43607416504489,43412465254569,43412465057961,43412464926889,43412464664745,43412464304297,43412464238761,43412464140457,43412464107689,43412463878313,43412463747241,43412463616169,43412463452329,43412463321257,43412463124649,43412462928041,43412462829737,43412462665897,43412462469289,43356230254761,43356230221993,43356230156457,43356230090921,43356230058153,43356230025385,43356229992617,43356229959849,43356229927081,43356229894313,43356229861545,43356229763241,43356229730473,43356229697705,43356229664937,43356229632169,43356229599401,43356229173417,43356229140649,43356229075113,43241524035753,43241520529577,43051283579049,43051141857449,43051141726377,43051140874409,43051134550185,42987238490281,42987238424745,42987238359209,42987238293673,42987238260905,42987238162601,42987238129833,42987238031529,42987237998761,42987237933225,42968237408425,42968237375657,42968236687529,42968236654761,42968236589225,42968236523689,42968236490921,42968236425385,42968236359849,42968236294313,42968236261545,42968236163241,42968236097705,42968236032169,42968235999401,42968235933865,42968235868329,42968235770025,42968235737257,42968235671721,42968235573417,42968235507881,42968235409577,42968235344041,42968142938281,42968140808361,42963528941737,42963528876201,42963528351913,42963364053161,42963363922089,42963363856553,42963363791017,42963363725481,42963363659945,42963363627177,42963363496105,42963362906281,42963362807977,42963362775209,42963362676905,42963362644137,42963362480297,42963362447529,42963362381993,42963301367977,42963274203305,42963274039465,42963273908393,42963273744553,42963273679017,42963272925353,42963271975081,42963271844009,42963270926505,42963270041769,42963269976233,42963269845161,42963269746857,42963269648553,42963268993193,42963268370601,42963267682473,42963267649705,42963267616937,429632675514
974201,42963267518633,42963267453097,42963267420329,42963251593385,42960834101417,42960833806505,42960833708201,42960833609897,42960833052841,42960832921769,42960832790697,42960832692393]},"emailSetting":{"fromType":"custom_sender","delaySendMail":"7"},"enabledHeaderLogo":false,"headerLogo":{"url":"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/iPower_Resale_Logo_Long.png?v=1753306222","sizePercentage":98},"content":{"subject":"","body":"\u003ch1\u003eThank you for your purchase!\u003c\/h1\u003e\u003cp\u003eDear {{customer.displayName}},\u003c\/p\u003e\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003eAt {{shop.name}}, we value your feedback. That's why we would like to invite you to participate in a short survey about your recent experience.\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003ePlease click the button below to complete the survey, and it will only take a few minutes to complete.\u003cbr\u003eWe appreciate your time and effort in providing us with this valuable feedback.\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003eWarm regards,\u003cbr\u003e{{shop.name}}\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e{{shop.url}}\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e"},"text":{"primaryColor":"#1C1C1C","secondaryColor":"#585858"},"background":{"outerBackground":"#F5F5F5","innerBackground":"#FFFFFF"},"button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#333333","text":"Start your survey"},"enabledCustomCss":false,"customCss":"","enabled":false},"exitIntent":{"type":"exitIntent","enabled":false,"enableEmptyCart":false,"enableHasProducts":false,"widgetRecurrence":"only_once","position":"center","button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#1C1C1CE6"},"section":{"primaryTextColor":"#1C1C1C","secondaryTextColor":"#585858","accentColor":"#1C1C1C","backgroundColor":"#FFFFFF"},"enabledCustomCss":false,"customCss":""},"embedSurvey":{"type":"embedSurvey","embedType":"block","button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#1C1C1CE6"},"section":{"primaryTextColor":"#1C1C1C","secondaryTextColor":"#585858","accentColor":"#1C1C1C","backgroundColor":"#FFFFFF"},"allowMultiSubmit":false,"enabled":true,"enabledSideLogo":false},"dedicatedPageSurvey":{"type":"dedicatedPageSurvey","link":"","enabledHeaderLogo":false,"headerLogo":{"url":"","alignment":"center"},"button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#1C1C1CE6"},"section":{"primaryTextColor":"#1C1C1C","secondaryTextColor":"#585858","accentColor":"#1C1C1C","backgroundColor":"#FFFFFF"},"background":{"type":"solid","colorSolid":"#FFFFFF","gradientStart":"#FFFFFF","gradientEnd":"#000000","gradientDirection":70,"image":{"url":""}},"enabled":true},"siteWidget":{"type":"siteWidget","position":"left","button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#1C1C1CE6"},"section":{"primaryTextColor":"#1C1C1C","secondaryTextColor":"#585858","accentColor":"#1C1C1C","backgroundColor":"#FFFFFF"},"pageTargeting":{"type":"all_pages","enabledExcludePages":false,"pages":[],"productPageType":"all_product_pages","specificProducts":[],"collectionPageType":"all_collection_pages","specificCollections":[]},"timing":"10_seconds_after_page_load","userTargeting":{"type":"all_users","enabledUserTag":true,"userTags":[]},"widgetRecurrence":"every_time_survey_not_completed","enabled":false},"postPurchasePage":{"type":"postPurchasePage","displayType":"blockType","announcementBar":{"modalTitle":"Survey","content":"We'd love to hear your feedback!","buttonText":"Take a quick survey"},"userTargeting":{"type":"all_users","enabledUserTag":false,"userTags":[],"enabledProductPurchased":false,"productPurchased":[]},"widgetRecurrence":"once_per_customer","enabled":false},"hyperLink":{"surveyName":"U4VyHz4GGSLGft1O6eKO","linkType":"intergration_hyperlink_button","text":"How was your delivery?","buttonColor":{"backgroundColor":"#1d7f9a","textColor":"#FFFFFF"},"textColor":"#005BD3","embedCode":"\u003ca href=\"https:\/\/ipowerresale.myshopify.com\/pages\/survey\/U4VyHz4GGSLGft1O6eKO?from=hyperLink\" style=\"display: flex; max-width: 200px; padding: 16px; justify-content: center; align-items: center; gap: 8px; border-radius: 8px; text-align: right; font-family: Inter, sans-serif; font-size: 16px; font-style: normal; font-weight: 400; line-height: 20px; background-color: #1d7f9a; color: #FFFFFF; text-decoration: none;\"\u003eHow was your delivery?\u003c\/a\u003e","enabled":true,"type":"hyperLink"},"posPage":{"type":"posPage","enabled":false,"showOnPostSale":true,"showOnCustomerDetail":false,"userTargeting":{"type":"all_users","customerSegment":[]}},"embedEmail":{"enabled":false}},"updateStatus":true,"isActive":true,"updatedAt":"2026-09-02T20:58:05.527Z","id":"U4VyHz4GGSLGft1O6eKO","hasResponse":true,"sections":[],"surveyType":"survey","advancedLogicEnabled":true},{"success":true,"id":"02oM6Gal1EzXJ1DDvIK2","questions":[{"type":"single","heading":"Where did you find us?","description":"","
9742image":{"url":"","alignment":"center","sizePercentage":"100"},"skippable":false,"position":0,"answers":[{"content":"Google","id":"answer_1753314352992","position":0},{"content":"Facebook","id":"answer_1753314352990","position":1},{"content":"Instagram","id":"answer_1753314352988","position":2},{"content":"Youtube","id":"answer_1753314352991","position":3},{"id":"answer_1760656556391","content":"Amazon\/eBay","position":4},{"content":"Word of mouth","id":"answer_1753314352987","position":5},{"id":"answer_1753314367974","content":"AI ChatBot","position":6}],"enabledCustomAnswer":true,"showWhen":"when_customer_select_answers","showCustomAnswerWhen":["answer_1753314367974"],"customAnswerPlaceholder":"Let us know which one ","id":"question_1753314352987","chosen":false,"selected":false},{"type":"satisfaction","heading":"How was your experience?","description":"","image":{"url":"","alignment":"center","sizePercentage":"100"},"skippable":false,"position":1,"leftLabel":"Frustrating","rightLabel":"Simple","id":"question_1753314646910","chosen":false,"selected":false},{"type":"short_answer","heading":"Anything else youd like to add?","description":"","image":{"url":"","alignment":"center","sizePercentage":"100"},"skippable":true,"position":2,"placeholder":"Please add more information","id":"question_1755035181735","chosen":false,"selected":false}],"thankYou":{"type":"thank_you","thankYouType":"default","heading":"Thank you for doing our survey","description":"If you have any question, please feel free to ask us","link":"samplelink.shopify.com","enableButton":true,"buttonText":"Discover more","buttonLink":""},"discount":{"enabled":false,"code":"","displayOn":"email","limitOnePerEmail":false,"card":{"heading":"Earn your discount code","description":"Enter your preferred shopping email to receive the coupon.","placeholder":"Enter your email","buttonText":"Get coupon"},"email":{"subject":"Thank you for taking the survey for {{shop.name}}. Here is your coupon reward.","fromName":"","fromEmail":"[email protected]","sendType":"default","body":"\n\u003ch2 style=\"font-size: 20px; font-weight: bold; margin: 0 0 24px 0; color: #000;\"\u003eCongratulations! Here is you coupon reward\u003c\/h2\u003e\n\u003cp\u003eHi {{customer.displayName}},\u003c\/p\u003e\n\u003cbr\u003e\n\u003cp\u003eWe truly appreciate you taking the time to complete our surveyâyour insights mean a lot to us.\u003c\/p\u003e\n\u003cp\u003eAs a thank-you, enjoy a special reward to use on your next purchase.\u003c\/p\u003e\n\u003cbr\u003e\n\u003cp\u003eYour coupon code is:\u003c\/p\u003e\n\u003cbr\u003e\n\u003cdiv style=\"padding: 16px;word-break: break-word; background-color: #f6f6f7; border-radius: 8px; text-align: center;\"\u003e\n \u003cspan style=\"font-size: 20px; font-weight: bold; color: #202223; letter-spacing: 4px;\"\u003e{{discount.code}}\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cbr\u003e\n\u003cp\u003eWarm regards,\u003c\/p\u003e\n\u003cp\u003e{{shop.name}}.\u003c\/p\u003e"},"banner":{"heading":"Earn DISCOUNT CODE","description":"Finish this survey and earn discount for your next purchase!","text":{"color":"#FFFFFF"},"background":{"type":"solid","color":"#1C1C1C","colorSolid":"#1C1C1C","gradientStart":"#1C1C1C","gradientEnd":"#637381","gradientDirection":70,"image":{"url":""}}},"template":"\n \u003cdiv class=\"Avada-Email\"\u003e\n \u003cdiv class=\"Avada-Email__Content\"\u003e\n {{email.content}}\n \u003c\/div\u003e\n \u003c\/div\u003e\n"},"name":"Post purchase survey","isActive":true,"channels":{"postPurchaseEmail":{"type":"postPurchaseEmail","duplicateTime":2,"userTargeting":{"type":"all_users","userTags":[],"enabledUserTag":false,"enabledProductPurchased":false,"productPurchased":[]},"emailSetting":{"fromType":"default"},"headerLogo":{"url":"","sizePercentage":88},"content":{"subject":"","body":"\u003ch1\u003eThank you for your visiting!\u003c\/h1\u003e\u003cp\u003eDear {{customer.displayName}},\u003c\/p\u003e\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003eAt {{shop.name}}, we value your feedback. That's why we would like to invite you to participate in a short survey about your recent experience.\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003ePlease click the button below to complete the survey, and it will only take a few minutes to complete.\u003cbr\u003eWe appreciate your time and effort in providing us with this valuable feedback.\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003eYou could explore more products in our store for the next season here: {{shop.url}}.\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003eWarm regards,\u003cbr\u003e{{shop.name}}.\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e"},"text":{"primaryColor":"#1C1C1C","secondaryColor":"#585858"}
9742,"background":{"outerBackground":"#F5F5F5","innerBackground":"#FFFFFF"},"button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#333333","text":"Start your survey"},"enabledCustomCss":false,"customCss":"","enabled":false},"exitIntent":{"type":"exitIntent","enabled":false,"enableEmptyCart":false,"enableHasProducts":false,"widgetRecurrence":"only_once","position":"center","button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#1C1C1CE6"},"section":{"primaryTextColor":"#1C1C1C","secondaryTextColor":"#585858","accentColor":"#1C1C1C","backgroundColor":"#FFFFFF"},"enabledCustomCss":false,"customCss":""},"embedSurvey":{"type":"embedSurvey","embedType":"block","button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#1C1C1CE6"},"section":{"primaryTextColor":"#1C1C1C","secondaryTextColor":"#585858","accentColor":"#1C1C1C","backgroundColor":"#FFFFFF"},"enabled":false},"dedicatedPageSurvey":{"type":"dedicatedPageSurvey","link":"","enabledHeaderLogo":false,"headerLogo":{"url":"","alignment":"center"},"button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#1C1C1CE6"},"section":{"primaryTextColor":"#1C1C1C","secondaryTextColor":"#585858","accentColor":"#1C1C1C","backgroundColor":"#FFFFFF"},"background":{"type":"solid","colorSolid":"#FFFFFF","gradientStart":"#FFFFFF","gradientEnd":"#000000","gradientDirection":70,"image":{"url":""}},"enabled":true},"siteWidget":{"type":"siteWidget","position":"left","button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#1C1C1CE6"},"section":{"primaryTextColor":"#1C1C1C","secondaryTextColor":"#585858","accentColor":"#1C1C1C","backgroundColor":"#FFFFFF"},"pageTargeting":{"type":"all_pages","enabledExcludePages":false,"pages":[],"productPageType":"all_product_pages","specificProducts":[],"collectionPageType":"all_collection_pages","specificCollections":[]},"timing":"10_seconds_after_page_load","userTargeting":{"type":"all_users","enabledUserTag":true,"userTags":[]},"widgetRecurrence":"only_once","enabled":false},"postPurchasePage":{"type":"postPurchasePage","displayType":"blockType","announcementBar":{"modalTitle":"Survey","content":"We'd love to hear your feedback!","buttonText":"Take a quick survey"},"userTargeting":{"type":"all_users","enabledUserTag":false,"userTags":[],"enabledProductPurchased":false,"productPurchased":[]},"enabled":true}},"channelTypes":["dedicatedPageSurvey","postPurchasePage"],"shopId":"3Bu61qLyUyPg67WmmPvY","totalResponses":277,"createdAt":"2025-07-23T23:49:22.411Z","updatedAt":"2025-10-16T16:14:01.544Z","hasResponse":true,"updateStatus":true},{"success":true,"id":"oQq5678ripcyz2rOXSmF","questions":[{"type":"single","heading":"What is preventing you from completing your purchase today?","description":"","image":{"url":"","alignment":"center","sizePercentage":"100"},"skippable":false,"position":0,"answers":[{"content":"Pricing","id":"answer_1753314734518"},{"content":"Product information","id":"answer_1753314734519"},{"content":"Shipping \/ Delivery","id":"answer_1753314734520"},{"content":"Return policy","id":"answer_1753314734521"},{"content":"Nothing, Iâll be back","id":"answer_1753314734522"}],"enabledCustomAnswer":false,"showWhen":"always_show","showCustomAnswerWhen":[],"customAnswerPlaceholder":"Please add more information","id":"question_1753314734518","chosen":false,"selected":false},{"type":"short_answer","heading":"How could we improve the shopping experience?","description":"","image":{"url":"","alignment":"center","sizePercentage":"100"},"skippable":true,"position":1,"placeholder":"","id":"question_1753314734519","chosen":false,"selected":false}],"thankYou":{"type":"thank_you","thankYouType":"default","heading":"Thank you for doing our survey","description":"If you have any question, please feel free to ask us","link":"samplelink.shopify.com","enableButton":true,"buttonText":"Discover more","buttonLink":""},"discount":{"enabled":false,"code":"","displayOn":"email","limitOnePerEmail":false,"card":{"heading":"Earn your discount code","description":"Enter your preferred shopping email to receive the coupon.","placeholder":"Enter your email","buttonText":"Get coupon"}
9742,"email":{"subject":"Thank you for taking the survey for {{shop.name}}. Here is your coupon reward.","fromName":"","fromEmail":"[email protected]","sendType":"default","body":"\n\u003ch2 style=\"font-size: 20px; font-weight: bold; margin: 0 0 24px 0; color: #000;\"\u003eCongratulations! Here is you coupon reward\u003c\/h2\u003e\n\u003cp\u003eHi {{customer.displayName}},\u003c\/p\u003e\n\u003cbr\u003e\n\u003cp\u003eWe truly appreciate you taking the time to complete our surveyâyour insights mean a lot to us.\u003c\/p\u003e\n\u003cp\u003eAs a thank-you, enjoy a special reward to use on your next purchase.\u003c\/p\u003e\n\u003cbr\u003e\n\u003cp\u003eYour coupon code is:\u003c\/p\u003e\n\u003cbr\u003e\n\u003cdiv style=\"padding: 16px;word-break: break-word; background-color: #f6f6f7; border-radius: 8px; text-align: center;\"\u003e\n \u003cspan style=\"font-size: 20px; font-weight: bold; color: #202223; letter-spacing: 4px;\"\u003e{{discount.code}}\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cbr\u003e\n\u003cp\u003eWarm regards,\u003c\/p\u003e\n\u003cp\u003e{{shop.name}}.\u003c\/p\u003e"},"banner":{"heading":"Earn DISCOUNT CODE","description":"Finish this survey and earn discount for your next purchase!","text":{"color":"#FFFFFF"},"background":{"type":"solid","color":"#1C1C1C","colorSolid":"#1C1C1C","gradientStart":"#1C1C1C","gradientEnd":"#637381","gradientDirection":70,"image":{"url":""}}},"template":"\n \u003cdiv class=\"Avada-Email\"\u003e\n \u003cdiv class=\"Avada-Email__Content\"\u003e\n {{email.content}}\n \u003c\/div\u003e\n \u003c\/div\u003e\n"},"name":"Cart abandonment ","isActive":true,"channels":{"dedicatedPageSurvey":{"type":"dedicatedPageSurvey","link":"","enabledHeaderLogo":false,"headerLogo":{"url":"","alignment":"center"},"button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#1C1C1CE6"},"section":{"primaryTextColor":"#1C1C1C","secondaryTextColor":"#585858","accentColor":"#1C1C1C","backgroundColor":"#FFFFFF"},"background":{"type":"solid","colorSolid":"#FFFFFF","gradientStart":"#FFFFFF","gradientEnd":"#000000","gradientDirection":70,"image":{"url":""}},"enabled":true},"siteWidget":{"type":"siteWidget","position":"left","button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#1C1C1CE6"},"section":{"primaryTextColor":"#1C1C1C","secondaryTextColor":"#585858","accentColor":"#1C1C1C","backgroundColor":"#FFFFFF"},"pageTargeting":{"type":"all_pages","enabledExcludePages":false,"pages":[],"productPageType":"all_product_pages","specificProducts":[],"collectionPageType":"all_collection_pages","specificCollections":[]},"timing":"10_seconds_after_page_load","userTargeting":{"type":"all_users","enabledUserTag":true,"userTags":[]},"widgetRecurrence":"every_time_survey_not_completed","enabled":false},"postPurchasePage":{"type":"postPurchasePage","userTargeting":{"type":"all_users","enabledUserTag":false,"userTags":[],"enabledProductPurchased":false,"productPurchased":[]},"enabled":false},"postPurchaseEmail":{"type":"postPurchaseEmail","userTargeting":{"type":"all_users","userTags":[],"enabledUserTag":false,"enabledProductPurchased":false,"productPurchased":[]},"emailSetting":{"fromType":"default"},"headerLogo":{"url":"","sizePercentage":88},"content":{"subject":"","body":"\u003ch1\u003eThank you for your visiting!\u003c\/h1\u003e\u003cp\u003eDear {{customer.displayName}},\u003c\/p\u003e\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003eAt {{shop.name}}, we value your feedback. That's why we would like to invite you to participate in a short survey about your recent experience.\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003ePlease click the button below to complete the survey, and it will only take a few minutes to complete.\u003cbr\u003eWe appreciate your time and effort in providing us with this valuable feedback.\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003eYou could explore more products in our store for the next season here: {{shop.url}}.\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003e\u003cspan style=\"white-space:pre-wrap;\"\u003eWarm regards,\u003cbr\u003e{{shop.name}}.\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/span\u003e\u003c\/p\u003e"},"text":{"primaryColor":"#1C1C1C","secondaryColor":"#585858"}
9742,"background":{"outerBackground":"#F5F5F5","innerBackground":"#FFFFFF"},"button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#333333","text":"Start your survey"},"enabledCustomCss":false,"customCss":"","enabled":false},"exitIntent":{"type":"exitIntent","enabled":true,"enableEmptyCart":false,"enableHasProducts":true,"widgetRecurrence":"only_once","position":"center","button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#1C1C1CE6"},"section":{"primaryTextColor":"#1C1C1C","secondaryTextColor":"#585858","accentColor":"#1C1C1C","backgroundColor":"#FFFFFF"}},"embedSurvey":{"type":"embedSurvey","embedType":"block","button":{"color":"#FFFFFF","backgroundColor":"#1C1C1C","backgroundHover":"#1C1C1CE6"},"section":{"primaryTextColor":"#1C1C1C","secondaryTextColor":"#585858","accentColor":"#1C1C1C","backgroundColor":"#FFFFFF"},"enabled":false}},"channelTypes":["dedicatedPageSurvey","exitIntent"]}], 9743 "quizzes": null, 9744 "logics": [{"surveyId":"oQq5678ripcyz2rOXSmF","logics":[]},{"surveyId":"02oM6Gal1EzXJ1DDvIK2","logics":[{"id":"logic_1753392880680","questionId":"question_1753314352987","question":"Where did you find us?","type":"merchant","conditions":[],"actions":[]}]},{"surveyId":"U4VyHz4GGSLGft1O6eKO","logics":[]}], 9745 "buttonTranslation": null, 9746 "settings": {"shopId":"3Bu61qLyUyPg67WmmPvY","shopLogo":{"url":"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/ipowerresalelogolong_1oqt0m4.png?v=1753383728"},"shopCongratulationImage":{"url":"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/ipowerresalelogolong_1oqt0m4_56ef2899-f17e-45f8-b253-8b597b671855.png?v=1753383734"},"shopCongratulationEmailImage":{"url":"https:\/\/cdn.shopify.com\/s\/files\/1\/0621\/3615\/6329\/files\/ipowerresalelogolong_1oqt0m4_def0fdc1-975a-452d-8df3-c753b35d7eda.png?v=1753383738"}}, 9747 "segments": [{"id":"return_customer_segment","name":"Return customer","isDefault":true,"linkedSurveys":[],"condition":{"field":"lifetimeOrderCount","operator":"greater_than","value":"1"}},{"id":"new_customer_segment","name":"New customer","isDefault":true,"linkedSurveys":[],"condition":{"field":"lifetimeOrderCount","operator":"less_than_or_equal","value":"1"}},{"id":"v5EBP7gd0EtdOtgUzA6c","condition":{"field":"lifetimeOrderCount","operator":"equals","value":"1"},"name":"First Time Purchaser"}], 9748 "abTests": null, 9749 "customerSubmissions": null, 9750 "customerQuizResults": null 9751 } 9752 </script>
9752<!-- END app snippet --> 9753 9754 9755 9756</div><div id="shopify-block-Ac0ZhMlZ2aGkrc1Z5Y__4113930173634242220" class="shopify-block shopify-app-block"><!-- BEGIN app snippet: app-common-snippet --> 9757
9758<script> 9759var Shopjar = Shopjar || {}; 9760Shopjar.settings = {"is_affiliate_enabled":true,"is_referral_enabled":true,"cookie_validity":90,"store_url":"https:\/\/ipowerresale.com\/","store_name":"iPowerResale","verified":true,"proxy_url":"\/a\/shopjar-referral","recaptcha_site_key":"6Lc_cQYeAAAAANa5X8nozNicLDPxKQZZHej21Wfu","copied_link":"Copied!","invite_friend":"Sent!","invalid_email":"Invalid email","order_contain_value":"You should be an existing customer with at least one order to become a member and participate in the referral program","referral":{"share_options":{"facebook":{"isEnabled":false},"twitter":{"isEnabled":false,"message":"Use my referral link {{referral_link}} to get exciting discounts on your next purchase at https:\/\/ipowerresale.com"},"email":{"isEnabled":true,"subject":"Get $20 Off at iPowerResale","message":"Hey there,\n\nCheck out iPowerResale and use my referral link {{referral_link}} to get $20 off your first purchase!"},"whatsapp":{"isEnabled":true,"message":"Use my referral link {{referral_link}} to get $20 off your first purchase at iPowerResale!"}}},"affiliate":{"share_options":{"facebook":{"isEnabled":false},"twitter":{"isEnabled":false,"message":"Check this out {{affiliate_link}} amazing products you might like."},"email":{"isEnabled":false,"subject":"Check this out","message":"Check this out {{affiliate_link}} amazing products you might like."},"whatsapp":{"isEnabled":false,"message":"Check this out {{affiliate_link}} amazing products you might like."}}}}; 9761</script>
9761 9762<!-- END app snippet --> 9763 9764 9765<link rel="preconnect" href="https://www.google.com" crossorigin> 9766<link rel="dns-prefetch" href="https://www.google.com">
9767<script src="https://cdn.shopify.com/extensions/01a0c899-200a-7057-afe6-6d841b2f339b/referral-and-affiliates-214/assets/common.js" defer></script>
9767 9768 9769 9770 9771 9772<link href="//cdn.shopify.com/extensions/01a0c899-200a-7057-afe6-6d841b2f339b/referral-and-affiliates-214/assets/reward-claim-popup-v2.css" rel="stylesheet" type="text/css" media="all" /><style>:root {--rcp-popup-bg-color-v2: #FFFFFF;--rcp-title-one-color-v2: #1D7F9A;--rcp-title-two-color-v2: #1D7F9A;--rcp-subtitle-one-color-v2: #222222;--rcp-subtitle-two-color-v2: #222222;--rcp-button-color-v2: #1D7F9A;--rcp-button-text-color-v2: #FFFFFF;--rcp_no_thanks_button_color: #FFFFFF;--rcp-coupon-color-v2: #222222;--rcp-coupon-copy-color-v2: #222222;--rcp-continue-text-color-v2: #FFFFFF;--rcp-continue-color-v2: #1D7F9A;--rcp-prompt-message-color-v2: #1D7F9A;--rcp-prompt-copy-message-color-v2: #222222;}</style><!-- BEGIN app snippet: reward-claim-popup-v2 --> 9773
9774<script src="https://cdn.shopify.com/extensions/01a0c899-200a-7057-afe6-6d841b2f339b/referral-and-affiliates-214/assets/reward-claim-popup-v2.js" defer></script>
9774 9775
9776<script> 9777window.Shopjar = window.Shopjar || {}; 9778window.Shopjar.RewardClaimPopupV2 = {"meta":{"version":1,"category":"REFERRAL","templateName":"default-reward-claim-popup-template","templateFor":"FRIEND","templateType":"LANDING_POP_UP"},"config":{"module":"Referral Program","section":"Branding \u0026 Popups","description":"Visible in the Referral Program under the Branding \u0026 Popups section."},"content":{"popup_background_color":"#FFFFFF","step1":{"title_one":"Claim your reward!","title_one_color":"#1D7F9A","is_subtitle_one_checked":true,"subtitle_one":"Your friend has gifted you $20 off!","subtitle_one_color":"#222222","placeholder":"Enter the email address","button":{"button_text":"Claim reward","button_color":"#1D7F9A","button_text_color":"#FFFFFF"},"prompt":{"prompt_message":"Enter your email address to receive the reward.","prompt_message_color":"#1D7F9A","is_prompt_message_checked":true},"closeBtn":{"button_text":"No Thanks","button_color":"#FFFFFF","button_text_color":"#000000"},"footer":"You are signing up to receive communication via email and can unsubscribe at any time."},"step2":{"title_two":"Your reward!","title_two_color":"#1D7F9A","is_subtitle_two_checked":true,"subtitle_two":"Here is your coupon code","subtitle_two_color":"#222222","coupon":{"coupon_color":"#222222","coupon_border_color":"#1D7F9A","coupon_copy_color":"#222222"},"continue":{"title":"Continue Shopping","text_color":"#FFFFFF","background_color":"#1D7F9A"},"prompt":{"copy_prompt":"Use the code above and your same email at checkout to receive your $20 discount","prompt_copy_message_color":"#222222","is_prompt_copy_message_checked":true}},"custom_css":""},"reward_claim_status":true,"status":"ACTIVE"}; 9779 9780async function initRewardClaimPopupV2() { 9781// Initialize reward claim popup v2 when DOM is ready 9782if (typeof window.SJ_RewardClaimPopupV2 !== 'undefined' && window.Shopjar.RewardClaimPopupV2) { 9783window.SJ_RewardClaimPopupV2.render(window.Shopjar.RewardClaimPopupV2, 'sj_rcp_container_v2'); 9784} 9785} 9786 9787document.addEventListener("DOMContentLoaded", initRewardClaimPopupV2); 9788</script>
9788 9789 9790<div id="sj_rcp_container_v2" data-nosnippet> 9791</div><!-- END app snippet --> 9792 9793 9794 9795 9796</div><div id="shopify-block-AdmdXU3VUQ3hMTm1rN__8764476057892802672" class="shopify-block shopify-app-block"><link rel="preconnect" href="https://app.restockrocket.io" crossorigin><link rel="preconnect" href="https://ipowerresale.myshopify.com" crossorigin><!-- Config and setup JS -->
9797<script id="RestockRocketConfig"> 9798 window._RestockRocketConfig = window._RestockRocketConfig || {} 9799 window._RestockRocket = window._RestockRocket || {} 9800 window._Stoq = window._RestockRocket 9801 window._StoqConfig = window._RestockRocketConfig 9802 try { window._RestockRocket.inlineRanAt = performance.now(); } catch (e) { } 9803 function normalizeLocale(locale) { 9804 if (!locale || locale.trim() === '') { 9805 return ''; 9806 } 9807 return locale.toString().toLowerCase().replace(/-/g, '_'); 9808 } 9809 9810 window._RestockRocketConfig.locale = 'en'; 9811 window._RestockRocketConfig.normalizedLocale = normalizeLocale('en'); 9812 window._RestockRocketConfig.shop = 'ipowerresale.myshopify.com'; 9813 window._RestockRocketConfig.pageType = 'product'; 9814 window._RestockRocketConfig.liquidRenderedAt = 1791120319;window._RestockRocketConfig.marketId = 21378531497;window._RestockRocketConfig.countryName = 'United States'; 9815 window._RestockRocketConfig.countryIsoCode = 'US';window._RestockRocketConfig.languageIsoCode = 'en';window._RestockRocketConfig.cartInventoryQuantity = {}; 9816 if (!window._RestockRocketConfig.cartToken) { 9817 try { 9818 const m = document.cookie.match(/(?:^|;\s*)cart=([^;]+)/); 9819 if (m && m[1]) window._RestockRocketConfig.cartToken = decodeURIComponent(m[1]); 9820 } catch (e) { } 9821 } 9822window._RestockRocketConfig.cachedSettings = {"id":61159,"shop_id":61139,"currency":"USD","created_at":"2026-04-29T17:50:08.410Z","updated_at":"2026-10-01T04:54:32.095Z","enable_app":true,"enable_signup_widget":true,"storefront_button_text":"Notify me when available","storefront_button_text_color":"#FFFFFF","storefront_button_background_color":"#202223","storefront_form_header":"Notify me","storefront_form_description":"Get a notification as soon as this product is back in stock by signing up below!","storefront_form_button_text":"Notify me when available","storefront_form_button_text_color":"#FFFFFF","storefront_form_button_background_color":"#202223","storefront_form_terms":"Promise we won't spam. You'll only receive notifications for this product.","storefront_form_error":"Please enter a valid email address","storefront_form_success":"Thank you! We will notify you when the product is available.","enable_powered_by":true,"show_button_on_preorder":false,"sms_enabled":false,"email_enabled":true,"storefront_button_disable_tag":"rocket-hide","theme_config":{},"storefront_form_email_placeholder":"Email address","storefront_form_phone_placeholder":"SMS","storefront_form_phone_label":"Phone number","storefront_form_email_label":"Email","storefront_form_phone_error":"Please enter a valid phone number","storefront_form_customer_name_placeholder":"Name","storefront_form_customer_name_error":"Please enter your name","storefront_form_did_you_mean_error":"Did you mean %{suggested_email}? Or use %{current_email}","form_customer_name_enabled":false,"form_customer_name_required":false,"css_config":"","js_config":"","collect_promotion_consent":false,"storefront_form_promotion_consent_label":"Notify me about other news, sales, discounts & offers too!","show_button_on_collection":false,"sms_default_country":"us","sms_allowed_countries":[],"sms_restrict_country":false,"sms_default_channel":true,"optin_required":false,"optin_custom_domain_enabled":false,"optin_success_text":"Registration confirmed! You'll receive an alert when the product is restocked.","storefront_button_border_radius":0,"storefront_button_disable_tag_hides_button":true,"storefront_button_disable_tag_enabled":false,"quantity_required":false,"storefront_form_quantity_label":"Quantity","enable_alerts":true,"sms_allowed":true,"email_allowed":true,"collect_promotion_consent_default":true,"insert_button_after_selector":"","insert_button_after_selector_type":"afterend","storefront_button_position_type":"float-right","storefront_form_duplicate_error":"You've already subscribed for alerts to this product.","storefront_mixed_cart_error":"Preorders must be purchased
9822separately from regular items. Please complete your current order first, or clear your cart to continue.","storefront_error_heading":"Error","default_locale":"en","collection_page_button_text_color":"#FFFFFF","collection_page_button_background_color":"#202223","show_button_if_any_out_of_stock":false,"show_button_if_any_variant_out_of_stock_collection":false,"show_button_on_index":false,"insert_button_after_selector_collection":".grid-product__link","insert_button_after_selector_index":".grid-product__link","push_enabled":false,"push_allowed":true,"storefront_form_push_label":"Push","storefront_form_push_description":"Click 'Allow' to be notified via push notification","storefront_form_push_error":"Permission rejected! Please review notification settings and try again.","storefront_font_family":"OpenSans","insert_button_after_selector_collection_type":"afterend","show_channel_selector":false,"storefront_form_empty_error":"Please fill in one or more of the options above","storefront_form_push_input":"Send push notification","insert_button_after_selector_page":".grid-product__link","show_button_on_page":false,"insert_button_after_selector_search":".grid-product__link","show_button_on_search":false,"app_proxy_path_prefix":"/apps/restockrocket-production","collection_link_selector":"","index_link_selector":"","page_link_selector":"","search_link_selector":"","collection_check_link_visibility":true,"collection_buttons_container":"","index_buttons_container":"","page_buttons_container":"","search_buttons_container":"","extension_enable_url_variant_detection":true,"extension_enable_value_variant_detection":true,"extension_value_variant_selector":"[name='id']","resubscribe_text":"This product is out of stock. Get notified when itâs restocked again by entering your details below!","preorder_enabled":false,"preorder_buy_button_selector":".shopify-payment-button","preorder_add_to_cart_button_selector":".quantity-addtoCartBtn .add-to-cart-btn","preorder_badge_selector":"","preorder_button_out_of_stock_text":"Out of stock","preorder_button_add_to_cart_text":"Add to cart","preorder_form_selector":"form[action*=\"/cart/add\"]","preorder_collection_enabled":false,"preorder_collection_form_selector":"form[action*=\"/cart/add\"]","preorder_collection_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_index_enabled":false,"preorder_index_form_selector":"form[action*=\"/cart/add\"]","preorder_index_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_page_enabled":false,"preorder_page_form_selector":"form[action*=\"/cart/add\"]","preorder_page_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_search_enabled":false,"preorder_search_form_selector":"form[action*=\"/cart/add\"]","preorder_search_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_collection_badge_selector":".grid-product__image-mask","preorder_index_badge_selector":".grid-product__image-mask","preorder_page_badge_selector":".grid-product__image-mask","preorder_search_badge_selector":".grid-product__image-mask","preorder_badge_selector_type":"afterend","preorder_collection_badge_selector_type":"afterend","preorder_button_child_selector":"span","preorder_button_disclaimer_insert_selector":".quantity-add-to-cart-section .quantity-addtoCartBtn","preorder_button_disclaimer_insert_selector_type":"afterend","preorder_payment_insert_selector":"","preorder_payment_insert_selector_type":"afterend","preorder_price_container_selector":"","preorder_price_container_selector_insert_type":"afterend","preorder_terms_insert_selector":".quantity-add-to-cart-section .quantity-addtoCartBtn","preorder_terms_insert_selector_type":"beforebegin","preorder_original_price_selector":".product__price","preorder_price_format":"{{amount}} {{currency}}","show_badge_if_any_variant_is_preorder":false,"enable_console_debug":false,"inline_form_enabled":false,"inline_form_selector":".payment-buttons","inline_form_selector_type":"afterend","storefront_form_prefill_customer":true,"storefront_form_show_image":false,"storefront_form_text_color":"#202223","storefront_form_background_color":"#FFFFFF","storefront_form_border_radius":10,"market_setup_type":"single_market","shopify_app_id":5940125,"preorder_progress_bar_insert_selector":"","preorder_progress_bar_insert_selector_type":"beforebegin","countdown_timer_insert_selector":"","countdown_timer_insert_selector_type":"afterend","configure_notify_me_enabled":false,"restock_note_insert_selector":"","restock_note_insert_selector_type":"afterend","restock_note_background_color":"#f3f4f6","restock_note_text_color":"#202223","restock_note_border_radius":4,"preorder_modal_continue_button_text":"Continue","preorder_modal_cancel_button_text":"Cancel","meta_pixel_enabled":false,"meta_pixel_id":null,"cache":true,"cached_at":"2026-10-01T04:54:32.130Z","multi_language_enabled":false,"translation_locale":"en","disable_refresh_on_stale_liquid":false,"api_host":"https://ext.stoqapp.com"};window._RestockRocketConfig.storefrontAccessToken = "2427add63ad83fb2ff4a68dd8896b178"; 9823 window._RestockRocketConfig.metafieldNamespace = 'restockrocket_production'; 9824 window._RestockRocketConfig.storefrontApiVersion = '2026-07';window._RestockRocketConfig.cachedPreorderVariantIds = { preorder_variant_ids: [] };window._RestockRocketConfig.cachedInStockVariantIds = { in_stock_variant_ids: [] };window._RestockRocketConfig.cachedOutOfStockVariantIds = { out_of_stock_variant_ids: [] };window._RestockRocketConfig.cachedVariantPreorderLimits = { variant_preorder_limits: {} };window._RestockRocketConfig.cachedVariantShippingTexts = { variant_shipping_texts: {} }; 9825window._RestockRocketConfig.sellingPlans = [];(function() { 9826 const cachedData = {"plans":[],"disabled_plan_ids":[19713982633,18707873961],"has_in_stock_offer":false,"has_preorder_offer":false,"read_flags":{"enable_storefront_product_reads":true,"enable_storefront_integrations_read":true,"enable_storefront_selling_plans_read":true},"cached_at":"2026-10-04T10:47:28Z"}; 9827 9828 if (cachedData && typeof cachedData === 'object' && cachedData.cached_at) { 9829 window._RestockRocketConfig.readFlags = cachedData.read_flags || {}; 9830 const oldPlans = window._RestockRocketConfig.sellingPlans; 9831 const maxUpdatedAt = Array.isArray(oldPlans) && oldPlans.length > 0 9832 ? oldPlans.reduce(function(max, plan) { 9833 if (plan.updated_at) { 9834 const planDate = new Date(plan.updated_at); 9835 const maxDate = max ? new Date(max) : null; 9836 return (!maxDate || (planDate && !isNaN(planDate) && planDate > maxDate)) ? plan.updated_at : max; 9837 } 9838 return max; 9839 }, '') 9840 : null; 9841 const cachedDate = new Date(cachedData.cached_at); 9842 const maxDate = maxUpdatedAt ? new Date(maxUpdatedAt) : null; 9843 const useCached = !maxUpdatedAt || (cachedDate && !isNaN(cachedDate) && (!maxDate || cachedDate > maxDate)); 9844 9845 if (useCached) { 9846 if (Array.isArray(cachedData.plans)) {
9847 window._RestockRocketConfig.sellingPlans = cachedData.plans; 9848 window._RestockRocketConfig.disabledSellingPlanIds = cachedData.disabled_plan_ids || []; 9849 console.debug('[RR] Using selling plans from cachedSellingPlans (cached_at: ' + cachedData.cached_at + ')'); 9850 } 9851 } else { 9852 window._RestockRocketConfig.disabledSellingPlanIds = []; 9853 console.debug('[RR] Using selling plans from old format (max updated_at: ' + maxUpdatedAt + ')'); 9854 } 9855 } 9856 })();window._RestockRocketConfig.enabledNotifyMeVariantIds = [];window._RestockRocketConfig.disabledNotifyMeVariantIds = [];window._RestockRocketConfig.backInStockTemplates = [];window._RestockRocketConfig.restockNotes = {};window._RestockRocketConfig.integrations = [];window._RestockRocketConfig.product = { 9857 id: 8832364773545, 9858 title: "iPad Pro 11-inch M5", 9859 handle: "apple-ipad-pro-11-inch-m5", 9860 vendor: "ipowerresale", 9861 tags: ["iPad"], 9862 available: true, 9863 options: ["Title"], 9864 selling_plan_groups: [], 9865 featured_image: "\/\/ipowerresale.com\/cdn\/shop\/files\/media_cafccf73-53e7-4608-a7f4-863a08925a0c.png?v=1766104668\u0026width=800", 9866 variants: [{ 9867 id: 46682881720489, 9868 title: "Default Title", 9869 available: true, 9870 sku: "iPad Pro Parent 4", 9871 price: 97900 9872} 9873] 9874 };window._RestockRocketConfig.variantsInventoryPolicy = {46682881720489 : "deny",}; 9875 window._RestockRocketConfig.variantsInventoryQuantity = {46682881720489 : 1,}; 9876 window._RestockRocketConfig.variantsPreorderCount = {46682881720489 : parseInt(""),}; 9877 window._RestockRocketConfig.variantsPreorderCountForMarket = {46682881720489 : null,}; 9878 window._RestockRocketConfig.variantsPreorderMaxCount = {46682881720489 : parseInt(""),}; 9879 window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {46682881720489 : null,}; 9880 window._RestockRocketConfig.variantsShippingText = {46682881720489 : "",}; 9881 window._RestockRocketConfig.variantsShippingTextForMarket = {46682881720489 : null,};window._RestockRocketConfig.selected_variant_id = 46682881720489; 9882 window._RestockRocketConfig.selected_variant_available = (window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }) || {}).available; 9883 try { 9884 var _sqCfg = window._RestockRocketConfig; 9885 var _sqPlanEnabled = Array.isArray(_sqCfg.sellingPlans) && 9886 _sqCfg.sellingPlans.some(function (p) { return p && p.enabled; }); 9887 var _sqPreCount = ((_sqCfg.cachedPreorderVariantIds && 9888 _sqCfg.cachedPreorderVariantIds.preorder_variant_ids) || []).length; 9889 _sqCfg.preordersConfigured = !!(_sqPlanEnabled && _sqPreCount); 9890 } catch (e) { } 9891 try { 9892 var _sqc = window._RestockRocketConfig; 9893 var _sqOn = !(_sqc.cachedSettings && _sqc.cachedSettings.block_accelerated_checkout === false); 9894 var _sqPre = (_sqc.cachedPreorderVariantIds && 9895 _sqc.cachedPreorderVariantIds.preorder_variant_ids) || []; 9896 var _sqArm = false; 9897 if (_sqOn && _sqc.preordersConfigured) { 9898 if (_sqc.pageType === 'product' && _sqc.product && _sqc.product.variants) { 9899 _sqArm = _sqc.product.variants.some(function (v) { return _sqPre.indexOf(Number(v.id)) !== -1; }); 9900 } else { 9901 _sqArm = (_sqc.integrations || []).some(function (i) { 9902 return i && i.type === 'featured_product' && i.enabled && 9903 Array.isArray(i.page_types) && i.page_types.indexOf(_sqc.pageType) !== -1; 9904 }); 9905 } 9906 } 9907 if (_sqArm && document.documentElement) { 9908 _sqc.acceleratedGateArmed = true; 9909 document.documentElement.classList.add('stoq-buy-now-pending'); 9910 setTimeout(function () { 9911 document.documentElement.classList.remove('stoq-buy-now-pending'); 9912 }, 6000); 9913 } 9914 } catch (e) { } 9915 9916 window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/01a0f67f-532e-7916-acb4-6f3af102b411/restockrocket-1-599/assets/restockrocket-product.js' 9917 window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/01a0f67f-532e-7916-acb4-6f3af102b411/restockrocket-1-599/assets/restockrocket-collection.js' 9918 window._RestockRocketConfig.scriptUrlProductBis = 'https://cdn.shopify.com/extensions/01a0f67f-532e-7916-acb4-6f3af102b411/restockrocket-1-599/assets/restockrocket-product-bis.js' 9919 window._RestockRocketConfig.scriptUrlCollectionBis = 'https://cdn.shopify.com/extensions/01a0f67f-532e-7916-acb4-6f3af102b411/restockrocket-1-599/assets/restockrocket-collection-bis.js' 9920 window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1) 9921 window._RestockRocketConfig.host = (window._RestockRocketConfig.cachedSettings && window._RestockRocketConfig.cachedSettings.api_host) || 'https://app.restockrocket.io' 9922 try { 9923 const _stoqVersionMatch = window._RestockRocketConfig.scriptHost.match(/(\d+)\/?(?:assets\/?)?$/); 9924 window._RestockRocketConfig.appVersion = (_stoqVersionMatch && _stoqVersionMatch[1]) || ''; 9925 } catch (e) { 9926 window._RestockRocketConfig.appVersion = ''; 9927 } 9928 const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; 9929 const LIQUID_CACHE_MAX_AGE = 15 * 60; 9930 const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt; 9931 if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) { 9932 console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh'); 9933 window._RestockRocketConfig.isLiquidCacheFresh = true; 9934 window._RestockRocketConfig.liquidCacheAge = null; 9935 } else { 9936 const now = Math.floor(Date.now() / 1000);
9937 const liquidCacheAge = now - liquidRenderedAt; 9938 window._RestockRocketConfig.liquidCacheAge = Math.max(0, liquidCacheAge); 9939 if (liquidCacheAge < 0) { 9940 console.debug(`STOQ - Client clock appears ahead of server by ${Math.abs(Math.round(liquidCacheAge / 60))} minutes, assuming cache fresh`); 9941 window._RestockRocketConfig.isLiquidCacheFresh = true; 9942 } else if (liquidCacheAge <= LIQUID_CACHE_MAX_AGE) { 9943 console.debug(`STOQ - Liquid cache is fresh (${Math.round(liquidCacheAge / 60)} minutes old)`); 9944 window._RestockRocketConfig.isLiquidCacheFresh = true; 9945 } else { 9946 console.debug(`STOQ - Liquid cache is stale (${Math.round(liquidCacheAge / 60)} minutes old, max ${Math.round(LIQUID_CACHE_MAX_AGE / 60)} minutes)`); 9947 window._RestockRocketConfig.isLiquidCacheFresh = false; 9948 } 9949 } 9950 9951 function checkSettingsExpiry(settings) { 9952 try { 9953 if (!settings || !settings.updated_at) { 9954 console.debug('STOQ - Invalid settings data structure'); 9955 return null; 9956 } 9957 9958 if (!settings.cache) { 9959 console.debug('STOQ - settings caching disabled'); 9960 return null; 9961 } 9962 if (settings.multi_language_enabled) { 9963 if (!settings.translations) { 9964 console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh'); 9965 return null; 9966 } 9967 if (window._RestockRocketConfig.normalizedLocale && 9968 !Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) { 9969 console.debug('STOQ - locale not explicitly translated, will use default language from cache'); 9970 } 9971 } 9972 9973 const updatedAt = new Date(settings.updated_at); 9974 if (isNaN(updatedAt.getTime())) { 9975 console.debug('STOQ - Invalid updated_at date format in settings'); 9976 return null; 9977 } 9978 9979 const age = Date.now() - updatedAt.getTime(); 9980 if (age < SETTINGS_CACHE_DURATION) { 9981 console.debug('STOQ - settings changed recently, skipping cache'); 9982 return null; 9983 } 9984 9985 return settings; 9986 } catch (error) { 9987 console.debug('STOQ - Error checking settings cache:', error); 9988 return null; 9989 } 9990 } 9991 9992 function createRestockRocketContainer() { 9993 const restockRocketContainer = document.createElement('div'); 9994 restockRocketContainer.id = 'restock-rocket'; 9995 document.body.appendChild(restockRocketContainer); 9996 } 9997 9998 function createRestockRocketScript(scriptUrl) { 9999 const restockRocketScriptElement = document.createElement('script'); 10000 restockRocketScriptElement.setAttribute('defer', 'defer'); 10001 restockRocketScriptElement.src = scriptUrl; 10002 document.body.appendChild(restockRocketScriptElement); 10003 } 10004 10005 createRestockRocketContainer() 10006 10007 console.debug('STOQ - extension activated') 10008 try { 10009 const _stoqInitConfig = window._RestockRocketConfig; 10010 const _stoqDetectedVariantIds = (_stoqInitConfig.product && Array.isArray(_stoqInitConfig.product.variants)
10010) 10011 ? _stoqInitConfig.product.variants.map(function(v) { return v.id }) 10012 : []; 10013 const _stoqSelectedVariantId = _stoqInitConfig.selected_variant_id; 10014 var _stoqPageSeq = 0; 10015 try { 10016 _stoqPageSeq = (parseInt(window.sessionStorage.getItem('_stoq_pls') || '0', 10) || 0) + 1; 10017 window.sessionStorage.setItem('_stoq_pls', String(_stoqPageSeq)); 10018 } catch (e) { } 10019 Shopify?.analytics?.publish?.('stoq_initialized', { 10020 cart_token: _stoqInitConfig.cartToken || '', 10021 page_url: window.location.href, 10022 page_type: _stoqInitConfig.pageType || '', 10023 shop_domain: _stoqInitConfig.shop || '', 10024 market_id: _stoqInitConfig.marketId || '', 10025 country_code: _stoqInitConfig.countryIsoCode || '', 10026 detected_variant_ids: _stoqDetectedVariantIds, 10027 selected_variant_id: _stoqSelectedVariantId || '', 10028 page_load_seq: _stoqPageSeq, 10029 liquid_rendered_at: _stoqInitConfig.liquidRenderedAt || 0, 10030 app_version: _stoqInitConfig.appVersion || '', 10031 liquid_cache_age: _stoqInitConfig.liquidCacheAge, 10032 inventory_policy: (_stoqInitConfig.variantsInventoryPolicy || {})[_stoqSelectedVariantId] || '', 10033 inventory_quantity: (_stoqInitConfig.variantsInventoryQuantity || {})[_stoqSelectedVariantId], 10034 }); 10035 } catch (e) { 10036 console.debug('STOQ - stoq_initialized publish failed:', e); 10037 } 10038 try { 10039 var _sqTrack = window._RestockRocketConfig; 10040 if (_sqTrack.preordersConfigured) { 10041 document.addEventListener('click', function (e) { 10042 try { 10043 var t = e.target; 10044 if (!t || !t.closest) return; 10045 var host = t.closest('.shopify-payment-button, shopify-payment-terms'); 10046 if (!host) return; 10047 var channel = host.matches && host.matches('shopify-payment-terms') 10048 ? 'shop_pay_installments' : 'buy_now'; 10049 var form = host.closest('form'); 10050 var vidEl = form && form.querySelector('[name="id"]'); 10051 var variantId = (vidEl && vidEl.value) || _sqTrack.selected_variant_id || ''; 10052 var _sqVidNum = Number(variantId); 10053 var _sqPlan = null; 10054 var _sqPlans = Array.isArray(_sqTrack.sellingPlans) ? _sqTrack.sellingPlans : []; 10055 var _sqMktId = Number(_sqTrack.marketId); 10056 var _sqForVariant = function (pl) { 10057 return pl && pl.enabled && Array.isArray(pl.variant_ids) && 10058 pl.variant_ids.indexOf(_sqVidNum) !== -1; 10059 }; 10060 _sqPlans.forEach(function (pl) { 10061 if (!_sqPlan && _sqForVariant(pl) && pl.markets_enabled && 10062 Array.isArray(pl.shopify_market_ids) && 10063 pl.shopify_market_ids.indexOf(_sqMktId) !== -1) { _sqPlan = pl; } 10064 }); 10065 if (!_sqPlan) { 10066 _sqPlans.forEach(function (pl) { 10067 if (!_sqPlan && _sqForVariant(pl) && !pl.markets_enabled) { _sqPlan = pl; } 10068 }); 10069 } 10070 Shopify?.analytics?.publish?.('stoq_accelerated_checkout_clicked', { 10071 variant_id: variantId, 10072 product_id: (_sqTrack.product && _sqTrack.product.id) || '', 10073 channel: channel, 10074 market_id: _sqTrack.marketId || '', 10075 country_code: _sqTrack.countryIsoCode || '', 10076 page_type: _sqTrack.pageType || '', 10077 cart_token: _sqTrack.cartToken || '', 10078 page_url: (window.location && window.location.href) || '', 10079 properties: { 10080 is_preorder_variant: (function () { 10081 var vid = Number(variantId); 10082 var has = function (a) { return Array.isArray(a) && a.indexOf(vid) !== -1; }; 10083 return has(_sqTrack.preorderVariantIds) || 10084 has(_sqTrack.cachedPreorderVariantIds && 10085 _sqTrack.cachedPreorderVariantIds.preorder_variant_ids); 10086 })(), 10087 in_enabled_plan: !!_sqPlan, 10088 is_instock_variant: (function () { 10089 var has = function (a) { return Array.isArray(a) && a.indexOf(_sqVidNum) !== -1; }; 10090 return has(_sqTrack.inStockVariantIds) || 10091 has(_sqTrack.cachedInStockVariantIds && 10092 _sqTrack.cachedInStockVariantIds.in_stock_variant_ids); 10093 })(), 10094 enrolled_plan_id: (_sqPlan && (_sqPlan.shopify_selling_plan_id || _sqPlan.shopify_selling_plan_group_id)) || '', 10095 enrolled_plan_provider: (_sqPlan && _sqPlan.inventory_provider) || '', 10096 block_enabled: !(_sqTrack.cachedSettings && _sqTrack.cachedSettings.block_accelerated_checkout === false), 10097 gate_armed: !!_sqTrack.acceleratedGateArmed, 10098 gate_active_at_click: !!(document.documentElement && 10099 document.documentElement.classList.contains('stoq-buy-now-pending')), 10100 blocked: (function () { 10101 try { 10102 var rr = window._RestockRocket; 10103 return !!(rr && typeof rr.willBlockAcceleratedCl
10103ick === 'function' && 10104 rr.willBlockAcceleratedClick(e)); 10105 } catch (err) { return false; } 10106 })(), 10107 }, 10108 }); 10109 } catch (err) { } 10110 }, true); 10111 } 10112 } catch (e) { } 10113 function applyTranslations(settings) { 10114 try { 10115 if (!settings || !settings.multi_language_enabled) { 10116 return settings; 10117 } 10118 10119 if (!settings.translations) { 10120 console.debug('STOQ - No translations found, skipping translation'); 10121 return settings; 10122 } 10123 10124 const normalizedLocale = window._RestockRocketConfig.normalizedLocale; 10125 const translations = settings.translations; 10126 10127 if (!normalizedLocale) { 10128 console.debug('STOQ - No matching locale for translations. Available:', Object.keys(translations || {})); 10129 delete settings.translations; 10130 return settings; 10131 } 10132 10133 console.debug(`STOQ - Applying translations for normalized locale: ${normalizedLocale} (original: ${window._RestockRocketConfig.locale})`); 10134 10135 const translatedFields = translations[normalizedLocale]; 10136 if (translatedFields && typeof translatedFields === 'object') { 10137 Object.keys(translatedFields).forEach(function(key) { 10138 const value = translatedFields[key]; 10139 if (value !== null && value !== undefined && value !== '') { 10140 settings[key] = value; 10141 } 10142 }); 10143 } else { 10144 console.debug('STOQ - No translated fields found for locale:', normalizedLocale); 10145 } 10146 10147 delete settings.translations; 10148 return settings; 10149 } catch (e) { 10150 console.debug('STOQ - error applying translations:', e); 10151 return settings; 10152 } 10153 } 10154 function setupCartSellingPlanUpdater(settings) { 10155 window.addEventListener('stoq:inventory-data-loaded', function(event) { 10156 console.debug('STOQ - Inventory data loaded, updating cart selling plans'); 10157 if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) { 10158 window._RestockRocket.updateCartSellingPlans() 10159 .then(hasUpdates => { 10160 if (hasUpdates) { 10161 console.debug('STOQ - cart selling plans updated successfully'); 10162 } else { 10163 console.debug('STOQ - no cart selling plan updates needed'); 10164 } 10165 }) 10166 .catch(error => { 10167 console.error('STOQ - error updating cart selling plans:', error); 10168 }); 10169 } 10170 }); 10171 } 10172 function storefrontGraphql(query, variables) { 10173 const cfg = window._RestockRocketConfig; 10174 if (!cfg.storefrontAccessToken || cfg.disableStorefrontApi === true) { 10175 return Promise.reject(new Error('Storefront API unavailable')); 10176 } 10177 return fetch( 10178 `https://${cfg.shop}/api/${cfg.storefrontApiVersion}/graphql.json`, 10179 { 10180 method: 'POST', 10181 headers: { 10182 'Content-Type': 'application/json', 10183 'X-Shopify-Storefront-Access-Token': cfg.storefrontAccessToken, 10184 }, 10185 body: JSON.stringify({ query: query, variables: variables }), 10186 } 10187 ) 10188 .then(function(response) { 10189 if (!response.ok) { throw new Error('Storefront API HTTP ' + response.status); } 10190 return response.json(); 10191 }) 10192 .then(function(body) { 10193 if (body && body.errors && body.errors.length) { 10194 throw new Error('Storefront API errors: ' + body.errors.map(function(e) { return e && e.message; }).join(', ')); 10195 } 10196 return body && body.data; 10197 }); 10198 } 10199 function fetchStorefrontShopMetafield(key) { 10200 const cfg = window._RestockRocketConfig; 10201 const query = 'query StoqShopMetafield($namespace: String!, $key: String!) { shop { metafield(namespace: $namespace, key: $key) { value } } }'; 10202 return storefrontGraphql(query, { namespace: cfg.metafieldNamespace, key: key }) 10203 .then(function(data) { 10204 const value = data && data.shop && data.shop.metafield && data.shop.metafield.value; 10205 if (!value) { throw new Error('Storefront API returned no ' + key + ' metafield value'); } 10206 return JSON.parse(value); 10207 }); 10208 } 10209 (function loadStorefrontSettings() { 10210 const cfg = window._RestockRocketConfig; 10211 if (!cfg.storefrontAccessToken || cfg.disableStorefrontApi === true) return; 10212 function run() { 10213 // The live-settings read is one more shop-level metafield fetch, so it 10214 // shares fetchStorefrontShopMetafield with the integrations/selling_plans 10215 // reads rather than re-issuing the same query + parse. 10216 fetchStorefrontShopMetafield('settings') 10217 .then(function(settings) { 10218 cfg.storefrontSettings = settings; 10219 console.debug('STOQ - stored live settings from Storefront API on config.storefrontSettings'); 10220 }) 10221 .catch(function(e) { 10222 console.debug('STOQ - Storefront settings fetch failed (non-fatal):', e && e.message); 10223 }); 10224 } 10225 10226 if (typeof window.requestIdleCallback === 'function') { 10227 window.requestIdleCallback(run, { timeout: 5000 }); 10228 } else { 10229 setTimeout(run, 0); 10230 } 10231 })(); 10232 const cachedSettings = window._RestockRocketConfig.cachedSettings; 10233 const validCachedSettings = cachedSettings ? checkSettingsExpiry(cachedSettings) : null; 10234 10235 if (validCachedSettings) { 10236 console.debug('STOQ - using cached settings'); 10237 initializeScripts(validCachedSettings); 10238 } else { 10239 console.debug('STOQ - fetching fresh settings'); 10240 const headers = { 10241 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 10242 'ngrok-skip-browser-warning': 'skip' 10243 }; 10244 10245 if (window.Shopify?.theme?.role === 'main') { 10246 headers['X-Shopify-Theme-Schema-Name'] = window.Shopify.theme.schema_name; 10247 headers['X-Shopify-Theme-Schema-Version'] = window.Shopify.theme.schema_version; 10248 headers['X-Shopify-Theme-Store-Id'] = window.Shopify.theme.theme_store_id; 10249 } 10250 10251 fetch( 10252 `${window._RestockRocketConfig.host}/api/v1/setting.json?translation_locale=${window._RestockRocketConfig.normalizedLocale}`, 10253 { headers } 10254 ) 10255 .then(function(response) { 10256 if (!response.ok) { 10257 throw new Error('Network response was not ok'); 10258 } 10259 return response.json(); 10260 }) 10261 .then(function(settings) { 10262 initializeScripts(settings); 10263 }) 10264 .catch(function(error) { 10265 if (cachedSettings) { 10266 console.debug('STOQ - using expired cached settings as fallback'); 10267 initializeScripts(cachedSettings); 10268 } else { 10269 console.error('STOQ - failed to load settings:', error); 10270 } 10271 }) 10272 .catch(function(e) { 10273 console.error(e) 10274 }) 10275 } 10276 10277 function fetchEmbedConfig(endpoint, apply) { 10278 return fetch( 10279 `${window._RestockRocketConfig.host}/api/v1/embed/${endpoint}.json`, 10280 { 10281 headers: { 10282 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 10283 'ngrok-skip-browser-warning': 'skip' 10284 } 10285 } 10286 ) 10287 .then(function(response) { 10288 if (!response.ok) throw new Error(`Failed to fetch ${endpoint}`); 10289 return response.json(); 10290 }) 10291 .then(function(data) {
10292 try { 10293 apply(data); 10294 } catch (applyError) { 10295 console.error('STOQ - apply failed for ' + endpoint + ':', applyError); 10296 throw applyError; 10297 } 10298 }) 10299 .catch(function(error) { 10300 console.debug(`STOQ - using cached ${endpoint}:`, error.message); 10301 }); 10302 } 10303 function refreshShopConfig(source) { 10304 const cfg = window._RestockRocketConfig; 10305 const viaEmbed = function() { return fetchEmbedConfig(source.endpoint, source.apply); }; 10306 const flagOn = !!cfg.readFlags && cfg.readFlags[source.flag] === true; 10307 if (!flagOn || source.embedOnly === true) { return viaEmbed(); } 10308 10309 return fetchStorefrontShopMetafield(source.metafieldKey) 10310 .then(function(value) { 10311 if (!source.isValid(value)) { throw new Error(source.metafieldKey + ' metafield is not a valid ' + source.endpoint + ' payload'); } 10312 source.apply(value); 10313 console.debug('STOQ - refreshed ' + source.endpoint + ' from the Storefront API'); 10314 }) 10315 .catch(function(error) { 10316 console.debug('STOQ - Storefront ' + source.endpoint + ' read failed, using embed:', error.message); 10317 return viaEmbed(); 10318 }); 10319 } 10320 function refreshIntegrations() { 10321 const cfg = window._RestockRocketConfig; 10322 return refreshShopConfig({ 10323 endpoint: 'integrations', 10324 metafieldKey: 'integrations', 10325 flag: 'enable_storefront_integrations_read', 10326 isValid: function(value) { return Array.isArray(value); }, 10327 apply: function(data) { 10328 cfg.integrations = data; 10329 } 10330 }); 10331 } 10332 function refreshSellingPlans(embedOnly) { 10333 const cfg = window._RestockRocketConfig; 10334 return refreshShopConfig({ 10335 embedOnly: embedOnly === true, 10336 endpoint: 'selling_plans', 10337 metafieldKey: 'cachedSellingPlans', 10338 flag: 'enable_storefront_selling_plans_read', 10339 isValid: function(value) { return !!value && Array.isArray(value.plans); }, 10340 apply: function(data) { 10341 cfg.sellingPlans = data.plans; 10342 cfg.disabledSellingPlanIds = data.disabled_plan_ids || []; 10343 if (data && data.read_flags && typeof data.read_flags === 'object' && !Array.isArray(data.read_flags)) { 10344 cfg.readFlags = data.read_flags; 10345 } 10346 } 10347 }); 10348 } 10349 10350 function initializeScripts(settings) { 10351 settings = applyTranslations(settings); 10352 window._RestockRocketConfig.settings = settings; 10353 console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); 10354 const forceEmbedSellingPlans = settings.force_embed_selling_plans === true; 10355 const staleRefresh = !window._RestockRocketConfig.isLiquidCacheFresh && !settings.disable_refresh_on_stale_liquid; 10356 if (forceEmbedSellingPlans || staleRefresh) { 10357 console.debug('STOQ - refreshing selling_plans' + (staleRefresh ? ' + integrations (Liquid cache stale)' : ' (force_embed_selling_plans)')); 10358 const refreshes = [refreshSellingPlans(forceEmbedSellingPlans)]; 10359 if (staleRefresh) { refreshes.push(refreshIntegrations()); } 10360 Promise.race([ 10361 Promise.all(refreshes), 10362 new Promise(function(resolve) { setTimeout(resolve, 1000); }) 10363 ]).then(function() { loadScripts(settings); }); 10364 return; 10365 } 10366 10367 loadScripts(settings); 10368 } 10369 10370 function loadScripts(settings) { 10371 setupCartSellingPlanUpdater(settings); 10372 10373 if(settings.enable_app) { 10374 const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) { 10375 return integration.type === 'hijack' && integration.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType); 10376 }) 10377 const hasEnabledOffer = Array.isArray(window._RestockRocketConfig.sellingPlans) 10378 && window._RestockRocketConfig.sellingPlans.some(function(plan) { return plan && plan.enabled; }); 10379 const hasDisabledPlanIds = Array.isArray(window._RestockRocketConfig.disabledSellingPlanIds) 10380 && window._RestockRocketConfig.disabledSellingPlanIds.length > 0; 10381 const usePreorderBuild = settings.preorder_enabled || hasEnabledOffer || hasDisabledPlanIds; 10382 10383 const collectionScriptUrl = usePreorderBuild 10384 ? window._RestockRocketConfig.scriptUrlCollection 10385 : window._RestockRocketConfig.scriptUrlCollectionBis; 10386 const productScriptUrl = usePreorderBuild 10387 ? window._RestockRocketConfig.scriptUrlProduct 10388 : window._RestockRocketConfig.scriptUrlProductBis; 10389 10390 const pageType = window._RestockRocketConfig.pageType; 10391 const collectionPageTypes = ['collection', 'index', 'search', 'page']; 10392
10393 if(collectionPageTypes.indexOf(pageType) !== -1 && (settings[`show_button_on_${pageType}`] || settings[`preorder_${pageType}_enabled`])) { 10394 createRestockRocketScript(collectionScriptUrl); 10395 } else if(pageType === 'product') { 10396 createRestockRocketScript(productScriptUrl); 10397 } else if(hijackIntegration) { 10398 createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); 10399 } else if(usePreorderBuild) { 10400 createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); 10401 } else { 10402 console.debug(`STOQ - no scripts enabled for ${pageType}`); 10403 } 10404 const appLoadedEvent = new CustomEvent('stoq:loaded', { 10405 detail: { 10406 pageType: window._RestockRocketConfig.pageType, 10407 enabled: settings.enable_app, 10408 settings: settings, 10409 preorderEnabled: settings.preorder_enabled 10410 } 10411 }); 10412 console.debug('STOQ - dispatching app loaded event'); 10413 window.dispatchEvent(appLoadedEvent); 10414 } 10415 } 10416</script>
10416<style id="RestockRocketStyle">html.stoq-buy-now-pending .shopify-payment-button{pointer-events:none!important}</style> 10417 10418 10419</div><div id="shopify-block-AV3hyQ2FISjdzWlBPV__11945366711752539959" class="shopify-block shopify-app-block">
10419<script> var script = document.createElement('script');script.type = 'text/javascript';script.id = 'ze-snippet';script.src = 'https://static.zdassets.com/ekr/snippet.js?key=1e4b435a-5faa-4906-9738-a931eb99a554';document.getElementsByTagName('head')[0].appendChild(script); </script>
10419 10420 10421 10422</div><div id="shopify-block-AeWtjZE1LT2Irb3pva__7079518687644006178" class="shopify-block shopify-app-block">
10422<script> 10423 (function () { 10424 const cartAttributes = {}; 10425 10426 // Helper function to retrieve the UTM from Url 10427 function getUTMFromUrl() { 10428 const url_string = window.location.href; 10429 const url = new URL(url_string); 10430 10431 const utm_id = url.searchParams.get("utm_id"); 10432 const utm_source = url.searchParams.get("utm_source"); 10433 const utm_medium = url.searchParams.get("utm_medium"); 10434 const utm_campaign = url.searchParams.get("utm_campaign"); 10435 const utm_term = url.searchParams.get("utm_term"); 10436 const ref = url.searchParams.get("ref"); 10437 10438 if (!utm_id && !utm_source && !utm_medium && !utm_campaign && !ref) { 10439 return null; 10440 } 10441 10442 let utmParameters = {}; 10443 10444 if (utm_id) { 10445 utmParameters.utm_id = utm_id; 10446 } 10447 if (utm_source) { 10448 utmParameters.utm_source = utm_source; 10449 } 10450 if (utm_medium) { 10451 utmParameters.utm_medium = utm_medium; 10452 } 10453 if (utm_campaign) { 10454 utmParameters.utm_campaign = utm_campaign; 10455 } 10456 if (utm_term) { 10457 utmParameters.utm_term = utm_term; 10458 } 10459 if (ref) { 10460 utmParameters.ref = ref; 10461 } 10462 10463 10464 return Object.keys(utmParameters).length === 0 10465 ? null 10466 : utmParameters; 10467 } 10468 10469 // Helper function to retrieve the UTM from Cookie 10470 function getUTMAttributes() { 10471 const urlUtmParams = getUTMFromUrl(); 10472 10473 if (urlUtmParams) { 10474 return urlUtmParams; 10475 } 10476 10477 // No longer reading from deprecated Shopify cookies 10478 return undefined; 10479 } 10480 10481 function saveUtmParameters() { 10482 const utmParams = getUTMAttributes(); 10483 if (utmParams) { 10484 const cartHasUtmAttributes = Object.keys(cartAttributes).find(attributeKey => attributeKey.startsWith("utm_") || attributeKey === "ref"); 10485 if (cartHasUtmAttributes) { 10486 // Don't call API if it already contains our UTM parameters 10487 return; 10488 } 10489 10490 // Handle both Shopify.routes.root and routes.root_url for better compatibility 10491 var rootUrl = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root) 10492 || (window.routes && window.routes.root_url) 10493 || '/'; 10494 10495 var updateCart = fetch(rootUrl + 'cart/update.js', 10496 { 10497 headers: { 10498 'Content-Type': 'application/json', 10499 }, 10500 method: "POST", 10501 body: JSON.stringify({ 10502 attributes: { 10503 ...utmParams 10504 }, 10505 }) 10506 }) 10507 .then(response => response.json()) 10508 .then(data => { 10509 return data 10510 }); 10511 } 10512 } 10513 10514 saveUtmParameters(); 10515 })(); 10516</script>
10516 10517 10518 10519 10520 10521</div>
10521<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
10521 10522</body></html><!-- Begin Shopify-Afterpay JavaScript Snippet (v1.2.1) --> 10523
10524<script type="text/javascript"> 10525 // Overrides: 10526 // var afterpay_msg_size = 'sm'; // Can be 'xs', 'sm', 'md' or 'lg'. 10527 // var afterpay_bold_amount = true; 10528 var afterpay_logo_theme = 'black'; // Can be 'colour', 'black' or 'white'. 10529 var afterpay_modal_open_icon = true; 10530 var afterpay_hide_upper_limit = true; 10531 var afterpay_hide_lower_limit = true; 10532 var afterpay_show_if_outside_limits = true; 10533 10534 var afterpay_product_integration_enabled = true; 10535 var afterpay_product_selector = '#custom-product-hidden__price'; 10536 // var afterpay_variable_price_fallback = false; 10537 // var afterpay_variable_price_fallback_selector = ''; 10538 // var afterpay_variable_price_fallback_method = 'mutation'; // Can be 'mutation' or 'interval'. 10539 10540 // var afterpay_cart_integration_enabled = true; 10541 // var afterpay_cart_static_selector = '#cart-subtotal-selector'; 10542 // var afterpay_variable_subtotal_fallback = false; 10543 // var afterpay_variable_subtotal_fallback_selector = ''; 10544 // var afterpay_variable_subtotal_fallback_method = 'mutation'; // Can be 'mutation' or 'interval'. 10545 10546 var afterpay_dynamic_cart_integration_enabled = true; 10547 var afterpay_dynamic_cart_selector = '#customCartPage .afterpay-cart-messaging'; 10548 var afterpay_dynamic_cart_observer_target = '#customCartPage'; 10549 10550 // var afterpay_footer_logo_enabled = true; 10551 // var afterpay_footer_logo_format = 'icon'; // Can be 'icon', 'stacked' or 'logo'. 10552 // var afterpay_footer_logo_theme = 'colour'; // Can be 'colour', 'black' or 'white'. 10553 // var afterpay_footer_logo_background = 'border'; // Can be 'border' or 'transparent'. 10554 // var afterpay_footer_logo_container = 'footer ul.payment-icons'; 10555 // var afterpay_footer_logo_template = '<li class="payment-icon"><object data="{logo_path}" type="image/svg+xml"></object></li>'; 10556 10557 // Non-editable fields: 10558 var afterpay_js_language = "en"; 10559 var afterpay_js_country = "US"; 10560 var afterpay_shop_currency = "USD"; 10561 var afterpay_cart_currency = "USD"; 10562 var afterpay_shop_money_format = "${{amount}}"; 10563 var afterpay_shop_permanent_domain = "ipowerresale.myshopify.com"; 10564 var afterpay_theme_name = "iPad Pencil Promo 09.24.26"; 10565 var afterpay_product = {"id":8832364773545,"title":"iPad Pro 11-inch M5","handle":"apple-ipad-pro-11-inch-m5","description":"Buy the iPad Pro M5 11-inch at iPowerResale. Shop various colors and storage options for the M5 iPad Pro models at iPowerResale for fast shipping and great deals!","published_at":"2025-12-16T09:02:22-08:00","created_at":"2025-12-16T09:02:18-08:00","vendor":"ipowerresale","type":"iPad Pro","tags":["iPad"],"price":97900,"price_min":97900,"price_max":97900,"available":true,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":46682881720489,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"iPad Pro Parent 4","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"iPad Pro 11-inch M5","public_title":null,"options":["Default Title"],"price":97900,"weight":2268,"compare_at_price":null,"inventory_management":"shopify","barcode":"iPad Pro Parent 4","requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}],"images":["\/\/ipowerresale.com\/cdn\/shop\/files\/media_cafccf73-53e7-4608-a7f4-863a08925a0c.png?v=1766104668","\/\/ipowerresale.com\/cdn\/shop\/files\/media_a6b05452-6fc6-4456-b536-0b9f1b5ed8af.png?v=1766104669","\/\/ipowerresale.com\/cdn\/shop\/files\/media_d29247e0-3007-4e27-8518-9d8ebacc9308.png?v=1766104669"],"featured_image":"\/\/ipowerresale.com\/cdn\/shop\/files\/media_cafccf73-53e7-4608-a7f4-863a08925a0c.png?v=1766104668","options":["Title"],"media":[{"alt":null,"id":34900660256937,"position":1,"preview_image":{"aspect_ratio":1.0,"height":1140,"width":1140,"src":"\/\/ipowerresale.com\/cdn\/shop\/files\/media_cafccf73-53e7-4608-a7f4-863a08925a0c.png?v=1766104668"},"aspect_ratio":1.0,"height":1140,"media_type":"image","src":"\/\/ipowerresale.com\/cdn\/shop\/files\/media_cafccf73-53e7-4608-a7f4-863a08925a0c.png?v=1766104668","width":1140},{"alt":null,"id":34900660289705,"position":2,"preview_image":{"aspect_ratio":1.0,"height":1140,"width":1140,"src":"\/\/ipowerresale.com\/cdn\/shop\/files\/media_a6b05452-6fc6-4456-b536-0b9f1b5ed8af.png?v=1766104669"},"aspect_ratio":1.0,"height":1140,"media_type":"image","src":"\/\/ipowerresale.com\/cdn\/shop\/files\/media_a6b05452-6fc6-4456-b536-0b9f1b5ed8af.png?v=1766104669","width":1140},{"alt":null,"id":34900660322473,"position":3,"preview_image":{"aspect_ratio":1.0,"height":1140,"width":1140,"src":"\/\/ipowerresale.com\/cdn\/shop\/files\/media_d29247e0-3007-4e27-8518-9d8ebacc9308.png?v=1766104669"},"aspect_ratio":1.0,"height":1140,"media_type":"image","src":"\/\/ipowerresale.com\/cdn\/shop\/files\/media_d29247e0-3007-4e27-8518-9d8ebacc9308.png?v=1766104669","width":1140}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"Buy the iPad Pro M5 11-inch at iPowerResale. Shop various colors and storage options for the M5 iPad Pro models at iPowerResale for fast shipping and great deals!"}; 10566 var afterpay_product_collections = "Discount Product (Excludes 5 Series \u0026 Accessories),iPad Pro,Klaviyo Parent Products,Top 10 Homepage Products (Parent Product)"; 10567 var afterpay_current_variant = {"id":46682881720489,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"iPad Pro Parent 4","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"iPad Pro 11-inch M5","public_title":null,"options":["Default Title"],"price":97900,"weight":2268,"compare_at_price":null,"inventory_management":"shopify","barcode":"iPad Pro Parent 4","requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}; 10568 var afterpay_cart_total_price = 0; 10569 var afterpay_cart_skus = ""; 10570 var afterpay_cart_collections = ""; 10571 var afterpay_js_snippet_version = '1.2.1'; 10572</script>
vendor: 1 bytes, line 10572
10572
10573<script type="text/javascript" src="https://static.afterpay.com/shopify-afterpay-javascript.js"></script>
10573<!-- End Shopify-Afterpay JavaScript Snippet (v1.2.1) -->
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.