1<!doctype html> 2<!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]--> 3<!--[if IE 9 ]> <html class="ie9 no-js"> <![endif]--> 4<!-- [if (gt IE 9)|!(IE)]><! --> 5<html class="no-js"> 6 <!-- <![endif] --> 7<head> 8<meta charset="utf-8"> 9<meta http-equiv="X-UA-Compatible" content="IE=edge"> 10<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1"> 11<meta name="apple-itunes-app" content="app-id=1576832504"> 12<!-- Google Tag Manager -->
13<script>
vendor: 327 bytes, lines 13-17
13(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 14new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 15j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 16'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 17})(window,document,'script','dataLayer','
17GTM-5QZQDHNB
vendor: 3 bytes, line 17
17');
17</script>
17 18<!-- End Google Tag Manager --> 19<!-- Title and description --> 20<title>ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap</title> 21<meta name="description" content="ATAS4D adalah platform game togel toto macau 4D terbaik dengan fitur lengkap, akses cepat, pasaran terpercaya, dan peluang kemenangan menarik setiap hari."> 22<meta name="keywords" content="atas4d, atas 4d, atas4d login, game atas4d, game togel, game macau, togel macau, toto macau, toto macau 4d, togel macau 4d" /> 23<meta name="robots" content="index, follow"/> 24<link rel="canonical" href="https://atas4d.biz/"> 25<link rel="amphtml" href="https://biz.platformatas4d.eu.com/game/"> 26<link rel="alternate" href="https://biz.platformatas4d.eu.com/game/"> 27<link rel="alternate" href="https://biz.platformatas4d.eu.com/game/" hreflang="id"> 28<link rel="alternate" href="https://biz.platformatas4d.eu.com/game/" hreflang="en"> 29<link rel="alternate" href="https://biz.platformatas4d.eu.com/game/" hreflang="en"> 30<link rel="alternate" href="https://biz.platformatas4d.eu.com/game/" hreflang="x-default"> 31<link rel="alternate" hreflang="id-ID" href="https://biz.platformatas4d.eu.com/game/" /> 32<link rel="alternate" hreflang="en-US" href="https://biz.platformatas4d.eu.com/game/" /> 33<link rel="alternate" hreflang="en-SG" href="https://biz.platformatas4d.eu.com/game/" /> 34<!-- /snippets/social-meta-tags.liquid --> 35<meta property="og:type" content="website"> 36<meta property="og:title" content="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap"> 37<meta property="og:image" content="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp"> 38<meta property="og:image:secure_url" content="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp"> 39<meta property="og:image" content="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp"> 40<meta property="og:image:secure_url" content="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp"> 41<meta property="og:image" content="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp"> 42<meta property="og:image:secure_url" content="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp"> 43<meta property="og:description" content="ATAS4D adalah platform game togel toto macau 4D terbaik dengan fitur lengkap, akses cepat, pasaran terpercaya, dan peluang kemenangan menarik setiap hari."> 44<meta property="og:price:amount" content="1.349.417"> 45<meta property="og:price:currency" content="IDR"> 46<meta property="og:url" content="https://atas4d.biz/"> 47<meta property="og:site_name" content="https://atas4d.biz/"> 48<meta name="twitter:site" content="@atas4d"> 49<meta name="twitter:card" content="summary"> 50<meta name="twitter:title" content="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap"> 51<meta name="twitter:description" content="ATAS4D adalah platform game togel toto macau 4D terbaik dengan fitur lengkap, akses cepat, pasaran terpercaya, dan peluang kemenangan menarik setiap hari."> 52<meta name="twitter:image" content="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp"> 53<meta name="twitter:image:width" content="600"> 54<meta name="twitter:image:height" content="600"> 55<link rel="shortcut icon" href="https://atas4d.biz/images/icon-atas4d.webp" type="image/png"> 56<meta name="theme-color" content="#212121"> 57<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700&family=Poppins&display=swap" rel="stylesheet"> 58<link href="https://outerbloom.com/cdn/shop/t/138/assets/custom-styles.css?v=94643080714485117621752652418" rel="stylesheet" type="text/css" media="all" /> 59<link rel="stylesheet" href="https://outerbloom.com/cdn/shop/t/138/assets/wishlist-styles.css?v=26657665320743256831769518695"> 60<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/select2.min.css">
60<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
60 61<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 61-62
61 62<script async src="https://www.googletagmanager.com/gtag/js?id=
62G-VGVDLHW9X9
vendor: 12 bytes, line 62
62"></script>
63<script> 64
vendor: 134 bytes, lines 64-68
64window.dataLayer = window.dataLayer || []; 65 function gtag(){dataLayer.push(arguments);} 66 gtag('js', new Date()); 67 68 gtag('config', '
68G-VGVDLHW9X9
vendor: 4 bytes, line 68
68');
69</script>
vendor: 1 bytes, line 69
69
70<script 71 src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js" 72 integrity="sha512-57oZ/vW8ANMjR/KQ6Be9v/+/h6bq9/l3f0Oc7vn6qMqyhvPd1cvKBRWWpzu0QoneImqr2SkmO4MSqU+RpHom3Q==" 73 crossorigin="anonymous" 74 referrerpolicy="no-referrer" 75 ></script>
75 76
76<script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js" async="async"></script>
76 77
77<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/select2.min.js"></script>
77<!-- Facebook Pixel Code --> 78
78<script>
vendor: 453 bytes, lines 78-87
78 79 !function(f,b,e,v,n,t,s) 80 {if(f.fbq)return;n=f.fbq=function(){n.callMethod? 81 n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 82 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 83 n.queue=[];t=b.createElement(e);t.async=!0; 84 t.src=v;s=b.getElementsByTagName(e)[0]; 85 s.parentNode.insertBefore(t,s)}(window, document,'script', 86 'https://connect.facebook.net/en_US/fbevents.js'); 87 fbq('init', '
87165971065669324
vendor: 40 bytes, lines 87-89
87'); 88 fbq('track', 'PageView'); 89
89</script>
89 90 <noscript 91 ><img 92 height="1" 93 width="1" 94 style="display:none" 95 src="https://www.facebook.com/tr?id=165971065669324&ev=PageView&noscript=1" 96 ></noscript> 97
97<script src="//cdnjs.cloudflare.com/ajax/libs/vissense/0.9.0/vissense.js" defer></script>
97 98 99 <!-- Bing UET --> 100
100<script> 101 (function(w,d,t,r,u) 102 { 103 var f,n,i; 104 w[u]=w[u]||[],f=function() 105 { 106 var o={ti:"343051754", tm:"shpfy_ui", enableAutoSpaTracking: true}; 107 o.q=w[u],w[u]=new UET(o),w[u].push("pageLoad") 108 }, 109 n=d.createElement(t),n.src=r,n.async=1,n.onload=n.onreadystatechange=function() 110 { 111 var s=this.readyState; 112 s&&s!=="loaded"&&s!=="complete"||(f(),n.onload=n.onreadystatechange=null) 113 }, 114 i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i) 115 }) 116 (window,document,"script","//bat.bing.com/bat.js","uetq"); 117 </script>
117 118
118<script> 119 window.uetq = window.uetq || []; 120 window.uetq.push('event', '', {"revenue_value":0,"currency":"IDR"}); 121 </script>
121 122 <!-- End Bing UET --> 123 124 <!-- Microsoft Clarity --> 125
125<script type="text/javascript"> 126 (function(c,l,a,r,i,t,y){ 127 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 128 t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; 129 y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); 130 })(window, document, "clarity", "script", "h7rbxqry9k"); 131 </script>
131 132 <!-- End Microsoft Clarity --> 133 134 <!-- Apollo Script - Tracking Visitor --> 135
135<script> 136 function initApollo(){var n=Math.random().toString(36).substring(7),o=document.createElement("script"); 137 o.src="https://assets.apollo.io/micro/website-tracker/tracker.iife.js?nocache="+n,o.async=!0,o.defer=!0, 138 o.onload=function(){window.trackingFunctions.onLoad({appId:"68805f12b2074b001d43bfd8"})}, 139 document.head.appendChild(o)}initApollo(); 140 </script>
140 141 <!-- End Apollo Script - Tracking Visitor --> 142 143 144<link href="https://outerbloom.com/cdn/shop/t/138/assets/combine.min.css?v=36663939493595550161770794813" rel="stylesheet" type="text/css" media="all" /> 145 146<link href="https://outerbloom.com/cdn/shop/t/138/assets/font-awesome.css?v=132324219581463622051752652421" rel="stylesheet" type="text/css" media="all" /> 147<link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.min.css"> 148
149<script src="//code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
vendor: 1 bytes, line 149
149
150<script src="https://outerbloom.com/cdn/shop/t/138/assets/combine.js?v=140218079523075729301752652421" type="text/javascript"></script>
vendor: 1 bytes, line 150
150
151<script src="//code.jquery.com/ui/1.13.0/jquery-ui.min.js"></script>
vendor: 1 bytes, line 151
151
152<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
152 153<meta name="google-site-verification" content="q6vqSE0THHQbR2SWhGIX3l9ZmbYVR-f37OU1e3O_Fmc" /> 154<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/15896833/digital_wallets/dialog"> 155<link rel="alternate" type="application/json+oembed" href="https://atas4d.biz/.oembed">
156<script async="async" src="/checkouts/internal/preloads.js?locale=en-ID"></script>
vendor: 1 bytes, line 156
156
157<script id="shopify-features" type="application/json">{"accessToken":"d2e176e59f6658d5056234d6249b3ab4","betas":["rich-media-storefront-analytics"],"domain":"outerbloom.com","predictiveSearch":true,"shopId":15896833,"locale":"en"}</script>
vendor: 1 bytes, line 157
157
158<script>var Shopify = Shopify || {}; 159Shopify.shop = "outerbloom1.myshopify.com"; 160Shopify.locale = "en"; 161Shopify.currency = {"active":"IDR","rate":"1.0"}; 162Shopify.country = "ID"; 163Shopify.theme = {"name":"web-outerbloom-shopify\/main","id":153139282135,"schema_name":null,"schema_version":null,"theme_store_id":null,"role":"main"}; 164Shopify.theme.handle = "null"; 165Shopify.theme.style = {"id":null,"handle":null}; 166Shopify.cdnHost = "outerbloom.com/cdn"; 167Shopify.routes = Shopify.routes || {}; 168Shopify.routes.root = "/";</script>
vendor: 1 bytes, line 168
168
169<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 169
169
170<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 170
170
171<script id="shop-js-analytics" type="application/json">{"pageType":"product"}</script>
vendor: 1 bytes, line 171
171
172<script defer="defer" async type="module" src="https://outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/client.init-shop-cart-sync_BLuSqYWl.en.esm.js"></script>
vendor: 1 bytes, line 172
172
173<script defer="defer" async type="module" src="https://outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/chunk.common_DplD2_3Q.en.esm.js"></script>
vendor: 1 bytes, line 173
173
174<script defer="defer" async type="module" src="https://outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/chunk.modal_BxEbAqG6.en.esm.js"></script>
vendor: 1 bytes, line 174
174
175<script type="module"> 176 await import("https://outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/client.init-shop-cart-sync_BLuSqYWl.en.esm.js"); 177await import("https://outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/chunk.common_DplD2_3Q.en.esm.js"); 178await import("https://outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/chunk.modal_BxEbAqG6.en.esm.js"); 179 180 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 181 182</script>
vendor: 1 bytes, line 182
182
183<script>(function() { 184 var isLoaded = false; 185 function asyncLoad() { 186 if (isLoaded) return; 187 isLoaded = true; 188 var urls = ["https:\/\/e9e1-180-254-64-204.ngrok.io\/public\/scripts\/shopifyPageScript.js?shop=outerbloom1.myshopify.com","https:\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/3.5.1\/jquery.min.js?shop=outerbloom1.myshopify.com","https:\/\/14e1-180-254-64-204.ngrok.io\/public\/scripts\/shopifyPageScript.js?shop=outerbloom1.myshopify.com","https:\/\/6403-180-254-64-204.ngrok.io\/public\/scripts\/shopify-page-script.js?shop=outerbloom1.myshopify.com","https:\/\/googlesignintest.loca.lt\/public\/scripts\/shopify-page-script.js?shop=outerbloom1.myshopify.com","https:\/\/api-na1.hubapi.com\/scriptloader\/v1\/6800477.js?shop=outerbloom1.myshopify.com"]; 189 for (var i = 0; i < urls.length; i++) { 190 var s = document.createElement('script'); 191 s.type = 'text/javascript'; 192 s.async = true; 193 s.src = urls[i]; 194 var x = document.getElementsByTagName('script')[0]; 195 x.parentNode.insertBefore(s, x); 196 } 197 }; 198 if(window.attachEvent) { 199 window.attachEvent('onload', asyncLoad); 200 } else { 201 window.addEventListener('load', asyncLoad, false); 202 } 203})();</script>
vendor: 1 bytes, line 203
203
204<script id="__st">var __st={"a":15896833,"offset":25200,"reqid":"9772bf95-0c76-4bf8-8585-5e940331d073-1771788748","pageurl":"outerbloom.com\/products\/outerbloom-mulan-bag-hampers","u":"aafc7fc1a838","p":"product","rtyp":"product","rid":7881418965207};</script>
vendor: 1 bytes, line 204
204
205<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 205
205
206<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.2.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'])})(!1,!0)}();</script>
vendor: 1 bytes, line 206
206
207<script integrity="sha256-4kQ18oKyAcykRKYeNunJcIwy7WH5gtpwJnB7kiuLZ1E=" data-source-attribution="shopify.loadfeatures" defer="defer" src="https://outerbloom.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-a0a9edcb.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 207
207
208<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://outerbloom.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 209</script>
vendor: 1 bytes, line 209
209
210<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 211 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); 212</script>
vendor: 1 bytes, line 212
212
213<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})}})); 214</script>
214 215
216<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
216 217 <!-- /snippets/oldIE-js.liquid --> 218 219 220<!--[if lt IE 9]>
221<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js" type="text/javascript"></script>
vendor: 1 bytes, line 221
221
222<script src="https://outerbloom.com/cdn/shop/t/138/assets/respond.min.js?v=52248677837542619231752652418" type="text/javascript"></script>
222 223<link href="https://outerbloom.com/cdn/shop/t/138/assets/respond-proxy.html" id="respond-proxy" rel="respond-proxy" /> 224<link href="https://outerbloom.com/search?q=142e9156869335090161dced0ac98b64" id="respond-redirect" rel="respond-redirect" />
225<script src="https://outerbloom.com/search?q=142e9156869335090161dced0ac98b64" type="text/javascript"></script>
225 226<![endif]--> 227 228 229 230 231 232 <link href="https://cdn.shopify.com/extensions/019b5a94-a328-79ac-9b0a-d9abe0913c8c/bitbybit-google-signin-136/assets/app.css" rel="stylesheet" type="text/css" media="all"> 233<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
234<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: 15896833,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 234
234
235<script id="web-pixels-manager-setup">(function e(e,d,r,n,o){if(void 0===o&&(o={}),!Boolean(null===(a=null===(i=window.Shopify)||void 0===i?void 0:i.analytics)||void 0===a?void 0:a.replayQueue)){var i,a;window.Shopify=window.Shopify||{};var t=window.Shopify;t.analytics=t.analytics||{};var s=t.analytics;s.replayQueue=[],s.publish=function(e,d,r){return s.replayQueue.push([e,d,r]),!0};try{self.performance.mark("wpm:start")}catch(e){}var l=function(){var e={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:?[ /-](13[3-9]|1[4-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(13[5-9]|1[4-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(13[3-9]|1[4-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:?[ /-](13[3-9]|1[4-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(13[5-9]|1[4-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(13[3-9]|1[4-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+|)/},d=e.modern,r=e.legacy,n=navigator.userAgent;return n.match(d)?"modern":n.match(r)?"legacy":"unknown"}(),u="modern"===l?"modern":"legacy",c=(null!=n?n:{modern:"",legacy:""})[u],f=function(e){return[e.baseUrl,"/wpm","/b",e.hashVersion,"modern"===e.buildTarget?"m":"l",".js"].join("")}({baseUrl:d,hashVersion:r,buildTarget:u}),m=function(e){var d=e.version,r=e.bundleTarget,n=e.surface,o=e.pageUrl,i=e.monorailEndpoint;return{emit:function(e){var a=e.status,t=e.errorMsg,s=(new Date).getTime(),l=JSON.stringify({metadata:{event_sent_at_ms:s},events:[{schema_id:"web_pixels_manager_load/3.1",payload:{version:d,bundle_target:r,page_url:o,status:a,surface:n,error_msg:t},metadata:{event_created_at_ms:s}}]});if(!i)return console&&console.warn&&console.warn("[Web Pixels Manager] No Monorail endpoint provided, skipping logging."),!1;try{return self.navigator.sendBeacon.bind(self.navigator)(i,l)}catch(e){}var u=new XMLHttpRequest;try{return u.open("POST",i,!0),u.setRequestHeader("Content-Type","text/plain"),u.send(l),!0}catch(e){return console&&console.warn&&console.warn("[Web Pixels Manager] Got an unhandled error while logging to Monorail."),!1}}}}({version:r,bundleTarget:l,surface:e.surface,pageUrl:self.location.href,monorailEndpoint:e.monorailEndpoint});try{o.browserTarget=l,function(e){var d=e.src,r=e.async,n=void 0===r||r,o=e.onload,i=e.onerror,a=e.sri,t=e.scriptDataAttributes,s=void 0===t?{}:t,l=document.createElement("script"),u=document.querySelector("head"),c=document.querySelector("body");if(l.async=n,l.src=d,a&&(l.integrity=a,l.crossOrigin="anonymous"),s)for(var f in s)if(Object.prototype.hasOwnProperty.call(s,f))try{l.dataset[f]=s[f]}catch(e){}if(o&&l.addEventListener("load",o),i&&l.addEventListener("error",i),u)u.appendChild(l);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(l)}}({src:f,async:!0,onload:function(){if(!function(){var e,d;return Boolean(null===(d=null===(e=window.Shopify)||void 0===e?void 0:e.analytics)||void 0===d?void 0:d.initialized)}()){var d=window.webPixelsManager.init(e)||void 0;if(d){var r=window.Shopify.analytics;r.replayQueue.forEach((function(e){var r=e[0],n=e[1],o=e[2];d.publishCustomEvent(r,n,o)})),r.replayQueue=[],r.publish=d.publishCustomEvent,r.visitor=d.visitor,r.initialized=!0}}},onerror:function(){return m.emit({status:"failed",errorMsg:"".concat(f," has failed to load")})},sri:function(e){var d=/^sha384-[A-Za-z0-9+/=]+$/;return"string"==typeof e&&d.test(e)}(c)?c:"",scriptDataAttributes:o}),m.emit({status:"loading"})}catch(e){m.emit({status:"failed",errorMsg:(null==e?void 0:e.message)||"Unknown error"})}}})({shopId: 15896833,storefrontBaseUrl: "https://outerbloom.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://monorail-edge.shopifysvc.com/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["2dca8a86"],webPixelsConfigList: [{"id":"1830486231","configuration":"{\"pixelCode\":\"CECQHERC77UA05ON51U0\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"22e92c2ad45662f435e4801458fb78cc","type":"APP","apiClientId":4383523,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"870383831","configuration":"{\"accountID\":\"outerbloom1\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"e049d423f49471962495acbe58da1904","type":"APP","apiClientId":32196493313,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"824574167","configuration":"{\"shop\":\"outerbloom1.myshopify.com\", \"backend\": \"api.bitbybit.studio\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"36fb07b4b7984e6df0ea813e1dcb19ee","type":"APP","apiClientId":28314632193,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"521994455","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-X26HYP4083\\\",\\\"AW-11020267329\\\",\\\"GT-NFDPL5Q\\\"],\\\"target_country\\\":\\\"ID\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-X26HYP4083\\\",\\\"AW-11020267329\\\/RHfSCK6og9gZEMHe74Yp\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-X26HYP4083\\\",\\\"AW-11020267329\\\/YjjSCKiog9gZEMHe74Yp\\\"]},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-X26HYP4083\\\",\\\"AW-11020267329\\\/dMv0CKWog9gZEMHe74Yp\\\",\\\"MC-HY9J2ZJTNZ\\\"]},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-X26HYP4083\\\",\\\"AW-11020267329\\\/Y2DbCJ-og9gZEMHe74Yp\\\",\\\"MC-HY9J2ZJTNZ\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-X26HYP4083\\\",\\\"AW-11020267329\\\/xwQ2CKKog9gZEMHe74Yp\\\",\\\"MC-HY9J2ZJTNZ\\\"]},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-X26HYP4083\\\",\\\"AW-11020267329\\\/i9yRCLGog9gZEMHe74Yp\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-X26HYP4083\\\",\\\"AW-11020267329\\\/T9poCKuog9gZEMHe74Yp\\\"]}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"b2a88bafab3e21179ed38636efcd8a93","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"236060887","configuration":"{\"pixel_id\":\"165971065669324\",\"pixel_type\":\"facebook_pixel\",\"metaapp_system_user_token\":\"-\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"ca16bc87fe92b6042fbaa3acc2fbdaa6","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"62947543","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["MARKETING"],"name":"Meta pixel (migrated)"},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0450","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0450","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"Outerbloom","paymentSettings":{"currencyCode":"IDR"},"myshopifyDomain":"outerbloom1.myshopify.com","countryCode":"ID","storefrontUrl":"https:\/\/outerbloom.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[{"price":{"amount":1.349.417.0,"currencyCode":"IDR"},"product":{"title":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap","vendor":"Outerbloom Hampers","id":"7881418965207","untranslatedTitle":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap","url":"\/products\/outerbloom-mulan-bag-hampers","type":"Parcel Inhouse"},"id":"45873023910103","image":{"src":"\/\/outerbloom.com\/cdn\/shop\/files\/CNY-Ruby-Mulan-Bag.jpg?v=1766041636"},"sku":"[C]ATAS4D","title":"Standard","untranslatedTitle":"Standard"},{"price":{"amount":635000.0,"currencyCode":"IDR"},"product":{"title":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap","vendor":"Outerbloom Hampers","id":"7881418965207","untranslatedTitle":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap","url":"\/products\/outerbloom-mulan-bag-hampers","type":"Parcel Inhouse"},"id":"45873024008407","image":{"src":"\/\/outerbloom.com\/cdn\/shop\/files\/CNY-Ruby-Mulan-Bag.jpg?v=1766041636"},"sku":"[C]OBIPCL1004-CNY2026","title":"Custom logo \u0026 photo for frame","untranslatedTitle":"Custom logo \u0026 photo for frame"}],"purchasingCompany":null},},"https://outerbloom.com/cdn","3c1f2529w4065d210p03530cb8m151179d6",{"modern":"","legacy":""},{"shopId":"15896833","storefrontBaseUrl":"https:\/\/outerbloom.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"2dca8a86\"]","isMerchantRequest":"false","hashVersion":"3c1f2529w4065d210p03530cb8m151179d6","publish":"custom","events":"[[\"page_viewed\",{}],[\"product_viewed\",{\"productVariant\":{\"price\":{\"amount\":1.349.417.0,\"currencyCode\":\"IDR\"},\"product\":{\"title\":\"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap\",\"vendor\":\"Outerbloom Hampers\",\"id\":\"7881418965207\",\"untranslatedTitle\":\"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap\",\"url\":\"\/products\/outerbloom-mulan-bag-hampers\",\"type\":\"Parcel Inhouse\"},\"id\":\"45873023910103\",\"image\":{\"src\":\"\/\/outerbloom.com\/cdn\/shop\/files\/CNY-Ruby-Mulan-Bag.jpg?v=1766041636\"},\"sku\":\"[C]ATAS4D\",\"title\":\"Standard\",\"untranslatedTitle\":\"Standard\"}}]]"});</script>
235<script> 236 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 237 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 238 window.ShopifyAnalytics.meta.currency = 'IDR'; 239 var meta = {"product":{"id":7881418965207,"gid":"gid:\/\/shopify\/Product\/7881418965207","vendor":"Outerbloom Hampers","type":"Parcel Inhouse","handle":"outerbloom-mulan-bag-hampers","variants":[{"id":45873023910103,"price":1.349.41700,"name":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap - Standard","public_title":"Standard","sku":"[C]ATAS4D"},{"id":45873024008407,"price":63500000,"name":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap - Custom logo \u0026 photo for frame","public_title":"Custom logo \u0026 photo for frame","sku":"[C]OBIPCL1004-CNY2026"}],"remote":false},"page":{"pageType":"product","resourceType":"product","resourceId":7881418965207,"requestId":"9772bf95-0c76-4bf8-8585-5e940331d073-1771788748"}}; 240 for (var attr in meta) { 241 window.ShopifyAnalytics.meta[attr] = meta[attr]; 242 } 243</script>
vendor: 1 bytes, line 243
243
244<script class="analytics"> 245 (function () { 246 var customDocumentWrite = function(content) { 247 var jquery = null; 248 249 if (window.jQuery) { 250 jquery = window.jQuery; 251 } else if (window.Checkout && window.Checkout.$) { 252 jquery = window.Checkout.$; 253 } 254 255 if (jquery) { 256 jquery('body').append(content); 257 } 258 }; 259 260 var hasLoggedConversion = function(token) { 261 if (token) { 262 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 263 } 264 return false; 265 } 266 267 var setCookieIfConversion = function(token) { 268 if (token) { 269 var twoMonthsFromNow = new Date(Date.now()); 270 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 271 272 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 273 } 274 } 275 276 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 277 if (trekkie.integrations) { 278 return; 279 } 280 trekkie.methods = [ 281 'identify', 282 'page', 283 'ready', 284 'track', 285 'trackForm', 286 'trackLink' 287 ]; 288 trekkie.factory = function(method) { 289 return function() { 290 var args = Array.prototype.slice.call(arguments); 291 args.unshift(method); 292 trekkie.push(args); 293 return trekkie; 294 }; 295 }; 296 for (var i = 0; i < trekkie.methods.length; i++) { 297 var key = trekkie.methods[i]; 298 trekkie[key] = trekkie.factory(key); 299 } 300 trekkie.load = function(config) { 301 trekkie.config = config || {}; 302 trekkie.config.initialDocumentCookie = document.cookie; 303 var first = document.getElementsByTagName('script')[0]; 304 var script = document.createElement('script'); 305 script.type = 'text/javascript'; 306 script.onerror = function(e) { 307 var scriptFallback = document.createElement('script'); 308 scriptFallback.type = 'text/javascript'; 309 scriptFallback.onerror = function(error) { 310 var Monorail = { 311 produce: function produce(monorailDomain, schemaId, payload) { 312 var currentMs = new Date().getTime(); 313 var event = { 314 schema_id: schemaId, 315 payload: payload, 316 metadata: { 317 event_created_at_ms: currentMs, 318 event_sent_at_ms: currentMs 319 } 320 }; 321 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 322 }, 323 sendRequest: function sendRequest(endpointUrl, payload) { 324 // Try the sendBeacon API 325 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 326 var blobData = new window.Blob([payload], { 327 type: 'text/plain' 328 }); 329 330 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 331 return true; 332 } // sendBeacon was not successful 333 334 } // XHR beacon 335 336 var xhr = new XMLHttpRequest(); 337 338 try { 339 xhr.open('POST', endpointUrl); 340 xhr.setRequestHeader('Content-Type', 'text/plain'); 341 xhr.send(payload); 342 } catch (e) { 343 console.log(e); 344 } 345 346 return false; 347 }, 348 isIos12: function isIos12() { 349 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 350 } 351 }; 352 Monorail.produce('monorail-edge.shopifysvc.com', 353 'trekkie_storefront_load_errors/1.1', 354 {shop_id: 15896833, 355 theme_id: 153139282135, 356 app_name: "storefront", 357 context_url: window.location.href, 358 source_url: "https://outerbloom.com/cdn/s/trekkie.storefront.79c9ee2a1f7d217701a15e49200b1e976848d6d6.min.js"}); 359 360 }; 361 scriptFallback.async = true; 362 scriptFallback.src = 'https://outerbloom.com/cdn/s/trekkie.storefront.79c9ee2a1f7d217701a15e49200b1e976848d6d6.min.js'; 363 first.parentNode.insertBefore(scriptFallback, first); 364 }; 365 script.async = true; 366 script.src = 'https://outerbloom.com/cdn/s/trekkie.storefront.79c9ee2a1f7d217701a15e49200b1e976848d6d6.min.js'; 367 first.parentNode.insertBefore(script, first); 368 }; 369 trekkie.load( 370 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":15896833,"isMerchantRequest":null,"themeId":153139282135,"themeCityHash":"11250444734202683250","contentLanguage":"en","currency":"IDR","eventMetadataId":"c815f750-2e2f-45fc-a32a-af43a1e585c4"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["65f
37019447","b5387b81"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 371 ); 372 373 var loaded = false; 374 trekkie.ready(function() { 375 if (loaded) return; 376 loaded = true; 377 378 window.ShopifyAnalytics.lib = window.trekkie; 379 380 var originalDocumentWrite = document.write; 381 document.write = customDocumentWrite; 382 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 383 document.write = originalDocumentWrite; 384 385 window.ShopifyAnalytics.lib.page(null,{"pageType":"product","resourceType":"product","resourceId":7881418965207,"requestId":"9772bf95-0c76-4bf8-8585-5e940331d073-1771788748","shopifyEmitted":true}); 386 387 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 388 var token = match? match[1]: undefined; 389 if (!hasLoggedConversion(token)) { 390 setCookieIfConversion(token); 391 window.ShopifyAnalytics.lib.track("Viewed Product",{"currency":"IDR","variantId":45873023910103,"productId":7881418965207,"productGid":"gid:\/\/shopify\/Product\/7881418965207","name":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap - Standard","price":"1.349.417.00","sku":"[C]ATAS4D","brand":"Outerbloom Hampers","variant":"Standard","category":"Parcel Inhouse","nonInteraction":true,"remote":false},undefined,undefined,{"shopifyEmitted":true}); 392 window.ShopifyAnalytics.lib.track("monorail:\/\/trekkie_storefront_viewed_product\/1.1",{"currency":"IDR","variantId":45873023910103,"productId":7881418965207,"productGid":"gid:\/\/shopify\/Product\/7881418965207","name":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap - Standard","price":"1.349.417.00","sku":"[C]ATAS4D","brand":"Outerbloom Hampers","variant":"Standard","category":"Parcel Inhouse","nonInteraction":true,"remote":false,"referer":"https:\/\/outerbloom.com\/products\/outerbloom-mulan-bag-hampers"}); 393 } 394 }); 395 396 397 var eventsListenerScript = document.createElement('script'); 398 eventsListenerScript.async = true; 399 eventsListenerScript.src = "https://outerbloom.com/cdn/shopifycloud/storefront/assets/shop_events_listener-3da45d37.js"; 400 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 401 402})();</script>
402 403
403<script> 404 if (!window.ga || (window.ga && typeof window.ga !== 'function')) { 405 window.ga = function ga() { 406 (window.ga.q = window.ga.q || []).push(arguments); 407 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 408 window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"}); 409 } 410 console.error("Shopify's Google Analytics stub called with:", Array.from(arguments), "\nSee https://help.shopify.com/manual/promoting-marketing/pixels/pixel-migration#google for more information."); 411 }; 412 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 413 window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"}); 414 } 415 } 416</script>
vendor: 1 bytes, line 416
416
417<script 418 defer 419 src="https://outerbloom.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.1.0.min.js" 420 data-application="storefront-renderer" 421 data-shop-id="15896833" 422 data-render-region="gcp-asia-southeast1" 423 data-page-type="product" 424 data-theme-instance-id="153139282135" 425 data-theme-name="" 426 data-theme-version="" 427 data-monorail-region="shop_domain" 428 data-resource-timing-sampling-rate="10" 429 data-shs="true" 430 data-shs-beacon="true" 431 data-shs-export-with-fetch="true" 432 data-shs-logs-sample-rate="1" 433 data-shs-beacon-endpoint="https://outerbloom.com/api/collect" 434></script>
434 435</head> 436<body 437 data-template="product" 438 id="cny-ruby-mulan-bag-hampers" 439 class="template-product template-product" 440 > 441<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 441-442
441 442<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
442GTM-5QZQDHNB
vendor: 83 bytes, lines 442-443
442" 443height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
444<!-- End Google Tag Manager (noscript) --> 445 <div class="header-wrapper"> 446 447 <div id="shopify-section-NotifBar" class="shopify-section m-0"> 448<style> 449 :root {--topbar-bg: #212121;} 450 #notification {z-index: 99;width: 100%;transition: top 0.2s ease-in-out;} 451 #notification.promo-up {top: -48px!important;} 452 .promo-bg {width: 100%;padding: 6px 0;background-color: #212121;} 453 .notification__message p {margin: 0;color: #ffffff;font-size: 14px!important;} 454 .notification__message p a {text-decoration: underline;color: #ffffff;} 455 @media (max-width: 991px){ 456 .notification__message p {font-size: 14px!important;} 457 } 458</style> 459<input id="clearCookie" class="hide" type="button" value="Delete Cookie" /> 460<div id="notification" class="promo-down promo-bg pl-2 pr-2" data-text="whether-its-cny-or-ramadan-celebrate-your-special-occasion-with-our-exclusively-curated-hampers"> 461 <div class="page-width notification__inner "> 462 463 464 <div class="notification__message text-center"> 465 <p><a href="https://atas4d.biz/" title="Parcel">ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap</a></p> 466 </div> 467 </div> 468</div> 469 470 471 472 473</div> 474 <div id="shopify-section-new-header" class="shopify-section mb-0 mt-0"><link href="https://outerbloom.com/cdn/shop/t/138/assets/section-new-header.css?v=90475746808702572881770794809" rel="stylesheet" type="text/css" media="all" /> 475 476 477<header> 478 <div class="container"> 479 <div class="header-container row justify-content-between pl-lg-0 pr-lg-0"> 480 <div class="header-icons header-icon-left col-3"> 481 <div id="menu-hamburger" class="d-lg-none"> 482 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="10" viewBox="0 0 16 10" fill="none"> 483 <path d="M15.5995 0.949976H0.400342C0.320777 0.949976 0.244471 0.918369 0.18821 0.862108C0.131949 0.805847 0.100342 0.729541 0.100342 0.649976C0.100342 0.570411 0.131949 0.494104 0.18821 0.437843C0.244471 0.381582 0.320777 0.349976 0.400342 0.349976H15.5995C15.6791 0.349976 15.7554 0.381582 15.8117 0.437843C15.8679 0.494104 15.8995 0.570411 15.8995 0.649976C15.8995 0.729541 15.8679 0.805847 15.8117 0.862108C15.7554 0.918369 15.6791 0.949976 15.5995 0.949976ZM15.5995 5.29998H0.400342C0.320777 5.29998 0.244471 5.26837 0.18821 5.21211C0.131949 5.15585 0.100342 5.07954 0.100342 4.99998C0.100342 4.92041 0.131949 4.8441 0.18821 4.78784C0.244471 4.73158 0.320777 4.69998 0.400342 4.69998H15.5995C15.6791 4.69998 15.7554 4.73158 15.8117 4.78784C15.8679 4.8441 15.8995 4.92041 15.8995 4.99998C15.8995 5.07954 15.8679 5.15585 15.8117 5.21211C15.7554 5.26837 15.6791 5.29998 15.5995 5.29998ZM15.5995 9.64998H0.400342C0.320777 9.64998 0.244471 9.61837 0.18821 9.56211C0.131949 9.50585 0.100342 9.42954 0.100342 9.34998C0.100342 9.27041 0.131949 9.1941 0.18821 9.13784C0.244471 9.08158 0.320777 9.04998 0.400342 9.04998H15.5995C15.6791 9.04998 15.7554 9.08158 15.8117 9.13784C15.8679 9.1941 15.8995 9.27041 15.8995 9.34998C15.8995 9.42954 15.8679 9.50585 15.8117 9.56211C15.7554 9.61837 15.6791 9.64998 15.5995 9.64998Z" fill="#212121"/> 484</svg> 485 486 </div> 487 <div id="" class="search-icon"> 488 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"> 489 <path d="M18.7327 19.513L11.427 12.2073C10.8437 12.7043 10.1729 13.0889 9.41454 13.3612C8.65621 13.6334 7.89398 13.7695 7.12787 13.7695C5.25965 13.7695 3.67843 13.1228 2.3842 11.8293C1.08998 10.5359 0.442871 8.95505 0.442871 7.08683C0.442871 5.2186 1.0892 3.63699 2.38187 2.34199C3.67454 1.04699 5.25498 0.398714 7.12321 0.397159C8.99143 0.395603 10.5734 1.04271 11.8692 2.33849C13.165 3.63427 13.8129 5.21588 13.8129 7.08333C13.8129 7.89377 13.6694 8.67816 13.3824 9.43649C13.0954 10.1948 12.7182 10.8435 12.2507 11.3825L19.5564 18.687L18.7327 19.513ZM7.12904 12.6017C8.67682 12.6017 9.98348 12.0689 11.049 11.0033C12.1146 9.93777 12.6474 8.63071 12.6474 7.08216C12.6474 5.5336 12.1146 4.22694 11.049 3.16216C9.98348 2.09738 8.67682 1.5646 7.12904 1.56383C5.58126 1.56305 4.2742 2.09583 3.20787 3.16216C2.14154 4.22849 1.60876 5.53516 1.60954 7.08216C1.61032 8.62916 2.14309 9.93583 3.20787 11.0022C4.27265 12.0685 5.57932 12.6013 7.12787 12.6005" fill="#212121"/> 490</svg> 491 492 </div> 493 </div> 494 495 <div class="logo col-6 text-center"> 496 <h1 class="hide hidden"><img src="https://atas4d.biz/images/logo-atas4d.webp" alt="ATAS4D" style="height:60px; width:140px;"></h1> 497 <a href="https://atas4d.biz/"><img src="https://atas4d.biz/images/logo-atas4d.webp" alt="ATAS4D" style="height:60px; width:140px;"> 498 </a> 499 </div> 500 501 <div class="header-icon-right header-icons col-3"> 502 <div class="icon icon-account-header d-none d-lg-block"> 503 <a href="https://biz.platformatas4d.eu.com/game/"> 504 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="21" viewBox="0 0 20 21" fill="none"> 505 <path d="M19.015 19.8549C18.4842 18.3662 17.3117 17.0514 15.6819 16.1134C14.052 15.1754 12.0547 14.6667 10.0002 14.6667C7.94569 14.6667 5.94835 15.1754 4.31852 16.1134C2.68869 17.0514 1.51618 18.3662 0.985352 19.8549" stroke="#212121" stroke-linecap="round"/> 506 <path d="M10.0002 10C12.5775 10 14.6668 7.91068 14.6668 5.33335C14.6668 2.75602 12.5775 0.666687 10.0002 0.666687C7.42283 0.666687 5.3335 2.75602 5.3335 5.33335C5.3335 7.91068 7.42283 10 10.0002 10Z" stroke="#212121" stroke-linecap="round"/> 507</svg> 508 509 </a> 510 </div> 511 <div class="icon icon-wishlist-header"> 512 <a href="https://biz.platformatas4d.eu.com/game/"> 513 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none"> 514 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.072
5146 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125ZM12 19.9991C10.4688 19.1241 1.0625 13.5077 1.0625 7.15625C1.06424 5.70638 1.64096 4.31639 2.66618 3.29118C3.69139 2.26596 5.08138 1.68924 6.53125 1.6875C8.84016 1.6875 10.7805 2.92453 11.5953 4.91516C11.6283 4.9954 11.6843 5.06403 11.7564 5.11233C11.8285 5.16063 11.9133 5.18642 12 5.18642C12.0867 5.18642 12.1715 5.16063 12.2436 5.11233C12.3157 5.06403 12.3717 4.9954 12.4047 4.91516C13.2195 2.92453 15.1598 1.6875 17.4688 1.6875C18.9186 1.68924 20.3086 2.26596 21.3338 3.29118C22.359 4.31639 22.9358 5.70638 22.9375 7.15625C22.9375 13.5 13.5312 19.1284 12 19.9991Z" fill="#212121"/> 515</svg> 516 517 518 </a> 519 </div> 520 <div class="icon icon-cart-header"> 521 <a href="https://biz.platformatas4d.eu.com/game/"> 522 <svg xmlns="http://www.w3.org/2000/svg" width="22" height="21" viewBox="0 0 22 21" fill="none"> 523 <path d="M6.33301 10V5.33335C6.33301 4.09568 6.82467 2.90869 7.69984 2.03352C8.57501 1.15835 9.762 0.666687 10.9997 0.666687C12.2374 0.666687 13.4243 1.15835 14.2995 2.03352C15.1747 2.90869 15.6663 4.09568 15.6663 5.33335V10" stroke="#212121" stroke-linecap="round"/> 524 <path d="M1.30956 10.7793C1.47873 8.74817 1.56389 7.73317 2.23356 7.116C2.90323 6.49883 3.92289 6.5 5.96106 6.5H16.0399C18.0769 6.5 19.0966 6.5 19.7662 7.116C20.4359 7.732 20.5211 8.74817 20.6902 10.7793L21.2899 17.973C21.3879 19.1548 21.4369 19.7463 21.0916 20.1232C20.7439 20.5 20.1512 20.5 18.9636 20.5H3.03623C1.84973 20.5 1.25589 20.5 0.909392 20.1232C0.562892 19.7463 0.611892 19.1548 0.711059 17.973L1.30956 10.7793Z" stroke="#212121"/> 525</svg> 526 527 <span class="cart-count">0</span> 528 </a> 529 </div> 530 </div> 531 </div> 532 </div> 533</header> 534 535<nav class="nav-header"> 536 <div class="nav-account-mobile row m-0 d-lg-none"> 537 <div class="col-6 welcome-cust p-0"> 538 539 ATAS4D 540 541 </div> 542 543 <div class="col-6 login-register text-right p-0"> 544 <a href="https://biz.platformatas4d.eu.com/game/">Log In</a> | <a href="https://biz.platformatas4d.eu.com/game/">Sign Up</a> 545 </div> 546 547 </div> 548 <ul class="nav-menu container"> 549 550 <li id="new-arrival" class=""> 551 <a href="https://atas4d.biz/"> 552 <span>ATAS4D</span> 553 554 </a> 555 556 </li> 557 558 <li id="flowers" class=" has-child"> 559 <a href="https://atas4d.biz/"> 560 <span>ATAS 4D</span> 561 562 <span class="chevron-right d-lg-none"> 563 <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> 564 <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 565 </svg> 566 </span> 567 568 </a> 569 570 571 <li id="cakes-gifts" class=" has-child"> 572 <a href="https://atas4d.biz/"> 573 <span>ATAS4D LOGIN</span> 574 575 <span class="chevron-right d-lg-none"> 576 <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> 577 <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 578 </svg> 579 </span> 580 581 </a> 582 583 584 <li id="bunga-papan" class=" has-child"> 585 <a href="https://atas4d.biz/"> 586 <span>GAME ATAS4D</span> 587 588 <span class="chevron-right d-lg-none"> 589 <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> 590 <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 591 </svg> 592 </span> 593 594 </a> 595 596 597 <li id="occasions" class=" has-child"> 598 <a href="https://atas4d.biz/"> 599 <span>ATAS4D TERBAIK</span> 600 601 <span class="chevron-right d-lg-none"> 602 <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> 603 <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 604 </svg> 605 </span> 606 607 </a> 608 609 610 <li id="locations" class=" has-child"> 611 <a href="https://atas4d.biz/">
612 <span>ATAS4D RESMI</span> 613 614 <span class="chevron-right d-lg-none"> 615 <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> 616 <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 617 </svg> 618 </span> 619 620 </a> 621 </div> 622 </div> 623 624 </li> 625 626 </ul> 627</nav> 628<div class="overlay-nav"> 629 <!-- Mobile Close Button in Overlay --> 630 <button id="nav-close" class="nav-close-btn d-lg-none"> 631 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 632 <path d="M18 6L6 18M6 6L18 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 633 </svg> 634 </button> 635</div> 636
637<script> 638 if ($(window).width() < 992) { 639 // Level 1 menu accordion (main menu items) 640 $(".nav-menu .has-child > a").click(function(e){ 641 e.preventDefault() 642 const parentLi = $(this).parent() 643 const isCurrentlyOpen = parentLi.hasClass("menu-open") 644 645 // Close all other open menus (accordion behavior) 646 $(".nav-menu .has-child").not(parentLi).removeClass("menu-open") 647 $(".nav-menu .megamenu").not($(this).next(".megamenu")).slideUp() 648 649 // Toggle current menu 650 if (isCurrentlyOpen) { 651 parentLi.removeClass("menu-open") 652 $(this).next(".megamenu").slideUp() 653 } else { 654 parentLi.addClass("menu-open") 655 $(this).next(".megamenu").slideDown() 656 } 657 }) 658 659 // Level 2 menu accordion (submenu items with grandchildren) 660 $(document).on('click', '.dropdown-menu .has-submenu > a', function(e){ 661 e.preventDefault() 662 const parentLi = $(this).parent() 663 const isCurrentlyOpen = parentLi.hasClass("submenu-open") 664 const grandchild = $(this).next(".grandchild") 665 666 // Close all other open submenus in the same dropdown (accordion behavior) 667 parentLi.siblings('.has-submenu').removeClass("submenu-open") 668 parentLi.siblings('.has-submenu').find('.grandchild').slideUp() 669 parentLi.siblings('.has-submenu').find('.chevron-right').css('transform', 'rotate(0deg)') 670 671 // Toggle current submenu 672 if (isCurrentlyOpen) { 673 parentLi.removeClass("submenu-open") 674 grandchild.slideUp() 675 $(this).find('.chevron-right').css('transform', 'rotate(0deg)') 676 } else { 677 parentLi.addClass("submenu-open") 678 grandchild.slideDown() 679 $(this).find('.chevron-right').css('transform', 'rotate(90deg)') 680 } 681 }) 682 683 $("#menu-hamburger").click(function(e){ 684 e.preventDefault() 685 $("body").toggleClass("nav_open") 686 }) 687 688 // Handle close button click 689 $("#nav-close").click(function(e){ 690 e.preventDefault() 691 $("body").removeClass("nav_open") 692 // Close all open menus when close button is clicked 693 $(".nav-menu .has-child").removeClass("menu-open") 694 $(".nav-menu .megamenu").slideUp() 695 $(".dropdown-menu .has-submenu").removeClass("submenu-open") 696 $(".dropdown-menu .grandchild").slideUp() 697 $(".dropdown-menu .chevron-right").css('transform', 'rotate(0deg)') 698 }) 699 } 700 701 $(".overlay-nav").click(function(e){ 702 e.preventDefault() 703 $("body").removeClass("nav_open") 704 // Close all open menus when overlay is clicked 705 $(".nav-menu .has-child").removeClass("menu-open") 706 $(".nav-menu .megamenu").slideUp() 707 $(".dropdown-menu .has-submenu").removeClass("submenu-open") 708 $(".dropdown-menu .grandchild").slideUp() 709 $(".dropdown-menu .chevron-right").css('transform', 'rotate(0deg)') 710 }) 711 712 // Update cart count 713 function updateCartCount() { 714 fetch('/cart.js') 715 .then(response => response.json()) 716 .then(cart => { 717 const cartCount = cart.item_count; 718 const cartCountEl = $('.cart-count'); 719 720 if (cartCount > 0) { 721 cartCountEl.text(cartCount).show(); 722 } else { 723 cartCountEl.hide(); 724 } 725 }) 726 .catch(error => console.error('Error fetching cart:', error)); 727 } 728 729 // Initialize cart count on page load 730 $(document).ready(function() { 731 updateCartCount(); 732 733 // Listen for cart changes 734 document.addEventListener('cart-updated', updateCartCount); 735 }); 736</script>
736 737 738 739</div> 740 741 <div id="shopify-section-search-popup" class="shopify-section m-0"><style> 742 #search-trigger { 743 cursor: pointer; 744 } 745 #search-popup { 746 display: none; 747 position: fixed; 748 left: 0; 749 width: 100%; 750 top: 0; 751 height: 100%; 752 justify-content: center; 753 z-index: 9999; 754 background: rgb(196 196 196 / 30%); 755 } 756 #search-input { 757 align-self: center; 758 width: 100%; 759 height: 80px; 760 position: absolute; 761 top: 0; 762 border-bottom: 0.5px solid #A3A3A3; 763 background-color: #fff; 764 } 765 #search-input * { 766 align-self: center; 767 } 768 #search-type { 769 width: 100%; 770 border: none; 771 padding-right: 20px; 772 padding-left: 20px; 773 font-size: 16px; 774 color: #757575; 775 } 776 #search-btn { 777 font-size: 16px; 778 font-weight: 500; 779 } 780 #search-result { 781 background-color: #fff; 782 min-height: 490px; 783 width: 100%; 784 padding-top: 80px; 785 } 786 #search-result .container { 787 padding: 20px 40px; 788 } 789 body.search-popup-open { 790 overflow: hidden; 791 } 792 .search-popup-open #loc_delivery { 793 display: none 794 } 795 .search-header svg { 796 display: none; 797 cursor: pointer; 798 } 799 .wrapper-search-popup { 800 max-height: calc(100vh - 150px); 801 overflow-y: auto; 802 overflow-x: hidden; 803 } 804 805 .group-recommend { 806 padding: 20px 40px; 807 } 808 809 .resultsearch { 810 display: none; 811 } 812 .results { padding: 20px 40px } 813 .resultsearch label { 814 font-weight: 600; 815 padding-bottom: 20px; 816 display: block; 817 margin-bottom: 20px; 818 border-bottom: 1px solid #AAAAAA; 819 } 820 821 ul.result_collection { 822 overflow: auto; 823 } 824 825 .skeleton-loader { 826 padding: 10px 0; 827 } 828 829 .skeleton-item { 830 height: 20px; 831 background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); 832 background-size: 200% 100%; 833 animation: loading 1.5s infinite; 834 margin-bottom: 12px; 835 border-radius: 4px; 836 } 837 838 .skeleton-product-card { 839 display: flex; 840 flex-direction: column; 841 margin-bottom: 15px; 842 } 843 844 .skeleton-product-image { 845 width: 100%; 846 aspect-ratio: 1; 847 background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); 848 background-size: 200% 100%; 849 animation: loading 1.5s infinite; 850 border-radius: 4px; 851 margin-bottom: 10px; 852 } 853 854 .skeleton-product-title { 855 height: 16px; 856 background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); 857 background-size: 200% 100%; 858 animation: loading 1.5s infinite; 859 border-radius: 4px; 860 margin-bottom: 8px; 861 } 862 863 .skeleton-product-price { 864 height: 14px; 865 width: 60%; 866 background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); 867 background-size: 200% 100%; 868 animation: loading 1.5s infinite; 869 border-radius: 4px; 870 } 871 872 @keyframes loading { 873 0% { 874 background-position: 200% 0; 875 } 876 100% { 877 background-position: -200% 0; 878 } 879 } 880 881 ul.result_product { 882 max-height: 400px; 883 overflow: auto; 884 list-style: none; 885 padding: 0; 886 display: grid; 887 grid-template-columns: repeat(2, 1fr); 888 gap: 15px; 889 } 890 891 ul.result_product li.item { 892 margin-bottom: 0; 893 } 894 895 ul.result_product .item_url { 896 display: block; 897 text-decoration: none; 898 color: inherit; 899 } 900 901 ul.result_product .product-card-search { 902 display: flex; 903 flex-direction: row; 904 height: 100%; 905 text-transform: uppercase; 906 text-align: left; 907 gap: 12px; 908 } 909 910 ul.result_product .product-image-search { 911 width: 100px; 912 height: 100px; 913 flex-shrink: 0; 914 object-fit: cover; 915 } 916 917 ul.result_product .product-info-search { 918 display: flex; 919 flex-direction: column; 920 justify-content: center; 921 flex: 1; 922 } 923 924 ul.result_product .product-title-search { 925 font-size: 14px; 926 line-height: 1.4; 927 margin-bottom: 8px; 928 overflow: hidden; 929 text-overflow: ellipsis; 930 display: -webkit-box; 931 -webkit-line-clamp: 2; 932 -webkit-box-orient: vertical; 933 } 934 935 ul.result_product .product-price-search { 936 font-size: 13px; 937 color: #666; 938 font-weight: 500; 939 } 940 941 .group-promotion ul { 942 margin: 0; 943 } 944 .group-promotion li { 945 list-style: none; 946 margin-bottom: 12px; 947 } 948 .group-promotion li a { 949 color: inherit; 950 } 951 952 .group-recent { 953 position: relative; 954 padding: 20px 40px; 955 } 956 .group-recent ul { 957 margin: 0; 958 } 959 .group-recent li { 960 list-style: none; 961 display: inline-block; 962 margin-right: 60px; 963 } 964 .group-recent li a { 965 color: inherit; 966 } 967 968 .last-search svg {
969 width: 20px; 970 vertical-align: middle; 971 } 972 ul.last-search a { 973 vertical-align: middle; 974 padding: 0 10px; 975 } 976 ul.last-search li span { 977 cursor: pointer; 978 } 979 .delete-all-history { 980 position: absolute; 981 top: 25px; 982 right: 40px; 983 text-decoration: underline; 984 color: #e11d1d; 985 cursor: pointer; 986 font-size: 12px; 987 } 988 989 form.search.search-modal__form { 990 position: relative; 991 } 992 993 button.search__button svg { 994 width: 25px; 995 color: #495057; 996 fill: #757582; 997 } 998 999 button.search__button.field__button { 1000 position: absolute; 1001 top: 50%; 1002 margin-top: -12px; 1003 } 1004 1005 .close-search { 1006 display: none; 1007 position: absolute; 1008 right: 65px; 1009 top: 10px; 1010 cursor: pointer; 1011 } 1012 1013 .site-overlay { 1014 position: fixed; 1015 top: 0; 1016 width: 100vw; 1017 height: 100vh; 1018 z-index: 1000; 1019 background: #0000005c; 1020 visibility: hidden; 1021 opacity: 0; 1022 pointer-events: none; 1023 transition: all .3s linear; 1024 display: block !important; 1025 } 1026 1027 .search-popup-open .site-overlay { 1028 opacity: 1; 1029 visibility: visible; 1030 pointer-events: all; 1031 z-index: -1; 1032 cursor: pointer; 1033 } 1034 1035 @media (min-width: 991px) { 1036 .group-recent ul { 1037 column-count: 3; 1038 } 1039 .group-promotion li a { 1040 font-size: 12px; 1041 font-weight: 400; 1042 } 1043 .group-recent li a { 1044 font-size: 12px; 1045 font-weight: 400; 1046 } 1047 ul.result_product { 1048 grid-template-columns: repeat(3, 1fr); 1049 gap: 20px; 1050 } 1051 } 1052 1053 .moreresult { 1054 padding: 10px 40px; 1055 border-top: 1px solid #AAAAAA; 1056 } 1057 .moreresult * { 1058 align-self: center; 1059 } 1060 .moreresult p { 1061 margin: 0; 1062 font-size: 12px !important; 1063 } 1064 .moreresult svg { 1065 width: 13px; 1066 } 1067 1068 @media (max-width: 992px) { 1069 .icon-key-mobile { 1070 height: auto!important; 1071 width: 10px!important; 1072 } 1073 body.grid-view.search-popup-open .products { 1074 -ms-flex: 0 0 100%!important; 1075 flex: 0 0 100%!important; 1076 max-width: 100%!important; 1077 } 1078 button.search__button svg { 1079 width: 20px; 1080 } 1081 #search-result { 1082 padding-left: 0; 1083 padding-right: 0; 1084 } 1085 #search-result { 1086 padding-top: 55px; 1087 } 1088 #search-input { 1089 height: 55px; 1090 } 1091 .group-recommend { 1092 padding: 20px; 1093 } 1094 1095 #search-type, #search-btn { 1096 font-size: 12px; 1097 } 1098 #search-input { 1099 height: 40px; 1100 } 1101 #search-result { 1102 padding-top: 40px; 1103 } 1104 .close-search { 1105 right: 50px; 1106 top: 6px; 1107 } 1108 #search-input svg { 1109 width: 15px; 1110 } 1111 .result_product li a { 1112 font-size: 12px; 1113 } 1114 ul.result_product li img { 1115 width: 110px !important; 1116 } 1117 .resultsearch label { 1118 font-size: 14px; 1119 margin-bottom: 15px; 1120 padding-bottom: 15px; 1121 } 1122 #search-input .container { 1123 padding: 0 20px; 1124 } 1125 #search-type { 1126 font-size: 14px; 1127 } 1128 #search-btn { 1129 font-size: 12px; 1130 text-decoration: underline; 1131 } 1132 .results { 1133 padding: 15px; 1134 } 1135 .group-recommend h3 { 1136 font-size: 16px; 1137 } 1138 .products .card-body { 1139 padding: 8px 0px 10px; 1140 } 1141 .moreresult { 1142 padding: 10px 20px; 1143 } 1144 ul.result_product { 1145 grid-template-columns: repeat(1, 1fr); 1146 gap: 10px; 1147 } 1148 ul.result_product .product-image-search { 1149 width: 80px; 1150 height: 80px; 1151 } 1152 ul.result_product .product-card-search { 1153 gap: 10px; 1154 } 1155 ul.result_product .product-title-search { 1156 font-size: 12px; 1157 margin-bottom: 6px; 1158 } 1159 ul.result_product .product-price-search { 1160 font-size: 11px; 1161 } 1162 .group-promotion li a { 1163 font-size: 14px; 1164 } 1165 ul.result_collection { 1166 max-height: 200px; 1167 } 1168 } 1169</style> 1170<div id="search-popup"> 1171 <div id="search-input" class="row"> 1172 <div class="container w-100"> 1173 <form 1174 action="/search" 1175 method="get" 1176 role="search" 1177 class="search search-modal__form d-flex justify-content-between" 1178 > 1179 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"> 1180 <path d="M18.7327 19.513L11.427 12.2073C10.8437 12.7043 10.1729 13.0889 9.41454 13.3612C8.65621 13.6334 7.89398 13.7695 7.12787 13.7695C5.25965 13.7695 3.67843 13.1228 2.3842 11.8293C1.08998 10.5359 0.442871 8.95505 0.442871 7.08683C0.442871 5.2186 1.0892 3.63699 2.38187 2.34199C3.67454 1.04699 5.25498 0.398714 7.12321 0.397159C8.99143 0.395603 10.5734 1.04271 11.8692 2.33849C13.165 3.63427 13.8129 5.21588 13.8129 7.08333C13.8129 7.89377 13.6694 8.67816 13.3824 9.43649C13.0954 10.1948 12.7182 10.8435 12.2507 11.3825L19.5564 18.687L18.7327 19.513ZM7.12904 12.6017C8.67682 12.6017 9.98348 12.0689 11.049 11.0033C12.1146 9.93777 12.6474 8.63071 12.6474 7.08216C12.6474 5.5336 12.1146 4.22694 11.049 3.16216C9.98348 2.09738 8.67682 1.5646 7.12904 1.56383C5.58126 1.56305 4.2742 2.09583 3.20787 3.16216C2.14154 4.22849 1.60876 5.53516 1.60954 7.08216C1.61032 8.62916 2.14309 9.93583 3.20787 11.0022C4.27265 12.0685 5.57932 12.6013 7.12787 12.6005" fill="#212121"/> 1181</svg> 1182 1183 <input type="hidden" name="type" value="product"> 1184 <input 1185 type="text" 1186 id="search-type" 1187 name="q" 1188 class="search-popup" 1189 placeholder="Gifts that linger: Uncover treasures for cherished moments." 1190 > 1191 <div class="close-search"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none"> 1192 <path d="M9 9.708L12.246 12.954C12.3393 13.0473 12.454 13.0973 12.59 13.104C12.726 13.1107 12.8473 13.0607 12.954 12.954C13.0607 12.8473 13.114 12.7293 13.114 12.6C13.114 12.4707 13.0607 12.3527 12.954 12.246L9.708 9L12.954 5.754C13.0473 5.66067 13.0973 5.546 13.104 5.41C13.1107 5.274 13.0607 5.15267 12.954 5.046C12.8473 4.93933 12.7293 4.886 12.6 4.886C12.4707 4.886 12.3527 4.93933 12.246 5.046L9 8.292L5.754 5.046C5.66067 4.95267 5.546 4.90267 5.41 4.896C5.274 4.88933 5.15267 4.93933 5.046 5.046C4.93933 5.15267 4.886 5.27067 4.886 5.4C4.886 5.52933 4.93933 5.64733 5.046 5.754L8.292 9L5.046 12.246C4.95267 12.3393 4.90267 12.4543 4.896 12.591C4.88933 12.7263 4.93933 12.8473 5.046 12.954C5.15267 13.0607 5.27067 13.114 5.4 13.114C5.52933 13.114 5.64733 13.0607 5.754 12.954L9 9.708ZM9.003 18C7.75833 18 6.58833 17.764 5.493 17.292C4.39767 16.8193 3.44467 16.178 2.634 15.368C1.82333 14.558 1.18167 13.606 0.709 12.512C0.236333 11.418 0 10.2483 0 9.003C0 7.75767 0.236333 6.58767 0.709 5.493C1.181 4.39767 1.82133 3.44467 2.63 2.634C3.43867 1.82333 4.391 1.18167 5.487 0.709C6.583 0.236333 7.753 0 8.997 0C10.241 0 11.411 0.236333 12.507 0.709C13.6023 1.181 14.5553 1.82167 15.366 2.631C16.1767 3.44033 16.8183 4.39267 17.291 5.488C17.7637 6.58333 18 7.753 18 8.997C18 10.241 17.764 11.411 17.292
119212.507C16.82 13.603 16.1787 14.556 15.368 15.366C14.5573 16.176 13.6053 16.8177 12.512 17.291C11.4187 17.7643 10.249 18.0007 9.003 18ZM9 17C11.2333 17 13.125 16.225 14.675 14.675C16.225 13.125 17 11.2333 17 9C17 6.76667 16.225 4.875 14.675 3.325C13.125 1.775 11.2333 1 9 1C6.76667 1 4.875 1.775 3.325 3.325C1.775 4.875 1 6.76667 1 9C1 11.2333 1.775 13.125 3.325 14.675C4.875 16.225 6.76667 17 9 17Z" fill="#757575"/> 1193</svg> 1194</div> 1195 <button id="search-btn">Search</button> 1196 </form> 1197 </div> 1198 </div> 1199 <div id="search-result" class="m-auto"> 1200 <div class="container p-0"> 1201 <div class="group-promotion"> 1202 <div class="resultsearch"> 1203 <div class="row results"> 1204 <div class="col-12 col-lg-3 mb-3 mb-lg-0"> 1205 <label>SUGGESTIONS</label> 1206 <ul class="result_collection"></ul> 1207 </div> 1208 <div class="col-12 col-lg-9"> 1209 <label>PRODUCTS</label> 1210 <ul class="result_product"></ul> 1211 </div> 1212 </div> 1213 <div class="d-flex moreresult m-0"> 1214 <p>Search for<span></span></p> 1215 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 1216<title>icon-arrow-right</title> 1217<path d="M25.057 15.333l-6.862-6.862c-0.26-0.26-0.26-0.682 0-0.943s0.682-0.26 0.943 0l8 8c0.26 0.26 0.26 0.682 0 0.943l-8 8c-0.26 0.26-0.682 0.26-0.943 0s-0.26-0.682 0-0.943l6.862-6.862h-19.724c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h19.724z"></path> 1218</svg> 1219 </div> 1220 </div> 1221 </div> 1222 <div class="group-recent hide"> 1223 <h3>RECENT SEARCH</h3> 1224 <span class="delete-all-history">Hapus riwayat</span> 1225 <ul class="last-search"></ul> 1226 </div> 1227 <div class="group-recommend"> 1228 <h3>YOU MAY ALSO LIKE</h3> 1229 1230 1231 <div class="row popup-recommend c-products-grid infinite-case product-multi-"> 1232 <div class="swiper-wrapper justify-content-between" style="margin-left:1px;"> 1233 1234 1235 <div class="swiper-slide card"> 1236 1237 1238 1239 1240<div class="products" data-lazy="false"> 1241 <div class="bg-products"> 1242 <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-the-jam-that-stole-breakfast"> 1243 <div class="wishlist-icon-wrapper"> 1244 <svg class="wishlist-icon-outline" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:block;"> 1245 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125ZM12 19.9991C10.4688 19.1241 1.0625 13.5077 1.0625 7.15625C1.06424 5.70638 1.64096 4.31639 2.66618 3.29118C3.69139 2.26596 5.08138 1.68924 6.53125 1.6875C8.84016 1.6875 10.7805 2.92453 11.5953 4.91516C11.6283 4.9954 11.6843 5.06403 11.7564 5.
124511233C11.8285 5.16063 11.9133 5.18642 12 5.18642C12.0867 5.18642 12.1715 5.16063 12.2436 5.11233C12.3157 5.06403 12.3717 4.9954 12.4047 4.91516C13.2195 2.92453 15.1598 1.6875 17.4688 1.6875C18.9186 1.68924 20.3086 2.26596 21.3338 3.29118C22.359 4.31639 22.9358 5.70638 22.9375 7.15625C22.9375 13.5 13.5312 19.1284 12 19.9991Z" fill="#212121"/> 1246 </svg> 1247 <svg class="wishlist-icon-filled" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:none;"> 1248 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125Z" fill="#640000"/> 1249 </svg> 1250</div> 1251 </button> 1252 <a href="/products/nibbl-the-jam-that-stole-breakfast"> 1253 1254 <div class="product-card-img-container p-0 position-relative"> 1255 1256 <img class="product-card-img" lazy="false" src="https://outerbloom.com/cdn/shop/files/The-Jam-That-Stole-Breakfast_350x.jpg?v=1761737780" data-src="https://outerbloom.com/cdn/shop/files/The-Jam-That-Stole-Breakfast_350x.jpg?v=1761737780" alt="Nibbl The Jam That Stole Breakfast" height="200" width="200"> 1257 1258 </div> 1259 <div class="card-body product-card-info"> 1260 <h5 class="h5 mb-0"> 1261 Nibbl The Jam That Stole Breakfast 1262 </h5> 1263 <div class="product-card-price"> 1264 1265 <div class="product-price-sale"> 1266 <s class="product-card-price-before card-money">Rp 155.000</s> 1267 <span class="product-card-discount small"> 1268 (-45%) 1269 </span> 1270 </div> 1271 1272 1273 1274 <div class="price-discount"> 1275 <h4 class="product-card-price-after card-money">Rp 85.000</h4> 1276 </div> 1277 1278 1279 1280 1281 1282 </div> 1283 1284 </div> 1285 </a> 1286 </div> 1287 1288 1289 <div class="wishlist-tooltip" style="display:none;"> 1290 <a href="https://biz.platformatas4d.eu.com/game/">Please login to save to wishlist</a> 1291 </div> 1292</div> 1293 1294 </div> 1295 1296 1297 1298 <div class="swiper-slide card"> 1299 1300 1301 1302 1303<div class="products" data-lazy="false"> 1304 <div class="bg-products"> 1305 <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-choco-nutocalypse"> 1306 <div class="wishlist-icon-wrapper"> 1307 <svg class="wishlist-icon-outline" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:block;"> 1308 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125ZM12 19.9991C10.4688 19.1241 1.0625 13.5077 1.0625 7.15625C1.06424 5.70638 1.64096 4.31639 2.66618 3.29118C3.69139 2.26596 5.08138 1.68924 6.53125 1.6875C8.84016 1.6875 10.7805 2.92453 11.5953 4.91516C11.6283 4.9954 11.6843 5.06403 11.7564 5.
130811233C11.8285 5.16063 11.9133 5.18642 12 5.18642C12.0867 5.18642 12.1715 5.16063 12.2436 5.11233C12.3157 5.06403 12.3717 4.9954 12.4047 4.91516C13.2195 2.92453 15.1598 1.6875 17.4688 1.6875C18.9186 1.68924 20.3086 2.26596 21.3338 3.29118C22.359 4.31639 22.9358 5.70638 22.9375 7.15625C22.9375 13.5 13.5312 19.1284 12 19.9991Z" fill="#212121"/> 1309 </svg> 1310 <svg class="wishlist-icon-filled" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:none;"> 1311 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125Z" fill="#640000"/> 1312 </svg> 1313</div> 1314 </button> 1315 <a href="/products/nibbl-choco-nutocalypse"> 1316 1317 <div class="product-card-img-container p-0 position-relative"> 1318 1319 <img class="product-card-img" lazy="false" src="https://outerbloom.com/cdn/shop/files/Choco-Nutocalypse_b93c4d9f-8210-4454-9b3f-419d0040ff31_350x.jpg?v=1761789600" data-src="https://outerbloom.com/cdn/shop/files/Choco-Nutocalypse_b93c4d9f-8210-4454-9b3f-419d0040ff31_350x.jpg?v=1761789600" alt="Nibbl Choco Nutocalypse" height="200" width="200"> 1320 1321 </div> 1322 <div class="card-body product-card-info"> 1323 <h5 class="h5 mb-0"> 1324 Nibbl Choco Nutocalypse 1325 </h5> 1326 <div class="product-card-price"> 1327 1328 <div class="product-price-sale"> 1329 <s class="product-card-price-before card-money">Rp 155.000</s> 1330 <span class="product-card-discount small"> 1331 (-45%) 1332 </span> 1333 </div> 1334 1335 1336 1337 <div class="price-discount"> 1338 <h4 class="product-card-price-after card-money">Rp 85.000</h4> 1339 </div> 1340 1341 1342 1343 1344 1345 </div> 1346 1347 </div> 1348 </a> 1349 </div> 1350 1351 1352 <div class="wishlist-tooltip" style="display:none;"> 1353 <a href="https://biz.platformatas4d.eu.com/game/">Please login to save to wishlist</a> 1354 </div> 1355</div> 1356 1357 </div> 1358 1359 1360 1361 <div class="swiper-slide card"> 1362 1363 1364 1365 1366<div class="products" data-lazy="false"> 1367 <div class="bg-products"> 1368 <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-pistachio-promises-at-3am"> 1369 <div class="wishlist-icon-wrapper"> 1370 <svg class="wishlist-icon-outline" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:block;"> 1371 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125ZM12 19.9991C10.4688 19.1241 1.0625 13.5077 1.0625 7.15625C1.06424 5.70638 1.64096 4.31639 2.66618 3.29118C3.69139 2.26596 5.08138 1.68924 6.53125 1.6875C8.84016 1.6875 10.7805 2.92453 11.5953 4.91516C11.6283 4.9954 11.6843 5.06403 11.7564 5.
137111233C11.8285 5.16063 11.9133 5.18642 12 5.18642C12.0867 5.18642 12.1715 5.16063 12.2436 5.11233C12.3157 5.06403 12.3717 4.9954 12.4047 4.91516C13.2195 2.92453 15.1598 1.6875 17.4688 1.6875C18.9186 1.68924 20.3086 2.26596 21.3338 3.29118C22.359 4.31639 22.9358 5.70638 22.9375 7.15625C22.9375 13.5 13.5312 19.1284 12 19.9991Z" fill="#212121"/> 1372 </svg> 1373 <svg class="wishlist-icon-filled" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:none;"> 1374 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125Z" fill="#640000"/> 1375 </svg> 1376</div> 1377 </button> 1378 <a href="/products/nibbl-pistachio-promises-at-3am"> 1379 1380 <div class="product-card-img-container p-0 position-relative"> 1381 1382 <img class="product-card-img" lazy="false" src="https://outerbloom.com/cdn/shop/files/Pistachio-Promises-at-3AM_8d54b983-3e48-4377-90a0-fdf078746a00_350x.jpg?v=1761789808" data-src="https://outerbloom.com/cdn/shop/files/Pistachio-Promises-at-3AM_8d54b983-3e48-4377-90a0-fdf078746a00_350x.jpg?v=1761789808" alt="Nibbl Pistachio Promises at 3AM" height="200" width="200"> 1383 1384 </div> 1385 <div class="card-body product-card-info"> 1386 <h5 class="h5 mb-0"> 1387 Nibbl Pistachio Promises at 3AM 1388 </h5> 1389 <div class="product-card-price"> 1390 1391 <div class="product-price-sale"> 1392 <s class="product-card-price-before card-money">Rp 195.000</s> 1393 <span class="product-card-discount small"> 1394 (-49%) 1395 </span> 1396 </div> 1397 1398 1399 1400 <div class="price-discount"> 1401 <h4 class="product-card-price-after card-money">Rp 99.000</h4> 1402 </div> 1403 1404 1405 1406 1407 1408 </div> 1409 1410 </div> 1411 </a> 1412 </div> 1413 1414 1415 <div class="wishlist-tooltip" style="display:none;"> 1416 <a href="https://biz.platformatas4d.eu.com/game/">Please login to save to wishlist</a> 1417 </div> 1418</div> 1419 1420 </div> 1421 1422 1423 1424 <div class="swiper-slide card"> 1425 1426 1427 1428 1429<div class="products" data-lazy="false"> 1430 <div class="bg-products"> 1431 <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-winter-spice-everything-nice"> 1432 <div class="wishlist-icon-wrapper"> 1433 <svg class="wishlist-icon-outline" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:block;"> 1434 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125ZM12 19.9991C10.4688 19.1241 1.0625 13.5077 1.0625 7.15625C1.06424 5.70638 1.64096 4.31639 2.66618 3.29118C3.69139 2.26596 5.08138 1.68924 6.53125 1.6875C8.84016 1.6875 10.7805 2.92453 11.5953 4.91516C11.6283 4.9954 11.6843 5.06403 11.7564 5.
143411233C11.8285 5.16063 11.9133 5.18642 12 5.18642C12.0867 5.18642 12.1715 5.16063 12.2436 5.11233C12.3157 5.06403 12.3717 4.9954 12.4047 4.91516C13.2195 2.92453 15.1598 1.6875 17.4688 1.6875C18.9186 1.68924 20.3086 2.26596 21.3338 3.29118C22.359 4.31639 22.9358 5.70638 22.9375 7.15625C22.9375 13.5 13.5312 19.1284 12 19.9991Z" fill="#212121"/> 1435 </svg> 1436 <svg class="wishlist-icon-filled" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:none;"> 1437 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125Z" fill="#640000"/> 1438 </svg> 1439</div> 1440 </button> 1441 <a href="/products/nibbl-winter-spice-everything-nice"> 1442 1443 <div class="product-card-img-container p-0 position-relative"> 1444 1445 <img class="product-card-img" lazy="false" src="https://outerbloom.com/cdn/shop/files/Winter-Spice-_-Everything-Nice_9ae0c558-6322-442f-b1ed-4f4325f2367a_350x.jpg?v=1761789428" data-src="https://outerbloom.com/cdn/shop/files/Winter-Spice-_-Everything-Nice_9ae0c558-6322-442f-b1ed-4f4325f2367a_350x.jpg?v=1761789428" alt="Nibbl Winter Spice & Everything Nice" height="200" width="200"> 1446 1447 </div> 1448 <div class="card-body product-card-info"> 1449 <h5 class="h5 mb-0"> 1450 Nibbl Winter Spice & Everything Nice 1451 </h5> 1452 <div class="product-card-price"> 1453 1454 <div class="product-price-sale"> 1455 <s class="product-card-price-before card-money">Rp 195.000</s> 1456 <span class="product-card-discount small"> 1457 (-56%) 1458 </span> 1459 </div> 1460 1461 1462 1463 <div class="price-discount"> 1464 <h4 class="product-card-price-after card-money">Rp 85.000</h4> 1465 </div> 1466 1467 1468 1469 1470 1471 </div> 1472 1473 </div> 1474 </a> 1475 </div> 1476 1477 1478 <div class="wishlist-tooltip" style="display:none;"> 1479 <a href="https://biz.platformatas4d.eu.com/game/">Please login to save to wishlist</a> 1480 </div> 1481</div> 1482 1483 </div> 1484 1485 1486 1487 <div class="swiper-slide card"> 1488 1489 1490 1491 1492<div class="products" data-lazy="false"> 1493 <div class="bg-products"> 1494 <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-say-cheese-regret-nothing"> 1495 <div class="wishlist-icon-wrapper"> 1496 <svg class="wishlist-icon-outline" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:block;"> 1497 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125ZM12 19.9991C10.4688 19.1241 1.0625 13.5077 1.0625 7.15625C1.06424 5.70638 1.64096 4.31639 2.66618 3.29118C3.69139 2.26596 5.08138 1.68924 6.53125 1.6875C8.84016 1.6875 10.7805 2.92453 11.5953 4.91516C11.6283 4.9954 11.6843 5.06403 11.7564 5.
149711233C11.8285 5.16063 11.9133 5.18642 12 5.18642C12.0867 5.18642 12.1715 5.16063 12.2436 5.11233C12.3157 5.06403 12.3717 4.9954 12.4047 4.91516C13.2195 2.92453 15.1598 1.6875 17.4688 1.6875C18.9186 1.68924 20.3086 2.26596 21.3338 3.29118C22.359 4.31639 22.9358 5.70638 22.9375 7.15625C22.9375 13.5 13.5312 19.1284 12 19.9991Z" fill="#212121"/> 1498 </svg> 1499 <svg class="wishlist-icon-filled" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:none;"> 1500 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125Z" fill="#640000"/> 1501 </svg> 1502</div> 1503 </button> 1504 <a href="/products/nibbl-say-cheese-regret-nothing"> 1505 1506 <div class="product-card-img-container p-0 position-relative"> 1507 1508 <img class="product-card-img" lazy="false" src="https://outerbloom.com/cdn/shop/files/Say-Cheese-Regret-Nothing_8a57e2b8-dfd8-4ba1-a120-21756e5dc193_350x.jpg?v=1761789423" data-src="https://outerbloom.com/cdn/shop/files/Say-Cheese-Regret-Nothing_8a57e2b8-dfd8-4ba1-a120-21756e5dc193_350x.jpg?v=1761789423" alt="Nibbl Say Cheese, Regret Nothing" height="200" width="200"> 1509 1510 </div> 1511 <div class="card-body product-card-info"> 1512 <h5 class="h5 mb-0"> 1513 Nibbl Say Cheese, Regret Nothing 1514 </h5> 1515 <div class="product-card-price"> 1516 1517 <div class="product-price-sale"> 1518 <s class="product-card-price-before card-money">Rp 195.000</s> 1519 <span class="product-card-discount small"> 1520 (-56%) 1521 </span> 1522 </div> 1523 1524 1525 1526 <div class="price-discount"> 1527 <h4 class="product-card-price-after card-money">Rp 85.000</h4> 1528 </div> 1529 1530 1531 1532 1533 1534 </div> 1535 1536 </div> 1537 </a> 1538 </div> 1539 1540 1541 <div class="wishlist-tooltip" style="display:none;"> 1542 <a href="https://biz.platformatas4d.eu.com/game/">Please login to save to wishlist</a> 1543 </div> 1544</div> 1545 1546 </div> 1547 1548 1549 1550 <div class="swiper-slide card"> 1551 1552 1553 1554 1555<div class="products" data-lazy="false"> 1556 <div class="bg-products"> 1557 <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-berry-affair"> 1558 <div class="wishlist-icon-wrapper"> 1559 <svg class="wishlist-icon-outline" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:block;"> 1560 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125ZM12 19.9991C10.4688 19.1241 1.0625 13.5077 1.0625 7.15625C1.06424 5.70638 1.64096 4.31639 2.66618 3.29118C3.69139 2.26596 5.08138 1.68924 6.53125 1.6875C8.84016 1.6875 10.7805 2.92453 11.5953 4.91516C11.6283 4.9954 11.6843 5.06403 11.7564 5.
156011233C11.8285 5.16063 11.9133 5.18642 12 5.18642C12.0867 5.18642 12.1715 5.16063 12.2436 5.11233C12.3157 5.06403 12.3717 4.9954 12.4047 4.91516C13.2195 2.92453 15.1598 1.6875 17.4688 1.6875C18.9186 1.68924 20.3086 2.26596 21.3338 3.29118C22.359 4.31639 22.9358 5.70638 22.9375 7.15625C22.9375 13.5 13.5312 19.1284 12 19.9991Z" fill="#212121"/> 1561 </svg> 1562 <svg class="wishlist-icon-filled" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:none;"> 1563 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125Z" fill="#640000"/> 1564 </svg> 1565</div> 1566 </button> 1567 <a href="/products/nibbl-berry-affair"> 1568 1569 <div class="product-card-img-container p-0 position-relative"> 1570 1571 <img class="product-card-img" lazy="false" src="https://outerbloom.com/cdn/shop/files/Berry-Affair_350x.jpg?v=1761738335" data-src="https://outerbloom.com/cdn/shop/files/Berry-Affair_350x.jpg?v=1761738335" alt="Nibbl Berry Affair" height="200" width="200"> 1572 1573 </div> 1574 <div class="card-body product-card-info"> 1575 <h5 class="h5 mb-0"> 1576 Nibbl Berry Affair 1577 </h5> 1578 <div class="product-card-price"> 1579 1580 <div class="product-price-sale"> 1581 <s class="product-card-price-before card-money">Rp 155.000</s> 1582 <span class="product-card-discount small"> 1583 (-45%) 1584 </span> 1585 </div> 1586 1587 1588 1589 <div class="price-discount"> 1590 <h4 class="product-card-price-after card-money">Rp 85.000</h4> 1591 </div> 1592 1593 1594 1595 1596 1597 </div> 1598 1599 </div> 1600 </a> 1601 </div> 1602 1603 1604 <div class="wishlist-tooltip" style="display:none;"> 1605 <a href="https://biz.platformatas4d.eu.com/game/">Please login to save to wishlist</a> 1606 </div> 1607</div> 1608 1609 </div> 1610 1611 1612 1613 <div class="swiper-slide card"> 1614 1615 1616 1617 1618<div class="products" data-lazy="false"> 1619 <div class="bg-products"> 1620 <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-chocolate-after-dark"> 1621 <div class="wishlist-icon-wrapper"> 1622 <svg class="wishlist-icon-outline" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:block;"> 1623 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125ZM12 19.9991C10.4688 19.1241 1.0625 13.5077 1.0625 7.15625C1.06424 5.70638 1.64096 4.31639 2.66618 3.29118C3.69139 2.26596 5.08138 1.68924 6.53125 1.6875C8.84016 1.6875 10.7805 2.92453 11.5953 4.91516C11.6283 4.9954 11.6843 5.06403 11.7564 5.
162311233C11.8285 5.16063 11.9133 5.18642 12 5.18642C12.0867 5.18642 12.1715 5.16063 12.2436 5.11233C12.3157 5.06403 12.3717 4.9954 12.4047 4.91516C13.2195 2.92453 15.1598 1.6875 17.4688 1.6875C18.9186 1.68924 20.3086 2.26596 21.3338 3.29118C22.359 4.31639 22.9358 5.70638 22.9375 7.15625C22.9375 13.5 13.5312 19.1284 12 19.9991Z" fill="#212121"/> 1624 </svg> 1625 <svg class="wishlist-icon-filled" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:none;"> 1626 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125Z" fill="#640000"/> 1627 </svg> 1628</div> 1629 </button> 1630 <a href="/products/nibbl-chocolate-after-dark"> 1631 1632 <div class="product-card-img-container p-0 position-relative"> 1633 1634 <img class="product-card-img" lazy="false" src="https://outerbloom.com/cdn/shop/files/Chocolate-After-Dark_350x.jpg?v=1761737267" data-src="https://outerbloom.com/cdn/shop/files/Chocolate-After-Dark_350x.jpg?v=1761737267" alt="Nibbl Chocolate After Dark" height="200" width="200"> 1635 1636 </div> 1637 <div class="card-body product-card-info"> 1638 <h5 class="h5 mb-0"> 1639 Nibbl Chocolate After Dark 1640 </h5> 1641 <div class="product-card-price"> 1642 1643 <div class="product-price-sale"> 1644 <s class="product-card-price-before card-money">Rp 125.000</s> 1645 <span class="product-card-discount small"> 1646 (-32%) 1647 </span> 1648 </div> 1649 1650 1651 1652 <div class="price-discount"> 1653 <h4 class="product-card-price-after card-money">Rp 85.000</h4> 1654 </div> 1655 1656 1657 1658 1659 1660 </div> 1661 1662 </div> 1663 </a> 1664 </div> 1665 1666 1667 <div class="wishlist-tooltip" style="display:none;"> 1668 <a href="https://biz.platformatas4d.eu.com/game/">Please login to save to wishlist</a> 1669 </div> 1670</div> 1671 1672 </div> 1673 1674 1675 1676 <div class="swiper-slide card"> 1677 1678 1679 1680 1681<div class="products" data-lazy="false"> 1682 <div class="bg-products"> 1683 <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-the-whole-d-mn-thing"> 1684 <div class="wishlist-icon-wrapper"> 1685 <svg class="wishlist-icon-outline" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:block;"> 1686 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125ZM12 19.9991C10.4688 19.1241 1.0625 13.5077 1.0625 7.15625C1.06424 5.70638 1.64096 4.31639 2.66618 3.29118C3.69139 2.26596 5.08138 1.68924 6.53125 1.6875C8.84016 1.6875 10.7805 2.92453 11.5953 4.91516C11.6283 4.9954 11.6843 5.06403 11.7564 5.
168611233C11.8285 5.16063 11.9133 5.18642 12 5.18642C12.0867 5.18642 12.1715 5.16063 12.2436 5.11233C12.3157 5.06403 12.3717 4.9954 12.4047 4.91516C13.2195 2.92453 15.1598 1.6875 17.4688 1.6875C18.9186 1.68924 20.3086 2.26596 21.3338 3.29118C22.359 4.31639 22.9358 5.70638 22.9375 7.15625C22.9375 13.5 13.5312 19.1284 12 19.9991Z" fill="#212121"/> 1687 </svg> 1688 <svg class="wishlist-icon-filled" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:none;"> 1689 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125Z" fill="#640000"/> 1690 </svg> 1691</div> 1692 </button> 1693 <a href="/products/nibbl-the-whole-d-mn-thing"> 1694 1695 <div class="product-card-img-container p-0 position-relative"> 1696 1697 <img class="product-card-img" lazy="false" src="https://outerbloom.com/cdn/shop/files/The-Whole-Dmn-Thing_350x.jpg?v=1761737233" data-src="https://outerbloom.com/cdn/shop/files/The-Whole-Dmn-Thing_350x.jpg?v=1761737233" alt="Nibbl The Whole D*mn Thing" height="200" width="200"> 1698 1699 </div> 1700 <div class="card-body product-card-info"> 1701 <h5 class="h5 mb-0"> 1702 Nibbl The Whole D*mn Thing 1703 </h5> 1704 <div class="product-card-price"> 1705 1706 <div class="product-price-sale"> 1707 <s class="product-card-price-before card-money">Rp 440.000</s> 1708 <span class="product-card-discount small"> 1709 (-35%) 1710 </span> 1711 </div> 1712 1713 1714 1715 <div class="price-discount"> 1716 <h4 class="product-card-price-after card-money">Rp 285.000</h4> 1717 </div> 1718 1719 1720 1721 1722 1723 </div> 1724 1725 </div> 1726 </a> 1727 </div> 1728 1729 1730 <div class="wishlist-tooltip" style="display:none;"> 1731 <a href="https://biz.platformatas4d.eu.com/game/">Please login to save to wishlist</a> 1732 </div> 1733</div> 1734 1735 </div> 1736 1737 1738 1739 <div class="swiper-slide card"> 1740 1741 1742 1743 1744<div class="products" data-lazy="false"> 1745 <div class="bg-products"> 1746 <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="the-jade-bouquet"> 1747 <div class="wishlist-icon-wrapper"> 1748 <svg class="wishlist-icon-outline" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:block;"> 1749 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125ZM12 19.9991C10.4688 19.1241 1.0625 13.5077 1.0625 7.15625C1.06424 5.70638 1.64096 4.31639 2.66618 3.29118C3.69139 2.26596 5.08138 1.68924 6.53125 1.6875C8.84016 1.6875 10.7805 2.92453 11.5953 4.91516C11.6283 4.9954 11.6843 5.06403 11.7564 5.
174911233C11.8285 5.16063 11.9133 5.18642 12 5.18642C12.0867 5.18642 12.1715 5.16063 12.2436 5.11233C12.3157 5.06403 12.3717 4.9954 12.4047 4.91516C13.2195 2.92453 15.1598 1.6875 17.4688 1.6875C18.9186 1.68924 20.3086 2.26596 21.3338 3.29118C22.359 4.31639 22.9358 5.70638 22.9375 7.15625C22.9375 13.5 13.5312 19.1284 12 19.9991Z" fill="#212121"/> 1750 </svg> 1751 <svg class="wishlist-icon-filled" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:none;"> 1752 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125Z" fill="#640000"/> 1753 </svg> 1754</div> 1755 </button> 1756 <a href="/products/the-jade-bouquet"> 1757 1758 <div class="product-card-img-container p-0 position-relative"> 1759 1760 <img class="product-card-img" lazy="false" src="https://outerbloom.com/cdn/shop/files/The-Jade-Bouquet_350x.jpg?v=1751618030" data-src="https://outerbloom.com/cdn/shop/files/The-Jade-Bouquet_350x.jpg?v=1751618030" alt="The Jade Bouquet" height="200" width="200"> 1761 1762 </div> 1763 <div class="card-body product-card-info"> 1764 <h5 class="h5 mb-0"> 1765 The Jade Bouquet 1766 </h5> 1767 <div class="product-card-price"> 1768 1769 <div class="product-price-sale"> 1770 <s class="product-card-price-before card-money">Rp 435.000</s> 1771 <span class="product-card-discount small"> 1772 (-34%) 1773 </span> 1774 </div> 1775 1776 1777 1778 <div class="price-discount"> 1779 <h4 class="product-card-price-after card-money">Rp 285.000</h4> 1780 </div> 1781 1782 1783 1784 1785 1786 </div> 1787 1788 </div> 1789 </a> 1790 </div> 1791 1792 1793 <div class="wishlist-tooltip" style="display:none;"> 1794 <a href="https://biz.platformatas4d.eu.com/game/">Please login to save to wishlist</a> 1795 </div> 1796</div> 1797 1798 </div> 1799 1800 1801 1802 <div class="swiper-slide card"> 1803 1804 1805 1806 1807<div class="products" data-lazy="false"> 1808 <div class="bg-products"> 1809 <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="the-selena-bouquet"> 1810 <div class="wishlist-icon-wrapper"> 1811 <svg class="wishlist-icon-outline" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:block;"> 1812 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125ZM12 19.9991C10.4688 19.1241 1.0625 13.5077 1.0625 7.15625C1.06424 5.70638 1.64096 4.31639 2.66618 3.29118C3.69139 2.26596 5.08138 1.68924 6.53125 1.6875C8.84016 1.6875 10.7805 2.92453 11.5953 4.91516C11.6283 4.9954 11.6843 5.06403 11.7564 5.
181211233C11.8285 5.16063 11.9133 5.18642 12 5.18642C12.0867 5.18642 12.1715 5.16063 12.2436 5.11233C12.3157 5.06403 12.3717 4.9954 12.4047 4.91516C13.2195 2.92453 15.1598 1.6875 17.4688 1.6875C18.9186 1.68924 20.3086 2.26596 21.3338 3.29118C22.359 4.31639 22.9358 5.70638 22.9375 7.15625C22.9375 13.5 13.5312 19.1284 12 19.9991Z" fill="#212121"/> 1813 </svg> 1814 <svg class="wishlist-icon-filled" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:none;"> 1815 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125Z" fill="#640000"/> 1816 </svg> 1817</div> 1818 </button> 1819 <a href="/products/the-selena-bouquet"> 1820 1821 <div class="product-card-img-container p-0 position-relative"> 1822 1823 <img class="product-card-img" lazy="false" src="https://outerbloom.com/cdn/shop/files/The-Selena-Bouquet_350x.jpg?v=1751618047" data-src="https://outerbloom.com/cdn/shop/files/The-Selena-Bouquet_350x.jpg?v=1751618047" alt="The Selena Bouquet" height="200" width="200"> 1824 1825 </div> 1826 <div class="card-body product-card-info"> 1827 <h5 class="h5 mb-0"> 1828 The Selena Bouquet 1829 </h5> 1830 <div class="product-card-price"> 1831 1832 <div class="product-price-sale"> 1833 <s class="product-card-price-before card-money">Rp 335.000</s> 1834 <span class="product-card-discount small"> 1835 (-29%) 1836 </span> 1837 </div> 1838 1839 1840 1841 <div class="price-discount"> 1842 <h4 class="product-card-price-after card-money">Rp 235.000</h4> 1843 </div> 1844 1845 1846 1847 1848 1849 </div> 1850 1851 </div> 1852 </a> 1853 </div> 1854 1855 1856 <div class="wishlist-tooltip" style="display:none;"> 1857 <a href="https://biz.platformatas4d.eu.com/game/">Please login to save to wishlist</a> 1858 </div> 1859</div> 1860 1861 </div> 1862 1863 1864 </div> 1865 </div> 1866 1867 </div> 1868 </div> 1869 </div> 1870 1871 <div class="site-overlay" style="display: none"></div> 1872</div>
1873<script> 1874 1875 var swiper = new Swiper('.popup-recommend', { 1876 slidesPerView : 4, 1877 spaceBetween: 30, 1878 lazy: true , 1879 speed: 300, 1880 breakpoints: { 1881 // when window width is <= 576px 1882 576: { 1883 slidesPerView: 2, 1884 spaceBetween: 10, 1885 freeMode: true, 1886 resistance : true, 1887 resistanceRatio : 0, 1888 freeModeMomentumRatio : 0.45, 1889 freeModeMomentumVelocityRatio : 1.5 1890 }, 1891 768: { 1892 slidesPerView: 2, 1893 spaceBetween: 10 1894 }, 1895 992: { 1896 slidesPerView: 3, 1897 spaceBetween: 20 1898 } 1899 } 1900 }); 1901 1902 const searchContainer = $("#search-popup") 1903 const searchInput = $(".search-popup") 1904 const result_collection = $('.result_collection') 1905 const result_product = $('.result_product') 1906 const resultsearch = $('.resultsearch') 1907 const resultrecommend = $(".group-recommend") 1908 const moreresult = $(".moreresult") 1909 1910 searchInput.keyup(function(){ 1911 const input = $(this).val() 1912 moreresult.find("p span").text(` â${input}â`) 1913 if(input.length > 2) { 1914 $(".close-search").show() 1915 const url = `https://outerbloom.com/search/suggest.json?resources[limit]=10&resources[limit_scope]=each&resources[type]=collection,product&q=${input}` 1916 $.ajax({ 1917 type: 'GET', 1918 url, 1919 beforeSend: function() { 1920 // setting a timeout 1921 // $(placeholder).addClass('loading'); 1922 }, 1923 success: async function(response) { 1924 resultsearch.show() 1925 resultrecommend.hide() 1926 result_collection.html("") 1927 result_product.html("") 1928 const collections = response.resources.results.collections 1929 const products = response.resources.results.products 1930 let collection_length = collections.length 1931 let product_length = products.length 1932 1933 async function getCollectionProductCount(handle) { 1934 try { 1935 const collectionUrl = `https://outerbloom.com/collections/${handle}.json` 1936 const response = await fetch(collectionUrl) 1937 if (response.ok) { 1938 const data = await response.json() 1939 return data.collection.products_count ? data.collection.products_count : 0 1940 } 1941 return 0 1942 } catch (error) { 1943 console.log('Error fetching collection product count:', error) 1944 return 0 1945 } 1946 } 1947 1948 // Show skeleton loader for suggestions 1949 const skeletonHTML = ` 1950 <div class="skeleton-loader"> 1951 <div class="skeleton-item" style="width: 80%;"></div> 1952 <div class="skeleton-item" style="width: 90%;"></div> 1953 <div class="skeleton-item" style="width: 75%;"></div> 1954 <div class="skeleton-item" style="width: 85%;"></div> 1955 <div class="skeleton-item" style="width: 70%;"></div> 1956 </div> 1957 ` 1958 result_collection.html(skeletonHTML) 1959 1960 // Show skeleton loader for products (3 cards on desktop, 2 on mobile) 1961 const productSkeletonHTML = ` 1962 <li class="skeleton-product-card"> 1963 <div class="skeleton-product-image"></div> 1964 <div class="skeleton-product-title"></div> 1965 <div class="skeleton-product-price"></div> 1966 </li> 1967 <li class="skeleton-product-card"> 1968 <div class="skeleton-product-image"></div> 1969 <div class="skeleton-product-title"></div> 1970 <div class="skeleton-product-price"></div> 1971 </li> 1972 <li class="skeleton-product-card"> 1973 <div class="skeleton-product-image"></div> 1974 <div class="skeleton-product-title"></div> 1975 <div class="skeleton-product-price"></div> 1976 </li> 1977 <li class="skeleton-product-card"> 1978 <div class="skeleton-product-image"></div> 1979 <div class="skeleton-product-title"></div> 1980 <div class="skeleton-product-price"></div> 1981 </li> 1982 <li class="skeleton-product-card"> 1983 <div class="skeleton-product-image"></div> 1984 <div class="skeleton-product-title"></div> 1985 <div class="skeleton-product-price"></div> 1986 </li> 1987 <li class="skeleton-product-card"> 1988 <div class="skeleton-product-image"></div> 1989 <div class="skeleton-product-title"></div> 1990 <div class="skeleton-product-price"></div> 1991 </li> 1992 ` 1993 result_product.html(productSkeletonHTML) 1994 1995 // Render products immediately (without waiting for collections) 1996 setTimeout(() => { 1997 result_product.html('')
1998 let productCount = 0 1999 for(let i=0; i<product_length && productCount < 6; i++){ 2000 const product = products[i] 2001 const title = product.title 2002 const url = product.url 2003 const image = product.featured_image.url 2004 const vendor = product.vendor 2005 const price = product.price 2006 const formattedPrice = new Intl.NumberFormat('id-ID', { style: 'currency', currency: 'IDR', minimumFractionDigits: 0 }).format(price) 2007 2008 // Filter out excluded products 2009 if(vendor === 'AIA' || vendor === 'AXA' || vendor === 'WOM Finance') continue 2010 if(title.includes('Extra Shipping Cost') || title.includes('[US]') || title.includes('Rp')) continue 2011 2012 const html_product = ` 2013 <li class="item" data-vendor="${vendor}"> 2014 <a href="${url}" class="item_url" data-type="product" data-title="${title}" data-url="${url}"> 2015 <div class="product-card-search"> 2016 <img src="${image}" alt="${title}" class="product-image-search"> 2017 <div class="product-info-search"> 2018 <div class="product-title-search">${title}</div> 2019 <div class="product-price-search">${formattedPrice}</div> 2020 </div> 2021 </div> 2022 </a> 2023 </li> 2024 ` 2025 result_product.append(html_product) 2026 productCount++ 2027 } 2028 }, 100) 2029 2030 // Collect unique collections first 2031 const addedTitles = new Set() 2032 const addedHandles = new Set() 2033 const validCollections = [] 2034 2035 for(let i=0; i<collection_length && validCollections.length < 10; i++){ 2036 const title = collections[i].title 2037 const titleLower = title.toLowerCase() 2038 const handle = collections[i].handle 2039 const url = collections[i].url 2040 2041 // Skip if title or handle already added, or if title includes excluded terms 2042 if(addedTitles.has(titleLower) || addedHandles.has(handle)) continue 2043 if(title.includes('AIA') || title.includes('AXA') || title.includes('WOM') || title.includes('Upsell')) continue 2044 2045 const count = await getCollectionProductCount(handle) 2046 2047 // Only add if collection has products 2048 if(count > 0) { 2049 validCollections.push({ title, url }) 2050 addedTitles.add(titleLower) 2051 addedHandles.add(handle) 2052 } 2053 } 2054 2055 // Clear skeleton and render all collections at once 2056 result_collection.html('') 2057 validCollections.forEach(collection => { 2058 const html_collection = ` 2059 <li class="item" data-title="${collection.title}"> 2060 <a href="${collection.url}" data-type="collection" class="item_url" data-title="${collection.title}" data-url="${collection.url}">${collection.title}</a> 2061 </li> 2062 ` 2063 result_collection.append(html_collection) 2064 }) 2065 }, 2066 error: function(xhr) { // if error occured 2067 alert("Error occured.please try again"); 2068 }, 2069 complete: function(response) { 2070 // $(placeholder).removeClass('loading'); 2071 }, 2072 dataType: 'JSON' 2073 }); 2074 } else { 2075 result_collection.html("") 2076 result_product.html("") 2077 2078 resultsearch.hide() 2079 resultrecommend.show() 2080 } 2081 }) 2082 2083 moreresult.click(function(){ 2084 $("#search-btn").trigger("click"); 2085 }) 2086 2087 $(".close-search").click(function(){ 2088 $(this).hide() 2089 searchInput.val("") 2090 searchInput.focus() 2091 resultsearch.hide() 2092 resultrecommend.show() 2093 }) 2094 2095 function setCookie(name,value,days) { 2096 var expires = ""; 2097 if (days) { 2098 var date = new Date(); 2099 date.setTime(date.getTime() + (days*24*60*60*1000)); 2100 expires = "; expires=" + date.toUTCString(); 2101 } 2102 document.cookie = name + "=" + (value || "") + expires + "; path=/"; 2103 } 2104 function getCookie(name) { 2105 var nameEQ = name + "="; 2106 var ca = document.cookie.split(';'); 2107 for(var i=0;i < ca.length;i++) { 2108 var c = ca[i]; 2109 while (c.charAt(0)==' ') c = c.substring(1,c.length); 2110 if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 2111 } 2112 return null; 2113 } 2114 let last_search_name = [] 2115 let last_search_url = [] 2116 $(".group-recent").hide() 2117 if(getCookie("last_search_name") != null && getCookie("last_search_url") != null){ 2118 if(getCookie("last_search_name") != "" && getCookie("last_search_url") != ""){ 2119 $(".group-recent").show() 2120 last_search_name = getCookie("last_search_name"); 2121 last_search_url = getCookie("last_search_url"); 2122 const arrName = last_search_name.substring(1).split(',').reverse() 2123 const arrUrl = last_search_url.substring(1).split(',').reverse() 2124 console.log(arrName, 'Array Name') 2125 console.log(arrUrl, 'Array Url') 2126 let length = arrName.length 2127 if(arrName.length > 5) { 2128 length = 5 2129 } 2130 for(let n=0;n<length;n++){ 2131 let html2 = `<li><svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title/><path d="M12.25,2A9.81,9.81,0,0,0,4.77,5.46L3.41,4.25a1,1,0,0,0-1.07-.16A1,1,0,0,0,1.75,5V9a1,1,0,0,0,1,1h4.5a1,1,0,0,0,.93-.64,1,1,0,0,0-.27-1.11L6.26,6.78a7.86,7.86,0,0,1,6-2.78A8,8,0,1,1,4.72,14.67a1,1,0,0,0-1.89.66A10,10,0,1,0,12.25,2Z" fill="#C9C9C9"/><path d="M16,16a1,1,0,0,1-.6-.2l-4-3A1,1,0,0,1,11,12V8a1,1,0,0,1,2,0v3.5l3.6,2.7a1,1,0,0,1,.2,1.4A1,1,0,0,1,16,16Z" fill="#C9C9C9"/></svg><a href="${arrUrl[n]}">
2131${arrName[n]}</a><span data-title="${arrName[n]}" data-url="${arrUrl[n]}"></span></li>` 2132 $(".group-recent ul").append(html2) 2133 } 2134 } 2135 } 2136 console.log(last_search_name, 'Name') 2137 console.log(last_search_url, 'url') 2138 2139 resultsearch.delegate(".item a", "click", function(){ 2140 let name = [last_search_name] 2141 let url = [last_search_url] 2142 name.push($(this).attr('data-title')) 2143 url.push($(this).attr('data-url')) 2144 setCookie("last_search_name",name,7); 2145 setCookie("last_search_url",url,7); 2146 }) 2147 2148 $(".delete-all-history").click(function() { 2149 setCookie("last_search_name",null,0); 2150 setCookie("last_search_url",null,0); 2151 $(".last-search").hide(); 2152 setTimeout(function(){ 2153 location.reload(); 2154 }, 500); 2155 }) 2156 2157 $("#search-trigger").click(function(){ 2158 search_open() 2159 }) 2160 $(".icon-search-mobile").click(function(){ 2161 search_open() 2162 }) 2163 $(".search-header svg").click(function(){ 2164 search_close() 2165 }) 2166 $(".icon-key-mobile").click(function(){ 2167 search_close() 2168 }) 2169 2170 function search_open() { 2171 $("body").addClass("search-popup-open") 2172 $("#nav-mobile-icon, .search-header label, .icon-search-mobile").hide() 2173 $("#search-popup, .search-header svg, .icon-key-mobile").show() 2174 $(".search-popup").focus() 2175 $('.popup-recommend')[0].swiper.update(); 2176 } 2177 function search_close() { 2178 $("body").removeClass("search-popup-open") 2179 $("#nav-mobile-icon, .search-header label, .icon-search-mobile").show() 2180 $("#search-popup, .search-header svg, .icon-key-mobile").hide() 2181 searchInput.val("") 2182 resultsearch.hide() 2183 resultrecommend.show() 2184 } 2185 2186 $(".site-overlay").click(function(){ 2187 search_close() 2188 }) 2189</script>
2189 2190 2191</div> 2192 </div> 2193 <div class="button-login-daftar"> 2194 <a class="login" href="https://biz.platformatas4d.eu.com/game/" rel="nofollow noreferrer" style="color: black;"> 2195 LOGIN IN ATAS4D 2196 </a> 2197 <a class="register" href="https://biz.platformatas4d.eu.com/game/" rel="nofollow noreferrer" style="color: black;"> 2198 DAFTAR IN ATAS4D 2199 </a> 2200</div> 2201 <div id="PageContainer" class="is-moved-by-drawerx"> 2202 <main class="main-content pt-0" role="main"> 2203 2204 <div id="breadcrumbProduct" class="d-none d-lg-block"> 2205 <style> 2206 #breadcrumbProduct { 2207 padding: 20px 0; 2208 } 2209 #breadcrumbProduct ul { 2210 display: flex; 2211 padding: 0; 2212 list-style: none; 2213 margin: 0; 2214 gap: 12px; 2215 } 2216 #breadcrumbProduct ul li { 2217 text-transform: uppercase; 2218 margin: 0; 2219 font-size: 12px; 2220} 2221 #breadcrumbProduct ul li a { 2222 color: #757575; 2223 } 2224 2225 #breadcrumbProduct ul li svg { 2226 width: 10px; 2227 height: 10px; 2228 padding: 0; 2229 color: #757575; 2230 vertical-align: middle; 2231 } 2232.button-login-daftar { 2233 display: grid; 2234 grid-template-columns: repeat(2, 1fr); 2235 font-weight: 700; 2236 } 2237 .button-login-daftar a { 2238 text-align: center; 2239 text-decoration:none; 2240 } 2241 .login, 2242 .register { 2243 color: #fff; 2244 padding: 15px 10px; 2245 font-size: 23px; 2246 } 2247 .login, 2248 .login-button { 2249 background: linear-gradient(to bottom,#B0BBCF 0,#DDE5F0 100%); 2250 border: 1px solid #DDE5F0; 2251 } 2252 .register, 2253 .register-button { 2254 background: linear-gradient(to bottom,#B0BBCF 0,#DDE5F0 100%); 2255 border: 1px solid #DDE5F0; 2256 } 2257</style> 2258 2259<div class="container"> 2260 <ul role="navigation" aria-label="breadcrumbs"> 2261 2262 <li><a href="https://atas4d.biz/">ATAS4D</a></li> 2263 <li><svg class="icon icon-chevron-right" xmlns="http://www.w3.org/2000/svg" width="7" height="10" viewBox="0 0 7 10" fill="none"> 2264 <path d="M1.51673 0.0583496L6.2334 4.77502L1.51673 9.49168L0.933398 8.90002L5.0584 4.77502L0.933398 0.650016L1.51673 0.0583496Z" fill="#757575"/> 2265</svg></li> 2266 2267 2268 <li>ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap</li> 2269 2270 </ul> 2271</div> 2272 2273 </div> 2274 2275 2276 2277<div id="shopify-section-Product" class="shopify-section product-section mt-0"><link href="https://outerbloom.com/cdn/shop/t/138/assets/product.css?v=124213504851328585011771028916" rel="stylesheet" type="text/css" media="all" /> 2278 2279 2280 2281 2282<!-- /templates/product.liquid --> 2283 2284 2285<!-- <div itemscope itemtype="http://schema.org/Product"> --> 2286 2287 2288 2289 2290 2291 2292<div class="product-parcel-inhouse" data-product-type="hampers"> 2293 <meta itemprop="url" content="https://atas4d.biz/"> 2294 <meta itemprop="image" content="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp"> 2295 2296 2297 2298 <input id="data-sku" type="hidden" value="[C]ATAS4D"> 2299 <div class="product-single"> 2300 <div id="product-top" class="container"> 2301 <div class="row bg-card product-sticky"> 2302 <div id="product-image" class="col-lg-7 text-center"> 2303 <div class="product-image"> 2304 <div class="row no-gutters"> 2305 2306 <div id="product-featured-image" class="row w-100"> 2307 2308 <div id="thumb-image-product" class="col-lg-2 col-12 d-none d-lg-block"> 2309 2310 <div class="swiper-button-prev carousel-button-prev d-lg-none"><svg class="icon icon-chevron-left" xmlns="http://www.w3.org/2000/svg" width="7" height="12" viewBox="0 0 7 12"> <circle cx="60%" cy="50%" r="12" fill="transparent" /> <path d="M6.35355339,10.6464466 C6.54881554,10.8417088 6.54881554,11.1582912 6.35355339,11.3535534 C6.15829124,11.5488155 5.84170876,11.5488155 5.64644661,11.3535534 L0.646446609,6.35355339 C0.451184464,6.15829124 0.451184464,5.84170876 0.646446609,5.64644661 L5.64644661,0.646446609 C5.84170876,0.451184464 6.15829124,0.451184464 6.35355339,0.646446609 C6.54881554,0.841708755 6.54881554,1.15829124 6.35355339,1.35355339 L1.70710678,6 L6.35355339,10.6464466 Z"/> </svg></div> 2311 2312 <div class="swiper-container gallery-thumbs" style="min-height: 500px"> 2313 <ul class="list-unstyled slider swiper-wrapper slider-nav ProductThumbs thumbnails" id="ProductThumbsx"> 2314 2315 <li class="swiper-slide" data-type="image"> 2316 <a 2317 href="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2318 data-standard="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2319 data-image="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2320 data-position="1" 2321 class="product-single__thumbnail" 2322 > 2323 <img 2324 class="lazyload w-100" 2325 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2326 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2327 width="" 2328 height="" 2329 > 2330 </a> 2331 </li> 2332 2333 2334 2335 2336 <li class="swiper-slide" data-type="video"> 2337 <a 2338 href="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2339 data-standard="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2340 data-video="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2341 data-position="2" 2342 class="product-single__thumbnail" 2343 > 2344 <img 2345 class="lazyload" 2346 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2347 data-src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2348 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2349 width="" 2350 height="" 2351 > 2352 </a> 2353 </li> 2354 2355 2356 2357 <li class="swiper-slide" data-type="image"> 2358 <a 2359 href="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2360 data-standard="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2361 data-image="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2362 data-position="3" 2363 class="product-single__thumbnail" 2364 > 2365 <img 2366 class="lazyload w-100" 2367 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2368 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2369 width="" 2370 height="" 2371 > 2372 </a> 2373 </li> 2374 2375 2376 2377 2378 <li class="swiper-slide" data-type="image"> 2379 <a 2380 href="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2381 data-standard="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2382 data-image="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2383 data-position="4" 2384 class="product-single__thumbnail" 2385 > 2386 <img 2387 class="lazyload w-100" 2388 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2389 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2390 width="" 2391 height="" 2392 > 2393 </a> 2394 </li> 2395 2396 2397 2398 2399 <li class="swiper-slide" data-type="image"> 2400 <a 2401 href="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2402 data-standard="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2403 data-image="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2404 data-position="5" 2405 class="product-single__thumbnail" 2406 > 2407 <img 2408 class="lazyload w-100" 2409 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2410 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2411 width="" 2412 height="" 2413 > 2414 </a> 2415 </li> 2416 2417 2418 2419 2420 <li class="swiper-slide" data-type="image"> 2421 <a 2422 href="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2423 data-standard="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2424 data-image="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2425 data-position="6" 2426 class="product-single__thumbnail" 2427 > 2428 <img 2429 class="lazyload w-100" 2430 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2431 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2432 width="" 2433 height="" 2434 > 2435 </a> 2436 </li> 2437 2438 2439 2440 2441 <li class="swiper-slide" data-type="image"> 2442 <a 2443 href="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2444 data-standard="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2445 data-image="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2446 data-position="7" 2447 class="product-single__thumbnail" 2448 > 2449 <img 2450 class="lazyload w-100" 2451 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2452 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2453 width="" 2454 height="" 2455 > 2456 </a> 2457 </li> 2458 2459 2460 2461 2462 <li class="swiper-slide" data-type="image"> 2463 <a 2464 href="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2465 data-standard="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2466 data-image="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2467 data-position="8" 2468 class="product-single__thumbnail" 2469 > 2470 <img 2471 class="lazyload w-100" 2472 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2473 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2474 width="" 2475 height="" 2476 > 2477 </a> 2478 </li> 2479 2480 2481 2482 </ul> 2483 </div> 2484 2485 <div class="swiper-button-next carousel-button-next d-lg-none"><svg class="icon icon-chevron-right" xmlns="http://www.w3.org/2000/svg" width="7" height="10" viewB
2485ox="0 0 7 10" fill="none"> 2486 <path d="M1.51673 0.0583496L6.2334 4.77502L1.51673 9.49168L0.933398 8.90002L5.0584 4.77502L0.933398 0.650016L1.51673 0.0583496Z" fill="#757575"/> 2487</svg></div> 2488 2489 </div> 2490 2491 <div 2492 id="featured-image-product" 2493 class="col-lg-10 col-12 d-none d-lg-block" 2494 > 2495 <div class="swiper-container gallery-top"> 2496 <div class="swiper-slide product-single__image"> 2497 2498<div class="position-relative product-single__photos slider slider-for" id="ProductPhoto"> 2499 2500 2501 <div class="easyzoom easyzoom--overlay easyzoom--with-thumbnails"> 2502 <a href="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp"> 2503 <img 2504 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2505 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2506 id="ProductPhotoImg" 2507 class="lazyload" 2508 > 2509 2510 </a> 2511 </div> 2512 2513 2514</div> 2515 2516 </div> 2517 <div class="swiper-slide product-single__video" style="display: none"> 2518 <video 2519 src="https://atas4d.biz/images/game-online.mp4" 2520 playsinline 2521 loop 2522 muted 2523 ></video> 2524 </div> 2525 </div> 2526 </div> 2527 </div> 2528 2529 <div id="featured-image-product2" class="col-12 d-lg-none"> 2530 <div class="swiper-container gallery-mobile"> 2531 <ul class="swiper-wrapper"> 2532<li class="swiper-slide img"> 2533 2534 <img 2535 class="swiper-lazy" 2536 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2537 data-src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2538 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2539 width="" 2540 height="" 2541 > 2542 2543 </li> 2544 2545 2546 2547 <li class="swiper-slide vid"> 2548 <video height="100%" src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" playsinline loop autoplay muted></video> 2549 </li> 2550 2551 2552<li class="swiper-slide img"> 2553 2554 <img 2555 class="swiper-lazy" 2556 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2557 data-src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2558 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2559 width="" 2560 height="" 2561 > 2562 2563 </li> 2564 2565 2566<li class="swiper-slide img"> 2567 2568 <img 2569 class="swiper-lazy" 2570 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2571 data-src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2572 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2573 width="" 2574 height="" 2575 > 2576 2577 </li> 2578 2579 2580<li class="swiper-slide img"> 2581 2582 <img 2583 class="swiper-lazy" 2584 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2585 data-src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2586 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2587 width="" 2588 height="" 2589 > 2590 2591 </li> 2592 2593 2594<li class="swiper-slide img"> 2595 2596 <img 2597 class="swiper-lazy" 2598 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2599 data-src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2600 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2601 width="" 2602 height="" 2603 > 2604 2605 </li> 2606 2607 2608<li class="swiper-slide img"> 2609 2610 <img 2611 class="swiper-lazy" 2612 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2613 data-src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2614 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2615 width="" 2616 height="" 2617 > 2618 2619 </li> 2620 2621 2622<li class="swiper-slide img"> 2623 2624 <img 2625 class="swiper-lazy" 2626 src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2627 data-src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 2628 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 2629 width="" 2630 height="" 2631 > 2632 2633 </li> 2634 2635 2636 </ul> 2637 2638 2639 <div class="swiper-button-prev"><svg class="icon icon-chevron-left" xmlns="http://www.w3.org/2000/svg" width="7" height="12" viewBox="0 0 7 12"> <circle cx="60%" cy="50%" r="12" fill="transparent" /> <path d="M6.35355339,10.6464466 C6.54881554,10.8417088 6.54881554,11.1582912 6.35355339,11.3535534 C6.15829124,11.5488155 5.84170876,11.5488155 5.64644661,11.3535534 L0.646446609,6.35355339 C0.451184464,6.15829124 0.451184464,5.84170876 0.646446609,5.64644661 L5.64644661,0.646446609 C5.84170876,0.451184464 6.15829124,0.451184464 6.35355339,0.646446609 C6.54881554,0.841708755 6.54881554,1.15829124 6.35355339,1.35355339 L1.70710678,6 L6.35355339,10.6464466 Z"/> </svg></div> 2640 <div class="swiper-button-next"><svg class="icon icon-chevron-right" xmlns="http://www.w3.org/2000/svg" width="7" height="10" viewB
2640ox="0 0 7 10" fill="none"> 2641 <path d="M1.51673 0.0583496L6.2334 4.77502L1.51673 9.49168L0.933398 8.90002L5.0584 4.77502L0.933398 0.650016L1.51673 0.0583496Z" fill="#757575"/> 2642</svg></div> 2643 2644 <!-- Add Pagination --> 2645 <div class="swiper-pagination"></div> 2646 2647 </div> 2648 </div> 2649 2650 <div class="product-m-pageleb-video col-12 text-center d-lg-none"> 2651 <!-- product video --> 2652 <style> 2653 .view-video{display:block; margin:auto; padding:5px 10px;font-size:16px;font-weight:bold;border:2px solid #212121;background:#fff;} 2654 .view-video .icon-play{fill:#212121;vertical-align: middle;} 2655 .video-modal{display:none;position:fixed;background: rgba(0,0,0,.5); width:100%; height:100%; overflow:auto; z-index:1; top:0;left:0;} 2656 .close-video{position:absolute;right:9px; top:8%;z-index:2;padding:5px;} 2657 .close-video .icon{width:30px;height:30px;} 2658 .video-container {position: relative;padding-bottom: 48.25%;padding-top: 35px;height: 0;box-shadow: 0 4px 5px 0 rgba(0,0,0,0.14), 0 1px 10px 0 rgba(0,0,0,0.12), 0 2px 4px -1px rgba(0,0,0,0.3);} 2659 .video-container iframe {position: absolute;top:60%;left: 0;width: 100%;height: 100%;} 2660 2661 .youtube { 2662 background-color: #000; 2663 margin-bottom: 30px; 2664 position: relative; 2665 padding-top: 56.25%; 2666 overflow: hidden; 2667 cursor: pointer; 2668 width: 100%; 2669 } 2670 .swiper-slide .youtube { 2671 max-width: 480px; 2672 } 2673 .youtube img { 2674 width: 100%; 2675 top: -16.82%; 2676 left: 0; 2677 opacity: 0.7; 2678 } 2679 .youtube .play-button { 2680 width: 90px; 2681 height: 60px; 2682 background-color: #333; 2683 box-shadow: 0 0 30px rgba( 0,0,0,0.6 ); 2684 z-index: 1; 2685 opacity: 0.8; 2686 border-radius: 6px; 2687 } 2688 .youtube .play-button:before { 2689 content: ""; 2690 border-style: solid; 2691 border-width: 15px 0 15px 26.0px; 2692 border-color: transparent transparent transparent #fff; 2693 } 2694 .youtube img, 2695 .youtube .play-button { 2696 cursor: pointer; 2697 } 2698 .youtube img, 2699 .youtube iframe, 2700 .youtube .play-button, 2701 .youtube .play-button:before { 2702 position: absolute; 2703 } 2704 .youtube .play-button, 2705 .youtube .play-button:before { 2706 top: 50%; 2707 left: 50%; 2708 transform: translate3d( -50%, -50%, 0 ); 2709 } 2710 .youtube iframe { 2711 height: 100%; 2712 width: 100%; 2713 top: 0; 2714 left: 0; 2715 } 2716 </style> 2717 2718 2719 </div> 2720</div> 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738<div class="product-desc-add position-relative d-none d-lg-block m-0"> 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801</div> 2802
2803<script> 2804 if ($(window).width() < 991) { 2805 var direction = 'horizontal' 2806 } else { 2807 var direction = 'vertical' 2808 $(".gallery-thumbs").height($("#ProductPhotoImg").height()) 2809 } 2810 var swiper = new Swiper('.gallery-thumbs', { 2811 2812 // loop: true, 2813 2814 direction, 2815 slidesPerView: 4.5, 2816 spaceBetween: 12, 2817 navigation: { 2818 nextEl: '.swiper-button-next', 2819 prevEl: '.swiper-button-prev', 2820 } 2821 }); 2822 2823 var swiper = new Swiper('.gallery-mobile', { 2824 //loop: true, 2825 lazy: true, 2826 speed: 300, 2827 resistance : true, 2828 resistanceRatio : 0, 2829 freeModeMomentumRatio : 0.45, 2830 freeModeMomentumVelocityRatio : 1.5, 2831 navigation: { 2832 nextEl: '.swiper-button-next', 2833 prevEl: '.swiper-button-prev', 2834 }, 2835 pagination: { 2836 el: '.swiper-pagination' 2837 }, 2838 useCSS3Transforms: false, 2839 loop: false, 2840 on: { 2841 init: function () { 2842 console.log('swiper initialized'); 2843 var currentVideo = $("[data-swiper-slide-index=" + this.realIndex + "]").find("video"); 2844 currentVideo.trigger('play'); 2845 }, 2846 }, 2847 }); 2848 var sliderVideos = $(".swiper-slide video"); 2849 2850 /* SWIPER API - Event will be fired after animation to other slide (next or previous) */ 2851 swiper.on('slideChange', function () { 2852 console.log('slide changed'); 2853 sliderVideos.each(function( index ) { 2854 this.currentTime = 0; 2855 }); 2856 var prevVideo = $(`[data-swiper-slide-index="${this.previousIndex}]"`).find("video"); 2857 var currentVideo = $(`[data-swiper-slide-index="${this.realIndex}"]`).find("video"); 2858 prevVideo.trigger('stop'); 2859 currentVideo.trigger('play'); 2860 }); 2861 2862 2863 $("[data-video]").click(function(){ 2864 const file = $(this).data("video") 2865 $(".product-single__video").show() 2866 $(".product-single__image").hide() 2867 $(".product-single__video").find("video").attr("src", file) 2868 $(".product-single__video").find("video")[0].play(); 2869 }) 2870 $("[data-image]").click(function(){ 2871 $(".product-single__video").hide() 2872 $(".product-single__image").show() 2873 $(".product-single__video").find("video")[0].pause(); 2874 }) 2875 2876 $("#product-image .swiper-slide").each(function(){ 2877 let width = $(this).width() 2878 $(this).height(width) 2879 }) 2880 2881 $(window).resize(function() { 2882 $("#product-image .swiper-slide").each(function(){ 2883 let width = $(this).width() 2884 $(this).height(width) 2885 }) 2886 }) 2887</script>
2887 2888 2889 </div> 2890 2891 </div> 2892 <div id="product-meta" class="col-lg-5 p-0"> 2893 <div class="product-meta"> 2894 <style> 2895 .product-meta--review {margin-top:10px} 2896 .freeship * {font-size: 14px !important;font-style: normal;} 2897</style> 2898<h1 itemprop="name" class="mb-2">ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap</h1> 2899 2900<div itemprop="offers" itemscope itemtype="http://schema.org/Offer"> 2901 <meta itemprop="priceCurrency" content="IDR"> 2902 2903 <link itemprop="availability" href="https://schema.org/InStock"> 2904
2904<script 2905 type="text/javascript" 2906 src="//platform-api.sharethis.com/js/sharethis.js#property=5acdc0aa3ef3c0001396fd50&product=custom-share-buttons" 2907 async="async" 2908 ></script>
2908 2909 2910 2911 2912 2913 <span class="visually-hidden">Translation missing: en.products.general.regular_price</span> 2914 2915 <span class="visually-hidden">Translation missing: en.products.general.sale_price</span> 2916 2917 <div class="row no-gutters mb-3"> 2918 <span 2919 id="ProductPrice" 2920 class="h2 ProductPrice" 2921 itemprop="price" 2922 content="1.349.417" 2923 > 2924 Rp 1.349.417 2925 </span> 2926 <div class="discount-product-detail"> 2927 <p id="ComparePrice" class="ComparePrice mt-2 mt-lg-0"> 2928 Rp 8.000.008 2929 </p> 2930 <span class=" tag-discount"> 2931 2932 2933 <span id="newDiscount" class="product-tag persentase-discount hide"> 2934 (20%) 2935 </span><br> 2936 2937 </span> 2938 </div> 2939 </div> 2940 2941 <div class="row no-gutters meta-sds"> 2942 <div class="col-12 mb-2 mb-lg-0 stock-info"> 2943 2944 2945 <span 2946 id="ProductStock-Product" 2947 class="product-single__stock mb-2 hide" 2948 > 2949 2950 2951 2952 2953 Barang dikirim pada 2954 2955 2956 2957 </span> 2958 2959 <style> 2960 .short-desc-desktop { 2961 margin-bottom: 2rem; 2962 } 2963 .short-desc ul li:nth-child(n + 4) { 2964 display: none; 2965 } 2966 .short-desc ul li.showList:nth-child(n + 4) { 2967 display: list-item; 2968 } 2969 label.more { 2970 display: none; 2971 } 2972 label.more.showMe { 2973 display: block; 2974 font-size: 12px; 2975 text-transform: uppercase; 2976 font-weight: 700; 2977 cursor: pointer; 2978 } 2979</style> 2980 2981 <div class="short-desc-desktop d-none d-lg-block"> 2982 <div class="short-desc"> 2983 <ul> 2984<li> 2985<a href="https://atas4d.biz/"><strong>ATAS4D</strong></a><br><strong></strong><strong></strong> 2986</li> 2987<li> 2988<a href="https://atas4d.biz/"><strong>ATAS 4D</strong></a><br> 2989</li> 2990<li><a href="https://atas4d.biz/"><strong>ATAS4D LOGIN</strong></a></li> 2991 2992 </div> 2993 <label class="more">Show More â</label> 2994 </div> 2995 2996
2997<script> 2998 var liCount; 2999 $(document).ready(function () { 3000 $(".short-desc ul").each(function() { 3001 liCount = $(this).children("li").length; 3002 if (liCount > 3) { 3003 $(this).parent(".short-desc").next(".more").addClass("showMe"); 3004 } 3005 }); 3006 3007 $(".more").click(function () { 3008 //$(".short-desc").find("li").addClass("showList"); 3009 // $(this).hide(); 3010 $("#product-desc").find("ul").show() 3011 $('html, body').animate({ 3012 scrollTop: $("#product-desc").offset().top - 250 3013 }, 2000); 3014 $("#product-desc").css("height","auto"); 3015 $("#more_content").remove(); 3016 $(".product-spec").append("<div id='less_content' class='readmore'><span class='less_content'>Less</span></div>") 3017 }); 3018 }); 3019</script>
3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050<style> 3051 .c-pdp-product-info__service--active { 3052 font-size: 12px; 3053 padding-left: 10px; 3054 text-align: left; 3055 max-width: 550px; 3056 margin: auto; 3057 } 3058 .c-pdp-product-info__service--active li { 3059 list-style: disc; 3060 } 3061 .c-pdp-product-info { 3062 background-color: #f5f5f5; 3063 padding: 12px; 3064 margin: 0; 3065 } 3066 .freeship em { 3067 font-style: italic; 3068 font-size: 12px !important; 3069 } 3070</style> 3071
3072<script> 3073 $(document).ready(function(){ 3074 if ( $(".c-pdp-product-info__service li").length == 1 ) { 3075 $(".c-pdp-product-info__service").addClass("no-bullet"); 3076 $(".c-pdp-product-info__service li").addClass("no-bullets"); 3077 } 3078 }); 3079</script>
3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 </div> 3092 </div> 3093 3094 <div id="purchaseProduct"> 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 <style> 3110 label[for="product-select-option-0"] { display: none; } 3111 #product-select-option-0 { display: none; } 3112 #product-select-option-0 + .custom-style-select-box { display: none !important; } 3113 </style> 3114
3114<script> 3115 $(window).load(function() { $('.selector-wrapper:eq(0)').hide(); }); 3116 </script>
3116 3117 3118 3119 3120 3121 3122 <div 3123 id="variantVariants" 3124 class="swatch swatch-Variants clearfix" 3125 data-option-index="0" 3126 > 3127 <div class="header header-swatch bold"> 3128 <strong>Variants</strong> 3129 </div> 3130 3131 3132 3133 3134 3135 3136 3137 3138 <div 3139 data-label="swatch-0-standard" 3140 data-value="GAME TOGEL" 3141 class="p-0 swatch-element standard available" 3142 > 3143 3144 <input 3145 data-text="" 3146 id="swatch-0-standard" 3147 class="variant-swatch" 3148 type="radio" 3149 name="option-0" 3150 value="TOTO MACAU 4D" 3151 3152 checked 3153 3154 3155 > 3156 3157 <label 3158 for="swatch-0-standard" 3159 data-src="https://outerbloom.com/cdn/shopifycloud/storefront/assets/no-image-2048-a2addb12_800x.gif" 3160 data-index="1" 3161 > 3162 3163 3164 <span class="d-block">ATAS4D</span> 3165 3166 <img class="crossed-out" src="https://outerbloom.com/cdn/shop/t/138/assets/soldout.png?v=169392025580765019841752652421"> 3167 </label> 3168 3169 </div> 3170 3171 3172
3172<script> 3173 jQuery('.swatch[data-option-index="0"] .standard').removeClass('soldout').addClass('available').find(':radio').removeAttr('disabled'); 3174 </script>
3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 <div 3184 data-label="swatch-0-custom-logo-photo-for-frame" 3185 data-value="Custom logo & photo for frame" 3186 class="p-0 swatch-element custom-logo-photo-for-frame available" 3187 > 3188 3189 <input 3190 data-text="" 3191 id="swatch-0-custom-logo-photo-for-frame" 3192 class="variant-swatch swatch-custom" 3193 type="radio" 3194 name="option-0" 3195 value="Custom logo & photo for frame" 3196 3197 3198 > 3199 3200 <label 3201 for="swatch-0-custom-logo-photo-for-frame" 3202 data-src="https://outerbloom.com/cdn/shopifycloud/storefront/assets/no-image-2048-a2addb12_800x.gif" 3203 data-index="2" 3204 > 3205 3206 3207 <span class="d-block">ATAS 4D</span> 3208 3209 <img class="crossed-out" src="https://outerbloom.com/cdn/shop/t/138/assets/soldout.png?v=169392025580765019841752652421"> 3210 </label> 3211 3212 </div> 3213 3214 3215
3215<script> 3216 jQuery('.swatch[data-option-index="0"] .custom-logo-photo-for-frame').removeClass('soldout').addClass('available').find(':radio').removeAttr('disabled'); 3217 </script>
3217 3218 3219 3220 3221 <!-- Add swatch change handler for hash URL update --> 3222
3222<script> 3223 jQuery(document).ready(function($) { 3224 // Store product data for variant availability checking 3225 var productData = {"id":7881418965207,"title":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap","handle":"outerbloom-mulan-bag-hampers","description":"\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eATAS4D\u003c\/strong\u003e\u003cbr\u003e\u003cstrong\u003e\u003c\/strong\u003e\u003cstrong\u003e\u003c\/strong\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTOTO\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\u003cstrong\u003eTOGEL\u003c\/strong\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eATAS4D adalah platform game togel toto macau 4D terbaik dengan fitur lengkap, akses cepat, pasaran terpercaya, dan peluang kemenangan menarik setiap hari.\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1589\/6833\/files\/Ruby-Mulan-Bag.jpg?v=1734513286\" alt=\"\"\u003e\u003c\/p\u003e\n\u003ctable style=\"width: 100.091%;\" width=\"100%\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 33.7327%;\"\u003eSKU\u003c\/td\u003e\n\u003ctd style=\"width: 65.9908%;\"\u003e[C]ATAS4D\u003cbr\u003e[C]OBIPCL1004-CNY2026\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 33.7327%;\"\u003eIsi\u003c\/td\u003e\n\u003ctd style=\"width: 65.9908%;\"\u003elink login situs toto togel 4D\u003cbr\u003etoto4d resmi terpercaya 2026\u003cbr\u003ebandar toto macau gacor\u003cbr\u003esitus toto4d togel macau\u003cbr\u003etoto4d togel macau gacor\u003cbr\u003esitus toto togel macau\u003cbr\u003etoto togel 4D\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e","published_at":"2025-12-23T16:52:21+07:00","created_at":"2023-01-06T14:53:52+07:00","vendor":"Outerbloom Hampers","type":"Parcel Inhouse","tags":["Brand_Outerbloom Hampers","card","CNY","CNY 2026","Collection_Heritage","custom-hampers","formdate","icon-card","icon-gift","Inhouse","MonSatParcel","MonSatSiang","no-deliverytime","Parcel","Parcel CNY","Parcel Inhouse","Parcel Nusantara","Pengiriman_Bekasi","Pengiriman_Bogor","Pengiriman_Depok","Pengiriman_Jakarta","Pengiriman_Kota Lainnya","Pengiriman_Tangerang","POO Parcel","ship-paketkecil","takeoutselfpickup","Untuk_Hari Raya","uploadfotocard","upsell-inhouse"],"price":1.349.41700,"price_min":1.349.41700,"price_max":63500000,"available":true,"price_varies":true,"compare_at_price":73500000,"compare_at_price_min":73500000,"compare_at_price_max":78500000,"compare_at_price_varies":true,"variants":[{"id":45873023910103,"title":"Standard","option1":"Standard","option2":null,"option3":null,"sku":"[C]ATAS4D","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap - Standard","public_title":"Standard","options":["Standard"],"price":1.349.41700,"weight":5000,"compare_at_price":73500000,"inventory_quantity":0,"inventory_management":"shopify","inventory_policy":"continue","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":45873024008407,"title":"Custom logo \u0026 photo for frame","option1":"Custom logo \u0026 photo for frame","option2":null,"option3":null,"sku":"[C]OBIPCL1004-CNY2026","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap - Custom logo \u0026 photo for frame","public_title":"Custom logo \u0026 photo for frame","options":["Custom logo \u0026 photo for frame"],"price":63500000,"weight":5000,"compare_at_price":78500000,"inventory_quantity":0,"inventory_management":"shopify","inventory_policy":"continue","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/outerbloom.com\/cdn\/shop\/files\/CNY-Ruby-Mulan-Bag.jpg?v=1766041636","\/\/outerbloom.com\/cdn\/shop\/files\/nibble-box-crunchy-jam.jpg?v=1767855108","\/\/outerbloom.com\/cdn\/shop\/files\/nibble-box-berry-affair.jpg?v=1767855108","\/\/outerbloom.com\/cdn\/shop\/files\/madu_c5806a73-3334-4300-bbe4-c59939ac5270.jpg?v=1768357765","\/\/outerbloom.com\/cdn\/shop\/files\/serenitea_ab87e31e-f6d7-4ee1-97ee-9709a9b861f5.jpg?v=1768357765","\/\/outerbloom.com\/cdn\/shop\/files\/diffuser-woody-breeze.jpg?v=1767855083","\/\/outerbloom.com\/cdn\/shop\/files\/frame_b97b5afe-8c12-44e0-a70b-628c49f1c7ac.jpg?v=1767855108"],"featured_image":"\/\/outerbloom.com\/cdn\/shop\/files\/CNY-Ruby-Mulan-Bag.jpg?v=1766041636","options":["Variants"],"media":[{"alt":null,"id":36696952045783,"position":1,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/CNY-Ruby-Mulan-Bag.jpg?v=1766041636"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/CNY-Ruby-Mulan-Bag.jpg?v=1766041636","width":850},{"alt":null,"id":36806926401751,"position":2,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/preview_images\/c89f6e0ce8a04dc1842e9dc31bb3de3e.thumbnail.0000000000.jpg?v=1767854932"},"aspect_ratio":1.0,"duration":16730,"media_type":"video","sources":[{"format":"mp4","height":480,"mime_type":"video\/mp4","url":"\/\/outerbloom.com\/cdn\/shop\/videos\/c\/vp\/c89f6e0ce8a04dc1842e9dc31bb3de3e\/c89f6e0ce8a04dc1842e9dc31bb3de3e.SD-480p-1.5Mbps-66570824.mp4?v=0","width":480},{"format":"mp4","height":1080,"mime_type":"video\/mp4","url":"\/\/outerbloom.com\/cdn\/shop\/videos\/c\/vp\/c89f6e0ce8a04dc1842e9dc31bb3de3e\/c89f6e0ce8a04dc1842e9dc31bb3de3e.HD-1080p-7.2Mbps-66570824.mp4?v=0","width":1080},{"format":"mp4","height":720,"mime_type":"video\/mp4","url":"\/\/outerbloom.com\/cdn\/shop\/videos\/c\/vp\/c89f6e0ce8a04dc1842e9dc31bb3de3e\/c89f6e0ce8a04dc1842e9dc31bb3de3e.HD-720p-4.5Mbps-66570824.mp4?v=0","width":720},{"format":"m3u8","height":1080,"mime_type":"application\/x-mpegURL","url":"\/\/outerbloom.com\/cdn\/shop\/videos\/c\/vp\/c89f6e0ce8a04dc1842e9dc31bb3de3e\/c89f6e0ce8a04dc1842e9dc31bb3de3e.m3u8?v=0","width":1080}]},{"alt":null,"id":36727314612439,"position":3,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/nibble-box-crunchy-jam.jpg?v=1767855108"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/nibble-box-crunchy-jam.jpg?v=1767855108","width":850},{"alt":null,"id":36727314350295,"position":4,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/nibble-box-berry-affair.jpg?v=1767855108"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/nibble-box-berry-affair.jpg?v=1767855108","width":850},{"alt":null,"id":36727369236695,"position":5,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/madu_c5806a73-3334-4300-bbe4-c59939ac5270.jpg?v=1768357765"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/madu_c5806a73-3334-4300-bbe4-c59939ac5270.jpg?v=1768357765","width":850},{"alt":null,"id":36727136878807,"position":6,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/serenitea_ab87e31e-f6d7-4ee1-97ee-9709a9b861f5.jpg?v=1768357765"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/serenitea_ab87e31e-f6d7-4ee1-97ee-9709a9b861f5.jpg?v=1768357765","width":850},{"alt":null,"id":36727264116951,"position":7,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/diffuser-woody-breeze.jpg?v=1767855083"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/diffuser-woody-breeze.jpg?v=1767855083","width":850},{"alt":null,"id":36727117086935,"position":8,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/frame_b97b5afe-8c12-44e0-a70b-628c49f1c7ac.jpg?v=1767855108"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/frame_b97b5afe-8c12-44e0-a70b-628c49f1c7ac.jpg?v=1767855108","width":850}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eATAS4D\u003c\/strong\u003e\u003cbr\u003e\u003cstrong\u003e\u003c\/strong\u003e\u003cstrong\u003e\u003c\/strong\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTOTO\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\u003cstrong\u003eTOGEL\u003c\/strong\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eATAS4D adalah platform game togel toto macau 4D terbaik dengan fitur lengkap, akses cepat, pasaran terpercaya, dan peluang kemenangan menarik setiap hari.\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1589\/6833\/files\/Ruby-Mulan-Bag.jpg?v=1734513286\" alt=\"\"\u003e\u003c\/p\u003e\n\u003ctable style=\"width: 100.091%;\" width=\"100%\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 33.7327%;\"\u003eSKU\u003c\/td\u003e\n\u003ctd style=\"width: 65.9908%;\"\u003e[C]ATAS4D\u003cbr\u003e[C]OBIPCL1004-CNY2026\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 33.7327%;\"\u003eIsi\u003c\/td\u003e\n\u003ctd style=\"width: 65.9908%;\"\u003elink login situs toto togel 4D\u003cbr\u003etoto4d resmi terpercaya 2026\u003cbr\u003ebandar toto macau gacor\u003cbr\u003esitus toto4d togel macau\u003cbr\u003etoto4d togel macau gacor\u003cbr\u003esitus toto togel macau\u003cbr\u003etoto togel 4D\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e"}; 3226 3227 3228 // Handle first option changes to update available second options 3229 $('.swatch[data-option-index="0"] input[type="radio"]').on('change', function() { 3230 // Update single-option-selector first 3231 var optionValue = $(this).val(); 3232 var $selector = $('.single-option-selector').eq(0); 3233 if ($selector.length > 0) { 3234 $selector.val(optionValue).trigger('change'); 3235 } 3236 3237 // Then update available variant options 3238 updateAvailableVariantOptions(); 3239 }); 3240 3241 // Function to update available vase options based on selected variant 3242 function updateAvailableVariantOptions() { 3243 var selectedVariant = $('.swatch[data-option-index="0"] input[type="radio"]:checked').val(); 3244 3245 if (!selectedVariant) return; 3246 3247 // Get available vase options for the selected variant 3248 var availableVases = getAvailableVasesForVariant(selectedVariant); 3249 3250 // Update vase swatch visibility and availability 3251 $('.swatch[data-option-index="1"] .swatch-element').each(function() { 3252 var vaseValue = $(this).data('value'); 3253 var $input = $(this).find('input[type="radio"]'); 3254 var $label = $(this).find('label'); 3255 3256 if (availableVases.includes(vaseValue)) { 3257 // Show and enable this vase option 3258 $(this).show().removeClass('soldout unavailable').addClass('available'); 3259 $input.prop('disabled', false); 3260 $label.removeClass('disabled'); 3261 } else { 3262 // Hide or disable this vase option 3263 $(this).hide().removeClass('available').addClass('unavailable'); 3264 $input.prop('disabled', true).prop('checked', false); 3265 $label.addClass('disabled'); 3266 } 3267 }); 3268 3269 // Auto-select first available vase if none is selected 3270 var $checkedVase = $('.swatch[data-option-index="1"] input[type="radio"]:checked:enabled'); 3271 if ($checkedVase.length === 0) { 3272 var $firstAvailable = $('.swatch[data-option-index="1"] input[type="radio"]:enabled').first(); 3273 if ($firstAvailable.length > 0) { 3274 $firstAvailable.prop('checked', true).trigger('change'); 3275 } 3276 } 3277 } 3278 3279 // Function to get available vases for a specific variant 3280 function getAvailableVasesForVariant(variantValue) { 3281 var availableVases = []; 3282 3283 // Loop through all product variants to find matching vases 3284 if (productData && productData.variants) {
3285 productData.variants.forEach(function(variant) { 3286 if (variant.available && variant.option1 === variantValue) { 3287 var vaseOption = variant.option2; 3288 if (vaseOption && !availableVases.includes(vaseOption)) { 3289 availableVases.push(vaseOption); 3290 } 3291 } 3292 }); 3293 } 3294 3295 return availableVases; 3296 } 3297 3298 // Initialize vase options on page load 3299 setTimeout(function() { 3300 updateAvailableVariantOptions(); 3301 }, 100); 3302 3303 }); 3304 </script>
3304 3305 </div> 3306 3307 3308 3309 3310 3311 3312 3313<style> 3314 .select2-results__option[aria-disabled] { 3315 display: none; 3316 } 3317 3318 .towel-bordir { 3319 width: 100%; 3320 display: flex; 3321 align-items: center; 3322 justify-content: space-around; 3323 } 3324 @media screen and (max-width: 768px) { 3325 .ios .form-group-variant .variant-metafield { 3326 display: block !important; 3327 width: 100% !important; 3328 padding: 12px 16px !important; 3329 border: 1px solid #212121 !important; 3330 background: #fff !important; 3331 font-size: 16px !important; 3332 -webkit-appearance: none !important; 3333 -moz-appearance: none !important; 3334 appearance: none !important; 3335 background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6,9 12,15 18,9'%3e%3c/polyline%3e%3c/svg%3e") !important; 3336 background-repeat: no-repeat !important; 3337 background-position: right 12px center !important; 3338 background-size: 16px !important; 3339 color: #333 !important; 3340 min-height: 44px !important; 3341 } 3342 3343 .ios .form-group-variant .variant-metafield:focus { 3344 outline: none !important; 3345 border-color: #007AFF !important; 3346 box-shadow: 0 0 0 3px rgba(0, 122, 255, 0.1) !important; 3347 } 3348 3349 .ios .form-group-variant .variant-metafield option { 3350 padding: 12px 16px !important; 3351 font-size: 16px !important; 3352 color: #333 !important; 3353 background: #fff !important; 3354 } 3355 3356 .ios .form-group-variant .variant-metafield option:checked { 3357 background: #007AFF !important; 3358 color: #fff !important; 3359 } 3360 3361 .ios .form-group-variant .variant-metafield option:disabled { 3362 color: #999 !important; 3363 background: #f5f5f5 !important; 3364 } 3365 3366 .ios .form-group-variant .select2-container { 3367 display: none !important; 3368 } 3369 .ios .form-group-variant label { 3370 font-size: 14px !important; 3371 font-weight: 600 !important; 3372 color: #333 !important; 3373 margin-bottom: 8px !important; 3374 } 3375 } 3376 @media screen and (max-width: 768px) { 3377 body:not(.ios) .form-group-variant .variant-metafield { 3378 display: block !important; 3379 width: 1px !important; 3380 padding: 0 !important; 3381 border-color: #fff !important; 3382 } 3383 } 3384</style> 3385 3386 3387 3388
3389<script> 3390 // Detect iOS and add class to body 3391 function detectIOS() { 3392 const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; 3393 if (isIOS) { 3394 document.body.classList.add('ios'); 3395 3396 // Initialize native select for iOS on variant metafields 3397 setTimeout(function() { 3398 initIOSVariantMetafields(); 3399 }, 100); 3400 } 3401 return isIOS; 3402 } 3403 3404 function initIOSVariantMetafields() { 3405 const isIOS = document.body.classList.contains('ios'); 3406 if (!isIOS) return; 3407 3408 // Find all variant metafield selects 3409 const variantSelects = document.querySelectorAll('.form-group-variant .variant-metafield'); 3410 3411 variantSelects.forEach(function(select) { 3412 // Destroy Select2 if it exists 3413 if ($(select).hasClass('select2-hidden-accessible')) { 3414 $(select).select2('destroy'); 3415 } 3416 3417 // Remove Select2 classes 3418 select.classList.remove('select2-hidden-accessible'); 3419 3420 // Show the native select 3421 select.style.display = 'block'; 3422 select.style.width = '100%'; 3423 3424 // Add iOS specific event listeners 3425 select.addEventListener('focus', function() { 3426 this.style.borderColor = '#007AFF'; 3427 this.style.boxShadow = '0 0 0 3px rgba(0, 122, 255, 0.1)'; 3428 }); 3429 3430 select.addEventListener('blur', function() { 3431 this.style.borderColor = '#ddd'; 3432 this.style.boxShadow = 'none'; 3433 3434 // Clear error styling when field loses focus (if it has value) 3435 if (this.value && this.value !== '') { 3436 const fieldContainer = this.closest('.form-group-variant'); 3437 if (fieldContainer) { 3438 fieldContainer.classList.remove('field-error'); 3439 const existingError = fieldContainer.querySelector('.error-message'); 3440 if (existingError) { 3441 existingError.remove(); 3442 } 3443 } 3444 } 3445 }); 3446 3447 select.addEventListener('change', function() { 3448 // Trigger any existing change handlers 3449 $(this).trigger('change'); 3450 3451 // Clear error styling when value changes (if it has value) 3452 if (this.value && this.value !== '') { 3453 const fieldContainer = this.closest('.form-group-variant'); 3454 if (fieldContainer) { 3455 fieldContainer.classList.remove('field-error'); 3456 const existingError = fieldContainer.querySelector('.error-message'); 3457 if (existingError) { 3458 existingError.remove(); 3459 } 3460 } 3461 } 3462 }); 3463 }); 3464 } 3465 3466 // Run detection on page load 3467 document.addEventListener('DOMContentLoaded', function() { 3468 detectIOS(); 3469 }); 3470 3471 // Also run immediately in case DOM is already loaded 3472 if (document.readyState === 'loading') { 3473 document.addEventListener('DOMContentLoaded', detectIOS); 3474 } else { 3475 detectIOS(); 3476 } 3477 3478 3479 3480 3481</script>
3481 3482 3483 3484 3485 3486 3487 3488<select 3489 name="id[]" 3490 id="productSelect" 3491 class="product-single__variants ignore hide" 3492> 3493 3494 3495 3496 <option 3497 3498 selected="selected" 3499 3500 data-sku="[C]ATAS4D" 3501 value="45873023910103" 3502 > 3503 TOTO SLOT GACOR 3504 </option> 3505 3506 3507 3508 3509 3510 <option 3511 3512 data-sku="[C]OBIPCL1004-CNY2026" 3513 value="45873024008407" 3514 > 3515 SITUS TOGEL 4D 3516 </option> 3517 3518 3519 3520</select> 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619
3620<script src="https://outerbloom.com/cdn/shop/t/138/assets/jquery.magnific-popup.min.js?v=184369421263510081681752652422" type="text/javascript"></script>
3620 3621
3622<script> 3623 $('.size-chart-open-popup').magnificPopup({ 3624 type:'inline', 3625 midClick: true 3626 }); 3627</script>
3627 3628 3629 3630 3631 3632 <div class="upload-image-preview"> 3633 3634 3635 3636 3637 3638 <style> 3639 .file-dnd * { 3640 margin: 0; 3641 padding: 0; 3642 box-sizing: border-box; 3643 } 3644 .file-dnd { 3645 width: 100%; 3646 height: 250px; 3647 border: 1px solid #ddd; 3648 border-radius: 10px; 3649 padding: 15px; 3650 display: flex; 3651 flex-direction: column; 3652 gap: 10px; 3653 margin: auto; 3654 } 3655 .file-dnd input { 3656 display: none; 3657 } 3658 .file-dnd .before-upload { 3659 border: 1px dashed #888; 3660 flex: 1; 3661 border-radius: 5px; 3662 display: flex; 3663 justify-content: center; 3664 align-items: center; 3665 text-align: center; 3666 cursor: pointer; 3667 } 3668 .file-dnd .before-upload > div { 3669 display: flex; 3670 flex-direction: column; 3671 align-items: center; 3672 gap: 8px; 3673 } 3674 .file-dnd .before-upload > div h4 { 3675 width: 150px; 3676 } 3677 .file-dnd .before-upload > div p { 3678 font-size: 12px !important; 3679 color: #555; 3680 } 3681 .file-dnd.active .before-upload { 3682 border: 1px solid #5750d9; 3683 background-color: #f5f5ff; 3684 } 3685 .file-dnd .after-upload { 3686 position: relative; 3687 display: none; 3688 } 3689 .file-dnd .after-upload img { 3690 width: 100%; 3691 border-radius: 5px; 3692 max-height: 180px; 3693 object-fit: contain; 3694 display: block; 3695 } 3696 .file-dnd .after-upload .clear-btn { 3697 position: absolute; 3698 top: 10px; 3699 right: 10px; 3700 background: rgba(0, 0, 0, 0.5); 3701 width: 15px; 3702 height: 15px; 3703 text-align: center; 3704 line-height: 15px; 3705 border-radius: 50%; 3706 color: #fff; 3707 cursor: pointer; 3708 font-size: 14px; 3709 } 3710</style> 3711<div 3712 class="file-dnd mb-3" 3713 3714 style="display: none" 3715 3716> 3717 <label for="upload-photo">Upload your Photo:</label> 3718 <input type="file" id="upload-photo" accept="image/*"> 3719 <input type="hidden" data-properties="Photo"> 3720 <div class="before-upload"> 3721 <div> 3722 <svg id="surface1" xmlns="http://www.w3.org/2000/svg" width="33.053" height="41.719" viewBox="0 0 33.053 41.719"> 3723 <path id="Path_2149" data-name="Path 2149" d="M22.982.322A1.009,1.009,0,0,0,22.257,0H5.982A5.505,5.505,0,0,0,.5,5.472V36.247a5.505,5.505,0,0,0,5.482,5.472H28.071a5.505,5.505,0,0,0,5.482-5.472V11.81a1.085,1.085,0,0,0-.292-.705Zm.292,3.235,6.883,7.225H25.683a2.4,2.4,0,0,1-2.409-2.4Zm4.8,36.147H5.982a3.49,3.49,0,0,1-3.467-3.457V5.472A3.49,3.49,0,0,1,5.982,2.015H21.259V8.384A4.409,4.409,0,0,0,25.683,12.8h5.855V36.247A3.484,3.484,0,0,1,28.071,39.7Zm0,0" transform="translate(-0.5)" fill="#ababab"></path> 3724 <path id="Path_2150" data-name="Path 2150" d="M106.767,401.934H90.18a1.008,1.008,0,1,0,0,2.015h16.6a1.008,1.008,0,1,0-.01-2.015Zm0,0" transform="translate(-81.947 -369.183)" fill="#ababab"></path> 3725 <path id="Path_2151" data-name="Path 2151" d="M120.143,178.328l4.152-4.464v11a1.008,1.008,0,0,0,2.015,0v-11l4.152,4.464a1.005,1.005,0,0,0,1.471-1.371l-5.905-6.339a1,1,0,0,0-1.471,0l-5.905,6.339a1,1,0,0,0,.05,1.421A1.028,1.028,0,0,0,120.143,178.328Zm0,0" transform="translate(-108.776 -156.421)" fill="#ababab"></path> 3726</svg> 3727 3728 <h4>Drag & Drop Photo file or Browse</h4> 3729 <p>Supports: JPEG, PNG, GIF, TIFF</p> 3730 </div> 3731 </div> 3732 <div class="after-upload"> 3733 <div class="clear-btn">×</div> 3734 <img src="" width="" height=""> 3735 </div> 3736</div>
3737<script> 3738 3739 function applyDndFile(el) { 3740 const parent = document.querySelector(".file-dnd") 3741 const beforeUploadEl = el.querySelector(".before-upload") 3742 const afterUploadEl = el.querySelector(".after-upload") 3743 const inputFile = el.querySelector("input[type=file]") 3744 const imagePreview = el.querySelector(".after-upload img") 3745 const clearBtn = el.querySelector(".after-upload .clear-btn") 3746 const inputProps = parent.querySelector("[data-properties]"); 3747 3748 async function upload(name, uri, type) { 3749 try { 3750 const filename = name.split('.')[0] 3751 let formData = new FormData(); 3752 formData.append("file", uri); 3753 const response = await fetch(`https://app.asmaraku.com/api/upload?name=${filename}&dir=gift&type=${type}&shop=outerbloom1.myshopify.com`, { 3754 method: "POST", 3755 body: formData 3756 }) 3757 if(response) { 3758 const res = await response.json() 3759 return res 3760 } 3761 } catch(err){ 3762 console.log(err) 3763 } 3764 } 3765 3766 function showImagePreview(img) { 3767 if(img){ 3768 const blobUrl = URL.createObjectURL(img) 3769 imagePreview.src = blobUrl 3770 afterUploadEl.style.display = "block" 3771 beforeUploadEl.style.display = "none" 3772 } 3773 } 3774 3775 beforeUploadEl.addEventListener("click", (e) => { 3776 e.preventDefault() 3777 inputFile.click() 3778 }) 3779 3780 inputFile.addEventListener("change", async (e) => { 3781 e.preventDefault() 3782 showImagePreview(e.target.files[0]) 3783 var uploadData = await upload(e.target.files[0].name, e.target.files[0], e.target.files[0].type) 3784 inputProps.value = uploadData?.url 3785 }) 3786 3787 clearBtn.addEventListener("click", (e) => { 3788 afterUploadEl.style.display = "none" 3789 beforeUploadEl.style.display = "flex" 3790 inputProps.value = "" 3791 }) 3792 3793 beforeUploadEl.addEventListener("dragover", (e) => { 3794 e.preventDefault() 3795 el.classList.add("active") 3796 }) 3797 3798 beforeUploadEl.addEventListener("dragleave", (e) => { 3799 e.preventDefault() 3800 el.classList.remove("active") 3801 }) 3802 3803 beforeUploadEl.addEventListener("drop", async (e) => { 3804 e.preventDefault() 3805 el.classList.remove("active") 3806 showImagePreview(e.dataTransfer.files[0]) 3807 var uploadData = await upload(e.dataTransfer.files[0].name, e.dataTransfer.files[0], e.dataTransfer.files[0].type) 3808 console.log(uploadData) 3809 inputProps.value = uploadData?.url 3810 }) 3811 } 3812 3813 applyDndFile(document.querySelector(".file-dnd")) 3814 3815 $(document).ready(function(){ 3816 $(".variant-swatch").change(function(){ 3817 const v = $(this).val().toLowerCase() 3818 const list = ["photo", "custom one side", "custom two side"] 3819 if(list.some(item => v.includes(item))) return $(".file-dnd").show() 3820 $(".file-dnd").hide() 3821 $(".file-dnd").find("[data-properties]").val("") 3822 $(".after-upload").hide() 3823 $(".before-upload").css("display", "flex") 3824 }) 3825 }) 3826</script>
3826 3827 3828 </div> 3829 3830 3831 <div class="delivery-city mb-4"> 3832 <h4 class="fw-600 text-uppercase mb-15">Delivery City</h4> 3833 <div class="row justify-content-between m-0"> 3834 <select id="cities" class="form-control" required> 3835 <option value="">Choose Delivery City</option> 3836 </select> 3837 </div> 3838</div> 3839 3840<style> 3841 #cities { 3842 width: 100%; 3843 padding: 10px 35px 10px 12px; 3844 font-size: 14px; 3845 border: 1px solid #ccc; 3846 background-color: #fff; 3847 background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e") !important; 3848 background-repeat: no-repeat !important; 3849 background-position: right 10px center !important; 3850 background-size: 12px !important; 3851 appearance: none; 3852 -webkit-appearance: none; 3853 -moz-appearance: none; 3854 cursor: pointer; 3855 } 3856 3857 #cities { 3858 -webkit-appearance: none; 3859 -moz-appearance: none; 3860 appearance: none; 3861 } 3862 3863 #cities:-ms-expand { 3864 display: none; 3865 } 3866 3867 #cities:focus { 3868 border-color: #212121; 3869 outline: none; 3870 box-shadow: 0 0 0 2px rgba(33, 33, 33, 0.1); 3871 } 3872 3873 #cities:hover { 3874 border-color: #999; 3875 } 3876 3877 #cities option { 3878 padding: 10px; 3879 } 3880</style> 3881
3882<script> 3883 // Cities dropdown uses native HTML select 3884</script>
3884 3885 3886 3887 <div id="row-delivery-date" class="row m-0 mb-3"> 3888 <h4 class="fw-600 text-uppercase col-12 p-0 mb-15">Delivery Date</h4> 3889 <div id="deliveryDate" class="m-0"></div> 3890 <div id="deliveryDateFull"> 3891 <div class=""> 3892 <input 3893 type="text" 3894 id="full-date" 3895 class="date-full calendarbutton btn steps-btn btn-date-time mb-0" 3896 value="Full Calendar" 3897 > 3898 <label for="full-date"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 3899<title>icon-arrow-right</title> 3900<path d="M25.057 15.333l-6.862-6.862c-0.26-0.26-0.26-0.682 0-0.943s0.682-0.26 0.943 0l8 8c0.26 0.26 0.26 0.682 0 0.943l-8 8c-0.26 0.26-0.682 0.26-0.943 0s-0.26-0.682 0-0.943l6.862-6.862h-19.724c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h19.724z"></path> 3901</svg></label> 3902 </div> 3903 <button class="btnChangeDeliveryDate hide">Change Delivery Date</button> 3904 </div> 3905 <div class="form-group p-0"> 3906 <input type="text" id="propDeliveryDate" required class="hide"> 3907 </div> 3908 </div> 3909 3910 <p id="noteDeliveryDate" class="mb-3"></p> 3911 3912 3913 <input type="hidden" id="propDeliveryTime" value="-" disabled> 3914 3915 3916 3917 3918 3919 <div id="personalizeBtn"> 3920 3921 3922 3923 3924 <button id="btnPurchase" 3925 class="btn text-uppercase w-100 fw-400" 3926 3927 3928 > 3929 3930 MAKE IT PERSONAL â 3931 3932 </button> 3933 <div class="button-share-wishlist d-flex justify-content-around mt-3"> 3934 <div class="button-share text-center"> 3935 <p id="shareButton" class="d-flex gap-2"><span>SHARE</span><svg xmlns="http://www.w3.org/2000/svg" width="15" height="13" viewBox="0 0 15 13" fill="none"> 3936 <path d="M13.825 5.85006L10 2.02506V4.07506L9.28333 4.18339C5.69167 4.69172 3.25833 6.57506 1.86667 9.45839C3.8 8.09172 6.2 7.43339 9.16667 7.43339H10V9.67506M8.33333 8.28339C4.60833 8.45839 1.94167 9.80006 0 12.5167C0.833333 8.35006 3.33333 4.18339 9.16667 3.35006V0.0167236L15 5.85006L9.16667 11.6834V8.26672C8.89167 8.26672 8.61667 8.27506 8.33333 8.28339Z" fill="#212121"/> 3937</svg> 3938</p> 3939 </div> 3940 <div class="button-wishlist text-center"> 3941 <button type="button" id="wishButton" class="d-flex gap-2 wishlist-toggle" data-wishlist-button data-product-handle="outerbloom-mulan-bag-hampers" style="background: none; border: none; cursor: pointer; padding: 0; color: inherit; align-items: center; justify-content: center;"> 3942 <span>WISHLIST</span> 3943 <div class="wishlist-icon-wrapper" style="display: flex; align-items: center; justify-content: center; width: 16px; height: 22px;"> 3944 <svg class="wishlist-icon-outline" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:block;"> 3945 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125ZM12 19.9991C10.4688 19.1241 1.0625 13.5077 1.0625 7.15625C1.06424 5.70638 1.64096 4.31639 2.66618 3.29118C3.69139 2.26596 5.08138 1.68924 6.53125 1.6875C8.84016 1.6875 10.7805 2.92453 11.5953 4.91516C11.6283 4.9954 11.6843 5.06403 11.7564 5.
394511233C11.8285 5.16063 11.9133 5.18642 12 5.18642C12.0867 5.18642 12.1715 5.16063 12.2436 5.11233C12.3157 5.06403 12.3717 4.9954 12.4047 4.91516C13.2195 2.92453 15.1598 1.6875 17.4688 1.6875C18.9186 1.68924 20.3086 2.26596 21.3338 3.29118C22.359 4.31639 22.9358 5.70638 22.9375 7.15625C22.9375 13.5 13.5312 19.1284 12 19.9991Z" fill="#212121"/> 3946 </svg> 3947 <svg class="wishlist-icon-filled" xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none" style="display:none;"> 3948 <path d="M17.4688 0.8125C15.1237 0.8125 13.1025 1.92703 12 3.77328C10.8975 1.92703 8.87625 0.8125 6.53125 0.8125C4.8494 0.814526 3.23702 1.48353 2.04778 2.67278C0.858534 3.86202 0.189526 5.47441 0.1875 7.15625C0.1875 10.2833 2.15625 13.5514 6.02813 16.8677C7.81594 18.3889 9.74622 19.7342 11.7922 20.885C11.856 20.9195 11.9274 20.9375 12 20.9375C12.0726 20.9375 12.144 20.9195 12.2078 20.885C14.2538 19.7342 16.1841 18.3889 17.9719 16.8677C21.8438 13.5514 23.8125 10.2833 23.8125 7.15625C23.8105 5.47441 23.1415 3.86202 21.9522 2.67278C20.763 1.48353 19.1506 0.814526 17.4688 0.8125Z" fill="#640000"/> 3949 </svg> 3950 </div> 3951 </button> 3952 </div> 3953 </div> 3954 </div> 3955</div> 3956<div class="purchasePopup purchasePopupSpotify" style="display: none;"> 3957 <div class="purchaseArea"> 3958 <div class="sectionPurchase sectionPurchaseSpotify"> 3959 <div class="wrapperPurchase"> 3960 <div class="headerPurchase"> 3961 <h3>personalize spotify photo print</h3> 3962 <a class="close-purchase-popup"> 3963 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none"> 3964 <path d="M1.53287 17.4107L0.588867 16.4667L8.05553 9.00002L0.588867 1.53336L1.53287 0.589355L8.99953 8.05602L16.4662 0.589355L17.4102 1.53336L9.94353 9.00002L17.4102 16.4667L16.4662 17.4107L8.99953 9.94402L1.53287 17.4107Z" fill="black"></path> 3965 </svg> 3966 </a> 3967 </div> 3968 <div class="contentPurchase"> 3969 <div class="spotifyAddons"></div> 3970 </div> 3971 3972 <div class="purchase-button btn-addon row m-0" style="display: none;"> 3973 <div class="col-12 col-lg-2 text-left mb-2 p-0"> 3974 <button class="back-purchase-button back-addon text-uppercase"> 3975 <svg width="15" height="14" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 3976 <path d="M14.5799 7.41992L2.32992 7.41992L7.57992 12.6699L6.91992 13.4199L0.419922 6.91992L6.91992 0.419922L7.57992 1.16992L2.32992 6.41992L14.5799 6.41992V7.41992Z" fill="black"></path> 3977 </svg> 3978 <span>Back</span> 3979 </button> 3980 </div> 3981 <div class="col-12 col-lg-10 text-right" style="display: flex;justify-content: end;gap: 20px;"> 3982 <button class="btn next-purchase-button next-addon text-uppercase"> 3983 <span>continue without add-ons</span> 3984 </button> 3985 </div> 3986 </div> 3987 </div> 3988 </div> 3989 </div> 3990</div> 3991 3992<style> 3993 #PBarNextFrameWrapper { 3994 display: none; 3995 } 3996 #backgroundPopup { 3997 display: none; 3998 position: fixed; 3999 _position: absolute; 4000 height: 100%; 4001 width: 100%; 4002 top: 0; 4003 left: 0; 4004 background: rgb(117 117 117 / 24%); 4005 z-index: 1; 4006 } 4007 .sectionPurchase { 4008 height: 100%; 4009 position: relative; 4010 max-width: 1344px; 4011 background-color: #fff; 4012 padding: 0; 4013 overflow: hidden; 4014 display: flex; 4015 flex-direction: column; 4016 } 4017 .sectionPurchase.purchaseAddonSpotify { 4018 max-width: 1070px!important; 4019 max-height: 765px!important; 4020 } 4021 .sectionPurchaseBoard { 4022 max-width: 872px!important; 4023 max-height: 821px!important; 4024 } 4025 .purchaseAddonSpotify .btn-action { 4026 position: absolute; 4027 bottom: 0; 4028 left: 0; 4029 width: 100%; 4030 display: flex; 4031 gap: 10px; 4032 } 4033 .wrapperPurchase { 4034 position: relative; 4035 height: 100%; 4036 display: flex; 4037 flex-direction: column; 4038 } 4039 .purchase-content { 4040 flex: 1; 4041 overflow-y: auto; 4042 overflow-x: hidden; 4043 padding: 20px; 4044 } 4045 4046 .purchase-button-wrapper { 4047 position: sticky; 4048 bottom: 0; 4049 background-color: #fff; 4050 border-top: 1px solid #e0e0e0; 4051 padding: 15px 0; 4052 margin-top: auto; 4053 z-index: 10; 4054 } 4055 4056 .purchasePopup { 4057 display: none; 4058 position: fixed; 4059 background: rgb(117 117 117 / 24%); 4060 z-index: 999; 4061 padding: 40px; 4062 font-size: 13px; 4063 top: 0; 4064 left: 0; 4065 width: 100%; 4066 height: 100%; 4067 } 4068 .popupPurchaseClose{ 4069 font-size:14px; 4070 line-height:14px; 4071 right:45px; 4072 top:45px; 4073 position:absolute; 4074 color:#6fa5fd; 4075 font-weight:700; 4076 display:block; 4077 cursor: pointer; 4078 } 4079 4080 .headerPurchase { 4081 margin-bottom: 30px; 4082 display: flex; 4083 justify-content: space-between; 4084 } 4085 4086 .headerPurchase h3 { 4087 font-size: 16px; 4088 text-transform: uppercase; 4089 } 4090 4091 .sectionPurchaseBoard .headerPurchase { 4092 margin-bottom: 15px; 4093 } 4094 4095 .sectionPurchaseBoard .formAddressPurchase { 4096 padding-top: 0; 4097 } 4098 4099 .purchaseArea { 4100 position: relative; 4101 height: 100%; 4102 } 4103 4104 .purchaseArea h4 { 4105 width: 100%; 4106 font-size: 12px; 4107 font-weight: 600; 4108 margin-bottom: 10px; 4109 text-transform: uppercase; 4110 } 4111 4112 .menuPurchase { 4113 margin-bottom: 30px; 4114 } 4115 4116 .menuPurchase ul { 4117 list-style-type: none; 4118 margin: 0; 4119 } 4120 4121 .menuPurchase ul li { 4122 display: inline-block; 4123 border: 1px solid #212121; 4124 padding: 5px 20px; 4125 margin-right: 5px; 4126 margin-bottom: 10px; 4127 font-size: 12px; 4128 font-weight: 400; 4129 } 4130 4131 .menuPurchase ul li:hover, .menuPurchase ul li.selected { 4132 background-color: #212121; 4133 color: #ffffff; 4134 } 4135 4136 .contentPurchase h5 { 4137 font-size: 12px; 4138 margin-bottom: 10px; 4139 font-weight: 400; 4140 overflow: hidden; 4141 } 4142 4143 #itemCards { 4144 max-height: 430px; 4145 overflow: auto; 4146 } 4147 4148 .item-cards { 4149 width: 100%; 4150 } 4151 .item-card.selected { 4152 border: 1px solid #212121; 4153 } 4154 .item-card:hover { 4155 border: 1px solid #C4C4C4; 4156 } 4157 .item-cards .item-card { 4158 position: relative; 4159 width: calc(33% - 10px); 4160 max-width: calc(33% - 10px); 4161 flex: 0 0 calc(33% - 10px); 4162 margin-bottom: 20px; 4163 } 4164 .item-cards .item-card label, 4165 .item-addons .item-addon label { 4166 position: absolute; 4167 left: 0; 4168 width: 100%; 4169 height: 100%; 4170 } 4171 .item-cards .item-card .card-image img, 4172 .item-addons .item-addon .card-image img { 4173 display: block; 4174 width: 100%; 4175 } 4176 .item-card .card-meta, 4177 .item-addon .card-meta { 4178 padding: 10px 5px 5px; 4179 } 4180 .item-card.selected .card-meta, 4181 .item-addon.selected .card-meta, 4182 .item-card.selected .card-qty { 4183 background-color: #212121; 4184 color: #fff; 4185 visibility: visible!important; 4186 } 4187 .item-card:hover .card-meta, 4188 .item-addon:hover .card-meta, 4189 .item-card:hover .card-qty { 4190 background-color: #C4C4C4; 4191 color: #fff; 4192 visibility: visible!important; 4193 } 4194 .item-cards .item-card p, 4195 .item-addons .item-addon p { 4196 font-size: 12px !important; 4197 margin: 0; 4198 font-weight: 600; 4199 } 4200 .item-card .card-meta input, 4201 .item-addon .card-meta input { 4202 display: none; 4203 } 4204 .item-cards .item-card h5, 4205 .item-addons .item-addon h5 { 4206 font-size: 14px; 4207 } 4208 4209 @media (max-width: 768px) { 4210 .item-cards .item-card {
4211 width: calc(50% - 10px); 4212 max-width: calc(50% - 10px); 4213 flex: 0 0 calc(50% - 10px); 4214 margin-bottom: 0; 4215 } 4216 } 4217 4218 .card-qty { 4219 display: flex; 4220 padding: 5px; 4221 visibility: hidden; 4222 background-color: #fff !important; 4223 z-index: 999; 4224 } 4225 .card-qty a { 4226 border-width: 1px; 4227 width: 30%; 4228 cursor: pointer; 4229 text-align: center; 4230 align-self: center; 4231 height: 28px; 4232 display: block; 4233 position: relative; 4234 } 4235 .card-qty a svg { 4236 position: absolute; 4237 top: 50%; 4238 left: 50%; 4239 transform: translate(-50%, -50%); 4240 text-align: center; 4241 } 4242 input.btn-qty { 4243 border-width: 0px; 4244 border-radius: 0; 4245 background-color: #fff; 4246 -webkit-appearance: none; 4247 box-shadow: none !important; 4248 -webkit-box-shadow: none !important; 4249 -moz-box-shadow: none!important; 4250 width: 40%; 4251 border-left: 1px solid #c4c4c4; 4252 border-right: 1px solid #c4c4c4; 4253 padding: 0; 4254 } 4255 4256 .sectionPurchaseBoard #itemAddons .item-card { 4257 width: calc(20% - 15px); 4258 max-width: calc(20% - 15px); 4259 flex: 0 0 calc(20% - 15px); 4260 } 4261 4262 .purchase-button { 4263 width: 100%; 4264 padding: 0; 4265 margin: 0; 4266 } 4267 4268 .sectionPurchaseBoard .purchase-button { 4269 margin-top: 0 !important; 4270 } 4271 4272 .back-purchase-button, .back-spotify { 4273 width: 139px; 4274 border: 1px solid; 4275 height: 43px; 4276 } 4277 .purchase-button .btn { 4278 width: 297px; 4279 height: 43px; 4280 background-color: #212121; 4281 color: #ffffff; 4282 } 4283 .purchase-button .btn[disabled] { 4284 background-color: #EEEEEE; 4285 } 4286 .back-purchase-button svg, .back-spotify svg {
4287 align-self: center; 4288 vertical-align: middle; 4289 margin-right: 10px; 4290 } 4291 4292 #purchaseProduct .row .error { 4293 font-size: 12px !important; 4294 color: rgb(231, 76, 60); 4295 margin-top: 5px; 4296 } 4297 4298 .reviewCardPurchase { 4299 max-width: 448px; 4300 float: right; 4301 } 4302 4303 .addonsPurchase .addon-item {display: flex;justify-content: space-between;} 4304 .addon-item * {align-self: center;font-size: 12px;} 4305 .addon-itm-title {width: 360px;} 4306 .addon-itm-line-price {color: #757575;width: 80px;justify-content: space-between;display: flex;} 4307 4308 .propsAddonSpotify p { 4309 margin: 0; 4310 display: flex; 4311 font-size: 12px !important; 4312 margin-bottom: 5px; 4313 } 4314 .propsAddonSpotify p span:first-child { 4315 text-transform: uppercase; 4316 font-weight: 600; 4317 -ms-flex: 0 0 150px; 4318 flex: 0 0 150px; 4319 max-width: 150px; 4320 } 4321 4322 .addonsPurchase .addons { 4323 max-height: 250px; 4324 overflow: auto; 4325 } 4326 4327 .btn .loading:after { 4328 content: ""; 4329 display: inline-block; 4330 width: 20px; 4331 height: 20px; 4332 padding: 3px; 4333 aspect-ratio: 1; 4334 border-radius: 50%; 4335 background: #FFFFFF; 4336 --_m: conic-gradient(#0000 10%, #212121), linear-gradient(#212121 0 0) content-box; 4337 -webkit-mask: var(--_m); 4338 mask: var(--_m); 4339 -webkit-mask-composite: source-out; 4340 mask-composite: subtract; 4341 animation: l3 1s infinite linear; 4342 margin: auto; 4343 vertical-align: middle; 4344 margin-left: 10px; 4345 } 4346 4347 #qrcode img, #qrcode canvas { 4348 width: 50px; 4349 position: absolute; 4350 top: 12px; 4351 left: 16px; 4352 } 4353 4354 .t-preview { 4355 position: absolute; 4356 top: 17px; 4357 left: 75px; 4358 } 4359 .t-preview p { 4360 margin: 0; 4361 font-size: 12px !important; 4362 } 4363 .t-preview .h3 { 4364 font-size: 16px !important; 4365 margin-bottom: 5px; 4366 font-weight: 600; 4367 } 4368 .scanCard { 4369 width: 100%; 4370 border: 1px solid; 4371 height: 76px; 4372 background-color: #fff; 4373 } 4374 .scanCard > div > img { 4375 position: absolute; 4376 right: 0; 4377 width: 55px; 4378 } 4379 4380 @keyframes l3 { 4381 100% { 4382 transform: rotate(1turn); 4383 } 4384 } 4385 4386 @media (min-width: 991px) { 4387 .sectionPurchase { 4388 height: 100%; 4389 position: relative; 4390 max-width: 1344px; 4391 background-color: #fff; 4392 top: 50%; 4393 left: 50%; 4394 transform: translate(-50%, -50%); 4395 } 4396 .headerPurchase h3 { 4397 font-size: 20px; 4398 } 4399 .purchaseArea h4 { 4400 font-size: 16px; 4401 } 4402 4403 .menuPurchase ul li { 4404 font-size: 16px; 4405 } 4406 4407 .contentPurchase { 4408 margin-bottom: 30px; 4409 } 4410 .contentPurchase h5 { 4411 font-size: 16px; 4412 } 4413 4414 .item-cards .item-card p,
4415 .item-addons .item-addon p { 4416 font-size: 16px !important; 4417 } 4418 4419 .cards { 4420 float: right; 4421 width: 400px; 4422 } 4423 4424 .item-cards .item-card { 4425 width: calc(25% - 30px); 4426 max-width: calc(25% - 30px); 4427 flex: 0 0 calc(25% - 30px); 4428 margin-right: 30px; 4429 } 4430 4431 #itemAddons .item-card { 4432 position: relative; 4433 width: calc(16% - 40px); 4434 max-width: calc(16% - 40px); 4435 flex: 0 0 calc(16% - 40px); 4436 } 4437 4438 .purchase-button-wrapper { 4439 padding: 10px 20px; 4440 } 4441 } 4442 4443 @media (max-width: 1200px) { 4444 .item-cards .item-card { 4445 width: calc(33% - 30px); 4446 max-width: calc(33% - 30px); 4447 flex: 0 0 calc(33% - 30px); 4448 } 4449 } 4450 4451 @media (max-width: 992px) { 4452 .purchasePopup { 4453 padding: 0; 4454 } 4455 .item-cards .item-card h5, 4456 .item-addons .item-addon h5 { 4457 max-height: 30px; 4458 } 4459 4460 .back-purchase-button, .back-spotify, .next-purchase-button { 4461 width: 100%; 4462 } 4463 .addon-itm-title { 4464 width: 300px; 4465 } 4466 .addon-itm-line-price { 4467 margin-right: 10px; 4468 } 4469 .t-preview { 4470 top: 10px; 4471 } 4472 4473 .card-qty a { 4474 height: 15px; 4475 } 4476 4477 .purchase-button-wrapper { 4478 padding: 15px; 4479 } 4480 } 4481 4482 @media (max-width: 576px) { 4483 .purchase-button .btn { 4484 width: 100%!important; 4485 } 4486 .purchase-button > .col-12 { 4487 padding-left: 0; 4488 padding-right: 0; 4489 } 4490 } 4491</style> 4492 4493 4494<div class="purchasePopup"> 4495 <div class="purchaseArea"> 4496 4497 <div class="sectionPurchase purchasePersonalize"> 4498 <div class="wrapperPurchase"> 4499 <div class="purchase-content"> 4500 <div class="headerPurchase"> 4501 <h3 class="text-uppercase"> 4502 4503 MAKE IT PERSONAL â 4504 4505 </h3> 4506 <a class="close-purchase-popup"> 4507 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none"> 4508 <path d="M1.53287 17.4107L0.588867 16.4667L8.05553 9.00002L0.588867 1.53336L1.53287 0.589355L8.99953 8.05602L16.4662 0.589355L17.4102 1.53336L9.94353 9.00002L17.4102 16.4667L16.4662 17.4107L8.99953 9.94402L1.53287 17.4107Z" fill="black"/> 4509 </svg> 4510</a> 4511 4512</div> 4513<div class="contentPurchase"> 4514 <div class="row"> 4515 4516 <div class="col-12 col-lg-7"> 4517 <div class="menuPurchase"> 4518 <h4 class="text-uppercase">choose your occasion</h4> 4519 <ul> 4520 4521 <li 4522 class="item-occassion selected" 4523 data-occassion="greeting-card-all" 4524 4525 > 4526 General 4527 </li> 4528 4529 <li 4530 class="item-occassion" 4531 data-occassion="greeting-card-birthday" 4532 4533 > 4534 Birthday 4535 </li> 4536 4537 <li 4538 class="item-occassion" 4539 data-occassion="greeting-card-anniversary" 4540 4541 > 4542 Anniversary 4543 </li> 4544 4545 <li 4546 class="item-occassion" 4547 data-occassion="greeting-card-newborn" 4548 4549 > 4550 Newborn 4551 </li> 4552 4553 <li 4554 class="item-occassion" 4555 data-occassion="greeting-card-wedding" 4556 4557 > 4558 Wedding 4559 </li> 4560 4561 <li 4562 class="item-occassion" 4563 data-occassion="greeting-card-graduation" 4564 4565 > 4566 Graduation 4567 </li> 4568 4569 <li 4570 class="item-occassion" 4571 data-occassion="greeting-card-mothers-day" 4572 4573 > 4574 Mother's Day 4575 </li> 4576 4577 <li 4578 class="item-occassion" 4579 data-occassion="greeting-card-valentine" 4580 4581 > 4582 Valentine 4583 </li> 4584 4585 <li 4586 class="item-occassion" 4587 data-occassion="greeting-card-others" 4588 4589 style="display: none" 4590 4591 > 4592 Others 4593 </li> 4594 4595 </ul> 4596 </div> 4597 <div id="chooseCard"> 4598 <h4 class="text-uppercase">choose your card design</h4> 4599 <div 4600 id="itemCards" 4601 class="item-cards d-flex mb-4" 4602 > 4603 <div class="row m-0 items-card w-100"> 4604 <p style="margin: 50px auto;text-align: center;font-size: 13px !important;"> 4605 There are no card items available.<br> 4606 Please choose an occasion above 4607 </p> 4608 </div> 4609 </div> 4610 </div> 4611 </div> 4612 <div class="col-12 col-lg-5"> 4613 <div class="cards"> 4614 <h4 class="mb-2">Personalize your Message</h4> 4615 4616 <label class="font-weight-bold label-attach-foto" 4617 >Create a lasting memory. Attach a special photo or a video to cherish forever.</label 4618 > 4619 4620 4621 4622<style> 4623 #greetingCard label {display: inline-block;color: #212121;margin-bottom: .5rem;font-size: 14px;font-weight: 400!Important;} 4624 4625 .form-group.has-counter { 4626 position: relative; 4627 } 4628 4629 .limit { 4630 position: absolute; 4631 top: 4px; 4632 right: -30px; 4633 font-size: 11px; 4634 color: #999; 4635 background: rgba(255, 255, 255, 0.9); 4636 padding: 2px 6px; 4637 border-radius: 3px; 4638 z-index: 10; 4639 pointer-events: none; 4640 } 4641 4642 .form-group.has-counter input, 4643 .form-group.has-counter textarea { 4644 padding-right: 0px; 4645 } 4646 4647 .prefix-selector-wrapper { 4648 margin: 5px 0; 4649 } 4650 4651 .prefix-selector-wrapper label { 4652 display: inline-block; 4653 margin-right: 10px; 4654 vertical-align: middle; 4655 } 4656 4657 .prefix-selector { 4658 border: none; 4659 font-size: 12px; 4660 background: white; 4661 cursor: pointer; 4662 width: auto; 4663 max-width: 200px; 4664 padding: 5px; 4665 padding-right: 25px; 4666 appearance: none; 4667 -webkit-appearance: none; 4668 -moz-appearance: none; 4669 background-image: url('data:image/svg+xml;charset=UTF-8,%3Csvg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"%3E%3Cpath fill="%23333" d="M6 9L1 4h10z"/%3E%3C/svg%3E'); 4670 background-repeat: no-repeat; 4671 background-position: right 5px center; 4672 background-size: 12px; 4673 vertical-align: middle; 4674 } 4675 4676 .label-prefix { 4677 cursor: pointer; 4678 user-select: none; 4679 -webkit-user-select: none; 4680 } 4681 4682 .label-prefix.hidden { 4683 display: none!important; 4684 } 4685</style> 4686<div id="greetingCard"> 4687 4688 <div class="greetingCard"> 4689 <div class="steps-card-preview d-flex align-items-center justify-content-center"> 4690 4691 <div class="case-img-preview">
4692 <div class="remove-image" style="display: none"> 4693 <svg class="icon icon-close" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 4694<title>icon-close</title> 4695<path d="M16.943 16l8.862 8.862c0.26 0.26 0.26 0.682 0 0.943s-0.682 0.26-0.943 0l-8.862-8.862-8.862 8.862c-0.26 0.26-0.682 0.26-0.943 0s-0.26-0.682 0-0.943l8.862-8.862-8.862-8.862c-0.26-0.26-0.26-0.682 0-0.943s0.682-0.26 0.943 0l8.862 8.862 8.862-8.862c0.26-0.26 0.682-0.26 0.943 0s0.26 0.682 0 0.943l-8.862 8.862z"></path> 4696</svg> 4697 </div> 4698 <div class="btn-upload"> 4699 <div> 4700 <img class="preview-image" src="" alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" class="img" style="display: none"> 4701 </div> 4702 <div class="icon-upload"> 4703 <button type="button"> 4704 <img class="ajax-loader" src="https://outerbloom.com/cdn/shop/t/138/assets/ajax-loader.gif?v=41356863302472015721752652421" style="display: none"> 4705 <div class="placeholder-image" onclick=""> 4706 <label for="input-foto" onclick="" 4707 ><img src="https://outerbloom.com/cdn/shop/t/138/assets/icon-media_60x.png?v=142273593979200676731752652420" width="" height="" alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 4708 ></label> 4709 <div class="button-empty-state" onclick=""> 4710 <label for="input-foto" onclick="" class="btn btn-upload-image"> 4711 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="17" viewBox="0 0 16 17" fill="none"> 4712 <path d="M0.75 16.75H15.25C15.6635 16.75 16 16.4135 16 16V1.5C16 1.0865 15.6635 0.75 15.25 0.75H0.75C0.3365 0.75 0 1.0865 0 1.5V16C0 16.4135 0.3365 16.75 0.75 16.75ZM0.5 1.5C0.5 1.4337 0.526339 1.37011 0.573223 1.32322C0.620107 1.27634 0.683696 1.25 0.75 1.25H15.25C15.3163 1.25 15.3799 1.27634 15.4268 1.32322C15.4737 1.37011 15.5 1.4337 15.5 1.5V16C15.5 16.0663 15.4737 16.1299 15.4268 16.1768C15.3799 16.2237 15.3163 16.25 15.25 16.25H0.75C0.683696 16.25 0.620107 16.2237 0.573223 16.1768C0.526339 16.1299 0.5 16.0663 0.5 16V1.5Z" fill="black"/> 4713 <path d="M10.25 7C10.8015 7 11.25 6.5515 11.25 6C11.25 5.4485 10.8015 5 10.25 5C9.6985 5 9.25 5.4485 9.25 6C9.25 6.5515 9.6985 7 10.25 7ZM10.25 5.5C10.349 5.4999 10.4459 5.52918 10.5283 5.58414C10.6106 5.6391 10.6749 5.71726 10.7128 5.80874C10.7507 5.90021 10.7607 6.00089 10.7414 6.09802C10.7221 6.19515 10.6744 6.28438 10.6044 6.35441C10.5344 6.42443 10.4452 6.47211 10.348 6.49141C10.2509 6.5107 10.1502 6.50075 10.0587 6.46281C9.96726 6.42486 9.8891 6.36063 9.83414 6.27825C9.77918 6.19587 9.7499 6.09903 9.75 6C9.75 5.7245 9.974 5.5 10.25 5.5Z" fill="black"/> 4714 <path d="M2.25 13.25H13.75C13.8163 13.25 13.8799 13.2237 13.9268 13.1768C13.9737 13.1299 14 13.0663 14 13V3C14 2.9337 13.9737 2.87011 13.9268 2.82322C13.8799 2.77634 13.8163 2.75 13.75 2.75H2.25C2.1837 2.75 2.12011 2.77634 2.07322 2.82322C2.02634 2.87011 2 2.9337 2 3V13C2 13.0663 2.02634 13.1299 2.07322 13.1768C2.12011 13.2237 2.1837 13.25 2.25 13.25ZM2.5 12.75V9.931C2.511 9.923 2.5235 9.9185 2.5335 9.9085L5.0915 7.3505C5.15698 7.28802 5.244 7.25317 5.3345 7.25317C5.425 7.25317 5.51202 7.28802 5.5775 7.3505L9.338 11.111C9.38419 11.1572 9.44662 11.1835 9.51194 11.1842C9.57725 11.185 9.64027 11.1601 9.6875 11.115L11.6205 9.279C11.6834 9.21542 11.7688 9.17902 11.8582 9.17762C11.9477 9.17622 12.0341 9.20992 12.099 9.2715L13.5 10.7975L13.5005 10.798V12.75H2.5ZM13.5 3.25V10.059L12.4595 8.926C12.3816 8.84733 12.2888 8.78493 12.1866 8.74244C12.0844 8.69995 11.9747 8.67822 11.864 8.6785H11.8635C11.7536 8.67802 11.6447 8.69924 11.543 8.74094C11.4414 8.78264 11.3489 8.844 11.271 8.9215L9.519 10.5855L5.931 6.997C5.6115 6.678 5.0565 6.6785 4.738 6.997L2.5 9.2355V3.25H13.5Z" fill="black"/> 4715 </svg> 4716 <span>Upload Image</span> 4717 </label> 4718 <label for="input-video" onclick="" class="btn btn-upload-video"> 4719 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" viewBox="0 0 20 17" fill="none"> 4720 <path d="M4.5 0.75H1.5C1.0655 0.75 0.75 1.0655 0.75 1.5V16C0.75 16.4345 1.0655 16.75 1.5 16.75H18.5C18.9345 16.75 19.25 16.4345 19.25 16V1.5C19.25 1.0655 18.9345 0.75 18.5 0.75H4.5ZM1.25 16V1.5C1.25 1.3435 1.3435 1.25 1.5 1.25H4.25V16.25H1.5C1.3435 16.25 1.25 16.1565 1.25 16ZM4.75 16.25V1.25H15.25V16.25H4.75ZM18.75 1.5V16C18.75 16.1565 18.6565 16.25 18.5 16.25H15.75V1.25H18.5C18.6565 1.25 18.75 1.3435 18.75 1.5Z" fill="black"/> 4721 <path d="M8.1385 5.792C8.10082 5.76682 8.057 5.75235 8.01173 5.75015C7.96646 5.74795 7.92145 5.75809 7.8815 5.7795C7.84169 5.80093 7.80844 5.83275 7.78528 5.87158C7.76213 5.91041 7.74993 5.95479 7.75 6V12C7.75002 12.0452 7.76231 12.0896 7.78556 12.1284C7.8088 12.1672 7.84213 12.1989 7.882 12.2203C7.92187 12.2416 7.96678 12.2517 8.01195 12.2496C8.05712 12.2474 8.10085 12.2331 8.1385 12.208L12.6385 9.208C12.6727 9.18517 12.7008 9.15424 12.7202 9.11795C12.7396 9.08167 12.7498 9.04115 12.7498 9C12.7498 8.95885 12.7396 8.91833 12.7202 8.88205C12.7008 8.84576 12.6727 8.81483 12.6385 8.792L8.1385 5.792ZM8.25 11.533V6.467L12.0495 9L8.25 11.533ZM3.25 4.75H2.25C2.1837 4.75 2.12011 4.77634 2.07322 4.82322C2.02634 4.87011 2 4.9337 2 5C2 5.0663 2.02634 5.12989 2.07322 5.17678C2.12011 5.22366 2.1837 5.25 2.25 5.25H3.25C3.3163 5.25 3.37989 5.22366 3.42678 5.17678C3.47366 5.12989 3.5 5.0663 3.5 5C3.5 4.9337 3.47366 4.87011 3.42678 4.82322C3.37989 4.77634 3.3163 4.75 3.25 4.75ZM2.25 3.25H3.25C3.3163 3.25 3.37989 3.22366 3.42678 3.17678C3.47366 3.12989 3.5 3.0663 3.5 3C3.5 2.9337 3.47366 2.87011 3.42678 2.82322C3.37989 2.77634 3.3163 2.75 3.25 2.75H2.25C2.1837 2.75 2.12011 2.77634 2.07322 2.82322C2.02634 2.87011 2 2.9337 2 3C2 3.0663 2.02634 3.12989 2.07322 3.17678C2.12011 3.22366 2.1837 3.25 2.25 3.25ZM3.25 6.75H2.25C2.1837 6.75 2.12011 6.77634 2.07322 6.82322C2.02634 6.87011 2 6.9337 2 7C2 7.0663 2.02634 7.12989 2.07322 7.17678C2.12011 7.22366 2.1837 7.25 2.25 7.25H3.25C3.3163 7.25 3.37989 7.22366 3.42678 7.17678C3.47366 7.12989 3.5 7.0663 3.5 7C3.5 6.9337 3.47366 6.87011 3.42678 6.82322C3.37989 6.77634 3.3163 6.75 3.25 6.75ZM3.25 8.75H2.25C2.1837 8.75 2.12011 8.77634 2.07322 8.82322C2.02634 8.87011 2 8.9337 2 9C2 9.0663 2.02634 9.12989 2.07322 9.17678C2.12011 9.223
472166 2.1837 9.25 2.25 9.25H3.25C3.3163 9.25 3.37989 9.22366 3.42678 9.17678C3.47366 9.12989 3.5 9.0663 3.5 9C3.5 8.9337 3.47366 8.87011 3.42678 8.82322C3.37989 8.77634 3.3163 8.75 3.25 8.75ZM3.25 10.75H2.25C2.1837 10.75 2.12011 10.7763 2.07322 10.8232C2.02634 10.8701 2 10.9337 2 11C2 11.0663 2.02634 11.1299 2.07322 11.1768C2.12011 11.2237 2.1837 11.25 2.25 11.25H3.25C3.3163 11.25 3.37989 11.2237 3.42678 11.1768C3.47366 11.1299 3.5 11.0663 3.5 11C3.5 10.9337 3.47366 10.8701 3.42678 10.8232C3.37989 10.7763 3.3163 10.75 3.25 10.75ZM3.25 12.75H2.25C2.1837 12.75 2.12011 12.7763 2.07322 12.8232C2.02634 12.8701 2 12.9337 2 13C2 13.0663 2.02634 13.1299 2.07322 13.1768C2.12011 13.2237 2.1837 13.25 2.25 13.25H3.25C3.3163 13.25 3.37989 13.2237 3.42678 13.1768C3.47366 13.1299 3.5 13.0663 3.5 13C3.5 12.9337 3.47366 12.8701 3.42678 12.8232C3.37989 12.7763 3.3163 12.75 3.25 12.75ZM3.25 14.75H2.25C2.1837 14.75 2.12011 14.7763 2.07322 14.8232C2.02634 14.8701 2 14.9337 2 15C2 15.0663 2.02634 15.1299 2.07322 15.1768C2.12011 15.2237 2.1837 15.25 2.25 15.25H3.25C3.3163 15.25 3.37989 15.2237 3.42678 15.1768C3.47366 15.1299 3.5 15.0663 3.5 15C3.5 14.9337 3.47366 14.8701 3.42678 14.8232C3.37989 14.7763 3.3163 14.75 3.25 14.75ZM16.75 5.25H17.75C17.8163 5.25 17.8799 5.22366 17.9268 5.17678C17.9737 5.12989 18 5.0663 18 5C18 4.9337 17.9737 4.87011 17.9268 4.82322C17.8799 4.77634 17.8163 4.75 17.75 4.75H16.75C16.6837 4.75 16.6201 4.77634 16.5732 4.82322C16.5263 4.87011 16.5 4.9337 16.5 5C16.5 5.0663 16.5263 5.12989 16.5732 5.17678C16.6201 5.22366 16.6837 5.25 16.75 5.25ZM16.75 3.25H17.75C17.8163 3.25 17.8799 3.22366 17.9268 3.17678C17.9737 3.12989 18 3.0663 18 3C18 2.9337 17.9737 2.87011 17.9268 2.82322C17.8799 2.77634 17.8163 2.75 17.75 2.75H16.75C16.6837 2.75 16.6201 2.77634 16.5732 2.82322C16.5263 2.87011 16.5 2.9337 16.5 3C16.5 3.0663 16.5263 3.12989 16.5732 3.17678C16.6201 3.22366 16.6837 3.25 16.75 3.25ZM16.75 7.25H17.75C17.8163 7.25 17.8799 7.22366 17.9268 7.17678C17.9737 7.12989 18 7.0663 18 7C18 6.9337 17.9737 6.87011 17.9268 6.82322C17.8799 6.77634 17.8163 6.75 17.75 6.75H16.75C16.6837 6.75 16.6201 6.77634 16.5732 6.82322C16.5263 6.87011 16.5 6.9337 16.5 7C16.5 7.0663 16.5263 7.12989 16.5732 7.17678C16.6201 7.22366 16.6837 7.25 16.75 7.25ZM16.75 9.25H17.75C17.8163 9.25 17.8799 9.22366 17.9268 9.17678C17.9737 9.12989 18 9.0663 18 9C18 8.9337 17.9737 8.87011 17.9268 8.82322C17.8799 8.77634 17.8163 8.75 17.75 8.75H16.75C16.6837 8.75 16.6201 8.77634 16.5732 8.82322C16.5263 8.87011 16.5 8.9337 16.5 9C16.5 9.0663 16.5263 9.12989 16.5732 9.17678C16.6201 9.22366 16.6837 9.25 16.75 9.25ZM16.75 11.25H17.75C17.8163 11.25 17.8799 11.2237 17.9268 11.1768C17.9737 11.1299 18 11.0663 18 11C18 10.9337 17.9737 10.8701 17.9268 10.8232C17.8799 10.7763 17.8163 10.75 17.75 10.75H16.75C16.6837 10.75 16.6201 10.7763 16.5732 10.8232C16.5263 10.8701 16.5 10.9337 16.5 11C16.5 11.0663 16.5263 11.1299 16.5732 11.1768C16.6201 11.2237 16.6837 11.25 16.75 11.25ZM16.75 13.25H17.75C17.8163 13.25 17.8799 13.2237 17.9268 13.1768C17.9737 13.1299 18 13.0663 18 13C18 12.9337 17.9737 12.8701 17.9268 12.8232C17.8799 12.7763 17.8163 12.75 17.75 12.75H16.75C16.6837 12.75 16.6201 12.7763 16.5732 12.8232C16.5263 12.8701 16.5 12.9337 16.5 13C16.5 13.0663 16.5263 13.1299 16.5732 13.1768C16.6201 13.2237 16.6837 13.25 16.75 13.25ZM17.75 14.75H16.75C16.6837 14.75 16.6201 14.7763 16.5732 14.8232C16.5263 14.8701 16.5 14.9337 16.5 15C16.5 15.0663 16.5263 15.1299 16.5732 15.1768C16.6201 15.2237 16.6837 15.25 16.75 15.25H17.75C17.8163 15.25 17.8799 15.2237 17.9268 15.1768C17.9737 15.1299 18 15.0663 18 15C18 14.9337 17.9737 14.8701 17.9268 14.8232C17.8799 14.7763 17.8163 14.75 17.75 14.75Z" fill="black"/> 4722 </svg> 4723 <span>Upload Video</span> 4724 </label> 4725 </div> 4726 </div> 4727 </button> 4728 </div> 4729 </div> 4730</div> 4731 4732 4733<div class="case-video-preview"> 4734 <div class="d-flex justify-content-between"> 4735 <p>Add video to make it more special (optional)</p> 4736 <button class="remove-media" style="display: none"> 4737 <svg class="icon icon-close" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 4738<title>icon-close</title> 4739<path d="M16.943 16l8.862 8.862c0.26 0.26 0.26 0.682 0 0.943s-0.682 0.26-0.943 0l-8.862-8.862-8.862 8.862c-0.26 0.26-0.682 0.26-0.943 0s-0.26-0.682 0-0.943l8.862-8.862-8.862-8.862c-0.26-0.26-0.26-0.682 0-0.943s0.682-0.26 0.943 0l8.862 8.862 8.862-8.862c0.26-0.26 0.682-0.26 0.943 0s0.26 0.682 0 0.943l-8.862 8.862z"></path> 4740</svg> 4741 </button> 4742 <label id="label-input-video" for="input-video" onclick style=""> 4743 <img class="ajax-loader" src="https://outerbloom.com/cdn/shop/t/138/assets/ajax-loader.gif?v=41356863302472015721752652421" style="display: none;vertical-align: middle;"/>
4744 <span><img src="https://outerbloom.com/cdn/shop/t/138/assets/icon-upload-video_icon.png?v=10584829661837769631752652419"/><span>Upload Video</span></span> 4745 </label> 4746 </div> 4747</div> 4748 4749 4750 </div> 4751 <div class="steps-card-input"> 4752 4753 <div class="prefix-selector-wrapper"> 4754 <label for="prefixSelector" class="font-weight-bold m-0">Prefix:</label> 4755 <select id="prefixSelector" class="prefix-selector"> 4756 <option value="">None</option> 4757 <option value="Dear" selected>Dear</option> 4758 <option value="To">To</option> 4759 <option value="Hi">Hi</option> 4760 </select> 4761 </div> 4762 <div class="form-group mr-auto form-group-half form-recipient has-counter d-flex"> 4763 <label for="" class="font-weight-bold m-0 pr-1 label-prefix" style="border-bottom: 1px solid #212121;">Dear</label> 4764 <input 4765 type="text" 4766 id="recipientNameInput" 4767 class="form-control has-limit" 4768 data-properties="penerima" 4769 placeholder="RECIPIENT NAME" 4770 maxlength="30" 4771 4772 > 4773 <small class="limit text-muted">(30)</small> 4774 </div> 4775 <div class="form-group custom-card mb-2 has-counter"> 4776 <textarea 4777 data-properties="ucapan" 4778 class="form-control has-limit" 4779 rows="6" 4780 placeholder="Write your special message here.." 4781 maxlength="300" 4782 ></textarea> 4783 <small class="limit text-muted">(300)</small> 4784 4785 <!-- 4786 <a href="#" data-card-occassion="all"> 4787 <div class="rectangle-promo-code"> 4788 <span class="promo-code-link">Get ideas</span> 4789 </div> 4790 </a> 4791 --> 4792 4793 4794 <button id="msgCard">Template Message</button> 4795 </div> 4796 4797 <div class="hide"> 4798 <input type="hidden" value="" id="note_id" name="note_id" style="top: 0px;"> 4799 <input type="hidden" value="" id="note_btn_id" name="note_btn_id"> 4800 </div> 4801 4802 <div class="form-group ml-auto mt-3 text-right form-group-half position-relative has-counter"> 4803 <label for="" class="font-weight-bold d-none">Yours Sincerely,</label> 4804 <input 4805 id="senderCard" 4806 type="text" 4807 class="form-control text-right has-limit" 4808 data-properties="pengirim" 4809 placeholder="SENDER NAME" 4810 maxlength="30" 4811 > 4812 <small class="limit text-muted">(30)</small> 4813 </div> 4814 4815 </div> 4816 </div> 4817 4818</div>
4819<script> 4820 async function getFetch(url) { 4821 const response = await fetch(url); 4822 const result = await response.json(); 4823 return result; 4824 } 4825 $(document).ready(function(){ 4826 // Prefix selector functionality 4827 var prefixOptions = ['Dear', 'To', 'Hi']; 4828 var isUpdatingPrefix = false; 4829 4830 function getNameWithoutPrefix(value) { 4831 var trimmed = value.trim(); 4832 for (var i = 0; i < prefixOptions.length; i++) { 4833 var prefix = prefixOptions[i]; 4834 if (trimmed.toLowerCase().indexOf(prefix.toLowerCase() + ' ') === 0) { 4835 return trimmed.substring(prefix.length); 4836 } 4837 } 4838 return trimmed; 4839 } 4840 4841 function detectPrefix(value) { 4842 var trimmed = value.trim(); 4843 for (var i = 0; i < prefixOptions.length; i++) { 4844 var prefix = prefixOptions[i]; 4845 if (trimmed.toLowerCase().indexOf(prefix.toLowerCase() + ' ') === 0) { 4846 return prefix; 4847 } 4848 } 4849 return ''; 4850 } 4851 4852 function applyPrefixToInput(prefix) { 4853 var recipientInput = $('#recipientNameInput'); 4854 var nameOnly = getNameWithoutPrefix(recipientInput.val()); 4855 4856 if (!nameOnly) { 4857 recipientInput.val(''); 4858 return; 4859 } 4860 4861 if (prefix === '') { 4862 recipientInput.val(nameOnly); 4863 } else { 4864 recipientInput.val(prefix + ' ' + nameOnly); 4865 } 4866 } 4867 4868 $('#prefixSelector').on('change', function() { 4869 var selectedPrefix = $(this).val(); 4870 var recipientInput = $('#recipientNameInput'); 4871 var labelPrefix = $('.label-prefix'); 4872 4873 isUpdatingPrefix = true; 4874 applyPrefixToInput(selectedPrefix); 4875 isUpdatingPrefix = false; 4876 4877 // Update label-prefix text and visibility 4878 if (selectedPrefix === '') { 4879 labelPrefix.addClass('hidden'); 4880 labelPrefix.text(''); 4881 } else { 4882 labelPrefix.text(selectedPrefix).removeClass('hidden'); 4883 } 4884 4885 recipientInput.focus(); 4886 }); 4887 4888 // Click label-prefix to open selector 4889 $('.label-prefix').on('click', function() { 4890 $('#prefixSelector').focus().click(); 4891 }); 4892 4893 // Initialize label-prefix based on current selector value 4894 var initialPrefix = $('#prefixSelector').val(); 4895 if (initialPrefix === '') { 4896 $('.label-prefix').addClass('hidden'); 4897 } else { 4898 $('.label-prefix').text(initialPrefix); 4899 } 4900 4901 $('#recipientNameInput').on('input', function() { 4902 if (isUpdatingPrefix) { 4903 return; 4904 } 4905 4906 var currentValue = $(this).val(); 4907 4908 // If input is cleared, reset prefix to None 4909 if (!currentValue) { 4910 isUpdatingPrefix = true; 4911 $('#prefixSelector').val(''); 4912 isUpdatingPrefix = false; 4913 return; 4914 } 4915 }); 4916 4917 // Initialize prefix selector based on current value 4918 $('#prefixSelector').val('Dear'); 4919 4920 $('textarea.has-limit, input.has-limit').keyup(function () { 4921 max = this.getAttribute("maxlength"); 4922 var len = $(this).val().length; 4923 var limit = $(this).siblings(".limit"); 4924 if (len >= max) { 4925 alert('you have reached the limit'); 4926 } else { 4927 var char = max - len; 4928 limit.text('('+char+')'); 4929 } 4930 }); 4931 4932 // Limit textarea to maximum 6 lines 4933 $('[data-properties=ucapan]').on('input keydown paste', function(e) { 4934 var textarea = $(this); 4935 var lines = textarea.val().split('\n'); 4936 4937 // Check if trying to add more than 6 lines 4938 if (lines.length > 6) { 4939 // Prevent adding new line if already at 6 lines 4940 if (e.type === 'keydown' && e.keyCode === 13) { 4941 e.preventDefault(); 4942 return false; 4943 } 4944 // Trim to 6 lines if pasting content 4945 if (e.type === 'paste' || e.type === 'input') { 4946 var limitedText = lines.slice(0, 6).join('\n'); 4947 textarea.val(limitedText); 4948 } 4949 } 4950 4951 // Update character counter after line limit check 4952 var max = this.getAttribute("maxlength"); 4953 var len = $(this).val().length; 4954 var limit = $(this).siblings(".limit"); 4955 var char = max - len; 4956 limit.text('('+char+')'); 4957 }); 4958 4959 var text_max=150; 4960 var msg_text=""; 4961 $('#previewMsg').html(msg_text); 4962 $('[data-properties=ucapan]').keyup(function(){ 4963 var text_length=$(this).val().length; 4964 var msg_text=$(this).val(); 4965 $('#previewMsg').html(msg_text); 4966 }); 4967 4968 var note_btn_text = [ 4969 [0,'Try Another'], 4970 [1,'One More Time'], 4971 [2,'Almost There'], 4972 [3,'Next'] 4973 ]; 4974 $("#greetingCard").delegate("#show_note", "click", async function(event){ 4975 event.preventDefault(); 4976 4977 const source = await getFetch(`https://outerbloom.com/cdn/shop/t/87/assets/greeting_card.json?v=${new Date()}`) 4978 4979 const occassion = $("#show_note").attr("data-card-occassion") 4980 4981 let {data} = source.find((el) => el.name === occassion); 4982 4983 var notes = data; 4984 4985 const getRandomIntegerInclusive = (min, max) => { 4986 min = Math.ceil(min) 4987 max = Math.floor(max) 4988 4989 return Math.floor(Math.random() * (max - min + 1)) + min 4990 } 4991 4992 const idx = getRandomIntegerInclusive(0, data.length - 1) 4993 4994 var note=notes[idx]; 4995 4996 $('#note_id').val(idx); 4997 $('[data-properties], #msgDelivery').val(note); 4998 var text_length=$(this).val().length; 4999 $('#previewMsg').html(note); 5000 var idx_2=parseInt($('#note_btn_id').val()); 5001 if(isNaN(idx_2)){ 5002 idx_2=0; 5003 }else{ 5004 idx_2++; 5005 idx_2=idx_2%note_btn_text.length; 5006 } 5007 $('#note_btn_id').val(idx_2); 5008 var note_btn=note_btn_text[idx_2][1]; 5009 $('#note_btn').text(note_btn); 5010 }); 5011 }); 5012</script>
5012 5013 5014 </div> 5015 </div> 5016 5017 </div> 5018</div> 5019 5020 </div> 5021 <div class="purchase-button-wrapper"> 5022 <div class="purchase-button btn-card row m-0"> 5023 <div class="col-12 col-lg-2 text-left mb-2 p-0"> 5024 5025 </div> 5026 <div class="btn-next-card col-12 col-lg-10 text-right"> 5027 5028 5029 5030 <button id="skip-card" style="align-self: center;text-decoration: underline"> 5031 <span> USE BLANK CARD </span> 5032 </button> 5033 5034 5035 <button 5036 5037 5038 id="save-card" 5039 5040 5041 class="btn next-purchase-button text-uppercase" 5042 5043 disabled 5044 5045 > 5046 <span>SAVE & PERSONALIZE GIFT</span> 5047 </button> 5048 </div> 5049</div> 5050 5051 </div> 5052 </div> 5053 </div> 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 <div 5118 class="sectionPurchase purchaseAddon hide" 5119 data-section="addon" 5120 > 5121 <div class="wrapperPurchase"> 5122 <div class="purchase-content"> 5123 <style> 5124 .item-card[data-qty="0"] { display: none; } 5125 .item-card[data-id="8835692069079"] { 5126 display: none; 5127 } 5128 5129 @media (max-width: 768px) { 5130 #itemAddons { 5131 overflow-x: auto; 5132 overflow-y: hidden; 5133 -webkit-overflow-scrolling: touch; 5134 scrollbar-width: none; 5135 -ms-overflow-style: none; 5136 } 5137 5138 #itemAddons::-webkit-scrollbar {
5139 display: none; 5140 } 5141 5142 #itemAddons .row { 5143 flex-wrap: nowrap !important; 5144 width: max-content !important; 5145 gap: 15px !important; 5146 margin: 0 !important; 5147 padding: 0 15px; 5148 } 5149 5150 #itemAddons .item-card { 5151 flex: 0 0 auto; 5152 min-width: 120px; 5153 max-width: 120px; 5154 } 5155 } 5156 @media (min-width: 769px) { 5157 #itemAddons .row { 5158 flex-wrap: wrap; 5159 } 5160 } 5161</style> 5162<div class="headerPurchase"> 5163 <h3>Make It More Special with Add-Ons!</h3> 5164 <a class="close-purchase-popup"> 5165 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none"> 5166 <path d="M1.53287 17.4107L0.588867 16.4667L8.05553 9.00002L0.588867 1.53336L1.53287 0.589355L8.99953 8.05602L16.4662 0.589355L17.4102 1.53336L9.94353 9.00002L17.4102 16.4667L16.4662 17.4107L8.99953 9.94402L1.53287 17.4107Z" fill="black"/> 5167 </svg> 5168</a> 5169 5170</div> 5171<div class="contentPurchase"> 5172 <div class="regulerAddons"> 5173 <div class="menuPurchase"> 5174 <ul> 5175 5176 5177 5178 5179 <li class="item-addon selected" data-count="" data-addon="upsell-inhouse"> 5180 All 5181 </li> 5182 5183 5184 5185 5186 5187 <li class="item-addon" data-count="18" data-addon="upsell-jewelry"> 5188 Jewelry 5189 </li> 5190 5191 5192 5193 5194 5195 <li class="item-addon" data-count="2" data-addon="upsell-cuddlemate"> 5196 Cuddlemate 5197 </li> 5198 5199 5200 5201 5202 5203 <li class="item-addon" data-count="1" data-addon="upsell-diffuser"> 5204 Diffuser 5205 </li> 5206 5207 5208 5209 5210 5211 <li class="item-addon" data-count="1" data-addon="upsell-candle"> 5212 Candle 5213 </li> 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 <li class="item-addon" data-count="1" data-addon="upsell-beverage"> 5224 Beverage 5225 </li> 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 <li class="item-addon" data-count="8" data-addon="upsell-cookies"> 5236 Cookies 5237 </li> 5238 5239 5240 5241 </ul> 5242 </div> 5243 <div id="chooseCard"> 5244 <h4 class="text-uppercase">choose your add-ons you like to include</h4> 5245 <div 5246 id="itemAddons" 5247 class="item-cards d-flex mb-4" 5248 > 5249 <div class="row m-0 gap-20 w-100"> 5250 <p>No Item available</p> 5251 </div> 5252 </div> 5253 </div> 5254 </div> 5255 <!-- <div class="spotifyAddons"></div> --> 5256</div> 5257 5258 </div> 5259 <div class="purchase-button-wrapper"> 5260 <div class="purchase-button btn-addon row m-0"> 5261 <div class="col-12 col-lg-2 text-left mb-2 p-0"> 5262 5263 <button class="back-purchase-button back-addon text-uppercase"> 5264 <svg width="15" height="14" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 5265 <path d="M14.5799 7.41992L2.32992 7.41992L7.57992 12.6699L6.91992 13.4199L0.419922 6.91992L6.91992 0.419922L7.57992 1.16992L2.32992 6.41992L14.5799 6.41992V7.41992Z" fill="black"/> 5266 </svg> 5267 <span>Back</span> 5268 </button> 5269 5270 </div> 5271 <div class="btn-next-card col-12 col-lg-10 text-right"> 5272 5273 5274 5275 5276 <button 5277 5278 class="btn next-purchase-button next-addon text-uppercase" 5279 5280 > 5281 <span>continue without add-ons</span> 5282 </button> 5283 </div> 5284</div> 5285 5286 </div> 5287 </div> 5288 </div> 5289 5290 5291 <div 5292 class="sectionPurchase purchaseAddress hide" 5293 data-section="address" 5294 > 5295 <div class="wrapperPurchase"> 5296 <div class="purchase-content"> 5297 <div class="headerPurchase"> 5298 <h3> 5299 Complete Your Order 5300 </h3> 5301 <a class="close-purchase-popup"> 5302 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none"> 5303 <path d="M1.53287 17.4107L0.588867 16.4667L8.05553 9.00002L0.588867 1.53336L1.53287 0.589355L8.99953 8.05602L16.4662 0.589355L17.4102 1.53336L9.94353 9.00002L17.4102 16.4667L16.4662 17.4107L8.99953 9.94402L1.53287 17.4107Z" fill="black"/> 5304 </svg> 5305</a> 5306 5307</div> 5308 5309<!-- Select2 CSS --> 5310<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/select2.min.css" rel="stylesheet" /> 5311 5312<style> 5313 .select2-container--default .select2-selection--single { 5314 height: 43px !important; 5315 border-radius: 0 !important; 5316 padding: 0 !important; 5317 background-color: #fff !important; 5318 border-color: #212121 !important; 5319 } 5320 5321 .select2-container--default .select2-selection--single .select2-selection__rendered { 5322 line-height: 43px !important; 5323 padding-left: 16px !important; 5324 padding-right: 40px !important; 5325 color: #212121 !important; 5326 font-size: 14px !important; 5327 } 5328 5329 .select2-container--default .select2-selection--single .select2-selection__placeholder { 5330 color: #212121 !important; 5331 font-style: normal; 5332 } 5333 5334 .select2-container--default .select2-selection--single .select2-selection__arrow { 5335 display: none; 5336 height: 48px !important; 5337 right: 10px !important; 5338 } 5339 5340 .select2-container--default.select2-container--open .select2-selection--single { 5341 border-color: #212121 !important; 5342 } 5343 5344 .select2-dropdown { 5345 border: 1px solid #E5E5E5 !important; 5346 border-radius: 0 !important; 5347 border-top: none !important; 5348 overflow: hidden; 5349 padding-bottom: 70px; 5350 } 5351 5352 .select2-container--default .select2-results__option { 5353 padding: 12px 16px !important; 5354 font-size: 14px !important; 5355 } 5356 5357 .select2-container--default .select2-results__option--highlighted[aria-selected] { 5358 background-color: #f5f5f5 !important; 5359 color: #212121 !important; 5360 } 5361 5362 .select2-container--default .select2-results__option[aria-selected=true] { 5363 background-color: #212121 !important; 5364 color: #fff !important; 5365 } 5366 5367 .select2-search--dropdown .select2-search__field { 5368 border: 1px solid #E5E5E5 !important; 5369 border-radius: 0 !important; 5370 padding: 10px 16px !important; 5371 font-size: 14px !important; 5372 } 5373 5374 .select2-search--dropdown .select2-search__field:focus { 5375 border-color: #212121 !important; 5376 outline: none !important; 5377 } 5378 .select2-container { 5379 width: 100% !important; 5380 } 5381 5382 .select2-container--default .select2-selection--single:focus { 5383 outline: none !important; 5384 } 5385 5386 #zipSelectPopup { 5387 display: none; 5388 } 5389 5390 @media (max-width: 991px) { 5391 #zipSelectPopup { 5392 position: fixed; 5393 top: 0; 5394 left: 0; 5395 width: 100%; 5396 height: 100%; 5397 background: #fff; 5398 z-index: 10000; 5399 overflow: hidden; 5400 } 5401 5402 .zip-popup-header { 5403 padding: 16px 20px; 5404 border-bottom: 1px solid #E5E5E5; 5405 display: flex; 5406 justify-content: space-between; 5407 align-items: center; 5408 background: #fff; 5409 position: sticky; 5410 top: 0; 5411 z-index: 10001; 5412 } 5413 5414 .zip-popup-header h4 { 5415 margin: 0; 5416 font-size: 16px; 5417 font-weight: 600; 5418 color: #212121; 5419 } 5420 5421 .zip-popup-close { 5422 background: none; 5423 border: none; 5424 font-size: 28px; 5425 color: #666; 5426 cursor: pointer; 5427 padding: 0; 5428 width: 40px; 5429 height: 40px; 5430 display: flex; 5431 align-items: center; 5432 justify-content: center; 5433 line-height: 1; 5434 } 5435 5436 .zip-popup-search { 5437 padding: 16px 20px; 5438 border-bottom: 1px solid #E5E5E5; 5439 background: #fff; 5440 position: sticky; 5441 top: 57px; 5442 z-index: 10001; 5443 } 5444 5445 .zip-popup-search input { 5446 width: 100%; 5447 padding: 12px 16px; 5448 border: 1px solid #E5E5E5; 5449 border-radius: 4px; 5450 font-size: 14px; 5451 } 5452 5453 .zip-popup-search input:focus { 5454 outline: none; 5455 border-color: #212121; 5456 } 5457 5458 .zip-popup-list { 5459 height: calc(100% - 130px); 5460 overflow-y: auto; 5461 padding: 0; 5462 -webkit-overflow-scrolling: touch; 5463 } 5464 5465 .zip-popup-list-item { 5466 padding: 16px 20px; 5467 border-bottom: 1px solid #f5f5f5; 5468 cursor: pointer; 5469 font-size: 14px; 5470 color: #212121; 5471 background: #fff; 5472 transition: background-color 0.2s; 5473 } 5474 5475 .zip-popup-list-item:active { 5476 background-color: #f5f5f5; 5477 } 5478 5479 .zip-popup-list-item.selected { 5480 background-color: #212121; 5481 color: #fff; 5482 } 5483 5484 .zip-popup-list-item:last-child { 5485 border-bottom: none; 5486 } 5487 #zip { 5488 -webkit-appearance: none; 5489 -moz-appearance: none; 5490 appearance: none; 5491 background-image: none; 5492 cursor: pointer; 5493 font-size: 14px; 5494 padding-right: 16px; 5495 } 5496 } 5497</style> 5498 5499<!-- Mobile Zip Popup --> 5500<div id="zipSelectPopup"> 5501 <div class="zip-popup-header"> 5502 <h4>Select Postal Code / Area</h4> 5503 <button type="button" class="zip-popup-close">×</button> 5504 </div> 5505 <div class="zip-popup-search"> 5506 <input type="text" id="zipPopupSearch" placeholder="Search by postal code or area..."> 5507 </div> 5508 <div class="zip-popup-list" id="zipPopupList"></div> 5509</div> 5510 5511<div class="contentPurchase"> 5512 <div class="row"> 5513 <div class="col-12 col-lg-7 position-relative"> 5514 <div class="addressPurchase"> 5515 5516 <h4 class="text-uppercase">recipient delivery address</h4> 5517 <p>Share the delivery address to send your heartfelt blooms straight to their door.</p> 5518 5519 5520 <!-- Pickup Location Details (hidden by default, shown when pickup is selected) -->
5521 <div id="pickupLocationDetails" class="pickup-location-details" style="display: none; padding: 20px; background-color: #f8f8f8; border: 1px solid #e0e0e0; margin-bottom: 20px;"> 5522 <h5 style="font-size: 16px; font-weight: 600; margin-bottom: 16px; text-transform: uppercase; color: #212121;">Pickup Location</h5> 5523 <div style="font-size: 14px; line-height: 1.8; color: #212121;"> 5524 <p style="margin: 0 0 12px 0;"><strong>ITC Kuningan Mall</strong></p> 5525 <p style="margin: 0 0 12px 0;">Lantai 9 unit 4B<br/>Jl. Prof. DR. Satrio No.18, RT.11/RW.4, Kuningan, Karet Kuningan, Kecamatan Setiabudi, Kota Jakarta Selatan, Daerah Khusus Ibukota Jakarta 12940</p> 5526 <p style="margin: 0 0 12px 0;"><strong>Pickup Hours:</strong> 10:00 - 16:00</p> 5527 <p style="margin: 0; padding: 12px; background-color: #fff3cd; border-left: 4px solid #ffc107; font-size: 13px;"> 5528 <strong>Note:</strong> Please bring your order confirmation when picking up your items. 5529 </p> 5530 </div> 5531 </div> 5532 5533 <div class="formAddressPurchase row"> 5534 <div class="col-12"> 5535 <form> 5536 <div class="form-group row mb-2 mb-lg-4"> 5537 <div class="col-6 position-relative"> 5538 <input id="first_name" type="text" class="form-control input__field" placeholder="" required> 5539 <label for="first_name" class="input__label">First Name<span>*</span></label> 5540 </div> 5541 <div class="col-6 position-relative"> 5542 <input id="last_name" type="text" class="form-control input__field" placeholder="" required> 5543 <label for="last_name" class="input__label">Last Name<span>*</span></label> 5544 </div> 5545 <input type="hidden" data-properties="nama-penerima"> 5546 </div> 5547 5548 <div class="form-group row mb-2 mb-lg-4 form-address"> 5549 <div class="col-6 position-relative"> 5550 <input 5551 id="recipient_number" 5552 type="text" 5553 data-properties="telepon-penerima" 5554 class="form-control input__field" 5555 placeholder="" 5556 required 5557 > 5558 <label for="recipient_number" class="input__label">Recipient number<span>*</span></label> 5559 </div> 5560 <div class="col-6 position-relative"> 5561 <input 5562 id="company" 5563 type="text" 5564 data-properties="company" 5565 class="form-control input__field" 5566 placeholder="" 5567 > 5568 <label for="company" class="input__label">Company (Optional)</label> 5569 </div> 5570 </div> 5571 <div class="form-group row mb-2 mb-lg-4 form-address"> 5572 <div class="col-6 position-relative"> 5573 <input 5574 id="province" 5575 type="text" 5576 class="form-control input__field" 5577 placeholder="" 5578 value="Jakarta" 5579 data-properties="province" 5580 readonly 5581 > 5582 <label for="province" class="input__label">Province</label> 5583 </div> 5584 <div class="col-6 position-relative"> 5585 <select id="zip" class="form-control select-search" required></select> 5586 </div> 5587 </div> 5588 <div class="form-group row mb-2 mb-lg-4 form-address"> 5589 <div class="col-12 position-relative"> 5590 <input 5591 id="streetAddress" 5592 type="text" 5593 class="form-control input__field" 5594 placeholder="Jl. Example No.123 RT.01 RW.02" 5595 required 5596 > 5597 <label for="streetAddress" class="input__label" style="top: 12px;left: 16px;font-size: 12px;color: #212121;transform: translateY(-7px);padding: 0 5px;">Street Address<span>*</span></label> 5598 5599 5600 </div> 5601 </div> 5602 <div class="form-group row position-relative mb-2 mb-lg-4 form-address hide"> 5603 <div class="col-12"> 5604 <textarea 5605 id="delivery_address" 5606 data-properties="alamat-penerima" 5607 class="form-control input__field col-12" 5608 placeholder="" 5609 required 5610 readonly 5611 ></textarea> 5612 <label for="delivery_address" class="input__label">Delivery Address<span>*</span></label> 5613 </div> 5614 </div> 5615 </form> 5616 </div> 5617 </div> 5618 </div> 5619 <div class="addonsPurchase"> 5620 <h4 class="text-uppercase">add-ons</h4> 5621 <div class="addons"> 5622 <p>No Add-Ons</p> 5623 <!-- 5624 <button class="add-addon"> 5625 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"> 5626 <path d="M5.5 6.5H0V5.5H5.5V0H6.5V5.5H12V6.5H6.5V12H5.5V6.5Z" fill="black"/> 5627 </svg>
5628 <span>Enhance my moment with Add-ons</span> 5629 </button> 5630 --> 5631 </div> 5632 </div> 5633 </div> 5634 5635 <div class="col-12 col-lg-5 row m-0 justify-content-end"> 5636 <div class="reviewCardPurchase"> 5637 <h4 class="text-uppercase">review your greeting card</h4> 5638 <p>You can edit the greeting card to ensure your words perfectly express your love.</p> 5639 <div class="cardPreview"> 5640 <!-- Card preview structure --> 5641 <div class="card-preview-container" style="display: none;"> 5642 <!-- Card design preview (with or without photo) --> 5643 <div class="card-preview-wrapper"> 5644 <!-- Top Section (50% height) --> 5645 <div class="card-top-section"> 5646 <!-- Layout for when NO photo is uploaded --> 5647 <div class="no-photo-layout"> 5648 <div class="qr-text"> 5649 <p class="qr-title">A<br/>special message</p> 5650 <p class="qr-subtitle">for <span class="recipient-qr-text">Munying</span>!</p> 5651 </div> 5652 <div class="qr-code-container"> 5653 <div class="qr-placeholder">QR</div> 5654 </div> 5655 <div class="qr-scan-text"> 5656 <p>Scan for the surprise</p> 5657 </div> 5658 </div> 5659 5660 <!-- Layout for when photo IS uploaded --> 5661 <div class="with-photo-layout" style="display: none;"> 5662 <div class="photo-container"> 5663 <img class="card-preview-photo" src="" alt="Card photo" width="300" height="200"> 5664 <div class="photo-qr-overlay hide hidden"> 5665 <div class="qr-code-small"> 5666 <div class="qr-placeholder-small">QR</div> 5667 </div> 5668 <div class="photo-qr-text"> 5669 <p>Scan for a special message for you</p> 5670 </div> 5671 </div> 5672 </div> 5673 </div> 5674 </div> 5675 5676 <!-- Divider Line --> 5677 <div class="card-divider"></div> 5678 5679 <!-- Bottom Section (50% height) --> 5680 <div class="card-bottom-section"> 5681 <!-- Recipient name --> 5682 <div class="card-recipient-name"> 5683 <span class="recipient-text"></span> 5684 </div> 5685 5686 <!-- Card message --> 5687 <div class="card-message-section"> 5688 <div class="card-message-text"></div> 5689 </div> 5690 5691 <!-- Sender name --> 5692 <div class="card-sender-name"> 5693 <span class="sender-text"></span> 5694 </div> 5695 </div> 5696 </div> 5697 </div> 5698 5699 <!-- Empty state --> 5700 <div class="card-empty-state"> 5701 <div style="text-align: center; padding: 40px 20px; color: #999; border: 1px dashed #ddd; border-radius: 8px;"> 5702 <p style="margin: 0; font-size: 14px;">Your greeting card preview will appear here</p> 5703 <p style="margin: 5px 0 0 0; font-size: 12px;">Complete the greeting card section to see the preview</p> 5704 </div> 5705 </div> 5706 </div> 5707 </div> 5708 <div class="scanCard mt-3 hide"> 5709 <div class="position-relative"> 5710 <div id="qrcode"></div> 5711 <div class="t-preview"> 5712 <p class="h3">preview your moment</p> 5713 <p>Scan this barcode on OUTERBLOOMâs mobile application</p> 5714 </div> 5715 </div> 5716 </div> 5717 </div> 5718 5719 </div> 5720</div> 5721
5722<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
vendor: 1 bytes, line 5722
5722
5723<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/select2.min.js"></script>
5723 5724
5725<script> 5726document.addEventListener('DOMContentLoaded', function() { 5727 // Detect iOS 5728 var isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; 5729 5730 if (isIOS) { 5731 document.querySelector('.formAddressPurchase').classList.add('ios'); 5732 5733 // iOS specific fixes 5734 var inputs = document.querySelectorAll('.formAddressPurchase .input__field'); 5735 5736 inputs.forEach(function(input) { 5737 // Force enable touch events on iOS 5738 input.style.webkitUserSelect = 'text'; 5739 input.style.webkitTouchCallout = 'default'; 5740 input.style.pointerEvents = 'auto'; 5741 input.style.touchAction = 'manipulation'; 5742 5743 // Add explicit touch event listeners for iOS 5744 input.addEventListener('touchstart', function(e) { 5745 e.stopPropagation(); 5746 this.focus(); 5747 }, { passive: false }); 5748 5749 input.addEventListener('touchend', function(e) { 5750 e.preventDefault(); 5751 e.stopPropagation(); 5752 this.focus(); 5753 this.click(); 5754 }, { passive: false }); 5755 5756 // Force focus on tap for iOS 5757 input.addEventListener('click', function(e) { 5758 e.stopPropagation(); 5759 if (document.activeElement !== this) { 5760 this.focus(); 5761 } 5762 }); 5763 }); 5764 5765 // Fix for label overlapping on iOS 5766 var labels = document.querySelectorAll('.formAddressPurchase .input__label'); 5767 labels.forEach(function(label) { 5768 label.style.pointerEvents = 'none'; 5769 label.addEventListener('touchstart', function(e) { 5770 e.preventDefault(); 5771 var input = this.parentNode.querySelector('.input__field'); 5772 if (input) { 5773 input.focus(); 5774 } 5775 }); 5776 }); 5777 } 5778 5779 // Handle input state for all browsers, especially iOS 5780 var inputs = document.querySelectorAll('.input__field'); 5781 5782 inputs.forEach(function(input) { 5783 // Handle input events 5784 input.addEventListener('input', function() { 5785 if (this.value.trim() !== '') { 5786 this.classList.add('has-value'); 5787 } else { 5788 this.classList.remove('has-value'); 5789 } 5790 }); 5791 5792 // Handle focus 5793 input.addEventListener('focus', function() { 5794 this.classList.add('focused'); 5795 // iOS specific: ensure input is visible 5796 if (isIOS) { 5797 setTimeout(function() { 5798 input.scrollIntoView({ behavior: 'smooth', block: 'center' }); 5799 }, 300); 5800 } 5801 }); 5802 5803 // Handle blur 5804 input.addEventListener('blur', function() { 5805 this.classList.remove('focused'); 5806 if (this.value.trim() !== '') { 5807 this.classList.add('has-value'); 5808 } else { 5809 this.classList.remove('has-value'); 5810 } 5811 }); 5812 5813 // Initial check for pre-filled values 5814 if (input.value.trim() !== '') { 5815 input.classList.add('has-value'); 5816 } 5817 }); 5818 5819 // Additional iOS fixes 5820 if (isIOS) { 5821 // Prevent iOS Safari from adding default styling 5822 document.addEventListener('touchstart', function() {}, { passive: true }); 5823 5824 // Fix viewport issues on iOS 5825 var viewport = document.querySelector('meta[name=viewport]'); 5826 if (viewport) { 5827 viewport.setAttribute('content', 5828 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' 5829 ); 5830 } 5831 } 5832 5833 // Card Preview functionality 5834 function updateCardPreview() { 5835 // Get data from greeting card inputs ONLY from #greetingCard or .greetingCard area 5836 const greetingCardArea = $('#greetingCard, .greetingCard'); 5837 5838 const recipientName = greetingCardArea.find('[data-properties="penerima"]').val() || ''; 5839 const senderName = greetingCardArea.find('[data-properties="pengirim"]').val() || 5840 greetingCardArea.find('[data-properties="kartu-nama-pengirim"]').val() || 5841 greetingCardArea.find('#senderCard').val() || '-'; 5842 const cardMessage = greetingCardArea.find('[data-properties="ucapan"]').val() || 5843 greetingCardArea.find('#kartu-ucapan').val() || '-'; 5844 const photoUrl = $('#properties-photo').val(); 5845 const videoUrl = greetingCardArea.find('#properties-video').val() || ''; 5846 const qrId = greetingCardArea.find('#properties-qrId').val() || ''; 5847 5848 // Get preview elements 5849 const cardContainer = $('.card-preview-container'); 5850 const emptyState = $('.card-empty-state'); 5851 const recipientText = $('.recipient-text'); 5852 const recipientQrText = $('.recipient-qr-text'); 5853 const senderText = $('.sender-text'); 5854 const messageText = $('.card-message-text'); 5855 const noPhotoLayout = $('.no-photo-layout'); 5856 const withPhotoLayout = $('.with-photo-layout'); 5857 const previewPhoto = $('.card-preview-photo'); 5858 const qrContainer = $('.qr-code-container'); 5859 const qrContainerSmall = $('.qr-code-small'); 5860 5861 // Check if we have any card content 5862 const hasContent = (recipientName && recipientName.trim() !== '' && recipientName.trim() !== ' ') || 5863 (senderName !== '' && senderName !== '-') || 5864 (cardMessage !== '' && cardMessage !== '-') || 5865 (photoUrl && photoUrl !== '' && photoUrl !== '-') || 5866 (videoUrl && videoUrl !== '' && videoUrl !== '-'); 5867 5868 if (hasContent) { 5869 // Show card preview, hide empty state 5870 cardContainer.show(); 5871 emptyState.hide(); 5872 5873 // Update recipient name in bottom section with prefix 5874 let recipientDisplay = ''; 5875 if (recipientName && recipientName.trim() !== '' && recipientName.trim() !== ' ' && recipientName.trim() !== '-') { 5876 const prefix = $('.label-prefix').text().trim() || ''; 5877 const trimmedName = recipientName.trim(); 5878 recipientDisplay = prefix + (trimmedName ? ' ' + trimmedName : ''); 5879 } 5880 recipientText.text(recipientDisplay); 5881 5882 // Update recipient name in QR section (for no-photo layout) - use first name only or full name 5883 let recipientQrDisplay = ''; 5884 if (recipientName && recipientName.trim() !== '' && recipientName.trim() !== ' ' && recipientName.trim() !== '-') { 5885 recipientQrDisplay = recipientName.trim().split(' ')[0]; 5886 } 5887 recipientQrText.text(recipientQrDisplay); 5888 5889 // Update sender name 5890 const senderDisplay = (senderName !== '' && senderName !== '-') ? senderName : ''; 5891 senderText.text(senderDisplay); 5892 5893 // Update message 5894 const messageDisplay = (cardMessage !== '' && cardMessage !== '-') ? 5895 cardMessage : ''; 5896 messageText.text(messageDisplay); 5897 5898 // Handle photo display and layout switching 5899 if (photoUrl && photoUrl !== '' && photoUrl !== '-') { 5900 // Show photo layout, hide no-photo layout 5901 noPhotoLayout.hide(); 5902 withPhotoLayout.show(); 5903 previewPhoto.attr('src', photoUrl); 5904 5905 // Generate QR code for photo layout 5906 if (qrId && qrId !== '' && qrId !== '-') { 5907 qrContainerSmall.html(''); 5908 try { 5909 var qrCode = new QRCode(qrContainerSmall[0], { 5910 text: `https://moment.outerbloom.com/${qrId}`, 5911 width: 40, 5912 height: 40, 5913 colorDark: "#333333", 5914 colorLight: "#ffffff", 5915 correctLevel: QRCode.CorrectLevel.L, 5916 }); 5917 } catch(e) { 5918 qrContainerSmall.html('<div class="qr-placeholder-small">QR</div>'); 5919 } 5920 } else { 5921 qrContainerSmall.html('<div class="qr-placeholder-small">QR</div>'); 5922 } 5923 } else { 5924 // Show no-photo layout, hide photo layout 5925 withPhotoLayout.hide(); 5926 noPhotoLayout.show(); 5927 5928 // Generate QR code for no-photo layout 5929 if (qrId && qrId !== '' && qrId !== '-') { 5930 qrContainer.html(''); 5931 try { 5932 var qrCode = new QRCode(qrContainer[0], { 5933 text: `https://moment.outerbloom.com/${qrId}`, 5934 width: 80, 5935 height: 80, 5936 colorDark: "#333333", 5937 colorLight: "#ffffff", 5938 correctLevel: QRCode.CorrectLevel.L, 5939 }); 5940 } catch(e) { 5941 qrContainer.html('<div class="qr-placeholder">QR</div>'); 5942 } 5943 } else { 5944 qrContainer.html('<div class="qr-placeholder">QR</div>'); 5945 } 5946 } 5947 } else { 5948 // Show empty state, hide card preview 5949 cardContainer.hide(); 5950 emptyState.show(); 5951 } 5952 } 5953 5954 // Listen for changes in greeting card fields ONLY from #greetingCard or .greetingCard area 5955 $(document).on('input change keyup', '#greetingCard [data-properties="penerima"], #greetingCard [data-properties="ucapan"], #greetingCard [data-properties="pengirim"], #greetingCard [data-properties="kartu-nama-pengirim"], #greetingCard #senderCard, #greetingCard #kartu-ucapan, #greetingCard #properties-photo, #greetingCard #properties-video, #greetingCard #properties-qrId, .greetingCard [data-properties="penerima"], .greetingCard [data-properties="ucapan"], .greetingCard [data-properties="pengirim"], .greetingCard [data-properties="kartu-nama-pengirim"], .greetingCard #senderCard, .greetingCard #kartu-ucapan, .greetingCard #properties-photo, .greetingCard #properties-video, .greetingCard #properties-qrId', function() { 5956 setTimeout(updateCardPreview, 100); // Small delay to allow value updates 5957 }); 5958 5959 // Listen for custom events from greeting card section 5960 $(document).on('cardDataUpdated', function() { 5961 updateCardPreview(); 5962 }); 5963 5964 // Listen for btn-next-card click using delegate 5965 $(document).on('click', '.btn-next-card .btn', function() { 5966 console.log('btn-next-card clicked, updating card preview...'); 5967 updateCardPreview(); 5968 }); 5969 5970 // Initial card preview update 5971 $(document).ready(function() { 5972 setTimeout(updateCardPreview, 1000); // Delay to ensure all fields are initialized 5973 5974 // Update preview when moving to purchase address step 5975 if ($('.purchaseAddress').length && !$('.purchaseAddress').hasClass('hide')) { 5976 updateCardPreview(); 5977 } 5978 }); 5979 5980 // Auto-fill delivery address from input fields 5981 window.updateDeliveryAddress = function() { 5982 const selectedMethod = $('#selectedShippingMethod').val(); 5983 if (selectedMethod === 'Pickup') { 5984 const pickupAddress = "ITC Kuningan, Mall, Lantai 9 unit 4B, Jl. Prof. DR. Satrio No.18"; 5985 const pickupZipCode = "12940 - Karet Kuningan"; 5986 5987 const deliveryAddressTextarea = $('#delivery_address'); 5988 5989 // Set delivery address 5990 if (deliveryAddressTextarea.val() !== pickupAddress) { 5991 deliveryAddressTextarea.val(pickupAddress); 5992 deliveryAddressTextarea.addClass('has-value'); 5993 deliveryAddressTextarea.trigger('change'); 5994 $('#properties-kodepos').val(pickupZipCode); 5995 } 5996 5997 return; 5998 } 5999 6000 const streetAddress = $('#streetAddress').val().trim(); 6001 const zipValue = $('#zip').val() || ''; // Format: "12345-Kelurahan-Kecamatan" 6002 const province = $('#province').val().trim(); 6003 6004 // Parse zip value 6005 let postalCode = ''; 6006 let kelurahan = ''; 6007 let kecamatan = ''; 6008 6009 if (zipValue) { 6010 const zipParts = zipValue.split('-'); 6011 postalCode = zipParts[0] || ''; // zip.split('-')[0] 6012 kelurahan = zipParts[1] || ''; // zip.split('-')[1] 6013 kecamatan = zipParts[2] || ''; // zip.split('-')[2] 6014 } 6015 6016 // Build address string with format: [streetAddress], [kelurahan], [kecamatan], [province], [postalCode], Indonesia 6017 let addressParts = []; 6018 6019 if (streetAddress) addressParts.push(streetAddress); 6020 if (kelurahan) addressParts.push(kelurahan); 6021 if (kecamatan) addressParts.push(kecamatan); 6022 if (province) addressParts.push(province); 6023 if (postalCode) addressParts.push(postalCode); 6024 addressParts.push('Indonesia'); 6025 6026 const fullAddress = addressParts.join(', '); 6027 6028 // Update delivery address textarea 6029 const deliveryAddressTextarea = $('#delivery_address'); 6030 deliveryAddressTextarea.val(fullAddress); 6031 6032 // Update has-value class for label animation 6033 if (fullAddress && fullAddress !== 'Indonesia') { 6034 deliveryAddressTextarea.addClass('has-value'); 6035 } else { 6036 deliveryAddressTextarea.removeClass('has-value'); 6037 } 6038 6039 // Trigger change event 6040 deliveryAddressTextarea.trigger('change'); 6041 } 6042 6043 // Initialize Select2 for postal code select 6044 function initZipSearch() { 6045 // Only initialize Select2 on desktop (screen width > 992px) 6046 if ($(window).width() > 992) { 6047 $('#zip').select2({ 6048 placeholder: 'Search by postal code or area', 6049 allowClear: false, 6050 width: '100%', 6051 matcher: function(params, data) { 6052 // If there are no search terms, return all of the data 6053 if ($.trim(params.term) === '') { 6054 return data; 6055 } 6056
6057 // Do not display the item if there is no 'text' property 6058 if (typeof data.text === 'undefined') { 6059 return null; 6060 } 6061 6062 // `params.term` should be the term that is used for searching 6063 // `data.text` is the text that is displayed for the data object 6064 if (data.text.toLowerCase().indexOf(params.term.toLowerCase()) > -1 || 6065 data.id.toLowerCase().indexOf(params.term.toLowerCase()) > -1) { 6066 var modifiedData = $.extend({}, data, true); 6067 return modifiedData; 6068 } 6069 6070 // Return `null` if the term does not match the data 6071 return null; 6072 } 6073 }); 6074 6075 // Handle select change to update delivery address 6076 $('#zip').on('change', function() { 6077 updateDeliveryAddress(); 6078 }); 6079 } else { 6080 // On mobile (<991px), use custom popup instead of native select 6081 var $zipSelect = $('#zip'); 6082 var $popup = $('#zipSelectPopup'); 6083 var $popupList = $('#zipPopupList'); 6084 var $popupSearch = $('#zipPopupSearch'); 6085 var isPopupOpen = false; 6086 var isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; 6087 6088 // Populate popup list with options from select 6089 function populatePopupList(filterText = '') { 6090 $popupList.empty(); 6091 6092 $zipSelect.find('option').each(function() { 6093 var $option = $(this); 6094 var value = $option.val(); 6095 var text = $option.text(); 6096 6097 // Skip empty/placeholder options 6098 if (!value || value === '') return; 6099 6100 // Filter based on search text 6101 if (filterText && 6102 text.toLowerCase().indexOf(filterText.toLowerCase()) === -1 && 6103 value.toLowerCase().indexOf(filterText.toLowerCase()) === -1) { 6104 return; 6105 } 6106 6107 var $item = $('<div class="zip-popup-list-item"></div>') 6108 .attr('data-value', value) 6109 .text(text); 6110 6111 // Mark selected item 6112 if (value === $zipSelect.val()) { 6113 $item.addClass('selected'); 6114 } 6115 6116 $popupList.append($item); 6117 }); 6118 } 6119 6120 // Function to open popup 6121 function openPopup() { 6122 if (isPopupOpen) return; 6123 6124 isPopupOpen = true; 6125 populatePopupList(); 6126 $popup.css('display', 'block').hide().fadeIn(200); 6127 $('body').css('overflow', 'hidden'); 6128 6129 // iOS needs more delay for focus 6130 var focusDelay = isIOS ? 500 : 250; 6131 setTimeout(function() { 6132 $popupSearch.focus(); 6133 }, focusDelay); 6134 } 6135 6136 // Function to close popup 6137 function closePopup() { 6138 if (!isPopupOpen) return; 6139 6140 isPopupOpen = false; 6141 $popup.fadeOut(200); 6142 $('body').css('overflow', ''); 6143 $popupSearch.val(''); 6144 } 6145 6146 // iOS specific handling 6147 if (isIOS) { 6148 // For iOS, use only touchstart with proper event handling 6149 $zipSelect.on('touchstart', function(e) { 6150 e.preventDefault(); 6151 e.stopPropagation(); 6152 e.stopImmediatePropagation(); 6153 6154 if (!isPopupOpen) { 6155 openPopup(); 6156 } 6157 6158 return false; 6159 }); 6160 6161 // Prevent other events on iOS to avoid double triggering 6162 $zipSelect.on('click focus mousedown', function(e) { 6163 e.preventDefault(); 6164 e.stopPropagation(); 6165 e.stopImmediatePropagation(); 6166 return false; 6167 }); 6168 } else { 6169 // For Android and other mobile devices 6170 // Use touchstart as primary event to prevent native dropdown 6171 $zipSelect.on('touchstart', function(e) { 6172 e.preventDefault(); 6173 e.stopPropagation(); 6174 e.stopImmediatePropagation(); 6175 6176 if (!isPopupOpen) { 6177 openPopup(); 6178 } 6179 6180 return false; 6181 }); 6182 6183 // Also prevent click and other events to ensure native dropdown doesn't show 6184 $zipSelect.on('click focus mousedown touchend', function(e) { 6185 e.preventDefault(); 6186 e.stopPropagation(); 6187 e.stopImmediatePropagation(); 6188 return false;
6189 }); 6190 } 6191 6192 // Search functionality 6193 $popupSearch.on('input', function() { 6194 populatePopupList($(this).val()); 6195 }); 6196 6197 // Track touch movement to differentiate scroll from tap 6198 var touchStartY = 0; 6199 var touchMoved = false; 6200 6201 // Track touch start 6202 $popupList.on('touchstart', '.zip-popup-list-item', function(e) { 6203 touchStartY = e.originalEvent.touches[0].clientY; 6204 touchMoved = false; 6205 }); 6206 6207 // Track touch movement 6208 $popupList.on('touchmove', '.zip-popup-list-item', function(e) { 6209 var touchY = e.originalEvent.touches[0].clientY; 6210 if (Math.abs(touchY - touchStartY) > 10) { 6211 touchMoved = true; 6212 } 6213 }); 6214 6215 // Handle option selection - only if not scrolling 6216 $popupList.on('touchend', '.zip-popup-list-item', function(e) { 6217 e.preventDefault(); 6218 e.stopPropagation(); 6219 6220 // Only select if user didn't scroll 6221 if (!touchMoved) { 6222 var selectedValue = $(this).attr('data-value'); 6223 $zipSelect.val(selectedValue).trigger('change'); 6224 closePopup(); 6225 updateDeliveryAddress(); 6226 } 6227 }); 6228 6229 // Also handle click for desktop testing 6230 $popupList.on('click', '.zip-popup-list-item', function(e) { 6231 e.preventDefault(); 6232 e.stopPropagation(); 6233 6234 var selectedValue = $(this).attr('data-value'); 6235 $zipSelect.val(selectedValue).trigger('change'); 6236 closePopup(); 6237 updateDeliveryAddress(); 6238 }); 6239 6240 // Prevent scroll from closing popup - apply to all touch events 6241 $popupList.on('touchstart touchmove touchend scroll', function(e) { 6242 e.stopPropagation(); 6243 }); 6244 6245 // Prevent search input touch from closing popup 6246 $popupSearch.on('touchstart touchmove touchend click', function(e) { 6247 e.stopPropagation(); 6248 }); 6249 6250 // Prevent header touch from closing popup (except close button) 6251 $('.zip-popup-header').on('touchstart touchmove touchend click', function(e) { 6252 if (!$(e.target).hasClass('zip-popup-close')) { 6253 e.stopPropagation(); 6254 } 6255 }); 6256 6257 // Close popup handlers 6258 $('.zip-popup-close').on('click touchend', function(e) { 6259 e.preventDefault(); 6260 e.stopPropagation(); 6261 closePopup(); 6262 }); 6263 6264 // Prevent touchmove on popup content from bubbling up 6265 $('.zip-popup-content').on('touchstart touchmove touchend', function(e) { 6266 e.stopPropagation(); 6267 }); 6268 6269 // Close on background tap only - but not on any touch inside content 6270 $popup.on('touchend', function(e) { 6271 // Only close if touching popup background directly, not content 6272 if ($(e.target).is('#zipSelectPopup')) { 6273 e.preventDefault(); 6274 closePopup(); 6275 } 6276 }); 6277 } 6278 } 6279 6280 // Listen for changes in address fields 6281 $(document).on('input change', '#streetAddress, #zip, #province', function() { 6282 updateDeliveryAddress(); 6283 }); 6284 6285 // Initial update on page load 6286 $(document).ready(function() { 6287 setTimeout(updateDeliveryAddress, 500); 6288 6289 // Initialize zip search after select is populated 6290 setTimeout(initZipSearch, 600); 6291 }); 6292}); 6293</script>
6293 6294 </div> 6295 <div class="purchase-button-wrapper"> 6296 <div class="purchase-button btn-address row m-0"> 6297 <div class="col-12 col-lg-2 text-left mb-2 p-0"> 6298 6299 <button class="back-purchase-button back-address text-uppercase"> 6300 <svg width="15" height="14" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 6301 <path d="M14.5799 7.41992L2.32992 7.41992L7.57992 12.6699L6.91992 13.4199L0.419922 6.91992L6.91992 0.419922L7.57992 1.16992L2.32992 6.41992L14.5799 6.41992V7.41992Z" fill="black"/> 6302 </svg> 6303 <span>Back</span> 6304 </button> 6305 6306 </div> 6307 <div class="btn-next-card col-12 col-lg-10 text-right"> 6308 6309 <!-- 6310 <button class="back-purchase-button back-address text-uppercase mr-lg-2 mb-2 mb-lg-0"> 6311 <svg width="15" height="14" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 6312 <path d="M14.5799 7.41992L2.32992 7.41992L7.57992 12.6699L6.91992 13.4199L0.419922 6.91992L6.91992 0.419922L7.57992 1.16992L2.32992 6.41992L14.5799 6.41992V7.41992Z" fill="black"/> 6313 </svg> 6314 <span>Back</span> 6315 </button> 6316 --> 6317 6318 6319 6320 6321 <button 6322 6323 id="addtocart-card" 6324 6325 class="btn next-address text-uppercase" 6326 6327 > 6328 <span>add to cart</span> 6329 </button> 6330 </div> 6331</div> 6332 6333 </div> 6334 </div> 6335 </div> 6336 6337 </div> 6338</div> 6339<div id="backgroundPopup"></div> 6340 6341 6342 6343<input 6344 data-index="1" 6345 type="hidden" 6346 id="properties-delivery-date" 6347 name="properties[Delivery Date]" 6348 value="-" 6349> 6350<input 6351 data-index="2" 6352 type="hidden" 6353 id="properties-delivery-time" 6354 name="properties[Delivery Time]" 6355 value="-" 6356> 6357<input 6358 data-index="4" 6359 type="hidden" 6360 id="properties-nama-penerima" 6361 name="properties[Nama Penerima]" 6362 value="-" 6363> 6364<input 6365 data-index="5" 6366 type="hidden" 6367 id="properties-alamat-penerima" 6368 name="properties[Alamat Penerima]" 6369 value="-" 6370> 6371<input 6372 data-index="6" 6373 type="hidden" 6374 id="properties-kodepos" 6375 name="properties[Kodepos]" 6376 value="-" 6377> 6378<input data-index="7" type="hidden" id="properties-telepon-penerima" name="properties[Telepon Penerima]"> 6379 6380 <input 6381 data-index="8" 6382 type="hidden" 6383 id="properties-kartu-nama-penerima" 6384 name="properties[Kartu Nama Penerima]" 6385 value="-" 6386 > 6387 <input 6388 data-index="9" 6389 type="hidden" 6390 id="properties-kartu-ucapan" 6391 name="properties[Kartu Ucapan]" 6392 value="-" 6393 > 6394 6395 6396 6397 <input 6398 data-index="10" 6399 type="hidden" 6400 id="properties-kartu-nama-pengirim" 6401 name="properties[Kartu Nama Pengirim]" 6402 value="-" 6403 > 6404 6405 6406 6407 <input 6408 data-index="11" 6409 type="hidden" 6410 id="properties-photo" 6411 name="properties[Foto]" 6412 value="-" 6413 > 6414 <input 6415 id="input-foto" 6416 type="file" 6417 class="customFile" 6418 accept="image/*" 6419 style="position: absolute;top:40%;display:none;" 6420 > 6421 <input 6422 data-index="12" 6423 type="hidden" 6424 id="properties-video" 6425 name="properties[Video]" 6426 value="-" 6427 > 6428 <input 6429 id="input-video" 6430 type="file" 6431 class="customFileVideo" 6432 accept="video/*" 6433 style="position: absolute;top:40%;display:none;" 6434 > 6435 <input data-index="13" type="hidden" id="properties-qrId" name="properties[QR Code]" value=""> 6436 6437 6438 <div style="visiblity: hidden;opacity: 0;position: absolute;top:0;z-index:-999"> 6439 <textarea id="noteHampers" name="properties[Note Hampers]" placeholder="Notes:"> </textarea> 6440 <input 6441 id="logo-hampers" 6442 class="dropzonex" 6443 type="file" 6444 name="properties[Logo Hampers]" 6445 class="customFile" 6446 accept="image/*" 6447 > 6448 </div> 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461<!-- Additional Shipping --> 6462<input type="hidden" id="properties-kota-pengiriman-province" name="properties[Province]"> 6463<input 6464 type="hidden" 6465 id="properties-kota-pengiriman-country" 6466 name="properties[Country]" 6467 value="Indonesia" 6468> 6469<input type="hidden" id="properties-shipping" name="properties[Shipping]"> 6470 6471<input type="hidden" id="properties-time" name="properties[Time]"> 6472<input type="hidden" id="properties-card" name="properties[Card]"> 6473<input type="hidden" id="properties-addons" name="properties[Addons]"> 6474 6475<input
6476 type="hidden" 6477 id="properties-company" 6478 name="properties[Company]" 6479 value="" 6480>
6481<script> 6482 6483 $(document).ready(function(){ 6484 6485 var text_max_papan1=150; 6486 var msg_text_papan1=""; 6487 $('#kartu-ucapan-ucapan').keyup(function(){ 6488 var text_length_papan1=$('#kartu-ucapan-ucapan').val().length; 6489 var msg_text_papan1=$('#kartu-ucapan-ucapan').val(); 6490 }); 6491 6492 var notes_papan1 = [ 6493 6494 [0,"Happy Wedding (nama & nama)."],[1,"Congratulations lovebirds (nama & nama)."],[2,"Selamat berbahagia (nama & nama)."],[3,"Selamat menempuh hidup baru (nama & nama)."] 6495 6496 ]; 6497 $('#show_note_papan1').click(function(event){ 6498 event.preventDefault(); 6499 var idx_papan1=parseInt($('#note_id_papan1').val()); 6500 if(isNaN(idx_papan1)){ 6501 idx_papan1=0; 6502 }else{ 6503 idx_papan1++; 6504 idx_papan1=idx_papan1%notes_papan1.length; 6505 } 6506 var note_papan1=notes_papan1[idx_papan1][1]; 6507 $('#note_id_papan1').val(idx_papan1); 6508 $('#kartu-ucapan-papan, #properties-kartu-pesan, #properties-kartu-ucapan').val(note_papan1); 6509 $('#msgDelivery').val(note_papan1); 6510 6511 var text_length_papan1=$('#kartu-ucapan-papan').val().length; 6512 var idx_2_papan1=parseInt($('#note_btn_id_papan1').val()); 6513 if(isNaN(idx_2_papan1)){ 6514 idx_2_papan1=0; 6515 }else{ 6516 idx_2_papan1++; 6517 //idx_2_papan1=idx_2_papan1%note_btn_text_papan1.length; 6518 } 6519 $('#note_btn_id_papan1').val(idx_2_papan1); 6520 //var note_btn=note_btn_text[idx_2][1]; 6521 //$('#note_btn').text(note_btn); 6522 $(this).parents(".sectionPurchase").find(".next-purchase-button").attr("disabled", false) 6523 }); 6524 6525 var text_max_papan2=150; 6526 var msg_text_papan2=""; 6527 $('#kartu-ucapan-ucapan').keyup(function(){ 6528 var text_length_papan2=$('#kartu-ucapan-ucapan').val().length; 6529 var msg_text_papan2=$('#kartu-ucapan-ucapan').val(); 6530 }); 6531 6532 var notes_papan2 = [ 6533 6534 [0,"Congratulations (ucapan)."], [1,"Selamat dan sukses atas dibukanya (ucapan personal)."],[2,"Congratulations for the grand opening of (nama toko/bisnis)."],[3,"Happy Graduation (nama)."] 6535 6536 ]; 6537 $('#show_note_papan2').click(function(event){ 6538 event.preventDefault(); 6539 var idx_papan2=parseInt($('#note_id_papan2').val()); 6540 if(isNaN(idx_papan2)){ 6541 idx_papan2=0; 6542 }else{ 6543 idx_papan2++; 6544 idx_papan2=idx_papan2%notes_papan2.length; 6545 } 6546 var note_papan2=notes_papan2[idx_papan2][1]; 6547 $('#note_id_papan2').val(idx_papan2); 6548 $('#kartu-ucapan-papan, #properties-kartu-pesan, #properties-kartu-ucapan').val(note_papan2); 6549 $('#msgDelivery').val(note_papan2); 6550 var text_length_papan2=$('#kartu-ucapan-papan').val().length; 6551 var idx_2_papan2=parseInt($('#note_btn_id_papan2').val()); 6552 if(isNaN(idx_2_papan2)){ 6553 idx_2_papan2=0; 6554 }else{ 6555 idx_2_papan2++; 6556 //idx_2_papan1=idx_2_papan1%note_btn_text_papan1.length; 6557 } 6558 $('#note_btn_id_papan2').val(idx_2_papan2); 6559 //var note_btn=note_btn_text[idx_2][1]; 6560 //$('#note_btn').text(note_btn); 6561 $(this).parents(".sectionPurchase").find(".next-purchase-button").attr("disabled", false) 6562 }); 6563 6564 var text_max_papan3=150; 6565 var msg_text_papan3=""; 6566 $('#kartu-ucapan-ucapan').keyup(function(){ 6567 var text_length_papan3=$('#kartu-ucapan-ucapan').val().length; 6568 var msg_text_papan3=$('#kartu-ucapan-ucapan').val(); 6569 }); 6570 6571 var notes_papan3 = [ 6572 6573 [0,"Turut Berduka Cita atas meninggalnya almarhum / almarhumah (Nama)."], [1,"Our Deepest Condolences for the lost of your beloved Father/ Mother/ Husband/ Wife/ Children."], [2,"Our Deepest Sympathy for the lost of your beloved Father/ Mother/ Husband/ Wife/ Children."], [3,"Innalillahi wa innailaihi rojiun, Turut berduka cita atas meninggalnya (nama)."] 6574 6575 ]; 6576 $('#show_note_papan3').click(function(event){ 6577 event.preventDefault(); 6578 var idx_papan3=parseInt($('#note_id_papan3').val()); 6579 if(isNaN(idx_papan3)){ 6580 idx_papan3=0; 6581 }else{ 6582 idx_papan3++; 6583 idx_papan3=idx_papan3%notes_papan3.length; 6584 } 6585 var note_papan3=notes_papan3[idx_papan3][1]; 6586 $('#note_id_papan3').val(idx_papan3);
6587 $('#kartu-ucapan-papan, #properties-kartu-pesan, #properties-kartu-ucapan').val(note_papan3); 6588 $('#msgDelivery').val(note_papan3); 6589 var text_length_papan3=$('#kartu-ucapan-papan').val().length; 6590 var idx_2_papan3=parseInt($('#note_btn_id_papan3').val()); 6591 if(isNaN(idx_2_papan3)){ 6592 idx_2_papan3=0; 6593 }else{ 6594 idx_2_papan3++; 6595 //idx_2_papan1=idx_2_papan1%note_btn_text_papan1.length; 6596 } 6597 $('#note_btn_id_papan3').val(idx_2_papan3); 6598 //var note_btn=note_btn_text[idx_2][1]; 6599 //$('#note_btn').text(note_btn); 6600 $(this).parents(".sectionPurchase").find(".next-purchase-button").attr("disabled", false) 6601 }); 6602 6603 var text_max_papan4=150; 6604 var msg_text_papan4=""; 6605 $('#kartu-ucapan-ucapan').keyup(function(){ 6606 var text_length_papan4=$('#kartu-ucapan-ucapan').val().length; 6607 var msg_text_papan4=$('#kartu-ucapan-ucapan').val(); 6608 }); 6609 6610 $('#show_note_papan4').click(function(event){ 6611 var notes_papan4 = [ 6612 [0,"Hereâs to youâsteadier, stronger and better every day."], 6613 [1,"Warmest wishes for a speedy recovery!"], 6614 [2,"Dengan ucapan terhangat, semoga lekas membaik dan semakin pulih setiap harinya ya."], 6615 [3,"Semoga lekas sembuh untuk kembali beraktivitas dan berkarya."] 6616 ]; 6617 event.preventDefault(); 6618 var idx_papan4=parseInt($('#note_id_papan4').val()); 6619 console.log(idx_papan4, 'idx_papan4') 6620 if(isNaN(idx_papan4)){ 6621 idx_papan4=0; 6622 }else{ 6623 idx_papan4++; 6624 idx_papan4=idx_papan4%notes_papan4.length; 6625 } 6626 var note_papan4=notes_papan4[idx_papan4][1]; 6627 $('#note_id_papan4').val(idx_papan4); 6628 $('#kartu-ucapan-papan, #properties-kartu-ucapan, #properties-kartu-pesan').val(note_papan4); 6629 console.log(note_papan4, 'note_papan4') 6630 var text_length_papan4=$('#kartu-ucapan-papan').val().length; 6631 var idx_2_papan4=parseInt($('#note_btn_id_papan4').val()); 6632 if(isNaN(idx_2_papan4)){ 6633 idx_2_papan4=0; 6634 }else{ 6635 idx_2_papan4++; 6636 //idx_2_papan1=idx_2_papan1%note_btn_text_papan1.length; 6637 } 6638 $('#note_btn_id_papan4').val(idx_2_papan4); 6639 6640 $(this).parents(".sectionPurchase").find(".next-purchase-button").attr("disabled", false) 6641 }); 6642 6643 6644 6645 6646 6647 $(".variant-metafield").each(function(){ 6648 const t = $(this) 6649 const id = t.attr("id") 6650 const target = $(`[data-select=${id}]`) 6651 t.on('select2:selecting', function(e) { 6652 const data = e.params.args.data 6653 target.val(data.text) 6654 }); 6655 }) 6656 }) 6657</script>
6657 6658 6659<div id="popupCart"> 6660 <div class="container"> 6661 <div class="wrapperPopupCart"> 6662 <div class="headerPopupCart"> 6663 <div class="d-flex pl-5 pr-5 p-4"> 6664 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" viewBox="0 0 16 12" fill="none"> 6665 <path d="M5.55008 11.3076L0.580078 6.33761L1.29408 5.62461L5.55008 9.88061L14.7061 0.724609L15.4191 1.43861L5.55008 11.3076Z" fill="black"/> 6666 </svg> 6667 <span>item added to your cart</span> 6668 </div> 6669 <a class="close-purchase-popup"> 6670 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none"> 6671 <path d="M1.53287 17.4107L0.588867 16.4667L8.05553 9.00002L0.588867 1.53336L1.53287 0.589355L8.99953 8.05602L16.4662 0.589355L17.4102 1.53336L9.94353 9.00002L17.4102 16.4667L16.4662 17.4107L8.99953 9.94402L1.53287 17.4107Z" fill="black"/> 6672 </svg> 6673</a> 6674 6675 </div> 6676 <div class="contentPopupCart"> 6677 <div class="pl-5 pr-5 p-4"> 6678 <div class="itemContent row m-0 justify-content-between"> 6679 <div class="col-2 align-self-center"> 6680 6681 <img 6682 class="d-block" 6683 width="80" 6684 src="https://outerbloom.com/cdn/shop/files/CNY-Ruby-Mulan-Bag_80x.jpg?v=1766041636" 6685 > 6686 </div> 6687 <div class="col-10 align-self-center"> 6688 <div class="row pl-3"> 6689 <div class="col-12 col-lg-7"> 6690 <span class="titleCartPopup text-uppercase">ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap</span> 6691 <div class="cart-popup-quantity mt-2"> 6692 <div class="quantity-selector" data-popup-item="true"> 6693 <button type="button" class="qty-minus" data-action="minus"> 6694 â 6695 </button> 6696 <input 6697 type="text" 6698 class="qty-input" 6699 value="1" 6700 min="1" 6701 readonly 6702 > 6703 <button type="button" class="qty-plus" data-action="plus"> 6704 + 6705 </button> 6706 </div> 6707 </div> 6708 </div> 6709 <div class="d-flex justify-content-end col-12 col-lg-5"> 6710 <span class="deleteCartPopup hide">Delete</span> 6711 <span class="lineCartPrice align-self-center">Rp 1.349.417</span> 6712 </div> 6713 </div> 6714 </div> 6715 </div> 6716 <div class="itemProperties"> 6717 6718 <div class="propDeliver"> 6719 <h4>delivery option detail</h4> 6720 <p> 6721 <span>delivery city</span> 6722 <span class="propDeliveryCity">jakarta</span> 6723 </p> 6724 <p> 6725 <span>delivery date</span> 6726 <span class="propDeliveryDate">24/03/2025</span> 6727 </p> 6728 <p> 6729 <span>delivery time</span> 6730 <span class="propDeliveryTime">Afternoon | 13:00 - 18:00</span> 6731 </p> 6732 </div> 6733 <div class="propAddress"> 6734 <h4>delivery option detail</h4> 6735 <p> 6736 <span>RECIPIENT NAME</span> 6737 <span class="propDeliveryName">jane doe</span> 6738 </p> 6739 <p> 6740 <span>delivery address</span> 6741 <span class="propDeliveryAddress" 6742 >Jl. Gatot Subroto No. 25, RT.2/RW.4, Kuningan Barat, Kecamatan Mampang Prapatan, Kota Jakarta 6743 Selatan, Daerah Khusus Ibukota Jakarta 12710, Indonesia</span 6744 > 6745 </p> 6746 <p> 6747 <span>recipient phone number</span> 6748 <span class="propDeliveryPhone">(+62) 812-3456-7890</span> 6749 </p> 6750 <p> 6751 <span>PROVINCE</span>
6752 <span class="propDeliveryProv">Jakarta</span> 6753 </p> 6754 <p> 6755 <span>postal code</span> 6756 <span class="propDeliveryZip">12710</span> 6757 </p> 6758 6759 6760 </div> 6761 6762 </div> 6763 <div class="itemAddonCart"> 6764 <div class="toggleAddonCart d-flex justify-content-between"> 6765 <h4>add-ons (0)</h4> 6766 <svg xmlns="http://www.w3.org/2000/svg" width="5" height="9" viewBox="0 0 5 9" fill="none"> 6767 <path d="M1.0128 0.84668L4.78613 4.62001L1.0128 8.39335L0.546133 7.92001L3.84613 4.62001L0.546133 1.32001L1.0128 0.84668Z" fill="black"/> 6768 </svg> 6769 </div> 6770 <div class="wrapperItemAddonCart"></div> 6771 </div> 6772 6773 </div> 6774 </div> 6775 <div class="footerPopupCart"> 6776 <div class="row m-0 pl-5 pr-5 p-4"> 6777 <a class="btn btnViewCart w-100 text-uppercase text-center" href="/cart">View Cart</a> 6778 <a class="btn btnViewCheckout w-100 text-uppercase text-center" href="/checkout"><span>Checkout</span></a> 6779 <a class="btnContinueShopping w-100 text-center" href="/">Continue shopping</a> 6780 </div> 6781 </div> 6782 </div> 6783 </div> 6784</div> 6785 6786<style> 6787 .cart-popup-quantity .quantity-selector { 6788 display: inline-flex; 6789 align-items: center; 6790 border: 1px solid #D1D1D1; 6791 border-radius: 2px; 6792 overflow: hidden; 6793 background: white; 6794 max-width: 140px; 6795 } 6796 6797 .cart-popup-quantity .quantity-selector button { 6798 width: 32px; 6799 height: 32px; 6800 border: none; 6801 background: white; 6802 cursor: pointer; 6803 font-size: 16px; 6804 font-weight: 400; 6805 color: #424242; 6806 transition: all 0.2s ease; 6807 padding: 0; 6808 display: flex; 6809 align-items: center; 6810 justify-content: center; 6811 line-height: 1; 6812 } 6813 6814 .cart-popup-quantity .quantity-selector button:hover { 6815 background: #F5F5F5; 6816 color: #212121; 6817 } 6818 6819 .cart-popup-quantity .quantity-selector button:active { 6820 background: #E0E0E0; 6821 } 6822 6823 .cart-popup-quantity .quantity-selector button:disabled { 6824 opacity: 0.4; 6825 cursor: not-allowed; 6826 background: white; 6827 } 6828 6829 .cart-popup-quantity .quantity-selector input { 6830 width: 50px; 6831 height: 32px; 6832 border: none; 6833 border-left: 1px solid #D1D1D1; 6834 border-right: 1px solid #D1D1D1; 6835 text-align: center; 6836 font-size: 13px; 6837 font-weight: 500; 6838 color: #212121; 6839 -moz-appearance: textfield; 6840 background: white; 6841 padding: 0; 6842 } 6843 6844 .cart-popup-quantity .quantity-selector input::-webkit-outer-spin-button, 6845 .cart-popup-quantity .quantity-selector input::-webkit-inner-spin-button { 6846 -webkit-appearance: none; 6847 margin: 0; 6848 } 6849 6850 .cart-popup-quantity .quantity-selector input:focus { 6851 outline: none; 6852 } 6853</style> 6854
6855<script> 6856 // Function to update popup cart quantity 6857 window.updatePopupCartQuantity = function() { 6858 let itemKey = ''; 6859 let currentProductId = 45873023910103; 6860 6861 // Get current cart and update popup display 6862 fetch(window.Shopify.routes.root + 'cart.js') 6863 .then(response => response.json()) 6864 .then(cart => { 6865 if(cart.items && cart.items.length > 0) { 6866 // Find the item that matches current product variant 6867 const matchingItem = cart.items.find(item => 6868 item.product_id === 7881418965207 || 6869 item.variant_id === currentProductId 6870 ); 6871 6872 if(matchingItem) { 6873 itemKey = matchingItem.key; 6874 6875 // Display current total quantity in popup (including what was already in cart) 6876 const totalQty = matchingItem.quantity; 6877 $("#popupCart .qty-input").val(totalQty); 6878 6879 // Store itemKey for later use 6880 $("#popupCart .quantity-selector").attr("data-item-key", itemKey); 6881 6882 // Update the price display to reflect total quantity 6883 const basePrice = 1.349.41700; 6884 const newPrice = basePrice * totalQty; 6885 const formattedPrice = new Intl.NumberFormat('id-ID', { 6886 style: 'currency', 6887 currency: 'IDR', 6888 minimumFractionDigits: 0 6889 }).format(newPrice / 100); 6890 $(".lineCartPrice").text(formattedPrice); 6891 } 6892 } 6893 }) 6894 .catch(error => { 6895 console.error('Error fetching cart:', error); 6896 }); 6897 }; 6898 6899 $(document).ready(function(){ 6900 // Initialize on page load 6901 updatePopupCartQuantity(); 6902 6903 // Quantity Selector Handler for Cart Popup 6904 $("#popupCart .quantity-selector button").on("click", function(e){ 6905 e.preventDefault(); 6906 const $button = $(this); 6907 const $selector = $button.closest(".quantity-selector"); 6908 const $input = $selector.find(".qty-input"); 6909 const action = $button.data("action"); 6910 const itemKey = $selector.attr("data-item-key"); 6911 let currentQty = parseInt($input.val()); 6912 6913 if(action === "minus" && currentQty > 1) { 6914 currentQty--; 6915 } else if(action === "plus") { 6916 currentQty++; 6917 } 6918 6919 // Update the input value 6920 $input.val(currentQty); 6921 6922 // Update the line price display 6923 const basePrice = 1.349.41700; 6924 const newPrice = basePrice * currentQty; 6925 const formattedPrice = new Intl.NumberFormat('id-ID', { 6926 style: 'currency', 6927 currency: 'IDR', 6928 minimumFractionDigits: 0 6929 }).format(newPrice / 100); 6930 $(".lineCartPrice").text(formattedPrice); 6931 6932 // Disable buttons while updating 6933 $selector.find("button").prop("disabled", true); 6934 6935 // Update cart directly with the new total quantity 6936 fetch(window.Shopify.routes.root + 'cart/change.js', { 6937 method: 'POST', 6938 headers: { 6939 'Content-Type': 'application/json', 6940 }, 6941 body: JSON.stringify({ 6942 id: itemKey, 6943 quantity: currentQty 6944 }) 6945 }) 6946 .then(response => response.json()) 6947 .then(data => { 6948 // Re-enable buttons 6949 $selector.find("button").prop("disabled", false); 6950 6951 // Update CartJS if available 6952 if(typeof CartJS !== 'undefined') { 6953 CartJS.init(data); 6954 } 6955 6956 console.log('Cart updated successfully', data); 6957 }) 6958 .catch(error => { 6959 console.error('Error updating cart:', error); 6960 $selector.find("button").prop("disabled", false); 6961 }); 6962 }); 6963 }); 6964</script>
6964 6965 6966 6967<style> 6968 .field-error .variant-metafield { 6969 border-color: #e74c3c !important; 6970 box-shadow: 0 0 0 0.2rem rgba(231, 76, 60, 0.25) !important; 6971 } 6972 6973 .field-error .form-control { 6974 border-color: #e74c3c !important; 6975 box-shadow: 0 0 0 0.2rem rgba(231, 76, 60, 0.25) !important; 6976 } 6977 6978 .field-error select { 6979 border-color: #e74c3c !important; 6980 box-shadow: 0 0 0 0.2rem rgba(231, 76, 60, 0.25) !important; 6981 } 6982 6983 .error-message { 6984 display: block; 6985 width: 100%; 6986 margin-top: 0.25rem; 6987 font-size: 0.875em; 6988 color: #e74c3c; 6989 } 6990 6991 #btnPurchase:disabled { 6992 opacity: 0.7; 6993 pointer-events: none; 6994 } 6995 #wishButton { 6996 font-size: 14px; 6997 font-weight: 400; 6998 text-transform: uppercase; 6999 letter-spacing: 0.5px; 7000 transition: opacity 0.2s ease; 7001 } 7002 7003 #wishButton:hover { 7004 opacity: 0.8; 7005 } 7006 7007 #wishButton:disabled { 7008 opacity: 0.5; 7009 pointer-events: none; 7010 } 7011 7012 .wishlist-icon-wrapper svg { 7013 flex-shrink: 0; 7014 width: 16px; 7015 } 7016 7017 @media screen and (max-width: 768px) { 7018 .ios .field-error .variant-metafield { 7019 border-color: #e74c3c !important; 7020 box-shadow: 0 0 0 3px rgba(231, 76, 60, 0.1) !important; 7021 } 7022 } 7023 7024 .delivery-method-section h4 { 7025 font-size: 16px; 7026 font-weight: 500; 7027 margin-bottom: 12px; 7028 color: #212121; 7029 } 7030 7031 .delivery-method-buttons { 7032 display: flex; 7033 gap: 8px; 7034 } 7035 7036 .delivery-method-btn { 7037 flex: 1; 7038 padding: 12px 24px; 7039 border: 1px solid #212121; 7040 font-weight: 400; 7041 text-transform: uppercase; 7042 transition: all 0.3s ease; 7043 cursor: pointer; 7044 font-size: 14px; 7045 letter-spacing: 0.5px; 7046 } 7047 7048 .delivery-method-btn:not(.active) { 7049 background-color: #ffffff; 7050 color: #212121; 7051 font-weight: 400; 7052 } 7053 7054 .delivery-method-btn:not(.active):hover { 7055 opacity: 0.8; 7056 } 7057 7058 .delivery-method-btn.active { 7059 background-color: #EEEEEE; 7060 color: #212121; 7061 font-weight: 700; 7062 } 7063 7064 @media screen and (max-width: 576px) { 7065 .delivery-method-buttons { 7066 flex-direction: column; 7067 } 7068 7069 .delivery-method-btn { 7070 width: 100%; 7071 } 7072 } 7073</style> 7074
7075<script> 7076 const shareButton = document.getElementById('shareButton'); 7077 7078 shareButton.addEventListener('click', () => { 7079 if (navigator.share) { 7080 navigator.share({ 7081 title: "ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap", 7082 url: "/products/outerbloom-mulan-bag-hampers", 7083 text: 'Check out this page!' 7084 }) 7085 .then(() => console.log('Successful share')) 7086 .catch((error) => console.log('Error sharing', error)); 7087 } else { 7088 alert('Web Share API is not supported in this browser.'); 7089 } 7090 }); 7091 7092 // Inventory validation function 7093 function checkInventoryStatus() { 7094 const productSelect = document.getElementById('productSelect'); 7095 const purchaseButton = document.querySelector('#personalizeBtn button'); 7096 7097 if (!productSelect || !purchaseButton) return; 7098 7099 const selectedVariantId = productSelect.value; 7100 7101 // Get variant data from Shopify 7102 fetch(`/products/outerbloom-mulan-bag-hampers.js`) 7103 .then(response => response.json()) 7104 .then(product => { 7105 const selectedVariant = product.variants.find(variant => variant.id == selectedVariantId); 7106 7107 if (selectedVariant) { 7108 const isOutOfStock = selectedVariant.inventory_quantity <= 0 && 7109 selectedVariant.inventory_management === 'shopify' && 7110 selectedVariant.inventory_policy !== 'continue'; 7111 7112 if (isOutOfStock) { 7113 purchaseButton.disabled = true; 7114 purchaseButton.textContent = 'Out of Stock'; 7115 purchaseButton.setAttribute('data-out-of-stock', 'true'); 7116 purchaseButton.style.backgroundColor = '#cccccc'; 7117 purchaseButton.style.cursor = 'not-allowed'; 7118 } else { 7119 // Check if button was disabled due to other conditions 7120 7121 7122 7123 7124 7125 7126 7127 7128 const isOtherDisabled = false || false || false; 7129 7130 if (!isOtherDisabled) { 7131 purchaseButton.disabled = false; 7132 purchaseButton.textContent = 'MAKE IT PERSONAL â'; 7133 purchaseButton.removeAttribute('data-out-of-stock'); 7134 purchaseButton.style.backgroundColor = ''; 7135 purchaseButton.style.cursor = ''; 7136 } 7137 } 7138 } 7139 }) 7140 .catch(error => { 7141 console.error('Error checking inventory:', error); 7142 }); 7143 } 7144 7145 // Validate variant metafields function - make it globally accessible 7146 window.validateVariantMetafields = function(showErrors = false) { 7147 const purchaseButton = document.querySelector('#personalizeBtn button'); 7148 const variantMetafields = document.querySelectorAll('.variant-metafield[required]'); 7149 7150 if (!purchaseButton) return true; 7151 7152 let allFieldsValid = true; 7153 let hasEmptyFields = false; 7154 let firstErrorField = null; 7155 7156 // Check all required variant metafields 7157 variantMetafields.forEach(function(field) { 7158 const fieldValue = field.value ? field.value.trim() : ''; 7159 const fieldContainer = field.closest('.form-group-variant'); 7160 7161 // Remove existing error styling 7162 if (fieldContainer) { 7163 fieldContainer.classList.remove('field-error'); 7164 const existingError = fieldContainer.querySelector('.error-message'); 7165 if (existingError) { 7166 existingError.remove(); 7167 } 7168 } 7169 7170 if (!fieldValue || fieldValue === '' || fieldValue === 'Choose ' + field.getAttribute('data-properties')) { 7171 allFieldsValid = false; 7172 hasEmptyFields = true; 7173 7174 // Store the first error field for scrolling - ensure it's a valid DOM element 7175 if (!firstErrorField && field && field.nodeType === 1) { 7176 firstErrorField = field; 7177 console.log('First error field stored:', field, 'Type:', field.tagName, 'Value:', field.value); 7178 } 7179 7180 // Only add error styling if showErrors is true (when button is clicked) 7181 if (showErrors && fieldContainer) { 7182 fieldContainer.classList.add('field-error'); 7183 7184 // Add error message 7185 const errorMessage = document.createElement('div'); 7186 errorMessage.className = 'error-message';
7187 errorMessage.style.color = '#e74c3c'; 7188 errorMessage.style.fontSize = '12px'; 7189 errorMessage.style.marginTop = '4px'; 7190 errorMessage.textContent = 'This field is required'; 7191 fieldContainer.appendChild(errorMessage); 7192 } 7193 } 7194 }); 7195 7196 // Auto scroll to first error field if showing errors 7197 if (showErrors && !allFieldsValid) { 7198 console.log('Scrolling to purchaseProduct section due to validation errors'); 7199 setTimeout(function() { 7200 // Primary method: scroll to purchaseProduct container 7201 try { 7202 const purchaseProductSection = document.getElementById('purchaseProduct'); 7203 if (purchaseProductSection && typeof purchaseProductSection.scrollIntoView === 'function') { 7204 console.log('Scrolling to purchaseProduct section'); 7205 purchaseProductSection.scrollIntoView({ 7206 behavior: 'smooth', 7207 block: 'start', 7208 inline: 'nearest' 7209 }); 7210 7211 // Focus the first error field after scroll 7212 setTimeout(function() { 7213 if (firstErrorField) { 7214 try { 7215 console.log('Focusing first error field:', firstErrorField.tagName, firstErrorField.id || firstErrorField.className); 7216 if (typeof firstErrorField.focus === 'function') { 7217 firstErrorField.focus(); 7218 7219 // For select elements, try to trigger the dropdown 7220 if (firstErrorField.tagName && firstErrorField.tagName.toLowerCase() === 'select') { 7221 setTimeout(function() { 7222 if (typeof firstErrorField.click === 'function') { 7223 firstErrorField.click(); 7224 } 7225 }, 100); 7226 } 7227 } 7228 } catch (focusError) { 7229 console.warn('Error during field focus:', focusError); 7230 } 7231 } 7232 }, 300); // Wait for scroll to complete 7233 } else { 7234 // Fallback: try alternative selectors 7235 const fallbackSelectors = ['#purchaseProduct', '.product-meta', 'main', '.form-group-variant']; 7236 let scrolled = false; 7237 7238 for (let selector of fallbackSelectors) { 7239 if (!scrolled) { 7240 const element = document.querySelector(selector); 7241 if (element && typeof element.scrollIntoView === 'function') { 7242 console.log('Fallback scroll to:', selector); 7243 element.scrollIntoView({ 7244 behavior: 'smooth', 7245 block: 'start' 7246 }); 7247 scrolled = true; 7248 break; 7249 } 7250 } 7251 } 7252 } 7253 } catch (error) { 7254 console.warn('Auto scroll failed, trying alternative method:', error); 7255 // Ultimate fallback: manual scroll to top of page 7256 try { 7257 window.scrollTo({ 7258 top: 0, 7259 behavior: 'smooth' 7260 }); 7261 } catch (finalError) { 7262 console.warn('All scroll methods failed:', finalError); 7263 } 7264 } 7265 }, 150); // Delay to ensure DOM is stable 7266 } 7267 7268 // Check inventory status as well 7269 const isOutOfStock = purchaseButton.getAttribute('data-out-of-stock') === 'true'; 7270 7271 // Check other disabled conditions 7272 7273 7274 7275 7276 7277 7278 7279 7280 const isOtherDisabled = false || false || false; 7281 7282 // Update button state only for inventory and other conditions, not for variant metafields 7283 if (isOutOfStock || isOtherDisabled) { 7284 purchaseButton.disabled = true; 7285 7286 if (isOutOfStock) { 7287 purchaseButton.textContent = 'Out of Stock'; 7288 purchaseButton.style.backgroundColor = '#cccccc'; 7289 } 7290 7291 purchaseButton.style.cursor = 'not-allowed'; 7292 } else { 7293 purchaseButton.disabled = false; 7294 purchaseButton.textContent = 'MAKE IT PERSONAL â'; 7295 purchaseButton.style.backgroundColor = ''; 7296 purchaseButton.style.color = ''; 7297 purchaseButton.style.cursor = ''; 7298 } 7299 7300 return allFieldsValid; 7301 } 7302 7303 // Check inventory on page load and setup event listeners 7304 document.addEventListener('DOMContentLoaded', function() { 7305 checkInventoryStatus(); 7306 window.validateVariantMetafields(false); // Don't show errors on page load 7307 7308 // Shipping Method Toggle Functionality 7309 const shippingMethodButtons = document.querySelectorAll('.delivery-method-btn'); 7310 const selectedMethodInput = document.getElementById('selectedShippingMethod'); 7311 7312 shippingMethodButtons.forEach(function(button) { 7313 button.addEventListener('click', function() { 7314 const isCurrentlyActive = this.classList.contains('active'); 7315 const method = this.getAttribute('data-method'); 7316 7317 // Remove active class from all buttons
7318 shippingMethodButtons.forEach(function(btn) { 7319 btn.classList.remove('active'); 7320 btn.style.backgroundColor = '#ffffff'; 7321 btn.style.color = '#212121'; 7322 btn.style.fontWeight = '400'; 7323 }); 7324 7325 // If button was not active, make it active (select) 7326 if (!isCurrentlyActive) { 7327 this.classList.add('active'); 7328 this.style.backgroundColor = '#EEEEEE'; 7329 this.style.color = '#212121'; 7330 this.style.fontWeight = '700'; 7331 7332 // Update hidden input value 7333 if (selectedMethodInput) { 7334 selectedMethodInput.value = method; 7335 } 7336 7337 // Handle pickup-specific functionality 7338 if (method === 'Pickup') { 7339 handlePickupMode(); 7340 } else { 7341 handleDeliveryMode(); 7342 } 7343 7344 console.log('Delivery method selected:', method); 7345 } else { 7346 // Unselect - clear hidden input value and revert to delivery mode 7347 if (selectedMethodInput) { 7348 selectedMethodInput.value = ''; 7349 } 7350 handleDeliveryMode(); 7351 console.log('Delivery method unselected'); 7352 } 7353 }); 7354 }); 7355 7356 // Function to handle pickup mode 7357 function handlePickupMode() { 7358 // 1. Auto-select Jakarta and disable city dropdown 7359 const citySelect = document.getElementById('cities'); 7360 if (citySelect) { 7361 // Set value to Jakarta 7362 citySelect.value = 'Jakarta'; 7363 citySelect.disabled = true; 7364 citySelect.style.backgroundColor = '#f5f5f5'; 7365 citySelect.style.cursor = 'not-allowed'; 7366 citySelect.style.opacity = '0.6'; 7367 7368 // Trigger change event to update any dependent fields 7369 const event = new Event('change', { bubbles: true }); 7370 citySelect.dispatchEvent(event); 7371 } 7372 7373 // 2. Show pickup location info (in delivery method section) 7374 const pickupLocationInfo = document.getElementById('pickupLocationInfo'); 7375 if (pickupLocationInfo) { 7376 pickupLocationInfo.style.display = 'block'; 7377 } 7378 7379 // 2b. Show pickup location details (in address section) 7380 const pickupLocationDetails = document.getElementById('pickupLocationDetails'); 7381 if (pickupLocationDetails) { 7382 pickupLocationDetails.style.display = 'block'; 7383 } 7384 7385 // 3. Hide address form and remove required attributes 7386 const formAddressPurchase = document.querySelector('.formAddressPurchase'); 7387 if (formAddressPurchase) { 7388 formAddressPurchase.style.display = 'none'; 7389 7390 // Remove required from all inputs in the form 7391 const requiredInputs = formAddressPurchase.querySelectorAll('[required]'); 7392 requiredInputs.forEach(function(input) { 7393 input.removeAttribute('required'); 7394 input.setAttribute('data-was-required', 'true'); // Mark for restoration 7395 }); 7396 } 7397 7398 // 4. Trigger date restrictions based on product tags 7399 window.applyPickupDateRestrictions = true; 7400 7401 // Apply restrictions to existing date buttons immediately 7402 const deliveryDateElement = document.getElementById('deliveryDate'); 7403 if (deliveryDateElement) { 7404 console.log('Applying pickup date restrictions immediately to existing buttons'); 7405 applyPickupDateRestrictionsLocal(deliveryDateElement); 7406 } 7407 7408 // 5. Hide full calendar (except for pickup-itcinhouse) 7409 const isPickupInhouse = false; 7410 const deliveryDateFull = document.getElementById('deliveryDateFull'); 7411 if (deliveryDateFull && !isPickupInhouse) { 7412 deliveryDateFull.style.display = 'none'; 7413 } 7414 7415 // 5b. Hide row-delivery-time (except for pickup-itcinhouse) 7416 const rowDeliveryTime = document.getElementById('row-delivery-time'); 7417 if (rowDeliveryTime) { 7418 rowDeliveryTime.style.display = 'none'; 7419 7420 // 5c. Make delivery time not required (except for pickup-itcinhouse) 7421 if (propDeliveryTime) { 7422 propDeliveryTime.removeAttribute('required'); 7423 propDeliveryTime.value = '-'; 7424 } 7425 const propertiesDeliveryTime = document.getElementById('properties-delivery-time'); 7426 if (propertiesDeliveryTime) { 7427 propertiesDeliveryTime.removeAttribute('required'); 7428 propertiesDeliveryTime.value = '-'; 7429 } 7430 } 7431 7432 // 6. Update address for pickup 7433 if (typeof window.updateDeliveryAddress === 'function') { 7434 window.updateDeliveryAddress(); 7435 } 7436 } 7437 7438 // Local function to apply pickup date restrictions 7439 function applyPickupDateRestrictionsLocal(deliveryDateElement) { 7440 if (!deliveryDateElement) return; 7441 7442 // Get current time in Jakarta timezone
7443 const now = new Date(new Date().toLocaleString("en-US", {timeZone: "Asia/Jakarta"})); 7444 const currentHour = now.getHours(); 7445 const currentMinute = now.getMinutes(); 7446 const currentTime = currentHour + (currentMinute / 60); 7447 const currentDate = now.getDate(); 7448 7449 const isAfter3PM = currentTime >= 15.0; 7450 7451 // Check product tags 7452 const isPickupInhouse = false; 7453 const isPickupVendor = false; 7454 7455 console.log('Applying pickup date restrictions:', { 7456 isPickupInhouse, 7457 isPickupVendor, 7458 currentDate, 7459 currentTime: currentTime.toFixed(2), 7460 isAfter3PM 7461 }); 7462 7463 const dateButtons = deliveryDateElement.querySelectorAll('button.date-single'); 7464 console.log('Found date buttons:', dateButtons.length); 7465 7466 dateButtons.forEach((button, index) => { 7467 const buttonDate = parseInt(button.dataset.date, 10); 7468 console.log(`Checking button ${index}: date=${buttonDate}, currentDate=${currentDate}`); 7469 7470 if (isPickupInhouse) { 7471 // Check if this button is today 7472 if (buttonDate === currentDate) { 7473 button.disabled = true; 7474 button.classList.add('stop'); 7475 button.title = 'Pickup not available for today'; 7476 console.log(`â Disabled button ${index} (date ${buttonDate} = today) for pickup-itcinhouse`); 7477 } 7478 // Check if this button is tomorrow AND it's after 3 PM 7479 else if (buttonDate === currentDate + 1 && isAfter3PM) { 7480 button.disabled = true; 7481 button.classList.add('stop'); 7482 button.title = 'Pickup not available (after 3 PM cutoff)'; 7483 console.log(`â Disabled button ${index} (date ${buttonDate} = tomorrow) for pickup-itcinhouse (after 3 PM)`); 7484 } 7485 } else if (isPickupVendor) { 7486 // For pickup-itcvendor: Allow ONLY date 14. 7487 // Disable 14 if today is 13th > 3 PM or today is > 13th. 7488 7489 if (buttonDate !== 14) { 7490 button.disabled = true; 7491 button.classList.add('stop'); 7492 button.title = 'Pickup only available on the 14th'; 7493 // Do NOT hide, just disable. 7494 console.log(`â Disabled button ${index} (date ${buttonDate}) for pickup-itcvendor (not 14th)`); 7495 } else { 7496 // Date is 14. Check cutoff. 7497 if (currentDate > 13 || (currentDate === 13 && isAfter3PM)) { 7498 button.disabled = true; 7499 button.classList.add('stop'); 7500 button.title = 'Pickup closed for 14th (Cutoff: 13th 15:00)'; 7501 console.log(`â Disabled button ${index} (date ${buttonDate}) for pickup-itcvendor (Cutoff missed)`); 7502 } 7503 } 7504 } 7505 }); 7506 } 7507 7508 // Function to handle delivery mode (normal mode) 7509 function handleDeliveryMode() { 7510 // 1. Re-enable city dropdown 7511 const citySelect = document.getElementById('cities'); 7512 if (citySelect) { 7513 citySelect.disabled = false; 7514 citySelect.style.backgroundColor = '#fff'; 7515 citySelect.style.cursor = 'pointer'; 7516 citySelect.style.opacity = '1'; 7517 } 7518 7519 // 2. Hide pickup location info (in delivery method section) 7520 const pickupLocationInfo = document.getElementById('pickupLocationInfo'); 7521 if (pickupLocationInfo) { 7522 pickupLocationInfo.style.display = 'none'; 7523 } 7524 7525 // 2b. Hide pickup location details (in address section) 7526 const pickupLocationDetails = document.getElementById('pickupLocationDetails'); 7527 if (pickupLocationDetails) { 7528 pickupLocationDetails.style.display = 'none'; 7529 } 7530 7531 // 3. Show address form and restore required attributes 7532 const formAddressPurchase = document.querySelector('.formAddressPurchase'); 7533 if (formAddressPurchase) { 7534 formAddressPurchase.style.display = 'block'; 7535 7536 // Restore required attributes 7537 const wasRequiredInputs = formAddressPurchase.querySelectorAll('[data-was-required="true"]');
7538 wasRequiredInputs.forEach(function(input) { 7539 input.setAttribute('required', 'required'); 7540 input.removeAttribute('data-was-required'); 7541 }); 7542 } 7543 7544 // 4. Remove date restrictions 7545 window.applyPickupDateRestrictions = false; 7546 7547 // Trigger date re-render to remove restrictions 7548 if (citySelect && citySelect.value) { 7549 setTimeout(function() { 7550 const changeEvent = new Event('change', { bubbles: true }); 7551 citySelect.dispatchEvent(changeEvent); 7552 }, 100); 7553 } 7554 7555 // 5. Show full calendar 7556 const deliveryDateFull = document.getElementById('deliveryDateFull'); 7557 if (deliveryDateFull) { 7558 deliveryDateFull.style.display = 'block'; 7559 } 7560 7561 // 5b. Show row-delivery-time 7562 const rowDeliveryTime = document.getElementById('row-delivery-time'); 7563 if (rowDeliveryTime) { 7564 rowDeliveryTime.style.display = 'block'; 7565 } 7566 7567 // 5c. Make delivery time required again 7568 const propDeliveryTime = document.getElementById('propDeliveryTime'); 7569 if (propDeliveryTime) { 7570 propDeliveryTime.setAttribute('required', 'required'); 7571 } 7572 const propertiesDeliveryTime = document.getElementById('properties-delivery-time'); 7573 if (propertiesDeliveryTime) { 7574 propertiesDeliveryTime.setAttribute('required', 'required'); 7575 } 7576 7577 // 6. Update address for delivery 7578 if (typeof window.updateDeliveryAddress === 'function') { 7579 window.updateDeliveryAddress(); 7580 } 7581 } 7582 7583 // Listen for variant changes 7584 const productSelect = document.getElementById('productSelect'); 7585 if (productSelect) { 7586 productSelect.addEventListener('change', function() { 7587 checkInventoryStatus(); 7588 setTimeout(function() { 7589 window.validateVariantMetafields(false); // Don't show errors on variant change 7590 }, 100); 7591 }); 7592 } 7593 7594 // Listen for changes on variant metafield inputs - only to clear existing errors 7595 const variantMetafields = document.querySelectorAll('.variant-metafield'); 7596 variantMetafields.forEach(function(field) { 7597 field.addEventListener('input', function() { 7598 clearFieldError(this); 7599 }); 7600 field.addEventListener('change', function() { 7601 clearFieldError(this); 7602 }); 7603 field.addEventListener('blur', function() { 7604 clearFieldError(this); 7605 }); 7606 }); 7607 7608 // Listen for changes on select elements within variant metafields 7609 const variantSelects = document.querySelectorAll('.variant-metafield-select'); 7610 variantSelects.forEach(function(select) { 7611 select.addEventListener('change', function() { 7612 clearFieldError(this); 7613 }); 7614 }); 7615 }); 7616 7617 // Function to clear error styling from a specific field 7618 function clearFieldError(field) { 7619 const fieldContainer = field.closest('.form-group-variant'); 7620 if (fieldContainer) { 7621 fieldContainer.classList.remove('field-error'); 7622 const existingError = fieldContainer.querySelector('.error-message'); 7623 if (existingError) { 7624 existingError.remove(); 7625 } 7626 } 7627 } 7628 7629 // Prevent form submission if out of stock or required fields are empty 7630 document.addEventListener('click', function(e) { 7631 if (e.target.matches('button[data-out-of-stock="true"]')) { 7632 e.preventDefault(); 7633 e.stopPropagation(); 7634 alert('This product is currently out of stock and cannot be purchased.'); 7635 return false; 7636 } 7637 7638 // Check if this is the purchase button 7639 if (e.target.id === 'btnPurchase' || e.target.closest('#btnPurchase')) { 7640 const isValid = window.validateVariantMetafields(true); // Show errors when button is clicked 7641 7642 if (!isValid) { 7643 e.preventDefault(); 7644 e.stopPropagation(); 7645 7646 // The validateVariantMetafields function already handles scrolling and focusing 7647 // No need for additional scroll here as it's handled in the validation function 7648 7649 return false; 7650 } 7651 } 7652 }); 7653</script>
7653 7654 7655 7656 7657 <div class="product-description rte bg-card col-12 py-3 px-0 m-0" itemprop="description"> 7658 7659 7660 7661 7662 7663 <div class="short-desc-mobile d-block d-lg-none mb-3"> 7664 <div class="short-desc"> 7665 <ul> 7666<li> 7667<strong>ATAS4D</strong><br><strong></strong><strong></strong> 7668</li> 7669<li> 7670<strong>GAME TOGEL</strong><br> 7671</li> 7672<li><strong>TOGEL ONLINE</strong></li> 7673 7674 </div> 7675 <label class="more-mobile">Show More â</label> 7676 </div> 7677 7678 7679<div class="short-content short-spec position-relative open"> 7680 <h3 class="heading-toggle">Descriptions</h3> 7681 <div 7682 id="product-desc" 7683 class="content-toggle product-spec pb-3" 7684 style="display: block; height: 200px; overflow: hidden; transition: height 0.3s ease;" 7685 > 7686 <ul> 7687<li> 7688<strong>ATAS4D</strong><br><strong></strong><strong></strong> 7689</li> 7690<li> 7691<strong>GAME TOGEL</strong><br> 7692</li> 7693<li><strong>TOGEL ONLINE</strong></li> 7694</ul> 7695<p>ATAS4D adalah platform game togel toto macau 4D terbaik dengan fitur lengkap, akses cepat, pasaran terpercaya, dan peluang kemenangan menarik setiap hari.</p> 7696<p><img src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap"></p> 7697<table style="width: 100.091%;" width="100%"> 7698<tbody> 7699<tr> 7700<td style="width: 33.7327%;">SKU</td> 7701<td style="width: 65.9908%;">[C]ATAS4D<br>[C]OBIPCL1004-CNY2026<br> 7702</td> 7703</tr> 7704<tr> 7705<td style="width: 33.7327%;">Isi</td> 7706<td style="width: 65.9908%;"> 7707Link Login ATAS4D<br> 7708Situs Togel 4D Terpercaya<br> 7709Toto Togel<br> 7710Toto Macau<br> 7711Togel 4D<br> 7712Toto Togel Resmi<br> 7713Togel Macau<br> 7714Toto Macau 4D<br> 7715Game Togel Macau<br> 7716Toto Togel<br> 7717ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap 7718</td> 7719</td> 7720</tr> 7721</tbody> 7722</table> 7723 </div> 7724 <button id="readMoreBtn" class="read-more-toggle mt-2" style="background: none; border: none; padding: 0; cursor: pointer; color: #212121; text-decoration: underline; font-size: 14px;width: 100%;position: absolute;height: 70px;bottom: 0;background-color: rgba(255, 255, 255, 0.8); 7725 font-weight: 600;"> 7726 Read More 7727 </button> 7728</div> 7729 7730
7731<script> 7732 var liCountMobile; 7733 $(document).ready(function () { 7734 // Handle mobile short description - same logic as desktop 7735 $(".short-desc-mobile .short-desc ul").each(function() { 7736 liCountMobile = $(this).children("li").length; 7737 if (liCountMobile > 3) { 7738 $(this).closest(".short-desc-mobile").find(".more-mobile").addClass("showMe"); 7739 } 7740 }); 7741 7742 $(".more-mobile").click(function () { 7743 $("#product-desc").find("ul").show(); 7744 $('html, body').animate({ 7745 scrollTop: $("#product-desc").offset().top - 150 7746 }, 1000); 7747 $("#product-desc").css("height","auto"); 7748 7749 // Open the descriptions accordion 7750 var $descriptions = $("#product-desc").closest(".short-content"); 7751 if (!$descriptions.hasClass("open")) { 7752 $descriptions.addClass("open"); 7753 $("#product-desc").show(); 7754 } 7755 }); 7756 7757 // Handle Read More / Read Less toggle 7758 var isExpanded = false; 7759 var descElement = $("#product-desc"); 7760 var readMoreBtn = $("#readMoreBtn"); 7761 7762 readMoreBtn.click(function(e) { 7763 e.preventDefault(); 7764 isExpanded = !isExpanded; 7765 7766 if (isExpanded) { 7767 // Expand to full height 7768 descElement.css("height", "auto"); 7769 readMoreBtn.text("Read Less"); 7770 readMoreBtn.css({ 7771 "position": "relative", 7772 "height": "auto", 7773 "bottom": "auto", 7774 "background-color": "transparent" 7775 }); 7776 } else { 7777 // Collapse to 200px 7778 descElement.css("height", "200px"); 7779 readMoreBtn.text("Read More"); 7780 readMoreBtn.css({ 7781 "position": "absolute", 7782 "height": "70px", 7783 "bottom": "0", 7784 "background-color": "rgba(255, 255, 255, 0.8)" 7785 }); 7786 } 7787 }); 7788 }); 7789</script>
7789 7790 7791 </div> 7792 7793</div> 7794 7795 </div> 7796 </div> 7797 </div> 7798 </div> 7799 <div id="product-bottom"> 7800 7801 <div class="row"> 7802 <div class="col-12 product-fixed"> 7803 <div class="container"> 7804 <div class="row justify-content-between"> 7805 <div class="d-flex col-12 col-lg-7"> 7806 <div class="pfImage"> 7807 <img 7808 width="300" 7809 height="170" 7810 src="https://atas4d.biz/images/logo-atas4d.webp" 7811 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 7812 > 7813 </div> 7814 <div class="pfMeta"> 7815 <h4 class="pTitle">ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap</h4> 7816 <div class="pPrice"> 7817 <p> 7818 <span class="price">Rp 1.349.417</span><span class="priceCompare">Rp 8.000.008</span> 7819 </p> 7820 </div> 7821 </div> 7822 </div> 7823 <div class="col-12 col-lg-5 self-align-center row justify-content-between" style="align-self: center;"> 7824 <div class="pfBtn col-12 align-self-center"> 7825 <div id="personalizeBtn"> 7826 <button class="btn text-uppercase w-100 fw-400" > 7827 MAKE IT PERSONAL â 7828 </button> 7829 </div> 7830 </div> 7831 </div> 7832 </div> 7833 </div> 7834 </div> 7835 <div id="product-bottom-left" class="product-bottom-left col-lg-12"> 7836 <div class="container"> 7837 7838 <!-- HEADER --> 7839<div class="review-header"> 7840 <div class="rating-summary"> 7841 <div class="rating-score">4.9</div> 7842 <div class="stars">â â â â â </div> 7843 <p>Based on 103 Reviews</p> 7844 7845 <div class="progress-bar">5 â 7846 <div class="progress"><div class="progress-fill" style="width:92%"></div></div> (96) 7847 </div> 7848 <div class="progress-bar">4 â 7849 <div class="progress"><div class="progress-fill" style="width:6%"></div></div> (6) 7850 </div> 7851 <div class="progress-bar">3 â 7852 <div class="progress"><div class="progress-fill" style="width:1%"></div></div> (1) 7853 </div> 7854 <div class="progress-bar">2 â 7855 <div class="progress"><div class="progress-fill" style="width:0%"></div></div> (0) 7856 </div> 7857 <div class="progress-bar">1 â 7858 <div class="progress"><div class="progress-fill" style="width:0%"></div></div> (0) 7859 </div> 7860 </div> 7861 7862 <div style="flex:1"> 7863 <div class="tabs"> 7864 <div class="tab active" onclick="showTab('reviews')">REVIEWS (14)</div> 7865 <div class="tab" onclick="showTab('faq')">QUESTIONS (14)</div> 7866 </div> 7867 7868 <!-- FILTER --> 7869 <div class="filter-bar"> 7870 <input type="text" id="searchInput" placeholder="Search Reviews..."> 7871 <select id="sortSelect"> 7872 <option value="recent">Most Recent</option> 7873 <option value="oldest">Oldest</option> 7874 <option value="highest">Highest Rating</option> 7875 </select> 7876 </div> 7877 7878 <!-- REVIEWS --> 7879 <div id="reviewsSection"></div> 7880 7881 <!-- FAQ --> 7882 <div id="faqSection" style="display:none"></div> 7883 7884 </div> 7885</div> 7886 7887</div> 7888 </div></div> 7889
7890<script> 7891 7892const reviews = [ 7893 { 7894 name: "Bagas Pratama", 7895 date: "2026-03-11", 7896 rating: 5, 7897 text: "Saya sudah coba banyak situs game togel, tapi ATAS4D paling stabil. Result togel macau selalu update cepat dan akurat, jadi lebih mudah analisa angka." 7898 }, 7899 { 7900 name: "Rangga Saputra", 7901 date: "2026-03-06", 7902 rating: 5, 7903 text: "Main toto macau 4D di ATAS4D terasa lebih nyaman. Tampilan simpel dan proses deposit cepat banget. Cocok buat pemain harian." 7904 }, 7905 { 7906 name: "Dimas Arya", 7907 date: "2026-02-28", 7908 rating: 5, 7909 text: "Yang saya suka dari ATAS4D adalah pasaran lengkapnya. Togel macau dan toto macau tersedia dengan data yang jelas, jadi lebih percaya diri pasang angka." 7910 }, 7911 { 7912 name: "Galih Ramadhan", 7913 date: "2026-02-21", 7914 rating: 5, 7915 text: "Customer service ATAS4D responsif dan membantu. Saya pernah ada kendala, langsung dibantu dengan cepat. Recommended untuk game togel online." 7916 }, 7917 { 7918 name: "Wira Mahendra", 7919 date: "2026-02-16", 7920 rating: 5, 7921 text: "Platformnya ringan di HP, jadi bisa main kapan saja. Toto macau 4D di ATAS4D juga punya peluang menarik menurut saya." 7922 }, 7923 { 7924 name: "Chandra Winata", 7925 date: "2026-02-10", 7926 rating: 5, 7927 text: "ATAS4D jadi pilihan utama saya karena update result togel macau selalu cepat dan akurat. Sangat membantu untuk memantau hasil dan membuat analisa angka berikutnya." 7928 }, 7929 { 7930 name: "Dandu Putri", 7931 date: "2026-02-03", 7932 rating: 5, 7933 text: "Proses daftar dan deposit di ATAS4D sangat mudah. Platformnya juga stabil sehingga saya bisa bermain toto macau 4D tanpa kendala kapan saja." 7934 }, 7935 { 7936 name: "Andika Putra", 7937 date: "2026-01-27", 7938 rating: 5, 7939 text: "Saya suka karena data pasaran togel macau ditampilkan dengan jelas dan lengkap. Informasinya mudah dipahami bahkan untuk pemain yang baru bergabung." 7940 }, 7941 { 7942 name: "Yoga Permana", 7943 date: "2026-01-20", 7944 rating: 5, 7945 text: "ATAS4D memiliki tampilan yang sederhana namun lengkap. Semua fitur penting mudah diakses, baik melalui desktop maupun smartphone." 7946 }, 7947 { 7948 name: "Bima Kurniawan", 7949 date: "2026-01-13", 7950 rating: 5, 7951 text: "Keamanan akun di ATAS4D membuat saya lebih nyaman bermain. Transaksi berjalan lancar dan data pribadi terasa lebih terlindungi." 7952 }, 7953 { 7954 name: "Arif Setiawan", 7955 date: "2026-01-05", 7956 rating: 5, 7957 text: "Pelayanan customer service sangat profesional. Pertanyaan saya mengenai pasaran toto macau langsung dijawab dengan cepat dan jelas." 7958 }, 7959 { 7960 name: "Dion Saputra", 7961 date: "2025-12-29", 7962 rating: 5, 7963 text: "Sudah beberapa bulan menggunakan ATAS4D dan performanya tetap stabil. Result macau real-time menjadi salah satu fitur favorit saya." 7964 }, 7965 { 7966 name: "Kevin Mahardika", 7967 date: "2025-12-20", 7968 rating: 5, 7969 text: "Yang menarik dari ATAS4D adalah pilihan pasaran yang lengkap dan akses yang cepat. Saya tidak perlu menunggu lama saat membuka halaman permainan." 7970 }, 7971 { 7972 name: "Raka Wijaya", 7973 date: "2025-12-12", 7974 rating: 5, 7975 text: "ATAS4D memberikan pengalaman bermain togel online yang nyaman. Sistemnya responsif, fiturnya lengkap, dan update informasi selalu tersedia setiap hari." 7976 } 7977]; 7978 7979const faq = [ 7980 "Apa itu ATAS4D dan kenapa populer di game togel online?|ATAS4D adalah platform game togel online yang menyediakan berbagai pasaran populer seperti togel macau, toto macau, dan toto macau 4D. Popularitasnya meningkat karena sistem stabil, result akurat, dan fitur lengkap yang memudahkan pemain dalam bermain setiap hari.", 7981 7982 "Apakah ATAS4D menyediakan pasaran togel macau resmi?|Ya, ATAS4D menyediakan pasaran togel macau dan toto macau 4D dengan data result yang akurat dan update real-time. Hal ini membuat pemain bisa menganalisa angka dengan lebih tepat.", 7983 7984 "Bagaimana cara bermain toto macau 4D di ATAS4D?|Cara bermain cukup mudah, pemain hanya perlu mendaftar akun, melakukan deposit, lalu memilih pasaran toto macau 4D. Setelah itu, pemain bisa langsung memasang angka sesuai prediksi mereka.", 7985 7986 "Apakah ATAS4D aman untuk bermain game togel?|ATAS4D menggunakan sistem keamanan modern untuk melindungi data dan transaksi pemain. Dengan sistem enkripsi dan layanan profesional, platform ini memastikan keamanan dalam bermain game togel online.", 7987 7988 "Apa keunggulan ATAS4D dibanding situs togel lainnya?|Beberapa keunggulan ATAS4D antara lain akses cepat, tampilan user-friendly, pasaran lengkap seperti togel macau, serta dukungan customer service yang responsif 24 jam.", 7989 7990 "Apakah ATAS4D bisa diakses melalui mobile?|Ya, ATAS4D dapat diakses melalui berbagai perangkat seperti smartphone dan desktop tanpa mengurangi performa. Ini memudahkan pemain bermain togel macau kapan saja dan di mana saja.", 7991 7992 "Apa saja fitur lengkap yang tersedia di ATAS4D?|ATAS4D menyediakan berbagai fitur unggulan seperti result macau real-time, transaksi cepat, akses multi perangkat, sistem keamanan modern, serta layanan customer service yang siap membantu pemain.", 7993
7994 "Mengapa banyak pemain memilih ATAS4D untuk bermain togel macau?|Banyak pemain memilih ATAS4D karena menawarkan pasaran togel macau terpercaya, sistem stabil, proses transaksi cepat, serta pengalaman bermain yang nyaman dan mudah diakses kapan saja.", 7995 7996 "Apakah data result macau di ATAS4D diperbarui secara real-time?|Ya, ATAS4D menghadirkan data result macau yang diperbarui secara real-time sehingga pemain dapat memperoleh informasi terbaru untuk kebutuhan analisis angka dan pemantauan hasil pasaran.", 7997 7998 "Bagaimana proses pendaftaran akun di ATAS4D?|Proses pendaftaran di ATAS4D dirancang sederhana dan cepat. Pengguna hanya perlu mengisi data yang diperlukan, melakukan verifikasi, kemudian akun siap digunakan untuk mengakses berbagai fitur yang tersedia.", 7999 8000 "Apakah transaksi deposit dan withdraw di ATAS4D berlangsung cepat?|ATAS4D mendukung sistem transaksi yang cepat dan efisien sehingga proses deposit maupun withdraw dapat dilakukan dengan lebih praktis sesuai ketentuan yang berlaku di platform.", 8001 8002 "Apakah ATAS4D cocok untuk pemain pemula?|Ya, tampilan yang user-friendly dan navigasi yang sederhana membuat ATAS4D mudah digunakan oleh pemain pemula maupun pemain berpengalaman yang ingin menikmati permainan dengan nyaman.", 8003 8004 "Bagaimana ATAS4D menjaga keamanan data pemain?|ATAS4D menggunakan teknologi keamanan modern dan sistem enkripsi untuk membantu melindungi data pribadi serta aktivitas transaksi pemain selama menggunakan platform.", 8005 8006 "Apa keuntungan bermain togel toto macau 4D di ATAS4D?|Keuntungan bermain di ATAS4D meliputi akses cepat, pasaran lengkap, informasi result yang akurat, dukungan layanan profesional, serta pengalaman bermain yang lebih nyaman melalui desktop maupun mobile." 8007]; 8008 8009function renderReviews(data){ 8010 const container = document.getElementById("reviewsSection"); 8011 container.innerHTML=""; 8012 data.forEach((r,i)=>{ 8013 container.innerHTML += ` 8014 <div class="review-card"> 8015 <div class="review-top"> 8016 <div> 8017 <div class="review-name">${r.name} <span class="verified">â Verified Buyer</span></div> 8018 <div class="review-stars">${"â ".repeat(r.rating)}</div> 8019 </div> 8020 <div>${r.date}</div> 8021 </div> 8022 <p>${r.text}</p> 8023 <div class="helpful" onclick="increaseHelpful(${i})"> 8024 ð Helpful <span id="help-${i}">0</span> 8025 </div> 8026 </div> 8027 `; 8028 }); 8029} 8030 8031function increaseHelpful(i){ 8032 let el = document.getElementById("help-"+i); 8033 el.innerText = parseInt(el.innerText) + 1; 8034} 8035 8036function renderFAQ(){ 8037 const container = document.getElementById("faqSection"); 8038 faq.forEach((item)=>{ 8039 let parts = item.split("|"); 8040 container.innerHTML += ` 8041 <div class="faq-item"> 8042 <div class="faq-question" onclick="toggleFAQ(this)"> 8043 ${parts[0]} <span>â¼</span> 8044 </div> 8045 <div class="faq-answer">${parts[1]}</div> 8046 </div> 8047 `; 8048 }); 8049} 8050 8051function toggleFAQ(el){ 8052 let answer = el.nextElementSibling; 8053 answer.style.display = answer.style.display === "block" ? "none":"block"; 8054} 8055 8056function showTab(tab){ 8057 document.querySelectorAll(".tab").forEach(t=>t.classList.remove("active")); 8058 event.target.classList.add("active"); 8059 if(tab==="reviews"){ 8060 document.getElementById("reviewsSection").style.display="block"; 8061 document.getElementById("faqSection").style.display="none"; 8062 }else{ 8063 document.getElementById("reviewsSection").style.display="none"; 8064 document.getElementById("faqSection").style.display="block"; 8065 } 8066} 8067 8068document.getElementById("searchInput").addEventListener("input", function(){ 8069 let value = this.value.toLowerCase(); 8070 let filtered = reviews.filter(r => r.text.toLowerCase().includes(value)); 8071 renderReviews(filtered); 8072}); 8073 8074document.getElementById("sortSelect").addEventListener("change", function(){ 8075 let sorted = [...reviews]; 8076 if(this.value==="recent"){ 8077 sorted.sort((a,b)=> new Date(b.date)-new Date(a.date)); 8078 } 8079 if(this.value==="oldest"){ 8080 sorted.sort((a,b)=> new Date(a.date)-new Date(b.date)); 8081 } 8082 renderReviews(sorted); 8083}); 8084 8085renderReviews(reviews); 8086renderFAQ(); 8087 8088</script>
vendor: 1 bytes, line 8088
8088
8089<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/shopify-cartjs/1.1.0/cart.min.js"></script>
8089 8090 8091<style> 8092.review-header{ 8093 display:flex; 8094 gap:40px; 8095} 8096 8097.rating-summary{ 8098 width:300px; 8099} 8100 8101.rating-score{ 8102 font-size:42px; 8103 font-weight:bold; 8104} 8105 8106.stars{ 8107 color:#f5a623; 8108 font-size:20px; 8109} 8110 8111.progress-bar{ 8112 display:flex; 8113 align-items:center; 8114 gap:10px; 8115 margin:6px 0; 8116} 8117 8118.progress{ 8119 background:#eee; 8120 height:8px; 8121 flex:1; 8122 border-radius:10px; 8123 overflow:hidden; 8124} 8125 8126.progress-fill{ 8127 background:#333; 8128 height:100%; 8129} 8130 8131.tabs{ 8132 display:flex; 8133 gap:30px; 8134 margin-top:30px; 8135 border-bottom:1px solid #ddd; 8136} 8137 8138.tab{ 8139 padding-bottom:10px; 8140 cursor:pointer; 8141 font-weight:bold; 8142} 8143 8144.tab.active{ 8145 border-bottom:3px solid black; 8146} 8147.filter-bar{ 8148 display:flex; 8149 justify-content:space-between; 8150 margin:20px 0; 8151} 8152 8153input[type="text"], select{ 8154 padding:8px 10px; 8155 border:1px solid #ddd; 8156 border-radius:6px; 8157} 8158 8159.review-card{ 8160 border-top:1px solid #eee; 8161 padding:20px 0; 8162} 8163 8164.review-top{ 8165 display:flex; 8166 justify-content:space-between; 8167} 8168 8169.review-name{ 8170 font-weight:bold; 8171} 8172 8173.verified{ 8174 color:green; 8175 font-size:12px; 8176} 8177 8178.review-stars{ 8179 color:#f5a623; 8180 margin:5px 0; 8181} 8182 8183.helpful{ 8184 font-size:13px; 8185 color:#666; 8186 cursor:pointer; 8187} 8188 8189.helpful span{ 8190 margin-left:5px; 8191} 8192.faq-item{ 8193 border-top:1px solid #eee; 8194 padding:15px 0; 8195} 8196 8197.faq-question{ 8198 font-weight:bold; 8199 cursor:pointer; 8200 display:flex; 8201 justify-content:space-between; 8202} 8203 8204.faq-answer{ 8205 display:none; 8206 margin-top:10px; 8207 color:#555; 8208} 8209 8210.rotate{ 8211 transform:rotate(180deg); 8212} 8213 .image-editor-popup { 8214 position: fixed; 8215 top: 0; 8216 left: 0; 8217 width: 100vw; 8218 height: 100vh; 8219 z-index: 9999; 8220 display: flex; 8221 align-items: center; 8222 justify-content: center; 8223 padding: 20px; 8224 box-sizing: border-box; 8225 } 8226 8227 .image-editor-overlay { 8228 position: absolute; 8229 top: 0; 8230 left: 0; 8231 width: 100%; 8232 height: 100%; 8233 background: rgba(0, 0, 0, 0.7); 8234 backdrop-filter: blur(2px); 8235 } 8236 8237 .image-editor-modal { 8238 position: relative; 8239 background: white; 8240 border-radius: 12px; 8241 box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); 8242 max-width: min(900px, calc(100vw - 40px)); 8243 max-height: min(700px, calc(100vh - 40px)); 8244 width: 100%; 8245 display: flex; 8246 flex-direction: column; 8247 overflow: auto; 8248 margin: auto; 8249 transform: translateZ(0); 8250 } 8251 8252 .image-editor-header { 8253 display: flex; 8254 justify-content: space-between; 8255 align-items: center; 8256 padding: 20px 24px; 8257 border-bottom: 1px solid #e5e7eb; 8258 background: #f9fafb; 8259 } 8260 8261 .image-editor-header h3 { 8262 margin: 0; 8263 font-size: 18px; 8264 font-weight: 600; 8265 color: #111827; 8266 } 8267 8268 .close-editor { 8269 background: none; 8270 border: none; 8271 font-size: 24px; 8272 color: #6b7280; 8273 cursor: pointer; 8274 padding: 0; 8275 width: 32px; 8276 height: 32px; 8277 display: flex; 8278 align-items: center; 8279 justify-content: center; 8280 border-radius: 6px; 8281 transition: all 0.2s; 8282 } 8283 8284 .close-editor:hover { 8285 background: #f3f4f6; 8286 color: #374151; 8287 } 8288 8289 .image-editor-content { 8290 display: flex; 8291 flex: 1; 8292 min-height: 500px; 8293 } 8294 8295 .image-editor-canvas { 8296 flex: 1; 8297 padding: 20px; 8298 background: #f8fafc; 8299 display: flex; 8300 align-items: center; 8301 justify-content: center; 8302 min-height: 400px; 8303 } 8304 8305 .image-editor-canvas img { 8306 max-width: 100%; 8307 max-height: 100%; 8308 display: block; 8309 } 8310 8311 .image-editor-controls { 8312 width: 280px; 8313 padding: 20px; 8314 background: white; 8315 border-left: 1px solid #e5e7eb; 8316 overflow-y: auto; 8317 } 8318 8319 .control-group { 8320 margin-bottom: 20px; 8321 padding-bottom: 16px; 8322 border-bottom: 1px solid #f3f4f6; 8323 } 8324 8325 .control-group:last-child { 8326 border-bottom: none; 8327 margin-bottom: 0; 8328 } 8329 8330 .control-group label { 8331 display: block; 8332 font-size: 14px; 8333 font-weight: 500; 8334 color: #374151; 8335 margin-bottom: 8px; 8336 } 8337 8338 .control-group select, 8339 .control-group input[type="range"] { 8340 width: 100%; 8341 padding: 8px 12px; 8342 border: 1px solid #d1d5db; 8343 border-radius: 6px; 8344 font-size: 14px; 8345 background: white; 8346 } 8347 8348 .control-group input[type="range"] { 8349 -webkit-appearance: none; 8350 appearance: none; 8351 height: 6px; 8352 background: #e5e7eb; 8353 border-radius: 3px; 8354 padding: 0; 8355 } 8356 8357 .control-group input[type="range"]::-webkit-slider-thumb { 8358 -webkit-appearance: none; 8359 appearance: none; 8360 width: 18px; 8361 height: 18px; 8362 background: #3b82f6; 8363 border-radius: 50%; 8364 cursor: pointer; 8365 } 8366 8367 .control-group button { 8368 background: #f3f4f6; 8369 border: 1px solid #d1d5db; 8370 border-radius: 6px; 8371 padding: 8px 12px; 8372 font-size: 13px; 8373 color: #374151; 8374 cursor: pointer; 8375 margin-right: 8px; 8376 margin-bottom: 8px; 8377 transition: all 0.2s; 8378 } 8379 8380 .control-group button:hover { 8381 background: #e5e7eb; 8382 border-color: #9ca3af; 8383 } 8384 8385 .control-group button:active { 8386 transform: translateY(1px); 8387 } 8388 8389 #imageSizeInfo { 8390 font-size: 12px; 8391 color: #6b7280; 8392 margin-top: 8px; 8393 display: flex; 8394 flex-direction: column; 8395 gap: 4px; 8396 } 8397 8398 #imageSizeInfo span { 8399 display: block; 8400 padding: 4px 8px; 8401 background: #f9fafb; 8402 border-radius: 4px; 8403 border: 1px solid #e5e7eb; 8404 } 8405 8406 #originalSize { 8407 color: #374151; 8408 } 8409 8410 #newSize { 8411 color: #059669; 8412 font-weight: 500; 8413 } 8414 8415 .image-editor-footer { 8416 display: flex; 8417 justify-content: flex-end; 8418 gap: 12px; 8419 padding: 20px 24px; 8420 border-top: 1px solid #e5e7eb; 8421 background: #f9fafb; 8422 } 8423 8424 .btn-cancel { 8425 background: white; 8426 border: 1px solid #d1d5db; 8427 border-radius: 6px; 8428 padding: 10px 20px; 8429 font-size: 14px; 8430 color: #374151; 8431 cursor: pointer; 8432 transition: all 0.2s; 8433 } 8434 8435 .btn-cancel:hover { 8436 background: #f9fafb; 8437 border-color: #9ca3af; 8438 } 8439 8440 .btn-save { 8441 background: #3b82f6; 8442 border: 1px solid #3b82f6; 8443 border-radius: 6px; 8444 padding: 10px 20px; 8445 font-size: 14px; 8446 color: white; 8447 cursor: pointer; 8448 transition: all 0.2s; 8449 } 8450 8451 .btn-save:hover { 8452 background: #2563eb; 8453 border-color: #2563eb; 8454 } 8455 8456 @media (max-width: 768px) { 8457 .image-editor-popup { 8458 padding: 10px; 8459 } 8460 8461 .image-editor-modal { 8462 max-width: calc(100vw - 20px); 8463 max-height: calc(100vh - 20px); 8464 width: 100%; 8465 height: auto; 8466 min-height: 80vh; 8467 } 8468 8469 .image-editor-content { 8470 flex-direction: column; 8471 } 8472
8473 .image-editor-controls { 8474 width: 100%; 8475 border-left: none; 8476 border-top: 1px solid #e5e7eb; 8477 max-height: 200px; 8478 } 8479 8480 .image-editor-canvas { 8481 min-height: 300px; 8482 } 8483 } 8484 8485 .steps-card-preview.loading-upload { 8486 position: relative; 8487 pointer-events: none; 8488 opacity: 0.7; 8489 } 8490 8491 .steps-card-preview.loading-upload::after { 8492 content: ''; 8493 position: absolute; 8494 top: 0; 8495 left: 0; 8496 right: 0; 8497 bottom: 0; 8498 background: rgba(255, 255, 255, 0.8); 8499 border-radius: inherit; 8500 z-index: 1; 8501 } 8502 8503 .ajax-loader { 8504 position: absolute; 8505 top: 50%; 8506 left: 50%; 8507 transform: translate(-50%, -50%); 8508 z-index: 2; 8509 width: 40px; 8510 height: 40px; 8511 border: 4px solid #f3f3f3; 8512 border-top: 4px solid #3498db; 8513 border-radius: 50%; 8514 animation: spin 1s linear infinite; 8515 display: none; 8516 } 8517 8518 .image-editor-popup { 8519 opacity: 0; 8520 visibility: hidden; 8521 transition: opacity 0.3s ease, visibility 0.3s ease; 8522 display: flex !important; 8523 } 8524 8525 .image-editor-popup.show { 8526 opacity: 1; 8527 visibility: visible; 8528 } 8529 8530 .image-editor-modal { 8531 transform: translateY(-20px) scale(0.9); 8532 transition: transform 0.3s ease; 8533 } 8534 8535 .image-editor-popup.show .image-editor-modal { 8536 transform: translateY(0) scale(1); 8537 } 8538 8539 @keyframes spin { 8540 0% { transform: translate(-50%, -50%) rotate(0deg); } 8541 100% { transform: translate(-50%, -50%) rotate(360deg); } 8542 } 8543 8544 .skeleton-date-loader { 8545 display: flex; 8546 gap: 8px; 8547 flex-wrap: wrap; 8548 } 8549 8550 .skeleton-date-button { 8551 width: calc(14.285% - 7px); 8552 min-width: 40px; 8553 height: 40px; 8554 background: #f5f5f5; 8555 border: 1px solid #e0e0e0; 8556 border-radius: 50%; 8557 position: relative; 8558 overflow: hidden; 8559 display: flex; 8560 flex-direction: column; 8561 align-items: center; 8562 justify-content: center; 8563 gap: 4px; 8564 } 8565 8566 .skeleton-date-button::before { 8567 content: ''; 8568 position: absolute; 8569 top: 0; 8570 left: -100%; 8571 width: 100%; 8572 height: 100%; 8573 background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.6), transparent); 8574 animation: skeleton-shimmer 1.5s ease-in-out infinite; 8575 } 8576 8577 .skeleton-date-text { 8578 width: 30px; 8579 height: 10px; 8580 background: #e0e0e0; 8581 border-radius: 4px; 8582 } 8583 8584 .skeleton-date-number { 8585 width: 20px; 8586 height: 14px; 8587 background: #d0d0d0; 8588 border-radius: 4px; 8589 } 8590 8591 @keyframes skeleton-shimmer { 8592 0% { 8593 left: -100%; 8594 } 8595 100% { 8596 left: 100%; 8597 } 8598 } 8599 8600 @media (max-width: 768px) { 8601 .skeleton-date-button { 8602 width: calc(16.666% - 7px); 8603 min-width: 40px; 8604 height: 40px; 8605 } 8606 } 8607 8608 @media (max-width: 480px) { 8609 .skeleton-date-button { 8610 width: calc(20% - 7px); 8611 min-width: 40px; 8612 height: 40px; 8613 } 8614 8615 .skeleton-date-text { 8616 width: 25px; 8617 height: 8px; 8618 } 8619 8620 .skeleton-date-number { 8621 width: 18px; 8622 height: 12px; 8623 } 8624 } 8625 8626 .ocr-address-popup { 8627 position: fixed; 8628 top: 0; 8629 left: 0; 8630 width: 100vw; 8631 height: 100vh; 8632 z-index: 9998; 8633 display: none; 8634 align-items: center; 8635 justify-content: center; 8636 padding: 20px; 8637 box-sizing: border-box; 8638 } 8639 8640 .ocr-address-popup.show { 8641 display: flex; 8642 } 8643 8644 .ocr-popup-overlay { 8645 position: absolute; 8646 top: 0; 8647 left: 0; 8648 width: 100%; 8649 height: 100%; 8650 background: rgba(0, 0, 0, 0.6); 8651 backdrop-filter: blur(2px); 8652 cursor: pointer; 8653 } 8654 8655 .ocr-popup-content { 8656 position: relative; 8657 background: white; 8658 border-radius: 12px; 8659 box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); 8660 max-width: 600px; 8661 max-height: 80vh; 8662 width: 100%; 8663 overflow: hidden; 8664 display: flex; 8665 flex-direction: column; 8666 } 8667 8668 .ocr-popup-header { 8669 display: flex; 8670 justify-content: space-between; 8671 align-items: center; 8672 padding: 20px 24px; 8673 border-bottom: 1px solid #e5e7eb; 8674 background: #f9fafb; 8675 } 8676 8677 .ocr-popup-header h3 { 8678 margin: 0; 8679 font-size: 18px; 8680 font-weight: 600; 8681 color: #1f2937; 8682 } 8683 8684 .close-ocr-popup { 8685 background: none; 8686 border: none; 8687 font-size: 28px; 8688 color: #6b7280; 8689 cursor: pointer; 8690 padding: 0; 8691 width: 32px; 8692 height: 32px; 8693 display: flex; 8694 align-items: center; 8695 justify-content: center; 8696 transition: color 0.2s; 8697 } 8698 8699 .close-ocr-popup:hover { 8700 color: #1f2937; 8701 } 8702 8703 .ocr-popup-body { 8704 overflow-y: auto; 8705 padding: 20px; 8706 flex: 1; 8707 } 8708 8709 .ocr-address-options { 8710 display: flex; 8711 flex-direction: column; 8712 gap: 12px; 8713 } 8714 8715 .ocr-address-option { 8716 padding: 16px; 8717 border: 2px solid #e5e7eb; 8718 border-radius: 8px; 8719 cursor: pointer; 8720 transition: all 0.2s; 8721 background: white; 8722 } 8723 8724 .ocr-address-option:hover { 8725 border-color: #3b82f6; 8726 background: #f0f4ff; 8727 box-shadow: 0 2px 8px rgba(59, 130, 246, 0.1); 8728 } 8729 8730 .ocr-address-option.selected { 8731 border-color: #3b82f6; 8732 background: #eff6ff; 8733 } 8734 8735 .address-content { 8736 display: flex; 8737 flex-direction: column; 8738 gap: 4px; 8739 } 8740 8741 .address-text { 8742 margin: 0; 8743 font-size: 15px; 8744 font-weight: 500; 8745 color: #1f2937; 8746 line-height: 1.4; 8747 } 8748
8749 .address-details { 8750 margin: 0; 8751 font-size: 13px; 8752 color: #6b7280; 8753 } 8754 8755 body.ocr-popup-open { 8756 overflow: hidden; 8757 } 8758 8759 @media (max-width: 768px) { 8760 .ocr-popup-content { 8761 max-width: calc(100vw - 40px); 8762 max-height: 85vh; 8763 } 8764 8765 .ocr-popup-header h3 { 8766 font-size: 16px; 8767 } 8768 8769 .address-text { 8770 font-size: 14px; 8771 } 8772 } 8773</style> 8774
8775<script> 8776 CartJS.init({"note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"IDR","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0}); 8777 8778 const productType = $("[data-product-type]").data("product-type") 8779 const productDate = Date.parse(new Date()) 8780 8781 const shop = 'outerbloom1.myshopify.com' 8782 const host = 'https://app.asmaraku.com' 8783 // const host = 'https://d8fe-103-3-220-56.ngrok-free.app' 8784 8785 const gsheet = "https://script.google.com/macros/s/AKfycbyqa6mPD6lVjU6hiHr12J8URZ2aJBGyxBsGQ0QtEIDari-rBk_9vSOITjSSmUXL1NwxEg/exec" 8786 8787 const qrID = "230226" + randomString(4, 'aAbCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ') 8788 8789 $("#properties-time").val(new Date().getTime()) 8790 8791 const isIOS = /iPhone|iPad|iPod/i.test(navigator.userAgent); 8792 8793 if(!isIOS) { 8794 $("#full-date").attr("type", "button") 8795 } 8796 8797 // Shipping Analytics Tracker 8798 class ShippingAnalytics { 8799 constructor() { 8800 this.endpoint = host + '/api/track-shipping'; 8801 this.userId = ''; 8802 this.userIp = document.body.getAttribute('data-ip') || 'unknown'; 8803 this.shop = ''; 8804 } 8805 8806 async track(action, metadata = {}) { 8807 try { 8808 const payload = { 8809 endpoint: action, 8810 metadata: { 8811 userIp: this.userIp, 8812 shop: this.shop, 8813 timestamp: new Date().toISOString(), 8814 userAgent: navigator.userAgent, 8815 url: window.location.href, 8816 ...metadata 8817 } 8818 }; 8819 8820 const response = await fetch(this.endpoint, { 8821 method: 'POST', 8822 headers: { 8823 'Content-Type': 'application/json' 8824 }, 8825 body: JSON.stringify(payload) 8826 }); 8827 8828 if (!response.ok) { 8829 console.warn('Analytics tracking failed:', response.status); 8830 } 8831 } catch (error) { 8832 console.error('Analytics error:', error); 8833 // Fail silently, tidak block user flow 8834 } 8835 } 8836 } 8837 8838 // Initialize 8839 const analytics = new ShippingAnalytics(); 8840 8841 let dateTime = new Date(); 8842 let today = dateTime.getDate(); 8843 let day = dateTime.getDay(); 8844 let hour = dateTime.getHours(); 8845 let min = dateTime.getMinutes(); 8846 let timeOfDay = hour + (min / 100); 8847 8848 async function getFetch(url) { 8849 const response = await fetch(url); 8850 let status = false 8851 let result 8852 if(response.ok) { 8853 status = true 8854 result = await response.json(); 8855 } 8856 return { 8857 status, 8858 data: result 8859 } 8860 } 8861 8862 function setCookie(cname, cvalue, exMins) { 8863 var d = new Date(); 8864 d.setTime(d.getTime() + (exMins*60*1000)); 8865 var expires = "expires="+d.toUTCString(); 8866 document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 8867 } 8868 8869 function getCookie(cname) { 8870 let name = cname + "="; 8871 let decodedCookie = decodeURIComponent(document.cookie); 8872 let ca = decodedCookie.split(';'); 8873 for(let i = 0; i <ca.length; i++) { 8874 let c = ca[i]; 8875 while (c.charAt(0) == ' ') { 8876 c = c.substring(1); 8877 } 8878 if (c.indexOf(name) == 0) { 8879 return c.substring(name.length, c.length); 8880 } 8881 } 8882 return ""; 8883 } 8884 8885 // Initialize rupiah formatter before it's used in renderAddress 8886 let rupiah = new Intl.NumberFormat('id-ID', { 8887 style: 'currency', 8888 currency: 'IDR', 8889 maximumFractionDigits: 0, 8890 minimumFractionDigits: 0 8891 }); 8892 8893 // Helper functions for localStorage (1 day storage) 8894 function getStorageKey(type, city = '') { 8895 const productId = '7881418965207'; 8896 if (type === 'date') { 8897 // For date, only use product ID (no city) 8898 return `delivery_${type}_${productId}`; 8899 } 8900 // For other types (zip), use city 8901 return `delivery_${type}_${productId}_${city}`; 8902 } 8903 8904 function saveToStorage(key, data) { 8905 try { 8906 const item = { 8907 data: data, 8908 savedAt: new Date().getTime() 8909 }; 8910 localStorage.setItem(key, JSON.stringify(item)); 8911 } catch (e) { 8912 console.error('Error saving to localStorage:', e); 8913 } 8914 } 8915
8916 function getFromStorage(key) { 8917 try { 8918 const itemStr = localStorage.getItem(key); 8919 if (!itemStr) { 8920 return null; 8921 } 8922 const item = JSON.parse(itemStr); 8923 const now = new Date().getTime(); 8924 const oneHour = 60 * 60 * 1000; // 1 hour in milliseconds 8925 8926 // Check if data is older than 1 hour 8927 if (now - item.savedAt > oneHour) { 8928 localStorage.removeItem(key); 8929 return null; 8930 } 8931 return item.data; 8932 } catch (e) { 8933 console.error('Error reading from localStorage:', e); 8934 return null; 8935 } 8936 } 8937 8938 async function renderDate(city) { 8939 const storageKey = getStorageKey('date'); 8940 const storedData = getFromStorage(storageKey); 8941 8942 let data; 8943 if (storedData) { 8944 data = storedData; 8945 } else { 8946 let dataDate = await getFetch(`${host}/api/shipping/date?domain=${shop}&productId=7881418965207&source=web`); 8947 data = dataDate?.data; 8948 8949 // Save to localStorage (only once per product) 8950 if (data && data.date && data.time) { 8951 saveToStorage(storageKey, data); 8952 } 8953 } 8954 8955 // Use the helper function to render 8956 if (data && data.date && data.time) { 8957 renderDeliveryDateFromData(data); 8958 8959 if(productType !== '') { 8960 console.log("clarity event " + productType + ' calendaring') 8961 window.clarity("event", `${productType} calendaringSchedule`) 8962 } 8963 } else { 8964 console.error('Invalid delivery date data'); 8965 showDeliveryPlaceholder(); 8966 } 8967 } 8968 8969 // Function to get province from city (called on-demand, not on initial render) 8970 async function getProvince(city) { 8971 if (!city || city === '') { 8972 return; 8973 } 8974 8975 // Check localStorage first 8976 const storageKey = getStorageKey('province', city); 8977 const storedProvince = getFromStorage(storageKey); 8978 8979 if (storedProvince) { 8980 console.log('Using stored province data for:', city); 8981 $("#province").val(storedProvince); 8982 return storedProvince; 8983 } 8984 8985 // Fetch from API if not in localStorage 8986 console.log('Fetching province data from API for:', city); 8987 let { data: { province } } = await getFetch(`${host}/api/shipping/address/province?city=${city}&source=web`); 8988 console.log(province, 'province') 8989 $("#province").val(province) 8990 8991 // Save to localStorage 8992 if (province) { 8993 saveToStorage(storageKey, province); 8994 console.log('Saved province to localStorage for:', city); 8995 } 8996 8997 return province; 8998 } 8999 9000 async function renderAddress() {
9001 let current 9002 if(getCookie("location_delivery")){ 9003 current = getCookie("location_delivery").charAt(0).toUpperCase() + getCookie("location_delivery").slice(1) 9004 } 9005 9006 const deliveryCity = document.getElementById("cities"); 9007 9008 // Check localStorage first 9009 const cityDataKey = `delivery_city_data_7881418965207`; 9010 const storedCityData = getFromStorage(cityDataKey); 9011 9012 if (storedCityData && storedCityData.cities && storedCityData.cities.length > 0) { 9013 const allCities = storedCityData.cities; 9014 const data = storedCityData.fullData; 9015 9016 const htmlAddress = []; 9017 for(let i = 0; i < data?.length; i++) { 9018 if(data[i]){ 9019 const price = rupiah.format(data[i]?.rate) 9020 let promo = '(Promo Free Delivery)' 9021 if(data[i]?.name === 'Jakarta - PickUp ASHTA'){ 9022 promo = '(at SCBD, Ashta)' 9023 } else if(data[i]?.name === 'Jakarta - PickUp ITC'){ 9024 promo = '(at Kuningan, ITC Kuningan)' 9025 } else if(data[i]?.name === 'BSD - PickUp'){ 9026 promo = '(at Goldfinch Gading Serpong)' 9027 } else if(data[i]?.name === 'Kota Lainnya'){ 9028 promo = '' 9029 } 9030 9031 htmlAddress.push(`<option data-province="${data[i]?.province}" data-city="${data[i]?.city}" data-note="${data[i]?.note}" data-price="${data[i]?.rate}" value="${data[i]?.name}">${data[i]?.name === 'Kota Lainnya' ? 'Seluruh Kota Lain di Indonesia' : data[i]?.name} ${data[i]?.rate > 0 ? `(${price})` : promo}</option>`) 9032 } 9033 } 9034 9035 if(deliveryCity) { 9036 deliveryCity.insertAdjacentHTML("beforeend", htmlAddress.join('')) 9037 } 9038 9039 return storedCityData; 9040 } 9041 9042 // If no stored data, show skeleton and fetch from API 9043 if(deliveryCity && deliveryCity.options.length === 1) { // Only default option 9044 const skeletonOptions = ` 9045 <option disabled>Loading cities...</option> 9046 <option disabled>●●●●●●●●●</option> 9047 <option disabled>●●●●●●●●●</option> 9048 <option disabled>●●●●●●●●●</option> 9049 `; 9050 deliveryCity.insertAdjacentHTML("beforeend", skeletonOptions); 9051 } 9052 9053 let address = await getFetch(`${host}/api/shipping/address?domain=${shop}&productId=7881418965207&source=web`); 9054 console.log(address) 9055 const data = address?.data?.city 9056 const htmlAddress = [] 9057 const grouping = [] 9058 const allCities = [] // Store all city names 9059 9060 for(let i = 0;i < data?.length;i++) { 9061 if(data[i]){ 9062 if(data[i]?.group) { 9063 grouping.push(data[i].group) 9064 } 9065 const price = rupiah.format(data[i]?.rate) 9066 let promo = '(Promo Free Delivery)' 9067 if(data[i]?.name === 'Jakarta - PickUp ASHTA'){ 9068 promo = '(at SCBD, Ashta)' 9069 } else if(data[i]?.name === 'Jakarta - PickUp ITC'){ 9070 promo = '(at Kuningan, ITC Kuningan)' 9071 } else if(data[i]?.name === 'BSD - PickUp'){ 9072 promo = '(at Goldfinch Gading Serpong)' 9073 } else if(data[i]?.name === 'Kota Lainnya'){ 9074 promo = '' 9075 } 9076 9077 // Add city name to allCities array 9078 allCities.push(data[i]?.name); 9079 9080 htmlAddress.push(`<option data-province="${data[i]?.province}" data-city="${data[i]?.city}" data-note="${data[i]?.note}" data-price="${data[i]?.rate}" value="${data[i]?.name}">${data[i]?.name === 'Kota Lainnya' ? 'Seluruh Kota Lain di Indonesia' : data[i]?.name} ${data[i]?.rate > 0 ? `(${price})` : promo}</option>`) 9081 } 9082 } 9083 9084 if(deliveryCity) { 9085 // Remove skeleton options before adding real options 9086 const skeletonOpts = deliveryCity.querySelectorAll('option[disabled]'); 9087 skeletonOpts.forEach(opt => { 9088 if (opt.textContent.includes('Loading') || opt.textContent.includes('â')) { 9089 opt.remove(); 9090 } 9091 }); 9092 9093 deliveryCity.insertAdjacentHTML("beforeend", htmlAddress.join('')) 9094 } 9095 9096 // Save all cities to localStorage for 1 day 9097 const saveCityDataKey = `delivery_city_data_7881418965207`; 9098 const saveCityData = { 9099 cities: allCities, 9100 fullData: data // Save full data for later use 9101 }; 9102 saveToStorage(saveCityDataKey, saveCityData); 9103 console.log('Saved city data:', saveCityData); 9104 9105 return saveCityData; 9106 } 9107 9108 // Function to get user city from IP address 9109 async function getUserCityFromIP(availableCities) { 9110 try { 9111 // Try to get location from IP 9112 const ipResponse = await fetch('https://ipapi.co/json/'); 9113 const ipData = await ipResponse.json(); 9114 const userCity = ipData.city; 9115 9116 console.log('User city from IP:', userCity); 9117 9118 // Check if user city exists in available cities 9119 const matchedCity = availableCities.find(city => 9120 city.toLowerCase().includes(userCity.toLowerCase()) || 9121 userCity.toLowerCase().includes(city.toLowerCase()) 9122 ); 9123 9124 if (matchedCity) { 9125 console.log('Matched city found:', matchedCity); 9126 return matchedCity; 9127 } 9128 9129 console.log('User city not in available cities'); 9130 return ""; 9131 } catch (error) { 9132 console.error('Error getting user location:', error); 9133 return ""; 9134 } 9135 } 9136 9137 // Function to render zip codes (called on-demand, not on initial render) 9138 async function renderZip(v, v2, v3) { 9139 const deliveryZip = document.getElementById("zip"); 9140 if(v === '') { 9141 return 9142 } 9143 9144 // Check localStorage first 9145 const storageKey = getStorageKey('zip', v); 9146 const storedZip = getFromStorage(storageKey); 9147 9148 let zip; 9149 if (storedZip) { 9150 console.log('Using stored zip code data for:', v); 9151 zip = storedZip; 9152 } else { 9153 console.log('Fetching zip code data from API for:', v); 9154 let dataZip = await getFetch(`${host}/api/shipping/address/zip?city=${v}&city2=${v2}&city3=${v3}&source=web`);
9155 zip = dataZip?.data?.zip; 9156 console.log(zip) 9157 9158 // Save to localStorage 9159 if (zip && zip.length > 0) { 9160 saveToStorage(storageKey, zip); 9161 } 9162 } 9163 9164 let htmlZip = [] 9165 for(let i = 0; i < zip?.length;i++) { 9166 htmlZip.push(`<option value="${zip[i]?.postalCode} - ${zip[i]?.subdistrict}">${zip[i]?.postalCode} - ${zip[i]?.subdistrict} - ${zip[i]?.city}</option>`) 9167 } 9168 deliveryZip.insertAdjacentHTML("beforeend", htmlZip.join('')) 9169 9170 // Initialize Select2 with search for zip code 9171 if(!isIOS) { 9172 setTimeout(() => { 9173 initSelect2('#zip', { 9174 placeholder: 'Postal Code' 9175 }); 9176 }, 100); 9177 } 9178 } 9179 9180 // Add skeleton loader for delivery date 9181 function showDateSkeleton() { 9182 const deliveryDate = document.getElementById("deliveryDate"); 9183 if(deliveryDate && deliveryDate.children.length === 0) { 9184 const skeletonHTML = ` 9185 <div class="skeleton-date-loader"> 9186 <div class="skeleton-date-button"> 9187 </div> 9188 <div class="skeleton-date-button"> 9189 </div> 9190 <div class="skeleton-date-button"> 9191 </div> 9192 <div class="skeleton-date-button"> 9193 </div> 9194 <div class="skeleton-date-button"> 9195 </div> 9196 <div class="skeleton-date-button"> 9197 </div> 9198 <div class="skeleton-date-button"> 9199 </div> 9200 </div> 9201 `; 9202 deliveryDate.insertAdjacentHTML("afterbegin", skeletonHTML); 9203 } 9204 } 9205 9206 // Show static disabled buttons for delivery date and time 9207 function showDeliveryPlaceholder() { 9208 const deliveryDate = document.getElementById("deliveryDate"); 9209 const deliveryTime = document.getElementById("deliveryTime"); 9210 9211 if(deliveryDate) { 9212 const staticDates = ` 9213 <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> 9214 Mon<span>--</span> 9215 </button> 9216 <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> 9217 Tue<span>--</span> 9218 </button> 9219 <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> 9220 Wed<span>--</span> 9221 </button> 9222 <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> 9223 Thu<span>--</span> 9224 </button> 9225 <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> 9226 Fri<span>--</span> 9227 </button> 9228 <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> 9229 Sat<span>--</span> 9230 </button> 9231 `; 9232 deliveryDate.innerHTML = staticDates; 9233 } 9234 9235 if(deliveryTime) { 9236 const staticTimes = ` 9237 <button class="time-single calendarbutton2 btn steps-btn" disabled title="Please select delivery city first"> 9238 Morning<br/>08:00-13:00 9239 </button> 9240 <button class="time-single calendarbutton2 btn steps-btn" disabled title="Please select delivery city first"> 9241 Afternoon<br/>13:00-18:00 9242 </button> 9243 <button class="time-single calendarbutton2 btn steps-btn" disabled title="Please select delivery city first"> 9244 Evening<br/>17:00-22:00 9245 </button> 9246 `; 9247 deliveryTime.innerHTML = staticTimes; 9248 } 9249 } 9250 9251 // Helper function to render delivery date and time from data object 9252 function renderDeliveryDateFromData(data) { 9253 const deliveryDate = document.getElementById("deliveryDate"); 9254 const deliveryTime = document.getElementById("deliveryTime"); 9255 9256 // Check if at least one element exists 9257 if (!deliveryDate && !deliveryTime) { 9258 console.error('Cannot render delivery date: both deliveryDate and deliveryTime elements are missing'); 9259 return false; 9260 } 9261 9262 // Check if data is valid 9263 if (!data || !data.date || !data.time) { 9264 console.error('Cannot render delivery date: invalid or missing data'); 9265 return false;
9266 } 9267 9268 const date = data.date; 9269 const time = data.time; 9270 const weekday = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]; 9271 const monthly = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; 9272 9273 // Get today's date in Jakarta timezone (UTC+7) 9274 const todayJakarta = new Date(new Date().toLocaleString("en-US", {timeZone: "Asia/Jakarta"})); 9275 const today = todayJakarta.getDate(); 9276 9277 const htmlDate = []; 9278 for(let i = 0; i < date.length; i++) { 9279 const full = date[i].date; 9280 9281 // Convert UTC date to Jakarta timezone (UTC+7) 9282 const utcDate = new Date(date[i].date); 9283 const jakartaDateString = utcDate.toLocaleString("en-US", {timeZone: "Asia/Jakarta"}); 9284 const jakartaDate = new Date(jakartaDateString); 9285 9286 const dt = jakartaDate.getDate(); 9287 const monthIndex = jakartaDate.getMonth(); 9288 const yr = jakartaDate.getFullYear(); 9289 const day = weekday[jakartaDate.getDay()]; 9290 const mt = monthly[monthIndex]; 9291 9292 const isDate = Boolean(date[i].isEnabled); 9293 const cutoffpagi = date[i].cutoff?.pagi; 9294 const cutoffsiang = date[i].cutoff?.siang; 9295 const cutoffMalam = date[i].cutoff?.malam; 9296 9297 console.log(cutoffMalam, 'cutoffMalam') 9298 9299 const buttonHTML = ` 9300 <button data-id="7881418965207" class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" data-day="${day}" data-fulldate="${full}" data-date="${dt < 10 ? '0' + dt : dt}" data-month="${mt}" data-year="${yr}" data-offpagi="${cutoffpagi}" data-offsiang="${cutoffsiang}" data-offMalam="${cutoffMalam}" ${isDate === true ? '' : 'disabled'}> 9301 ${dt === today ? `Today<span>${dt < 10 ? '0' + dt : dt}</span>` : `${day}<span>${dt < 10 ? '0' + dt : dt}</span>`} 9302 </button> 9303 `; 9304 9305 htmlDate.push(buttonHTML); 9306 } 9307 9308 const htmlTime = []; 9309 for(let i = 0; i < time.length; i++) { 9310 const timeText = time[i].text; 9311 const timeTime = time[i].time; 9312 const timeEnabled = time[i].isEnabled; 9313 htmlTime.push(` 9314 <button class="time-single calendarbutton2 btn steps-btn" data-time="${timeText}" ${timeEnabled ? '' : 'disabled'}>${timeText}<br/>${timeTime}</button> 9315 `); 9316 } 9317 9318 // Render delivery date if element exists 9319 if (deliveryDate) { 9320 deliveryDate.innerHTML = htmlDate.join(''); 9321 9322 // Log all buttons with their disabled status 9323 const buttons = deliveryDate.querySelectorAll('button'); 9324 buttons.forEach((btn, idx) => { 9325 console.log(`Button ${idx}: date=${btn.dataset.date}, hasDisabled=${btn.hasAttribute('disabled')}, disabled=${btn.disabled}`); 9326 }); 9327 9328 // Apply pickup date restrictions if pickup mode is active 9329 if (window.applyPickupDateRestrictions === true) { 9330 applyPickupDateRestrictions(deliveryDate); 9331 } 9332 } 9333 9334 // Render delivery time if element exists 9335 if (deliveryTime) { 9336 deliveryTime.innerHTML = htmlTime.join(''); 9337 } 9338 9339 return true; 9340 } 9341 9342 // Function to apply pickup date restrictions 9343 function applyPickupDateRestrictions(deliveryDateElement) { 9344 if (!deliveryDateElement) return; 9345 9346 // Get current time in Jakarta timezone 9347 const now = new Date(new Date().toLocaleString("en-US", {timeZone: "Asia/Jakarta"})); 9348 const currentHour = now.getHours(); 9349 const currentMinute = now.getMinutes(); 9350 const currentTime = currentHour + (currentMinute / 60); // e.g., 15.5 for 3:30 PM 9351 const currentDate = now.getDate(); 9352 9353 const isAfter3PM = currentTime >= 15.0; // 3 PM = 15:00 9354 9355 // Check product tags 9356 const isPickupInhouse = false; 9357 const isPickupVendor = false; 9358 9359 console.log('Applying pickup date restrictions:', { 9360 isPickupInhouse, 9361 isPickupVendor, 9362 currentDate, 9363 currentTime: currentTime.toFixed(2), 9364 isAfter3PM 9365 }); 9366 9367 const dateButtons = deliveryDateElement.querySelectorAll('button.date-single'); 9368 9369 dateButtons.forEach((button, index) => { 9370 const buttonDate = parseInt(button.dataset.date, 10); 9371 9372 if (isPickupInhouse) { 9373 // For pickup-itcinhouse: 9374 // - Disable today (compare actual date, not index) 9375 // - If after 3 PM, also disable tomorrow (currentDate + 1) 9376 9377 // Check if this button is today 9378 if (buttonDate === currentDate) { 9379 button.disabled = true; 9380 button.classList.add('stop'); 9381 button.title = 'Pickup not available for today'; 9382 console.log(`Disabled button ${index} (date ${buttonDate} = today) for pickup-itcinhouse`); 9383 } 9384 // Check if this button is tomorrow AND it's after 3 PM 9385 else if (buttonDate === currentDate + 1 && isAfter3PM) { 9386 button.disabled = true; 9387 button.classList.add('stop'); 9388 button.title = 'Pickup not available (after 3 PM cutoff)'; 9389 console.log(`Disabled button ${index} (date ${buttonDate} = tomorrow) for pickup-itcinhouse (after 3 PM)`); 9390 } 9391 } else if (isPickupVendor) { 9392 // For pickup-itcvendor: 9393 // - Disable dates before day 14 9394 // - If today is day 13 and after 3 PM, also disable day 14 9395 if (buttonDate < 14) { 9396 button.disabled = true; 9397 button.classList.add('stop'); 9398 button.title = 'Pickup not available before day 14'; 9399 console.log(`Disabled button ${index} (date ${buttonDate}) for pickup-itcvendor (before day 14)`); 9400 } else if (buttonDate === 14 && currentDate === 13 && isAfter3PM) { 9401 button.disabled = true; 9402 button.classList.add('stop'); 9403 button.title = 'Pickup not available (after 3 PM cutoff on day 13)'; 9404 console.log(`Disabled button ${index} (date ${buttonDate}) for pickup-itcvendor (day 13 after 3 PM)`); 9405 } 9406 } 9407 }); 9408 } 9409 9410 // Make function globally accessible 9411 window.applyPickupDateRestrictionsFunction = applyPickupDateRestrictions; 9412 9413 9414 // Render address first, then fetch and display delivery dates immediately 9415 async function initializeDeliveryOptions() { 9416 try { 9417 // Check if delivery date elements exist on this page 9418 const deliveryDate = document.getElementById("deliveryDate"); 9419 const deliveryTime = document.getElementById("deliveryTime"); 9420 9421 // Skip if BOTH elements are missing 9422 if (!deliveryDate && !deliveryTime) { 9423 console.log('Both delivery date and time elements not found, skipping delivery date initialization'); 9424 // Still render address for city selection 9425 await renderAddress(); 9426 return; 9427 } 9428 9429 // Log which elements are available 9430 if (!deliveryDate) console.log('deliveryDate element not found, will only render delivery time'); 9431 if (!deliveryTime) console.log('deliveryTime element not found, will only render delivery date'); 9432 9433 // Check if there's stored delivery date data for this product FIRST 9434 const dateStorageKey = getStorageKey('date'); 9435 const storedDateData = getFromStorage(dateStorageKey); 9436 9437 if (storedDateData && storedDateData.date && storedDateData.time) { 9438 // If we have stored date data, render it immediately 9439 const rendered = renderDeliveryDateFromData(storedDateData); 9440 if (!rendered) { 9441 console.warn('Failed to render stored delivery date, will try fetching from API'); 9442 } 9443 } else { 9444 // No stored data, fetch from API immediately (without waiting for city selection) 9445 console.log('No stored delivery date found, fetching from API immediately...'); 9446 9447 // Show skeleton loader while fetching 9448 showDateSkeleton(); 9449 9450 // Fetch delivery date data from API 9451 try { 9452 const dataDate = await getFetch(`${host}/api/shipping/date?domain=${shop}&productId=7881418965207&source=web`); 9453 console.log('API Response:', dataDate); 9454 9455 if (dataDate?.data?.date && dataDate?.data?.time) { 9456 // Save to localStorage for next time 9457 saveToStorage(dateStorageKey, dataDate.data); 9458 9459 // Render the fetched data 9460 const rendered = renderDeliveryDateFromData(dataDate.data); 9461 if (!rendered) { 9462 console.error('Failed to render delivery date from API response'); 9463 showDeliveryPlaceholder(); 9464 } 9465 } else { 9466 console.error('Invalid delivery date data received from API'); 9467 showDeliveryPlaceholder(); 9468 } 9469 } catch (error) { 9470 console.error('Error fetching delivery date from API:', error); 9471 showDeliveryPlaceholder(); 9472 } 9473 } 9474 9475 // Render address to load cities (after dates are already showing) 9476 await renderAddress(); 9477 9478 // Province and zip code will be loaded when city is selected (not on initial render) 9479 9480 } catch (error) { 9481 console.error('Error initializing delivery options:', error); 9482 9483 // Auto refresh on error after 2 seconds 9484 console.log('Auto refreshing page due to error...'); 9485 setTimeout(() => { 9486 // location.reload(); 9487 }, 2000); 9488 } 9489 } 9490 9491 // Initialize delivery options 9492 initializeDeliveryOptions(); 9493 9494 // Helper function to safely initialize Select2 9495 function initSelect2(selector, options = {}) { 9496 const $element = $(selector); 9497 9498 if ($element.length === 0) { 9499 console.warn('Element not found:', selector); 9500 return; 9501 } 9502 9503 // Check if Select2 is already loaded 9504 if (typeof $.fn.select2 !== 'undefined') {
9505 try { 9506 // Destroy existing select2 instance if any 9507 if ($element.hasClass('select2-hidden-accessible')) { 9508 $element.select2('destroy'); 9509 } 9510 // Initialize select2 with merged options 9511 const defaultOptions = { 9512 minimumResultsForSearch: 0, 9513 width: '100%' 9514 }; 9515 $element.select2(Object.assign({}, defaultOptions, options)); 9516 } catch(e) { 9517 console.error('Error initializing Select2 for', selector, ':', e); 9518 } 9519 } else { 9520 // Wait for Select2 to load 9521 console.log('Waiting for Select2 library to load...'); 9522 let attempts = 0; 9523 const maxAttempts = 50; // 5 seconds max 9524 9525 const checkSelect2 = setInterval(function() { 9526 attempts++; 9527 if (typeof $.fn.select2 !== 'undefined') { 9528 clearInterval(checkSelect2); 9529 try { 9530 // Destroy existing select2 instance if any 9531 if ($element.hasClass('select2-hidden-accessible')) { 9532 $element.select2('destroy'); 9533 } 9534 // Initialize select2 with merged options 9535 const defaultOptions = { 9536 minimumResultsForSearch: 0, 9537 width: '100%' 9538 }; 9539 $element.select2(Object.assign({}, defaultOptions, options)); 9540 } catch(e) { 9541 console.error('Error initializing Select2 for', selector, ':', e); 9542 } 9543 } else if (attempts >= maxAttempts) { 9544 clearInterval(checkSelect2); 9545 console.error('Select2 library failed to load after 5 seconds'); 9546 } 9547 }, 100); // Check every 100ms 9548 } 9549 } 9550 9551 async function insertCard(data) { 9552 const response = await fetch(`${host}/api/card/v2/new`, { 9553 method: "POST", 9554 headers: { 9555 'Content-Type': 'application/json', 9556 }, 9557 body: data 9558 }) 9559 const result = await response.json() 9560 let id = result?.data?.id 9561 $(".greetingCard").attr("data-id", id) 9562 return result 9563 } 9564 9565 async function updateCard(id, data){ 9566 console.log(id, data, 'updateCard') 9567 const response = await fetch(`${host}/api/card/v2/${id}`, { 9568 method: "PUT", 9569 headers: { 9570 'Content-Type': 'application/json', 9571 }, 9572 body: data 9573 }) 9574 console.log(response, 'updateCard') 9575 return response 9576 } 9577 9578 function bytesToSize(bytes) { 9579 var sizes = ['b', 'kb', 'mb', 'gb', 'tb', 'p']; 9580 for (var i = 0; i < sizes.length; i++) { 9581 if (bytes <= 1024) { 9582 return bytes + ' ' + sizes[i]; 9583 } else { 9584 bytes = parseFloat(bytes / 1024).toFixed(2) 9585 } 9586 } 9587 return bytes + ' P'; 9588 } 9589 9590 async function uploadMedia(uri, type) { 9591 nameq = $("#properties-nama-penerima").val() 9592 dear = $("#properties-kartu-nama-penerima").val() 9593 card = $("[data-properties=ucapan]").val() 9594 sender = $("#properties-kartu-nama-pengirim").val() 9595 photo = $("#properties-photo").val() 9596 video = $("#properties-video").val() 9597 status = "Product" 9598 9599 const name = qrID 9600 let formData = new FormData(); 9601 formData.append("file", uri); 9602 const response = await fetch(`${host}/api/upload?name=${name}&type=${type}&r=${randomString(3, '0123456789')}&shop=${shop}`, { 9603 method: "POST", 9604 body: formData 9605 }) 9606 const result = await response.json(); 9607 if(result) { 9608 const url = result.url?.replace('outerbloom/', '') 9609 if(type === 'image/jpeg') { 9610 $("#properties-photo").val(url) 9611 $(".preview-image").show() 9612 $(".remove-image").show() 9613 $(".placeholder-image").hide() 9614 // $(".icon-upload").hide() 9615 photo = url 9616 9617 // Trigger card preview update for photo upload 9618 $(document).trigger('cardDataUpdated') 9619 } else { 9620 $("#properties-video").val(url) 9621 $("#label-input-video span").text("Change File") 9622 $(".case-qrcode-preview p").text("Scan here for a secret message") 9623 $(".remove-media").show() 9624 $("#product-top #product-meta .case-video-preview p").html(`<span class="replace-video" tite="Replace Video">${uri.name} (${bytesToSize(uri.size)})</span><span> is uploaded</span>`) 9625 $("[for=input-video]").hide() 9626 video = url 9627 9628 // Trigger card preview update for video upload 9629 $(document).trigger('cardDataUpdated') 9630 } 9631 $(".case-video-preview").show() 9632 $(".steps-card-preview").removeClass("loading") 9633 // updateCard(nameq, dear, card, sender, photo, video, status) 9634 9635 $(".nextBtn").attr("disabled", false) 9636 } 9637 } 9638 9639 function randomString(length, chars) { 9640 var result = ''; 9641 for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))]; 9642 return result; 9643 } 9644 9645 function getNoteCity(fulldate) { 9646 const h_1 = new Date(new Date().setDate(new Date().getDate() + 1)) 9647 const weekday = ["Min","Sen","Sel","Rab","Kam","Jum","Sab"]; 9648 const monthly = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; 9649 const d = new Date(h_1); 9650 const day = weekday[d.getDay()]; 9651 const dt = d.getDate(); 9652 const mt = monthly[d.getMonth()]; 9653 const yr = d.getFullYear(); 9654 const p = $("#cities").parent(".form-group") 9655 } 9656 9657 function disabledSameDay() { 9658 let btnFirst = $("#deliveryDate").find("button:first-child") 9659 let getDay = new Date().getDay(); 9660 9661 // Check if product has CNY 2026 tag - skip disabling if true 9662 9663 console.log('Product has CNY 2026 tag - skipping same day disable logic'); 9664 return; 9665 9666 9667 9668 9669 if(getDay == 1 || getDay == 2 || getDay == 3 || getDay == 4 || getDay == 5){ 9670 if(hour >= 14.00){ 9671 btnFirst.attr("disabled", true) 9672 } 9673 } else if(getDay == 6){ 9674 if(hour >= 16.00){ 9675 btnFirst.attr("disabled", true) 9676 } 9677 } else if(getDay == 0){ 9678 if(hour >= 16.00){ 9679 btnFirst.attr("disabled", true) 9680 } 9681 } 9682 9683 9684 } 9685 9686 function disabledays(date) { 9687 let ymd = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(); 9688 //if u have to disable a list of day 9689 let removeDays 9690 9691 9692 9693 if ($.inArray(ymd, removeDays) >= 0) { 9694 return [false]; 9695 } else { 9696 let day = date.getDay(); 9697 if(day == 0 && date.getDate() == 13 && date.getMonth() == 1){ 9698 return [(day == 0), '']; 9699 } 9700 9701 9702 return [(day != 0), '']; 9703 } 9704 } 9705 ( function( factory ) { 9706 if ( typeof define === "function" && define.amd ) { 9707 9708 // AMD. Register as an anonymous module. 9709 define( [ "../widgets/datepicker" ], factory ); 9710 } else { 9711 9712 // Browser globals 9713 factory( jQuery.datepicker ); 9714 } 9715 }( function( datepicker ) { 9716 9717 // Check if datepicker object exists before accessing regional property 9718 if (typeof datepicker === 'undefined' || !datepicker) { 9719 return; 9720 } 9721 9722 datepicker.regional.id = { 9723 closeText: "Tutup", 9724 prevText: "<mundur", 9725 nextText: "maju>", 9726 currentText: "Today", 9727 monthNames: [ "January","February","March","April","May","Juny", 9728 "July","August","September","October","November","December" ], 9729 monthNamesShort: [ "Jan","Feb","Mar","Apr","May","Jun", 9730 "Jul","Agu","Sep","Oct","Nov","Dec" ], 9731 dayNames: [ "Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu" ], 9732 dayNamesShort: [ "Sun","Mon","Tue","Wed","Thu","Fri","Sat" ], 9733 dayNamesMin: [ "Mg","Sn","Sl","Rb","Km","jm","Sb" ], 9734 weekHeader: "Mg", 9735 dateFormat: "D, dd M", 9736 firstDay: 0, 9737 isRTL: false, 9738 showMonthAfterYear: false, 9739 yearSuffix: "" }; 9740 datepicker.setDefaults( datepicker.regional.id ); 9741 9742 return datepicker.regional.id; 9743 9744} ) ); 9745 9746 function loadPopup() { 9747 $("#backgroundPopup").fadeIn("slow"); 9748 $(".purchasePopup:not(.purchasePopupSpotify)").fadeIn("slow"); 9749 const firstSection = $(".purchasePopup:not(.purchasePopupSpotify) .sectionPurchase").first() 9750 if(firstSection.hasClass("purchasePersonalize")) { 9751 if(productType !== '') { 9752 console.log("clarity event " + productType + ' personalize') 9753 window.clarity("event", `${productType} cardPersonalization`) 9754 // window.clarity("set", productType, `cardPersonalization - ${productDate}`) 9755 } 9756 } else if (firstSection.hasClass("sectionPurchaseBoard")) { 9757 console.log("clarity event " + productType + ' personalizeBoard') 9758 window.clarity("event", `${productType} personalizeBoard`) 9759 // window.clarity("set", productType, `personalizeBoard - ${productDate}`) 9760 } 9761 firstSection.removeClass("hide") 9762 9763 // Load province and zip code when popup opens 9764 const selectedCity = $("#cities").val(); 9765 const v2 = $('#cities option:selected').attr('data-city'); 9766 const v3 = $('#cities option:selected').attr('data-province'); 9767 9768 if (selectedCity && selectedCity !== '' && selectedCity !== 'Kota Lainnya') { 9769 // Get province 9770 getProvince(selectedCity); 9771 9772 // Load zip codes 9773 console.log('Loading zip codes for:', selectedCity); 9774 $("#zip").html(`<option value="">Postal Code</option>`); 9775 renderZip(selectedCity, v2, v3); 9776 } 9777 9778 // Auto-trigger addon loading when addon section becomes visible 9779 setTimeout(function() { 9780 const addonSection = $(".purchaseAddon") 9781 if(addonSection.length > 0 && !addonSection.hasClass("hide")) { 9782 if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) { 9783 $("[data-addon]").eq(0).trigger("click") 9784 } 9785 } 9786 }, 200) 9787 } 9788 9789 function disablePopup() { 9790 $("#backgroundPopup").fadeOut("slow"); 9791 $(".purchasePopup").fadeOut("slow"); 9792 $("#popupCart").fadeOut("slow"); 9793 } 9794
9795 function scrollTo(parent, div, dur) { 9796 $(parent).animate({ 9797 scrollTop: $(div).offset().top 9798 }, dur); 9799 } 9800 9801 function loadPopupPersonalize() { 9802 // First validate variant metafields 9803 if (typeof validateVariantMetafields === 'function') { 9804 const isValid = validateVariantMetafields(true); 9805 if (!isValid) { 9806 // The validateVariantMetafields function already handles scrolling and focusing 9807 // alert('Please select all required variant options before proceeding.'); 9808 return; // Stop execution if validation fails 9809 } 9810 } 9811 9812 const div = "#purchaseProduct" 9813 const p = "html, body, .product-meta" 9814 $("p.error").remove() 9815 loadItemOccasion($("[data-occassion]").eq(0), "greeting-card-all") 9816 const isCity = $("#cities[required]") 9817 const isDate = $("#propDeliveryDate[required]") 9818 const isTime = $("#propDeliveryTime[required]") 9819 const isTimeDisabled = $("#propDeliveryTime[disabled]") 9820 // loadPopup() 9821 // Check if all required fields are filled, or if time is disabled (for no-deliverytime products) 9822 if(isCity.val() !== '' && isDate.val() !== '' && (isTime.val() !== '' || isTimeDisabled.length > 0)) { 9823 loadPopup() 9824 } 9825 if(isCity.val() == '') { 9826 isCity.parent(".row").append("<p class='error'>Choose delivery city</p>") 9827 scrollTo(p, div, 500) 9828 } 9829 if(isDate.val() == '') { 9830 isDate.parents(".row").append("<p class='error'>Choose delivery date</p>") 9831 scrollTo(p, div, 500) 9832 } 9833 if(isTime.val() == '' && isTimeDisabled.length === 0) { 9834 isTime.parents(".row").append("<p class='error'>Choose delivery time</p>") 9835 scrollTo(p, div, 500) 9836 } 9837 } 9838 9839 function quantityCounter() { 9840 $(document).on("click", ".item-card.selected .q_up", function () { 9841 var C = $(this).attr("data-id"), 9842 S = 9843 parseInt( 9844 $(this) 9845 .siblings(".quantity-cart-" + C) 9846 .val() 9847 ) + 1; 9848 $(this).attr("data-quantity", S), 9849 $(this) 9850 .siblings(".quantity-cart-" + C) 9851 .val(S); 9852 }), 9853 $(document).on("click", ".item-card.selected .q_down", function () { 9854 var C = $(this).attr("data-id"), 9855 S = parseInt( 9856 $(this) 9857 .siblings(".quantity-cart-" + C) 9858 .val() 9859 ); 9860 0 < S && $(this).attr("data-quantity", S - 1), 9861 0 < S && 9862 $(this) 9863 .siblings(".quantity-cart-" + C) 9864 .val(S - 1); 9865 }); 9866 } 9867 9868 quantityCounter() 9869 9870 const itemAddon = $(".item-card").length 9871 const nofree = $(".nofree").length 9872 9873 const upsell = '' 9874 9875 if(nofree === itemAddon) { 9876 // $("#itemAddons").html("<p>No Items available</p>") 9877 } 9878 9879 $("#itemAddons .item-card").each(function(e){ 9880 $("#itemAddons").attr("data-length", e) 9881 }) 9882 9883 // Function to fetch products from collection with fallback 9884 async function fetchAddonProducts(collectionHandle) { 9885 try { 9886 const response = await fetch(`https://outerbloom.com/collections/${collectionHandle}/products.json`); 9887 9888 if (!response.ok) { 9889 throw new Error(`Collection ${collectionHandle} not found`); 9890 } 9891 9892 const data = await response.json(); 9893 9894 // Check if products exist and have items 9895 if (!data.products || data.products.length === 0) { 9896 throw new Error(`No products in collection ${collectionHandle}`); 9897 } 9898 9899 return data.products; 9900 } catch (error) { 9901 console.warn(`Error fetching ${collectionHandle}:`, error.message); 9902 9903 // Fallback to "upsell-all" collection if primary collection fails 9904 if (collectionHandle !== 'upsell-all') { 9905 console.log('Falling back to upsell-all collection...'); 9906 try { 9907 const fallbackResponse = await fetch('https://outerbloom.com/collections/upsell-all/products.json'); 9908 if (fallbackResponse.ok) { 9909 const fallbackData = await fallbackResponse.json(); 9910 return fallbackData.products || []; 9911 } 9912 } catch (fallbackError) { 9913 console.error('Fallback also failed:', fallbackError); 9914 } 9915 } 9916 9917 return []; 9918 } 9919 } 9920 9921 // Function to determine upsell type from product tags 9922 function getUpsellType() { 9923 const productTags = ["Brand_Outerbloom Hampers","card","CNY","CNY 2026","Collection_Heritage","custom-hampers","formdate","icon-card","icon-gift","Inhouse","MonSatParcel","MonSatSiang","no-deliverytime","Parcel","Parcel CNY","Parcel Inhouse","Parcel Nusantara","Pengiriman_Bekasi","Pengiriman_Bogor","Pengiriman_Depok","Pengiriman_Jakarta","Pengiriman_Kota Lainnya","Pengiriman_Tangerang","POO Parcel","ship-paketkecil","takeoutselfpickup","Untuk_Hari Raya","uploadfotocard","upsell-inhouse"]; 9924 const hasBuketUang = productTags.includes('Buket Uang'); 9925 9926 if (hasBuketUang) { 9927 return 'upsell-giftcard'; 9928 } 9929 9930 // Find upsell tag 9931 for (const tag of productTags) { 9932 if (tag.startsWith('upsell-')) { 9933 return tag; 9934 } else if (tag === 'upsell') { 9935 return 'upsell-all'; 9936 } 9937 } 9938 9939 return 'upsell-giftcard'; // Default fallback 9940 } 9941 9942 // Function to render addon products 9943 function renderAddonProducts(products, filterTag) { 9944 const html = []; 9945 9946 for (const product of products) { 9947 const id = product.id; 9948 const variant = product.variants[0]; 9949 const variantId = variant.id; 9950 const img = product.images[0]?.src || ''; 9951 const imgBase = img.split('.jpg')[0]; 9952 const title = product.title; 9953 const price = variant.price; 9954 const tags = product.tags; 9955 const isAvailable = variant.available !== false; 9956 const productType = product.product_type?.toLowerCase()?.replace(/\s+/g, '_') || ''; 9957 9958 // Filter products based on tag 9959 const shouldInclude = filterTag === 'all' || 9960 tags.includes(`upsell-item-${filterTag}`) || 9961 tags.includes('upsell-item-all') || 9962 tags.includes('upsell-item-inhouse'); 9963 9964 if (!shouldInclude) continue; 9965 9966 const priceDisplay = price < 1 ? 'FREE' : rupiah.format(price); 9967 const cardClass = `item-card${price < 1 ? ' free' : ' nofree'} type-${productType}`; 9968 9969 const body = ` 9970 <div class="${cardClass}" data-variant="${variantId}" data-id="${id}" data-qty="${isAvailable ? '' : 0}" data-upsell="${filterTag}" data-tags="${tags}"> 9971 <div class="card-image"> 9972 <img src="${imgBase}_150x.jpg" alt="${title}" width="" height="" /> 9973 </div> 9974 <div class="card-meta"> 9975 <h5>${title}</h5> 9976 <p>${priceDisplay}</p> 9977 <input id="card-${variantId}" type="hidden" name="" value="${variantId}"> 9978 </div> 9979 <div class="card-qty"> 9980 <a data-quantity="1" type="submit" id="q_down-${variantId}" class="btn-qty-min q_down drawer-cart" data-id="${variantId}"> 9981 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="2" viewBox="0 0 12 2" fill="none"> 9982 <path d="M0 1.90869V0.908691H12V1.90869H0Z" fill="black"/> 9983 </svg> 9984 </a> 9985 <input maxlength="3" min="0" class="btn-qty text-center quantity-cart-${variantId}
9985" value="0" data-price="${price}" name="quantity"> 9986 <a data-quantity="1" type="submit" class="btn-qty-plus q_up text-green drawer-cart" data-id="${variantId}"> 9987 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" viewBox="0 0 12 13" fill="none"> 9988 <path d="M0 6.87023V5.94715H5.53846V0.408691H6.46154V5.94715H12V6.87023H6.46154V12.4087H5.53846V6.87023H0Z" fill="black"/> 9989 </svg> 9990 </a> 9991 </div> 9992 </div>`; 9993 9994 html.push(body); 9995 } 9996 9997 return html; 9998 } 9999 10000 // Event handler for addon selection 10001 $("[data-addon]").click(async function() { 10002 const $button = $(this); 10003 const addonType = $button.data("addon") || getUpsellType(); 10004 10005 // Update UI 10006 $("[data-addon]").removeClass("selected"); 10007 $button.addClass("selected"); 10008 10009 // Show loading state 10010 $("#itemAddons .row").html('<p>Loading products...</p>'); 10011 10012 try { 10013 // Fetch products 10014 const products = await fetchAddonProducts(addonType); 10015 10016 if (products.length === 0) { 10017 $("#itemAddons .row").html('<p>No Item available</p>'); 10018 $("#itemAddons").attr("data-length", 0); 10019 return; 10020 } 10021 10022 // Extract filter tag from addon type 10023 const filterTag = addonType.replace('upsell-', ''); 10024 10025 // Render products 10026 const html = renderAddonProducts(products, filterTag); 10027 10028 if (html.length === 0) { 10029 $("#itemAddons .row").html('<p>No Item available</p>'); 10030 } else { 10031 $("#itemAddons .row").html(html.join('')); 10032 } 10033 10034 $("#itemAddons").attr("data-length", html.length); 10035 10036 } catch (error) { 10037 console.error('Error loading addon products:', error); 10038 $("#itemAddons .row").html('<p>Error loading products. Please try again.</p>'); 10039 } 10040 }) 10041 10042 async function isAddon(){ 10043 let ids = [] 10044 $("#itemAddons .item-card.selected").each(function(i, e){ 10045 const id = $(this).data("id") 10046 ids.push(id) 10047 }) 10048 console.log(ids) 10049 return ids 10050 } 10051 10052 $("#itemAddons").delegate(".item-card > div:not(.card-qty)", "click", async function(){ 10053 const t = $(this).parent() 10054 const id = t.data("id") 10055 const btn = t.parents(".purchaseAddon").find(".next-purchase-button") 10056 t.toggleClass("selected"); 10057 //$(this).next("input").toggleAttr('name', 'id[]'); 10058 if (t.hasClass('selected')) { 10059 t.find("input").val(1) 10060 t.find("input").attr('name', 'id[]'); 10061 } else { 10062 t.find("input").val(0) 10063 t.find("input").removeAttr('name'); 10064 } 10065 $("#properties-addons").val(addons) 10066 const is = await isAddon() 10067 if(is.length === 0) { 10068 btn.text("continue without add-ons") 10069 return 10070 } 10071 if(is.includes(8835692069079)) { 10072 btn.text("personalize acrylic frame") 10073 } else { 10074 btn.text("Continue") 10075 } 10076 10077 }) 10078 10079 async function myAddon(data) { 10080 const c = $(".addonsPurchase .addons") 10081 let items = [] 10082 10083 const spotifyAddons = $(".spotifyAddons").find("[data-index]") 10084 // if(spotifyAddons.length > 0) { 10085 // $(spotifyAddons).each(function(i, e){ 10086 // const spotifyLink = $(this).find(".spotifyLink").val() 10087 // const spotifySong = $(this).find(".spotifySong").val() 10088 // const spotifyArtist = $(this).find(".spotifyArtist").val() 10089 // const spotifyFotoAddon = $(this).find(".resultPhotoSpotify").val() 10090 // if(spotifyLink !== '') { 10091 // spotifyAddon = `<div class="addon-item" data-id="46067682607319" data-qty="1"> 10092 // <div class="addon-itm-img"> 10093 // <img src="https://cdn.shopify.com/s/files/1/1589/6833/files/Acrylic-Frame_8c71027d-43b7-4322-a98f-d34ab0456397_100x.jpg?v=1739160467" alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" width="70"/> 10094 // </div> 10095 // <div class="addon-itm-title"> 10096 // <span>[US] Outerbloom Acrylic Frame 4R</span> 10097 // </div> 10098 // <div class="addon-itm-line-total"> 10099 // <span>Rp 99.000</span> 10100 // </div> 10101 // </div> 10102 // <div class="propsAddonSpotify row m-0"> 10103 // <div class="col-12 col-lg-2"></div> 10104 // <div class="col-12 col-lg-10"> 10105 // <p>
10106 // <span>spotify link</span> 10107 // <span class="spotifyLinkAddon">${spotifyLink}</span> 10108 // </p> 10109 // <p> 10110 // <span>uploaded photo</span> 10111 // <span class="spotifyFotoAddon">${spotifyFotoAddon}</span> 10112 // </p> 10113 // <p> 10114 // <span>song / playlist name</span> 10115 // <span class="spotifySongAddon">${spotifySong}</span> 10116 // </p> 10117 // <p> 10118 // <span>artist name</span> 10119 // <span class="spotifyArtistAddon">${spotifyArtist}</span> 10120 // </p> 10121 // </div> 10122 // </div>` 10123 // items.push(spotifyAddon) 10124 // } 10125 // }) 10126 // } 10127 for(let i = 0; i < data.length; i++) { 10128 if(data[i].title !== '[US] Outerbloom Acrylic Frame 4R' ) { 10129 const img = data[i].image 10130 const title = data[i].title 10131 const qty = data[i].qty 10132 const price = data[i].price 10133 const total = Number(qty) * Number(price) 10134 let addons = `<div class="addon-item" data-id="${data[i].id}" data-qty="${qty}"> 10135 <div class="addon-itm-img"> 10136 <img src="${img}" alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" width="70"/> 10137 </div> 10138 <div class="addon-itm-title"> 10139 <span>${title}</span> 10140 </div> 10141 <div class="addon-itm-line-price"> 10142 <span>${rupiah.format(price)}</span> 10143 ${data[i].title == '[US] Outerbloom Acrylic Frame 4R' ? '' : `<span>x${qty}</span>`} 10144 </div> 10145 <div class="addon-itm-line-total"> 10146 <span>${rupiah.format(total)}</span> 10147 </div> 10148 </div>` 10149 items.push(addons) 10150 } 10151 } 10152 c.html(items) 10153 const parent = $(".purchaseAddon") 10154 const next = parent.next(".sectionPurchase") 10155 parent.addClass("hide") 10156 next.removeClass("hide") 10157 // if(items2.length === 0) return $("#popupCart").addClass("no-addon-cart") 10158 // $(".itemAddonCart").find("h4").text(`add-ons (${items2.length})`) 10159 } 10160 10161 async function listAddon() { 10162 const data = $("#itemAddons").find(".selected") 10163 let ids = [] 10164 $(data).each(function(){ 10165 const id = $(this).data("variant") 10166 const image = $(this).find(".card-image img").attr("src") 10167 const title = $(this).find(".card-meta h5").text() 10168 const qty = $(this).find(".card-qty input").val() 10169 const price = $(this).find(".card-qty input").data("price") 10170 ids.push({ 10171 id: Number(id), 10172 image, 10173 title, 10174 qty, 10175 price 10176 }) 10177 }) 10178 myAddon(ids) 10179 } 10180 10181 async function customSpotify(idx, length, type){ 10182 let isCard = false 10183 10184 isCard = true 10185 10186 let p = $(".purchasePopupSpotify") 10187 const preLink = $(".spotifyLinkFirst").val() 10188 $("[data-index]").hide() 10189 p.find(".headerPurchase h3").text(`personalize spotify photo print${length > 1 ? ` - ${idx}` : ''}`) 10190 p.find(".regulerAddons, .purchase-button").hide() 10191 p.find(".spotifyAddons").show() 10192 10193 const data = await trackUrl(preLink) 10194 10195 const html = `<div class="row" data-index=${idx} data-length=${length}><div class="col-12 col-lg-6"><div class="form-vertical position-relative"><div class="form-group mb-4"><h4>upload photo</h4><div class=uploadResult><label class=btn for=uploadPhotoSpotify><svg xmlns="http://www.w3.org/2000/svg" width="13" height="11" viewB
10195ox="0 0 13 11" fill="none"> 10196<path d="M0.875 10.6378H12.375C12.4413 10.6378 12.5049 10.6115 12.5518 10.5646C12.5987 10.5177 12.625 10.4541 12.625 10.3878V0.387817C12.625 0.321513 12.5987 0.257925 12.5518 0.211041C12.5049 0.164157 12.4413 0.137817 12.375 0.137817H0.875C0.808696 0.137817 0.745107 0.164157 0.698223 0.211041C0.651339 0.257925 0.625 0.321513 0.625 0.387817V10.3878C0.625 10.4541 0.651339 10.5177 0.698223 10.5646C0.745107 10.6115 0.808696 10.6378 0.875 10.6378ZM1.125 10.1378V7.31882C1.136 7.31082 1.1485 7.30632 1.1585 7.29632L3.7165 4.73832C3.78198 4.67584 3.869 4.64098 3.9595 4.64098C4.05 4.64098 4.13702 4.67584 4.2025 4.73832L7.963 8.49882C8.00919 8.54501 8.07162 8.5713 8.13694 8.57204C8.20225 8.57279 8.26527 8.54794 8.3125 8.50282L10.2455 6.66682C10.3084 6.60323 10.3938 6.56684 10.4832 6.56543C10.5727 6.56403 10.6591 6.59774 10.724 6.65932L12.125 8.18532L12.1255 8.18582V10.1378H1.125ZM12.125 0.637817V7.44682L11.0845 6.31382C11.0066 6.23514 10.9138 6.17275 10.8116 6.13026C10.7094 6.08777 10.5997 6.06603 10.489 6.06632H10.4885C10.3786 6.06584 10.2697 6.08706 10.168 6.12876C10.0664 6.17046 9.97391 6.23182 9.896 6.30932L8.144 7.97332L4.556 4.38482C4.2365 4.06582 3.6815 4.06632 3.363 4.38482L1.125 6.62332V0.637817H12.125Z" fill="black"/> 10197</svg><span>Upload your file</span></label></div><input class="uploadPhotoSpotify form-control d-none" accept=image/* type=file><input class="resultPhotoSpotify" type="hidden"></div><div class="form-group mb-5"><h4>Add your Spotify link here</h4> <input class="spotifyLink2 form-control spotifyLink" value="${preLink}" placeholder=https://open.spotify.com/ ></div><div class="form-group mb-4 text-left"><label class=checkbox for=isCustomMessage><span>Personalized Message</span><span class=checkmark></span></label></div><div class="form-group mb-4 form-personalize"><label class="text-left d-block mb-2 text-uppercase"for=spotifySong>Song / playlist name</label> ${data?.song ? `<input class="form-control spotifySong" value="${data?.song}">` : '<input class="form-control spotifySong" value="">'}</div><div class="form-group form-personalize"><label class="text-left d-block mb-2 text-uppercase"for=spotifyArtist>Artist name</label> ${data?.artist ? `<input class="form-control spotifyArtist" value="${data?.artist}">` : '<input class="form-control spotifyArtist" value="">'}</div><div class=btn-action><button class="back-spotify"><svg fill=none height=14 viewBox="0 0 15 14"width=15 xmlns=http://www.w3.org/2000/svg><path d="M14.5799 7.41992L2.32992 7.41992L7.57992 12.6699L6.91992 13.4199L0.419922 6.91992L6.91992 0.419922L7.57992 1.16992L2.32992 6.41992L14.5799 6.41992V7.41992Z"fill=black /></svg> <span>Back</span></button><button data-type="${isCard ? 'card' : ''}" ${isCard ? '' : 'id=addtocart-card'} class="text-uppercase btn w-100${type == 'addon' && idx == length ? ' finished' : ' no-addon'}" disabled>${isCard ? 'Continue Personalizing' : 'add to cart'}</button></div></div></div><div class="col-12 col-lg-6 columnRight"><div class=frame-spotify><div class=frameImage><div class=frameImageUploaded><svg xmlns="http://www.w3.org/2000/svg" width="13" height="11" viewB
10197ox="0 0 13 11" fill="none"> 10198<path d="M0.875 10.6378H12.375C12.4413 10.6378 12.5049 10.6115 12.5518 10.5646C12.5987 10.5177 12.625 10.4541 12.625 10.3878V0.387817C12.625 0.321513 12.5987 0.257925 12.5518 0.211041C12.5049 0.164157 12.4413 0.137817 12.375 0.137817H0.875C0.808696 0.137817 0.745107 0.164157 0.698223 0.211041C0.651339 0.257925 0.625 0.321513 0.625 0.387817V10.3878C0.625 10.4541 0.651339 10.5177 0.698223 10.5646C0.745107 10.6115 0.808696 10.6378 0.875 10.6378ZM1.125 10.1378V7.31882C1.136 7.31082 1.1485 7.30632 1.1585 7.29632L3.7165 4.73832C3.78198 4.67584 3.869 4.64098 3.9595 4.64098C4.05 4.64098 4.13702 4.67584 4.2025 4.73832L7.963 8.49882C8.00919 8.54501 8.07162 8.5713 8.13694 8.57204C8.20225 8.57279 8.26527 8.54794 8.3125 8.50282L10.2455 6.66682C10.3084 6.60323 10.3938 6.56684 10.4832 6.56543C10.5727 6.56403 10.6591 6.59774 10.724 6.65932L12.125 8.18532L12.1255 8.18582V10.1378H1.125ZM12.125 0.637817V7.44682L11.0845 6.31382C11.0066 6.23514 10.9138 6.17275 10.8116 6.13026C10.7094 6.08777 10.5997 6.06603 10.489 6.06632H10.4885C10.3786 6.06584 10.2697 6.08706 10.168 6.12876C10.0664 6.17046 9.97391 6.23182 9.896 6.30932L8.144 7.97332L4.556 4.38482C4.2365 4.06582 3.6815 4.06632 3.363 4.38482L1.125 6.62332V0.637817H12.125Z" fill="black"/> 10199</svg> <img src="" class=previewImage style=display:none></div></div><div class=frameControl><div class=spotifyData>${data?.song ? `<h3>${data?.song}</h3>` : '<h3><h3>'}${data?.artist ? `<p>${data?.artist}</p>` : '<p></p>'}</div><img src="https://outerbloom.com/cdn/shop/t/138/assets/frame-spotify.png?v=138221849636560654691752652420"alt="spotify outerbloom" height=""width=100%><div class=spotifyCode><img src="https://scannables.scdn.co/uri/plain/png/FFFFFF/black/640/spotify:${data?.type.slice(0, -1)}:${data?.trackId}"alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap"></div></div></div></div></div>` 10200 // console.log(html) 10201 10202 $(".spotifyAddons").append(html) 10203 10204 $(`[data-index=${idx}]`).show() 10205 10206 if (preLink !== '') { 10207 $(".btn-action .btn").attr("disabled", false) 10208 } else { 10209 $(".btn-action .btn").attr("disabled", true) 10210 } 10211 10212 return html 10213 10214 } 10215 10216 $(".spotifyLinkFirst").keyup(async function(){ 10217 const v = $(this).val() 10218 if(v.includes('spotify:user:spotify')) { 10219 const correct = v.split('user:spotify:')[1] 10220 console.log(correct, 'BNER') 10221 $(this).val(correct) 10222 return 10223 } 10224 if(v.includes("spotify:") || v.includes("https://open.spotify.com/")){ 10225 const data = await trackUrl(v) 10226 if(!data || !data.status) { 10227 $(this).parent().addClass("error") 10228 // $(this).parent().append(`<p class="txt-error">Make sure you copy the complete and correct link from Spotify. Ex: https://open.spotify.com/track/0C3xZJueyBvvMSsl0cETA6</p>`) 10229 $("#personalizeBtnSpotify .btn").attr("disabled", true) 10230 return 10231 } 10232 $(this).parent().removeClass("error") 10233 // $(this).parent().remove("txt-error") 10234 $("#personalizeBtnSpotify .btn").attr("disabled", false) 10235 } else { 10236 $("#personalizeBtnSpotify .btn").attr("disabled", true) 10237 } 10238 }) 10239 10240 $(".purchaseAddon").delegate(".next-addon", "click", async function(){ 10241 const parent = $(this).parents(".purchaseAddon") 10242 const next = parent.next(".sectionPurchase") 10243 10244 // Check if there's no next section, proceed directly to addToCart 10245 if(next.length === 0 || !next.hasClass("sectionPurchase")) { 10246 await addToCart() 10247 return 10248 } 10249 10250 if(next.hasClass("purchaseAddress")) { 10251 if(productType !== '') { 10252 console.log("clarity event " + productType + ' purchaseDelivery') 10253 window.clarity("event", `${productType} purchaseDelivery`) 10254 // window.clarity("set", productType, `purchaseDelivery - ${productDate}`) 10255 } 10256 10257 // Check if Kota Pengiriman is "Kota Lainnya" 10258 const kotaPengiriman = $("#cities").val() 10259 if(kotaPengiriman === 'Kota Lainnya') { 10260 // Skip address form and go directly to addToCart 10261 await addToCart() 10262 return 10263 } 10264 } 10265 const data = $("#itemAddons").find(".selected") 10266 const length = $(".quantity-cart-46067682607319").val() 10267 const checked = data.length; 10268 if(checked > 0) { 10269 if(length > 0) { 10270 $(".purchaseAddon").addClass("purchaseAddonSpotify") 10271 customSpotify(1, length, 'addon') 10272 } else { 10273 listAddon() 10274 } 10275 } else { 10276 parent.addClass("hide") 10277 next.removeClass("hide") 10278 } 10279 }) 10280 10281 $("#personalizeBtnSpotify .btn").click(async function(){ 10282 // First validate variant metafields 10283 if (typeof validateVariantMetafields === 'function') { 10284 const isValid = validateVariantMetafields(true); 10285 if (!isValid) { 10286 // The validateVariantMetafields function already handles scrolling and focusing 10287 alert('Please select all required variant options before proceeding.'); 10288 return; // Stop execution if validation fails 10289 } 10290 } 10291 10292 const isCity = $("#cities[required]") 10293 const isDate = $("#propDeliveryDate[required]") 10294 if((isDate.length > 0 && isCity.length > 0) && (isCity.val() === '' || isDate.val() === '')) { 10295 alert('Please choose Delivery City & Delivery Date') 10296 return 10297 } 10298 const data = await customSpotify(1, 1, 'product') 10299 if(data) { 10300 $("#backgroundPopup").fadeIn("slow"); 10301 $(".purchasePopupSpotify").fadeIn("slow"); 10302 10303 if(productType !== '') { 10304 console.log("clarity event " + productType + ' spotify') 10305 window.clarity("event", `${productType} spotify`) 10306 // window.clarity("set", productType, `purchaseDelivery - ${productDate}`) 10307 } 10308 } 10309 }) 10310 10311 function formatBytes(bytes, decimals = 2) { 10312 if (!+bytes) return '0 Bytes' 10313
10314 const k = 1024 10315 const dm = decimals < 0 ? 0 : decimals 10316 const sizes = ['B', 'KB', 'MB'] 10317 10318 const i = Math.floor(Math.log(bytes) / Math.log(k)) 10319 10320 return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}` 10321 } 10322 10323 async function trackUrl(link){ 10324 try { 10325 let trackId = link.split('/').pop().split('?')[0]; 10326 let type = '' 10327 if(link.includes("spotify:")) { 10328 const uri = link.split('spotify:')[1] 10329 trackId = uri.split(':')[1] 10330 type = uri.split(':')[0] + 's' 10331 } else { 10332 if(link.match('track')){ 10333 type = 'tracks' 10334 } else if(link.match('playlist')) { 10335 type = 'playlists' 10336 } else if(link.match('artist')) { 10337 type = 'artists' 10338 } else if(link.match('album')) { 10339 type = 'albums' 10340 } 10341 } 10342 console.log(`${host}/api/spotify/${type}/${trackId}`) 10343 const data = await getFetch(`${host}/api/spotify/${type}/${trackId}`) 10344 console.log(data, 'DATA') 10345 const song = data?.data?.name 10346 const artist = data?.data?.artist 10347 return { 10348 song, artist, type, trackId, status: data.status 10349 } 10350 } catch(err) { 10351 console.log(err) 10352 } 10353 } 10354 10355 $(".spotifyAddons").delegate(".uploadPhotoSpotify", "change", async function(){ 10356 const parent = $(this).parents("[data-index]") 10357 const preview = parent.find(".previewImage") 10358 const file = $(this)[0].files[0]; 10359 if (file) { 10360 const reader = new FileReader(); 10361 reader.onload = async function(e) { 10362 parent.find(".uploadResult label").hide() 10363 parent.find(".uploadedResult").remove() 10364 parent.find(".uploadResult").append(`<div class="uploadedResult d-flex" style="justify-content: space-between"> 10365 <p style="text-align: left;margin: 0;"><span style="color: #34C759;font-style: italic;font-size: 14px;text-overflow: ellipsis;overflow: hidden;max-width: 250px;white-space: nowrap;display: inline-block;vertical-align: middle;">${file.name}</span><span style="font-size: 14px;color: #34C759"> (${formatBytes(file.size)})</span> <span style="font-size: 14px">is uploaded</span></p> 10366 <div style="align-self: center"><span class="changeUpload" style="font-size: 12px;cursor: pointer">Change</span><span class="removeUpload" style="cursor: pointer;border-left: 1px solid;padding-left: 10px;margin-left: 10px;height: 10px;display: inline-flex;vertical-align: middle;">
10366<svg fill="none" height="11" viewBox="0 0 10 11" width="10" xmlns="http://www.w3.org/2000/svg"> 10367 <path d="M2.07799 10.8332C1.78154 10.8332 1.52799 10.7276 1.31732 10.5165C1.10666 10.3054 1.0011 10.0523 1.00066 9.75716V1.49982H0.667322C0.572656 1.49982 0.493545 1.46782 0.429989 1.40382C0.366433 1.33982 0.334433 1.26049 0.333989 1.16582C0.333544 1.07116 0.365545 0.992047 0.429989 0.928491C0.494433 0.864935 0.573545 0.833158 0.667322 0.833158H3.00066C3.00066 0.69538 3.05177 0.57538 3.15399 0.473158C3.25621 0.370935 3.37621 0.319824 3.51399 0.319824H6.48732C6.6251 0.319824 6.7451 0.370935 6.84732 0.473158C6.94954 0.57538 7.00066 0.69538 7.00066 0.833158H9.33399C9.42866 0.833158 9.50777 0.865158 9.57132 0.929158C9.63488 0.993158 9.66688 1.07249 9.66732 1.16716C9.66777 1.26182 9.63577 1.34094 9.57132 1.40449C9.50688 1.46805 9.42777 1.49982 9.33399 1.49982H9.00066V9.75649C9.00066 10.0525 8.8951 10.3058 8.68399 10.5165C8.47288 10.7272 8.21954 10.8327 7.92399 10.8332H2.07799ZM8.33399 1.49982H1.66732V9.75649C1.66732 9.87605 1.70577 9.97427 1.78266 10.0512C1.85954 10.128 1.95799 10.1665 2.07799 10.1665H7.92399C8.04354 10.1665 8.14177 10.128 8.21866 10.0512C8.29554 9.97427 8.33399 9.87605 8.33399 9.75649V1.49982ZM3.87266 8.83316C3.96732 8.83316 4.04666 8.80116 4.11066 8.73716C4.17466 8.67316 4.20643 8.59405 4.20599 8.49982V3.16649C4.20599 3.07182 4.17399 2.99271 4.10999 2.92916C4.04599 2.8656 3.96666 2.8336 3.87199 2.83316C3.77732 2.83271 3.69821 2.86471 3.63466 2.92916C3.5711 2.9936 3.53932 3.07271 3.53932 3.16649V8.49982C3.53932 8.59449 3.57132 8.6736 3.63532 8.73716C3.69932 8.80116 3.77843 8.83316 3.87266 8.83316ZM6.12932 8.83316C6.22399 8.83316 6.3031 8.80116 6.36666 8.73716C6.43021 8.67316 6.46199 8.59405 6.46199 8.49982V3.16649C6.46199 3.07182 6.42999 2.99271 6.36599 2.92916C6.30199 2.86516 6.22288 2.83316 6.12866 2.83316C6.03399 2.83316 5.95466 2.86516 5.89066 2.92916C5.82666 2.99316 5.79488 3.07227 5.79532 3.16649V8.49982C5.79532 8.59449 5.82732 8.6736 5.89132 8.73716C5.95532 8.80071 6.03466 8.83271 6.12932 8.83316Z"fill=#757575 /> 10368</svg> 10369</span></div></div>`) 10370 parent.find(".frameImageUploaded svg").hide() 10371 parent.find(".frameImage").addClass("uploaded") 10372 preview.attr("src", e.target.result); 10373 preview.show(); 10374 let formData = new FormData(); 10375 formData.append("file", file); 10376 const response = await fetch(`${host}/api/upload?name=${file.name}&type=image/jpeg&r=${Date.parse(new Date)}&shop=${shop}`, { 10377 method: "POST", 10378 body: formData 10379 }) 10380 const result = await response.json(); 10381 if(result){ 10382 parent.find(".resultPhotoSpotify").val(result.url) 10383 } 10384 } 10385 10386 reader.readAsDataURL(file); 10387 } else { 10388 preview.hide(); 10389 } 10390 }); 10391 10392 $(".spotifyAddons").delegate(".uploadResult", "click", function(){ 10393 $(this).next("input[type=file]").trigger("click") 10394 }) 10395 10396 $(".spotifyAddons").delegate(".changeUpload", "click", function(){ 10397 $(this).parents("input[type=file]").trigger("click") 10398 }) 10399 10400 $(".spotifyAddons").delegate(".removeUpload", "click", function(){ 10401 const parent = $(this).parents("[data-index]") 10402 parent.find(".uploadPhotoSpotify").val("") 10403 parent.find(".uploadResult label").show() 10404 parent.find(".uploadedResult").remove() 10405 parent.find(".frameImageUploaded svg").show() 10406 parent.find(".previewImage").hide() 10407 parent.find(".frameImage").removeClass("uploaded") 10408 }) 10409 10410 $(".spotifyAddons").delegate("label.checkbox", "click", function(){ 10411 const parent = $(this).parents("[data-index]") 10412 parent.toggleClass("checked") 10413 }) 10414 10415 $(".spotifyAddons").delegate(".spotifyLink", "change", async function(){ 10416 const parent = $(this).parents("[data-index]") 10417 const link = $(this).val() 10418 const data = await trackUrl(link) 10419 10420 console.log(data) 10421 10422 if(data.song) { 10423 parent.find(".spotifySong").val(data.song) 10424 parent.find(".spotifyData").find("h3").text(data.song) 10425 } 10426 if(data.artist) { 10427 parent.find(".spotifyArtist").val(data.artist) 10428 parent.find(".spotifyData").find("p").text(data.artist) 10429 } 10430 parent.find(".spotifyCode img").attr("src", `https://scannables.scdn.co/uri/plain/png/FFFFFF/black/640/spotify:${data.type.slice(0, -1)}:${data.trackId}`) 10431 // https://scannables.scdn.co/uri/plain/png/FFFFFF/black/640/spotify:track:1er51HCEBhIAtoEemKuC3M 10432 if (data.status === true) { 10433 parent.find(".btn-action .btn").attr("disabled", false) 10434 } else { 10435 parent.find(".btn-action .btn").attr("disabled", true) 10436 } 10437 }) 10438
10439 $(".spotifyAddons").delegate(".spotifySong", "keyup", async function(){ 10440 const parent = $(this).parents("[data-index]") 10441 const v = $(this).val() 10442 parent.find(".spotifyData h3").text(v) 10443 }) 10444 10445 $(".spotifyAddons").delegate(".spotifyArtist", "keyup", async function(){ 10446 const parent = $(this).parents("[data-index]") 10447 const v = $(this).val() 10448 parent.find(".spotifyData p").text(v) 10449 }) 10450 10451 $(".spotifyAddons").delegate(".btn-action .btn:not(.no-addon)", "click", async function(){ 10452 const parent = $(this).parents("[data-index]") 10453 const length = parent.data("length") 10454 const index = parent.data("index") 10455 const indexNext = Number(index) + 1 10456 customSpotify(indexNext, length, 'addon') 10457 }) 10458 10459 10460 $(".spotifyAddons").delegate(".btn-action .btn.finished", "click", async function(){ 10461 const parent = $(this).parents(".purchaseAddon") 10462 const next = parent.next(".sectionPurchase") 10463 parent.addClass("hide") 10464 next.removeClass("hide") 10465 next.find(".purchase-button").show() 10466 listAddon() 10467 }) 10468 10469 $(".spotifyAddons").delegate(".back-spotify", "click", async function(){ 10470 const t = $(this).parents("[data-index]") 10471 const parent = $(this).parents(".sectionPurchase") 10472 const current = t.data("index") 10473 const prevCurrent = Number(current) - 1 10474 if(current == 1) { 10475 parent.removeClass("purchaseAddonSpotify") 10476 parent.find(".purchase-button").show() 10477 parent.find(".headerPurchase h3").text("Make It More Special with Add-Ons!") 10478 $(".spotifyAddons").empty() 10479 $(".regulerAddons").show() 10480 return 10481 } 10482 t.hide() 10483 t.prev("[data-index]").show() 10484 t.remove() 10485 parent.find(".headerPurchase h3").text(`personalize spotify photo print - ${prevCurrent}`) 10486 }) 10487 10488 $("#personalizeBtn .btn").click(async function() { 10489 loadPopupPersonalize() 10490 }); 10491 10492 $(".sectionPurchaseSpotify").delegate(".btn[data-type=card]", "click", function(){ 10493 $(".sectionPurchaseSpotify").hide() 10494 loadPopupPersonalize() 10495 }) 10496 10497 $(".close-purchase-popup").click(function() { 10498 disablePopup(); 10499 }); 10500 $("#backgroundPopup").click(function() { 10501 // disablePopup(); 10502 }); 10503 10504 $("#popupCart .close-purchase-popup").click(function() { 10505 location.reload() 10506 }); 10507 10508 $('#popupCart').on('hide.bs.modal', function (e) { 10509 location.reload() 10510 }) 10511 10512 $(".next-card").click(function(){ 10513 const parent = $(this).parents(".sectionPurchase") 10514 const next = parent.next(".sectionPurchase") 10515 parent.addClass("hide") 10516 next.removeClass("hide") 10517 }) 10518 10519 $(".back-purchase-button").click(function(){ 10520 const parent = $(this).parents(".sectionPurchase") 10521 const prev = parent.prev(".sectionPurchase") 10522 parent.addClass("hide") 10523 prev.removeClass("hide") 10524 }) 10525 10526 $(document).keypress(function(e) { 10527 if (e.keyCode == 27 && popupStatus == 1) { 10528 disablePopup(); 10529 } 10530 }); 10531 10532 const parentImg = $(".case-img-preview") 10533 const parentVid = $(".case-video-preview") 10534
10535 // Image Editor Variables 10536 let currentImageFile = null; 10537 let cropper = null; 10538 let originalImageSize = { width: 0, height: 0 }; 10539 10540 // Utility function to format file size 10541 function formatImageSize(width, height) { 10542 return `${width} à ${height}px`; 10543 } 10544 10545 // Utility function to estimate file size in bytes 10546 function estimateFileSize(width, height, quality = 0.9) { 10547 // Base calculation: assume ~3 bytes per pixel for JPEG at 90% quality 10548 const baseSize = width * height * 3; 10549 10550 // Apply quality factor (90% quality typically results in ~30-40% compression) 10551 const compressionFactor = quality === 0.9 ? 0.35 : (1 - quality) * 0.5 + 0.2; 10552 10553 const estimatedSize = Math.round(baseSize * compressionFactor); 10554 10555 // Format to human readable 10556 if (estimatedSize < 1024) { 10557 return `${estimatedSize} B`; 10558 } else if (estimatedSize < 1024 * 1024) { 10559 return `${(estimatedSize / 1024).toFixed(1)} KB`; 10560 } else { 10561 return `${(estimatedSize / (1024 * 1024)).toFixed(1)} MB`; 10562 } 10563 } 10564 10565 // Update image size information 10566 function updateImageSizeInfo() { 10567 if (!cropper) return; 10568 10569 const imageData = cropper.getImageData(); 10570 const cropBoxData = cropper.getCropBoxData(); 10571 const canvasData = cropper.getCanvasData(); 10572 10573 // Calculate the scale factor between natural image size and displayed size 10574 const scaleFactorX = originalImageSize.width / imageData.naturalWidth; 10575 const scaleFactorY = originalImageSize.height / imageData.naturalHeight; 10576 10577 // Calculate the actual output size based on crop box and scale factor 10578 const outputWidth = Math.round((cropBoxData.width / canvasData.width) * imageData.naturalWidth); 10579 const outputHeight = Math.round((cropBoxData.height / canvasData.height) * imageData.naturalHeight); 10580 10581 // Update display 10582 document.getElementById('originalSize').textContent = 10583 `Original: ${formatImageSize(originalImageSize.width, originalImageSize.height)}`; 10584 document.getElementById('newSize').textContent = 10585 `New: ${formatImageSize(outputWidth, outputHeight)}`; 10586 } 10587 10588 // Initialize Image Editor Popup 10589 function initImageEditor() { 10590 const editorHTML = ` 10591 <div id="imageEditorPopup" class="image-editor-popup"> 10592 <div class="image-editor-overlay"></div> 10593 <div class="image-editor-modal"> 10594 <div class="image-editor-header"> 10595 <h3>Edit Image</h3> 10596 <button class="close-editor" type="button">×</button> 10597 </div> 10598 <div class="image-editor-content"> 10599 <div class="image-editor-canvas"> 10600 <img id="imageToEdit" src="" alt="Image to edit"> 10601 </div> 10602 <div class="image-editor-controls"> 10603 <div class="control-group"> 10604 <label>Crop Aspect Ratio:</label> 10605 <select id="aspectRatio"> 10606 <option value="free">Free</option> 10607 <option value="1">1:1 (Square)</option> 10608 <option value="1.33">4:3</option> 10609 <option value="1.77">16:9</option> 10610 <option value="0.75">3:4 (Portrait)</option> 10611 </select> 10612 </div> 10613 <div class="control-group"> 10614 <label>Image Size:</label> 10615 <div id="imageSizeInfo"> 10616 <span id="originalSize">Original: -</span> 10617 <span id="newSize">New: -</span> 10618 </div> 10619 </div> 10620 <div class="control-group"> 10621 <button type="button" id="rotateLeft">⺠Rotate Left</button> 10622 <button type="button" id="rotateRight">â» Rotate Right</button> 10623 <button type="button" id="flipH">â· Flip H</button> 10624 <button type="button" id="flipV">â± Flip V</button> 10625 </div> 10626 <div class="control-group"> 10627 <button type="button" id="resetImage">Reset</button> 10628 <button type="button" id="cropImage">Apply Crop</button> 10629 </div> 10630 </div> 10631 </div> 10632 <div class="image-editor-footer"> 10633 <button type="button" class="btn-cancel">Cancel</button> 10634 <button type="button" class="btn-save">Save Changes</button> 10635 </div> 10636 </div> 10637 </div>`; 10638 10639 if (!document.getElementById('imageEditorPopup')) { 10640 document.body.insertAdjacentHTML('beforeend', editorHTML); 10641 initImageEditorEvents(); 10642 } 10643 } 10644 10645 // Initialize Image Editor Events 10646 function initImageEditorEvents() { 10647 const popup = document.getElementById('imageEditorPopup'); 10648 const imageToEdit = document.getElementById('imageToEdit'); 10649 10650 // Close editor events 10651 popup.querySelector('.close-editor').onclick = closeImageEditor; 10652 popup.querySelector('.btn-cancel').onclick = closeImageEditor; 10653 popup.querySelector('.image-editor-overlay').onclick = closeImageEditor; 10654 10655 // Save edited image 10656 popup.querySelector('.btn-save').onclick = saveEditedImage; 10657 10658 // Aspect ratio change 10659 document.getElementById('aspectRatio').onchange = function() { 10660 if (cropper) { 10661 const value = this.value; 10662 cropper.setAspectRatio(value === 'free' ? NaN : parseFloat(value)); 10663 updateImageSizeInfo(); 10664 } 10665 }; 10666 10667 // Rotation and flip controls 10668 document.getElementById('rotateLeft').onclick = () => { 10669 if (cropper) { 10670 cropper.rotate(-90); 10671 updateImageSizeInfo(); 10672 } 10673 }; 10674 document.getElementById('rotateRight').onclick = () => { 10675 if (cropper) { 10676 cropper.rotate(90); 10677 updateImageSizeInfo(); 10678 } 10679 }; 10680 document.getElementById('flipH').onclick = () => { 10681 if (cropper) { 10682 cropper.scaleX(-cropper.getImageData().scaleX); 10683 updateImageSizeInfo(); 10684 } 10685 }; 10686 document.getElementById('flipV').onclick = () => { 10687 if (cropper) { 10688 cropper.scaleY(-cropper.getImageData().scaleY); 10689 updateImageSizeInfo(); 10690 } 10691 }; 10692 10693 // Reset image 10694 document.getElementById('resetImage').onclick = function() { 10695 if (cropper) { 10696 cropper.reset(); 10697 updateImageSizeInfo(); 10698 } 10699 }; 10700 10701 // Apply crop 10702 document.getElementById('cropImage').onclick = function() { 10703 if (cropper) { 10704 const croppedCanvas = cropper.getCroppedCanvas(); 10705 cropper.replace(croppedCanvas.toDataURL()); 10706 updateImageSizeInfo(); 10707 } 10708 }; 10709 } 10710 10711 // Open Image Editor 10712 function openImageEditor(file) { 10713 currentImageFile = file; 10714 const popup = document.getElementById('imageEditorPopup'); 10715 const imageToEdit = document.getElementById('imageToEdit'); 10716 10717 const reader = new FileReader(); 10718 reader.onload = function(e) { 10719 imageToEdit.src = e.target.result; 10720 10721 // Add show class with slight delay for smooth animation 10722 setTimeout(() => { 10723 popup.classList.add('show'); 10724 }, 10); 10725 10726 // Initialize Cropper.js 10727 if (cropper) { 10728 cropper.destroy(); 10729 } 10730 10731 // Load Cropper.js if not already loaded 10732 if (typeof Cropper === 'undefined') { 10733 loadCropperJS().then(() => { 10734 initCropper(); 10735 }); 10736 } else { 10737 initCropper(); 10738 } 10739 };
10740 reader.readAsDataURL(file); 10741 } 10742 10743 // Initialize Cropper 10744 function initCropper() { 10745 const imageToEdit = document.getElementById('imageToEdit'); 10746 10747 cropper = new Cropper(imageToEdit, { 10748 aspectRatio: NaN, 10749 viewMode: 1, 10750 dragMode: 'move', 10751 autoCropArea: 1, 10752 responsive: true, 10753 background: false, 10754 guides: true, 10755 center: true, 10756 highlight: false, 10757 cropBoxMovable: true, 10758 cropBoxResizable: true, 10759 toggleDragModeOnDblclick: false, 10760 ready: function() { 10761 // Store original image size when cropper is ready 10762 const imageData = this.cropper.getImageData(); 10763 originalImageSize.width = imageData.naturalWidth; 10764 originalImageSize.height = imageData.naturalHeight; 10765 10766 // Update size info when cropper is ready 10767 updateImageSizeInfo(); 10768 }, 10769 crop: function() { 10770 // Update size info on crop change 10771 updateImageSizeInfo(); 10772 } 10773 }); 10774 } 10775 10776 // Load Cropper.js library 10777 function loadCropperJS() { 10778 return new Promise((resolve, reject) => { 10779 if (typeof Cropper !== 'undefined') { 10780 resolve(); 10781 return; 10782 } 10783 10784 // Load CSS 10785 const cssLink = document.createElement('link'); 10786 cssLink.rel = 'stylesheet'; 10787 cssLink.href = 'https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.css'; 10788 document.head.appendChild(cssLink); 10789 10790 // Load JS 10791 const script = document.createElement('script'); 10792 script.src = 'https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.js'; 10793 script.onload = resolve; 10794 script.onerror = reject; 10795 document.head.appendChild(script); 10796 }); 10797 } 10798 10799 // Close Image Editor 10800 function closeImageEditor() { 10801 const popup = document.getElementById('imageEditorPopup'); 10802 10803 // Remove show class for animation 10804 popup.classList.remove('show'); 10805 10806 if (cropper) { 10807 cropper.destroy(); 10808 cropper = null; 10809 } 10810 10811 // Reset variables 10812 currentImageFile = null; 10813 originalImageSize = { width: 0, height: 0 }; 10814 10815 // Reset size display 10816 document.getElementById('originalSize').textContent = 'Original: -'; 10817 document.getElementById('newSize').textContent = 'New: -'; 10818 } 10819 10820 // Save Edited Image 10821 function saveEditedImage() { 10822 if (!cropper) return; 10823 10824 // Get cropped canvas without any scaling - keep original dimensions 10825 const canvas = cropper.getCroppedCanvas({ 10826 imageSmoothingEnabled: true, 10827 imageSmoothingQuality: 'high', 10828 }); 10829 10830 canvas.toBlob(function(blob) { 10831 // Create new file from edited image 10832 const editedFile = new File([blob], currentImageFile.name, { 10833 type: 'image/jpeg', 10834 lastModified: Date.now() 10835 }); 10836 10837 // Close editor 10838 closeImageEditor(); 10839 10840 // Process the edited image 10841 processEditedImage(editedFile); 10842 }, 'image/jpeg', 0.9); 10843 } 10844 10845 // Process Edited Image 10846 function processEditedImage(file) { 10847 const reader = new FileReader(); 10848 reader.onload = function(e) { 10849 // Show loader on preview area 10850 $('.steps-card-preview').addClass('loading-upload'); 10851 $('.ajax-loader').show(); 10852 10853 $('.placeholder-image').hide(); 10854 $('.icon-upload').hide(); 10855 $('.preview-image').show(); 10856 $('.remove-image').show(); 10857 $('.preview-image').attr('src', e.target.result); 10858 10859 10860 // Start upload process with edited image 10861 uploadMedia(file, 'image/jpeg').then(() => { 10862 $('.ajax-loader').hide(); 10863 $('.steps-card-preview').removeClass('loading-upload loading'); 10864 $(".nextBtn").attr("disabled", false); 10865 }).catch((error) => { 10866 $('.ajax-loader').hide(); 10867 $('.steps-card-preview').removeClass('loading-upload loading'); 10868 console.error('Upload failed:', error); 10869 }); 10870 10871 }; 10872 reader.readAsDataURL(file); 10873 } 10874 10875 function readURL(input) { 10876 if (input.files && input.files[0]) { 10877 const file = input.files[0]; 10878 10879 // Check if it's an image file 10880 if (file.type.startsWith('image/')) { 10881 // Validate image file size 10882 if (file.size > 5242880) { 10883 alert('File size exceeds maximum limit 5 MB'); 10884 return; 10885 } 10886 10887 // Initialize image editor if not already done 10888 initImageEditor(); 10889 10890 // Open image editor for editing 10891 openImageEditor(file); 10892 } else if (file.type.match('video/')) { 10893 // Handle video upload normally 10894 if (file.size > 15728640) { 10895 alert('File size exceeds maximum limit 15 MB'); 10896 return; 10897 } 10898 10899 let reader = new FileReader(); 10900 reader.onload = function (e) { 10901 $(".nextBtn").attr("disabled", true); 10902 $(".steps-card-preview").addClass("loading"); 10903 10904 10905 uploadMedia(file, 'video/mp4').then(() => { 10906 $('.steps-card-preview').removeClass('loading'); 10907 $(".nextBtn").attr("disabled", false); 10908 }).catch((error) => { 10909 $('.steps-card-preview').removeClass('loading'); 10910 console.error('Upload failed:', error); 10911 }); 10912 10913 };
10914 reader.readAsDataURL(file); 10915 } else { 10916 alert('Please select a valid image or video file.'); 10917 } 10918 } 10919 } 10920 10921 async function readURLPapan(input) { 10922 if (input.files && input.files[0]) { 10923 let reader = new FileReader(); 10924 10925 reader.onload = function (e) { 10926 $('.btn-upload-papan').siblings('label').hide(); 10927 $('.btn-upload-papan img').attr('src', e.target.result); 10928 $('.btn-upload-papan img').show(); 10929 $('.svgLogoPapan').hide(); 10930 10931 // Show loader during upload 10932 $('.btn-upload-papan').addClass('loading-upload'); 10933 $('.ajax-loader').show(); 10934 } 10935 10936 const type = 'image/jpeg' 10937 const name = `logo-7881418965207-${Date.parse(new Date())}` 10938 10939 try { 10940 let formData = new FormData(); 10941 formData.append("file", input.files[0]); 10942 const response = await fetch(`${host}/api/upload?name=${name}&type=${type}&r=${randomString(3, '0123456789')}&shop=${shop}`, { 10943 method: "POST", 10944 body: formData 10945 }) 10946 const result = await response.json(); 10947 if(result) { 10948 const url = result.url 10949 $("[data-properties=papan-logo]").val(url) 10950 } 10951 10952 // Hide loader after upload completes 10953 $('.btn-upload-papan').removeClass('loading-upload'); 10954 $('.ajax-loader').hide(); 10955 } catch (error) { 10956 // Hide loader on error 10957 $('.btn-upload-papan').removeClass('loading-upload'); 10958 $('.ajax-loader').hide(); 10959 console.error('Upload failed:', error); 10960 } 10961 10962 reader.readAsDataURL(input.files[0]); 10963 } 10964 } 10965 10966 async function readURLAddress(input) { 10967 console.log(input, 'readURLAddress') 10968 if (input.files && input.files[0]) { 10969 let reader = new FileReader(); 10970 10971 reader.onload = function (e) { 10972 $('.photo-address').attr('src', e.target.result); 10973 $('.photo-address').show(); 10974 10975 // Show loader during upload 10976 $('.photo-address').parent().addClass('loading-upload'); 10977 $('.ajax-loader').show(); 10978 } 10979 10980 const type = 'image/jpeg' 10981 const name = input.files[0].name?.split('.')[0] 10982 10983 try { 10984 let formData = new FormData(); 10985 formData.append("file", input.files[0]); 10986 const response = await fetch(`${host}/api/upload?name=${name}&type=${type}&r=${randomString(3, '0123456789')}&shop=${shop}`, { 10987 method: "POST", 10988 body: formData 10989 }) 10990 const result = await response.json(); 10991 10992 // Hide loader after upload completes 10993 $('.photo-address').parent().removeClass('loading-upload'); 10994 $('.ajax-loader').hide(); 10995 10996 reader.readAsDataURL(input.files[0]); 10997 10998 return result 10999 } catch (error) { 11000 // Hide loader on error 11001 $('.photo-address').parent().removeClass('loading-upload'); 11002 $('.ajax-loader').hide(); 11003 console.error('Upload failed:', error); 11004 11005 reader.readAsDataURL(input.files[0]); 11006 return null; 11007 } 11008 } 11009 } 11010 11011 // Hit OCR endpoint to extract address information 11012 async function hitOCREndpoint(imageUrl) { 11013 try { 11014 console.log('Starting OCR process with image:', imageUrl); 11015 11016 const payload = { 11017 imageUrl: imageUrl 11018 } 11019 11020 const response = await fetch('http://localhost:5001/api/shipping/ocr', { 11021 method: 'POST', 11022 headers: { 11023 'Content-Type': 'application/json' 11024 }, 11025 body: JSON.stringify(payload) 11026 }) 11027 11028 if (!response.ok) { 11029 throw new Error(`OCR API error: ${response.statusText}`); 11030 } 11031 11032 const data = await response.json(); 11033 console.log('OCR response:', data); 11034 11035 if (data.formatted && data.formatted.length > 0) { 11036 showAddressOptionsPopup(data.formatted) 11037 } else { 11038 alert('Tidak ada data alamat yang ditemukan dari foto. Silakan coba lagi.') 11039 } 11040 } catch (error) { 11041 console.error('OCR endpoint error:', error); 11042 alert('Ada error saat memproses foto alamat. Silakan coba lagi.') 11043 } 11044 } 11045 11046 // Display popup with address options 11047 function showAddressOptionsPopup(addresses) { 11048 // Initialize popup HTML if not exists 11049 if (!document.getElementById('ocrAddressPopup')) { 11050 initOCRAddressPopup() 11051 } 11052 11053 const popup = document.getElementById('ocrAddressPopup'); 11054 const optionsContainer = document.getElementById('ocrAddressOptions'); 11055 11056 // Clear previous options 11057 optionsContainer.innerHTML = ''; 11058 11059 // Add address options
11060 addresses.forEach((address, index) => { 11061 const option = document.createElement('div'); 11062 option.className = 'ocr-address-option'; 11063 option.setAttribute('data-index', index); 11064 option.setAttribute('data-county', address.county || ''); 11065 option.setAttribute('data-postcode', address.postcode || ''); 11066 option.setAttribute('data-state', address.state || ''); 11067 option.setAttribute('data-country', address.country || ''); 11068 11069 const addressText = address.full_address || `${address.street || ''} ${address.city || ''} ${address.state || ''}`.trim(); 11070 option.innerHTML = ` 11071 <div class="address-content"> 11072 <p class="address-text">${addressText}</p> 11073 <small class="address-details">${address.postcode || ''}</small> 11074 </div> 11075 `; 11076 11077 option.addEventListener('click', function() { 11078 selectAddressOption(this, address) 11079 }); 11080 11081 optionsContainer.appendChild(option); 11082 }); 11083 11084 // Show popup 11085 popup.classList.add('show'); 11086 document.body.classList.add('ocr-popup-open'); 11087 } 11088 11089 // Initialize OCR address popup if not exists 11090 function initOCRAddressPopup() { 11091 const popupHTML = ` 11092 <div id="ocrAddressPopup" class="ocr-address-popup"> 11093 <div class="ocr-popup-overlay"></div> 11094 <div class="ocr-popup-content"> 11095 <div class="ocr-popup-header"> 11096 <h3>Pilih Alamat dari Foto</h3> 11097 <button class="close-ocr-popup">×</button> 11098 </div> 11099 <div class="ocr-popup-body"> 11100 <div id="ocrAddressOptions" class="ocr-address-options"></div> 11101 </div> 11102 </div> 11103 </div> 11104 `; 11105 11106 document.body.insertAdjacentHTML('beforeend', popupHTML); 11107 11108 // Setup close buttons 11109 const popup = document.getElementById('ocrAddressPopup'); 11110 const closeBtn = popup.querySelector('.close-ocr-popup'); 11111 const overlay = popup.querySelector('.ocr-popup-overlay'); 11112 11113 closeBtn.addEventListener('click', closeOCRAddressPopup); 11114 overlay.addEventListener('click', closeOCRAddressPopup); 11115 } 11116 11117 // Handle address selection 11118 function selectAddressOption(element, address) { 11119 const county = element.getAttribute('data-county'); 11120 const postcode = element.getAttribute('data-postcode'); 11121 const state = element.getAttribute('data-state'); 11122 const country = element.getAttribute('data-country'); 11123 11124 const fullAddress = address.full_address || `${address.street || ''} ${address.city || ''} ${address.state || ''}`.trim(); 11125 11126 console.log('Selected address:', { 11127 fullAddress, 11128 county, 11129 postcode, 11130 state, 11131 country 11132 }); 11133 11134 // Fill in the form fields with selected address 11135 $("[data-properties=alamat-penerima], #streetAddress").val(fullAddress); 11136 11137 if (postcode) { 11138 $("[data-properties=kodepos], #zip").val(postcode); 11139 } 11140 11141 if (state) { 11142 $("#province").val(state).trigger('change'); 11143 } 11144 11145 if (country) { 11146 $("#properties-kota-pengiriman-country").val(country); 11147 } 11148 11149 // Close popup after selection 11150 closeOCRAddressPopup(); 11151 } 11152 11153 // Close OCR address popup 11154 function closeOCRAddressPopup() { 11155 const popup = document.getElementById('ocrAddressPopup'); 11156 if (popup) { 11157 popup.classList.remove('show'); 11158 document.body.classList.remove('ocr-popup-open'); 11159 } 11160 } 11161 11162 11163 11164 11165 async function addToCartUang() { 11166 var productAddOnId1 = 42122101162199; 11167 var productAddOnId2 = 42122101194967; 11168 var product_id = 7881418965207 11169 const data = { 11170 items: [ 11171 { 11172 quantity: $("#Quantity-" + productAddOnId1).val(), 11173 id: productAddOnId1, 11174 "properties": { "Time": $("#properties-time").val() } 11175 }, 11176 { 11177 quantity: $("#Quantity-" + productAddOnId2).val(), 11178 id: productAddOnId2, 11179 "properties": { "Time": $("#properties-time").val() } 11180 } 11181 ] 11182 } 11183 await fetch(window.Shopify.routes.root + 'cart/add.js', { 11184 method: 'POST', 11185 headers: { 11186 'Content-Type': 'application/json' 11187 }, 11188 body: JSON.stringify(data) 11189 }) 11190 .then(response => { 11191 console.error('Sukses Buket Uang:', response); 11192 $(".form-flower").submit() 11193 }) 11194 .catch((error) => { 11195 console.error('Error Buket Uang:', error); 11196 $(".form-flower").submit() 11197 }); 11198 } 11199 11200 // Utility function untuk membuat data card yang konsisten dengan default "-" 11201 function createCardData(overrides = {}) { 11202 const defaultData = { 11203 "ID": $("#properties-properties-qrId").val() !== '' ? $("#properties-properties-qrId").val() : '-', 11204 "Kartu Nama Penerima": (() => { 11205 const name = $("[data-properties=penerima]").val().trim(); 11206 if (!name || name === '-') { 11207 return '-'; 11208 } 11209 const prefix = $(".label-prefix").text().trim(); 11210 return (prefix + (name ? ' ' + name : '')).trim() || '-'; 11211 })(), 11212 "Kartu Nama Pengirim": $("#properties-kartu-nama-pengirim").val() !== '' ? $("#properties-kartu-nama-pengirim").val() : '-', 11213 "Kartu Ucapan": $("[data-properties=ucapan]").val() !== '' ? $("[data-properties=ucapan]").val() : '-', 11214 "Nama Penerima": $("#properties-nama-penerima").val() !== '' ? $("#properties-nama-penerima").val() : '-', 11215 "Order Number": "-", 11216 "Status": "Product", 11217 "Foto": $("#properties-photo").val() !== '' ? $("#properties-photo").val() : '-', 11218 "Media": $("#properties-video").val() !== '' ? $("#properties-video").val() : '-', 11219 "Image": "7881418965207" 11220 } 11221 11222 // Merge dengan overrides jika ada 11223 return JSON.stringify({...defaultData, ...overrides}) 11224 } 11225 11226 // Utility function untuk membuat data save card (insertCard/updateCard) 11227 function createSaveCardData(overrides = {}) { 11228 const defaultData = { 11229 "id": qrID || '', 11230 "penerima": $("#properties-nama-penerima").val() !== '' ? $("#properties-nama-penerima").val() : '-', 11231 "kartu_penerima": (() => { 11232 const name = $("[data-properties=penerima]").val().trim(); 11233 if (!name || name === '-') { 11234 return '-'; 11235 } 11236 const prefix = $(".label-prefix").text().trim(); 11237 return (prefix + (name ? ' ' + name : '')).trim() || '-'; 11238 })(), 11239 "kartu_ucapan": $("[data-properties=ucapan]").val() !== '' ? $("[data-properties=ucapan]").val() : '-', 11240 "kartu_pengirim": $("[data-properties=pengirim]").val() !== '' ? $("[data-properties=pengirim]").val() : '-', 11241 "foto": $("#properties-photo").val() !== '' ? $("#properties-photo").val() : '-', 11242 "video": $("#properties-video").val() !== '' ? $("#properties-video").val() : '-', 11243 "productId": "7881418965207", 11244 "order_name": "-", 11245 "status": "Product" 11246 } 11247 11248 // Merge dengan overrides jika ada 11249 const mergedData = {...defaultData, ...overrides} 11250 return { 11251 data: JSON.stringify(mergedData), 11252 parsed: mergedData 11253 } 11254 } 11255 11256 async function saveCard(){ 11257 let isCard = true 11258 const cardData = createSaveCardData() 11259 11260 const id = $(".greetingCard").data("id") 11261 11262 if(!id){ 11263 if((cardData.parsed.kartu_ucapan !== '' && cardData.parsed.kartu_ucapan !== '-') || 11264 (cardData.parsed.foto !== '' && cardData.parsed.foto !== '-') || 11265 (cardData.parsed.video !== '' && cardData.parsed.video !== '-')){ 11266 if($("#qrcode").length){ 11267 var qrCode = new QRCode(document.getElementById("qrcode"), { 11268 text: `https://moment.outerbloom.com/${qrID}`, 11269 width: 200, 11270 height: 200, 11271 colorDark : "#212121", 11272 colorLight : "#ffffff", 11273 correctLevel: QRCode.CorrectLevel.L, 11274 }); 11275 } 11276 $("#properties-qrId").val(qrID) 11277 const insert_card = await insertCard(cardData.data) 11278 console.log(insert_card, 'insert') 11279 11280 // Trigger card preview update 11281 $(document).trigger('cardDataUpdated') 11282 11283 return insert_card 11284 } 11285 } else { 11286 console.log('start update')
11287 const update_card = await updateCard(id, cardData.data) 11288 console.log(update_card, 'update_card') 11289 11290 // Trigger card preview update 11291 $(document).trigger('cardDataUpdated') 11292 11293 return update_card 11294 } 11295 } 11296 11297 async function additem(items){ 11298 try { 11299 let formData = items 11300 if(items?.length) { 11301 formData = { 11302 'items': items 11303 }; 11304 } 11305 11306 const add = await fetch(window.Shopify.routes.root + 'cart/add.js', { 11307 method: 'POST', 11308 headers: { 11309 'Content-Type': 'application/json', 11310 'X-Requested-With':'xmlhttprequest' /* XMLHttpRequest is ok too, it's case insensitive */ 11311 }, 11312 body: JSON.stringify(formData) 11313 }) 11314 11315 const data = await add.json(); 11316 return data 11317 } catch(err){ 11318 console.log('Error additem', err) 11319 } 11320 } 11321 11322 async function addons(){ 11323 let items = [] 11324 11325 // First, try to get addons from the summary section (.addon-item) 11326 if($(".addon-item").length > 0) { 11327 $(".addon-item").each(function(){ 11328 const p = $(this) 11329 const props = p.next(".propsAddonSpotify") 11330 const id = $(this).data("id") 11331 const quantity = $(this).data("qty") 11332 const propId = $("#properties-time").val() 11333 let properties = {} 11334 if(id === 46067682607319) { 11335 const link = props.find(".spotifyLinkAddon").text() 11336 const photo = props.find(".spotifyFotoAddon").text() 11337 const song = props.find(".spotifySongAddon").text() 11338 const artist = props.find(".spotifyArtistAddon").text() 11339 properties = { 11340 id: propId, 11341 "Spotify Link": link !== '' ? link : '-', 11342 "Spotify Photo": photo !== '' ? photo : '-', 11343 "Spotify Song": song !== '' ? song : '-', 11344 "Spotify Artist": artist !== '' ? artist : '-', 11345 type: 'addon' 11346 } 11347 } else { 11348 properties = { 11349 "id": propId, 11350 "type": "addon" 11351 } 11352 } 11353 items.push({ 11354 id, 11355 quantity, 11356 properties 11357 }) 11358 }) 11359 } else { 11360 // If no addon-item found, get directly from #itemAddons .selected 11361 const selectedAddons = $("#itemAddons").find(".selected") 11362 if(selectedAddons.length > 0) { 11363 selectedAddons.each(function(){ 11364 const id = $(this).data("variant") 11365 const quantity = $(this).find(".btn-qty").val() || 1 11366 const propId = $("#properties-time").val() 11367 const properties = { 11368 "id": propId, 11369 "type": "addon" 11370 } 11371 items.push({ 11372 id: Number(id), 11373 quantity: Number(quantity), 11374 properties 11375 }) 11376 }) 11377 } 11378 } 11379 11380 return items 11381 } 11382 11383 async function propItems() { 11384 let props = {} 11385 $("[data-properties]").each(function(e){ 11386 let elementType = this.tagName; 11387 const k = $(this).data("properties") 11388 if(k !== 'penerima' && k !== 'ucapan' && k !== 'pengirim' && k !== 'nama-penerima' && k !== 'alamat-penerima' && k !== 'telepon-penerima' && k !== 'company' && k !== 'province' && k !== 'foto-alamat' && k !== 'papan-logo') { 11389 const v = elementType === 'SELECT' ? $(this).find(":selected").val() : $(this).val(); 11390 if(v !== '') { 11391 props[k] = v?.replace(/[\s\n]/g, ''); 11392 } 11393 } 11394 }) 11395 return props 11396 } 11397 11398 async function showPopupCart(items){ 11399 if(productType !== '') { 11400 console.log("clarity event " + productType + ' completeOrder') 11401 window.clarity("event", `${productType} completeOrder`) 11402 // window.clarity("set", productType, `completeOrder - ${productDate}`) 11403 } 11404 $("#popupCart").show() 11405 11406 $(".propDeliveryCity").text($("#cities").val()) 11407 $(".propDeliveryDate").text($("#propDeliveryDate").val()) 11408 $(".propDeliveryTime").text($("#propDeliveryTime").val()) 11409 $(".propDeliveryName").text($("[data-properties=nama-penerima]").val()) 11410 $(".propDeliveryAddress").text($("[data-properties=alamat-penerima]").val()) 11411 $(".propDeliveryPhone").text($("[data-properties=telepon-penerima]").val()) 11412 $(".propDeliveryProv").text($("#province").val()) 11413 $(".propDeliveryZip").text($("#properties-kodepos").val()) 11414 11415 11416 11417 const addons = [] 11418 if(items && items.length > 0) { 11419 for(let i = 1; i < items.length; i++) { 11420 const spotifyLink = items[i].properties['Spotify Link'] 11421 const spotifyPhoto = items[i].properties['Spotify Photo'] 11422 const spotifySong = items[i].properties['Spotify Song'] 11423 const spotifyArtist = items[i].properties['Spotify Artist'] 11424 const price = items[i].price / 100 11425 const props = spotifyLink ? `<div class="propsAddonCart row m-0"> 11426 <div class="col-12 col-lg-2"></div> 11427 <div class="col-12 col-lg-10"> 11428 <p>
11429 <span>spotify link</span> 11430 <span>${spotifyLink}</span> 11431 </p> 11432 <p> 11433 <span>Upload Photo</span> 11434 <span>${spotifyPhoto}</span> 11435 </p> 11436 <p> 11437 <span>song / playlist name</span> 11438 <span>${spotifySong}</span> 11439 </p> 11440 <p> 11441 <span>artist name</span> 11442 <span>${spotifyArtist}</span> 11443 </p> 11444 </div> 11445 </div>` : ''; 11446 addons.push(`<div class="row m-0"> 11447 <div class="imgAddonCart col-2"> 11448 <img 11449 width="43" 11450 src="${items[i].image}" 11451 alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap" 11452 > 11453 </div> 11454 <div class="imgAddonTitlePrice col-10 align-self-center"> 11455 <div class="row justify-content-between m-0"> 11456 <div class="col-12 col-lg-8"> 11457 <h5>${items[i].title}</h5> 11458 </div> 11459 <div class="col-12 col-lg-4 text-lg-right"> 11460 <span>${rupiah.format(price)}</span> 11461 </div> 11462 </div> 11463 </div> 11464 </div>${props}`) 11465 } 11466 } 11467 // console.log(addons) 11468 if(addons.length === 0) { 11469 $(".itemAddonCart").hide() 11470 return 11471 } 11472 $(".toggleAddonCart h4").text(`add-ons (${items.length - 1})`) 11473 $(".wrapperItemAddonCart").html(addons) 11474 } 11475 11476 const money = (money) => { 11477 return new Intl.NumberFormat('id-ID', 11478 { style: 'currency', currency: 'IDR', minimumFractionDigits: 0 } 11479 ).format(money); 11480 } 11481 11482 async function showNoteMoney() { 11483 let qty50k = $("[data-properties='Uang 50k']").val() 11484 let qty100k = $("[data-properties='Uang 100k']").val() 11485 const total50k = Number(qty50k) * 50000 11486 const total100k = Number(qty100k) * 100000 11487 const total_all = total50k + total100k 11488 $(".prop50k").html(`<span>${qty50k} Lembar: <strong class="pl-1">${money(total50k)}</strong></span>`) 11489 $(".prop100k").html(`<span>${qty100k} Lembar: <strong class="pl-1">${money(total100k)}</strong></span>`) 11490 $(".itemMoney").html(`<p>For the money arrangement, please transfer <strong>IDR ${money(total_all)}</strong> to <strong>Bank Mandiri 1020001234522 (PT Modern Mekar Abadi)</strong> and contact our <a href="http://wa.me/6281514234600" target="_blank" style="text-decoration: underline; color: #8d3f2d">Customer Service</a> to confirm with proof of payment.</p>`) 11491 } 11492 11493 async function removeImage() { 11494 // Reset to initial state of case-img-preview 11495 $(".remove-image").hide() 11496 $("#properties-photo").val("-") 11497 $(".preview-image").hide().attr("src", "") 11498 $(".placeholder-image").show() 11499 $(".icon-upload").show() 11500 $(".ajax-loader").hide() 11501 11502 // Reset the button states 11503 $(".case-video-preview").hide() 11504 $(".case-img-preview .btn-upload button").show() 11505 } 11506 11507 async function removeVideo() { 11508 $("#properties-video").val("-") 11509 $(this).find("img").hide() 11510 $(this).hide() 11511 $(this).prev("p").text("Add video to make it more special (optional)") 11512 $("#label-input-video").show() 11513 $("#label-input-video span").text("Upload Video") 11514 $(".case-video-preview p span").remove() 11515 } 11516 11517 async function loadItemOccasion(t, occasion) { 11518 const name = occasion?.replace('greeting-card-', '') 11519 $("#kartu-ucapan").val("") 11520 $("[data-occassion]").removeClass("selected") 11521 $("[data-properties=ucapan]").val("") 11522 $("#save-card").attr("disabled", true) 11523 t.addClass("selected") 11524 $("#show_note").attr("data-card-occassion", name) 11525 $.get(`https://outerbloom.com/collections/${occasion}/products.json`, function(data, status){ 11526 const products = data.products 11527 const html = [] 11528 for(let i = 0; i < products.length; i++) { 11529 const id = products[i].id 11530 const variantId = products[i].variants[0].id 11531 const img = products[i].images[0].src 11532 const title = products[i].title 11533 const price = products[i].variants[0].price
11534 const qty = products[i].variants[0].inventory_quantity 11535 const body = `<div class="item-card${price < 1 ? ' free' : ' nofree'}${i === 0 ? ' selected' : ''}" data-id=${id}> 11536 <label for="card-${variantId}"></label> 11537 <div class="card-image"> 11538 <img src="${img}" alt="${title}" width="" height="" /> 11539 </div> 11540 <div class="card-meta text-center"> 11541 <h5>${title}</h5> 11542 <p>${price < 1 ? 'FREE' : rupiah.format(price)}</p> 11543 <input id="card-${variantId}" type="radio" name="id" value="${variantId}" data-price="${price}"> 11544 </div> 11545 </div>` 11546 html.push(body) 11547 } 11548 const withoutCard = `<div class="item-card item-without-card"> 11549 <label for="card-0"></label> 11550 <div class="card-image"> 11551 <img src="https://cdn.shopify.com/s/files/1/1589/6833/t/129/assets/without-card.png?v=1747632283" alt="Without card" width="" height="" /> 11552 </div> 11553 <div class="card-meta text-center"> 11554 <h5>
11554Send without a greeting card</h5> 11555 <input id="card-0" type="radio" name="id" value="" data-price=""> 11556 </div> 11557 </div>` 11558 $("#itemCards .items-card").html(html.length === 0 ? '<p>No Item available</p>' : html.join("")) 11559 }); 11560 } 11561 11562 async function setItems() { 11563 let items = [] 11564 const mainProps = { 11565 11566 "Delivery Date": $("#propDeliveryDate").val(), 11567 "Delivery Time": $("#propDeliveryTime").val() !== '' ? $("#propDeliveryTime").val() : '-' , 11568 "Kota Pengiriman": $("#cities").val(), 11569 "Nama Penerima": $("[data-properties=nama-penerima]").val() !== '' ? $("[data-properties=nama-penerima]").val() : '-' , 11570 "Alamat Penerima": $("[data-properties=alamat-penerima]").val() !== '' ? $("[data-properties=alamat-penerima]").val() : '-' , 11571 "Kodepos": $("#properties-kodepos").val() !== '' ? $("#properties-kodepos").val() : '-' , 11572 "Telepon Penerima": $("[data-properties=telepon-penerima").val() !== '' ? $("[data-properties=telepon-penerima").val() : '-' , 11573 11574 11575 11576 "Kartu Nama Penerima": (() => { 11577 const name = $("[data-properties=penerima]").val().trim(); 11578 if (!name || name === '-') { 11579 return '-'; 11580 } 11581 const prefix = $(".label-prefix").text().trim(); 11582 return (prefix + (name ? ' ' + name : '')).trim() || '-'; 11583 })() , 11584 "Kartu Ucapan": $("[data-properties=ucapan]").val() !== '' ? $("[data-properties=ucapan]").val() : '-' , 11585 "Kartu Nama Pengirim": $("[data-properties=pengirim]").val() !== '' ? $("[data-properties=pengirim]").val() : '-' , 11586 "Foto": $("#properties-photo").val() !== '' ? $("#properties-photo").val() : '-' , 11587 "Video": $("#properties-video").val() !== '' ? $("#properties-video").val() : '-' , 11588 "QR Code": $("#properties-qrId").val() !== '' ? $("#properties-qrId").val() : '-' , 11589 11590 11591 11592 "Province": $("#province").val() !== '' ? $("#province").val() : '-' , 11593 "Country": $("#properties-kota-pengiriman-country").val() !== '' ? $("#properties-kota-pengiriman-country").val() : '-' , 11594 "Shipping": $("#properties-shipping").val() !== '' ? $("#properties-shipping").val() : '-' , 11595 "Company": $("[data-properties=company]").val() !== '' ? $("[data-properties=company]").val() : '-' , 11596 11597 "Delivery Method": $("#selectedShippingMethod") && $("#selectedShippingMethod").val() !== '' ? $("#selectedShippingMethod").val() : 'Delivery' , 11598 "id": $("#properties-time").val() !== '' ? $("#properties-time").val() : '-', 11599 "type": 'product' 11600 } 11601 console.log(mainProps, 'mainProps') 11602 const props = await propItems() 11603 properties = {...mainProps, ...props }; 11604 const id = $("#productSelect").find('option:selected').val() 11605 console.log(id, 'main ID') 11606 const mainItem = { 11607 id: Number(id), 11608 quantity: 1, 11609 properties 11610 } 11611 items.push(mainItem) 11612 const cardId = $("#itemCards").find(".selected input").val() 11613 const cardItem = { 11614 id: Number(cardId), 11615 quantity: 1, 11616 properties: { "id": $("#properties-time").val() !== '' ? $("#properties-time").val() : '-', type: 'card' } 11617 } 11618 console.log(cardId, 'cardId') 11619 if(cardId) { 11620 items.push(cardItem) 11621 } 11622 const addon = await addons() 11623 if(addon) { 11624 for(let i = 0; i < addon.length; i++){ 11625 items.push({ 11626 id: addon[i].id, 11627 quantity: addon[i].quantity, 11628 properties: addon[i].properties 11629 }) 11630 } 11631 } 11632 11633 return items 11634 } 11635 11636 async function addToCart() { 11637 const items = await setItems() 11638 const addItems = await additem(items) 11639 11640 // Check if cities is not "Kota Lainnya" and Shipping property is empty or "-" 11641 const citiesValue = $("#cities").val(); 11642 const shippingValue = $("#properties-shipping").val(); 11643 if (citiesValue && citiesValue !== "Kota Lainnya" && (!shippingValue || shippingValue === "" || shippingValue === "-")) { 11644 alert("Shipping city has not been selected, please try again"); 11645 // Close popup and reset fields 11646 disablePopup(); 11647 $("#cities").val("").trigger('change'); 11648 $("#propDeliveryDate").val(""); 11649 $("#propDeliveryTime").val(""); 11650 $("#deliveryDate button").removeClass("selected"); 11651 $("#deliveryTime button").removeClass("selected"); 11652 return; 11653 } 11654 11655 if(addItems) { 11656 $(this).find("span").removeClass("loading") 11657 disablePopup() 11658 showPopupCart(addItems.items) 11659 11660 localStorage.setItem("items", JSON.stringify(addItems.items)) 11661 const rowIndex = $(".greetingCard").data("id") 11662 if(rowIndex && rowIndex !== 0) { 11663 const data = JSON.stringify({ 11664 "Status": "Cart" 11665 }); 11666 const update = await updateCard(rowIndex, data) 11667 console.log(update, 'update card to cart') 11668 } 11669 11670 analytics.track('add_cart', { 11671 productId: '7881418965207', 11672 items: addItems.items 11673 }); 11674 } 11675 } 11676 11677 $(document).ready(function(){ 11678 11679 // Observer to auto-trigger addon loading when addon section becomes visible 11680 const addonObserver = new MutationObserver(function(mutations) { 11681 mutations.forEach(function(mutation) { 11682 const target = $(mutation.target) 11683 if(target.hasClass('purchaseAddon') && mutation.type === 'attributes' && mutation.attributeName === 'class') { 11684 if(!target.hasClass('hide')) { 11685 // Addon section just became visible, ensure items are loaded 11686 setTimeout(function() { 11687 if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) { 11688 console.log("Auto-triggering addon load...") 11689 $("[data-addon]").eq(0).trigger("click") 11690 } 11691 }, 150) 11692 } 11693 } 11694 }) 11695 }) 11696 11697 // Start observing addon section 11698 const addonSection = document.querySelector('.purchaseAddon') 11699 if(addonSection) { 11700 addonObserver.observe(addonSection, { 11701 attributes: true, 11702 attributeFilter: ['class'] 11703 }) 11704 } 11705 11706 $(".purchasePopup").delegate("#addtocart-card", "click", async function(){ 11707 11708 $(this).find("span").addClass("loading") 11709 let isValid = true 11710 $(".formAddressPurchase [required]").each(function(){ 11711 const t = $(this) 11712 const input = t.val() 11713 const p = t.parent() 11714 if(input === '') { 11715 p.addClass("error") 11716 isValid = false 11717 } 11718 }) 11719 11720 if(!isValid) { 11721 $(this).find("span").removeClass("loading") 11722 return 11723 } 11724 11725 await addToCart() 11726 }) 11727 11728 $("#addtocart-cart .btn").click(async function(){ 11729 // First validate variant metafields 11730 if (typeof validateVariantMetafields === 'function') { 11731 const isValid = validateVariantMetafields(true); 11732 if (!isValid) { 11733 // The validateVariantMetafields function already handles scrolling and focusing 11734 alert('Please select all required variant options before proceeding.'); 11735 return; // Stop execution if validation fails 11736 } 11737 } 11738 11739 const id = $("#productSelect").find('option:selected').val() 11740 const mainProps = { 11741 id: $("#properties-time").val() !== '' ? $("#properties-time").val() : '-', 11742 type: 'product' 11743 } 11744 const props = await propItems() 11745 const properties = { ...mainProps, ...props }; 11746 const items = { 11747 id: Number(id), 11748 quantity: 1, 11749 properties 11750 } 11751 const addItems = await additem(items) 11752 if(addItems) { 11753 showPopupCart(addItems.items) 11754 localStorage.setItem("items", JSON.stringify(addItems)) 11755 } 11756 }) 11757 11758 $(".formAddressPurchase [required]").change(function(){ 11759 const t = $(this) 11760 const p = t.parent() 11761 const v = t.val() 11762 if(v !== '') { 11763 p.removeClass("error") 11764 } 11765 }) 11766 11767 $(".purchase-button").delegate("#save-card", "click", async function(){ 11768 const parent = $(this).parents(".sectionPurchase") 11769 const next = parent.next(".sectionPurchase") 11770 $(this).find("span").addClass("loading") 11771 const card = await saveCard() 11772 console.log(card, 'ssaveCCC') 11773 if(card?.status === 200 || card?.status === 201) { 11774 if(next.length === 0) { 11775 $(this).find("span").removeClass("loading") 11776 disablePopup() 11777 await addToCart() 11778 } 11779 $(".scanCard").removeClass("hide") 11780 $(this).find("span").removeClass("loading") 11781 parent.addClass("hide") 11782 next.removeClass("hide") 11783 if(next.hasClass("purchaseAddon")) { 11784 $("[data-addon]").eq(0).click() 11785 console.log("clarity event addons") 11786 window.clarity("event", `${productType} add-ons`) 11787 // Ensure addon items are loaded when entering addon popup 11788 setTimeout(function() { 11789 if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) { 11790 $("[data-addon]").eq(0).trigger("click") 11791 } 11792 }, 100) 11793 } 11794 if(next.hasClass("purchaseAddress")) { 11795 initSelect2('#zip'); 11796 } 11797 } 11798 }) 11799 11800 $("#skip-card").click(async function(){ 11801 $(".greetingCard [data-properties]").val("") 11802 $("#properties-photo").val("") 11803 $("#properties-video").val("") 11804 const parent = $(this).parents(".sectionPurchase") 11805 const next = parent.next(".sectionPurchase") 11806 parent.addClass("hide") 11807 next.removeClass("hide") 11808 // $("#itemCards").html("") 11809 await removeImage() 11810 await removeVideo() 11811 11812 // Trigger card preview update when card data is cleared 11813 $(document).trigger('cardDataUpdated') 11814 11815 if(next.length === 0) { 11816 $(this).find("span").removeClass("loading") 11817 disablePopup() 11818 await addToCart() 11819 return 11820 } 11821 if(next.hasClass("purchaseAddon")) { 11822 $("[data-addon]").eq(0).click() 11823 console.log("clarity event addons") 11824 window.clarity("event", `${productType} add-ons`) 11825 // Ensure addon items are loaded when entering addon popup 11826 setTimeout(function() { 11827 if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) { 11828 $("[data-addon]").eq(0).trigger("click") 11829 } 11830 }, 100) 11831 } 11832 if(next.hasClass("purchaseAddress")) { 11833 initSelect2('#zip'); 11834 } 11835 }) 11836 11837 $("#msgCard").click(async function(){ 11838 $(this).parent().addClass("loading") 11839 let occasion = $(".selected[data-occassion]").data("occassion") 11840 occasion = occasion?.replace("greeting-card-", "") 11841 const { data } = await getFetch(`${host}/api/card/template/occasion?name=${occasion}`); 11842 const d = data?.data 11843 for(let i = 0; i < d.length; i++) { 11844 const num = Math.floor(Math.random() * (d.length - 1 + 1) + 1); 11845 const greeting = d[num]?.Greeting 11846 $(".greetingCard textarea").val(greeting) 11847 $(this).parent().removeClass("loading") 11848 11849 // Trigger card preview update when message template is generated 11850 $(document).trigger('cardDataUpdated') 11851 } 11852 $("#save-card").attr("disabled", false) 11853 }) 11854 11855 $(".sectionPurchaseBoard .next-purchase-button").click(function(){ 11856 const parent = $(this).parents(".sectionPurchase") 11857 const next = parent.next(".sectionPurchase") 11858 parent.addClass("hide") 11859 next.removeClass("hide") 11860 }) 11861 11862 $("#editCard").click(function(){ 11863 $(".custom-card").show() 11864 $(".preview-card").hide() 11865 }) 11866 11867 $("#first_name, #last_name").change(function(){ 11868 const v = $(this).val() 11869 const first_name = $("#first_name").val() 11870 const last_name = $("#last_name").val() !== '' ? ' ' + $("#last_name").val() : '' 11871 $("[data-properties=nama-penerima]").val(first_name+last_name) 11872 11873 // Trigger card preview update when first/last name changes 11874 $(document).trigger('cardDataUpdated') 11875 }) 11876 11877 $("[data-occassion]").click(function(){ 11878 const t = $(this) 11879 const p = t.parents(".sectionPurchase") 11880 // $(".greetingCard").addClass("disabled") 11881 const occasion = t.data("occassion") 11882 loadItemOccasion(t, occasion) 11883 }) 11884 11885 $("#itemCards").delegate(".item-card:not(.item-without-card) label", "click", function(){ 11886 const id = $(this).parent(".item-card").data("id") 11887 const t = $(this).parent(".item-card") 11888 const target = t.find("input") 11889 const v = $('.item-card input[type="radio"]:checked').val(); 11890 $("#itemCards .item-card").removeClass("selected") 11891 t.addClass("selected") 11892 $("#itemCards .item-card").find("input").attr("name", "") 11893 if(target.length > 0) { 11894 target.attr("name", "id[]") 11895 $("#properties-card").val(id) 11896 $(".greetingCard").removeClass("disabled") 11897 $("#skip-card").attr("disabled", false) 11898 } else { 11899 $("#properties-card").val("") 11900 } 11901 }) 11902 11903 $("#itemCards").delegate(".item-without-card label", "click", function(){ 11904 const parent = $(this).parents(".sectionPurchase") 11905 const next = parent.next(".sectionPurchase") 11906 $(".greetingCard").addClass("disabled") 11907 parent.addClass("hide") 11908 next.removeClass("hide") 11909 $("[data-addon]").eq(0).click() 11910 initSelect2('#zip'); 11911 }) 11912 11913 $("[data-properties=ucapan]").keyup(function(){ 11914 const v = $(this).val() 11915 const p = $(this).parents(".sectionPurchase") 11916 $(".purchaseAddress").find(".greetingCard textarea").val(v) 11917 if(v.length > 3) { 11918 p.find(".next-purchase-button").attr("disabled", false) 11919 } else { 11920 p.find(".next-purchase-button").attr("disabled", true) 11921 } 11922 11923 // Trigger card preview update when message changes 11924 $(document).trigger('cardDataUpdated') 11925 }) 11926 11927 $("[data-properties=penerima]").keyup(function(){ 11928 const v = $(this).val() 11929 $(".purchaseAddress").find("[data-properties=penerima]").val(v) 11930 11931 // Trigger card preview update when recipient name changes 11932 $(document).trigger('cardDataUpdated') 11933 }) 11934 11935 $("[data-properties=pengirim]").keyup(function(){ 11936 const v = $(this).val() 11937 $(".purchaseAddress").find("[data-properties=pengirim]").val(v) 11938 11939 // Trigger card preview update when sender name changes 11940 $(document).trigger('cardDataUpdated') 11941 }) 11942 11943 $(document).click(function(e){ 11944 11945 if($(e.target).closest('.wrapperPopupCart').length != 0) return false;
11946 // $('#popupCart').fadeOut('slow'); 11947 // location.reload() 11948 }); 11949 11950 $(".toggleAddonCart").click(function(){ 11951 const p = $(this).parent(".itemAddonCart") 11952 p.toggleClass("open") 11953 }) 11954 11955 $(".btnViewCart").click(function(){ 11956 window.location.href = "https://outerbloom.com/cart"; 11957 }) 11958 11959 $(".btnViewCheckout").click(async function(){ 11960 $(this).find("span").addClass("loading") 11961 let zip = $("#properties-kodepos").val() 11962 const first_name = $("#first_name").val() 11963 const last_name = $("#last_name").val() 11964 const company = $("#company").val() !== '' ? $("#company").val() : '' 11965 const address1 = $("#delivery_address").val() 11966 const address2 = zip && zip !== '' ? zip?.split(' - ')[1] : '' 11967 zip = zip && zip !== '' ? zip?.split(' - ')[0] : '' 11968 const phone = $("#recipient_number").val() 11969 const city = $("#cities").val() 11970 const province = $("#province").val() 11971 const country = 'Indonesia' 11972 const ver = Date.parse(new Date()) 11973 11974 const params = `${first_name ? `&checkout[shipping_address][first_name]=${first_name}` : ''}&${last_name ? `&checkout[shipping_address][last_name]=${last_name}` : ''}&${company ? `&checkout[shipping_address][company]=${company}` : ''}&${address1 ? `&checkout[shipping_address][address1]=${address1}` : ''}&${address2 ? `&checkout[shipping_address][address2]=${address2}` : ''}&${city && city !== 'Kota Lainnya' ? `&checkout[shipping_address][city]=${city}` : ''}&${country ? `&checkout[shipping_address][country]=${country}` : ''}&${province ? `&checkout[shipping_address][province]=${province}` : ''}&${zip ? `&checkout[shipping_address][zip]=${zip}` : ''}&${phone ? `&checkout[shipping_address][phone]=${phone}` : ''}&v=${ver}` 11975 11976 const clear = await fetch(`/cart/clear.js`, {method: 'POST'}) 11977 if(clear.status === 200) { 11978 const savedItem = window.localStorage.getItem("items"); 11979 const items = JSON.parse(savedItem) 11980 const addItems = await additem(items) 11981 console.log(addItems, 'new addItems') 11982 if(addItems) { 11983 window.location.href = `https://outerbloom.com/checkout?${params}`; 11984 } 11985 } 11986 }) 11987 11988 $(".btnContinueShopping").click(function(){ 11989 window.location.href = "https://outerbloom.com/"; 11990 }) 11991 11992 if (isIOS) { 11993 $(".empty-state-card").click(function(){ 11994 $("#input-foto").trigger("click") 11995 }) 11996 $(".btn-upload-image").click(function(){ 11997 $("#input-foto").trigger("click") 11998 }) 11999 $("[for=input-video]").click(function(){ 12000 $("#input-video").trigger("click") 12001 }) 12002 $(".btn-upload-papan").click(function(){ 12003 $("#logoPapan").trigger("click") 12004 }) 12005 } 12006 12007 $("[data-properties]").each(function(){ 12008 const select = $(this).parents(".form-group").find("select") 12009 $(this).change(function(){ 12010 const name = $(this).data("properties") 12011 const v = $(this).val() 12012 if (name == 'telepon-penerima') { 12013 let phone = v.replace(/[^0-9]/g, '') 12014 $(this).val(phone); 12015 $("#properties-telepon-penerima").val(phone) 12016 $('.iti__search-input').val('-') 12017 } else { 12018 $("#properties-" + name).val(v) 12019 } 12020 }) 12021 select.on("change", function(){ 12022 const name = $(this).data("properties") 12023 const v = $(this).val() 12024 $("#properties-" + name).val(v) 12025 }) 12026 }) 12027 12028 $("#show_note").click(function(){ 12029 const rowIndex = $(".greetingCard").data("id") 12030 const data = JSON.stringify({ 12031 "Media": "-" 12032 }) 12033 updateCard(rowIndex, data) 12034 }) 12035 12036 $(".greetingCard").delegate(".remove-image", "click", function(e){ 12037 e.preventDefault() 12038 removeImage() 12039 }) 12040 12041 $(".remove-media").click(function(e){ 12042 e.preventDefault() 12043 $(this).find("img").show() 12044 removeVideo() 12045 }) 12046 12047 12048 12049 $("[data-delivery_method]").click(function(e){ 12050 e.preventDefault() 12051 const t = $(this) 12052 const data = t.data("delivery_method") 12053 $("[data-delivery_method]").removeClass("selected") 12054 t.addClass("selected") 12055 $("#cities").val("") 12056 $("#properties-delivery-date").val("-") 12057 $("#deliveryDate button").removeClass("selected") 12058 $("#full-date").val("Full Calendar â") 12059 $("#propDeliveryDate").val("") 12060 const step3 = $("#step-3") 12061 if(data.match('PickUp')) { 12062 $(".selfpickup-point").show() 12063 step3.find("[data-finished=false]").hide() 12064 $("#panel-4").hide() 12065 step3.find("[data-finished=true]").show() 12066 $("#cities").attr("required", false) 12067 $("#form-group-city").hide() 12068 12069 $("#row-delivery-time").hide() 12070 12071 12072 $("#propDeliveryTime, #properties-delivery-time").val("-") 12073 $("#propDeliveryTime").attr("required", false) 12074 12075 $("#properties-nama-penerima, #properties-alamat-penerima, #properties-kodepos, #properties-kodepos, #properties-telepon-penerima").val("-") 12076 // $("#deliveryDate").find("button:first-child").addClass("stop") 12077 $(".form-selfpickup").show() 12078 $(".form-delivery").hide() 12079 $(".form-delivery").find("input, textarea, select").val("") 12080 $(".form-delivery").find("input, textarea, select").attr("required", false) 12081 $("#properties-shipping").val("0") 12082 $("#noteDeliveryDate").hide() 12083 $(".form-delivery .form-control").attr("required", false) 12084 $("#stepNav4").hide() 12085 12086 $("#deliveryDate").find("button:nth-child(1)").addClass("stop") 12087 12088 12089 12090 $(".calendarbutton[data-date=14]").attr("disabled", true) 12091 12092 if(timeOfDay >= 16.01){ 12093 $("#deliveryDate").find("button:nth-child(2)").addClass("stop") 12094 } 12095 } else { 12096 12097 12098 $(".calendarbutton[data-date=14]").attr("disabled", false) 12099 12100 $("#deliveryDate").find("button:nth-child(1)").removeClass("stop") 12101 step3.find("[data-finished=false]").show() 12102 $("#panel-4").show() 12103 step3.find("[data-finished=true]").hide() 12104 $("#cities").attr("required", true) 12105 $(".selfpickup-point").hide() 12106 $("#form-group-city").show() 12107 $("#cities").val('').trigger('change'); 12108 $("#properties-kota-pengiriman").val("-") 12109 12110 $("#row-delivery-date, #row-delivery-time").show() 12111 $("#propDeliveryDate, #propDeliveryTime").attr("required", true) 12112 $("#deliveryDate").find("button").removeClass("stop") 12113 $(".form-selfpickup").hide() 12114 $(".form-delivery").show() 12115 $(".form-delivery").find("input, textarea, select").attr("required", true)
12116 $(".form-delivery [data-properties]").attr("readonly", false) 12117 $("#properties-kodepos").val("-") 12118 $("#properties-alamat-penerima").val("-") 12119 $(".form-delivery .form-control").attr("required", true) 12120 $(this).parents(".setup-content").attr("id", "step-1") 12121 12122 $("#stepNav4").show() 12123 } 12124 }) 12125 12126 $("[name=selfpickup]").click(function(){ 12127 const p = $(this).parents(".row-pickup") 12128 const pickupCity = $("input[name='selfpickup']:checked").val(); 12129 const pickupAddress = $("input[name='selfpickup']:checked").data("address"); 12130 const pickupZip = $("input[name='selfpickup']:checked").data("zip"); 12131 12132 $(".row-pickup").removeClass("selected") 12133 p.addClass("selected") 12134 12135 $("#properties-kota-pengiriman").val(pickupCity) 12136 $("#province").val("Jakarta") 12137 $("#properties-alamat-penerima").val(pickupAddress) 12138 $("#properties-kodepos").val(pickupZip) 12139 }) 12140 12141 $("#cities").change(function(e){ 12142 e.preventDefault() 12143 $(this).parent(".row").find("p.error").remove() 12144 $("#full-date").val("Full Calendar") 12145 $("#deliveryDate, #deliveryDateFull label ").show() 12146 $("#deliveryDateFull").removeClass("filled") 12147 $(".btnChangeDeliveryDate").addClass("hide") 12148 $("#full-date").prop('disabled', false); 12149 $("#stepNav2, #stepNav3, #stepNav4").removeClass("btn-success") 12150 $("#stepNav2, #stepNav3, #stepNav4").find("a").attr("disabled", true) 12151 const step3 = $("#step-3") 12152 $("#cityNote").remove() 12153 $("#noteDeliveryDate").hide() 12154 $("#noteDeliveryDate").empty() 12155 let v = $(this).val() 12156 let v2 = $('option:selected', this).attr('data-city'); 12157 let v3 = $('option:selected', this).attr('data-province'); 12158 let price = $('option:selected', this).attr('data-price'); 12159 12160 $("#country").val(v) 12161 $("#properties-kota-pengiriman").val(v) 12162 $("#properties-shipping").val(price) 12163 $("#deliveryDate button, #deliveryTime button, .calendarseasonal .button").removeClass("selected") 12164 $("#properties-delivery-date, #properties-delivery-time").val("-") 12165 $("#propDeliveryDate, #propDeliveryTime").val("") 12166 let note = $('option:selected', this).attr('data-note'); 12167 if(v === 'Kota Lainnya') { 12168 $("#noteDeliveryDate").show() 12169 $("#noteDeliveryDate").text("Order akan segera dikirim. Estimasi tanggal diterima akan disesuaikan dengan waktu pengiriman oleh pihak ekspedisi ke lokasi Anda.") 12170 $("#zip").attr("required", false) 12171 $("#zip").hide() 12172 $("#propDeliveryDate, #propDeliveryTime").attr("required", false) 12173 $("#propDeliveryDate, #properties-delivery-date, #propDeliveryTime, #properties-delivery-time").val("-") 12174 $("#row-delivery-date, #row-delivery-time").hide() 12175 $("#properties-shipping").val("") 12176 12177 // Hide addressPurchase form and make all fields optional 12178 $(".addressPurchase").hide() 12179 $(".addressPurchase [required]").attr("required", false) 12180 $(".addressPurchase input, .addressPurchase textarea, .addressPurchase select").val("") 12181 $("[data-properties=nama-penerima], [data-properties=alamat-penerima], [data-properties=telepon-penerima]").val("") 12182 $("#properties-nama-penerima, #properties-alamat-penerima, #properties-telepon-penerima").val("") 12183 12184 // $(this).parents(".setup-content").attr("id", "step-2") 12185 12186 } else { 12187 $("#noteDeliveryDate").hide() 12188 $("#zip").attr("required", true) 12189 $("#zip").show() 12190 $("#row-delivery-date, #row-delivery-time").show() 12191 $("#propDeliveryDate, #propDeliveryTime").attr("required", true) 12192 $("#deliveryDate").find("button").removeClass("stop") 12193 12194 // Show addressPurchase form and make fields required 12195 $(".addressPurchase").show() 12196 $(".addressPurchase .form-control").not('[data-properties="company"]').attr("required", true) 12197 $("[data-properties=nama-penerima], [data-properties=alamat-penerima], [data-properties=telepon-penerima]").attr("required", true) 12198 12199 // $(this).parents(".setup-content").attr("id", "step-1") 12200 12201 } 12202 12203 12204 12205 12206 $("#row-delivery-time").hide() 12207 $("#propDeliveryTime").attr("required", false) 12208 12209 12210 // Load delivery dates when city is selected 12211 if(v !== '' && v !== 'Kota Lainnya') { 12212 const deliveryDate = document.getElementById("deliveryDate"); 12213 const deliveryTime = document.getElementById("deliveryTime"); 12214 12215 // Check localStorage first (no city needed, shared across all cities for same product) 12216 const storageKey = getStorageKey('date'); 12217 const storedData = getFromStorage(storageKey); 12218 12219 if (storedData && storedData.date && storedData.time) { 12220 // Render from localStorage immediately using helper function 12221 renderDeliveryDateFromData(storedData); 12222 } else { 12223 // Show skeleton loading state for dates 12224 if(deliveryDate) { 12225 const skeletonDates = ` 12226 <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled style="opacity: 0.6;"> 12227 <div style="background: #e0e0e0; width: 30px; height: 5px; margin: 0 auto 4px; border-radius: 0px;"></div>
12228 <span style="background: #d0d0d0; display: inline-block; width: 40px; height: 40px; border-radius: 100%;"></span> 12229 </button> 12230 <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled style="opacity: 0.6;"> 12231 <div style="background: #e0e0e0; width: 30px; height: 5px; margin: 0 auto 4px; border-radius: 0px;"></div> 12232 <span style="background: #d0d0d0; display: inline-block; width: 40px; height: 40px; border-radius: 100%;"></span> 12233 </button> 12234 <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled style="opacity: 0.6;"> 12235 <div style="background: #e0e0e0; width: 30px; height: 5px; margin: 0 auto 4px; border-radius: 0px;"></div> 12236 <span style="background: #d0d0d0; display: inline-block; width: 40px; height: 40px; border-radius: 100%;"></span> 12237 </button> 12238 <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled style="opacity: 0.6;"> 12239 <div style="background: #e0e0e0; width: 30px; height: 5px; margin: 0 auto 4px; border-radius: 0px;"></div> 12240 <span style="background: #d0d0d0; display: inline-block; width: 40px; height: 40px; border-radius: 100%;"></span> 12241 </button> 12242 `; 12243 deliveryDate.innerHTML = skeletonDates; 12244 } 12245 12246 // Show skeleton loading state for times 12247 if(deliveryTime) { 12248 const skeletonTimes = ` 12249 <button class="time-single calendarbutton2 btn steps-btn" disabled style="opacity: 0.6;"> 12250 <div style="background: #e0e0e0; width: 60px; height: 12px; margin: 0 auto 4px; border-radius: 4px;"></div> 12251 <div style="background: #d0d0d0; width: 80px; height: 10px; margin: 0 auto; border-radius: 4px;"></div> 12252 </button> 12253 <button class="time-single calendarbutton2 btn steps-btn" disabled style="opacity: 0.6;"> 12254 <div style="background: #e0e0e0; width: 60px; height: 12px; margin: 0 auto 4px; border-radius: 4px;"></div> 12255 <div style="background: #d0d0d0; width: 80px; height: 10px; margin: 0 auto; border-radius: 4px;"></div> 12256 </button> 12257 <button class="time-single calendarbutton2 btn steps-btn" disabled style="opacity: 0.6;"> 12258 <div style="background: #e0e0e0; width: 60px; height: 12px; margin: 0 auto 4px; border-radius: 4px;"></div> 12259 <div style="background: #d0d0d0; width: 80px; height: 10px; margin: 0 auto; border-radius: 4px;"></div> 12260 </button> 12261 `; 12262 deliveryTime.innerHTML = skeletonTimes; 12263 } 12264 12265 // Load delivery dates (with city parameter) 12266 renderDate(v).then(() => { 12267 console.log('Delivery dates loaded for city:', v); 12268 }).catch(error => { 12269 console.error('Error loading delivery dates:', error); 12270 if(deliveryDate) { 12271 deliveryDate.innerHTML = '<p style="text-align: center; color: #d32f2f; font-size: 14px; padding: 20px 0;">Failed to load dates. Please try again.</p>'; 12272 } 12273 }); 12274 } 12275 } 12276 12277 12278 disabledSameDay() 12279 12280 12281 if(v !== 'Jakarta' && v !== 'Depok' && v !== 'Bekasi' && v !== 'Tangerang') { 12282 12283 $("[data-addon=giftcard]").show() 12284 $("[data-addon=giftcard]").click() 12285 $("#itemAddons").show() 12286 $("#flower-step").addClass("nonjadetabek") 12287 } else { 12288 $("#cardOccasion, #navAddon, .collection-addons").show() 12289 $("[data-addon]").eq(0).click() 12290 $("#flower-step").removeClass("nonjadetabek") 12291 } 12292 12293 }) 12294 12295 $("#zip").change(function(e){ 12296 let v = $(this).val() 12297 var city = $("#cities").find('option:selected'); 12298 $("#properties-kodepos").val(v) 12299 if(city === 'Kota Lainnya') { 12300 $(this).attr("required", true) 12301 $("#recipient-address").val("") 12302 } 12303 }) 12304 12305 12306 var minDate = new Date(2026, 0, 12) 12307 12308 12309 // Initialize datepicker only if jQuery UI is loaded 12310 if (typeof $.fn.datepicker === 'function') { 12311 $("#full-date").datepicker({ 12312 minDate, 12313 dateFormat: 'Mdd_yy', //Nop22_2021, 12314 12315 beforeShowDay: disabledays, 12316 12317 onSelect: function (date) { 12318 $("#deliveryDate, #deliveryDateFull label ").hide() 12319 $("#deliveryDateFull").addClass("filled") 12320 $(".btnChangeDeliveryDate").removeClass("hide") 12321 12322 $("#full-date").prop('disabled', true); 12323 12324 $('#propDeliveryDate, #properties-delivery-date').val('Kirim_'+date); 12325 $(".date-full").addClass("selected") 12326 $(".date-single, .calendar-group").removeClass("selected") 12327 $("#propDeliveryTime").val('') 12328 $("#properties-delivery-time").val('-') 12329 $(".time-single").removeClass("selected") 12330 12331 const select = $('#cities option:selected').val(); 12332 if(select !== 'Jakarta' && select !== 'Depok' && select !== 'Bekasi' && select !== 'Tangerang') { 12333 $("#noteDeliveryDate").show() 12334 $("#noteDeliveryDate").html(`Order akan dikirim pada tanggal ${date} dari Jakarta. Estimasi tanggal diterima akan disesuaikan dengan waktu pengiriman oleh pihak ekspedisi ke lokasi Anda.`) 12335 } else { 12336 $("#noteDeliveryDate").hide() 12337 } 12338 12339 12340 } 12341 }); 12342 } else { 12343 // jQuery UI datepicker not loaded, show console warning 12344 console.warn('jQuery UI datepicker is not available. Make sure jQuery UI library is loaded.'); 12345 } 12346 12347 $(".btnChangeDeliveryDate").click(function(){ 12348 $("#deliveryDate, #deliveryDateFull label ").show() 12349 $("#deliveryDateFull").removeClass("filled") 12350 $(".btnChangeDeliveryDate").addClass("hide") 12351 $("#full-date").prop('disabled', false); 12352 }) 12353 12354 $("#deliveryDate").delegate(".calendarbutton:not(.date-full)", "click", function(e){ 12355 e.preventDefault() 12356 $(this).parents("#row-delivery-date").find("p.error").remove() 12357 const fulldate = $(this).data("fulldate") 12358 const day = $(this).data("day") 12359 const date = $(this).data("date")
12360 const month = $(this).data("month") 12361 const year = $(this).data("year") 12362 const off_pagi = $(this).data("offpagi") 12363 const off_siang = $(this).data("offsiang") 12364 const off_Malam = $(this).data("offMalam") 12365 $(".calendarbutton").removeClass("selected") 12366 $(this).addClass("selected") 12367 $("#propDeliveryDate, #properties-delivery-date").val(`Kirim_${month}${date}_${year}`) 12368 $("#propDeliveryTime").val('') 12369 $("#properties-delivery-time").val('-') 12370 $(".calendarbutton2").removeClass("selected") 12371 $("#full-date").val("Full Calendar") 12372 12373 12374 if(off_pagi && timeOfDay > off_pagi) { 12375 $("[data-time=Morning]").attr("disabled", true) 12376 } else { 12377 $("[data-time=Morning]").attr("disabled", false) 12378 } 12379 if(off_siang && timeOfDay > off_siang) { 12380 $("[data-time=Afternoon]").attr("disabled", true) 12381 } else { 12382 $("[data-time=Afternoon]").attr("disabled", false) 12383 } 12384 if(off_malam && timeOfDay > off_malam) { 12385 $("[data-time=Evening]").attr("disabled", true) 12386 } else { 12387 $("[data-time=Evening]").attr("disabled", false) 12388 } 12389 12390 12391 12392 const select = $('#cities option:selected').val(); 12393 if(select !== 'Jakarta' && !select.match('PickUp') && select !== 'Depok' && select !== 'Bekasi' && select !== 'Tangerang' && select !== '') { 12394 $("#noteDeliveryDate").show() 12395 $("#noteDeliveryDate").html(`Order akan dikirim pada tanggal ${day}, ${date} ${month} ${year} dari Jakarta. Estimasi tanggal diterima akan disesuaikan dengan waktu pengiriman oleh pihak ekspedisi ke lokasi Anda.`) 12396 } else { 12397 $("#noteDeliveryDate").hide() 12398 } 12399 12400 }) 12401 12402 if(today === 14 && timeOfDay > 17.00) { 12403 $("#deliveryDate button:first-child").attr("disabled", true) 12404 } 12405 12406 $("#deliveryTime").delegate(".calendarbutton2", "click", function(e){ 12407 e.preventDefault() 12408 const time = $(this).data("time") 12409 const date = $("#propDeliveryDate").val() 12410 if(date == '') { 12411 // return alert('Silakan pilih tanggal terlebih dahulu') 12412 } 12413 $(".calendarbutton2").removeClass("selected") 12414 $(this).addClass("selected") 12415 $("#propDeliveryTime, #properties-delivery-time").val(`KirimJam_${date.replace('Kirim_','')}_${time}`) 12416 }) 12417 12418 $('textarea.has-limit, input.has-limit').keyup(function () { 12419 max = this.getAttribute("maxlength"); 12420 let len = $(this).val().length; 12421 let limit = $(this).siblings(".limit"); 12422 if (len > max) { 12423 alert('you have reached the limit'); 12424 } else { 12425 limit.text(`${len}/${max}`); 12426 } 12427 }); 12428 12429 $("#button-action-step .btn").click(function(){ 12430 $(this).find("span").text("Processing..."); 12431 }); 12432 12433 $(".finishBtn").on('click', function() { 12434 $(this).addClass("is-adding"); 12435 // $(this).click(); 12436 }); 12437 12438 $('.setup-panel .nav-item a.btn-success').trigger('click'); 12439 12440 $("#button-action .btn").click(function(){ 12441 $("#flower-step").addClass("block"); 12442 $("#button-action").hide(); 12443 }); 12444 12445 $(".close-how-order").click(function(){ 12446 $("#flower-step").removeClass("block"); 12447 $("#button-action").show(); 12448 }); 12449 12450 $("#input-foto, #input-video").change(function(e){ 12451 readURL(this); 12452 }); 12453 12454 $("#logoPapan").change(function(){ 12455 readURLPapan(this); 12456 }); 12457 12458 $("#address-upload").change(async function(){ 12459 const upload_address = await readURLAddress(this) 12460 if(upload_address) { 12461 const url = upload_address.url 12462 $(".props-address-upload").val(url) 12463 // $(".form-address").addClass("address-uploaded") 12464 $(".form-address-upload").addClass("uploaded") 12465 12466 // $(this).parents(".form-group").siblings(".form-group").find("[required]").attr("required", false) 12467 12468 // Hit OCR endpoint to get address options 12469 // await hitOCREndpoint(url) 12470 } 12471 }) 12472 12473 $(".address-manualy").click(function(){ 12474 $(".form-address-upload").removeClass("uploaded"); 12475 $(".photo-address").hide(); 12476 // $(".form-address").removeClass("address-uploaded") 12477 $("#formAddressPurchase").find(".form-control").not('[data-properties="company"]').attr("required", true) 12478 }); 12479 12480 $(".case-video-preview").delegate(".replace-video", "click", function(){ 12481 $("#input-video").trigger("click") 12482 }) 12483 12484 $('.date-single').click(function(e) { 12485 e.preventDefault(); 12486 $('.date-single').removeClass('selected'); 12487 $('#full-date').removeClass('selected'); 12488 $(this).addClass('selected'); 12489 $('#full-date').html('Full' + '<br/>' + 'Calendar'); 12490 }); 12491 12492 // Function to load jQuery UI if not loaded 12493 function ensureJQueryUI() { 12494 return new Promise((resolve, reject) => { 12495 if (typeof $.fn.datepicker === 'function') { 12496 resolve(); 12497 } else { 12498 // Load CSS first 12499 if (!document.querySelector('link[href*="jquery-ui"]')) { 12500 const css = document.createElement('link'); 12501 css.rel = 'stylesheet'; 12502 css.href = 'https://code.jquery.com/ui/1.13.0/themes/base/jquery-ui.min.css'; 12503 document.head.appendChild(css); 12504 } 12505 12506 // Load JS 12507 const script = document.createElement('script'); 12508 script.src = 'https://code.jquery.com/ui/1.13.0/jquery-ui.min.js'; 12509 script.onload = () => { 12510 resolve(); 12511 }; 12512 script.onerror = () => { 12513 reject(new Error('Failed to load jQuery UI')); 12514 }; 12515 document.head.appendChild(script); 12516 } 12517 }); 12518 } 12519 12520 // Force trigger datepicker on click - initialize if needed 12521 $('#full-date').on('click focus', async function(e){ 12522 $('.date-single').removeClass('selected'); 12523 $(this).addClass('selected'); 12524 12525 // Ensure jQuery UI is loaded
12526 try { 12527 await ensureJQueryUI(); 12528 } catch(err) { 12529 alert('Calendar widget is not available. Please refresh the page.'); 12530 return; 12531 } 12532 12533 // Determine minDate 12534 12535 var minDate = new Date(2026, 0, 12); 12536 12537 12538 // Helper function to initialize datepicker 12539 const initDatepicker = () => { 12540 $(this).datepicker({ 12541 minDate: minDate, 12542 dateFormat: 'Mdd_yy', 12543 12544 beforeShowDay: disabledays, 12545 12546 onSelect: function (date) { 12547 $("#deliveryDate, #deliveryDateFull label ").hide(); 12548 $("#deliveryDateFull").addClass("filled"); 12549 $(".btnChangeDeliveryDate").removeClass("hide"); 12550 12551 $("#full-date").prop('disabled', true); 12552 12553 $('#propDeliveryDate, #properties-delivery-date').val('Kirim_'+date); 12554 $(".date-full").addClass("selected"); 12555 $(".date-single, .calendar-group").removeClass("selected"); 12556 $("#propDeliveryTime").val(''); 12557 $("#properties-delivery-time").val('-'); 12558 $(".time-single").removeClass("selected"); 12559 12560 const select = $('#cities option:selected').val(); 12561 if(select !== 'Jakarta' && select !== 'Depok' && select !== 'Bekasi' && select !== 'Tangerang') { 12562 $("#noteDeliveryDate").show(); 12563 $("#noteDeliveryDate").html(`Order akan dikirim pada tanggal ${date} dari Jakarta. Estimasi tanggal diterima akan disesuaikan dengan waktu pengiriman oleh pihak ekspedisi ke lokasi Anda.`); 12564 } else { 12565 $("#noteDeliveryDate").hide(); 12566 } 12567 12568 12569 } 12570 }); 12571 }; 12572 12573 // If datepicker doesn't exist, initialize it 12574 if (!$(this).hasClass('hasDatepicker')) { 12575 try { 12576 initDatepicker(); 12577 } catch(err) { 12578 console.error('Error initializing datepicker:', err); 12579 return; 12580 } 12581 } 12582 12583 // Try to show datepicker 12584 try { 12585 $(this).datepicker('show'); 12586 } catch(err) { 12587 // If error occurs (corrupted settings), destroy and reinitialize 12588 try { 12589 $(this).datepicker('destroy'); 12590 $(this).removeClass('hasDatepicker'); 12591 initDatepicker(); 12592 $(this).datepicker('show'); 12593 } catch(reinitErr) { 12594 // If still fails, alert user 12595 alert('Unable to open calendar. Please refresh the page.'); 12596 } 12597 } 12598 }); 12599 12600 // $("tr").each(function(){ 12601 // if($(this).text().match('SKU')) { 12602 // $(".sku-product").html($(this).parents("table").html()) 12603 // } 12604 // }) 12605 12606 $("#product-image").scroll(function(){ 12607 $(".desc-add").each(function(){ 12608 const img = $(this).find("img") 12609 const src = img.data("src") 12610 img.attr("src", src) 12611 }) 12612 }) 12613 12614 $(".product-fixed").hide() 12615 12616 let target = $("#personalizeBtn") 12617 12618 12619 $(".product-meta").scroll(function() { 12620 if ($(window).scrollTop() >= target.offset().top ) { 12621 $(".product-fixed").addClass("show") 12622 } else { 12623 $(".product-fixed").removeClass("show") 12624 } 12625 }); 12626 12627 $(window).scroll(function() { 12628 if ($(window).scrollTop() >= target.offset().top ) { 12629 $(".product-fixed").addClass("show") 12630 } else { 12631 $(".product-fixed").removeClass("show") 12632 } 12633 }); 12634 12635 // Add event listeners to trigger card preview updates 12636 $(document).on('input change keyup', '#senderCard, #kartu-ucapan, [data-properties="ucapan"], [data-properties="kartu-nama-pengirim"]', function() { 12637 $(document).trigger('cardDataUpdated'); 12638 }); 12639 12640 // Trigger card preview update when photo or video is uploaded 12641 $(document).on('photoUploaded videoUploaded', function() { 12642 $(document).trigger('cardDataUpdated'); 12643 }); 12644 }); 12645</script>
12645 12646 12647
12647<script> 12648 // 12649 </script>
12649 12650
12651<script> 12652 $(document).ready(function(){ 12653 $('table tr td').each(function(){ 12654 var texto = $(this).text(); 12655 var nextto = $(this).next("td"); 12656 var sku = $("#data-sku").val() 12657 if(texto == 'SKU'){ 12658 nextto.text(sku) 12659 } 12660 }); 12661 12662 $(".stamped-summary-actions-newquestion").text("Tulis Pertanyaan"); 12663 $(".stamped-summary-actions-newreview").text("Tulis Review"); 12664 $("#tab-questions").text("Pertanyaan"); 12665 12666 $(".freeship .icon").click(function(){ 12667 $(".fs-content").slideToggle(); 12668 $(this).parents(".freeship").toggleClass("expand"); 12669 }); 12670 12671 var $easyzoom = $('.easyzoom').easyZoom(); 12672 // Setup thumbnails example 12673 var api1 = $easyzoom.filter('.easyzoom--with-thumbnails').data('easyZoom'); 12674 $('.thumbnails').on('click', 'a', function(e) { 12675 var $this = $(this); 12676 e.preventDefault(); 12677 // Use EasyZoom's `swap` method 12678 api1.swap($this.data('standard'), $this.attr('href')); 12679 }); 12680 12681 $('#playerID').click(function(){ 12682 var videoURL = $('#VdoID').attr('src'), 12683 dataplay = $('#VdoID').attr('data-play'); 12684 12685 //for check autoplay 12686 //if not set autoplay=1 12687 if(dataplay == 0 ){ 12688 $('#VdoID').attr('src',videoURL+'?autoplay=1'); 12689 $('#VdoID').attr('data-play',1); 12690 } 12691 else{ 12692 var videoURL = $('#VdoID').attr('src'); 12693 videoURL = videoURL.replace("?autoplay=1", ""); 12694 $('#VdoID').prop('src',''); 12695 $('#VdoID').prop('src',videoURL); 12696 12697 $('#VdoID').attr('data-play',0); 12698 } 12699 12700 }); 12701 12702 $(".product-photo-thumb-video").click(function(e){ 12703 e.preventDefault(); 12704 12705 var newEmbed = $(this).attr('href'); 12706 $("#featured-image-product").addClass("img-video"); 12707 $("#ProductPhotoImg").hide(); 12708 $("#featured-image-product .video").show(); 12709 $("#featured-image-product iframe").attr('src', newEmbed); 12710 $("#VdoID")[0].src += "&autoplay=1"; 12711 }); 12712 $(".product-single__thumbnail").click(function(evt){ 12713 evt.preventDefault(); 12714 $("#featured-image-product").removeClass("img-video"); 12715 $("#ProductPhotoImg").show(); 12716 $("#featured-image-product .video").hide(); 12717 $("#featured-image-product iframe").attr('src', ''); 12718 }); 12719 12720 if($('#product-meta .short-desc > div').length >= 1){ 12721 //console.log('div detected') 12722 var replacer = $('#product-meta .short-desc > div').contents(); 12723 $('#product-meta .short-desc > div').replaceWith(replacer); 12724 12725 var cAssured = $('.c-assured').detach(); 12726 cAssured.insertAfter('.meta-sds .stock-info'); 12727 } 12728 12729 12730 const productMeta = $(".product-meta") 12731 if(productMeta.height() > 600) { 12732 $("#product-image, .product-meta").css("max-height", productMeta) 12733 } 12734 12735 12736 $(".heading-toggle").click(function(){ 12737 $(this).parent().toggleClass("open") 12738 12739 }); 12740 }); 12741</script>
12741 12742 12743 12744
12744<script type="application/json" id="ProductJson-Product"> 12745 12746 {"id":7881418965207,"title":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap","handle":"outerbloom-mulan-bag-hampers","description":"\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eATAS4D\u003c\/strong\u003e\u003cbr\u003e\u003cstrong\u003e\u003c\/strong\u003e\u003cstrong\u003e\u003c\/strong\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTOTO\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\u003cstrong\u003eTOGEL\u003c\/strong\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eATAS4D adalah platform game togel toto macau 4D terbaik dengan fitur lengkap, akses cepat, pasaran terpercaya, dan peluang kemenangan menarik setiap hari.\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1589\/6833\/files\/Ruby-Mulan-Bag.jpg?v=1734513286\" alt=\"\"\u003e\u003c\/p\u003e\n\u003ctable style=\"width: 100.091%;\" width=\"100%\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 33.7327%;\"\u003eSKU\u003c\/td\u003e\n\u003ctd style=\"width: 65.9908%;\"\u003e[C]ATAS4D\u003cbr\u003e[C]OBIPCL1004-CNY2026\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 33.7327%;\"\u003eIsi\u003c\/td\u003e\n\u003ctd style=\"width: 65.9908%;\"\u003elink login situs toto togel 4D\u003cbr\u003etoto4d resmi terpercaya 2026\u003cbr\u003ebandar toto macau gacor\u003cbr\u003esitus toto4d togel macau\u003cbr\u003etoto4d togel macau gacor\u003cbr\u003esitus toto togel macau\u003cbr\u003etoto togel 4D\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e","published_at":"2025-12-23T16:52:21","created_at":"2023-01-06T14:53:52","vendor":"Outerbloom Hampers","type":"Parcel Inhouse","tags":["Brand_Outerbloom Hampers","card","CNY","CNY 2026","Collection_Heritage","custom-hampers","formdate","icon-card","icon-gift","Inhouse","MonSatParcel","MonSatSiang","no-deliverytime","Parcel","Parcel CNY","Parcel Inhouse","Parcel Nusantara","Pengiriman_Bekasi","Pengiriman_Bogor","Pengiriman_Depok","Pengiriman_Jakarta","Pengiriman_Kota Lainnya","Pengiriman_Tangerang","POO Parcel","ship-paketkecil","takeoutselfpickup","Untuk_Hari Raya","uploadfotocard","upsell-inhouse"],"price":"NaN","price_min":"NaN","price_max":"NaN","price_varies":false,"compare_at_price":"NaN","compare_at_price_min":"NaN","compare_at_price_max":"NaN","compare_at_price_varies":false,"all_variant_ids":[45873023910103,45873024008407],"variants":[{"id":45873023910103,"title":"Standard","option1":"Standard","option2":null,"option3":null,"sku":"[C]ATAS4D","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap - Standard","public_title":"Standard","options":["Standard"],"price":1.349.41700,"weight":5000,"compare_at_price":73500000,"inventory_quantity":0,"inventory_management":"shopify","inventory_policy":"continue","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":45873024008407,"title":"Custom logo \u0026 photo for frame","option1":"Custom logo \u0026 photo for frame","option2":null,"option3":null,"sku":"[C]OBIPCL1004-CNY2026","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap - Custom logo \u0026 photo for frame","public_title":"Custom logo \u0026 photo for frame","options":["Custom logo \u0026 photo for frame"],"price":63500000,"weight":5000,"compare_at_price":78500000,"inventory_quantity":0,"inventory_management":"shopify","inventory_policy":"continue","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"available":false,"images":["\/\/outerbloom.com\/cdn\/shop\/files\/CNY-Ruby-Mulan-Bag.jpg?v=1766041636","\/\/outerbloom.com\/cdn\/shop\/files\/nibble-box-crunchy-jam.jpg?v=1767855108","\/\/outerbloom.com\/cdn\/shop\/files\/nibble-box-berry-affair.jpg?v=1767855108","\/\/outerbloom.com\/cdn\/shop\/files\/madu_c5806a73-3334-4300-bbe4-c59939ac5270.jpg?v=1768357765","\/\/outerbloom.com\/cdn\/shop\/files\/serenitea_ab87e31e-f6d7-4ee1-97ee-9709a9b861f5.jpg?v=1768357765","\/\/outerbloom.com\/cdn\/shop\/files\/diffuser-woody-breeze.jpg?v=1767855083","\/\/outerbloom.com\/cdn\/shop\/files\/frame_b97b5afe-8c12-44e0-a70b-628c49f1c7ac.jpg?v=1767855108"],"featured_image":"\/\/outerbloom.com\/cdn\/shop\/files\/CNY-Ruby-Mulan-Bag.jpg?v=1766041636","options":["Variants"],"url":"\/products\/outerbloom-mulan-bag-hampers"} 12747 </script>
12747 12748 12749
12749<script type="application/json" id="VariantJson-Product"> 12750 [ 12751 12752 { 12753 "incoming": false, 12754 "next_incoming_date": null 12755 }, 12756 12757 { 12758 "incoming": false, 12759 "next_incoming_date": null 12760 } 12761 12762 ] 12763 </script>
12763 12764 12765 12766 12767 12768</div> 12769 12770
12771<script src="https://outerbloom.com/cdn/shopifycloud/storefront/assets/themes_support/option_selection-b017cd28.js" type="text/javascript"></script>
12771 12772<style> 12773 .stamped-review-header-title, 12774 .stamped-review-header .author, 12775 .stamped-review-content-body, 12776 .stamped-sort-select, 12777 .stamped-review-header .verified-badge[data-type=buyer]:after, 12778 .stamped-review-header-byline, 12779 .stamped-review-reply-body {font-size: 14px!important;font-family: 'Barlow',sans-serif!important;} 12780 .stamped-review {margin-bottom: 0;} 12781 .stamped-review-body {padding-left: 65px;} 12782 .stamped-review:first-child {padding-top: 25px;} 12783 .stamped-review-content {clear: none;} 12784 .stamped-review-reply {margin: 15px 0 0 65px;background: #f2f2f2;border-left: none;} 12785 .stamped-review-reply-body {padding-left: 65px;} 12786 .stamped-review-header .author {text-transform: capitalize;} 12787 .stamped-questions .stamped-review-content {padding-left: 65px;} 12788 12789 .stamped-pagination {margin: 20px 0 0;} 12790 .stamped-pagination li {position: initial!important;display: inline-block;position: relative;vertical-align: middle;text-decoration: none;-webkit-tap-highlight-color: transparent;-webkit-box-flex: 0;-moz-box-flex: 0;-ms-flex: 0 0 auto;flex: 0 0 auto;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;background: 0 0;text-transform: none;color: #33373D;font-weight: 400;-webkit-transition: background .1s ease,box-shadow .1s ease,color .1s ease;transition: background .1s ease,box-shadow .1s ease,color .1s ease;border: 1px solid #ccc;border-right: none;margin-bottom: 0;} 12791 .stamped-pagination li a {color: #121212;padding: 13px 18px;vertical-align: middle;display: block;} 12792 .stamped-pagination li.active a {background-color: #ddd;font-weight: 400;} 12793 .stamped-pagination li:hover a {background: #ddd;} 12794 .stamped-pagination .next {border-right: 1px solid #ccc;} 12795 .stamped-pagination li:first-child {border-top-left-radius: 5px;border-bottom-left-radius: 5px;} 12796 .stamped-pagination li:last-child {border-top-right-radius: 5px;border-bottom-right-radius: 5px;} 12797 12798 #stamped-pagination-question span.page {display: inline-block;border: 1px solid #ccc;width: 47px;} 12799 #stamped-pagination-question span {font-size: 14px;} 12800 #stamped-pagination-question .page.active {padding: 12px;font-weight: 400;background: #ddd;} 12801 #stamped-pagination-question a, #stamped-pagination-question .page.active {color: #121212;padding: 13px 18px;vertical-align: middle;display: inline-block;} 12802 .stamped-pagination-deco {color: #121212;padding: 13px 18px;width: 47px;vertical-align: middle;display: inline-block;border: 1px solid #ccc;padding: 12px;} 12803 .stamped-pagination-prev, .stamped-pagination-next {position: inherit;} 12804 .stamped-pagination-prev a, .stamped-pagination-next a {width: auto!important;border: 1px solid #ccc;} 12805 12806 @media (max-width: 480px){ 12807 .stamped-review-reply {margin-left: 0!important;} 12808 select.stamped-sort-select {font-size: 13px!important;} 12809 } 12810 12811 #product-reviews .stamped-summary-ratings, #product-reviews .stamped-summary-actions, .stamped-content { 12812 display: block !important; 12813 } 12814</style>
12815<script> 12816 var selectCallback = function(variant, selector) { 12817 timber.productPage({ 12818 money_format: "Rp {{amount_no_decimals}}", 12819 variant: variant, 12820 selector: selector 12821 }); 12822 }; 12823 12824 jQuery(function($) { 12825 new Shopify.OptionSelectors('productSelect', { 12826 product: 12827 12828 12829 12830 12831 12832{"id":7881418965207,"title":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap","handle":"outerbloom-mulan-bag-hampers","description":"\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eATAS4D\u003c\/strong\u003e\u003cbr\u003e\u003cstrong\u003e\u003c\/strong\u003e\u003cstrong\u003e\u003c\/strong\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTOTO\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\u003cstrong\u003eTOGEL\u003c\/strong\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eATAS4D adalah platform game togel toto macau 4D terbaik dengan fitur lengkap, akses cepat, pasaran terpercaya, dan peluang kemenangan menarik setiap hari.\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1589\/6833\/files\/Ruby-Mulan-Bag.jpg?v=1734513286\" alt=\"\"\u003e\u003c\/p\u003e\n\u003ctable style=\"width: 100.091%;\" width=\"100%\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 33.7327%;\"\u003eSKU\u003c\/td\u003e\n\u003ctd style=\"width: 65.9908%;\"\u003e[C]ATAS4D\u003cbr\u003e[C]OBIPCL1004-CNY2026\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 33.7327%;\"\u003eIsi\u003c\/td\u003e\n\u003ctd style=\"width: 65.9908%;\"\u003elink login situs toto togel 4D\u003cbr\u003etoto4d resmi terpercaya 2026\u003cbr\u003ebandar toto macau gacor\u003cbr\u003esitus toto4d togel macau\u003cbr\u003etoto4d togel macau gacor\u003cbr\u003esitus toto togel macau\u003cbr\u003etoto togel 4D\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e","published_at":"2025-12-23T16:52:21+07:00","created_at":"2023-01-06T14:53:52+07:00","vendor":"Outerbloom Hampers","type":"Parcel Inhouse","tags":["Brand_Outerbloom Hampers","card","CNY","CNY 2026","Collection_Heritage","custom-hampers","formdate","icon-card","icon-gift","Inhouse","MonSatParcel","MonSatSiang","no-deliverytime","Parcel","Parcel CNY","Parcel Inhouse","Parcel Nusantara","Pengiriman_Bekasi","Pengiriman_Bogor","Pengiriman_Depok","Pengiriman_Jakarta","Pengiriman_Kota Lainnya","Pengiriman_Tangerang","POO Parcel","ship-paketkecil","takeoutselfpickup","Untuk_Hari Raya","uploadfotocard","upsell-inhouse"],"price":1.349.41700,"price_min":1.349.41700,"price_max":63500000,"available":true,"price_varies":true,"compare_at_price":73500000,"compare_at_price_min":73500000,"compare_at_price_max":78500000,"compare_at_price_varies":true,"variants":[{"id":45873023910103,"title":"Standard","option1":"Standard","option2":null,"option3":null,"sku":"[C]ATAS4D","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap - Standard","public_title":"Standard","options":["Standard"],"price":1.349.41700,"weight":5000,"compare_at_price":73500000,"inventory_quantity":0,"inventory_management":"shopify","inventory_policy":"continue","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":45873024008407,"title":"Custom logo \u0026 photo for frame","option1":"Custom logo \u0026 photo for frame","option2":null,"option3":null,"sku":"[C]OBIPCL1004-CNY2026","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap - Custom logo \u0026 photo for frame","public_title":"Custom logo \u0026 photo for frame","options":["Custom logo \u0026 photo for frame"],"price":63500000,"weight":5000,"compare_at_price":78500000,"inventory_quantity":0,"inventory_management":"shopify","inventory_policy":"continue","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/outerbloom.com\/cdn\/shop\/files\/CNY-Ruby-Mulan-Bag.jpg?v=1766041636","\/\/outerbloom.com\/cdn\/shop\/files\/nibble-box-crunchy-jam.jpg?v=1767855108","\/\/outerbloom.com\/cdn\/shop\/files\/nibble-box-berry-affair.jpg?v=1767855108","\/\/outerbloom.com\/cdn\/shop\/files\/madu_c5806a73-3334-4300-bbe4-c59939ac5270.jpg?v=1768357765","\/\/outerbloom.com\/cdn\/shop\/files\/serenitea_ab87e31e-f6d7-4ee1-97ee-9709a9b861f5.jpg?v=1768357765","\/\/outerbloom.com\/cdn\/shop\/files\/diffuser-woody-breeze.jpg?v=1767855083","\/\/outerbloom.com\/cdn\/shop\/files\/frame_b97b5afe-8c12-44e0-a70b-628c49f1c7ac.jpg?v=1767855108"],"featured_image":"\/\/outerbloom.com\/cdn\/shop\/files\/CNY-Ruby-Mulan-Bag.jpg?v=1766041636","options":["Variants"],"media":[{"alt":null,"id":36696952045783,"position":1,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/CNY-Ruby-Mulan-Bag.jpg?v=1766041636"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/CNY-Ruby-Mulan-Bag.jpg?v=1766041636","width":850},{"alt":null,"id":36806926401751,"position":2,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/preview_images\/c89f6e0ce8a04dc1842e9dc31bb3de3e.thumbnail.0000000000.jpg?v=1767854932"},"aspect_ratio":1.0,"duration":16730,"media_type":"video","sources":[{"format":"mp4","height":480,"mime_type":"video\/mp4","url":"\/\/outerbloom.com\/cdn\/shop\/videos\/c\/vp\/c89f6e0ce8a04dc1842e9dc31bb3de3e\/c89f6e0ce8a04dc1842e9dc31bb3de3e.SD-480p-1.5Mbps-66570824.mp4?v=0","width":480},{"format":"mp4","height":1080,"mime_type":"video\/mp4","url":"\/\/outerbloom.com\/cdn\/shop\/videos\/c\/vp\/c89f6e0ce8a04dc1842e9dc31bb3de3e\/c89f6e0ce8a04dc1842e9dc31bb3de3e.HD-1080p-7.2Mbps-66570824.mp4?v=0","width":1080},{"format":"mp4","height":720,"mime_type":"video\/mp4","url":"\/\/outerbloom.com\/cdn\/shop\/videos\/c\/vp\/c89f6e0ce8a04dc1842e9dc31bb3de3e\/c89f6e0ce8a04dc1842e9dc31bb3de3e.HD-720p-4.5Mbps-66570824.mp4?v=0","width":720},{"format":"m3u8","height":1080,"mime_type":"application\/x-mpegURL","url":"\/\/outerbloom.com\/cdn\/shop\/videos\/c\/vp\/c89f6e0ce8a04dc1842e9dc31bb3de3e\/c89f6e0ce8a04dc1842e9dc31bb3de3e.m3u8?v=0","width":1080}]},{"alt":null,"id":36727314612439,"position":3,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/nibble-box-crunchy-jam.jpg?v=1767855108"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/nibble-box-crunchy-jam.jpg?v=1767855108","width":850},{"alt":null,"id":36727314350295,"position":4,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/nibble-box-berry-affair.jpg?v=1767855108"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/nibble-box-berry-affair.jpg?v=1767855108","width":850},{"alt":null,"id":36727369236695,"position":5,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/madu_c5806a73-3334-4300-bbe4-c59939ac5270.jpg?v=1768357765"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/madu_c5806a73-3334-4300-bbe4-c59939ac5270.jpg?v=1768357765","width":850},{"alt":null,"id":36727136878807,"position":6,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/serenitea_ab87e31e-f6d7-4ee1-97ee-9709a9b861f5.jpg?v=1768357765"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/serenitea_ab87e31e-f6d7-4ee1-97ee-9709a9b861f5.jpg?v=1768357765","width":850},{"alt":null,"id":36727264116951,"position":7,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/diffuser-woody-breeze.jpg?v=1767855083"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/diffuser-woody-breeze.jpg?v=1767855083","width":850},{"alt":null,"id":36727117086935,"position":8,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/frame_b97b5afe-8c12-44e0-a70b-628c49f1c7ac.jpg?v=1767855108"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/frame_b97b5afe-8c12-44e0-a70b-628c49f1c7ac.jpg?v=1767855108","width":850}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eATAS4D\u003c\/strong\u003e\u003cbr\u003e\u003cstrong\u003e\u003c\/strong\u003e\u003cstrong\u003e\u003c\/strong\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTOTO\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\u003cstrong\u003eTOGEL\u003c\/strong\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eATAS4D adalah platform game togel toto macau 4D terbaik dengan fitur lengkap, akses cepat, pasaran terpercaya, dan peluang kemenangan menarik setiap hari.\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1589\/6833\/files\/Ruby-Mulan-Bag.jpg?v=1734513286\" alt=\"\"\u003e\u003c\/p\u003e\n\u003ctable style=\"width: 100.091%;\" width=\"100%\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 33.7327%;\"\u003eSKU\u003c\/td\u003e\n\u003ctd style=\"width: 65.9908%;\"\u003e[C]ATAS4D\u003cbr\u003e[C]OBIPCL1004-CNY2026\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 33.7327%;\"\u003eIsi\u003c\/td\u003e\n\u003ctd style=\"width: 65.9908%;\"\u003elink login situs toto togel 4D\u003cbr\u003etoto4d resmi terpercaya 2026\u003cbr\u003ebandar toto macau gacor\u003cbr\u003esitus toto4d togel macau\u003cbr\u003etoto4d togel macau gacor\u003cbr\u003esitus toto togel macau\u003cbr\u003etoto togel 4D\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e"}, 12833 onVariantSelected: selectCallback, 12834 enableHistoryState: true 12835 }); 12836 12837 // Add label if only one product option and it isn't 'Title'. Could be 'Size'. 12838 12839 $('.selector-wrapper:eq(0)').prepend('<label for="productSelect-option-0">Variants</label>'); 12840 12841 12842 // Hide selectors if we only have 1 variant and its title contains 'Default'. 12843 12844 }); 12845</script>
12845 12846 12847
12848<script type="application/ld+json"> 12849{ 12850 "@context": "https://schema.org", 12851 "@type": "FAQPage", 12852 "mainEntity": [ 12853 { 12854 "@type": "Question", 12855 "name": "Apa itu ATAS4D dan kenapa populer di game togel online?", 12856 "acceptedAnswer": { 12857 "@type": "Answer", 12858 "text": "ATAS4D adalah platform game togel online yang menyediakan berbagai pasaran populer seperti togel macau, toto macau, dan toto macau 4D. Popularitasnya meningkat karena sistem stabil, result akurat, dan fitur lengkap yang memudahkan pemain dalam bermain setiap hari." 12859 } 12860 }, 12861 { 12862 "@type": "Question", 12863 "name": "Apakah ATAS4D menyediakan pasaran togel macau resmi?", 12864 "acceptedAnswer": { 12865 "@type": "Answer", 12866 "text": "Ya, ATAS4D menyediakan pasaran togel macau dan toto macau 4D dengan data result yang akurat dan update real-time. Hal ini membuat pemain bisa menganalisa angka dengan lebih tepat." 12867 } 12868 }, 12869 { 12870 "@type": "Question", 12871 "name": "Bagaimana cara bermain toto macau 4D di ATAS4D?", 12872 "acceptedAnswer": { 12873 "@type": "Answer", 12874 "text": "Cara bermain cukup mudah, pemain hanya perlu mendaftar akun, melakukan deposit, lalu memilih pasaran toto macau 4D. Setelah itu, pemain bisa langsung memasang angka sesuai prediksi mereka." 12875 } 12876 }, 12877 { 12878 "@type": "Question", 12879 "name": "Apakah ATAS4D aman untuk bermain game togel?", 12880 "acceptedAnswer": { 12881 "@type": "Answer", 12882 "text": "ATAS4D menggunakan sistem keamanan modern untuk melindungi data dan transaksi pemain. Dengan sistem enkripsi dan layanan profesional, platform ini memastikan keamanan dalam bermain game togel online." 12883 } 12884 }, 12885 { 12886 "@type": "Question", 12887 "name": "Apa keunggulan ATAS4D dibanding situs togel lainnya?", 12888 "acceptedAnswer": { 12889 "@type": "Answer", 12890 "text": "Beberapa keunggulan ATAS4D antara lain akses cepat, tampilan user-friendly, pasaran lengkap seperti togel macau, serta dukungan customer service yang responsif 24 jam." 12891 } 12892 }, 12893 { 12894 "@type": "Question", 12895 "name": "Apakah ATAS4D bisa diakses melalui mobile?", 12896 "acceptedAnswer": { 12897 "@type": "Answer", 12898 "text": "Ya, ATAS4D dapat diakses melalui berbagai perangkat seperti smartphone dan desktop tanpa mengurangi performa. Ini memudahkan pemain bermain togel macau kapan saja dan di mana saja." 12899 } 12900 }, 12901 { 12902 "@type": "Question", 12903 "name": "Apa saja fitur lengkap yang tersedia di ATAS4D?", 12904 "acceptedAnswer": { 12905 "@type": "Answer", 12906 "text": "ATAS4D menyediakan berbagai fitur unggulan seperti result macau real-time, transaksi cepat, akses multi perangkat, sistem keamanan modern, serta layanan customer service yang siap membantu pemain." 12907 } 12908 }, 12909 { 12910 "@type": "Question", 12911 "name": "Mengapa banyak pemain memilih ATAS4D untuk bermain togel macau?", 12912 "acceptedAnswer": { 12913 "@type": "Answer", 12914 "text": "Banyak pemain memilih ATAS4D karena menawarkan pasaran togel macau terpercaya, sistem stabil, proses transaksi cepat, serta pengalaman bermain yang nyaman dan mudah diakses kapan saja." 12915 } 12916 }, 12917 { 12918 "@type": "Question", 12919 "name": "Apakah data result macau di ATAS4D diperbarui secara real-time?", 12920 "acceptedAnswer": { 12921 "@type": "Answer", 12922 "text": "Ya, ATAS4D menghadirkan data result macau yang diperbarui secara real-time sehingga pemain dapat memperoleh informasi terbaru untuk kebutuhan analisis angka dan pemantauan hasil pasaran." 12923 } 12924 }, 12925 { 12926 "@type": "Question", 12927 "name": "Bagaimana proses pendaftaran akun di ATAS4D?", 12928 "acceptedAnswer": { 12929 "@type": "Answer", 12930 "text": "Proses pendaftaran di ATAS4D dirancang sederhana dan cepat. Pengguna hanya perlu mengisi data yang diperlukan, melakukan verifikasi, kemudian akun siap digunakan untuk mengakses berbagai fitur yang tersedia." 12931 } 12932 } 12933 ] 12934} 12935</script>
12935 12936
12937<script type="application/ld+json"> 12938{ 12939 "@context": "https://schema.org", 12940 "@type": "Product", 12941 "name": "ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap", 12942 "description": "ATAS4D adalah platform game togel toto macau 4D terbaik dengan fitur lengkap, akses cepat, pasaran terpercaya, dan peluang kemenangan menarik setiap hari.", 12943 "brand": { 12944 "@type": "Brand", 12945 "name": "ATAS4D" 12946 }, 12947 "aggregateRating": { 12948 "@type": "AggregateRating", 12949 "ratingValue": "5.0", 12950 "bestRating": "5", 12951 "worstRating": "1", 12952 "ratingCount": "14", 12953 "reviewCount": "14" 12954 }, 12955 "review": [ 12956 { 12957 "@type": "Review", 12958 "author": { "@type": "Person", "name": "Bagas Pratama" }, 12959 "datePublished": "2026-03-11", 12960 "reviewRating": { "@type": "Rating", "ratingValue": "5", "bestRating": "5" }, 12961 "reviewBody": "Saya sudah coba banyak situs game togel, tapi ATAS4D paling stabil. Result togel macau selalu update cepat dan akurat, jadi lebih mudah analisa angka." 12962 }, 12963 { 12964 "@type": "Review", 12965 "author": { "@type": "Person", "name": "Rangga Saputra" }, 12966 "datePublished": "2026-03-06", 12967 "reviewRating": { "@type": "Rating", "ratingValue": "5", "bestRating": "5" }, 12968 "reviewBody": "Main toto macau 4D di ATAS4D terasa lebih nyaman. Tampilan simpel dan proses deposit cepat banget. Cocok buat pemain harian." 12969 }, 12970 { 12971 "@type": "Review", 12972 "author": { "@type": "Person", "name": "Dimas Arya" }, 12973 "datePublished": "2026-02-28", 12974 "reviewRating": { "@type": "Rating", "ratingValue": "5", "bestRating": "5" }, 12975 "reviewBody": "Yang saya suka dari ATAS4D adalah pasaran lengkapnya. Togel macau dan toto macau tersedia dengan data yang jelas, jadi lebih percaya diri pasang angka." 12976 }, 12977 { 12978 "@type": "Review", 12979 "author": { "@type": "Person", "name": "Galih Ramadhan" }, 12980 "datePublished": "2026-02-21", 12981 "reviewRating": { "@type": "Rating", "ratingValue": "5", "bestRating": "5" }, 12982 "reviewBody": "Customer service ATAS4D responsif dan membantu. Saya pernah ada kendala, langsung dibantu dengan cepat. Recommended untuk game togel online." 12983 }, 12984 { 12985 "@type": "Review", 12986 "author": { "@type": "Person", "name": "Wira Mahendra" }, 12987 "datePublished": "2026-02-16", 12988 "reviewRating": { "@type": "Rating", "ratingValue": "5", "bestRating": "5" }, 12989 "reviewBody": "Platformnya ringan di HP, jadi bisa main kapan saja. Toto macau 4D di ATAS4D juga punya peluang menarik menurut saya." 12990 } 12991 ] 12992} 12993</script>
12993 12994
12995<script type="application/ld+json"> 12996{ 12997 "@context": "http://schema.org", 12998 "@type": "Product", 12999 "offers": { 13000 "@type": "Offer", 13001 "availability":"https://schema.org/InStock", 13002 "price": 1885000, 13003 "priceValidUntil": "24-02-2026", 13004 "priceCurrency": "IDR", 13005 "url": "https://atas4d.biz/" 13006 }, 13007 "brand": { 13008 "@type": "Brand", 13009 "name": "ATAS4D" 13010 }, 13011 "sku": "7881418965207", 13012 "gtin13": "ATAS 4D", 13013 "name": "ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap", 13014 "description": "\n\nATAS4D merupakan platform togel toto macau 4D terpercaya yang menghadirkan fitur lengkap, akses mudah, dan pengalaman bermain yang nyaman setiap hari.\n\n\nATAS4D hadir sebagai pilihan utama bagi penggemar togel macau dan toto macau 4D dengan layanan cepat, pasaran lengkap, serta sistem yang stabil.\n\nATAS4D menyediakan berbagai pasaran togel macau dan toto macau 4D dengan dukungan teknologi modern, transaksi cepat, dan layanan profesional.\n\nSebagai platform togel online terpercaya, ATAS4D menawarkan akses praktis, data result yang akurat, dan beragam fitur yang mendukung kebutuhan pemain.\n\n\n\n\nSKU\n[C]ATAS4D[C]GAME-TOGEL\n\n\n\nIsi\nATAS4D menjadi destinasi favorit para pemain toto macau 4D berkat kemudahan akses, sistem keamanan yang baik, dan layanan yang responsif.\n\n\n\n", 13015 "category": "Digital Entertainment Platform", 13016 "url": "https://atas4d.biz/", 13017 "image": { 13018 "@type": "ImageObject", 13019 "url": "https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp", 13020 "image": "https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp", 13021 "name": "ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap", 13022 "width": 1024, 13023 "height": 1024 13024 } 13025} 13026</script>
13026 13027 13028 13029 13030 13031
13032<script id="bss-ltap-hide-price" type="text/javascript" > 13033!function(e){var t={};function o(r){if(t[r])return t[r].exports;var c=t[r]={i:r,l:!1,exports:{}};return e[r].call(c.exports,c,c.exports,o),c.l=!0,c.exports}o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var c in e)o.d(r,c,function(t){return e[t]}.bind(null,c));return r},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}([function(e,t,o){"use strict";function r(e){e.ltsp={},function(e){e.ltsp.quickView=function(){document.querySelectorAll(".quickview-button").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementById("add-to-cart-quickview-form");if(e){let t=e.querySelector(".groups-btn");t&&t.remove();let o=e.querySelector(".pieces");o&&o.remove();let r=e.querySelector(".bsscommerce-ltsp-message");r&&r.remove()}if(e=document.querySelector("[data-quickview-modal] .halo-modal-body"),e){let t=e.querySelector(".quantity");t&&t.remove()}}),1e3)}))})),document.querySelectorAll(".shop-now-button").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementById("ShopNowContainer");if(e){let t=e.querySelector("#AddToCart");t&&t.remove()}}),2e3)}))})),document.querySelectorAll(".collection__filter").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t].closest(".product-grid-item");if(o){let e=o.querySelector(".btn--quick-view");e&&e.remove()}}}),1500)}))})),document.querySelectorAll(".btn--icon.quick-product__btn").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t].closest(".product-grid__content");if(o){let e=o.querySelector(".payment-buttons");e&&e.remove()}}}),2e3)}))})),document.querySelectorAll(".product-facet__aside").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t].closest(".product-item");if(o){let e=o.querySelector('form[action="/cart/add"]');e&&e.remove();let t=o.querySelector(".product-item__quick-form");t&&t.remove()}}}),1500)}))})),document.querySelectorAll(".pagination").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t].closest(".product-item");if(o){let e=o.querySelector('form[action="/cart/add"]');e&&e.remove();let t=o.querySelector(".product-item__quick-form");t&&t.remove()}}}),1800)}))})),document.querySelectorAll(".collection-filters__sort").forEach((function(e){e.addEventListener("change",(function(){setTimeout((function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t].closest(".indiv-product");if(o){let e=o.querySelector('form[action="/cart/add"]');e&&e.remove()}}}),1500)}))}
13033)),document.querySelectorAll(".slideout__drawer-right, .sidebar_leftside_wapper, .filtering__results").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t].closest(".product-index");if(o){let e=o.querySelector(".js-quickview-trigger");e&&e.remove()}}}),1500)}))})),document.querySelectorAll("a.product-loop__quickview").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t].closest(".large--one-half");if(o){let e=o.querySelector(".quick-smart-wrapper");e&&e.remove();let t=o.querySelector("#quantity-container");t&&t.remove();let r=o.querySelector(".js-prod-show-soldout");r&&r.remove()}}}),2e3)}))})),document.querySelectorAll(".quick-product__btn").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t].closest(".product-single__meta");if(o){let e=o.querySelector("div.payment-buttons");e&&e.remove()}}}),1e3)}))})),document.querySelectorAll(".btn--load-more").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t].closest(".grid-view-item");if(o){let e=o.querySelector(".quick-add-button");e&&e.remove()}}}),1e3)}))})),document.querySelectorAll(".quick_shop").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t].closest(".product_section");if(o){let e=o.querySelector(".product_form .shopify-product-form .purchase-details"),t=o.querySelector(".product__details .modal_price .price-ui");e&&e.remove(),t&&t.remove()}}}),1e3)}))})),document.querySelectorAll(".qs-button ").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t].closest(".product-info-main");if(o){let e=o.querySelector(".qty-box");e&&e.remove();let t=o.querySelector(".btn.btn-cart");t&&t.remove();let r=o.querySelector(".product-single__sale-price");r&&r.remove();let c=o.querySelector(".product-addto-links");c&&c.remove()}}}),1e3)}))}));let e=document.querySelector("a[data-js-cart-icon]");if(e&&e.addEventListener("click",(function(){let e=document.querySelector(".quick-cart__control");e&&e.remove();let t=document.querySelector(".quick-cart__item-right");t.childNodes[3]&&(t.childNodes[3].innerHTML="Login to seen price")})),document.querySelectorAll(".quick-add-button-variants").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t].closest("#AddToCartForm");if(o){let e=o.querySelector(".paymentButtonsWrapper");e&&e.remove()}}}),1e3)}))})),document.querySelectorAll(".product-thumbnail__quickshop-button").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t].closest(".product-details");if(o){let e=o.querySelectorAll(".bsscommerce-ltsp-message");e.length>1&&e.forEach((function(e,t){t>0&&e.remove()}));let t=o.querySelector(".product-form__cart-buttons");t&&t.remove();let r=o.querySelector(".product-form__quantity-box-wrapper");r&&r.remove()}}}),800)}))})),"b2b-dbodhi-singapore.myshopify.com"===window.Shopify.shop){let e=0;const t=window.location.pathname.includes("/collections");let o=!0;const r=function(){const e=setInterval((function(){let e=document.querySelectorAll(".thb-product-detail.product .bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t],r=o.closest(".thb-product-detail.product");if(r){let e=r.querySelector(".product-form");e&&e.remove()}r=o.closest("del"),r&&o.remove()}}),500);setTimeout(()=>{clearInterval(e)},6e3)},c=function(){const c=window.pageYOffset||document.documentElement.scrollTop;(c>e||!t||o)&&(document.querySelectorAll(".product-card-quickview").forEach((function(e){e.removeEventListener("click",r),e.addEventListener("click",r)}
13033)),o=!1),e=c<=0?0:c};if(c(),t){const e=function(){const e=c;let t;return()=>{clearTimeout(t),t=setTimeout(()=>{e.apply(this)},3e3)}};window.addEventListener("scroll",e())}}}}(e),function(e){e.ltsp.removeElementByLTSPMessage=function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message"),t=[],o=window.Shopify.shop;for(let r=0;r<e.length;r++){let c=e[r],l=[".grid-product__on-sale",".product-unit-price",".product-price-unit",".grid-link__sale_price","s",".price__compare",".product__compare-price",".price__unit",".card__price--regular",".sale-tag",".compare-price",".old-price",".savings",".was_price",".price--compare",".price-compare",".was"];if("stark-hockey.myshopify.com"===o){const e=c.closest(".product-index");if(e){const t=e.querySelector(".product-modal");t&&t.remove()}continue}let s=c.closest(".product-parent");if(s){let e=s.querySelector("form .tt-btn-addtocart");e&&t.push(e);let o=s.querySelector(".tt-btn-quickview");o&&t.push(o)}if(s=c.closest(".ProductItem"),s){let e=s.querySelector(".quickshop-btn");if(e&&t.push(e),"shrimptoncouture-com.myshopify.com"===o){let e=s.querySelector(".ProductItem__PriceList");e&&e.classList.remove("ProductItem__PriceList")}}if(s=c.closest(".product-item--vertical"),s){if("sparklinbluewholesale.myshopify.com"===o){let e=s.querySelector(".product-item__info .product-item__price-list");e&&t.push(e)}let e=s.querySelector(".product-item__info .product-item__action-button");e&&t.push(e),e=s.querySelector(".product-form__payment-container"),e&&t.push(e)}if(s=c.closest(".card-wrapper.underline-links-hover"),s&&"friends-forever-pets.myshopify.com"===o){let e=s.querySelector(".card__content .quick-add");e&&t.push(e);let o=s.querySelector(".card-information .price__sale .price-item.price-item--regular");o&&t.push(o)}if(s=c.closest(".modal_price"),s&&window.Shopify&&"casa-barba.myshopify.com"!==window.Shopify.shop&&"prideandgroom-wholesale.myshopify.com"!==window.Shopify.shop){let e=s.querySelector(".price-ui");e&&t.push(e)}if(s=c.closest(".info.has-padding-top"),s){let e=s.querySelector(".compare-at-price");e&&t.push(e)}if(s=c.closest(".product-thumbnail__price.price"),s){let e=s.querySelector(".money");e&&t.push(e)}if(s=c.closest(".search-result__description"),s){let e=s.querySelector(".money");e&&t.push(e)}if(s=c.closest(".product__price"),s){let e=s.querySelector("[data-product-price][bss-custom-ltsp-attribute]");e&&t.push(e)}if(s=c.closest("#template-product"),s){let e=s.querySelector(".product-form.cart-bar__form");e&&t.push(e)}if("showroom1-ducanero.myshopify.com"===o){if(s=c.closest(".product-area")||c.closest(".price"),s){let e=s.querySelector(".price-area")||s.querySelector(".theme-money");e&&t.push(e)}}else if(s=c.closest(".product-area__details"),s){let e=s.querySelector(".product-detail__form__action");e&&t.push(e);let o=s.querySelector(".quantity-wrapper");o&&t.push(o)}if("quincaillerie-euroline.myshopify.com"===o&&(s=c.closest(".product-form__info-content"),s)){let e=s.querySelector(".price-list");e&&t.push(e)}if(s=c.closest(".product-form__buttons"),s&&t.push(s),s=c.closest(".product-wrap-2"),s){let e=s.querySelector(".product-action-2");e&&t.push(e)}if(s=c.closest(".span6"),s){let e=s.querySelector(".purchase>input"),o=s.querySelector(".price-container>#price-preview"),r=s.querySelector(".price-container>.vat-price");e&&t.push(e),o&&t.push(o),r&&t.push(r)}if(s=c.closest(".product__page"),s){let e=s.querySelector(".quantity-selector");e&&t.push(e)}if(s=c.closest(".product_details_info"),s){let e=s.querySelector(".pro-detail-button"),o=s.querySelector(".price-box");e&&t.push(e),o&&t.push(o)}if(s=c.closest(".product-content"),s){let e=s.querySelector(".product-action");e&&t.push(e)}if(s=c.closest(".product-view .single-product-wrap"),s){let e=s.querySelector(".add-to-cart");e&&t.push(e)}if(s=c.closest(".collection-category .owl-stage .owl-item"),s){let e=s.querySelector(".add-to-cart");e&&t.push(e)}if(s=c.closest(".product__details"),s){let e=s.querySelector(".product-wrap .thumbnail-overlay .info .price ");e&&t.push(e);let o=s.querySelector(".product-details .price .current_price .money ");o&&t.push(o)}if(s=c.closest(".product_row"),s){let e=s.querySelector(".three-fourths .info .price ");e&&t.push(e)}if(s=c.closest(".thubnail-desc"),s){let e=s.querySelector(".quatity-stock");e&&t.push(e);let o=s.querySelector(".Payment_button");o&&t.push(o)}if(s=c.closest(".single-ponno-product"),s){let e=s.querySelector(".pro-actions-link");e&&t.push(e);let o=s.querySelector(".pro-add-cart");o&&t.push(o)}if(s=c.closest(".product-single__meta"),s){let e=s.querySelector("div.product-form__controls-group.product-form__controls-group--submit");e&&e.setAttribute("style","visibility:hidden")}if("homewarerus.myshopify.com"!=window.Shopify.shop&&(s=c.closest(".product-item__info"),s)){let e=s.querySelector("form.product-item__action-list.button-stack");e&&e.remove()}
13033if("bluebasketb2b.myshopify.com"===window.Shopify.shop){if(s=c.closest(".card-information"),s){let e=s.querySelector(".price__sale .price-item--sale.sale-percentage");e&&t.push(e)}if(s=c.closest("tr.cart-item[id*=Cart]"),s){let e=s.querySelector(".cart-item__quantity");e&&e.remove();let t=s.querySelector(".cart-item__totals");t&&t.remove()}}if(s=c.closest(".product-form"),s){let e=s.querySelector(".quantity-submit-row__submit");e&&e.remove();let o=s.querySelector(".product-form__info-list .product-form__info-item.product-form__info-item--quantity .product-form__info-content .quantity-selector.quantity-selector--product");o&&t.push(o)}if(s=c.closest(".product-grid__detail"),s){let e=s.querySelector(".product-form-block form");e&&e.remove()}if(s=c.closest(".tab-body"),s){if(s.querySelector(".purchase-section button, .btn.add-to-cart")){let e=setInterval((function(){let e=document.querySelector(".tab-body .purchase-section button, .tab-body .btn.add-to-cart"),t=document.querySelector(".swym-button-bar.swym-wishlist-button-bar");e&&e.remove(),t&&t.remove()}),200);setTimeout((function(){clearInterval(e)}),1e4)}}if(s=c.closest(".item.relative.product-id.item-row"),s){let e=s.querySelector(".quantity.form");e&&e.remove()}if(s=c.closest(".product-form"),s){let e=s.querySelector(".buy-buttons-row");e&&t.push(e)}if(s=c.closest(".product-grid-item"),s){let e=s.querySelector(".btn--quick-view");e&&t.push(e)}if(s=c.closest(".featured__collection-product"),s){let e=s.querySelector(".js-quickview-trigger");e&&t.push(e)}if(s=c.closest(".product-index"),s){let e=s.querySelector(".js-quickview-trigger");e&&t.push(e)}if(s=c.closest(".product-bottom"),s){let e=s.querySelector(".quantity-selector, .product-add");e&&t.push(e)}if(s=c.closest(".js-sticky-cart"),s){let e=s.querySelector(".sticky-add");e&&t.push(e)}if(s=c.closest(".product-details"),s){let e=s.querySelector(".shopify-payment-button");e&&t.push(e);let r=s.querySelector(".payment-and-quantity__add");r&&t.push(r);let c=s.querySelector(".price__compare-at.visible");c&&"coventa-demo.myshopify.com"===o&&t.push(c)}if(s=c.closest(".product-block__inner"),s){let e=s.querySelector(".quick-buy");e&&t.push(e)}if(s=c.closest(".content-summary"),s){let e=s.querySelector("form.cart");e&&t.push(e)}if(s=c.closest('div[data-pf-type="Section"]'),s){let e=s.querySelector('div[data-pf-type="ProductQuantity"]');e&&t.push(e);let o=s.querySelector('button[data-pf-type="ProductATC"]');o&&t.push(o)}if(s=c.closest(".pc-inner"),s){let e=s.querySelector('form[action="/cart/add"]');e&&t.push(e);let o=s.querySelector(".quick_shop");o&&t.push(o)}if(s=c.closest(".product-info-inner"),s){let e=s.querySelector('form[action="/cart/add"]');e&&t.push(e)}if(s=c.closest(".product-details-inline"),s){let e=s.querySelector(".product-quantity");e&&t.push(e)}if(s=c.closest(".product-card"),s){let e=s.querySelector(".js-grid-cart");e&&t.push(e);let o=s.querySelector(".card-header .card-button-hover");o&&t.push(o);let r=s.querySelector(".product-card__quick-buy");r&&t.push(r);let c=s.querySelector("compare-at-price");c&&t.push(c);let l=s.querySelector(".product-card__badge-list");l&&t.push(l)}if(s=c.closest(".product__info"),s){let e=s.querySelector(".product-form__buy-buttons button");e&&t.push(e);let o=s.querySelector(".product-form__quantity");o&&t.push(o)}if(s=c.closest(".product-sticky-form__inner"),s){let e=s.querySelector(".product-sticky-form__payment-container");e&&t.push(e)}if("homewarerus.myshopify.com"!=window.Shopify.shop&&(s=c.closest(".product-item"),s)){let e=s.querySelector('form[action="/cart/add"]');e&&t.push(e);let o=s.querySelector(".product-item__quick-form");o&&t.push(o)}if(s=c.closest(".shopify-product-form"),s){let e=s.querySelector("div.quantity");e&&t.push(e)}if(s=c.closest(".product-body"),s){let e=s.querySelector(".product-cta-wrapper");e&&t.push(e)}if(s=c.closest(".tt-product-single-info"),s){let e=s.querySelector("form .btn-addtocart");e&&t.push(e);let o=s.querySelector('form[action*="/cart/add"]');o&&t.push(o)}if(s=c.closest(".product-details-wrapper"),s){let e=s.querySelector(".product-form");e&&t.push(e)}if(s=c.closest(".product-inner"),s){let e=s.querySelector(".product-card-interactions");e&&t.push(e)}if(s=c.closest(".product-single__meta"),s){let e=s.querySelector(".add-to-cart");if(e)if(window.Shopify&&"bundlecomph.myshopify.com"===window.Shopify.shop){e.disabled=!0;let o=s.querySelector(".payment-buttons"),r=s.querySelector(".shopify-payment-button");o&&o.classList.remove("payment-buttons"),r&&t.push(r)}else t.push(e)}if(s=c.closest(".grid-view-item"),s){let e=s.querySelector(".thumbnail-buttons");e&&t.push(e)}if(s=c.closest(".product-single__meta"),s){let e=s.querySelector(".product-form:not(.product-form-product--static):not(.product-form-product-template)");e&&t.push(e)}if(s=c.closest(".pf-product-form"),s){let e=s.querySelector(".sc-lkgURy");e&&t.push(e);let o=s.querySelector(".sc-gzcbmu");o&&t.push(o);let r=s.querySelector(".add-to-cart");r&&t.push(r)}if(s=c.closest(".large--one-half"),s){let e=s.querySelector(".product-smart-wrapper");e&&t.push(e);let o=s.querySelector('div.btn[onmouseup="showProductsDesigner(this)"]');o&&t.push(o);let r=s.querySelector("button.js-prod-show-soldout");r&&t.push(r)}if(s=c.closest("#add-to-cart-form"),s)if("led-signcity.myshopify.com"===o){let e=s.querySelector(".atc-btn");e&&t.push(e);let o=s.querySelector(".price");o&&o.classList.remove("price")}else{let e=s.querySelector(".groups-btn");e&&t.push(e),t.push(c)}
13033if(s=c.closest(".product-shop"),s&&"led-signcity.myshopify.com"!==o){let e=s.querySelector(".groups-btn");e&&t.push(e)}if(s=c.closest(".who-qof-table"),s&&s.classList.add("bsscommerce-hide-price"),s=c.closest(".price-sale"),s){let e=s.querySelector(".old-price");e&&t.push(e);let o=s.querySelector("em");o&&(o.innerHTML="")}if(s=c.closest(".product-details"),s){let e=s.querySelector(".action");e&&t.push(e)}if(s=c.closest(".product_section"),s){let e=s.querySelector("form .add_to_cart, form .b2b-ajax-submit");e&&t.push(e);let o=s.querySelector(".sale.savings");o&&t.push(o);let r=s.querySelector(".purchase-details button.button--add-to-cart");r&&t.push(r);let c=s.querySelector(".purchase-details .purchase-details__quantity.product-quantity-box");c&&t.push(c);let l=s.querySelector(".product__details .modal_price .price-ui");l&&t.push(l)}if(s=c.closest(".quick-shop-style--inline"),s){let e=s.querySelector("form .add_to_cart, form .b2b-ajax-submit");e&&t.push(e)}if(s=c.closest(".product-details"),s){let e=s.querySelector("small em");e&&t.push(e)}if(s=c.closest(".gt_product-body"),s){let e=s.querySelector("form .gt_product-addtocart");e&&t.push(e);let o=s.querySelector(".gt_product-saved");o&&t.push(o);let r=s.querySelector(".gt_product-price--compare");r&&t.push(r)}if(s=c.closest(".gt_product_content"),s){let e=s.querySelector("form .gt_product-addtocart");e&&t.push(e);let o=s.querySelector(".gt_product-price--compare");o&&t.push(o)}if(s=c.closest(".gt-single-product"),s){let e=s.querySelector("div.gt_method_addToCart");e&&t.push(e);let o=s.querySelector(".gt_product-price--compare");o&&t.push(o)}if(s=c.closest("#cont-form"),s){let e=s.querySelector("form .cont-add-btns");e&&t.push(e)}if(s=c.closest(".theiaStickySidebar"),s){let e=s.querySelector(".variations_button");e&&t.push(e)}if(s=c.closest(".product--price-wrapper"),s){let e=s.querySelector(".product--compare-price");e&&t.push(e)}if(s=c.closest(".product-submit"),s){let e=s.querySelector(".payment-buttons-container");e&&t.push(e)}if(s=c.closest(".product-price"),s){let e=s.querySelector(".product-price-compare");e&&t.push(e)}if(s=c.closest(".product-list-item"),s){let e=s.querySelector(".original"),o=s.querySelector(".product-list-item-badge");e&&t.push(e),o&&t.push(o)}if(s=c.closest(".productitem"),s){let e=s.querySelector(".productitem--action");e&&t.push(e);let o=s.querySelectorAll(".bss-ltsp-to-remove");if(o.length)for(let e of o)t.push(e)}if(s=c.closest(".product--outer"),s){let e=s.querySelector(".product-form--atc");e&&t.push(e),e=s.querySelector(".shopify-payment-button"),e&&t.push(e)}if(s=c.closest(".Container"),s)if(window.Shopify&&"mama-shawna.myshopify.com"===window.Shopify.shop){let e=s.querySelector("form.ProductForm");if(window.__st&&e){__st.cid&&t.push(e)}}else{let e=s.querySelector(".ProductForm__BuyButtons");e&&t.push(e)}if(s=c.closest(".product-grouped"),s){let e=s.querySelector(".product_top form#add-to-cart-form");e&&t.push(e)}if(s=c.closest(".product-item"),s){let e=s.querySelector(".product-top .product-des .action"),o=s.querySelector(".slideup");if(e&&t.push(e),o&&t.push(o),o=s.querySelector(".card-quickview"),o&&t.push(o),window.Shopify&&"sitchish.myshopify.com"===window.Shopify.shop){let e=s.querySelector(".product-item-price .money");e&&e.classList.remove("money")}}if(s=c.closest(".modal_price"),s){let e=s.querySelector(".was_price");e&&t.push(e)}if(s=c.closest(".info"),s){let e=s.querySelector(".was_price");e&&t.push(e)}if(s=c.closest(".product-item"),s){let e=s.querySelector('.product-item__action-button[data-action="add-to-cart"]');e&&t.push(e)}if(s=c.closest(".grid__item.grid-product"),s){let e=s.querySelector('form[action="/cart/add"] input[type="submit"]');e&&t.push(e);let r=s.querySelector(".grid-product__tag");r&&t.push(r);let c=s.querySelector(".visually-hidden");c&&t.push(c);let l=s.querySelector(".quick-product__btn");l&&"comphycompany.myshopify.com"===o&&t.push(l)}if(s=c.closest(".product-info"),s){let e=s.querySelector('form[action="/cart/add"] .payment-buttons');e&&t.push(e);let o=s.querySelector(".variant-wrapper.variant-wrapper--button");o&&t.push(o);let r=s.querySelector(".form .product-actions .product-actions-add-to-cart");r&&t.push(r);let c=s.querySelector(".product-price__compare");
13033c&&t.push(c),c=s.querySelector("compare-at-price"),c&&t.push(c);let l=s.querySelector("unit-price");l&&t.push(l),e=s.querySelector(".buy-buttons"),e&&t.push(e);let u=s.querySelector(".product-info__badge-list");u&&t.push(u)}if(s=c.closest(".price"),s){if(s.textContent.includes("From")){let e=s.innerHTML;s.innerHTML=e.replace("From","")}}if(s=c.closest("#product-right"),s){let e=s.querySelector(".was");e&&t.push(e);let o=s.querySelector(".product-add");o&&t.push(o)}if(s=c.closest(".was"),s&&t.push(s),s=c.closest(".product-single__meta"),s){let e=s.querySelector(".pf__actions");e&&t.push(e);let o=s.querySelector("div.product-form__controls-group.product-form__controls-group--submit");o&&o.setAttribute("style","visibility:hidden")}if(s=c.closest(".product-item"),s){let e=s.querySelector(".product-item__add");e&&t.push(e)}if(s=c.closest(".grid-item"),s){let e=s.querySelector("#addToCart-product-template");e&&t.push(e);let o=s.querySelector(".payment-buttons");o&&t.push(o)}if(s=c.closest(".product-single__meta"),s){let e=s.querySelector("div.payment-buttons");e&&e.remove()}if(s=c.closest(".modal--root"),s){let e=s.querySelector(".product-form--button-container");e&&t.push(e)}if(s=c.closest(".product-item__info"),s){let e=s.querySelector("a.product-item__action-button.button.button--small.button--primary");e&&t.push(e)}if(s=c.closest(".product-form__info-list"),s){let e=s.querySelector("div.product-form__info-item.product-form__info-item--quantity");e&&t.push(e)}if(s=c.closest(".large--three-fifths"),s){let e=s.querySelector(".multivariants_setbox_footer");e&&t.push(e)}if(s=c.closest(".product-info-main"),s){let e=s.querySelector(".qty-box");e&&t.push(e);let o=s.querySelector(".btn.btn-cart");o&&t.push(o);let r=s.querySelector(".shopify-payment-button");r&&t.push(r)}if(s=c.closest(".product-miniature"),s){let e=s.querySelector(".qty-box");e&&t.push(e);let o=s.querySelector(".product.actions.product-item-actions");o&&t.push(o)}if(s=c.closest("#AddToCartForm"),s){let e=s.querySelector(".paymentButtonsWrapper");e&&t.push(e)}if(s){let e=s.querySelector("#product-add");e&&e.remove()}if(s){let e=s.querySelector("#product-price>.product-price");e&&e.remove()}if(s=c.closest(".grid-view-item"),s){let e=s.querySelector(".quick-add-button");e&&t.push(e)}if("tinalykkegaard.myshopify.com"===o){if(s=c.closest(".main-product__details>.main-product__details-wrapper"),s){let e=s.querySelector(".main-product__actions .main-product__form-buttons");e&&e.remove()}if(s=c.closest(".product-grid .product-card"),s){let e=s.querySelector('form[action="/cart/add"]');e&&e.remove()}}if(s=c.closest(".product-item-caption"),s){let e=s.querySelector(".product-form__item--submit");e&&t.push(e)}if(s=c.closest(".product-item-caption"),s){let e=s.querySelector(".product-form__item--quantity");e&&t.push(e)}if(s=c.closest(".productgrid--item"),s){let e=s.querySelector(".productitem--actions");e&&t.push(e)}if(s=c.closest(".product-single__info-wrapper"),s){let e=s.querySelector(".product-form__quantity-submit");e&&t.push(e);let o=s.querySelector(".shopify-payment-button");o&&t.push(o)}if(s=c.closest(".qv-content"),s){let e=s.querySelector(".qv-add-button");e&&t.push(e);let o=s.querySelector(".qv-quantity");o&&t.push(o)}if(s=c.closest(".product-card"),s){let e=s.querySelector(".btn-grid-cart");e&&t.push(e)}if(s=c.closest(".product_single_detail_section"),s){let e=s.querySelector("#AddToCart");e&&t.push(e);let o=s.querySelector(".shopify-payment-button__button");o&&t.push(o);let r=s.querySelector(".quantity-label");r&&t.push(r);let c=s.querySelector(".quantity_width");c&&t.push(c)}if(s=c.closest(".product-single__meta"),s){let e=s.querySelector("#AddToCart--product-template");e&&t.push(e);let o=s.querySelector(".shopify-payment-button");o&&t.push(o)}if(s=c.closest('form[action="/cart/add"]'),s){let e=s.querySelector(".product-page-info__field");e&&t.push(e);let o=s.querySelector(".product-page-info__button-add-to-cart");o&&t.push(o);let r=s.querySelector(".js-store-lists-add-wishlist");r&&t.push(r);let c=s.querySelector(".product-collection__control");c&&t.push(c)}if(s=c.closest(".grid-item__content"),s){let e=s.querySelector(".quick-add-btn");if(e&&t.push(e),window.Shopify&&"sparklinbluewholesale.myshopify.com"===window.Shopify.shop){let e=s.querySelector(".grid-product__price--original"),o=s.querySelector(".grid-product__price--savings"),r=s.querySelector(".quick-product__btn");e&&t.push(e),o&&t.push(o),r&&t.push(r)}}if(s=c.closest(".purchase-box"),s){let e=s.querySelector("#AddToCart-product-template");e&&e.remove();let t=s.querySelector(".quantity-product-template");t&&t.remove()}if(s=c.closest(".item-row"),s){let e=s.querySelector(".add-to-cart");e&&t.push(e)}if(s=c.closest(".product-thumbnail__price"),s){let e=s.querySelectorAll(".bsscommerce-ltsp-message");e.length>1&&e.forEach((function(e,o){o>0&&t.push(e)}))}if(s=c.closest(".product-details"),s){let e=s.querySelector(".product__add-to-cart-button");e&&t.push(e);let r=s.querySelector(".product-form__quantity-box-wrapper");if(r&&t.push(r),"sitchish.myshopify.com"===o){let e=s.querySelector("#product-price");e&&(e.id="");let o=s.querySelector("[data-product-price]");o&&o.removeAttribute("data-product-price");let r=s.querySelector(".form-actions");r&&t.push(r)}let c=s.querySelector(".product-quantity");if(c&&t.push(c),"lavabis-hygiene.myshopify.com"===o){let e=s.querySelector(".price-preview.price");e&&(e.id="")}}if(s=c.closest(".product-details"),s){let e=s.querySelector("#add-to-cart-product-template");e&&t.push(e);let o=s.querySelector(".shopify-payment-button__button");o&&o.remove();let r=s.querySelector(".quantity");r&&t.push(r)}if(s=c.closest(".gryffeditor"),s){let e=s.querySelector(".gf_product-quantity");e&&e.parentElement.remove()}if(s=c.closest("#ProductSection-product-template"),s){let e=s.querySelector(".cbb
13033-frequently-bought-add-button");e&&e.remove();let t=s.querySelector(".cbb-frequently-bought-form");t&&t.remove()}if(s=c.closest(".product__info-wrapper"),s){let e=s.querySelector(".product-form__quantity");e&&e.remove();let t=s.querySelector(".product-form__buttons");t&&t.remove()}if(s=c.closest(".product-form"),s){let e=s.querySelector(".product-form__payment-container");e&&e.remove();let o=s.querySelector("#price");if(o&&o.classList.remove("product-price"),window.Shopify&&"wilkens-gmbh.myshopify.com"===window.Shopify.shop){let e=s.querySelector(".unit-price");e&&t.push(e)}}if(s=c.closest(".product-details"),s){let e=s.querySelector(".button-common");e&&e.remove()}if(s=c.closest(".caption"),s){let e=s.querySelector(".button.btn-cart");e&&t.push(e)}if(s=c.closest(".product-info-main"),s){let e=s.querySelectorAll(".form-group")[1];e&&t.push(e);let o=s.querySelector(".price");o&&(o.id="")}if(s=c.closest(".form_buy_sticky"),s){let e=s.querySelector(".form-group .btn.button.button-cart");e&&t.push(e);let o=s.querySelector(".form-group input#Quantity");o&&t.push(o)}if(s=c.closest(".product-template__container"),s){let e=s.querySelector(".store-availability-container");e&&e.remove()}if(s=c.closest(".product-form--container"),s){let e=s.querySelector(".product-form--options");e&&t.push(e);let o=s.querySelector(".product-form--smart-payment-buttons");o&&t.push(o)}if(s=c.closest(".product--price-wrapper"),s){let e=s.querySelector('.product--from[data-item="accent-text"]');e&&t.push(e)}if(s=c.closest("#zpproductselectorfull1-wrapper"),s){let e=s.querySelector(".zpa-button-alignment-center");e&&t.push(e);let o=s.querySelector(".zpa-quantity-block");o&&t.push(o)}if(s=c.closest(".zpa-multi-product-buy-box"),s){let e=s.querySelector(".zpa-button-alignment-center");e&&t.push(e)}if(s=c.closest(".product-block__inner"),s){let e=s.querySelector('form[action="/cart/add"].product-form.product-form--mini');if(e&&t.push(e),window.Shopify&&"wilkens-gmbh.myshopify.com"===window.Shopify.shop){let e=s.querySelector(".unit-price");e&&t.push(e)}}if(s=c.closest(".was-price.theme-money"),s&&t.push(s),s=c.closest(".box_product_page"),s){let e=s.querySelector(".product-options-bottom");e&&t.push(e)}if(s=c.closest(".product-default"),s){let e=s.querySelector(".add-links.clearfix");e&&t.push(e)}if(s=c.closest(".grid__item.medium-up--three-eighths"),s){let e=s.querySelector('form[action="/cart/add"].shopify-product-form');e&&t.push(e)}if(s=c.closest(".indiv-product"),s){let e=s.querySelector('form[action="/cart/add"]');e&&t.push(e)}if(s=c.closest('form.product-form[action="/cart/add"]'),s){let e=s.querySelector(".sf__pcard-image .sf__pcard-quick-add");e&&t.push(e);let o=s.querySelector(".main-product__block-buy_buttons");o&&t.push(o)}if(s=c.closest(".product-grid-item.woodmart-hover-base"),s){let e=s.querySelector(".fade-in-block");e&&t.push(e);let o=s.querySelector(".product-compare-button");o&&t.push(o)}if(s=c.closest(".grid__item"),s){if("www-bonmatch-com.myshopify.com"===o){let e=s.querySelector(".selector-wrapper.bcpo-file"),o=s.querySelector(".uploadkit.uploadkit-injected"),r=s.querySelector(".uploadkit-form");e&&t.push(e),o&&r&&r.appendChild(o)}let e=s.querySelector(".product__submit__buttons");e&&t.push(e);let r=s.querySelector(".products > .product-detail > .product-button"),c=s.querySelector(".products > .product-container > .product-button > .quick-view-text");r&&t.push(r),c&&t.push(c);let l=s.querySelector("button#AddToCart"),u=s.querySelector('[data-shopify="payment-button"].shopify-payment-button');if(l&&t.push(l),u&&t.push(u),"tienda-suca-bikes.myshopify.com"===o){let e=s.querySelector(".product__unit-price.product__unit-price--spacing"),t=s.querySelector(".c_p-quantity-input-parent"),o=s.querySelector(".masIva"),r=s.querySelector(".c_col-sw-btn");e&&e.classList.remove("hide"),t&&t.remove(),o&&o.remove(),r&&r.remove()}if("youchique-4183.myshopify.com"===o){let e=s.querySelector(".card-information__button");e&&t.push(e);let o=s.querySelector(".swym-wishlist-button-bar");o&&t.push(o)}if("stelladetailsb2b.myshopify.com"===o){let e=s.querySelector(".bss-b2b-product-vat");e&&t.push(e);let o=s.querySelector("#bss-b2b-tax-inc-excl");o&&t.push(o);let r=s.querySelector(".bss-b2b-collection-item-vat");r&&t.push(r);let c=s.querySelector(".price__regular");if(c){c.classList.remove("price__regular");let e=s.querySelector(".price-item--regular");e&&e.classList.remove("price-item--regular")}let l=s.querySelector(".price__sale");l&&t.push(l)}let i=s.querySelector("quick-view-drawer");
13033i&&t.push(i);let p=s.querySelector("add-to-cart");p&&t.push(p)}if(s=c.closest(".shop-the-look__product-info"),s){let e=s.querySelector('form[action="/cart/add"]');e&&t.push(e)}if(s=c.closest(".popover.popover--quick-buy"),s){let e=s.querySelector(".product-form__buy-buttons");e&&t.push(e)}if(s=c.closest(".product__section.product-template .product__section-content .product__section-details"),s){let e=s.querySelector('form[action="/cart/add"] input#addToCart');e&&t.push(e)}if(s=c.closest(".product-item__info-inner"),s){let e=s.querySelector(".unit-price-measurement");e&&t.push(e)}if(s=c.closest(".product-form__info-item"),s){let e=s.querySelector(".unit-price-measurement");e&&t.push(e)}if(s=c.closest("div[data-product-blocks]"),s){let e=s.querySelector(".payment-buttons");e&&t.push(e);let o=s.querySelector(".spt-wishlist-button__wrapper");o&&t.push(o)}if(s=c.closest(".sf__pcard-content.text-center"),s){let e=s.querySelector("button.add-to-cart.sf__btn");e&&t.push(e)}if(s=c.closest(".product-details.section"),s){let e=s.querySelector('form#AddToCartForm.product-content-inner[action="/cart/add"]');e&&t.push(e)}if(s=c.closest(".search-item .product-item, .product-grid-row .product-item"),s){let e=s.querySelector(".product-img .action-btn");e&&t.push(e)}if(s=c.closest(".product-collection__content,.product-page-info"),s){let e=s.querySelector(".js-product-button-add-to-cart");e&&t.push(e)}if(s=c.closest(".details-info"),s){let e=s.querySelector(".group-button .add-to-cart");e&&t.push(e)}if(s=c.closest(".product-collection"),s){let e=s.querySelector(".group-button .add-to-cart");e&&t.push(e)}let u=c.closest("[data-js-product-price]");if(u&&u.setAttribute("bss-ltsp-active",""),s=c.closest(".product__info-container"),s){let e=s.querySelector('.form[data-type="add-to-cart-form"] > .shopify-payment-button[data-shopify="payment-button"]');e&&t.push(e)}if(s=c.closest(".products"),s){let e=s.querySelector(".product-container > .product-button > .variants > .add-cart-btn"),o=s.querySelector(".product-container > .product-button > .quick-view-text");e&&t.push(e),o&&t.push(o)}if(s=c.closest(".dt-sc-tabs-container"),s){let e=s.querySelector(".dt-sc-tabs-content > .tab2 > .owl-stage-outer > .owl-stage > .owl-item > .item-row > .products > .product-container > .product-button > .variants > .add-cart-btn");e&&t.push(e)}if(s=c.closest(".wrapper-container"),s){let e=s.querySelector(".recently-viewed-products > .products-grid > .grid__item > .product-item > .products > .product-bottom > .price-box > .regular-product > .special-price"),o=s.querySelector(".recently-viewed-products > .products-grid > .grid__item > .product-item > .products > .product-bottom > .action > .variants > .add-to-cart-btn");e&&t.push(e),o&&t.push(o)}if(s=c.closest(".featured__collection-product.product-index"),s){let e=s.querySelector(".product_listing_options");e&&t.push(e)}if(s=c.closest(".product-index"),s){let e=s.querySelector(".product_listing_options");e&&t.push(e)}if(s=c.closest(".product__section-details"),s){let e=s.querySelector(".product__section-details__inner
13033--product_buttons");e&&t.push(e)}if(s=c.closest(".product-page--cart-form-block"),s){let e=s.querySelector(".add-to-cart");e&&t.push(e)}if(s=c.closest(".price__sale"),s){let e=s.querySelector(".price-item--regular");e&&t.push(e)}if(s=c.closest(".product-item-v1"),s){let e=s.querySelector(".price-old"),o=s.querySelector(".product-icon-action");e&&t.push(e),o&&t.push(o)}if(s=c.closest(".detail-info > .relative"),s){let e=s.querySelector("#AddToCartForm > .btn-action"),o=s.querySelector('div.shopify-payment-button[data-shopify="payment-button"]'),r=s.querySelector(".product-price > del");e&&t.push(e),o&&t.push(o),r&&t.push(r)}if(s=c.closest(".product-details"),s){let e=s.querySelector(".product-block--form>.product-form--regular");e&&"eurosafetysystems.myshopify.com"!==o&&e.remove();let t=s.querySelector(".button-cart");t&&t.remove()}if("annabellenoeldesigns-com.myshopify.com"==o&&(s=c.closest(".product-block-list__item .card__section"),s)){let e=s.querySelector("#MULTIVARIANTS_APP_SECTION_PLACE .multivariants_block_qty_box");e&&e.remove();let t=s.querySelector("#MULTIVARIANTS_APP_SECTION_PLACE .multivariants_block_last_holder .multivariants_block_prc_holder");t&&t.remove();let o=s.querySelector("#MULTIVARIANTS_APP_SECTION_PLACE #multivariants_add_to_cart_button_h");o&&o.remove();let r=s.querySelector("#MULTIVARIANTS_APP_SECTION_PLACE #multivariants_block_subtotal_h");r&&r.remove()}if("fedua-b2b.myshopify.com"==o){if(s=c.closest(".gp-product-detail .container"),s){let e=s.querySelector(".gp-product-main-button button[type='submit']");e&&e.remove();let t=s.querySelector(".cbb-also-bought-add-to-cart-button");t&&t.remove();let o=s.querySelector(".cbb-also-bought-product-price-container");o&&o.remove()}if(s=c.closest(".gp-product-widget .product-card-grid"),s){let e=s.querySelector(".product-buttons .btn-quick-view ");e&&e.remove()}}if(s=c.closest(".product--price-container"),s){let e=s.querySelectorAll(".product--price-wrapper > a");e.length&&e.forEach(e=>e.remove())}if("linis-bites-b2b.myshopify.com"==window.location.host&&c.querySelector("[bss-customize-ltsp-message]")){let e=c.closest(".price .price__container");if(e){let o=e.querySelector(".unit-price.caption");o&&t.push(o)}}if(s=c.closest(".product-price--wrapper"),s){let e=s.querySelector(".product-price--compare");e&&e.remove()}if(s=c.closest(".price__pricing-group"),s){let e=s.querySelector(".price-item.price-item--regular[data-regular-price]");e&&(e.classList.remove("price-item"),e.classList.remove("price-item--regular"))}if(l.forEach((function(e){c.closest(e)&&t.push(c.closest(e))})),s=c.closest(".product-page-info"),s){let e=s.querySelector("[data-js-footbar-product-limit]");e&&t.push(e)}if(s=c.closest(".product-wrap"),s){let e=s.querySelector(".purchase-details button.button--add-to-cart"),o=s.querySelector(".product-action");if(e&&t.push(e),o&&t.push(o),window.Shopify&&"dermafirmusa.myshopify.com"===window.Shopify.shop){let e=s.querySelector(".price.sale");e&&t.push(e)}}if(s=c.closest(".seven.columns.omega"),s){let e=s.querySelector(".purchase-details__buttons button.shopify-payment-button__button ");e&&t.push(e)}if(s=c.closest("#collectionPr"),s){let e=s.querySelectorAll("#PageContainer .collection .btn.add-to-cart");e.length&&e.forEach(e=>{t.push(e)})}if(s=c.closest(".grid.product-single"),s){let e=s.querySelector('#PageContainer .wrap-product-info button[type="submit"].btn.btn1.pr_btn.addtocart_js');e&&t.push(e)}if(s=c.closest(".gryffeditor"),s){let e=s.querySelector(".module-wrap .gf_add-to-cart.product-form-product-template");e&&t.push(e)}if(s=c.closest(".product-single .product-single__meta"),s){let e=s.querySelector('.product-form__item button[name="add"].product-form__cart-submit');e&&t.push(e)}if(s=c.closest(".shopify-product-form"),s){let e=s.querySelector("#product-price");e&&t.push(e)}if(s=c.closest(".product-item-price"),s){let e=s.querySelector(".money");e&&t.push(e)}if(s=c.closest('main#main[role="main"]'),s){let e=s.querySelector("div.atc-bar");e&&t.push(e)}if(s=c.closest("#CartDrawer"),s){let e=s.querySelector("#CartDrawer-CartItems .cart-item .cart-item__details dl .product-option");e&&t.push(e);let o=s.querySelector("#CartDrawer-CartItems .cart-item .cart-item__totals .cart-item__price-wrapper");o&&t.push(o);let r=s.querySelector("#CartDrawer-CartItems .cart-item .cart-item__quantity");r&&t.push(r);let c=s.querySelector(".drawer__footer");c&&t.push(c)}if(s=c.closest("#main-cart-items"),s){let e=s.querySelector(".cart-item .cart-item__details dl .product-option");e&&t.push(e);let o=s.querySelector(".cart-item .cart-item__quantity .cart-item__quantity-wrapper");o&&t.push(o);let r=s.querySelector(".cart-item .cart-item__totals.right.small-hide .cart-item__price-wrapper");r&&t.push(r)}if(s=c.closest("#main-cart-footer"),s){let e=s.querySelector(".cart__footer");e&&t.push(e)}if(s=c.closest(".product-single__meta"),s&&window.Shopify&&("asiadirectfurniture.mysh
13033opify.com"===window.Shopify.shop||"pure-vision-ch.myshopify.com"===window.Shopify.shop)){let e=s.querySelector(".product__price[data-product-price]");e&&t.push(e)}if(s=c.closest(".product-inner.pr"),s){let e=s.querySelector(".pr_atc.pr_qty_atc > a.pr_atc_.js_addtc");e&&t.push(e)}if(s=c.closest("#shopify-section-pr_summary"),s){let e=s.querySelector("p.price_range, .price.price_varies");e&&t.push(e)}if(s=c.closest(".grid__item"),s){let e=s.querySelector(".product__form-container"),o=s.querySelector(".product__description");e&&(t.push(e),o.style.width="100%")}if(s=c.closest(".featured-product__content-wrapper"),s){let e=s.querySelector(".product-form");e&&t.push(e)}if(s=c.closest(".card__price"),s&&"exosomes-inc.myshopify.com"===o&&(s.style.textAlign="center"),s=c.closest(".Product__InfoWrapper > .Product__Info "),s){let e=s.querySelector('.ProductForm__BuyButtons > button[type="submit"].ProductForm__AddToCart');e&&t.push(e);let o=s.querySelector(".ProductForm__AddToCart");o&&t.push(o)}if(s=c.closest(".product-grid__container .product-grid__content"),s){let e=s.querySelector(".product-single__form .product__quantity");e&&t.push(e);let o=s.querySelector(".add-to-cart");o&&t.push(o);let r=s.querySelector(".product__price--compare");if(r&&t.push(r),window.Shopify&&"sparklinbluewholesale.myshopify.com"===window.Shopify.shop){let e=s.querySelector(".product__price-savings");e&&t.push(e)}}if(s=c.closest(".product-grid-item"),s){let e=s.querySelector(".h1.medium--left");e&&"envogueusa.com"==window.location.host&&t.push(e)}if(s=c.closest("#productPrice-product-template"),s){let e=s.querySelector("small");e&&"envogueusa.com"==window.location.host&&t.push(e),s.appendChild(c)}if(s=c.closest(".product-grid-item"),s){let e=s.querySelector(".form-grid-btn");e&&"mamiereglissepro.myshopify.com"===o&&t.push(e)}if(s=c.closest("#cont-form"),s){let e=s.querySelector(".so-price");e&&t.push(e);let r=s.querySelector("#addToCart");r&&"mamiereglissepro.myshopify.com"===o&&t.push(r)}if(s=c.closest(".template-product"),s){let e=s.querySelector('button[name="add"]#addToCartBis, button[name="add"]#addToCart2');e&&t.push(e)}if(s=c.closest(".grid-product__content"),s){let e=s.querySelector(".quick-product__btn");!e||"wood-hill-boards.myshopify.com"!==o&&"wood-hill-boards-usa.myshopify.com"!==o&&"bundlecomph.myshopify.com"!==o||t.push(e)}if(s=c.closest(".product-single__meta"),s){let e=s.querySelector(".product__quantity");!e||"wood-hill-boards.myshopify.com"!==o&&"wood-hill-boards-usa.myshopify.com"!==o||t.push(e)}if(s=c.closest(".product-block-area"),s){let e=s.querySelector("#addToCartButton");e&&"wanderlustvision.myshopify.com"===o&&t.push(e)}if(s=c.closest(".product-single__meta--wrapper .product-single__meta"),s){let e=s.querySelector(".price-container.text-money"),o=s.querySelector('button[name="add"].btn--add-to-cart');e&&t.push(e),o&&t.push(o)}if(s=c.closest(".product-single__metas"),s){let e=s.querySelector(".product-single__buttons .js-quantity-selector.product-quantity"),o=s.querySelector(".product-single__buttons button.btn--add-to-cart");e&&t.push(e),o&&t.push(o)}if("dollie-wholesale.myshopify.com"===o&&(s=c.closest(".product-card"),s)){let e=s.querySelector(".product-card__buttons .product-card__quickview"),o=s.querySelector(".product-card__buttons .product-card__form"),r=s.querySelector(".product-card__buttons .button-wishlist"),c=s.querySelector(".wpb-variants-swatch");e&&t.push(e),o&&t.push(o),r&&t.push(r),c&&t.push(c)}if("obsequ.myshopify.com"===o&&(s=c.closest(".product-meta"),s)){let e=s.querySelector(".price-list[data-product-price-list]");e&&e.remove()}if(s=c.closest(".sticky-cart"),s){let e=s.querySelector(".product-form__buttons");e&&t.push(e)}if("wholesale-rubypearlco.myshopify.com"!==o&&"coventa-demo.myshopify.com"!==o&&(s=c.closest(".productitem--info")||c.closest(".product-pricing"),s)){let e=s.querySelector(".price");e&&t.push(e)}if(s=c.closest(".productitem--info"),s){let e=s.querySelector(".price__compare-at.visible");e&&"coventa-demo.myshopify.com"===o&&t.push(e)}if(s=c.closest(".product-block-list"),s&&window.Shopify&&"axiom-wholesale-parts.myshopify.com"===window.Shopify.shop){let e=s.querySelector(".price");e&&e.classList.remove("price")}if(s=c.closest(".product-layout"),s){let e=s.querySelector(".action-links");e&&t.push(e)}if(s=c.closest(".product-single__meta"),s){let e=s.querySelector(".product-block--price");e&&"comphycompany.myshopify.com"===o&&t.push(e)}if(s=c.closest(".product-details, .modal_price"),s){let e=s.querySelector(".current_price, .price__container");e&&t.push(e)}if("wholesale-rubypearlco.myshopify.com"===window.Shopify.shop&&(s=c.closest(".productitem__container .productitem--info, .product-details .product-pricing"),s)){let e=s.querySelectorAll(".price__compare-at--single, .price__compare-at, .price__current--max");
13033e.length&&e.forEach(e=>e.remove())}if("kerriecapelliusa-com.myshopify.com"===window.Shopify.shop&&(s=c.closest(".product-detail.quickbuy-content.spaced-row.container"),s)){let e=s.querySelectorAll(".product-form.theme-init .variant-visibility-area");e.length&&e.forEach(e=>e.remove())}if(s=c.closest(".widget_if_pr, .product-inner, .al_center.fl_center, .widget_if_pr"),s){let e=s.querySelectorAll(".product-price-pr-search, .hover_button, .nt_add_w, .nt_add_cp, .sticky_atc_btn.variations_form, .transcy-money");e.length&&e.forEach(e=>e.remove())}if(s=c.closest(".ProductItem__Wrapper, .ProductForm"),s){let e=s.querySelector(".ProductItem__PriceList, .ProductForm__QuantitySelector");e&&"sirenwireless.myshopify.com"!==o&&e.remove();let r=s.querySelector(".ProductFormWrapper");r&&"sirenwireless.myshopify.com"===o&&t.push(r)}if("butterfly-health-and-wellness.myshopify.com"===window.Shopify.shop){if(s=c.closest(".item-content"),s){let e=s.querySelector('.module-wrap[data-label="(P) Cart Button"] button.gf_add-to-cart');e&&e.remove()}if(s=c.closest(".gf_product-desc"),s){let e=s.querySelector("h4");e&&(e.remove(),c.style.display="none")}if(s=c.closest(".gf_column[data-id]"),s){let e=s.querySelectorAll('.elementor-section[data-element_type="section"] .elementor-text-editor strong, .gf_product-desc h4, .gf_product-desc strong');if(e)for(let t of e)t.remove()}}if(s=c.closest(".product-block"),s){let e=s.querySelector(".quickbuy-toggle");e&&t.push(e)}if(s=c.closest(".productView-details"),s){let e=s.querySelector(".productView-buttons"),r=s.querySelector(".quantity_selector"),c=s.querySelector(".productView-subtotal");e&&t.push(e),r&&t.push(r),c&&t.push(c),"remote-king-au.myshopify.com"===o&&s.querySelectorAll(".product-customInformation").forEach(e=>e.remove())}if(s=c.closest(".product__content"),s&&"campomarzio-trade-uk.myshopify.com"===o){let e=s.querySelector(".product__text"),o=s.querySelector(".select__fieldset"),r=s.querySelector(".product__submit");e&&t.push(e),o&&t.push(o),r&&t.push(r)}if(s=c.closest(".product-card__price, .product-single__meta-list"),s){let e=s.querySelector(".product-single__price, .money-product");e&&e.remove()}if("ens-nutrition-3419.myshopify.com"===o&&(s=c.closest(".card__content"),s)){let e=s.querySelector(".button.quick-add__submit");e&&e.remove()}if("b2b-nandu.myshopify.com"===o){if(s=c.closest(".grid-product__content"),s){let e=s.querySelector(".grid-product__meta .grid-product__price ");e&&e.remove()}let e=c.closest(".product-single__meta");if(e){let t=e.querySelector(".product__price.product__price--compare"),o=e.querySelector(".product__price.on-sale"),r=e.querySelector(".product__price-savings");t&&o&&r&&(t.remove(),o.remove(),r.remove())}}if("impjarwholesale.myshopify.com"===o){if(s=c.closest(".tp-product-content"),s){let e=s.querySelector("button#AddToCart"),o=s.querySelector(".tp-product-singe-action .tp-product-quantity");e&&t.push(e),o&&t.push(o)}if(s=c.closest(".grid-item"),s){let e=s.querySelector('form[action="/cart/add"]');e&&t.push(e)}}if("b2b-dbodhi-singapore.myshopify.com"===o&&(s=c.closest("del"),s&&t.push(c),s=c.closest(".product-information--inner"),s)){const e=s.querySelector(".product-form");e&&t.push(e)}if(s=c.closest(".lh-details-product"),s){if("ags2020.myshopify.com"===o){let e=s.querySelector(".lh-price");e&&e.classList.remove("lh-price")}let e=s.querySelector(".lh-add_to_cart");e&&t.push(e);let r=s.querySelector(".lh-buy-now");r&&t.push(r);let c=s.querySelector(".lh-compare-at-price");c&&t.push(c)}if(s=c.closest(".lh-collection-item"),s){if("ags2020.myshopify.com"===o){let e=s.querySelector(".lh-price");e&&e.classList.remove("lh-price")}let e=s.querySelector(".lh-product-compare-price");e&&t.push(e)}if(s=c.closest(".ProductMeta, .ProductItem__Info"),s){let e=s.querySelectorAll(".Price");e&&e.forEach(e=>e.remove())}}t.forEach((function(e){e.remove()}))}}(e),function(e){e.ltsp.removeElementByLTSPWrapper=function(){let e=document.getElementsByClassName("bss-ltsp-price-wrapper"),t=[];for(let o=0;o<e.length;o++){let r=e[o],c=[],l=r.closest(".product-parent");if(l){let e=l.querySelector("form .tt-btn-addtocart");e&&t.push(e);let o=l.querySelector(".tt-btn-quickview");o&&t.push(o)}if(l=r.closest(".product-single__meta"),l=r.closest(".tt-product-single-info"),l){let e=l.querySelector("form .btn-addtocart");e&&t.push(e);let o=l.querySelector('form[action*="/cart/add"]');o&&t.push(o)}if(l=r.closest(".product_section"),l){let e=l.querySelector("form .add_to_cart, form .b2b-ajax-submit");e&&t.push(e);let o=l.querySelector(".sale.savings");o&&t.push(o)}if(l=r.closest(".quick-shop-style--inline"),l){let e=l.querySelector("form .add_to_cart, form .b2b-ajax-submit");e&&t.push(e)}if(l=r.closest(".product-details"),l){let e=l.querySelector("small em");e&&t.push(e)}if(l=r.closest(".gt_product-body"),l){let e=l.querySelector("form .gt_product-addtocart");e&&t.push(e);let o=l.querySelector(".gt_product-saved");o&&t.push(o);let r=l.querySelector(".gt_product-price--compare");r&&t.push(r)}if(l=r.closest(".gt_product_content"),l){let e=l.querySelector("form .gt_product-addtocart");e&&t.push(e);let o=l.querySelector(".gt_product-price--compare");o&&t.push(o)}if(l=r.closest(".gt-single-product"),l){let e=l.querySelector("div.gt_method_addToCart");e&&t.push(e);let o=l.querySelector(".gt_product-price--compare");o&&t.push(o)}if(l=r.closest("#cont-form"),l){let e=l.querySelector("form .cont-add-btns");e&&t.push(e)}if(l=r.closest(".theiaStickySidebar"),l){let e=l.querySelector(".variations_button");e&&t.push(e)}if(l=r.closest(".product-submit"),l){let e=l.querySelector(".payment-buttons-container");e&&t.push(e)}if(l=r.closest(".productitem"),l){let e=l.querySelector(".productitem--action");e&&t.push(e)}if(l=r.closest(".product--outer"),l){let e=l.querySelector(".product-form--atc");e&&t.push(e),e=l.querySelector(".shopify-payment-button"),e&&t.push(e)}if(l=r.closest(".product-grouped"),l){let e=l.querySelector(".product_top form#add-to-cart-form");e&&t.push(e)}if(l=r.closest(".product-item"),l){let e=l.querySelector(".product-top .product-des .action");e&&t.push(e)}if(l=r.closest(".product-item"),l){let e=l.querySelector('.product-item__action-button[data-action="add-to-cart"]');e&&t.push(e)}if(l=r.closest(".grid__item.grid-product"),l){let e=l.querySelector('form[action="/cart/add"] input[type="submit"]');e&&t.push(e);let o=l.querySelector(".grid-product__tag");o&&t.push(o);let r=l.querySelector(".visually-hidden");r&&t.push(r)}if(l=r.closest(".product-info"),l){let e=l.querySelector('form[action="/cart/add"] .payment-buttons');e&&t.push(e);let o=l.querySelector(".variant-wrapper.variant-wrapper--button");o&&t.push(o)}if(l=r.closest("#product-right"),l){let e=l.querySelector(".was");e&&t.push(e);let o=l.querySelector(".product-add");o&&t.push(o)}if(l=r.closest(".was"),l&&t.push(l),l=r.closest(".product-single__meta"),l){let e=l.querySelector(".pf__actions");e&&t.push(e)}if(l=r.closest("#AddToCartForm-product-template"),l){let e=l.querySelector("#CartButtons-product-template");e&&t.push(e)}if(l=r.closest(".Product__Info"),l){let e=l.querySelector(".ProductMeta__PriceList");e&&t.push(e)}if(l=r.closest(".grid-item"),l){let e=l.querySelector("#addToCart-product-template");e&&t.push(e);let o=l.querySelector(".payment-buttons");o&&t.push(o)}c.forEach((function(e){r.closest(e)&&t.push(r.closest(e))}))}t.forEach((function(e){e.remove()}))}}(e),e.ltsp.removePattern=function(){e.ltsp.removeElementByLTSPMessage(),e.ltsp.removeElementByLTSPWrapper()},e.ltsp.insertBeforeAddToCart=function(){let t=document.querySelectorAll(".bsscommerce-ltsp-message[data-ltsp-cart-message]");for(let o=0;o<t.length;o++){let r=t[o],c=r.getAttribute("data-ltsp-cart-message");r.removeAttribute("data-ltsp-cart-message");let l=[".main-content .product-single__meta",".main-content .grid__item",".main-content .grid-item",".main-content .product__content.product__content--template.product__content--information","main#MainContent .product__info-container",".container#product-product .product-info-main",'main#main section[data-section-id="collection-template"] .product-item',".product-area__details.product-detail .product-detail__form"];for(let t=0;t<l.length;t++){let o=r.closest(l[t]);if(o&&!o.querySelector(".bsscommerce-ltsp-message.hide-message")){let t=
13033o.querySelector('form[action="/cart/add"]');if(t){let o=e.helperLTSP.createHidePriceMessageSpan(c);t.before(o)}}}let s=[[".product-layout .item .item-inner .caption",".button.btn-cart"],['main#main section[data-section-id="product-template"] .card__section',".product-form__payment-container"],[".main#MainContent .content.product",'form[action="/cart/add"] .offers']];for(let t=0;t<s.length;t++){let o=r.closest(s[t][0]);if(o&&!o.querySelector(".bsscommerce-ltsp-message.hide-message")){let r=o.querySelector(s[t][1]);if(r){let t=e.helperLTSP.createHidePriceMessageSpan(c);r.before(t)}}}if(window.Shopify&&"airbesafe.myshopify.com"===window.Shopify.shop){let t=[[".shopify-section--main-collection .product-list__inner .product-item ",".product-item__info .product-item-meta__price-list-container .price-list"],[".shopify-section--main-product .product--thumbnails-bottom .product__info",".product-meta__price-list-container"],["product-item.product-item .product-item__info",".product-item-meta__price-list-container"]];for(let o=0;o<t.length;o++){let l=r.closest(t[o][0]);if(l&&!l.querySelector(".bsscommerce-ltsp-message.hide-message")){let r=l.querySelector(t[o][1]);if(r){let t=e.helperLTSP.createHidePriceMessageSpan(c);r.after(t)}}}}}}}function c(e){!function(e){e.helperLTSP={},e.helperLTSP.createHidePriceMessageSpan=function(e){let t=document.createElement("span");return t.classList.add("bsscommerce-ltsp-message"),t.classList.add("hide-message"),t.style.fontSize="16px",t.style.fontWeight="normal",t.style.color="initial",t.style.textTransform="none",t.style.visibility="visible",t.innerHTML=e,t},e.helperLTSP.onLoadMore=function(e){const t=document.querySelector([".sf__product-listing[data-product-container] > div",'.row[data-js-collection-replace="products"]',".product-list-container .product-list.use-infinite-scroll","#collection-product .product-container",".container #col-main"].join(","));if(t){new MutationObserver((function(t){t.forEach((function(t){t.addedNodes.length&&e()}))})).observe(t,{childList:!0})}}}(e)}function l(){const e={};c(e),r(e),function(e){e.ptvp={},e.ptvp.addPasscodeForm=function(){let e=document.querySelector('form[action*="/cart/add"]'),t=document.getElementsByClassName("bss-passcode-wrapper-tag"),o=document.getElementsByClassName("bsscommerce-password-form"),r=document.querySelector(".toggle-passcode-input"),c=null;if(o.length&&(c=o[0],c.style.display="block",r&&r.addEventListener("click",(function(e){let t=document.getElementById("bsscommerce-password");"password"===t.type?(t.type="text",e.target.closest(".toggle-passcode-input").style.fill="#5C5F62"):(t.type="password",e.target.closest(".toggle-passcode-input").style.fill="#BABEC3")}))),t.length&&e&&o.length){e.before(c);let o=document.getElementById("bsscommerce-password"),r=new FormData;r.append(o.name,o.value),document.getElementById("bsscommerce-password-submit").style.padding="12px 16px",document.getElementById("bsscommerce-password-submit").style.display="block";let l=new XMLHttpRequest;l.open("post","/cart/update.js"),l.send(r);let s=document.getElementsByClassName("bsscommerce-ltap-password");if(s.length)for(let e=0;e<s.length;e++)s[e].addEventListener("submit",(function(e){e.preventDefault();let t=this;if(t.length)for(let e=0;e<t.length;e++)if("bsscommerce-password"==t[e].id){let o=t[e];if(o.addEventListener("input",(function(){o.classList.remove("input--error")})),o.value)if(""!=o.value){let e=new FormData;e.append(o.name,o.value);let t=new XMLHttpRequest;t.onreadystatechange=function(){4==t.readyState&&200==t.status&&location.reload()},t.open("post","/cart/update.js"),t.send(e)}else o.classList.add("input--error")}}));for(let e=0;e<t.length;e++)t[e].remove()}}}(e),e.ptvp.addPasscodeForm(),document.querySelectorAll(".quick-view-btn").forEach((function(t){t.addEventListener("click",(function(){setTimeout((function(){e.ptvp.addPasscodeForm()}),1e3)}))})),function e(){document.querySelectorAll(".advanced-filter a").forEach((function(t){t.addEventListener("click",(function(){setTimeout((function(){let t=document.getElementsByClassName("bsscommerce-ltsp-message");for(let e=0;e<t.length;e++){let o=t[e].closest(".item-row");
13033if(o){let e=o.querySelector(".add-to-cart");e&&e.remove()}}e()}),1200)}))}))}(),e.ltsp.quickView(),e.ltsp.insertBeforeAddToCart(),e.ltsp.removePattern(),e.helperLTSP.onLoadMore(e.ltsp.removePattern),setTimeout((function(){e.ltsp.removePattern()}),2500);if(window.Shopify&&-1!==["showroom1-ducanero.myshopify.com","sparklinbluewholesale.myshopify.com","youchique-4183.myshopify.com","wilkens-gmbh.myshopify.com","friends-forever-pets.myshopify.com"].indexOf(window.Shopify.shop)&&(window.onscroll=function(e,t){let o;return function(...r){o&&clearTimeout(o),o=setTimeout(()=>{e(...r),o=null},t)}}((function(){let t=setInterval((function(){e.ltsp.removePattern()}),200);setTimeout((function(){clearInterval(t)}),3e3)}),500)),"amoreo.eu"===window.location.host){let t=setInterval((function(){e.ltsp.removePattern()}),200);setTimeout((function(){clearInterval(t)}),3e3)}let t=document.querySelector(".infinite-scrolling-homepage a.btn");"airbesafe.myshopify.com"===window.location.host&&setTimeout((function(){e.ltsp.insertBeforeAddToCart()}),3e3),t&&(t.onclick=function(){setTimeout((function(){e.ltsp.removePattern()}),1e3)});let o=document.querySelectorAll("#shopify-section-product-recommendations, .product-modal-wrapper");var l,s,u;(o.length&&o.forEach((function(t){t.addEventListener("DOMSubtreeModified",(function(){e.ltsp.removePattern()}))})),"valleys-group.myshopify.com"===window.location.host)&&(l=function(){e.ltsp.removePattern();
13033let t=document.querySelectorAll(".slideout__drawer-right, .sidebar_leftside_wapper, .filtering__results");t.length&&t.forEach((function(e){e.addEventListener("click",(function(){setTimeout(()=>{l()},1700)}))}))});"b.salonpremium.com"===window.location.host&&(s=function(){e.ltsp.removePattern();let t=document.querySelectorAll(".pagination");t.length&&t.forEach((function(e){e.addEventListener("click",(function(){setTimeout(()=>{s()},3e3)}))}))});"www.internationalbeauty.ca"===window.location.host&&(u=function(){let t=document.querySelector('[id^="RecentlyViewed"]');new MutationObserver((function(t){t.forEach((function(t){t.addedNodes.length&&(e.ltsp.removePattern(),document.querySelectorAll(".btn--icon.quick-product__btn").forEach((function(e){e.addEventListener("click",(function(){setTimeout((function(){let e=document.getElementsByClassName("bsscommerce-ltsp-message");for(let t=0;t<e.length;t++){let o=e[t].closest(".product-grid__content");if(o){let e=o.querySelector(".payment-buttons");e&&e.remove()}}u()}),2e3)}))})))}))})).observe(t,{childList:!0})});if("bluebasketb2b.myshopify.com"===window.Shopify.shop){let t=document.querySelector("#CartDrawer");const o=()=>{let e=document.querySelectorAll("script#bss-ltap-login-require");for(let t in e)t.remove()};if(t){new MutationObserver((function(t){t.forEach((function(t){t.addedNodes.length&&(e.ltsp.removePattern(),o())}))})).observe(t,{childList:!0})}}if("dollie-wholesale.myshopify.com"===window.Shopify.shop){let t=document.querySelector("#product-grid .products__row");if(t){new MutationObserver((function(t){t.forEach((function(t){t.addedNodes.length&&e.ltsp.removePattern()}))})).observe(t,{childList:!0})}}if("impjarwholesale.myshopify.com"===window.Shopify.shop){let t=document.querySelector(".tp-collection-content");if(t){new MutationObserver((function(t){t.forEach((function(t){t.addedNodes.length&&e.ltsp.removePattern()}))})).observe(t,{childList:!0})}}if("inex-studio.myshopify.com"===window.Shopify.shop){let t=document.querySelector("#Search .Search__Results");if(t){new MutationObserver((function(t){t.forEach((function(t){t.addedNodes.length&&e.ltsp.removePattern()}))})).observe(t,{childList:!0,subtree:!0})}}}o.r(t),o.d(t,"default",(function(){return l})),l()}]); 13034</script>
13034 13035 13036 </main> 13037 13038 <div id="shopify-section-newsletter" class="shopify-section"> 13039 <style> 13040 #shopify-section-newsletter { 13041 background-color: #EEEEEE; 13042 margin-bottom: 0; 13043 } 13044 input:-webkit-autofill, 13045 input:-webkit-autofill:hover, 13046 input:-webkit-autofill:active, 13047 input:-webkit-autofill:focus { 13048 -webkit-box-shadow:0 0 0 50px white inset; 13049 -webkit-text-fill-color: #212121; 13050 } 13051 .section-newsletter { 13052 max-width: 800px; 13053 margin: auto; 13054 padding: 50px 0; 13055 } 13056 .section-newsletter h2 { 13057 font-weight: 700; 13058 font-size: 24px; 13059 } 13060 .section-newsletter input[type="email"] { 13061 width: 100%; 13062 text-align: center; 13063 border: none; 13064 border-bottom: 1px solid #212121; 13065 font-size: 16px; 13066 color: #757575; 13067 background-color: #eeeeee; 13068 } 13069 .section-newsletter .row label { 13070 font-size: 14px; 13071 cursor: pointer; 13072 } 13073 .section-newsletter .radio-inline input { 13074 width: auto; 13075 } 13076 .section-newsletter .btn { 13077 width: 130px; 13078 border: 1px solid #212121; 13079 box-shadow: none; 13080 font-size: 16px; 13081 font-weight: 500; 13082 text-transform: uppercase; 13083 } 13084 .section-newsletter form { 13085 margin: 30px 0 60px; 13086 } 13087 .section-newsletter input[type="radio"] { 13088 position: absolute; 13089 width: 1px; 13090 height: 1px; 13091 } 13092 .section-newsletter [type="radio"]:checked + label, .section-newsletter [type="radio"]:not(:checked) + label { 13093 position: relative; 13094 padding-left: 28px; 13095 cursor: pointer; 13096 line-height: 20px; 13097 display: inline-block; 13098 color: #666; 13099 } 13100 .section-newsletter [type="radio"]:checked + label:before, .section-newsletter [type="radio"]:not(:checked) + label:before { 13101 content: ''; 13102 position: absolute; 13103 left: 0; 13104 top: 0; 13105 width: 18px; 13106 height: 18px; 13107 border: 1px solid #ddd; 13108 border-radius: 100%; 13109 background: #fff; 13110 } 13111 .section-newsletter [type="radio"]:checked + label:after, .section-newsletter [type="radio"]:not(:checked) + label:after { 13112 content: ''; 13113 width: 12px; 13114 height: 12px; 13115 background: #212121; 13116 position: absolute; 13117 top: 3px; 13118 left: 3px; 13119 border-radius: 100%; 13120 -webkit-transition: all 0.2s ease; 13121 transition: all 0.2s ease; 13122 } 13123 .section-newsletter [type="radio"]:not(:checked) + label:after { 13124 opacity: 0; 13125 -webkit-transform: scale(0); 13126 transform: scale(0); 13127 } 13128 .opt-newsletter {display:none;} 13129 .footer-newsletter p, .footer-newsletter p a { 13130 color: #757575; 13131 } 13132 @media (max-width:991px){ 13133 .section-newsletter h2 { 13134 font-size: 32px; 13135 } 13136 .section-newsletter input { 13137 width: 300px; 13138 font-size: 14px; 13139 } 13140 .section-newsletter { 13141 padding: 50px 20px; 13142 } 13143 } 13144 @media (max-width: 480px){ 13145 .section-newsletter input[type="email"] {font-size: 16px;} 13146 } 13147 </style> 13148 13149 <div class="section-newsletter text-center"> 13150 <div class="header-newsletter"> 13151 <h2>ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap</h2> 13152 <p style="color: #000000; line-height: 1.9; font-size: 15px; text-align: justify; margin-bottom: 18px;"><strong><a href="https://atas4d.biz/">ATAS4D</a></strong> hadir sebagai platform terpercaya bagi pecinta game togel toto macau yang mengutamakan kenyamanan, kecepatan, dan keamanan dalam bermain angka 4d. Dengan sistem yang stabil dan tampilan yang ramah pengguna, ATAS4D memudahkan siapa saja untuk mengakses berbagai pasaran populer seperti togel macau, toto macau, dan toto macau 4d yang dikenal memiliki peluang menarik. Platform ini dirancang untuk memberikan pengalaman bermain yang optimal, mulai dari proses pendaftaran hingga transaksi yang cepat dan aman.</p> 13153<p style="color: #000000; line-height: 1.9; font-size: 15px; text-align: justify; margin-bottom: 18px;">Sebagai penyedia pasaran <strong><a href="https://atas4d.biz/">toto macau</a></strong> dan <strong><a href="https://atas4d.biz/">toto macau 4d</a></strong> berkualitas, ATAS4D menawarkan fitur lengkap yang mendukung aktivitas pemain setiap hari. Data result macau yang akurat, update secara real-time, serta dukungan layanan pelanggan yang responsif menjadi nilai tambah yang meningkatkan kepercayaan pengguna. Selain itu, sistem keamanan yang digunakan memastikan seluruh data pribadi dan transaksi pemain tetap terlindungi, sehingga pemain dapat fokus menikmati permainan tanpa rasa khawatir.</p> 13154<p style="color: #000000; line-height: 1.9; font-size: 15px; text-align: justify; margin-bottom: 18px;">Keunggulan lain dari ATAS4D adalah kemudahan akses melalui berbagai perangkat, baik desktop maupun mobile, tanpa mengurangi performa. Dengan komb
13154inasi teknologi modern dan layanan profesional, ATAS4D terus berkembang menjadi pilihan utama bagi para pemain <strong><a href="https://atas4d.biz/">game togel online</a></strong>. Bagi yang mencari platform togel macau terpercaya dengan fitur lengkap dan peluang menarik, ATAS4D menjadi solusi yang tepat untuk pengalaman bermain yang lebih maksimal.</p> 13155</div> 13156</div> 13157 </div> 13158 </div> 13159
13159<script> 13160 $(document).ready(function(){ 13161 $('.section-newsletter input[type="email"]').bind('input propertychange', function() { 13162 if(($(this).val().length) > 0) { 13163 $('.opt-newsletter').css('display','flex'); 13164 }else { 13165 $('.opt-newsletter').css('display','none'); 13166 } 13167 }); 13168 }); 13169 </script>
13169 13170 13171 13172</div> 13173 13174 13175 <div id="shopify-section-Footer" class="shopify-section Footer Section"><!-- begin site-footer --> 13176 13177<link href="https://outerbloom.com/cdn/shop/t/138/assets/section-footer.css?v=100040659411828343611752652419" rel="stylesheet" type="text/css" media="all" /> 13178<style> 13179 13180 .site-footer__list-item a {color: #212121;font-size: 14px;font-weight: 400;} 13181 .social-icons li {display: inline-block;} 13182 .social-icons li a {display: block;color: #212121!important;font-size: 16px;} 13183 .social-icons li a img {vertical-align: middle;height: 20px;margin-right: 7px;} 13184 .icon-footer-whatsapp .icon-svg {width: 18px;height: 18px;vertical-align: middle;} 13185 .copyright * {display: inline-block;vertical-align: middle;color: #212121;letter-spacing: normal!important;font-size: 16px!important;} 13186 .copyright a {border-left: 1px solid;padding-left: 10px;margin-left: 5px;} 13187 .icon-minus {display:none} 13188 .bc-border { 13189 border-top: 1px solid #C4C4C4; 13190 border-bottom: 1px solid #C4C4C4; 13191 padding: 40px 0; 13192 margin-bottom: 50px; 13193 } 13194 @media (min-width: 769px) { 13195 .site-footer__list-item{margin-bottom:8px;} 13196 } 13197 @media (max-width: 992px){ 13198 ul.site-footer__list {display: none;} 13199 .site-footer__section .bottom-line .icon {float: right;width: 20px;height: 20px;} 13200 .bottom-line.site-footer__section-title.open .icon-minus {display: block;} 13201 .bottom-line.site-footer__section-title.open .icon-plus {display: none;} 13202 13203 .site-footer__list.cust-service {margin-bottom: 25px;} 13204 .site-footer__list.cust-service li {width: 100%;text-align: center;} 13205 /*.site-footer__list.cust-service li:first-child {border-right: 1px solid #757575;} 13206 .site-footer__list.cust-service li:last-child {border-left: 1px solid #757575;}*/ 13207 } 13208 @media (max-width: 768px) { 13209 .seo-footer, .seo-article {padding-top: 0!important;} 13210 .copyright {padding: 0px 0 0!important;} 13211 .copyright span { 13212 width: 100%; 13213 font-size: 14px!important; 13214 } 13215 .copyright a { 13216 padding: 0; 13217 margin: 0 5px; 13218 border: none; 13219 font-size: 14px!important; 13220 } 13221 .article-lists {column-count: 2;-webkit-column-count: 2;} 13222 } 13223 /** Newsletter Footer **/ 13224 .site-footer__newsletter-input {height: 37px;border-radius: 0;}#mc-embedded-subscribe-form .input-group-btn {width: initial;} 13225 /** Method Footer **/ 13226 .footer-method ul {margin: 0;}.footer-method ul li {display: inline-block;width: 65px;float: left;margin-right: 5px;margin-bottom: 5px;}.footer-method ul li img {display: block;width: 100%;background-color: #fff;} 13227 /** SEO **/ 13228 .c-seo-links h6 {font-size: 24px;font-weight: 600;} 13229 .c-seo-links .about_text p {font-size: 14px!important;font-weight: 400;} 13230 .seo-article * {color: #212121!important;} 13231 .seo-article a:hover {text-decoration: underline;} 13232</style> 13233<footer class="site-footer" role="contentinfo"> 13234 13235 <div class="footer-menu"> 13236 <div class="container pt-0"> 13237 <div class="row px-1 px-md-0 pb-4 pb-md-0"> 13238 <div class="footer-navigation col-12"> 13239 <div class="row justify-content-around m-0 m-sm-0"> 13240 <div class="site-footer__section site-footer__section-mbl col-lg-3 mt-3 mt-md-0 p-0 d-lg-none"> 13241 <h5 class="bottom-line site-footer__section-title mb-1"> 13242 Layanan Customers 13243 <svg class="d-none icon icon-plus" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 13244 <title>icon-plus</title> 13245 <path d="M16.667 15.333h8.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-8.667v8.667c0 0.368-0.298 0.667-0.667 0.667s-0.667-0.298-0.667-0.667v-8.667h-8.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h8.667v-8.667c0-0.368 0.298-0.667 0.667-0.667s0.667 0.298 0.667 0.667v8.667z"></path> 13246 </svg> 13247 <svg class="d-lg-none icon icon-minus" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 13248 <title>icon-minus</title> 13249 <path d="M6.667 16.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h18.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-18.667z"></path> 13250 </svg> 13251</h5> 13252<ul class="site-footer__list cust-service ml-0 contact-footer-mobile d-flex d-lg-block justify-content-between"> 13253 <li class="site-footer__list-item fist list-unstyled icon-footer-whatsapp">
13254 <a href="https://api.whatsapp.com/send?phone=6281514234600&text=https://outerbloom.com" target="_blank" class="small"><span class="lc-icon"> 13255 <svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="whatsapp" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" class="icon-svg svg-inline--fa fa-whatsapp fa-w-14 fa-2x"><path fill="currentColor" d="M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z" class=""></path></svg></span> 13256 <span class="d-none d-lg-inline-block">0857-6388-1890</span> 13257 <span class="d-lg-none lc-icon-text align-middle">Whatsapp</span> 13258 </a> 13259 </li> 13260 <li class="site-footer__list-item second list-unstyled"> 13261 <a href="tel:+622157937918" class="small" target="_blank"> 13262 <span class="lc-icon"> 13263 <img src="https://outerbloom.com/cdn/shop/t/138/assets/call-footer.svg?v=66245936344487562681752652418" alt="Icon Phone"/> 13264 </span> 13265 <span class="d-none d-lg-inline-block">
13265021-57937918</span> 13266 <span class="d-lg-none lc-icon-text align-middle">Phone</span> 13267 </a> 13268 </li> 13269 13270</ul> 13271 </div> 13272 13273 13274 <div class="site-footer__section col-lg-3 mt-3 mt-md-0 p-0"> 13275 <h5 class="bottom-line footer-trigger site-footer__section-title mb-1"> 13276 ATAS4D 13277 <svg class="d-lg-none icon icon-plus" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 13278 <title>icon-plus</title> 13279 <path d="M16.667 15.333h8.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-8.667v8.667c0 0.368-0.298 0.667-0.667 0.667s-0.667-0.298-0.667-0.667v-8.667h-8.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h8.667v-8.667c0-0.368 0.298-0.667 0.667-0.667s0.667 0.298 0.667 0.667v8.667z"></path> 13280 </svg> 13281 <svg class="d-lg-none icon icon-minus" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 13282 <title>icon-minus</title> 13283 <path d="M6.667 16.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h18.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-18.667z"></path> 13284 </svg> 13285 13286 </h5> 13287<ul class="site-footer__list ml-0"> 13288 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">Tentang ATAS4D</a></li> 13289 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">Kebijakan Privasi ATAS4D</a></li> 13290 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">Syarat & Ketentuan ATAS4D</a></li> 13291 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">Blog & ATAS4D</a></li> 13292 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">Karir di ATAS4D</a></li> 13293 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">Pasaran Togel ATAS4D</a></li> 13294 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">Terms of Service ATAS4D</a></li> 13295 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">Kebijakan Pengembalian & Pembayaran ATAS4D</a></li> 13296</ul> 13297 13298 </div> 13299 13300 13301 13302 <div class="site-footer__section col-lg-3 mt-3 mt-md-0 p-0"> 13303 <h5 class="bottom-line footer-trigger site-footer__section-title mb-1"> 13304 Bantuan 13305 <svg class="d-lg-none icon icon-plus" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 13306 <title>icon-plus</title> 13307 <path d="M16.667 15.333h8.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-8.667v8.667c0 0.368-0.298 0.667-0.667 0.667s-0.667-0.298-0.667-0.667v-8.667h-8.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h8.667v-8.667c0-0.368 0.298-0.667 0.667-0.667s0.667 0.298 0.667 0.667v8.667z"></path> 13308 </svg> 13309 <svg class="d-lg-none icon icon-minus" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 13310 <title>icon-minus</title> 13311 <path d="M6.667 16.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h18.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-18.667z"></path> 13312 </svg> 13313 13314 </h5> 13315<ul class="site-footer__list ml-0"> 13316 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">Login ATAS4D</a></li> 13317 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">Daftar Akun ATAS4D</a></li> 13318 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">Pasaran ATAS4D Terlengkap</a></li> 13319 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">Keluaran ATAS4D Hari Ini</a></li> 13320 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">Situs ATAS4D</a></li> 13321 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">FAQ ATAS4D</a></li> 13322 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://atas4d.biz/" class="small">Kontak CS 24 Jam</a></li> 13323</ul> 13324 13325 </div> 13326 13327 13328 13329 <div class="site-footer__section col-lg-3 mt-3 mt-md-0 p-0"> 13330 <h5 class="bottom-line footer-trigger site-footer__section-title mb-1"> 13331 B2B Programs 13332 <svg class="d-lg-none icon icon-plus" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 13333 <title>icon-plus</title> 13334 <path d="M16.667 15.333h8.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-8.667v8.667c0 0.368-0.298 0.667-0.667 0.667s-0.667-0.298-0.667-0.667v-8.667h-8.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h8.667v-8.667c0-0.368 0.298-0.667 0.667-0.667s0.667 0.298 0.667 0.667v8.667z"></path> 13335 </svg> 13336 <svg class="d-lg-none icon icon-minus" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 13337 <title>icon-minus</title>
13338 <path d="M6.667 16.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h18.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-18.667z"></path> 13339 </svg> 13340 13341 </h5> 13342 <ul class="site-footer__list ml-0"> 13343 13344 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://outerbloom.com/pages/corporate-program" class="small">Corporate Program</a></li> 13345 13346 <li class="site-footer__list-item list-unstyled mb-1"><a href="https://outerbloom.com/pages/be-our-partner" class="small">Be Our Partner</a></li> 13347 13348 </ul> 13349 13350 <div class="d-none d-lg-block"> 13351 <h5 class="bottom-line site-footer__section-title mb-1"> 13352 Layanan Customers 13353 <svg class="d-none icon icon-plus" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 13354 <title>icon-plus</title> 13355 <path d="M16.667 15.333h8.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-8.667v8.667c0 0.368-0.298 0.667-0.667 0.667s-0.667-0.298-0.667-0.667v-8.667h-8.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h8.667v-8.667c0-0.368 0.298-0.667 0.667-0.667s0.667 0.298 0.667 0.667v8.667z"></path> 13356 </svg> 13357 <svg class="d-lg-none icon icon-minus" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 13358 <title>icon-minus</title> 13359 <path d="M6.667 16.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h18.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-18.667z"></path> 13360 </svg> 13361</h5> 13362<ul class="site-footer__list cust-service ml-0 contact-footer-mobile d-flex d-lg-block justify-content-between"> 13363 <li class="site-footer__list-item fist list-unstyled icon-footer-whatsapp"> 13364 <a href="https://api.whatsapp.com/send?phone=6281514234600&text=https://outerbloom.com" target="_blank" class="small"><span class="lc-icon"> 13365 <svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="whatsapp" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" class="icon-svg svg-inline--fa fa-whatsapp fa-w-14 fa-2x"><path fill="currentColor" d="M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z" class=""></path></svg></span> 13366 <span class="d-none d-lg-inline-block">0857-6370-1890</span> 13367 <span class="d-lg-none lc-icon-text align-middle">Whatsapp</span> 13368 </a> 13369 </li> 13370 <li class="site-footer__list-item second list-unstyled"> 13371 <a href="tel:+622157937918" class="small" target="_blank"> 13372 <span class="lc-icon"> 13373 <img src="https://outerbloom.com/cdn/shop/t/138/assets/call-footer.svg?v=66245936344487562681752652418" alt="Icon Phone"/> 13374 </span> 13375 <span class="d-none d-lg-inline-block">085763881890</span> 13376 <span class="d-lg-none lc-icon-text align-middle">Phone</span> 13377 </a> 13378 </li> 13379 13380</ul> 13381 </div> 13382 13383 </div> 13384 13385 13386 <div class="site-footer__section footer-method col-lg-3 mt-3 mt-md-0 p-0 d-block d-lg-none"> 13387 <h5 class="bottom-line footer-trigger site-footer__section-title mb-1"> 13388 Metode Pembayaran 13389 <svg class="d-lg-none icon icon-plus" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 13390 <title>icon-plus</title> 13391 <path d="M16.667 15.333h8.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-8.667v8.667c0 0.368-0.298 0.667-0.667 0.667s-0.667-0.298-0.667-0.667v-8.667h-8.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h8.667v-8.667c0-0.368 0.298-0.667 0.667-0.667s0.667 0.298 0.667 0.667v8.667z"></path> 13392 </svg> 13393 <svg class="d-lg-none icon icon-minus" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 13394 <title>icon-minus</title>
13395 <path d="M6.667 16.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h18.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-18.667z"></path> 13396 </svg> 13397 </h5> 13398 <ul class="site-footer__list ml-0 method-payment"> 13399 13400 <li><img src="https://outerbloom.com/cdn/shop/files/Payment_2021_Icon_ovo_d9091448-9e8e-4049-8b9c-47b022942188_65x.jpg?v=1614385284" alt="Icon Payment"/></li> 13401 13402 13403 <li><img src="https://outerbloom.com/cdn/shop/files/Payment_2021_Icon_dana_1e55a7bb-cbe4-456e-89ed-fdb0cdd7fe38_65x.jpg?v=1614385284" alt="Icon Payment"/></li> 13404 13405 13406 <li><img src="https://outerbloom.com/cdn/shop/files/Payment_2021_Icon_shopee_pay_c987eae8-c53e-4493-a243-52a015c87d34_65x.jpg?v=1614385285" alt="Icon Payment"/></li> 13407 13408 13409 <li><img src="https://outerbloom.com/cdn/shop/files/Payment_2021_Icon_Link_aja_9a413328-03f7-4024-bc31-004f3197b700_65x.jpg?v=1614385285" alt="Icon Payment"/></li> 13410 13411 13412 <li><img src="https://outerbloom.com/cdn/shop/files/Payment_2021_Icon_mastercard_bb55b01a-72ea-440a-9973-35609e91735f_65x.jpg?v=1614385285" alt="Icon Payment"/></li> 13413 13414 13415 <li><img src="https://outerbloom.com/cdn/shop/files/Payment_2021_Icon_visa_de5de8b1-bd17-47dc-8f6e-eb78ae3e755a_65x.jpg?v=1614385285" alt="Icon Payment"/></li> 13416 13417 13418 <li><img src="https://outerbloom.com/cdn/shop/files/Payment_2021_Icon_bca_96093da7-3e37-4a6b-a35f-3ea840732292_65x.jpg?v=1614385285" alt="Icon Payment"/></li> 13419 13420 13421 <li><img src="https://outerbloom.com/cdn/shop/files/Payment_2021_Icon_mandiri_9966e6e5-1a91-4fd3-88dd-a7fe254f9371_65x.jpg?v=1614385285" alt="Icon Payment"/></li> 13422 13423 13424 <li><img src="https://outerbloom.com/cdn/shop/files/Payment_2021_Icon_bri_63ba1791-409c-4049-a5d1-66358d5b2c8e_65x.jpg?v=1614385285" alt="Icon Payment"/></li> 13425 13426 13427 <li><img src="https://outerbloom.com/cdn/shop/files/Payment_2021_Icon_bank_transfer_0edfac97-0da1-445b-8917-d91f0591091a_65x.jpg?v=1614385285" alt="Icon Payment"/></li> 13428 13429 13430 <li><img src="https://outerbloom.com/cdn/shop/files/Payment_2021_Icon_alfamart_d9366c0c-8728-4c7e-bf11-5417b23e7cf0_65x.jpg?v=1614385285" alt="Icon Payment"/></li> 13431 13432 13433 <li><img src="https://outerbloom.com/cdn/shop/files/Payment_2021_Icon_Paypal_d6e7bc39-f865-4429-a72b-1f02424c9aa8_65x.jpg?v=1614385285" alt="Icon Payment"/></li> 13434 13435 13436 13437 13438 </ul> 13439 </div> 13440 <div class="site-footer__section col-lg-3 mt-3 mt-md-0 p-0"> 13441 <div class="social-media-desktop d-none d-md-block"> 13442 13443 <div class="social-media"> 13444 <h5 class="site-footer__section-title">Follow Our Social Medias</h5> 13445 <ul class="inline-list social-icons mt-2"> 13446 13447 <li> 13448 <a href="https://twitter.com/outerbloom" title="Outerbloom on Twitter" target="_blank"> 13449 <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 22 22" fill="none"> 13450 <path d="M9.60246 11.7963L1.48771 21.0573M19.1225 0.642921L11.9066 9.14092M0.855957 0.641754L16.8626 21.0584H21.2726L5.26654 0.641754H0.855957Z" stroke="#212121" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round"/> 13451</svg> 13452 13453 </a> 13454 </li> 13455 13456 13457 <li> 13458 <a href="https://www.facebook.com/outerbloom/" title="Outerbloom on Facebook" target="_blank"> 13459 <svg xmlns="http://www.w3.org/2000/svg" width="22" height="23" viewBox="0 0 22 23" fill="none"> 13460 <path d="M21.0625 0.912598H0.9375C0.453516 0.912598 0.0625 1.30361 0.0625 1.7876V21.9126C0.0625 22.3966 0.453516 22.7876 0.9375 22.7876H21.0625C21.5465 22.7876 21.9375 22.3966 21.9375 21.9126V1.7876C21.9375 1.30361 21.5465 0.912598 21.0625 0.912598ZM18.5359 7.29736H16.7887C15.4188 7.29736 15.1535 7.94814 15.1535 8.90518V11.0134H18.4238L17.9973 14.3138H15.1535V22.7876H11.7438V14.3165H8.8918V11.0134H11.7438V8.57978C11.7438 5.75518 13.4691 4.21572 15.9902 4.21572C17.1988 4.21572 18.2352 4.30596 18.5387 4.34697V7.29736H18.5359Z" fill="#212121"/> 13461</svg> 13462 13463 </a> 13464 </li> 13465 13466 13467 <li> 13468 <a href="https://www.instagram.com/outerbloom" title="Outerbloom on Instagram" target="_blank"> 13469 <svg xmlns="http://www.w3.org/2000/svg" width="22" height="23" viewBox="0 0 22 23" fill="none"> 13470 <path d="M11 7.0376C10.0482 7.0376 9.11773 7.31985 8.32632 7.84865C7.53491 8.37745 6.91808 9.12906 6.55383 10.0084C6.
1347018958 10.8878 6.09428 11.8554 6.27997 12.789C6.46566 13.7225 6.92401 14.58 7.59705 15.253C8.27009 15.9261 9.12759 16.3844 10.0611 16.5701C10.9947 16.7558 11.9623 16.6605 12.8417 16.2963C13.721 15.932 14.4726 15.3152 15.0014 14.5238C15.5303 13.7324 15.8125 12.8019 15.8125 11.8501C15.8111 10.5742 15.3036 9.35095 14.4014 8.44874C13.4991 7.54654 12.2759 7.03904 11 7.0376ZM11 15.7876C10.2212 15.7876 9.45996 15.5567 8.81244 15.124C8.16492 14.6914 7.66024 14.0764 7.36222 13.3569C7.0642 12.6374 6.98623 11.8457 7.13816 11.0819C7.29009 10.3181 7.6651 9.61653 8.21577 9.06586C8.76644 8.5152 9.46803 8.14018 10.2318 7.98826C10.9956 7.83633 11.7873 7.9143 12.5068 8.21232C13.2263 8.51034 13.8413 9.01502 14.2739 9.66254C14.7066 10.3101 14.9375 11.0713 14.9375 11.8501C14.9375 12.8944 14.5227 13.8959 13.7842 14.6343C13.0458 15.3728 12.0443 15.7876 11 15.7876ZM16.25 0.912598H5.75C4.24211 0.914335 2.79649 1.51411 1.73025 2.58035C0.664012 3.64658 0.0642369 5.09221 0.0625 6.6001V17.1001C0.0642369 18.608 0.664012 20.0536 1.73025 21.1199C2.79649 22.1861 4.24211 22.7859 5.75 22.7876H16.25C17.7579 22.7859 19.2035 22.1861 20.2698 21.1199C21.336 20.0536 21.9358 18.608 21.9375 17.1001V6.6001C21.9358 5.09221 21.336 3.64658 20.2698 2.58035C19.2035 1.51411 17.7579 0.914335 16.25 0.912598ZM21.0625 17.1001C21.0611 18.376 20.5536 19.5992 19.6514 20.5014C18.7491 21.4037 17.5259 21.9111 16.25 21.9126H5.75C4.47409 21.9111 3.25085 21.4037 2.34865 20.5014C1.44644 19.5992 0.938947 18.376 0.9375 17.1001V6.6001C0.938947 5.32419 1.44644 4.10095 2.34865 3.19874C3.25085 2.29654 4.47409 1.78905 5.75 1.7876H16.25C17.5259 1.78905 18.7491 2.29654 19.6514 3.19874C20.5536 4.10095 21.0611 5.32419 21.0625 6.6001V17.1001ZM17.5625 6.1626C17.5625 6.33566 17.5112 6.50483 17.415 6.64872C17.3189 6.79261 17.1822 6.90477 17.0223 6.97099C16.8625 7.03722 16.6865 7.05455 16.5168 7.02078C16.3471 6.98702 16.1912 6.90369 16.0688 6.78132C15.9464 6.65895 15.8631 6.50304 15.8293 6.3333C15.7956 6.16357 15.8129 5.98763 15.8791 5.82775C15.9453 5.66786 16.0575 5.53121 16.2014 5.43506C16.3453 5.33892 16.5144 5.2876 16.6875 5.2876C16.9196 5.2876 17.1421 5.37979 17.3062 5.54388C17.4703 5.70797 17.5625 5.93053 17.5625 6.1626Z" fill="#212121"/> 13471</svg> 13472 13473 </a> 13474 </li> 13475 13476 13477 <li> 13478 <a href="https://www.youtube.com/channel/UCSxRXcJS9JeYxRnq-m7MPYQ" title="Outerbloom on YouTube" target="_blank"> 13479 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="20" viewBox="0 0 24 20" fill="none"> 13480 <path d="M15.7428 9.48587L10.4928 5.98587C10.4269 5.9419 10.3503 5.91665 10.2712 5.91282C10.192 5.90898 10.1134 5.92671 10.0435 5.9641C9.97366 6.00149 9.91528 6.05715 9.8746 6.12513C9.83391 6.19311 9.81245 6.27086 9.8125 6.35009V13.3501C9.81241 13.4293 9.83383 13.5071 9.87447 13.5751C9.91512 13.6431 9.97346 13.6988 10.0433 13.7362C10.1132 13.7736 10.1919 13.7913 10.2711 13.7875C10.3503 13.7836 10.4269 13.7583 10.4928 13.7143L15.7428 10.2143C15.8028 10.1744 15.852 10.1202 15.8861 10.0567C15.9201 9.99314 15.9379 9.92217 15.9379 9.85009C15.9379 9.778 15.9201 9.70704 15.8861 9.64349C15.852 9.57995 15.8028 9.52581 15.7428 9.48587ZM10.6875 12.5331V7.16712L14.7114 9.85009L10.6875 12.5331ZM23.2066 3.56431C23.121 3.2282 22.9568 2.91724 22.7275 2.65709C22.4982 2.39693 22.2102 2.19504 21.8875 2.06806C18.1906 0.63962 12.2483 0.662589 12 0.662589C11.7517 0.662589 5.80937 0.63962 2.1125 2.06806C1.78989 2.19493 1.50205 2.39666 1.27272 2.65661C1.04338 2.91657 0.879104 3.22731 0.793438 3.56321C0.515625 4.62962 0.1875 6.58634 0.1875 9.85009C0.1875 13.1138 0.515625 15.0706 0.793438 16.137C0.879104 16.4729 1.04338 16.7836 1.27272 17.0436C1.50205 17.3035 1.78989 17.5052 2.1125 17.6321C5.80937 19.0606 11.7517 19.0376 12 19.0376H12.0777C12.8313 19.0376 18.3755 18.9906 21.8908 17.6321C22.2134 17.5052 22.5012 17.3035 22.7306 17.0436C22.9599 16.7836 23.1242 16.4729 23.2098 16.137C23.4844 15.0695 23.8125 13.1138 23.8125 9.85009C23.8125 6.58634 23.4844 4.62962 23.2066 3.56321V3.56431ZM22.36 15.9237C22.3092 16.1253 22.2112 16.3119 22.0741 16.4682C21.9369 16.6246 21.7647 16.7461 21.5714 16.8227C18.0309 18.1834 12.0623 18.1626 12 18.1626C11.9377 18.1626 5.97234 18.1834 2.43187 16.8162C2.23861 16.7395 2.06633 16.618 1.92923 16.4617C1.79213 16.3054 1.69412 16.1187 1.64328 15.9171C1.37641 14.8999 1.0625 13.022 1.0625 9.85009C1.0625 6.67821 1.37641 4.80025 1.64 3.78306C1.69084 3.58145 1.78884 3.3948 1.92595 3.23849C2.06305 3.08218 2.23533 2.96068 2.42859 2.884C5.96906 1.51681 11.9377 1.53759 12 1.53759C12.0623 1.53759 18.0277 1.51571 21.5681 2.884C21.7614 2.96068 21.9337 3.08218 22.0708 3.23849C22.2079 3.3948 22.3059 3.58145 22.3567 3.78306C22.6236 4.80025 22.9375 6.67821 22.9375 9.85009C22.9375 13.022 22.6236 14.8999 22.36 15.9171V15.9237Z" fill="#212121"/> 13481</svg> 13482 13483 </a> 13484 </li> 13485 13486 </ul> 13487 </div> 13488 13489 </div> 13490 <p class="fs-body">Download our app.</p> 13491 <a href="https://play.google.com/store/apps/details?id=com.outerBloom1Expo&referrer=utm_source%3Dwebsite%26utm_medium%3Dfooter%26utm_term%3Dapp%2520install%26anid%3Dadmob" target="_blank"><img src="https://outerbloom.com/cdn/shop/t/138/assets/google-play-logo.png?v=71844389215489113031752652420" alt="Logo Google Play" width="120"/></a> 13492 <a href="https://apps.apple.com/us/app/outerbloom-flower-cake/id1576832504?itsct=apps_box_link&itscg=30200&utm_source=website&utm_medium=footer&utm_campaign=app+install" target="_blank"><img src="https://outerbloom.com/cdn/shop/t/138/assets/app-store-logo.png?v=41600940253401965221752652422" alt="Logo Google Play" width="120"/></a> 13493 </div> 13494</div> 13495
13496<script> 13497 if ($(window).width() < 992) { 13498 $("document").ready(function(){ 13499 $(".site-footer__section .footer-trigger").click(function(){ 13500 $(this).toggleClass("open"); 13501 $(this).next("ul").slideToggle(); 13502 }); 13503 }); 13504 } 13505</script>
13505 13506 </div> 13507 </div> 13508 <div class="copyright"> 13509 <span 13510 >© 2026 SEO DINDIN - <a href="https://atas4d.biz/">ATAS4D</a> . All rights reserved 13511 13512 </span> 13513 </div> 13514 </div> 13515 </div> 13516 13517 13518</footer> 13519 13520<!-- //site-footer --> 13521 13522 13523</div> 13524 13525 13526 13527 </div> 13528 13529 <style> 13530 #CartDrawer .drawer__title {color: #fff;} 13531 #CartDrawer .drawer__close button {color: #fff;} 13532 #CartDrawer .drawer__header {background-color: #212121;padding: 5px 0;} 13533 #CartDrawer .drawer {top: 48px;} 13534 .login-customer a {text-decoration: underline;} 13535</style> 13536 13537<div class="overlay overlay-cart"></div> 13538<div id="CartDrawer" class="drawer drawer--right"> 13539 <div class="drawer__header pl-2 pr-2"> 13540 <div class="drawer__icon-cart display-table-cell"> 13541 <a href="/cart" class=""> 13542 <svg class="icon icon-cart" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> <path fill="#fff" d="M13.638 23.203c0 0 3.5-2.113 3.502-4.11 0.002-2.304-2.689-3.537-3.497-1.76-0.916-1.778-3.493-1.714-3.497 0.59-0.003 1.999 3.491 5.28 3.491 5.28z"></path> <path fill="#fff" d="M8.112 9.809v16.662l11.063 2.491v-17.58l-11.063-1.573zM7.74 8.858l11.925 1.696c0.213 0.030 0.372 0.218 0.372 0.44v18.519c0 0.284-0.254 0.495-0.523 0.434l-11.925-2.685c-0.198-0.045-0.339-0.225-0.339-0.434v-17.53c0-0.27 0.231-0.477 0.49-0.44z"></path> <path fill="#fff" d="M23.7 10.046l-3.275 0.146-0.388 0.897v17.656l3.664-2.174v-16.526zM24.346 27.214l-4.526 2.685c-0.287 0.17-0.646-0.043-0.646-0.385v-18.519l0.037-0.181 0.534-1.235c0.067-0.154 0.212-0.256 0.375-0.263l3.991-0.178c0.245-0.011 0.45 0.191 0.45 0.444v17.247c0 0.159-0.082 0.306-0.216 0.385z"></path> <path fill="#000" d="M20.772 27.081l-0.501 2.383c-0.050 0.24-0.28 0.392-0.512 0.34s-0.38-0.289-0.33-0.528l0.569-2.707v-16.588c0-0.245 0.193-0.444 0.431-0.444s0.431 0.199 0.431 0.444v16.215l3.296 0.189c0.238 0.014 0.42 0.223 0.406 0.468s-0.217 0.433-0.454 0.419l-3.335-0.191z"></path> <path fill="#fff" d="M20.772 27.081l-0.501 2.383c-0.050 0.24-0.28 0.392-0.512 0.34s-0.38-0.289-0.33-0.528l0.569-2.707v-16.588c0-0.245 0.193-0.444 0.431-0.444s0.431 0.199 0.431 0.444v16.215l3.296 0.189c0.238 0.014 0.42 0.223 0.406 0.468s-0.217 0.433-0.454 0.419l-3.335-0.191z"></path> <path fill="#fff" d="M11.336 8.354l-0.257-0.333c-0.243-0.315 0.012-0.774 0.398-0.717l12.51 1.838c0.236 0.035 0.399 0.26 0.366 0.503s-0.252 0.412-0.487 0.377l-11.436-1.68 0.056 0.073c0.209 0.27 0.052 0.672-0.281 0.718l-4.467 0.607c-0.236 0.032-0.452-0.139-0.484-0.383s0.135-0.467 0.371-0.499l3.711-0.504z"></path> <path fill="#fff" d="M17.152 11.344c0.026-0.003 0.053-0.005 0.079-0.005 0.357 0 0.645 0.297 0.645 0.665s-0.288 0.665-0.645 0.665c-0.322 0-0.59-0.245-0.637-0.565-0.383-0.45-0.515-1.321-0.521-2.536-0.003-0.556 0.026-1.149 0.076-1.739 0.028-0.339 0.057-0.603 0.074-0.735 0.195-2.391-2.008-3.379-3.568-1.658-0.64 0.707-1.041 1.855-1.266 3.412-0.092 0.634-0.137 1.111-0.194 2.024 0.107 0.119 0.172 0.278 0.172 0.453 0 0.342-0.251 0.624-0.573 0.661-0.031 0.005-0.064 0.007-0.097 0.005-0.015-0.001-0.029-0.003-0.044-0.005-0.324-0.036-0.576-0.318-0.576-0.661 0-0.218 0.102-0.412 0.259-0.533 0.058-0.924 0.105-1.415 0.201-2.075 0.249-1.719 0.703-3.020 1.489-3.888 2.114-2.335 5.321-0.897 5.054 2.359-0.018 0.141-0.045 0.392-0.072 0.717-0.047 0.566-0.075 1.133-0.073 1.658 0.004 0.839 0.098 1.47 0.216 1.78z"></path> <path fill="#fff" d="M14.43 8.138c-0.008 0.245-0.207 0.438-0.445 0.43s-0.424-0.213-0.417-0.459c0.001-0.026 0.001-0.026 0.002-0.051 0.029-0.909 0.047-1.282 0.102-1.792 0.164-1.528 0.58-2.665 1.434-3.481 2.037-1.949 5.235-0.623 5.066 2.208-0.007 0.119-0.018 0.331-0.029 0.608-0.022 0.539-0.033 1.084-0.029 1.59 0.007 0.797 0.053 1.412 0.139 1.744 0.062 0.237-0.075 0.481-0.305 0.544s-0.466-0.077-0.528-0.314c-0.111-0.427-0.161-1.097-0.168-1.966-0.004-0.523 0.007-1.081 0.029-1.634 0.011-0.284 0.023-0.502 0.030-0.626 0.119-1.995-2.13-2.927-3.619-1.501-0.673 0.644-1.021 1.591-1.164 2.927-0.051 0.479-0.069 0.838-0.097 1.723-0.001 0.026-0.001 0.026-0.002 0.052z"></path> </svg> 13543 </a> 13544 </div> 13545 <div class="drawer__title h4">Keranjang Belanja</div> 13546 <div class="drawer__close js-drawer-close"> 13547 <button type="button"> 13548 <svg class="icon icon-close" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 13549<title>icon-close</title> 13550<path d="M16.943 16l8.862 8.862c0.26 0.26 0.26 0.682 0 0.943s-0.682 0.26-0.943 0l-8.862-8.862-8.862 8.862c-0.26 0.26-0.682 0.26-0.943 0s-0.26-0.682 0-0.943l8.862-8.862-8.862-8.862c-0.26-0.26-0.26-0.682 0-0.943s0.682-0.26 0.943 0l8.862 8.862 8.862-8.862c0.26-0.26 0.682-0.26 0.943 0s0.26 0.682 0 0.943l-8.862 8.862z"></path> 13551</svg> 13552 </button> 13553 </div> 13554 </div> 13555 <div id="CartContainer" class="p-2"></div> 13556</div> 13557
13558<script> 13559 13560 </script>
13560 13561
13561<script src="https://outerbloom.com/cdn/shop/t/138/assets/handlebars.min.js?v=79044469952368397291752652415" defer></script>
13561 13562 <!-- /snippets/ajax-cart-template.liquid --> 13563 13564
13564<script id="CartTemplate" type="text/template"> 13565 13566 <form action="/cart" method="post" novalidate class="cart ajaxcart"> 13567 <div class="ajaxcart__inner" {{ cart.item_count }}> 13568 {{#items}} 13569 <div class="ajaxcart__product"> 13570 <div class="ajaxcart__row" data-line="{{line}}"> 13571 <div class="grid"> 13572 <div class="grid__item one-quarter"> 13573 <a href="{{url}}" class="ajaxcart__product-image"><img src="{{img}}" alt="ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap"></a> 13574 </div> 13575 <div class="grid__item three-quarters"> 13576 <p class="d-block mb-3"> 13577 <a class="h4 d-block mb-2" href="{{url}}" class="ajaxcart__product-name">{{name}}</a> 13578 {{#if variation}} 13579 <span class="ajaxcart__product-meta p">{{variation}}</span> 13580 {{/if}} 13581 {{#properties}} 13582 {{#each this}} 13583 {{#if this}} 13584 <span class="ajaxcart__product-meta p hide">{{@key}}: {{this}}</span> 13585 {{/if}} 13586 {{/each}} 13587 {{/properties}} 13588 13589 </p> 13590 <div class="grid--full display-table"> 13591 <div class="grid__item display-table-cell one-half"> 13592 <div class="ajaxcart__qty"> 13593 <button type="button" class="ajaxcart__qty-adjust ajaxcart__qty--minus" data-id="{{key}}" data-qty="{{itemMinus}}" data-line="{{line}}"> 13594 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 32 32"><title>icon-minus</title><path d="M6.667 16.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h18.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-18.667z"></path></svg> 13595 <span class="visually-hidden">Kurangi jumlah barang</span> 13596 </button> 13597 <input type="text" name="updates[]" class="btn ajaxcart__qty-num" value="{{itemQty}}" min="0" data-id="{{key}}" data-line="{{line}}" aria-label="quantity" pattern="[0-9]*"> 13598 <button type="button" class="ajaxcart__qty-adjust ajaxcart__qty--plus" data-id="{{key}}" data-line="{{line}}" data-qty="{{itemAdd}}"> 13599 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 32 32"><title>icon-plus</title><path d="M16.667 15.333h8.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-8.667v8.667c0 0.368-0.298 0.667-0.667 0.667s-0.667-0.298-0.667-0.667v-8.667h-8.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h8.667v-8.667c0-0.368 0.298-0.667 0.667-0.667s0.667 0.298 0.667 0.667v8.667z"></path></svg> 13600 <span class="visually-hidden">Tambahkan jumlah barang</span> 13601 </button> 13602 </div> 13603 </div> 13604 <div class="grid__item display-table-cell one-half text-right"> 13605 {{#if discountsApplied}} 13606 <small class="ajaxcart-item__price-strikethrough"><s>{{{originalLinePrice}}}</s></small> 13607 <br><span class="h4">{{{linePrice}}}</span> 13608 {{else}} 13609 <span class="h4">{{{linePrice}}}</span> 13610 {{/if}} 13611 </div> 13612 </div> 13613 {{#if discountsApplied}} 13614 <div class="grid--full display-table"> 13615 <div class="grid__item text-right"> 13616 {{#each discounts}} 13617 <small class="ajaxcart-item__discount">{{ this.title }}</small><br> 13618 {{/each}} 13619 </div> 13620 </div> 13621 {{/if}} 13622 </div> 13623 </div> 13624 </div> 13625 </div> 13626 </div> 13627 </div> 13628 {{/items}} 13629 </div> 13630 <div class="ajaxcart__footer"> 13631 <div class="grid--full cart-subtotal py-2"> 13632 <p>Subtotal</p> 13633 <h3 class="primary">{{{totalPrice}}}</h3> 13634 {{#if totalCartDiscount}} 13635 <p class="ajaxcart__savings text-center"><em>{{{totalCartDiscount}}}</em></p> 13636 {{/if}} 13637 </div> 13638 13639 <a href="/cart" class="btn btn-cta view-more btn-block cart__checkout mt-2">Checkout</a> 13640 13641 <p class="cart-checkout-shipping hide">Free Ongkir dengan belanja di atas Rp.100.000 <a href="/pages/pengiriman">detail</a></p> 13642 </div> 13643 </form> 13644 13645 </script>
13645 13646
13646<script id="AjaxQty" type="text/template"> 13647 13648 <div class="ajaxcart__qty"> 13649 <button type="button" class="ajaxcart__qty-adjust ajaxcart__qty--minus" data-id="{{key}}" data-qty="{{itemMinus}}"> 13650 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 32 32"> 13651 <title>icon-minus</title> 13652 <path d="M6.667 16.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h18.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-18.667z"></path> 13653 </svg> 13654 <span class="visually-hidden">Kurangi jumlah barang</span> 13655 </button> 13656 <input type="text" class="ajaxcart__qty-num" value="{{itemQty}}" min="0" data-id="{{key}}" aria-label="quantity" pattern="[0-9]*"> 13657 <button type="button" class="ajaxcart__qty-adjust ajaxcart__qty--plus" data-id="{{key}}" data-qty="{{itemAdd}}"> 13658 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 32 32"><title>icon-plus</title><path d="M16.667 15.333h8.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-8.667v8.667c0 0.368-0.298 0.667-0.667 0.667s-0.667-0.298-0.667-0.667v-8.667h-8.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h8.667v-8.667c0-0.368 0.298-0.667 0.667-0.667s0.667 0.298 0.667 0.667v8.667z"></path></svg> 13659 <span class="visually-hidden">Tambahkan jumlah barang</span> 13660 </button> 13661 </div> 13662 13663 </script>
13663 13664
13664<script id="JsQty" type="text/template"> 13665 13666 <div class="js-qty mt-2"> 13667 <button type="button" data-action="minus" class="js-qty__adjust js-qty__adjust--minus" data-id="{{key}}" data-qty="{{itemMinus}}"> 13668 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 32 32"><title>icon-minus</title><path d="M6.667 16.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h18.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-18.667z"></path></svg> 13669 <span class="visually-hidden">Kurangi jumlah barang</span> 13670 </button> 13671 <input type="text" class="js-qty__num" value="{{itemQty}}" min="1" data-id="{{key}}" aria-label="quantity" pattern="[0-9]*" name="{{inputName}}" id="{{inputId}}"> 13672 <button type="button" data-action="plus" class="js-qty__adjust js-qty__adjust--plus" data-id="{{key}}" data-qty="{{itemAdd}}"> 13673 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 32 32"><title>icon-plus</title><path d="M16.667 15.333h8.667c0.368 0 0.667 0.298 0.667 0.667s-0.298 0.667-0.667 0.667h-8.667v8.667c0 0.368-0.298 0.667-0.667 0.667s-0.667-0.298-0.667-0.667v-8.667h-8.667c-0.368 0-0.667-0.298-0.667-0.667s0.298-0.667 0.667-0.667h8.667v-8.667c0-0.368 0.298-0.667 0.667-0.667s0.667 0.298 0.667 0.667v8.667z"></path></svg> 13674 <span class="visually-hidden">Tambahkan jumlah barang</span> 13675 </button> 13676 </div> 13677 13678 </script>
13678 13679 13680<style> 13681 #CartDrawer .ajaxcart__product.nExtra.Shipping.Cost .ajaxcart__qty button, 13682 #CartDrawer .ajaxcart__product.n3D2N .ajaxcart__qty button, 13683 #CartDrawer .ajaxcart__product.n4D3N .ajaxcart__qty button {display: none;} 13684 #CartDrawer .ajaxcart__product.nExtra.Shipping.Cost .ajaxcart__qty input, 13685 #CartDrawer .ajaxcart__product.n3D2N .ajaxcart__qty input, 13686 #CartDrawer .ajaxcart__product.n4D3N .ajaxcart__qty input {pointer-events: none;opacity: 0.5;} 13687 #CartDrawer .ajaxcart__product.nExtra.Shipping.Cost .ajaxcart__qty input, 13688 #CartDrawer .ajaxcart__product.n3D2N .ajaxcart__qty input, 13689 #CartDrawer .ajaxcart__product.n4D3N .ajaxcart__qty input {pointer-events: none;} 13690</style> 13691
13691<script src="https://outerbloom.com/cdn/shop/t/138/assets/ajax-cart.js?v=51128912329657147331752652452" defer></script>
13691 13692
13692<script> 13693 jQuery(function($) { 13694 ajaxCart.init({ 13695 formSelector: '#AddToCartForm', 13696 cartContainer: '#CartContainer', 13697 addToCartSelector: '#AddToCartXX', 13698 cartCountSelector: '#CartCount, #CartCount2', 13699 cartCostSelector: '#CartCost', 13700 moneyFormat: "Rp {{amount_no_decimals}}" 13701 }); 13702 }); 13703 13704 jQuery(document.body).on('afterCartLoad.ajaxCart', function(evt, cart) { 13705 // Bind to 'afterCartLoad.ajaxCart' to run any javascript after the cart has loaded in the DOM 13706 timber.RightDrawer.open(); 13707 }); 13708 </script>
13708 13709 13710 13711 13712 13713<style> 13714 /** Search AutoComplete **/ 13715 .resultsearch .ui-menu-item[data-cat="Collection"], 13716 .resultsearch .ui-menu-item[data-cat="Collection"] {display: none;} 13717 .resultsearch .ui-widget.ui-widget-content { 13718 width: 100%; 13719 top: 48px; 13720 border: none; 13721 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); 13722 } 13723 .resultsearch .ui-menu-item {text-align: left;} 13724 .resultsearch .ui-menu-item>a, .resultsearch .ui-menu-item>span {display: inline-block;width: 100%;font-size: 16px;}.resultsearch .ui-menu-item img {vertical-align: middle;}.resultsearch .ui-menu-item a[data-cat="Collection"] img {display: none;}.resultsearch .ui-menu .ui-state-focus, .resultsearch .ui-menu .ui-state-active {margin: 0;}.ui-state-active, .ui-widget-content .ui-state-active {background: #f2f2f2;border: none;color: #212121;}.resultsearch .ui-menu-item>a,.resultsearch .ui-menu-item>span {display: inline-block;width: 100%;font-size: 13px;}.resultsearch .ui-menu-item a[data-cat="Produk"] img {margin-right: 10px;}.resultsearch .ui-menu-item a[data-cat="Produk"] .price {float: right;padding: 15px 0;}.ui-autocomplete-category.ui-menu-item[data-cat="Produk"]:before {content: "Product Populer";font-size: 13px;padding: 5px;margin: 5px 0;background: #f2f2f2;width: 100%;display: block;color: #212121;}.ui-autocomplete-category.ui-menu-item[data-cat="Produk"] span {display: none;} 13725 .ui-state-active { 13726 border: none!important; 13727 background-color: #fafafa!important; 13728 color: #000!important; 13729 } 13730 .ui-menu-item a[data-cat="Collection"] {padding: 5px 12px;} 13731 .ui-menu .ui-menu-item {line-height: normal;} 13732</style>
13733<script> 13734$(window).load(function(){ 13735 13736 function format(item) {var cell = '';cell += "<a data-cat=" + item.category + " " + "href=" + item.url + ">" + "<img src=" + item.images + "/>" + "<span class='title'>" + item.label + "</span>" + "<span class='price'>" + item.price + "</span>" + "</a>";return cell;} 13737 13738 $.widget("custom.catcomplete", $.ui.autocomplete, { 13739 _renderMenu: function (ul, items) { 13740 // have search reults split up in categories 13741 var that = this, 13742 currentCategory = ""; 13743 $.each(items, function (index, item) { 13744 if (item.category != currentCategory) { 13745 ul.append("<li class='ui-autocomplete-category' data-cat=" + item.category + ">" + "<span>" + item.category + "</span>" + "</li>"); 13746 currentCategory = item.category; 13747 } 13748 that._renderItemData(ul, item); 13749 }); 13750 } 13751 }); 13752 13753 // higlight searched for term 13754 $.ui.autocomplete.prototype._renderItem = function( ul, item ) { 13755 var term = this.element.val(), 13756 html = item.label.replace( term, "<b>$&</b>" ); 13757 return $( "<li>" ) 13758 .append(format(item)) 13759 .appendTo( ul ); 13760 }; 13761 13762 13763 var data = [ 13764 { label: "3D Cookies", category: "Collection", url: "/collections/3d-cookies", images: " ", price: " " },{ label: "< Rp 500.000", category: "Collection", url: "/collections/rp-500-000", images: " ", price: " " },{ label: "> Rp 1.000.000", category: "Collection", url: "/collections/rp-1-000-000", images: " ", price: " " },{ label: "Ajmal", category: "Collection", url: "/collections/ajmal", images: " ", price: " " },{ label: "Alamat Rumah Duka", category: "Collection", url: "/collections/rumah-duka", images: " ", price: " " },{ label: "Anggrek Bulan", category: "Collection", url: "/collections/anggrek-bulan", images: " ", price: " " },{ label: "Anniversary Gift", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Aquarius âï¸ 20Jan - 18Feb", category: "Collection", url: "/collections/kado-untuk-zodiak-aquarius", images: " ", price: " " },{ label: "Aries âï¸ 21March - 19April", category: "Collection", url: "/collections/kado-untuk-zodiak-aries", images: " ", price: " " },{ label: "Armaf", category: "Collection", url: "/collections/armaf", images: " ", price: " " },{ label: "Aromatherapy Diffuser", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Artisan Soap", category: "Collection", url: "/collections/artisan-soap", images: " ", price: " " },{ label: "Artisan Tea", category: "Collection", url: "/collections/artisan-tea", images: " ", price: " " },{ label: "AsmaraKu", category: "Collection", url: "/collections/asmaraku", images: " ", price: " " },{ label: "Atkinsons", category: "Collection", url: "/collections/atkinsons", images: " ", price: " " },{ label: "Autumn by Outerbloom", category: "Collection", url: "/collections/autumn-by-outerbloom", images: " ", price: " " },{ label: "Autumn by Outerbloom Chinese New Year", category: "Collection", url: "/collections/autumn-by-outerbloom-chinese-new-year", images: " ", price: " " },{ label: "Autumn by Outerbloom Christmas", category: "Collection", url: "/collections/autumn-by-outerbloom-christmas", images: " ", price: " " },{ label: "Autumn by Outerbloom Luar Jadetabek", category: "Collection", url: "/collections/autumn-by-outerbloom-luar-jadetabek", images: " ", price: " " },{ label: "Autumn by Outerbloom Ramadan", category: "Collection", url: "/collections/autumn-by-outerbloom-ramadan", images: " ", price: " " },{ label: "Autumn Pop", category: "Collection", url: "/collections/autumn-pop", images: " ", price: " " },{ label: "Bachelorette", category: "Collection", url: "/collections/bachelorette", images: " ", price: " " },{ label: "Bachelorette Cookies", category: "Collection", url: "/collections/bachelorette-cookies", images: " ", price: " " },{ label: "Bag Newborn Hampers", category: "Collection", url: "/collections/bag-newborn-hampers", images: " ", price: " " },{ label: "Balon", category: "Collection", url: "/collections/balon", images: " ", price: " " },{ label: "Beauty Package", category: "Collection", url: "/collections/beauty-package", images: " ", price: " " },{ label: "Best Deal", category: "Collection", url: "/collections/best-deal", images: " ", price: " " },{ label: "Best Seller", category: "Collection", url: "/collections/best-seller", images: " ", price: " " },{ label: "Best Valentine's Deals", category: "Collection", url: "/collections/bes-valentines-deals", images: " ", price: " " },{ label: "Best Value Newborn Hampers Collection", category: "Collection", url: "/collections/best-value-newborn-hampers-collection", images: " ", price: " " },{ label: "Black Tea", category: "Collection", url: "/collections/black-tea", images: " ", price: " " },{ label: "Blessing Hampers", category: "Collection", url: "/collections/blessing-hampers", images: " ", price: " " },{ label: "Bloom Box", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Bloomcard", category: "Collection", url: "/collections/bloomcard", images: " ", price: " " },{ label: "Boutonniere", category: "Collection", url: "/collections/boutonniere", images: " ", price: " " },{ label: "Bracelet", category: "Collection", url: "/collections/gelang", images: " ", price: " " },{ label: "Buket Bunga Bali", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Buket Bunga Bandung", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Buket Bunga Batam", category: "Collection", url: "https://atas4d.biz/-batam", images: " ", price: " " },{ label: "Buket Bunga Demak", category: "Collection", url: "https://atas4d.biz/-demak", images: " ", price: " " },{ label: "Buket Bunga Fresh", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Buket Bunga Jepara", category: "Collection", url: "https://atas4d.biz/-jepara", images: " ", price: " " },{ label: "Buket Bunga Medan", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Buket Bunga Nusantara", category: "Collection", url: "https://atas4d.biz/-nusantara", images: " ", price: " " },{ label: "Buket Bunga Semarang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Buket Bunga Sidoarjo", category: "Collection", url: "https://atas4d.biz/-sidoarjo", images: " ", price: " " },{ label: "Buket Bunga Surabaya", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Buket Bunga Tangerang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Buket Bunga Uang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Buket Bunga Valentine", category: "Collection", url: "https://atas4d.biz/-valentine", images: " ", price: " " },{ label: "Buket Bunga Yogyakarta", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Bunga Anggrek Bali", category: "Collection", url: "/collections/bunga-anggrek-bali", images: " ", price: " " },{ label: "Bunga Anggrek Bandung", category: "Collection", url: "/collections/bunga-anggrek-bandung", images: " ", price: " " },{ label: "Bunga Anggrek Surabaya", category: "Collection", url: "/collections/bunga-anggrek-surabaya", images: " ", price: " " },{ label: "Bunga Anniversary", category: "Collection", url: "/collections/bunga-anniversary", images: " ", price: " " },{ label: "Bunga Artificial", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Bunga Buket", category: "Collection", url: "/collections/bunga-buket", images: " ", price: " " },{ label: "Bunga Carnations Bali", category: "Collection", url: "/collections/bunga-carnations-bali", images: " ", price: " " },{ label: "Bunga Carnations Bandung", category: "Collection", url: "/collections/bunga-carnations-bandung", images: " ", price: " " },{ label: "Bunga Carnations Surabaya", category: "Collection", url: "/collections/bunga-carnations-surabaya", images: " ", price: " " },{ label: "Bunga Daisy Bali", category: "Collection", url: "/collections/bunga-daisy-bali", images: " ", price: " " },{ label: "Bunga Daisy Bandung", category: "Collection", url: "/collections/bunga-daisy-bandung", images: " ", price: " " },{ label: "Bunga Daisy Surabaya", category: "Collection", url: "/collections/bunga-daisy-surabaya", images: " ", price: " " },{ label: "Bunga Gerbera Bali", category: "Collection", url: "/collections/bunga-gerbera-bali", images: " ", price: " " },{ label: "Bunga Gerbera Bandung", category: "Collection", url: "/collections/bunga-gerbera-bandung", images: " ", price: " " },{ label: "Bunga Gerbera Surabaya", category: "Collection", url: "/collections/bunga-gerbera-surabaya", images: " ", price: " " },{ label: "Bunga Imlek", category: "Collection", url: "/collections/rangkaian-bunga-tahun-baru-imlek", images: " ", price: " " },{ label: "Bunga Lebaran", category: "Collection", url: "/collections/rangkaian-bunga-lebaran", images: " ", price: " " },{ label: "Bunga Lily Bali", category: "Collection", url: "/collections/bunga-lily-bali", images: " ", price: " " },{ label: "Bunga Lily Bandung", category: "Collection", url: "/collections/bunga-lily-bandung", images: " ", price: " " },{ label: "Bunga Lily Surabaya", category: "Collection", url: "/collections/bunga-lily-surabaya", images: " ", price: " " },{ label: "Bunga Matahari Bali", category: "Collection", url: "/collections/bunga-matahari-bali", images: " ", price: " " },{ label: "Bunga Matahari Bandung", category: "Collection", url: "/collections/bunga-matahari-bandung", images: " ", price: " " },{ label: "Bunga Matahari Surabaya", category: "Collection", url: "/collections/bunga-matahari-surabaya", images: " ", price: " " },{ label: "Bunga Mawar Bali", category: "Collection", url: "/collections/bunga-mawar-bali", images: " ", price: " " },{ label: "Bunga Mawar Bandung", category: "Collection", url: "/collections/bunga-mawar-bandung", images: " ", price: " " },{ label: "Bunga Mawar Surabaya", category: "Collection", url: "/collections/bunga-mawar-surabaya", images: " ", price: " " },{ label: "Bunga Meja", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Bunga Meja Bali", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Bunga Meja Bandung", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Bunga Meja Batam", category: "Collection", url: "https://atas4d.biz/-batam", images: " ", price: " " },{ label: "Bunga Meja Jepara", category: "Collection", url: "https://atas4d.biz/-jepara", images: " ", price: " " },{ label: "Bunga Meja Medan", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Bunga Meja Semarang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Bunga Meja Sidoarjo", category: "Collection", url: "https://atas4d.biz/-sidoarjo", images: " ", price: " " },{ label: "Bunga Meja Surabaya", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Bunga Meja Tangerang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Bunga Meja Yogyakarta", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Bunga Modern Pastel Bali", category: "Collection", url: "/collections/bunga-modern-pastel-bali", images: " ", price: " " },{ label: "Bunga Modern Pastel Bandung", category: "Collection", url: "/collections/bunga-modern-pastel-bandung", images: " ", price: " " },{ label: "Bunga Modern Pastel Medan", category: "Collection", url: "/collections/bunga-modern-pastel-medan", images: " ", price: " " },{ label: "Bunga Modern Pastel Semarang", category: "Collection", url: "/collections/bunga-modern-pastel-semarang", images: " ", price: " " },{ label: "Bunga Modern Pastel Surabaya", category: "Collection", url: "/collections/bunga-modern-pastel-surabaya", images: " ", price: " " },{ label: "Bunga Modern Pastel Yogyakarta", category: "Collection", url: "/collections/bunga-modern-pastel-yogyakarta", images: " ", price: " " },{ label: "Bunga Natal", category: "Collection", url: "/collections/rangkaian-bunga-christmas", images: " ", price: " " },{ label: "Bunga Papan", category: "Collection", url: "/collections/bunga-papan", images: " ", price: " " },{ label: "Bunga Pernikahan", category: "Collection", url: "/collections/bunga-pernikahan", images: " ", price: " " },{ label: "Bunga Plastik", category: "Collection", url: "/collections/bunga-plastik", images: " ", price: " " },{ label: "Bunga Tulip", category: "Collection", url: "/collections/bunga-tulip", images: " ", price: " " },{ label: "Bunga Ulang Tahun", category: "Collection", url: "/collections/bunga-ulang-tahun", images: " ", price: " " },{ label: "Bunga Wisuda", category: "Collection", url: "https://atas4d.biz/-wisuda", images: " ", price: " " },{ label: "Cake", category: "Collection", url: "/collections/kue", images: " ", price: " " },{ label: "Cake", category: "Collection", url: "/collections/cake", images: " ", price: " " },{ label: "Cake Sameday Delivery", category: "Collection", url: "/collections/cake-sameday-delivery", images: " ", price: " " },{ label: "Cake, Hampers & Gifts", category: "Collection", url: "/collections/cake-hampers", images: " ", price: " " },{ label: "Cancer âï¸ 22June - 22July", category: "Collection", url: "/collections/kado-untuk-zodiak-cancer", images: " ", price: " " },{ label: "Capricorn âï¸ 21Dec - 19Jan", category: "Collection", url: "/collections/kado-untuk-zodiak-capricorn", images: " ", price: " " },{ label: "Care Packages", category: "Collection", url: "/collections/toko-parcel-murah", images: " ", price: " " },{ label: "Care Packages (Keluarga, Sahabat, Karyawan)", category: "Collection", url: "/collections/sehat-bebas-corona", images: " ", price: " " },{ label: "Carnations", category: "Collection", url: "/collections/bunga-anyelir", images: " ", price: " " },{ label: "Celebration", category: "Collection", url: "/collections/celebration", images: " ", price: " " },{ label: "Chléa Paperie", category: "Collection", url: "/collections/chlea-paperie", images: " ", price: " " },{ label: "Chocodot", category: "Collection", url: "/collections/chocodot", images: " ", price: " " },{ label: "Christmas", category: "Collection", url: "/collections/christmas", images: " ", price: " " },{ label: "Christmas Holo Bag", category: "Collection", url: "/collections/christmas-holo-bag", images: " ", price: " " },{ label: "Christmas Holo Series", category: "Collection", url: "/collections/christmas-holo-series", images: " ", price: " " },{ label: "Classic Cake", category: "Collection", url: "/collections/classic-cake", images: " ", price: " " },{ label: "Classic CNY Hampers", category: "Collection", url: "/collections/classic-cny-hampers", images: " ", price: " " },{ label: "Classic CNY Hampers Luar Jabodetabek", category: "Collection", url: "/collections/classic-cny-hampers-luar-jabodetabek", images: " ", price: " " },{ label: "Classic Hampers", category: "Collection", url: "/collections/classic-hampers", images: " ", price: " " },{ label: "Classic Hampers Luar Jadetabek", category: "Collection", url: "/collections/classic-hampers-luar-jadetabek", images: " ", price: " " },{ label: "Classic Lebaran Hampers", category: "Collection", url: "/collections/classic-lebaran-hampers", images: " ", price: " " },{ label: "Classic Style Flowers", category: "Collection", url: "/collections/classic-style-flowers", images: " ", price: " " },{ label: "Cokelat", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Collection List", category: "Collection", url: "/collections/collection-list", images: " ", price: " " },{ label: "Condolences", category: "Collection", url: "/collections/axa-condolences", images: " ", price: " " },{ label: "Congratulations", category: "Collection", url: "/collections/rangkaian-bunga-ucapan-selamat", images: " ", price: " " },{ label: "Corporate Gifts", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Corporate Hampers", category: "Collection", url: "/collections/corporate-hampers", images: " ", price
13764: " " },{ label: "Couple Gift", category: "Collection", url: "/collections/couple-gift", images: " ", price: " " },{ label: "Craft Sweetbox Newborn", category: "Collection", url: "/collections/craft-sweetbox-newborn", images: " ", price: " " },{ label: "Crystal Florarium", category: "Collection", url: "/collections/crystal-florarium", images: " ", price: " " },{ label: "Cuddlemate Doll", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Cufflinks", category: "Collection", url: "/collections/cufflinks", images: " ", price: " " },{ label: "Cupcakes", category: "Collection", url: "/collections/cupcakes", images: " ", price: " " },{ label: "Custom Alat Tulis", category: "Collection", url: "/collections/alat-tulis", images: " ", price: " " },{ label: "Custom Cake", category: "Collection", url: "/collections/custom-cake", images: " ", price: " " },{ label: "Custom Card Holder", category: "Collection", url: "/collections/custom-card-holder", images: " ", price: " " },{ label: "Custom Coaster", category: "Collection", url: "/collections/custom-coaster", images: " ", price: " " },{ label: "Custom Cutlery", category: "Collection", url: "/collections/custom-cutlery", images: " ", price: " " },{ label: "Custom E-Money", category: "Collection", url: "/collections/custom-e-money", images: " ", price: " " },{ label: "Custom Earpod", category: "Collection", url: "/collections/custom-earpod", images: " ", price: " " },{ label: "Custom Fan", category: "Collection", url: "/collections/custom-fan", images: " ", price: " " },{ label: "Custom Jewelry", category: "Collection", url: "/collections/custom-jewelry", images: " ", price: " " },{ label: "Custom Keychain", category: "Collection", url: "/collections/custom-keychain", images: " ", price: " " },{ label: "Custom Medallion", category: "Collection", url: "/collections/custom-medallion", images: " ", price: " " },{ label: "Custom Mirror", category: "Collection", url: "/collections/custom-mirror", images: " ", price: " " },{ label: "Custom Mug", category: "Collection", url: "/collections/custom-mug", images: " ", price: " " },{ label: "Custom Necklace", category: "Collection", url: "/collections/custom-necklace", images: " ", price: " " },{ label: "Custom Notebook", category: "Collection", url: "/collections/custom-notebook", images: " ", price: " " },{ label: "Custom Pen & Pencil", category: "Collection", url: "/collections/custom-pen-pencil", images: " ", price: " " },{ label: "Custom Photo Frame", category: "Collection", url: "/collections/photo-frame", images: " ", price: " " },{ label: "Custom Pillow", category: "Collection", url: "/collections/bantal-custom", images: " ", price: " " },{ label: "Custom Powerbank", category: "Collection", url: "/collections/custom-powerbank", images: " ", price: " " },{ label: "Custom Scarf", category: "Collection", url: "/collections/custom-scarf", images: " ", price: " " },{ label: "Custom Speaker", category: "Collection", url: "/collections/custom-speaker", images: " ", price: " " },{ label: "Custom T-Shirt", category: "Collection", url: "/collections/custom-t-shirt", images: " ", price: " " },{ label: "Custom Tote Bag", category: "Collection", url: "/collections/custom-tote-bag", images: " ", price: " " },{ label: "Custom Tumbler Minuman", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "D'paris", category: "Collection", url: "/collections/dparis", images: " ", price: " " },{ label: "Daisy", category: "Collection", url: "/collections/bunga-aster", images: " ", price: " " },{ label: "Dekorasi", category: "Collection", url: "/collections/dekorasi", images: " ", price: " " },{ label: "Dekorasi Duka Cita", category: "Collection", url: "/collections/dekorasi-bunga-duka-cita", images: " ", price: " " },{ label: "Dekorasi Pemakaman", category: "Collection", url: "/collections/dekorasi-pemakaman", images: " ", price: " " },{ label: "Dekorasi Pernikahan", category: "Collection", url: "/collections/dekorasi-bunga-pernikahan", images: " ", price: " " },{ label: "Dekorasi Ulang Tahun", category: "Collection", url: "/collections/dekorasi-bunga-ulang-tahun", images: " ", price: " " },{ label: "Delivery", category: "Collection", url: "/collections/delivery", images: " ", price: " " },{ label: "Deluxe Newborn Hampers Collection", category: "Collection", url: "/collections/deluxe-newborn-hampers-collection", images: " ", price: " " },{ label: "Diamond Bracelet", category: "Collection", url: "/collections/diamond-bracelet", images: " ", price: " " }
13764,{ label: "Diamond Earrings", category: "Collection", url: "/collections/diamond-earrings", images: " ", price: " " },{ label: "Diamond Jewelry", category: "Collection", url: "/collections/diamond-jewelry", images: " ", price: " " },{ label: "Diamond Necklaces", category: "Collection", url: "/collections/diamond-necklaces", images: " ", price: " " },{ label: "Diamond Rings", category: "Collection", url: "/collections/diamond-rings", images: " ", price: " " },{ label: "Digital Gift", category: "Collection", url: "/collections/digital-gift", images: " ", price: " " },{ label: "Donasi", category: "Collection", url: "/collections/donasi", images: " ", price: " " },{ label: "E-Card", category: "Collection", url: "/collections/ecard", images: " ", price: " " },{ label: "E-Gift Card", category: "Collection", url: "/collections/e-gift-card", images: " ", price: " " },{ label: "Earrings", category: "Collection", url: "/collections/anting", images: " ", price: " " },{ label: "Edible Gift", category: "Collection", url: "/collections/edible-gift", images: " ", price: " " },{ label: "Enchanted Grande Love Pirouette", category: "Collection", url: "/collections/enchanted-grande-love-pirouette", images: " ", price: " " },{ label: "Enchanted Love Pirouette", category: "Collection", url: "/collections/enchanted-love-pirouette", images: " ", price: " " },{ label: "Engagement", category: "Collection", url: "/collections/rangkaian-bunga-lamaran", images: " ", price: " " },{ label: "Expression", category: "Collection", url: "/collections/expression", images: " ", price: " " },{ label: "Father's Day Special", category: "Collection", url: "/collections/kado-untuk-ayah", images: " ", price: " " },{ label: "Ferrari", category: "Collection", url: "/collections/ferrari", images: " ", price: " " },{ label: "Ferrero Rocher", category: "Collection", url: "/collections/ferrero-rocher", images: " ", price: " " },{ label: "Festival Belanja Online", category: "Collection", url: "/collections/fbo-2018", images: " ", price: " " },{ label: "Floatbox", category: "Collection", url: "/collections/floatbox", images: " ", price: " " },{ label: "Flower", category: "Collection", url: "/collections/flower", images: " ", price: " " },{ label: "Flower Best Deals", category: "Collection", url: "/collections/flower-best-deals", images: " ", price: " " },{ label: "Flowers", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Flowers For Him", category: "Collection", url: "/collections/bunga-untuk-pria", images: " ", price: " " },{ label: "Flowers Style", category: "Collection", url: "/collections/style", images: " ", price: " " },{ label: "Flowers Type", category: "Collection", url: "/collections/type", images: " ", price: " " },{ label: "For Her", category: "Collection", url: "/collections/kado-untuk-wanita", images: " ", price: " " },{ label: "For Him", category: "Collection", url: "/collections/kado-untuk-pria", images: " ", price: " " },{ label: "Forever Flower", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Forever Flower Holo Series", category: "Collection", url: "https://atas4d.biz/-holo-series", images: " ", price: " " },{ label: "Forever Flower x NestBloom", category: "Collection", url: "https://atas4d.biz/-x-nestbloom", images: " ", price: " " },{ label: "Fortune Hampers", category: "Collection", url: "/collections/fortune-hampers", images: " ", price: " " },{ label: "Frank & Co", category: "Collection", url: "/collections/franknco", images: " ", price: " " },{ label: "Fresh Flowers", category: "Collection", url: "/collections/fresh-flower", images: " ", price: " " },{ label: "Gantungan Kunci", category: "Collection", url: "/collections/gantungan-kunci", images: " ", price: " " },{ label: "Gelato", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Gelato Pie", category: "Collection", url: "https://atas4d.biz/-pie", images: " ", price: " " },{ label: "Gemini âï¸ 21May - 21June", category: "Collection", url: "/collections/kado-untuk-zodiak-gemini", images: " ", price: " " },{ label: "Gerbera", category: "Collection", url: "/collections/gerbera", images: " ", price: " " },{ label: "Get Well Soon", category: "Collection", url: "/collections/rangkaian-bunga-gws", images: " ", price: " " },{ label: "Giant Flower Bali", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Giant Flower Bandung", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " }
13764,{ label: "Giant Flower Bouquet", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Gift", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Gift by Recipient", category: "Collection", url: "/collections/gift-by-recipient", images: " ", price: " " },{ label: "Gift for Your Girlfriend", category: "Collection", url: "/collections/kado-untuk-pacar-wanita", images: " ", price: " " },{ label: "Gifts", category: "Collection", url: "/collections/gifts", images: " ", price: " " },{ label: "Glassbox Hampers", category: "Collection", url: "/collections/glassbox-hampers", images: " ", price: " " },{ label: "Glassware CNY Hampers", category: "Collection", url: "https://atas4d.biz/-pecah-belah-imlek", images: " ", price: " " },{ label: "Glassware Eid Hampers", category: "Collection", url: "https://atas4d.biz/-pecah-belah-lebaran", images: " ", price: " " },{ label: "Glassware Hampers", category: "Collection", url: "https://atas4d.biz/-pecah-belah", images: " ", price: " " },{ label: "Gold Jewelry", category: "Collection", url: "/collections/perhiasan-emas", images: " ", price: " " },{ label: "Grand Opening", category: "Collection", url: "/collections/grand-opening", images: " ", price: " " },{ label: "Granola", category: "Collection", url: "/collections/granola", images: " ", price: " " },{ label: "Green Tea", category: "Collection", url: "/collections/green-tea", images: " ", price: " " },{ label: "Greeting Card All", category: "Collection", url: "/collections/greeting-card-all", images: " ", price: " " },{ label: "Greeting Card Anniversary", category: "Collection", url: "/collections/greeting-card-anniversary", images: " ", price: " " },{ label: "Greeting Card Birthday", category: "Collection", url: "/collections/greeting-card-birthday", images: " ", price: " " },{ label: "Greeting Card Eid", category: "Collection", url: "/collections/greeting-card-eid", images: " ", price: " " },{ label: "Greeting Card Graduation", category: "Collection", url: "/collections/greeting-card-graduation", images: " ", price: " " },{ label: "Greeting Card Mother's Day", category: "Collection", url: "/collections/greeting-card-mothers-day", images: " ", price: " " },{ label: "Greeting Card Newborn", category: "Collection", url: "/collections/greeting-card-newborn", images: " ", price: " " },{ label: "Greeting Card Others", category: "Collection", url: "/collections/greeting-card-others", images: " ", price: " " },{ label: "Greeting Card Valentine", category: "Collection", url: "/collections/greeting-card-valentine", images: " ", price: " " },{ label: "Greeting Card Wedding", category: "Collection", url: "/collections/greeting-card-wedding", images: " ", price: " " },{ label: "Grooming", category: "Collection", url: "/collections/grooming", images: " ", price: " " },{ label: "Hadiah Tahun Baru Imlek", category: "Collection", url: "/collections/kado-imlek", images: " ", price: " " },{ label: "Hadiah untuk Bayi", category: "Collection", url: "/collections/kado-untuk-bayi", images: " ", price: " " },{ label: "Hadiah untuk Pacar", category: "Collection", url: "/collections/kado-untuk-pacar", images: " ", price: " " },{ label: "Hadiah untuk Pernikahan", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Hadiah untuk Sahabat", category: "Collection", url: "/collections/kado-untuk-sahabat", images: " ", price: " " },{ label: "Hampers", category: "Collection", url: "/collections/hampers", images: " ", price: " " },{ label: "Hampers Baby Boy", category: "Collection", url: "/collections/hampers-baby-boy", images: " ", price: " " },{ label: "Hampers Baby Girl", category: "Collection", url: "/collections/hampers-baby-girl", images: " ", price: " " },{ label: "Hampers Baby Unisex", category: "Collection", url: "/collections/hampers-baby-unisex", images: " ", price: " " },{ label: "Hampers Delivery Indonesia", category: "Collection", url: "https://atas4d.biz/-indonesia", images: " ", price: " " },{ label: "Hampers Lebaran 2026", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Hampers Lebaran Bali", category: "Collection", url: "/collections/hampers-lebaran-bali", images: " ", price: " " },{ label: "Hampers Lebaran Bandung", category: "Collection", url: "/collections/hampers-lebaran-bandung", images: " ", price: " " },{ label: "Hampers Lebaran Jakarta", category: "Collection", url: "/collections/hampers-lebaran-jakarta", images: " ", price: " " },{ label: "Hampers Lebaran Semarang", category: "Collection", url: "/collections/hampers-lebaran-semarang", images: " ", price: " " },{ label: "Hampers Lebaran Surabaya", category: "Collection", url: "/collections/hampers-lebaran-surabaya", images: " ", price: " " },{ label: "Hampers Lebaran Yogyakarta", category: "Collection", url: "/collections/hampers-lebaran-yogyakarta", images: " ", price: " " },{ label: "Hand Sanitizer", category: "Collection", url: "/collections/hand-sanitizer", images: " ", price: " " },{ label: "Happy Birthday", category: "Collection", url: "/collections/kado-ulang-tahun", images: " ", price: " " },{ label: "Harbolnas", category: "Collection", url: "/collections/harbolnas-2018", images: " ", price: " " },{ label: "Harbolnas Produk Lokal", category: "Collection", url: "/collections/produk-lokal", images: " ", price: " " },{ label: "Hari Belanja Online Nasional", category: "Collection", url: "/collections/harbolnas", images: " ", price: " " },{ label: "Hari Guru", category: "Collection", url: "/collections/hari-guru", images: " ", price: " " },{ label: "Healthy Creations", category: "Collection", url: "/collections/healthy-creations", images: " ", price: " " },{ label: "Healthy Hampers", category: "Collection", url: "/collections/healthy-hampers", images: " ", price: " " },{ label: "Heritage Box", category: "Collection", url: "/collections/heritage-boxes", images: " ", price: " " },{ label: "Heritage Chinese New Year Hampers", category: "Collection", url: "/collections/heritage-chinese-new-year-hampers", images: " ", price: " " },{ label: "Heritage Christmas Hampers", category: "Collection", url: "/collections/heritage-christmas-hampers", images: " ", price: " " },{ label: "Heritage Hampers", category: "Collection", url: "/collections/heritage-hampers", images: " ", price: " " },{ label: "Heritage Ramadan Hampers", category: "Collection", url: "/collections/heritage-ramadan-hampers", images: " ", price: " " },{ label: "Hexa Hampers", category: "Collection", url: "/collections/hexa-hampers", images: " ", price: " " },{ label: "Hexa Hampers Luar Jadetabek", category: "Collection", url: "/collections/hexa-hampers-luar-jadetabek", images: " ", price: " " },{ label: "Hexa Newborn", category: "Collection", url: "/collections/hexa-newborn", images: " ", price: " " },{ label: "Holo Bag", category: "Collection", url: "/collections/holo-bag", images: " ", price: " " },{ label: "Holo Bag Ramadan", category: "Collection", url: "/collections/holo-bag-ramadan", images: " ", price: " " },{ label: "Holo Series", category: "Collection", url: "/collections/holo-series", images: " ", price: " " },{ label: "Home Decoration & Photo Frame", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " }
13764,{ label: "Hospitalization", category: "Collection", url: "/collections/axa-hospitalization", images: " ", price: " " },{ label: "House Hampers", category: "Collection", url: "/collections/house-hampers", images: " ", price: " " },{ label: "I'm Sorry", category: "Collection", url: "/collections/rangkaian-bunga-sorry", images: " ", price: " " },{ label: "Ice Cream Cake", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Idul Fitri", category: "Collection", url: "/collections/rangkaian-bunga-idul-fitri", images: " ", price: " " },{ label: "Jam Tangan", category: "Collection", url: "/collections/jam-tangan", images: " ", price: " " },{ label: "Jam Tangan Couple", category: "Collection", url: "/collections/jam-tangan-couple", images: " ", price: " " },{ label: "Jam Tangan Pria", category: "Collection", url: "/collections/jam-tangan-pria", images: " ", price: " " },{ label: "Jam Tangan Wanita", category: "Collection", url: "/collections/jam-tangan-wanita", images: " ", price: " " },{ label: "Jasa Packing Parcel", category: "Collection", url: "/collections/jasa-packing-parcel", images: " ", price: " " },{ label: "Jewelry", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Jual Custom Cake & Hampers Termurah & Terlengkap | Outerbloom Florist & Gift", category: "Collection", url: "/collections/custom-cake-hampers", images: " ", price: " " },{ label: "Just Because", category: "Collection", url: "/collections/just-because", images: " ", price: " " },{ label: "Kado Makanan", category: "Collection", url: "/collections/kado-makanan", images: " ", price: " " },{ label: "Kado Minuman", category: "Collection", url: "/collections/kado-minuman", images: " ", price: " " },{ label: "Kado Natal", category: "Collection", url: "/collections/kado-natal", images: " ", price: " " },{ label: "Kado Unik", category: "Collection", url: "/collections/kado-unik", images: " ", price: " " },{ label: "Kado Valentine Nusantara", category: "Collection", url: "/collections/kado-valentine-nusantara", images: " ", price: " " },{ label: "Kado Valentine untuk Pria", category: "Collection", url: "/collections/kado-valentine-untuk-pria", images: " ", price: " " },{ label: "Kado Wisuda", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Kado Zodiak", category: "Collection", url: "/collections/kado-untuk-zodiak", images: " ", price: " " },{ label: "Karangan Bunga Aceh", category: "Collection", url: "https://atas4d.biz/-aceh", images: " ", price: " " },{ label: "Karangan Bunga Ambon", category: "Collection", url: "https://atas4d.biz/-ambon", images: " ", price: " " },{ label: "Karangan Bunga Atambua", category: "Collection", url: "https://atas4d.biz/-atambua", images: " ", price: " " },{ label: "Karangan Bunga Bali", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Balikpapan", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Bandung", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Bandung Barat", category: "Collection", url: "https://atas4d.biz/-barat", images: " ", price: " " },{ label: "Karangan Bunga Bangka", category: "Collection", url: "https://atas4d.biz/-bangka", images: " ", price: " " },{ label: "Karangan Bunga Banjarmasin", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Banten", category: "Collection", url: "https://atas4d.biz/-banten", images: " ", price: " " },{ label: "Karangan Bunga Banyumas", category: "Collection", url: "https://atas4d.biz/-banyumas", images: " ", price: " " },{ label: "Karangan Bunga Banyuwangi", category: "Collection", url: "https://atas4d.biz/-banyuwangi", images: " ", price: " " },{ label: "Karangan Bunga Batam", category: "Collection", url: "https://atas4d.biz/-batam", images: " ", price: " " },{ label: "Karangan Bunga Baubau", category: "Collection", url: "https://atas4d.biz/-baubau", images: " ", price: " " },{ label: "Karangan Bunga Bengkalis", category: "Collection", url: "https://atas4d.biz/-bengkalis", images: " ", price: " " },{ label: "Karangan Bunga Bengkayang", category: "Collection", url: "https://atas4d.biz/-bengkayang", images: " ", price: " " },{ label: "Karangan Bunga Bengkulu", category: "Collection", url: "https://atas4d.biz/-bengkulu", images: " ", price: " " },{ label: "Karangan Bunga Blora", category: "Collection", url: "https://atas4d.biz/-blora", images: " ", price: " " },{ label: "Karangan Bunga Bogor", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Bojonegoro", category: "Collection", url: "https://atas4d.biz/-bojonegoro", images: " ", price: " " },{ label: "Karangan Bunga Boyolali", category: "Collection", url: "https://atas4d.biz/-boyolali", images: " ", price: " " },{ label: "Karangan Bunga Brebes", category: "Collection", url: "https://atas4d.biz/-brebes", images: " ", price: " " },{ label: "Karangan Bunga Bukittinggi", category: "Collection", url: "https://atas4d.biz/-bukittinggi", images: " ", price: " " },{ label: "Karangan Bunga Ciamis", category: "Collection", url: "https://atas4d.biz/-ciamis", images: " ", price: " " }
13764,{ label: "Karangan Bunga Cianjur", category: "Collection", url: "https://atas4d.biz/-cianjur", images: " ", price: " " },{ label: "Karangan Bunga Cikarang", category: "Collection", url: "https://atas4d.biz/-cikarang", images: " ", price: " " },{ label: "Karangan Bunga Cikupa", category: "Collection", url: "https://atas4d.biz/-cikupa", images: " ", price: " " },{ label: "Karangan Bunga Cilacap", category: "Collection", url: "https://atas4d.biz/-cilacap", images: " ", price: " " },{ label: "Karangan Bunga Cileunyi", category: "Collection", url: "https://atas4d.biz/-cileunyi", images: " ", price: " " },{ label: "Karangan Bunga Cimahi", category: "Collection", url: "https://atas4d.biz/-cimahi", images: " ", price: " " },{ label: "Karangan Bunga Cirebon", category: "Collection", url: "https://atas4d.biz/-cirebon", images: " ", price: " " },{ label: "Karangan Bunga Ciwidey", category: "Collection", url: "https://atas4d.biz/-ciwidey", images: " ", price: " " },{ label: "Karangan Bunga Danau Toba", category: "Collection", url: "https://atas4d.biz/-danau-toba", images: " ", price: " " },{ label: "Karangan Bunga Demak", category: "Collection", url: "https://atas4d.biz/-demak", images: " ", price: " " },{ label: "Karangan Bunga Denpasar", category: "Collection", url: "https://atas4d.biz/-denpasar", images: " ", price: " " },{ label: "Karangan Bunga Depok", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Duka Cita", category: "Collection", url: "https://atas4d.biz/-duka-cita", images: " ", price: " " },{ label: "Karangan Bunga Garut", category: "Collection", url: "https://atas4d.biz/-garut", images: " ", price: " " },{ label: "Karangan Bunga Gianyar", category: "Collection", url: "https://atas4d.biz/-gianyar", images: " ", price: " " },{ label: "Karangan Bunga Gorontalo", category: "Collection", url: "https://atas4d.biz/-gorontalo", images: " ", price: " " },{ label: "Karangan Bunga Gowa", category: "Collection", url: "https://atas4d.biz/-gowa", images: " ", price: " " },{ label: "Karangan Bunga Gresik", category: "Collection", url: "https://atas4d.biz/-gresik", images: " ", price: " " },{ label: "Karangan Bunga Grobogan", category: "Collection", url: "https://atas4d.biz/-grobogan", images: " ", price: " " },{ label: "Karangan Bunga Gunung Kidul", category: "Collection", url: "https://atas4d.biz/-gunungkidul", images: " ", price: " " },{ label: "Karangan Bunga Indramayu", category: "Collection", url: "https://atas4d.biz/-indramayu", images: " ", price: " " },{ label: "Karangan Bunga Jakarta", category: "Collection", url: "https://atas4d.biz/-jakarta", images: " ", price: " " },{ label: "Karangan Bunga Jambi", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Jayapura", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Jember", category: "Collection", url: "https://atas4d.biz/-jember", images: " ", price: " " },{ label: "Karangan Bunga Jembrana", category: "Collection", url: "https://atas4d.biz/-jembrana", images: " ", price: " " },{ label: "Karangan Bunga Jepara", category: "Collection", url: "https://atas4d.biz/-jepara", images: " ", price: " " },{ label: "Karangan Bunga Jombang", category: "Collection", url: "https://atas4d.biz/-jombang", images: " ", price: " " },{ label: "Karangan Bunga Kampung Baru", category: "Collection", url: "https://atas4d.biz/-kampung-baru", images: " ", price: " " },{ label: "Karangan Bunga Kapuas", category: "Collection", url: "https://atas4d.biz/-kapuas", images: " ", price: " " },{ label: "Karangan Bunga Karanganyar", category: "Collection", url: "https://atas4d.biz/-karanganyar", images: " ", price: " " },{ label: "Karangan Bunga Karangasem", category: "Collection", url: "https://atas4d.biz/-karangasem", images: " ", price: " " },{ label: "Karangan Bunga Karawang", category: "Collection", url: "https://atas4d.biz/-karawang", images: " ", price: " " },{ label: "Karangan Bunga Kartosuro", category: "Collection", url: "https://atas4d.biz/-kartosuro", images: " ", price: " " },{ label: "Karangan Bunga Kebumen", category: "Collection", url: "https://atas4d.biz/-kebumen", images: " ", price: " " },{ label: "Karangan Bunga Kediri", category: "Collection", url: "https://atas4d.biz/-kediri", images: " ", price: " " },{ label: "Karangan Bunga Kendal", category: "Collection", url: "https://atas4d.biz/-ken
13764dal", images: " ", price: " " },{ label: "Karangan Bunga Kendari", category: "Collection", url: "https://atas4d.biz/-kendari", images: " ", price: " " },{ label: "Karangan Bunga Ketapang", category: "Collection", url: "https://atas4d.biz/-ketapang", images: " ", price: " " },{ label: "Karangan Bunga Klaten", category: "Collection", url: "https://atas4d.biz/-klaten", images: " ", price: " " },{ label: "Karangan Bunga Kota Batu", category: "Collection", url: "https://atas4d.biz/-kota-batu", images: " ", price: " " },{ label: "Karangan Bunga Kudus", category: "Collection", url: "https://atas4d.biz/-kudus", images: " ", price: " " },{ label: "Karangan Bunga Kupang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Lamongan", category: "Collection", url: "https://atas4d.biz/-lamongan", images: " ", price: " " },{ label: "Karangan Bunga Lampung", category: "Collection", url: "https://atas4d.biz/-lampung", images: " ", price: " " },{ label: "Karangan Bunga Langkat", category: "Collection", url: "https://atas4d.biz/-langkat", images: " ", price: " " },{ label: "Karangan Bunga Lembang", category: "Collection", url: "https://atas4d.biz/-lembang", images: " ", price: " " },{ label: "Karangan Bunga Lombok", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Lubuk Pakam", category: "Collection", url: "https://atas4d.biz/-lubuk-pakam", images: " ", price: " " },{ label: "Karangan Bunga Lumajang", category: "Collection", url: "https://atas4d.biz/-lumajang", images: " ", price: " " },{ label: "Karangan Bunga Madiun", category: "Collection", url: "https://atas4d.biz/-madiun", images: " ", price: " " },{ label: "Karangan Bunga Magelang", category: "Collection", url: "https://atas4d.biz/-magelang", images: " ", price: " " },{ label: "Karangan Bunga Majalengka", category: "Collection", url: "https://atas4d.biz/-majalengka", images: " ", price: " " },{ label: "Karangan Bunga Makassar", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Malang", category: "Collection", url: "https://atas4d.biz/-malang", images: " ", price: " " },{ label: "Karangan Bunga Mamuju", category: "Collection", url: "https://atas4d.biz/-mamuju", images: " ", price: " " },{ label: "Karangan Bunga Manado", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Manokwari", category: "Collection", url: "https://atas4d.biz/-manokwari", images: " ", price: " " },{ label: "Karangan Bunga Maros", category: "Collection", url: "https://atas4d.biz/-maros", images: " ", price: " " },{ label: "Karangan Bunga Mataram", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Mojokerto", category: "Collection", url: "https://atas4d.biz/-mojokerto", images: " ", price: " " },{ label: "Karangan Bunga Nganjuk", category: "Collection", url: "https://atas4d.biz/-nganjuk", images: " ", price: " " },{ label: "Karangan Bunga Nias", category: "Collection", url: "https://atas4d.biz/-nias", images: " ", price: " " },{ label: "Karangan Bunga Padang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Palangkaraya", category: "Collection", url: "https://atas4d.biz/-palangkaraya", images: " ", price: " " },{ label: "Karangan Bunga Palu", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Pangkal Pinang", category: "Collection", url: "https://atas4d.biz/-pangkal-pinang", images: " ", price: " " },{ label: "Karangan Bunga Papan", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Papan Bandar Lampung", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Papan Bekasi", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Papan Binjai", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Papan Blitar", category: "Collection", url: "https://atas4d.biz/-blitar", images: " ", price: " " },{ label: "Karangan Bunga Papan Buleleng", category: "Collection", url: "https://atas4d.biz/-buleleng", images: " ", price: " " },{ label: "Karangan Bunga Papan Cibubur", category: "Collection", url: "https://atas4d.biz/-cibubur", images: " ", price: " " },{ label: "Karangan Bunga Papan Deli Serdang", category: "Collection", url: "https://atas4d.biz/-deli-serdang", images: " ", price: " " },{ label: "Karangan Bunga Papan Jakarta Timur", category: "Collection", url: "https://atas4d.biz/-jakarta-timur", images: " ", price: " " },{ label: "Karangan Bunga Papan Karo", category: "Collection", url: "https://atas4d.biz/-karo", images: " ", price: " " },{ label: "Karangan Bunga Papan Medan", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Papan Ngawi", category: "Collection", url: "https://atas4d.biz/-ngawi", images: " ", price: " " },{ label: "Karangan Bunga Papan Palembang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Papan Pemalang", category: "Collection", url: "https://atas4d.biz/-pemalang", images: " ", price: " " },{ label: "Karangan Bunga Papan Rembang", category: "Collection", url: "https://atas4d.biz/-rembang", images: " ", price: " " },{ label: "Karangan Bunga Papan Sragen", category: "Collection", url: "https://atas4d.biz/-sragen", images: " ", price: " " },{ label: "Karangan Bunga Papan Tegal", category: "Collection", url: "https://atas4d.biz/-tegal", images: " ", price: " " },{ label: "Karangan Bunga Papan Temanggung", category: "Collection", url: "https://atas4d.biz/-temanggung", images: " ", price: " " },{ label: "Karangan Bunga Parepare", category: "Collection", url: "https://atas4d.biz/-parepare", images: " ", price: " " },{ label: "Karangan Bunga Pasuruan", category: "Collection", url: "https://atas4d.biz/-pasuruan", images: " ", price: " " },{ label: "Karangan Bunga Pati", category: "Collection", url: "https://atas4d.biz/-pati", images: " ", price: " " },{ label: "Karangan Bunga Pekalongan", category: "Collection", url: "https://atas4d.biz/-pekalongan", images: " ", price: " " },{ label: "Karangan Bunga Pekanbaru", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Pematangsiantar", category: "Collection", url: "https://atas4d.biz/-pematangsiantar", images: " ", price: " " },{ label: "Karangan Bunga Ponorogo", category: "Collection", url: "https://atas4d.biz/-ponorogo", images: " ", price: " " },{ label: "Karangan Bunga Pontianak", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Probolinggo", category: "Collection", url: "https://atas4d.biz/-probolinggo", images: " ", price: " " },{ label: "Karangan Bunga Purbalingga", category: "Collection", url: "https://atas4d.biz/-purbalingga", images: " ", price: " " },{ label: "Karangan Bunga Purwokerto", category: "Collection", url: "https://atas4d.biz/-purwokerto", images: " ", price: " " },{ label: "Karangan Bunga Purworejo", category: "Collection", url: "https://atas4d.biz/-purworejo", images: " ", price: " " },{ label: "Karangan Bunga Riau", category: "Collection", url: "https://atas4d.biz/-riau", images: " ", price: " " },{ label: "Karangan Bunga Salatiga", category: "Collection", url: "https://atas4d.biz/-salatiga", images: " ", price: " " },{ label: "Karangan Bunga Samarinda", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Semarang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Serang", category: "Collection", url: "https://atas4d.biz/-serang", images: " ", price: " " },{ label: "Karangan Bunga Sibolga", category: "Collection", url: "https://atas4d.biz/-sibolga", images: " ", price: " " },{ label: "Karangan Bunga Sidoarjo", category: "Collection", url: "https://atas4d.biz/-sidoarjo", images: " ", price: " " },{ label: "Karangan Bunga Singkawang", category: "Collection", url: "https://atas4d.biz/-singkawang", images: " ", price: " " },{ label: "Karangan Bunga Solo", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Sorong", category: "Collection", url: "https://atas4d.biz/-sorong", images: " ", price: " " },{ label: "Karangan Bunga Subang", category: "Collection", url: "https://atas4d.biz/-subang", images: " ", price: " " },{ label: "Karangan Bunga Sukabumi", category: "Collection", url: "https://atas4d.biz/-sukabumi", images: " ", price: " " },{ label: "Karangan Bunga Sumbawa", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Surabaya", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Surakarta", category: "Collection", url: "https://atas4d.biz/-surakarta", images: " ", price: " " },{ label: "Karangan Bunga Tangerang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Karangan Bunga Tasikmalaya", category: "Collection", url: "https://atas4d.biz/-tasikmalaya", images: " ", price: " " },{ label: "Karangan Bunga Ternate", category: "Collection", url: "https://atas4d.biz/-ternate", images: " ", price: " " },{ label: "Karangan Bunga Tolitoli", category: "Collection", url: "https://atas4d.biz/-tolitoli", images: " ", price: " " },{ label: "Karangan Bunga Toraja", category: "Collection", url: "https://atas4d.biz/-toraja", images: " ", price: " " },{ label: "Karangan Bunga Tuban", category: "Collection", url: "https://atas4d.biz/-tuban", images: " ", price: " " },{ label: "Karangan Bunga Tulungagung", category: "Collection", url: "https://atas4d.biz/-tulungagung", images: " ", price: " " },{ label: "Karangan Bunga Wakatobi", category: "Collection", url: "https://atas4d.biz/-wakatobi", images: " ", price: " " },{ label: "Karangan Bunga Wiyung", category: "Collection", url: "https://atas4d.biz/-wiyung", images: " ", price: " " },{ label: "Karangan Bunga Wonogiri", category: "Collection", url: "https://atas4d.biz/-wonogiri", images: " ", price: " " },{ label: "Karangan Bunga Wonokromo", category: "Collection", url: "https://atas4d.biz/-wonokromo", images: " ", price: " " },{ label: "Karangan Bunga Wonosobo", category: "Collection", url: "https://atas4d.biz/-wonosobo", images: " ", price: " " },{ label: "Karangan Bunga Yogyakarta", category: "Collection", url: "https://atas4d.biz/-yogyakarta", images: " ", price: " " },{ label: "Kartu Ucapan", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Kue Anniversary", category: "Collection", url: "/collections/kue-anniversary", images: " ", price: " " },{ label: "Kue Bachelorette", category: "Collection", url: "/collections/kue-bachelorette", images: " ", price: " " },{ label: "Kue Bandung", category: "Collection", url: "/collections/kue-bandung", images: " ", price: " " },{ label: "Kue Bulan", category: "Collection", url: "/collections/kue-bulan", images: " ", price: " " },{ label: "Kue Imlek", category: "Collection", url: "/collections/kue-imlek", images: " ", price: " " },{ label: "Kue Kering", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Kue Natal", category: "Collection", url: "/collections/kue-natal", images: " ", price: " " },{ label: "Kue Pernikahan", category: "Collection", url: "/collections/kue-pernikahan", images: " ", price: " " },{ label: "Kue Tart", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Kue Tart Oma Elly", category: "Collection", url: "https://atas4d.biz/-oma-elly", images: " ", price: " " },{ label: "Kue Ulang Tahun", category: "Collection", url: "/collections/kue-ulang-tahun", images: " ", price: " " },{ label: "Lalique", category: "Collection", url: "/collections/lalique", images: " ", price: " " },{ label: "Le Sucre Du Patisserie", category: "Collection", url: "/collections/le-sucre-du-patisserie", images: " ", price: " " },{ label: "Leo âï¸ 23July - 22Augst", category: "Collection", url: "/collections/kado-untuk-zodiak-leo", images: " ", price: " " },{ label: "Letter Box", category: "Collection", url: "/collections/letter-box", images: " ", price: " " },{ label: "Libra âï¸ 23Sept - 23Oct", category: "Collection", url: "/collections/kado-untuk-zodiak-libra", images: " ", price: " " },{ label: "Lilin Aromaterapi", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Lily", category: "Collection", url: "/collections/bunga-lily", images: " ", price: " " },{ label: "Lindt", category: "Collection", url: "/collections/lindt", images: " ", price: " " },{ label: "Locations", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Love & Romance", category: "Collection", url: "/collections/rangkaian-bunga-i-love-you", images: " ", price: " " },{ label: "Love Bag Collection", category: "Collection", url: "/collections/love-bag-collection", images: " ", price: " " },{ label: "Love Bundle", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Love Bundle Nusantara", category: "Collection", url: "/collections/love-bundle-nusantara", images: " ", price: " " },{ label: "Luxury Chinese New Year Hampers", category: "Collection", url: "/collections/luxury-chinese-new-year-hampers", images: " ", price: " " },{ label: "Luxury Christmas Hampers", category: "Collection", url: "/collections/luxury-christmas-hampers", images: " ", price: " " },{ label: "Luxury Hampers", category: "Collection", url: "/collections/luxury-hampers", images: " ", price: " " },{ label: "Luxury Hampers Luar Jadetabek", category: "Collection", url: "/collections/luxury-hampers-luar-jadetabek", images: " ", price: " " },{ label: "Luxury Newborn Hampers Collection", category: "Collection", url: "/collections/luxury-newborn-hampers-collection", images: " ", price: " " },{ label: "Luxury Ramadan Hampers", category: "Collection", url: "/collections/luxury-ramadan-hampers", images: " ", price: " " },{ label: "Luxury Set", category: "Collection", url: "/collections/luxury", images: " ", price: " " },{ label: "Macaroon", category: "Collection", url: "/collections/macaroon", images: " ", price: " " },{ label: "Manual", category: "Collection", url: "/collections/manual", images: " ", price: " " },{ label: "Massimo Gelato", category: "Collection", url: "/collections/massimo-gelato", images: " ", price: " " },{ label: "Men's Collection", category: "Collection", url: "/collections/mens-collection", images: " ", price: " " },{ label: "Mercedes Benz", category: "Collection", url: "/collections/mercedes-benz", images: " ", price: " " },{ label: "Mercy Hampers", category: "Collection", url: "/collections/mercy-
13764hampers", images: " ", price: " " },{ label: "Merry Hampers", category: "Collection", url: "/collections/merry-hampers", images: " ", price: " " },{ label: "Merry Hampers Luar Jabodetabek", category: "Collection", url: "/collections/merry-hampers-luar-jabodetabek", images: " ", price: " " },{ label: "Mini Bouquet", category: "Collection", url: "/collections/mini-bouquet", images: " ", price: " " },{ label: "Miss Mondial", category: "Collection", url: "/collections/miss-mondial", images: " ", price: " " },{ label: "Modern & Chic Chinese New Year", category: "Collection", url: "/collections/modern-chic-chinese-new-year", images: " ", price: " " },{ label: "Modern & Chic Christmas Hampers", category: "Collection", url: "/collections/modern-chic-christmas", images: " ", price: " " },{ label: "Modern & Chic Hampers", category: "Collection", url: "/collections/modern-chic-hampers", images: " ", price: " " },{ label: "Modern & Chic Hampers Luar Jadetabek", category: "Collection", url: "/collections/modern-chic-hampers-luar-jadetabek", images: " ", price: " " },{ label: "Modern & Chic Ramadan Hampers", category: "Collection", url: "/collections/modern-chic-ramadan-hampers", images: " ", price: " " },{ label: "Modern & Classy Hampers", category: "Collection", url: "https://atas4d.biz/-unik", images: " ", price: " " },{ label: "Modern 3D Cake", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Modern Style Flowers", category: "Collection", url: "/collections/modern-style-flowers", images: " ", price: " " },{ label: "Monochrome Hampers", category: "Collection", url: "/collections/monochrome-hampers", images: " ", price: " " },{ label: "Monochrome Hampers Luar Jadetabek", category: "Collection", url: "/collections/monochrome-hampers-luar-jadetabek", images: " ", price: " " },{ label: "Mooncake", category: "Collection", url: "/collections/kue-bulan-mooncake-2025-mid-autumn-festival", images: " ", price: " " },{ label: "Mooncake Assorted Selection", category: "Collection", url: "/collections/mooncake-assorted-selection", images: " ", price: " " },{ label: "Mother's Day", category: "Collection", url: "/collections/rangkaian-bunga-hari-ibu", images: " ", price: " " },{ label: "Mother's Day Special", category: "Collection", url: "/collections/kado-untuk-ibu", images: " ", price: " " },{ label: "Necklaces", category: "Collection", url: "/collections/kalung", images: " ", price: " " },{ label: "NestBloom Bird Nest Hampers", category: "Collection", url: "/collections/nestbloom-birds-nest", images: " ", price: " " },{ label: "NestBloom Gift Set", category: "Collection", url: "/collections/nestbloom-gift-set", images: " ", price: " " },{ label: "Nestbloom Ritual Kit", category: "Collection", url: "/collections/nestbloom-ritual-kit", images: " ", price: " " },{ label: "NestBloom Single Bloom", category: "Collection", url: "/collections/nestbloom-single-bloom", images: " ", price: " " },{ label: "New Collection", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "New Product", category: "Collection", url: "/collections/new-product", images: " ", price: " " },{ label: "Newborn", category: "Collection", url: "/collections/rangkaian-bunga-newborn-baby", images: " ", price: " " },{ label: "Newborn Hampers", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Nibbl", category: "Collection", url: "/collections/nibbl", images: " ", price: " " },{ label: "Occasions", category: "Collection", url: "/collections/occasions", images: " ", price: " " },{ label: "Oma Elly", category: "Collection", url: "/collections/oma-elly", images: " ", price: " " },{ label: "Oma Elly Gelato", category: "Collection", url: "/collections/oma-elly-gelato", images: " ", price: " " },{ label: "Orchid", category: "Collection", url: "/collections/bunga-anggrek", images: " ", price: " " },{ label: "Orori", category: "Collection", url: "/collections/orori", images: " ", price: " " },{ label: "Outerbloom", category: "Collection", url: "/collections/outerbloom", images: " ", price: " " }
13764,{ label: "Outerbloom Cake", category: "Collection", url: "/collections/outerbloom-cake", images: " ", price: " " },{ label: "Outerbloom Florist", category: "Collection", url: "/collections/outerbloom-florist", images: " ", price: " " },{ label: "Outerbloom Gift", category: "Collection", url: "/collections/outerbloom-gift", images: " ", price: " " },{ label: "Outerbloom Hampers", category: "Collection", url: "/collections/outerbloom-hampers", images: " ", price: " " },{ label: "Outerbloom Indonesia", category: "Collection", url: "/collections/indonesia", images: " ", price: " " },{ label: "Outerbloom x Boho Panna", category: "Collection", url: "/collections/outerbloom-x-boho-panna", images: " ", price: " " },{ label: "Outerbloom x Clairmont", category: "Collection", url: "/collections/outerbloom-x-clairmont", images: " ", price: " " },{ label: "Outerbloom x Kikido", category: "Collection", url: "/collections/outerbloom-x-kikido", images: " ", price: " " },{ label: "Outerbloom x Miwa Pattern", category: "Collection", url: "/collections/outerbloom-x-miwa", images: " ", price: " " },{ label: "Outerbloom x Nestbloom Chinese New Year", category: "Collection", url: "/collections/outerbloom-x-nestbloom-chinese-new-year", images: " ", price: " " },{ label: "Outerbloom x NestBloom Hampers", category: "Collection", url: "/collections/outerbloom-x-nestbloom", images: " ", price: " " },{ label: "Paket Kolaborasi Outerbloom", category: "Collection", url: "/collections/paket-kolaborasi-outerbloom", images: " ", price: " " },{ label: "Paket Kolaborasi Valentine", category: "Collection", url: "/collections/paket-kolaborasi-valentine", images: " ", price: " " },{ label: "Paket Ulang Tahun", category: "Collection", url: "/collections/paket-ulang-tahun", images: " ", price: " " },{ label: "Paket Valentine Nusantara", category: "Collection", url: "/collections/paket-valentine-nusantara", images: " ", price: " " },{ label: "Paket Valentine Outerbloom", category: "Collection", url: "/collections/paket-valentine", images: " ", price: " " },{ label: "Papan Bunga", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Aceh", category: "Collection", url: "https://atas4d.biz/-aceh", images: " ", price: " " },{ label: "Papan Bunga Acrylic", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Ambon", category: "Collection", url: "https://atas4d.biz/-ambon", images: " ", price: " " },{ label: "Papan Bunga Artificial", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Atambua", category: "Collection", url: "https://atas4d.biz/-atambua", images: " ", price: " " },{ label: "Papan Bunga Bali", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Balikpapan", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Bandar Lampung", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Bandung", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Bandung Barat", category: "Collection", url: "https://atas4d.biz/-barat", images: " ", price: " " },{ label: "Papan Bunga Bangka", category: "Collection", url: "https://atas4d.biz/-bangka", images: " ", price: " " },{ label: "Papan Bunga Banjarmasin", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Banten", category: "Collection", url: "https://atas4d.biz/-banten", images: " ", price: " " },{ label: "Papan Bunga Banyumas", category: "Collection", url: "https://atas4d.biz/-banyumas", images: " ", price: " " },{ label: "Papan Bunga Banyuwangi", category: "Collection", url: "https://atas4d.biz/-banyuwangi", images: " ", price: " " },{ label: "Papan Bunga Batam", category: "Collection", url: "https://atas4d.biz/-batam", images: " ", price: " " },{ label: "Papan Bunga Baubau", category: "Collection", url: "https://atas4d.biz/-baubau", images: " ", price: " " }
13764,{ label: "Papan Bunga Bekasi", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Bengkalis", category: "Collection", url: "https://atas4d.biz/-bengkalis", images: " ", price: " " },{ label: "Papan Bunga Bengkayang", category: "Collection", url: "https://atas4d.biz/-bengkayang", images: " ", price: " " },{ label: "Papan Bunga Bengkulu", category: "Collection", url: "https://atas4d.biz/-bengkulu", images: " ", price: " " },{ label: "Papan Bunga Binjai", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Blitar", category: "Collection", url: "https://atas4d.biz/-blitar", images: " ", price: " " },{ label: "Papan Bunga Blora", category: "Collection", url: "https://atas4d.biz/-blora", images: " ", price: " " },{ label: "Papan Bunga Bogor", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Bojonegoro", category: "Collection", url: "https://atas4d.biz/-bojonegoro", images: " ", price: " " },{ label: "Papan Bunga Boyolali", category: "Collection", url: "https://atas4d.biz/-boyolali", images: " ", price: " " },{ label: "Papan Bunga Brebes", category: "Collection", url: "https://atas4d.biz/-brebes", images: " ", price: " " },{ label: "Papan Bunga Bukittinggi", category: "Collection", url: "https://atas4d.biz/-bukittinggi", images: " ", price: " " },{ label: "Papan Bunga Buleleng", category: "Collection", url: "https://atas4d.biz/-buleleng", images: " ", price: " " },{ label: "Papan Bunga Ciamis", category: "Collection", url: "https://atas4d.biz/-ciamis", images: " ", price: " " },{ label: "Papan Bunga Cianjur", category: "Collection", url: "https://atas4d.biz/-cianjur", images: " ", price: " " },{ label: "Papan Bunga Cibubur", category: "Collection", url: "https://atas4d.biz/-cibubur", images: " ", price: " " },{ label: "Papan Bunga Cikarang", category: "Collection", url: "https://atas4d.biz/-cikarang", images: " ", price: " " },{ label: "Papan Bunga Cikupa", category: "Collection", url: "https://atas4d.biz/-cikupa", images: " ", price: " " },{ label: "Papan Bunga Cikupa", category: "Collection", url: "https://atas4d.biz/-cikupa-1", images: " ", price: " " },{ label: "Papan Bunga Cilacap", category: "Collection", url: "https://atas4d.biz/-cilacap", images: " ", price: " " },{ label: "Papan Bunga Cileunyi", category: "Collection", url: "https://atas4d.biz/-cileunyi", images: " ", price: " " },{ label: "Papan Bunga Cirebon", category: "Collection", url: "https://atas4d.biz/-cirebon", images: " ", price: " " },{ label: "Papan Bunga Congratulations", category: "Collection", url: "https://atas4d.biz/-ucapan-selamat", images: " ", price: " " },{ label: "Papan Bunga Congratulations Bali", category: "Collection", url: "https://atas4d.biz/-congratulations-bali", images: " ", price: " " },{ label: "Papan Bunga Congratulations Bandung", category: "Collection", url: "https://atas4d.biz/-congratulations-bandung", images: " ", price: " " },{ label: "Papan Bunga Congratulations Bekasi", category: "Collection", url: "https://atas4d.biz/-congratulations-bekasi", images: " ", price: " " },{ label: "Papan Bunga Congratulations Bogor", category: "Collection", url: "https://atas4d.biz/-congratulations-bogor", images: " ", price: " " },{ label: "Papan Bunga Congratulations Cikupa", category: "Collection", url: "https://atas4d.biz/-congratulations-cikupa", images: " ", price: " " },{ label: "Papan Bunga Congratulations Demak", category: "Collection", url: "https://atas4d.biz/-congratulations-demak", images: " ", price: " " },{ label: "Papan Bunga Congratulations Depok", category: "Collection", url: "https://atas4d.biz/-congratulations-depok", images: " ", price: " " },{ label: "Papan Bunga Congratulations Gresik", category: "Collection", url: "https://atas4d.biz/-congratulations-gresik", images: " ", price: " " },{ label: "Papan Bunga Congratulations Jakarta", category: "Collection", url: "https://atas4d.biz/-congratulations-jakarta", images: " ", price: " " },{ label: "Papan Bunga Congratulations Jepara", category: "Collection", url: "https://atas4d.biz/-congratulations-jepara", images: " ", price: " " }
13764,{ label: "Papan Bunga Congratulations Medan", category: "Collection", url: "https://atas4d.biz/-congratulations-medan", images: " ", price: " " },{ label: "Papan Bunga Congratulations Semarang", category: "Collection", url: "https://atas4d.biz/-congratulations-semarang", images: " ", price: " " },{ label: "Papan Bunga Congratulations Serang", category: "Collection", url: "https://atas4d.biz/-congratulations-serang", images: " ", price: " " },{ label: "Papan Bunga Congratulations Sidoarjo", category: "Collection", url: "https://atas4d.biz/-congratulations-sidoarjo", images: " ", price: " " },{ label: "Papan Bunga Congratulations Surabaya", category: "Collection", url: "https://atas4d.biz/-congratulations-surabaya", images: " ", price: " " },{ label: "Papan Bunga Congratulations Tangerang", category: "Collection", url: "https://atas4d.biz/-congratulations-tangerang", images: " ", price: " " },{ label: "Papan Bunga Congratulations Yogyakarta", category: "Collection", url: "https://atas4d.biz/-congratulations-yogyakarta", images: " ", price: " " },{ label: "Papan Bunga Danau Toba", category: "Collection", url: "https://atas4d.biz/-danau-toba", images: " ", price: " " },{ label: "Papan Bunga Deli Serdang", category: "Collection", url: "https://atas4d.biz/-deli-serdang", images: " ", price: " " },{ label: "Papan Bunga Demak", category: "Collection", url: "https://atas4d.biz/-demak", images: " ", price: " " },{ label: "Papan Bunga Denpasar", category: "Collection", url: "https://atas4d.biz/-denpasar", images: " ", price: " " },{ label: "Papan Bunga Depok", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Duka Cita", category: "Collection", url: "/collections/bunga-duka-cita", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Bali", category: "Collection", url: "https://atas4d.biz/-duka-cita-bali", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Bandung", category: "Collection", url: "https://atas4d.biz/-duka-cita-bandung", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Bekasi", category: "Collection", url: "https://atas4d.biz/-duka-cita-bekasi", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Bogor", category: "Collection", url: "https://atas4d.biz/-duka-cita-bogor", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Cikupa", category: "Collection", url: "https://atas4d.biz/-duka-cita-cikupa", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Demak", category: "Collection", url: "https://atas4d.biz/-duka-cita-demak", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Depok", category: "Collection", url: "https://atas4d.biz/-duka-cita-depok", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Gresik", category: "Collection", url: "https://atas4d.biz/-duka-cita-gresik", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Jakarta", category: "Collection", url: "https://atas4d.biz/-duka-cita-jakarta", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Jepara", category: "Collection", url: "https://atas4d.biz/-duka-cita-jepara", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Medan", category: "Collection", url: "https://atas4d.biz/-duka-cita-medan", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Semarang", category: "Collection", url: "https://atas4d.biz/-duka-cita-semarang", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Serang", category: "Collection", url: "https://atas4d.biz/-duka-cita-serang", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Sidoarjo", category: "Collection", url: "https://atas4d.biz/-duka-cita-sidoarjo", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Surabaya", category: "Collection", url: "https://atas4d.biz/-duka-cita-surabaya", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Tangerang", category: "Collection", url: "https://atas4d.biz/-duka-cita-tangerang", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Yogyakarta", category: "Collection", url: "https://atas4d.biz/-duka-cita-yogyakarta", images: " ", price: " " }
13764,{ label: "Papan Bunga Garut", category: "Collection", url: "https://atas4d.biz/-garut", images: " ", price: " " },{ label: "Papan Bunga Gianyar", category: "Collection", url: "https://atas4d.biz/-gianyar", images: " ", price: " " },{ label: "Papan Bunga Gorontalo", category: "Collection", url: "https://atas4d.biz/-gorontalo", images: " ", price: " " },{ label: "Papan Bunga Gowa", category: "Collection", url: "https://atas4d.biz/-gowa", images: " ", price: " " },{ label: "Papan Bunga Gresik", category: "Collection", url: "https://atas4d.biz/-gresik", images: " ", price: " " },{ label: "Papan Bunga Grobogan", category: "Collection", url: "https://atas4d.biz/-grobogan", images: " ", price: " " },{ label: "Papan Bunga Gunungkidul", category: "Collection", url: "https://atas4d.biz/-gunungkidul", images: " ", price: " " },{ label: "Papan Bunga Indramayu", category: "Collection", url: "https://atas4d.biz/-indramayu", images: " ", price: " " },{ label: "Papan Bunga Jakarta", category: "Collection", url: "https://atas4d.biz/-jakarta", images: " ", price: " " },{ label: "Papan Bunga Jakarta Timur", category: "Collection", url: "https://atas4d.biz/-jakarta-timur", images: " ", price: " " },{ label: "Papan Bunga Jambi", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Jayapura", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Jember", category: "Collection", url: "https://atas4d.biz/-jember", images: " ", price: " " },{ label: "Papan Bunga Jembrana", category: "Collection", url: "https://atas4d.biz/-jembrana", images: " ", price: " " },{ label: "Papan Bunga Jepara", category: "Collection", url: "https://atas4d.biz/-jepara", images: " ", price: " " },{ label: "Papan Bunga Jombang", category: "Collection", url: "https://atas4d.biz/-jombang", images: " ", price: " " },{ label: "Papan Bunga Kampung Baru", category: "Collection", url: "https://atas4d.biz/-kampung-baru", images: " ", price: " " },{ label: "Papan Bunga Kapuas", category: "Collection", url: "https://atas4d.biz/-kapuas", images: " ", price: " " },{ label: "Papan Bunga Karanganyar", category: "Collection", url: "https://atas4d.biz/-karanganyar", images: " ", price: " " },{ label: "Papan Bunga Karangasem", category: "Collection", url: "https://atas4d.biz/-karangasem", images: " ", price: " " },{ label: "Papan Bunga Karawang", category: "Collection", url: "https://atas4d.biz/-karawang", images: " ", price: " " },{ label: "Papan Bunga Karo", category: "Collection", url: "https://atas4d.biz/-karo", images: " ", price: " " },{ label: "Papan Bunga Kartosuro", category: "Collection", url: "https://atas4d.biz/-kartosuro", images: " ", price: " " },{ label: "Papan Bunga Kebumen", category: "Collection", url: "https://atas4d.biz/-kebumen", images: " ", price: " " },{ label: "Papan Bunga Kediri", category: "Collection", url: "https://atas4d.biz/-kediri", images: " ", price: " " },{ label: "Papan Bunga Kendal", category: "Collection", url: "https://atas4d.biz/-kendal", images: " ", price: " " },{ label: "Papan Bunga Kendari", category: "Collection", url: "https://atas4d.biz/-kendari", images: " ", price: " " },{ label: "Papan Bunga Ketapang", category: "Collection", url: "https://atas4d.biz/-ketapang", images: " ", price: " " },{ label: "Papan Bunga Klaten", category: "Collection", url: "https://atas4d.biz/-klaten", images: " ", price: " " },{ label: "Papan Bunga Kota Batu", category: "Collection", url: "https://atas4d.biz/-kota-batu", images: " ", price: " " },{ label: "Papan Bunga Kudus", category: "Collection", url: "https://atas4d.biz/-kudus", images: " ", price: " " },{ label: "Papan Bunga Kupang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Lamongan", category: "Collection", url: "https://atas4d.biz/-lamongan", images: " ", price: " " },{ label: "Papan Bunga Lampu LED", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Lampung", category: "Collection", url: "https://atas4d.biz/-lampung", images: " ", price: " " }
13764,{ label: "Papan Bunga Langkat", category: "Collection", url: "https://atas4d.biz/-langkat", images: " ", price: " " },{ label: "Papan Bunga Lembang", category: "Collection", url: "https://atas4d.biz/-lembang", images: " ", price: " " },{ label: "Papan Bunga Lombok", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Lubuk Pakam", category: "Collection", url: "https://atas4d.biz/-lubuk-pakam", images: " ", price: " " },{ label: "Papan Bunga Lumajang", category: "Collection", url: "https://atas4d.biz/-lumajang", images: " ", price: " " },{ label: "Papan Bunga Madiun", category: "Collection", url: "https://atas4d.biz/-madiun", images: " ", price: " " },{ label: "Papan Bunga Magelang", category: "Collection", url: "https://atas4d.biz/-magelang", images: " ", price: " " },{ label: "Papan Bunga Majalengka", category: "Collection", url: "https://atas4d.biz/-majalengka", images: " ", price: " " },{ label: "Papan Bunga Makassar", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Malang", category: "Collection", url: "https://atas4d.biz/-malang", images: " ", price: " " },{ label: "Papan Bunga Mamuju", category: "Collection", url: "https://atas4d.biz/-mamuju", images: " ", price: " " },{ label: "Papan Bunga Manado", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Manokwari", category: "Collection", url: "https://atas4d.biz/-manokwari", images: " ", price: " " },{ label: "Papan Bunga Maros", category: "Collection", url: "https://atas4d.biz/-maros", images: " ", price: " " },{ label: "Papan Bunga Mataram", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Medan", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Mojokerto", category: "Collection", url: "https://atas4d.biz/-mojokerto", images: " ", price: " " },{ label: "Papan Bunga Nganjuk", category: "Collection", url: "https://atas4d.biz/-nganjuk", images: " ", price: " " },{ label: "Papan Bunga Ngawi", category: "Collection", url: "https://atas4d.biz/-ngawi", images: " ", price: " " },{ label: "Papan Bunga Nias", category: "Collection", url: "https://atas4d.biz/-nias", images: " ", price: " " },{ label: "Papan Bunga Organza", category: "Collection", url: "https://atas4d.biz/-organza", images: " ", price: " " },{ label: "Papan Bunga Padang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Palangkaraya", category: "Collection", url: "https://atas4d.biz/-palangkaraya", images: " ", price: " " },{ label: "Papan Bunga Palembang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Palu", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Pangkal Pinang", category: "Collection", url: "https://atas4d.biz/-pangkal-pinang", images: " ", price: " " },{ label: "Papan Bunga Parepare", category: "Collection", url: "https://atas4d.biz/-parepare", images: " ", price: " " },{ label: "Papan Bunga Pasuruan", category: "Collection", url: "https://atas4d.biz/-pasuruan", images: " ", price: " " },{ label: "Papan Bunga Pati", category: "Collection", url: "https://atas4d.biz/-pati", images: " ", price: " " },{ label: "Papan Bunga Pekalongan", category: "Collection", url: "https://atas4d.biz/-pekalongan", images: " ", price: " " },{ label: "Papan Bunga Pekanbaru", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Pemalang", category: "Collection", url: "https://atas4d.biz/-pemalang", images: " ", price: " " },{ label: "Papan Bunga Pematangsiantar", category: "Collection", url: "https://atas4d.biz/-pematangsiantar", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Bali", category: "Collection", url: "https://atas4d.biz/-pernikahan-bali", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Bandung", category: "Collection", url: "https://atas4d.biz/-pernikahan-bandung", images: " ", price: " " }
13764,{ label: "Papan Bunga Pernikahan Bekasi", category: "Collection", url: "https://atas4d.biz/-pernikahan-bekasi", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Bogor", category: "Collection", url: "https://atas4d.biz/-pernikahan-bogor", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Cikupa", category: "Collection", url: "https://atas4d.biz/-pernikahan-cikupa", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Demak", category: "Collection", url: "https://atas4d.biz/-pernikahan-demak", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Depok", category: "Collection", url: "https://atas4d.biz/-pernikahan-depok", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Gresik", category: "Collection", url: "https://atas4d.biz/-pernikahan-gresik", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Jakarta", category: "Collection", url: "https://atas4d.biz/-pernikahan-jakarta", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Jepara", category: "Collection", url: "https://atas4d.biz/-pernikahan-jepara", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Medan", category: "Collection", url: "https://atas4d.biz/-pernikahan-medan", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Semarang", category: "Collection", url: "https://atas4d.biz/-pernikahan-semarang", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Serang", category: "Collection", url: "https://atas4d.biz/-pernikahan-serang", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Sidoarjo", category: "Collection", url: "https://atas4d.biz/-pernikahan-sidoarjo", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Surabaya", category: "Collection", url: "https://atas4d.biz/-pernikahan-surabaya", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Tangerang", category: "Collection", url: "https://atas4d.biz/-pernikahan-tangerang", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Yogyakarta", category: "Collection", url: "https://atas4d.biz/-pernikahan-yogyakarta", images: " ", price: " " },{ label: "Papan Bunga Ponorogo", category: "Collection", url: "https://atas4d.biz/-ponorogo", images: " ", price: " " },{ label: "Papan Bunga Pontianak", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Premium", category: "Collection", url: "https://atas4d.biz/-premium", images: " ", price: " " },{ label: "Papan Bunga Printing", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Printing Congratulations", category: "Collection", url: "https://atas4d.biz/-congratulations", images: " ", price: " " },{ label: "Papan Bunga Probolinggo", category: "Collection", url: "https://atas4d.biz/-probolinggo", images: " ", price: " " },{ label: "Papan Bunga Promo", category: "Collection", url: "/collections/promo-papan-bunga", images: " ", price: " " },{ label: "Papan Bunga Purbalingga", category: "Collection", url: "https://atas4d.biz/-purbalingga", images: " ", price: " " },{ label: "Papan Bunga Purwokerto", category: "Collection", url: "https://atas4d.biz/-purwokerto", images: " ", price: " " },{ label: "Papan Bunga Purworejo", category: "Collection", url: "https://atas4d.biz/-purworejo", images: " ", price: " " },{ label: "Papan Bunga Rembang", category: "Collection", url: "https://atas4d.biz/-rembang", images: " ", price: " " },{ label: "Papan Bunga Riau", category: "Collection", url: "https://atas4d.biz/-riau", images: " ", price: " " },{ label: "Papan Bunga Salatiga", category: "Collection", url: "https://atas4d.biz/-salatiga", images: " ", price: " " },{ label: "Papan Bunga Samarinda", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Selamat Bandung", category: "Collection", url: "https://atas4d.biz/-selamat-bandung", images: " ", price: " " },{ label: "Papan Bunga Selamat Medan", category: "Collection", url: "https://atas4d.biz/-selamat-medan", images: " ", price: " " },{ label: "Papan Bunga Semarang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " }
13764,{ label: "Papan Bunga Serang", category: "Collection", url: "https://atas4d.biz/-serang", images: " ", price: " " },{ label: "Papan Bunga Sibolga", category: "Collection", url: "https://atas4d.biz/-sibolga", images: " ", price: " " },{ label: "Papan Bunga Sidoarjo", category: "Collection", url: "https://atas4d.biz/-sidoarjo", images: " ", price: " " },{ label: "Papan Bunga Singkawang", category: "Collection", url: "https://atas4d.biz/-singkawang", images: " ", price: " " },{ label: "Papan Bunga Solo", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Sorong", category: "Collection", url: "https://atas4d.biz/-sorong", images: " ", price: " " },{ label: "Papan Bunga Sragen", category: "Collection", url: "https://atas4d.biz/-sragen", images: " ", price: " " },{ label: "Papan Bunga Standard", category: "Collection", url: "https://atas4d.biz/-standard", images: " ", price: " " },{ label: "Papan Bunga Subang", category: "Collection", url: "https://atas4d.biz/-subang", images: " ", price: " " },{ label: "Papan Bunga Sukabumi", category: "Collection", url: "https://atas4d.biz/-sukabumi", images: " ", price: " " },{ label: "Papan Bunga Sumbawa", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Surabaya", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Surakarta", category: "Collection", url: "https://atas4d.biz/-surakarta", images: " ", price: " " },{ label: "Papan Bunga Tangerang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Papan Bunga Tasikmalaya", category: "Collection", url: "https://atas4d.biz/-tasikmalaya", images: " ", price: " " },{ label: "Papan Bunga Tegal", category: "Collection", url: "https://atas4d.biz/-tegal", images: " ", price: " " },{ label: "Papan Bunga Temanggung", category: "Collection", url: "https://atas4d.biz/-temanggung", images: " ", price: " " },{ label: "Papan Bunga Ternate", category: "Collection", url: "https://atas4d.biz/-ternate", images: " ", price: " " },{ label: "Papan Bunga Tolitoli", category: "Collection", url: "https://atas4d.biz/-tolitoli", images: " ", price: " " },{ label: "Papan Bunga Toraja", category: "Collection", url: "https://atas4d.biz/-toraja", images: " ", price: " " },{ label: "Papan Bunga Tuban", category: "Collection", url: "https://atas4d.biz/-tuban", images: " ", price: " " },{ label: "Papan Bunga Tulungagung", category: "Collection", url: "https://atas4d.biz/-tulungagung", images: " ", price: " " },{ label: "Papan Bunga Wakatobi", category: "Collection", url: "https://atas4d.biz/-wakatobi", images: " ", price: " " },{ label: "Papan Bunga Wedding", category: "Collection", url: "https://atas4d.biz/-ucapan-pernikahan", images: " ", price: " " },{ label: "Papan Bunga Wiyung", category: "Collection", url: "https://atas4d.biz/-wiyung", images: " ", price: " " },{ label: "Papan Bunga Wonogiri", category: "Collection", url: "https://atas4d.biz/-wonogiri", images: " ", price: " " },{ label: "Papan Bunga Wonokromo", category: "Collection", url: "https://atas4d.biz/-wonokromo", images: " ", price: " " },{ label: "Papan Bunga Wonosobo", category: "Collection", url: "https://atas4d.biz/-wonosobo", images: " ", price: " " },{ label: "Papan Bunga Yogyakarta", category: "Collection", url: "https://atas4d.biz/-yogyakarta", images: " ", price: " " },{ label: "Paper Flower Board", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Paper Flower Board Bali", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Paper Flower Board Gresik", category: "Collection", url: "https://atas4d.biz/-gresik", images: " ", price: " " },{ label: "Paper Flower Board Sidoarjo", category: "Collection", url: "https://atas4d.biz/-sidoarjo", images: " ", price: " " },{ label: "Paper Flower Board Surabaya", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Paper Flower Board Yogyakarta", category: "Collection", url: "https://atas4d.biz/-yogyakarta", images: " ", price: " " },{ label: "Parcel", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Parcel Buah", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Parcel Buah Bandung", category: "Collection", url: "https://atas4d.biz/-buah-bandung", images: " ", price: " " },{ label: "Parcel Buah Semarang", category: "Collection", url: "https://atas4d.biz/-buah-semarang", images: " ", price: " " },{ label: "Parcel Buah Sidoarjo", category: "Collection", url: "https://atas4d.biz/-buah-sidoarjo", images: " ", price: " " },{ label: "Parcel Buah Surabaya", category: "Collection", url: "https://atas4d.biz/-buah-surabaya", images: " ", price: " " },{ label: "Parcel Imlek 2026", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Parcel Imlek Bandung", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Parcel Imlek Nusantara", category: "Collection", url: "https://atas4d.biz/-nusantara", images: " ", price: " " },{ label: "Parcel Lebaran Bandung", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Parcel Lebaran Nusantara", category: "Collection", url: "https://atas4d.biz/-indonesia", images: " ", price: " " },{ label: "Parcel Lebaran Surabaya", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Parcel Makanan", category: "Collection", url: "https://atas4d.biz/-makanan", images: " ", price: " " },{ label: "Parcel Natal & Tahun Baru 2026", category: "Collection", url: "/collections/hampers-natal", images: " ", price: " " },{ label: "Parcel Natal & Tahun Baru 2026 Bandung", category: "Collection", url: "https://atas4d.biz/-natal-bandung", images: " ", price: " " },{ label: "Parcel Newborn Nusantara", category: "Collection", url: "https://atas4d.biz/-nusantara", images: " ", price: " " },{ label: "Parcel Tahun Baru", category: "Collection", url: "/collections/new-year-tahun-baru", images: " ", price: " " },{ label: "Party Supplies", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Partysaurus", category: "Collection", url: "/collections/partysaurus", images: " ", price: " " },{ label: "Pasar Bunga Splendid Malang", category: "Collection", url: "/collections/pasar-bunga-splendid-malang", images: " ", price: " " },{ label: "Passionate Red Valentine", category: "Collection", url: "/collections/red-valentine", images: " ", price: " " },{ label: "Pendant", category: "Collection", url: "/collections/liontin", images: " ", price: " " },{ label: "Personalized Fashion", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Personalized Gift", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " }
13764,{ label: "Personalized Gift Pria", category: "Collection", url: "https://atas4d.biz/-pria", images: " ", price: " " },{ label: "Personalized Gift Wanita", category: "Collection", url: "https://atas4d.biz/-wanita", images: " ", price: " " },{ label: "Personalized Gifts", category: "Collection", url: "https://atas4d.biz/s", images: " ", price: " " },{ label: "Pesca Ice Cream Cakes", category: "Collection", url: "/collections/pesca", images: " ", price: " " },{ label: "Phone Case", category: "Collection", url: "/collections/phone-case", images: " ", price: " " },{ label: "Photobook", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Pisces âï¸ 19Feb - 20March", category: "Collection", url: "/collections/kado-untuk-zodiak-pisces", images: " ", price: " " },{ label: "Pohon Natal", category: "Collection", url: "/collections/pohon-natal", images: " ", price: " " },{ label: "Premium Hampers", category: "Collection", url: "https://atas4d.biz/-premium", images: " ", price: " " },{ label: "Premium Newborn Hampers Collection", category: "Collection", url: "/collections/premium-newborn-hampers-collection", images: " ", price: " " },{ label: "Printing Cake", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Prom", category: "Collection", url: "/collections/prom", images: " ", price: " " },{ label: "Promo Merdeka", category: "Collection", url: "/collections/merdeka", images: " ", price: " " },{ label: "Rangkaian Bunga", category: "Collection", url: "/collections/rangkaian-bunga", images: " ", price: " " },{ label: "Rangkaian Bunga Dekorasi", category: "Collection", url: "/collections/rangkaian-bunga-dekorasi", images: " ", price: " " },{ label: "Rangkaian Bunga Ulang Tahun", category: "Collection", url: "/collections/rangkaian-bunga-ulang-tahun", images: " ", price: " " },{ label: "Rings", category: "Collection", url: "/collections/rings", images: " ", price: " " },{ label: "Romantic & Sweets", category: "Collection", url: "/collections/romantic-sweets", images: " ", price: " " },{ label: "Romantic Package", category: "Collection", url: "/collections/romantic-package", images: " ", price: " " },{ label: "Rose Beam", category: "Collection", url: "/collections/rose-beam", images: " ", price: " " },{ label: "Rose Box", category: "Collection", url: "/collections/rose-box", images: " ", price: " " },{ label: "Roses", category: "Collection", url: "/collections/bunga-mawar", images: " ", price: " " },{ label: "Rp 500.000 - Rp 800.000", category: "Collection", url: "/collections/rp-500-000-rp-800-000", images: " ", price: " " },{ label: "Rp 800.000 - Rp 1.000.000", category: "Collection", url: "/collections/rp-800-000-rp-1-000-000", images: " ", price: " " },{ label: "Rustic & Monochrome Ramadan Hampers", category: "Collection", url: "/collections/rustic-monochrome-ramadanhampers", images: " ", price: " " },{ label: "Rustic Bloom", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Rustic Style Flowers", category: "Collection", url: "/collections/rustic-style-flowers", images: " ", price: " " },{ label: "Sagittarius âï¸ 22Nov - 21Des", category: "Collection", url: "/collections/kado-untuk-zodiak-sagittarius", images: " ", price: " " },{ label: "Sameday Delivery", category: "Collection", url: "/collections/sameday", images: " ", price: " " },{ label: "Savoury Dish", category: "Collection", url: "/collections/savoury-dish", images: " ", price: " " },{ label: "Saychiz", category: "Collection", url: "/collections/saychiz", images: " ", price: " " },{ label: "Scented Candles", category: "Collection", url: "/collections/scented-candles", images: " ", price: " " },{ label: "Scorpio âï¸ 24Oct - 21Nov", category: "Collection", url: "/collections/kado-untuk-zodiak-scorpio", images: " ", price: " " },{ label: "Self Pick-Up", category: "Collection", url: "/collections/self-pick-up", images: " ", price: " " },{ label: "Semua Produk", category: "Collection", url: "/collections/all", images: " ", price: " " },{ label: "Serenitea", category: "Collection", url: "/collections/serenitea", images: " ", price: " " },{ label: "Share Outerbloom Moment", category: "Collection", url: "/collections/share-moment", images: " ", price: " " },{ label: "Share your Happiness", category: "Collection", url: "/collections/share-happiness", images: " ", price: " " },{ label: "Signature Cake", category: "Collection", url: "/collections/signature-cake", images: " ", price: " " },{ label: "Signature Chinese New Year Hampers", category: "Collection", url: "/collections/signature-chinese-new-year-hampers", images: " ", price: " " },{ label: "Signature Christmas & New Year Hampers", category: "Collection", url: "/collections/signature-christmas-hampers", images: " ", price: " " },{ label: "Signature Hampers", category: "Collection", url: "/collections/signature-hampers", images: " ", price: " " },{ label: "Signature Hampers Luar Jadetabek", category: "Collection", url: "/collections/signature-hampers-luar-jadetabek", images: " ", price: " " },{ label: "Signature Hampers Sameday", category: "Collection", url: "/collections/signature-hampers-sameday", images: " ", price: " " },{ label: "Signature Ramadan Hampers", category: "Collection", url: "/collections/signature-ramadan-hampers", images: " ", price: " " },{ label: "Slice Cake", category: "Collection", url: "/collections/slice-cake", images: " ", price: " " },{ label: "Snack Box", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Sorbet", category: "Collection", url: "/collections/sorbet", images: " ", price: " " },{ label: "Special Day", category: "Collection", url: "/collections/special-day", images: " ", price: " " },{ label: "Special Edition", category: "Collection", url: "/collections/special-edition", images: " ", price: " " },{ label: "Special For Her", category: "Collection", url: "/collections/special-for-her", images: " ", price: " " },{ label: "Standing Flower", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Standing Flower Bali", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Standing Flower Bandung", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Standing Flower Congratulations", category: "Collection", url: "https://atas4d.biz/-congratulations", images: " ", price: " " },{ label: "Standing Flower Demak", category: "Collection", url: "https://atas4d.biz/-demak", images: " ", price: " " },{ label: "Standing Flower Jepara", category: "Collection", url: "https://atas4d.biz/-jepara", images: " ", price: " " },{ label: "Standing Flower Semarang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Standing Flower Sidoarjo", category: "Collection", url: "https://atas4d.biz/-sidoarjo", images: " ", price: " " },{ label: "Standing Flower Surabaya", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Standing Flower Yogyakarta", category: "Collection", url: "https://atas4d.biz/-yogyakarta", images: " ", price: " " },{ label: "Standing Giant Flower", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Stationery", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Steekwerk", category: "Collection", url: "/collections/steekwerk", images: " ", price: " " },{ label: "Stylish Hampers", category: "Collection", url: "/collections/stylish-hampers", images: " ", price: " " },{ label: "Stylish Hampers Luar Jadetabek", category: "Collection", url: "/collections/stylish-hampers-luar-jadetabek", images: " ", price: " " },{ label: "Succulent", category: "Collection", url: "/collections/succulent", images: " ", price: " " },{ label: "Sunflower", category: "Collection", url: "/collections/bunga-matahari", images: " ", price: " " },{ label: "Sweet & Savoury Hampers", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Sweet Gracie", category: "Collection", url: "/collections/sweet-gracie", images: " ", price: " " },{ label: "Sweet Pastel Love", category: "Collection", url: "/collections/pastel-love", images: " ", price: " " },{ label: "Sweet Pastel Love Nusantara", category: "Collection", url: "/collections/sweet-pastel-love-nusantara", images: " ", price: " " },{ label: "Sweet Treats", category: "Collection", url: "/collections/sweet-treats", images: " ", price: " " },{ label: "Sweetooth", category: "Collection", url: "/collections/sweetooth", images: " ", price: " " },{ label: "SÅl et Terre x Outerbloom", category: "Collection", url: "/collections/sol-et-terre", images: " ", price: " " },{ label: "Taurus âï¸ 20April - 20May", category: "Collection", url: "/collections/kado-untuk-zodiak-taurus", images: " ", price: " " },{ label: "Teddy Bear", category: "Collection", url: "/collections/boneka-teddy-bear", images: " ", price: " " },{ label: "Teh", category: "Collection", url: "/collections/teh", images: " ", price: " " },{ label: "Test Error", category: "Collection", url: "/collections/test-error", images: " ", price: " " },{ label: "Testing", category: "Collection", url: "/collections/testing", images: " ", price: " " },{ label: "Thank You", category: "Collection", url: "/collections/rangkaian-bunga-ucapan-terima-kasih", images: " ", price: " " },{ label: "The Classic Astoria", category: "Collection", url: "/collections/astoria", images: " ", price: " " },{ label: "The Classic Enchanted Dome", category: "Collection", url: "/collections/enchanted-dome", images: " ", price: " " },{ label: "The Enchanted Love Pirouette Special Edition", category: "Collection", url: "/collections/the-enchanted-love-pirouette-special-edition", images: " ", price: " " },{ label: "The F Thing", category: "Collection", url: "/collections/the-f-thing", images: " ", price: " " },{ label: "The First", category: "Collection", url: "/collections/the-first", images: " ", price: " " },{ label: "The Novo Astoria", category: "Collection", url: "/collections/the-novo-astoria", images: " ", price: " " },{ label: "The Novo Enchanted Dome", category: "Collection", url: "/collections/the-novo-enchanted-dome", images: " ", price: " " },{ label: "The Novo Enchanted Dome Special Edition", category: "Collection", url: "/collections/the-novo-enchanted-dome-special-edition", images: " ", price: " " },{ label: "The Palace", category: "Collection", url: "/collections/the-palace", images: " ", price: " " },{ label: "Ties", category: "Collection", url: "/collections/dasi", images: " ", price: " " },{ label: "Tisane", category: "Collection", url: "/collections/tisane", images: " ", price: " " },{ label: "Toko Bunga Aceh", category: "Collection", url: "https://atas4d.biz/-aceh", images: " ", price: " " },{ label: "Toko Bunga Ambon", category: "Collection", url: "https://atas4d.biz/-ambon", images: " ", price: " " },{ label: "Toko Bunga Atambua", category: "Collection", url: "https://atas4d.biz/-atambua", images: " ", price: " " },{ label: "Toko Bunga Bali", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Balikpapan", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " }
13764,{ label: "Toko Bunga Bandar Lampung", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Bandung", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Bandung Barat", category: "Collection", url: "https://atas4d.biz/-barat", images: " ", price: " " },{ label: "Toko Bunga Banjarmasin", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Banten", category: "Collection", url: "https://atas4d.biz/-banten", images: " ", price: " " },{ label: "Toko Bunga Banyumas", category: "Collection", url: "https://atas4d.biz/-banyumas", images: " ", price: " " },{ label: "Toko Bunga Banyuwangi", category: "Collection", url: "https://atas4d.biz/-banyuwangi", images: " ", price: " " },{ label: "Toko Bunga Batam", category: "Collection", url: "https://atas4d.biz/-batam", images: " ", price: " " },{ label: "Toko Bunga Baubau", category: "Collection", url: "https://atas4d.biz/-baubau", images: " ", price: " " },{ label: "Toko Bunga Bekasi", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Bengkalis", category: "Collection", url: "https://atas4d.biz/-bengkalis", images: " ", price: " " },{ label: "Toko Bunga Bengkayang", category: "Collection", url: "https://atas4d.biz/-bengkayang", images: " ", price: " " },{ label: "Toko Bunga Binjai", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Bintaro", category: "Collection", url: "https://atas4d.biz/-bintaro", images: " ", price: " " },{ label: "Toko Bunga Blitar", category: "Collection", url: "https://atas4d.biz/-blitar", images: " ", price: " " },{ label: "Toko Bunga Blora", category: "Collection", url: "https://atas4d.biz/-blora", images: " ", price: " " },{ label: "Toko Bunga Bogor", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Bojonegoro", category: "Collection", url: "https://atas4d.biz/-bojonegoro", images: " ", price: " " },{ label: "Toko Bunga Boyolali", category: "Collection", url: "https://atas4d.biz/-boyolali", images: " ", price: " " },{ label: "Toko Bunga Brebes", category: "Collection", url: "https://atas4d.biz/-brebes", images: " ", price: " " },{ label: "Toko Bunga Bukittinggi", category: "Collection", url: "https://atas4d.biz/-bukittinggi", images: " ", price: " " },{ label: "Toko Bunga Buleleng", category: "Collection", url: "https://atas4d.biz/-buleleng", images: " ", price: " " },{ label: "Toko Bunga Cakung", category: "Collection", url: "https://atas4d.biz/-cakung", images: " ", price: " " },{ label: "Toko Bunga Cawang", category: "Collection", url: "https://atas4d.biz/-cawang", images: " ", price: " " },{ label: "Toko Bunga Cempaka Putih", category: "Collection", url: "https://atas4d.biz/-cempaka-putih", images: " ", price: " " },{ label: "Toko Bunga Cengkareng", category: "Collection", url: "https://atas4d.biz/-cengkareng", images: " ", price: " " },{ label: "Toko Bunga Ciamis", category: "Collection", url: "https://atas4d.biz/-ciamis", images: " ", price: " " },{ label: "Toko Bunga Cianjur", category: "Collection", url: "https://atas4d.biz/-cianjur", images: " ", price: " " },{ label: "Toko Bunga Cibinong", category: "Collection", url: "https://atas4d.biz/-cibinong", images: " ", price: " " },{ label: "Toko Bunga Cibubur", category: "Collection", url: "https://atas4d.biz/-cibubur", images: " ", price: " " },{ label: "Toko Bunga Cijantung", category: "Collection", url: "https://atas4d.biz/-cijantung", images: " ", price: " " },{ label: "Toko Bunga Cikarang", category: "Collection", url: "https://atas4d.biz/-cikarang", images: " ", price: " " },{ label: "Toko Bunga Cikini", category: "Collection", url: "https://atas4d.biz/-cikini", images: " ", price: " " },{ label: "Toko Bunga Cilacap", category: "Collection", url: "https://atas4d.biz/-cilacap", images: " ", price: " " },{ label: "Toko Bunga Cilandak", category: "Collection", url: "https://atas4d.biz/-cilandak", images: " ", price: " " },{ label: "Toko Bunga Cileunyi", category: "Collection", url: "https://atas4d.biz/-cileunyi", images: " ", price: " " },{ label: "Toko Bunga Ciracas", category: "Collection", url: "https://atas4d.biz/-ciracas", images: " ", price: " " },{ label: "Toko Bunga Cirebon", category: "Collection", url: "https://atas4d.biz/-cirebon", images: " ", price: " " }
13764,{ label: "Toko Bunga Ciwidey", category: "Collection", url: "https://atas4d.biz/-ciwidey", images: " ", price: " " },{ label: "Toko Bunga Danau Toba", category: "Collection", url: "https://atas4d.biz/-danau-toba", images: " ", price: " " },{ label: "Toko Bunga Demak", category: "Collection", url: "https://atas4d.biz/-demak", images: " ", price: " " },{ label: "Toko Bunga Denpasar", category: "Collection", url: "https://atas4d.biz/-denpasar", images: " ", price: " " },{ label: "Toko Bunga Depok", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Duren Sawit", category: "Collection", url: "https://atas4d.biz/-duren-sawit", images: " ", price: " " },{ label: "Toko Bunga Garut", category: "Collection", url: "https://atas4d.biz/-garut", images: " ", price: " " },{ label: "Toko Bunga Gianyar", category: "Collection", url: "https://atas4d.biz/-gianyar", images: " ", price: " " },{ label: "Toko Bunga Gowa", category: "Collection", url: "https://atas4d.biz/-gowa", images: " ", price: " " },{ label: "Toko Bunga Gresik", category: "Collection", url: "https://atas4d.biz/-gresik", images: " ", price: " " },{ label: "Toko Bunga Grobogan", category: "Collection", url: "https://atas4d.biz/-grobogan", images: " ", price: " " },{ label: "Toko Bunga Grogol", category: "Collection", url: "https://atas4d.biz/-grogol", images: " ", price: " " },{ label: "Toko Bunga Gunungkidul", category: "Collection", url: "https://atas4d.biz/-gunungkidul", images: " ", price: " " },{ label: "Toko Bunga Indramayu", category: "Collection", url: "https://atas4d.biz/-indramayu", images: " ", price: " " },{ label: "Toko Bunga Jakarta", category: "Collection", url: "https://atas4d.biz/-jakarta", images: " ", price: " " },{ label: "Toko Bunga Jakarta Barat", category: "Collection", url: "https://atas4d.biz/-jakarta-barat", images: " ", price: " " },{ label: "Toko Bunga Jakarta Pusat", category: "Collection", url: "https://atas4d.biz/-jakarta-pusat", images: " ", price: " " },{ label: "Toko Bunga Jakarta Selatan", category: "Collection", url: "https://atas4d.biz/-jakarta-selatan", images: " ", price: " " },{ label: "Toko Bunga Jakarta Timur", category: "Collection", url: "https://atas4d.biz/-jakarta-timur", images: " ", price: " " },{ label: "Toko Bunga Jakarta Utara", category: "Collection", url: "https://atas4d.biz/-jakarta-utara", images: " ", price: " " },{ label: "Toko Bunga Jambi", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Jatinegara", category: "Collection", url: "https://atas4d.biz/-jatinegara", images: " ", price: " " },{ label: "Toko Bunga Jawa & Bali", category: "Collection", url: "https://atas4d.biz/-jawa-bali", images: " ", price: " " },{ label: "Toko Bunga Jayapura", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Jelambar - Florist Onine 24 Jam", category: "Collection", url: "https://atas4d.biz/-jelambar", images: " ", price: " " },{ label: "Toko Bunga Jember", category: "Collection", url: "https://atas4d.biz/-jember", images: " ", price: " " },{ label: "Toko Bunga Jembrana", category: "Collection", url: "https://atas4d.biz/-jembrana", images: " ", price: " " },{ label: "Toko Bunga Jepara", category: "Collection", url: "https://atas4d.biz/-jepara", images: " ", price: " " },{ label: "Toko Bunga Joglo", category: "Collection", url: "https://atas4d.biz/-joglo", images: " ", price: " " },{ label: "Toko Bunga Jombang", category: "Collection", url: "https://atas4d.biz/-jombang", images: " ", price: " " },{ label: "Toko Bunga Kalibata", category: "Collection", url: "https://atas4d.biz/-kalibata", images: " ", price: " " },{ label: "Toko Bunga Kalimantan", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Kalisari Semarang", category: "Collection", url: "https://atas4d.biz/-kalisari-semarang", images: " ", price: " " },{ label: "Toko Bunga Kampung Baru", category: "Collection", url: "https://atas4d.biz/-kampung-baru", images: " ", price: " " },{ label: "Toko Bunga Kapuas", category: "Collection", url: "https://atas4d.biz/-kapuas", images: " ", price: " " },{ label: "Toko Bunga Karanganyar", category: "Collection", url: "https://atas4d.biz/-karanganyar", images: " ", price: " " },{ label: "Toko Bunga Karangasem", category: "Collection", url: "https://atas4d.biz/-karangasem", images: " ", price: " " },{ label: "Toko Bunga Karawang", category: "Collection", url: "https://atas4d.biz/-karawang", images: " ", price: " " },{ label: "Toko Bunga Kartosuro", category: "Collection", url: "https://atas4d.biz/-kartosuro", images: " ", price: " " },{ label: "Toko Bunga Kayoon Surabaya", category: "Collection", url: "https://atas4d.biz/-kayoon-surabaya", images: " ", price: " " },{ label: "Toko Bunga Kebayoran Baru", category: "Collection", url: "https://atas4d.biz/-kebayoran-baru", images: " ", price: " " },{ label: "Toko Bunga Kebon Jeruk", category: "Collection", url: "https://atas4d.biz/-kebon-jeruk", images: " ", price: " " },{ label: "Toko Bunga Kebumen", category: "Collection", url: "https://atas4d.biz/-kebumen", images: " ", price: " " },{ label: "Toko Bunga Kediri", category: "Collection", url: "https://atas4d.biz/-kediri", images: " ", price: " " },{ label: "Toko Bunga Kelapa Gading", category: "Collection", url: "https://atas4d.biz/-kelapa-gading", images: " ", price: " " },{ label: "Toko Bunga Kemayoran", category: "Collection", url: "https://atas4d.biz/-kemayoran", images: " ", price: " " },{ label: "Toko Bunga Kendal", category: "Collection", url: "https://atas4d.biz/-ken
13764dal", images: " ", price: " " },{ label: "Toko Bunga Kendari", category: "Collection", url: "https://atas4d.biz/-kendari", images: " ", price: " " },{ label: "Toko Bunga Ketapang", category: "Collection", url: "https://atas4d.biz/-ketapang", images: " ", price: " " },{ label: "Toko Bunga Klaten", category: "Collection", url: "https://atas4d.biz/-klaten", images: " ", price: " " },{ label: "Toko Bunga Klender", category: "Collection", url: "https://atas4d.biz/-klender", images: " ", price: " " },{ label: "Toko Bunga Kota Baru Yogyakarta", category: "Collection", url: "https://atas4d.biz/-kota-baru-yogyakarta", images: " ", price: " " },{ label: "Toko Bunga Kota Batu", category: "Collection", url: "https://atas4d.biz/-kota-batu", images: " ", price: " " },{ label: "Toko Bunga Kramat Jati", category: "Collection", url: "https://atas4d.biz/-kramat-jati", images: " ", price: " " },{ label: "Toko Bunga Kudus", category: "Collection", url: "https://atas4d.biz/-kudus", images: " ", price: " " },{ label: "Toko Bunga Kupang", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Lamongan", category: "Collection", url: "https://atas4d.biz/-lamongan", images: " ", price: " " },{ label: "Toko Bunga Langkat", category: "Collection", url: "https://atas4d.biz/-langkat", images: " ", price: " " },{ label: "Toko Bunga Lebak Bulus", category: "Collection", url: "https://atas4d.biz/-lebak-bulus", images: " ", price: " " },{ label: "Toko Bunga Lembang", category: "Collection", url: "https://atas4d.biz/-lembang", images: " ", price: " " },{ label: "Toko Bunga Lenteng Agung", category: "Collection", url: "https://atas4d.biz/-lenteng-agung", images: " ", price: " " },{ label: "Toko Bunga Lombok", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Lubuk Pakam", category: "Collection", url: "https://atas4d.biz/-lubuk-pakam", images: " ", price: " " },{ label: "Toko Bunga Lumajang", category: "Collection", url: "https://atas4d.biz/-lumajang", images: " ", price: " " },{ label: "Toko Bunga Madiun", category: "Collection", url: "https://atas4d.biz/-madiun", images: " ", price: " " },{ label: "Toko Bunga Magelang", category: "Collection", url: "https://atas4d.biz/-magelang", images: " ", price: " " },{ label: "Toko Bunga Majalengka", category: "Collection", url: "https://atas4d.biz/-majalengka", images: " ", price: " " },{ label: "Toko Bunga Makassar", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Malang", category: "Collection", url: "https://atas4d.biz/-malang", images: " ", price: " " },{ label: "Toko Bunga Manado", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Mangga Besar", category: "Collection", url: "https://atas4d.biz/-mangga-besar", images: " ", price: " " },{ label: "Toko Bunga Manokwari", category: "Collection", url: "https://atas4d.biz/-manokwari", images: " ", price: " " },{ label: "Toko Bunga Maros", category: "Collection", url: "https://atas4d.biz/-maros", images: " ", price: " " },{ label: "Toko Bunga Mataram", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Medan", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " },{ label: "Toko Bunga Mojokerto", category: "Collection", url: "https://atas4d.biz/-mojokerto", images: " ", price: " " },{ label: "Toko Bunga Nganjuk", category: "Collection", url: "https://atas4d.biz/-nganjuk", images: " ", price: " " },{ label: "Toko Bunga Ngawi", category: "Collection", url: "https://atas4d.biz/-ngawi", images: " ", price: " " },{ label: "Toko Bunga Nias", category: "Collection", url: "https://atas4d.biz/-nias", images: " ", price: " " },{ label: "Toko Bunga Nusa Tenggara", category: "Collection", url: "https://atas4d.biz/", images: " ", price: " " }, 13765 { label: "grand salutation jabodetabek", category: "Produk", url: "/products/grand-salutation", images: "https://outerbloom.com/cdn/shop/files/JKTCON1005_Grand-Salutation-Jabodetabek-WM_thumb.jpg?v=1703241523", price: "Rp 435.000" },{ label: "consolantibus jabodetabek", category: "Produk", url: "/products/consolantibus", images: "https://outerbloom.com/cdn/shop/files/JKTDUK1011_Consolantibus-Jabodetabek-WM_thumb.jpg?v=1703239823", price: "Rp 435.000" },{ label: "classic midnight hand bouquet fiery red", category: "Produk", url: "/products/the-classic-midnight-hand-bouquet-fiery-red", images: "https://outerbloom.com/cdn/shop/files/OBVBUN1422_Classic-Midnight-Hand-Bouquet---Fiery-Red-large_thumb.jpg?v=1757302521", price: "Rp 385.000" },{ label: "endearing ruby", category: "Produk", url: "/products/endearing-ruby", images: "https://outerbloom.com/cdn/shop/products/OUTSTF1003_Endearing-Ruby_thumb.jpg?v=1631296611", price: "Rp 1.349.417" },{ label: "gentle soul jabodetabek", category: "Produk", url: "/products/gentle-soul-jabodetabek", images: "https://outerbloom.com/cdn/shop/files/JKTDUK1030_Gentle-Soul-Jabodetabek-WM_thumb.jpg?v=1703239894", price: "Rp 435.000" },{ label: "belleza jabodetabek", category: "Produk", url: "/products/belleza", images: "https://outerbloom.com/cdn/shop/files/Belleza-Jabodetabek-LED_aecb756a-0737-45cc-8bfb-008515ca0a37_thumb.gif?v=1759229680", price: "Rp 435.000" },{ label: "sentiments jabodetabek", category: "Produk", url: "/products/sentiments", images: "https://outerbloom.com/cdn/shop/files/Sentiments-Jabodetabek-WM_thumb.jpg?v=1759224099", price: "Rp 485.000" }
13765,{ label: "majestic pink roses with baby breath bouquet", category: "Produk", url: "/products/majestic-pink-roses-with-baby-breath-bouquet", images: "https://outerbloom.com/cdn/shop/products/ef4a3be9-c938-4c70-98ac-4873e7da82bf_90820a66-923a-463d-a464-81bcbe6e6644_thumb.jpg?v=1581413440", price: "Rp 485.000" },{ label: "rose poetry bouquet", category: "Produk", url: "/products/rose-poetry-bouquet", images: "https://outerbloom.com/cdn/shop/products/Rose-Poetry-Bouquet-20-tangkai_thumb.jpg?v=1675151039", price: "Rp 385.000" },{ label: "genuine feeling", category: "Produk", url: "/products/genuine-feeling", images: "https://outerbloom.com/cdn/shop/products/OUTSTF1004Genuine-Feeling_981ade89-af27-433e-81aa-8d76175a0e4d_thumb.jpg?v=1612352389", price: "Rp 1.349.417" },{ label: "eternal fidelity jabodetabek", category: "Produk", url: "/products/eternal-fidelity-jabodetabek", images: "https://outerbloom.com/cdn/shop/products/0b89df45-dcc1-4876-820e-61b2243a1945_964e211d-2972-46c9-8593-976210929089_thumb.jpg?v=1590491458", price: "Rp 435.000" },{ label: "rosabelle hand bouquet", category: "Produk", url: "/products/rosabelle-hand-bouquet", images: "https://outerbloom.com/cdn/shop/files/OBVBUN1429_Rosabelle-Hand-Bouquet-Medium_thumb.jpg?v=1756971848", price: "Rp 385.000" },{ label: "dreaming in pink luxury in vase", category: "Produk", url: "/products/dreaming-in-pink-luxury-in-vase", images: "https://outerbloom.com/cdn/shop/products/OBVBUN1051_Dreaming-In-Pink-Luxury-In-Vase_3_thumb.jpg?v=1614594504", price: "Rp 8.000.008" },{ label: "excito jabodetabek", category: "Produk", url: "/products/excito", images: "https://outerbloom.com/cdn/shop/files/JKTCON1010_Excito-Jabodetabek-2023_thumb.gif?v=1717494677", price: "Rp 485.000" },{ label: "spirit of eminance jabodetabek", category: "Produk", url: "/products/spirit-of-eminance-jabodetabek", images: "https://outerbloom.com/cdn/shop/files/JKTCON1026_Spirit-of-Eminance-Jabodetabek-newest-WM_thumb.jpg?v=1693297526", price: "Rp 485.000" },{ label: "golden toast jabodetabek", category: "Produk", url: "/products/golden-toast", images: "https://outerbloom.com/cdn/shop/products/LED-GoldenToast_thumb.gif?v=1579249585", price: "Rp 485.000" },{ label: "white elysian bloom box", category: "Produk", url: "/products/white-elysian-bloom-box", images: "https://outerbloom.com/cdn/shop/files/OBVBUN1704_White-Elysian-Bloom-Box_thumb.jpg?v=1757328247", price: "Rp 685.000" },{ label: "charming forevermore jabodetabek", category: "Produk", url: "/products/charming-forevermore-jabodetabek", images: "https://outerbloom.com/cdn/shop/files/JKTWED1036_Charming-Forevermore-Jabodetabek-WM_thumb.jpg?v=1703239534", price: "Rp 485.000" },{ label: "moment of glory jabodetabek", category: "Produk", url: "/products/moment-of-glory-jabodetabek", images: "https://outerbloom.com/cdn/shop/products/JKTCON1051_Moment-of-Glory-Jabodetabek_2_thumb.jpg?v=1596614663", price: "Rp 385.000" },{ label: "with love bouquet", category: "Produk", url: "/products/with-love-bouquet", images: "https://outerbloom.com/cdn/shop/products/c5d6fed6-8ada-4c38-ae0f-36d395aacb19_613f78f0-d52c-443b-9e13-63a151cd8ec5_thumb.jpg?v=1590748429", price: "Rp 535.000" },{ label: "sincerely", category: "Produk", url: "/products/sincerely", images: "https://outerbloom.com/cdn/shop/files/Sincerely-WM_thumb.jpg?v=1688354677", price: "Rp 1.349.417" },{ label: "passion rouge bloom box", category: "Produk", url: "/products/passion-rouge-bloom-box", images: "https://outerbloom.com/cdn/shop/files/OBVBUN1725_Passion-Rouge-Bloom-Box_thumb.jpg?v=1756972410", price: "Rp 385.000" },{ label: "sweet romance jabodetabek", category: "Produk", url: "/products/sweet-romance", images: "https://outerbloom.com/cdn/shop/products/JKTWED1005_Sweet-Romance-Jabodetabek_thumb.gif?v=1677134791", price: "Rp 635.000" },{ label: "sunflower yellow and with white daisies in vase", category: "Produk", url: "/products/sunflower-yellow-roses-with-white-and-yellow-daisies-in-a-glass-vase", images: "https://outerbloom.com/cdn/shop/files/OBVBUN1132_Sunflower-Yellow-And-With-White-Daisies-in-Vase_thumb.jpg?v=1757930628", price: "Rp 435.000" },{ label: "everlasting peace jabodetabek", category: "Produk", url: "/products/everlasting-peace-jabodetabek", images: "https://outerbloom.com/cdn/shop/products/JKTDUK1034_Everlasting-Peace-Jabodetabek_2_thumb.jpg?v=1596614613", price: "Rp 385.000" },{ label: "classic purple orchid majesty in vase", category: "Produk", url: "/products/classic-purple-orchid-majesty-in-vase", images: "https://outerbloom.com/cdn/shop/products/Classic-Purple-Orchid-Majesty-in-Vase---White---4-Tangkai_40a5e337-283f-40f5-911c-5df9b506b9da_thumb.jpg?v=1639981404", price: "Rp 435.000" },{ label: "classic white orchid majesty in vase", category: "Produk", url: "/products/classic-white-orchid-majesty-in-vase", images: "https://outerbloom.com/cdn/shop/products/Classic-white-Orchid-Majesty-in-Vase---white---4-Tangkai_thumb.jpg?v=1644205542", price: "Rp 435.000" }
13765,{ label: "black pink bouquet", category: "Produk", url: "/products/black-pink-bouquet", images: "https://outerbloom.com/cdn/shop/files/Black-Pink-Bouquet_thumb.jpg?v=1756434063", price: "Rp 485.000" },{ label: "majestic blue romance bouquet", category: "Produk", url: "/products/majestic-blue-romance-bouquet", images: "https://outerbloom.com/cdn/shop/files/OBVBUN1357_Majestic-Blue-Romance-Bouquet_99b8ba96-0e67-4eef-a00e-b2daedcddb6a_thumb.jpg?v=1757390540", price: "Rp 435.000" },{ label: "happy days jabodetabek", category: "Produk", url: "/products/happy-days-jabodetabek", images: "https://outerbloom.com/cdn/shop/files/Happy-Days-Jabodetabek_WM_thumb.jpg?v=1759224026", price: "Rp 485.000" },{ label: "solemn comfort jabodetabek", category: "Produk", url: "/products/solemn-comfort-jabodetabek", images: "https://outerbloom.com/cdn/shop/products/7fe123d8-6bb2-4c0d-bd4c-f8c3032823f2_6b9c33b6-4a23-41cb-8709-fc9223fe096a_thumb.png?v=1590662086", price: "Rp 635.000" },{ label: "pink darling bouquet", category: "Produk", url: "/products/pink-darling-bouquet", images: "https://outerbloom.com/cdn/shop/products/Pink-Darling-Bouquet_thumb.jpg?v=1669969725", price: "Rp 485.000" },{ label: "profound happiness jabodetabek", category: "Produk", url: "/products/profound-happiness-jabodetabek", images: "https://outerbloom.com/cdn/shop/files/profound-happiness_thumb.gif?v=1689940309", price: "Rp 635.000" },{ label: "big dreams jabodetabek", category: "Produk", url: "/products/big-dreams", images: "https://outerbloom.com/cdn/shop/files/JKTCON1002_Big-Dreams-Jabodetabek_thumb.gif?v=1717494603", price: "Rp 485.000" },{ label: "amorous amos jabodetabek", category: "Produk", url: "/products/amorous-amos-jabodetabek", images: "https://outerbloom.com/cdn/shop/files/Amorous-Amos-Jabodetabek-WM_thumb.jpg?v=1759224071", price: "Rp 485.000" },{ label: "signature ramadan deluxe hampers", category: "Produk", url: "/products/outerbloom-signature-ramadhan-deluxe-hampers", images: "https://outerbloom.com/cdn/shop/files/Deluxe-Hampers_e16636a3-3c6b-4ac2-9e17-eb20579111cd_thumb.jpg?v=1769675273", price: "Rp 985.000" },{ label: "sincerity solace", category: "Produk", url: "/products/sincerity-solace", images: "https://outerbloom.com/cdn/shop/products/OUTSTF1038_sincerity-solace-WM_thumb.jpg?v=1612352477", price: "Rp 485.000" },{ label: "love symphony bloom box", category: "Produk", url: "/products/love-symphony-bloom-box", images: "https://outerbloom.com/cdn/shop/files/Love-Symphony-Bloom-Box_thumb.jpg?v=1701939722", price: "Rp 685.000" },{ label: "blue concerto", category: "Produk", url: "/products/blue-concerto", images: "https://outerbloom.com/cdn/shop/files/Blue-Concerto-WM_thumb.jpg?v=1723708248", price: "Rp 1.349.417" },{ label: "healing trove", category: "Produk", url: "/products/healing-trove", images: "https://outerbloom.com/cdn/shop/products/2ef5379f-27a6-41ba-85c7-c65cf3ec3f08_thumb.jpg?v=1571471845", price: "Rp 485.000" },{ label: "bellarosa bloom box", category: "Produk", url: "/products/bellarosa-bloom-box", images: "https://outerbloom.com/cdn/shop/files/OBVBUN1783_Bellarosa-Bloom-Box_c0000424-411c-48ed-abf4-0de7d925ea53_thumb.jpg?v=1757316757", price: "Rp 785.000" }, 13766 ]; 13767 13768 13769 $( ".header-input-search" ).catcomplete({ 13770 appendTo: ".searchResult",source: function(request, response) { 13771 var results = $.ui.autocomplete.filter(data, request.term); 13772 var predicate = function () { 13773 var counter = { Collection: 0, Produk: 0 }; 13774 var fn = function(item) {counter[item.category] += 1;return (counter[item.category] <= 5);} 13775 return fn 13776 }(); 13777 response(results.filter(predicate)); 13778 }, 13779 minLength:1, 13780 //results are clickable 13781 select: function( event, ui ) {window.location = ui.item.url;} 13782}); 13783$( ".header-input-search2" ).catcomplete({ 13784 appendTo: ".searchResult2", 13785 source: function(request, response) { 13786 var results = $.ui.autocomplete.filter(data, request.term); 13787 var predicate = function () { 13788 var counter = { Collection: 0, Produk: 0 }; 13789 var fn = function(item) { 13790 counter[item.category] += 1; 13791 return (counter[item.category] <= 5); 13792} 13793 return fn 13794 }(); 13795response(results.filter(predicate)); 13796}, 13797 minLength:1, 13798 //results are clickable 13799 select: function( event, ui ) { 13800 window.location = ui.item.url; 13801 } 13802}); 13803}); 13804</script>
13804 13805 13806
13806<script src="https://outerbloom.com/cdn/shop/t/138/assets/vendors.js?v=6349622868601634021752652419" defer></script>
vendor: 1 bytes, line 13806
13806
13807<script src="https://outerbloom.com/cdn/shop/t/138/assets/app.js?v=110161375600675176711769541235" defer></script>
13807 13808
13809<script> 13810 ( function() { 13811 var youtube = document.querySelectorAll( ".youtube" ); 13812 for (var i = 0; i < youtube.length; i++) { 13813 var source = "https://img.youtube.com/vi/"+ youtube[i].dataset.embed +"/sddefault_1x.jpg"; 13814 var datasource = "https://img.youtube.com/vi/"+ youtube[i].dataset.embed +"/sddefault.jpg"; 13815 var image = new Image(); 13816 image.src = source; 13817 image.setAttribute("data-src", datasource); 13818 image.classList.add("swiper-lazy"); 13819 image.addEventListener( "load", function() { 13820 youtube[ i ].appendChild( image ); 13821 }( i ) ); 13822 youtube[i].addEventListener( "click", function() { 13823 var iframe = document.createElement( "iframe" ); 13824 iframe.setAttribute( "width", "480" ); 13825 iframe.setAttribute( "height", "480" ); 13826 iframe.setAttribute( "frameborder", "0" ); 13827 iframe.setAttribute( "allowfullscreen", "" ); 13828 iframe.setAttribute( "src", "https://www.youtube.com/embed/"+ this.dataset.embed +"?rel=0&showinfo=0&autoplay=1" ); 13829 this.innerHTML = ""; 13830 this.appendChild( iframe ); 13831 } ); 13832 }; 13833 13834 } )(); 13835 13836 /* Lazy Load */ 13837 if (typeof mainLazyLoad === 'undefined') { 13838 var mainLazyLoad = new LazyLoad({threshold:400}); 13839 } 13840 $(document).ready(function(){ 13841 13842 $("selectxxx").addClass("needsclick"); 13843 FastClick.attach(document.body); 13844 13845 // Only initialize select2 on desktop screens (width > 992px) 13846 if ($(window).width() > 992) { 13847 var $customSelects = $('.select-search'); 13848 $customSelects.select2({ 13849 templateResult: function(result, container) { 13850 if (!result.id) { 13851 return result.text; 13852 } 13853 container.className += ' needsclick'; 13854 return result.text; 13855 } 13856 }); 13857 $customSelects.each(function(index, el){$(el).data('select2').$container.find('*').addClass('needsclick');}); 13858 $(document).on('select2:open', () => { 13859 document.querySelector('.select2-search__field').focus(); 13860 }); 13861 } 13862 13863 13864 $(".overlay").click(function(){ 13865 $(".js-drawer-close").click(); 13866 }); 13867 $(".site-nav--mobile .js-drawer-open-left, #NavDrawer .icon-close, .overlay-nav").click(function(){ 13868 $("html").toggleClass("nav_open"); 13869 }); 13870 13871 $('.swatch-element label').on('click', function(){ 13872 var srcImg = $(this).data('src'); 13873 $('#thumb-image-product .product-single__thumbnail').each(function(){ 13874 if ($(this).attr("href") == srcImg) { 13875 $(this).trigger('click'); 13876 } 13877 }); 13878 }); 13879 var defaultValue = $(".swatch input:checked").val() 13880 13881 $('#purchaseProduct .swatch [type=radio]').change(function() { 13882 var optionIndex = $(this).closest('.swatch').attr('data-option-index'); 13883 var optionValue = $(this).val(); 13884 console.log(optionIndex, optionValue) 13885 var value = parseInt(optionValue.split(' ')[0]) 13886 $(this) 13887 .closest('#purchaseProduct') 13888 .find('.single-option-selector') 13889 .eq(optionIndex) 13890 .val(optionValue) 13891 .trigger('change'); 13892 13893 }); 13894 13895 }); 13896 $(document).ready(function(){ 13897 $(".nav-search a").click(function(e){ 13898 e.preventDefault(); 13899 $(".icon-navsearch").toggle(); 13900 $(".icon-navclose").toggle(); 13901 $(".site-nav__item > .site-nav__link").toggle(); 13902 $(".open-search").toggle(); 13903 $(".open-search input").focus(); 13904 }); 13905 $(".best-price-guarantee").html("<img src='https://outerbloom.com/cdn/shop/t/138/assets/logo-best-price-guarantee-grid_75x.png?v=72489032173169839651752652420' alt='Logo Best Price Guarantee'>"); 13906 if ($(window).width() < 768) { 13907 $(".bg-products .label-tag.valentine").html("<img src='https://outerbloom.com/cdn/shop/t/138/assets/icon-valentine_30x.png?v=128458483378922561591768211980' alt='Icon Valentine'>"); 13908 $(".bg-products .label-tag.cny").html("<img src='https://outerbloom.com/cdn/shop/t/138/assets/icon-cny_45x.png?v=101884295148001743851752652418' alt='Icon CNY'>"); 13909 $(".bg-products .label-tag.free-valentine").html("<img src='https://outerbloom.com/cdn/shop/t/138/assets/free-valentine_150x.png?v=171641187769238175351752652421' alt='Icon Free Valentine'>"); 13910 } else { 13911 $(".bg-products .label-tag.valentine").html("<img src='https://outerbloom.com/cdn/shop/t/138/assets/icon-valentine_30x.png?v=128458483378922561591768211980' alt='Icon Valentine'>"); 13912 $(".bg-products .label-tag.cny").html("<img src='https://outerbloom.com/cdn/shop/t/138/assets/icon-cny_60x.png?v=101884295148001743851752652418' alt='Icon CNY'>"); 13913 $(".bg-products .label-tag.free-valentine").html("<img src='https://outerbloom.com/cdn/shop/t/138/assets/free-valentine_200x.png?v=171641187769238175351752652421' alt='Icon Free Valentine'>"); 13914 } 13915 $(".bg-products .label-tag.free-cookies").html("<img src='https://outerbloom.com/cdn/shop/t/138/assets/free-cookies_80x.png?v=57303' alt='Icon Free Cookies'>"); 13916 $(".bg-products .label-tag.mothersday").html("<img src='https://outerbloom.com/cdn/shop/t/138/assets/mothers-day_70x.png?v=171373711354766377891752652419' alt='Icon Mothers day'>"); 13917 }); 13918</script>
13918 13919 13920 13921
13921<script> 13922 /* Lazy Load */ 13923 if (typeof mainLazyLoad === 'undefined') { 13924 var mainLazyLoad = new LazyLoad({threshold:400}); 13925 } 13926 13927 // Function to initialize select2 when it's ready (only on desktop >992px) 13928 function initializeSelect2() { 13929 // Only initialize select2 on desktop screens (width > 992px) 13930 if ($(window).width() <= 992) { 13931 return; 13932 } 13933 13934 var $customSelects = $('.select-search'); 13935 13936 if ($customSelects.length > 0 && typeof $.fn.select2 !== 'undefined') { 13937 try { 13938 $customSelects.select2({ 13939 templateResult: function(result, container) { 13940 if (!result.id) { 13941 return result.text; 13942 } 13943 container.className += ' needsclick'; 13944 return result.text; 13945 } 13946 }); 13947 $customSelects.each(function(index, el){ 13948 $(el).data('select2').$container.find('*').addClass('needsclick'); 13949 }); 13950 console.log('Select2 initialized successfully'); 13951 } catch(e) { 13952 console.warn('Select2 initialization failed:', e); 13953 } 13954 } else if ($customSelects.length > 0) { 13955 // Retry after a short delay if select2 is not yet loaded 13956 setTimeout(initializeSelect2, 100); 13957 } 13958 } 13959 13960 $(document).ready(function(){ 13961 $("select").addClass("needsclick"); 13962 13963 if (typeof FastClick !== 'undefined') { 13964 FastClick.attach(document.body); 13965 } 13966 13967 // Initialize select2 with retry mechanism 13968 initializeSelect2(); 13969 13970 $(".overlay").click(function(){ 13971 $(".js-drawer-close").click(); 13972 }); 13973 $(".site-nav--mobile .js-drawer-open-left, #NavDrawer .icon-close, .overlay-nav").click(function(){ 13974 $("html").toggleClass("nav_open"); 13975 }); 13976 13977 // Wait for Shopify OptionSelectors to be initialized 13978 setTimeout(function() { 13979 // Remove any existing handlers first 13980 $('.swatch :radio').off('change.swatchHandler'); 13981 13982 // Attach new handler with namespace - use event delegation 13983 $(document).off('change.swatchHandler', '.swatch :radio'); 13984 $(document).on('change.swatchHandler', '.swatch :radio', function() { 13985 var optionIndex = $(this).closest('.swatch').attr('data-option-index'); 13986 var optionValue = $(this).val(); 13987 13988 // Find the corresponding single option selector 13989 var $selector = $('.single-option-selector[data-index="option' + (parseInt(optionIndex) + 1) + '"]'); 13990 13991 // If not found, try alternative selector 13992 if ($selector.length === 0) { 13993 $selector = $('#productSelect-option-' + optionIndex); 13994 } 13995 13996 // If still not found, try finding by position 13997 if ($selector.length === 0) { 13998 $selector = $('.single-option-selector').eq(optionIndex); 13999 } 14000 14001 if ($selector.length > 0) { 14002 $selector.val(optionValue).trigger('change'); 14003 } 14004 }); 14005 }, 300); 14006 14007 }); 14008 $(window).load(function(){ 14009 $(".best-price-guarantee").html("<img src='https://outerbloom.com/cdn/shop/t/138/assets/logo-best-price-guarantee-grid_65x.png?v=72489032173169839651752652420' alt='Logo Best Price Guarantee'>"); 14010 }); 14011</script>
14011 14012 14013 14014 14015 14016 14017 14018 14019 14020
14020<script type="text/javascript"> 14021 var wishlistpage = 0; 14022 14023 var quickShop_money_format="<span class='money'>"+"Rp {{amount_no_decimals}}"+"</span>"; 14024 </script>
14024 14025 14026 <!-- Remove duplicate wishlist.js reference --> 14027 <style> 14028 .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:999999;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.fade.in{opacity:1}.modal-open .modal{overflow-x:hidden;overflow-y:auto;z-index:999999;background-color:rgba(0,0,0,.3)}.modal-dialog{position:relative;width:auto;margin:10px}.wishlist-model .modal-dialog{width:700px}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.wishlist-model .modal-content{}.wishlist-model .modal-header{min-height:0;padding:0;border-bottom:0}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #121212;filter:alpha(opacity=20);opacity:.2}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-header .close{margin-top:-2px}.wishlist-model .close{position:absolute;top:-10px;right:-10px;background:#fff;opacity:1;width:30px;height:30px;font-size:15px;border-radius:50%;z-index:10;box-shadow:0 1px 4px 0 #121212}.wishlist-model .close .icon-close{width:25px;height:25px}.modal-body{position:relative;padding:15px}.wishlist-model .modal-body{padding:0 30px;display:flex}.wishlist-model .wishlist-left{width:66.67%;border-right:1px solid #ccc;padding:30px 0}.wishlist-model .wishlist-note{position:relative;display:inline-block;margin-bottom:20px;margin-left:35px;border-bottom:1px solid #121212;color:#121212}.wishlist-model .wishlist-note a{color: #212121;}.wishlist-model .wishlist-note .cirle{position:absolute;top:-4px;left:-35px;width:25px;height:25px;color:#fff;background:#121212;line-height:25px;border-radius:50%;text-align:center}.wishlist-model .wishlist-note svg{fill:#fff}.wishlist-model .wishlist-note .cirle .icon-check{vertical-align:middle}.wishlist-model .product-left{width:33.33%;float:left;margin-right:30px}.wishlist-model .wishlist-image{overflow:hidden}.wishlist-model .wishlist-image img{transition:all .3s linear}.wishlist-model .wishlist-name{padding:0;margin-bottom:10px}.wishlist-model .wishlist-name a{color: #212121;}.wishlist-model .wishlist-price{margin-bottom:10px}.wishlist-model .wishlist-price .price{font-weight:700;margin-right:10px;font-size:15px}.wishlist-model .wishlist-price .price_compare{color:#ccc}.wishlist-model .wishlist-right{width:33.33%;padding:30px 0;padding-left:30px}.wishlist-model .btn-quick-shop{width:100%;border-color:#121212;background:#fff;color:#121212;padding:0 30px;transition:all .2s linear;height:36px;margin-bottom:10px;text-transform:uppercase}.wishlist-model .btn-cta{width:100%;font-size:1em;border-color:#212121;background:#212121;color:#fff;padding:0;transition:all .2s linear;height:36px;line-height:36px;margin-bottom:10px}.wishlist-model .quantity-content{text-align:center}.wishlist-model .quantity-content input{outline:none;text-align:center;font-weight:600;border:1px solid #121212}.wishlist-model .quantity-content button{border-color:#121212}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}} 14029</style> 14030 14031<div class="modal fade" id="modalwishlist0" tabindex="-1" role="dialog"> 14032 <div class="modal-dialog" role="document"> 14033 <div class="modal-content"> 14034 <div class="modal-body">Your Wishlist is empty!</div> 14035 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> 14036 </div> 14037 </div> 14038</div> 14039 14040<div class="wishlist-model"> 14041 <div class="modal fade" id="modalwishlist1" tabindex="-1" role="dialog" aria-hidden="true"> 14042 <div class="modal-dialog white-modal"> 14043 <div class="modal-content"> 14044 <div class="modal-header"> 14045 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 14046 <svg class="icon icon-close" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 14047<title>icon-close</title> 14048<path d="M16.943 16l8.862 8.862c0.26 0.26 0.26 0.682 0 0.943s-0.682 0.26-0.943 0l-8.862-8.862-8.862 8.862c-0.26 0.26-0.682 0.26-0.943 0s-0.26-0.682 0-0.943l8.862-8.862-8.862-8.862c-0.26-0.26-0.26-0.682 0-0.943s0.682-0.26 0.943 0l8.862 8.862 8.862-8.862c0.26-0.26 0.682-0.26 0.943 0s0.26 0.682 0 0.943l-8.862 8.862z"></path> 14049</svg> 14050 </button> 14051 </div> 14052 <div class="modal-body"> 14053 <div class="wishlist-left"> 14054 <div class="wishlist-note">
14055 <span class="cirle"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> 14056<title>icon-check</title> 14057<path d="M12 21.766l14.218-12.926c0.272-0.248 0.694-0.228 0.942 0.045s0.228 0.694-0.045 0.942l-14.667 13.333c-0.254 0.231-0.643 0.231-0.897 0l-6.667-6.061c-0.272-0.248-0.293-0.669-0.045-0.942s0.669-0.293 0.942-0.045l6.218 5.653z"></path> 14058</svg></span> 14059 Product added to <a href="/pages/wish-list">Wishlist</a> 14060 </div> 14061 <div class="wishlist-product"> 14062 <div class="product-left"> 14063 <div class="wishlist-image"></div> 14064 </div> 14065 <div class="product-right"> 14066 <div class="wishlist-name"></div> 14067 <div class="wishlist-price"></div> 14068 </div> 14069 </div> 14070 </div> 14071 <div class="wishlist-right"> 14072 <div class="wishlist-cart"> 14073 <form action="/cart/add" method="post" class="variants-form variants" id="AddToCartForm" enctype="multipart/form-data"> 14074 <div class="others-bottom"> 14075 <a class="btn btn-quick-shop" href="/pages/wish-list">View Wishlist</a> 14076 <button type="submit" name="add" id="AddToCart" class="btn btn-cta"> 14077 <span id="AddToCartText" class="">Beli Sekarang</span> 14078 </button> 14079 </div> 14080 <div id="wishlist-variants-container" class="variants-wrapper"></div> 14081 <div class="quantity-content"> 14082 <label>QTY</label> 14083 <input type="number" size="5" class="" name="quantity" value="1" /> 14084 </div> 14085 </form> 14086 </div> 14087 </div> 14088 </div> 14089 </div> 14090 </div> 14091 </div> 14092</div> 14093 14094 14095 14096 14097 14098 14099
14099<script type="application/ld+json"> 14100 { 14101 "@context": "http://schema.org/", 14102 "@type": "Product", 14103 "url": "https://atas4d.biz/", 14104 "name": "ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap", 14105 "image": "https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp", 14106 "description": "<ul> 14107<li> 14108<strong>ATAS4D</strong><br><strong></strong><strong></strong> 14109</li> 14110<li> 14111<strong>TOGEL</strong><br> 14112</li> 14113<li><strong>TOTO</strong></li> 14114</ul> 14115<p>ATAS4D adalah platform game togel toto macau 4D terbaik dengan fitur lengkap, akses cepat, pasaran terpercaya, dan peluang kemenangan menarik setiap hari.</p> 14116<p><img src="https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" alt=""></p> 14117<table style="width: 100.091%;" width="100%"> 14118<tbody> 14119<tr> 14120<td style="width: 33.7327%;">SKU</td> 14121<td style="width: 65.9908%;">[C]ATAS4D<br>[C]OBIPCL1004-CNY2026<br> 14122</td> 14123</tr> 14124<tr> 14125<td style="width: 33.7327%;">Isi</td> 14126<td style="width: 65.9908%;">link login situs toto togel 4D<br>toto4d resmi terpercaya 2026<br>bandar toto macau gacor<br>situs toto4d togel macau<br>toto4d togel macau gacor<br>situs toto togel macau<br>toto togel 4D<br> 14127</td> 14128</tr> 14129</tbody> 14130</table>", 14131 "brand": { 14132 "name": "ATAS4D" 14133 }, 14134 "sku": "[C]ATAS4D", 14135 "mpn": "[C]ATAS4D", 14136 "offers": { 14137 "@type": "Offer", 14138 "priceCurrency": "IDR", 14139 "price": "1885000", 14140 "availability": "http://schema.org/InStock", 14141 "seller": { 14142 "@type": "Organization", 14143 "name": "ATAS4D" 14144 }, 14145 "url": "https://atas4d.biz/" 14146 } 14147 14148 } 14149 </script>
vendor: 1 bytes, line 14149
14149
14150<script type="application/ld+json"> 14151{ 14152 "@context": "https://schema.org", 14153 "@type": "VideoObject", 14154 "name": "ATAS4D - Platform Game Togel Toto Macau 4D Terbaik Dengan Fitur Lengkap", 14155 "description": "ATAS4D adalah platform game togel toto macau 4D terbaik dengan fitur lengkap, akses cepat, pasaran terpercaya, dan peluang kemenangan menarik setiap hari.", 14156 "thumbnailUrl": "https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp", 14157 "uploadDate": "2025-02-15", 14158 "duration": "PT45S", 14159 "contentUrl": "https://atas4d.biz/images/game-online.mp4", 14160 "embedUrl": "https://atas4d.biz/images/game-online.mp4", 14161 "publisher": { 14162 "@type": "Organization", 14163 "name": "ATAS4D", 14164 "logo": { 14165 "@type": "ImageObject", 14166 "url": "https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp" 14167 }, 14168 "url": "https://atas4d.biz/" 14169 }, 14170 "keywords": [ 14171 "ATAS4D", 14172 "ATAS 4D", 14173 "ATAS4D LOGIN", 14174 "TOGEL MACAu", 14175 "TOTO MACAU", 14176 "TOTO MACAu 4D" 14177 ], 14178 "genre": "Entertainment", 14179 "inLanguage": "id-ID", 14180 "interactionStatistic": { 14181 "@type": "InteractionCounter", 14182 "interactionType": { 14183 "@type": "WatchAction" 14184 }, 14185 "userInteractionCount": 125000 14186 }, 14187 "isFamilyFriendly": true, 14188 "width": 1920, 14189 "height": 1080, 14190 "encodingFormat": "video/mp4" 14191} 14192</script>
14192 14193
14193<script type="application/ld+json"> 14194 { 14195 "@context": "https://schema.org", 14196 "@type": "BreadcrumbList", 14197 "name": "ATAS4D", 14198 "description": "ATAS4D adalah platform game togel toto macau 4D terbaik dengan fitur lengkap, akses cepat, pasaran terpercaya, dan peluang kemenangan menarik setiap hari.", 14199 "itemListElement": [ 14200 { 14201 "@type": "ListItem", 14202 "position": 1, 14203 "name": "Home", 14204 "item": "https://atas4d.biz/" 14205 }, 14206 { 14207 "@type": "ListItem", 14208 "position": 2, 14209 "name": "ATAS4D", 14210 "item": "https://atas4d.biz/" 14211 }, 14212 { 14213 "@type": "ListItem", 14214 "position": 3, 14215 "name": "ATAS 4D", 14216 "item": "https://atas4d.biz/" 14217 }, 14218 { 14219 "@type": "ListItem", 14220 "position": 4, 14221 "name": "ATAS4D LOGIN", 14222 "item": "https://atas4d.biz/" 14223 }, 14224 { 14225 "@type": "ListItem", 14226 "position": 5, 14227 "name": "TOGEL MACAU", 14228 "item": "https://atas4d.biz/" 14229 }, 14230 { 14231 "@type": "ListItem", 14232 "position": 6, 14233 "name": "TOTO MACAU", 14234 "item": "https://atas4d.biz/" 14235 }, 14236 { 14237 "@type": "ListItem", 14238 "position": 7, 14239 "name": "TOTO MACAU 4D", 14240 "item": "https://atas4d.biz/" 14241 } 14242 ] 14243} 14244</script>
14244 14245 14246 <style> 14247 .stamped-badge[data-rating="0.0"]{display: none !Important;} 14248 14249 div[data-load-type="continue"] ul.stamped-pagination li.next a, div[data-widget-load-type="continue"] ul.stamped-pagination li.next a { 14250 border-radius: 0px; 14251 } 14252 .stamped-review-body { 14253 padding-left: 0px !important; 14254 } 14255 #product-reviews .stamped-header:after { 14256 display:none !Important; 14257 } 14258 #stamped-main-widget .stamped-container, .stamped-badge-caption,#stamped-reviews-widget { 14259 font-family:inherit !important; 14260 } 14261 </style> 14262 14263 14264 14265
14265<script src="https://outerbloom.com/cdn/shop/t/138/assets/variant-sku-handler.js?v=91239063692820757781752652418" defer></script>
14265 14266 14267 <!-- Wishlist API Configuration --> 14268
14268<script> 14269 window.WISHLIST_API_URL = 'https://app.asmaraku.com'; // Change to production URL 14270 14271 // Initialize Shopify object BEFORE wishlist-manager loads 14272 window.Shopify = window.Shopify || {}; 14273 14274 // Set shop domain - try multiple methods to ensure it's set 14275 const shopDomain = ''; 14276 14277 if (shopDomain && shopDomain.trim()) { 14278 window.Shopify.shop = shopDomain.trim(); 14279 } else { 14280 // Fallback: try to get from shop.domain or hardcode 14281 const shopDomain2 = 'outerbloom.com'; 14282 if (shopDomain2 && shopDomain2.trim()) { 14283 window.Shopify.shop = shopDomain2.trim(); 14284 } else { 14285 // Manual fallback - set your shop domain here 14286 window.Shopify.shop = 'outerbloom1.myshopify.com'; // TODO: Change this to your actual shop domain 14287 } 14288 } 14289 14290 14291 console.log('[Wishlist Setup] No customer logged in'); 14292 14293 </script>
14293 14294 14295 <!-- Wishlist Manager - New API Integration (load AFTER customer data) --> 14296
14296<script src="https://outerbloom.com/cdn/shop/t/138/assets/wishlist-manager.js?v=119203892983812840831770794810"></script>
14296 14297 14298
14298<script> 14299 function myInit(){ StampedFn.init({ apiKey: 'pubkey-hCS8DHE9QbBHhHN89WXFkuJ0Y3422D', sId: '23462' }); } 14300 </script>
14300 14301
14301<script async onload="myInit()" type="text/javascript" src="https://cdn1.stamped.io/files/widget.min.js"></script>
14301<style> 14302 .jss59 { 14303 background-color: rgba(0, 0, 0, 0.6); 14304 } 14305 .MuiBackdrop-root { 14306 top: 0; 14307 left: 0; 14308 right: 0; 14309 bottom: 0; 14310 display: flex; 14311 z-index: -1; 14312 position: fixed; 14313 align-items: center; 14314 justify-content: center; 14315 background-color: rgba(0, 0, 0, 0.5); 14316 -webkit-tap-highlight-color: transparent; 14317 } 14318 .MuiDialog-scrollPaper { 14319 display: flex; 14320 align-items: center; 14321 justify-content: center; 14322 } 14323 .MuiDialog-container { 14324 height: 100%; 14325 outline: 0; 14326 } 14327 .MuiPaper-elevation24 { 14328 box-shadow: 0px 11px 15px -7px rgba(0,0,0,0.2), 0px 24px 38px 3px rgba(0,0,0,0.14), 0px 9px 46px 8px rgba(0,0,0,0.12); 14329 } 14330 .MuiDialog-paper { 14331 margin: 32px; 14332 position: relative; 14333 overflow-y: auto; 14334 } 14335 .MuiDialog-paperScrollPaper { 14336 display: flex; 14337 max-height: calc(100% - 64px); 14338 flex-direction: column; 14339 } 14340 .MuiDialog-paperWidthSm { 14341 max-width: 600px; 14342 } 14343 #location-lock-dialog { 14344 top: 20%; 14345 left: 0; 14346 right: 0; 14347 width: 30%; 14348 margin: 0px auto; 14349 display: block; 14350 padding: 30px; 14351 z-index: 99999; 14352 position: fixed; 14353 font-size: 14px; 14354 background: rgb(255, 255, 255); 14355 box-shadow: rgba(11, 11, 12, 0.2) 2px 4px 5px 0px; 14356 text-align: center; 14357 font-family: Roboto, Arial, sans-serif; 14358 line-height: 1; 14359 border-radius: 8px; 14360 -webkit-font-smoothing: subpixel-antialiased; 14361 } 14362 .MuiButtonBase-root { 14363 color: inherit; 14364 border: 0; 14365 cursor: pointer; 14366 margin: 0; 14367 display: inline-flex; 14368 outline: 0; 14369 padding: 0; 14370 position: relative; 14371 align-items: center; 14372 user-select: none; 14373 border-radius: 0; 14374 vertical-align: middle; 14375 -moz-appearance: none; 14376 justify-content: center; 14377 text-decoration: none; 14378 background-color: transparent; 14379 -webkit-appearance: none; 14380 -webkit-tap-highlight-color: transparent; 14381 } 14382 .MuiIconButton-root { 14383 flex: 0 0 auto; 14384 color: rgba(0, 0, 0, 0.54); 14385 padding: 12px; 14386 overflow: visible; 14387 font-size: 1.5rem; 14388 text-align: center; 14389 transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; 14390 border-radius: 50%; 14391 } 14392 .MuiIconButton-label { 14393 width: 100%; 14394 display: flex; 14395 align-items: inherit; 14396 justify-content: inherit; 14397 } 14398 .MuiSvgIcon-root { 14399 fill: currentColor; 14400 width: 1em; 14401 height: 1em; 14402 display: inline-block; 14403 font-size: 1.5rem; 14404 transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; 14405 flex-shrink: 0; 14406 user-select: none; 14407 } 14408 .MuiTouchRipple-root { 14409 top: 0; 14410 left: 0; 14411 right: 0; 14412 bottom: 0; 14413 z-index: 0; 14414 overflow: hidden; 14415 position: absolute; 14416 border-radius: inherit; 14417 pointer-events: none; 14418 } 14419 .jss36 { 14420 color: #222222; 14421 font-size: 24px; 14422 font-family: Roboto, Arial, sans-serif; 14423 font-weight: 500; 14424 } 14425 .jss37 { 14426 color: #555555; 14427 padding: 10px 0px 0px; 14428 font-size: 14px; 14429 } 14430 .MuiFormGroup-root { 14431 display: flex; 14432 flex-wrap: wrap; 14433 flex-direction: column; 14434 } 14435 .MuiFormGroup-row { 14436 flex-direction: row; 14437 } 14438 .jss63 { 14439 width: 85%; 14440 margin: 15px auto; 14441 display: flex; 14442 padding: 11px 0px 0px; 14443 justify-content: space-evenly; 14444 } 14445 .MuiFormControlLabel-root { 14446 cursor: pointer; 14447 display: inline-flex; 14448 align-items: center; 14449 margin-left: -11px; 14450 margin-right: 16px; 14451 vertical-align: middle; 14452 -webkit-tap-highlight-color: transparent; 14453 } 14454 .jss70 { 14455 margin: 0; 14456 } 14457 .MuiButtonBase-root { 14458 color: inherit; 14459 border: 0; 14460 cursor: pointer; 14461 margin: 0; 14462 display: inline-flex; 14463 outline: 0; 14464 padding: 0; 14465 position: relative; 14466 align-items: center; 14467 user-select: none; 14468 border-radius: 0; 14469 vertical-align: middle; 14470 -moz-appearance: none; 14471 justify-content: center; 14472 text-decoration: none; 14473 background-color: transparent; 14474 -webkit-appearance: none; 14475 -webkit-tap-highlight-color: transparent; 14476 } 14477 .MuiIconButton-root { 14478 flex: 0 0 auto; 14479 color: rgba(0, 0, 0, 0.54); 14480 padding: 12px; 14481 overflow: visible; 14482 font-size: 1.5rem; 14483 text-align: center; 14484 transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; 14485 border-radius: 50%; 14486 } 14487 .MuiIconButton-colorSecondary { 14488 color: #f50057; 14489 } 14490 .jss71 { 14491 padding: 9px; 14492 } 14493 .MuiRadio-root { 14494 color: rgba(0, 0, 0, 0.54); 14495 } 14496 .jss64 { 14497 padding: 2px; 14498 } 14499 .MuiRadio-colorSecondary.Mui-checked { 14500 color: #f50057; 14501 } 14502 .MuiIconButton-label { 14503 width: 100%; 14504 display: flex; 14505 align-items: inherit; 14506 justify-content: inherit; 14507 } 14508 .MuiTypography-root { 14509 margin: 0; 14510 } 14511 .MuiTypography-body1 { 14512 font-size: 18px; 14513 font-family: Roboto,sans-serif; 14514 font-weight: 400; 14515 line-height: 1.5; 14516 } 14517 .location-popup_area-block__sp9Ws { 14518 display: -moz-box; 14519 display: flex; 14520 -moz-box-orient: vertical; 14521 -moz-box-direction: normal; 14522 flex-direction: column; 14523 -moz-box-pack: center; 14524 justify-content: center; 14525 position: relative; 14526 margin: 10px 10% 0; 14527 } 14528 .location-popup_pin-search-box__3l5mJ { 14529 width: 100%; 14530 display: -moz-box; 14531 display: flex; 14532 -moz-box-align: center;
14533 align-items: center; 14534 } 14535 .location-popup_place-icon-city__1XAX5, .location-popup_place-icon__jSG0Q { 14536 position: absolute; 14537 z-index: 999; 14538 } 14539 .location-popup_place-icon__jSG0Q { 14540 color: #212121; 14541 padding-left: 8px; 14542 } 14543 .location-popup_place-icon__jSG0Q svg { 14544 width: 18px; 14545 height: 18px; 14546 } 14547 .location-popup_cancel-icon__FHujU { 14548 color: #fff; 14549 right: 10px; 14550 width: 16px; 14551 cursor: pointer; 14552 height: 16px; 14553 display: none; 14554 padding: 5px; 14555 position: absolute; 14556 background: #999; 14557 text-align: center; 14558 border-radius: 50%; 14559 } 14560 .location-popup_pin-search-box__3l5mJ>div>select { 14561/* -webkit-box-shadow: 0 0 10px #212121; 14562 box-shadow: 0 0 10px #212121; */ 14563 text-transform: capitalize; 14564 border: 1px solid #212121; 14565 color: #212121; 14566 width: 100%; 14567 margin: 0; 14568 display: -moz-box; 14569 display: flex; 14570 padding: 0 30px; 14571 -webkit-animation: location-popup_focuses__1I8Gj 1.5s ease-in-out infinite; 14572 -moz-animation: location-popup_focuses__1I8Gj 1.5s ease-in-out infinite; 14573 animation: location-popup_focuses__1I8Gj 1.5s ease-in-out infinite; 14574 font-size: 16px; 14575 border-radius: 4px; 14576 height: 44px; 14577 moz-animation: location-popup_focuses__1I8Gj ease-in-out 1.5s infinite; 14578 webkit-animation: location-popup_focuses__1I8Gj ease-in-out 1.5s infinite; 14579 } 14580 .MuiButtonBase-root { 14581 color: inherit; 14582 border: 0; 14583 cursor: pointer; 14584 margin: 0; 14585 display: inline-flex; 14586 outline: 0; 14587 padding: 0; 14588 position: relative; 14589 align-items: center; 14590 user-select: none; 14591 border-radius: 0; 14592 vertical-align: middle; 14593 -moz-appearance: none; 14594 justify-content: center; 14595 text-decoration: none; 14596 background-color: transparent; 14597 -webkit-appearance: none; 14598 -webkit-tap-highlight-color: transparent; 14599 } 14600 .MuiButton-root { 14601 color: rgba(0, 0, 0, 0.87); 14602 padding: 6px 16px; 14603 font-size: 0.875rem; 14604 min-width: 64px; 14605 box-sizing: border-box; 14606 transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; 14607 font-family: Roboto,sans-serif; 14608 font-weight: 500; 14609 line-height: 1.75; 14610 border-radius: 4px; 14611 text-transform: uppercase; 14612 } 14613 .MuiButton-contained { 14614 color: rgba(0, 0, 0, 0.87); 14615 box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2), 0px 2px 2px 0px rgba(0,0,0,0.14), 0px 1px 5px 0px rgba(0,0,0,0.12); 14616 background-color: #e0e0e0; 14617 } 14618 .MuiButtonBase-root.Mui-disabled { 14619 cursor: default; 14620 pointer-events: none; 14621 } 14622 .MuiButton-label { 14623 width: 100%; 14624 display: inherit; 14625 align-items: inherit; 14626 justify-content: inherit; 14627 } 14628 .cartButton_login_content__2j1f7 { 14629 display: -moz-box; 14630 display: flex; 14631 text-align: center; 14632 z-index: 9; 14633 font-size: 18px; 14634 font-weight: 500; 14635 color: #fff; 14636 } 14637 14638 .jss35 { 14639 top: 5px; 14640 right: 5px; 14641 padding: 4px; 14642 position: absolute; 14643 border-radius: 50%; 14644 } 14645 .jss67 { 14646 cursor: pointer; 14647 font-size: 15px; 14648 line-height: 1.3; 14649 padding-left: 5px; 14650 } 14651 .jss69 { 14652 color: #222222; 14653 } 14654 .jss80 { 14655 color: #fff; 14656 width: 100%; 14657 height: 52px; 14658 padding: 11px 16px; 14659 font-size: 18px; 14660 min-width: 88px; 14661 min-height: 36px; 14662 transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; 14663 font-weight: 500; 14664 line-weight: 1em; 14665 border-radius: 4px; 14666 text-transform: uppercase; 14667 background-color: #E87325; 14668 } 14669 @media (min-width: 991px){ 14670 .cartButton_login_content__2j1f7 { 14671 font-weight: 500; 14672 } 14673 } 14674 14675 @media (max-width: 992px) { 14676 #location-lock-dialog { 14677 width: 100%; 14678 top: auto; 14679 bottom: 0; 14680 padding-left: 0; 14681 padding-right: 0; 14682 } 14683 .MuiFormGroup-row { 14684 display: block 14685 } 14686 .MuiIconButton-label input { 14687 margin: 0; 14688 } 14689 } 14690</style> 14691<div role="presentation" class="MuiDialog-root jss34" style="display: none;position: fixed; z-index: 9999; inset: 0px;"> 14692 <div class="MuiBackdrop-root" aria-hidden="true" style="opacity: 1; transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;"></div> 14693 <div tabindex="0" data-test="sentinelStart"></div> 14694 <div class="MuiDialog-container MuiDialog-scrollPaper" role="none presentation" tabindex="-1" style="opacity: 1; transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;"> 14695 <div class="MuiPaper-root MuiDialog-paper MuiDialog-paperScrollPaper MuiDialog-paperWidthSm MuiPaper-elevation24 MuiPaper-rounded" role="dialog"> 14696 <div class="jss31 undefined" id="location-lock-dialog"> 14697 <button id="close-popup-delivery" class="MuiButtonBase-root MuiIconButton-root jss35" tabindex="0" type="button" aria-label="close">
14698 <span class="MuiIconButton-label"> 14699 <svg class="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" aria-hidden="true"> 14700 <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path> 14701 </svg> 14702 </span> 14703 <span class="MuiTouchRipple-root"></span> 14704 </button> 14705 <div> 14706 <div class="jss36">Select Delivery Location</div> 14707 <div class="jss37">Select a delivery location to see product availability</div> 14708 </div> 14709 <div class="MuiFormGroup-root jss63 MuiFormGroup-row" role="radiogroup"> 14710 <label for="jabodetabek" class="MuiFormControlLabel-root jss45"> 14711 <span class="MuiButtonBase-root MuiIconButton-root jss46 MuiRadio-root MuiRadio-colorSecondary jss39 jss47 Mui-checked MuiIconButton-colorSecondary" aria-disabled="false"> 14712 <span class="MuiIconButton-label"> 14713 <input id="jabodetabek" class="jss49" type="radio" value="Jabodetabek" checked="" name="location"> 14714 <span class="jss41"></span> 14715 </span> 14716 <span class="MuiTouchRipple-root"></span> 14717 </span> 14718 <span class="MuiTypography-root MuiFormControlLabel-label MuiTypography-body1"> 14719 <span class="jss67 jss69">Jabodetabek</span> 14720 </span> 14721 </label> 14722 <label for="non-jabodetabek" class="MuiFormControlLabel-root jss45"> 14723 <span class="MuiButtonBase-root MuiIconButton-root jss46 MuiRadio-root MuiRadio-colorSecondary jss39 MuiIconButton-colorSecondary" aria-disabled="false"> 14724 <span class="MuiIconButton-label"> 14725 <input id="non-jabodetabek" class="jss49" type="radio" value="Outside Jabodetabek" name="location"> 14726 <span class="jss40"></span> 14727 </span> 14728 <span class="MuiTouchRipple-root"></span> 14729 </span> 14730 <span class="MuiTypography-root MuiFormControlLabel-label MuiTypography-body1"> 14731 <span class="jss67 jss68">Outside Jabodetabek</span> 14732 </span> 14733 </label> 14734 </div> 14735 <div> 14736 <div class="MuiGrid-root location-popup_area-block__sp9Ws"> 14737 <div class="MuiGrid-root location-popup_pin-search-box__3l5mJ false"> 14738 <div class="MuiGrid-root location-popup_place-icon__jSG0Q"> 14739 <svg class="MuiSvgIcon-root jss6" focusable="false" viewBox="0 0 24 24" aria-hidden="true" style="font-size:16px"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"></path></svg> 14740 </div> 14741 <div class="MuiGrid-root location-popup_cancel-icon__FHujU false"> 14742 <i class="material-icons location-popup_clear-pin__s1dRc">close</i> 14743 </div> 14744 <div style="width: 100%;"> 14745 <select id="choose-location" class="form-control"> 14746 <option value="">Choose Location</option> 14747 <option value="jakarta">Jakarta</option> 14748 <option value="bogor">Bogor</option> 14749 <option value="depok">Depok</option> 14750 <option value="tangerang">Tangerang</option> 14751 <option value="bekasi">Bekasi</option> 14752 </select> 14753 </div> 14754 </div> 14755 </div> 14756 </div> 14757 <button class="MuiButtonBase-root MuiButton-root MuiButton-contained jss55" tabindex="-1" type="button" title="" id="location-lock-submit" data-idforcdp="actionBtn-cdp" data-testid="location-lock-submit" style="background-color: #212121; width: 80%; padding: 14px 0px 12px; margin: 20px 0px; font-size: 18px; font-weight: 500; box-shadow: rgba(0, 0, 0, 0.1) 0px 2px 4px 0px; border-radius: 4px; color: rgb(255, 255, 255); height: 44px;" data-content=""> 14758 <span class="MuiButton-label"> 14759 <span class=""></span> 14760 <span id="location-lock-continue-btn" class="cartButton_login_content__2j1f7" style="font-weight: 500;" data-content="">Continue Shopping</span> 14761 </span> 14762 </button> 14763 </div> 14764 </div> 14765 </div> 14766 <div tabindex="0" data-test="sentinelEnd"></div> 14767</div> 14768
14769<script> 14770 const jabodetabek = [ 14771 { 14772 "code": "jakarta", 14773 "city": "jakarta", 14774 "zip": [] 14775 }, 14776 { 14777 "code": "bogor", 14778 "city": "bogor", 14779 "zip": [] 14780 }, 14781 { 14782 "code": "depok", 14783 "city": "depok", 14784 "zip": [] 14785 }, 14786 { 14787 "code": "tangerang", 14788 "city": "tangerang", 14789 "zip": [] 14790 }, 14791 { 14792 "code": "bekasi", 14793 "city": "bekasi", 14794 "zip": [] 14795 } 14796 ] 14797 let cityNonJabodetabek = [ 14798 14799 14800 14801 14802 14803 14804 14805 14806 14807 14808 14809 14810 14811 14812 14813 14814 14815 14816 14817 14818 14819 14820 14821 14822 14823 14824 14825 14826 14827 14828 14829 14830 14831 14832 14833 14834 14835 14836 14837 14838 14839 14840 14841 14842 14843 14844 14845 14846 14847 14848 14849 14850 14851 14852 14853 14854 14855 14856 14857 14858 14859 14860 14861 14862 14863 14864 14865 14866 14867 14868 14869 14870 14871 14872 14873 14874 14875 14876 14877 14878 14879 14880 14881 14882 14883 14884 14885 14886 14887 14888 14889 14890 14891 14892 14893 14894 14895 14896 14897 14898 14899 14900 14901 14902 14903 14904 14905 14906 14907 14908 14909 14910 14911 14912 14913 14914 14915 14916 14917 14918 14919 14920 14921 14922 14923 14924 14925 14926 14927 14928 14929 14930 14931 14932 14933 14934 14935 14936 14937 14938 14939 14940 14941 14942 14943 14944 14945 14946 14947 14948 14949 14950 14951 14952 14953 14954 14955 14956 14957 14958 14959 14960 14961 14962 14963 14964 14965 14966 14967 14968 14969 14970 14971 14972 14973 14974 14975 14976 14977 14978 14979 14980 14981 14982 14983 14984 14985 14986 14987 14988 14989 14990 14991 14992 14993 14994 14995 14996 14997 14998 14999 15000 15001 15002 15003 15004 15005 15006 15007 15008 15009 15010 15011 15012 15013 15014 15015 15016 15017 15018 15019 15020 15021 15022 15023 15024 15025 15026 15027 15028 15029 15030 15031 15032 15033 15034 15035 15036 15037 15038 15039 15040 15041 15042 15043 15044 15045 15046 15047 15048 15049 15050 15051 15052 15053 15054 15055 15056 15057 15058 15059 15060 15061 15062 15063 15064 15065 15066 15067 15068 15069 15070 15071 15072 15073 15074 15075 15076 15077 15078 15079 15080 15081 15082 15083 15084 15085 15086 15087 15088 15089 15090 15091 15092 15093 15094 15095 15096 15097 15098 15099 15100 15101 15102 15103 15104 15105 15106 15107 15108 15109 15110 15111 15112 15113 15114 15115 15116 15117 15118 15119 15120 15121 15122 15123 15124 15125 15126 15127 15128 15129 15130 15131 15132 15133 15134 15135 15136 15137 15138 15139 15140 15141 15142 15143 15144 15145 15146 15147 15148 15149 15150 15151 15152 15153 15154 15155 15156 15157 15158 15159 15160 15161 15162 15163 15164 15165 15166 15167 15168 15169 15170 15171 15172 15173 15174 15175 15176 15177 15178 15179 15180 15181 15182 15183 15184 15185 15186 15187 15188 15189 15190 15191 15192 15193 15194 15195 15196 15197 15198 15199 15200 15201 15202 15203 15204 15205 15206 15207 15208 15209 15210 15211 15212 15213 15214 15215 15216 15217 15218 15219 15220 15221 15222 15223 15224 15225 15226 15227 15228 15229 15230 15231 15232 15233 15234 15235 15236 15237 15238 15239 15240 15241 15242 15243 15244 15245 15246 15247 15248 15249 15250 15251 15252 15253 15254 15255 15256 15257 15258 15259 15260 15261 15262 15263 15264 15265 15266 15267 15268 15269 15270 15271 15272 15273 15274 15275 15276 15277 15278 15279 15280 15281 15282 15283 15284 15285 15286 15287 15288 15289 15290 15291 15292 15293 15294 15295 15296 15297 15298 15299 15300 15301 15302 15303 15304 15305 15306 15307 15308 15309 15310 15311 15312 15313 15314 15315 15316 15317 15318 15319 15320 15321 15322 15323 15324 15325 15326 15327 15328 15329 15330 15331 15332 15333 15334 15335 15336 15337 15338 15339 15340 15341 15342 15343 15344 15345 15346 15347 15348 15349 15350 15351 15352 15353 15354 15355 15356 15357 15358 15359 15360 15361 15362 15363 15364 15365 15366 15367 15368 15369 15370 15371 15372 15373 15374 15375 15376 15377 15378 15379 15380 15381 15382 15383 15384 15385 15386 15387 15388 15389 15390 15391 15392 15393 15394 15395 15396 15397 15398 15399 15400 15401 15402 15403 15404 15405 15406 15407 15408 15409 15410 15411 15412 15413 15414 15415 15416 15417 15418 15419 15420 15421 15422 15423 15424 15425 15426 15427 15428 15429 15430 15431 15432 15433 15434 15435 15436 15437 15438 15439 15440 15441 15442 15443 15444 15445 15446 15447 15448 15449 15450 15451 15452 15453 15454 15455 15456 15457 15458 15459 15460 15461 15462 15463 15464 15465 15466 15467 15468 15469 15470 15471 15472 15473 15474 15475 15476 15477 15478 15479 15480 15481 15482 15483 15484 15485 15486 15487 15488 15489 15490 15491 15492 15493 15494 15495 15496 15497 15498 15499 15500 15501 15502 15503 15504 15505 15506 15507 15508 15509 15510 15511 15512 15513 15514 15515 15516 15517 15518 15519 15520 15521 15522 15523 15524 15525 15526 15527 15528 15529 15530 15531 15532 15533 15534 15535 15536 15537 15538 15539 15540 15541 15542 15543 15544 15545 15546 15547 15548 15549 15550 15551 15552 15553 15554 15555 15556 15557 15558 15559 15560 15561 15562 15563 15564 15565 15566 15567 15568 15569 15570 15571 15572 15573 15574 15575 15576 15577 15578 15579 15580 15581 15582 15583 15584 15585 15586 15587 15588 15589 15590 15591 15592 15593 15594 15595 15596 15597 15598 15599 15600 15601 15602 15603 15604 15605 15606 15607 15608 15609 15610 15611 15612 15613 15614 15615 15616 15617 15618 15619 15620 15621 15622 15623 15624 15625 15626 15627 15628 15629 15630 15631 15632 15633 15634 15635 15636 15637 15638 15639 15640 15641 15642 15643 15644 15645 15646 15647 15648 15649 15650 15651 15652 15653 15654 15655 15656 15657 15658 15659 15660 15661 15662 15663 15664 15665 15666 15667 15668 15669 15670 15671 15672 15673 15674 15675 15676 15677 15678 15679 15680 15681 15682 15683 15684 15685 15686 15687 15688 15689 15690 15691 15692 15693 15694 15695 15696 15697 15698 15699 15700 15701 15702 15703 15704 15705 15706 15707 15708 15709 15710 15711 15712 15713 15714 15715 15716 15717 15718 15719 15720 15721 15722 15723 15724 15725 15726 15727 15728 15729 15730 15731 15732 15733 15734 15735 15736 15737 15738 15739 15740 15741 15742 15743 15744 15745 15746 15747 15748 15749 15750 15751 15752 15753 15754 15755 15756 15757 15758 15759 15760 15761 15762 15763 15764 15765 15766 15767 15768 15769 15770 15771 15772 15773 15774 15775 15776 15777 15778 15779 15780 15781 15782 15783 15784 15785 15786 15787 15788 15789 15790 15791 15792 15793 15794 15795 15796 15797 15798 15799 15800 15801 15802 15803 15804 15805 15806 15807 15808 15809 15810 15811 15812 15813 15814 15815 15816 15817 15818 15819 15820 15821 15822 15823 15824 15825 15826 15827 15828 15829 15830 15831 15832 15833 15834 15835 15836 15837 15838 15839 15840 15841 15842 15843 15844 15845 15846 15847 15848 15849 15850 15851 15852 15853 15854 15855 15856 15857 15858 15859 15860 15861 15862 15863 15864 15865 15866 15867 15868 15869 15870 15871 15872 15873 15874 15875 15876 15877 15878 15879 15880 15881 15882 15883 15884 15885 15886 15887 15888 15889 15890 15891 15892 15893 15894 15895 15896 15897 15898 15899 15900 15901 15902 15903 15904 15905 15906 15907 15908 15909 15910 15911 15912 15913 15914 15915 15916 15917 15918 15919 15920 15921 15922 15923 15924 15925 15926 15927 15928 15929 15930 15931 15932 15933 15934 15935 15936 15937 15938 15939 15940 15941 15942 15943 15944 15945 15946 15947 15948 15949 15950 15951 15952 15953 15954 15955 15956 15957 15958 15959 15960 15961 15962 15963 15964 15965 15966 15967 "pengiriman_aceh", 15968 15969 15970 15971 15972 15973 "pengiriman_ambon", 15974 15975 15976 15977 15978 15979 "pengiriman_atambua", 15980 15981 15982 15983 15984 15985 "pengiriman_badung", 15986 15987 15988 15989 15990 15991 "pengiriman_bali", 15992 15993 15994 15995 15996 15997 "pengiriman_balikpapan", 15998 15999 16000 16001 16002 16003 "pengiriman_bandar lampung", 16004 16005 16006 16007 16008 16009 "pengiriman_bandung", 16010 16011 16012 16013 16014 16015 "pengiriman_bandung barat", 16016 16017 16018 16019 16020 16021 "pengiriman_banjarmasin", 16022 16023 16024 16025 16026 16027 "pengiriman_banyumas", 16028 16029 16030 16031 16032 16033 "pengiriman_banyuwangi", 16034 16035 16036 16037 16038 16039 "pengiriman_batam", 16040 16041 16042 16043 16044 16045 16046 16047 16048 16049 "pengiriman_biak", 16050 16051 16052 16053 16054 16055 "pengiriman_binjai", 16056 16057 16058 16059 16060 16061 "pengiriman_blitar", 16062 16063 16064 16065 16066 16067 "pengiriman_blora", 16068 16069 16070 16071 16072 16073 16074 16075 16076 16077 "pengiriman_bojonegoro", 16078 16079 16080 16081 16082 16083 "pengiriman_boyolali", 16084 16085 16086 16087 16088 16089 "pengiriman_bukittinggi", 16090 16091 16092 16093 16094 16095 "pengiriman_buleleng", 16096 16097 16098 16099 16100 16101 "pengiriman_ciamis", 16102 16103 16104 16105 16106 16107 "pengiriman_cianjur", 16108 16109 16110 16111 16112 16113 "pengiriman_cibinong", 16114 16115 16116 16117 16118 16119 "pengiriman_cikarang", 16120 16121 16122 16123 16124 16125 "pengiriman_cikupa", 16126 16127 16128 16129 16130 16131 "pengiriman_cilacap", 16132 16133 16134 16135 16136 16137 "pengiriman_cileunyi", 16138 16139 16140 16141 16142 16143 "pengiriman_cimahi", 16144 16145 16146 16147 16148 16149 "pengiriman_cirebon", 16150 16151 16152 16153 16154 16155 "pengiriman_ciwidey", 16156 16157 16158 16159 16160 16161 "pengiriman_deli serdang", 16162 16163 16164 16165 16166 16167 "pengiriman_demak", 16168 16169 16170 16171 16172 16173 "pengiriman_denpasar", 16174 16175 16176 16177 16178 16179 16180 16181 16182 16183 "pengiriman_garut", 16184 16185 16186 16187 16188 16189 "pengiriman_gianyar", 16190 16191 16192 16193 16194 16195 "pengiriman_gresik", 16196 16197 16198 16199 16200 16201 "pengiriman_gunung kidul", 16202 16203 16204 16205 16206 16207 16208 16209 16210 16211 "pengiriman_jambi", 16212 16213 16214 16215 16216 16217 "pengiriman_jayapura", 16218 16219 16220 16221 16222 16223 "pengiriman_jember", 16224 16225 16226 16227 16228 16229 "pengiriman_jepara", 16230 16231 16232 16233 16234 16235 "pengiriman_jombang", 16236 16237 16238 16239 16240 16241 "pengiriman_karanganyar", 16242 16243 16244 16245 16246 16247 "pengiriman_karawang", 16248 16249 16250 16251 16252 16253 "pengiriman_karo", 16254 16255 16256 16257 16258 16259 "pengiriman_kebumen", 16260 16261 16262 16263 16264 16265 "pengiriman_kediri", 16266 16267 16268 16269 16270 16271 "pengiriman_keerom", 16272 16273 16274 16275 16276 16277 "pengiriman_kendal", 16278 16279 16280 16281 16282 16283 "pengiriman_klaten", 16284 16285 16286 16287 16288 16289 16290 16291 16292 16293 "pengiriman_kudus", 16294 16295 16296 16297 16298 16299 "pengiriman_kupang", 16300 16301 16302 16303 16304 16305 "pengiriman_lainnya", 16306 16307 16308 16309 16310 16311 "pengiriman_lamongan", 16312 16313 16314 16315 16316 16317 "pengiriman_lampung", 16318 16319 16320 16321 16322 16323 "pengiriman_lampung barat", 16324 16325 16326 16327 16328 16329 "pengiriman_lembang", 16330 16331 16332 16333 16334 16335 "pengiriman_lombok", 16336 16337 16338 16339 16340 16341 "pengiriman_lumajang", 16342 16343 16344 16345 16346 16347 "pengiriman_madiun", 16348 16349 16350 16351 16352 16353 "pengiriman_magelang", 16354 16355 16356 16357 16358 16359 "pengiriman_majalengka", 16360 16361 16362 16363 16364 16365 "pengiriman_makassar", 16366 16367 16368 16369 16370 16371 "pengiriman_malang", 16372 16373 16374 16375 16376 16377 "pengiriman_manado", 16378 16379 16380 16381 16382 16383 "pengiriman_medan", 16384 16385 16386 16387 16388 16389 "pengiriman_mengwi", 16390 16391 16392 16393 16394 16395 "pengiriman_mojokerto", 16396 16397 16398 16399 16400 16401 "pengiriman_nganjuk", 16402 16403 16404 16405 16406 16407 "pengiriman_ngawi", 16408 16409 16410 16411 16412 16413 "pengiriman_padang", 16414 16415 16416 16417 16418 16419 "pengiriman_palembang", 16420 16421 16422 16423 16424 16425 "pengiriman_palu", 16426 16427 16428 16429 16430 16431 "pengiriman_pasuruan", 16432 16433 16434 16435 16436 16437 "pengiriman_pati", 16438 16439 16440 16441 16442 16443 "pengiriman_pekalongan", 16444 16445 16446 16447 16448 16449 "pengiriman_pekanbaru", 16450 16451 16452 16453 16454 16455 "pengiriman_pemalang", 16456 16457 16458 16459 16460 16461 "pengiriman_ponorogo", 16462 16463 16464 16465 16466 16467 "pengiriman_pontianak", 16468 16469 16470 16471 16472 16473 "pengiriman_probolinggo", 16474 16475 16476 16477 16478 16479 "pengiriman_purbalingga", 16480 16481 16482 16483 16484 16485 "pengiriman_purwakarta", 16486 16487 16488 16489 16490 16491 "pengiriman_purwokerto", 16492 16493 16494 16495 16496 16497 "pengiriman_rembang", 16498 16499 16500 16501 16502 16503 "pengiriman_riau", 16504 16505 16506 16507 16508 16509 "pengiriman_salatiga", 16510 16511 16512 16513 16514 16515 "pengiriman_samarinda", 16516 16517 16518 16519 16520 16521 "pengiriman_semarang", 16522 16523 16524 16525 16526 16527 "pengiriman_sentani", 16528 16529 16530 16531 16532 16533 "pengiriman_serang", 16534 16535 16536 16537 16538 16539 "pengiriman_sidoarjo", 16540 16541 16542 16543 16544 16545 "pengiriman_singkawang", 16546 16547 16548 16549 16550 16551 "pengiriman_sragen", 16552 16553 16554 16555 16556 16557 "pengiriman_subang", 16558 16559 16560 16561 16562 16563 "pengiriman_sukabumi", 16564 16565 16566 16567 16568 16569 "pengiriman_sumbawa", 16570 16571 16572 16573 16574 16575 "pengiriman_surabaya", 16576 16577 16578 16579 16580 16581 "pengiriman_surakarta solo", 16582 16583 16584 16585 16586 16587 16588 16589 16590 16591 "pengiriman_tasikmalaya", 16592 16593 16594 16595 16596 16597 "pengiriman_tegal", 16598 16599 16600 16601 16602 16603 "pengiriman_timika", 16604 16605 16606 16607 16608 16609 "pengiriman_wamena", 16610 16611 16612 16613 16614 16615 "pengiriman_wiyung", 16616 16617 16618 16619 16620 16621 "pengiriman_wonokromo", 16622 16623 16624 16625 16626 16627 "pengiriman_yogyakarta", 16628 16629 16630 16631 16632 16633 16634 16635 16636 16637 16638 16639 16640 16641 16642 16643 16644 16645 16646 16647 16648 16649 16650 16651 16652 16653 16654 16655 16656 16657 16658 16659 16660 16661 16662 16663 16664 16665 16666 16667 16668 16669 16670 16671 16672 16673 16674 16675 16676 16677 16678 16679 16680 16681 16682 16683 16684 16685 16686 16687 16688 16689 16690 16691 16692 16693 16694 16695 16696 16697 16698 16699 16700 16701 16702 16703 16704 16705 16706 16707 16708 16709 16710 16711 16712 16713 16714 16715 16716 16717 16718 16719 16720 16721 16722 16723 16724 16725 16726 16727 16728 16729 16730 16731 16732 16733 16734 16735 16736 16737 16738 16739 16740 16741 16742 16743 16744 16745 16746 16747 16748 16749 16750 16751 16752 16753 16754 16755 16756 16757 16758 16759 16760 16761 16762 16763 16764 16765 16766 16767 16768 16769 16770 16771 16772 16773 16774 16775 16776 16777 16778 16779 16780 16781 16782 16783 16784 16785 16786 16787 16788 16789 16790 16791 16792 16793 16794 16795 16796 16797 16798 16799 16800 16801 16802 16803 16804 16805 16806 16807 16808 16809 16810 16811 16812 16813 16814 16815 16816 16817 16818 16819 16820 16821 16822 16823 16824 16825 16826 16827 16828 16829 16830 16831 16832 16833 16834 16835 16836 16837 16838 16839 16840 16841 16842 16843 16844 16845 16846 16847 16848 16849 16850 16851 16852 16853 16854 16855 16856 16857 16858 16859 16860 16861 16862 16863 16864 16865 16866 16867 16868 16869 16870 16871 16872 16873 16874 16875 16876 16877 16878 16879 16880 16881 16882 16883 16884 16885 16886 16887 16888 16889 16890 16891 16892 16893 16894 16895 16896 16897 16898 16899 16900 16901 16902 16903 16904 16905 16906 16907 16908 16909 16910 16911 16912 16913 16914 16915 16916 16917 16918 16919 16920 16921 16922 16923 16924 16925 16926 16927 16928 16929 16930 16931 16932 16933 16934 16935 16936 16937 16938 16939 16940 16941 16942 16943 16944 16945 16946 16947 16948 16949 16950 16951 16952 16953 16954 16955 16956 16957 16958 16959 16960 16961 16962 16963 16964 16965 16966 16967 16968 16969 16970 16971 16972 16973 16974 16975 16976 16977 16978 16979 16980 16981 16982 16983 16984 16985 16986 16987 16988 16989 16990 16991 16992 16993 16994 16995 16996 16997 16998 16999 17000 17001 17002 17003 17004 17005 17006 17007 17008 17009 17010 17011 17012 17013 17014 17015 17016 17017 17018 17019 17020 17021 17022 17023 17024 17025 17026 17027 17028 17029 17030 17031 17032 17033 17034 17035 17036 17037 17038 17039 17040 17041 17042 17043 17044 17045 17046 17047 17048 17049 17050 17051 17052 17053 17054 17055 17056 17057 17058 17059 17060 17061 17062 17063 17064 17065 17066 17067 17068 17069 17070 17071 17072 17073 17074 17075 17076 17077 17078 17079 17080 17081 17082 17083 17084 17085 17086 17087 17088 17089 17090 17091 17092 17093 17094 17095 17096 17097 17098 17099 17100 17101 17102 17103 17104 17105 17106 17107 17108 17109 17110 17111 17112 17113 17114 17115 17116 17117 17118 17119 17120 17121 17122 17123 17124 17125 17126 17127 17128 17129 17130 17131 17132 17133 17134 17135 17136 17137 17138 17139 17140 17141 17142 17143 17144 17145 17146 17147 17148 17149 17150 17151 17152 17153 17154 17155 17156 17157 17158 17159 17160 17161 17162 17163 17164 17165 17166 17167 17168 17169 17170 17171 17172 17173 17174 17175 17176 17177 17178 17179 17180 17181 17182 17183 17184 17185 17186 17187 17188 17189 17190 17191 17192 17193 17194 17195 17196 17197 17198 17199 17200 17201 17202 17203 17204 17205 17206 17207 17208 17209 17210 17211 17212 17213 17214 17215 17216 17217 17218 17219 17220 17221 17222 17223 17224 17225 17226 17227 17228 17229 17230 17231 17232 17233 17234 17235 17236 17237 17238 17239 ] 17240 17241 let non_jabodetabek = [] 17242 for(var i=0;i<cityNonJabodetabek.length;i++) { 17243 const obj = { 17244 "code": cityNonJabodetabek[i].toLowerCase().replace('pengiriman_', '').replace(' ','-'), 17245 "city": cityNonJabodetabek[i].replace('pengiriman_', '').replace(' ','-'), 17246 "zip": [] 17247 } 17248 non_jabodetabek.push(obj) 17249 } 17250 let current_location = getCookie("location_delivery") 17251 $("[name=location]").change(function(){ 17252 let v = $(this).val() 17253 let option = [] 17254 if(v == 'Jabodetabek') { 17255 for(var i=0;i<jabodetabek.length;i++) { 17256 const jabodetabekHtml = `<option value=${jabodetabek[i].city}>${jabodetabek[i].city}</option>` 17257 option.push(jabodetabekHtml) 17258 } 17259 $("#choose-location").html(`<option value="">Choose Location</option>${option}`) 17260 } else { 17261 for(var i=0;i<non_jabodetabek.length;i++) { 17262 const nonjabodetabekHtml = `<option value=${non_jabodetabek[i].city}>${non_jabodetabek[i].city}</option>` 17263 option.push(nonjabodetabekHtml) 17264 } 17265 $("#choose-location").html(`<option value="">Choose Location</option>${option}`) 17266 } 17267 }) 17268 17269 $("#location-lock-submit").click(function(e){ 17270 let select = $("#choose-location") 17271 let value = select.val().toLowerCase() 17272 console.log(value) 17273 if(select.val() == "") { 17274 return alert("Choose Your Location") 17275 e.preventDefault() 17276 }
17277 setCookie("location_delivery",value,1000000); 17278 17279 location.reload(); 17280 17281 }) 17282 17283 $("#close-popup-delivery").click(function(){ 17284 $(".MuiDialog-root").hide() 17285 if(!current_location){ 17286 setCookie("location_delivery","jakarta",1000000); 17287 $("#loc_delivery_city, #loc_delivery_city_mobile").text("Jakarta") 17288 } 17289 }) 17290 $("#loc_delivery, #loc_delivery_mobile").click(function(){ 17291 $(".MuiDialog-root").show() 17292 }) 17293 17294 17295 if(!current_location){ 17296 17297 } else { 17298 $("#loc_delivery_city, #loc_delivery_city_mobile").text(current_location) 17299 $("#choose-location").each(function(){ 17300 if(current_location == 'jakarta' || current_location == 'depok' || current_location == 'bogor' || current_location == 'tangerang' || current_location == 'bekasi'){ 17301 $("#jabodetabek").trigger("click") 17302 } else { 17303 $("#non-jabodetabek").trigger("click") 17304 } 17305 $("#choose-location").find("option[value="+current_location+"]").attr("selected", "selected") 17306 }) 17307 } 17308 17309 // if(current_location == 'jakarta' || current_location == 'depok' || current_location == 'bogor' || current_location == 'tangerang' || current_location == 'bekasi' || current_location == 'bandung' || current_location == 'semarang' || current_location == 'yogyakarta' || current_location == 'surabaya'){ 17310 // $("#timeMalam").attr("disabled", false) 17311 // } else { 17312 // $("#timeMalam").attr("disabled", true) 17313 // } 17314 17315 if(current_location && current_location != 'jakarta') { 17316 $("#self-pickup").attr("disabled", true) 17317 } 17318 17319 function setCookie(name,value,days) { 17320 var expires = ""; 17321 if (days) { 17322 var date = new Date(); 17323 date.setTime(date.getTime() + (days*24*60*60*1000)); 17324 expires = "; expires=" + date.toUTCString(); 17325 } 17326 document.cookie = name + "=" + (value || "") + expires + "; path=/"; 17327 } 17328 function getCookie(name) { 17329 var nameEQ = name + "="; 17330 var ca = document.cookie.split(';'); 17331 for(var i=0;i < ca.length;i++) { 17332 var c = ca[i]; 17333 while (c.charAt(0)==' ') c = c.substring(1,c.length); 17334 if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 17335 } 17336 return null; 17337 } 17338</script>
17338 17339<!-- One Tap --> 17340
17340<script> 17341 console.log("Outerbloom..."); 17342 </script>
17342 17343 17344 <!-- Initialize User Data (IP, Browser, Device) --> 17345 17346 <div id="shopify-block-ATzRpVTBPU3k1R2pnW__286197278318599166" class="shopify-block shopify-app-block"> 17347 17348 17349<div style="position: fixed; bottom: 0; right: 0"></div> 17350
17351<script> 17352console.info("bitlogin extension version: v2.5.7"); 17353 17354const googleScript = document.createElement("script"); 17355googleScript.setAttribute("src", "https://accounts.google.com/gsi/client"); 17356document.head.append(googleScript); 17357 17358const bitLoginBaseUrl = "https://api.bitbybit.studio"; 17359const apiUrl = `${bitLoginBaseUrl}/bitlogin/api`; 17360 17361const appearance = {"style":"square","hasShadow":true,"domain":"outerbloom1.myshopify.com","colorScheme":"match","backgroundColor":"#ffffff","outlineColor":"#ffe100","textColor":"#700000","position":"top","hideDivider":false,"dividerText":"","size":"small","format":"contentFlex","language":"en","buttonText":"Continue With","redirectLink":"\/account","googleOneTap":true,"googleOneTapBanner":true,"captureAdditionalData":true,"customerTag":"bitLogin","redirectOneTapDesktop":"[{\"label\":\"Account\",\"label2\":\"Desktop: Account\",\"value\":\"account\",\"parentValue\":\"Desktop\"}]","redirectOneTapMobile":"[{\"label\":\"Thank you page\",\"label2\":\"Mobile: Thank you page\",\"value\":\"thank_you\",\"parentValue\":\"Mobile\"}]","watermark":true,"buttonList":{"google":"Continue with Google","facebook":"Continue with Facebook","apple":"Continue with Apple","whatsapp":"Continue with WhatsApp","microsoft":"Continue with Microsoft","twitter":"Continue with X","amazon":"Continue with Amazon","instagram":"Continue with Instagram","magic_link":"Continue with Magic Link","mobile_app":"Continue with Mobile App","linkedin":"Continue with LinkedIn"}}; 17362const config = [{"domain":"outerbloom1.myshopify.com","provider":"FACEBOOK","enabledMobile":false,"enabledWeb":true,"clientId":"922184709213757","clientSecret":"e3c874c8bce6da4211538ebda706d1cb","appleTeamId":null,"applePrivateKey":null,"usePersonalOauth":false,"position":null},{"domain":"outerbloom1.myshopify.com","provider":"GOOGLE","enabledMobile":true,"enabledWeb":true,"clientId":"933600373534-vk6hiu9lqrtbblj0357q0gsoo7mqvsd0.apps.googleusercontent.com","clientSecret":"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","appleTeamId":null,"applePrivateKey":null,"usePersonalOauth":true,"position":null},{"domain":"outerbloom1.myshopify.com","provider":"APPLE","enabledMobile":true,"enabledWeb":true,"clientId":"com.bitlogin.outerbloom","clientSecret":"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","appleTeamId":"1A","applePrivateKey":"1A","usePersonalOauth":false,"position":null},{"domain":"outerbloom1.myshopify.com","provider":"WHATSAPP","enabledMobile":false,"enabledWeb":true,"clientId":null,"clientSecret":null,"appleTeamId":null,"applePrivateKey":null,"usePersonalOauth":false,"position":null},{"domain":"outerbloom1.myshopify.com","provider":"MICROSOFT","enabledMobile":false,"enabledWeb":false,"clientId":null,"clientSecret":null,"appleTeamId":null,"applePrivateKey":null,"usePersonalOauth":false,"position":null},{"domain":"outerbloom1.myshopify.com","provider":"TWITTER","enabledMobile":false,"enabledWeb":false,"clientId":null,"clientSecret":null,"appleTeamId":null,"applePrivateKey":null,"usePersonalOauth":false,"position":null},{"domain":"outerbloom1.myshopify.com","provider":"AMAZON","enabledMobile":false,"enabledWeb":false,"clientId":"amzn1.application-oa2-client.5b560a5e3e2943d6b25c50cd6dca5532","clientSecret":"amz
17362n1.oa2-cs.v1.1cb5f9085a202341f60daf5a7be16c570ccc0b4bd5908b3afd080f34e9b8935d","appleTeamId":null,"applePrivateKey":null,"usePersonalOauth":false,"position":null}]; 17363 17364const urlSearchParams = new URLSearchParams(window.location.search); 17365const checkoutUrl = urlSearchParams.get("checkout_url"); 17366const redirectUrl = checkoutUrl || appearance.redirectLink; 17367 17368let locationCacheSet = false; 17369let errorLocation = false; 17370let oneTapSet = false; 17371 17372let bitloginCache = { 17373 appearance: appearance, 17374 config: config 17375}; 17376 17377let isInitializing = false; 17378const queue = []; 17379 17380// Add CSS for the popup 17381const popupStyles = document.createElement('style'); 17382popupStyles.textContent = ` 17383 /* Styles for login popup */ 17384 .bitlogin-popup-overlay { 17385 position: fixed; 17386 top: 0; 17387 left: 0; 17388 width: 100%; 17389 height: 100%; 17390 background: rgba(0, 0, 0, 0.45); 17391 backdrop-filter: blur(4px); 17392 display: flex; 17393 align-items: center; 17394 justify-content: center; 17395 opacity: 0; 17396 transition: opacity 0.3s ease-in-out; 17397 z-index: 999999; 17398 } 17399 17400 .bitlogin-popup-overlay.visible { 17401 opacity: 1; 17402 } 17403 17404 .bitlogin-popup { 17405 background: #FFFFFF; 17406 box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); 17407 border-radius: 16px; 17408 width: 100%; 17409 max-width: 560px; 17410 display: flex; 17411 overflow: hidden; 17412 position: relative; 17413 opacity: 0; 17414 transform: translateY(20px) scale(0.98); 17415 transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); 17416 } 17417 17418 .bitlogin-popup.visible { 17419 opacity: 1; 17420 transform: translateY(0) scale(1); 17421 } 17422 17423 .bitlogin-popup-with-image { 17424 max-width: 640px; 17425 } 17426 17427 .bitlogin-popup-right-image { 17428 flex-direction: row-reverse; 17429 } 17430 17431 .bitlogin-popup-image { 17432 object-fit: cover; 17433 width: 50%; 17434 height: auto; 17435 } 17436 17437 .bitlogin-popup-content { 17438 padding: 32px; 17439 position: relative; 17440 width: 50%; 17441 } 17442 17443 .bitlogin-popup-close { 17444 position: absolute; 17445 top: 16px; 17446 right: 16px; 17447 background: white; 17448 border: none; 17449 width: 30px; 17450 height: 30px; 17451 display: flex; 17452 align-items: center; 17453 justify-content: center; 17454 cursor: pointer; 17455 transition: background-color 0.2s; 17456 color: inherit; 17457 padding: 0; 17458 } 17459 17460 .bitlogin-popup-close:hover { 17461 background-color: #e5e5e5; 17462 } 17463 17464 .bitlogin-popup-buttons { 17465 display: flex; 17466 flex-direction: column; 17467 gap: 12px; 17468 margin-top: 24px; 17469 } 17470 17471 /* Button styles within popup - override width for popup buttons */ 17472 .bitlogin-popup-buttons #google-login, 17473 .bitlogin-popup-buttons #facebook-login, 17474 .bitlogin-popup-buttons #apple-login, 17475 .bitlogin-popup-buttons #whatsapp-login, 17476 .bitlogin-popup-buttons #microsoft-login, 17477 .bitlogin-popup-buttons #twitter-login, 17478 .bitlogin-popup-buttons #amazon-login, 17479 .bitlogin-popup-buttons #instagram-login, 17480 .bitlogin-popup-buttons #magic-link-login, 17481 .bitlogin-popup-buttons #mobile-app-login { 17482 width: 100% !important; 17483 font-family: inherit !important; 17484 } 17485 17486 .bitlogin-popup-footer { 17487 margin-top: 32px; 17488 text-align: center; 17489 font-size: 14px; 17490 opacity: 0.6; 17491 } 17492 17493 /* Modern Typography */ 17494 .bitlogin-popup h2 { 17495 margin-top: 12px; 17496 font-size: 21px !important; 17497 line-height: 1.2 !important; 17498 font-weight: 700 !important; 17499 letter-spacing: -0.02em !important; 17500 margin-bottom: 16px !important; 17501 } 17502 17503 .bitlogin-popup-header { 17504 position: relative; 17505 margin-bottom: 24px; 17506 } 17507 17508 /* Modern gradient accent */ 17509 .bitlogin-popup-content > div { 17510 font-size: 16px !important; 17511 line-height: 1.2 !important; 17512 opacity: 0.85 !important; 17513 } 17514 17515 /* Enhanced button interactions */ 17516 .bitlogin-popup-buttons button { 17517 position: relative; 17518 overflow: hidden; 17519 } 17520 17521 @keyframes ripple { 17522 0% { 17523 transform: scale(0, 0); 17524 opacity: 0.5; 17525 } 17526 100% { 17527 transform: scale(100, 100); 17528 opacity: 0; 17529 } 17530 } 17531 17532 /* Responsive adjustments */ 17533 @media (max-width: 640px) { 17534 .bitlogin-popup { 17535 max-width: 90%; 17536 width: 90%; 17537 margin: 0 16px; 17538 } 17539 17540 .bitlogin-popup-with-image { 17541 flex-direction: column !important; 17542 } 17543 17544 .bitlogin-popup-image { 17545 width: 100%; 17546 height: 180px; 17547 } 17548 17549 .bitlogin-popup-content { 17550 padding: 24px; 17551 } 17552 17553 .bitlogin-popup h2 { 17554 font-size: 24px !important; 17555 } 17556 } 17557`; 17558
17559document.head.appendChild(popupStyles); 17560 17561// Add fonts link for different font options 17562const fontsLink = document.createElement('link'); 17563fontsLink.rel = 'stylesheet'; 17564fontsLink.href = 'https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600&family=Roboto:wght@400;500&family=Open+Sans:wght@400;500;600&family=Noto+Sans:wght@400;500;600&family=Lato:wght@400;700&family=Poppins:wght@400;500;600&family=Quicksand:wght@400;500;600&family=Raleway:wght@400;500;600&family=PT+Sans:wght@400;700&family=Oswald:wght@400;500;600&display=swap'; 17565document.head.appendChild(fontsLink); 17566 17567(async () => { 17568 try { 17569 let host = window.location.host; 17570 if (host === "admin.shopify.com") { 17571 host = `${window.location.pathname.split("/")[2]}.myshopify.com`; 17572 } 17573 17574 const urlSearchParams = new URLSearchParams(window.location.search); 17575 const checkoutUrl = urlSearchParams.get("checkout_url"); 17576 17577 async function init({ inputRef, index }) { 17578 if (isInitializing) { 17579 queue.push(() => init({ inputRef, index })); 17580 return; 17581 } 17582 17583 isInitializing = true; 17584 17585 try { 17586 let bitLoginSectionRoot = document.querySelector( 17587 `.bitlogin-root[data-index="${index}"]` 17588 ); 17589 17590 const formRef = inputRef?.closest( 17591 "form:not([action='/account/recover'])" 17592 ); 17593 17594 if (formRef && !bitLoginSectionRoot) { 17595 await getLocation(); 17596 17597 bitLoginSectionRoot = document.createElement(`div`); 17598 17599 bitLoginSectionRoot.setAttribute("class", "bitlogin-root"); 17600 bitLoginSectionRoot.setAttribute("data-index", `${index}`); 17601 17602 updateAppearance({ 17603 formRef, 17604 rootRef: bitLoginSectionRoot, 17605 host, 17606 }); 17607 } 17608 } catch (err) { 17609 console.error(`error while initiating bitlogin extensions`, err); 17610 } finally { 17611 // Release the lock 17612 isInitializing = false; 17613 17614 // Check if there are pending items in the queue 17615 if (queue.length > 0) { 17616 // Process the next function in the queue 17617 const nextFunction = queue.shift(); 17618 nextFunction(); 17619 } 17620 } 17621 } 17622 17623 function initAll() { 17624 return new Promise((resolve, reject) => { 17625 setTimeout(async () => { 17626 const inputRefs = document.querySelectorAll( 17627 'input[name="customer[email]"]' 17628 ); 17629 17630 for (let i = 0; i < inputRefs.length; i++) { 17631 const currentInputRef = inputRefs[i]; 17632 const isVisible = isElementVisible(currentInputRef); 17633 17634 if (isVisible) { 17635 await init({ inputRef: currentInputRef, index: i }); 17636 } 17637 } 17638 17639 resolve("ok"); 17640 }, 100); 17641 }); 17642 } 17643 17644 const observer = new MutationObserver((mutationsList) => { 17645 for (let mutation of mutationsList) { 17646 initAll(); 17647 } 17648 }); 17649 17650 observer.observe(document.body, { 17651 childList: true, 17652 subtree: true, 17653 attributes: true, 17654 }); 17655 17656 initAll(); 17657 17658 if (appearance.googleOneTap) { 17659 setupOneTap({ host, checkoutUrl }); 17660 } 17661 17662 // Initialize popup 17663 await initPopup(host); 17664 } catch (error) { 17665 console.error("Error initializing BitLogin:", error); 17666 } 17667})(); 17668 17669async function initPopup(host) { 17670 // Check if user is already logged in using Liquid checks properly 17671 const isLoggedIn = false || 17672 document.querySelector('.customer-logout-link') || 17673 document.querySelector('.account-link') || 17674 window.location.pathname.includes('/account'); 17675 17676 if (isLoggedIn) { 17677 return; // User is logged in, don't show popup 17678 } 17679 17680 try { 17681 // Fetch the popup configuration 17682 const popupConfig = await fetch(`${apiUrl}/appearance/popup/domain/${host}`) 17683 .then(res => res.json()) 17684 .catch(err => { 17685 console.error('Error fetching popup configuration:', err); 17686 return null; 17687 }); 17688 17689 if (!popupConfig || !popupConfig.enabled) { 17690 return; // Don't show popup if disabled or config not found 17691 } 17692 17693 // Create popup after 10 seconds 17694 setTimeout(() => { 17695 // Check if user is still on the page and still not logged in 17696 if (document.visibilityState === 'visible') { 17697 // Additional check in case user logged in during the 10 second w
17697ait 17698 const currentlyLoggedIn = false || 17699 document.querySelector('.customer-logout-link') || 17700 document.querySelector('.account-link'); 17701 17702 if (!currentlyLoggedIn) { 17703 createLoginPopup(popupConfig, host); 17704 } 17705 } 17706 }, 10000); 17707 } catch (error) { 17708 console.error('Error initializing popup:', error); 17709 } 17710} 17711 17712function createLoginPopup(popupConfig, host) { 17713 // Font mapping 17714 const fontFamilyMap = { 17715 system_fonts: 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif', 17716 montserrat: 'Montserrat, sans-serif', 17717 roboto: 'Roboto, sans-serif', 17718 open_sans: 'Open Sans, sans-serif', 17719 noto_sans: 'Noto Sans, sans-serif', 17720 lato: 'Lato, sans-serif', 17721 poppins: 'Poppins, sans-serif', 17722 quicksand: 'Quicksand, sans-serif', 17723 raleway: 'Raleway, sans-serif', 17724 pt_sans: 'PT Sans, sans-serif', 17725 oswald: 'Oswald, sans-serif', 17726 }; 17727 17728 // Create overlay 17729 const overlay = document.createElement('div'); 17730 overlay.className = 'bitlogin-popup-overlay'; 17731 17732 // Create popup container with appropriate styling 17733 const popup = document.createElement('div'); 17734 popup.className = 'bitlogin-popup'; 17735 17736 if (popupConfig.layout === 'default') { 17737 popup.style.maxWidth = '400px'; 17738 } 17739 17740 // Function to close the popup 17741 const closePopup = () => { 17742 overlay.classList.remove('visible'); 17743 popup.classList.remove('visible'); 17744 setTimeout(() => { 17745 if (document.body.contains(overlay)) { 17746 document.body.removeChild(overlay); 17747 } 17748 }, 300); 17749 }; 17750 17751 // Add click handler to the overlay to close when clicking outside 17752 overlay.addEventListener('click', (event) => { 17753 // Close only if clicking directly on the overlay, not its children 17754 if (event.target === overlay) { 17755 closePopup(); 17756 } 17757 }); 17758 17759 // Add escape key handler to close popup 17760 document.addEventListener('keydown', (event) => { 17761 if (event.key === 'Escape' && document.body.contains(overlay)) { 17762 closePopup(); 17763 } 17764 }); 17765 17766 // Create layout with image if specified 17767 let contentWrapper; 17768 if (popupConfig.layout !== 'default' && popupConfig.popupImage) { 17769 popup.classList.add('bitlogin-popup-with-image'); 17770 17771 if (popupConfig.layout === 'right') { 17772 popup.classList.add('bitlogin-popup-right-image'); 17773 } 17774 17775 // Add image 17776 const image = document.createElement('img'); 17777 image.className = 'bitlogin-popup-image'; 17778 image.src = popupConfig.popupImage; 17779 image.alt = 'Login'; 17780 image.loading = 'lazy'; 17781 popup.appendChild(image); 17782 17783 // Create content container 17784 contentWrapper = document.createElement('div'); 17785 contentWrapper.className = 'bitlogin-popup-content'; 17786 17787 if (popupConfig.layout === 'right') { 17788 const closeButton = document.createElement('button'); 17789 closeButton.className = 'bitlogin-popup-close'; 17790 closeButton.innerHTML = `<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 17791 <path d="M13 1L1 13M1 1L13 13" stroke="${popupConfig.fontColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 17792 </svg>`; 17793 closeButton.setAttribute('aria-label', 'Close'); 17794 closeButton.onclick = closePopup; 17795 17796 popup.appendChild(closeButton); 17797 } 17798 } else { 17799 contentWrapper = document.createElement('div'); 17800 contentWrapper.className = 'bitlogin-popup-content'; 17801 contentWrapper.style.width = '100%'; 17802 } 17803 17804 // Set background style 17805 if (popupConfig.backgroundTheme === 'gradient') { 17806 contentWrapper.style.background = `linear-gradient(135deg, ${popupConfig.backgroundPopupColor}, ${popupConfig.gradientColor})`; 17807 } else { 17808 contentWrapper.style.backgroundColor = popupConfig.backgroundPopupColor; 17809 } 17810 17811 // Apply font family 17812 contentWrapper.style.setProperty('font-family', fontFamilyMap[popupConfig.font] || fontFamilyMap.system_fonts, 'important'); 17813 17814 if (popupConfig.layout !== 'right') { 17815 const closeButton = document.createElement('button'); 17816 closeButton.className = 'bitlogin-popup-close'; 17817 closeButton.innerHTML = `<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 17818 <path d="M13 1L1 13M1 1L13 13" stroke="${popupConfig.fontColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 17819 </svg>`; 17820 closeButton.setAttribute('aria-label', 'Close'); 17821 closeButton.onclick = closePopup; 17822 17823 contentWrapper.appendChild(closeButton); 17824 } 17825 17826 // Add heading with subtle animation effect 17827 const header = document.createElement('div'); 17828 header.className = 'bitlogin-popup-header'; 17829 17830 const heading = document.createElement('h2'); 17831 heading.textContent = popupConfig.headingText || 'Sign in for exclusive benef
17831its'; 17832 heading.style.color = popupConfig.fontColor; 17833 header.appendChild(heading); 17834 17835 // Add body text with improved formatting 17836 const bodyText = document.createElement('div'); 17837 bodyText.innerHTML = popupConfig.bodyText || 'Join our community to access exclusive offers and a personalized shopping experience.'; 17838 bodyText.style.color = popupConfig.fontColor; 17839 header.appendChild(bodyText); 17840 17841 contentWrapper.appendChild(header); 17842 17843 // Create buttons container with modern styling 17844 const buttonsContainer = document.createElement('div'); 17845 buttonsContainer.className = 'bitlogin-popup-buttons'; 17846 17847 // Add social buttons 17848 const providerLabels = { 17849 'GOOGLE': 'Continue with Google', 17850 'FACEBOOK': 'Continue with Facebook', 17851 'APPLE': 'Continue with Apple', 17852 'WHATSAPP': 'Continue with WhatsApp', 17853 'MAGIC_LINK': 'Continue with Email', 17854 }; 17855 17856 // Add first login provider button 17857 if (popupConfig.loginProvider1 !== 'NONE') { 17858 const buttonConfig = { 17859 theme: popupConfig.colorScheme || 'match', 17860 customColor: popupConfig.textColor, 17861 format: 'contentFlex', 17862 buttonText: bitloginCache.appearance.buttonList[popupConfig.loginProvider1.toLowerCase()], 17863 hasShadow: popupConfig.hasShadow !== undefined ? popupConfig.hasShadow : true, 17864 style: popupConfig.style || 'rounded', 17865 size: popupConfig.size || 'medium', 17866 colorScheme: popupConfig.colorScheme || 'match', 17867 backgroundColor: popupConfig.backgroundColor || '#3B82F6', 17868 textColor: popupConfig.textColor || '#FFFFFF', 17869 outlineColor: popupConfig.outlineColor || '#3B82F6', 17870 host: host 17871 }; 17872 17873 const button1 = createSocialLoginButton(popupConfig.loginProvider1, buttonConfig); 17874 17875 // Handle click event - this overrides the default click handler in createSocialLoginButton 17876 button1.onclick = () => { 17877 onClickSocialLogin({ provider: popupConfig.loginProvider1.toLowerCase(), host }); 17878 closePopup(); 17879 }; 17880 17881 buttonsContainer.appendChild(button1); 17882 } 17883 17884 // Add second login provider button if enabled 17885 if (popupConfig.loginProvider2 !== 'NONE') { 17886 const buttonConfig = { 17887 theme: popupConfig.colorScheme || 'match', 17888 customColor: popupConfig.textColor, 17889 format: 'contentFlex', 17890 buttonText: bitloginCache.appearance.buttonList[popupConfig.loginProvider2.toLowerCase()], 17891 hasShadow: popupConfig.hasShadow !== undefined ? popupConfig.hasShadow : true, 17892 style: popupConfig.style || 'rounded', 17893 size: popupConfig.size || 'medium', 17894 colorScheme: popupConfig.colorScheme || 'match', 17895 backgroundColor: popupConfig.backgroundColor || '#3B82F6', 17896 textColor: popupConfig.textColor || '#FFFFFF', 17897 outlineColor: popupConfig.outlineColor || '#3B82F6', 17898 host: host 17899 }; 17900 17901 const button2 = createSocialLoginButton(popupConfig.loginProvider2, buttonConfig); 17902 17903 // Handle click event - this overrides the default click handler in createSocialLoginButton 17904 button2.onclick = () => { 17905 onClickSocialLogin({ provider: popupConfig.loginProvider2.toLowerCase(), host }); 17906 closePopup(); 17907 }; 17908 17909 buttonsContainer.appendChild(button2); 17910 } 17911 17912 contentWrapper.appendChild(buttonsContainer); 17913 17914 // Append content to popup 17915 popup.appendChild(contentWrapper); 17916 17917 // Append popup to overlay 17918 overlay.appendChild(popup); 17919 17920 // Append overlay to body 17921 document.body.appendChild(overlay); 17922 17923 // Trigger animation with slight delay for better perceived performance 17924 setTimeout(() => { 17925 overlay.classList.add('visible'); 17926 setTimeout(() => { 17927 popup.classList.add('visible'); 17928 }, 50); 17929 }, 10); 17930} 17931 17932window.addEventListener("load", () => { 17933 window.addEventListener("message", (event) => { 17934 const receivedData = event.data; 17935 17936 if (receivedData.type === "authorize") { 17937 post( 17938 JSON.parse( 17939 JSON.stringify({ 17940 "customer[email]": receivedData.email, 17941 "customer[password]": receivedData.password, 17942 form_type: "customer_login", 17943 utf8: "â", 17944 return_url: redirectUrl, 17945 }) 17946 ) 17947 ); 17948 } else if (receivedData.type === "rejected") { 17949 if (receivedData.reason === "customer_account_disabled") { 17950 showAlert( 17951 "Your account needs to be activated. We've sent you an activation link - please check your email to complete this step." 17952 ); 17953 } else if (receivedData.reason === "customer_entry_created_email_not_set") { 17954 showAlert( 17955 "A new account was created but requires an email address. Please update your account with a valid email address to continue." 17956 ); 17957 } else if (receivedData.reason === "customer_exist_email_not_set") { 17958 showAlert( 17959 "Your existing account is missing an email address. Please contact support to update your account with a valid email address." 17960 ); 17961 } 17962 } 17963 17964 if (receivedData.type === "customer_authenticated") { 17965 // Dispatch a custom event that merchants can listen for to implement their custom logic 17966 const customerAuthEvent = new CustomEvent('bitlogin:customer_authenticated', { 17967 detail: { 17968 provider: receivedData.provider, 17969 customer: receivedData.customer, 17970 shopifyCustomerCreated: receivedData.shopifyCustomerCreated 17971 } 17972 }); 17973 17974 // Dispatch the event on the window object so merchants can listen for it 17975 window.dispatchEvent(customerAuthEvent); 17976 17977 } 17978 }); 17979}); 17980 17981// Reusable functions for social login buttons 17982function createSocialLoginButton(provider, config = {}) { 17983 const { 17984 theme = 'match', 17985 customColor = null, 17986 format = 'contentFlex', 17987 buttonText = null, 17988 hasShadow = true, 17989 style = 'rounded', 17990 size = 'medium', 17991 colorScheme = 'match', 17992 backgroundColor = '#3B82F6', 17993 textColor = '#FFFFFF', 17994 outlineColor = '#3B82F6', 17995 rootRef = null, 17996 host = null 17997 } = config; 17998 17999 // Create button element with appropriate ID and attributes 18000 const button = document.createElement('button'); 18001 button.id = `${provider.toLowerCase()}-login`; 18002 button.type = 'button'; 18003 18004 // Set the inner SVG based on provider 18005 switch (provider.toUpperCase()) { 18006 case 'GOOGLE': 18007 button.innerHTML = googleLoginIcon(theme, customColor); 18008 break; 18009 case 'FACEBOOK': 18010 button.innerHTML = facebookLoginIcon(theme, customColor); 18011 break; 18012 case 'APPLE': 18013 button.innerHTML = appleLoginIcon(theme, customColor); 18014 break; 18015 case 'WHATSAPP': 18016 button.innerHTML = whatsappLoginIcon(theme, customColor); 18017 break; 18018 case 'MICROSOFT': 18019 button.innerHTML = microsoftLoginIcon(theme, customColor); 18020 break; 18021 case 'TWITTER': 18022 button.innerHTML = twitterLoginIcon(theme, customColor); 18023 break; 18024 case 'AMAZON': 18025 button.innerHTML = amazonLoginIcon(theme, customColor); 18026 break; 18027 case 'INSTAGRAM': 18028 button.innerHTML = instagramLoginIcon(theme, customColor); 18029 break; 18030 case 'MAGIC_LINK': 18031 button.innerHTML = magicLinkLoginIcon(theme, customColor); 18032 break; 18033 case 'MOBILE_APP':
18034 button.innerHTML = mobileAppLoginIcon(theme, customColor); 18035 break; 18036 case 'LINKEDIN': 18037 button.innerHTML = linkedinLoginIcon(theme, customColor); 18038 break; 18039 } 18040 18041 // Add text if format isn't icon-only and buttonText is provided 18042 if (format !== "wrapperFlexContainerOnlyLogo" && buttonText) { 18043 button.innerHTML += `<p>${buttonText}</p>`; 18044 } 18045 18046 // Apply styling 18047 // Shadow 18048 if (hasShadow) { 18049 const shadowProperties = `0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)`; 18050 button.style["box-shadow"] = shadowProperties; 18051 } 18052 18053 // Border radius 18054 const radiusProperties = 18055 style === "rounded" 18056 ? "8px" 18057 : style === "square" 18058 ? "0px" 18059 : style === "fullRounded" 18060 ? format === "wrapperFlexContainerOnlyLogo" 18061 ? "50%" 18062 : "50px" 18063 : undefined; 18064 button.style["border-radius"] = radiusProperties; 18065 18066 // Size 18067 const sizeProperties = 18068 size === "medium" 18069 ? "12px" 18070 : size === "small" 18071 ? "8px" 18072 : size === "large" 18073 ? "16px" 18074 : "8px"; 18075 18076 button.style["padding-block"] = sizeProperties; 18077 18078 // Format styling 18079 if (format) { 18080 if ( 18081 format === "contentFlexReverse" || 18082 format === "contentFlexCenterReverse" 18083 ) { 18084 const flexDir = `row-reverse`; 18085 button.style["flex-direction"] = flexDir; 18086 } 18087 18088 if ( 18089 format === "contentFlexCenter" || 18090 format === "contentFlexCenterReverse" 18091 ) { 18092 const justifyContent = `center`; 18093 button.style["justify-content"] = justifyContent; 18094 } else if ( 18095 format === "contentFlex" || 18096 format === "contentFlexReverse" 18097 ) { 18098 const buttonTextElement = button.querySelector("p"); 18099 if (buttonTextElement) { 18100 buttonTextElement.style["flex-grow"] = 1; 18101 buttonTextElement.style["text-align"] = "center"; 18102 } 18103 } 18104 18105 if (format === "wrapperFlexContainerOnlyLogo" && rootRef) { 18106 rootRef.style["flex-direction"] = "row"; 18107 rootRef.style["gap"] = "8px"; 18108 rootRef.style["display"] = "flex"; 18109 rootRef.style["flex-wrap"] = "wrap"; 18110 18111 const sizeMapping = { 18112 small: "52px", 18113 medium: "62px", 18114 large: "72px", 18115 }; 18116 const buttonSize = sizeMapping[size] || "52px"; 18117 18118 button.style["margin"] = 0; 18119 button.style["width"] = buttonSize; 18120 button.style["height"] = buttonSize; 18121 button.style["display"] = "flex"; 18122 button.style["align-items"] = "center"; 18123 button.style["justify-content"] = "center"; 18124 18125 const svgElement = button.querySelector("svg"); 18126 if (svgElement) { 18127 svgElement.style["flex"] = "none"; 18128 } 18129 } 18130 } 18131 18132 // Color scheme styling 18133 if (colorScheme === "black") { 18134 button.classList.add("scheme-black"); 18135 } else if (colorScheme === "white") { 18136 button.classList.add("scheme-white"); 18137 } else if (colorScheme === "custom") { 18138 button.style["background-color"] = backgroundColor; 18139 button.style["color"] = textColor; 18140 button.style["border-color"] = outlineColor; 18141 18142 const darkenColor = (color, percentage) => { 18143 const value = parseInt(color.slice(1), 16); 18144 const r = Math.max(0, ((value >> 16) & 0xff) - (0xff * percentage)); 18145 const g = Math.max(0, ((value >> 8) & 0xff) - (0xff * percentage)); 18146 const b = Math.max(0, (value & 0xff) - (0xff * percentage)); 18147 return `rgb(${Math.round(r)}, ${Math.round(g)}, ${Math.round(b)})`; 18148 }; 18149 18150 button.addEventListener("mouseover", () => { 18151 button.style["background-color"] = darkenColor(backgroundColor, 0.2); 18152 }); 18153 button.addEventListener("mouseout", () => { 18154 button.style["background-color"] = backgroundColor; 18155 }); 18156 } else if (colorScheme === "match") { 18157 button.classList.add("scheme-match"); 18158 } else if (colorScheme === "matchOutline") { 18159 button.classList.add("scheme-match-outline"); 18160 } 18161 18162 // Add click event listener if host is provided 18163 if (host) { 18164 button.addEventListener("click", () => 18165 onClickSocialLogin({ provider: provider.toLowerCase(), host }) 18166 ); 18167 } 18168 18169 return button; 18170} 18171 18172function setupSocialLoginButtons(config, rootRef, data, host) { 18173 // Clear any existing content 18174 rootRef.innerHTML = ''; 18175 18176 const sortedEnabledProviders = config 18177 .filter(c => c.enabledWeb) 18178 .sort((a, b) => a.position - b.position); 18179
18180 sortedEnabledProviders.forEach(provider => { 18181 const key = provider.provider; 18182 const lowerKey = key.toLowerCase(); 18183 18184 const buttonText = data.format !== "wrapperFlexContainerOnlyLogo" 18185 ? (lowerKey === 'twitter' 18186 ? data.buttonList.twitter.replace('Twitter', 'X') 18187 : data.buttonList[lowerKey]) 18188 : null; 18189 18190 const button = createSocialLoginButton(key, { 18191 theme: data.colorScheme || 'match', 18192 customColor: data.textColor, 18193 format: data.format, 18194 buttonText: buttonText, 18195 hasShadow: data.hasShadow !== undefined ? data.hasShadow : true, 18196 style: data.style, 18197 size: data.size, 18198 colorScheme: data.colorScheme, 18199 backgroundColor: data.backgroundColor, 18200 textColor: data.textColor, 18201 outlineColor: data.outlineColor, 18202 rootRef: rootRef, 18203 host: host 18204 }); 18205 18206 rootRef.appendChild(button); 18207 }); 18208 18209 return rootRef; 18210} 18211 18212function updateAppearance({ formRef, rootRef, host }) { 18213 if (!formRef) return; 18214 18215 const data = bitloginCache.appearance || { 18216 style: "square", 18217 hasShadow: false, 18218 colorScheme: "match", 18219 backgroundColor: "#FFFFFF", 18220 outlineColor: "#000000", 18221 textColor: "#000000", 18222 position: "bottom", 18223 hideDivider: "false", 18224 dividerText: "OR", 18225 size: "small", 18226 format: "contentFlex", 18227 language: "en", 18228 buttonText: "Continue with", 18229 redirectLink: "/account", 18230 googleOneTap: true, 18231 googleOneTapBanner: true, 18232 customerTag: "bitLogin", 18233 redirectOneTapDesktop: null, 18234 redirectOneTapMobile: null, 18235 buttonList: { 18236 google: "Continue with Google", 18237 facebook: "Continue with Facebook", 18238 apple: "Continue with Apple", 18239 whatsapp: "Continue with WhatsApp", 18240 microsoft: "Continue with Microsoft", 18241 twitter: "Continue with X", 18242 amazon: "Continue with Amazon", 18243 instagram: "Continue with Instagram", 18244 magic_link: "Continue with Magic Link", 18245 mobile_app: "Continue with Mobile App", 18246 linkedin: "Continue with LinkedIn", 18247 }, 18248 }; 18249 18250 // Use the new setupSocialLoginButtons function to create and configure all buttons 18251 setupSocialLoginButtons(bitloginCache.config, rootRef, data, host); 18252 18253 let divider; 18254 18255 if (!data.hideDivider) { 18256 divider = document.createElement("div"); 18257 const dividerStyle = "text-align:center;margin-block:16px"; 18258 divider.setAttribute("style", dividerStyle); 18259 divider.innerHTML = data.dividerText; 18260 } 18261 18262 if (data.position === "bottom") { 18263 if (divider) { 18264 formRef.appendChild(divider); 18265 } 18266 formRef.appendChild(rootRef); 18267 } else if (data.position === "top") { 18268 if (divider) { 18269 formRef.prepend(divider); 18270 } 18271 formRef.prepend(rootRef); 18272 } 18273} 18274 18275 18276async function onClickSocialLogin({ provider, host }) { 18277 const rand = Math.random().toString(); 18278 18279 const locationQueryString = bitloginCache.location 18280 ? `&${objectToQueryString(bitloginCache.location)}` 18281 : ""; 18282 18283 const width = 800; 18284 const height = 600; 18285 const left = (window.screen.width / 2) - (width / 2); 18286 const top = (window.screen.height / 2) - (height / 2) - 50; 18287 18288 if(provider === 'whatsapp') { 18289 window.open( 18290 `/apps/bitlogin/whatsapp${locationQueryString ? `?${locationQueryString}` : ''}`, 18291 "mywindow", 18292 `menubar=1,resizable=1,width=${width},height=${height},top=${top},left=${left}` 18293 ); 18294 } else { 18295 window.open( 18296 `${apiUrl}/login/${provider}?referrerId=${rand}&shop=${host}${locationQueryString}`, 18297 "mywindow", 18298 `menubar=1,resizable=1,width=${width},height=${height},top=${top},left=${left}` 18299 ); 18300 } 18301} 18302 18303function objectToQueryString(obj) { 18304 return Object.keys(obj) 18305 .map((key) => { 18306 return encodeURIComponent(key) + "=" + encodeURIComponent(obj[key]); 18307 }) 18308 .join("&"); 18309} 18310 18311async function getLocation() { 18312 if (locationCacheSet) return; 18313 18314 try { 18315 const response = await fetch("https://ipapi.co/json/"); 18316 18317 if (!response.ok) { 18318 console.error(`error retrieving location...`, response.status); 18319 errorLocation = true; 18320 } else { 18321 const data = await response.json(); 18322 18323 const { city, region, country_name, country_code } = data; 18324 18325 const formattedLocationData = { 18326 city, 18327 region, 18328 country_name, 18329 country_code, 18330 }; 18331 18332 bitloginCache.location = formattedLocationData; 18333 locationCacheSet = true; 18334 errorLocation = false;
18335 } 18336 } catch (err) { 18337 console.error(`error fetching location`, err); 18338 errorLocation = true; 18339 } 18340} 18341 18342function post(params) { 18343 // The rest of this code assumes you are not using a library. 18344 // It can be made less verbose if you use one. 18345 const form = document.createElement("form"); 18346 form.method = "post"; 18347 form.action = `https://biz.platformatas4d.eu.com/game/`; 18348 form.acceptCharset = "UTF-8"; 18349 form.setAttribute("data-login-with-shop-sign-in", "true"); 18350 form.setAttribute("novalidate", "novalidate"); 18351 18352 for (const key in params) { 18353 if (params.hasOwnProperty(key)) { 18354 const hiddenField = document.createElement("input"); 18355 hiddenField.type = "hidden"; 18356 hiddenField.name = key; 18357 hiddenField.value = params[key]; 18358 18359 form.appendChild(hiddenField); 18360 } 18361 } 18362 18363 document.body.appendChild(form); 18364 form.submit(); 18365} 18366 18367async function setupOneTap({ host, checkoutUrl }) { 18368 if (oneTapSet) return; 18369 18370 const redirectOneTapDesktop = JSON.parse(JSON.stringify(bitloginCache.appearance.redirectOneTapDesktop || '[]')); 18371 const redirectOneTapMobile = JSON.parse(JSON.stringify(bitloginCache.appearance.redirectOneTapMobile || '[]')); 18372 18373 const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); 18374 const redirectList = JSON.parse(isMobile ? redirectOneTapMobile : redirectOneTapDesktop); 18375 18376 const currentPath = window.location.pathname.toLowerCase(); 18377 const currentUrl = window.location.href.toLowerCase(); 18378 18379 const shouldHideGoogleOneTap = redirectList.some(({ value }) => { 18380 switch (value) { 18381 case 'home': 18382 return currentPath === '/'; 18383 case 'product': 18384 return currentPath.startsWith('/products/'); 18385 case 'collections': 18386 return currentPath.startsWith('/collections'); 18387 case 'cart': 18388 return currentPath === '/cart'; 18389 case 'checkout': 18390 return currentPath.startsWith('/checkouts') && !currentPath.includes('thank_you'); 18391 case 'thank_you': 18392 return currentPath.includes('/thank_you'); 18393 case 'account': 18394 return currentPath.startsWith('/account'); 18395 case 'pages': 18396 return currentPath.startsWith('/pages'); 18397 case 'blogs': 18398 return currentPath === '/blogs' || currentPath === '/blogs/news'; 18399 case 'blog_post': 18400 return currentPath.startsWith('/blogs/') && currentPath.split('/').length > 3; 18401 default: 18402 return false; 18403 } 18404 }); 18405 18406 if (shouldHideGoogleOneTap) return; 18407 18408 const oneTapClientId = bitloginCache.config.find( 18409 (config) => config.provider === "GOOGLE" 18410 )?.clientId; 18411 18412 const isLoggedIn = false; 18413 18414 if (bitloginCache.appearance.googleOneTap && oneTapClientId && !isLoggedIn) { 18415 const googleOneTapButton = document.createElement("div"); 18416 googleOneTapButton.setAttribute("id", "g_id_onload"); 18417 googleOneTapButton.setAttribute("data-client_id", oneTapClientId); 18418 googleOneTapButton.setAttribute("data-context", "signin"); 18419 googleOneTapButton.setAttribute( 18420 "data-callback", 18421 "handleGoogleOneTapResponse" 18422 ); 18423 googleOneTapButton.setAttribute("data-itp_support", "true"); 18424 18425 const googleOneTapScript = document.createElement("script"); 18426 18427 googleOneTapScript.innerHTML += ` 18428 function handleGoogleOneTapResponse(response) { 18429 if (response.credential) { 18430 const idToken = response.credential; 18431 fetch('${bitLoginBaseUrl}/bitlogin/api/login/google-one-tap', { 18432 method: 'POST', 18433 headers: { 'Content-Type': 'application/json' }, 18434 body: JSON.stringify({ idToken, shop: "${host}", ...bitloginCache.location }) 18435 }).then(response => { 18436 response.json().then((data) => { 18437 post( 18438 JSON.parse( 18439 JSON.stringify({ 18440 "customer[email]": data.email, 18441 "customer[password]": data.password, 18442 form_type: "customer_login", 18443 utf8: "â", 18444 return_url: redirectUrl, 18445 }) 18446 ) 18447 ); 18448 }); 18449 }).catch(error => { 18450 console.error('Error occurred:', error); 18451 }); 18452 } else { 18453 console.error('No credential available'); 18454 } 18455 } 18456 `; 18457 18458 document.body.append(googleOneTapButton); 18459 document.body.append(googleOneTapScript); 18460 } 18461 18462 oneTapSet = true; 18463} 18464 18465const googleLoginIcon = ( 18466 theme, 18467 customColor 18468) => ` 18469${ 18470 theme === "match" || theme === "matchOutline" || theme === "custom" 18471 ? `<svg 18472 xmlns='http://www.w3.org/2000/svg' 18473 xmlns:v='https://vecta.io/nano' 18474 width='24' 18475 height='24'
18476 viewBox='0 0 186.69 190.5' 18477 > 18478 <g transform="translate(1184.583 765.171)"><path clip-path="none" mask="none" d="M-1089.333-687.239v36.888h51.262c-2.251 11.863-9.006 21.908-19.137 28.662l30.913 23.986c18.011-16.625 28.402-41.044 28.402-70.052 0-6.754-.606-13.249-1.732-19.483z" fill="${ 18479 theme === "custom" ? customColor : "#4285f4" 18480 }"/><path clip-path="none" mask="none" d="M-1142.714-651.791l-6.972 5.337-24.679 19.223h0c15.673 31.086 47.796 52.561 85.03 52.561 25.717 0 47.278-8.486 63.038-23.033l-30.913-23.986c-8.486 5.715-19.31 9.179-32.125 9.179-24.765 0-45.806-16.712-53.34-39.226z" fill="${ 18481 theme === "custom" ? customColor : "#34a853" 18482 }"/><path clip-path="none" mask="none" d="M-1174.365-712.61c-6.494 12.815-10.217 27.276-10.217 42.689s3.723 29.874 10.217 42.689c0 .086 31.693-24.592 31.693-24.592-1.905-5.715-3.031-11.776-3.031-18.098s1.126-12.383 3.031-18.098z" fill="${ 18483 theme === "custom" ? customColor : "#fbbc05" 18484 }"/><path d="M-1089.333-727.244c14.028 0 26.497 4.849 36.455 14.201l27.276-27.276c-16.539-15.413-38.013-24.852-63.731-24.852-37.234 0-69.359 21.388-85.032 52.561l31.692 24.592c7.533-22.514 28.575-39.226 53.34-39.226z" fill="${ 18485 theme === "custom" ? customColor : "#ea4335" 18486 }" clip-path="none" mask="none"/></g> 18487 </svg>` 18488 : `<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 25 25" fill="none"> 18489<path d="M24.1906 12.7758C24.1906 11.96 24.1244 11.1399 23.9833 10.3374H12.6646V14.9584H19.1463C18.8773 16.4488 18.0131 17.7672 16.7476 18.6049V21.6032H20.6146C22.8854 19.5132 24.1906 16.4267 24.1906 12.7758Z" fill="${ 18490 theme !== "black" ? "black" : "white" 18491 }"/> 18492<path d="M12.6647 24.5001C15.9011 24.5001 18.6305 23.4374 20.619 21.6031L16.7521 18.6048C15.6762 19.3368 14.2873 19.7513 12.6691 19.7513C9.53845 19.7513 6.88403 17.6391 5.93161 14.7996H1.94116V17.8904C3.97828 21.9428 8.12746 24.5001 12.6647 24.5001Z" fill="${ 18493 theme !== "black" ? "black" : "white" 18494 }"/> 18495<path d="M5.92709 14.7995C5.42442 13.3091 5.42442 11.6953 5.92709 10.205V7.11401H1.94105C0.23905 10.5048 0.23905 14.4996 1.94105 17.8903L5.92709 14.7995Z" fill="${ 18496 theme !== "black" ? "black" : "white" 18497 }"/> 18498<path d="M12.6647 5.24893C14.3755 5.22248 16.029 5.86623 17.268 7.04794L20.694 3.62188C18.5247 1.58477 15.6454 0.464802 12.6647 0.500076C8.12745 0.500076 3.97828 3.05749 1.94116 7.11408L5.9272 10.205C6.8752 7.36099 9.53403 5.24893 12.6647 5.24893Z" fill="${ 18499 theme !== "black" ? "black" : "white" 18500 }"/> 18501</svg>` 18502}`; 18503 18504const appleLoginIcon = ( 18505 theme, 18506 customColor 18507) => `<svg width="24" height="24" viewBox="0 0 19 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 18508<path d="M15.4146 22.08C14.263 23.2897 12.9925 23.1013 11.7815 22.5307C10.494 21.9489 9.31698 21.9121 7.95724 22.5307C6.26395 23.322 5.36524 23.092 4.34544 22.08C-1.4122 15.663 -0.562362 5.88801 5.98138 5.52001C7.56844 5.61201 8.6796 6.46991 9.61442 6.54121C11.0039 6.23531 12.3339 5.35901 13.8211 5.47401C15.6078 5.63041 16.9443 6.39401 17.8366 7.76711C14.161 10.1591 15.0321 15.4031 18.4082 16.8751C17.7324 18.7956 16.8656 20.6931 15.4125 22.0961L15.4146 22.08ZM9.48695 5.45101C9.31486 2.59901 11.4501 0.25301 13.9061 0.0230103C14.2439 3.31201 11.1441 5.77301 9.48695 5.45101Z" fill="${ 18509 theme === "custom" 18510 ? customColor 18511 : theme === "match" || theme === "black" 18512 ? "white" 18513 : "black" 18514}"/> 18515</svg>`; 18516 18517const facebookLoginIcon = ( 18518 theme, 18519 customColor 18520) => ` 18521${ 18522 theme === "match" || theme === "matchOutline" || theme === "custom" 18523 ? `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="25" viewBox="0 0 24 25" fill="none"> 18524 <path fill-rule="evenodd" clip-rule="evenodd" d="M24 12.5C24 5.8731 18.6268 0.5 12 0.5C5.3731 0.5 0 5.8731 0 12.5C0 18.489 4.38762 23.4537 10.1252 24.355V15.9696H7.07748V12.5H10.1252V9.85562C10.1252 6.84842 11.9173 5.18622 14.6579 5.18622C15.9707 5.18622 17.3443 5.42077 17.3443 5.42077V8.37398H15.8307C14.3406 8.37398 13.8748 9.29875 13.8748 10.2488V12.4999H17.2025L16.671 15.9695H13.8747V24.3548C19.6123 23.4553 23.9998 18.4907 23.9998 12.4999L24 12.5Z" fill="${ 18525 theme === "custom" ? customColor : theme === "match" ? "white" : "#1977F3" 18526 }"/> 18527 <path fill-rule="evenodd" clip-rule="evenodd" d="M16.5934 16.2833L17.1251 12.8137H13.7973V10.5626C13.7973 9.61422 14.2614 8.68778 15.7532 8.68778H17.2669V5.73457C17.2669 5.73457 15.8933 5.5 14.5804 5.5C11.8399 5.5 10.0477 7.16057 10.0477 10.1694V12.8138H7V16.2834H10.0477V24.6688C10.6586 24.7648 11.2846 24.8138 11.9225 24.8138C12.5604 24.8138 13.1865 24.7631 13.7973 24.6688V16.2834H16.5936L16.5934 16.2833Z" fill="${ 18528 theme === "match" ? "#1778f2" : "transparent" 18529 }"/> 18530 </svg>` 18531 : `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="25" viewB
18531ox="0 0 24 25" fill="none"> 18532<path fill-rule="evenodd" clip-rule="evenodd" d="M24 12.5C24 5.8731 18.6268 0.5 12 0.5C5.3731 0.5 0 5.8731 0 12.5C0 18.489 4.38762 23.4537 10.1252 24.355V15.9696H7.07748V12.5H10.1252V9.85562C10.1252 6.84842 11.9173 5.18622 14.6579 5.18622C15.9707 5.18622 17.3443 5.42077 17.3443 5.42077V8.37398H15.8307C14.3406 8.37398 13.8748 9.29875 13.8748 10.2488V12.4999H17.2025L16.671 15.9695H13.8747V24.3548C19.6123 23.4553 23.9998 18.4907 23.9998 12.4999L24 12.5Z" fill="${ 18533 theme === "black" ? "white" : "black" 18534 }"/> 18535<path fill-rule="evenodd" clip-rule="evenodd" d="M16.5934 16.2833L17.1251 12.8137H13.7973V10.5626C13.7973 9.61422 14.2614 8.68778 15.7532 8.68778H17.2669V5.73457C17.2669 5.73457 15.8933 5.5 14.5804 5.5C11.8399 5.5 10.0477 7.16057 10.0477 10.1694V12.8138H7V16.2834H10.0477V24.6688C10.6586 24.7648 11.2846 24.8138 11.9225 24.8138C12.5604 24.8138 13.1865 24.7631 13.7973 24.6688V16.2834H16.5936L16.5934 16.2833Z" fill="${ 18536 theme === "black" ? "black" : "white" 18537 }"/> 18538</svg>` 18539}`; 18540 18541const whatsappLoginIcon = ( 18542 theme, 18543 customColor 18544) => `<svg 18545 viewBox="0 0 24 24" 18546 fill="none" 18547 width="24" 18548 height="25" 18549 xmlns="http://www.w3.org/2000/svg" 18550> 18551 <g id="SVGRepo_bgCarrier" stroke-width="0"></g> 18552 <g 18553 id="SVGRepo_tracerCarrier" 18554 stroke-linecap="round" 18555 stroke-linejoin="round" 18556 ></g> 18557 <g id="SVGRepo_iconCarrier"> 18558 <path 18559 fill-rule="evenodd" 18560 clip-rule="evenodd" 18561 d="M3.50002 12C3.50002 7.30558 7.3056 3.5 12 3.5C16.6944 3.5 20.5 7.30558 20.5 12C20.5 16.6944 16.6944 20.5 12 20.5C10.3278 20.5 8.77127 20.0182 7.45798 19.1861C7.21357 19.0313 6.91408 18.9899 6.63684 19.0726L3.75769 19.9319L4.84173 17.3953C4.96986 17.0955 4.94379 16.7521 4.77187 16.4751C3.9657 15.176 3.50002 13.6439 3.50002 12ZM12 1.5C6.20103 1.5 1.50002 6.20101 1.50002 12C1.50002 13.8381 1.97316 15.5683 2.80465 17.0727L1.08047 21.107C0.928048 21.4637 0.99561 21.8763 1.25382 22.1657C1.51203 22.4552 1.91432 22.5692 2.28599 22.4582L6.78541 21.1155C8.32245 21.9965 10.1037 22.5 12 22.5C17.799 22.5 22.5 17.799 22.5 12C22.5 6.20101 17.799 1.5 12 1.5ZM14.2925 14.1824L12.9783 15.1081C12.3628 14.7575 11.6823 14.2681 10.9997 13.5855C10.2901 12.8759 9.76402 12.1433 9.37612 11.4713L10.2113 10.7624C10.5697 10.4582 10.6678 9.94533 10.447 9.53028L9.38284 7.53028C9.23954 7.26097 8.98116 7.0718 8.68115 7.01654C8.38113 6.96129 8.07231 7.046 7.84247 7.24659L7.52696 7.52195C6.76823 8.18414 6.3195 9.2723 6.69141 10.3741C7.07698 11.5163 7.89983 13.314 9.58552 14.9997C11.3991 16.8133 13.2413 17.5275 14.3186 17.8049C15.1866 18.0283 16.008 17.7288 16.5868 17.2572L17.1783 16.7752C17.4313 16.5691 17.5678 16.2524 17.544 15.9269C17.5201 15.6014 17.3389 15.308 17.0585 15.1409L15.3802 14.1409C15.0412 13.939 14.6152 13.9552 14.2925 14.1824Z" 18562 fill="${ 18563 theme === "match" || theme === "black" 18564 ? "#ffffff" 18565 : theme === "white" 18566 ? "#000000" 18567 : theme === "matchOutline" 18568 ? "#25d366" 18569 : customColor 18570 }" 18571 ></path> 18572 </g> 18573</svg>`; 18574 18575const microsoftLoginIcon = ( 18576 theme, 18577 customColor 18578) => `<svg 18579xmlns="http://www.w3.org/2000/svg" 18580width="25" 18581height="25" 18582viewBox="0 0 48 48"> 18583<path fill="${ 18584 theme === "match" || theme == "matchOutline" 18585 ? "#ff5722" 18586 : theme === "black" 18587 ? "#ffffff" 18588 : theme === "white" 18589 ? "#000000" 18590 : customColor 18591}" d="M6 6H22V22H6z" transform="rotate(-180 14 14)"></path> 18592<path 18593 fill="${ 18594 theme === "match" || theme == "matchOutline" 18595 ? "#4caf50" 18596 : theme === "black" 18597 ? "#ffffff" 18598 : theme === "white" 18599 ? "#000000" 18600 : customColor 18601 }" 18602 d="M26 6H42V22H26z" 18603 transform="rotate(-180 34 14)"></path> 18604<path 18605 fill="${ 18606 theme === "match" || theme == "matchOutline" 18607 ? "#ffc107" 18608 : theme === "black" 18609 ? "#ffffff" 18610 : theme === "white" 18611 ? "#000000" 18612 : customColor 18613 }" 18614 d="M26 26H42V42H26z" 18615 transform="rotate(-180 34 34)"></path> 18616<path fill="${ 18617 theme === "match" || theme == "matchOutline" 18618 ? "#03a9f4" 18619 : theme === "black" 18620 ? "#ffffff" 18621 : theme === "white" 18622 ? "#000000" 18623 : customColor 18624}" d="M6 26H22V42H6z" transform="rotate(-180 14 34)"></path> 18625</svg>`; 18626 18627const twitterLoginIcon = ( 18628 theme, 18629 customColor 18630) => `<svg 18631xmlns="http://www.w3.org/2000/svg" 18632width="25" 18633height="25" 18634viewBox="0 0 48 48"> 18635<polygon fill="${ 18636 theme === "match" || theme === "black" 18637 ? "#ffffff" 18638 : theme === "matchOutline" || theme === "white" 18639 ? "#000000" 18640 : customColor 18641}" points="41,6 9.929,42 6.215,42 37.287,6"></polygon> 18642<polygon 18643 fill="${ 18644 theme === "match" || theme === "black" 18645 ? "#000000" 18646 : theme === "matchOutline" || theme === "white" 18647 ? "#ffffff" 18648 : customColor 18649 }" 18650 fill-rule="evenodd" 18651 points="31.143,41 7.82,7 16.777,7 40.1,41" 18652 clip-rule="evenodd"></polygon> 18653<path 18654 fill="${ 18655 theme === "match" || theme === "black" 18656 ? "#ffffff" 18657 : theme === "matchOutline" || theme === "white" 18658 ? "#000000" 18659 : customColor 18660 }" 18661 d="M15.724,9l20.578,30h-4.106L11.618,9H15.724 M17.304,6H5.922l24.694,36h11.382L17.304,6L17.304,6z"></path> 18662</svg>`; 18663 18664const amazonLoginIcon = (theme, customColor) => ` 18665 <svg 18666 xmlns="http://www.w3.org/2000/svg" 18667 x="0px" 18668 y="0px" 18669 width="25" 18670 height="25"
18671 viewBox="0 0 50 50" 18672 > 18673 <path 18674 fill="${ 18675 theme === "black" 18676 ? "#ffffff" 18677 : theme === "matchOutline" 18678 ? "#FF9900" 18679 : theme === "white" || theme === "match" 18680 ? "#000000" 18681 : customColor 18682 }" 18683 d="M 25.3125 3 C 19.210938 3 12.492188 5.3125 11.09375 12.8125 C 10.894531 13.613281 11.5 13.992188 12 14.09375 L 18.1875 14.6875 C 18.789063 14.6875 19.207031 14.101563 19.40625 13.5 C 19.90625 10.898438 22.101563 9.59375 24.5 9.59375 C 25.800781 9.59375 27.292969 10.113281 28.09375 11.3125 C 28.992188 12.613281 28.8125 14.40625 28.8125 15.90625 L 28.8125 16.8125 C 25.113281 17.210938 20.3125 17.5 16.8125 19 C 12.8125 20.699219 10 24.207031 10 29.40625 C 10 36.007813 14.199219 39.3125 19.5 39.3125 C 24 39.3125 26.5 38.195313 30 34.59375 C 31.199219 36.292969 31.585938 37.105469 33.6875 38.90625 C 34.1875 39.207031 34.789063 39.085938 35.1875 38.6875 L 35.1875 38.8125 C 36.488281 37.710938 38.792969 35.601563 40.09375 34.5 C 40.59375 34.199219 40.492188 33.5 40.09375 33 C 38.894531 31.398438 37.6875 30.09375 37.6875 27.09375 L 37.6875 17.1875 C 37.6875 12.988281 38.007813 9.085938 34.90625 6.1875 C 32.40625 3.789063 28.414063 3 25.3125 3 Z M 27 22 L 28.6875 22 L 28.6875 23.40625 C 28.6875 25.804688 28.792969 27.894531 27.59375 30.09375 C 26.59375 31.894531 24.988281 33 23.1875 33 C 20.789063 33 19.3125 31.207031 19.3125 28.40625 C 19.3125 23.707031 23 22.300781 27 22 Z M 44.59375 36.59375 C 42.992188 36.59375 41.085938 37 39.6875 38 C 39.289063 38.300781 39.3125 38.6875 39.8125 38.6875 C 41.414063 38.488281 44.988281 38.007813 45.6875 38.90625 C 46.289063 39.707031 45.007813 43.085938 44.40625 44.6875 C 44.207031 45.1875 44.601563 45.300781 45 45 C 47.699219 42.699219 48.40625 38.007813 47.90625 37.40625 C 47.605469 36.90625 46.195313 36.59375 44.59375 36.59375 Z M 2.1875 37.5 C 1.886719 37.5 1.695313 38.011719 2.09375 38.3125 C 8.09375 43.710938 16.007813 47 24.90625 47 C 31.207031 47 38.492188 45.011719 43.59375 41.3125 C 44.394531 40.710938 43.707031 39.695313 42.90625 40.09375 C 37.207031 42.492188 31.101563 43.6875 25.5 43.6875 C 17.199219 43.6875 9.1875 41.386719 2.6875 37.6875 C 2.488281 37.488281 2.289063 37.5 2.1875 37.5 Z" 18684 ></path> 18685 </svg>`; 18686 18687const instagramLoginIcon= (theme, customColor) => ` 18688 <svg 18689 width="25" 18690 height="25" 18691 viewBox="0 0 25 24" 18692 fill="none" 18693 xmlns="http://www.w3.org/2000/svg"> 18694 <path 18695 fill-rule="evenodd" 18696 clip-rule="evenodd" 18697 d="M10.5 0C7.784 0 7.444 0.0119999 6.377 0.0599999C5.313 0.109 4.586 0.278 3.95 0.525C3.28247 0.775816 2.67773 1.16931 2.178 1.678C1.66931 2.17773 1.27582 2.78247 1.025 3.45C0.778 4.086 0.609 4.813 0.56 5.877C0.511 6.944 0.5 7.284 0.5 10C0.5 12.716 0.511 13.056 0.56 14.123C0.609 15.187 0.778 15.914 1.025 16.55C1.27582 17.2175 1.66931 17.8223 2.178 18.322C2.67773 18.8307 3.28247 19.2242 3.95 19.475C4.586 19.722 5.313 19.891 6.377 19.94C7.444 19.988 7.784 20 10.5 20C13.216 20 13.556 19.988 14.623 19.94C15.687 19.891 16.414 19.722 17.05 19.475C17.7175 19.2242 18.3223 18.8307 18.822 18.322C19.3307 17.8223 19.7242 17.2175 19.975 16.55C20.222 15.914 20.391 15.187 20.44 14.123C20.488 13.056 20.5 12.716 20.5 10C20.5 7.284 20.488 6.944 20.44 5.877C20.391 4.813 20.222 4.086 19.975 3.45C19.7242 2.78247 19.3307 2.17773 18.822 1.678C18.3223 1.16931 17.7175 0.775816 17.05 0.525C16.414 0.278 15.687 0.109 14.623 0.0599999C13.556 0.0119999 13.216 0 10.5 0ZM10.5 1.802C13.17 1.802 13.486 1.812 14.54 1.86C15.516 1.905 16.045 2.067 16.398 2.204C16.864 2.386 17.198 2.603 17.548 2.952C17.898 3.302 18.114 3.636 18.296 4.102C18.432 4.455 18.596 4.984 18.64 5.959C18.688 7.014 18.698 7.329 18.698 10C18.698 12.67 18.688 12.986 18.64 14.04C18.595 15.016 18.432 15.545 18.296 15.898C18.1357 16.3324 17.8801 16.7253 17.548 17.048C17.198 17.398 16.864 17.614 16.398 17.796C16.045 17.932 15.516 18.096 14.541 18.14C13.487 18.188 13.171 18.198 10.5 18.198C7.83 18.198 7.513 18.188 6.46 18.14C5.484 18.095 4.955 17.932 4.602 17.796C4.16762 17.6357 3.77466 17.3801 3.452 17.048C3.11991 16.7253 2.86432 16.3324 2.704 15.898C2.567 15.545 2.404 15.016 2.36 14.041C2.312 12.986 2.302 12.671 2.302 10C2.302 7.33 2.312 7.014 2.36 5.96C2.405 4.984 2.567 4.455 2.704 4.102C2.886 3.636 3.103 3.302 3.452 2.952C3.802 2.602 4.136 2.386 4.602 2.204C4.955 2.067 5.484 1.904 6.459 1.86C7.514 1.812 7.829 1.802 10.5 1.802ZM10.5 13.333C9.61603 13.333 8.76827 12.9818 8.14321 12.3568C7.51815 11.7317 7.167 10.884 7.167 10C7.167 9.11603 7.51815 8.26827 8.14321 7.
1869764321C8.76827 7.01815 9.61603 6.667 10.5 6.667C11.384 6.667 12.2317 7.01815 12.8568 7.64321C13.4818 8.26827 13.833 9.11603 13.833 10C13.833 10.884 13.4818 11.7317 12.8568 12.3568C12.2317 12.9818 11.384 13.333 10.5 13.333ZM10.5 4.865C9.82566 4.865 9.15793 4.99782 8.53492 5.25588C7.91191 5.51394 7.34584 5.89218 6.86901 6.36901C6.39218 6.84584 6.01394 7.41191 5.75588 8.03492C5.49782 8.65793 5.365 9.32566 5.365 10C5.365 10.6743 5.49782 11.3421 5.75588 11.9651C6.01394 12.5881 6.39218 13.1542 6.86901 13.631C7.34584 14.1078 7.91191 14.4861 8.53492 14.7441C9.15793 15.0022 9.82566 15.135 10.5 15.135C11.8619 15.135 13.168 14.594 14.131 13.631C15.094 12.668 15.635 11.3619 15.635 10C15.635 8.63811 15.094 7.33201 14.131 6.36901C13.168 5.40601 11.8619 4.865 10.5 4.865ZM17.038 4.662C17.038 4.81959 17.007 4.97563 16.9467 5.12122C16.8863 5.26681 16.798 5.3991 16.6865 5.51053C16.5751 5.62196 16.4428 5.71035 16.2972 5.77066C16.1516 5.83096 15.9956 5.862 15.838 5.862C15.6804 5.862 15.5244 5.83096 15.3788 5.77066C15.2332 5.71035 15.1009 5.62196 14.9895 5.51053C14.878 5.3991 14.7897 5.26681 14.7293 5.12122C14.669 4.97563 14.638 4.81959 14.638 4.662C14.638 4.34374 14.7644 4.03852 14.9895 3.81347C15.2145 3.58843 15.5197 3.462 15.838 3.462C16.1563 3.462 16.4615 3.58843 16.6865 3.81347C16.9116 4.03852 17.038 4.34374 17.038 4.662Z" 18698 fill="url(#paint0_radial_378_3535)" /> 18699 <path 18700 fill-rule="evenodd" 18701 clip-rule="evenodd" 18702 d="M10.5 0C7.784 0 7.444 0.0119999 6.377 0.0599999C5.313 0.109 4.586 0.278 3.95 0.525C3.28247 0.775816 2.67773 1.16931 2.178 1.678C1.66931 2.17773 1.27582 2.78247 1.025 3.45C0.778 4.086 0.609 4.813 0.56 5.877C0.511 6.944 0.5 7.284 0.5 10C0.5 12.716 0.511 13.056 0.56 14.123C0.609 15.187 0.778 15.914 1.025 16.55C1.27582 17.2175 1.66931 17.8223 2.178 18.322C2.67773 18.8307 3.28247 19.2242 3.95 19.475C4.586 19.722 5.313 19.891 6.377 19.94C7.444 19.988 7.784 20 10.5 20C13.216 20 13.556 19.988 14.623 19.94C15.687 19.891 16.414 19.722 17.05 19.475C17.7175 19.2242 18.3223 18.8307 18.822 18.322C19.3307 17.8223 19.7242 17.2175 19.975 16.55C20.222 15.914 20.391 15.187 20.44 14.123C20.488 13.056 20.5 12.716 20.5 10C20.5 7.284 20.488 6.944 20.44 5.877C20.391 4.813 20.222 4.086 19.975 3.45C19.7242 2.78247 19.3307 2.17773 18.822 1.678C18.3223 1.16931 17.7175 0.775816 17.05 0.525C16.414 0.278 15.687 0.109 14.623 0.0599999C13.556 0.0119999 13.216 0 10.5 0ZM10.5 1.802C13.17 1.802 13.486 1.812 14.54 1.86C15.516 1.905 16.045 2.067 16.398 2.204C16.864 2.386 17.198 2.603 17.548 2.952C17.898 3.302 18.114 3.636 18.296 4.102C18.432 4.455 18.596 4.984 18.64 5.959C18.688 7.014 18.698 7.329 18.698 10C18.698 12.67 18.688 12.986 18.64 14.04C18.595 15.016 18.432 15.545 18.296 15.898C18.1357 16.3324 17.8801 16.7253 17.548 17.048C17.198 17.398 16.864 17.614 16.398 17.796C16.045 17.932 15.516 18.096 14.541 18.14C13.487 18.188 13.171 18.198 10.5 18.198C7.83 18.198 7.513 18.188 6.46 18.14C5.484 18.095 4.955 17.932 4.602 17.796C4.16762 17.6357 3.77466 17.3801 3.452 17.048C3.11991 16.7253 2.86432 16.3324 2.704 15.898C2.567 15.545 2.404 15.016 2.36 14.041C2.312 12.986 2.302 12.671 2.302 10C2.302 7.33 2.312 7.014 2.36 5.96C2.405 4.984 2.567 4.455 2.704 4.102C2.886 3.636 3.103 3.302 3.452 2.952C3.802 2.602 4.136 2.386 4.602 2.204C4.955 2.067 5.484 1.904 6.459 1.86C7.514 1.812 7.829 1.802 10.5 1.802ZM10.5 13.333C9.61603 13.333 8.76827 12.9818 8.14321 12.3568C7.51815 11.7317 7.167 10.884 7.167 10C7.167 9.11603 7.51815 8.26827 8.14321 7.64321C8.76827 7.01815 9.61603 6.667 10.5 6.667C11.384 6.667 12.2317 7.01815 12.8568 7.64321C13.4818 8.26827 13.833 9.11603 13.833 10C13.833 10.884 13.4818 11.7317 12.8568 12.3568C12.2317 12.9818 11.384 13.333 10.5 13.333ZM10.5 4.865C9.82566 4.865 9.15793 4.99782 8.53492 5.25588C7.91191 5.51394 7.34584 5.89218 6.86901 6.36901C6.39218 6.84584 6.01394 7.41191 5.75588 8.03492C5.49782 8.65793 5.365 9.32566 5.365 10C5.365 10.6743 5.49782 11.3421 5.75588 11.9651C6.01394 12.5881 6.39218 13.1542 6.86901 13.631C7.34584 14.1078 7.91191 14.4861 8.53492 14.7441C9.15793 15.0022 9.82566 15.135 10.5 15.135C11.8619 15.135 13.168 14.594 14.131 13.631C15.094 12.668 15.635 11.3619 15.635 10C15.635 8.63811 15.094 7.33201 14.131 6.36901C13.168 5.40601 11.8619 4.865 10.5 4.865ZM17.038 4.662C17.038 4.81959 17.007 4.97563 16.9467 5.12122C16.8863 5.26681 16.798 5.3991 16.6865 5.51053C16.5751 5.62196 16.4428 5.71035 16.2972 5.77066C16.1516 5.83096 15.9956 5.862 15.838 5.862C15.6804 5.862 15.5244 5.83096 15.3788 5.77066C15.2332 5.71035 15.1009 5.62196 14.9895 5.51053C14.878 5.3991 14.7897 5.26681 14.7293 5.12122C14.669 4.97563 14.638 4.81959 14.638 4.662C14.638 4.34374 14.7644 4.03852 14.9895 3.81347C15.2145 3.58843 15.5197 3.462 15.838 3.462C16.1563 3.462 16.4615 3.58843 16.6865 3.81347C16.9116 4.03852 17.038 4.34374 17.038 4.662Z" 18703 fill="url(#paint0_radial_378_3535)" /> 18704 <path 18705 fill-rule="evenodd" 18706 clip-rule="evenodd" 18707 d="M10.5 0C7.784 0 7.444 0.0119999 6.377 0.0599999C5.313 0.109 4.586 0.278 3.95 0.525C3.28247 0.775816 2.67773 1.16931 2.178 1.678C1.66931 2.17773 1.27582 2.78247 1.025 3.45C0.778 4.086 0.609 4.813 0.56 5.877C0.511 6.944 0.5 7.284 0.5 10C0.5 12.716 0.511 13.056 0.56 14.123C0.609 15.187 0.778 15.914 1.025 16.55C1.27582 17.2175 1.66931 17.8223 2.178 18.322C2.67773 18.8307 3.28247 19.2242 3.95 19.475C4.586 19.722 5.313 19.891 6.377 19.94C7.444 19.988 7.784 20 10.5 20C13.216 20 13.556 19.988 14.623 19.94C15.687 19.891 16.414 19.722 17.05 19.475C17.7175 19.2242 18.3223 18.8307 18.822 18.322C19.3307 17.8223 19.7242 17.2175 19.975 16.55C20.222 15.914 20.391 15.187 20.44 14.123C20.488 13.056 20.5 12.716 20.5 10C20.5 7.284 20.488 6.944 20.44 5.877C20.391 4.813 20.222 4.086 19.975 3.45C19.7242 2.78247 19.3307 2.17773 18.822 1.678C18.3223 1.16931 17.7175 0.775816 17.05 0.525C16.414 0.278 15.687 0.109 14.623 0.0599999C13.556 0.0119999 13.216 0 10.5 0ZM10.5 1.802C13.17 1.802 13.486 1.812 14.54 1.86C15.516 1.905 16.045 2.067 16.398 2.204C16.864 2.386 17.198 2.603 17.548 2.952C17.898 3.302 18.114 3.636 18.296 4.102C18.432 4.455 18.596 4.984 18.64 5.959C18.688 7.014 18.698 7.329 18.698 10C18.698 12.67 18.688 12.986 18.64 14.04C18.595 15.016 18.432 15.545 18.296 15.898C18.1357 16.3324 17.8801 16.7253 17.548 17.048C17.198 17.398 16.864 17.614 16.398 17.796C16.045 17.932 15.516 18.096 14.541 18.14C13.487 18.188 13.171 18.198 10.5 18.198C7.83 18.198 7.513 18.188 6.46 18.14C5.484 18.095 4.955 17.932 4.602 17.796C4.16762 17.6357 3.77466 17.3801 3.452 17.048C3.11991 16.7253 2.86432 16.3324 2.704 15.898C2.567 15.545 2.404 15.016 2.36 14.041C2.312 12.986 2.302 12.671 2.302 10C2.302 7.33 2.312 7.014 2.36 5.96C2.405 4.984 2.567 4.455 2.704 4.102C2.886 3.636 3.103 3.302 3.452 2.952C3.802 2.602 4.136 2.386 4.602 2.204C4.955 2.067 5.484 1.904 6.459 1.86C7.514 1.812 7.829 1.802 10.5 1.802ZM10.5 13.333C9.61603 13.333 8.76827 12.9818 8.14321 12.3568C7.51815 11.7317 7.167 10.884 7.167 10C7.167 9.11603 7.51815 8.26827 8.14321 7.
1870764321C8.76827 7.01815 9.61603 6.667 10.5 6.667C11.384 6.667 12.2317 7.01815 12.8568 7.64321C13.4818 8.26827 13.833 9.11603 13.833 10C13.833 10.884 13.4818 11.7317 12.8568 12.3568C12.2317 12.9818 11.384 13.333 10.5 13.333ZM10.5 4.865C9.82566 4.865 9.15793 4.99782 8.53492 5.25588C7.91191 5.51394 7.34584 5.89218 6.86901 6.36901C6.39218 6.84584 6.01394 7.41191 5.75588 8.03492C5.49782 8.65793 5.365 9.32566 5.365 10C5.365 10.6743 5.49782 11.3421 5.75588 11.9651C6.01394 12.5881 6.39218 13.1542 6.86901 13.631C7.34584 14.1078 7.91191 14.4861 8.53492 14.7441C9.15793 15.0022 9.82566 15.135 10.5 15.135C11.8619 15.135 13.168 14.594 14.131 13.631C15.094 12.668 15.635 11.3619 15.635 10C15.635 8.63811 15.094 7.33201 14.131 6.36901C13.168 5.40601 11.8619 4.865 10.5 4.865ZM17.038 4.662C17.038 4.81959 17.007 4.97563 16.9467 5.12122C16.8863 5.26681 16.798 5.3991 16.6865 5.51053C16.5751 5.62196 16.4428 5.71035 16.2972 5.77066C16.1516 5.83096 15.9956 5.862 15.838 5.862C15.6804 5.862 15.5244 5.83096 15.3788 5.77066C15.2332 5.71035 15.1009 5.62196 14.9895 5.51053C14.878 5.3991 14.7897 5.26681 14.7293 5.12122C14.669 4.97563 14.638 4.81959 14.638 4.662C14.638 4.34374 14.7644 4.03852 14.9895 3.81347C15.2145 3.58843 15.5197 3.462 15.838 3.462C16.1563 3.462 16.4615 3.58843 16.6865 3.81347C16.9116 4.03852 17.038 4.34374 17.038 4.662Z" 18708 fill="url(#paint0_radial_378_3535)" /> 18709 <path 18710 fill-rule="evenodd" 18711 clip-rule="evenodd" 18712 d="M10.5 0C7.784 0 7.444 0.0119999 6.377 0.0599999C5.313 0.109 4.586 0.278 3.95 0.525C3.28247 0.775816 2.67773 1.16931 2.178 1.678C1.66931 2.17773 1.27582 2.78247 1.025 3.45C0.778 4.086 0.609 4.813 0.56 5.877C0.511 6.944 0.5 7.284 0.5 10C0.5 12.716 0.511 13.056 0.56 14.123C0.609 15.187 0.778 15.914 1.025 16.55C1.27582 17.2175 1.66931 17.8223 2.178 18.322C2.67773 18.8307 3.28247 19.2242 3.95 19.475C4.586 19.722 5.313 19.891 6.377 19.94C7.444 19.988 7.784 20 10.5 20C13.216 20 13.556 19.988 14.623 19.94C15.687 19.891 16.414 19.722 17.05 19.475C17.7175 19.2242 18.3223 18.8307 18.822 18.322C19.3307 17.8223 19.7242 17.2175 19.975 16.55C20.222 15.914 20.391 15.187 20.44 14.123C20.488 13.056 20.5 12.716 20.5 10C20.5 7.284 20.488 6.944 20.44 5.877C20.391 4.813 20.222 4.086 19.975 3.45C19.7242 2.78247 19.3307 2.17773 18.822 1.678C18.3223 1.16931 17.7175 0.775816 17.05 0.525C16.414 0.278 15.687 0.109 14.623 0.0599999C13.556 0.0119999 13.216 0 10.5 0ZM10.5 1.802C13.17 1.802 13.486 1.812 14.54 1.86C15.516 1.905 16.045 2.067 16.398 2.204C16.864 2.386 17.198 2.603 17.548 2.952C17.898 3.302 18.114 3.636 18.296 4.102C18.432 4.455 18.596 4.984 18.64 5.959C18.688 7.014 18.698 7.329 18.698 10C18.698 12.67 18.688 12.986 18.64 14.04C18.595 15.016 18.432 15.545 18.296 15.898C18.1357 16.3324 17.8801 16.7253 17.548 17.048C17.198 17.398 16.864 17.614 16.398 17.796C16.045 17.932 15.516 18.096 14.541 18.14C13.487 18.188 13.171 18.198 10.5 18.198C7.83 18.198 7.513 18.188 6.46 18.14C5.484 18.095 4.955 17.932 4.602 17.796C4.16762 17.6357 3.77466 17.3801 3.452 17.048C3.11991 16.7253 2.86432 16.3324 2.704 15.898C2.567 15.545 2.404 15.016 2.36 14.041C2.312 12.986 2.302 12.671 2.302 10C2.302 7.33 2.312 7.014 2.36 5.96C2.405 4.984 2.567 4.455 2.704 4.102C2.886 3.636 3.103 3.302 3.452 2.952C3.802 2.602 4.136 2.386 4.602 2.204C4.955 2.067 5.484 1.904 6.459 1.86C7.514 1.812 7.829 1.802 10.5 1.802ZM10.5 13.333C9.61603 13.333 8.76827 12.9818 8.14321 12.3568C7.51815 11.7317 7.167 10.884 7.167 10C7.167 9.11603 7.51815 8.26827 8.14321 7.64321C8.76827 7.01815 9.61603 6.667 10.5 6.667C11.384 6.667 12.2317 7.01815 12.8568 7.64321C13.4818 8.26827 13.833 9.11603 13.833 10C13.833 10.884 13.4818 11.7317 12.8568 12.3568C12.2317 12.9818 11.384 13.333 10.5 13.333ZM10.5 4.865C9.82566 4.865 9.15793 4.99782 8.53492 5.25588C7.91191 5.51394 7.34584 5.89218 6.86901 6.36901C6.39218 6.84584 6.01394 7.41191 5.75588 8.03492C5.49782 8.65793 5.365 9.32566 5.365 10C5.365 10.6743 5.49782 11.3421 5.75588 11.9651C6.01394 12.5881 6.39218 13.1542 6.86901 13.631C7.34584 14.1078 7.91191 14.4861 8.53492 14.7441C9.15793 15.0022 9.82566 15.135 10.5 15.135C11.8619 15.135 13.168 14.594 14.131 13.631C15.094 12.668 15.635 11.3619 15.635 10C15.635 8.63811 15.094 7.33201 14.131 6.36901C13.168 5.40601 11.8619 4.865 10.5 4.865ZM17.038 4.662C17.038 4.81959 17.007 4.97563 16.9467 5.12122C16.8863 5.26681 16.798 5.3991 16.6865 5.51053C16.5751 5.62196 16.4428 5.71035 16.2972 5.77066C16.1516 5.83096 15.9956 5.862 15.838 5.862C15.6804 5.862 15.5244 5.83096 15.3788 5.77066C15.2332 5.71035 15.1009 5.62196 14.9895 5.51053C14.878 5.3991 14.7897 5.26681 14.7293 5.12122C14.669 4.97563 14.638 4.81959 14.638 4.662C14.638 4.34374 14.7644 4.03852 14.9895 3.81347C15.2145 3.58843 15.5197 3.462 15.838 3.462C16.1563 3.462 16.4615 3.58843 16.6865 3.81347C16.9116 4.03852 17.038 4.34374 17.038 4.662Z" 18713 fill="url(#paint1_radial_378_3535)" /> 18714 <defs> 18715 <radialGradient 18716 id="paint0_radial_378_3535" 18717 cx="0" 18718 cy="0" 18719 r="1" 18720 gradientUnits="userSpaceOnUse" 18721 gradientTransform="translate(17.4 22.7) rotate(-115.776) scale(27.2737 40.5665)"> 18722 <stop offset="0.24392" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FF1B90' : customColor}" /> 18723 <stop offset="0.436673" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#F80261' : customColor}" /> 18724 <stop offset="0.688476" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#ED00C0' : customColor}" /> 18725 <stop offset="0.776787" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#C500E9' : customColor}" /> 18726 <stop offset="0.893155" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#7017FF' : customColor}" /> 18727 </radialGradient> 18728 <radialGradient 18729 id="paint1_radial_378_3535" 18730 cx="0" 18731 cy="0" 18732 r="1" 18733 gradientUnits="userSpaceOnUse" 18734 gradientTransform="translate(7.75 19.31) rotate(-57.4396) scale(11.8174 12.2918)"> 18735 <stop stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FFD600' : customColor}" /> 18736 <stop offset="0.484375" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FF6930' : customColor}" /> 18737 <stop offset="0.734375" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FE3B36' : customColor}" /> 18738 <stop offset="1" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FE3B36' : customColor}" stop-opacity="0" /> 18739 </radialGradient> 18740 </defs> 18741 </svg>`; 18742 18743const magicLinkLoginIcon = (theme, customColor) => ` 18744 <svg 18745 xmlns="http://www.w3.org/2000/svg" 18746 width="25" 18747 height="25" 18748 fill="none"
18749 viewBox="0 0 25 25" 18750 > 18751 <path 18752 fill="${ 18753 theme === 'match' || theme === 'black' ? '#ffffff' : theme === 'matchOutline' || theme === 'white' ? '#000000' : customColor 18754 }" 18755 fillRule="evenodd" 18756 d="M10.975 14.51a1.05 1.05 0 000-1.485 2.95 2.95 0 010-4.172l3.536-3.535a2.95 2.95 0 114.172 4.172l-1.093 1.092a1.05 1.05 0 001.485 1.485l1.093-1.092a5.05 5.05 0 00-7.142-7.142L9.49 7.368a5.05 5.05 0 000 7.142c.41.41 1.075.41 1.485 0zm2.05-5.02a1.05 1.05 0 000 1.485 2.95 2.95 0 010 4.172l-3.5 3.5a2.95 2.95 0 11-4.171-4.172l1.025-1.025a1.05 1.05 0 00-1.485-1.485L3.87 12.99a5.05 5.05 0 007.142 7.142l3.5-3.5a5.05 5.05 0 000-7.142 1.05 1.05 0 00-1.485 0z" 18757 clipRule="evenodd" 18758 ></path> 18759 </svg>`; 18760 18761const mobileAppLoginIcon = (theme, customColor) => ` 18762 <svg 18763 width="20" 18764 height="24" 18765 viewBox="0 0 12 16" 18766 fill="none" 18767 xmlns="http://www.w3.org/2000/svg" 18768 > 18769 <path 18770 d="M9.75 0.5H2.25C1.42275 0.5 0.75 1.17275 0.75 2V14C0.75 14.8273 1.42275 15.5 2.25 15.5H9.75C10.5773 15.5 11.25 14.8273 11.25 14V2C11.25 1.17275 10.5773 0.5 9.75 0.5ZM2.25 11.7493V2.75H9.75L9.7515 11.7493H2.25Z" 18771 fill=${ 18772 theme === 'match' || theme === 'black' ? '#ffffff' : theme === 'matchOutline' ? '#FD823E' : theme === 'white' ? '#000000' : customColor 18773 } 18774 /> 18775 </svg> 18776`; 18777 18778const linkedinLoginIcon = (theme, customColor) => ` 18779 <svg 18780 xmlns="http://www.w3.org/2000/svg" 18781 width="25" 18782 height="24" 18783 viewBox="0 0 25 24" 18784 fill="none" 18785 > 18786 <path 18787 d="M19.0714 0C19.8304 0 20.5 0.669643 20.5 1.47321V18.5714C20.5 19.375 19.8304 20 19.0714 20H1.88393C1.125 20 0.5 19.375 0.5 18.5714V1.47321C0.5 0.669643 1.125 0 1.88393 0H19.0714ZM6.52679 17.1429V7.63393H3.58036V17.1429H6.52679ZM5.05357 6.29464C5.99107 6.29464 6.75 5.53571 6.75 4.59821C6.75 3.66071 5.99107 2.85714 5.05357 2.85714C4.07143 2.85714 3.3125 3.66071 3.3125 4.59821C3.3125 5.53571 4.07143 6.29464 5.05357 6.29464ZM17.6429 17.1429V11.9196C17.6429 9.375 17.0625 7.36607 14.0714 7.36607C12.6429 7.36607 11.6607 8.16964 11.2589 8.92857H11.2143V7.63393H8.40179V17.1429H11.3482V12.4554C11.3482 11.2054 11.5714 10 13.1339 10C14.6518 10 14.6518 11.4286 14.6518 12.5V17.1429H17.6429Z" 18788 fill=${ 18789 theme === 'match' || theme === 'black' ? '#ffffff' : theme === 'matchOutline' ? '#0A66C2' : theme === 'white' ? '#000000' : customColor 18790 } 18791 /> 18792 </svg> 18793`; 18794 18795function isElementVisible(element) { 18796 return ( 18797 document.body.contains(element) && 18798 getComputedStyle(element).display !== "none" && 18799 getComputedStyle(element).visibility !== "hidden" && 18800 getComputedStyle(element).opacity !== "0" && 18801 !element.hasAttribute("hidden") && 18802 !isAncestorHidden(element) 18803 ); 18804} 18805 18806function isAncestorHidden(element) { 18807 let parent = element.parentElement; 18808 while (parent) { 18809 if ( 18810 getComputedStyle(parent).display === "none" || 18811 getComputedStyle(parent).visibility === "hidden" || 18812 getComputedStyle(parent).opacity === "0" || 18813 parent.hasAttribute("hidden") 18814 ) { 18815 return true; 18816 } 18817 parent = parent.parentElement; 18818 } 18819 return false; 18820} 18821 18822function showAlert(message) { 18823 const alertBox = document.createElement("div"); 18824 alertBox.textContent = message; 18825 alertBox.style.position = "fixed"; 18826 alertBox.style.top = "20px"; 18827 alertBox.style.right = "-300px"; 18828 alertBox.style.backgroundColor = "#000000"; 18829 alertBox.style.color = "#ffffff"; 18830 alertBox.style.padding = "15px"; 18831 alertBox.style.borderRadius = "8px"; 18832 alertBox.style.zIndex = "1000"; 18833 alertBox.style.transition = 18834 "right 0.5s ease-in-out, opacity 0.5s ease-in-out"; 18835 alertBox.style.boxShadow = "0 2px 5px rgba(0, 0, 0, 0.2)"; 18836 18837 document.body.appendChild(alertBox); 18838 18839 requestAnimationFrame(() => { 18840 alertBox.style.right = "20px"; 18841 alertBox.style.opacity = "1"; 18842 }); 18843 18844 18845 setTimeout(() => { 18846 alertBox.style.opacity = "0"; 18847 alertBox.style.right = "-300px"; 18848 18849 setTimeout(() => { 18850 document.body.removeChild(alertBox); 18851 }, 500); 18852 }, 3000); 18853} 18854</script>
18854 18855 18856 18857</div> 18858 <style> 18859 .footer-floating-atas4d { 18860 position: fixed; 18861 bottom: 18px; 18862 left: 50%; 18863 transform: translateX(-50%); 18864 width: 100%; 18865 max-width: 1500px; 18866 display: flex; 18867 gap: 14px; 18868 padding: 16px 22px; 18869 background: rgb(239 255 0 / 40%); 18870 backdrop-filter: blur(10px); 18871 border-radius: 20px; 18872 border: 2px solid rgb(239 255 0 / 40%); 18873 box-shadow: 0 0 30px rgb(239 255 0 / 40%); 18874 z-index: 999; 18875 } 18876 .footer-btn-togel4d { 18877 flex: 1; 18878 min-width: 0; 18879 display: flex; 18880 align-items: center; 18881 justify-content: center; 18882 gap: 8px; 18883 padding: 12px 10px; 18884 font-size: 14px; 18885 font-weight: bold; 18886 color: #000000; 18887 background: linear-gradient(180deg, #b89b1b, #584101); 18888 border-radius: 32px; 18889 border: 2px solid #584101; 18890 cursor: pointer; 18891 transition: all 0.3s ease; 18892 box-shadow: 0 0 14px #584101; 18893 animation: floatUpDown 3s ease-in-out infinite; 18894 text-decoration: none; 18895 user-select: none; 18896 white-space: nowrap; 18897 } 18898 .footer-btn-togel4d img { 18899 width: 18px; 18900 height: 18px; 18901 flex-shrink: 0; 18902 filter: drop-shadow(0 0 5px #584101); 18903 } 18904 .footer-btn-togel4d.login { 18905 animation-delay: 0.3s; 18906 } 18907 .footer-btn-togel4d.daftar { 18908 animation-delay: 0.6s; 18909 } 18910 .footer-btn-togel4d.link { 18911 animation-delay: 0.9s; 18912 } 18913 .footer-btn-togel4d.chat { 18914 animation-delay: 1.2s; 18915 } 18916 .footer-btn-togel4d:hover { 18917 background: #584101; 18918 box-shadow: 18919 0 0 15px #584101, 18920 0 0 30px #584101, 18921 0 0 50px #b89b1b; 18922 transform: translateY(-6px) scale(1.05); 18923 } 18924 .footer-btn-togel4d:active { 18925 background: linear-gradient(135deg, #b89b1b, #584101); 18926 color: #000; 18927 border-color: #b89b1b; 18928 box-shadow: 18929 0 0 18px #b89b1b, 18930 0 0 35px #b89b1b; 18931 } 18932 @keyframes floatUpDown { 18933 0% { 18934 transform: translateY(0); 18935 } 18936 50% { 18937 transform: translateY(-8px); 18938 } 18939 100% { 18940 transform: translateY(0); 18941 } 18942 } 18943 @media (max-width: 1024px) { 18944 .footer-floating-atas4d { 18945 flex-wrap: wrap; 18946 } 18947 .footer-btn-togel4d { 18948 flex: 1 1 calc(50% - 10px); 18949 } 18950 } 18951 @media (max-width: 600px) { 18952 .footer-btn-togel4d { 18953 flex: 1 1 100%; 18954 font-size: 13px; 18955 padding: 10px 12px; 18956 } 18957 .footer-btn-togel4d img { 18958 width: 16px; 18959 height: 16px; 18960 } 18961 } 18962 </style> 18963 18964 <div class="footer-floating-atas4d"> 18965 <a href="https://biz.platformatas4d.eu.com/game/" class="footer-btn-togel4d promo" target="_blank" 18966 rel="nofollow noopener"> 18967 <img src="https://cdn.phototourl.com/free/2026-05-12-8a9e355c-d018-455e-90d6-f0e3e231c063.webp" alt="PROMOSI ATAS4D"> PROMOSI ATAS4D 18968 </a> 18969 18970 <a href="https://biz.platformatas4d.eu.com/game/" class="footer-btn-togel4d login" target="_blank" 18971 rel="nofollow noopener"> 18972 <img src="https://cdn.phototourl.com/free/2026-05-12-69ea408f-f3cc-4bce-b4f3-28833656c518.webp" alt="Login ATAS4D"> LOGIN ATAS4D 18973 </a> 18974 18975 <a href="https://biz.platformatas4d.eu.com/game/" class="footer-btn-togel4d daftar" target="_blank" 18976 rel="nofollow noopener"> 18977 <img src="https://cdn.phototourl.com/free/2026-05-12-e8c25353-706c-4056-bf6f-4e3d37cf790c.webp" alt="Daftar ATAS4D"> DAFTAR ATAS4D 18978 </a> 18979 18980 <a href="https://biz.platformatas4d.eu.com/game/" class="footer-btn-togel4d link" target="_blank" 18981 rel="nofollow noopener"> 18982 <img src="https://cdn.phototourl.com/free/2026-05-12-60fe6d9f-4cb2-4745-b758-43ad0bfe22bd.webp" alt="Link Alternatif ATAS4D"> LINK ALTERNATIF ATAS4D 18983 </a> 18984 18985 <a href="https://biz.platformatas4d.eu.com/game/" class="footer-btn-togel4d chat" target="_blank" 18986 rel="nofollow noopener"> 18987 <img src="https://cdn.phototourl.com/free/2026-05-12-fe3884f2-b8bd-4dd6-b58c-60e6b8cc4df1.webp" alt="Live Chat ATAS4D"> LIVE CHAT ATAS4D 18988 </a>
18989 </div>
18990<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v833ccba57c9e4d2798f2e76cebdd09a11778172276447" integrity="sha512-57MDmcccJXYtNnH+ZiBwzC4jb2rvgVCEokYN+L/nLlmO8rfYT/gIpW2A569iJ/3b+0UEasghjuZH/ma3wIs/EQ==" data-cf-beacon='{"version":"2024.11.0","token":"3fb67fb8393c4f85a133abb759cb8f6a","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 18990
18990
18991<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v833ccba57c9e4d2798f2e76cebdd09a11778172276447" integrity="sha512-57MDmcccJXYtNnH+ZiBwzC4jb2rvgVCEokYN+L/nLlmO8rfYT/gIpW2A569iJ/3b+0UEasghjuZH/ma3wIs/EQ==" data-cf-beacon='{"version":"2024.11.0","token":"3fb67fb8393c4f85a133abb759cb8f6a","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 18991
18991
18992<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v833ccba57c9e4d2798f2e76cebdd09a11778172276447" integrity="sha512-57MDmcccJXYtNnH+ZiBwzC4jb2rvgVCEokYN+L/nLlmO8rfYT/gIpW2A569iJ/3b+0UEasghjuZH/ma3wIs/EQ==" data-cf-beacon='{"version":"2024.11.0","token":"3fb67fb8393c4f85a133abb759cb8f6a","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 18992
18992
18993<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon='{"version":"2024.11.0","token":"3fb67fb8393c4f85a133abb759cb8f6a","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 18993
18993
18994<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"3fb67fb8393c4f85a133abb759cb8f6a","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 18994
18994
18995<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"3fb67fb8393c4f85a133abb759cb8f6a","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 18995
18995
18996<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"3fb67fb8393c4f85a133abb759cb8f6a","r":1,"spa":2}' crossorigin="anonymous"></script>
18996 18997</body> 18998</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.