PageSourceSearch

https://hotelverta.com/

html hotelverta.com collected 2026-09-27 09:31:57 UTC 897,543 bytes, 19,096 lines download raw bytes

1
2
3<!doctype html>
4<!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]-->
5<!--[if IE 9 ]> <html class="ie9 no-js"> <![endif]-->
6<!-- [if (gt IE 9)|!(IE)]><! -->
7<html class="no-js">
8  <!-- <![endif] -->
9<head><meta charset="utf-8">
10<meta http-equiv="X-UA-Compatible" content="IE=edge">
11<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1">
12<meta name="apple-itunes-app" content="app-id=1576832504">
13<meta content='index, follow, nosnippet' name='robots'>
14<!-- Title and description -->
15<title>HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman</title>
16<meta name="description" content="HANTUSLOT menghadirkan beragam game online modern dengan dukungan fitur berbahasa Indonesia, sehingga pengguna dapat memahami setiap menu dan fitur dengan lebih mudah serta menikmati pengalaman bermain yang praktis dan nyaman.">
17<meta name="keywords" content="HANTUSLOT, HANTUSLOT LOGIN, GAME HANTUSLOT, GAME ONLINE, FITUR INOVATIF, GAME BERBAHASA INDONESIA, GAME REKOMENDASI, FITUR UNGGULAN GAME ONLINE" />
18<link rel="canonical" href="https://hotelverta.com/">
19<link rel="amphtml" href="https://amp.hotelverta.com/">
20<link rel="alternate" href="https://amp.hotelverta.com/"> 
21<link rel="alternate" href="https://amp.hotelverta.com/" hreflang="id">
22<link rel="alternate" href="https://amp.hotelverta.com/" hreflang="en">
23<link rel="alternate" href="https://amp.hotelverta.com/" hreflang="en">
24<link rel="alternate" href="https://amp.hotelverta.com/" hreflang="x-default">
25<link rel="alternate" hreflang="id-ID" href="https://amp.hotelverta.com/" />
26<link rel="alternate" hreflang="en-US" href="https://amp.hotelverta.com/" />
27<link rel="alternate" hreflang="en-SG" href="https://amp.hotelverta.com/" />
28<!-- /snippets/social-meta-tags.liquid -->
29<meta property="og:type" content="website">
30<meta property="og:title" content="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman">
31<meta property="og:image" content="https://imagesme.b-cdn.net/landing/banner-hotelverta.png">
32<meta property="og:image:secure_url" content="https://imagesme.b-cdn.net/landing/banner-hotelverta.png">
33<meta property="og:image" content="https://imagesme.b-cdn.net/landing/banner-hotelverta.png">
34<meta property="og:image:secure_url" content="https://imagesme.b-cdn.net/landing/banner-hotelverta.png">
35<meta property="og:image" content="https://imagesme.b-cdn.net/landing/banner-hotelverta.png">
36<meta property="og:image:secure_url" content="https://imagesme.b-cdn.net/landing/banner-hotelverta.png">
37<meta property="og:description" content="HANTUSLOT menghadirkan beragam game online modern dengan dukungan fitur berbahasa Indonesia, sehingga pengguna dapat memahami setiap menu dan fitur dengan lebih mudah serta menikmati pengalaman bermain yang praktis dan nyaman.">
38<meta property="og:price:amount" content="1.386.737">
39<meta property="og:price:currency" content="IDR">
40<meta property="og:url" content="https://hotelverta.com/"> 
41<meta property="og:site_name" content="https://hotelverta.com/">
42<meta name="twitter:site" content="@hantuslot">
43<meta name="twitter:card" content="summary">
44<meta name="twitter:title" content="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman">
45<meta name="twitter:description" content="HANTUSLOT menghadirkan beragam game online modern dengan dukungan fitur berbahasa Indonesia, sehingga pengguna dapat memahami setiap menu dan fitur dengan lebih mudah serta menikmati pengalaman bermain yang praktis dan nyaman.">
46<meta name="twitter:image" content="https://imagesme.b-cdn.net/landing/banner-hotelverta.png">
47<meta name="twitter:image:width" content="600">
48<meta name="twitter:image:height" content="600">
49<link rel="shortcut icon" href="https://hsimage.b-cdn.net/amp/hantuslot-logo2.webp">
50<meta name="theme-color" content="#212121">
51<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700&family=Poppins&display=swap" rel="stylesheet">
52<link href="https://outerbloom.com/cdn/shop/t/138/assets/custom-styles.css?v=94643080714485117621752652418" rel="stylesheet" type="text/css" media="all" />
53<link rel="stylesheet" href="https://outerbloom.com/cdn/shop/t/138/assets/wishlist-styles.css?v=26657665320743256831769518695">
54<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/select2.min.css">
54<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
54
55
56<script
57      src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js"
58      integrity="sha512-57oZ/vW8ANMjR/KQ6Be9v/+/h6bq9/l3f0Oc7vn6qMqyhvPd1cvKBRWWpzu0QoneImqr2SkmO4MSqU+RpHom3Q=="
59      crossorigin="anonymous"
60      referrerpolicy="no-referrer"
61    ></script>
61
62    
62<script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js" async="async"></script>
62
63    
63<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/select2.min.js"></script>
63<!-- Facebook Pixel Code -->
64    
64<script>
vendor: 462 bytes, lines 64-73
64
65      !function(f,b,e,v,n,t,s)
66      {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
67      n.callMethod.apply(n,arguments):n.queue.push(arguments)};
68      if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
69      n.queue=[];t=b.createElement(e);t.async=!0;
70      t.src=v;s=b.getElementsByTagName(e)[0];
71      s.parentNode.insertBefore(t,s)}(window, document,'script',
72      'https://connect.facebook.net/en_US/fbevents.js');
73      fbq('init', '
73165971065669324
vendor: 42 bytes, lines 73-75
73');
74      fbq('track', 'PageView');
75    
75</script>
75
76    <noscript
77      ><img
78        height="1"
79        width="1"
80        style="display:none"
81        src="https://www.facebook.com/tr?id=165971065669324&ev=PageView&noscript=1"
82    ></noscript>
83    
83<script src="//cdnjs.cloudflare.com/ajax/libs/vissense/0.9.0/vissense.js" defer></script>
83
84  
85    <!-- Bing UET -->
86    
86<script>
87      (function(w,d,t,r,u)
88      {
89          var f,n,i;
90          w[u]=w[u]||[],f=function()
91          {
92              var o={ti:"343051754", tm:"shpfy_ui", enableAutoSpaTracking: true};
93              o.q=w[u],w[u]=new UET(o),w[u].push("pageLoad")
94          },
95          n=d.createElement(t),n.src=r,n.async=1,n.onload=n.onreadystatechange=function()
96          {
97              var s=this.readyState;
98              s&&s!=="loaded"&&s!=="complete"||(f(),n.onload=n.onreadystatechange=null)
99          },
100          i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i)
101      })
102      (window,document,"script","//bat.bing.com/bat.js","uetq");
103    </script>
103
104    
104<script>
105      window.uetq = window.uetq || [];
106      window.uetq.push('event', '', {"revenue_value":0,"currency":"IDR"});
107    </script>
107
108    <!-- End Bing UET -->
109  
110    <!-- Microsoft Clarity -->
111    
111<script type="text/javascript">
112      (function(c,l,a,r,i,t,y){
113          c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
114          t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
115          y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
116      })(window, document, "clarity", "script", "h7rbxqry9k");
117    </script>
117
118    <!-- End Microsoft Clarity -->
119
120    <!-- Apollo Script - Tracking Visitor -->
121    
121<script>
122      function initApollo(){var n=Math.random().toString(36).substring(7),o=document.createElement("script");
123      o.src="https://assets.apollo.io/micro/website-tracker/tracker.iife.js?nocache="+n,o.async=!0,o.defer=!0,
124      o.onload=function(){window.trackingFunctions.onLoad({appId:"68805f12b2074b001d43bfd8"})},
125      document.head.appendChild(o)}initApollo();
126    </script>
126
127    <!-- End Apollo Script - Tracking Visitor -->
128
129
130<link href="https://outerbloom.com/cdn/shop/t/138/assets/combine.min.css?v=36663939493595550161770794813" rel="stylesheet" type="text/css" media="all" />
131
132<link href="https://outerbloom.com/cdn/shop/t/138/assets/font-awesome.css?v=132324219581463622051752652421" rel="stylesheet" type="text/css" media="all" />
133<link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.min.css">
134
135<script src="//code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
vendor: 2 bytes, line 135
135
136<script src="https://outerbloom.com/cdn/shop/t/138/assets/combine.js?v=140218079523075729301752652421" type="text/javascript"></script>
vendor: 2 bytes, line 136
136
137<script src="//code.jquery.com/ui/1.13.0/jquery-ui.min.js"></script>
vendor: 2 bytes, line 137
137
138<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
138
139<meta name="google-site-verification" content="s8q5UdNv-FnGYfM0jmT2is66TNRdkVW63NK2ecD0IVY" />
140<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/15896833/digital_wallets/dialog">
141<link rel="alternate" type="application/json+oembed" href="https://hotelverta.com/.oembed">
142<script async="async" src="/checkouts/internal/preloads.js?locale=en-ID"></script>
vendor: 2 bytes, line 142
142
143<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: 2 bytes, line 143
143
144<script>var Shopify = Shopify || {};
145Shopify.shop = "outerbloom1.myshopify.com";
146Shopify.locale = "en";
147Shopify.currency = {"active":"IDR","rate":"1.0"};
148Shopify.country = "ID";
149Shopify.theme = {"name":"web-outerbloom-shopify\/main","id":153139282135,"schema_name":null,"schema_version":null,"theme_store_id":null,"role":"main"};
150Shopify.theme.handle = "null";
151Shopify.theme.style = {"id":null,"handle":null};
152Shopify.cdnHost = "outerbloom.com/cdn";
153Shopify.routes = Shopify.routes || {};
154Shopify.routes.root = "/";</script>
vendor: 2 bytes, line 154
154
155<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 2 bytes, line 155
155
156<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: 2 bytes, line 156
156
157<script id="shop-js-analytics" type="application/json">{"pageType":"product"}</script>
vendor: 2 bytes, line 157
157
158<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: 2 bytes, line 158
158
159<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: 2 bytes, line 159
159
160<script defer="defer" async type="module" src="https://outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/chunk.modal_BxEbAqG6.en.esm.js"></script>
vendor: 2 bytes, line 160
160
161<script type="module">
162  await import("https://outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/client.init-shop-cart-sync_BLuSqYWl.en.esm.js");
163await import("https://outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/chunk.common_DplD2_3Q.en.esm.js");
164await import("https://outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/chunk.modal_BxEbAqG6.en.esm.js");
165
166  window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true});
167
168</script>
vendor: 2 bytes, line 168
168
169<script>(function() {
170  var isLoaded = false;
171  function asyncLoad() {
172    if (isLoaded) return;
173    isLoaded = true;
174    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"];
175    for (var i = 0; i < urls.length; i++) {
176      var s = document.createElement('script');
177      s.type = 'text/javascript';
178      s.async = true;
179      s.src = urls[i];
180      var x = document.getElementsByTagName('script')[0];
181      x.parentNode.insertBefore(s, x);
182    }
183  };
184  if(window.attachEvent) {
185    window.attachEvent('onload', asyncLoad);
186  } else {
187    window.addEventListener('load', asyncLoad, false);
188  }
189})();</script>
vendor: 2 bytes, line 189
189
190<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: 2 bytes, line 190
190
191<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 2 bytes, line 191
191
192<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: 2 bytes, line 192
192
193<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: 2 bytes, line 193
193
194<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)}};
195</script>
vendor: 2 bytes, line 195
195
196<script data-source-attribution="shopify.dynamic_checkout.buyer_consent">
197  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);
198</script>
vendor: 2 bytes, line 198
198
199<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})}}));
200</script>
200
201
202<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
202
203    <!-- /snippets/oldIE-js.liquid -->
204
205
206<!--[if lt IE 9]>
207<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js" type="text/javascript"></script>
vendor: 2 bytes, line 207
207
208<script src="https://outerbloom.com/cdn/shop/t/138/assets/respond.min.js?v=52248677837542619231752652418" type="text/javascript"></script>
208
209<link href="https://outerbloom.com/cdn/shop/t/138/assets/respond-proxy.html" id="respond-proxy" rel="respond-proxy" />
210<link href="https://outerbloom.com/search?q=142e9156869335090161dced0ac98b64" id="respond-redirect" rel="respond-redirect" />
211<script src="https://outerbloom.com/search?q=142e9156869335090161dced0ac98b64" type="text/javascript"></script>
211
212<![endif]-->
213
214
215
216  
217    
218  <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">
219<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
220<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: 2 bytes, line 220
220
221<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.386.737.0,"currencyCode":"IDR"},"product":{"title":"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman","vendor":"Outerbloom Hampers","id":"7881418965207","untranslatedTitle":"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman","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]HANTUSLOT","title":"Standard","untranslatedTitle":"Standard"},{"price":{"amount":635000.0,"currencyCode":"IDR"},"product":{"title":"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman","vendor":"Outerbloom Hampers","id":"7881418965207","untranslatedTitle":"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman","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.386.737.0,\"currencyCode\":\"IDR\"},\"product\":{\"title\":\"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman\",\"vendor\":\"Outerbloom Hampers\",\"id\":\"7881418965207\",\"untranslatedTitle\":\"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman\",\"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]HANTUSLOT\",\"title\":\"Standard\",\"untranslatedTitle\":\"Standard\"}}]]"});</script>
221<script>
222  window.ShopifyAnalytics = window.ShopifyAnalytics || {};
223  window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
224  window.ShopifyAnalytics.meta.currency = 'IDR';
225  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.386.73700,"name":"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman - Standard","public_title":"Standard","sku":"[C]HANTUSLOT"},{"id":45873024008407,"price":63500000,"name":"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman - 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"}};
226  for (var attr in meta) {
227    window.ShopifyAnalytics.meta[attr] = meta[attr];
228  }
229</script>
vendor: 2 bytes, line 229
229
230<script class="analytics">
231  (function () {
232    var customDocumentWrite = function(content) {
233      var jquery = null;
234
235      if (window.jQuery) {
236        jquery = window.jQuery;
237      } else if (window.Checkout && window.Checkout.$) {
238        jquery = window.Checkout.$;
239      }
240
241      if (jquery) {
242        jquery('body').append(content);
243      }
244    };
245
246    var hasLoggedConversion = function(token) {
247      if (token) {
248        return document.cookie.indexOf('loggedConversion=' + token) !== -1;
249      }
250      return false;
251    }
252
253    var setCookieIfConversion = function(token) {
254      if (token) {
255        var twoMonthsFromNow = new Date(Date.now());
256        twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2);
257
258        document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow;
259      }
260    }
261
262    var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || [];
263    if (trekkie.integrations) {
264      return;
265    }
266    trekkie.methods = [
267      'identify',
268      'page',
269      'ready',
270      'track',
271      'trackForm',
272      'trackLink'
273    ];
274    trekkie.factory = function(method) {
275      return function() {
276        var args = Array.prototype.slice.call(arguments);
277        args.unshift(method);
278        trekkie.push(args);
279        return trekkie;
280      };
281    };
282    for (var i = 0; i < trekkie.methods.length; i++) {
283      var key = trekkie.methods[i];
284      trekkie[key] = trekkie.factory(key);
285    }
286    trekkie.load = function(config) {
287      trekkie.config = config || {};
288      trekkie.config.initialDocumentCookie = document.cookie;
289      var first = document.getElementsByTagName('script')[0];
290      var script = document.createElement('script');
291      script.type = 'text/javascript';
292      script.onerror = function(e) {
293        var scriptFallback = document.createElement('script');
294        scriptFallback.type = 'text/javascript';
295        scriptFallback.onerror = function(error) {
296                var Monorail = {
297      produce: function produce(monorailDomain, schemaId, payload) {
298        var currentMs = new Date().getTime();
299        var event = {
300          schema_id: schemaId,
301          payload: payload,
302          metadata: {
303            event_created_at_ms: currentMs,
304            event_sent_at_ms: currentMs
305          }
306        };
307        return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event));
308      },
309      sendRequest: function sendRequest(endpointUrl, payload) {
310        // Try the sendBeacon API
311        if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) {
312          var blobData = new window.Blob([payload], {
313            type: 'text/plain'
314          });
315
316          if (window.navigator.sendBeacon(endpointUrl, blobData)) {
317            return true;
318          } // sendBeacon was not successful
319
320        } // XHR beacon
321
322        var xhr = new XMLHttpRequest();
323
324        try {
325          xhr.open('POST', endpointUrl);
326          xhr.setRequestHeader('Content-Type', 'text/plain');
327          xhr.send(payload);
328        } catch (e) {
329          console.log(e);
330        }
331
332        return false;
333      },
334      isIos12: function isIos12() {
335        return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1;
336      }
337    };
338    Monorail.produce('monorail-edge.shopifysvc.com',
339      'trekkie_storefront_load_errors/1.1',
340      {shop_id: 15896833,
341      theme_id: 153139282135,
342      app_name: "storefront",
343      context_url: window.location.href,
344      source_url: "https://outerbloom.com/cdn/s/trekkie.storefront.79c9ee2a1f7d217701a15e49200b1e976848d6d6.min.js"});
345
346        };
347        scriptFallback.async = true;
348        scriptFallback.src = 'https://outerbloom.com/cdn/s/trekkie.storefront.79c9ee2a1f7d217701a15e49200b1e976848d6d6.min.js';
349        first.parentNode.insertBefore(scriptFallback, first);
350      };
351      script.async = true;
352      script.src = 'https://outerbloom.com/cdn/s/trekkie.storefront.79c9ee2a1f7d217701a15e49200b1e976848d6d6.min.js';
353      first.parentNode.insertBefore(script, first);
354    };
355    trekkie.load(
356      {"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
35619447","b5387b81"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}}
357    );
358
359    var loaded = false;
360    trekkie.ready(function() {
361      if (loaded) return;
362      loaded = true;
363
364      window.ShopifyAnalytics.lib = window.trekkie;
365
366      var originalDocumentWrite = document.write;
367      document.write = customDocumentWrite;
368      try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {};
369      document.write = originalDocumentWrite;
370
371      window.ShopifyAnalytics.lib.page(null,{"pageType":"product","resourceType":"product","resourceId":7881418965207,"requestId":"9772bf95-0c76-4bf8-8585-5e940331d073-1771788748","shopifyEmitted":true});
372
373      var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/)
374      var token = match? match[1]: undefined;
375      if (!hasLoggedConversion(token)) {
376        setCookieIfConversion(token);
377        window.ShopifyAnalytics.lib.track("Viewed Product",{"currency":"IDR","variantId":45873023910103,"productId":7881418965207,"productGid":"gid:\/\/shopify\/Product\/7881418965207","name":"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman - Standard","price":"1.386.737.00","sku":"[C]HANTUSLOT","brand":"Outerbloom Hampers","variant":"Standard","category":"Parcel Inhouse","nonInteraction":true,"remote":false},undefined,undefined,{"shopifyEmitted":true});
378      window.ShopifyAnalytics.lib.track("monorail:\/\/trekkie_storefront_viewed_product\/1.1",{"currency":"IDR","variantId":45873023910103,"productId":7881418965207,"productGid":"gid:\/\/shopify\/Product\/7881418965207","name":"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman - Standard","price":"1.386.737.00","sku":"[C]HANTUSLOT","brand":"Outerbloom Hampers","variant":"Standard","category":"Parcel Inhouse","nonInteraction":true,"remote":false,"referer":"https:\/\/outerbloom.com\/products\/outerbloom-mulan-bag-hampers"});
379      }
380    });
381
382
383        var eventsListenerScript = document.createElement('script');
384        eventsListenerScript.async = true;
385        eventsListenerScript.src = "https://outerbloom.com/cdn/shopifycloud/storefront/assets/shop_events_listener-3da45d37.js";
386        document.getElementsByTagName('head')[0].appendChild(eventsListenerScript);
387
388})();</script>
388
389  
389<script>
390  if (!window.ga || (window.ga && typeof window.ga !== 'function')) {
391    window.ga = function ga() {
392      (window.ga.q = window.ga.q || []).push(arguments);
393      if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {
394        window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"});
395      }
396      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.");
397    };
398    if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {
399      window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"});
400    }
401  }
402</script>
vendor: 2 bytes, line 402
402
403<script
404  defer
405  src="https://outerbloom.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.1.0.min.js"
406  data-application="storefront-renderer"
407  data-shop-id="15896833"
408  data-render-region="gcp-asia-southeast1"
409  data-page-type="product"
410  data-theme-instance-id="153139282135"
411  data-theme-name=""
412  data-theme-version=""
413  data-monorail-region="shop_domain"
414  data-resource-timing-sampling-rate="10"
415  data-shs="true"
416  data-shs-beacon="true"
417  data-shs-export-with-fetch="true"
418  data-shs-logs-sample-rate="1"
419  data-shs-beacon-endpoint="https://outerbloom.com/api/collect"
420></script>
420
421</head><body
422    data-template="product"
423    id="cny-ruby-mulan-bag-hampers"
424    class="template-product template-product"
425  >
426
427    <div class="header-wrapper">
428      
429      <div id="shopify-section-NotifBar" class="shopify-section m-0">
430
431<style>
432  :root {--topbar-bg: #212121;}
433  #notification {z-index: 99;width: 100%;transition: top 0.2s ease-in-out;}
434  #notification.promo-up {top: -48px!important;}
435  .promo-bg {width: 100%;padding: 6px 0;background-color: #212121;}
436  .notification__message p {margin: 0;color: #ffffff;font-size: 14px!important;}
437  .notification__message p a {text-decoration: underline;color: #ffffff;}
438  @media (max-width: 991px){
439    .notification__message p {font-size: 14px!important;}
440  }
441</style>
442<input id="clearCookie" class="hide" type="button" value="Delete Cookie" />
443<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">
444  <div class="page-width notification__inner ">
445    
446    
447    <div class="notification__message text-center">
448      <p><a href="https://hotelverta.com/" title="Parcel">HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman</a></p>
449    </div>
450  </div>
451</div>
452
453
454
455
456</div>
457      <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" />
458
459
460<header>
461  <div class="container">
462    <div class="header-container row justify-content-between pl-lg-0 pr-lg-0">
463      <div class="header-icons header-icon-left col-3">
464        <div id="menu-hamburger" class="d-lg-none">
465          <svg xmlns="http://www.w3.org/2000/svg" width="16" height="10" viewBox="0 0 16 10" fill="none">
466  <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"/>
467</svg>
468
469        </div>
470        <div id="" class="search-icon">
471          <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
472  <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"/>
473</svg>
474
475        </div>
476      </div>
477
478      <div class="logo col-6 text-center">
479        <h1 class="hide hidden"><img src="https://imagesme.b-cdn.net/icon/logo-hotelverta.gif" alt="HANTUSLOT" style="height:50px; width:140px;"></h1>
480        <a href="https://hotelverta.com/"><img src="https://imagesme.b-cdn.net/icon/logo-hotelverta.gif" alt="HANTUSLOT" style="height:50px; width:140px;">
481         </a>
482      </div>
483
484      <div class="header-icon-right header-icons col-3">
485        <div class="icon icon-account-header d-none d-lg-block">
486          <a href="https://amp.hotelverta.com/">
487            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="21" viewBox="0 0 20 21" fill="none">
488  <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"/>
489  <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"/>
490</svg>
491
492          </a>
493        </div>
494        <div class="icon icon-wishlist-header">
495          <a href="https://amp.hotelverta.com/">
496            <svg xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none">
497  <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
4976 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"/>
498</svg>
499
500            
501          </a>
502        </div>
503        <div class="icon icon-cart-header">
504          <a href="https://amp.hotelverta.com/">
505            <svg xmlns="http://www.w3.org/2000/svg" width="22" height="21" viewBox="0 0 22 21" fill="none">
506  <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"/>
507  <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"/>
508</svg>
509
510            <span class="cart-count">0</span>
511          </a>
512        </div>
513      </div>
514    </div>
515  </div>
516</header>
517
518<nav class="nav-header">
519  <div class="nav-account-mobile row m-0 d-lg-none">
520    <div class="col-6 welcome-cust p-0">
521      
522        HANTUSLOT
523      
524    </div>
525    
526      <div class="col-6 login-register text-right p-0">
527        <a href="https://amp.hotelverta.com/">Log In</a> | <a href="https://amp.hotelverta.com/">Sign Up</a>
528      </div>
529    
530  </div>
531  <ul class="nav-menu container">
532    
533      <li id="new-arrival" class="">
534        <a href="https://hotelverta.com/">
535          <span>HANTUSLOT</span>
536          
537        </a>
538        
539      </li>
540    
541      <li id="flowers" class=" has-child">
542        <a href="https://hotelverta.com/">
543          <span>HANTUSLOT LOGIN</span>
544          
545        <span class="chevron-right d-lg-none">
546          <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg">
547            <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
548          </svg>
549        </span>
550          
551        </a>
552        
553    
554      <li id="cakes-gifts" class=" has-child">
555        <a href="https://hotelverta.com/">
556          <span>GAME ONLINE</span>
557          
558        <span class="chevron-right d-lg-none">
559          <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg">
560            <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
561          </svg>
562        </span>
563          
564        </a>
565        
566         
567      <li id="bunga-papan" class=" has-child">
568        <a href="https://hotelverta.com/">
569          <span>FITUR INOVATIF</span>
570          
571        <span class="chevron-right d-lg-none">
572          <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg">
573            <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
574          </svg>
575        </span>
576          
577        </a>
578        
579    
580      <li id="occasions" class=" has-child">
581        <a href="https://hotelverta.com/">
582          <span>GAME BAHASA INDONESIA</span>
583          
584        <span class="chevron-right d-lg-none">
585          <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg">
586            <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
587          </svg>
588        </span>
589          
590        </a>
591        
592    
593      <li id="locations" class=" has-child">
594        <a href="https://hotelverta.com/">
595          <span>GAME REKOMENDASI</span>
596          
597        <span class="chevron-right d-lg-none">
598          <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg">
599            <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
600          </svg>
601        </span>
602          
603        </a>
604        </div>
605          </div>
606        
607      </li>
608    
609  </ul>
610</nav>
611<div class="overlay-nav">
612  <!-- Mobile Close Button in Overlay -->
613  <button id="nav-close" class="nav-close-btn d-lg-none">
614    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
615      <path d="M18 6L6 18M6 6L18 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
616    </svg>
617  </button>
618</div>
619
620<script>
621  if ($(window).width() < 992) {
622    // Level 1 menu accordion (main menu items)
623    $(".nav-menu .has-child > a").click(function(e){
624      e.preventDefault()
625      const parentLi = $(this).parent()
626      const isCurrentlyOpen = parentLi.hasClass("menu-open")
627      
628      // Close all other open menus (accordion behavior)
629      $(".nav-menu .has-child").not(parentLi).removeClass("menu-open")
630      $(".nav-menu .megamenu").not($(this).next(".megamenu")).slideUp()
631      
632      // Toggle current menu
633      if (isCurrentlyOpen) {
634        parentLi.removeClass("menu-open")
635        $(this).next(".megamenu").slideUp()
636      } else {
637        parentLi.addClass("menu-open")
638        $(this).next(".megamenu").slideDown()
639      }
640    })
641
642    // Level 2 menu accordion (submenu items with grandchildren)
643    $(document).on('click', '.dropdown-menu .has-submenu > a', function(e){
644      e.preventDefault()
645      const parentLi = $(this).parent()
646      const isCurrentlyOpen = parentLi.hasClass("submenu-open")
647      const grandchild = $(this).next(".grandchild")
648      
649      // Close all other open submenus in the same dropdown (accordion behavior)
650      parentLi.siblings('.has-submenu').removeClass("submenu-open")
651      parentLi.siblings('.has-submenu').find('.grandchild').slideUp()
652      parentLi.siblings('.has-submenu').find('.chevron-right').css('transform', 'rotate(0deg)')
653      
654      // Toggle current submenu
655      if (isCurrentlyOpen) {
656        parentLi.removeClass("submenu-open")
657        grandchild.slideUp()
658        $(this).find('.chevron-right').css('transform', 'rotate(0deg)')
659      } else {
660        parentLi.addClass("submenu-open")
661        grandchild.slideDown()
662        $(this).find('.chevron-right').css('transform', 'rotate(90deg)')
663      }
664    })
665
666    $("#menu-hamburger").click(function(e){
667      e.preventDefault()
668      $("body").toggleClass("nav_open")
669    })
670    
671    // Handle close button click
672    $("#nav-close").click(function(e){
673      e.preventDefault()
674      $("body").removeClass("nav_open")
675      // Close all open menus when close button is clicked
676      $(".nav-menu .has-child").removeClass("menu-open")
677      $(".nav-menu .megamenu").slideUp()
678      $(".dropdown-menu .has-submenu").removeClass("submenu-open")
679      $(".dropdown-menu .grandchild").slideUp()
680      $(".dropdown-menu .chevron-right").css('transform', 'rotate(0deg)')
681    })
682  }
683
684  $(".overlay-nav").click(function(e){
685      e.preventDefault()
686      $("body").removeClass("nav_open")
687      // Close all open menus when overlay is clicked
688      $(".nav-menu .has-child").removeClass("menu-open")
689      $(".nav-menu .megamenu").slideUp()
690      $(".dropdown-menu .has-submenu").removeClass("submenu-open")
691      $(".dropdown-menu .grandchild").slideUp()
692      $(".dropdown-menu .chevron-right").css('transform', 'rotate(0deg)')
693  })
694
695  // Update cart count
696  function updateCartCount() {
697    fetch('/cart.js')
698      .then(response => response.json())
699      .then(cart => {
700        const cartCount = cart.item_count;
701        const cartCountEl = $('.cart-count');
702        
703        if (cartCount > 0) {
704          cartCountEl.text(cartCount).show();
705        } else {
706          cartCountEl.hide();
707        }
708      })
709      .catch(error => console.error('Error fetching cart:', error));
710  }
711
712  // Initialize cart count on page load
713  $(document).ready(function() {
714    updateCartCount();
715    
716    // Listen for cart changes
717    document.addEventListener('cart-updated', updateCartCount);
718  });
719</script>
719
720
721
722</div>
723
724      <div id="shopify-section-search-popup" class="shopify-section m-0"><style>
725  #search-trigger {
726    cursor: pointer;
727  }
728  #search-popup {
729    display: none;
730    position: fixed;
731    left: 0;
732    width: 100%;
733    top: 0;
734    height: 100%;
735    justify-content: center;
736    z-index: 9999;
737    background: rgb(196 196 196 / 30%);
738  }
739  #search-input {
740    align-self: center;
741    width: 100%;
742    height: 80px;
743    position: absolute;
744    top: 0;
745    border-bottom: 0.5px solid #A3A3A3;
746    background-color: #fff;
747  }
748  #search-input * {
749    align-self: center;
750  }
751  #search-type {
752    width: 100%;
753    border: none;
754    padding-right: 20px;
755    padding-left: 20px;
756    font-size: 16px;
757    color: #757575;
758  }
759  #search-btn {
760    font-size: 16px;
761    font-weight: 500;
762  }
763  #search-result {
764    background-color: #fff;
765    min-height: 490px;
766    width: 100%;
767    padding-top: 80px;
768  }
769  #search-result .container {
770    padding: 20px 40px;
771  }
772  body.search-popup-open {
773    overflow: hidden;
774  }
775  .search-popup-open #loc_delivery {
776    display: none
777  }
778  .search-header svg {
779    display: none;
780    cursor: pointer;
781  }
782  .wrapper-search-popup {
783    max-height: calc(100vh - 150px);
784    overflow-y: auto;
785    overflow-x: hidden;
786  }
787
788  .group-recommend {
789    padding: 20px 40px;
790  }
791
792  .resultsearch {
793    display: none;
794  }
795  .results { padding: 20px 40px }
796  .resultsearch label {
797    font-weight: 600;
798    padding-bottom: 20px;
799    display: block;
800    margin-bottom: 20px;
801    border-bottom: 1px solid #AAAAAA;
802  }
803
804  ul.result_collection {
805    overflow: auto;
806  }
807
808  .skeleton-loader {
809    padding: 10px 0;
810  }
811
812  .skeleton-item {
813    height: 20px;
814    background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
815    background-size: 200% 100%;
816    animation: loading 1.5s infinite;
817    margin-bottom: 12px;
818    border-radius: 4px;
819  }
820
821  .skeleton-product-card {
822    display: flex;
823    flex-direction: column;
824    margin-bottom: 15px;
825  }
826
827  .skeleton-product-image {
828    width: 100%;
829    aspect-ratio: 1;
830    background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
831    background-size: 200% 100%;
832    animation: loading 1.5s infinite;
833    border-radius: 4px;
834    margin-bottom: 10px;
835  }
836
837  .skeleton-product-title {
838    height: 16px;
839    background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
840    background-size: 200% 100%;
841    animation: loading 1.5s infinite;
842    border-radius: 4px;
843    margin-bottom: 8px;
844  }
845
846  .skeleton-product-price {
847    height: 14px;
848    width: 60%;
849    background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
850    background-size: 200% 100%;
851    animation: loading 1.5s infinite;
852    border-radius: 4px;
853  }
854
855  @keyframes loading {
856    0% {
857      background-position: 200% 0;
858    }
859    100% {
860      background-position: -200% 0;
861    }
862  }
863
864  ul.result_product {
865    max-height: 400px;
866    overflow: auto;
867    list-style: none;
868    padding: 0;
869    display: grid;
870    grid-template-columns: repeat(2, 1fr);
871    gap: 15px;
872  }
873
874  ul.result_product li.item {
875    margin-bottom: 0;
876  }
877
878  ul.result_product .item_url {
879    display: block;
880    text-decoration: none;
881    color: inherit;
882  }
883
884  ul.result_product .product-card-search {
885    display: flex;
886    flex-direction: row;
887    height: 100%;
888    text-transform: uppercase;
889    text-align: left;
890    gap: 12px;
891  }
892
893  ul.result_product .product-image-search {
894    width: 100px;
895    height: 100px;
896    flex-shrink: 0;
897    object-fit: cover;
898  }
899
900  ul.result_product .product-info-search {
901    display: flex;
902    flex-direction: column;
903    justify-content: center;
904    flex: 1;
905  }
906
907  ul.result_product .product-title-search {
908    font-size: 14px;
909    line-height: 1.4;
910    margin-bottom: 8px;
911    overflow: hidden;
912    text-overflow: ellipsis;
913    display: -webkit-box;
914    -webkit-line-clamp: 2;
915    -webkit-box-orient: vertical;
916  }
917
918  ul.result_product .product-price-search {
919    font-size: 13px;
920    color: #666;
921    font-weight: 500;
922  }
923
924  .group-promotion ul {
925    margin: 0;
926  }
927  .group-promotion li {
928    list-style: none;
929    margin-bottom: 12px;
930  }
931  .group-promotion li a {
932    color: inherit;
933  }
934
935  .group-recent {
936    position: relative;
937    padding: 20px 40px;
938  }
939  .group-recent ul {
940    margin: 0;
941  }
942  .group-recent li {
943    list-style: none;
944    display: inline-block;
945    margin-right: 60px;
946  }
947  .group-recent li a {
948    color: inherit;
949  }
950
951  .last-search svg {
952    width: 20px;
953    vertical-align: middle;
954  }
955  ul.last-search a {
956    vertical-align: middle;
957    padding: 0 10px;
958  }
959  ul.last-search li span {
960    cursor: pointer;
961  }
962  .delete-all-history {
963    position: absolute;
964    top: 25px;
965    right: 40px;
966    text-decoration: underline;
967    color: #e11d1d;
968    cursor: pointer;
969    font-size: 12px;
970  }
971
972  form.search.search-modal__form {
973    position: relative;
974  }
975
976  button.search__button svg {
977    width: 25px;
978    color: #495057;
979    fill: #757582;
980  }
981
982  button.search__button.field__button {
983    position: absolute;
984    top: 50%;
985    margin-top: -12px;
986  }
987
988  .close-search {
989    display: none;
990    position: absolute;
991    right: 65px;
992    top: 10px;
993    cursor: pointer;
994  }
995
996  .site-overlay {
997    position: fixed;
998    top: 0;
999    width: 100vw;
1000    height: 100vh;
1001    z-index: 1000;
1002    background: #0000005c;
1003    visibility: hidden;
1004    opacity: 0;
1005    pointer-events: none;
1006    transition: all .3s linear;
1007    display: block !important;
1008  }
1009
1010  .search-popup-open .site-overlay {
1011    opacity: 1;
1012    visibility: visible;
1013    pointer-events: all;
1014    z-index: -1;
1015    cursor: pointer;
1016  }
1017
1018  @media (min-width: 991px) {
1019    .group-recent ul {
1020      column-count: 3;
1021    }
1022    .group-promotion li a {
1023      font-size: 12px;
1024      font-weight: 400;
1025    }
1026    .group-recent li a {
1027      font-size: 12px;
1028      font-weight: 400;
1029    }
1030    ul.result_product {
1031      grid-template-columns: repeat(3, 1fr);
1032      gap: 20px;
1033    }
1034  }
1035
1036  .moreresult {
1037    padding: 10px 40px;
1038    border-top: 1px solid #AAAAAA;
1039  }
1040  .moreresult * {
1041    align-self: center;
1042  }
1043  .moreresult p {
1044    margin: 0;
1045    font-size: 12px !important;
1046  }
1047  .moreresult svg {
1048    width: 13px;
1049  }
1050
1051  @media (max-width: 992px) {
1052    .icon-key-mobile {
1053        height: auto!important;
1054        width: 10px!important;
1055    }
1056    body.grid-view.search-popup-open .products {
1057      -ms-flex: 0 0 100%!important;
1058      flex: 0 0 100%!important;
1059      max-width: 100%!important;
1060    }
1061    button.search__button svg {
1062      width: 20px;
1063    }
1064    #search-result {
1065      padding-left: 0;
1066      padding-right: 0;
1067    }
1068    #search-result {
1069      padding-top: 55px;
1070    }
1071    #search-input {
1072      height: 55px;
1073    }
1074    .group-recommend {
1075      padding: 20px;
1076    }
1077    
1078    #search-type, #search-btn {
1079      font-size: 12px;
1080    }
1081    #search-input {
1082        height: 40px;
1083    }
1084    #search-result {
1085      padding-top: 40px;
1086    }
1087    .close-search {
1088      right: 50px;
1089      top: 6px;
1090    }
1091    #search-input svg {
1092      width: 15px;
1093    }
1094    .result_product li a {
1095      font-size: 12px;
1096    }
1097    ul.result_product li img {
1098      width: 110px !important;
1099    }
1100    .resultsearch label {
1101      font-size: 14px;
1102      margin-bottom: 15px;
1103      padding-bottom: 15px;
1104    }
1105    #search-input .container {
1106      padding: 0 20px;
1107    }
1108    #search-type {
1109      font-size: 14px;
1110    }
1111    #search-btn {
1112      font-size: 12px;
1113      text-decoration: underline;
1114    }
1115    .results {
1116      padding: 15px;
1117    }
1118    .group-recommend h3 {
1119      font-size: 16px;
1120    }
1121    .products .card-body {
1122      padding: 8px 0px 10px;
1123    }
1124    .moreresult {
1125      padding: 10px 20px;
1126    }    
1127    ul.result_product {
1128      grid-template-columns: repeat(1, 1fr);
1129      gap: 10px;
1130    }
1131    ul.result_product .product-image-search {
1132      width: 80px;
1133      height: 80px;
1134    }
1135    ul.result_product .product-card-search {
1136      gap: 10px;
1137    }
1138    ul.result_product .product-title-search {
1139      font-size: 12px;
1140      margin-bottom: 6px;
1141    }
1142    ul.result_product .product-price-search {
1143      font-size: 11px;
1144    }  
1145    .group-promotion li a {
1146      font-size: 14px;
1147    }
1148    ul.result_collection {
1149      max-height: 200px;
1150    }
1151  }
1152</style>
1153<div id="search-popup">
1154  <div id="search-input" class="row">
1155    <div class="container w-100">
1156      <form
1157        action="/search"
1158        method="get"
1159        role="search"
1160        class="search search-modal__form d-flex justify-content-between"
1161      >
1162        <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
1163  <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"/>
1164</svg>
1165
1166        <input type="hidden" name="type" value="product">
1167        <input
1168          type="text"
1169          id="search-type"
1170          name="q"
1171          class="search-popup"
1172          placeholder="Gifts that linger: Uncover treasures for cherished moments."
1173        >
1174        <div class="close-search"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none">
1175  <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 
117512.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"/>
1176</svg>
1177</div>
1178        <button id="search-btn">Search</button>
1179      </form>
1180    </div>
1181  </div>
1182  <div id="search-result" class="m-auto">
1183    <div class="container p-0">
1184      <div class="group-promotion">
1185        <div class="resultsearch">
1186          <div class="row results">
1187            <div class="col-12 col-lg-3 mb-3 mb-lg-0">
1188              <label>SUGGESTIONS</label>
1189              <ul class="result_collection"></ul>
1190            </div>
1191            <div class="col-12 col-lg-9">
1192              <label>PRODUCTS</label>
1193              <ul class="result_product"></ul>
1194            </div>
1195          </div>
1196          <div class="d-flex moreresult m-0">
1197            <p>Search for<span></span></p>
1198            <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
1199<title>icon-arrow-right</title>
1200<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>
1201</svg>
1202          </div>
1203        </div>
1204      </div>
1205      <div class="group-recent hide">
1206        <h3>RECENT SEARCH</h3>
1207        <span class="delete-all-history">Hapus riwayat</span>
1208        <ul class="last-search"></ul>
1209      </div>
1210      <div class="group-recommend">
1211        <h3>YOU MAY ALSO LIKE</h3>
1212        
1213        
1214          <div class="row popup-recommend c-products-grid infinite-case product-multi-">
1215            <div class="swiper-wrapper justify-content-between" style="margin-left:1px;">
1216              
1217                
1218                  <div class="swiper-slide card">
1219                    
1220
1221
1222
1223<div class="products" data-lazy="false">
1224  <div class="bg-products">
1225    <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-the-jam-that-stole-breakfast">
1226      <div class="wishlist-icon-wrapper">
1227  <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;">
1228    <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.
122811233C11.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"/>
1229  </svg>
1230  <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;">
1231    <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"/>
1232  </svg>
1233</div>
1234    </button>
1235    <a href="/products/nibbl-the-jam-that-stole-breakfast">
1236      
1237      <div class="product-card-img-container p-0 position-relative">
1238        
1239        <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">
1240        
1241      </div>
1242      <div class="card-body product-card-info">
1243        <h5 class="h5 mb-0">
1244          Nibbl The Jam That Stole Breakfast
1245        </h5>
1246        <div class="product-card-price">
1247          
1248          <div class="product-price-sale">
1249            <s class="product-card-price-before card-money">Rp 155.000</s>
1250            <span class="product-card-discount small">	
1251              (-45%)
1252            </span> 	
1253          </div>
1254          
1255          
1256          
1257          <div class="price-discount">
1258            <h4 class="product-card-price-after card-money">Rp 85.000</h4>
1259          </div>
1260          
1261          
1262          
1263          
1264          
1265        </div>
1266        
1267      </div>
1268    </a>
1269  </div>
1270  
1271   
1272  <div class="wishlist-tooltip" style="display:none;">
1273    <a href="https://amp.hotelverta.com/">Please login to save to wishlist</a>
1274  </div>
1275</div>
1276
1277                  </div>
1278                
1279              
1280                
1281                  <div class="swiper-slide card">
1282                    
1283
1284
1285
1286<div class="products" data-lazy="false">
1287  <div class="bg-products">
1288    <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-choco-nutocalypse">
1289      <div class="wishlist-icon-wrapper">
1290  <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;">
1291    <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.
129111233C11.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"/>
1292  </svg>
1293  <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;">
1294    <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"/>
1295  </svg>
1296</div>
1297    </button>
1298    <a href="/products/nibbl-choco-nutocalypse">
1299      
1300      <div class="product-card-img-container p-0 position-relative">
1301        
1302        <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">
1303        
1304      </div>
1305      <div class="card-body product-card-info">
1306        <h5 class="h5 mb-0">
1307          Nibbl Choco Nutocalypse
1308        </h5>
1309        <div class="product-card-price">
1310          
1311          <div class="product-price-sale">
1312            <s class="product-card-price-before card-money">Rp 155.000</s>
1313            <span class="product-card-discount small">	
1314              (-45%)
1315            </span> 	
1316          </div>
1317          
1318          
1319          
1320          <div class="price-discount">
1321            <h4 class="product-card-price-after card-money">Rp 85.000</h4>
1322          </div>
1323          
1324          
1325          
1326          
1327          
1328        </div>
1329        
1330      </div>
1331    </a>
1332  </div>
1333  
1334   
1335  <div class="wishlist-tooltip" style="display:none;">
1336    <a href="https://amp.hotelverta.com/">Please login to save to wishlist</a>
1337  </div>
1338</div>
1339
1340                  </div>
1341                
1342              
1343                
1344                  <div class="swiper-slide card">
1345                    
1346
1347
1348
1349<div class="products" data-lazy="false">
1350  <div class="bg-products">
1351    <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-pistachio-promises-at-3am">
1352      <div class="wishlist-icon-wrapper">
1353  <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;">
1354    <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.
135411233C11.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"/>
1355  </svg>
1356  <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;">
1357    <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"/>
1358  </svg>
1359</div>
1360    </button>
1361    <a href="/products/nibbl-pistachio-promises-at-3am">
1362      
1363      <div class="product-card-img-container p-0 position-relative">
1364        
1365        <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">
1366        
1367      </div>
1368      <div class="card-body product-card-info">
1369        <h5 class="h5 mb-0">
1370          Nibbl Pistachio Promises at 3AM
1371        </h5>
1372        <div class="product-card-price">
1373          
1374          <div class="product-price-sale">
1375            <s class="product-card-price-before card-money">Rp 195.000</s>
1376            <span class="product-card-discount small">	
1377              (-49%)
1378            </span> 	
1379          </div>
1380          
1381          
1382          
1383          <div class="price-discount">
1384            <h4 class="product-card-price-after card-money">Rp 99.000</h4>
1385          </div>
1386          
1387          
1388          
1389          
1390          
1391        </div>
1392        
1393      </div>
1394    </a>
1395  </div>
1396  
1397   
1398  <div class="wishlist-tooltip" style="display:none;">
1399    <a href="https://amp.hotelverta.com/">Please login to save to wishlist</a>
1400  </div>
1401</div>
1402
1403                  </div>
1404                
1405              
1406                
1407                  <div class="swiper-slide card">
1408                    
1409
1410
1411
1412<div class="products" data-lazy="false">
1413  <div class="bg-products">
1414    <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-winter-spice-everything-nice">
1415      <div class="wishlist-icon-wrapper">
1416  <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;">
1417    <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.
141711233C11.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"/>
1418  </svg>
1419  <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;">
1420    <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"/>
1421  </svg>
1422</div>
1423    </button>
1424    <a href="/products/nibbl-winter-spice-everything-nice">
1425      
1426      <div class="product-card-img-container p-0 position-relative">
1427        
1428        <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">
1429        
1430      </div>
1431      <div class="card-body product-card-info">
1432        <h5 class="h5 mb-0">
1433          Nibbl Winter Spice & Everything Nice
1434        </h5>
1435        <div class="product-card-price">
1436          
1437          <div class="product-price-sale">
1438            <s class="product-card-price-before card-money">Rp 195.000</s>
1439            <span class="product-card-discount small">	
1440              (-56%)
1441            </span> 	
1442          </div>
1443          
1444          
1445          
1446          <div class="price-discount">
1447            <h4 class="product-card-price-after card-money">Rp 85.000</h4>
1448          </div>
1449          
1450          
1451          
1452          
1453          
1454        </div>
1455        
1456      </div>
1457    </a>
1458  </div>
1459  
1460   
1461  <div class="wishlist-tooltip" style="display:none;">
1462    <a href="https://amp.hotelverta.com/">Please login to save to wishlist</a>
1463  </div>
1464</div>
1465
1466                  </div>
1467                
1468              
1469                
1470                  <div class="swiper-slide card">
1471                    
1472
1473
1474
1475<div class="products" data-lazy="false">
1476  <div class="bg-products">
1477    <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-say-cheese-regret-nothing">
1478      <div class="wishlist-icon-wrapper">
1479  <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;">
1480    <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.
148011233C11.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"/>
1481  </svg>
1482  <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;">
1483    <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"/>
1484  </svg>
1485</div>
1486    </button>
1487    <a href="/products/nibbl-say-cheese-regret-nothing">
1488      
1489      <div class="product-card-img-container p-0 position-relative">
1490        
1491        <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">
1492        
1493      </div>
1494      <div class="card-body product-card-info">
1495        <h5 class="h5 mb-0">
1496          Nibbl Say Cheese, Regret Nothing
1497        </h5>
1498        <div class="product-card-price">
1499          
1500          <div class="product-price-sale">
1501            <s class="product-card-price-before card-money">Rp 195.000</s>
1502            <span class="product-card-discount small">	
1503              (-56%)
1504            </span> 	
1505          </div>
1506          
1507          
1508          
1509          <div class="price-discount">
1510            <h4 class="product-card-price-after card-money">Rp 85.000</h4>
1511          </div>
1512          
1513          
1514          
1515          
1516          
1517        </div>
1518        
1519      </div>
1520    </a>
1521  </div>
1522  
1523   
1524  <div class="wishlist-tooltip" style="display:none;">
1525    <a href="https://amp.hotelverta.com/">Please login to save to wishlist</a>
1526  </div>
1527</div>
1528
1529                  </div>
1530                
1531              
1532                
1533                  <div class="swiper-slide card">
1534                    
1535
1536
1537
1538<div class="products" data-lazy="false">
1539  <div class="bg-products">
1540    <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-berry-affair">
1541      <div class="wishlist-icon-wrapper">
1542  <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;">
1543    <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.
154311233C11.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"/>
1544  </svg>
1545  <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;">
1546    <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"/>
1547  </svg>
1548</div>
1549    </button>
1550    <a href="/products/nibbl-berry-affair">
1551      
1552      <div class="product-card-img-container p-0 position-relative">
1553        
1554        <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">
1555        
1556      </div>
1557      <div class="card-body product-card-info">
1558        <h5 class="h5 mb-0">
1559          Nibbl Berry Affair
1560        </h5>
1561        <div class="product-card-price">
1562          
1563          <div class="product-price-sale">
1564            <s class="product-card-price-before card-money">Rp 155.000</s>
1565            <span class="product-card-discount small">	
1566              (-45%)
1567            </span> 	
1568          </div>
1569          
1570          
1571          
1572          <div class="price-discount">
1573            <h4 class="product-card-price-after card-money">Rp 85.000</h4>
1574          </div>
1575          
1576          
1577          
1578          
1579          
1580        </div>
1581        
1582      </div>
1583    </a>
1584  </div>
1585  
1586   
1587  <div class="wishlist-tooltip" style="display:none;">
1588    <a href="https://amp.hotelverta.com/">Please login to save to wishlist</a>
1589  </div>
1590</div>
1591
1592                  </div>
1593                
1594              
1595                
1596                  <div class="swiper-slide card">
1597                    
1598
1599
1600
1601<div class="products" data-lazy="false">
1602  <div class="bg-products">
1603    <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-chocolate-after-dark">
1604      <div class="wishlist-icon-wrapper">
1605  <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;">
1606    <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.
160611233C11.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"/>
1607  </svg>
1608  <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;">
1609    <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"/>
1610  </svg>
1611</div>
1612    </button>
1613    <a href="/products/nibbl-chocolate-after-dark">
1614      
1615      <div class="product-card-img-container p-0 position-relative">
1616        
1617        <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">
1618        
1619      </div>
1620      <div class="card-body product-card-info">
1621        <h5 class="h5 mb-0">
1622          Nibbl Chocolate After Dark
1623        </h5>
1624        <div class="product-card-price">
1625          
1626          <div class="product-price-sale">
1627            <s class="product-card-price-before card-money">Rp 125.000</s>
1628            <span class="product-card-discount small">	
1629              (-32%)
1630            </span> 	
1631          </div>
1632          
1633          
1634          
1635          <div class="price-discount">
1636            <h4 class="product-card-price-after card-money">Rp 85.000</h4>
1637          </div>
1638          
1639          
1640          
1641          
1642          
1643        </div>
1644        
1645      </div>
1646    </a>
1647  </div>
1648  
1649   
1650  <div class="wishlist-tooltip" style="display:none;">
1651    <a href="https://amp.hotelverta.com/">Please login to save to wishlist</a>
1652  </div>
1653</div>
1654
1655                  </div>
1656                
1657              
1658                
1659                  <div class="swiper-slide card">
1660                    
1661
1662
1663
1664<div class="products" data-lazy="false">
1665  <div class="bg-products">
1666    <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="nibbl-the-whole-d-mn-thing">
1667      <div class="wishlist-icon-wrapper">
1668  <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;">
1669    <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.
166911233C11.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"/>
1670  </svg>
1671  <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;">
1672    <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"/>
1673  </svg>
1674</div>
1675    </button>
1676    <a href="/products/nibbl-the-whole-d-mn-thing">
1677      
1678      <div class="product-card-img-container p-0 position-relative">
1679        
1680        <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">
1681        
1682      </div>
1683      <div class="card-body product-card-info">
1684        <h5 class="h5 mb-0">
1685          Nibbl The Whole D*mn Thing
1686        </h5>
1687        <div class="product-card-price">
1688          
1689          <div class="product-price-sale">
1690            <s class="product-card-price-before card-money">Rp 440.000</s>
1691            <span class="product-card-discount small">	
1692              (-35%)
1693            </span> 	
1694          </div>
1695          
1696          
1697          
1698          <div class="price-discount">
1699            <h4 class="product-card-price-after card-money">Rp 285.000</h4>
1700          </div>
1701          
1702          
1703          
1704          
1705          
1706        </div>
1707        
1708      </div>
1709    </a>
1710  </div>
1711  
1712   
1713  <div class="wishlist-tooltip" style="display:none;">
1714    <a href="https://amp.hotelverta.com/">Please login to save to wishlist</a>
1715  </div>
1716</div>
1717
1718                  </div>
1719                
1720              
1721                
1722                  <div class="swiper-slide card">
1723                    
1724
1725
1726
1727<div class="products" data-lazy="false">
1728  <div class="bg-products">
1729    <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="the-jade-bouquet">
1730      <div class="wishlist-icon-wrapper">
1731  <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;">
1732    <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.
173211233C11.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"/>
1733  </svg>
1734  <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;">
1735    <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"/>
1736  </svg>
1737</div>
1738    </button>
1739    <a href="/products/the-jade-bouquet">
1740      
1741      <div class="product-card-img-container p-0 position-relative">
1742        
1743        <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">
1744        
1745      </div>
1746      <div class="card-body product-card-info">
1747        <h5 class="h5 mb-0">
1748          The Jade Bouquet
1749        </h5>
1750        <div class="product-card-price">
1751          
1752          <div class="product-price-sale">
1753            <s class="product-card-price-before card-money">Rp 435.000</s>
1754            <span class="product-card-discount small">	
1755              (-34%)
1756            </span> 	
1757          </div>
1758          
1759          
1760          
1761          <div class="price-discount">
1762            <h4 class="product-card-price-after card-money">Rp 285.000</h4>
1763          </div>
1764          
1765          
1766          
1767          
1768          
1769        </div>
1770        
1771      </div>
1772    </a>
1773  </div>
1774  
1775   
1776  <div class="wishlist-tooltip" style="display:none;">
1777    <a href="https://amp.hotelverta.com/">Please login to save to wishlist</a>
1778  </div>
1779</div>
1780
1781                  </div>
1782                
1783              
1784                
1785                  <div class="swiper-slide card">
1786                    
1787
1788
1789
1790<div class="products" data-lazy="false">
1791  <div class="bg-products">
1792    <button type="button" class="wishlist-toggle" data-wishlist-button data-product-handle="the-selena-bouquet">
1793      <div class="wishlist-icon-wrapper">
1794  <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;">
1795    <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.
179511233C11.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"/>
1796  </svg>
1797  <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;">
1798    <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"/>
1799  </svg>
1800</div>
1801    </button>
1802    <a href="/products/the-selena-bouquet">
1803      
1804      <div class="product-card-img-container p-0 position-relative">
1805        
1806        <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">
1807        
1808      </div>
1809      <div class="card-body product-card-info">
1810        <h5 class="h5 mb-0">
1811          The Selena Bouquet
1812        </h5>
1813        <div class="product-card-price">
1814          
1815          <div class="product-price-sale">
1816            <s class="product-card-price-before card-money">Rp 335.000</s>
1817            <span class="product-card-discount small">	
1818              (-29%)
1819            </span> 	
1820          </div>
1821          
1822          
1823          
1824          <div class="price-discount">
1825            <h4 class="product-card-price-after card-money">Rp 235.000</h4>
1826          </div>
1827          
1828          
1829          
1830          
1831          
1832        </div>
1833        
1834      </div>
1835    </a>
1836  </div>
1837  
1838   
1839  <div class="wishlist-tooltip" style="display:none;">
1840    <a href="https://amp.hotelverta.com/">Please login to save to wishlist</a>
1841  </div>
1842</div>
1843
1844                  </div>
1845                
1846              
1847            </div>
1848          </div>
1849        
1850      </div>
1851    </div>
1852  </div>
1853
1854  <div class="site-overlay" style="display: none"></div>
1855</div>
1856<script>
1857  
1858  var swiper = new Swiper('.popup-recommend', {
1859      slidesPerView : 4, 
1860      spaceBetween: 30,
1861      lazy: true ,                            
1862      speed: 300,
1863      breakpoints: {
1864        // when window width is <= 576px
1865        576: {
1866        	slidesPerView: 2,
1867     	 	spaceBetween: 10,
1868            freeMode: true,
1869            resistance : true,
1870            resistanceRatio : 0,
1871			freeModeMomentumRatio : 0.45,
1872            freeModeMomentumVelocityRatio : 1.5
1873        },
1874    	768: {
1875     	 	slidesPerView: 2,
1876     	 	spaceBetween: 10
1877   		 },
1878    	992: {
1879      		slidesPerView: 3,
1880      		spaceBetween: 20
1881    	}
1882  	}
1883  });
1884
1885  const searchContainer = $("#search-popup")
1886  const searchInput = $(".search-popup")
1887  const result_collection = $('.result_collection')
1888  const result_product = $('.result_product')
1889  const resultsearch = $('.resultsearch')
1890  const resultrecommend = $(".group-recommend")
1891  const moreresult = $(".moreresult")
1892
1893  searchInput.keyup(function(){
1894    const input = $(this).val()
1895    moreresult.find("p span").text(` “${input}”`)
1896    if(input.length > 2) {
1897      $(".close-search").show()
1898      const url = `https://outerbloom.com/search/suggest.json?resources[limit]=10&resources[limit_scope]=each&resources[type]=collection,product&q=${input}`
1899      $.ajax({
1900        type: 'GET',
1901        url,
1902        beforeSend: function() {
1903            // setting a timeout
1904            // $(placeholder).addClass('loading');
1905        },
1906        success: async function(response) {
1907            resultsearch.show()
1908            resultrecommend.hide()
1909            result_collection.html("")
1910            result_product.html("")
1911            const collections = response.resources.results.collections
1912            const products = response.resources.results.products
1913            let collection_length = collections.length
1914            let product_length = products.length
1915
1916            async function getCollectionProductCount(handle) {
1917              try {
1918                const collectionUrl = `https://outerbloom.com/collections/${handle}.json`
1919                const response = await fetch(collectionUrl)
1920                if (response.ok) {
1921                  const data = await response.json()
1922                  return data.collection.products_count ? data.collection.products_count : 0
1923                }
1924                return 0
1925              } catch (error) {
1926                console.log('Error fetching collection product count:', error)
1927                return 0
1928              }
1929            }
1930
1931            // Show skeleton loader for suggestions
1932            const skeletonHTML = `
1933              <div class="skeleton-loader">
1934                <div class="skeleton-item" style="width: 80%;"></div>
1935                <div class="skeleton-item" style="width: 90%;"></div>
1936                <div class="skeleton-item" style="width: 75%;"></div>
1937                <div class="skeleton-item" style="width: 85%;"></div>
1938                <div class="skeleton-item" style="width: 70%;"></div>
1939              </div>
1940            `
1941            result_collection.html(skeletonHTML)
1942
1943            // Show skeleton loader for products (3 cards on desktop, 2 on mobile)
1944            const productSkeletonHTML = `
1945              <li class="skeleton-product-card">
1946                <div class="skeleton-product-image"></div>
1947                <div class="skeleton-product-title"></div>
1948                <div class="skeleton-product-price"></div>
1949              </li>
1950              <li class="skeleton-product-card">
1951                <div class="skeleton-product-image"></div>
1952                <div class="skeleton-product-title"></div>
1953                <div class="skeleton-product-price"></div>
1954              </li>
1955              <li class="skeleton-product-card">
1956                <div class="skeleton-product-image"></div>
1957                <div class="skeleton-product-title"></div>
1958                <div class="skeleton-product-price"></div>
1959              </li>
1960              <li class="skeleton-product-card">
1961                <div class="skeleton-product-image"></div>
1962                <div class="skeleton-product-title"></div>
1963                <div class="skeleton-product-price"></div>
1964              </li>
1965              <li class="skeleton-product-card">
1966                <div class="skeleton-product-image"></div>
1967                <div class="skeleton-product-title"></div>
1968                <div class="skeleton-product-price"></div>
1969              </li>
1970              <li class="skeleton-product-card">
1971                <div class="skeleton-product-image"></div>
1972                <div class="skeleton-product-title"></div>
1973                <div class="skeleton-product-price"></div>
1974              </li>
1975            `
1976            result_product.html(productSkeletonHTML)
1977
1978            // Render products immediately (without waiting for collections)
1979            setTimeout(() => {
1980              result_product.html('')
1981              let productCount = 0
1982              for(let i=0; i<product_length && productCount < 6; i++){
1983                const product = products[i]
1984                const title = product.title
1985                const url = product.url
1986                const image = product.featured_image.url
1987                const vendor = product.vendor
1988                const price = product.price
1989                const formattedPrice = new Intl.NumberFormat('id-ID', { style: 'currency', currency: 'IDR', minimumFractionDigits: 0 }).format(price)
1990                
1991                // Filter out excluded products
1992                if(vendor === 'AIA' || vendor === 'AXA' || vendor === 'WOM Finance') continue
1993                if(title.includes('Extra Shipping Cost') || title.includes('[US]') || title.includes('Rp')) continue
1994                
1995                const html_product = `
1996                  <li class="item" data-vendor="${vendor}">
1997                    <a href="${url}" class="item_url" data-type="product" data-title="${title}" data-url="${url}">
1998                      <div class="product-card-search">
1999                        <img src="${image}" alt="${title}" class="product-image-search">
2000                        <div class="product-info-search">
2001                          <div class="product-title-search">${title}</div>
2002                          <div class="product-price-search">${formattedPrice}</div>
2003                        </div>
2004                      </div>
2005                    </a>
2006                  </li>
2007                `
2008                result_product.append(html_product)
2009                productCount++
2010              }
2011            }, 100)
2012
2013            // Collect unique collections first
2014            const addedTitles = new Set()
2015            const addedHandles = new Set()
2016            const validCollections = []
2017            
2018            for(let i=0; i<collection_length && validCollections.length < 10; i++){
2019              const title = collections[i].title
2020              const titleLower = title.toLowerCase()
2021              const handle = collections[i].handle
2022              const url = collections[i].url
2023              
2024              // Skip if title or handle already added, or if title includes excluded terms
2025              if(addedTitles.has(titleLower) || addedHandles.has(handle)) continue
2026              if(title.includes('AIA') || title.includes('AXA') || title.includes('WOM') || title.includes('Upsell')) continue
2027              
2028              const count = await getCollectionProductCount(handle)
2029              
2030              // Only add if collection has products
2031              if(count > 0) {
2032                validCollections.push({ title, url })
2033                addedTitles.add(titleLower)
2034                addedHandles.add(handle)
2035              }
2036            }
2037
2038            // Clear skeleton and render all collections at once
2039            result_collection.html('')
2040            validCollections.forEach(collection => {
2041              const html_collection = `
2042                <li class="item" data-title="${collection.title}">
2043                  <a href="${collection.url}" data-type="collection" class="item_url" data-title="${collection.title}" data-url="${collection.url}">${collection.title}</a>
2044                </li>
2045              `
2046              result_collection.append(html_collection)
2047            })
2048        },
2049        error: function(xhr) { // if error occured
2050            alert("Error occured.please try again");
2051        },
2052        complete: function(response) {
2053            // $(placeholder).removeClass('loading');
2054        },
2055        dataType: 'JSON'
2056      });
2057    } else {
2058      result_collection.html("")
2059      result_product.html("")
2060      
2061      resultsearch.hide()
2062      resultrecommend.show()
2063    }
2064  })
2065
2066  moreresult.click(function(){
2067    $("#search-btn").trigger("click");
2068  })
2069
2070  $(".close-search").click(function(){
2071    $(this).hide()
2072    searchInput.val("")
2073    searchInput.focus()
2074    resultsearch.hide()
2075    resultrecommend.show()
2076  })
2077
2078  function setCookie(name,value,days) {
2079    var expires = "";
2080    if (days) {
2081      var date = new Date();
2082      date.setTime(date.getTime() + (days*24*60*60*1000));
2083      expires = "; expires=" + date.toUTCString();
2084    }
2085    document.cookie = name + "=" + (value || "")  + expires + "; path=/";
2086  }
2087  function getCookie(name) {
2088    var nameEQ = name + "=";
2089    var ca = document.cookie.split(';');
2090    for(var i=0;i < ca.length;i++) {
2091      var c = ca[i];
2092      while (c.charAt(0)==' ') c = c.substring(1,c.length);
2093      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
2094    }
2095    return null;
2096  }
2097  let last_search_name = []
2098  let last_search_url = []
2099  $(".group-recent").hide()
2100  if(getCookie("last_search_name") != null && getCookie("last_search_url") != null){
2101    if(getCookie("last_search_name") != "" && getCookie("last_search_url") != ""){
2102      $(".group-recent").show()
2103      last_search_name = getCookie("last_search_name");
2104      last_search_url = getCookie("last_search_url");
2105      const arrName = last_search_name.substring(1).split(',').reverse()
2106      const arrUrl = last_search_url.substring(1).split(',').reverse()
2107      console.log(arrName, 'Array Name')
2108      console.log(arrUrl, 'Array Url')
2109      let length = arrName.length
2110      if(arrName.length > 5) {
2111        length = 5
2112      }
2113      for(let n=0;n<length;n++){
2114        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]}">
2114${arrName[n]}</a><span data-title="${arrName[n]}" data-url="${arrUrl[n]}"></span></li>`
2115        $(".group-recent ul").append(html2)
2116      }
2117    }
2118  }
2119  console.log(last_search_name, 'Name')
2120  console.log(last_search_url, 'url')
2121  
2122  resultsearch.delegate(".item a", "click", function(){
2123    let name = [last_search_name]
2124    let url = [last_search_url]
2125    name.push($(this).attr('data-title'))
2126    url.push($(this).attr('data-url'))
2127    setCookie("last_search_name",name,7);
2128    setCookie("last_search_url",url,7);
2129  })
2130  
2131  $(".delete-all-history").click(function() {
2132    setCookie("last_search_name",null,0);
2133    setCookie("last_search_url",null,0);
2134    $(".last-search").hide();
2135    setTimeout(function(){
2136      location.reload();
2137    }, 500);
2138  })
2139  
2140  $("#search-trigger").click(function(){
2141    search_open()
2142  })
2143  $(".icon-search-mobile").click(function(){
2144    search_open()
2145  })
2146  $(".search-header svg").click(function(){
2147    search_close()
2148  })
2149  $(".icon-key-mobile").click(function(){
2150    search_close()
2151  })
2152
2153  function search_open() {
2154    $("body").addClass("search-popup-open")
2155    $("#nav-mobile-icon, .search-header label, .icon-search-mobile").hide()
2156    $("#search-popup, .search-header svg, .icon-key-mobile").show()
2157    $(".search-popup").focus()
2158    $('.popup-recommend')[0].swiper.update();
2159  }
2160  function search_close() {
2161    $("body").removeClass("search-popup-open")
2162    $("#nav-mobile-icon, .search-header label, .icon-search-mobile").show()
2163    $("#search-popup, .search-header svg, .icon-key-mobile").hide()
2164    searchInput.val("")
2165    resultsearch.hide()
2166    resultrecommend.show()
2167  }
2168
2169  $(".site-overlay").click(function(){
2170    search_close()
2171  })
2172</script>
2172
2173
2174</div>
2175    </div>
2176 <div class="button-login-daftar">
2177                     <a class="login" href="https://amp.hotelverta.com/" rel="nofollow noreferrer" style="color: black;">
2178                         LOGIN
2179                     </a>
2180                     <a class="register" href="https://amp.hotelverta.com/" rel="nofollow noreferrer" style="color: black;">
2181                         DAFTAR
2182                     </a>
2183</div>        
2184    <div id="PageContainer" class="is-moved-by-drawerx">
2185      <main class="main-content pt-0" role="main">
2186        
2187          <div id="breadcrumbProduct" class="d-none d-lg-block">
2188            <style>
2189  #breadcrumbProduct {
2190    padding: 20px 0;
2191  }
2192  #breadcrumbProduct ul {
2193      display: flex;
2194      padding: 0;
2195      list-style: none;
2196      margin: 0;
2197      gap: 12px;
2198  }
2199  #breadcrumbProduct ul li {
2200    text-transform: uppercase;
2201    margin: 0;
2202    font-size: 12px;
2203}
2204  #breadcrumbProduct ul li a {
2205    color: #d32f2f; /* Warna merah untuk link breadcrumb agar senada */
2206    font-weight: 600;
2207  }
2208
2209  #breadcrumbProduct ul li svg {
2210    width: 10px;
2211    height: 10px;
2212    padding: 0;
2213    color: #fbc02d; /* Warna kuning emas untuk pemisah */
2214    vertical-align: middle;
2215  }
2216
2217.button-login-daftar {
2218    display: grid;
2219    grid-template-columns: repeat(2, 1fr);
2220    font-weight: 800; /* Dibuat lebih tebal agar tegas */
2221    gap: 5px; /* Tambahan sedikit jarak antar tombol */
2222}
2223
2224.button-login-daftar a {
2225    text-align: center;
2226    text-decoration: none;
2227    transition: all 0.3s ease; /* Efek halus saat disentuh */
2228}
2229
2230.login,
2231.register {
2232    color: #fff;
2233    padding: 15px 10px;
2234    font-size: 23px;
2235    text-shadow: 1px 2px 4px rgba(0,0,0,0.5); /* Bayangan teks agar lebih mewah */
2236    border-radius: 8px; /* Sudut sedikit melengkung agar modern */
2237}
2238
2239/* Tombol LOGIN: Dominan Merah dengan gradasi Kuning */
2240.login,
2241.login-button {
2242    background: linear-gradient(to bottom, #ff0000 0%, #fbc02d 100%);
2243    border: 2px solid #ffeb3b;
2244    box-shadow: 0 4px 15px rgba(211, 47, 47, 0.4);
2245}
2246
2247/* Tombol DAFTAR: Dominan Kuning dengan gradasi Merah */
2248.register,
2249.register-button {
2250    background: linear-gradient(to bottom, #ffeb3b 0%, #d32f2f 100%);
2251    border: 2px solid #ff0000;
2252    box-shadow: 0 4px 15px rgba(251, 192, 45, 0.4);
2253}
2254
2255/* Efek Hover (Saat kursor di atas tombol) */
2256.button-login-daftar a:hover {
2257    filter: brightness(1.1);
2258    transform: translateY(-2px); /* Tombol sedikit naik */
2259    box-shadow: 0 6px 20px rgba(0,0,0,0.3);
2260}
2261</style>
2262
2263<div class="container">
2264  <ul role="navigation" aria-label="breadcrumbs">
2265      
2266    <li><a href="https://hotelverta.com/">HANTUSLOT</a></li>
2267    <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">
2268    <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"/>
2269</svg></li>
2270    
2271      
2272      <li>HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman</li>
2273    
2274  </ul>
2275</div>
2276
2277          </div>
2278  
2279
2280        
2281<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" />
2282
2283
2284
2285
2286<!-- /templates/product.liquid -->
2287
2288
2289<!-- <div itemscope itemtype="http://schema.org/Product"> -->
2290
2291
2292
2293
2294
2295
2296<div class="product-parcel-inhouse" data-product-type="hampers">
2297  <meta itemprop="url" content="https://hotelverta.com/">
2298  <meta itemprop="image" content="https://imagesme.b-cdn.net/landing/banner-hotelverta.png">
2299
2300  
2301  
2302  <input id="data-sku" type="hidden" value="[C]HANTUSLOT">
2303  <div class="product-single">
2304    <div id="product-top" class="container">
2305      <div class="row bg-card product-sticky">
2306        <div id="product-image" class="col-lg-7 text-center">
2307          <div class="product-image">
2308            <div class="row no-gutters">
2309  
2310  <div id="product-featured-image" class="row w-100">
2311    
2312      <div id="thumb-image-product" class="col-lg-2 col-12 d-none d-lg-block">
2313        
2314          <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>
2315        
2316        <div class="swiper-container gallery-thumbs" style="min-height: 500px">
2317          <ul class="list-unstyled slider swiper-wrapper slider-nav ProductThumbs thumbnails" id="ProductThumbsx">
2318
2319                  <li class="swiper-slide" data-type="image">
2320                    <a
2321                      href="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2322                      data-standard="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2323                      data-image="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2324                      data-position="1"
2325                      class="product-single__thumbnail"
2326                    >
2327                      <img
2328                        class="lazyload w-100"
2329                        src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2330                        alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2331                        width=""
2332                        height=""
2333                      >
2334                    </a>
2335                  </li>
2336                
2337              
2338            
2339
2340                <li class="swiper-slide" data-type="video">
2341                  <a
2342                    href="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2343                    data-standard="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2344                    data-video="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2345                    data-position="2"
2346                    class="product-single__thumbnail"
2347                  >
2348                    <img
2349                      class="lazyload"
2350                      src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2351                      data-src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2352                      alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2353                      width=""
2354                      height=""
2355                    >
2356                  </a>
2357                </li>
2358              
2359            
2360
2361                  <li class="swiper-slide" data-type="image">
2362                    <a
2363                      href="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2364                      data-standard="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2365                      data-image="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2366                      data-position="3"
2367                      class="product-single__thumbnail"
2368                    >
2369                      <img
2370                        class="lazyload w-100"
2371                        src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2372                        alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2373                        width=""
2374                        height=""
2375                      >
2376                    </a>
2377                  </li>
2378                
2379              
2380            
2381
2382                  <li class="swiper-slide" data-type="image">
2383                    <a
2384                      href="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2385                      data-standard="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2386                      data-image="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2387                      data-position="4"
2388                      class="product-single__thumbnail"
2389                    >
2390                      <img
2391                        class="lazyload w-100"
2392                        src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2393                        alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2394                        width=""
2395                        height=""
2396                      >
2397                    </a>
2398                  </li>
2399                
2400              
2401            
2402
2403                  <li class="swiper-slide" data-type="image">
2404                    <a
2405                      href="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2406                      data-standard="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2407                      data-image="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2408                      data-position="5"
2409                      class="product-single__thumbnail"
2410                    >
2411                      <img
2412                        class="lazyload w-100"
2413                        src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2414                        alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2415                        width=""
2416                        height=""
2417                      >
2418                    </a>
2419                  </li>
2420                
2421              
2422            
2423
2424                  <li class="swiper-slide" data-type="image">
2425                    <a
2426                      href="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2427                      data-standard="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2428                      data-image="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2429                      data-position="6"
2430                      class="product-single__thumbnail"
2431                    >
2432                      <img
2433                        class="lazyload w-100"
2434                        src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2435                        alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2436                        width=""
2437                        height=""
2438                      >
2439                    </a>
2440                  </li>
2441                
2442              
2443            
2444
2445                  <li class="swiper-slide" data-type="image">
2446                    <a
2447                      href="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2448                      data-standard="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2449                      data-image="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2450                      data-position="7"
2451                      class="product-single__thumbnail"
2452                    >
2453                      <img
2454                        class="lazyload w-100"
2455                        src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2456                        alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2457                        width=""
2458                        height=""
2459                      >
2460                    </a>
2461                  </li>
2462                
2463              
2464            
2465
2466                  <li class="swiper-slide" data-type="image">
2467                    <a
2468                      href="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2469                      data-standard="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2470                      data-image="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2471                      data-position="8"
2472                      class="product-single__thumbnail"
2473                    >
2474                      <img
2475                        class="lazyload w-100"
2476                        src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2477                        alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2478                        width=""
2479                        height=""
2480                      >
2481                    </a>
2482                  </li>
2483                
2484              
2485            
2486          </ul>
2487        </div>
2488        
2489          <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
2489ox="0 0 7 10" fill="none">
2490    <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"/>
2491</svg></div>
2492        
2493      </div>
2494    
2495    <div
2496      id="featured-image-product"
2497      class="col-lg-10 col-12 d-none d-lg-block"
2498    >
2499      <div class="swiper-container gallery-top">
2500        <div class="swiper-slide product-single__image">
2501          
2502<div class="position-relative product-single__photos slider slider-for" id="ProductPhoto">
2503  
2504
2505  <div class="easyzoom easyzoom--overlay easyzoom--with-thumbnails">
2506    <a href="https://imagesme.b-cdn.net/landing/banner-hotelverta.png">
2507      <img
2508        src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2509        alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2510        id="ProductPhotoImg"
2511        class="lazyload"
2512      >
2513      
2514    </a>
2515  </div>
2516    
2517  
2518</div>
2519
2520        </div>
2521        <div class="swiper-slide product-single__video" style="display: none">
2522          <video
2523            src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2524            playsinline
2525            loop
2526            muted
2527          ></video>
2528        </div>
2529      </div>
2530    </div>
2531  </div>
2532
2533  <div id="featured-image-product2" class="col-12 d-lg-none">
2534    <div class="swiper-container gallery-mobile">
2535      <ul class="swiper-wrapper">
2536<li class="swiper-slide img">
2537              
2538                <img
2539                  class="swiper-lazy"
2540                  src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2541                  data-src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2542                  alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2543                  width=""
2544                  height=""
2545                >
2546              
2547            </li>
2548          
2549        
2550
2551            <li class="swiper-slide vid">
2552              <video height="100%" src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png" playsinline loop autoplay muted></video>
2553            </li>
2554          
2555        
2556<li class="swiper-slide img">
2557              
2558                <img
2559                  class="swiper-lazy"
2560                  src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2561                  data-src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2562                  alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2563                  width=""
2564                  height=""
2565                >
2566              
2567            </li>
2568          
2569        
2570<li class="swiper-slide img">
2571              
2572                <img
2573                  class="swiper-lazy"
2574                  src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2575                  data-src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2576                  alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2577                  width=""
2578                  height=""
2579                >
2580              
2581            </li>
2582          
2583        
2584<li class="swiper-slide img">
2585              
2586                <img
2587                  class="swiper-lazy"
2588                  src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2589                  data-src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2590                  alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2591                  width=""
2592                  height=""
2593                >
2594              
2595            </li>
2596          
2597        
2598<li class="swiper-slide img">
2599              
2600                <img
2601                  class="swiper-lazy"
2602                  src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2603                  data-src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2604                  alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2605                  width=""
2606                  height=""
2607                >
2608              
2609            </li>
2610          
2611        
2612<li class="swiper-slide img">
2613              
2614                <img
2615                  class="swiper-lazy"
2616                  src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2617                  data-src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2618                  alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2619                  width=""
2620                  height=""
2621                >
2622              
2623            </li>
2624          
2625        
2626<li class="swiper-slide img">
2627              
2628                <img
2629                  class="swiper-lazy"
2630                  src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2631                  data-src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
2632                  alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
2633                  width=""
2634                  height=""
2635                >
2636              
2637            </li>
2638          
2639        
2640      </ul>
2641      
2642      
2643        <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>
2644        <div class="swiper-button-next"><svg class="icon icon-chevron-right" xmlns="http://www.w3.org/2000/svg" width="7" height="10" viewB
2644ox="0 0 7 10" fill="none">
2645    <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"/>
2646</svg></div>
2647
2648        <!-- Add Pagination -->
2649        <div class="swiper-pagination"></div>
2650      
2651    </div>
2652  </div>
2653
2654  <div class="product-m-pageleb-video col-12 text-center d-lg-none">
2655    <!-- product video -->
2656    <style>
2657      .view-video{display:block; margin:auto; padding:5px 10px;font-size:16px;font-weight:bold;border:2px solid #212121;background:#fff;}
2658      .view-video .icon-play{fill:#212121;vertical-align: middle;}
2659      .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;}
2660      .close-video{position:absolute;right:9px; top:8%;z-index:2;padding:5px;}
2661      .close-video .icon{width:30px;height:30px;}
2662      .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);}
2663      .video-container iframe {position: absolute;top:60%;left: 0;width: 100%;height: 100%;}
2664
2665      .youtube {
2666        background-color: #000;
2667        margin-bottom: 30px;
2668        position: relative;
2669        padding-top: 56.25%;
2670        overflow: hidden;
2671        cursor: pointer;
2672        width: 100%;
2673      }
2674      .swiper-slide .youtube {
2675        max-width: 480px;
2676      }
2677      .youtube img {
2678        width: 100%;
2679        top: -16.82%;
2680        left: 0;
2681        opacity: 0.7;
2682      }
2683      .youtube .play-button {
2684        width: 90px;
2685        height: 60px;
2686        background-color: #333;
2687        box-shadow: 0 0 30px rgba( 0,0,0,0.6 );
2688        z-index: 1;
2689        opacity: 0.8;
2690        border-radius: 6px;
2691      }
2692      .youtube .play-button:before {
2693        content: "";
2694        border-style: solid;
2695        border-width: 15px 0 15px 26.0px;
2696        border-color: transparent transparent transparent #fff;
2697      }
2698      .youtube img,
2699      .youtube .play-button {
2700        cursor: pointer;
2701      }
2702      .youtube img,
2703      .youtube iframe,
2704      .youtube .play-button,
2705      .youtube .play-button:before {
2706        position: absolute;
2707      }
2708      .youtube .play-button,
2709      .youtube .play-button:before {
2710        top: 50%;
2711        left: 50%;
2712        transform: translate3d( -50%, -50%, 0 );
2713      }
2714      .youtube iframe {
2715        height: 100%;
2716        width: 100%;
2717        top: 0;
2718        left: 0;
2719      }
2720    </style>
2721
2722    
2723  </div>
2724</div>
2725
2726
2727  
2728
2729  
2730
2731  
2732
2733  
2734
2735  
2736
2737  
2738
2739  
2740
2741
2742<div class="product-desc-add position-relative d-none d-lg-block m-0">
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      
2802  
2803
2804
2805</div>
2806
2807<script>
2808  if ($(window).width() < 991) {
2809    var direction = 'horizontal'
2810  } else {
2811    var direction = 'vertical'
2812    $(".gallery-thumbs").height($("#ProductPhotoImg").height())
2813  }
2814  var swiper = new Swiper('.gallery-thumbs', {
2815    
2816    // loop: true,
2817    
2818    direction,
2819    slidesPerView: 4.5,
2820    spaceBetween: 12,
2821    navigation: {
2822      nextEl: '.swiper-button-next',
2823      prevEl: '.swiper-button-prev',
2824    }
2825  });
2826  
2827  var swiper = new Swiper('.gallery-mobile', {
2828    //loop: true,
2829    lazy: true,
2830    speed: 300,
2831    resistance : true,
2832    resistanceRatio : 0,
2833    freeModeMomentumRatio : 0.45,
2834    freeModeMomentumVelocityRatio : 1.5,
2835    navigation: {
2836      nextEl: '.swiper-button-next',
2837      prevEl: '.swiper-button-prev',
2838    },
2839    pagination: {
2840      el: '.swiper-pagination'
2841    },
2842    useCSS3Transforms: false,
2843    loop: false,
2844    on: {
2845      init: function () {
2846        console.log('swiper initialized');
2847        var currentVideo =  $("[data-swiper-slide-index=" + this.realIndex + "]").find("video");
2848        currentVideo.trigger('play');
2849      },
2850    },
2851  });
2852  var sliderVideos = $(".swiper-slide video");
2853  
2854  /* SWIPER API - Event will be fired after animation to other slide (next or previous) */
2855  swiper.on('slideChange', function () {
2856    console.log('slide changed');
2857    sliderVideos.each(function( index ) {
2858      this.currentTime = 0;
2859    });
2860    var prevVideo =  $(`[data-swiper-slide-index="${this.previousIndex}]"`).find("video");
2861    var currentVideo =  $(`[data-swiper-slide-index="${this.realIndex}"]`).find("video");
2862    prevVideo.trigger('stop');
2863    currentVideo.trigger('play');
2864  });
2865  
2866
2867  $("[data-video]").click(function(){
2868    const file = $(this).data("video")
2869    $(".product-single__video").show()
2870    $(".product-single__image").hide()
2871    $(".product-single__video").find("video").attr("src", file)
2872    $(".product-single__video").find("video")[0].play();
2873  })
2874  $("[data-image]").click(function(){
2875    $(".product-single__video").hide()
2876    $(".product-single__image").show()
2877    $(".product-single__video").find("video")[0].pause();
2878  })
2879
2880  $("#product-image .swiper-slide").each(function(){
2881    let width = $(this).width()
2882    $(this).height(width)
2883  })
2884
2885  $(window).resize(function() {
2886    $("#product-image .swiper-slide").each(function(){
2887      let width = $(this).width()
2888      $(this).height(width)
2889    })
2890  })
2891</script>
2891
2892
2893          </div>
2894          
2895        </div>
2896        <div id="product-meta" class="col-lg-5 p-0">
2897          <div class="product-meta">
2898            <style>
2899  .product-meta--review {margin-top:10px}
2900  .freeship * {font-size: 14px !important;font-style: normal;}
2901</style>
2902<h1 itemprop="name" class="mb-2">HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman</h1>
2903
2904<div itemprop="offers" itemscope itemtype="http://schema.org/Offer">
2905  <meta itemprop="priceCurrency" content="IDR">
2906
2907  <link itemprop="availability" href="https://schema.org/InStock">
2908  
2908<script
2909    type="text/javascript"
2910    src="//platform-api.sharethis.com/js/sharethis.js#property=5acdc0aa3ef3c0001396fd50&product=custom-share-buttons"
2911    async="async"
2912  ></script>
2912
2913  
2914
2915  
2916
2917  <span class="visually-hidden">Translation missing: en.products.general.regular_price</span>
2918  
2919    <span class="visually-hidden">Translation missing: en.products.general.sale_price</span>
2920  
2921  <div class="row no-gutters mb-3">
2922    <span
2923      id="ProductPrice"
2924      class="h2 ProductPrice"
2925      itemprop="price"
2926      content="1.386.737"
2927    >
2928      Rp 1.386.737
2929    </span>
2930    <div class="discount-product-detail">
2931      <p id="ComparePrice" class="ComparePrice mt-2 mt-lg-0">
2932        Rp 8.008.008
2933      </p>
2934      <span class=" tag-discount">
2935        
2936          
2937          <span id="newDiscount" class="product-tag persentase-discount hide"> 
2938      (20%)
2939      </span><br>
2940        
2941      </span>
2942    </div>
2943  </div>
2944
2945  <div class="row no-gutters meta-sds">
2946    <div class="col-12 mb-2 mb-lg-0 stock-info">
2947      
2948      
2949      <span
2950        id="ProductStock-Product"
2951        class="product-single__stock mb-2 hide"
2952      >
2953        
2954          
2955            
2956              
2957              Barang dikirim pada 
2958            
2959          
2960        
2961      </span>
2962
2963      <style>
2964    .short-desc-desktop {
2965        margin-bottom: 2rem;
2966    }
2967    .short-desc ul li:nth-child(n + 4) {
2968        display: none;
2969    }
2970    .short-desc ul li.showList:nth-child(n + 4) {
2971        display: list-item;
2972    }
2973    label.more {
2974        display: none;
2975    }
2976    label.more.showMe {
2977        display: block;
2978        font-size: 12px;
2979        text-transform: uppercase;
2980        font-weight: 700;
2981        cursor: pointer;
2982    }
2983</style>
2984
2985    <div class="short-desc-desktop d-none d-lg-block">
2986        <div class="short-desc">
2987            <ul>
2988<li>
2989<a href="https://hotelverta.com/"><strong>HANTUSLOT</strong></a><br><strong></strong><strong></strong>
2990</li>
2991<li>
2992<a href="https://hotelverta.com/"><strong>HANTUSLOT LOGIN</strong></a><br>
2993</li>
2994<li><a href="https://hotelverta.com/"><strong>GAME HANTUSLOT</strong></a></li>
2995
2996        </div>
2997        <label class="more">Show More →</label>
2998    </div>
2999
3000
3001<script>
3002    var liCount;
3003    $(document).ready(function () {
3004        $(".short-desc ul").each(function() {
3005            liCount = $(this).children("li").length;
3006            if (liCount > 3) {
3007                $(this).parent(".short-desc").next(".more").addClass("showMe");
3008            }
3009        });
3010
3011        $(".more").click(function () {
3012            //$(".short-desc").find("li").addClass("showList");
3013            // $(this).hide();
3014            $("#product-desc").find("ul").show()
3015            $('html, body').animate({
3016                scrollTop: $("#product-desc").offset().top - 250
3017            }, 2000);
3018            $("#product-desc").css("height","auto");
3019            $("#more_content").remove();
3020            $(".product-spec").append("<div id='less_content' class='readmore'><span class='less_content'>Less</span></div>")
3021        });
3022    });
3023</script>
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
3051
3052
3053
3054<style>
3055  .c-pdp-product-info__service--active {
3056    font-size: 12px;
3057    padding-left: 10px;
3058    text-align: left;
3059    max-width: 550px;
3060    margin: auto;
3061  }
3062  .c-pdp-product-info__service--active li {
3063    list-style: disc;
3064  }
3065  .c-pdp-product-info {
3066    background-color: #f5f5f5;
3067    padding: 12px;
3068    margin: 0;
3069  }
3070  .freeship em {
3071    font-style: italic;
3072    font-size: 12px !important;
3073  }
3074</style>
3075
3076<script>
3077  $(document).ready(function(){
3078    if ( $(".c-pdp-product-info__service li").length == 1 ) {
3079      $(".c-pdp-product-info__service").addClass("no-bullet");
3080      $(".c-pdp-product-info__service li").addClass("no-bullets");
3081    }
3082  });
3083</script>
3083
3084
3085  
3086
3087
3088
3089  
3090
3091  
3092
3093
3094      
3095    </div>
3096  </div>
3097
3098  <div id="purchaseProduct">
3099  
3100  
3101  
3102    
3103      
3104
3105
3106  
3107  
3108  
3109  
3110    
3111      
3112      
3113      <style>
3114        label[for="product-select-option-0"] { display: none; }
3115        #product-select-option-0 { display: none; }
3116        #product-select-option-0 + .custom-style-select-box { display: none !important; }
3117      </style>
3118      
3118<script>
3119        $(window).load(function() { $('.selector-wrapper:eq(0)').hide(); });
3120      </script>
3120
3121      
3122      
3123    
3124  
3125  
3126    <div
3127      id="variantVariants"
3128      class="swatch swatch-Variants clearfix"
3129      data-option-index="0"
3130    >
3131      <div class="header header-swatch bold">
3132        <strong>Variants</strong>
3133      </div>
3134      
3135      
3136        
3137        
3138        
3139          
3140          
3141          
3142          <div
3143            data-label="swatch-0-standard"
3144            data-value="GAME SLOT"
3145            class="p-0 swatch-element standard available"
3146          >
3147            
3148            <input
3149              data-text=""
3150              id="swatch-0-standard"
3151              class="variant-swatch"
3152              type="radio"
3153              name="option-0"
3154              value="GAME ONLINE TERBARU"
3155              
3156                checked
3157              
3158              
3159            >
3160            
3161              <label
3162                for="swatch-0-standard"
3163                data-src="https://outerbloom.com/cdn/shopifycloud/storefront/assets/no-image-2048-a2addb12_800x.gif"
3164                data-index="1"
3165              >
3166                
3167                
3168                  <span class="d-block">GAME ONLINE TERBARU</span>
3169                
3170                <img class="crossed-out" src="https://outerbloom.com/cdn/shop/t/138/assets/soldout.png?v=169392025580765019841752652421">
3171              </label>
3172            
3173          </div>
3174        
3175        
3176          
3176<script>
3177            jQuery('.swatch[data-option-index="0"] .standard').removeClass('soldout').addClass('available').find(':radio').removeAttr('disabled');
3178          </script>
3178
3179        
3180      
3181        
3182        
3183        
3184          
3185          
3186          
3187          <div
3188            data-label="swatch-0-custom-logo-photo-for-frame"
3189            data-value="Custom logo &amp; photo for frame"
3190            class="p-0 swatch-element custom-logo-photo-for-frame available"
3191          >
3192            
3193            <input
3194              data-text=""
3195              id="swatch-0-custom-logo-photo-for-frame"
3196              class="variant-swatch swatch-custom"
3197              type="radio"
3198              name="option-0"
3199              value="Custom logo &amp; photo for frame"
3200              
3201              
3202            >
3203            
3204              <label
3205                for="swatch-0-custom-logo-photo-for-frame"
3206                data-src="https://outerbloom.com/cdn/shopifycloud/storefront/assets/no-image-2048-a2addb12_800x.gif"
3207                data-index="2"
3208              >
3209                
3210                
3211                  <span class="d-block">GAME SLOT</span>
3212                
3213                <img class="crossed-out" src="https://outerbloom.com/cdn/shop/t/138/assets/soldout.png?v=169392025580765019841752652421">
3214              </label>
3215            
3216          </div>
3217        
3218        
3219          
3219<script>
3220            jQuery('.swatch[data-option-index="0"] .custom-logo-photo-for-frame').removeClass('soldout').addClass('available').find(':radio').removeAttr('disabled');
3221          </script>
3221
3222        
3223      
3224      
3225      <!-- Add swatch change handler for hash URL update -->
3226      
3226<script>
3227        jQuery(document).ready(function($) {
3228          // Store product data for variant availability checking
3229          var productData = {"id":7881418965207,"title":"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman","handle":"outerbloom-mulan-bag-hampers","description":"\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eHANTUSLOT\u003c\/strong\u003e\u003cbr\u003e\u003cstrong\u003e\u003c\/strong\u003e\u003cstrong\u003e\u003c\/strong\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eGAME\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\u003cstrong\u003eSLOT\u003c\/strong\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eHANTUSLOT menghadirkan beragam game online modern dengan dukungan fitur berbahasa Indonesia, sehingga pengguna dapat memahami setiap menu dan fitur dengan lebih mudah serta menikmati pengalaman bermain yang praktis dan nyaman.\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]HANTUSLOT\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%;\"\u003efitur inovatif game online\u003cbr\u003ebahasa indonesia di Game HANTUSLOT\u003cbr\u003eGAME REKOMENDASI\u003cbr\u003egame bahasa indonesia\u003cbr\u003egame online wtgl\u003cbr\u003eagen game online\u003cbr\u003egame terbaik 2026\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.386.73700,"price_min":1.386.73700,"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]HANTUSLOT","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman - Standard","public_title":"Standard","options":["Standard"],"price":1.386.73700,"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":"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman - 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\u003eHANTUSLOT\u003c\/strong\u003e\u003cbr\u003e\u003cstrong\u003e\u003c\/strong\u003e\u003cstrong\u003e\u003c\/strong\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eGAME\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\u003cstrong\u003eSLOT\u003c\/strong\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eHANTUSLOT menghadirkan beragam game online modern dengan dukungan fitur berbahasa Indonesia, sehingga pengguna dapat memahami setiap menu dan fitur dengan lebih mudah serta menikmati pengalaman bermain yang praktis dan nyaman.\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]HANTUSLOT\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 apk game online\u003cbr\u003ehantuslot punya cerita\u003cbr\u003erekomendasi game terbaik\u003cbr\u003egame online Situs HANTUSLOT\u003cbr\u003epersatuan game online paling rekomendasi\u003cbr\feffc52game online bahasa indonesia\u003cbr\u003egame online gampang di akses\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e"};
3230          
3231          
3232          // Handle first option changes to update available second options
3233          $('.swatch[data-option-index="0"] input[type="radio"]').on('change', function() {
3234            // Update single-option-selector first
3235            var optionValue = $(this).val();
3236            var $selector = $('.single-option-selector').eq(0);
3237            if ($selector.length > 0) {
3238              $selector.val(optionValue).trigger('change');
3239            }
3240            
3241            // Then update available variant options
3242            updateAvailableVariantOptions();
3243          });
3244          
3245          // Function to update available vase options based on selected variant
3246          function updateAvailableVariantOptions() {
3247            var selectedVariant = $('.swatch[data-option-index="0"] input[type="radio"]:checked').val();
3248            
3249            if (!selectedVariant) return;
3250            
3251            // Get available vase options for the selected variant
3252            var availableVases = getAvailableVasesForVariant(selectedVariant);
3253            
3254            // Update vase swatch visibility and availability
3255            $('.swatch[data-option-index="1"] .swatch-element').each(function() {
3256              var vaseValue = $(this).data('value');
3257              var $input = $(this).find('input[type="radio"]');
3258              var $label = $(this).find('label');
3259              
3260              if (availableVases.includes(vaseValue)) {
3261                // Show and enable this vase option
3262                $(this).show().removeClass('soldout unavailable').addClass('available');
3263                $input.prop('disabled', false);
3264                $label.removeClass('disabled');
3265              } else {
3266                // Hide or disable this vase option
3267                $(this).hide().removeClass('available').addClass('unavailable');
3268                $input.prop('disabled', true).prop('checked', false);
3269                $label.addClass('disabled');
3270              }
3271            });
3272            
3273            // Auto-select first available vase if none is selected
3274            var $checkedVase = $('.swatch[data-option-index="1"] input[type="radio"]:checked:enabled');
3275            if ($checkedVase.length === 0) {
3276              var $firstAvailable = $('.swatch[data-option-index="1"] input[type="radio"]:enabled').first();
3277              if ($firstAvailable.length > 0) {
3278                $firstAvailable.prop('checked', true).trigger('change');
3279              }
3280            }
3281          }
3282          
3283          // Function to get available vases for a specific variant
3284          function getAvailableVasesForVariant(variantValue) {
3285            var availableVases = [];
3286            
3287            // Loop through all product variants to find matching vases
3288            if (productData && productData.variants) {
3289              productData.variants.forEach(function(variant) {
3290                if (variant.available && variant.option1 === variantValue) {
3291                  var vaseOption = variant.option2;
3292                  if (vaseOption && !availableVases.includes(vaseOption)) {
3293                    availableVases.push(vaseOption);
3294                  }
3295                }
3296              });
3297            }
3298            
3299            return availableVases;
3300          }
3301          
3302          // Initialize vase options on page load
3303          setTimeout(function() {
3304            updateAvailableVariantOptions();
3305          }, 100);
3306          
3307        });
3308      </script>
3308
3309    </div>
3310  
3311
3312
3313    
3314  
3315
3316
3317<style>
3318  .select2-results__option[aria-disabled] {
3319    display: none;
3320  }
3321
3322  .towel-bordir {
3323    width: 100%;
3324    display: flex;
3325    align-items: center;
3326    justify-content: space-around;
3327  }
3328  @media screen and (max-width: 768px) {
3329    .ios .form-group-variant .variant-metafield {
3330      display: block !important;
3331      width: 100% !important;
3332      padding: 12px 16px !important;
3333      border: 1px solid #212121 !important;
3334      background: #fff !important;
3335      font-size: 16px !important;
3336      -webkit-appearance: none !important;
3337      -moz-appearance: none !important;
3338      appearance: none !important;
3339      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;
3340      background-repeat: no-repeat !important;
3341      background-position: right 12px center !important;
3342      background-size: 16px !important;
3343      color: #333 !important;
3344      min-height: 44px !important;
3345    }
3346
3347    .ios .form-group-variant .variant-metafield:focus {
3348      outline: none !important;
3349      border-color: #007AFF !important;
3350      box-shadow: 0 0 0 3px rgba(0, 122, 255, 0.1) !important;
3351    }
3352
3353    .ios .form-group-variant .variant-metafield option {
3354      padding: 12px 16px !important;
3355      font-size: 16px !important;
3356      color: #333 !important;
3357      background: #fff !important;
3358    }
3359
3360    .ios .form-group-variant .variant-metafield option:checked {
3361      background: #007AFF !important;
3362      color: #fff !important;
3363    }
3364
3365    .ios .form-group-variant .variant-metafield option:disabled {
3366      color: #999 !important;
3367      background: #f5f5f5 !important;
3368    }
3369
3370    .ios .form-group-variant .select2-container {
3371      display: none !important;
3372    }
3373    .ios .form-group-variant label {
3374      font-size: 14px !important;
3375      font-weight: 600 !important;
3376      color: #333 !important;
3377      margin-bottom: 8px !important;
3378    }
3379  }
3380  @media screen and (max-width: 768px) {
3381    body:not(.ios) .form-group-variant .variant-metafield {
3382      display: block !important;
3383      width: 1px !important;
3384      padding: 0 !important;
3385      border-color: #fff !important;
3386    }
3387  }
3388</style>
3389
3390
3391
3392
3393<script>
3394  // Detect iOS and add class to body
3395  function detectIOS() {
3396    const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
3397    if (isIOS) {
3398      document.body.classList.add('ios');
3399      
3400      // Initialize native select for iOS on variant metafields
3401      setTimeout(function() {
3402        initIOSVariantMetafields();
3403      }, 100);
3404    }
3405    return isIOS;
3406  }
3407
3408  function initIOSVariantMetafields() {
3409    const isIOS = document.body.classList.contains('ios');
3410    if (!isIOS) return;
3411
3412    // Find all variant metafield selects
3413    const variantSelects = document.querySelectorAll('.form-group-variant .variant-metafield');
3414    
3415    variantSelects.forEach(function(select) {
3416      // Destroy Select2 if it exists
3417      if ($(select).hasClass('select2-hidden-accessible')) {
3418        $(select).select2('destroy');
3419      }
3420      
3421      // Remove Select2 classes
3422      select.classList.remove('select2-hidden-accessible');
3423      
3424      // Show the native select
3425      select.style.display = 'block';
3426      select.style.width = '100%';
3427      
3428      // Add iOS specific event listeners
3429      select.addEventListener('focus', function() {
3430        this.style.borderColor = '#007AFF';
3431        this.style.boxShadow = '0 0 0 3px rgba(0, 122, 255, 0.1)';
3432      });
3433      
3434      select.addEventListener('blur', function() {
3435        this.style.borderColor = '#ddd';
3436        this.style.boxShadow = 'none';
3437        
3438        // Clear error styling when field loses focus (if it has value)
3439        if (this.value && this.value !== '') {
3440          const fieldContainer = this.closest('.form-group-variant');
3441          if (fieldContainer) {
3442            fieldContainer.classList.remove('field-error');
3443            const existingError = fieldContainer.querySelector('.error-message');
3444            if (existingError) {
3445              existingError.remove();
3446            }
3447          }
3448        }
3449      });
3450      
3451      select.addEventListener('change', function() {
3452        // Trigger any existing change handlers
3453        $(this).trigger('change');
3454        
3455        // Clear error styling when value changes (if it has value)
3456        if (this.value && this.value !== '') {
3457          const fieldContainer = this.closest('.form-group-variant');
3458          if (fieldContainer) {
3459            fieldContainer.classList.remove('field-error');
3460            const existingError = fieldContainer.querySelector('.error-message');
3461            if (existingError) {
3462              existingError.remove();
3463            }
3464          }
3465        }
3466      });
3467    });
3468  }
3469
3470  // Run detection on page load
3471  document.addEventListener('DOMContentLoaded', function() {
3472    detectIOS();
3473  });
3474
3475  // Also run immediately in case DOM is already loaded
3476  if (document.readyState === 'loading') {
3477    document.addEventListener('DOMContentLoaded', detectIOS);
3478  } else {
3479    detectIOS();
3480  }
3481
3482  
3483  
3484  
3485</script>
3485
3486
3487
3488
3489
3490
3491
3492<select
3493  name="id[]"
3494  id="productSelect"
3495  class="product-single__variants ignore hide"
3496>
3497  
3498    
3499      
3500      <option
3501        
3502          selected="selected"
3503        
3504        data-sku="[C]HANTUSLOT"
3505        value="45873023910103"
3506      >
3507        GAME BAHASA INDONESIA
3508      </option>
3509
3510    
3511  
3512    
3513      
3514      <option
3515        
3516        data-sku="[C]OBIPCL1004-CNY2026"
3517        value="45873024008407"
3518      >
3519        SITUS GAME SLOT
3520      </option>
3521
3522    
3523  
3524</select>
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
3621
3622
3623
3624<script src="https://outerbloom.com/cdn/shop/t/138/assets/jquery.magnific-popup.min.js?v=184369421263510081681752652422" type="text/javascript"></script>
3624
3625
3626<script>
3627  $('.size-chart-open-popup').magnificPopup({
3628    type:'inline',
3629    midClick: true
3630  });
3631</script>
3631
3632
3633  
3634  
3635  
3636  <div class="upload-image-preview">
3637    
3638    
3639    
3640    
3641    
3642    <style>
3643  .file-dnd * {
3644    margin: 0;
3645    padding: 0;
3646    box-sizing: border-box;
3647  }
3648  .file-dnd {
3649    width: 100%;
3650    height: 250px;
3651    border: 1px solid #ddd;
3652    border-radius: 10px;
3653    padding: 15px;
3654    display: flex;
3655    flex-direction: column;
3656    gap: 10px;
3657    margin: auto;
3658  }
3659  .file-dnd input {
3660    display: none;
3661  }
3662  .file-dnd .before-upload {
3663    border: 1px dashed #888;
3664    flex: 1;
3665    border-radius: 5px;
3666    display: flex;
3667    justify-content: center;
3668    align-items: center;
3669    text-align: center;
3670    cursor: pointer;
3671  }
3672  .file-dnd .before-upload > div {
3673    display: flex;
3674    flex-direction: column;
3675    align-items: center;
3676    gap: 8px;
3677  }
3678  .file-dnd .before-upload > div h4 {
3679    width: 150px;
3680  }
3681  .file-dnd .before-upload > div p {
3682    font-size: 12px !important;
3683    color: #555;
3684  }
3685  .file-dnd.active .before-upload {
3686    border: 1px solid #5750d9;
3687    background-color: #f5f5ff;
3688  }
3689  .file-dnd .after-upload {
3690    position: relative;
3691    display: none;
3692  }
3693  .file-dnd .after-upload img {
3694    width: 100%;
3695    border-radius: 5px;
3696    max-height: 180px;
3697    object-fit: contain;
3698    display: block;
3699  }
3700  .file-dnd .after-upload .clear-btn {
3701    position: absolute;
3702    top: 10px;
3703    right: 10px;
3704    background: rgba(0, 0, 0, 0.5);
3705    width: 15px;
3706    height: 15px;
3707    text-align: center;
3708    line-height: 15px;
3709    border-radius: 50%;
3710    color: #fff;
3711    cursor: pointer;
3712    font-size: 14px;
3713  }
3714</style>
3715<div
3716  class="file-dnd mb-3"
3717  
3718    style="display: none"
3719  
3720>
3721  <label for="upload-photo">Upload your Photo:</label>
3722  <input type="file" id="upload-photo" accept="image/*">
3723  <input type="hidden" data-properties="Photo">
3724  <div class="before-upload">
3725    <div>
3726      <svg id="surface1" xmlns="http://www.w3.org/2000/svg" width="33.053" height="41.719" viewBox="0 0 33.053 41.719">
3727  <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>
3728  <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>
3729  <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>
3730</svg>
3731
3732      <h4>Drag & Drop Photo file or Browse</h4>
3733      <p>Supports: JPEG, PNG, GIF, TIFF</p>
3734    </div>
3735  </div>
3736  <div class="after-upload">
3737    <div class="clear-btn">&times;</div>
3738    <img src="" width="" height="">
3739  </div>
3740</div>
3741<script>
3742
3743  function applyDndFile(el) {
3744    const parent = document.querySelector(".file-dnd")
3745    const beforeUploadEl = el.querySelector(".before-upload")
3746    const afterUploadEl = el.querySelector(".after-upload")
3747    const inputFile = el.querySelector("input[type=file]")
3748    const imagePreview = el.querySelector(".after-upload img")
3749    const clearBtn = el.querySelector(".after-upload .clear-btn")
3750    const inputProps = parent.querySelector("[data-properties]");
3751
3752    async function upload(name, uri, type) {
3753      try {
3754        const filename = name.split('.')[0]
3755        let formData = new FormData(); 
3756        formData.append("file", uri);
3757        const response = await fetch(`https://app.asmaraku.com/api/upload?name=${filename}&dir=gift&type=${type}&shop=outerbloom1.myshopify.com`, {
3758          method: "POST", 
3759          body: formData
3760        })
3761        if(response) {
3762          const res = await response.json()
3763          return res
3764        }
3765      } catch(err){
3766        console.log(err)
3767      }
3768    }
3769
3770    function showImagePreview(img) {
3771      if(img){
3772        const blobUrl = URL.createObjectURL(img)
3773        imagePreview.src = blobUrl
3774        afterUploadEl.style.display = "block"
3775        beforeUploadEl.style.display = "none"
3776      }
3777    }
3778
3779    beforeUploadEl.addEventListener("click", (e) => {
3780      e.preventDefault()
3781      inputFile.click()
3782    })
3783
3784    inputFile.addEventListener("change", async (e) => {
3785      e.preventDefault()
3786      showImagePreview(e.target.files[0])
3787      var uploadData = await upload(e.target.files[0].name, e.target.files[0], e.target.files[0].type)
3788      inputProps.value = uploadData?.url
3789    })
3790
3791    clearBtn.addEventListener("click", (e) => {
3792      afterUploadEl.style.display = "none"
3793      beforeUploadEl.style.display = "flex"
3794      inputProps.value = ""
3795    })
3796
3797    beforeUploadEl.addEventListener("dragover", (e) => {
3798      e.preventDefault()
3799      el.classList.add("active")
3800    })
3801
3802    beforeUploadEl.addEventListener("dragleave", (e) => {
3803      e.preventDefault()
3804      el.classList.remove("active")
3805    })
3806
3807    beforeUploadEl.addEventListener("drop", async (e) => {
3808      e.preventDefault()
3809      el.classList.remove("active")
3810      showImagePreview(e.dataTransfer.files[0])
3811      var uploadData = await upload(e.dataTransfer.files[0].name, e.dataTransfer.files[0], e.dataTransfer.files[0].type)
3812      console.log(uploadData)
3813      inputProps.value = uploadData?.url
3814    })
3815  }
3816
3817  applyDndFile(document.querySelector(".file-dnd"))
3818
3819  $(document).ready(function(){
3820    $(".variant-swatch").change(function(){
3821      const v = $(this).val().toLowerCase()
3822      const list = ["photo", "custom one side", "custom two side"]
3823      if(list.some(item => v.includes(item))) return $(".file-dnd").show()
3824      $(".file-dnd").hide()
3825      $(".file-dnd").find("[data-properties]").val("")
3826      $(".after-upload").hide()
3827      $(".before-upload").css("display", "flex")
3828    })
3829  })
3830</script>
3830
3831
3832  </div>
3833  
3834    
3835    <div class="delivery-city mb-4">
3836  <h4 class="fw-600 text-uppercase mb-15">Delivery City</h4>
3837  <div class="row justify-content-between m-0">
3838    <select id="cities" class="form-control" required>
3839      <option value="">Choose Delivery City</option>
3840    </select>
3841  </div>
3842</div>
3843
3844<style>
3845  #cities {
3846    width: 100%;
3847    padding: 10px 35px 10px 12px;
3848    font-size: 14px;
3849    border: 1px solid #ccc;
3850    background-color: #fff;
3851    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;
3852    background-repeat: no-repeat !important;
3853    background-position: right 10px center !important;
3854    background-size: 12px !important;
3855    appearance: none;
3856    -webkit-appearance: none;
3857    -moz-appearance: none;
3858    cursor: pointer;
3859  }
3860
3861  #cities {
3862    -webkit-appearance: none;
3863    -moz-appearance: none;
3864    appearance: none;
3865  }
3866  
3867  #cities:-ms-expand {
3868    display: none;
3869  }
3870  
3871  #cities:focus {
3872    border-color: #212121;
3873    outline: none;
3874    box-shadow: 0 0 0 2px rgba(33, 33, 33, 0.1);
3875  }
3876  
3877  #cities:hover {
3878    border-color: #999;
3879  }
3880  
3881  #cities option {
3882    padding: 10px;
3883  }
3884</style>
3885
3886<script>
3887  // Cities dropdown uses native HTML select
3888</script>
3888
3889
3890    
3891  <div id="row-delivery-date" class="row m-0 mb-3">
3892    <h4 class="fw-600 text-uppercase col-12 p-0 mb-15">Delivery Date</h4>
3893    <div id="deliveryDate" class="m-0"></div>
3894    <div id="deliveryDateFull">
3895      <div class="">
3896        <input
3897          type="text"
3898          id="full-date"
3899          class="date-full calendarbutton btn steps-btn btn-date-time mb-0"
3900          value="Full Calendar"
3901        >
3902        <label for="full-date"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
3903<title>icon-arrow-right</title>
3904<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>
3905</svg></label>
3906      </div>
3907      <button class="btnChangeDeliveryDate hide">Change Delivery Date</button>
3908    </div>
3909    <div class="form-group p-0">
3910      <input type="text" id="propDeliveryDate" required class="hide">
3911    </div>
3912  </div>
3913  
3914    <p id="noteDeliveryDate" class="mb-3"></p>
3915  
3916  
3917    <input type="hidden" id="propDeliveryTime" value="-" disabled>
3918  
3919
3920
3921  
3922  
3923  <div id="personalizeBtn">
3924    
3925    
3926    
3927    
3928    <button id="btnPurchase"
3929      class="btn text-uppercase w-100 fw-400"
3930      
3931      
3932    >
3933      
3934        MAKE IT PERSONAL ➔
3935      
3936    </button>
3937    <div class="button-share-wishlist d-flex justify-content-around mt-3">
3938      <div class="button-share text-center">
3939        <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">
3940  <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"/>
3941</svg>
3942</p>
3943      </div>
3944      <div class="button-wishlist text-center">
3945        <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;">
3946          <span>WISHLIST</span>
3947          <div class="wishlist-icon-wrapper" style="display: flex; align-items: center; justify-content: center; width: 16px; height: 22px;">
3948            <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;">
3949              <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.
394911233C11.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"/>
3950            </svg>
3951            <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;">
3952              <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"/>
3953            </svg>
3954          </div>
3955        </button>
3956      </div>
3957    </div>
3958  </div>
3959</div>
3960<div class="purchasePopup purchasePopupSpotify" style="display: none;">
3961  <div class="purchaseArea">
3962    <div class="sectionPurchase sectionPurchaseSpotify">
3963      <div class="wrapperPurchase">
3964        <div class="headerPurchase">
3965          <h3>personalize spotify photo print</h3>
3966          <a class="close-purchase-popup">
3967            <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none">
3968              <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>
3969            </svg>
3970          </a>
3971        </div>
3972        <div class="contentPurchase">
3973          <div class="spotifyAddons"></div>
3974        </div>
3975
3976        <div class="purchase-button btn-addon row m-0" style="display: none;">
3977          <div class="col-12 col-lg-2 text-left mb-2 p-0">
3978            <button class="back-purchase-button back-addon text-uppercase">
3979              <svg width="15" height="14" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg">
3980                <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>
3981              </svg>
3982              <span>Back</span>
3983            </button>
3984          </div>
3985          <div class="col-12 col-lg-10 text-right" style="display: flex;justify-content: end;gap: 20px;">
3986            <button class="btn next-purchase-button next-addon text-uppercase">
3987              <span>continue without add-ons</span>
3988            </button>
3989          </div>
3990        </div>
3991      </div>
3992    </div>
3993  </div>
3994</div>
3995
3996<style>
3997  #PBarNextFrameWrapper {
3998    display: none;
3999  }
4000  #backgroundPopup {
4001    display: none;
4002    position: fixed;
4003    _position: absolute;
4004    height: 100%;
4005    width: 100%;
4006    top: 0;
4007    left: 0;
4008    background: rgb(117 117 117 / 24%);
4009    z-index: 1;
4010  }
4011  .sectionPurchase {
4012    height: 100%;
4013    position: relative;
4014    max-width: 1344px;
4015    background-color: #fff;
4016    padding: 0;
4017    overflow: hidden;
4018    display: flex;
4019    flex-direction: column;
4020  }
4021  .sectionPurchase.purchaseAddonSpotify {
4022    max-width: 1070px!important;
4023    max-height: 765px!important;
4024  }
4025  .sectionPurchaseBoard {
4026    max-width: 872px!important;
4027    max-height: 821px!important;
4028  }
4029  .purchaseAddonSpotify .btn-action {
4030    position: absolute;
4031    bottom: 0;
4032    left: 0;
4033    width: 100%;
4034    display: flex;
4035    gap: 10px;
4036  }
4037  .wrapperPurchase {
4038    position: relative;
4039    height: 100%;
4040    display: flex;
4041    flex-direction: column;
4042  }
4043  .purchase-content {
4044    flex: 1;
4045    overflow-y: auto;
4046    overflow-x: hidden;
4047    padding: 20px;
4048  }
4049  
4050  .purchase-button-wrapper {
4051    position: sticky;
4052    bottom: 0;
4053    background-color: #fff;
4054    border-top: 1px solid #e0e0e0;
4055    padding: 15px 0;
4056    margin-top: auto;
4057    z-index: 10;
4058  }
4059  
4060  .purchasePopup {
4061    display: none;
4062    position: fixed;
4063    background: rgb(117 117 117 / 24%);
4064    z-index: 999;
4065    padding: 40px;
4066    font-size: 13px;
4067    top: 0;
4068    left: 0;
4069    width: 100%;
4070    height: 100%;
4071  }
4072  .popupPurchaseClose{
4073    font-size:14px;
4074    line-height:14px;
4075    right:45px;
4076    top:45px;
4077    position:absolute;
4078    color:#6fa5fd;
4079    font-weight:700;
4080    display:block;
4081    cursor: pointer;
4082  }
4083
4084  .headerPurchase {
4085    margin-bottom: 30px;
4086    display: flex;
4087    justify-content: space-between;
4088  }
4089
4090  .headerPurchase h3 {
4091    font-size: 16px;
4092    text-transform: uppercase;
4093  }
4094
4095  .sectionPurchaseBoard .headerPurchase {
4096    margin-bottom: 15px;
4097  }
4098
4099  .sectionPurchaseBoard .formAddressPurchase {
4100    padding-top: 0;
4101  }
4102
4103  .purchaseArea {
4104    position: relative;
4105    height: 100%;
4106  }
4107
4108  .purchaseArea h4 {
4109    width: 100%;
4110    font-size: 12px;
4111    font-weight: 600;
4112    margin-bottom: 10px;
4113    text-transform: uppercase;
4114  }
4115
4116  .menuPurchase {
4117    margin-bottom: 30px;
4118  }
4119
4120  .menuPurchase ul {
4121    list-style-type: none;
4122    margin: 0;
4123  }
4124
4125  .menuPurchase ul li {
4126    display: inline-block;
4127    border: 1px solid #212121;
4128    padding: 5px 20px;
4129    margin-right: 5px;
4130    margin-bottom: 10px;
4131    font-size: 12px;
4132    font-weight: 400;
4133  }
4134
4135  .menuPurchase ul li:hover, .menuPurchase ul li.selected {
4136    background-color: #212121;
4137    color: #ffffff;
4138  }
4139
4140  .contentPurchase h5 {
4141      font-size: 12px;
4142      margin-bottom: 10px;
4143      font-weight: 400;
4144      overflow: hidden;
4145  }
4146
4147  #itemCards {
4148    max-height: 430px;
4149    overflow: auto;
4150  }
4151
4152  .item-cards {
4153      width: 100%;
4154  }
4155  .item-card.selected {
4156      border: 1px solid #212121;
4157  }
4158  .item-card:hover {
4159      border: 1px solid #C4C4C4;
4160  }
4161  .item-cards .item-card {
4162    position: relative;
4163    width: calc(33% - 10px);
4164    max-width: calc(33% - 10px);
4165    flex: 0 0 calc(33% - 10px);
4166    margin-bottom: 20px;
4167  }
4168  .item-cards .item-card label,
4169  .item-addons .item-addon label {
4170      position: absolute;
4171      left: 0;
4172      width: 100%;
4173      height: 100%;
4174  }
4175  .item-cards .item-card .card-image img,
4176  .item-addons .item-addon .card-image img {
4177      display: block;
4178      width: 100%;
4179  }
4180  .item-card .card-meta,
4181  .item-addon .card-meta {
4182      padding: 10px 5px 5px;
4183  }
4184  .item-card.selected .card-meta,
4185  .item-addon.selected .card-meta,
4186  .item-card.selected .card-qty {
4187      background-color: #212121;
4188      color: #fff;
4189      visibility: visible!important;
4190  }
4191  .item-card:hover .card-meta,
4192  .item-addon:hover .card-meta,
4193  .item-card:hover .card-qty {
4194      background-color: #C4C4C4;
4195      color: #fff;
4196      visibility: visible!important;
4197  }
4198  .item-cards .item-card p,
4199  .item-addons .item-addon p {
4200    font-size: 12px !important;
4201    margin: 0;
4202    font-weight: 600;
4203  }
4204  .item-card .card-meta input,
4205  .item-addon .card-meta input {
4206      display: none;
4207  }
4208  .item-cards .item-card h5,
4209  .item-addons .item-addon h5 {
4210    font-size: 14px;
4211  }
4212
4213  @media (max-width: 768px) {
4214    .item-cards .item-card {
4215        width: calc(50% - 10px);
4216        max-width: calc(50% - 10px);
4217        flex: 0 0 calc(50% - 10px);
4218        margin-bottom: 0;
4219    }
4220  }
4221
4222  .card-qty {
4223    display: flex;
4224    padding: 5px;
4225    visibility: hidden;
4226    background-color: #fff !important;
4227    z-index: 999;
4228  }
4229  .card-qty a {
4230    border-width: 1px;
4231    width: 30%;
4232    cursor: pointer;
4233    text-align: center;
4234    align-self: center;
4235    height: 28px;
4236    display: block;
4237    position: relative;
4238  }
4239  .card-qty a svg {
4240    position: absolute;
4241    top: 50%;
4242    left: 50%;
4243    transform: translate(-50%, -50%);
4244    text-align: center;
4245  }
4246  input.btn-qty {
4247    border-width: 0px;
4248    border-radius: 0;
4249    background-color: #fff;
4250    -webkit-appearance: none;
4251    box-shadow: none !important;
4252    -webkit-box-shadow: none !important;
4253    -moz-box-shadow: none!important;
4254    width: 40%;
4255    border-left: 1px solid #c4c4c4;
4256    border-right: 1px solid #c4c4c4;
4257    padding: 0;
4258  }
4259
4260  .sectionPurchaseBoard #itemAddons .item-card {
4261    width: calc(20% - 15px);
4262    max-width: calc(20% - 15px);
4263    flex: 0 0 calc(20% - 15px);
4264  }
4265
4266  .purchase-button {
4267    width: 100%;
4268    padding: 0;
4269    margin: 0;
4270  }
4271
4272  .sectionPurchaseBoard .purchase-button {
4273    margin-top: 0 !important;
4274  }
4275
4276  .back-purchase-button, .back-spotify {
4277      width: 139px;
4278      border: 1px solid;
4279      height: 43px;
4280  }
4281  .purchase-button .btn {
4282    width: 297px;
4283    height: 43px;
4284    background-color: #212121;
4285    color: #ffffff;
4286  }
4287  .purchase-button .btn[disabled] {
4288    background-color: #EEEEEE;
4289  }
4290  .back-purchase-button svg, .back-spotify svg {
4291    align-self: center;
4292    vertical-align: middle;
4293    margin-right: 10px;
4294  }
4295
4296  #purchaseProduct .row .error {
4297    font-size: 12px !important;
4298    color: rgb(231, 76, 60);
4299    margin-top: 5px;
4300  }
4301
4302  .reviewCardPurchase {
4303    max-width: 448px;
4304    float: right;
4305  }
4306
4307  .addonsPurchase .addon-item {display: flex;justify-content: space-between;}
4308  .addon-item * {align-self: center;font-size: 12px;}
4309  .addon-itm-title {width: 360px;}
4310  .addon-itm-line-price {color: #757575;width: 80px;justify-content: space-between;display: flex;}
4311
4312  .propsAddonSpotify p {
4313    margin: 0;
4314    display: flex;
4315    font-size: 12px !important;
4316    margin-bottom: 5px;
4317  }
4318  .propsAddonSpotify p span:first-child {
4319    text-transform: uppercase;
4320    font-weight: 600;
4321    -ms-flex: 0 0 150px;
4322    flex: 0 0 150px;
4323    max-width: 150px;
4324  }
4325
4326  .addonsPurchase .addons {
4327    max-height: 250px;
4328    overflow: auto;
4329  }
4330
4331  .btn .loading:after {
4332    content: "";
4333    display: inline-block;
4334    width: 20px;
4335    height: 20px;
4336    padding: 3px;
4337    aspect-ratio: 1;
4338    border-radius: 50%;
4339    background: #FFFFFF;
4340    --_m: conic-gradient(#0000 10%, #212121), linear-gradient(#212121 0 0) content-box;
4341    -webkit-mask: var(--_m);
4342    mask: var(--_m);
4343    -webkit-mask-composite: source-out;
4344    mask-composite: subtract;
4345    animation: l3 1s infinite linear;
4346    margin: auto;
4347    vertical-align: middle;
4348    margin-left: 10px;
4349  }
4350
4351  #qrcode img, #qrcode canvas {
4352    width: 50px;
4353    position: absolute;
4354    top: 12px;
4355    left: 16px;
4356  }
4357
4358  .t-preview {
4359    position: absolute;
4360    top: 17px;
4361    left: 75px;
4362  }
4363  .t-preview p {
4364    margin: 0;
4365    font-size: 12px !important;
4366  }
4367  .t-preview .h3 {
4368    font-size: 16px !important;
4369    margin-bottom: 5px;
4370    font-weight: 600;
4371  }
4372  .scanCard {
4373    width: 100%;
4374    border: 1px solid;
4375    height: 76px;
4376    background-color: #fff;
4377  }
4378  .scanCard > div > img {
4379    position: absolute;
4380    right: 0;
4381    width: 55px;
4382  }
4383
4384  @keyframes l3 {
4385    100% {
4386      transform: rotate(1turn);
4387    }
4388  }
4389
4390  @media (min-width: 991px) {
4391    .sectionPurchase {
4392      height: 100%;
4393      position: relative;
4394      max-width: 1344px;
4395      background-color: #fff;
4396      top: 50%;
4397      left: 50%;
4398      transform: translate(-50%, -50%);
4399    }
4400    .headerPurchase h3 {
4401      font-size: 20px;
4402    }
4403    .purchaseArea h4 {
4404      font-size: 16px;
4405    }
4406
4407    .menuPurchase ul li {
4408        font-size: 16px;
4409    }
4410    
4411    .contentPurchase {
4412      margin-bottom: 30px;
4413    }
4414    .contentPurchase h5 {
4415      font-size: 16px;
4416    }
4417
4418    .item-cards .item-card p,
4419    .item-addons .item-addon p {
4420      font-size: 16px !important;
4421    }
4422
4423    .cards {
4424      float: right;
4425      width: 400px;
4426    }
4427
4428    .item-cards .item-card {
4429      width: calc(25% - 30px);
4430      max-width: calc(25% - 30px);
4431      flex: 0 0 calc(25% - 30px);
4432      margin-right: 30px;
4433    }
4434
4435      #itemAddons .item-card {
4436        position: relative;
4437        width: calc(16% - 40px);
4438        max-width: calc(16% - 40px);
4439        flex: 0 0 calc(16% - 40px);
4440      }
4441      
4442    .purchase-button-wrapper {
4443        padding: 10px 20px;
4444    }
4445  }
4446
4447  @media (max-width: 1200px) {
4448    .item-cards .item-card {
4449      width: calc(33% - 30px);
4450      max-width: calc(33% - 30px);
4451      flex: 0 0 calc(33% - 30px);
4452    }
4453  }
4454
4455  @media (max-width: 992px) {
4456    .purchasePopup {
4457      padding: 0;
4458    }
4459    .item-cards .item-card h5,
4460    .item-addons .item-addon h5 {
4461      max-height: 30px;
4462    }
4463
4464    .back-purchase-button, .back-spotify, .next-purchase-button {
4465        width: 100%;
4466    }
4467    .addon-itm-title {
4468      width: 300px;
4469    }
4470    .addon-itm-line-price {
4471      margin-right: 10px;
4472    }
4473    .t-preview {
4474      top: 10px;
4475    }
4476
4477    .card-qty a {
4478      height: 15px;
4479    }
4480    
4481    .purchase-button-wrapper {
4482      padding: 15px;
4483    }
4484  }
4485
4486  @media (max-width: 576px) {
4487    .purchase-button .btn {
4488        width: 100%!important;
4489    }
4490    .purchase-button > .col-12 {
4491      padding-left: 0;
4492      padding-right: 0;
4493    }
4494  }
4495</style>
4496
4497
4498<div class="purchasePopup">
4499  <div class="purchaseArea">
4500    
4501      <div class="sectionPurchase purchasePersonalize">
4502        <div class="wrapperPurchase">
4503          <div class="purchase-content">
4504            <div class="headerPurchase">
4505  <h3 class="text-uppercase">
4506    
4507      MAKE IT PERSONAL ➔
4508    
4509  </h3>
4510  <a class="close-purchase-popup">
4511  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none">
4512    <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"/>
4513  </svg>
4514</a>
4515
4516</div>
4517<div class="contentPurchase">
4518  <div class="row">
4519    
4520      <div class="col-12 col-lg-7">
4521        <div class="menuPurchase">
4522          <h4 class="text-uppercase">choose your occasion</h4>
4523          <ul>
4524            
4525              <li
4526                class="item-occassion selected"
4527                data-occassion="greeting-card-all"
4528                
4529              >
4530                General
4531              </li>
4532            
4533              <li
4534                class="item-occassion"
4535                data-occassion="greeting-card-birthday"
4536                
4537              >
4538                Birthday
4539              </li>
4540            
4541              <li
4542                class="item-occassion"
4543                data-occassion="greeting-card-anniversary"
4544                
4545              >
4546                Anniversary
4547              </li>
4548            
4549              <li
4550                class="item-occassion"
4551                data-occassion="greeting-card-newborn"
4552                
4553              >
4554                Newborn
4555              </li>
4556            
4557              <li
4558                class="item-occassion"
4559                data-occassion="greeting-card-wedding"
4560                
4561              >
4562                Wedding
4563              </li>
4564            
4565              <li
4566                class="item-occassion"
4567                data-occassion="greeting-card-graduation"
4568                
4569              >
4570                Graduation
4571              </li>
4572            
4573              <li
4574                class="item-occassion"
4575                data-occassion="greeting-card-mothers-day"
4576                
4577              >
4578                Mother's Day
4579              </li>
4580            
4581              <li
4582                class="item-occassion"
4583                data-occassion="greeting-card-valentine"
4584                
4585              >
4586                Valentine
4587              </li>
4588            
4589              <li
4590                class="item-occassion"
4591                data-occassion="greeting-card-others"
4592                
4593                  style="display: none"
4594                
4595              >
4596                Others
4597              </li>
4598            
4599          </ul>
4600        </div>
4601        <div id="chooseCard">
4602          <h4 class="text-uppercase">choose your card design</h4>
4603          <div
4604            id="itemCards"
4605            class="item-cards d-flex mb-4"
4606          >
4607            <div class="row m-0 items-card w-100">
4608              <p style="margin: 50px auto;text-align: center;font-size: 13px !important;">
4609                There are no card items available.<br>
4610                Please choose an occasion above
4611              </p>
4612            </div>
4613          </div>
4614        </div>
4615      </div>
4616      <div class="col-12 col-lg-5">
4617        <div class="cards">
4618          <h4 class="mb-2">Personalize your Message</h4>
4619          
4620            <label class="font-weight-bold label-attach-foto"
4621              >Create a lasting memory. Attach a special photo or a video to cherish forever.</label
4622            >
4623          
4624          
4625
4626<style>
4627  #greetingCard label {display: inline-block;color: #212121;margin-bottom: .5rem;font-size: 14px;font-weight: 400!Important;}
4628  
4629  .form-group.has-counter {
4630    position: relative;
4631  }
4632  
4633  .limit {
4634    position: absolute;
4635    top: 4px;
4636    right: -30px;
4637    font-size: 11px;
4638    color: #999;
4639    background: rgba(255, 255, 255, 0.9);
4640    padding: 2px 6px;
4641    border-radius: 3px;
4642    z-index: 10;
4643    pointer-events: none;
4644  }
4645  
4646  .form-group.has-counter input,
4647  .form-group.has-counter textarea {
4648    padding-right: 0px;
4649  }
4650  
4651  .prefix-selector-wrapper {
4652    margin: 5px 0;
4653  }
4654  
4655  .prefix-selector-wrapper label {
4656    display: inline-block;
4657    margin-right: 10px;
4658    vertical-align: middle;
4659  }
4660  
4661  .prefix-selector {
4662    border: none;
4663    font-size: 12px;
4664    background: white;
4665    cursor: pointer;
4666    width: auto;
4667    max-width: 200px;
4668    padding: 5px;
4669    padding-right: 25px;
4670    appearance: none;
4671    -webkit-appearance: none;
4672    -moz-appearance: none;
4673    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');
4674    background-repeat: no-repeat;
4675    background-position: right 5px center;
4676    background-size: 12px;
4677    vertical-align: middle;
4678  }
4679  
4680  .label-prefix {
4681    cursor: pointer;
4682    user-select: none;
4683    -webkit-user-select: none;
4684  }
4685  
4686  .label-prefix.hidden {
4687    display: none!important;
4688  }
4689</style>
4690<div id="greetingCard">
4691  
4692    <div class="greetingCard">
4693      <div class="steps-card-preview d-flex align-items-center justify-content-center">
4694        
4695          <div class="case-img-preview">
4696  <div class="remove-image" style="display: none">
4697    <svg class="icon icon-close" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
4698<title>icon-close</title>
4699<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>
4700</svg>
4701  </div>
4702  <div class="btn-upload">
4703    <div>
4704      <img class="preview-image" src="" alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman" class="img" style="display: none">
4705    </div>
4706    <div class="icon-upload">
4707      <button type="button">
4708        <img class="ajax-loader" src="https://outerbloom.com/cdn/shop/t/138/assets/ajax-loader.gif?v=41356863302472015721752652421" style="display: none">
4709        <div class="placeholder-image" onclick="">
4710          <label for="input-foto" onclick=""
4711            ><img src="https://outerbloom.com/cdn/shop/t/138/assets/icon-media_60x.png?v=142273593979200676731752652420" width="" height="" alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
4712          ></label>
4713          <div class="button-empty-state" onclick="">
4714            <label for="input-foto" onclick="" class="btn btn-upload-image">
4715              <svg xmlns="http://www.w3.org/2000/svg" width="16" height="17" viewBox="0 0 16 17" fill="none">
4716                <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"/>
4717                <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.
47176391 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"/>
4718                <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"/>
4719              </svg>
4720              <span>Upload Image</span>
4721            </label>
4722            <label for="input-video" onclick="" class="btn btn-upload-video">
4723              <svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" viewBox="0 0 20 17" fill="none">
4724                <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"/>
4725                <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.22366 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.5
4725732 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"/>
4726              </svg>
4727              <span>Upload Video</span>
4728            </label>
4729          </div>
4730        </div>
4731      </button>
4732    </div>
4733  </div>
4734</div>
4735
4736          
4737<div class="case-video-preview">
4738  <div class="d-flex justify-content-between">
4739    <p>Add video to make it more special (optional)</p>
4740    <button class="remove-media" style="display: none">
4741      <svg class="icon icon-close" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
4742<title>icon-close</title>
4743<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>
4744</svg>
4745    </button>
4746    <label id="label-input-video" for="input-video" onclick style="">
4747      <img class="ajax-loader" src="https://outerbloom.com/cdn/shop/t/138/assets/ajax-loader.gif?v=41356863302472015721752652421" style="display: none;vertical-align: middle;"/>
4748      <span><img src="https://outerbloom.com/cdn/shop/t/138/assets/icon-upload-video_icon.png?v=10584829661837769631752652419"/><span>Upload Video</span></span>
4749    </label>
4750  </div>
4751</div>
4752
4753        
4754      </div>
4755      <div class="steps-card-input">
4756        
4757          <div class="prefix-selector-wrapper">
4758            <label for="prefixSelector" class="font-weight-bold m-0">Prefix:</label>
4759            <select id="prefixSelector" class="prefix-selector">
4760              <option value="">None</option>
4761              <option value="Dear" selected>Dear</option>
4762              <option value="To">To</option>
4763              <option value="Hi">Hi</option>
4764            </select>
4765          </div>
4766          <div class="form-group mr-auto form-group-half form-recipient has-counter d-flex">
4767            <label for="" class="font-weight-bold m-0 pr-1 label-prefix" style="border-bottom: 1px solid #212121;">Dear</label>
4768            <input
4769              type="text"
4770              id="recipientNameInput"
4771              class="form-control has-limit"
4772              data-properties="penerima"
4773              placeholder="RECIPIENT NAME"
4774              maxlength="30"
4775              
4776            >
4777            <small class="limit text-muted">(30)</small>
4778          </div>
4779          <div class="form-group custom-card mb-2 has-counter">
4780            <textarea
4781              data-properties="ucapan"
4782              class="form-control has-limit"
4783              rows="6"
4784              placeholder="Write your special message here.."
4785              maxlength="300"
4786              ></textarea>
4787            <small class="limit text-muted">(300)</small>
4788            
4789              <!--
4790                <a href="#" data-card-occassion="all">
4791                  <div class="rectangle-promo-code">
4792                    <span class="promo-code-link">Get ideas</span>
4793                  </div>
4794                </a>
4795              -->
4796            
4797            
4798            <button id="msgCard">Template Message</button>
4799          </div>
4800
4801          <div class="hide">
4802            <input type="hidden" value="" id="note_id" name="note_id" style="top: 0px;">
4803            <input type="hidden" value="" id="note_btn_id" name="note_btn_id">
4804          </div>
4805
4806          <div class="form-group ml-auto mt-3 text-right form-group-half position-relative has-counter">
4807            <label for="" class="font-weight-bold d-none">Yours Sincerely,</label>
4808            <input
4809              id="senderCard"
4810              type="text"
4811              class="form-control text-right has-limit"
4812              data-properties="pengirim"
4813              placeholder="SENDER NAME"
4814              maxlength="30"
4815            >
4816            <small class="limit text-muted">(30)</small>
4817          </div>
4818        
4819      </div>
4820    </div>
4821  
4822</div>
4823<script>
4824  async function getFetch(url) {
4825    const response = await fetch(url);
4826    const result = await response.json();
4827    return result;
4828  }
4829  $(document).ready(function(){
4830    // Prefix selector functionality
4831    var prefixOptions = ['Dear', 'To', 'Hi'];
4832    var isUpdatingPrefix = false;
4833
4834    function getNameWithoutPrefix(value) {
4835      var trimmed = value.trim();
4836      for (var i = 0; i < prefixOptions.length; i++) {
4837        var prefix = prefixOptions[i];
4838        if (trimmed.toLowerCase().indexOf(prefix.toLowerCase() + ' ') === 0) {
4839          return trimmed.substring(prefix.length);
4840        }
4841      }
4842      return trimmed;
4843    }
4844
4845    function detectPrefix(value) {
4846      var trimmed = value.trim();
4847      for (var i = 0; i < prefixOptions.length; i++) {
4848        var prefix = prefixOptions[i];
4849        if (trimmed.toLowerCase().indexOf(prefix.toLowerCase() + ' ') === 0) {
4850          return prefix;
4851        }
4852      }
4853      return '';
4854    }
4855
4856    function applyPrefixToInput(prefix) {
4857      var recipientInput = $('#recipientNameInput');
4858      var nameOnly = getNameWithoutPrefix(recipientInput.val());
4859
4860      if (!nameOnly) {
4861        recipientInput.val('');
4862        return;
4863      }
4864
4865      if (prefix === '') {
4866        recipientInput.val(nameOnly);
4867      } else {
4868        recipientInput.val(prefix + ' ' + nameOnly);
4869      }
4870    }
4871
4872    $('#prefixSelector').on('change', function() {
4873      var selectedPrefix = $(this).val();
4874      var recipientInput = $('#recipientNameInput');
4875      var labelPrefix = $('.label-prefix');
4876
4877      isUpdatingPrefix = true;
4878      applyPrefixToInput(selectedPrefix);
4879      isUpdatingPrefix = false;
4880
4881      // Update label-prefix text and visibility
4882      if (selectedPrefix === '') {
4883        labelPrefix.addClass('hidden');
4884        labelPrefix.text('');
4885      } else {
4886        labelPrefix.text(selectedPrefix).removeClass('hidden');
4887      }
4888
4889      recipientInput.focus();
4890    });
4891    
4892    // Click label-prefix to open selector
4893    $('.label-prefix').on('click', function() {
4894      $('#prefixSelector').focus().click();
4895    });
4896    
4897    // Initialize label-prefix based on current selector value
4898    var initialPrefix = $('#prefixSelector').val();
4899    if (initialPrefix === '') {
4900      $('.label-prefix').addClass('hidden');
4901    } else {
4902      $('.label-prefix').text(initialPrefix);
4903    }
4904
4905    $('#recipientNameInput').on('input', function() {
4906      if (isUpdatingPrefix) {
4907        return;
4908      }
4909
4910      var currentValue = $(this).val();
4911
4912      // If input is cleared, reset prefix to None
4913      if (!currentValue) {
4914        isUpdatingPrefix = true;
4915        $('#prefixSelector').val('');
4916        isUpdatingPrefix = false;
4917        return;
4918      }
4919    });
4920
4921    // Initialize prefix selector based on current value
4922    $('#prefixSelector').val('Dear');
4923    
4924    $('textarea.has-limit, input.has-limit').keyup(function () {
4925      max = this.getAttribute("maxlength");
4926      var len = $(this).val().length;
4927      var limit = $(this).siblings(".limit");
4928      if (len >= max) {
4929        alert('you have reached the limit');
4930      } else {
4931        var char = max - len;
4932        limit.text('('+char+')');
4933      }
4934    });
4935
4936    // Limit textarea to maximum 6 lines
4937    $('[data-properties=ucapan]').on('input keydown paste', function(e) {
4938      var textarea = $(this);
4939      var lines = textarea.val().split('\n');
4940      
4941      // Check if trying to add more than 6 lines
4942      if (lines.length > 6) {
4943        // Prevent adding new line if already at 6 lines
4944        if (e.type === 'keydown' && e.keyCode === 13) {
4945          e.preventDefault();
4946          return false;
4947        }
4948        // Trim to 6 lines if pasting content
4949        if (e.type === 'paste' || e.type === 'input') {
4950          var limitedText = lines.slice(0, 6).join('\n');
4951          textarea.val(limitedText);
4952        }
4953      }
4954      
4955      // Update character counter after line limit check
4956      var max = this.getAttribute("maxlength");
4957      var len = $(this).val().length;
4958      var limit = $(this).siblings(".limit");
4959      var char = max - len;
4960      limit.text('('+char+')');
4961    });
4962
4963    var text_max=150;
4964    var msg_text="";
4965    $('#previewMsg').html(msg_text);
4966    $('[data-properties=ucapan]').keyup(function(){
4967      var text_length=$(this).val().length;
4968      var msg_text=$(this).val();
4969      $('#previewMsg').html(msg_text);
4970    });
4971
4972    var note_btn_text = [
4973      [0,'Try Another'],
4974      [1,'One More Time'],
4975      [2,'Almost There'],
4976      [3,'Next']
4977    ];
4978    $("#greetingCard").delegate("#show_note", "click", async function(event){
4979      event.preventDefault();
4980
4981      const source = await getFetch(`https://outerbloom.com/cdn/shop/t/87/assets/greeting_card.json?v=${new Date()}`)
4982
4983      const occassion = $("#show_note").attr("data-card-occassion")
4984
4985      let {data} = source.find((el) => el.name === occassion);
4986      
4987      var notes = data;
4988
4989      const getRandomIntegerInclusive = (min, max) => {
4990        min = Math.ceil(min)
4991        max = Math.floor(max)
4992      
4993        return Math.floor(Math.random() * (max - min + 1)) + min
4994      }
4995      
4996      const idx = getRandomIntegerInclusive(0, data.length - 1)
4997      
4998      var note=notes[idx];
4999
5000      $('#note_id').val(idx);
5001      $('[data-properties], #msgDelivery').val(note);
5002      var text_length=$(this).val().length;
5003      $('#previewMsg').html(note);
5004      var idx_2=parseInt($('#note_btn_id').val());
5005      if(isNaN(idx_2)){
5006        idx_2=0;
5007      }else{
5008        idx_2++;
5009        idx_2=idx_2%note_btn_text.length;
5010      }
5011      $('#note_btn_id').val(idx_2);
5012      var note_btn=note_btn_text[idx_2][1];
5013      $('#note_btn').text(note_btn);
5014    });
5015  });
5016</script>
5016
5017
5018        </div>
5019      </div>
5020    
5021  </div>
5022</div>
5023
5024          </div>
5025          <div class="purchase-button-wrapper">
5026            <div class="purchase-button btn-card row m-0">
5027  <div class="col-12 col-lg-2 text-left mb-2 p-0">
5028    
5029  </div>
5030  <div class="btn-next-card col-12 col-lg-10 text-right">
5031    
5032    
5033      
5034        <button id="skip-card" style="align-self: center;text-decoration: underline">
5035          <span> USE BLANK CARD  </span>
5036        </button>
5037      
5038    
5039    <button
5040      
5041        
5042          id="save-card"
5043        
5044      
5045      class="btn next-purchase-button text-uppercase"
5046      
5047        disabled
5048      
5049    >
5050      <span>SAVE & PERSONALIZE GIFT</span>
5051    </button>
5052  </div>
5053</div>
5054
5055          </div>
5056        </div>
5057      </div>
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      
5118        
5119        
5120    
5121      <div
5122        class="sectionPurchase purchaseAddon hide"
5123        data-section="addon"
5124      >
5125        <div class="wrapperPurchase">
5126          <div class="purchase-content">
5127            <style>
5128  .item-card[data-qty="0"] { display: none; }
5129  .item-card[data-id="8835692069079"] {
5130    display: none;
5131  }
5132  
5133  @media (max-width: 768px) {
5134    #itemAddons {
5135      overflow-x: auto;
5136      overflow-y: hidden;
5137      -webkit-overflow-scrolling: touch;
5138      scrollbar-width: none;
5139      -ms-overflow-style: none;
5140    }
5141    
5142    #itemAddons::-webkit-scrollbar {
5143      display: none;
5144    }
5145    
5146    #itemAddons .row {
5147      flex-wrap: nowrap !important;
5148      width: max-content !important;
5149      gap: 15px !important;
5150      margin: 0 !important;
5151      padding: 0 15px;
5152    }
5153    
5154    #itemAddons .item-card {
5155      flex: 0 0 auto;
5156      min-width: 120px;
5157      max-width: 120px;
5158    }
5159  }
5160  @media (min-width: 769px) {
5161    #itemAddons .row {
5162      flex-wrap: wrap;
5163    }
5164  }
5165</style>
5166<div class="headerPurchase">
5167  <h3>Make It More Special with Add-Ons!</h3>
5168  <a class="close-purchase-popup">
5169  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none">
5170    <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"/>
5171  </svg>
5172</a>
5173
5174</div>
5175<div class="contentPurchase">
5176  <div class="regulerAddons">
5177    <div class="menuPurchase">
5178      <ul>
5179        
5180        
5181
5182        
5183        <li class="item-addon selected" data-count="" data-addon="upsell-inhouse">
5184          All
5185        </li>
5186        
5187        
5188          
5189          
5190          
5191            <li class="item-addon" data-count="18" data-addon="upsell-jewelry">
5192              Jewelry
5193            </li>
5194          
5195        
5196          
5197          
5198          
5199            <li class="item-addon" data-count="2" data-addon="upsell-cuddlemate">
5200              Cuddlemate
5201            </li>
5202          
5203        
5204          
5205          
5206          
5207            <li class="item-addon" data-count="1" data-addon="upsell-diffuser">
5208              Diffuser
5209            </li>
5210          
5211        
5212          
5213          
5214          
5215            <li class="item-addon" data-count="1" data-addon="upsell-candle">
5216              Candle
5217            </li>
5218          
5219        
5220          
5221          
5222          
5223        
5224          
5225          
5226          
5227            <li class="item-addon" data-count="1" data-addon="upsell-beverage">
5228              Beverage
5229            </li>
5230          
5231        
5232          
5233          
5234          
5235        
5236          
5237          
5238          
5239            <li class="item-addon" data-count="8" data-addon="upsell-cookies">
5240              Cookies
5241            </li>
5242          
5243        
5244        
5245      </ul>
5246    </div>
5247    <div id="chooseCard">
5248      <h4 class="text-uppercase">choose your add-ons you like to include</h4>
5249      <div
5250        id="itemAddons"
5251        class="item-cards d-flex mb-4"
5252      >
5253        <div class="row m-0 gap-20 w-100">
5254          <p>No Item available</p>
5255        </div>
5256      </div>
5257    </div>
5258  </div>
5259  <!-- <div class="spotifyAddons"></div> -->
5260</div>
5261
5262          </div>
5263          <div class="purchase-button-wrapper">
5264            <div class="purchase-button btn-addon row m-0">
5265  <div class="col-12 col-lg-2 text-left mb-2 p-0">
5266    
5267      <button class="back-purchase-button back-addon text-uppercase">
5268        <svg width="15" height="14" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg">
5269          <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"/>
5270        </svg>
5271        <span>Back</span>
5272      </button>
5273    
5274  </div>
5275  <div class="btn-next-card col-12 col-lg-10 text-right">
5276    
5277    
5278      
5279    
5280    <button
5281      
5282      class="btn next-purchase-button next-addon text-uppercase"
5283      
5284    >
5285      <span>continue without add-ons</span>
5286    </button>
5287  </div>
5288</div>
5289
5290          </div>
5291        </div>
5292      </div>
5293    
5294    
5295      <div
5296        class="sectionPurchase purchaseAddress hide"
5297        data-section="address"
5298      >
5299        <div class="wrapperPurchase">
5300          <div class="purchase-content">
5301            <div class="headerPurchase">
5302  <h3>
5303    Complete Your Order
5304  </h3>
5305  <a class="close-purchase-popup">
5306  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none">
5307    <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"/>
5308  </svg>
5309</a>
5310
5311</div>
5312
5313<!-- Select2 CSS -->
5314<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/select2.min.css" rel="stylesheet" />
5315
5316<style>
5317  .select2-container--default .select2-selection--single {
5318    height: 43px !important;
5319    border-radius: 0 !important;
5320    padding: 0 !important;
5321    background-color: #fff !important;
5322    border-color: #212121 !important;
5323  }
5324  
5325  .select2-container--default .select2-selection--single .select2-selection__rendered {
5326    line-height: 43px !important;
5327    padding-left: 16px !important;
5328    padding-right: 40px !important;
5329    color: #212121 !important;
5330    font-size: 14px !important;
5331  }
5332  
5333  .select2-container--default .select2-selection--single .select2-selection__placeholder {
5334    color: #212121 !important;
5335    font-style: normal;
5336  }
5337  
5338  .select2-container--default .select2-selection--single .select2-selection__arrow {
5339    display: none;
5340    height: 48px !important;
5341    right: 10px !important;
5342  }
5343  
5344  .select2-container--default.select2-container--open .select2-selection--single {
5345    border-color: #212121 !important;
5346  }
5347  
5348  .select2-dropdown {
5349    border: 1px solid #E5E5E5 !important;
5350    border-radius: 0 !important;
5351    border-top: none !important;
5352    overflow: hidden;
5353    padding-bottom: 70px;
5354  }
5355  
5356  .select2-container--default .select2-results__option {
5357    padding: 12px 16px !important;
5358    font-size: 14px !important;
5359  }
5360  
5361  .select2-container--default .select2-results__option--highlighted[aria-selected] {
5362    background-color: #f5f5f5 !important;
5363    color: #212121 !important;
5364  }
5365  
5366  .select2-container--default .select2-results__option[aria-selected=true] {
5367    background-color: #212121 !important;
5368    color: #fff !important;
5369  }
5370  
5371  .select2-search--dropdown .select2-search__field {
5372    border: 1px solid #E5E5E5 !important;
5373    border-radius: 0 !important;
5374    padding: 10px 16px !important;
5375    font-size: 14px !important;
5376  }
5377  
5378  .select2-search--dropdown .select2-search__field:focus {
5379    border-color: #212121 !important;
5380    outline: none !important;
5381  }
5382  .select2-container {
5383    width: 100% !important;
5384  }
5385  
5386  .select2-container--default .select2-selection--single:focus {
5387    outline: none !important;
5388  }
5389
5390  #zipSelectPopup {
5391    display: none;
5392  }
5393  
5394  @media (max-width: 991px) {
5395    #zipSelectPopup {
5396      position: fixed;
5397      top: 0;
5398      left: 0;
5399      width: 100%;
5400      height: 100%;
5401      background: #fff;
5402      z-index: 10000;
5403      overflow: hidden;
5404    }
5405    
5406    .zip-popup-header {
5407      padding: 16px 20px;
5408      border-bottom: 1px solid #E5E5E5;
5409      display: flex;
5410      justify-content: space-between;
5411      align-items: center;
5412      background: #fff;
5413      position: sticky;
5414      top: 0;
5415      z-index: 10001;
5416    }
5417    
5418    .zip-popup-header h4 {
5419      margin: 0;
5420      font-size: 16px;
5421      font-weight: 600;
5422      color: #212121;
5423    }
5424    
5425    .zip-popup-close {
5426      background: none;
5427      border: none;
5428      font-size: 28px;
5429      color: #666;
5430      cursor: pointer;
5431      padding: 0;
5432      width: 40px;
5433      height: 40px;
5434      display: flex;
5435      align-items: center;
5436      justify-content: center;
5437      line-height: 1;
5438    }
5439    
5440    .zip-popup-search {
5441      padding: 16px 20px;
5442      border-bottom: 1px solid #E5E5E5;
5443      background: #fff;
5444      position: sticky;
5445      top: 57px;
5446      z-index: 10001;
5447    }
5448    
5449    .zip-popup-search input {
5450      width: 100%;
5451      padding: 12px 16px;
5452      border: 1px solid #E5E5E5;
5453      border-radius: 4px;
5454      font-size: 14px;
5455    }
5456    
5457    .zip-popup-search input:focus {
5458      outline: none;
5459      border-color: #212121;
5460    }
5461    
5462    .zip-popup-list {
5463      height: calc(100% - 130px);
5464      overflow-y: auto;
5465      padding: 0;
5466      -webkit-overflow-scrolling: touch;
5467    }
5468    
5469    .zip-popup-list-item {
5470      padding: 16px 20px;
5471      border-bottom: 1px solid #f5f5f5;
5472      cursor: pointer;
5473      font-size: 14px;
5474      color: #212121;
5475      background: #fff;
5476      transition: background-color 0.2s;
5477    }
5478    
5479    .zip-popup-list-item:active {
5480      background-color: #f5f5f5;
5481    }
5482    
5483    .zip-popup-list-item.selected {
5484      background-color: #212121;
5485      color: #fff;
5486    }
5487    
5488    .zip-popup-list-item:last-child {
5489      border-bottom: none;
5490    }
5491    #zip {
5492      -webkit-appearance: none;
5493      -moz-appearance: none;
5494      appearance: none;
5495      background-image: none;
5496      cursor: pointer;
5497      font-size: 14px;
5498      padding-right: 16px;
5499    }
5500  }
5501</style>
5502
5503<!-- Mobile Zip Popup -->
5504<div id="zipSelectPopup">
5505  <div class="zip-popup-header">
5506    <h4>Select Postal Code / Area</h4>
5507    <button type="button" class="zip-popup-close">&times;</button>
5508  </div>
5509  <div class="zip-popup-search">
5510    <input type="text" id="zipPopupSearch" placeholder="Search by postal code or area...">
5511  </div>
5512  <div class="zip-popup-list" id="zipPopupList"></div>
5513</div>
5514
5515<div class="contentPurchase">
5516  <div class="row">
5517    <div class="col-12 col-lg-7 position-relative">
5518      <div class="addressPurchase">
5519        
5520          <h4 class="text-uppercase">recipient delivery address</h4>
5521          <p>Share the delivery address to send your heartfelt blooms straight to their door.</p>
5522        
5523        
5524        <!-- Pickup Location Details (hidden by default, shown when pickup is selected) -->
5525        <div id="pickupLocationDetails" class="pickup-location-details" style="display: none; padding: 20px; background-color: #f8f8f8; border: 1px solid #e0e0e0; margin-bottom: 20px;">
5526          <h5 style="font-size: 16px; font-weight: 600; margin-bottom: 16px; text-transform: uppercase; color: #212121;">Pickup Location</h5>
5527          <div style="font-size: 14px; line-height: 1.8; color: #212121;">
5528            <p style="margin: 0 0 12px 0;"><strong>ITC Kuningan Mall</strong></p>
5529            <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>
5530            <p style="margin: 0 0 12px 0;"><strong>Pickup Hours:</strong> 10:00 - 16:00</p>
5531            <p style="margin: 0; padding: 12px; background-color: #fff3cd; border-left: 4px solid #ffc107; font-size: 13px;">
5532              <strong>Note:</strong> Please bring your order confirmation when picking up your items.
5533            </p>
5534          </div>
5535        </div>
5536        
5537        <div class="formAddressPurchase row">
5538          <div class="col-12">
5539            <form>
5540              <div class="form-group row mb-2 mb-lg-4">
5541                <div class="col-6 position-relative">
5542                  <input id="first_name" type="text" class="form-control input__field" placeholder="" required>
5543                  <label for="first_name" class="input__label">First Name<span>*</span></label>
5544                </div>
5545                <div class="col-6 position-relative">
5546                  <input id="last_name" type="text" class="form-control input__field" placeholder="" required>
5547                  <label for="last_name" class="input__label">Last Name<span>*</span></label>
5548                </div>
5549                <input type="hidden" data-properties="nama-penerima">
5550              </div>
5551              
5552              <div class="form-group row mb-2 mb-lg-4 form-address">
5553                <div class="col-6 position-relative">
5554                  <input
5555                    id="recipient_number"
5556                    type="text"
5557                    data-properties="telepon-penerima"
5558                    class="form-control input__field"
5559                    placeholder=""
5560                    required
5561                  >
5562                  <label for="recipient_number" class="input__label">Recipient number<span>*</span></label>
5563                </div>
5564                <div class="col-6 position-relative">
5565                  <input
5566                    id="company"
5567                    type="text"
5568                    data-properties="company"
5569                    class="form-control input__field"
5570                    placeholder=""
5571                  >
5572                  <label for="company" class="input__label">Company (Optional)</label>
5573                </div>
5574              </div>
5575              <div class="form-group row mb-2 mb-lg-4 form-address">
5576                <div class="col-6 position-relative">
5577                  <input
5578                    id="province"
5579                    type="text"
5580                    class="form-control input__field"
5581                    placeholder=""
5582                    value="Jakarta"
5583                    data-properties="province"
5584                    readonly
5585                  >
5586                  <label for="province" class="input__label">Province</label>
5587                </div>
5588                <div class="col-6 position-relative">
5589                  <select id="zip" class="form-control select-search" required></select>
5590                </div>
5591              </div>
5592              <div class="form-group row mb-2 mb-lg-4 form-address">
5593                <div class="col-12 position-relative">
5594                  <input
5595                    id="streetAddress"
5596                    type="text"
5597                    class="form-control input__field"
5598                    placeholder="Jl. Example No.123 RT.01 RW.02"
5599                    required
5600                  >
5601                  <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>
5602                    
5603                  
5604                </div>
5605              </div>
5606              <div class="form-group row position-relative mb-2 mb-lg-4 form-address hide">
5607                <div class="col-12">
5608                  <textarea
5609                    id="delivery_address"
5610                    data-properties="alamat-penerima"
5611                    class="form-control input__field col-12"
5612                    placeholder=""
5613                    required
5614                    readonly
5615                  ></textarea>
5616                  <label for="delivery_address" class="input__label">Delivery Address<span>*</span></label>
5617                </div>
5618              </div>
5619            </form>
5620          </div>
5621        </div>
5622      </div>
5623      <div class="addonsPurchase">
5624        <h4 class="text-uppercase">add-ons</h4>
5625        <div class="addons">
5626          <p>No Add-Ons</p>
5627          <!--
5628            <button class="add-addon">
5629              <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none">
5630                <path d="M5.5 6.5H0V5.5H5.5V0H6.5V5.5H12V6.5H6.5V12H5.5V6.5Z" fill="black"/>
5631              </svg>
5632              <span>Enhance my moment with Add-ons</span>
5633            </button>
5634          -->
5635        </div>
5636      </div>
5637    </div>
5638    
5639      <div class="col-12 col-lg-5 row m-0 justify-content-end">
5640        <div class="reviewCardPurchase">
5641          <h4 class="text-uppercase">review your greeting card</h4>
5642          <p>You can edit the greeting card to ensure your words perfectly express your love.</p>
5643          <div class="cardPreview">
5644            <!-- Card preview structure -->
5645            <div class="card-preview-container" style="display: none;">
5646              <!-- Card design preview (with or without photo) -->
5647              <div class="card-preview-wrapper">
5648                <!-- Top Section (50% height) -->
5649                <div class="card-top-section">
5650                  <!-- Layout for when NO photo is uploaded -->
5651                  <div class="no-photo-layout">
5652                    <div class="qr-text">
5653                      <p class="qr-title">A<br/>special message</p>
5654                      <p class="qr-subtitle">for <span class="recipient-qr-text">Munying</span>!</p>
5655                    </div>
5656                    <div class="qr-code-container">
5657                      <div class="qr-placeholder">QR</div>
5658                    </div>
5659                    <div class="qr-scan-text">
5660                      <p>Scan for the surprise</p>
5661                    </div>
5662                  </div>
5663                  
5664                  <!-- Layout for when photo IS uploaded -->
5665                  <div class="with-photo-layout" style="display: none;">
5666                    <div class="photo-container">
5667                      <img class="card-preview-photo" src="" alt="Card photo" width="300" height="200">
5668                      <div class="photo-qr-overlay hide hidden">
5669                        <div class="qr-code-small">
5670                          <div class="qr-placeholder-small">QR</div>
5671                        </div>
5672                        <div class="photo-qr-text">
5673                          <p>Scan for a special message for you</p>
5674                        </div>
5675                      </div>
5676                    </div>
5677                  </div>
5678                </div>
5679                
5680                <!-- Divider Line -->
5681                <div class="card-divider"></div>
5682                
5683                <!-- Bottom Section (50% height) -->
5684                <div class="card-bottom-section">
5685                  <!-- Recipient name -->
5686                  <div class="card-recipient-name">
5687                    <span class="recipient-text"></span>
5688                  </div>
5689                  
5690                  <!-- Card message -->
5691                  <div class="card-message-section">
5692                    <div class="card-message-text"></div>
5693                  </div>
5694                  
5695                  <!-- Sender name -->
5696                  <div class="card-sender-name">
5697                    <span class="sender-text"></span>
5698                  </div>
5699                </div>
5700              </div>
5701            </div>
5702            
5703            <!-- Empty state -->
5704            <div class="card-empty-state">
5705              <div style="text-align: center; padding: 40px 20px; color: #999; border: 1px dashed #ddd; border-radius: 8px;">
5706                <p style="margin: 0; font-size: 14px;">Your greeting card preview will appear here</p>
5707                <p style="margin: 5px 0 0 0; font-size: 12px;">Complete the greeting card section to see the preview</p>
5708              </div>
5709            </div>
5710          </div>
5711        </div>
5712        <div class="scanCard mt-3 hide">
5713          <div class="position-relative">
5714            <div id="qrcode"></div>
5715            <div class="t-preview">
5716              <p class="h3">preview your moment</p>
5717              <p>Scan this barcode on OUTERBLOOM’s mobile application</p>
5718            </div>
5719          </div>
5720        </div>
5721      </div>
5722    
5723  </div>
5724</div>
5725
5726<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
vendor: 2 bytes, line 5726
5726
5727<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/select2.min.js"></script>
5727
5728
5729<script>
5730document.addEventListener('DOMContentLoaded', function() {
5731  // Detect iOS
5732  var isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
5733  
5734  if (isIOS) {
5735    document.querySelector('.formAddressPurchase').classList.add('ios');
5736    
5737    // iOS specific fixes
5738    var inputs = document.querySelectorAll('.formAddressPurchase .input__field');
5739    
5740    inputs.forEach(function(input) {
5741      // Force enable touch events on iOS
5742      input.style.webkitUserSelect = 'text';
5743      input.style.webkitTouchCallout = 'default';
5744      input.style.pointerEvents = 'auto';
5745      input.style.touchAction = 'manipulation';
5746      
5747      // Add explicit touch event listeners for iOS
5748      input.addEventListener('touchstart', function(e) {
5749        e.stopPropagation();
5750        this.focus();
5751      }, { passive: false });
5752      
5753      input.addEventListener('touchend', function(e) {
5754        e.preventDefault();
5755        e.stopPropagation();
5756        this.focus();
5757        this.click();
5758      }, { passive: false });
5759      
5760      // Force focus on tap for iOS
5761      input.addEventListener('click', function(e) {
5762        e.stopPropagation();
5763        if (document.activeElement !== this) {
5764          this.focus();
5765        }
5766      });
5767    });
5768    
5769    // Fix for label overlapping on iOS
5770    var labels = document.querySelectorAll('.formAddressPurchase .input__label');
5771    labels.forEach(function(label) {
5772      label.style.pointerEvents = 'none';
5773      label.addEventListener('touchstart', function(e) {
5774        e.preventDefault();
5775        var input = this.parentNode.querySelector('.input__field');
5776        if (input) {
5777          input.focus();
5778        }
5779      });
5780    });
5781  }
5782  
5783  // Handle input state for all browsers, especially iOS
5784  var inputs = document.querySelectorAll('.input__field');
5785  
5786  inputs.forEach(function(input) {
5787    // Handle input events
5788    input.addEventListener('input', function() {
5789      if (this.value.trim() !== '') {
5790        this.classList.add('has-value');
5791      } else {
5792        this.classList.remove('has-value');
5793      }
5794    });
5795    
5796    // Handle focus
5797    input.addEventListener('focus', function() {
5798      this.classList.add('focused');
5799      // iOS specific: ensure input is visible
5800      if (isIOS) {
5801        setTimeout(function() {
5802          input.scrollIntoView({ behavior: 'smooth', block: 'center' });
5803        }, 300);
5804      }
5805    });
5806    
5807    // Handle blur
5808    input.addEventListener('blur', function() {
5809      this.classList.remove('focused');
5810      if (this.value.trim() !== '') {
5811        this.classList.add('has-value');
5812      } else {
5813        this.classList.remove('has-value');
5814      }
5815    });
5816    
5817    // Initial check for pre-filled values
5818    if (input.value.trim() !== '') {
5819      input.classList.add('has-value');
5820    }
5821  });
5822  
5823  // Additional iOS fixes
5824  if (isIOS) {
5825    // Prevent iOS Safari from adding default styling
5826    document.addEventListener('touchstart', function() {}, { passive: true });
5827    
5828    // Fix viewport issues on iOS
5829    var viewport = document.querySelector('meta[name=viewport]');
5830    if (viewport) {
5831      viewport.setAttribute('content', 
5832        'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no'
5833      );
5834    }
5835  }
5836  
5837  // Card Preview functionality
5838  function updateCardPreview() {
5839    // Get data from greeting card inputs ONLY from #greetingCard or .greetingCard area
5840    const greetingCardArea = $('#greetingCard, .greetingCard');
5841    
5842    const recipientName = greetingCardArea.find('[data-properties="penerima"]').val() || '';
5843    const senderName = greetingCardArea.find('[data-properties="pengirim"]').val() || 
5844                       greetingCardArea.find('[data-properties="kartu-nama-pengirim"]').val() || 
5845                       greetingCardArea.find('#senderCard').val() || '-';
5846    const cardMessage = greetingCardArea.find('[data-properties="ucapan"]').val() || 
5847                        greetingCardArea.find('#kartu-ucapan').val() || '-';
5848    const photoUrl = $('#properties-photo').val();
5849    const videoUrl = greetingCardArea.find('#properties-video').val() || '';
5850    const qrId = greetingCardArea.find('#properties-qrId').val() || '';
5851    
5852    // Get preview elements
5853    const cardContainer = $('.card-preview-container');
5854    const emptyState = $('.card-empty-state');
5855    const recipientText = $('.recipient-text');
5856    const recipientQrText = $('.recipient-qr-text');
5857    const senderText = $('.sender-text');
5858    const messageText = $('.card-message-text');
5859    const noPhotoLayout = $('.no-photo-layout');
5860    const withPhotoLayout = $('.with-photo-layout');
5861    const previewPhoto = $('.card-preview-photo');
5862    const qrContainer = $('.qr-code-container');
5863    const qrContainerSmall = $('.qr-code-small');
5864    
5865    // Check if we have any card content
5866    const hasContent = (recipientName && recipientName.trim() !== '' && recipientName.trim() !== ' ') || 
5867                       (senderName !== '' && senderName !== '-') || 
5868                       (cardMessage !== '' && cardMessage !== '-') ||
5869                       (photoUrl && photoUrl !== '' && photoUrl !== '-') ||
5870                       (videoUrl && videoUrl !== '' && videoUrl !== '-');
5871    
5872    if (hasContent) {
5873      // Show card preview, hide empty state
5874      cardContainer.show();
5875      emptyState.hide();
5876      
5877      // Update recipient name in bottom section with prefix
5878      let recipientDisplay = '';
5879      if (recipientName && recipientName.trim() !== '' && recipientName.trim() !== ' ' && recipientName.trim() !== '-') {
5880        const prefix = $('.label-prefix').text().trim() || '';
5881        const trimmedName = recipientName.trim();
5882        recipientDisplay = prefix + (trimmedName ? ' ' + trimmedName : '');
5883      }
5884      recipientText.text(recipientDisplay);
5885      
5886      // Update recipient name in QR section (for no-photo layout) - use first name only or full name
5887      let recipientQrDisplay = '';
5888      if (recipientName && recipientName.trim() !== '' && recipientName.trim() !== ' ' && recipientName.trim() !== '-') {
5889        recipientQrDisplay = recipientName.trim().split(' ')[0];
5890      }
5891      recipientQrText.text(recipientQrDisplay);
5892      
5893      // Update sender name  
5894      const senderDisplay = (senderName !== '' && senderName !== '-') ? senderName : '';
5895      senderText.text(senderDisplay);
5896      
5897      // Update message
5898      const messageDisplay = (cardMessage !== '' && cardMessage !== '-') ? 
5899        cardMessage : '';
5900      messageText.text(messageDisplay);
5901      
5902      // Handle photo display and layout switching
5903      if (photoUrl && photoUrl !== '' && photoUrl !== '-') {
5904        // Show photo layout, hide no-photo layout
5905        noPhotoLayout.hide();
5906        withPhotoLayout.show();
5907        previewPhoto.attr('src', photoUrl);
5908        
5909        // Generate QR code for photo layout
5910        if (qrId && qrId !== '' && qrId !== '-') {
5911          qrContainerSmall.html('');
5912          try {
5913            var qrCode = new QRCode(qrContainerSmall[0], {
5914              text: `https://moment.outerbloom.com/${qrId}`,
5915              width: 40,
5916              height: 40,
5917              colorDark: "#333333",
5918              colorLight: "#ffffff",
5919              correctLevel: QRCode.CorrectLevel.L,
5920            });
5921          } catch(e) {
5922            qrContainerSmall.html('<div class="qr-placeholder-small">QR</div>');
5923          }
5924        } else {
5925          qrContainerSmall.html('<div class="qr-placeholder-small">QR</div>');
5926        }
5927      } else {
5928        // Show no-photo layout, hide photo layout
5929        withPhotoLayout.hide();
5930        noPhotoLayout.show();
5931        
5932        // Generate QR code for no-photo layout
5933        if (qrId && qrId !== '' && qrId !== '-') {
5934          qrContainer.html('');
5935          try {
5936            var qrCode = new QRCode(qrContainer[0], {
5937              text: `https://moment.outerbloom.com/${qrId}`,
5938              width: 80,
5939              height: 80,
5940              colorDark: "#333333",
5941              colorLight: "#ffffff",
5942              correctLevel: QRCode.CorrectLevel.L,
5943            });
5944          } catch(e) {
5945            qrContainer.html('<div class="qr-placeholder">QR</div>');
5946          }
5947        } else {
5948          qrContainer.html('<div class="qr-placeholder">QR</div>');
5949        }
5950      }
5951    } else {
5952      // Show empty state, hide card preview
5953      cardContainer.hide();
5954      emptyState.show();
5955    }
5956  }
5957  
5958  // Listen for changes in greeting card fields ONLY from #greetingCard or .greetingCard area
5959  $(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() {
5960    setTimeout(updateCardPreview, 100); // Small delay to allow value updates
5961  });
5962  
5963  // Listen for custom events from greeting card section
5964  $(document).on('cardDataUpdated', function() {
5965    updateCardPreview();
5966  });
5967  
5968  // Listen for btn-next-card click using delegate
5969  $(document).on('click', '.btn-next-card .btn', function() {
5970    console.log('btn-next-card clicked, updating card preview...');
5971    updateCardPreview();
5972  });
5973  
5974  // Initial card preview update
5975  $(document).ready(function() {
5976    setTimeout(updateCardPreview, 1000); // Delay to ensure all fields are initialized
5977    
5978    // Update preview when moving to purchase address step
5979    if ($('.purchaseAddress').length && !$('.purchaseAddress').hasClass('hide')) {
5980      updateCardPreview();
5981    }
5982  });
5983  
5984  // Auto-fill delivery address from input fields
5985  window.updateDeliveryAddress = function() {
5986    const selectedMethod = $('#selectedShippingMethod').val();
5987    if (selectedMethod === 'Pickup') {
5988      const pickupAddress = "ITC Kuningan, Mall, Lantai 9 unit 4B, Jl. Prof. DR. Satrio No.18";
5989      const pickupZipCode = "12940 - Karet Kuningan";
5990      
5991      const deliveryAddressTextarea = $('#delivery_address');
5992      
5993      // Set delivery address
5994      if (deliveryAddressTextarea.val() !== pickupAddress) {
5995        deliveryAddressTextarea.val(pickupAddress);
5996        deliveryAddressTextarea.addClass('has-value');
5997        deliveryAddressTextarea.trigger('change');
5998        $('#properties-kodepos').val(pickupZipCode);
5999      }
6000      
6001      return;
6002    }
6003
6004    const streetAddress = $('#streetAddress').val().trim();
6005    const zipValue = $('#zip').val() || ''; // Format: "12345-Kelurahan-Kecamatan"
6006    const province = $('#province').val().trim();
6007    
6008    // Parse zip value
6009    let postalCode = '';
6010    let kelurahan = '';
6011    let kecamatan = '';
6012    
6013    if (zipValue) {
6014      const zipParts = zipValue.split('-');
6015      postalCode = zipParts[0] || ''; // zip.split('-')[0]
6016      kelurahan = zipParts[1] || '';   // zip.split('-')[1]
6017      kecamatan = zipParts[2] || '';   // zip.split('-')[2]
6018    }
6019    
6020    // Build address string with format: [streetAddress], [kelurahan], [kecamatan], [province], [postalCode], Indonesia
6021    let addressParts = [];
6022    
6023    if (streetAddress) addressParts.push(streetAddress);
6024    if (kelurahan) addressParts.push(kelurahan);
6025    if (kecamatan) addressParts.push(kecamatan);
6026    if (province) addressParts.push(province);
6027    if (postalCode) addressParts.push(postalCode);
6028    addressParts.push('Indonesia');
6029    
6030    const fullAddress = addressParts.join(', ');
6031    
6032    // Update delivery address textarea
6033    const deliveryAddressTextarea = $('#delivery_address');
6034    deliveryAddressTextarea.val(fullAddress);
6035    
6036    // Update has-value class for label animation
6037    if (fullAddress && fullAddress !== 'Indonesia') {
6038      deliveryAddressTextarea.addClass('has-value');
6039    } else {
6040      deliveryAddressTextarea.removeClass('has-value');
6041    }
6042    
6043    // Trigger change event
6044    deliveryAddressTextarea.trigger('change');
6045  }
6046  
6047  // Initialize Select2 for postal code select
6048  function initZipSearch() {
6049    // Only initialize Select2 on desktop (screen width > 992px)
6050    if ($(window).width() > 992) {
6051      $('#zip').select2({
6052        placeholder: 'Search by postal code or area',
6053        allowClear: false,
6054        width: '100%',
6055        matcher: function(params, data) {
6056          // If there are no search terms, return all of the data
6057          if ($.trim(params.term) === '') {
6058            return data;
6059          }
6060
6061          // Do not display the item if there is no 'text' property
6062          if (typeof data.text === 'undefined') {
6063            return null;
6064          }
6065
6066          // `params.term` should be the term that is used for searching
6067          // `data.text` is the text that is displayed for the data object
6068          if (data.text.toLowerCase().indexOf(params.term.toLowerCase()) > -1 ||
6069              data.id.toLowerCase().indexOf(params.term.toLowerCase()) > -1) {
6070            var modifiedData = $.extend({}, data, true);
6071            return modifiedData;
6072          }
6073
6074          // Return `null` if the term does not match the data
6075          return null;
6076        }
6077      });
6078
6079      // Handle select change to update delivery address
6080      $('#zip').on('change', function() {
6081        updateDeliveryAddress();
6082      });
6083    } else {
6084      // On mobile (<991px), use custom popup instead of native select
6085      var $zipSelect = $('#zip');
6086      var $popup = $('#zipSelectPopup');
6087      var $popupList = $('#zipPopupList');
6088      var $popupSearch = $('#zipPopupSearch');
6089      var isPopupOpen = false;
6090      var isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
6091      
6092      // Populate popup list with options from select
6093      function populatePopupList(filterText = '') {
6094        $popupList.empty();
6095        
6096        $zipSelect.find('option').each(function() {
6097          var $option = $(this);
6098          var value = $option.val();
6099          var text = $option.text();
6100          
6101          // Skip empty/placeholder options
6102          if (!value || value === '') return;
6103          
6104          // Filter based on search text
6105          if (filterText && 
6106              text.toLowerCase().indexOf(filterText.toLowerCase()) === -1 && 
6107              value.toLowerCase().indexOf(filterText.toLowerCase()) === -1) {
6108            return;
6109          }
6110          
6111          var $item = $('<div class="zip-popup-list-item"></div>')
6112            .attr('data-value', value)
6113            .text(text);
6114          
6115          // Mark selected item
6116          if (value === $zipSelect.val()) {
6117            $item.addClass('selected');
6118          }
6119          
6120          $popupList.append($item);
6121        });
6122      }
6123      
6124      // Function to open popup
6125      function openPopup() {
6126        if (isPopupOpen) return;
6127        
6128        isPopupOpen = true;
6129        populatePopupList();
6130        $popup.css('display', 'block').hide().fadeIn(200);
6131        $('body').css('overflow', 'hidden');
6132        
6133        // iOS needs more delay for focus
6134        var focusDelay = isIOS ? 500 : 250;
6135        setTimeout(function() {
6136          $popupSearch.focus();
6137        }, focusDelay);
6138      }
6139      
6140      // Function to close popup
6141      function closePopup() {
6142        if (!isPopupOpen) return;
6143        
6144        isPopupOpen = false;
6145        $popup.fadeOut(200);
6146        $('body').css('overflow', '');
6147        $popupSearch.val('');
6148      }
6149      
6150      // iOS specific handling
6151      if (isIOS) {
6152        // For iOS, use only touchstart with proper event handling
6153        $zipSelect.on('touchstart', function(e) {
6154          e.preventDefault();
6155          e.stopPropagation();
6156          e.stopImmediatePropagation();
6157          
6158          if (!isPopupOpen) {
6159            openPopup();
6160          }
6161          
6162          return false;
6163        });
6164        
6165        // Prevent other events on iOS to avoid double triggering
6166        $zipSelect.on('click focus mousedown', function(e) {
6167          e.preventDefault();
6168          e.stopPropagation();
6169          e.stopImmediatePropagation();
6170          return false;
6171        });
6172      } else {
6173        // For Android and other mobile devices
6174        // Use touchstart as primary event to prevent native dropdown
6175        $zipSelect.on('touchstart', function(e) {
6176          e.preventDefault();
6177          e.stopPropagation();
6178          e.stopImmediatePropagation();
6179          
6180          if (!isPopupOpen) {
6181            openPopup();
6182          }
6183          
6184          return false;
6185        });
6186        
6187        // Also prevent click and other events to ensure native dropdown doesn't show
6188        $zipSelect.on('click focus mousedown touchend', function(e) {
6189          e.preventDefault();
6190          e.stopPropagation();
6191          e.stopImmediatePropagation();
6192          return false;
6193        });
6194      }
6195      
6196      // Search functionality
6197      $popupSearch.on('input', function() {
6198        populatePopupList($(this).val());
6199      });
6200      
6201      // Track touch movement to differentiate scroll from tap
6202      var touchStartY = 0;
6203      var touchMoved = false;
6204      
6205      // Track touch start
6206      $popupList.on('touchstart', '.zip-popup-list-item', function(e) {
6207        touchStartY = e.originalEvent.touches[0].clientY;
6208        touchMoved = false;
6209      });
6210      
6211      // Track touch movement
6212      $popupList.on('touchmove', '.zip-popup-list-item', function(e) {
6213        var touchY = e.originalEvent.touches[0].clientY;
6214        if (Math.abs(touchY - touchStartY) > 10) {
6215          touchMoved = true;
6216        }
6217      });
6218      
6219      // Handle option selection - only if not scrolling
6220      $popupList.on('touchend', '.zip-popup-list-item', function(e) {
6221        e.preventDefault();
6222        e.stopPropagation();
6223        
6224        // Only select if user didn't scroll
6225        if (!touchMoved) {
6226          var selectedValue = $(this).attr('data-value');
6227          $zipSelect.val(selectedValue).trigger('change');
6228          closePopup();
6229          updateDeliveryAddress();
6230        }
6231      });
6232      
6233      // Also handle click for desktop testing
6234      $popupList.on('click', '.zip-popup-list-item', function(e) {
6235        e.preventDefault();
6236        e.stopPropagation();
6237        
6238        var selectedValue = $(this).attr('data-value');
6239        $zipSelect.val(selectedValue).trigger('change');
6240        closePopup();
6241        updateDeliveryAddress();
6242      });
6243      
6244      // Prevent scroll from closing popup - apply to all touch events
6245      $popupList.on('touchstart touchmove touchend scroll', function(e) {
6246        e.stopPropagation();
6247      });
6248      
6249      // Prevent search input touch from closing popup
6250      $popupSearch.on('touchstart touchmove touchend click', function(e) {
6251        e.stopPropagation();
6252      });
6253      
6254      // Prevent header touch from closing popup (except close button)
6255      $('.zip-popup-header').on('touchstart touchmove touchend click', function(e) {
6256        if (!$(e.target).hasClass('zip-popup-close')) {
6257          e.stopPropagation();
6258        }
6259      });
6260      
6261      // Close popup handlers
6262      $('.zip-popup-close').on('click touchend', function(e) {
6263        e.preventDefault();
6264        e.stopPropagation();
6265        closePopup();
6266      });
6267      
6268      // Prevent touchmove on popup content from bubbling up
6269      $('.zip-popup-content').on('touchstart touchmove touchend', function(e) {
6270        e.stopPropagation();
6271      });
6272      
6273      // Close on background tap only - but not on any touch inside content
6274      $popup.on('touchend', function(e) {
6275        // Only close if touching popup background directly, not content
6276        if ($(e.target).is('#zipSelectPopup')) {
6277          e.preventDefault();
6278          closePopup();
6279        }
6280      });
6281    }
6282  }
6283  
6284  // Listen for changes in address fields
6285  $(document).on('input change', '#streetAddress, #zip, #province', function() {
6286    updateDeliveryAddress();
6287  });
6288  
6289  // Initial update on page load
6290  $(document).ready(function() {
6291    setTimeout(updateDeliveryAddress, 500);
6292    
6293    // Initialize zip search after select is populated
6294    setTimeout(initZipSearch, 600);
6295  });
6296});
6297</script>
6297
6298          </div>
6299          <div class="purchase-button-wrapper">
6300            <div class="purchase-button btn-address row m-0">
6301  <div class="col-12 col-lg-2 text-left mb-2 p-0">
6302    
6303      <button class="back-purchase-button back-address text-uppercase">
6304        <svg width="15" height="14" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg">
6305          <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"/>
6306        </svg>
6307        <span>Back</span>
6308      </button>
6309    
6310  </div>
6311  <div class="btn-next-card col-12 col-lg-10 text-right">
6312    
6313      <!--
6314        <button class="back-purchase-button back-address text-uppercase mr-lg-2 mb-2 mb-lg-0">
6315          <svg width="15" height="14" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg">
6316            <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"/>
6317          </svg>
6318          <span>Back</span>
6319        </button>
6320      -->
6321    
6322    
6323      
6324    
6325    <button
6326      
6327        id="addtocart-card"
6328      
6329      class="btn  next-address text-uppercase"
6330      
6331    >
6332      <span>add to cart</span>
6333    </button>
6334  </div>
6335</div>
6336
6337          </div>
6338        </div>
6339      </div>
6340    
6341  </div>
6342</div>
6343<div id="backgroundPopup"></div>
6344
6345
6346
6347<input
6348  data-index="1"
6349  type="hidden"
6350  id="properties-delivery-date"
6351  name="properties[Delivery Date]"
6352  value="-"
6353>
6354<input
6355  data-index="2"
6356  type="hidden"
6357  id="properties-delivery-time"
6358  name="properties[Delivery Time]"
6359  value="-"
6360>
6361<input
6362  data-index="4"
6363  type="hidden"
6364  id="properties-nama-penerima"
6365  name="properties[Nama Penerima]"
6366  value="-"
6367>
6368<input
6369  data-index="5"
6370  type="hidden"
6371  id="properties-alamat-penerima"
6372  name="properties[Alamat Penerima]"
6373  value="-"
6374>
6375<input
6376  data-index="6"
6377  type="hidden"
6378  id="properties-kodepos"
6379  name="properties[Kodepos]"
6380  value="-"
6381>
6382<input data-index="7" type="hidden" id="properties-telepon-penerima" name="properties[Telepon Penerima]">
6383
6384  <input
6385    data-index="8"
6386    type="hidden"
6387    id="properties-kartu-nama-penerima"
6388    name="properties[Kartu Nama Penerima]"
6389    value="-"
6390  >
6391  <input
6392    data-index="9"
6393    type="hidden"
6394    id="properties-kartu-ucapan"
6395    name="properties[Kartu Ucapan]"
6396    value="-"
6397  >
6398
6399
6400
6401  <input
6402    data-index="10"
6403    type="hidden"
6404    id="properties-kartu-nama-pengirim"
6405    name="properties[Kartu Nama Pengirim]"
6406    value="-"
6407  >
6408
6409
6410
6411  <input
6412    data-index="11"
6413    type="hidden"
6414    id="properties-photo"
6415    name="properties[Foto]"
6416    value="-"
6417  >
6418  <input
6419    id="input-foto"
6420    type="file"
6421    class="customFile"
6422    accept="image/*"
6423    style="position: absolute;top:40%;display:none;"
6424  >
6425  <input
6426    data-index="12"
6427    type="hidden"
6428    id="properties-video"
6429    name="properties[Video]"
6430    value="-"
6431  >
6432  <input
6433    id="input-video"
6434    type="file"
6435    class="customFileVideo"
6436    accept="video/*"
6437    style="position: absolute;top:40%;display:none;"
6438  >
6439  <input data-index="13" type="hidden" id="properties-qrId" name="properties[QR Code]" value="">
6440
6441
6442  <div style="visiblity: hidden;opacity: 0;position: absolute;top:0;z-index:-999">
6443    <textarea id="noteHampers" name="properties[Note Hampers]" placeholder="Notes:"> </textarea>
6444    <input
6445      id="logo-hampers"
6446      class="dropzonex"
6447      type="file"
6448      name="properties[Logo Hampers]"
6449      class="customFile"
6450      accept="image/*"
6451    >
6452  </div>
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465<!-- Additional Shipping -->
6466<input type="hidden" id="properties-kota-pengiriman-province" name="properties[Province]">
6467<input
6468  type="hidden"
6469  id="properties-kota-pengiriman-country"
6470  name="properties[Country]"
6471  value="Indonesia"
6472>
6473<input type="hidden" id="properties-shipping" name="properties[Shipping]">
6474
6475<input type="hidden" id="properties-time" name="properties[Time]">
6476<input type="hidden" id="properties-card" name="properties[Card]">
6477<input type="hidden" id="properties-addons" name="properties[Addons]">
6478
6479<input
6480  type="hidden"
6481  id="properties-company"
6482  name="properties[Company]"
6483  value=""
6484>
6485<script>
6486  
6487  $(document).ready(function(){
6488    
6489    var text_max_papan1=150;
6490    var msg_text_papan1="";
6491    $('#kartu-ucapan-ucapan').keyup(function(){
6492      var text_length_papan1=$('#kartu-ucapan-ucapan').val().length;
6493      var msg_text_papan1=$('#kartu-ucapan-ucapan').val();
6494    });
6495
6496    var notes_papan1 = [
6497      
6498      [0,"Happy Wedding (nama & nama)."],[1,"Congratulations lovebirds (nama & nama)."],[2,"Selamat berbahagia (nama & nama)."],[3,"Selamat menempuh hidup baru (nama & nama)."]
6499      
6500    ];
6501    $('#show_note_papan1').click(function(event){
6502      event.preventDefault();
6503      var idx_papan1=parseInt($('#note_id_papan1').val());
6504      if(isNaN(idx_papan1)){
6505        idx_papan1=0;
6506      }else{
6507        idx_papan1++;
6508        idx_papan1=idx_papan1%notes_papan1.length;
6509      }
6510      var note_papan1=notes_papan1[idx_papan1][1];
6511      $('#note_id_papan1').val(idx_papan1);
6512      $('#kartu-ucapan-papan, #properties-kartu-pesan, #properties-kartu-ucapan').val(note_papan1);
6513      $('#msgDelivery').val(note_papan1);
6514
6515      var text_length_papan1=$('#kartu-ucapan-papan').val().length;
6516      var idx_2_papan1=parseInt($('#note_btn_id_papan1').val());
6517      if(isNaN(idx_2_papan1)){
6518        idx_2_papan1=0;
6519      }else{
6520        idx_2_papan1++;
6521        //idx_2_papan1=idx_2_papan1%note_btn_text_papan1.length;
6522      }
6523      $('#note_btn_id_papan1').val(idx_2_papan1);
6524      //var note_btn=note_btn_text[idx_2][1];
6525      //$('#note_btn').text(note_btn);
6526      $(this).parents(".sectionPurchase").find(".next-purchase-button").attr("disabled", false)
6527    });
6528
6529    var text_max_papan2=150;
6530    var msg_text_papan2="";
6531    $('#kartu-ucapan-ucapan').keyup(function(){
6532      var text_length_papan2=$('#kartu-ucapan-ucapan').val().length;
6533      var msg_text_papan2=$('#kartu-ucapan-ucapan').val();
6534    });
6535
6536    var notes_papan2 = [
6537      
6538      [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)."]
6539      
6540    ];
6541    $('#show_note_papan2').click(function(event){
6542      event.preventDefault();
6543      var idx_papan2=parseInt($('#note_id_papan2').val());
6544      if(isNaN(idx_papan2)){
6545        idx_papan2=0;
6546      }else{
6547        idx_papan2++;
6548        idx_papan2=idx_papan2%notes_papan2.length;
6549      }
6550      var note_papan2=notes_papan2[idx_papan2][1];
6551      $('#note_id_papan2').val(idx_papan2);
6552      $('#kartu-ucapan-papan, #properties-kartu-pesan, #properties-kartu-ucapan').val(note_papan2);
6553      $('#msgDelivery').val(note_papan2);
6554      var text_length_papan2=$('#kartu-ucapan-papan').val().length;
6555      var idx_2_papan2=parseInt($('#note_btn_id_papan2').val());
6556      if(isNaN(idx_2_papan2)){
6557        idx_2_papan2=0;
6558      }else{
6559        idx_2_papan2++;
6560        //idx_2_papan1=idx_2_papan1%note_btn_text_papan1.length;
6561      }
6562      $('#note_btn_id_papan2').val(idx_2_papan2);
6563      //var note_btn=note_btn_text[idx_2][1];
6564      //$('#note_btn').text(note_btn);
6565      $(this).parents(".sectionPurchase").find(".next-purchase-button").attr("disabled", false)
6566    });
6567
6568    var text_max_papan3=150;
6569    var msg_text_papan3="";
6570    $('#kartu-ucapan-ucapan').keyup(function(){
6571      var text_length_papan3=$('#kartu-ucapan-ucapan').val().length;
6572      var msg_text_papan3=$('#kartu-ucapan-ucapan').val();
6573    });
6574
6575    var notes_papan3 = [
6576      
6577      [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)."]
6578      
6579    ];
6580    $('#show_note_papan3').click(function(event){
6581      event.preventDefault();
6582      var idx_papan3=parseInt($('#note_id_papan3').val());
6583      if(isNaN(idx_papan3)){
6584        idx_papan3=0;
6585      }else{
6586        idx_papan3++;
6587        idx_papan3=idx_papan3%notes_papan3.length;
6588      }
6589      var note_papan3=notes_papan3[idx_papan3][1];
6590      $('#note_id_papan3').val(idx_papan3);
6591      $('#kartu-ucapan-papan, #properties-kartu-pesan, #properties-kartu-ucapan').val(note_papan3);
6592      $('#msgDelivery').val(note_papan3);
6593      var text_length_papan3=$('#kartu-ucapan-papan').val().length;
6594      var idx_2_papan3=parseInt($('#note_btn_id_papan3').val());
6595      if(isNaN(idx_2_papan3)){
6596        idx_2_papan3=0;
6597      }else{
6598        idx_2_papan3++;
6599        //idx_2_papan1=idx_2_papan1%note_btn_text_papan1.length;
6600      }
6601      $('#note_btn_id_papan3').val(idx_2_papan3);
6602      //var note_btn=note_btn_text[idx_2][1];
6603      //$('#note_btn').text(note_btn);
6604      $(this).parents(".sectionPurchase").find(".next-purchase-button").attr("disabled", false)
6605    });
6606
6607    var text_max_papan4=150;
6608    var msg_text_papan4="";
6609    $('#kartu-ucapan-ucapan').keyup(function(){
6610      var text_length_papan4=$('#kartu-ucapan-ucapan').val().length;
6611      var msg_text_papan4=$('#kartu-ucapan-ucapan').val();
6612    });
6613
6614    $('#show_note_papan4').click(function(event){
6615      var notes_papan4 = [
6616        [0,"Here’s to you—steadier, stronger and better every day."],
6617        [1,"Warmest wishes for a speedy recovery!"],
6618        [2,"Dengan ucapan terhangat, semoga lekas membaik dan semakin pulih setiap harinya ya."],
6619        [3,"Semoga lekas sembuh untuk kembali beraktivitas dan berkarya."]
6620      ];
6621      event.preventDefault();
6622      var idx_papan4=parseInt($('#note_id_papan4').val());
6623      console.log(idx_papan4, 'idx_papan4')
6624      if(isNaN(idx_papan4)){
6625        idx_papan4=0;
6626      }else{
6627        idx_papan4++;
6628        idx_papan4=idx_papan4%notes_papan4.length;
6629      }
6630      var note_papan4=notes_papan4[idx_papan4][1];
6631      $('#note_id_papan4').val(idx_papan4);
6632      $('#kartu-ucapan-papan, #properties-kartu-ucapan, #properties-kartu-pesan').val(note_papan4);
6633      console.log(note_papan4, 'note_papan4')
6634      var text_length_papan4=$('#kartu-ucapan-papan').val().length;
6635      var idx_2_papan4=parseInt($('#note_btn_id_papan4').val());
6636      if(isNaN(idx_2_papan4)){
6637        idx_2_papan4=0;
6638      }else{
6639        idx_2_papan4++;
6640        //idx_2_papan1=idx_2_papan1%note_btn_text_papan1.length;
6641      }
6642      $('#note_btn_id_papan4').val(idx_2_papan4);
6643      
6644      $(this).parents(".sectionPurchase").find(".next-purchase-button").attr("disabled", false)
6645    });
6646
6647    
6648
6649    
6650
6651    $(".variant-metafield").each(function(){
6652      const t = $(this)
6653      const id = t.attr("id")
6654      const target = $(`[data-select=${id}]`)
6655      t.on('select2:selecting', function(e) {
6656        const data = e.params.args.data
6657        target.val(data.text)
6658      });
6659    })
6660  })
6661</script>
6661
6662
6663<div id="popupCart">
6664  <div class="container">
6665    <div class="wrapperPopupCart">
6666      <div class="headerPopupCart">
6667        <div class="d-flex pl-5 pr-5 p-4">
6668          <svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" viewBox="0 0 16 12" fill="none">
6669            <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"/>
6670          </svg>
6671          <span>item added to your cart</span>
6672        </div>
6673        <a class="close-purchase-popup">
6674  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none">
6675    <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"/>
6676  </svg>
6677</a>
6678
6679      </div>
6680      <div class="contentPopupCart">
6681        <div class="pl-5 pr-5 p-4">
6682          <div class="itemContent row m-0 justify-content-between">
6683            <div class="col-2 align-self-center">
6684              
6685              <img
6686                class="d-block"
6687                width="80"
6688                src="https://outerbloom.com/cdn/shop/files/CNY-Ruby-Mulan-Bag_80x.jpg?v=1766041636"
6689              >
6690            </div>
6691            <div class="col-10 align-self-center">
6692              <div class="row pl-3">
6693                <div class="col-12 col-lg-7">
6694                  <span class="titleCartPopup text-uppercase">HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman</span>
6695                  <div class="cart-popup-quantity mt-2">
6696                    <div class="quantity-selector" data-popup-item="true">
6697                      <button type="button" class="qty-minus" data-action="minus">
6698                        −
6699                      </button>
6700                      <input 
6701                        type="text" 
6702                        class="qty-input" 
6703                        value="1" 
6704                        min="1" 
6705                        readonly
6706                      >
6707                      <button type="button" class="qty-plus" data-action="plus">
6708                        +
6709                      </button>
6710                    </div>
6711                  </div>
6712                </div>
6713                <div class="d-flex justify-content-end col-12 col-lg-5">
6714                  <span class="deleteCartPopup hide">Delete</span>
6715                  <span class="lineCartPrice align-self-center">Rp 1.386.737</span>
6716                </div>
6717              </div>
6718            </div>
6719          </div>
6720          <div class="itemProperties">
6721            
6722              <div class="propDeliver">
6723                <h4>delivery option detail</h4>
6724                <p>
6725                  <span>delivery city</span>
6726                  <span class="propDeliveryCity">jakarta</span>
6727                </p>
6728                <p>
6729                  <span>delivery date</span>
6730                  <span class="propDeliveryDate">24/03/2025</span>
6731                </p>
6732                <p>
6733                  <span>delivery time</span>
6734                  <span class="propDeliveryTime">Afternoon | 13:00 - 18:00</span>
6735                </p>
6736              </div>
6737              <div class="propAddress">
6738                <h4>delivery option detail</h4>
6739                <p>
6740                  <span>RECIPIENT NAME</span>
6741                  <span class="propDeliveryName">jane doe</span>
6742                </p>
6743                <p>
6744                  <span>delivery address</span>
6745                  <span class="propDeliveryAddress"
6746                    >Jl. Gatot Subroto No. 25, RT.2/RW.4, Kuningan Barat, Kecamatan Mampang Prapatan, Kota Jakarta
6747                    Selatan, Daerah Khusus Ibukota Jakarta 12710, Indonesia</span
6748                  >
6749                </p>
6750                <p>
6751                  <span>recipient phone number</span>
6752                  <span class="propDeliveryPhone">(+62) 812-3456-7890</span>
6753                </p>
6754                <p>
6755                  <span>PROVINCE</span>
6756                  <span class="propDeliveryProv">Jakarta</span>
6757                </p>
6758                <p>
6759                  <span>postal code</span>
6760                  <span class="propDeliveryZip">12710</span>
6761                </p>
6762                
6763                
6764              </div>
6765            
6766          </div>
6767          <div class="itemAddonCart">
6768            <div class="toggleAddonCart d-flex justify-content-between">
6769              <h4>add-ons (0)</h4>
6770              <svg xmlns="http://www.w3.org/2000/svg" width="5" height="9" viewBox="0 0 5 9" fill="none">
6771                <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"/>
6772              </svg>
6773            </div>
6774            <div class="wrapperItemAddonCart"></div>
6775          </div>
6776          
6777        </div>
6778      </div>
6779      <div class="footerPopupCart">
6780        <div class="row m-0 pl-5 pr-5 p-4">
6781          <a class="btn btnViewCart w-100 text-uppercase text-center" href="/cart">View Cart</a>
6782          <a class="btn btnViewCheckout w-100 text-uppercase text-center" href="/checkout"><span>Checkout</span></a>
6783          <a class="btnContinueShopping w-100 text-center" href="/">Continue shopping</a>
6784        </div>
6785      </div>
6786    </div>
6787  </div>
6788</div>
6789
6790<style>
6791  .cart-popup-quantity .quantity-selector {
6792    display: inline-flex;
6793    align-items: center;
6794    border: 1px solid #D1D1D1;
6795    border-radius: 2px;
6796    overflow: hidden;
6797    background: white;
6798    max-width: 140px;
6799  }
6800
6801  .cart-popup-quantity .quantity-selector button {
6802    width: 32px;
6803    height: 32px;
6804    border: none;
6805    background: white;
6806    cursor: pointer;
6807    font-size: 16px;
6808    font-weight: 400;
6809    color: #424242;
6810    transition: all 0.2s ease;
6811    padding: 0;
6812    display: flex;
6813    align-items: center;
6814    justify-content: center;
6815    line-height: 1;
6816  }
6817
6818  .cart-popup-quantity .quantity-selector button:hover {
6819    background: #F5F5F5;
6820    color: #212121;
6821  }
6822
6823  .cart-popup-quantity .quantity-selector button:active {
6824    background: #E0E0E0;
6825  }
6826
6827  .cart-popup-quantity .quantity-selector button:disabled {
6828    opacity: 0.4;
6829    cursor: not-allowed;
6830    background: white;
6831  }
6832
6833  .cart-popup-quantity .quantity-selector input {
6834    width: 50px;
6835    height: 32px;
6836    border: none;
6837    border-left: 1px solid #D1D1D1;
6838    border-right: 1px solid #D1D1D1;
6839    text-align: center;
6840    font-size: 13px;
6841    font-weight: 500;
6842    color: #212121;
6843    -moz-appearance: textfield;
6844    background: white;
6845    padding: 0;
6846  }
6847
6848  .cart-popup-quantity .quantity-selector input::-webkit-outer-spin-button,
6849  .cart-popup-quantity .quantity-selector input::-webkit-inner-spin-button {
6850    -webkit-appearance: none;
6851    margin: 0;
6852  }
6853
6854  .cart-popup-quantity .quantity-selector input:focus {
6855    outline: none;
6856  }
6857</style>
6858
6859<script>
6860  // Function to update popup cart quantity
6861  window.updatePopupCartQuantity = function() {
6862    let itemKey = '';
6863    let currentProductId = 45873023910103;
6864    
6865    // Get current cart and update popup display
6866    fetch(window.Shopify.routes.root + 'cart.js')
6867      .then(response => response.json())
6868      .then(cart => {
6869        if(cart.items && cart.items.length > 0) {
6870          // Find the item that matches current product variant
6871          const matchingItem = cart.items.find(item => 
6872            item.product_id === 7881418965207 || 
6873            item.variant_id === currentProductId
6874          );
6875          
6876          if(matchingItem) {
6877            itemKey = matchingItem.key;
6878            
6879            // Display current total quantity in popup (including what was already in cart)
6880            const totalQty = matchingItem.quantity;
6881            $("#popupCart .qty-input").val(totalQty);
6882            
6883            // Store itemKey for later use
6884            $("#popupCart .quantity-selector").attr("data-item-key", itemKey);
6885            
6886            // Update the price display to reflect total quantity
6887            const basePrice = 1.386.73700;
6888            const newPrice = basePrice * totalQty;
6889            const formattedPrice = new Intl.NumberFormat('id-ID', {
6890              style: 'currency',
6891              currency: 'IDR',
6892              minimumFractionDigits: 0
6893            }).format(newPrice / 100);
6894            $(".lineCartPrice").text(formattedPrice);
6895          }
6896        }
6897      })
6898      .catch(error => {
6899        console.error('Error fetching cart:', error);
6900      });
6901  };
6902
6903  $(document).ready(function(){
6904    // Initialize on page load
6905    updatePopupCartQuantity();
6906    
6907    // Quantity Selector Handler for Cart Popup
6908    $("#popupCart .quantity-selector button").on("click", function(e){
6909      e.preventDefault();
6910      const $button = $(this);
6911      const $selector = $button.closest(".quantity-selector");
6912      const $input = $selector.find(".qty-input");
6913      const action = $button.data("action");
6914      const itemKey = $selector.attr("data-item-key");
6915      let currentQty = parseInt($input.val());
6916      
6917      if(action === "minus" && currentQty > 1) {
6918        currentQty--;
6919      } else if(action === "plus") {
6920        currentQty++;
6921      }
6922      
6923      // Update the input value
6924      $input.val(currentQty);
6925      
6926      // Update the line price display
6927      const basePrice = 1.386.73700;
6928      const newPrice = basePrice * currentQty;
6929      const formattedPrice = new Intl.NumberFormat('id-ID', {
6930        style: 'currency',
6931        currency: 'IDR',
6932        minimumFractionDigits: 0
6933      }).format(newPrice / 100);
6934      $(".lineCartPrice").text(formattedPrice);
6935      
6936      // Disable buttons while updating
6937      $selector.find("button").prop("disabled", true);
6938      
6939      // Update cart directly with the new total quantity
6940      fetch(window.Shopify.routes.root + 'cart/change.js', {
6941        method: 'POST',
6942        headers: {
6943          'Content-Type': 'application/json',
6944        },
6945        body: JSON.stringify({
6946          id: itemKey,
6947          quantity: currentQty
6948        })
6949      })
6950      .then(response => response.json())
6951      .then(data => {
6952        // Re-enable buttons
6953        $selector.find("button").prop("disabled", false);
6954        
6955        // Update CartJS if available
6956        if(typeof CartJS !== 'undefined') {
6957          CartJS.init(data);
6958        }
6959        
6960        console.log('Cart updated successfully', data);
6961      })
6962      .catch(error => {
6963        console.error('Error updating cart:', error);
6964        $selector.find("button").prop("disabled", false);
6965      });
6966    });
6967  });
6968</script>
6968
6969
6970
6971<style>
6972  .field-error .variant-metafield {
6973    border-color: #e74c3c !important;
6974    box-shadow: 0 0 0 0.2rem rgba(231, 76, 60, 0.25) !important;
6975  }
6976  
6977  .field-error .form-control {
6978    border-color: #e74c3c !important;
6979    box-shadow: 0 0 0 0.2rem rgba(231, 76, 60, 0.25) !important;
6980  }
6981  
6982  .field-error select {
6983    border-color: #e74c3c !important;
6984    box-shadow: 0 0 0 0.2rem rgba(231, 76, 60, 0.25) !important;
6985  }
6986  
6987  .error-message {
6988    display: block;
6989    width: 100%;
6990    margin-top: 0.25rem;
6991    font-size: 0.875em;
6992    color: #e74c3c;
6993  }
6994  
6995  #btnPurchase:disabled {
6996    opacity: 0.7;
6997    pointer-events: none;
6998  }
6999  #wishButton {
7000    font-size: 14px;
7001    font-weight: 400;
7002    text-transform: uppercase;
7003    letter-spacing: 0.5px;
7004    transition: opacity 0.2s ease;
7005  }
7006
7007  #wishButton:hover {
7008    opacity: 0.8;
7009  }
7010
7011  #wishButton:disabled {
7012    opacity: 0.5;
7013    pointer-events: none;
7014  }
7015
7016  .wishlist-icon-wrapper svg {
7017    flex-shrink: 0;
7018    width: 16px;
7019  }
7020
7021  @media screen and (max-width: 768px) {
7022    .ios .field-error .variant-metafield {
7023      border-color: #e74c3c !important;
7024      box-shadow: 0 0 0 3px rgba(231, 76, 60, 0.1) !important;
7025    }
7026  }
7027
7028  .delivery-method-section h4 {
7029    font-size: 16px;
7030    font-weight: 500;
7031    margin-bottom: 12px;
7032    color: #212121;
7033  }
7034
7035  .delivery-method-buttons {
7036    display: flex;
7037    gap: 8px;
7038  }
7039
7040  .delivery-method-btn {
7041    flex: 1;
7042    padding: 12px 24px;
7043    border: 1px solid #212121;
7044    font-weight: 400;
7045    text-transform: uppercase;
7046    transition: all 0.3s ease;
7047    cursor: pointer;
7048    font-size: 14px;
7049    letter-spacing: 0.5px;
7050  }
7051
7052  .delivery-method-btn:not(.active) {
7053    background-color: #ffffff;
7054    color: #212121;
7055    font-weight: 400;
7056  }
7057
7058  .delivery-method-btn:not(.active):hover {
7059    opacity: 0.8;
7060  }
7061
7062  .delivery-method-btn.active {
7063    background-color: #EEEEEE;
7064    color: #212121;
7065    font-weight: 700;
7066  }
7067
7068  @media screen and (max-width: 576px) {
7069    .delivery-method-buttons {
7070      flex-direction: column;
7071    }
7072    
7073    .delivery-method-btn {
7074      width: 100%;
7075    }
7076  }
7077</style>
7078
7079<script>
7080  const shareButton = document.getElementById('shareButton');
7081
7082  shareButton.addEventListener('click', () => {
7083    if (navigator.share) {
7084      navigator.share({
7085        title: "HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman",
7086        url: "/products/outerbloom-mulan-bag-hampers",
7087        text: 'Check out this page!'
7088      })
7089      .then(() => console.log('Successful share'))
7090      .catch((error) => console.log('Error sharing', error));
7091    } else {
7092      alert('Web Share API is not supported in this browser.');
7093    }
7094  });
7095
7096  // Inventory validation function
7097  function checkInventoryStatus() {
7098    const productSelect = document.getElementById('productSelect');
7099    const purchaseButton = document.querySelector('#personalizeBtn button');
7100    
7101    if (!productSelect || !purchaseButton) return;
7102
7103    const selectedVariantId = productSelect.value;
7104    
7105    // Get variant data from Shopify
7106    fetch(`/products/outerbloom-mulan-bag-hampers.js`)
7107      .then(response => response.json())
7108      .then(product => {
7109        const selectedVariant = product.variants.find(variant => variant.id == selectedVariantId);
7110        
7111        if (selectedVariant) {
7112          const isOutOfStock = selectedVariant.inventory_quantity <= 0 && 
7113                               selectedVariant.inventory_management === 'shopify' && 
7114                               selectedVariant.inventory_policy !== 'continue';
7115          
7116          if (isOutOfStock) {
7117            purchaseButton.disabled = true;
7118            purchaseButton.textContent = 'Out of Stock';
7119            purchaseButton.setAttribute('data-out-of-stock', 'true');
7120            purchaseButton.style.backgroundColor = '#cccccc';
7121            purchaseButton.style.cursor = 'not-allowed';
7122          } else {
7123            // Check if button was disabled due to other conditions
7124            
7125            
7126            
7127            
7128            
7129            
7130            
7131            
7132            const isOtherDisabled = false || false || false;
7133            
7134            if (!isOtherDisabled) {
7135              purchaseButton.disabled = false;
7136              purchaseButton.textContent = 'MAKE IT PERSONAL ➔';
7137              purchaseButton.removeAttribute('data-out-of-stock');
7138              purchaseButton.style.backgroundColor = '';
7139              purchaseButton.style.cursor = '';
7140            }
7141          }
7142        }
7143      })
7144      .catch(error => {
7145        console.error('Error checking inventory:', error);
7146      });
7147  }
7148
7149  // Validate variant metafields function - make it globally accessible
7150  window.validateVariantMetafields = function(showErrors = false) {
7151    const purchaseButton = document.querySelector('#personalizeBtn button');
7152    const variantMetafields = document.querySelectorAll('.variant-metafield[required]');
7153    
7154    if (!purchaseButton) return true;
7155
7156    let allFieldsValid = true;
7157    let hasEmptyFields = false;
7158    let firstErrorField = null;
7159
7160    // Check all required variant metafields
7161    variantMetafields.forEach(function(field) {
7162      const fieldValue = field.value ? field.value.trim() : '';
7163      const fieldContainer = field.closest('.form-group-variant');
7164      
7165      // Remove existing error styling
7166      if (fieldContainer) {
7167        fieldContainer.classList.remove('field-error');
7168        const existingError = fieldContainer.querySelector('.error-message');
7169        if (existingError) {
7170          existingError.remove();
7171        }
7172      }
7173      
7174      if (!fieldValue || fieldValue === '' || fieldValue === 'Choose ' + field.getAttribute('data-properties')) {
7175        allFieldsValid = false;
7176        hasEmptyFields = true;
7177        
7178        // Store the first error field for scrolling - ensure it's a valid DOM element
7179        if (!firstErrorField && field && field.nodeType === 1) {
7180          firstErrorField = field;
7181          console.log('First error field stored:', field, 'Type:', field.tagName, 'Value:', field.value);
7182        }
7183        
7184        // Only add error styling if showErrors is true (when button is clicked)
7185        if (showErrors && fieldContainer) {
7186          fieldContainer.classList.add('field-error');
7187          
7188          // Add error message
7189          const errorMessage = document.createElement('div');
7190          errorMessage.className = 'error-message';
7191          errorMessage.style.color = '#e74c3c';
7192          errorMessage.style.fontSize = '12px';
7193          errorMessage.style.marginTop = '4px';
7194          errorMessage.textContent = 'This field is required';
7195          fieldContainer.appendChild(errorMessage);
7196        }
7197      }
7198    });
7199
7200    // Auto scroll to first error field if showing errors
7201    if (showErrors && !allFieldsValid) {
7202      console.log('Scrolling to purchaseProduct section due to validation errors');
7203      setTimeout(function() {
7204        // Primary method: scroll to purchaseProduct container
7205        try {
7206          const purchaseProductSection = document.getElementById('purchaseProduct');
7207          if (purchaseProductSection && typeof purchaseProductSection.scrollIntoView === 'function') {
7208            console.log('Scrolling to purchaseProduct section');
7209            purchaseProductSection.scrollIntoView({ 
7210              behavior: 'smooth', 
7211              block: 'start',
7212              inline: 'nearest' 
7213            });
7214            
7215            // Focus the first error field after scroll
7216            setTimeout(function() {
7217              if (firstErrorField) {
7218                try {
7219                  console.log('Focusing first error field:', firstErrorField.tagName, firstErrorField.id || firstErrorField.className);
7220                  if (typeof firstErrorField.focus === 'function') {
7221                    firstErrorField.focus();
7222                    
7223                    // For select elements, try to trigger the dropdown
7224                    if (firstErrorField.tagName && firstErrorField.tagName.toLowerCase() === 'select') {
7225                      setTimeout(function() {
7226                        if (typeof firstErrorField.click === 'function') {
7227                          firstErrorField.click();
7228                        }
7229                      }, 100);
7230                    }
7231                  }
7232                } catch (focusError) {
7233                  console.warn('Error during field focus:', focusError);
7234                }
7235              }
7236            }, 300); // Wait for scroll to complete
7237          } else {
7238            // Fallback: try alternative selectors
7239            const fallbackSelectors = ['#purchaseProduct', '.product-meta', 'main', '.form-group-variant'];
7240            let scrolled = false;
7241            
7242            for (let selector of fallbackSelectors) {
7243              if (!scrolled) {
7244                const element = document.querySelector(selector);
7245                if (element && typeof element.scrollIntoView === 'function') {
7246                  console.log('Fallback scroll to:', selector);
7247                  element.scrollIntoView({ 
7248                    behavior: 'smooth', 
7249                    block: 'start' 
7250                  });
7251                  scrolled = true;
7252                  break;
7253                }
7254              }
7255            }
7256          }
7257        } catch (error) {
7258          console.warn('Auto scroll failed, trying alternative method:', error);
7259          // Ultimate fallback: manual scroll to top of page
7260          try {
7261            window.scrollTo({
7262              top: 0,
7263              behavior: 'smooth'
7264            });
7265          } catch (finalError) {
7266            console.warn('All scroll methods failed:', finalError);
7267          }
7268        }
7269      }, 150); // Delay to ensure DOM is stable
7270    }
7271
7272    // Check inventory status as well
7273    const isOutOfStock = purchaseButton.getAttribute('data-out-of-stock') === 'true';
7274    
7275    // Check other disabled conditions
7276    
7277    
7278    
7279    
7280    
7281    
7282    
7283    
7284    const isOtherDisabled = false || false || false;
7285
7286    // Update button state only for inventory and other conditions, not for variant metafields
7287    if (isOutOfStock || isOtherDisabled) {
7288      purchaseButton.disabled = true;
7289      
7290      if (isOutOfStock) {
7291        purchaseButton.textContent = 'Out of Stock';
7292        purchaseButton.style.backgroundColor = '#cccccc';
7293      }
7294      
7295      purchaseButton.style.cursor = 'not-allowed';
7296    } else {
7297      purchaseButton.disabled = false;
7298      purchaseButton.textContent = 'MAKE IT PERSONAL ➔';
7299      purchaseButton.style.backgroundColor = '';
7300      purchaseButton.style.color = '';
7301      purchaseButton.style.cursor = '';
7302    }
7303    
7304    return allFieldsValid;
7305  }
7306
7307  // Check inventory on page load and setup event listeners
7308  document.addEventListener('DOMContentLoaded', function() {
7309    checkInventoryStatus();
7310    window.validateVariantMetafields(false); // Don't show errors on page load
7311    
7312    // Shipping Method Toggle Functionality
7313    const shippingMethodButtons = document.querySelectorAll('.delivery-method-btn');
7314    const selectedMethodInput = document.getElementById('selectedShippingMethod');
7315
7316    shippingMethodButtons.forEach(function(button) {
7317      button.addEventListener('click', function() {
7318        const isCurrentlyActive = this.classList.contains('active');
7319        const method = this.getAttribute('data-method');
7320        
7321        // Remove active class from all buttons
7322        shippingMethodButtons.forEach(function(btn) {
7323          btn.classList.remove('active');
7324          btn.style.backgroundColor = '#ffffff';
7325          btn.style.color = '#212121';
7326          btn.style.fontWeight = '400';
7327        });
7328
7329        // If button was not active, make it active (select)
7330        if (!isCurrentlyActive) {
7331          this.classList.add('active');
7332          this.style.backgroundColor = '#EEEEEE';
7333          this.style.color = '#212121';
7334          this.style.fontWeight = '700';
7335          
7336          // Update hidden input value
7337          if (selectedMethodInput) {
7338            selectedMethodInput.value = method;
7339          }
7340          
7341          // Handle pickup-specific functionality
7342          if (method === 'Pickup') {
7343            handlePickupMode();
7344          } else {
7345            handleDeliveryMode();
7346          }
7347          
7348          console.log('Delivery method selected:', method);
7349        } else {
7350          // Unselect - clear hidden input value and revert to delivery mode
7351          if (selectedMethodInput) {
7352            selectedMethodInput.value = '';
7353          }
7354          handleDeliveryMode();
7355          console.log('Delivery method unselected');
7356        }
7357      });
7358    });
7359    
7360    // Function to handle pickup mode
7361    function handlePickupMode() {
7362      // 1. Auto-select Jakarta and disable city dropdown
7363      const citySelect = document.getElementById('cities');
7364      if (citySelect) {
7365        // Set value to Jakarta
7366        citySelect.value = 'Jakarta';
7367        citySelect.disabled = true;
7368        citySelect.style.backgroundColor = '#f5f5f5';
7369        citySelect.style.cursor = 'not-allowed';
7370        citySelect.style.opacity = '0.6';
7371        
7372        // Trigger change event to update any dependent fields
7373        const event = new Event('change', { bubbles: true });
7374        citySelect.dispatchEvent(event);
7375      }
7376      
7377      // 2. Show pickup location info (in delivery method section)
7378      const pickupLocationInfo = document.getElementById('pickupLocationInfo');
7379      if (pickupLocationInfo) {
7380        pickupLocationInfo.style.display = 'block';
7381      }
7382      
7383      // 2b. Show pickup location details (in address section)
7384      const pickupLocationDetails = document.getElementById('pickupLocationDetails');
7385      if (pickupLocationDetails) {
7386        pickupLocationDetails.style.display = 'block';
7387      }
7388      
7389      // 3. Hide address form and remove required attributes
7390      const formAddressPurchase = document.querySelector('.formAddressPurchase');
7391      if (formAddressPurchase) {
7392        formAddressPurchase.style.display = 'none';
7393        
7394        // Remove required from all inputs in the form
7395        const requiredInputs = formAddressPurchase.querySelectorAll('[required]');
7396        requiredInputs.forEach(function(input) {
7397          input.removeAttribute('required');
7398          input.setAttribute('data-was-required', 'true'); // Mark for restoration
7399        });
7400      }
7401      
7402      // 4. Trigger date restrictions based on product tags
7403      window.applyPickupDateRestrictions = true;
7404      
7405      // Apply restrictions to existing date buttons immediately
7406      const deliveryDateElement = document.getElementById('deliveryDate');
7407      if (deliveryDateElement) {
7408        console.log('Applying pickup date restrictions immediately to existing buttons');
7409        applyPickupDateRestrictionsLocal(deliveryDateElement);
7410      }
7411      
7412      // 5. Hide full calendar (except for pickup-itcinhouse)
7413      const isPickupInhouse = false;
7414      const deliveryDateFull = document.getElementById('deliveryDateFull');
7415      if (deliveryDateFull && !isPickupInhouse) {
7416        deliveryDateFull.style.display = 'none';
7417      }
7418
7419      // 5b. Hide row-delivery-time (except for pickup-itcinhouse)
7420      const rowDeliveryTime = document.getElementById('row-delivery-time');
7421      if (rowDeliveryTime) {
7422        rowDeliveryTime.style.display = 'none';
7423
7424        // 5c. Make delivery time not required (except for pickup-itcinhouse)
7425        if (propDeliveryTime) {
7426          propDeliveryTime.removeAttribute('required');
7427          propDeliveryTime.value = '-';
7428        }
7429        const propertiesDeliveryTime = document.getElementById('properties-delivery-time');
7430        if (propertiesDeliveryTime) {
7431          propertiesDeliveryTime.removeAttribute('required');
7432          propertiesDeliveryTime.value = '-';
7433        }
7434      }
7435
7436      // 6. Update address for pickup
7437      if (typeof window.updateDeliveryAddress === 'function') {
7438        window.updateDeliveryAddress();
7439      }
7440    }
7441    
7442    // Local function to apply pickup date restrictions
7443    function applyPickupDateRestrictionsLocal(deliveryDateElement) {
7444      if (!deliveryDateElement) return;
7445      
7446      // Get current time in Jakarta timezone
7447      const now = new Date(new Date().toLocaleString("en-US", {timeZone: "Asia/Jakarta"}));
7448      const currentHour = now.getHours();
7449      const currentMinute = now.getMinutes();
7450      const currentTime = currentHour + (currentMinute / 60);
7451      const currentDate = now.getDate();
7452      
7453      const isAfter3PM = currentTime >= 15.0;
7454      
7455      // Check product tags
7456      const isPickupInhouse = false;
7457      const isPickupVendor = false;
7458      
7459      console.log('Applying pickup date restrictions:', {
7460        isPickupInhouse,
7461        isPickupVendor,
7462        currentDate,
7463        currentTime: currentTime.toFixed(2),
7464        isAfter3PM
7465      });
7466      
7467      const dateButtons = deliveryDateElement.querySelectorAll('button.date-single');
7468      console.log('Found date buttons:', dateButtons.length);
7469      
7470      dateButtons.forEach((button, index) => {
7471        const buttonDate = parseInt(button.dataset.date, 10);
7472        console.log(`Checking button ${index}: date=${buttonDate}, currentDate=${currentDate}`);
7473        
7474        if (isPickupInhouse) {
7475          // Check if this button is today
7476          if (buttonDate === currentDate) {
7477            button.disabled = true;
7478            button.classList.add('stop');
7479            button.title = 'Pickup not available for today';
7480            console.log(`✓ Disabled button ${index} (date ${buttonDate} = today) for pickup-itcinhouse`);
7481          } 
7482          // Check if this button is tomorrow AND it's after 3 PM
7483          else if (buttonDate === currentDate + 1 && isAfter3PM) {
7484            button.disabled = true;
7485            button.classList.add('stop');
7486            button.title = 'Pickup not available (after 3 PM cutoff)';
7487            console.log(`✓ Disabled button ${index} (date ${buttonDate} = tomorrow) for pickup-itcinhouse (after 3 PM)`);
7488          }
7489        } else if (isPickupVendor) {
7490          // For pickup-itcvendor: Allow ONLY date 14.
7491          // Disable 14 if today is 13th > 3 PM or today is > 13th.
7492          
7493          if (buttonDate !== 14) {
7494             button.disabled = true;
7495             button.classList.add('stop');
7496             button.title = 'Pickup only available on the 14th';
7497             // Do NOT hide, just disable.
7498             console.log(`✓ Disabled button ${index} (date ${buttonDate}) for pickup-itcvendor (not 14th)`);
7499          } else {
7500             // Date is 14. Check cutoff.
7501             if (currentDate > 13 || (currentDate === 13 && isAfter3PM)) {
7502                button.disabled = true;
7503                button.classList.add('stop');
7504                button.title = 'Pickup closed for 14th (Cutoff: 13th 15:00)';
7505                console.log(`✓ Disabled button ${index} (date ${buttonDate}) for pickup-itcvendor (Cutoff missed)`);
7506             }
7507          }
7508        }
7509      });
7510    }
7511    
7512    // Function to handle delivery mode (normal mode)
7513    function handleDeliveryMode() {
7514      // 1. Re-enable city dropdown
7515      const citySelect = document.getElementById('cities');
7516      if (citySelect) {
7517        citySelect.disabled = false;
7518        citySelect.style.backgroundColor = '#fff';
7519        citySelect.style.cursor = 'pointer';
7520        citySelect.style.opacity = '1';
7521      }
7522      
7523      // 2. Hide pickup location info (in delivery method section)
7524      const pickupLocationInfo = document.getElementById('pickupLocationInfo');
7525      if (pickupLocationInfo) {
7526        pickupLocationInfo.style.display = 'none';
7527      }
7528      
7529      // 2b. Hide pickup location details (in address section)
7530      const pickupLocationDetails = document.getElementById('pickupLocationDetails');
7531      if (pickupLocationDetails) {
7532        pickupLocationDetails.style.display = 'none';
7533      }
7534      
7535      // 3. Show address form and restore required attributes
7536      const formAddressPurchase = document.querySelector('.formAddressPurchase');
7537      if (formAddressPurchase) {
7538        formAddressPurchase.style.display = 'block';
7539        
7540        // Restore required attributes
7541        const wasRequiredInputs = formAddressPurchase.querySelectorAll('[data-was-required="true"]');
7542        wasRequiredInputs.forEach(function(input) {
7543          input.setAttribute('required', 'required');
7544          input.removeAttribute('data-was-required');
7545        });
7546      }
7547      
7548      // 4. Remove date restrictions
7549      window.applyPickupDateRestrictions = false;
7550      
7551      // Trigger date re-render to remove restrictions
7552      if (citySelect && citySelect.value) {
7553        setTimeout(function() {
7554          const changeEvent = new Event('change', { bubbles: true });
7555          citySelect.dispatchEvent(changeEvent);
7556        }, 100);
7557      }
7558
7559      // 5. Show full calendar
7560      const deliveryDateFull = document.getElementById('deliveryDateFull');
7561      if (deliveryDateFull) {
7562        deliveryDateFull.style.display = 'block';
7563      }
7564
7565      // 5b. Show row-delivery-time
7566      const rowDeliveryTime = document.getElementById('row-delivery-time');
7567      if (rowDeliveryTime) {
7568        rowDeliveryTime.style.display = 'block';
7569      }
7570
7571      // 5c. Make delivery time required again
7572      const propDeliveryTime = document.getElementById('propDeliveryTime');
7573      if (propDeliveryTime) {
7574        propDeliveryTime.setAttribute('required', 'required');
7575      }
7576      const propertiesDeliveryTime = document.getElementById('properties-delivery-time');
7577      if (propertiesDeliveryTime) {
7578        propertiesDeliveryTime.setAttribute('required', 'required');
7579      }
7580
7581      // 6. Update address for delivery
7582      if (typeof window.updateDeliveryAddress === 'function') {
7583        window.updateDeliveryAddress();
7584      }
7585    }
7586    
7587    // Listen for variant changes
7588    const productSelect = document.getElementById('productSelect');
7589    if (productSelect) {
7590      productSelect.addEventListener('change', function() {
7591        checkInventoryStatus();
7592        setTimeout(function() {
7593          window.validateVariantMetafields(false); // Don't show errors on variant change
7594        }, 100);
7595      });
7596    }
7597
7598    // Listen for changes on variant metafield inputs - only to clear existing errors
7599    const variantMetafields = document.querySelectorAll('.variant-metafield');
7600    variantMetafields.forEach(function(field) {
7601      field.addEventListener('input', function() {
7602        clearFieldError(this);
7603      });
7604      field.addEventListener('change', function() {
7605        clearFieldError(this);
7606      });
7607      field.addEventListener('blur', function() {
7608        clearFieldError(this);
7609      });
7610    });
7611
7612    // Listen for changes on select elements within variant metafields
7613    const variantSelects = document.querySelectorAll('.variant-metafield-select');
7614    variantSelects.forEach(function(select) {
7615      select.addEventListener('change', function() {
7616        clearFieldError(this);
7617      });
7618    });
7619  });
7620
7621  // Function to clear error styling from a specific field
7622  function clearFieldError(field) {
7623    const fieldContainer = field.closest('.form-group-variant');
7624    if (fieldContainer) {
7625      fieldContainer.classList.remove('field-error');
7626      const existingError = fieldContainer.querySelector('.error-message');
7627      if (existingError) {
7628        existingError.remove();
7629      }
7630    }
7631  }
7632
7633  // Prevent form submission if out of stock or required fields are empty
7634  document.addEventListener('click', function(e) {
7635    if (e.target.matches('button[data-out-of-stock="true"]')) {
7636      e.preventDefault();
7637      e.stopPropagation();
7638      alert('This product is currently out of stock and cannot be purchased.');
7639      return false;
7640    }
7641
7642    // Check if this is the purchase button
7643    if (e.target.id === 'btnPurchase' || e.target.closest('#btnPurchase')) {
7644      const isValid = window.validateVariantMetafields(true); // Show errors when button is clicked
7645      
7646      if (!isValid) {
7647        e.preventDefault();
7648        e.stopPropagation();
7649        
7650        // The validateVariantMetafields function already handles scrolling and focusing
7651        // No need for additional scroll here as it's handled in the validation function
7652        
7653        return false;
7654      }
7655    }
7656  });
7657</script>
7657
7658
7659
7660  
7661    <div class="product-description rte bg-card col-12 py-3 px-0 m-0" itemprop="description">
7662      
7663
7664
7665
7666
7667    <div class="short-desc-mobile d-block d-lg-none mb-3">
7668        <div class="short-desc">
7669            <ul>
7670<li>
7671<strong>HANTUSLOT</strong><br><strong></strong><strong></strong>
7672</li>
7673<li>
7674<strong>GAME ONLINE</strong><br>
7675</li>
7676<li><strong>FITUR INOVATIF GAME ONLINE</strong></li>
7677
7678        </div>
7679        <label class="more-mobile">Show More →</label>
7680    </div>
7681
7682
7683<div class="short-content short-spec position-relative open">
7684  <h3 class="heading-toggle">Descriptions</h3>
7685  <div
7686    id="product-desc"
7687    class="content-toggle product-spec pb-3"
7688    style="display: block; height: 200px; overflow: hidden; transition: height 0.3s ease;"
7689  >
7690    <ul>
7691<li>
7692<strong>HANTUSLOT</strong><br><strong></strong><strong></strong>
7693</li>
7694<li>
7695<strong>GAME ONLINE</strong><br>
7696</li>
7697<li><strong>GAME INOVATIF 2026</strong></li>
7698</ul>
7699<p>HANTUSLOT menghadirkan beragam game online modern dengan dukungan fitur berbahasa Indonesia, sehingga pengguna dapat memahami setiap menu dan fitur dengan lebih mudah serta menikmati pengalaman bermain yang praktis dan nyaman.</p>
7700<p><img src="https://imagesme.b-cdn.net/landing/banner-hotelverta.png" alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"></p>
7701<table style="width: 100.091%;" width="100%">
7702<tbody>
7703<tr>
7704<td style="width: 33.7327%;">SKU</td>
7705<td style="width: 65.9908%;">[C]HANTUSLOT<br>[C]OBIPCL1004-CNY2026<br>
7706</td>
7707</tr>
7708<tr>
7709<td style="width: 33.7327%;">Isi</td>
7710<td style="width: 65.9908%;">
7711Link Login HANTUSLOT<br>
7712Situs Game Online<br>
7713Fitur Inovatif<br>
7714GAME REKOMENDASI<br>
7715Game Gampang Menang<br>
7716Situs Game Modern<br>
7717Fitur Berbahasa Indonesia<br>
7718Game Paling Rekomendasi<br>
7719Akses Game Gampang<br>
7720Nyaman Saat Dimainkan<br>
7721HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman
7722</td>
7723</td>
7724</tr>
7725</tbody>
7726</table>
7727  </div>
7728  <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);
7729    font-weight: 600;">
7730    Read More
7731  </button>
7732</div>
7733
7734
7735<script>
7736    var liCountMobile;
7737    $(document).ready(function () {
7738        // Handle mobile short description - same logic as desktop
7739        $(".short-desc-mobile .short-desc ul").each(function() {
7740            liCountMobile = $(this).children("li").length;
7741            if (liCountMobile > 3) {
7742                $(this).closest(".short-desc-mobile").find(".more-mobile").addClass("showMe");
7743            }
7744        });
7745
7746        $(".more-mobile").click(function () {
7747            $("#product-desc").find("ul").show();
7748            $('html, body').animate({
7749                scrollTop: $("#product-desc").offset().top - 150
7750            }, 1000);
7751            $("#product-desc").css("height","auto");
7752            
7753            // Open the descriptions accordion
7754            var $descriptions = $("#product-desc").closest(".short-content");
7755            if (!$descriptions.hasClass("open")) {
7756                $descriptions.addClass("open");
7757                $("#product-desc").show();
7758            }
7759        });
7760
7761        // Handle Read More / Read Less toggle
7762        var isExpanded = false;
7763        var descElement = $("#product-desc");
7764        var readMoreBtn = $("#readMoreBtn");
7765
7766        readMoreBtn.click(function(e) {
7767            e.preventDefault();
7768            isExpanded = !isExpanded;
7769
7770            if (isExpanded) {
7771                // Expand to full height
7772                descElement.css("height", "auto");
7773                readMoreBtn.text("Read Less");
7774                readMoreBtn.css({
7775                    "position": "relative",
7776                    "height": "auto",
7777                    "bottom": "auto",
7778                    "background-color": "transparent"
7779                });
7780            } else {
7781                // Collapse to 200px
7782                descElement.css("height", "200px");
7783                readMoreBtn.text("Read More");
7784                readMoreBtn.css({
7785                    "position": "absolute",
7786                    "height": "70px",
7787                    "bottom": "0",
7788                    "background-color": "rgba(255, 255, 255, 0.8)"
7789                });
7790            }
7791        });
7792    });
7793</script>
7793
7794
7795    </div>
7796  
7797</div>
7798
7799          </div>
7800        </div>
7801      </div>
7802    </div>
7803    <div id="product-bottom">
7804      
7805      <div class="row">
7806        <div class="col-12 product-fixed">
7807          <div class="container">
7808            <div class="row justify-content-between">
7809              <div class="d-flex col-12 col-lg-7">
7810                <div class="pfImage">
7811                  <img
7812                    width="300"
7813                    height="170"
7814                    src="https://imagesme.b-cdn.net/icon/logo-hotelverta.gif"
7815                    alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
7816                  >
7817                </div>
7818                <div class="pfMeta">
7819                  <h4 class="pTitle">HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman</h4>
7820                  <div class="pPrice">
7821                    <p>
7822                      <span class="price">Rp 1.386.737</span><span class="priceCompare">Rp 8.008.008</span>
7823                    </p>
7824                  </div>
7825                </div>
7826              </div>
7827              <div class="col-12 col-lg-5 self-align-center row justify-content-between" style="align-self: center;">
7828                <div class="pfBtn col-12 align-self-center">
7829                  <div id="personalizeBtn">
7830                    <button class="btn text-uppercase w-100 fw-400" >
7831                      MAKE IT PERSONAL ➔
7832                    </button>
7833                  </div>
7834                </div>
7835              </div>
7836            </div>
7837          </div>
7838        </div>
7839        <div id="product-bottom-left" class="product-bottom-left col-lg-12">
7840          <div class="container">
7841              
7842              <!-- HEADER -->
7843<div class="review-header">
7844    <div class="rating-summary">
7845        <div class="rating-score">4.9</div>
7846        <div class="stars">★★★★★</div>
7847        <p>Based on 103 Reviews</p>
7848
7849        <div class="progress-bar">5 ★ 
7850            <div class="progress"><div class="progress-fill" style="width:92%"></div></div> (96)
7851        </div>
7852        <div class="progress-bar">4 ★ 
7853            <div class="progress"><div class="progress-fill" style="width:6%"></div></div> (6)
7854        </div>
7855        <div class="progress-bar">3 ★ 
7856            <div class="progress"><div class="progress-fill" style="width:1%"></div></div> (1)
7857        </div>
7858        <div class="progress-bar">2 ★ 
7859            <div class="progress"><div class="progress-fill" style="width:0%"></div></div> (0)
7860        </div>
7861        <div class="progress-bar">1 ★ 
7862            <div class="progress"><div class="progress-fill" style="width:0%"></div></div> (0)
7863        </div>
7864    </div>
7865
7866    <div style="flex:1">
7867        <div class="tabs">
7868            <div class="tab active" onclick="showTab('reviews')">REVIEWS (14)</div>
7869            <div class="tab" onclick="showTab('faq')">QUESTIONS (14)</div>
7870        </div>
7871
7872        <!-- FILTER -->
7873        <div class="filter-bar">
7874            <input type="text" id="searchInput" placeholder="Search Reviews...">
7875            <select id="sortSelect">
7876                <option value="recent">Most Recent</option>
7877                <option value="oldest">Oldest</option>
7878                <option value="highest">Highest Rating</option>
7879            </select>
7880        </div>
7881
7882        <!-- REVIEWS -->
7883        <div id="reviewsSection"></div>
7884
7885        <!-- FAQ -->
7886        <div id="faqSection" style="display:none"></div>
7887
7888    </div>
7889</div>
7890
7891</div>
7892          </div></div>
7893            
7894<script>
7895
7896const reviews = [
7897  {
7898    name: "Dimas Ardiansyah",
7899    date: "2026-07-28",
7900    rating: 5,
7901    text: "HANTUSLOT memiliki tampilan yang modern dan mudah dipahami. Menu berbahasa Indonesia membuat saya lebih cepat menemukan berbagai fitur yang tersedia."
7902  },
7903  {
7904    name: "Raka Pratama",
7905    date: "2026-07-21",
7906    rating: 5,
7907    text: "Saya suka dengan desain HANTUSLOT yang rapi dan responsif. Akses melalui smartphone terasa ringan dan navigasinya juga cukup praktis."
7908  },
7909  {
7910    name: "Andika Saputro",
7911    date: "2026-07-15",
7912    rating: 5,
7913    text: "Fitur yang tersedia cukup lengkap dan semuanya tersusun dengan jelas. HANTUSLOT memberikan pengalaman menggunakan platform game online yang terasa modern."
7914  },
7915  {
7916    name: "Bima Kurniawan",
7917    date: "2026-07-09",
7918    rating: 5,
7919    text: "Hal yang paling saya sukai dari HANTUSLOT adalah antarmukanya yang sederhana. Pengguna baru juga bisa memahami fungsi setiap menu dengan mudah."
7920  },
7921  {
7922    name: "Rendy Firmansyah",
7923    date: "2026-07-02",
7924    rating: 5,
7925    text: "Performa HANTUSLOT terasa cepat ketika diakses melalui perangkat mobile maupun desktop. Tampilan juga tetap nyaman meskipun berpindah perangkat."
7926  },
7927  {
7928    name: "Fikri Ramadhan",
7929    date: "2026-06-25",
7930    rating: 5,
7931    text: "HANTUSLOT menghadirkan konsep platform game online yang menarik dengan desain futuristik dan fitur-fitur yang mudah digunakan."
7932  },
7933  {
7934    name: "Yoga Prasetya",
7935    date: "2026-06-18",
7936    rating: 5,
7937    text: "Saya cukup menyukai pelayanan HANTUSLOT yang informatif. Customer service memberikan penjelasan dengan bahasa yang mudah dimengerti ketika saya membutuhkan bantuan."
7938  },
7939  {
7940    name: "Ardi Maulana",
7941    date: "2026-06-11",
7942    rating: 5,
7943    text: "Navigasi di HANTUSLOT terasa sederhana dan tidak membingungkan. Berbagai informasi dapat ditemukan dengan cepat dari halaman utama."
7944  },
7945  {
7946    name: "Rizal Hidayat",
7947    date: "2026-06-04",
7948    rating: 5,
7949    text: "Desain modern menjadi salah satu hal yang membuat saya nyaman menggunakan HANTUSLOT. Tampilan berbahasa Indonesia juga sangat membantu."
7950  },
7951  {
7952    name: "Galang Wijaya",
7953    date: "2026-05-28",
7954    rating: 5,
7955    text: "HANTUSLOT memiliki tampilan yang responsif dan mudah digunakan. Saya bisa mengakses berbagai bagian platform dengan cepat melalui ponsel."
7956  },
7957  {
7958    name: "Fauzan Akbar",
7959    date: "2026-05-21",
7960    rating: 5,
7961    text: "Menurut saya HANTUSLOT cukup menarik karena menggabungkan desain modern dengan fitur yang tersusun secara rapi. Informasinya juga mudah dipahami."
7962  },
7963  {
7964    name: "Rafi Nugraha",
7965    date: "2026-05-14",
7966    rating: 5,
7967    text: "Pengalaman menggunakan HANTUSLOT terasa praktis. Menu yang tersedia jelas dan tampilan keseluruhan terlihat profesional."
7968  },
7969  {
7970    name: "Kevin Setiawan",
7971    date: "2026-05-07",
7972    rating: 5,
7973    text: "Saya menyukai konsep HANTUSLOT yang mengutamakan kemudahan akses. Semua fitur utama dapat ditemukan tanpa harus berpindah halaman terlalu banyak."
7974  },
7975  {
7976    name: "Doni Prakoso",
7977    date: "2026-04-30",
7978    rating: 5,
7979    text: "HANTUSLOT memiliki tampilan yang nyaman dilihat dengan kombinasi desain futuristik dan navigasi sederhana. Cocok untuk pengguna yang menyukai platform modern."
7980  }
7981];
7982
7983const faq = [
7984  "Apa itu HANTUSLOT?|HANTUSLOT merupakan platform game online dengan antarmuka berbahasa Indonesia yang dirancang dengan tampilan modern, navigasi praktis, dan akses yang nyaman di berbagai perangkat.",
7985
7986  "Apa yang membuat HANTUSLOT menarik untuk digunakan?|HANTUSLOT menghadirkan desain futuristik, navigasi sederhana, fitur yang mudah dipahami, serta tampilan responsif untuk memberikan pengalaman penggunaan yang lebih praktis.",
7987
7988  "Apakah HANTUSLOT menyediakan tampilan dalam bahasa Indonesia?|Ya, HANTUSLOT menyediakan menu dan informasi berbahasa Indonesia sehingga pengguna dapat memahami berbagai fitur dan navigasi dengan lebih mudah.",
7989
7990  "Apakah HANTUSLOT mendukung perangkat mobile?|Ya. HANTUSLOT dirancang agar dapat digunakan melalui smartphone, tablet, maupun desktop dengan tampilan yang menyesuaikan ukuran layar perangkat.",
7991
7992  "Apa saja fitur unggulan HANTUSLOT?|Beberapa fitur unggulan HANTUSLOT meliputi antarmuka responsif, navigasi intuitif, akses multi-perangkat, sistem keamanan modern, serta dukungan customer service.",
7993
7994  "Apakah HANTUSLOT mudah digunakan oleh pemula?|Tentu. Struktur menu HANTUSLOT dibuat sederhana dan informatif sehingga pengguna baru dapat mempelajari berbagai fitur tanpa harus melalui proses yang rumit.",
7995
7996  "Bagaimana HANTUSLOT membantu menjaga keamanan pengguna?|HANTUSLOT menggunakan berbagai langkah keamanan digital untuk membantu menjaga informasi akun dan memberikan lingkungan penggunaan yang lebih aman.",
7997
7998  "Apakah HANTUSLOT memiliki performa akses yang ringan?|HANTUSLOT dirancang dengan fokus pada kecepatan dan responsivitas sehingga pengguna dapat berpindah antarhalaman dengan lebih lancar pada perangkat yang kompatibel.",
7999
8000  "Apakah HANTUSLOT menyediakan customer service?|Ya, HANTUSLOT menyediakan layanan customer service untuk membantu pengguna mendapatkan informasi serta menangani pertanyaan terkait penggunaan platform.",
8001
8002  "Bagaimana cara membuat akun HANTUSLOT?|Pengguna dapat mengikuti petunjuk pendaftaran yang tersedia pada platform dengan melengkapi informasi yang diperlukan dan mengikuti proses verifikasi sesuai ketentuan yang berlaku.",
8003
8004  "Apa keunggulan desain HANTUSLOT?|HANTUSLOT menggabungkan elemen visual modern dengan struktur navigasi yang sederhana sehingga tampilan tetap menarik sekaligus mudah digunakan.",
8005
8006  "Apakah HANTUSLOT melakukan pembaruan secara berkala?|HANTUSLOT dapat melakukan pengembangan dan pembaruan pada fitur maupun tampilan untuk meningkatkan kualitas serta kenyamanan penggunaan platform.",
8007
8008  "Perangkat apa saja yang dapat digunakan untuk mengakses HANTUSLOT?|HANTUSLOT dapat diakses melalui perangkat yang memiliki koneksi internet dan browser yang kompatibel, termasuk smartphone, tablet, laptop, dan komputer desktop.",
8009
8010  "Mengapa fitur inovatif menjadi salah satu keunggulan HANTUSLOT?|Fitur inovatif membantu membuat navigasi lebih praktis, informasi lebih mudah ditemukan, serta memberikan pengalaman menggunakan platform game online yang lebih modern dan efisien."
8011];
8012
8013function renderReviews(data){
8014    const container = document.getElementById("reviewsSection");
8015    container.innerHTML="";
8016    data.forEach((r,i)=>{
8017        container.innerHTML += `
8018        <div class="review-card">
8019            <div class="review-top">
8020                <div>
8021                    <div class="review-name">${r.name} <span class="verified">✔ Verified Buyer</span></div>
8022                    <div class="review-stars">${"★".repeat(r.rating)}</div>
8023                </div>
8024                <div>${r.date}</div>
8025            </div>
8026            <p>${r.text}</p>
8027            <div class="helpful" onclick="increaseHelpful(${i})">
8028                👍 Helpful <span id="help-${i}">0</span>
8029            </div>
8030        </div>
8031        `;
8032    });
8033}
8034
8035function increaseHelpful(i){
8036    let el = document.getElementById("help-"+i);
8037    el.innerText = parseInt(el.innerText) + 1;
8038}
8039
8040function renderFAQ(){
8041    const container = document.getElementById("faqSection");
8042    faq.forEach((item)=>{
8043        let parts = item.split("|");
8044        container.innerHTML += `
8045        <div class="faq-item">
8046            <div class="faq-question" onclick="toggleFAQ(this)">
8047                ${parts[0]} <span>▼</span>
8048            </div>
8049            <div class="faq-answer">${parts[1]}</div>
8050        </div>
8051        `;
8052    });
8053}
8054
8055function toggleFAQ(el){
8056    let answer = el.nextElementSibling;
8057    answer.style.display = answer.style.display === "block" ? "none":"block";
8058}
8059
8060function showTab(tab){
8061    document.querySelectorAll(".tab").forEach(t=>t.classList.remove("active"));
8062    event.target.classList.add("active");
8063    if(tab==="reviews"){
8064        document.getElementById("reviewsSection").style.display="block";
8065        document.getElementById("faqSection").style.display="none";
8066    }else{
8067        document.getElementById("reviewsSection").style.display="none";
8068        document.getElementById("faqSection").style.display="block";
8069    }
8070}
8071
8072document.getElementById("searchInput").addEventListener("input", function(){
8073    let value = this.value.toLowerCase();
8074    let filtered = reviews.filter(r => r.text.toLowerCase().includes(value));
8075    renderReviews(filtered);
8076});
8077
8078document.getElementById("sortSelect").addEventListener("change", function(){
8079    let sorted = [...reviews];
8080    if(this.value==="recent"){
8081        sorted.sort((a,b)=> new Date(b.date)-new Date(a.date));
8082    }
8083    if(this.value==="oldest"){
8084        sorted.sort((a,b)=> new Date(a.date)-new Date(b.date));
8085    }
8086    renderReviews(sorted);
8087});
8088
8089renderReviews(reviews);
8090renderFAQ();
8091
8092</script>
vendor: 2 bytes, line 8092
8092
8093<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/shopify-cartjs/1.1.0/cart.min.js"></script>
8093
8094
8095<style>
8096.review-header{
8097    display:flex;
8098    gap:40px;
8099}
8100
8101.rating-summary{
8102    width:300px;
8103}
8104
8105.rating-score{
8106    font-size:42px;
8107    font-weight:bold;
8108}
8109
8110.stars{
8111    color:#f5a623;
8112    font-size:20px;
8113}
8114
8115.progress-bar{
8116    display:flex;
8117    align-items:center;
8118    gap:10px;
8119    margin:6px 0;
8120}
8121
8122.progress{
8123    background:#eee;
8124    height:8px;
8125    flex:1;
8126    border-radius:10px;
8127    overflow:hidden;
8128}
8129
8130.progress-fill{
8131    background:#333;
8132    height:100%;
8133}
8134
8135.tabs{
8136    display:flex;
8137    gap:30px;
8138    margin-top:30px;
8139    border-bottom:1px solid #ddd;
8140}
8141
8142.tab{
8143    padding-bottom:10px;
8144    cursor:pointer;
8145    font-weight:bold;
8146}
8147
8148.tab.active{
8149    border-bottom:3px solid black;
8150}
8151.filter-bar{
8152    display:flex;
8153    justify-content:space-between;
8154    margin:20px 0;
8155}
8156
8157input[type="text"], select{
8158    padding:8px 10px;
8159    border:1px solid #ddd;
8160    border-radius:6px;
8161}
8162
8163.review-card{
8164    border-top:1px solid #eee;
8165    padding:20px 0;
8166}
8167
8168.review-top{
8169    display:flex;
8170    justify-content:space-between;
8171}
8172
8173.review-name{
8174    font-weight:bold;
8175}
8176
8177.verified{
8178    color:green;
8179    font-size:12px;
8180}
8181
8182.review-stars{
8183    color:#f5a623;
8184    margin:5px 0;
8185}
8186
8187.helpful{
8188    font-size:13px;
8189    color:#666;
8190    cursor:pointer;
8191}
8192
8193.helpful span{
8194    margin-left:5px;
8195}
8196.faq-item{
8197    border-top:1px solid #eee;
8198    padding:15px 0;
8199}
8200
8201.faq-question{
8202    font-weight:bold;
8203    cursor:pointer;
8204    display:flex;
8205    justify-content:space-between;
8206}
8207
8208.faq-answer{
8209    display:none;
8210    margin-top:10px;
8211    color:#555;
8212}
8213
8214.rotate{
8215    transform:rotate(180deg);
8216}
8217  .image-editor-popup {
8218    position: fixed;
8219    top: 0;
8220    left: 0;
8221    width: 100vw;
8222    height: 100vh;
8223    z-index: 9999;
8224    display: flex;
8225    align-items: center;
8226    justify-content: center;
8227    padding: 20px;
8228    box-sizing: border-box;
8229  }
8230
8231  .image-editor-overlay {
8232    position: absolute;
8233    top: 0;
8234    left: 0;
8235    width: 100%;
8236    height: 100%;
8237    background: rgba(0, 0, 0, 0.7);
8238    backdrop-filter: blur(2px);
8239  }
8240
8241  .image-editor-modal {
8242    position: relative;
8243    background: white;
8244    border-radius: 12px;
8245    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
8246    max-width: min(900px, calc(100vw - 40px));
8247    max-height: min(700px, calc(100vh - 40px));
8248    width: 100%;
8249    display: flex;
8250    flex-direction: column;
8251    overflow: auto;
8252    margin: auto;
8253    transform: translateZ(0);
8254  }
8255
8256  .image-editor-header {
8257    display: flex;
8258    justify-content: space-between;
8259    align-items: center;
8260    padding: 20px 24px;
8261    border-bottom: 1px solid #e5e7eb;
8262    background: #f9fafb;
8263  }
8264
8265  .image-editor-header h3 {
8266    margin: 0;
8267    font-size: 18px;
8268    font-weight: 600;
8269    color: #111827;
8270  }
8271
8272  .close-editor {
8273    background: none;
8274    border: none;
8275    font-size: 24px;
8276    color: #6b7280;
8277    cursor: pointer;
8278    padding: 0;
8279    width: 32px;
8280    height: 32px;
8281    display: flex;
8282    align-items: center;
8283    justify-content: center;
8284    border-radius: 6px;
8285    transition: all 0.2s;
8286  }
8287
8288  .close-editor:hover {
8289    background: #f3f4f6;
8290    color: #374151;
8291  }
8292
8293  .image-editor-content {
8294    display: flex;
8295    flex: 1;
8296    min-height: 500px;
8297  }
8298
8299  .image-editor-canvas {
8300    flex: 1;
8301    padding: 20px;
8302    background: #f8fafc;
8303    display: flex;
8304    align-items: center;
8305    justify-content: center;
8306    min-height: 400px;
8307  }
8308
8309  .image-editor-canvas img {
8310    max-width: 100%;
8311    max-height: 100%;
8312    display: block;
8313  }
8314
8315  .image-editor-controls {
8316    width: 280px;
8317    padding: 20px;
8318    background: white;
8319    border-left: 1px solid #e5e7eb;
8320    overflow-y: auto;
8321  }
8322
8323  .control-group {
8324    margin-bottom: 20px;
8325    padding-bottom: 16px;
8326    border-bottom: 1px solid #f3f4f6;
8327  }
8328
8329  .control-group:last-child {
8330    border-bottom: none;
8331    margin-bottom: 0;
8332  }
8333
8334  .control-group label {
8335    display: block;
8336    font-size: 14px;
8337    font-weight: 500;
8338    color: #374151;
8339    margin-bottom: 8px;
8340  }
8341
8342  .control-group select,
8343  .control-group input[type="range"] {
8344    width: 100%;
8345    padding: 8px 12px;
8346    border: 1px solid #d1d5db;
8347    border-radius: 6px;
8348    font-size: 14px;
8349    background: white;
8350  }
8351
8352  .control-group input[type="range"] {
8353    -webkit-appearance: none;
8354    appearance: none;
8355    height: 6px;
8356    background: #e5e7eb;
8357    border-radius: 3px;
8358    padding: 0;
8359  }
8360
8361  .control-group input[type="range"]::-webkit-slider-thumb {
8362    -webkit-appearance: none;
8363    appearance: none;
8364    width: 18px;
8365    height: 18px;
8366    background: #3b82f6;
8367    border-radius: 50%;
8368    cursor: pointer;
8369  }
8370
8371  .control-group button {
8372    background: #f3f4f6;
8373    border: 1px solid #d1d5db;
8374    border-radius: 6px;
8375    padding: 8px 12px;
8376    font-size: 13px;
8377    color: #374151;
8378    cursor: pointer;
8379    margin-right: 8px;
8380    margin-bottom: 8px;
8381    transition: all 0.2s;
8382  }
8383
8384  .control-group button:hover {
8385    background: #e5e7eb;
8386    border-color: #9ca3af;
8387  }
8388
8389  .control-group button:active {
8390    transform: translateY(1px);
8391  }
8392
8393  #imageSizeInfo {
8394    font-size: 12px;
8395    color: #6b7280;
8396    margin-top: 8px;
8397    display: flex;
8398    flex-direction: column;
8399    gap: 4px;
8400  }
8401
8402  #imageSizeInfo span {
8403    display: block;
8404    padding: 4px 8px;
8405    background: #f9fafb;
8406    border-radius: 4px;
8407    border: 1px solid #e5e7eb;
8408  }
8409
8410  #originalSize {
8411    color: #374151;
8412  }
8413
8414  #newSize {
8415    color: #059669;
8416    font-weight: 500;
8417  }
8418
8419  .image-editor-footer {
8420    display: flex;
8421    justify-content: flex-end;
8422    gap: 12px;
8423    padding: 20px 24px;
8424    border-top: 1px solid #e5e7eb;
8425    background: #f9fafb;
8426  }
8427
8428  .btn-cancel {
8429    background: white;
8430    border: 1px solid #d1d5db;
8431    border-radius: 6px;
8432    padding: 10px 20px;
8433    font-size: 14px;
8434    color: #374151;
8435    cursor: pointer;
8436    transition: all 0.2s;
8437  }
8438
8439  .btn-cancel:hover {
8440    background: #f9fafb;
8441    border-color: #9ca3af;
8442  }
8443
8444  .btn-save {
8445    background: #3b82f6;
8446    border: 1px solid #3b82f6;
8447    border-radius: 6px;
8448    padding: 10px 20px;
8449    font-size: 14px;
8450    color: white;
8451    cursor: pointer;
8452    transition: all 0.2s;
8453  }
8454
8455  .btn-save:hover {
8456    background: #2563eb;
8457    border-color: #2563eb;
8458  }
8459
8460  @media (max-width: 768px) {
8461    .image-editor-popup {
8462      padding: 10px;
8463    }
8464    
8465    .image-editor-modal {
8466      max-width: calc(100vw - 20px);
8467      max-height: calc(100vh - 20px);
8468      width: 100%;
8469      height: auto;
8470      min-height: 80vh;
8471    }
8472
8473    .image-editor-content {
8474      flex-direction: column;
8475    }
8476
8477    .image-editor-controls {
8478      width: 100%;
8479      border-left: none;
8480      border-top: 1px solid #e5e7eb;
8481      max-height: 200px;
8482    }
8483
8484    .image-editor-canvas {
8485      min-height: 300px;
8486    }
8487  }
8488
8489  .steps-card-preview.loading-upload {
8490    position: relative;
8491    pointer-events: none;
8492    opacity: 0.7;
8493  }
8494
8495  .steps-card-preview.loading-upload::after {
8496    content: '';
8497    position: absolute;
8498    top: 0;
8499    left: 0;
8500    right: 0;
8501    bottom: 0;
8502    background: rgba(255, 255, 255, 0.8);
8503    border-radius: inherit;
8504    z-index: 1;
8505  }
8506
8507  .ajax-loader {
8508    position: absolute;
8509    top: 50%;
8510    left: 50%;
8511    transform: translate(-50%, -50%);
8512    z-index: 2;
8513    width: 40px;
8514    height: 40px;
8515    border: 4px solid #f3f3f3;
8516    border-top: 4px solid #3498db;
8517    border-radius: 50%;
8518    animation: spin 1s linear infinite;
8519    display: none;
8520  }
8521
8522  .image-editor-popup {
8523    opacity: 0;
8524    visibility: hidden;
8525    transition: opacity 0.3s ease, visibility 0.3s ease;
8526    display: flex !important;
8527  }
8528
8529  .image-editor-popup.show {
8530    opacity: 1;
8531    visibility: visible;
8532  }
8533
8534  .image-editor-modal {
8535    transform: translateY(-20px) scale(0.9);
8536    transition: transform 0.3s ease;
8537  }
8538
8539  .image-editor-popup.show .image-editor-modal {
8540    transform: translateY(0) scale(1);
8541  }
8542
8543  @keyframes spin {
8544    0% { transform: translate(-50%, -50%) rotate(0deg); }
8545    100% { transform: translate(-50%, -50%) rotate(360deg); }
8546  }
8547
8548  .skeleton-date-loader {
8549    display: flex;
8550    gap: 8px;
8551    flex-wrap: wrap;
8552  }
8553
8554  .skeleton-date-button {
8555    width: calc(14.285% - 7px);
8556    min-width: 40px;
8557    height: 40px;
8558    background: #f5f5f5;
8559    border: 1px solid #e0e0e0;
8560    border-radius: 50%;
8561    position: relative;
8562    overflow: hidden;
8563    display: flex;
8564    flex-direction: column;
8565    align-items: center;
8566    justify-content: center;
8567    gap: 4px;
8568  }
8569
8570  .skeleton-date-button::before {
8571    content: '';
8572    position: absolute;
8573    top: 0;
8574    left: -100%;
8575    width: 100%;
8576    height: 100%;
8577    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.6), transparent);
8578    animation: skeleton-shimmer 1.5s ease-in-out infinite;
8579  }
8580
8581  .skeleton-date-text {
8582    width: 30px;
8583    height: 10px;
8584    background: #e0e0e0;
8585    border-radius: 4px;
8586  }
8587
8588  .skeleton-date-number {
8589    width: 20px;
8590    height: 14px;
8591    background: #d0d0d0;
8592    border-radius: 4px;
8593  }
8594
8595  @keyframes skeleton-shimmer {
8596    0% {
8597      left: -100%;
8598    }
8599    100% {
8600      left: 100%;
8601    }
8602  }
8603
8604  @media (max-width: 768px) {
8605    .skeleton-date-button {
8606      width: calc(16.666% - 7px);
8607      min-width: 40px;
8608      height: 40px;
8609    }
8610  }
8611
8612  @media (max-width: 480px) {
8613    .skeleton-date-button {
8614      width: calc(20% - 7px);
8615      min-width: 40px;
8616      height: 40px;
8617    }
8618    
8619    .skeleton-date-text {
8620      width: 25px;
8621      height: 8px;
8622    }
8623    
8624    .skeleton-date-number {
8625      width: 18px;
8626      height: 12px;
8627    }
8628  }
8629
8630  .ocr-address-popup {
8631    position: fixed;
8632    top: 0;
8633    left: 0;
8634    width: 100vw;
8635    height: 100vh;
8636    z-index: 9998;
8637    display: none;
8638    align-items: center;
8639    justify-content: center;
8640    padding: 20px;
8641    box-sizing: border-box;
8642  }
8643
8644  .ocr-address-popup.show {
8645    display: flex;
8646  }
8647
8648  .ocr-popup-overlay {
8649    position: absolute;
8650    top: 0;
8651    left: 0;
8652    width: 100%;
8653    height: 100%;
8654    background: rgba(0, 0, 0, 0.6);
8655    backdrop-filter: blur(2px);
8656    cursor: pointer;
8657  }
8658
8659  .ocr-popup-content {
8660    position: relative;
8661    background: white;
8662    border-radius: 12px;
8663    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
8664    max-width: 600px;
8665    max-height: 80vh;
8666    width: 100%;
8667    overflow: hidden;
8668    display: flex;
8669    flex-direction: column;
8670  }
8671
8672  .ocr-popup-header {
8673    display: flex;
8674    justify-content: space-between;
8675    align-items: center;
8676    padding: 20px 24px;
8677    border-bottom: 1px solid #e5e7eb;
8678    background: #f9fafb;
8679  }
8680
8681  .ocr-popup-header h3 {
8682    margin: 0;
8683    font-size: 18px;
8684    font-weight: 600;
8685    color: #1f2937;
8686  }
8687
8688  .close-ocr-popup {
8689    background: none;
8690    border: none;
8691    font-size: 28px;
8692    color: #6b7280;
8693    cursor: pointer;
8694    padding: 0;
8695    width: 32px;
8696    height: 32px;
8697    display: flex;
8698    align-items: center;
8699    justify-content: center;
8700    transition: color 0.2s;
8701  }
8702
8703  .close-ocr-popup:hover {
8704    color: #1f2937;
8705  }
8706
8707  .ocr-popup-body {
8708    overflow-y: auto;
8709    padding: 20px;
8710    flex: 1;
8711  }
8712
8713  .ocr-address-options {
8714    display: flex;
8715    flex-direction: column;
8716    gap: 12px;
8717  }
8718
8719  .ocr-address-option {
8720    padding: 16px;
8721    border: 2px solid #e5e7eb;
8722    border-radius: 8px;
8723    cursor: pointer;
8724    transition: all 0.2s;
8725    background: white;
8726  }
8727
8728  .ocr-address-option:hover {
8729    border-color: #3b82f6;
8730    background: #f0f4ff;
8731    box-shadow: 0 2px 8px rgba(59, 130, 246, 0.1);
8732  }
8733
8734  .ocr-address-option.selected {
8735    border-color: #3b82f6;
8736    background: #eff6ff;
8737  }
8738
8739  .address-content {
8740    display: flex;
8741    flex-direction: column;
8742    gap: 4px;
8743  }
8744
8745  .address-text {
8746    margin: 0;
8747    font-size: 15px;
8748    font-weight: 500;
8749    color: #1f2937;
8750    line-height: 1.4;
8751  }
8752
8753  .address-details {
8754    margin: 0;
8755    font-size: 13px;
8756    color: #6b7280;
8757  }
8758
8759  body.ocr-popup-open {
8760    overflow: hidden;
8761  }
8762
8763  @media (max-width: 768px) {
8764    .ocr-popup-content {
8765      max-width: calc(100vw - 40px);
8766      max-height: 85vh;
8767    }
8768
8769    .ocr-popup-header h3 {
8770      font-size: 16px;
8771    }
8772
8773    .address-text {
8774      font-size: 14px;
8775    }
8776  }
8777</style>
8778
8779<script>
8780  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});
8781
8782  const productType = $("[data-product-type]").data("product-type")
8783  const productDate = Date.parse(new Date())
8784  
8785  const shop = 'outerbloom1.myshopify.com'
8786  const host = 'https://app.asmaraku.com'
8787  // const host = 'https://d8fe-103-3-220-56.ngrok-free.app'
8788
8789  const gsheet = "https://script.google.com/macros/s/AKfycbyqa6mPD6lVjU6hiHr12J8URZ2aJBGyxBsGQ0QtEIDari-rBk_9vSOITjSSmUXL1NwxEg/exec"
8790  
8791  const qrID = "230226" + randomString(4, 'aAbCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ')
8792
8793  $("#properties-time").val(new Date().getTime())
8794
8795  const isIOS = /iPhone|iPad|iPod/i.test(navigator.userAgent);
8796
8797  if(!isIOS) {
8798    $("#full-date").attr("type", "button")
8799  }
8800  
8801  // Shipping Analytics Tracker
8802  class ShippingAnalytics {
8803    constructor() {
8804      this.endpoint = host + '/api/track-shipping';
8805      this.userId = '';
8806      this.userIp = document.body.getAttribute('data-ip') || 'unknown';
8807      this.shop = '';
8808    }
8809
8810    async track(action, metadata = {}) {
8811      try {
8812        const payload = {
8813          endpoint: action,
8814          metadata: {
8815            userIp: this.userIp,
8816            shop: this.shop,
8817            timestamp: new Date().toISOString(),
8818            userAgent: navigator.userAgent,
8819            url: window.location.href,
8820            ...metadata
8821          }
8822        };
8823
8824        const response = await fetch(this.endpoint, {
8825          method: 'POST',
8826          headers: {
8827            'Content-Type': 'application/json'
8828          },
8829          body: JSON.stringify(payload)
8830        });
8831
8832        if (!response.ok) {
8833          console.warn('Analytics tracking failed:', response.status);
8834        }
8835      } catch (error) {
8836        console.error('Analytics error:', error);
8837        // Fail silently, tidak block user flow
8838      }
8839    }
8840  }
8841
8842  // Initialize
8843  const analytics = new ShippingAnalytics();
8844
8845  let dateTime = new Date();
8846  let today = dateTime.getDate();
8847  let day = dateTime.getDay();
8848  let hour = dateTime.getHours();
8849  let min = dateTime.getMinutes();
8850  let timeOfDay = hour + (min / 100);
8851
8852  async function getFetch(url) {
8853    const response = await fetch(url);
8854    let status = false
8855    let result
8856    if(response.ok) {
8857      status = true
8858      result = await response.json();
8859    }
8860    return {
8861      status,
8862      data: result
8863    }
8864  }
8865
8866  function setCookie(cname, cvalue, exMins) {
8867    var d = new Date();
8868    d.setTime(d.getTime() + (exMins*60*1000));
8869    var expires = "expires="+d.toUTCString();  
8870    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
8871  }
8872
8873  function getCookie(cname) {
8874    let name = cname + "=";
8875    let decodedCookie = decodeURIComponent(document.cookie);
8876    let ca = decodedCookie.split(';');
8877    for(let i = 0; i <ca.length; i++) {
8878      let c = ca[i];
8879      while (c.charAt(0) == ' ') {
8880        c = c.substring(1);
8881      }
8882      if (c.indexOf(name) == 0) {
8883        return c.substring(name.length, c.length);
8884      }
8885    }
8886    return "";
8887  }
8888
8889  // Initialize rupiah formatter before it's used in renderAddress
8890  let rupiah = new Intl.NumberFormat('id-ID', {
8891    style: 'currency',
8892    currency: 'IDR',
8893    maximumFractionDigits: 0, 
8894    minimumFractionDigits: 0
8895  });
8896
8897  // Helper functions for localStorage (1 day storage)
8898  function getStorageKey(type, city = '') {
8899    const productId = '7881418965207';
8900    if (type === 'date') {
8901      // For date, only use product ID (no city)
8902      return `delivery_${type}_${productId}`;
8903    }
8904    // For other types (zip), use city
8905    return `delivery_${type}_${productId}_${city}`;
8906  }
8907
8908  function saveToStorage(key, data) {
8909    try {
8910      const item = {
8911        data: data,
8912        savedAt: new Date().getTime()
8913      };
8914      localStorage.setItem(key, JSON.stringify(item));
8915    } catch (e) {
8916      console.error('Error saving to localStorage:', e);
8917    }
8918  }
8919
8920  function getFromStorage(key) {
8921    try {
8922      const itemStr = localStorage.getItem(key);
8923      if (!itemStr) {
8924        return null;
8925      }
8926      const item = JSON.parse(itemStr);
8927      const now = new Date().getTime();
8928      const oneHour = 60 * 60 * 1000; // 1 hour in milliseconds
8929      
8930      // Check if data is older than 1 hour
8931      if (now - item.savedAt > oneHour) {
8932        localStorage.removeItem(key);
8933        return null;
8934      }
8935      return item.data;
8936    } catch (e) {
8937      console.error('Error reading from localStorage:', e);
8938      return null;
8939    }
8940  }
8941
8942  async function renderDate(city) {
8943    const storageKey = getStorageKey('date');
8944    const storedData = getFromStorage(storageKey);
8945    
8946    let data;
8947    if (storedData) {
8948      data = storedData;
8949    } else {
8950      let dataDate = await getFetch(`${host}/api/shipping/date?domain=${shop}&productId=7881418965207&source=web`);
8951      data = dataDate?.data;
8952      
8953      // Save to localStorage (only once per product)
8954      if (data && data.date && data.time) {
8955        saveToStorage(storageKey, data);
8956      }
8957    }
8958    
8959    // Use the helper function to render
8960    if (data && data.date && data.time) {
8961      renderDeliveryDateFromData(data);
8962      
8963      if(productType !== '') {
8964        console.log("clarity event " + productType + ' calendaring')
8965        window.clarity("event", `${productType} calendaringSchedule`)
8966      }
8967    } else {
8968      console.error('Invalid delivery date data');
8969      showDeliveryPlaceholder();
8970    }
8971  }
8972
8973  // Function to get province from city (called on-demand, not on initial render)
8974  async function getProvince(city) {
8975    if (!city || city === '') {
8976      return;
8977    }
8978    
8979    // Check localStorage first
8980    const storageKey = getStorageKey('province', city);
8981    const storedProvince = getFromStorage(storageKey);
8982    
8983    if (storedProvince) {
8984      console.log('Using stored province data for:', city);
8985      $("#province").val(storedProvince);
8986      return storedProvince;
8987    }
8988    
8989    // Fetch from API if not in localStorage
8990    console.log('Fetching province data from API for:', city);
8991    let { data: { province } } = await getFetch(`${host}/api/shipping/address/province?city=${city}&source=web`);
8992    console.log(province, 'province')
8993    $("#province").val(province)
8994    
8995    // Save to localStorage
8996    if (province) {
8997      saveToStorage(storageKey, province);
8998      console.log('Saved province to localStorage for:', city);
8999    }
9000    
9001    return province;
9002  }
9003
9004  async function renderAddress() {
9005    let current
9006    if(getCookie("location_delivery")){
9007      current = getCookie("location_delivery").charAt(0).toUpperCase() + getCookie("location_delivery").slice(1)
9008    }
9009    
9010    const deliveryCity = document.getElementById("cities");
9011    
9012    // Check localStorage first
9013    const cityDataKey = `delivery_city_data_7881418965207`;
9014    const storedCityData = getFromStorage(cityDataKey);
9015    
9016    if (storedCityData && storedCityData.cities && storedCityData.cities.length > 0) {
9017      const allCities = storedCityData.cities;
9018      const data = storedCityData.fullData;
9019      
9020      const htmlAddress = [];
9021      for(let i = 0; i < data?.length; i++) {
9022        if(data[i]){
9023          const price = rupiah.format(data[i]?.rate)
9024          let promo = '(Promo Free Delivery)'
9025          if(data[i]?.name === 'Jakarta - PickUp ASHTA'){
9026            promo = '(at SCBD, Ashta)'
9027          } else if(data[i]?.name === 'Jakarta - PickUp ITC'){
9028            promo = '(at Kuningan, ITC Kuningan)'
9029          } else if(data[i]?.name === 'BSD - PickUp'){
9030            promo = '(at Goldfinch Gading Serpong)'
9031          } else if(data[i]?.name === 'Kota Lainnya'){
9032            promo = ''
9033          }
9034          
9035          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>`)
9036        }
9037      }
9038      
9039      if(deliveryCity) {
9040        deliveryCity.insertAdjacentHTML("beforeend", htmlAddress.join(''))
9041      }
9042      
9043      return storedCityData;
9044    }
9045    
9046    // If no stored data, show skeleton and fetch from API
9047    if(deliveryCity && deliveryCity.options.length === 1) { // Only default option
9048      const skeletonOptions = `
9049        <option disabled>Loading cities...</option>
9050        <option disabled>&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;</option>
9051        <option disabled>&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;</option>
9052        <option disabled>&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;&#9679;</option>
9053      `;
9054      deliveryCity.insertAdjacentHTML("beforeend", skeletonOptions);
9055    }
9056    
9057    let address = await getFetch(`${host}/api/shipping/address?domain=${shop}&productId=7881418965207&source=web`);
9058    console.log(address)
9059    const data = address?.data?.city
9060    const htmlAddress = []
9061    const grouping = []
9062    const allCities = [] // Store all city names
9063    
9064    for(let i = 0;i < data?.length;i++) {
9065      if(data[i]){
9066        if(data[i]?.group) {
9067          grouping.push(data[i].group)
9068        }
9069        const price = rupiah.format(data[i]?.rate)
9070        let promo = '(Promo Free Delivery)'
9071        if(data[i]?.name === 'Jakarta - PickUp ASHTA'){
9072          promo = '(at SCBD, Ashta)'
9073        } else if(data[i]?.name === 'Jakarta - PickUp ITC'){
9074          promo = '(at Kuningan, ITC Kuningan)'
9075        } else if(data[i]?.name === 'BSD - PickUp'){
9076          promo = '(at Goldfinch Gading Serpong)'
9077        } else if(data[i]?.name === 'Kota Lainnya'){
9078          promo = ''
9079        }
9080        
9081        // Add city name to allCities array
9082        allCities.push(data[i]?.name);
9083        
9084        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>`)
9085      }
9086    }
9087    
9088    if(deliveryCity) {
9089      // Remove skeleton options before adding real options
9090      const skeletonOpts = deliveryCity.querySelectorAll('option[disabled]');
9091      skeletonOpts.forEach(opt => {
9092        if (opt.textContent.includes('Loading') || opt.textContent.includes('●')) {
9093          opt.remove();
9094        }
9095      });
9096      
9097      deliveryCity.insertAdjacentHTML("beforeend", htmlAddress.join(''))
9098    }
9099    
9100    // Save all cities to localStorage for 1 day
9101    const saveCityDataKey = `delivery_city_data_7881418965207`;
9102    const saveCityData = {
9103      cities: allCities,
9104      fullData: data  // Save full data for later use
9105    };
9106    saveToStorage(saveCityDataKey, saveCityData);
9107    console.log('Saved city data:', saveCityData);
9108    
9109    return saveCityData;
9110  }
9111  
9112  // Function to get user city from IP address
9113  async function getUserCityFromIP(availableCities) {
9114    try {
9115      // Try to get location from IP
9116      const ipResponse = await fetch('https://ipapi.co/json/');
9117      const ipData = await ipResponse.json();
9118      const userCity = ipData.city;
9119      
9120      console.log('User city from IP:', userCity);
9121      
9122      // Check if user city exists in available cities
9123      const matchedCity = availableCities.find(city => 
9124        city.toLowerCase().includes(userCity.toLowerCase()) || 
9125        userCity.toLowerCase().includes(city.toLowerCase())
9126      );
9127      
9128      if (matchedCity) {
9129        console.log('Matched city found:', matchedCity);
9130        return matchedCity;
9131      }
9132      
9133      console.log('User city not in available cities');
9134      return "";
9135    } catch (error) {
9136      console.error('Error getting user location:', error);
9137      return "";
9138    }
9139  }
9140
9141  // Function to render zip codes (called on-demand, not on initial render)
9142  async function renderZip(v, v2, v3) {
9143    const deliveryZip = document.getElementById("zip");
9144    if(v === '') {
9145      return
9146    }
9147    
9148    // Check localStorage first
9149    const storageKey = getStorageKey('zip', v);
9150    const storedZip = getFromStorage(storageKey);
9151    
9152    let zip;
9153    if (storedZip) {
9154      console.log('Using stored zip code data for:', v);
9155      zip = storedZip;
9156    } else {
9157      console.log('Fetching zip code data from API for:', v);
9158      let dataZip = await getFetch(`${host}/api/shipping/address/zip?city=${v}&city2=${v2}&city3=${v3}&source=web`);
9159      zip = dataZip?.data?.zip;
9160      console.log(zip)
9161      
9162      // Save to localStorage
9163      if (zip && zip.length > 0) {
9164        saveToStorage(storageKey, zip);
9165      }
9166    }
9167    
9168    let htmlZip = []
9169    for(let i = 0; i < zip?.length;i++) {
9170      htmlZip.push(`<option value="${zip[i]?.postalCode} - ${zip[i]?.subdistrict}">${zip[i]?.postalCode} - ${zip[i]?.subdistrict} - ${zip[i]?.city}</option>`)
9171    }
9172    deliveryZip.insertAdjacentHTML("beforeend", htmlZip.join(''))
9173    
9174    // Initialize Select2 with search for zip code
9175    if(!isIOS) {
9176      setTimeout(() => {
9177        initSelect2('#zip', {
9178          placeholder: 'Postal Code'
9179        });
9180      }, 100);
9181    }
9182  }
9183  
9184  // Add skeleton loader for delivery date
9185  function showDateSkeleton() {
9186    const deliveryDate = document.getElementById("deliveryDate");
9187    if(deliveryDate && deliveryDate.children.length === 0) {
9188      const skeletonHTML = `
9189        <div class="skeleton-date-loader">
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 class="skeleton-date-button">
9201          </div>
9202          <div class="skeleton-date-button">
9203          </div>
9204        </div>
9205      `;
9206      deliveryDate.insertAdjacentHTML("afterbegin", skeletonHTML);
9207    }
9208  }
9209  
9210  // Show static disabled buttons for delivery date and time
9211  function showDeliveryPlaceholder() {
9212    const deliveryDate = document.getElementById("deliveryDate");
9213    const deliveryTime = document.getElementById("deliveryTime");
9214    
9215    if(deliveryDate) {
9216      const staticDates = `
9217        <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first">
9218          Mon<span>--</span>
9219        </button>
9220        <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first">
9221          Tue<span>--</span>
9222        </button>
9223        <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first">
9224          Wed<span>--</span>
9225        </button>
9226        <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first">
9227          Thu<span>--</span>
9228        </button>
9229        <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first">
9230          Fri<span>--</span>
9231        </button>
9232        <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first">
9233          Sat<span>--</span>
9234        </button>
9235      `;
9236      deliveryDate.innerHTML = staticDates;
9237    }
9238    
9239    if(deliveryTime) {
9240      const staticTimes = `
9241        <button class="time-single calendarbutton2 btn steps-btn" disabled title="Please select delivery city first">
9242          Morning<br/>08:00-13:00
9243        </button>
9244        <button class="time-single calendarbutton2 btn steps-btn" disabled title="Please select delivery city first">
9245          Afternoon<br/>13:00-18:00
9246        </button>
9247        <button class="time-single calendarbutton2 btn steps-btn" disabled title="Please select delivery city first">
9248          Evening<br/>17:00-22:00
9249        </button>
9250      `;
9251      deliveryTime.innerHTML = staticTimes;
9252    }
9253  }
9254  
9255  // Helper function to render delivery date and time from data object
9256  function renderDeliveryDateFromData(data) {
9257    const deliveryDate = document.getElementById("deliveryDate");
9258    const deliveryTime = document.getElementById("deliveryTime");
9259    
9260    // Check if at least one element exists
9261    if (!deliveryDate && !deliveryTime) {
9262      console.error('Cannot render delivery date: both deliveryDate and deliveryTime elements are missing');
9263      return false;
9264    }
9265    
9266    // Check if data is valid
9267    if (!data || !data.date || !data.time) {
9268      console.error('Cannot render delivery date: invalid or missing data');
9269      return false;
9270    }
9271    
9272    const date = data.date;
9273    const time = data.time;
9274    const weekday = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
9275    const monthly = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
9276    
9277    // Get today's date in Jakarta timezone (UTC+7)
9278    const todayJakarta = new Date(new Date().toLocaleString("en-US", {timeZone: "Asia/Jakarta"}));
9279    const today = todayJakarta.getDate();
9280    
9281    const htmlDate = [];
9282    for(let i = 0; i < date.length; i++) {
9283      const full = date[i].date;
9284      
9285      // Convert UTC date to Jakarta timezone (UTC+7)
9286      const utcDate = new Date(date[i].date);
9287      const jakartaDateString = utcDate.toLocaleString("en-US", {timeZone: "Asia/Jakarta"});
9288      const jakartaDate = new Date(jakartaDateString);
9289      
9290      const dt = jakartaDate.getDate();
9291      const monthIndex = jakartaDate.getMonth();
9292      const yr = jakartaDate.getFullYear();
9293      const day = weekday[jakartaDate.getDay()];
9294      const mt = monthly[monthIndex];
9295      
9296      const isDate = Boolean(date[i].isEnabled);
9297      const cutoffpagi = date[i].cutoff?.pagi;
9298      const cutoffsiang = date[i].cutoff?.siang;
9299      const cutoffMalam = date[i].cutoff?.malam;
9300
9301      console.log(cutoffMalam, 'cutoffMalam')
9302      
9303      const buttonHTML = `
9304        <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'}>
9305          ${dt === today ? `Today<span>${dt < 10 ? '0' + dt : dt}</span>` : `${day}<span>${dt < 10 ? '0' + dt : dt}</span>`}
9306        </button>
9307      `;
9308      
9309      htmlDate.push(buttonHTML);
9310    }
9311    
9312    const htmlTime = [];
9313    for(let i = 0; i < time.length; i++) {
9314      const timeText = time[i].text;
9315      const timeTime = time[i].time;
9316      const timeEnabled = time[i].isEnabled;
9317      htmlTime.push(`
9318        <button class="time-single calendarbutton2 btn steps-btn" data-time="${timeText}" ${timeEnabled ? '' : 'disabled'}>${timeText}<br/>${timeTime}</button>
9319      `);
9320    }
9321    
9322    // Render delivery date if element exists
9323    if (deliveryDate) {
9324      deliveryDate.innerHTML = htmlDate.join('');
9325      
9326      // Log all buttons with their disabled status
9327      const buttons = deliveryDate.querySelectorAll('button');
9328      buttons.forEach((btn, idx) => {
9329        console.log(`Button ${idx}: date=${btn.dataset.date}, hasDisabled=${btn.hasAttribute('disabled')}, disabled=${btn.disabled}`);
9330      });
9331      
9332      // Apply pickup date restrictions if pickup mode is active
9333      if (window.applyPickupDateRestrictions === true) {
9334        applyPickupDateRestrictions(deliveryDate);
9335      }
9336    }
9337    
9338    // Render delivery time if element exists
9339    if (deliveryTime) {
9340      deliveryTime.innerHTML = htmlTime.join('');
9341    }
9342    
9343    return true;
9344  }
9345  
9346  // Function to apply pickup date restrictions
9347  function applyPickupDateRestrictions(deliveryDateElement) {
9348    if (!deliveryDateElement) return;
9349    
9350    // Get current time in Jakarta timezone
9351    const now = new Date(new Date().toLocaleString("en-US", {timeZone: "Asia/Jakarta"}));
9352    const currentHour = now.getHours();
9353    const currentMinute = now.getMinutes();
9354    const currentTime = currentHour + (currentMinute / 60); // e.g., 15.5 for 3:30 PM
9355    const currentDate = now.getDate();
9356    
9357    const isAfter3PM = currentTime >= 15.0; // 3 PM = 15:00
9358    
9359    // Check product tags
9360    const isPickupInhouse = false;
9361    const isPickupVendor = false;
9362    
9363    console.log('Applying pickup date restrictions:', {
9364      isPickupInhouse,
9365      isPickupVendor,
9366      currentDate,
9367      currentTime: currentTime.toFixed(2),
9368      isAfter3PM
9369    });
9370    
9371    const dateButtons = deliveryDateElement.querySelectorAll('button.date-single');
9372    
9373    dateButtons.forEach((button, index) => {
9374      const buttonDate = parseInt(button.dataset.date, 10);
9375      
9376      if (isPickupInhouse) {
9377        // For pickup-itcinhouse:
9378        // - Disable today (compare actual date, not index)
9379        // - If after 3 PM, also disable tomorrow (currentDate + 1)
9380        
9381        // Check if this button is today
9382        if (buttonDate === currentDate) {
9383          button.disabled = true;
9384          button.classList.add('stop');
9385          button.title = 'Pickup not available for today';
9386          console.log(`Disabled button ${index} (date ${buttonDate} = today) for pickup-itcinhouse`);
9387        } 
9388        // Check if this button is tomorrow AND it's after 3 PM
9389        else if (buttonDate === currentDate + 1 && isAfter3PM) {
9390          button.disabled = true;
9391          button.classList.add('stop');
9392          button.title = 'Pickup not available (after 3 PM cutoff)';
9393          console.log(`Disabled button ${index} (date ${buttonDate} = tomorrow) for pickup-itcinhouse (after 3 PM)`);
9394        }
9395      } else if (isPickupVendor) {
9396        // For pickup-itcvendor:
9397        // - Disable dates before day 14
9398        // - If today is day 13 and after 3 PM, also disable day 14
9399        if (buttonDate < 14) {
9400          button.disabled = true;
9401          button.classList.add('stop');
9402          button.title = 'Pickup not available before day 14';
9403          console.log(`Disabled button ${index} (date ${buttonDate}) for pickup-itcvendor (before day 14)`);
9404        } else if (buttonDate === 14 && currentDate === 13 && isAfter3PM) {
9405          button.disabled = true;
9406          button.classList.add('stop');
9407          button.title = 'Pickup not available (after 3 PM cutoff on day 13)';
9408          console.log(`Disabled button ${index} (date ${buttonDate}) for pickup-itcvendor (day 13 after 3 PM)`);
9409        }
9410      }
9411    });
9412  }
9413  
9414  // Make function globally accessible
9415  window.applyPickupDateRestrictionsFunction = applyPickupDateRestrictions;
9416
9417  
9418  // Render address first, then fetch and display delivery dates immediately
9419  async function initializeDeliveryOptions() {
9420    try {
9421      // Check if delivery date elements exist on this page
9422      const deliveryDate = document.getElementById("deliveryDate");
9423      const deliveryTime = document.getElementById("deliveryTime");
9424      
9425      // Skip if BOTH elements are missing
9426      if (!deliveryDate && !deliveryTime) {
9427        console.log('Both delivery date and time elements not found, skipping delivery date initialization');
9428        // Still render address for city selection
9429        await renderAddress();
9430        return;
9431      }
9432      
9433      // Log which elements are available
9434      if (!deliveryDate) console.log('deliveryDate element not found, will only render delivery time');
9435      if (!deliveryTime) console.log('deliveryTime element not found, will only render delivery date');
9436      
9437      // Check if there's stored delivery date data for this product FIRST
9438      const dateStorageKey = getStorageKey('date');
9439      const storedDateData = getFromStorage(dateStorageKey);
9440      
9441      if (storedDateData && storedDateData.date && storedDateData.time) {
9442        // If we have stored date data, render it immediately
9443        const rendered = renderDeliveryDateFromData(storedDateData);
9444        if (!rendered) {
9445          console.warn('Failed to render stored delivery date, will try fetching from API');
9446        }
9447      } else {
9448        // No stored data, fetch from API immediately (without waiting for city selection)
9449        console.log('No stored delivery date found, fetching from API immediately...');
9450        
9451        // Show skeleton loader while fetching
9452        showDateSkeleton();
9453        
9454        // Fetch delivery date data from API
9455        try {
9456          const dataDate = await getFetch(`${host}/api/shipping/date?domain=${shop}&productId=7881418965207&source=web`);
9457          console.log('API Response:', dataDate);
9458          
9459          if (dataDate?.data?.date && dataDate?.data?.time) {
9460            // Save to localStorage for next time
9461            saveToStorage(dateStorageKey, dataDate.data);
9462            
9463            // Render the fetched data
9464            const rendered = renderDeliveryDateFromData(dataDate.data);
9465            if (!rendered) {
9466              console.error('Failed to render delivery date from API response');
9467              showDeliveryPlaceholder();
9468            }
9469          } else {
9470            console.error('Invalid delivery date data received from API');
9471            showDeliveryPlaceholder();
9472          }
9473        } catch (error) {
9474          console.error('Error fetching delivery date from API:', error);
9475          showDeliveryPlaceholder();
9476        }
9477      }
9478      
9479      // Render address to load cities (after dates are already showing)
9480      await renderAddress();
9481      
9482      // Province and zip code will be loaded when city is selected (not on initial render)
9483      
9484    } catch (error) {
9485      console.error('Error initializing delivery options:', error);
9486      
9487      // Auto refresh on error after 2 seconds
9488      console.log('Auto refreshing page due to error...');
9489      setTimeout(() => {
9490        // location.reload();
9491      }, 2000);
9492    }
9493  }
9494  
9495  // Initialize delivery options
9496  initializeDeliveryOptions();
9497
9498  // Helper function to safely initialize Select2
9499  function initSelect2(selector, options = {}) {
9500    const $element = $(selector);
9501    
9502    if ($element.length === 0) {
9503      console.warn('Element not found:', selector);
9504      return;
9505    }
9506    
9507    // Check if Select2 is already loaded
9508    if (typeof $.fn.select2 !== 'undefined') {
9509      try {
9510        // Destroy existing select2 instance if any
9511        if ($element.hasClass('select2-hidden-accessible')) {
9512          $element.select2('destroy');
9513        }
9514        // Initialize select2 with merged options
9515        const defaultOptions = {
9516          minimumResultsForSearch: 0,
9517          width: '100%'
9518        };
9519        $element.select2(Object.assign({}, defaultOptions, options));
9520      } catch(e) {
9521        console.error('Error initializing Select2 for', selector, ':', e);
9522      }
9523    } else {
9524      // Wait for Select2 to load
9525      console.log('Waiting for Select2 library to load...');
9526      let attempts = 0;
9527      const maxAttempts = 50; // 5 seconds max
9528      
9529      const checkSelect2 = setInterval(function() {
9530        attempts++;
9531        if (typeof $.fn.select2 !== 'undefined') {
9532          clearInterval(checkSelect2);
9533          try {
9534            // Destroy existing select2 instance if any
9535            if ($element.hasClass('select2-hidden-accessible')) {
9536              $element.select2('destroy');
9537            }
9538            // Initialize select2 with merged options
9539            const defaultOptions = {
9540              minimumResultsForSearch: 0,
9541              width: '100%'
9542            };
9543            $element.select2(Object.assign({}, defaultOptions, options));
9544          } catch(e) {
9545            console.error('Error initializing Select2 for', selector, ':', e);
9546          }
9547        } else if (attempts >= maxAttempts) {
9548          clearInterval(checkSelect2);
9549          console.error('Select2 library failed to load after 5 seconds');
9550        }
9551      }, 100); // Check every 100ms
9552    }
9553  }
9554
9555  async function insertCard(data) {
9556    const response = await fetch(`${host}/api/card/v2/new`, {
9557        method: "POST",
9558        headers: {
9559          'Content-Type': 'application/json',
9560        },
9561        body: data
9562    })
9563    const result = await response.json()
9564    let id = result?.data?.id
9565    $(".greetingCard").attr("data-id", id)
9566    return result
9567  }
9568    
9569  async function updateCard(id, data){
9570    console.log(id, data, 'updateCard')
9571    const response = await fetch(`${host}/api/card/v2/${id}`, {
9572        method: "PUT",
9573        headers: {
9574          'Content-Type': 'application/json',
9575        },
9576        body: data
9577    })
9578    console.log(response, 'updateCard')
9579    return response
9580  }
9581    
9582  function bytesToSize(bytes) {
9583    var sizes = ['b', 'kb', 'mb', 'gb', 'tb', 'p'];
9584    for (var i = 0; i < sizes.length; i++) {
9585      if (bytes <= 1024) {
9586        return bytes + ' ' + sizes[i];
9587      } else {
9588        bytes = parseFloat(bytes / 1024).toFixed(2)
9589      }
9590    }
9591    return bytes + ' P';
9592  }
9593
9594  async function uploadMedia(uri, type) {
9595    nameq = $("#properties-nama-penerima").val()
9596    dear = $("#properties-kartu-nama-penerima").val()
9597    card = $("[data-properties=ucapan]").val()
9598    sender = $("#properties-kartu-nama-pengirim").val()
9599    photo = $("#properties-photo").val()
9600    video = $("#properties-video").val()
9601    status = "Product"
9602        
9603    const name = qrID
9604    let formData = new FormData(); 
9605    formData.append("file", uri);
9606    const response = await fetch(`${host}/api/upload?name=${name}&type=${type}&r=${randomString(3, '0123456789')}&shop=${shop}`, {
9607      method: "POST", 
9608      body: formData
9609    })
9610    const result = await response.json();
9611    if(result) {
9612      const url = result.url?.replace('outerbloom/', '')
9613      if(type === 'image/jpeg') {
9614        $("#properties-photo").val(url)
9615        $(".preview-image").show()
9616        $(".remove-image").show()
9617        $(".placeholder-image").hide()
9618        // $(".icon-upload").hide()
9619        photo = url
9620        
9621        // Trigger card preview update for photo upload
9622        $(document).trigger('cardDataUpdated')
9623      } else {
9624        $("#properties-video").val(url)
9625        $("#label-input-video span").text("Change File")
9626        $(".case-qrcode-preview p").text("Scan here for a secret message")
9627        $(".remove-media").show()
9628        $("#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>`)
9629        $("[for=input-video]").hide()
9630        video = url
9631        
9632        // Trigger card preview update for video upload
9633        $(document).trigger('cardDataUpdated')
9634      }
9635      $(".case-video-preview").show()
9636      $(".steps-card-preview").removeClass("loading")
9637      // updateCard(nameq, dear, card, sender, photo, video, status)
9638
9639      $(".nextBtn").attr("disabled", false)
9640    }
9641  }
9642
9643  function randomString(length, chars) {
9644    var result = '';
9645    for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))];
9646    return result;
9647  }
9648
9649  function getNoteCity(fulldate) {
9650    const h_1 = new Date(new Date().setDate(new Date().getDate() + 1))
9651    const weekday = ["Min","Sen","Sel","Rab","Kam","Jum","Sab"];
9652    const monthly = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
9653    const d = new Date(h_1);
9654    const day = weekday[d.getDay()];
9655    const dt = d.getDate();
9656    const mt = monthly[d.getMonth()];
9657    const yr = d.getFullYear();
9658    const p = $("#cities").parent(".form-group")
9659  }
9660
9661  function disabledSameDay() {
9662    let btnFirst = $("#deliveryDate").find("button:first-child")
9663    let getDay = new Date().getDay();
9664
9665    // Check if product has CNY 2026 tag - skip disabling if true
9666    
9667      console.log('Product has CNY 2026 tag - skipping same day disable logic');
9668      return;
9669    
9670
9671    
9672      
9673      if(getDay == 1 || getDay == 2 || getDay == 3 || getDay == 4 || getDay == 5){
9674        if(hour >= 14.00){
9675          btnFirst.attr("disabled", true)
9676        }
9677      } else if(getDay == 6){
9678        if(hour >= 16.00){
9679          btnFirst.attr("disabled", true)
9680        }
9681      } else if(getDay == 0){
9682        if(hour >= 16.00){
9683          btnFirst.attr("disabled", true)
9684        }
9685      }
9686      
9687    
9688  }
9689
9690  function disabledays(date) {
9691    let ymd = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate();
9692    //if u have to disable a list of day
9693    let removeDays
9694    
9695    
9696    
9697    if ($.inArray(ymd, removeDays) >= 0) {
9698      return [false];
9699    } else {
9700      let day = date.getDay();
9701      if(day == 0 && date.getDate() == 13 && date.getMonth() == 1){
9702          return [(day == 0),  ''];
9703      }
9704      
9705      
9706      return [(day != 0),  ''];
9707    }
9708  }
9709  ( function( factory ) {
9710    if ( typeof define === "function" && define.amd ) {
9711
9712      // AMD. Register as an anonymous module.
9713      define( [ "../widgets/datepicker" ], factory );
9714    } else {
9715
9716      // Browser globals
9717      factory( jQuery.datepicker );
9718    }
9719  }( function( datepicker ) {
9720    
9721    // Check if datepicker object exists before accessing regional property
9722    if (typeof datepicker === 'undefined' || !datepicker) {
9723      return;
9724    }
9725
9726    datepicker.regional.id = {
9727      closeText: "Tutup",
9728      prevText: "&#x3C;mundur",
9729      nextText: "maju&#x3E;",
9730      currentText: "Today",
9731      monthNames: [ "January","February","March","April","May","Juny",
9732                    "July","August","September","October","November","December" ],
9733      monthNamesShort: [ "Jan","Feb","Mar","Apr","May","Jun",
9734                        "Jul","Agu","Sep","Oct","Nov","Dec" ],
9735      dayNames: [ "Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu" ],
9736      dayNamesShort: [ "Sun","Mon","Tue","Wed","Thu","Fri","Sat" ],
9737      dayNamesMin: [ "Mg","Sn","Sl","Rb","Km","jm","Sb" ],
9738      weekHeader: "Mg",
9739      dateFormat: "D, dd M",
9740      firstDay: 0,
9741      isRTL: false,
9742      showMonthAfterYear: false,
9743      yearSuffix: "" };
9744    datepicker.setDefaults( datepicker.regional.id );
9745
9746    return datepicker.regional.id;
9747
9748} ) );
9749
9750  function loadPopup() {
9751    $("#backgroundPopup").fadeIn("slow");
9752    $(".purchasePopup:not(.purchasePopupSpotify)").fadeIn("slow");
9753    const firstSection = $(".purchasePopup:not(.purchasePopupSpotify) .sectionPurchase").first()
9754    if(firstSection.hasClass("purchasePersonalize")) {
9755      if(productType !== '') {
9756        console.log("clarity event " + productType + ' personalize')
9757        window.clarity("event", `${productType} cardPersonalization`)
9758        // window.clarity("set", productType, `cardPersonalization - ${productDate}`)
9759      }
9760    } else if (firstSection.hasClass("sectionPurchaseBoard")) {
9761        console.log("clarity event " + productType + ' personalizeBoard')
9762        window.clarity("event", `${productType} personalizeBoard`)
9763        // window.clarity("set", productType, `personalizeBoard - ${productDate}`)
9764    }
9765    firstSection.removeClass("hide")
9766    
9767    // Load province and zip code when popup opens
9768    const selectedCity = $("#cities").val();
9769    const v2 = $('#cities option:selected').attr('data-city');
9770    const v3 = $('#cities option:selected').attr('data-province');
9771    
9772    if (selectedCity && selectedCity !== '' && selectedCity !== 'Kota Lainnya') {
9773      // Get province
9774      getProvince(selectedCity);
9775      
9776      // Load zip codes
9777      console.log('Loading zip codes for:', selectedCity);
9778      $("#zip").html(`<option value="">Postal Code</option>`);
9779      renderZip(selectedCity, v2, v3);
9780    }
9781    
9782    // Auto-trigger addon loading when addon section becomes visible
9783    setTimeout(function() {
9784      const addonSection = $(".purchaseAddon")
9785      if(addonSection.length > 0 && !addonSection.hasClass("hide")) {
9786        if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) {
9787          $("[data-addon]").eq(0).trigger("click")
9788        }
9789      }
9790    }, 200)
9791  }
9792
9793  function disablePopup() {
9794    $("#backgroundPopup").fadeOut("slow");
9795    $(".purchasePopup").fadeOut("slow");
9796    $("#popupCart").fadeOut("slow");
9797  }
9798
9799  function scrollTo(parent, div, dur) {
9800    $(parent).animate({
9801      scrollTop: $(div).offset().top
9802    }, dur);
9803  }
9804
9805  function loadPopupPersonalize() {
9806    // First validate variant metafields
9807    if (typeof validateVariantMetafields === 'function') {
9808      const isValid = validateVariantMetafields(true);
9809      if (!isValid) {
9810        // The validateVariantMetafields function already handles scrolling and focusing
9811        // alert('Please select all required variant options before proceeding.');
9812        return; // Stop execution if validation fails
9813      }
9814    }
9815    
9816    const div = "#purchaseProduct"
9817    const p = "html, body, .product-meta"
9818    $("p.error").remove()
9819    loadItemOccasion($("[data-occassion]").eq(0), "greeting-card-all")
9820    const isCity = $("#cities[required]")
9821    const isDate = $("#propDeliveryDate[required]")
9822    const isTime = $("#propDeliveryTime[required]")
9823    const isTimeDisabled = $("#propDeliveryTime[disabled]")
9824    // loadPopup()
9825    // Check if all required fields are filled, or if time is disabled (for no-deliverytime products)
9826    if(isCity.val() !== '' && isDate.val() !== '' && (isTime.val() !== '' || isTimeDisabled.length > 0)) {
9827      loadPopup()
9828    }
9829    if(isCity.val() == '') {
9830      isCity.parent(".row").append("<p class='error'>Choose delivery city</p>")
9831      scrollTo(p, div, 500)
9832    }
9833    if(isDate.val() == '') {
9834      isDate.parents(".row").append("<p class='error'>Choose delivery date</p>")
9835      scrollTo(p, div, 500)
9836    }
9837    if(isTime.val() == '' && isTimeDisabled.length === 0) {
9838      isTime.parents(".row").append("<p class='error'>Choose delivery time</p>")
9839      scrollTo(p, div, 500)
9840    }
9841  }
9842
9843  function quantityCounter() {
9844    $(document).on("click", ".item-card.selected .q_up", function () {
9845      var C = $(this).attr("data-id"),
9846          S =
9847              parseInt(
9848                  $(this)
9849                      .siblings(".quantity-cart-" + C)
9850                      .val()
9851              ) + 1;
9852      $(this).attr("data-quantity", S),
9853          $(this)
9854              .siblings(".quantity-cart-" + C)
9855              .val(S);
9856    }),
9857    $(document).on("click", ".item-card.selected .q_down", function () {
9858        var C = $(this).attr("data-id"),
9859            S = parseInt(
9860                $(this)
9861                    .siblings(".quantity-cart-" + C)
9862                    .val()
9863            );
9864        0 < S && $(this).attr("data-quantity", S - 1),
9865            0 < S &&
9866                $(this)
9867                    .siblings(".quantity-cart-" + C)
9868                    .val(S - 1);
9869    });
9870  }
9871
9872  quantityCounter()
9873
9874  const itemAddon = $(".item-card").length
9875  const nofree = $(".nofree").length
9876
9877  const upsell = ''
9878  
9879  if(nofree === itemAddon) {
9880      // $("#itemAddons").html("<p>No Items available</p>")
9881  }
9882
9883  $("#itemAddons .item-card").each(function(e){
9884      $("#itemAddons").attr("data-length", e)
9885  })
9886
9887  // Function to fetch products from collection with fallback
9888  async function fetchAddonProducts(collectionHandle) {
9889    try {
9890      const response = await fetch(`https://outerbloom.com/collections/${collectionHandle}/products.json`);
9891      
9892      if (!response.ok) {
9893        throw new Error(`Collection ${collectionHandle} not found`);
9894      }
9895      
9896      const data = await response.json();
9897      
9898      // Check if products exist and have items
9899      if (!data.products || data.products.length === 0) {
9900        throw new Error(`No products in collection ${collectionHandle}`);
9901      }
9902      
9903      return data.products;
9904    } catch (error) {
9905      console.warn(`Error fetching ${collectionHandle}:`, error.message);
9906      
9907      // Fallback to "upsell-all" collection if primary collection fails
9908      if (collectionHandle !== 'upsell-all') {
9909        console.log('Falling back to upsell-all collection...');
9910        try {
9911          const fallbackResponse = await fetch('https://outerbloom.com/collections/upsell-all/products.json');
9912          if (fallbackResponse.ok) {
9913            const fallbackData = await fallbackResponse.json();
9914            return fallbackData.products || [];
9915          }
9916        } catch (fallbackError) {
9917          console.error('Fallback also failed:', fallbackError);
9918        }
9919      }
9920      
9921      return [];
9922    }
9923  }
9924
9925  // Function to determine upsell type from product tags
9926  function getUpsellType() {
9927    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"];
9928    const hasBuketUang = productTags.includes('Buket Uang');
9929    
9930    if (hasBuketUang) {
9931      return 'upsell-giftcard';
9932    }
9933    
9934    // Find upsell tag
9935    for (const tag of productTags) {
9936      if (tag.startsWith('upsell-')) {
9937        return tag;
9938      } else if (tag === 'upsell') {
9939        return 'upsell-all';
9940      }
9941    }
9942    
9943    return 'upsell-giftcard'; // Default fallback
9944  }
9945
9946  // Function to render addon products
9947  function renderAddonProducts(products, filterTag) {
9948    const html = [];
9949    
9950    for (const product of products) {
9951      const id = product.id;
9952      const variant = product.variants[0];
9953      const variantId = variant.id;
9954      const img = product.images[0]?.src || '';
9955      const imgBase = img.split('.jpg')[0];
9956      const title = product.title;
9957      const price = variant.price;
9958      const tags = product.tags;
9959      const isAvailable = variant.available !== false;
9960      const productType = product.product_type?.toLowerCase()?.replace(/\s+/g, '_') || '';
9961      
9962      // Filter products based on tag
9963      const shouldInclude = filterTag === 'all' || 
9964                           tags.includes(`upsell-item-${filterTag}`) || 
9965                           tags.includes('upsell-item-all') ||
9966                           tags.includes('upsell-item-inhouse');
9967      
9968      if (!shouldInclude) continue;
9969      
9970      const priceDisplay = price < 1 ? 'FREE' : rupiah.format(price);
9971      const cardClass = `item-card${price < 1 ? ' free' : ' nofree'} type-${productType}`;
9972      
9973      const body = `
9974        <div class="${cardClass}" data-variant="${variantId}" data-id="${id}" data-qty="${isAvailable ? '' : 0}" data-upsell="${filterTag}" data-tags="${tags}">
9975          <div class="card-image">
9976            <img src="${imgBase}_150x.jpg" alt="${title}" width="" height="" />
9977          </div>
9978          <div class="card-meta">
9979            <h5>${title}</h5>
9980            <p>${priceDisplay}</p>
9981            <input id="card-${variantId}" type="hidden" name="" value="${variantId}">
9982          </div>
9983          <div class="card-qty">
9984            <a data-quantity="1" type="submit" id="q_down-${variantId}" class="btn-qty-min q_down drawer-cart" data-id="${variantId}">
9985              <svg xmlns="http://www.w3.org/2000/svg" width="12" height="2" viewBox="0 0 12 2" fill="none">
9986                <path d="M0 1.90869V0.908691H12V1.90869H0Z" fill="black"/>
9987              </svg>
9988            </a>  
9989            <input maxlength="3" min="0" class="btn-qty text-center quantity-cart-${variantId}
9989" value="0" data-price="${price}" name="quantity">
9990            <a data-quantity="1" type="submit" class="btn-qty-plus q_up text-green drawer-cart" data-id="${variantId}">
9991              <svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" viewBox="0 0 12 13" fill="none">
9992                <path d="M0 6.87023V5.94715H5.53846V0.408691H6.46154V5.94715H12V6.87023H6.46154V12.4087H5.53846V6.87023H0Z" fill="black"/>
9993              </svg>
9994            </a>   
9995          </div>
9996        </div>`;
9997      
9998      html.push(body);
9999    }
10000    
10001    return html;
10002  }
10003
10004  // Event handler for addon selection
10005  $("[data-addon]").click(async function() {
10006    const $button = $(this);
10007    const addonType = $button.data("addon") || getUpsellType();
10008    
10009    // Update UI
10010    $("[data-addon]").removeClass("selected");
10011    $button.addClass("selected");
10012    
10013    // Show loading state
10014    $("#itemAddons .row").html('<p>Loading products...</p>');
10015    
10016    try {
10017      // Fetch products
10018      const products = await fetchAddonProducts(addonType);
10019      
10020      if (products.length === 0) {
10021        $("#itemAddons .row").html('<p>No Item available</p>');
10022        $("#itemAddons").attr("data-length", 0);
10023        return;
10024      }
10025      
10026      // Extract filter tag from addon type
10027      const filterTag = addonType.replace('upsell-', '');
10028      
10029      // Render products
10030      const html = renderAddonProducts(products, filterTag);
10031      
10032      if (html.length === 0) {
10033        $("#itemAddons .row").html('<p>No Item available</p>');
10034      } else {
10035        $("#itemAddons .row").html(html.join(''));
10036      }
10037      
10038      $("#itemAddons").attr("data-length", html.length);
10039      
10040    } catch (error) {
10041      console.error('Error loading addon products:', error);
10042      $("#itemAddons .row").html('<p>Error loading products. Please try again.</p>');
10043    }
10044  })
10045
10046  async function isAddon(){
10047    let ids = []
10048    $("#itemAddons .item-card.selected").each(function(i, e){
10049      const id = $(this).data("id")
10050      ids.push(id)
10051    })
10052    console.log(ids)
10053    return ids
10054  }
10055  
10056  $("#itemAddons").delegate(".item-card > div:not(.card-qty)", "click", async function(){
10057    const t = $(this).parent()
10058    const id = t.data("id")
10059    const btn =  t.parents(".purchaseAddon").find(".next-purchase-button")
10060    t.toggleClass("selected");
10061    //$(this).next("input").toggleAttr('name', 'id[]');
10062    if (t.hasClass('selected')) {
10063        t.find("input").val(1)
10064        t.find("input").attr('name', 'id[]');
10065    } else {
10066        t.find("input").val(0)
10067        t.find("input").removeAttr('name');
10068    }
10069    $("#properties-addons").val(addons)
10070    const is = await isAddon()
10071    if(is.length === 0) {
10072      btn.text("continue without add-ons")
10073      return
10074    }
10075    if(is.includes(8835692069079)) {
10076      btn.text("personalize acrylic frame")
10077    } else {
10078      btn.text("Continue")
10079    }
10080      
10081  })
10082
10083  async function myAddon(data) {
10084    const c = $(".addonsPurchase .addons")
10085    let items = []
10086    
10087    const spotifyAddons = $(".spotifyAddons").find("[data-index]")
10088    // if(spotifyAddons.length > 0) {
10089    //   $(spotifyAddons).each(function(i, e){
10090    //     const spotifyLink = $(this).find(".spotifyLink").val()
10091    //     const spotifySong = $(this).find(".spotifySong").val()
10092    //     const spotifyArtist = $(this).find(".spotifyArtist").val()
10093    //     const spotifyFotoAddon = $(this).find(".resultPhotoSpotify").val()
10094    //     if(spotifyLink !== '') {
10095    //       spotifyAddon = `<div class="addon-item" data-id="46067682607319" data-qty="1">
10096    //         <div class="addon-itm-img">
10097    //           <img src="https://cdn.shopify.com/s/files/1/1589/6833/files/Acrylic-Frame_8c71027d-43b7-4322-a98f-d34ab0456397_100x.jpg?v=1739160467" alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman" width="70"/>
10098    //         </div>
10099    //         <div class="addon-itm-title">
10100    //           <span>[US] Outerbloom Acrylic Frame 4R</span>
10101    //         </div>
10102    //         <div class="addon-itm-line-total">
10103    //           <span>Rp 99.000</span>
10104    //         </div>
10105    //       </div>
10106    //       <div class="propsAddonSpotify row m-0">
10107    //         <div class="col-12 col-lg-2"></div>
10108    //           <div class="col-12 col-lg-10">
10109    //             <p>
10110    //               <span>spotify link</span>
10111    //               <span class="spotifyLinkAddon">${spotifyLink}</span>
10112    //             </p>
10113    //             <p>
10114    //               <span>uploaded photo</span>
10115    //               <span class="spotifyFotoAddon">${spotifyFotoAddon}</span>
10116    //             </p>
10117    //             <p>
10118    //               <span>song / playlist name</span>
10119    //               <span class="spotifySongAddon">${spotifySong}</span>
10120    //             </p>
10121    //             <p>
10122    //               <span>artist name</span>
10123    //               <span class="spotifyArtistAddon">${spotifyArtist}</span>
10124    //             </p>
10125    //           </div>
10126    //       </div>`
10127    //       items.push(spotifyAddon)
10128    //     }
10129    //   })
10130    // }
10131    for(let i = 0; i < data.length; i++) {
10132      if(data[i].title !== '[US] Outerbloom Acrylic Frame 4R' ) {
10133        const img = data[i].image
10134        const title = data[i].title
10135        const qty = data[i].qty
10136        const price = data[i].price
10137        const total = Number(qty) * Number(price)
10138        let addons = `<div class="addon-item" data-id="${data[i].id}" data-qty="${qty}">
10139              <div class="addon-itm-img">
10140                <img src="${img}" alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman" width="70"/>
10141              </div>
10142              <div class="addon-itm-title">
10143                <span>${title}</span>
10144              </div>
10145              <div class="addon-itm-line-price">
10146                <span>${rupiah.format(price)}</span>
10147                ${data[i].title == '[US] Outerbloom Acrylic Frame 4R' ? '' : `<span>x${qty}</span>`}
10148              </div>
10149              <div class="addon-itm-line-total">
10150                <span>${rupiah.format(total)}</span>
10151              </div>
10152            </div>`
10153          items.push(addons)
10154      }
10155    }
10156    c.html(items)
10157    const parent = $(".purchaseAddon")
10158    const next = parent.next(".sectionPurchase")
10159    parent.addClass("hide")
10160    next.removeClass("hide")
10161    // if(items2.length === 0) return $("#popupCart").addClass("no-addon-cart")
10162    // $(".itemAddonCart").find("h4").text(`add-ons (${items2.length})`)
10163  }
10164
10165  async function listAddon() {
10166    const data = $("#itemAddons").find(".selected")
10167    let ids = []
10168    $(data).each(function(){
10169      const id = $(this).data("variant")
10170      const image = $(this).find(".card-image img").attr("src")
10171      const title = $(this).find(".card-meta h5").text()
10172      const qty = $(this).find(".card-qty input").val()
10173      const price = $(this).find(".card-qty input").data("price")
10174      ids.push({
10175        id: Number(id),
10176        image,
10177        title,
10178        qty,
10179        price
10180      })
10181    })
10182    myAddon(ids)
10183  }
10184
10185  async function customSpotify(idx, length, type){
10186    let isCard = false
10187    
10188      isCard = true
10189    
10190    let p = $(".purchasePopupSpotify")
10191    const preLink = $(".spotifyLinkFirst").val()
10192    $("[data-index]").hide()
10193    p.find(".headerPurchase h3").text(`personalize spotify photo print${length > 1 ? ` - ${idx}` : ''}`)
10194    p.find(".regulerAddons, .purchase-button").hide()
10195    p.find(".spotifyAddons").show()
10196    
10197    const data = await trackUrl(preLink)
10198    
10199    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
10199ox="0 0 13 11" fill="none">
10200<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"/>
10201</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
10201ox="0 0 13 11" fill="none">
10202<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"/>
10203</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="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"></div></div></div></div></div>`
10204    // console.log(html)
10205    
10206    $(".spotifyAddons").append(html)
10207    
10208    $(`[data-index=${idx}]`).show()
10209    
10210    if (preLink !== '') {
10211      $(".btn-action .btn").attr("disabled", false)
10212    } else {
10213      $(".btn-action .btn").attr("disabled", true)
10214    }
10215
10216    return html
10217    
10218  }
10219
10220  $(".spotifyLinkFirst").keyup(async function(){
10221    const v = $(this).val()
10222    if(v.includes('spotify:user:spotify')) {
10223      const correct = v.split('user:spotify:')[1]
10224      console.log(correct, 'BNER')
10225      $(this).val(correct)
10226      return
10227    }
10228    if(v.includes("spotify:") || v.includes("https://open.spotify.com/")){
10229      const data = await trackUrl(v)
10230      if(!data || !data.status) {
10231        $(this).parent().addClass("error")
10232        // $(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>`)
10233        $("#personalizeBtnSpotify .btn").attr("disabled", true)
10234        return
10235      }
10236      $(this).parent().removeClass("error")
10237      // $(this).parent().remove("txt-error")
10238      $("#personalizeBtnSpotify .btn").attr("disabled", false)
10239    } else {
10240      $("#personalizeBtnSpotify .btn").attr("disabled", true)
10241    }
10242  })
10243
10244  $(".purchaseAddon").delegate(".next-addon", "click", async function(){
10245    const parent = $(this).parents(".purchaseAddon")
10246    const next = parent.next(".sectionPurchase")
10247    
10248    // Check if there's no next section, proceed directly to addToCart
10249    if(next.length === 0 || !next.hasClass("sectionPurchase")) {
10250      await addToCart()
10251      return
10252    }
10253    
10254    if(next.hasClass("purchaseAddress")) {
10255      if(productType !== '') {
10256        console.log("clarity event " + productType + ' purchaseDelivery')
10257        window.clarity("event", `${productType} purchaseDelivery`)
10258        // window.clarity("set", productType, `purchaseDelivery - ${productDate}`)
10259      }
10260      
10261      // Check if Kota Pengiriman is "Kota Lainnya"
10262      const kotaPengiriman = $("#cities").val()
10263      if(kotaPengiriman === 'Kota Lainnya') {
10264        // Skip address form and go directly to addToCart
10265        await addToCart()
10266        return
10267      }
10268    }
10269    const data = $("#itemAddons").find(".selected")
10270    const length = $(".quantity-cart-46067682607319").val()
10271    const checked = data.length;
10272    if(checked > 0) {
10273      if(length > 0) {
10274        $(".purchaseAddon").addClass("purchaseAddonSpotify")
10275        customSpotify(1, length, 'addon')
10276      } else {
10277        listAddon()
10278      }
10279    } else {
10280      parent.addClass("hide")
10281      next.removeClass("hide")
10282    }
10283  })
10284
10285  $("#personalizeBtnSpotify .btn").click(async function(){
10286    // First validate variant metafields
10287    if (typeof validateVariantMetafields === 'function') {
10288      const isValid = validateVariantMetafields(true);
10289      if (!isValid) {
10290        // The validateVariantMetafields function already handles scrolling and focusing
10291        alert('Please select all required variant options before proceeding.');
10292        return; // Stop execution if validation fails
10293      }
10294    }
10295    
10296    const isCity = $("#cities[required]")
10297    const isDate = $("#propDeliveryDate[required]")
10298    if((isDate.length > 0 && isCity.length > 0) && (isCity.val() === '' || isDate.val() === '')) {
10299      alert('Please choose Delivery City & Delivery Date')
10300      return
10301    }
10302    const data = await customSpotify(1, 1, 'product')
10303    if(data) {
10304      $("#backgroundPopup").fadeIn("slow");
10305      $(".purchasePopupSpotify").fadeIn("slow");
10306
10307      if(productType !== '') {
10308        console.log("clarity event " + productType + ' spotify')
10309        window.clarity("event", `${productType} spotify`)
10310        // window.clarity("set", productType, `purchaseDelivery - ${productDate}`)
10311      }
10312    }
10313  })
10314
10315  function formatBytes(bytes, decimals = 2) {
10316    if (!+bytes) return '0 Bytes'
10317
10318    const k = 1024
10319    const dm = decimals < 0 ? 0 : decimals
10320    const sizes = ['B', 'KB', 'MB']
10321
10322    const i = Math.floor(Math.log(bytes) / Math.log(k))
10323
10324    return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`
10325  }
10326
10327  async function trackUrl(link){
10328    try {
10329      let trackId = link.split('/').pop().split('?')[0];
10330      let type = ''
10331      if(link.includes("spotify:")) {
10332        const uri = link.split('spotify:')[1]
10333        trackId = uri.split(':')[1]
10334        type = uri.split(':')[0] + 's'
10335      } else {
10336        if(link.match('track')){
10337          type = 'tracks'
10338        } else if(link.match('playlist')) {
10339          type = 'playlists'
10340        } else if(link.match('artist')) {
10341          type = 'artists'
10342        } else if(link.match('album')) {
10343          type = 'albums'
10344        }
10345      }
10346      console.log(`${host}/api/spotify/${type}/${trackId}`)
10347      const data = await getFetch(`${host}/api/spotify/${type}/${trackId}`)
10348      console.log(data, 'DATA')
10349      const song = data?.data?.name
10350      const artist = data?.data?.artist
10351      return {
10352        song, artist, type, trackId, status: data.status
10353      }
10354    } catch(err) {
10355      console.log(err)
10356    }
10357  }
10358
10359  $(".spotifyAddons").delegate(".uploadPhotoSpotify", "change", async function(){
10360    const parent = $(this).parents("[data-index]")
10361    const preview = parent.find(".previewImage")
10362    const file = $(this)[0].files[0];
10363    if (file) {
10364        const reader = new FileReader();
10365        reader.onload = async function(e) {
10366          parent.find(".uploadResult label").hide()
10367          parent.find(".uploadedResult").remove()
10368          parent.find(".uploadResult").append(`<div class="uploadedResult d-flex" style="justify-content: space-between">
10369          <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>
10370          <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;">
10370<svg fill="none" height="11" viewBox="0 0 10 11" width="10" xmlns="http://www.w3.org/2000/svg">
10371  <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 />
10372</svg>
10373</span></div></div>`)
10374          parent.find(".frameImageUploaded svg").hide()
10375          parent.find(".frameImage").addClass("uploaded")
10376          preview.attr("src", e.target.result);
10377          preview.show();
10378          let formData = new FormData(); 
10379          formData.append("file", file);
10380          const response = await fetch(`${host}/api/upload?name=${file.name}&type=image/jpeg&r=${Date.parse(new Date)}&shop=${shop}`, {
10381            method: "POST", 
10382            body: formData
10383          })
10384          const result = await response.json();
10385          if(result){
10386            parent.find(".resultPhotoSpotify").val(result.url)
10387          }
10388        }
10389        
10390        reader.readAsDataURL(file);
10391    } else {
10392        preview.hide();
10393    }
10394  });
10395
10396  $(".spotifyAddons").delegate(".uploadResult", "click", function(){
10397    $(this).next("input[type=file]").trigger("click")
10398  })
10399
10400  $(".spotifyAddons").delegate(".changeUpload", "click", function(){
10401    $(this).parents("input[type=file]").trigger("click")
10402  })
10403
10404  $(".spotifyAddons").delegate(".removeUpload", "click", function(){
10405    const parent = $(this).parents("[data-index]")
10406    parent.find(".uploadPhotoSpotify").val("")
10407    parent.find(".uploadResult label").show()
10408    parent.find(".uploadedResult").remove()
10409    parent.find(".frameImageUploaded svg").show()
10410    parent.find(".previewImage").hide()
10411    parent.find(".frameImage").removeClass("uploaded")
10412  })
10413
10414  $(".spotifyAddons").delegate("label.checkbox", "click", function(){
10415    const parent = $(this).parents("[data-index]")
10416    parent.toggleClass("checked")
10417  })
10418
10419  $(".spotifyAddons").delegate(".spotifyLink", "change", async function(){
10420    const parent = $(this).parents("[data-index]")
10421    const link = $(this).val()
10422    const data = await trackUrl(link)
10423
10424    console.log(data)
10425
10426    if(data.song) {
10427      parent.find(".spotifySong").val(data.song)
10428      parent.find(".spotifyData").find("h3").text(data.song)
10429    }
10430    if(data.artist) {
10431      parent.find(".spotifyArtist").val(data.artist)
10432      parent.find(".spotifyData").find("p").text(data.artist)
10433    }
10434    parent.find(".spotifyCode img").attr("src", `https://scannables.scdn.co/uri/plain/png/FFFFFF/black/640/spotify:${data.type.slice(0, -1)}:${data.trackId}`)
10435    // https://scannables.scdn.co/uri/plain/png/FFFFFF/black/640/spotify:track:1er51HCEBhIAtoEemKuC3M
10436    if (data.status === true) {
10437      parent.find(".btn-action .btn").attr("disabled", false)
10438    } else {
10439      parent.find(".btn-action .btn").attr("disabled", true)
10440    }
10441  })
10442  
10443  $(".spotifyAddons").delegate(".spotifySong", "keyup", async function(){
10444    const parent = $(this).parents("[data-index]")
10445    const v = $(this).val()
10446    parent.find(".spotifyData h3").text(v)
10447  })
10448
10449  $(".spotifyAddons").delegate(".spotifyArtist", "keyup", async function(){
10450    const parent = $(this).parents("[data-index]")
10451    const v = $(this).val()
10452    parent.find(".spotifyData p").text(v)
10453  })
10454
10455  $(".spotifyAddons").delegate(".btn-action .btn:not(.no-addon)", "click", async function(){
10456    const parent = $(this).parents("[data-index]")
10457    const length = parent.data("length")
10458    const index = parent.data("index")
10459    const indexNext = Number(index) + 1
10460    customSpotify(indexNext, length, 'addon')
10461  })
10462
10463  
10464  $(".spotifyAddons").delegate(".btn-action .btn.finished", "click", async function(){
10465    const parent = $(this).parents(".purchaseAddon")
10466    const next = parent.next(".sectionPurchase")
10467    parent.addClass("hide")
10468    next.removeClass("hide")
10469    next.find(".purchase-button").show()
10470    listAddon()
10471  })
10472
10473  $(".spotifyAddons").delegate(".back-spotify", "click", async function(){
10474    const t = $(this).parents("[data-index]")
10475    const parent = $(this).parents(".sectionPurchase")
10476    const current = t.data("index")
10477    const prevCurrent = Number(current) - 1
10478    if(current == 1) {
10479      parent.removeClass("purchaseAddonSpotify")
10480      parent.find(".purchase-button").show()
10481      parent.find(".headerPurchase h3").text("Make It More Special with Add-Ons!")
10482      $(".spotifyAddons").empty()
10483      $(".regulerAddons").show()
10484      return
10485    }
10486    t.hide()
10487    t.prev("[data-index]").show()
10488    t.remove()
10489    parent.find(".headerPurchase h3").text(`personalize spotify photo print - ${prevCurrent}`)
10490  })
10491
10492  $("#personalizeBtn .btn").click(async function() {
10493    loadPopupPersonalize()
10494  });
10495
10496  $(".sectionPurchaseSpotify").delegate(".btn[data-type=card]", "click", function(){
10497    $(".sectionPurchaseSpotify").hide()
10498    loadPopupPersonalize()
10499  })
10500
10501  $(".close-purchase-popup").click(function() {
10502      disablePopup();
10503  });
10504  $("#backgroundPopup").click(function() {
10505      // disablePopup();
10506  });
10507
10508  $("#popupCart .close-purchase-popup").click(function() {
10509      location.reload()
10510  });
10511
10512  $('#popupCart').on('hide.bs.modal', function (e) {
10513    location.reload()
10514  })
10515
10516  $(".next-card").click(function(){
10517    const parent = $(this).parents(".sectionPurchase")
10518    const next = parent.next(".sectionPurchase")
10519    parent.addClass("hide")
10520    next.removeClass("hide")
10521  })
10522
10523  $(".back-purchase-button").click(function(){
10524    const parent = $(this).parents(".sectionPurchase")
10525    const prev = parent.prev(".sectionPurchase")
10526    parent.addClass("hide")
10527    prev.removeClass("hide")
10528  })
10529  
10530  $(document).keypress(function(e) {
10531      if (e.keyCode == 27 && popupStatus == 1) {
10532          disablePopup();
10533      }
10534  });
10535  
10536  const parentImg = $(".case-img-preview")
10537  const parentVid = $(".case-video-preview")
10538  
10539  // Image Editor Variables
10540  let currentImageFile = null;
10541  let cropper = null;
10542  let originalImageSize = { width: 0, height: 0 };
10543  
10544  // Utility function to format file size
10545  function formatImageSize(width, height) {
10546    return `${width} × ${height}px`;
10547  }
10548
10549  // Utility function to estimate file size in bytes
10550  function estimateFileSize(width, height, quality = 0.9) {
10551    // Base calculation: assume ~3 bytes per pixel for JPEG at 90% quality
10552    const baseSize = width * height * 3;
10553    
10554    // Apply quality factor (90% quality typically results in ~30-40% compression)
10555    const compressionFactor = quality === 0.9 ? 0.35 : (1 - quality) * 0.5 + 0.2;
10556    
10557    const estimatedSize = Math.round(baseSize * compressionFactor);
10558    
10559    // Format to human readable
10560    if (estimatedSize < 1024) {
10561      return `${estimatedSize} B`;
10562    } else if (estimatedSize < 1024 * 1024) {
10563      return `${(estimatedSize / 1024).toFixed(1)} KB`;
10564    } else {
10565      return `${(estimatedSize / (1024 * 1024)).toFixed(1)} MB`;
10566    }
10567  }
10568
10569  // Update image size information
10570  function updateImageSizeInfo() {
10571    if (!cropper) return;
10572    
10573    const imageData = cropper.getImageData();
10574    const cropBoxData = cropper.getCropBoxData();
10575    const canvasData = cropper.getCanvasData();
10576    
10577    // Calculate the scale factor between natural image size and displayed size
10578    const scaleFactorX = originalImageSize.width / imageData.naturalWidth;
10579    const scaleFactorY = originalImageSize.height / imageData.naturalHeight;
10580    
10581    // Calculate the actual output size based on crop box and scale factor
10582    const outputWidth = Math.round((cropBoxData.width / canvasData.width) * imageData.naturalWidth);
10583    const outputHeight = Math.round((cropBoxData.height / canvasData.height) * imageData.naturalHeight);
10584    
10585    // Update display
10586    document.getElementById('originalSize').textContent = 
10587      `Original: ${formatImageSize(originalImageSize.width, originalImageSize.height)}`;
10588    document.getElementById('newSize').textContent = 
10589      `New: ${formatImageSize(outputWidth, outputHeight)}`;
10590  }
10591  
10592  // Initialize Image Editor Popup
10593  function initImageEditor() {
10594    const editorHTML = `
10595      <div id="imageEditorPopup" class="image-editor-popup">
10596        <div class="image-editor-overlay"></div>
10597        <div class="image-editor-modal">
10598          <div class="image-editor-header">
10599            <h3>Edit Image</h3>
10600            <button class="close-editor" type="button">&times;</button>
10601          </div>
10602          <div class="image-editor-content">
10603            <div class="image-editor-canvas">
10604              <img id="imageToEdit" src="" alt="Image to edit">
10605            </div>
10606            <div class="image-editor-controls">
10607              <div class="control-group">
10608                <label>Crop Aspect Ratio:</label>
10609                <select id="aspectRatio">
10610                  <option value="free">Free</option>
10611                  <option value="1">1:1 (Square)</option>
10612                  <option value="1.33">4:3</option>
10613                  <option value="1.77">16:9</option>
10614                  <option value="0.75">3:4 (Portrait)</option>
10615                </select>
10616              </div>
10617              <div class="control-group">
10618                <label>Image Size:</label>
10619                <div id="imageSizeInfo">
10620                  <span id="originalSize">Original: -</span>
10621                  <span id="newSize">New: -</span>
10622                </div>
10623              </div>
10624              <div class="control-group">
10625                <button type="button" id="rotateLeft">↺ Rotate Left</button>
10626                <button type="button" id="rotateRight">↻ Rotate Right</button>
10627                <button type="button" id="flipH">⟷ Flip H</button>
10628                <button type="button" id="flipV">⟱ Flip V</button>
10629              </div>
10630              <div class="control-group">
10631                <button type="button" id="resetImage">Reset</button>
10632                <button type="button" id="cropImage">Apply Crop</button>
10633              </div>
10634            </div>
10635          </div>
10636          <div class="image-editor-footer">
10637            <button type="button" class="btn-cancel">Cancel</button>
10638            <button type="button" class="btn-save">Save Changes</button>
10639          </div>
10640        </div>
10641      </div>`;
10642    
10643    if (!document.getElementById('imageEditorPopup')) {
10644      document.body.insertAdjacentHTML('beforeend', editorHTML);
10645      initImageEditorEvents();
10646    }
10647  }
10648
10649  // Initialize Image Editor Events
10650  function initImageEditorEvents() {
10651    const popup = document.getElementById('imageEditorPopup');
10652    const imageToEdit = document.getElementById('imageToEdit');
10653    
10654    // Close editor events
10655    popup.querySelector('.close-editor').onclick = closeImageEditor;
10656    popup.querySelector('.btn-cancel').onclick = closeImageEditor;
10657    popup.querySelector('.image-editor-overlay').onclick = closeImageEditor;
10658    
10659    // Save edited image
10660    popup.querySelector('.btn-save').onclick = saveEditedImage;
10661    
10662    // Aspect ratio change
10663    document.getElementById('aspectRatio').onchange = function() {
10664      if (cropper) {
10665        const value = this.value;
10666        cropper.setAspectRatio(value === 'free' ? NaN : parseFloat(value));
10667        updateImageSizeInfo();
10668      }
10669    };
10670    
10671    // Rotation and flip controls
10672    document.getElementById('rotateLeft').onclick = () => {
10673      if (cropper) {
10674        cropper.rotate(-90);
10675        updateImageSizeInfo();
10676      }
10677    };
10678    document.getElementById('rotateRight').onclick = () => {
10679      if (cropper) {
10680        cropper.rotate(90);
10681        updateImageSizeInfo();
10682      }
10683    };
10684    document.getElementById('flipH').onclick = () => {
10685      if (cropper) {
10686        cropper.scaleX(-cropper.getImageData().scaleX);
10687        updateImageSizeInfo();
10688      }
10689    };
10690    document.getElementById('flipV').onclick = () => {
10691      if (cropper) {
10692        cropper.scaleY(-cropper.getImageData().scaleY);
10693        updateImageSizeInfo();
10694      }
10695    };
10696    
10697    // Reset image
10698    document.getElementById('resetImage').onclick = function() {
10699      if (cropper) {
10700        cropper.reset();
10701        updateImageSizeInfo();
10702      }
10703    };
10704    
10705    // Apply crop
10706    document.getElementById('cropImage').onclick = function() {
10707      if (cropper) {
10708        const croppedCanvas = cropper.getCroppedCanvas();
10709        cropper.replace(croppedCanvas.toDataURL());
10710        updateImageSizeInfo();
10711      }
10712    };
10713  }
10714
10715  // Open Image Editor
10716  function openImageEditor(file) {
10717    currentImageFile = file;
10718    const popup = document.getElementById('imageEditorPopup');
10719    const imageToEdit = document.getElementById('imageToEdit');
10720    
10721    const reader = new FileReader();
10722    reader.onload = function(e) {
10723      imageToEdit.src = e.target.result;
10724      
10725      // Add show class with slight delay for smooth animation
10726      setTimeout(() => {
10727        popup.classList.add('show');
10728      }, 10);
10729      
10730      // Initialize Cropper.js
10731      if (cropper) {
10732        cropper.destroy();
10733      }
10734      
10735      // Load Cropper.js if not already loaded
10736      if (typeof Cropper === 'undefined') {
10737        loadCropperJS().then(() => {
10738          initCropper();
10739        });
10740      } else {
10741        initCropper();
10742      }
10743    };
10744    reader.readAsDataURL(file);
10745  }
10746
10747  // Initialize Cropper
10748  function initCropper() {
10749    const imageToEdit = document.getElementById('imageToEdit');
10750    
10751    cropper = new Cropper(imageToEdit, {
10752      aspectRatio: NaN,
10753      viewMode: 1,
10754      dragMode: 'move',
10755      autoCropArea: 1,
10756      responsive: true,
10757      background: false,
10758      guides: true,
10759      center: true,
10760      highlight: false,
10761      cropBoxMovable: true,
10762      cropBoxResizable: true,
10763      toggleDragModeOnDblclick: false,
10764      ready: function() {
10765        // Store original image size when cropper is ready
10766        const imageData = this.cropper.getImageData();
10767        originalImageSize.width = imageData.naturalWidth;
10768        originalImageSize.height = imageData.naturalHeight;
10769        
10770        // Update size info when cropper is ready
10771        updateImageSizeInfo();
10772      },
10773      crop: function() {
10774        // Update size info on crop change
10775        updateImageSizeInfo();
10776      }
10777    });
10778  }
10779
10780  // Load Cropper.js library
10781  function loadCropperJS() {
10782    return new Promise((resolve, reject) => {
10783      if (typeof Cropper !== 'undefined') {
10784        resolve();
10785        return;
10786      }
10787      
10788      // Load CSS
10789      const cssLink = document.createElement('link');
10790      cssLink.rel = 'stylesheet';
10791      cssLink.href = 'https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.css';
10792      document.head.appendChild(cssLink);
10793      
10794      // Load JS
10795      const script = document.createElement('script');
10796      script.src = 'https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.js';
10797      script.onload = resolve;
10798      script.onerror = reject;
10799      document.head.appendChild(script);
10800    });
10801  }
10802
10803  // Close Image Editor
10804  function closeImageEditor() {
10805    const popup = document.getElementById('imageEditorPopup');
10806    
10807    // Remove show class for animation
10808    popup.classList.remove('show');
10809    
10810    if (cropper) {
10811      cropper.destroy();
10812      cropper = null;
10813    }
10814    
10815    // Reset variables
10816    currentImageFile = null;
10817    originalImageSize = { width: 0, height: 0 };
10818    
10819    // Reset size display
10820    document.getElementById('originalSize').textContent = 'Original: -';
10821    document.getElementById('newSize').textContent = 'New: -';
10822  }
10823
10824  // Save Edited Image
10825  function saveEditedImage() {
10826    if (!cropper) return;
10827    
10828    // Get cropped canvas without any scaling - keep original dimensions
10829    const canvas = cropper.getCroppedCanvas({
10830      imageSmoothingEnabled: true,
10831      imageSmoothingQuality: 'high',
10832    });
10833    
10834    canvas.toBlob(function(blob) {
10835      // Create new file from edited image
10836      const editedFile = new File([blob], currentImageFile.name, {
10837        type: 'image/jpeg',
10838        lastModified: Date.now()
10839      });
10840      
10841      // Close editor
10842      closeImageEditor();
10843      
10844      // Process the edited image
10845      processEditedImage(editedFile);
10846    }, 'image/jpeg', 0.9);
10847  }
10848
10849  // Process Edited Image
10850  function processEditedImage(file) {
10851    const reader = new FileReader();
10852    reader.onload = function(e) {
10853      // Show loader on preview area
10854      $('.steps-card-preview').addClass('loading-upload');
10855      $('.ajax-loader').show();
10856      
10857      $('.placeholder-image').hide();
10858      $('.icon-upload').hide();
10859      $('.preview-image').show();
10860      $('.remove-image').show();
10861      $('.preview-image').attr('src', e.target.result);
10862      
10863      
10864      // Start upload process with edited image
10865      uploadMedia(file, 'image/jpeg').then(() => {
10866        $('.ajax-loader').hide();
10867        $('.steps-card-preview').removeClass('loading-upload loading');
10868        $(".nextBtn").attr("disabled", false);
10869      }).catch((error) => {
10870        $('.ajax-loader').hide();
10871        $('.steps-card-preview').removeClass('loading-upload loading');
10872        console.error('Upload failed:', error);
10873      });
10874      
10875    };
10876    reader.readAsDataURL(file);
10877  }
10878
10879  function readURL(input) {
10880    if (input.files && input.files[0]) {
10881      const file = input.files[0];
10882      
10883      // Check if it's an image file
10884      if (file.type.startsWith('image/')) {
10885        // Validate image file size
10886        if (file.size > 5242880) {
10887          alert('File size exceeds maximum limit 5 MB');
10888          return;
10889        }
10890        
10891        // Initialize image editor if not already done
10892        initImageEditor();
10893        
10894        // Open image editor for editing
10895        openImageEditor(file);
10896      } else if (file.type.match('video/')) {
10897        // Handle video upload normally
10898        if (file.size > 15728640) {
10899          alert('File size exceeds maximum limit 15 MB');
10900          return;
10901        }
10902        
10903        let reader = new FileReader();
10904        reader.onload = function (e) {
10905          $(".nextBtn").attr("disabled", true);
10906          $(".steps-card-preview").addClass("loading");
10907          
10908          
10909          uploadMedia(file, 'video/mp4').then(() => {
10910            $('.steps-card-preview').removeClass('loading');
10911            $(".nextBtn").attr("disabled", false);
10912          }).catch((error) => {
10913            $('.steps-card-preview').removeClass('loading');
10914            console.error('Upload failed:', error);
10915          });
10916          
10917        };
10918        reader.readAsDataURL(file);
10919      } else {
10920        alert('Please select a valid image or video file.');
10921      }
10922    }
10923  }
10924
10925  async function readURLPapan(input) {
10926    if (input.files && input.files[0]) {
10927      let reader = new FileReader();
10928
10929      reader.onload = function (e) {
10930        $('.btn-upload-papan').siblings('label').hide();
10931        $('.btn-upload-papan img').attr('src', e.target.result);
10932        $('.btn-upload-papan img').show();
10933        $('.svgLogoPapan').hide();
10934        
10935        // Show loader during upload
10936        $('.btn-upload-papan').addClass('loading-upload');
10937        $('.ajax-loader').show();
10938      }
10939      
10940      const type = 'image/jpeg'
10941      const name = `logo-7881418965207-${Date.parse(new Date())}`
10942
10943      try {
10944        let formData = new FormData(); 
10945        formData.append("file", input.files[0]);
10946        const response = await fetch(`${host}/api/upload?name=${name}&type=${type}&r=${randomString(3, '0123456789')}&shop=${shop}`, {
10947          method: "POST", 
10948          body: formData
10949        })
10950        const result = await response.json();
10951        if(result) {
10952          const url = result.url
10953          $("[data-properties=papan-logo]").val(url)
10954        }
10955        
10956        // Hide loader after upload completes
10957        $('.btn-upload-papan').removeClass('loading-upload');
10958        $('.ajax-loader').hide();
10959      } catch (error) {
10960        // Hide loader on error
10961        $('.btn-upload-papan').removeClass('loading-upload');
10962        $('.ajax-loader').hide();
10963        console.error('Upload failed:', error);
10964      }
10965
10966      reader.readAsDataURL(input.files[0]);
10967    }
10968  }
10969
10970  async function readURLAddress(input) {
10971    console.log(input, 'readURLAddress')
10972    if (input.files && input.files[0]) {
10973      let reader = new FileReader();
10974
10975      reader.onload = function (e) {
10976        $('.photo-address').attr('src', e.target.result);
10977        $('.photo-address').show();
10978        
10979        // Show loader during upload
10980        $('.photo-address').parent().addClass('loading-upload');
10981        $('.ajax-loader').show();
10982      }
10983      
10984      const type = 'image/jpeg'
10985      const name = input.files[0].name?.split('.')[0]
10986
10987      try {
10988        let formData = new FormData(); 
10989        formData.append("file", input.files[0]);
10990        const response = await fetch(`${host}/api/upload?name=${name}&type=${type}&r=${randomString(3, '0123456789')}&shop=${shop}`, {
10991          method: "POST", 
10992          body: formData
10993        })
10994        const result = await response.json();
10995
10996        // Hide loader after upload completes
10997        $('.photo-address').parent().removeClass('loading-upload');
10998        $('.ajax-loader').hide();
10999
11000        reader.readAsDataURL(input.files[0]);
11001
11002        return result
11003      } catch (error) {
11004        // Hide loader on error
11005        $('.photo-address').parent().removeClass('loading-upload');
11006        $('.ajax-loader').hide();
11007        console.error('Upload failed:', error);
11008        
11009        reader.readAsDataURL(input.files[0]);
11010        return null;
11011      }
11012    }
11013  }
11014
11015  // Hit OCR endpoint to extract address information
11016  async function hitOCREndpoint(imageUrl) {
11017    try {
11018      console.log('Starting OCR process with image:', imageUrl);
11019      
11020      const payload = {
11021        imageUrl: imageUrl
11022      }
11023      
11024      const response = await fetch('http://localhost:5001/api/shipping/ocr', {
11025        method: 'POST',
11026        headers: {
11027          'Content-Type': 'application/json'
11028        },
11029        body: JSON.stringify(payload)
11030      })
11031      
11032      if (!response.ok) {
11033        throw new Error(`OCR API error: ${response.statusText}`);
11034      }
11035      
11036      const data = await response.json();
11037      console.log('OCR response:', data);
11038      
11039      if (data.formatted && data.formatted.length > 0) {
11040        showAddressOptionsPopup(data.formatted)
11041      } else {
11042        alert('Tidak ada data alamat yang ditemukan dari foto. Silakan coba lagi.')
11043      }
11044    } catch (error) {
11045      console.error('OCR endpoint error:', error);
11046      alert('Ada error saat memproses foto alamat. Silakan coba lagi.')
11047    }
11048  }
11049
11050  // Display popup with address options
11051  function showAddressOptionsPopup(addresses) {
11052    // Initialize popup HTML if not exists
11053    if (!document.getElementById('ocrAddressPopup')) {
11054      initOCRAddressPopup()
11055    }
11056    
11057    const popup = document.getElementById('ocrAddressPopup');
11058    const optionsContainer = document.getElementById('ocrAddressOptions');
11059    
11060    // Clear previous options
11061    optionsContainer.innerHTML = '';
11062    
11063    // Add address options
11064    addresses.forEach((address, index) => {
11065      const option = document.createElement('div');
11066      option.className = 'ocr-address-option';
11067      option.setAttribute('data-index', index);
11068      option.setAttribute('data-county', address.county || '');
11069      option.setAttribute('data-postcode', address.postcode || '');
11070      option.setAttribute('data-state', address.state || '');
11071      option.setAttribute('data-country', address.country || '');
11072      
11073      const addressText = address.full_address || `${address.street || ''} ${address.city || ''} ${address.state || ''}`.trim();
11074      option.innerHTML = `
11075        <div class="address-content">
11076          <p class="address-text">${addressText}</p>
11077          <small class="address-details">${address.postcode || ''}</small>
11078        </div>
11079      `;
11080      
11081      option.addEventListener('click', function() {
11082        selectAddressOption(this, address)
11083      });
11084      
11085      optionsContainer.appendChild(option);
11086    });
11087    
11088    // Show popup
11089    popup.classList.add('show');
11090    document.body.classList.add('ocr-popup-open');
11091  }
11092
11093  // Initialize OCR address popup if not exists
11094  function initOCRAddressPopup() {
11095    const popupHTML = `
11096      <div id="ocrAddressPopup" class="ocr-address-popup">
11097        <div class="ocr-popup-overlay"></div>
11098        <div class="ocr-popup-content">
11099          <div class="ocr-popup-header">
11100            <h3>Pilih Alamat dari Foto</h3>
11101            <button class="close-ocr-popup">&times;</button>
11102          </div>
11103          <div class="ocr-popup-body">
11104            <div id="ocrAddressOptions" class="ocr-address-options"></div>
11105          </div>
11106        </div>
11107      </div>
11108    `;
11109    
11110    document.body.insertAdjacentHTML('beforeend', popupHTML);
11111    
11112    // Setup close buttons
11113    const popup = document.getElementById('ocrAddressPopup');
11114    const closeBtn = popup.querySelector('.close-ocr-popup');
11115    const overlay = popup.querySelector('.ocr-popup-overlay');
11116    
11117    closeBtn.addEventListener('click', closeOCRAddressPopup);
11118    overlay.addEventListener('click', closeOCRAddressPopup);
11119  }
11120
11121  // Handle address selection
11122  function selectAddressOption(element, address) {
11123    const county = element.getAttribute('data-county');
11124    const postcode = element.getAttribute('data-postcode');
11125    const state = element.getAttribute('data-state');
11126    const country = element.getAttribute('data-country');
11127    
11128    const fullAddress = address.full_address || `${address.street || ''} ${address.city || ''} ${address.state || ''}`.trim();
11129    
11130    console.log('Selected address:', {
11131      fullAddress,
11132      county,
11133      postcode,
11134      state,
11135      country
11136    });
11137    
11138    // Fill in the form fields with selected address
11139    $("[data-properties=alamat-penerima], #streetAddress").val(fullAddress);
11140    
11141    if (postcode) {
11142      $("[data-properties=kodepos], #zip").val(postcode);
11143    }
11144    
11145    if (state) {
11146      $("#province").val(state).trigger('change');
11147    }
11148    
11149    if (country) {
11150      $("#properties-kota-pengiriman-country").val(country);
11151    }
11152    
11153    // Close popup after selection
11154    closeOCRAddressPopup();
11155  }
11156
11157  // Close OCR address popup
11158  function closeOCRAddressPopup() {
11159    const popup = document.getElementById('ocrAddressPopup');
11160    if (popup) {
11161      popup.classList.remove('show');
11162      document.body.classList.remove('ocr-popup-open');
11163    }
11164  }
11165
11166  
11167
11168  
11169  async function addToCartUang() {
11170    var productAddOnId1 = 42122101162199;
11171    var productAddOnId2 = 42122101194967;
11172    var product_id = 7881418965207
11173    const data = {
11174      items: [
11175          {
11176              quantity: $("#Quantity-" + productAddOnId1).val(),
11177              id: productAddOnId1,
11178              "properties": { "Time": $("#properties-time").val() }
11179          },
11180          {
11181              quantity: $("#Quantity-" + productAddOnId2).val(),
11182              id: productAddOnId2,
11183              "properties": { "Time": $("#properties-time").val() }
11184          }
11185      ]
11186    }
11187    await fetch(window.Shopify.routes.root + 'cart/add.js', {
11188      method: 'POST',
11189      headers: {
11190        'Content-Type': 'application/json'
11191      },
11192      body: JSON.stringify(data)
11193    })
11194    .then(response => {
11195      console.error('Sukses Buket Uang:', response);
11196      $(".form-flower").submit()
11197    })
11198    .catch((error) => {
11199      console.error('Error Buket Uang:', error);
11200      $(".form-flower").submit()
11201    });
11202  }
11203  
11204  // Utility function untuk membuat data card yang konsisten dengan default "-"
11205  function createCardData(overrides = {}) {
11206    const defaultData = {
11207      "ID": $("#properties-properties-qrId").val() !== '' ? $("#properties-properties-qrId").val() : '-',
11208      "Kartu Nama Penerima": (() => {
11209        const name = $("[data-properties=penerima]").val().trim();
11210        if (!name || name === '-') {
11211          return '-';
11212        }
11213        const prefix = $(".label-prefix").text().trim();
11214        return (prefix + (name ? ' ' + name : '')).trim() || '-';
11215      })(),
11216      "Kartu Nama Pengirim": $("#properties-kartu-nama-pengirim").val() !== '' ? $("#properties-kartu-nama-pengirim").val() : '-',
11217      "Kartu Ucapan": $("[data-properties=ucapan]").val() !== '' ? $("[data-properties=ucapan]").val() : '-',
11218      "Nama Penerima": $("#properties-nama-penerima").val() !== '' ? $("#properties-nama-penerima").val() : '-',
11219      "Order Number": "-",
11220      "Status": "Product",
11221      "Foto": $("#properties-photo").val() !== '' ? $("#properties-photo").val() : '-',
11222      "Media": $("#properties-video").val() !== '' ? $("#properties-video").val() : '-',
11223      "Image": "7881418965207"
11224    }
11225    
11226    // Merge dengan overrides jika ada
11227    return JSON.stringify({...defaultData, ...overrides})
11228  }
11229
11230  // Utility function untuk membuat data save card (insertCard/updateCard)
11231  function createSaveCardData(overrides = {}) {
11232    const defaultData = {
11233      "id": qrID || '',
11234      "penerima": $("#properties-nama-penerima").val() !== '' ? $("#properties-nama-penerima").val() : '-',
11235      "kartu_penerima": (() => {
11236        const name = $("[data-properties=penerima]").val().trim();
11237        if (!name || name === '-') {
11238          return '-';
11239        }
11240        const prefix = $(".label-prefix").text().trim();
11241        return (prefix + (name ? ' ' + name : '')).trim() || '-';
11242      })(),
11243      "kartu_ucapan": $("[data-properties=ucapan]").val() !== '' ? $("[data-properties=ucapan]").val() : '-',
11244      "kartu_pengirim": $("[data-properties=pengirim]").val() !== '' ? $("[data-properties=pengirim]").val() : '-',
11245      "foto": $("#properties-photo").val() !== '' ? $("#properties-photo").val() : '-',
11246      "video": $("#properties-video").val() !== '' ? $("#properties-video").val() : '-',
11247      "productId": "7881418965207",
11248      "order_name": "-",
11249      "status": "Product"
11250    }
11251    
11252    // Merge dengan overrides jika ada  
11253    const mergedData = {...defaultData, ...overrides}
11254    return {
11255      data: JSON.stringify(mergedData),
11256      parsed: mergedData
11257    }
11258  }
11259
11260  async function saveCard(){
11261    let isCard = true
11262    const cardData = createSaveCardData()
11263
11264    const id = $(".greetingCard").data("id")
11265
11266    if(!id){
11267      if((cardData.parsed.kartu_ucapan !== '' && cardData.parsed.kartu_ucapan !== '-') || 
11268         (cardData.parsed.foto !== '' && cardData.parsed.foto !== '-') || 
11269         (cardData.parsed.video !== '' && cardData.parsed.video !== '-')){
11270        if($("#qrcode").length){
11271          var qrCode = new QRCode(document.getElementById("qrcode"), {
11272            text: `https://moment.outerbloom.com/${qrID}`,
11273            width: 200,
11274            height: 200,
11275            colorDark : "#212121",
11276            colorLight : "#ffffff",
11277            correctLevel: QRCode.CorrectLevel.L,
11278          });
11279        }
11280        $("#properties-qrId").val(qrID)
11281        const insert_card = await insertCard(cardData.data)
11282        console.log(insert_card, 'insert')
11283        
11284        // Trigger card preview update
11285        $(document).trigger('cardDataUpdated')
11286        
11287        return insert_card
11288      }
11289    } else {
11290      console.log('start update')
11291      const update_card = await updateCard(id, cardData.data)
11292      console.log(update_card, 'update_card')
11293      
11294      // Trigger card preview update
11295      $(document).trigger('cardDataUpdated')
11296      
11297      return update_card
11298    }
11299  }
11300
11301  async function additem(items){
11302    try {
11303      let formData = items
11304      if(items?.length) {
11305        formData = {
11306           'items': items
11307        };
11308      }
11309  
11310      const add = await fetch(window.Shopify.routes.root + 'cart/add.js', {
11311        method: 'POST',
11312        headers: {
11313          'Content-Type': 'application/json',
11314          'X-Requested-With':'xmlhttprequest' /* XMLHttpRequest is ok too, it's case insensitive */
11315        },
11316        body: JSON.stringify(formData)
11317      })
11318  
11319      const data = await add.json();
11320      return data
11321    } catch(err){
11322      console.log('Error additem', err)
11323    }
11324  }
11325
11326  async function addons(){
11327    let items = []
11328    
11329    // First, try to get addons from the summary section (.addon-item)
11330    if($(".addon-item").length > 0) {
11331      $(".addon-item").each(function(){
11332        const p = $(this)
11333        const props = p.next(".propsAddonSpotify")
11334        const id = $(this).data("id")
11335        const quantity = $(this).data("qty")
11336        const propId = $("#properties-time").val()
11337        let properties = {}
11338        if(id === 46067682607319) {
11339          const link = props.find(".spotifyLinkAddon").text()
11340          const photo = props.find(".spotifyFotoAddon").text()
11341          const song = props.find(".spotifySongAddon").text()
11342          const artist = props.find(".spotifyArtistAddon").text()
11343          properties = {
11344            id: propId,
11345            "Spotify Link": link !== '' ? link : '-',
11346            "Spotify Photo": photo !== '' ? photo : '-',
11347            "Spotify Song": song !== '' ? song : '-',
11348            "Spotify Artist": artist !== '' ? artist : '-',
11349            type: 'addon'
11350          }
11351        } else {
11352          properties = { 
11353            "id": propId, 
11354            "type": "addon"
11355          }
11356        }
11357        items.push({
11358          id, 
11359          quantity, 
11360          properties
11361        })
11362      })
11363    } else {
11364      // If no addon-item found, get directly from #itemAddons .selected
11365      const selectedAddons = $("#itemAddons").find(".selected")
11366      if(selectedAddons.length > 0) {
11367        selectedAddons.each(function(){
11368          const id = $(this).data("variant")
11369          const quantity = $(this).find(".btn-qty").val() || 1
11370          const propId = $("#properties-time").val()
11371          const properties = { 
11372            "id": propId, 
11373            "type": "addon"
11374          }
11375          items.push({
11376            id: Number(id), 
11377            quantity: Number(quantity), 
11378            properties
11379          })
11380        })
11381      }
11382    }
11383    
11384    return items
11385  }
11386
11387  async function propItems() {
11388    let props = {}
11389    $("[data-properties]").each(function(e){
11390      let elementType = this.tagName;
11391      const k = $(this).data("properties")
11392      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') {
11393        const v = elementType === 'SELECT' ? $(this).find(":selected").val() : $(this).val();
11394        if(v !== '') {
11395          props[k] = v?.replace(/[\s\n]/g, '');
11396        }
11397      }
11398    })
11399    return props
11400  }
11401
11402  async function showPopupCart(items){
11403    if(productType !== '') {
11404      console.log("clarity event " + productType + ' completeOrder')
11405      window.clarity("event", `${productType} completeOrder`)
11406      // window.clarity("set", productType, `completeOrder - ${productDate}`)
11407    }
11408    $("#popupCart").show()
11409    
11410      $(".propDeliveryCity").text($("#cities").val())
11411      $(".propDeliveryDate").text($("#propDeliveryDate").val())
11412      $(".propDeliveryTime").text($("#propDeliveryTime").val())
11413      $(".propDeliveryName").text($("[data-properties=nama-penerima]").val())
11414      $(".propDeliveryAddress").text($("[data-properties=alamat-penerima]").val())
11415      $(".propDeliveryPhone").text($("[data-properties=telepon-penerima]").val())
11416      $(".propDeliveryProv").text($("#province").val())
11417      $(".propDeliveryZip").text($("#properties-kodepos").val()) 
11418      
11419    
11420
11421    const addons = []
11422    if(items && items.length > 0) {
11423      for(let i = 1; i < items.length; i++) {
11424        const spotifyLink = items[i].properties['Spotify Link']
11425        const spotifyPhoto = items[i].properties['Spotify Photo']
11426        const spotifySong = items[i].properties['Spotify Song']
11427        const spotifyArtist = items[i].properties['Spotify Artist']
11428        const price = items[i].price / 100
11429        const props = spotifyLink ? `<div class="propsAddonCart row m-0">
11430                  <div class="col-12 col-lg-2"></div>
11431                  <div class="col-12 col-lg-10">
11432                    <p>
11433                      <span>spotify link</span>
11434                      <span>${spotifyLink}</span>
11435                    </p>
11436                    <p>
11437                      <span>Upload Photo</span>
11438                      <span>${spotifyPhoto}</span>
11439                    </p>
11440                    <p>
11441                      <span>song / playlist name</span>
11442                      <span>${spotifySong}</span>
11443                    </p>
11444                    <p>
11445                      <span>artist name</span>
11446                      <span>${spotifyArtist}</span>
11447                    </p>
11448                  </div>
11449                </div>` : '';
11450        addons.push(`<div class="row m-0">
11451                  <div class="imgAddonCart col-2">
11452                    <img
11453                      width="43"
11454                      src="${items[i].image}"
11455                      alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"
11456                    >
11457                  </div>
11458                  <div class="imgAddonTitlePrice col-10 align-self-center">
11459                    <div class="row justify-content-between m-0">
11460                      <div class="col-12 col-lg-8">
11461                        <h5>${items[i].title}</h5>
11462                      </div>
11463                      <div class="col-12 col-lg-4 text-lg-right">
11464                        <span>${rupiah.format(price)}</span>
11465                      </div>
11466                    </div>
11467                  </div>
11468                </div>${props}`)
11469      }
11470    }
11471    // console.log(addons)
11472    if(addons.length === 0) {
11473      $(".itemAddonCart").hide()
11474      return
11475    }
11476    $(".toggleAddonCart h4").text(`add-ons (${items.length - 1})`)
11477    $(".wrapperItemAddonCart").html(addons)
11478  }
11479
11480  const money = (money) => {
11481      return new Intl.NumberFormat('id-ID',
11482          { style: 'currency', currency: 'IDR', minimumFractionDigits: 0 }
11483      ).format(money);
11484  }
11485
11486  async function showNoteMoney() {
11487    let qty50k = $("[data-properties='Uang 50k']").val()
11488    let qty100k = $("[data-properties='Uang 100k']").val()
11489    const total50k = Number(qty50k) * 50000
11490    const total100k = Number(qty100k) * 100000
11491    const total_all = total50k + total100k
11492    $(".prop50k").html(`<span>${qty50k} Lembar: <strong class="pl-1">${money(total50k)}</strong></span>`)
11493    $(".prop100k").html(`<span>${qty100k} Lembar: <strong class="pl-1">${money(total100k)}</strong></span>`)
11494    $(".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;
11494 color: #8d3f2d">Customer Service</a> to confirm with proof of payment.</p>`)
11495  }
11496
11497  async function removeImage() {
11498    // Reset to initial state of case-img-preview
11499    $(".remove-image").hide()
11500    $("#properties-photo").val("-")
11501    $(".preview-image").hide().attr("src", "")
11502    $(".placeholder-image").show()
11503    $(".icon-upload").show()
11504    $(".ajax-loader").hide()
11505    
11506    // Reset the button states
11507    $(".case-video-preview").hide()
11508    $(".case-img-preview .btn-upload button").show()
11509  }
11510
11511  async function removeVideo() {
11512    $("#properties-video").val("-")
11513    $(this).find("img").hide()
11514    $(this).hide()
11515    $(this).prev("p").text("Add video to make it more special (optional)")
11516    $("#label-input-video").show()
11517    $("#label-input-video span").text("Upload Video")
11518    $(".case-video-preview p span").remove()
11519  }
11520
11521  async function loadItemOccasion(t, occasion) {
11522    const name = occasion?.replace('greeting-card-', '')
11523    $("#kartu-ucapan").val("")
11524    $("[data-occassion]").removeClass("selected")
11525    $("[data-properties=ucapan]").val("")
11526    $("#save-card").attr("disabled", true)
11527    t.addClass("selected")
11528    $("#show_note").attr("data-card-occassion", name)
11529    $.get(`https://outerbloom.com/collections/${occasion}/products.json`, function(data, status){
11530        const products = data.products
11531        const html = []
11532        for(let i = 0; i < products.length; i++) {
11533            const id = products[i].id
11534            const variantId = products[i].variants[0].id
11535            const img = products[i].images[0].src
11536            const title = products[i].title
11537            const price = products[i].variants[0].price
11538            const qty = products[i].variants[0].inventory_quantity
11539            const body = `<div class="item-card${price < 1 ? ' free' : ' nofree'}${i === 0 ? ' selected' : ''}" data-id=${id}>
11540                <label for="card-${variantId}"></label>
11541                    <div class="card-image">
11542                        <img src="${img}" alt="${title}" width="" height="" />
11543                    </div>
11544                    <div class="card-meta text-center">
11545                        <h5>${title}</h5>
11546                        <p>${price < 1 ? 'FREE' : rupiah.format(price)}</p>
11547                        <input id="card-${variantId}" type="radio" name="id" value="${variantId}" data-price="${price}">
11548                    </div>
11549                </div>`
11550            html.push(body)
11551        }
11552        const withoutCard = `<div class="item-card item-without-card">
11553                <label for="card-0"></label>
11554                    <div class="card-image">
11555                        <img src="https://cdn.shopify.com/s/files/1/1589/6833/t/129/assets/without-card.png?v=1747632283" alt="Without card" width="" height="" />
11556                    </div>
11557                    <div class="card-meta text-center">
11558                        <h5>
11558Send without a greeting card</h5>
11559                        <input id="card-0" type="radio" name="id" value="" data-price="">
11560                    </div>
11561                </div>`
11562        $("#itemCards .items-card").html(html.length === 0 ? '<p>No Item available</p>' : html.join(""))
11563    });
11564  }
11565
11566  async function setItems() {
11567    let items = []
11568    const mainProps = {
11569      
11570        "Delivery Date": $("#propDeliveryDate").val(),
11571        "Delivery Time": $("#propDeliveryTime").val() !== '' ? $("#propDeliveryTime").val() : '-' ,
11572        "Kota Pengiriman": $("#cities").val(),
11573        "Nama Penerima": $("[data-properties=nama-penerima]").val() !== '' ? $("[data-properties=nama-penerima]").val() : '-' ,
11574        "Alamat Penerima": $("[data-properties=alamat-penerima]").val() !== '' ? $("[data-properties=alamat-penerima]").val() : '-' ,
11575        "Kodepos": $("#properties-kodepos").val() !== '' ? $("#properties-kodepos").val() : '-' ,
11576        "Telepon Penerima": $("[data-properties=telepon-penerima").val() !== '' ? $("[data-properties=telepon-penerima").val() : '-' ,
11577      
11578      
11579      
11580        "Kartu Nama Penerima": (() => {
11581          const name = $("[data-properties=penerima]").val().trim();
11582          if (!name || name === '-') {
11583            return '-';
11584          }
11585          const prefix = $(".label-prefix").text().trim();
11586          return (prefix + (name ? ' ' + name : '')).trim() || '-';
11587        })() ,
11588        "Kartu Ucapan": $("[data-properties=ucapan]").val() !== '' ? $("[data-properties=ucapan]").val() : '-' ,
11589        "Kartu Nama Pengirim": $("[data-properties=pengirim]").val() !== '' ? $("[data-properties=pengirim]").val() : '-' ,
11590        "Foto": $("#properties-photo").val() !== '' ? $("#properties-photo").val() : '-' ,
11591        "Video": $("#properties-video").val() !== '' ? $("#properties-video").val() : '-' ,
11592        "QR Code": $("#properties-qrId").val() !== '' ? $("#properties-qrId").val() : '-' ,
11593      
11594      
11595      
11596      "Province": $("#province").val() !== '' ? $("#province").val() : '-' ,
11597      "Country": $("#properties-kota-pengiriman-country").val() !== '' ? $("#properties-kota-pengiriman-country").val() : '-' ,
11598      "Shipping": $("#properties-shipping").val() !== '' ? $("#properties-shipping").val() : '-' ,
11599      "Company": $("[data-properties=company]").val() !== '' ? $("[data-properties=company]").val() : '-' ,
11600      
11601      "Delivery Method": $("#selectedShippingMethod") && $("#selectedShippingMethod").val() !== '' ? $("#selectedShippingMethod").val() : 'Delivery' ,
11602      "id": $("#properties-time").val() !== '' ? $("#properties-time").val() : '-',
11603      "type": 'product'
11604    }
11605    console.log(mainProps, 'mainProps')
11606    const props = await propItems()
11607    properties = {...mainProps, ...props };
11608    const id = $("#productSelect").find('option:selected').val()
11609    console.log(id, 'main ID')
11610    const mainItem = {
11611      id: Number(id),
11612      quantity: 1,
11613      properties
11614    }
11615    items.push(mainItem)
11616    const cardId = $("#itemCards").find(".selected input").val()
11617    const cardItem = {
11618      id: Number(cardId),
11619      quantity: 1,
11620      properties: { "id": $("#properties-time").val() !== '' ? $("#properties-time").val() : '-', type: 'card' }
11621    }
11622    console.log(cardId, 'cardId')
11623    if(cardId) {
11624      items.push(cardItem)
11625    }
11626    const addon = await addons()
11627    if(addon) {
11628      for(let i = 0; i < addon.length; i++){
11629        items.push({
11630          id: addon[i].id,
11631          quantity: addon[i].quantity,
11632          properties: addon[i].properties
11633        })
11634      }
11635    }
11636
11637    return items
11638  }
11639
11640  async function addToCart() {
11641    const items = await setItems()
11642    const addItems = await additem(items)
11643    
11644    // Check if cities is not "Kota Lainnya" and Shipping property is empty or "-"
11645    const citiesValue = $("#cities").val();
11646    const shippingValue = $("#properties-shipping").val();
11647    if (citiesValue && citiesValue !== "Kota Lainnya" && (!shippingValue || shippingValue === "" || shippingValue === "-")) {
11648      alert("Shipping city has not been selected, please try again");
11649      // Close popup and reset fields
11650      disablePopup();
11651      $("#cities").val("").trigger('change');
11652      $("#propDeliveryDate").val("");
11653      $("#propDeliveryTime").val("");
11654      $("#deliveryDate button").removeClass("selected");
11655      $("#deliveryTime button").removeClass("selected");
11656      return;
11657    }
11658    
11659    if(addItems) {
11660      $(this).find("span").removeClass("loading")
11661      disablePopup()
11662      showPopupCart(addItems.items)
11663      
11664      localStorage.setItem("items", JSON.stringify(addItems.items))
11665      const rowIndex = $(".greetingCard").data("id")
11666      if(rowIndex && rowIndex !== 0) {
11667        const data = JSON.stringify({
11668          "Status": "Cart"
11669        });
11670        const update = await updateCard(rowIndex, data)
11671        console.log(update, 'update card to cart')
11672      }
11673
11674      analytics.track('add_cart', {
11675        productId: '7881418965207', 
11676        items: addItems.items
11677      });
11678    }
11679  }
11680        
11681  $(document).ready(function(){
11682
11683    // Observer to auto-trigger addon loading when addon section becomes visible
11684    const addonObserver = new MutationObserver(function(mutations) {
11685      mutations.forEach(function(mutation) {
11686        const target = $(mutation.target)
11687        if(target.hasClass('purchaseAddon') && mutation.type === 'attributes' && mutation.attributeName === 'class') {
11688          if(!target.hasClass('hide')) {
11689            // Addon section just became visible, ensure items are loaded
11690            setTimeout(function() {
11691              if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) {
11692                console.log("Auto-triggering addon load...")
11693                $("[data-addon]").eq(0).trigger("click")
11694              }
11695            }, 150)
11696          }
11697        }
11698      })
11699    })
11700    
11701    // Start observing addon section
11702    const addonSection = document.querySelector('.purchaseAddon')
11703    if(addonSection) {
11704      addonObserver.observe(addonSection, { 
11705        attributes: true, 
11706        attributeFilter: ['class'] 
11707      })
11708    }
11709
11710    $(".purchasePopup").delegate("#addtocart-card", "click", async function(){
11711    
11712      $(this).find("span").addClass("loading")
11713      let isValid = true
11714      $(".formAddressPurchase [required]").each(function(){
11715        const t = $(this)
11716        const input = t.val()
11717        const p = t.parent()
11718        if(input === '') {
11719          p.addClass("error")
11720          isValid = false
11721        }
11722      })
11723
11724      if(!isValid) {
11725        $(this).find("span").removeClass("loading")
11726        return
11727      }
11728      
11729      await addToCart()
11730    })
11731  
11732  $("#addtocart-cart .btn").click(async function(){
11733    // First validate variant metafields
11734    if (typeof validateVariantMetafields === 'function') {
11735      const isValid = validateVariantMetafields(true);
11736      if (!isValid) {
11737        // The validateVariantMetafields function already handles scrolling and focusing
11738        alert('Please select all required variant options before proceeding.');
11739        return; // Stop execution if validation fails
11740      }
11741    }
11742    
11743    const id = $("#productSelect").find('option:selected').val()
11744    const mainProps = {
11745      id: $("#properties-time").val() !== '' ? $("#properties-time").val() : '-', 
11746      type: 'product'
11747    }
11748    const props = await propItems()
11749    const properties = { ...mainProps, ...props };
11750    const items = {
11751      id: Number(id),
11752      quantity: 1,
11753      properties
11754    }
11755    const addItems = await additem(items)
11756    if(addItems) {
11757      showPopupCart(addItems.items)
11758      localStorage.setItem("items", JSON.stringify(addItems))
11759    }
11760  })
11761
11762  $(".formAddressPurchase [required]").change(function(){
11763    const t = $(this)
11764    const p = t.parent()
11765    const v = t.val()
11766    if(v !== '') {
11767      p.removeClass("error")
11768    }
11769  })
11770
11771  $(".purchase-button").delegate("#save-card", "click", async function(){
11772    const parent = $(this).parents(".sectionPurchase")
11773    const next = parent.next(".sectionPurchase")
11774    $(this).find("span").addClass("loading")
11775    const card = await saveCard()
11776    console.log(card, 'ssaveCCC')
11777    if(card?.status === 200 || card?.status === 201) {
11778      if(next.length === 0) {
11779        $(this).find("span").removeClass("loading")
11780        disablePopup()
11781        await addToCart()
11782      }
11783      $(".scanCard").removeClass("hide")
11784      $(this).find("span").removeClass("loading")
11785      parent.addClass("hide")
11786      next.removeClass("hide")
11787      if(next.hasClass("purchaseAddon")) {
11788        $("[data-addon]").eq(0).click()
11789        console.log("clarity event addons")
11790        window.clarity("event", `${productType} add-ons`)
11791        // Ensure addon items are loaded when entering addon popup
11792        setTimeout(function() {
11793          if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) {
11794            $("[data-addon]").eq(0).trigger("click")
11795          }
11796        }, 100)
11797      }
11798      if(next.hasClass("purchaseAddress")) {
11799        initSelect2('#zip');
11800      }
11801    }
11802  })
11803
11804  $("#skip-card").click(async function(){
11805    $(".greetingCard [data-properties]").val("")
11806    $("#properties-photo").val("")
11807    $("#properties-video").val("")
11808    const parent = $(this).parents(".sectionPurchase")
11809    const next = parent.next(".sectionPurchase")
11810    parent.addClass("hide")
11811    next.removeClass("hide")
11812    // $("#itemCards").html("")
11813    await removeImage()
11814    await removeVideo()
11815    
11816    // Trigger card preview update when card data is cleared
11817    $(document).trigger('cardDataUpdated')
11818    
11819    if(next.length === 0) {
11820      $(this).find("span").removeClass("loading")
11821      disablePopup()
11822      await addToCart()
11823      return
11824    }
11825    if(next.hasClass("purchaseAddon")) {
11826      $("[data-addon]").eq(0).click()
11827      console.log("clarity event addons")
11828      window.clarity("event", `${productType} add-ons`)
11829      // Ensure addon items are loaded when entering addon popup
11830      setTimeout(function() {
11831        if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) {
11832          $("[data-addon]").eq(0).trigger("click")
11833        }
11834      }, 100)
11835    }
11836    if(next.hasClass("purchaseAddress")) {
11837      initSelect2('#zip');
11838    }
11839  })
11840
11841  $("#msgCard").click(async function(){
11842      $(this).parent().addClass("loading")
11843      let occasion = $(".selected[data-occassion]").data("occassion")
11844      occasion = occasion?.replace("greeting-card-", "")
11845      const { data } = await getFetch(`${host}/api/card/template/occasion?name=${occasion}`);
11846      const d = data?.data
11847      for(let i = 0; i < d.length; i++) {
11848        const num = Math.floor(Math.random() * (d.length - 1 + 1) + 1);
11849        const greeting = d[num]?.Greeting
11850        $(".greetingCard textarea").val(greeting)
11851        $(this).parent().removeClass("loading")
11852        
11853        // Trigger card preview update when message template is generated
11854        $(document).trigger('cardDataUpdated')
11855      }
11856      $("#save-card").attr("disabled", false)
11857    })
11858
11859  $(".sectionPurchaseBoard .next-purchase-button").click(function(){
11860    const parent = $(this).parents(".sectionPurchase")
11861    const next = parent.next(".sectionPurchase")
11862    parent.addClass("hide")
11863    next.removeClass("hide")
11864  })
11865
11866  $("#editCard").click(function(){
11867    $(".custom-card").show()
11868    $(".preview-card").hide()
11869  })
11870
11871  $("#first_name, #last_name").change(function(){
11872    const v = $(this).val()
11873    const first_name = $("#first_name").val()
11874    const last_name = $("#last_name").val() !== '' ? ' ' + $("#last_name").val() : ''
11875    $("[data-properties=nama-penerima]").val(first_name+last_name)
11876    
11877    // Trigger card preview update when first/last name changes
11878    $(document).trigger('cardDataUpdated')
11879  })
11880
11881  $("[data-occassion]").click(function(){
11882      const t = $(this)
11883      const p = t.parents(".sectionPurchase")
11884      // $(".greetingCard").addClass("disabled")
11885      const occasion = t.data("occassion")
11886      loadItemOccasion(t, occasion)
11887  })
11888
11889  $("#itemCards").delegate(".item-card:not(.item-without-card) label", "click", function(){
11890      const id = $(this).parent(".item-card").data("id")
11891      const t = $(this).parent(".item-card")
11892      const target = t.find("input")
11893      const v = $('.item-card input[type="radio"]:checked').val();
11894      $("#itemCards .item-card").removeClass("selected")
11895      t.addClass("selected")
11896      $("#itemCards .item-card").find("input").attr("name", "")
11897      if(target.length > 0) {
11898          target.attr("name", "id[]")
11899          $("#properties-card").val(id)
11900          $(".greetingCard").removeClass("disabled")
11901          $("#skip-card").attr("disabled", false)
11902      } else {
11903          $("#properties-card").val("")
11904      }
11905  })
11906
11907  $("#itemCards").delegate(".item-without-card label", "click", function(){
11908    const parent = $(this).parents(".sectionPurchase")
11909    const next = parent.next(".sectionPurchase")
11910    $(".greetingCard").addClass("disabled")
11911    parent.addClass("hide")
11912    next.removeClass("hide")
11913    $("[data-addon]").eq(0).click()
11914    initSelect2('#zip');
11915  })
11916
11917  $("[data-properties=ucapan]").keyup(function(){
11918    const v = $(this).val()
11919    const p = $(this).parents(".sectionPurchase")
11920    $(".purchaseAddress").find(".greetingCard textarea").val(v)
11921    if(v.length > 3) {
11922      p.find(".next-purchase-button").attr("disabled", false)
11923    } else {
11924      p.find(".next-purchase-button").attr("disabled", true)
11925    }
11926    
11927    // Trigger card preview update when message changes
11928    $(document).trigger('cardDataUpdated')
11929  })
11930
11931  $("[data-properties=penerima]").keyup(function(){
11932    const v = $(this).val()
11933    $(".purchaseAddress").find("[data-properties=penerima]").val(v)
11934    
11935    // Trigger card preview update when recipient name changes
11936    $(document).trigger('cardDataUpdated')
11937  })
11938
11939  $("[data-properties=pengirim]").keyup(function(){
11940    const v = $(this).val()
11941    $(".purchaseAddress").find("[data-properties=pengirim]").val(v)
11942    
11943    // Trigger card preview update when sender name changes
11944    $(document).trigger('cardDataUpdated')
11945  })
11946
11947  $(document).click(function(e){
11948
11949     if($(e.target).closest('.wrapperPopupCart').length != 0) return false;
11950     // $('#popupCart').fadeOut('slow');
11951    // location.reload()
11952  });
11953
11954  $(".toggleAddonCart").click(function(){
11955    const p = $(this).parent(".itemAddonCart")
11956    p.toggleClass("open")
11957  })
11958
11959  $(".btnViewCart").click(function(){
11960    window.location.href = "https://outerbloom.com/cart";
11961  })
11962
11963  $(".btnViewCheckout").click(async function(){
11964    $(this).find("span").addClass("loading")
11965    let zip = $("#properties-kodepos").val()
11966    const first_name = $("#first_name").val()
11967    const last_name = $("#last_name").val()
11968    const company = $("#company").val() !== '' ? $("#company").val() : ''
11969    const address1 = $("#delivery_address").val()
11970    const address2 = zip && zip !== '' ? zip?.split(' - ')[1] : ''
11971    zip = zip && zip !== '' ? zip?.split(' - ')[0] : ''
11972    const phone = $("#recipient_number").val()
11973    const city = $("#cities").val()
11974    const province = $("#province").val()
11975    const country = 'Indonesia'
11976    const ver = Date.parse(new Date())
11977    
11978    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}`
11979  
11980    const clear = await fetch(`/cart/clear.js`, {method: 'POST'})
11981    if(clear.status === 200) {
11982      const savedItem = window.localStorage.getItem("items");
11983      const items = JSON.parse(savedItem)
11984      const addItems = await additem(items)
11985      console.log(addItems, 'new addItems')
11986      if(addItems) {
11987        window.location.href = `https://outerbloom.com/checkout?${params}`;
11988      }
11989    }
11990  })
11991
11992  $(".btnContinueShopping").click(function(){
11993    window.location.href = "https://outerbloom.com/";
11994  })
11995
11996    if (isIOS) {
11997      $(".empty-state-card").click(function(){
11998        $("#input-foto").trigger("click")
11999      })
12000      $(".btn-upload-image").click(function(){
12001        $("#input-foto").trigger("click")
12002      })
12003      $("[for=input-video]").click(function(){
12004        $("#input-video").trigger("click")
12005      })
12006      $(".btn-upload-papan").click(function(){
12007        $("#logoPapan").trigger("click")
12008      })
12009    }
12010  
12011    $("[data-properties]").each(function(){
12012      const select = $(this).parents(".form-group").find("select")
12013      $(this).change(function(){
12014        const name = $(this).data("properties")
12015        const v = $(this).val()
12016        if (name == 'telepon-penerima') {
12017          let phone = v.replace(/[^0-9]/g, '')
12018          $(this).val(phone);
12019          $("#properties-telepon-penerima").val(phone)
12020          $('.iti__search-input').val('-') 
12021        } else {
12022          $("#properties-" + name).val(v)
12023        }
12024      })
12025      select.on("change", function(){
12026        const name = $(this).data("properties")
12027        const v = $(this).val()
12028        $("#properties-" + name).val(v)
12029      })
12030    })
12031
12032    $("#show_note").click(function(){
12033      const rowIndex = $(".greetingCard").data("id")
12034      const data = JSON.stringify({
12035        "Media": "-"
12036      })
12037      updateCard(rowIndex, data)
12038    })
12039
12040    $(".greetingCard").delegate(".remove-image", "click", function(e){
12041      e.preventDefault()
12042      removeImage()
12043    })
12044
12045    $(".remove-media").click(function(e){
12046      e.preventDefault()
12047      $(this).find("img").show()
12048      removeVideo()
12049    })
12050
12051    
12052
12053    $("[data-delivery_method]").click(function(e){
12054      e.preventDefault()
12055      const t = $(this)
12056      const data = t.data("delivery_method")
12057      $("[data-delivery_method]").removeClass("selected")
12058      t.addClass("selected")
12059      $("#cities").val("")
12060      $("#properties-delivery-date").val("-")
12061      $("#deliveryDate button").removeClass("selected")
12062      $("#full-date").val("Full Calendar →")
12063      $("#propDeliveryDate").val("")
12064      const step3 = $("#step-3")
12065      if(data.match('PickUp')) {
12066        $(".selfpickup-point").show()
12067        step3.find("[data-finished=false]").hide()
12068        $("#panel-4").hide()
12069        step3.find("[data-finished=true]").show()
12070        $("#cities").attr("required", false)
12071        $("#form-group-city").hide()
12072        
12073          $("#row-delivery-time").hide()
12074        
12075        
12076          $("#propDeliveryTime, #properties-delivery-time").val("-")
12077          $("#propDeliveryTime").attr("required", false)
12078        
12079        $("#properties-nama-penerima, #properties-alamat-penerima, #properties-kodepos, #properties-kodepos, #properties-telepon-penerima").val("-")
12080        // $("#deliveryDate").find("button:first-child").addClass("stop")
12081        $(".form-selfpickup").show()
12082        $(".form-delivery").hide()
12083        $(".form-delivery").find("input, textarea, select").val("")
12084        $(".form-delivery").find("input, textarea, select").attr("required", false)
12085        $("#properties-shipping").val("0")
12086        $("#noteDeliveryDate").hide()
12087        $(".form-delivery .form-control").attr("required", false)
12088        $("#stepNav4").hide()
12089        
12090        $("#deliveryDate").find("button:nth-child(1)").addClass("stop")
12091        
12092        
12093        
12094          $(".calendarbutton[data-date=14]").attr("disabled", true)
12095        
12096        if(timeOfDay >= 16.01){
12097          $("#deliveryDate").find("button:nth-child(2)").addClass("stop")
12098        }
12099      } else {
12100        
12101        
12102          $(".calendarbutton[data-date=14]").attr("disabled", false)
12103        
12104        $("#deliveryDate").find("button:nth-child(1)").removeClass("stop")
12105        step3.find("[data-finished=false]").show()
12106        $("#panel-4").show()
12107        step3.find("[data-finished=true]").hide()
12108        $("#cities").attr("required", true)
12109        $(".selfpickup-point").hide()
12110        $("#form-group-city").show()
12111        $("#cities").val('').trigger('change');
12112        $("#properties-kota-pengiriman").val("-")
12113        
12114        $("#row-delivery-date, #row-delivery-time").show()
12115        $("#propDeliveryDate, #propDeliveryTime").attr("required", true)
12116        $("#deliveryDate").find("button").removeClass("stop")
12117        $(".form-selfpickup").hide()
12118        $(".form-delivery").show()
12119        $(".form-delivery").find("input, textarea, select").attr("required", true)
12120        $(".form-delivery [data-properties]").attr("readonly", false)
12121        $("#properties-kodepos").val("-")
12122        $("#properties-alamat-penerima").val("-")
12123        $(".form-delivery .form-control").attr("required", true)
12124        $(this).parents(".setup-content").attr("id", "step-1")
12125        
12126        $("#stepNav4").show()
12127      }
12128    })
12129
12130    $("[name=selfpickup]").click(function(){
12131        const p = $(this).parents(".row-pickup")
12132        const pickupCity = $("input[name='selfpickup']:checked").val();
12133        const pickupAddress = $("input[name='selfpickup']:checked").data("address");
12134        const pickupZip = $("input[name='selfpickup']:checked").data("zip");
12135
12136        $(".row-pickup").removeClass("selected")
12137        p.addClass("selected")
12138        
12139        $("#properties-kota-pengiriman").val(pickupCity)
12140        $("#province").val("Jakarta")
12141        $("#properties-alamat-penerima").val(pickupAddress)
12142        $("#properties-kodepos").val(pickupZip)
12143    })
12144
12145    $("#cities").change(function(e){
12146      e.preventDefault()
12147      $(this).parent(".row").find("p.error").remove()
12148      $("#full-date").val("Full Calendar")
12149      $("#deliveryDate, #deliveryDateFull label ").show()
12150      $("#deliveryDateFull").removeClass("filled")
12151      $(".btnChangeDeliveryDate").addClass("hide")
12152      $("#full-date").prop('disabled', false);
12153      $("#stepNav2, #stepNav3, #stepNav4").removeClass("btn-success")
12154      $("#stepNav2, #stepNav3, #stepNav4").find("a").attr("disabled", true)
12155      const step3 = $("#step-3")
12156      $("#cityNote").remove()
12157      $("#noteDeliveryDate").hide()
12158      $("#noteDeliveryDate").empty()
12159      let v = $(this).val()
12160      let v2 = $('option:selected', this).attr('data-city');
12161      let v3 = $('option:selected', this).attr('data-province');
12162      let price = $('option:selected', this).attr('data-price');
12163      
12164      $("#country").val(v)
12165      $("#properties-kota-pengiriman").val(v)
12166      $("#properties-shipping").val(price)
12167      $("#deliveryDate button, #deliveryTime button, .calendarseasonal .button").removeClass("selected")
12168      $("#properties-delivery-date, #properties-delivery-time").val("-")
12169      $("#propDeliveryDate, #propDeliveryTime").val("")
12170      let note = $('option:selected', this).attr('data-note');
12171      if(v === 'Kota Lainnya') {
12172        $("#noteDeliveryDate").show()
12173        $("#noteDeliveryDate").text("Order akan segera dikirim. Estimasi tanggal diterima akan disesuaikan dengan waktu pengiriman oleh pihak ekspedisi ke lokasi Anda.")
12174        $("#zip").attr("required", false)
12175        $("#zip").hide()
12176        $("#propDeliveryDate, #propDeliveryTime").attr("required", false)
12177        $("#propDeliveryDate, #properties-delivery-date, #propDeliveryTime, #properties-delivery-time").val("-")
12178        $("#row-delivery-date, #row-delivery-time").hide()
12179        $("#properties-shipping").val("")
12180        
12181        // Hide addressPurchase form and make all fields optional
12182        $(".addressPurchase").hide()
12183        $(".addressPurchase [required]").attr("required", false)
12184        $(".addressPurchase input, .addressPurchase textarea, .addressPurchase select").val("")
12185        $("[data-properties=nama-penerima], [data-properties=alamat-penerima], [data-properties=telepon-penerima]").val("")
12186        $("#properties-nama-penerima, #properties-alamat-penerima, #properties-telepon-penerima").val("")
12187        
12188        // $(this).parents(".setup-content").attr("id", "step-2")
12189        
12190      } else {
12191        $("#noteDeliveryDate").hide()
12192        $("#zip").attr("required", true)
12193        $("#zip").show()
12194        $("#row-delivery-date, #row-delivery-time").show()
12195        $("#propDeliveryDate, #propDeliveryTime").attr("required", true)
12196        $("#deliveryDate").find("button").removeClass("stop")
12197        
12198        // Show addressPurchase form and make fields required
12199        $(".addressPurchase").show()
12200        $(".addressPurchase .form-control").not('[data-properties="company"]').attr("required", true)
12201        $("[data-properties=nama-penerima], [data-properties=alamat-penerima], [data-properties=telepon-penerima]").attr("required", true)
12202        
12203        // $(this).parents(".setup-content").attr("id", "step-1")
12204        
12205      }
12206      
12207      
12208      
12209      
12210        $("#row-delivery-time").hide()
12211        $("#propDeliveryTime").attr("required", false)
12212      
12213      
12214      // Load delivery dates when city is selected
12215      if(v !== '' && v !== 'Kota Lainnya') {
12216        const deliveryDate = document.getElementById("deliveryDate");
12217        const deliveryTime = document.getElementById("deliveryTime");
12218        
12219        // Check localStorage first (no city needed, shared across all cities for same product)
12220        const storageKey = getStorageKey('date');
12221        const storedData = getFromStorage(storageKey);
12222        
12223        if (storedData && storedData.date && storedData.time) {
12224          // Render from localStorage immediately using helper function
12225          renderDeliveryDateFromData(storedData);
12226        } else {
12227          // Show skeleton loading state for dates
12228          if(deliveryDate) {
12229          const skeletonDates = `
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            <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled style="opacity: 0.6;">
12243              <div style="background: #e0e0e0; width: 30px; height: 5px; margin: 0 auto 4px; border-radius: 0px;"></div>
12244              <span style="background: #d0d0d0; display: inline-block; width: 40px; height: 40px; border-radius: 100%;"></span>
12245            </button>
12246          `;
12247          deliveryDate.innerHTML = skeletonDates;
12248        }
12249        
12250        // Show skeleton loading state for times
12251        if(deliveryTime) {
12252          const skeletonTimes = `
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            <button class="time-single calendarbutton2 btn steps-btn" disabled style="opacity: 0.6;">
12262              <div style="background: #e0e0e0; width: 60px; height: 12px; margin: 0 auto 4px; border-radius: 4px;"></div>
12263              <div style="background: #d0d0d0; width: 80px; height: 10px; margin: 0 auto; border-radius: 4px;"></div>
12264            </button>
12265          `;
12266          deliveryTime.innerHTML = skeletonTimes;
12267        }
12268        
12269        // Load delivery dates (with city parameter)
12270        renderDate(v).then(() => {
12271          console.log('Delivery dates loaded for city:', v);
12272        }).catch(error => {
12273          console.error('Error loading delivery dates:', error);
12274          if(deliveryDate) {
12275            deliveryDate.innerHTML = '<p style="text-align: center; color: #d32f2f; font-size: 14px; padding: 20px 0;">Failed to load dates. Please try again.</p>';
12276          }
12277        });
12278        }
12279      }
12280      
12281      
12282      disabledSameDay()
12283      
12284
12285      if(v !== 'Jakarta' && v !== 'Depok' && v !== 'Bekasi' && v !== 'Tangerang') {
12286        
12287        $("[data-addon=giftcard]").show()
12288        $("[data-addon=giftcard]").click()
12289        $("#itemAddons").show()
12290        $("#flower-step").addClass("nonjadetabek")
12291      } else {
12292        $("#cardOccasion, #navAddon, .collection-addons").show()
12293        $("[data-addon]").eq(0).click()
12294        $("#flower-step").removeClass("nonjadetabek")
12295      }
12296      
12297    })
12298
12299    $("#zip").change(function(e){
12300      let v = $(this).val()
12301      var city = $("#cities").find('option:selected');
12302      $("#properties-kodepos").val(v)
12303      if(city === 'Kota Lainnya') {
12304        $(this).attr("required", true)
12305        $("#recipient-address").val("")
12306      }
12307    })
12308
12309    
12310    var minDate = new Date(2026, 0, 12)
12311    
12312
12313    // Initialize datepicker only if jQuery UI is loaded
12314    if (typeof $.fn.datepicker === 'function') {
12315      $("#full-date").datepicker({
12316        minDate,
12317        dateFormat: 'Mdd_yy', //Nop22_2021,
12318        
12319        beforeShowDay: disabledays,
12320        
12321        onSelect: function (date) {
12322          $("#deliveryDate, #deliveryDateFull label ").hide()
12323          $("#deliveryDateFull").addClass("filled")
12324          $(".btnChangeDeliveryDate").removeClass("hide")
12325        
12326        $("#full-date").prop('disabled', true);
12327        
12328        $('#propDeliveryDate, #properties-delivery-date').val('Kirim_'+date);
12329        $(".date-full").addClass("selected")
12330        $(".date-single, .calendar-group").removeClass("selected")
12331        $("#propDeliveryTime").val('')
12332        $("#properties-delivery-time").val('-')
12333        $(".time-single").removeClass("selected")
12334        
12335        const select = $('#cities option:selected').val();
12336        if(select !== 'Jakarta' && select !== 'Depok' && select !== 'Bekasi' && select !== 'Tangerang') {
12337          $("#noteDeliveryDate").show()
12338          $("#noteDeliveryDate").html(`Order akan dikirim pada tanggal ${date} dari Jakarta. Estimasi tanggal diterima akan disesuaikan dengan waktu pengiriman oleh pihak ekspedisi ke lokasi Anda.`)
12339        } else {
12340          $("#noteDeliveryDate").hide()
12341        }
12342        
12343        
12344      }
12345      });
12346    } else {
12347      // jQuery UI datepicker not loaded, show console warning
12348      console.warn('jQuery UI datepicker is not available. Make sure jQuery UI library is loaded.');
12349    }
12350
12351    $(".btnChangeDeliveryDate").click(function(){
12352        $("#deliveryDate, #deliveryDateFull label ").show()
12353        $("#deliveryDateFull").removeClass("filled")
12354        $(".btnChangeDeliveryDate").addClass("hide")
12355        $("#full-date").prop('disabled', false);
12356    })
12357  
12358    $("#deliveryDate").delegate(".calendarbutton:not(.date-full)", "click", function(e){
12359      e.preventDefault()
12360      $(this).parents("#row-delivery-date").find("p.error").remove()
12361      const fulldate = $(this).data("fulldate")
12362      const day = $(this).data("day")
12363      const date = $(this).data("date")
12364      const month = $(this).data("month")
12365      const year = $(this).data("year")
12366      const off_pagi = $(this).data("offpagi")
12367      const off_siang = $(this).data("offsiang")
12368      const off_Malam = $(this).data("offMalam")
12369      $(".calendarbutton").removeClass("selected")
12370      $(this).addClass("selected")
12371      $("#propDeliveryDate, #properties-delivery-date").val(`Kirim_${month}${date}_${year}`)
12372      $("#propDeliveryTime").val('')
12373      $("#properties-delivery-time").val('-')
12374      $(".calendarbutton2").removeClass("selected")
12375      $("#full-date").val("Full Calendar")
12376
12377      
12378      if(off_pagi && timeOfDay > off_pagi) {
12379        $("[data-time=Morning]").attr("disabled", true)
12380      } else {
12381        $("[data-time=Morning]").attr("disabled", false)
12382      }
12383      if(off_siang && timeOfDay > off_siang) {
12384        $("[data-time=Afternoon]").attr("disabled", true)
12385      } else {
12386        $("[data-time=Afternoon]").attr("disabled", false)
12387      }
12388      if(off_malam && timeOfDay > off_malam) {
12389        $("[data-time=Evening]").attr("disabled", true)
12390      } else {
12391        $("[data-time=Evening]").attr("disabled", false)
12392      }
12393      
12394
12395      
12396      const select = $('#cities option:selected').val();
12397      if(select !== 'Jakarta' && !select.match('PickUp') && select !== 'Depok' && select !== 'Bekasi' && select !== 'Tangerang' && select !== '') {
12398        $("#noteDeliveryDate").show()
12399        $("#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.`)
12400      } else {
12401        $("#noteDeliveryDate").hide()
12402      }
12403      
12404    })
12405    
12406    if(today === 14 && timeOfDay > 17.00) {
12407      $("#deliveryDate button:first-child").attr("disabled", true)
12408    }
12409  
12410    $("#deliveryTime").delegate(".calendarbutton2", "click", function(e){
12411      e.preventDefault()
12412      const time = $(this).data("time")
12413      const date = $("#propDeliveryDate").val()
12414      if(date == '') {
12415        // return alert('Silakan pilih tanggal terlebih dahulu')
12416      }
12417      $(".calendarbutton2").removeClass("selected")
12418      $(this).addClass("selected")
12419      $("#propDeliveryTime, #properties-delivery-time").val(`KirimJam_${date.replace('Kirim_','')}_${time}`)
12420    })
12421      
12422    $('textarea.has-limit, input.has-limit').keyup(function () {
12423      max = this.getAttribute("maxlength");
12424      let len = $(this).val().length;
12425      let limit = $(this).siblings(".limit");
12426      if (len > max) {
12427        alert('you have reached the limit');
12428      } else {
12429        limit.text(`${len}/${max}`);
12430      }
12431    });
12432    
12433    $("#button-action-step .btn").click(function(){
12434      $(this).find("span").text("Processing...");
12435    });
12436
12437    $(".finishBtn").on('click', function() {
12438      $(this).addClass("is-adding");
12439      // $(this).click();
12440    });
12441
12442    $('.setup-panel .nav-item a.btn-success').trigger('click');
12443
12444    $("#button-action .btn").click(function(){
12445      $("#flower-step").addClass("block");
12446      $("#button-action").hide();
12447    });
12448        
12449    $(".close-how-order").click(function(){
12450      $("#flower-step").removeClass("block");
12451      $("#button-action").show();
12452    });
12453
12454    $("#input-foto, #input-video").change(function(e){
12455      readURL(this);
12456    });
12457
12458    $("#logoPapan").change(function(){
12459      readURLPapan(this);
12460    });
12461
12462    $("#address-upload").change(async function(){
12463      const upload_address = await readURLAddress(this)
12464      if(upload_address) {
12465        const url = upload_address.url
12466        $(".props-address-upload").val(url)
12467        // $(".form-address").addClass("address-uploaded")
12468        $(".form-address-upload").addClass("uploaded")
12469
12470        // $(this).parents(".form-group").siblings(".form-group").find("[required]").attr("required", false)
12471        
12472        // Hit OCR endpoint to get address options
12473        // await hitOCREndpoint(url)
12474      }
12475    })
12476
12477    $(".address-manualy").click(function(){
12478      $(".form-address-upload").removeClass("uploaded");
12479      $(".photo-address").hide();
12480      // $(".form-address").removeClass("address-uploaded")
12481      $("#formAddressPurchase").find(".form-control").not('[data-properties="company"]').attr("required", true)
12482    });
12483
12484    $(".case-video-preview").delegate(".replace-video", "click", function(){
12485      $("#input-video").trigger("click")
12486    })
12487
12488    $('.date-single').click(function(e) {
12489      e.preventDefault();
12490      $('.date-single').removeClass('selected');
12491      $('#full-date').removeClass('selected');
12492      $(this).addClass('selected');
12493      $('#full-date').html('Full' + '<br/>' + 'Calendar');
12494    });
12495    
12496    // Function to load jQuery UI if not loaded
12497    function ensureJQueryUI() {
12498      return new Promise((resolve, reject) => {
12499        if (typeof $.fn.datepicker === 'function') {
12500          resolve();
12501        } else {
12502          // Load CSS first
12503          if (!document.querySelector('link[href*="jquery-ui"]')) {
12504            const css = document.createElement('link');
12505            css.rel = 'stylesheet';
12506            css.href = 'https://code.jquery.com/ui/1.13.0/themes/base/jquery-ui.min.css';
12507            document.head.appendChild(css);
12508          }
12509          
12510          // Load JS
12511          const script = document.createElement('script');
12512          script.src = 'https://code.jquery.com/ui/1.13.0/jquery-ui.min.js';
12513          script.onload = () => {
12514            resolve();
12515          };
12516          script.onerror = () => {
12517            reject(new Error('Failed to load jQuery UI'));
12518          };
12519          document.head.appendChild(script);
12520        }
12521      });
12522    }
12523    
12524    // Force trigger datepicker on click - initialize if needed
12525    $('#full-date').on('click focus', async function(e){
12526      $('.date-single').removeClass('selected');
12527      $(this).addClass('selected');
12528      
12529      // Ensure jQuery UI is loaded
12530      try {
12531        await ensureJQueryUI();
12532      } catch(err) {
12533        alert('Calendar widget is not available. Please refresh the page.');
12534        return;
12535      }
12536      
12537      // Determine minDate
12538      
12539      var minDate = new Date(2026, 0, 12);
12540      
12541      
12542      // Helper function to initialize datepicker
12543      const initDatepicker = () => {
12544        $(this).datepicker({
12545          minDate: minDate,
12546          dateFormat: 'Mdd_yy',
12547          
12548          beforeShowDay: disabledays,
12549          
12550          onSelect: function (date) {
12551            $("#deliveryDate, #deliveryDateFull label ").hide();
12552            $("#deliveryDateFull").addClass("filled");
12553            $(".btnChangeDeliveryDate").removeClass("hide");
12554          
12555            $("#full-date").prop('disabled', true);
12556          
12557            $('#propDeliveryDate, #properties-delivery-date').val('Kirim_'+date);
12558            $(".date-full").addClass("selected");
12559            $(".date-single, .calendar-group").removeClass("selected");
12560            $("#propDeliveryTime").val('');
12561            $("#properties-delivery-time").val('-');
12562            $(".time-single").removeClass("selected");
12563          
12564            const select = $('#cities option:selected').val();
12565            if(select !== 'Jakarta' && select !== 'Depok' && select !== 'Bekasi' && select !== 'Tangerang') {
12566              $("#noteDeliveryDate").show();
12567              $("#noteDeliveryDate").html(`Order akan dikirim pada tanggal ${date} dari Jakarta. Estimasi tanggal diterima akan disesuaikan dengan waktu pengiriman oleh pihak ekspedisi ke lokasi Anda.`);
12568            } else {
12569              $("#noteDeliveryDate").hide();
12570            }
12571          
12572          
12573          }
12574        });
12575      };
12576      
12577      // If datepicker doesn't exist, initialize it
12578      if (!$(this).hasClass('hasDatepicker')) {
12579        try {
12580          initDatepicker();
12581        } catch(err) {
12582          console.error('Error initializing datepicker:', err);
12583          return;
12584        }
12585      }
12586      
12587      // Try to show datepicker
12588      try {
12589        $(this).datepicker('show');
12590      } catch(err) {
12591        // If error occurs (corrupted settings), destroy and reinitialize
12592        try {
12593          $(this).datepicker('destroy');
12594          $(this).removeClass('hasDatepicker');
12595          initDatepicker();
12596          $(this).datepicker('show');
12597        } catch(reinitErr) {
12598          // If still fails, alert user
12599          alert('Unable to open calendar. Please refresh the page.');
12600        }
12601      }
12602    });
12603    
12604    // $("tr").each(function(){
12605    //   if($(this).text().match('SKU')) {
12606    //     $(".sku-product").html($(this).parents("table").html())
12607    //   }
12608    // })
12609    
12610    $("#product-image").scroll(function(){
12611      $(".desc-add").each(function(){
12612        const img = $(this).find("img")
12613        const src = img.data("src")
12614        img.attr("src", src)
12615      })
12616    })
12617
12618    $(".product-fixed").hide()
12619    
12620    let target = $("#personalizeBtn")
12621    
12622
12623    $(".product-meta").scroll(function() {
12624        if ($(window).scrollTop() >= target.offset().top ) {
12625            $(".product-fixed").addClass("show")
12626        } else {
12627          $(".product-fixed").removeClass("show")
12628        }
12629    });
12630
12631    $(window).scroll(function() {
12632        if ($(window).scrollTop() >= target.offset().top ) {
12633            $(".product-fixed").addClass("show")
12634        } else {
12635          $(".product-fixed").removeClass("show")
12636        }
12637    });
12638    
12639    // Add event listeners to trigger card preview updates
12640    $(document).on('input change keyup', '#senderCard, #kartu-ucapan, [data-properties="ucapan"], [data-properties="kartu-nama-pengirim"]', function() {
12641      $(document).trigger('cardDataUpdated');
12642    });
12643    
12644    // Trigger card preview update when photo or video is uploaded
12645    $(document).on('photoUploaded videoUploaded', function() {
12646      $(document).trigger('cardDataUpdated');
12647    });
12648  });
12649</script>
12649
12650
12651  
12651<script>
12652    //
12653  </script>
12653
12654
12655<script>
12656  $(document).ready(function(){
12657    $('table tr td').each(function(){
12658      var texto = $(this).text();
12659      var nextto = $(this).next("td");
12660      var sku = $("#data-sku").val()
12661      if(texto == 'SKU'){
12662        nextto.text(sku)
12663      }
12664    });
12665    
12666    $(".stamped-summary-actions-newquestion").text("Tulis Pertanyaan");
12667    $(".stamped-summary-actions-newreview").text("Tulis Review");
12668    $("#tab-questions").text("Pertanyaan");
12669    
12670    $(".freeship .icon").click(function(){
12671      $(".fs-content").slideToggle();
12672      $(this).parents(".freeship").toggleClass("expand");
12673    });
12674    
12675    var $easyzoom = $('.easyzoom').easyZoom();
12676    // Setup thumbnails example
12677    var api1 = $easyzoom.filter('.easyzoom--with-thumbnails').data('easyZoom');
12678    $('.thumbnails').on('click', 'a', function(e) {
12679      var $this = $(this);
12680      e.preventDefault();
12681      // Use EasyZoom's `swap` method
12682      api1.swap($this.data('standard'), $this.attr('href'));
12683    });
12684
12685    $('#playerID').click(function(){
12686      var videoURL = $('#VdoID').attr('src'),
12687          dataplay = $('#VdoID').attr('data-play');
12688
12689      //for check autoplay
12690      //if not set autoplay=1
12691      if(dataplay == 0 ){
12692        $('#VdoID').attr('src',videoURL+'?autoplay=1');
12693        $('#VdoID').attr('data-play',1);
12694      }
12695      else{
12696        var videoURL = $('#VdoID').attr('src');
12697        videoURL = videoURL.replace("?autoplay=1", "");
12698        $('#VdoID').prop('src','');
12699        $('#VdoID').prop('src',videoURL);
12700
12701        $('#VdoID').attr('data-play',0);
12702      }
12703
12704    });
12705    
12706    $(".product-photo-thumb-video").click(function(e){
12707      e.preventDefault();
12708
12709      var newEmbed = $(this).attr('href');
12710      $("#featured-image-product").addClass("img-video");
12711      $("#ProductPhotoImg").hide();
12712      $("#featured-image-product .video").show();
12713      $("#featured-image-product iframe").attr('src', newEmbed);
12714      $("#VdoID")[0].src += "&autoplay=1";
12715    });
12716    $(".product-single__thumbnail").click(function(evt){
12717      evt.preventDefault();
12718      $("#featured-image-product").removeClass("img-video");
12719      $("#ProductPhotoImg").show();
12720      $("#featured-image-product .video").hide();
12721      $("#featured-image-product iframe").attr('src', '');
12722    });
12723    
12724    if($('#product-meta .short-desc > div').length >= 1){
12725      //console.log('div detected')
12726      var replacer = $('#product-meta .short-desc > div').contents();
12727      $('#product-meta .short-desc > div').replaceWith(replacer);
12728
12729      var cAssured =  $('.c-assured').detach();
12730      cAssured.insertAfter('.meta-sds .stock-info');
12731    }
12732
12733    
12734    const productMeta = $(".product-meta")
12735    if(productMeta.height() > 600) {
12736      $("#product-image, .product-meta").css("max-height", productMeta)
12737    }
12738    
12739    
12740    $(".heading-toggle").click(function(){
12741      $(this).parent().toggleClass("open")
12742      
12743    });
12744  });
12745</script>
12745
12746
12747
12748  
12748<script type="application/json" id="ProductJson-Product">
12749        
12750       {
12751"id":7881418965207,
12752"title":"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman",
12753"handle":"hantu-slot-fitur-inovatif-game-online",
12754"description":"\u003cul\u003e
12755\n\u003cli\u003e
12756\u003cstrong\u003eHANTUSLOT\u003c\/strong\u003e\u003cbr\u003e
12757Platform Game Online Modern Dengan Fitur Inovatif
12758\u003c\/li\u003e
12759\n\u003cli\u003e
12760\u003cstrong\u003eGAME ONLINE\u003c\/strong\u003e\u003cbr\u003e
12761Akses Permainan Digital Berbahasa Indonesia
12762\u003c\/li\u003e
12763\n\u003cli\u003e
12764\u003cstrong\u003eFITUR INOVATIF\u003c\/strong\u003e
12765\u003c\/li\u003e
12766\n\u003c\/ul\u003e
12767
12768\u003cp\u003e
12769HANTUSLOT kini menghadirkan pengalaman game online modern dengan dukungan fitur inovatif berbahasa Indonesia. Tampilan yang mudah dipahami, navigasi sederhana, serta sistem yang dirancang untuk memberikan kenyamanan membuat pengguna dapat menikmati akses permainan digital dengan lebih praktis.
12770\u003c\/p\u003e
12771
12772\u003cp\u003e
12773\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1589\/6833\/files\/Ruby-Mulan-Bag.jpg?v=1734513286\" alt=\"HANTUSLOT Fitur Inovatif Game Online\"\u003e
12774\u003c\/p\u003e
12775
12776\u003ctable style=\"width:100.091%;\" width=\"100%\"\u003e
12777\u003ctbody\u003e
12778
12779\u003ctr\u003e
12780\u003ctd style=\"width:33.7327%;\"\u003eSKU\u003c\/td\u003e
12781
12782\u003ctd style=\"width:65.9908%;\"\u003e
12783[C]HANTUSLOT\u003cbr\u003e
12784[C]GAMEONLINE-ID2026\u003cbr\u003e
12785\u003c\/td\u003e
12786\u003c\/tr\u003e
12787
12788
12789\u003ctr\u003e
12790\u003ctd style=\"width:33.7327%;\"\u003eIsi\u003c\/td\u003e
12791
12792\u003ctd style=\"width:65.9908%;\"\u003e
12793platform game online modern\u003cbr\u003e
12794fitur game online inovatif terbaru\u003cbr\u003e
12795akses game online berbahasa Indonesia\u003cbr\u003e
12796situs game online terpercaya dan nyaman\u003cbr\u003e
12797platform permainan digital masa kini\u003cbr\u003e
12798fitur lengkap dengan tampilan modern\u003cbr\u003e
12799pengalaman bermain online yang praktis\u003cbr\u003e
12800\u003c\/td\u003e
12801
12802\u003c\/tr\u003e
12803
12804\u003c\/tbody\u003e
12805\u003c\/table\u003e"
12806}
12807  </script>
12807
12808  
12809    
12809<script type="application/json" id="VariantJson-Product">
12810      [
12811        
12812          {
12813             "incoming": false,
12814             "next_incoming_date": null
12815          },
12816        
12817          {
12818             "incoming": false,
12819             "next_incoming_date": null
12820          }
12821        
12822      ]
12823    </script>
12823
12824  
12825
12826
12827
12828</div>
12829
12830
12831<script src="https://outerbloom.com/cdn/shopifycloud/storefront/assets/themes_support/option_selection-b017cd28.js" type="text/javascript"></script>
12831
12832<style>
12833    .stamped-review-header-title,
12834    .stamped-review-header .author,
12835    .stamped-review-content-body,
12836    .stamped-sort-select,
12837    .stamped-review-header .verified-badge[data-type=buyer]:after,
12838    .stamped-review-header-byline,
12839    .stamped-review-reply-body {font-size: 14px!important;font-family: 'Barlow',sans-serif!important;}
12840    .stamped-review {margin-bottom: 0;}
12841    .stamped-review-body {padding-left: 65px;}
12842    .stamped-review:first-child {padding-top: 25px;}
12843    .stamped-review-content {clear: none;}
12844    .stamped-review-reply {margin: 15px 0 0 65px;background: #f2f2f2;border-left: none;}
12845    .stamped-review-reply-body {padding-left: 65px;}
12846    .stamped-review-header .author {text-transform: capitalize;}
12847    .stamped-questions .stamped-review-content {padding-left: 65px;}
12848
12849    .stamped-pagination {margin: 20px 0 0;}
12850    .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;}
12851    .stamped-pagination li a {color: #121212;padding: 13px 18px;vertical-align: middle;display: block;}
12852    .stamped-pagination li.active a {background-color: #ddd;font-weight: 400;}
12853    .stamped-pagination li:hover a {background: #ddd;}
12854    .stamped-pagination .next {border-right: 1px solid #ccc;}
12855    .stamped-pagination li:first-child {border-top-left-radius: 5px;border-bottom-left-radius: 5px;}
12856    .stamped-pagination li:last-child {border-top-right-radius: 5px;border-bottom-right-radius: 5px;}
12857
12858    #stamped-pagination-question span.page {display: inline-block;border: 1px solid #ccc;width: 47px;}
12859    #stamped-pagination-question span {font-size: 14px;}
12860    #stamped-pagination-question .page.active {padding: 12px;font-weight: 400;background: #ddd;}
12861    #stamped-pagination-question a, #stamped-pagination-question .page.active {color: #121212;padding: 13px 18px;vertical-align: middle;display: inline-block;}
12862    .stamped-pagination-deco {color: #121212;padding: 13px 18px;width: 47px;vertical-align: middle;display: inline-block;border: 1px solid #ccc;padding: 12px;}
12863    .stamped-pagination-prev, .stamped-pagination-next {position: inherit;}
12864    .stamped-pagination-prev a, .stamped-pagination-next a {width: auto!important;border: 1px solid #ccc;}
12865
12866    @media (max-width: 480px){
12867      .stamped-review-reply {margin-left: 0!important;}
12868      select.stamped-sort-select {font-size: 13px!important;}
12869    }
12870
12871  #product-reviews .stamped-summary-ratings, #product-reviews .stamped-summary-actions, .stamped-content {
12872      display: block !important;
12873  }
12874</style>
12875<script>
12876    var selectCallback = function(variant, selector) {
12877      timber.productPage({
12878        money_format: "Rp {{amount_no_decimals}}",
12879        variant: variant,
12880        selector: selector
12881      });
12882    };
12883
12884    jQuery(function($) {
12885      new Shopify.OptionSelectors('productSelect', {
12886        product:
12887
12888
12889
12890
12891
12892{
12893"id":7881418965207,
12894"title":"HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman",
12895"handle":"hantu-slot-fitur-inovatif-game-online",
12896"description":"\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eHANTUSLOT\u003c\/strong\u003e\u003cbr\u003e\u003cstrong\u003e\u003c\/strong\u003e\u003cstrong\u003e\u003c\/strong\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eGAME ONLINE\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\u003cstrong\u003eFITUR INOVATIF\u003c\/strong\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eHANTUSLOT menghadirkan platform game online modern dengan dukungan fitur berbahasa Indonesia yang membantu pengguna memahami setiap menu dengan lebih mudah serta menikmati pengalaman digital yang praktis, responsif, dan nyaman.\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=\"HANTUSLOT Game Online Fitur Inovatif\"\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]HANTUSLOT\u003cbr\u003e[C]GAMEONLINE-ID2026\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 akses HANTUSLOT game online modern\u003cbr\u003eplatform game online berbahasa Indonesia\u003cbr\u003efitur inovatif game digital terbaru\u003cbr\u003esitus game online dengan tampilan modern\u003cbr\u003eplatform game online responsif dan nyaman\u003cbr\u003eakses permainan digital melalui berbagai perangkat\u003cbr\u003epengalaman menggunakan game online yang praktis\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e",
12897"vendor":"HANTUSLOT",
12898"type":"Game Online Platform"
12899},
12900        onVariantSelected: selectCallback,
12901        enableHistoryState: true
12902      });
12903
12904      // Add label if only one product option and it isn't 'Title'. Could be 'Size'.
12905      
12906        $('.selector-wrapper:eq(0)').prepend('<label for="productSelect-option-0">Variants</label>');
12907      
12908
12909      // Hide selectors if we only have 1 variant and its title contains 'Default'.
12910      
12911    });
12912</script>
12912
12913
12914
12915<script type="application/ld+json">
12916{
12917  "@context": "https://schema.org",
12918  "@type": "FAQPage",
12919  "mainEntity": [
12920    {
12921      "@type": "Question",
12922      "name": "Apa itu HANTUSLOT?",
12923      "acceptedAnswer": {
12924        "@type": "Answer",
12925        "text": "HANTUSLOT merupakan platform game online dengan antarmuka berbahasa Indonesia yang dirancang dengan tampilan modern, navigasi praktis, dan akses yang nyaman di berbagai perangkat."
12926      }
12927    },
12928    {
12929      "@type": "Question",
12930      "name": "Apa yang membuat HANTUSLOT menarik untuk digunakan?",
12931      "acceptedAnswer": {
12932        "@type": "Answer",
12933        "text": "HANTUSLOT menghadirkan desain futuristik, navigasi sederhana, fitur yang mudah dipahami, serta tampilan responsif untuk memberikan pengalaman penggunaan yang lebih praktis."
12934      }
12935    },
12936    {
12937      "@type": "Question",
12938      "name": "Apakah HANTUSLOT menyediakan tampilan dalam bahasa Indonesia?",
12939      "acceptedAnswer": {
12940        "@type": "Answer",
12941        "text": "Ya, HANTUSLOT menyediakan menu dan informasi berbahasa Indonesia sehingga pengguna dapat memahami berbagai fitur dan navigasi dengan lebih mudah."
12942      }
12943    },
12944    {
12945      "@type": "Question",
12946      "name": "Apakah HANTUSLOT mendukung perangkat mobile?",
12947      "acceptedAnswer": {
12948        "@type": "Answer",
12949        "text": "Ya. HANTUSLOT dirancang agar dapat digunakan melalui smartphone, tablet, maupun desktop dengan tampilan yang menyesuaikan ukuran layar perangkat."
12950      }
12951    },
12952    {
12953      "@type": "Question",
12954      "name": "Apa saja fitur unggulan HANTUSLOT?",
12955      "acceptedAnswer": {
12956        "@type": "Answer",
12957        "text": "Beberapa fitur unggulan HANTUSLOT meliputi antarmuka responsif, navigasi intuitif, akses multi-perangkat, sistem keamanan modern, serta dukungan customer service."
12958      }
12959    },
12960    {
12961      "@type": "Question",
12962      "name": "Apakah HANTUSLOT mudah digunakan oleh pemula?",
12963      "acceptedAnswer": {
12964        "@type": "Answer",
12965        "text": "Tentu. Struktur menu HANTUSLOT dibuat sederhana dan informatif sehingga pengguna baru dapat mempelajari berbagai fitur tanpa harus melalui proses yang rumit."
12966      }
12967    },
12968    {
12969      "@type": "Question",
12970      "name": "Bagaimana HANTUSLOT membantu menjaga keamanan pengguna?",
12971      "acceptedAnswer": {
12972        "@type": "Answer",
12973        "text": "HANTUSLOT menggunakan berbagai langkah keamanan digital untuk membantu menjaga informasi akun dan memberikan lingkungan penggunaan yang lebih aman."
12974      }
12975    },
12976    {
12977      "@type": "Question",
12978      "name": "Apakah HANTUSLOT memiliki performa akses yang ringan?",
12979      "acceptedAnswer": {
12980        "@type": "Answer",
12981        "text": "HANTUSLOT dirancang dengan fokus pada kecepatan dan responsivitas sehingga pengguna dapat berpindah antarhalaman dengan lebih lancar pada perangkat yang kompatibel."
12982      }
12983    },
12984    {
12985      "@type": "Question",
12986      "name": "Apakah HANTUSLOT menyediakan customer service?",
12987      "acceptedAnswer": {
12988        "@type": "Answer",
12989        "text": "Ya, HANTUSLOT menyediakan layanan customer service untuk membantu pengguna mendapatkan informasi serta menangani pertanyaan terkait penggunaan platform."
12990      }
12991    },
12992    {
12993      "@type": "Question",
12994      "name": "Bagaimana cara membuat akun HANTUSLOT?",
12995      "acceptedAnswer": {
12996        "@type": "Answer",
12997        "text": "Pengguna dapat mengikuti petunjuk pendaftaran yang tersedia pada platform dengan melengkapi informasi yang diperlukan dan mengikuti proses verifikasi sesuai ketentuan yang berlaku."
12998      }
12999    },
13000    {
13001      "@type": "Question",
13002      "name": "Apa keunggulan desain HANTUSLOT?",
13003      "acceptedAnswer": {
13004        "@type": "Answer",
13005        "text": "HANTUSLOT menggabungkan elemen visual modern dengan struktur navigasi yang sederhana sehingga tampilan tetap menarik sekaligus mudah digunakan."
13006      }
13007    },
13008    {
13009      "@type": "Question",
13010      "name": "Apakah HANTUSLOT melakukan pembaruan secara berkala?",
13011      "acceptedAnswer": {
13012        "@type": "Answer",
13013        "text": "HANTUSLOT dapat melakukan pengembangan dan pembaruan pada fitur maupun tampilan untuk meningkatkan kualitas serta kenyamanan penggunaan platform."
13014      }
13015    },
13016    {
13017      "@type": "Question",
13018      "name": "Perangkat apa saja yang dapat digunakan untuk mengakses HANTUSLOT?",
13019      "acceptedAnswer": {
13020        "@type": "Answer",
13021        "text": "HANTUSLOT dapat diakses melalui perangkat yang memiliki koneksi internet dan browser yang kompatibel, termasuk smartphone, tablet, laptop, dan komputer desktop."
13022      }
13023    },
13024    {
13025      "@type": "Question",
13026      "name": "Mengapa fitur inovatif menjadi salah satu keunggulan HANTUSLOT?",
13027      "acceptedAnswer": {
13028        "@type": "Answer",
13029        "text": "Fitur inovatif membantu membuat navigasi lebih praktis, informasi lebih mudah ditemukan, serta memberikan pengalaman menggunakan platform game online yang lebih modern dan efisien."
13030      }
13031    }
13032  ]
13033}
13034</script>
13034
13035
13036<script type="application/ld+json">
13037{
13038  "@context": "https://schema.org",
13039  "@type": "Product",
13040  "name": "HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman",
13041  "description": "HANTUSLOT menghadirkan beragam game online modern dengan dukungan fitur berbahasa Indonesia, sehingga pengguna dapat memahami setiap menu dan fitur dengan lebih mudah serta menikmati pengalaman bermain yang praktis dan nyaman.",
13042  "brand": {
13043    "@type": "Brand",
13044    "name": "HANTUSLOT"
13045  },
13046  "aggregateRating": {
13047    "@type": "AggregateRating",
13048    "ratingValue": "5.0",
13049    "bestRating": "5",
13050    "worstRating": "1",
13051    "ratingCount": "14",
13052    "reviewCount": "14"
13053  },
13054  "review": [
13055  {
13056    "@type": "Review",
13057    "author": { "@type": "Person", "name": "Dimas Ardiansyah" },
13058    "datePublished": "2026-07-28",
13059    "reviewRating": { "@type": "Rating", "ratingValue": "5", "bestRating": "5" },
13060    "reviewBody": "HANTUSLOT memiliki tampilan yang modern dan mudah dipahami. Menu berbahasa Indonesia membuat saya lebih cepat menemukan berbagai fitur yang tersedia."
13061  },
13062  {
13063    "@type": "Review",
13064    "author": { "@type": "Person", "name": "Raka Pratama" },
13065    "datePublished": "2026-07-21",
13066    "reviewRating": { "@type": "Rating", "ratingValue": "5", "bestRating": "5" },
13067    "reviewBody": "Saya suka dengan desain HANTUSLOT yang rapi dan responsif. Akses melalui smartphone terasa ringan dan navigasinya juga cukup praktis."
13068  },
13069  {
13070    "@type": "Review",
13071    "author": { "@type": "Person", "name": "Andika Saputro" },
13072    "datePublished": "2026-07-15",
13073    "reviewRating": { "@type": "Rating", "ratingValue": "5", "bestRating": "5" },
13074    "reviewBody": "Fitur yang tersedia cukup lengkap dan semuanya tersusun dengan jelas. HANTUSLOT memberikan pengalaman menggunakan platform game online yang terasa modern."
13075  },
13076  {
13077    "@type": "Review",
13078    "author": { "@type": "Person", "name": "Bima Kurniawan" },
13079    "datePublished": "2026-07-09",
13080    "reviewRating": { "@type": "Rating", "ratingValue": "5", "bestRating": "5" },
13081    "reviewBody": "Hal yang paling saya sukai dari HANTUSLOT adalah antarmukanya yang sederhana. Pengguna baru juga bisa memahami fungsi setiap menu dengan mudah."
13082  },
13083  {
13084    "@type": "Review",
13085    "author": { "@type": "Person", "name": "Rendy Firmansyah" },
13086    "datePublished": "2026-07-02",
13087    "reviewRating": { "@type": "Rating", "ratingValue": "5", "bestRating": "5" },
13088    "reviewBody": "Performa HANTUSLOT terasa cepat ketika diakses melalui perangkat mobile maupun desktop. Tampilan juga tetap nyaman meskipun berpindah perangkat."
13089  }
13090]
13091}
13092</script>
13092
13093
13094<script type="application/ld+json">
13095{
13096  "@context": "http://schema.org",
13097  "@type": "Product",
13098  "offers": {
13099    "@type": "Offer",
13100    "availability":"https://schema.org/InStock",
13101    "price": 1885000,
13102    "priceValidUntil": "12-12-2026",
13103    "priceCurrency": "IDR",
13104    "url": "https://hotelverta.com/"
13105  },
13106  "brand": {
13107    "@type": "Brand",
13108    "name": "HANTUSLOT"
13109  },
13110  "sku": "7881418965207",
13111  "gtin13": "GAME ONLINE TERBARU",
13112  "name": "HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman",
13113  "description": "\n\nHANTUSLOT menghadirkan beragam game online modern dengan dukungan fitur berbahasa Indonesia, sehingga pengguna dapat memahami setiap menu dan fitur dengan lebih mudah serta menikmati pengalaman bermain yang praktis dan nyaman.\n\n\n\n\nSKU\n[C]HANTUSLOT[C]GAME-ONLINE\n\n\n\nIsi\nHANTUSLOT menjadi destinasi favorit para pemain game online berkat kemudahan akses, sistem keamanan yang baik, dan layanan yang responsif.\n\n\n\n",
13114  "category": "Digital Entertainment Platform",
13115  "url": "https://hotelverta.com/",
13116  "image": {
13117    "@type": "ImageObject",
13118    "url": "https://imagesme.b-cdn.net/landing/banner-hotelverta.png",
13119    "image": "https://imagesme.b-cdn.net/landing/banner-hotelverta.png",
13120    "name": "HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman",
13121    "width": 1024,
13122    "height": 1024
13123  }
13124}
13125</script>
13125
13126
13127
13128
13129
13130        
13131<script id="bss-ltap-hide-price" type="text/javascript" >
13132!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)}))}
13132)),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)}
13132)),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()}
13132if("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)}
13132if(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");
13132c&&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
13132-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");
13132i&&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
13132--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
13132opify.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");
13132e.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=
13132o.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");
13132if(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();
13132let 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()}]);
13133</script>
13133
13134
13135      </main>
13136
13137      <div id="shopify-section-newsletter" class="shopify-section">
13138  <style>
13139    #shopify-section-newsletter {
13140      background-color: #EEEEEE;
13141      margin-bottom: 0;
13142    }
13143    input:-webkit-autofill,
13144    input:-webkit-autofill:hover,
13145    input:-webkit-autofill:active,
13146    input:-webkit-autofill:focus {
13147      -webkit-box-shadow:0 0 0 50px white inset;
13148      -webkit-text-fill-color: #212121;
13149    }
13150    .section-newsletter {
13151      max-width: 800px;
13152      margin: auto;
13153      padding: 50px 0;
13154    }
13155    .section-newsletter h2 {
13156      font-weight: 700;
13157      font-size: 24px;
13158    }
13159    .section-newsletter input[type="email"] {
13160      width: 100%;
13161      text-align: center;
13162      border: none;
13163      border-bottom: 1px solid #212121;
13164      font-size: 16px;
13165      color: #757575;
13166      background-color: #eeeeee;
13167    }
13168    .section-newsletter .row label {
13169      font-size: 14px;
13170      cursor: pointer;
13171    }
13172    .section-newsletter .radio-inline input {
13173      width: auto;
13174    }
13175    .section-newsletter .btn {
13176      width: 130px;
13177      border: 1px solid #212121;
13178      box-shadow: none;
13179      font-size: 16px;
13180      font-weight: 500;
13181      text-transform: uppercase;
13182    }
13183    .section-newsletter form {
13184      margin: 30px 0 60px;
13185    }
13186    .section-newsletter input[type="radio"] {
13187      position: absolute;
13188      width: 1px;
13189      height: 1px;
13190    }
13191    .section-newsletter [type="radio"]:checked + label, .section-newsletter [type="radio"]:not(:checked) + label {
13192      position: relative;
13193      padding-left: 28px;
13194      cursor: pointer;
13195      line-height: 20px;
13196      display: inline-block;
13197      color: #666;
13198    }
13199    .section-newsletter [type="radio"]:checked + label:before, .section-newsletter [type="radio"]:not(:checked) + label:before {
13200      content: '';
13201      position: absolute;
13202      left: 0;
13203      top: 0;
13204      width: 18px;
13205      height: 18px;
13206      border: 1px solid #ddd;
13207      border-radius: 100%;
13208      background: #fff;
13209    }
13210    .section-newsletter [type="radio"]:checked + label:after, .section-newsletter [type="radio"]:not(:checked) + label:after {
13211      content: '';
13212      width: 12px;
13213      height: 12px;
13214      background: #212121;
13215      position: absolute;
13216      top: 3px;
13217      left: 3px;
13218      border-radius: 100%;
13219      -webkit-transition: all 0.2s ease;
13220      transition: all 0.2s ease;
13221    }
13222    .section-newsletter [type="radio"]:not(:checked) + label:after {
13223      opacity: 0;
13224      -webkit-transform: scale(0);
13225      transform: scale(0);
13226    }
13227    .opt-newsletter {display:none;}
13228    .footer-newsletter p, .footer-newsletter p a {
13229      color: #757575;
13230    }
13231    @media (max-width:991px){
13232      .section-newsletter h2 {
13233        font-size: 32px;
13234      }
13235      .section-newsletter input {
13236        width: 300px;
13237        font-size: 14px;
13238      }
13239      .section-newsletter {
13240        padding: 50px 20px;
13241      }
13242    }
13243    @media (max-width: 480px){
13244      .section-newsletter input[type="email"] {font-size: 16px;}
13245    }
13246  </style>
13247  
13248  <div class="section-newsletter text-center">
13249    <div class="header-newsletter">
13250      <h2>HANTUSLOT 🎰 Situs Game Online Lengkap, Cepat & Nyaman</h2>
13251
13252      <p style="color: #000000; line-height: 1.9; font-size: 15px; text-align: justify; margin-bottom: 18px;">
13253        Perkembangan <a href="https://hotelverta.com/">game online</a> semakin menghadirkan berbagai inovasi yang membuat pengalaman digital menjadi lebih praktis dan mudah digunakan. HANTUSLOT hadir dengan konsep platform modern yang mengutamakan tampilan berbahasa Indonesia, navigasi sederhana, serta struktur menu yang mudah dipahami. Setiap bagian dirancang agar pengguna dapat menemukan informasi dan fitur yang tersedia dengan lebih cepat melalui perangkat desktop maupun smartphone. Bagi pengguna yang sedang mencari <strong>GAME REKOMENDASI</strong> dengan tampilan modern, HANTUSLOT menawarkan pengalaman penggunaan yang intuitif melalui desain responsif dan penyajian informasi yang lebih terstruktur.
13254      </p>
13255
13256      <p style="color: #000000; line-height: 1.9; font-size: 15px; text-align: justify; margin-bottom: 18px;">
13257        Salah satu keunggulan <a href="https://hotelverta.com/">HANTUSLOT</a> adalah perpaduan antara desain visual modern dengan performa platform yang responsif. Berbagai menu disusun secara sistematis sehingga pengguna dapat berpindah dari satu bagian ke bagian lainnya dengan lebih praktis. Dukungan teknologi yang terus dikembangkan juga membantu menghadirkan pengalaman akses yang sesuai dengan kebutuhan pengguna masa kini. HANTUSLOT dapat digunakan melalui berbagai perangkat yang kompatibel, sehingga pengguna memiliki fleksibilitas dalam mengakses platform sesuai dengan perangkat yang digunakan. Tampilan yang adaptif juga membuat navigasi tetap nyaman ketika dibuka melalui layar smartphone, tablet, laptop, maupun komputer desktop.
13258      </p>
13259
13260      <p style="color: #000000; line-height: 1.9; font-size: 15px; text-align: justify; margin-bottom: 18px;">
13261        Sebagai platform yang mengutamakan kenyamanan pengguna, HANTUSLOT terus mengembangkan fitur dan tampilan agar tetap relevan dengan perkembangan teknologi digital. Kombinasi antara sistem yang ringan, antarmuka berbahasa Indonesia, navigasi intuitif, serta dukungan akses multi-perangkat membuat penggunaan platform terasa lebih efisien. Inilah yang menjadikan HANTUSLOT dapat menjadi salah satu <strong>GAME REKOMENDASI</strong> bagi pengguna yang menginginkan platform dengan tampilan sederhana namun tetap modern. Dengan berbagai fitur inovatif dan struktur informasi yang mudah dipahami, HANTUSLOT berupaya memberikan pengalaman game online yang lebih praktis, responsif, dan sesuai dengan kebutuhan pengguna di era digital.
13262      </p>
13263    </div>
13264</div>
13265    </div>
13266  </div>
13267  
13267<script>
13268    $(document).ready(function(){
13269      $('.section-newsletter input[type="email"]').bind('input propertychange', function() {
13270        if(($(this).val().length) > 0) {
13271          $('.opt-newsletter').css('display','flex');
13272        }else {
13273          $('.opt-newsletter').css('display','none');
13274        }
13275      });
13276    });
13277  </script>
13277
13278
13279
13280</div>
13281
13282      
13283        <div id="shopify-section-Footer" class="shopify-section Footer Section"><!-- begin site-footer -->
13284
13285<link href="https://outerbloom.com/cdn/shop/t/138/assets/section-footer.css?v=100040659411828343611752652419" rel="stylesheet" type="text/css" media="all" />
13286<style>
13287  
13288  .site-footer__list-item a {color: #212121;font-size: 14px;font-weight: 400;}
13289  .social-icons li {display: inline-block;}
13290  .social-icons li a {display: block;color: #212121!important;font-size: 16px;}
13291  .social-icons li a img {vertical-align: middle;height: 20px;margin-right: 7px;}
13292  .icon-footer-whatsapp .icon-svg {width: 18px;height: 18px;vertical-align: middle;}
13293  .copyright * {display: inline-block;vertical-align: middle;color: #212121;letter-spacing: normal!important;font-size: 16px!important;}
13294  .copyright a {border-left: 1px solid;padding-left: 10px;margin-left: 5px;}
13295  .icon-minus {display:none}
13296  .bc-border {
13297    border-top: 1px solid #C4C4C4;
13298    border-bottom: 1px solid #C4C4C4;
13299    padding: 40px 0;
13300    margin-bottom: 50px;
13301  }
13302  @media (min-width: 769px) {
13303    .site-footer__list-item{margin-bottom:8px;}
13304  }
13305  @media (max-width: 992px){
13306    ul.site-footer__list {display: none;}
13307    .site-footer__section .bottom-line .icon {float: right;width: 20px;height: 20px;}
13308    .bottom-line.site-footer__section-title.open .icon-minus {display: block;}
13309    .bottom-line.site-footer__section-title.open .icon-plus {display: none;}
13310
13311    .site-footer__list.cust-service {margin-bottom: 25px;}
13312    .site-footer__list.cust-service li {width: 100%;text-align: center;}
13313    /*.site-footer__list.cust-service li:first-child {border-right: 1px solid #757575;}
13314    .site-footer__list.cust-service li:last-child {border-left: 1px solid #757575;}*/
13315  }
13316  @media (max-width: 768px) {
13317    .seo-footer, .seo-article {padding-top: 0!important;}
13318    .copyright {padding: 0px 0 0!important;}
13319    .copyright span {
13320      width: 100%;
13321      font-size: 14px!important;
13322    }
13323    .copyright a {
13324      padding: 0;
13325      margin: 0 5px;
13326      border: none;
13327      font-size: 14px!important;
13328    }
13329    .article-lists {column-count: 2;-webkit-column-count: 2;}
13330  }
13331  /** Newsletter Footer **/
13332  .site-footer__newsletter-input {height: 37px;border-radius: 0;}#mc-embedded-subscribe-form .input-group-btn {width: initial;}
13333  /** Method Footer **/
13334  .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;}
13335  /** SEO **/
13336  .c-seo-links h6 {font-size: 24px;font-weight: 600;}
13337  .c-seo-links .about_text p {font-size: 14px!important;font-weight: 400;}
13338  .seo-article * {color: #212121!important;}
13339  .seo-article a:hover {text-decoration: underline;}
13340</style>
13341<footer class="site-footer" role="contentinfo">
13342  
13343  <div class="footer-menu">
13344    <div class="container pt-0">
13345      <div class="row px-1 px-md-0 pb-4 pb-md-0">
13346        <div class="footer-navigation col-12">
13347          <div class="row justify-content-around m-0 m-sm-0">
13348  <div class="site-footer__section site-footer__section-mbl col-lg-3 mt-3 mt-md-0 p-0 d-lg-none">
13349    <h5 class="bottom-line site-footer__section-title mb-1">
13350  Layanan Customers
13351  <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">
13352    <title>icon-plus</title>
13353    <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>
13354  </svg>
13355  <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">
13356    <title>icon-minus</title>
13357    <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>
13358  </svg>
13359</h5>
13360<ul class="site-footer__list cust-service ml-0 contact-footer-mobile d-flex d-lg-block justify-content-between">
13361  <li class="site-footer__list-item fist list-unstyled icon-footer-whatsapp">
13362    <a href="https://api.whatsapp.com/send?phone=6281514234600&text=https://outerbloom.com" target="_blank" class="small"><span class="lc-icon">
13363      <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>
13364      <span class="d-none d-lg-inline-block">0857-6388-1890</span>
13365      <span class="d-lg-none lc-icon-text align-middle">Whatsapp</span>
13366    </a>
13367  </li>
13368  <li class="site-footer__list-item second list-unstyled">
13369    <a href="tel:+622157937918" class="small" target="_blank">
13370      <span class="lc-icon">
13371        <img src="https://outerbloom.com/cdn/shop/t/138/assets/call-footer.svg?v=66245936344487562681752652418" alt="Icon Phone"/>
13372      </span>
13373      <span class="d-none d-lg-inline-block">021-57937918</span>
13374      <span class="d-lg-none lc-icon-text align-middle">Phone</span>
13375    </a>
13376  </li>
13377  
13378</ul>
13379  </div>
13380  
13381  
13382  <div class="site-footer__section col-lg-3 mt-3 mt-md-0 p-0">
13383    <h5 class="bottom-line footer-trigger site-footer__section-title mb-1">
13384      HANTUSLOT
13385      <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">
13386        <title>icon-plus</title>
13387        <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>
13388      </svg>
13389      <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">
13390        <title>icon-minus</title>
13391        <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>
13392      </svg>
13393
13394    </h5>
13395<ul class="site-footer__list ml-0">
13396  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">Tentang HANTUSLOT</a></li>
13397  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">Kebijakan Privasi HANTUSLOT</a></li>
13398  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">Syarat & Ketentuan HANTUSLOT</a></li>
13399  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">Blog & HANTUSLOT</a></li>
13400  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">Karir di HANTUSLOT</a></li>
13401  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">Game Online HANTUSLOT</a></li>
13402  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">Terms of Service HANTUSLOT</a></li>
13403  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">Kebijakan Pengembalian & Pembayaran HANTUSLOT</a></li>
13404</ul>
13405    
13406  </div>
13407  
13408  
13409  
13410  <div class="site-footer__section col-lg-3 mt-3 mt-md-0 p-0">
13411    <h5 class="bottom-line footer-trigger site-footer__section-title mb-1">
13412      Bantuan
13413      <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">
13414        <title>icon-plus</title>
13415        <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>
13416      </svg>
13417      <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">
13418        <title>icon-minus</title>
13419        <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>
13420      </svg>
13421
13422    </h5>
13423<ul class="site-footer__list ml-0">
13424  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">Login HANTUSLOT</a></li>
13425  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">Daftar Akun HANTUSLOT</a></li>
13426  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">Game HANTUSLOT</a></li>
13427  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">GAME REKOMENDASI</a></li>
13428  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">Situs HANTUSLOT</a></li>
13429  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">FAQ HANTUSLOT</a></li>
13430  <li class="site-footer__list-item list-unstyled mb-1"><a href="https://hotelverta.com/" class="small">Kontak CS 24 Jam</a></li>
13431</ul>
13432    
13433  </div>
13434  
13435  
13436  
13437  <div class="site-footer__section col-lg-3 mt-3 mt-md-0 p-0">
13438    <h5 class="bottom-line footer-trigger site-footer__section-title mb-1">
13439      B2B Programs
13440      <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">
13441        <title>icon-plus</title>
13442        <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>
13443      </svg>
13444      <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">
13445        <title>icon-minus</title>
13446        <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>
13447      </svg>
13448
13449    </h5>
13450    <ul class="site-footer__list ml-0">
13451      
13452      <li class="site-footer__list-item list-unstyled mb-1"><a href="https://outerbloom.com/pages/corporate-program" class="small">Corporate Program</a></li>
13453      
13454      <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>
13455      
13456    </ul>
13457    
13458    <div class="d-none d-lg-block">
13459      <h5 class="bottom-line site-footer__section-title mb-1">
13460  Layanan Customers
13461  <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">
13462    <title>icon-plus</title>
13463    <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>
13464  </svg>
13465  <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">
13466    <title>icon-minus</title>
13467    <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>
13468  </svg>
13469</h5>
13470<ul class="site-footer__list cust-service ml-0 contact-footer-mobile d-flex d-lg-block justify-content-between">
13471  <li class="site-footer__list-item fist list-unstyled icon-footer-whatsapp">
13472    <a href="https://api.whatsapp.com/send?phone=6281514234600&text=https://outerbloom.com" target="_blank" class="small"><span class="lc-icon">
13473      <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>
13474      <span class="d-none d-lg-inline-block">0857-6370-1890</span>
13475      <span class="d-lg-none lc-icon-text align-middle">Whatsapp</span>
13476    </a>
13477  </li>
13478  <li class="site-footer__list-item second list-unstyled">
13479    <a href="tel:+622157937918" class="small" target="_blank">
13480      <span class="lc-icon">
13481        <img src="https://outerbloom.com/cdn/shop/t/138/assets/call-footer.svg?v=66245936344487562681752652418" alt="Icon Phone"/>
13482      </span>
13483      <span class="d-none d-lg-inline-block">085763881890</span>
13484      <span class="d-lg-none lc-icon-text align-middle">Phone</span>
13485    </a>
13486  </li>
13487  
13488</ul>
13489    </div>
13490    
13491  </div>
13492  
13493  
13494  <div class="site-footer__section footer-method col-lg-3 mt-3 mt-md-0 p-0 d-block d-lg-none">
13495    <h5 class="bottom-line footer-trigger site-footer__section-title mb-1">
13496      Metode Pembayaran
13497      <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">
13498        <title>icon-plus</title>
13499        <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>
13500      </svg>
13501      <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">
13502        <title>icon-minus</title>
13503        <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>
13504      </svg>
13505    </h5>
13506    <ul class="site-footer__list ml-0 method-payment">
13507      
13508      <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>
13509      
13510      
13511      <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>
13512      
13513      
13514      <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>
13515      
13516      
13517      <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>
13518      
13519      
13520      <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>
13521      
13522      
13523      <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>
13524      
13525      
13526      <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>
13527      
13528      
13529      <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>
13530      
13531      
13532      <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>
13533      
13534      
13535      <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>
13536      
13537      
13538      <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>
13539      
13540      
13541      <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>
13542      
13543      
13544      
13545      
13546    </ul>
13547  </div>
13548  <div class="site-footer__section col-lg-3 mt-3 mt-md-0 p-0">
13549    <div class="social-media-desktop d-none d-md-block">
13550      
13551  <div class="social-media">
13552    <h5 class="site-footer__section-title">Follow Our Social Medias</h5>
13553      <ul class="inline-list social-icons mt-2">
13554        
13555          <li>
13556            <a href="https://twitter.com/outerbloom" title="Outerbloom on Twitter" target="_blank">
13557              <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 22 22" fill="none">
13558  <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"/>
13559</svg>
13560
13561            </a>
13562          </li>
13563        
13564        
13565          <li>
13566            <a href="https://www.facebook.com/outerbloom/" title="Outerbloom on Facebook" target="_blank">
13567              <svg xmlns="http://www.w3.org/2000/svg" width="22" height="23" viewBox="0 0 22 23" fill="none">
13568  <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"/>
13569</svg>
13570
13571            </a>
13572          </li>
13573        
13574        
13575          <li>
13576            <a href="https://www.instagram.com/outerbloom" title="Outerbloom on Instagram" target="_blank">
13577              <svg xmlns="http://www.w3.org/2000/svg" width="22" height="23" viewBox="0 0 22 23" fill="none">
13578  <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.
1357818958 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"/>
13579</svg>
13580
13581            </a>
13582          </li>
13583        
13584        
13585          <li>
13586            <a href="https://www.youtube.com/channel/UCSxRXcJS9JeYxRnq-m7MPYQ" title="Outerbloom on YouTube" target="_blank">
13587              <svg xmlns="http://www.w3.org/2000/svg" width="24" height="20" viewBox="0 0 24 20" fill="none">
13588  <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"/>
13589</svg>
13590
13591            </a>
13592          </li>
13593        
13594      </ul>
13595   </div>
13596
13597    </div>
13598    <p class="fs-body">Download our app.</p>
13599    <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>
13600    <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>
13601  </div>
13602</div>
13603
13604<script>
13605  if ($(window).width() < 992) {
13606    $("document").ready(function(){
13607      $(".site-footer__section .footer-trigger").click(function(){
13608        $(this).toggleClass("open");
13609        $(this).next("ul").slideToggle();
13610      });
13611    });
13612  }
13613</script>
13613
13614        </div>
13615      </div>
13616      <div class="copyright">
13617        <span
13618          >&copy; 2026 PEJUANGSEO - HANTUSLOT . All rights reserved
13619          
13620        </span>
13621      </div>
13622    </div>
13623  </div>
13624
13625  
13626</footer>
13627
13628<!-- //site-footer -->
13629
13630
13631</div>
13632      
13633
13634      
13635    </div>
13636
13637    <style>
13638  #CartDrawer .drawer__title {color: #fff;}
13639  #CartDrawer .drawer__close button {color: #fff;}
13640  #CartDrawer .drawer__header {background-color: #212121;padding: 5px 0;}
13641  #CartDrawer .drawer {top: 48px;}
13642  .login-customer a {text-decoration: underline;}
13643</style>
13644
13645<div class="overlay overlay-cart"></div>
13646<div id="CartDrawer" class="drawer drawer--right">
13647  <div class="drawer__header pl-2 pr-2">
13648    <div class="drawer__icon-cart display-table-cell">
13649      <a href="/cart" class="">
13650        <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>
13651      </a>
13652    </div>
13653    <div class="drawer__title h4">Keranjang Belanja</div>
13654    <div class="drawer__close js-drawer-close">
13655      <button type="button">
13656        <svg class="icon icon-close" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
13657<title>icon-close</title>
13658<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>
13659</svg>
13660      </button>
13661    </div>
13662  </div>
13663  <div id="CartContainer" class="p-2"></div>
13664</div>
13665
13666<script>
13667      
13668    </script>
13668
13669      
13669<script src="https://outerbloom.com/cdn/shop/t/138/assets/handlebars.min.js?v=79044469952368397291752652415" defer></script>
13669
13670      <!-- /snippets/ajax-cart-template.liquid -->
13671
13672  
13672<script id="CartTemplate" type="text/template">
13673  
13674    <form action="/cart" method="post" novalidate class="cart ajaxcart">
13675      <div class="ajaxcart__inner" {{ cart.item_count }}>
13676        {{#items}}
13677        <div class="ajaxcart__product">
13678          <div class="ajaxcart__row" data-line="{{line}}">
13679            <div class="grid">
13680              <div class="grid__item one-quarter">
13681                <a href="{{url}}" class="ajaxcart__product-image"><img src="{{img}}" alt="HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman"></a>
13682              </div>
13683              <div class="grid__item three-quarters">
13684                <p class="d-block mb-3">
13685                  <a class="h4 d-block mb-2" href="{{url}}" class="ajaxcart__product-name">{{name}}</a>
13686                  {{#if variation}}
13687                    <span class="ajaxcart__product-meta p">{{variation}}</span>
13688                  {{/if}}
13689                  {{#properties}}
13690                    {{#each this}}
13691                      {{#if this}}
13692                        <span class="ajaxcart__product-meta p hide">{{@key}}: {{this}}</span>
13693                      {{/if}}
13694                    {{/each}}
13695                  {{/properties}}
13696                  
13697                </p>
13698                <div class="grid--full display-table">
13699                  <div class="grid__item display-table-cell one-half">
13700                    <div class="ajaxcart__qty">
13701                      <button type="button" class="ajaxcart__qty-adjust ajaxcart__qty--minus" data-id="{{key}}" data-qty="{{itemMinus}}" data-line="{{line}}">
13702                        <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>
13703                        <span class="visually-hidden">Kurangi jumlah barang</span>
13704                      </button>
13705                      <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]*">
13706                      <button type="button" class="ajaxcart__qty-adjust ajaxcart__qty--plus" data-id="{{key}}" data-line="{{line}}" data-qty="{{itemAdd}}">
13707                        <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>
13708                        <span class="visually-hidden">Tambahkan jumlah barang</span>
13709                      </button>
13710                    </div>
13711                  </div>
13712                  <div class="grid__item display-table-cell one-half text-right">
13713                    {{#if discountsApplied}}
13714                      <small class="ajaxcart-item__price-strikethrough"><s>{{{originalLinePrice}}}</s></small>
13715                      <br><span class="h4">{{{linePrice}}}</span>
13716                    {{else}}
13717                      <span class="h4">{{{linePrice}}}</span>
13718                    {{/if}}
13719                    </div>
13720                  </div>
13721                  {{#if discountsApplied}}
13722                    <div class="grid--full display-table">
13723                      <div class="grid__item text-right">
13724                        {{#each discounts}}
13725                          <small class="ajaxcart-item__discount">{{ this.title }}</small><br>
13726                        {{/each}}
13727                      </div>
13728                    </div>
13729                  {{/if}}
13730                  </div>
13731                </div>
13732              </div>
13733            </div>
13734          </div>
13735        </div>
13736        {{/items}}
13737      </div>
13738      <div class="ajaxcart__footer">
13739        <div class="grid--full cart-subtotal py-2">
13740            <p>Subtotal</p>
13741            <h3 class="primary">{{{totalPrice}}}</h3>
13742          {{#if totalCartDiscount}}
13743            <p class="ajaxcart__savings text-center"><em>{{{totalCartDiscount}}}</em></p>
13744          {{/if}}
13745        </div>
13746        
13747        <a href="/cart" class="btn btn-cta view-more btn-block cart__checkout mt-2">Checkout</a>
13748        
13749        <p class="cart-checkout-shipping hide">Free Ongkir dengan belanja di atas Rp.100.000 <a href="/pages/pengiriman">detail</a></p>
13750      </div>
13751    </form>
13752  
13753  </script>
13753
13754  
13754<script id="AjaxQty" type="text/template">
13755  
13756    <div class="ajaxcart__qty">
13757      <button type="button" class="ajaxcart__qty-adjust ajaxcart__qty--minus" data-id="{{key}}" data-qty="{{itemMinus}}">
13758        <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 32 32">
13759			<title>icon-minus</title>
13760			<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>
13761		</svg>
13762        <span class="visually-hidden">Kurangi jumlah barang</span>
13763      	</button>
13764      		<input type="text" class="ajaxcart__qty-num" value="{{itemQty}}" min="0" data-id="{{key}}" aria-label="quantity" pattern="[0-9]*">
13765      	<button type="button" class="ajaxcart__qty-adjust ajaxcart__qty--plus" data-id="{{key}}" data-qty="{{itemAdd}}">
13766        <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>
13767        <span class="visually-hidden">Tambahkan jumlah barang</span>
13768      </button>
13769    </div>
13770  
13771  </script>
13771
13772  
13772<script id="JsQty" type="text/template">
13773  
13774    <div class="js-qty mt-2">
13775      <button type="button" data-action="minus" class="js-qty__adjust js-qty__adjust--minus" data-id="{{key}}" data-qty="{{itemMinus}}">
13776        <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>
13777        <span class="visually-hidden">Kurangi jumlah barang</span>
13778      </button>
13779      <input type="text" class="js-qty__num" value="{{itemQty}}" min="1" data-id="{{key}}" aria-label="quantity" pattern="[0-9]*" name="{{inputName}}" id="{{inputId}}">
13780      <button type="button" data-action="plus" class="js-qty__adjust js-qty__adjust--plus" data-id="{{key}}" data-qty="{{itemAdd}}">
13781        <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>
13782        <span class="visually-hidden">Tambahkan jumlah barang</span>
13783      </button>
13784    </div>
13785  
13786  </script>
13786
13787
13788<style>
13789  #CartDrawer .ajaxcart__product.nExtra.Shipping.Cost .ajaxcart__qty button,
13790  #CartDrawer .ajaxcart__product.n3D2N .ajaxcart__qty button,
13791  #CartDrawer .ajaxcart__product.n4D3N .ajaxcart__qty button {display: none;}
13792  #CartDrawer .ajaxcart__product.nExtra.Shipping.Cost .ajaxcart__qty input,
13793  #CartDrawer .ajaxcart__product.n3D2N .ajaxcart__qty input,
13794  #CartDrawer .ajaxcart__product.n4D3N .ajaxcart__qty input {pointer-events: none;opacity: 0.5;}
13795  #CartDrawer .ajaxcart__product.nExtra.Shipping.Cost .ajaxcart__qty input,
13796  #CartDrawer .ajaxcart__product.n3D2N .ajaxcart__qty input,
13797  #CartDrawer .ajaxcart__product.n4D3N .ajaxcart__qty input {pointer-events: none;}
13798</style>
13799      
13799<script src="https://outerbloom.com/cdn/shop/t/138/assets/ajax-cart.js?v=51128912329657147331752652452" defer></script>
13799
13800      
13800<script>
13801        jQuery(function($) {
13802          ajaxCart.init({
13803            formSelector: '#AddToCartForm',
13804            cartContainer: '#CartContainer',
13805            addToCartSelector: '#AddToCartXX',
13806            cartCountSelector: '#CartCount, #CartCount2',
13807            cartCostSelector: '#CartCost',
13808            moneyFormat: "Rp {{amount_no_decimals}}"
13809          });
13810          });
13811
13812          jQuery(document.body).on('afterCartLoad.ajaxCart', function(evt, cart) {
13813            // Bind to 'afterCartLoad.ajaxCart' to run any javascript after the cart has loaded in the DOM
13814            timber.RightDrawer.open();
13815          });
13816      </script>
13816
13817    
13818
13819
13820
13821<style>
13822  /** Search AutoComplete **/
13823  .resultsearch .ui-menu-item[data-cat="Collection"],
13824  .resultsearch .ui-menu-item[data-cat="Collection"] {display: none;}
13825  .resultsearch .ui-widget.ui-widget-content {
13826    width: 100%;
13827    top: 48px;
13828    border: none;
13829    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
13830  }
13831  .resultsearch .ui-menu-item {text-align: left;}
13832  .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;}
13833  .ui-state-active {
13834    border: none!important;
13835    background-color: #fafafa!important;
13836    color: #000!important;
13837  }
13838  .ui-menu-item a[data-cat="Collection"] {padding: 5px 12px;}
13839  .ui-menu .ui-menu-item {line-height: normal;}
13840</style>
13841<script>
13842$(window).load(function(){
13843
13844  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;}
13845
13846  $.widget("custom.catcomplete", $.ui.autocomplete, {
13847    _renderMenu: function (ul, items) {
13848      // have search reults split up in categories
13849      var that = this,
13850          currentCategory = "";
13851      $.each(items, function (index, item) {
13852        if (item.category != currentCategory) {
13853          ul.append("<li class='ui-autocomplete-category' data-cat=" + item.category + ">" + "<span>" + item.category + "</span>" + "</li>");
13854          currentCategory = item.category;
13855        }
13856        that._renderItemData(ul, item);
13857      });
13858    }
13859  });
13860
13861  // higlight searched for term
13862  $.ui.autocomplete.prototype._renderItem = function( ul, item ) {
13863    var term = this.element.val(),
13864        html = item.label.replace( term, "<b>$&</b>" );
13865    return $( "<li>" )
13866    .append(format(item))
13867    .appendTo( ul );
13868  };
13869
13870
13871  var data = [
13872      { 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://hotelverta.com/", 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://hotelverta.com/", 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://hotelverta.com/", 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://hotelverta.com/", images: " ", price: " " },{ label: "Buket Bunga Bandung", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Buket Bunga Batam", category: "Collection", url: "https://hotelverta.com/-batam", images: " ", price: " " },{ label: "Buket Bunga Demak", category: "Collection", url: "https://hotelverta.com/-demak", images: " ", price: " " },{ label: "Buket Bunga Fresh", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Buket Bunga Jepara", category: "Collection", url: "https://hotelverta.com/-jepara", images: " ", price: " " },{ label: "Buket Bunga Medan", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Buket Bunga Nusantara", category: "Collection", url: "https://hotelverta.com/-nusantara", images: " ", price: " " },{ label: "Buket Bunga Semarang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Buket Bunga Sidoarjo", category: "Collection", url: "https://hotelverta.com/-sidoarjo", images: " ", price: " " },{ label: "Buket Bunga Surabaya", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Buket Bunga Tangerang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Buket Bunga Uang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Buket Bunga Valentine", category: "Collection", url: "https://hotelverta.com/-valentine", images: " ", price: " " },{ label: "Buket Bunga Yogyakarta", category: "Collection", url: "https://hotelverta.com/", 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://hotelverta.com/", 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://hotelverta.com/", images: " ", price: " " },{ label: "Bunga Meja Bali", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Bunga Meja Bandung", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Bunga Meja Batam", category: "Collection", url: "https://hotelverta.com/-batam", images: " ", price: " " },{ label: "Bunga Meja Jepara", category: "Collection", url: "https://hotelverta.com/-jepara", images: " ", price: " " },{ label: "Bunga Meja Medan", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Bunga Meja Semarang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Bunga Meja Sidoarjo", category: "Collection", url: "https://hotelverta.com/-sidoarjo", images: " ", price: " " },{ label: "Bunga Meja Surabaya", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Bunga Meja Tangerang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Bunga Meja Yogyakarta", category: "Collection", url: "https://hotelverta.com/", 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://hotelverta.com/-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://hotelverta.com/", 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: "
13872https://hotelverta.com/", images: " ", price: " " },{ label: "Corporate Hampers", category: "Collection", url: "/collections/corporate-hampers", images: " ", price: " " },{ 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://hotelverta.com/", 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://hotelverta.com/", 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: " " }
13872,{ 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://hotelverta.com/", 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://hotelverta.com/", images: " ", price: " " },{ label: "Forever Flower Holo Series", category: "Collection", url: "https://hotelverta.com/-holo-series", images: " ", price: " " },{ label: "Forever Flower x NestBloom", category: "Collection", url: "https://hotelverta.com/-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://hotelverta.com/", images: " ", price: " " },{ label: "Gelato Pie", category: "Collection", url: "https://hotelverta.com/-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://hotelverta.com/", images: " ", price: " " },{ label: "Giant Flower Bandung", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " }
13872,{ label: "Giant Flower Bouquet", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Gift", category: "Collection", url: "https://hotelverta.com/", 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://hotelverta.com/-pecah-belah-imlek", images: " ", price: " " },{ label: "Glassware Eid Hampers", category: "Collection", url: "https://hotelverta.com/-pecah-belah-lebaran", images: " ", price: " " },{ label: "Glassware Hampers", category: "Collection", url: "https://hotelverta.com/-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://hotelverta.com/", 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://hotelverta.com/-indonesia", images: " ", price: " " },{ label: "Hampers Lebaran 2026", category: "Collection", url: "https://hotelverta.com/", 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://hotelverta.com/", images: " ", price: " " }
13872,{ 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://hotelverta.com/", 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://hotelverta.com/", 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://hotelverta.com/", images: " ", price: " " },{ label: "Kado Zodiak", category: "Collection", url: "/collections/kado-untuk-zodiak", images: " ", price: " " },{ label: "Karangan Bunga Aceh", category: "Collection", url: "https://hotelverta.com/-aceh", images: " ", price: " " },{ label: "Karangan Bunga Ambon", category: "Collection", url: "https://hotelverta.com/-ambon", images: " ", price: " " },{ label: "Karangan Bunga Atambua", category: "Collection", url: "https://hotelverta.com/-atambua", images: " ", price: " " },{ label: "Karangan Bunga Bali", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Balikpapan", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Bandung", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Bandung Barat", category: "Collection", url: "https://hotelverta.com/-barat", images: " ", price: " " },{ label: "Karangan Bunga Bangka", category: "Collection", url: "https://hotelverta.com/-bangka", images: " ", price: " " },{ label: "Karangan Bunga Banjarmasin", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Banten", category: "Collection", url: "https://hotelverta.com/-banten", images: " ", price: " " },{ label: "Karangan Bunga Banyumas", category: "Collection", url: "https://hotelverta.com/-banyumas", images: " ", price: " " },{ label: "Karangan Bunga Banyuwangi", category: "Collection", url: "https://hotelverta.com/-banyuwangi", images: " ", price: " " },{ label: "Karangan Bunga Batam", category: "Collection", url: "https://hotelverta.com/-batam", images: " ", price: " " },{ label: "Karangan Bunga Baubau", category: "Collection", url: "https://hotelverta.com/-baubau", images: " ", price: " " },{ label: "Karangan Bunga Bengkalis", category: "Collection", url: "https://hotelverta.com/-bengkalis", images: " ", price: " " },{ label: "Karangan Bunga Bengkayang", category: "Collection", url: "https://hotelverta.com/-bengkayang", images: " ", price: " " },{ label: "Karangan Bunga Bengkulu", category: "Collection", url: "https://hotelverta.com/-bengkulu", images: " ", price: " " },{ label: "Karangan Bunga Blora", category: "Collection", url: "https://hotelverta.com/-blora", images: " ", price: " " },{ label: "Karangan Bunga Bogor", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Bojonegoro", category: "Collection", url: "https://hotelverta.com/-bojonegoro", images: " ", price: " " },{ label: "Karangan Bunga Boyolali", category: "Collection", url: "https://hotelverta.com/-boyolali", images: " ", price: " " },{ label: "Karangan Bunga Brebes", category: "Collection", url: "https://hotelverta.com/-brebes", images: " ", price: " " },{ label: "Karangan Bunga Bukittinggi", category: "Collection", url: "https://hotelverta.com/-bukittinggi", images: " ", price: " " },{ label: "Karangan Bunga Ciamis", category: "Collection", url: "https://hotelverta.com/-ciamis", images: " ", price: " " }
13872,{ label: "Karangan Bunga Cianjur", category: "Collection", url: "https://hotelverta.com/-cianjur", images: " ", price: " " },{ label: "Karangan Bunga Cikarang", category: "Collection", url: "https://hotelverta.com/-cikarang", images: " ", price: " " },{ label: "Karangan Bunga Cikupa", category: "Collection", url: "https://hotelverta.com/-cikupa", images: " ", price: " " },{ label: "Karangan Bunga Cilacap", category: "Collection", url: "https://hotelverta.com/-cilacap", images: " ", price: " " },{ label: "Karangan Bunga Cileunyi", category: "Collection", url: "https://hotelverta.com/-cileunyi", images: " ", price: " " },{ label: "Karangan Bunga Cimahi", category: "Collection", url: "https://hotelverta.com/-cimahi", images: " ", price: " " },{ label: "Karangan Bunga Cirebon", category: "Collection", url: "https://hotelverta.com/-cirebon", images: " ", price: " " },{ label: "Karangan Bunga Ciwidey", category: "Collection", url: "https://hotelverta.com/-ciwidey", images: " ", price: " " },{ label: "Karangan Bunga Danau Toba", category: "Collection", url: "https://hotelverta.com/-danau-toba", images: " ", price: " " },{ label: "Karangan Bunga Demak", category: "Collection", url: "https://hotelverta.com/-demak", images: " ", price: " " },{ label: "Karangan Bunga Denpasar", category: "Collection", url: "https://hotelverta.com/-denpasar", images: " ", price: " " },{ label: "Karangan Bunga Depok", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Duka Cita", category: "Collection", url: "https://hotelverta.com/-duka-cita", images: " ", price: " " },{ label: "Karangan Bunga Garut", category: "Collection", url: "https://hotelverta.com/-garut", images: " ", price: " " },{ label: "Karangan Bunga Gianyar", category: "Collection", url: "https://hotelverta.com/-gianyar", images: " ", price: " " },{ label: "Karangan Bunga Gorontalo", category: "Collection", url: "https://hotelverta.com/-gorontalo", images: " ", price: " " },{ label: "Karangan Bunga Gowa", category: "Collection", url: "https://hotelverta.com/-gowa", images: " ", price: " " },{ label: "Karangan Bunga Gresik", category: "Collection", url: "https://hotelverta.com/-gresik", images: " ", price: " " },{ label: "Karangan Bunga Grobogan", category: "Collection", url: "https://hotelverta.com/-grobogan", images: " ", price: " " },{ label: "Karangan Bunga Gunung Kidul", category: "Collection", url: "https://hotelverta.com/-gunungkidul", images: " ", price: " " },{ label: "Karangan Bunga Indramayu", category: "Collection", url: "https://hotelverta.com/-indramayu", images: " ", price: " " },{ label: "Karangan Bunga Jakarta", category: "Collection", url: "https://hotelverta.com/-jakarta", images: " ", price: " " },{ label: "Karangan Bunga Jambi", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Jayapura", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Jember", category: "Collection", url: "https://hotelverta.com/-jember", images: " ", price: " " },{ label: "Karangan Bunga Jembrana", category: "Collection", url: "https://hotelverta.com/-jembrana", images: " ", price: " " },{ label: "Karangan Bunga Jepara", category: "Collection", url: "https://hotelverta.com/-jepara", images: " ", price: " " },{ label: "Karangan Bunga Jombang", category: "Collection", url: "https://hotelverta.com/-jombang", images: " ", price: " " },{ label: "Karangan Bunga Kampung Baru", category: "Collection", url: "https://hotelverta.com/-kampung-baru", images: " ", price: " " },{ label: "Karangan Bunga Kapuas", category: "Collection", url: "https://hotelverta.com/-kapuas", images: " ", price: " " },{ label: "Karangan Bunga Karanganyar", category: "Collection", url: "https://hotelverta.com/-karanganyar", images: " ", price: " " },{ label: "Karangan Bunga Karangasem", category: "Collection", url: "https://hotelverta.com/-karangasem", images: " ", price: " " },{ label: "Karangan Bunga Karawang", category: "Collection", url: "https://hotelverta.com/-karawang", images: " ", price: " " },{ label: "Karangan Bunga Kartosuro", category: "Collection", url: "https://hotelverta.com/-kartosuro", images: " ", price: " " },{ label: "Karangan Bunga Kebumen", category: "Collection", url: "https://hotelverta.com/-kebumen", images: " ", price: " " },{ label: "Karangan Bunga Kediri", category: "Collection", url: "https://hotelverta.com/-kediri", images: " ", price: " " },{ label: "Karangan Bunga Kendal", category: "Collection", url: "https://hotelverta.com/-kendal", images: " ", price: " " },{ label: "Karangan Bunga Kendari", category: "Collection", url: "https://hotelverta.com/-kendari", images: " ", price: " " },{ label: "Karangan Bunga Ketapang", category: "Collection", url: "https://hotelverta.com/-ketapang", images: " ", price: " " },{ label: "Karangan Bunga Klaten", category: "Collection", url: "https://hotelverta.com/-klaten", images: " ", price: " " },{ label: "Karangan Bunga Kota Batu", category: "Collection", url: "https://hotelverta.com/-kota-batu", images: " ", price: " " },{ label: "Karangan Bunga Kudus", category: "Collection", url: "https://hotelverta.com/-kudus", images: " ", price: " " },{ label: "Karangan Bunga Kupang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Lamongan", category: "Collection", url: "https://hotelverta.com/-lamongan", images: " ", price: " " },{ label: "Karangan Bunga Lampung", category: "Collection", url: "https://hotelverta.com/-lampung", images: " ", price: " " },{ label: "Karangan Bunga Langkat", category: "Collection", url: "https://hotelverta.com/-langkat", images: " ", price: " " },{ label: "Karangan Bunga Lembang", category: "Collection", url: "https://hotelverta.com/-lembang", images: " ", price: " " },{ label: "Karangan Bunga Lombok", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Lubuk Pakam", category: "Collection", url: "https://hotelverta.com/-lubuk-pakam", images: " ", price: " " },{ label: "Karangan Bunga Lumajang", category: "Collection", url: "https://hotelverta.com/-lumajang", images: " ", price: " " },{ label: "Karangan Bunga Madiun", category: "Collection", url: "https://hotelverta.com/-madiun", images: " ", price: " " },{ label: "Karangan Bunga Magelang", category: "Collection", url: "https://hotelverta.com/-magelang", images: " ", price: " " },{ label: "Karangan Bunga Majalengka", category: "Collection", url: "https://hotelverta.com/-majalengka", images: " ", price: " " },{ label: "Karangan Bunga Makassar", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Malang", category: "Collection", url: "https://hotelverta.com/-malang", images: " ", price: " " },{ label: "Karangan Bunga Mamuju", category: "Collection", url: "https://hotelverta.com/-mamuju", images: " ", price: " " },{ label: "Karangan Bunga Manado", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Manokwari", category: "Collection", url: "https://hotelverta.com/-manokwari", images: " ", price: " " },{ label: "Karangan Bunga Maros", category: "Collection", url: "https://hotelverta.com/-maros", images: " ", price: " " },{ label: "Karangan Bunga Mataram", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Mojokerto", category: "Collection", url: "https://hotelverta.com/-mojokerto", images: " ", price: " " },{ label: "Karangan Bunga Nganjuk", category: "Collection", url: "https://hotelverta.com/-nganjuk", images: " ", price: " " },{ label: "Karangan Bunga Nias", category: "Collection", url: "https://hotelverta.com/-nias", images: " ", price: " " },{ label: "Karangan Bunga Padang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Palangkaraya", category: "Collection", url: "https://hotelverta.com/-palangkaraya", images: " ", price: " " },{ label: "Karangan Bunga Palu", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Pangkal Pinang", category: "Collection", url: "https://hotelverta.com/-pangkal-pinang", images: " ", price: " " },{ label: "Karangan Bunga Papan", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " }
13872,{ label: "Karangan Bunga Papan Bandar Lampung", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Papan Bekasi", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Papan Binjai", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Papan Blitar", category: "Collection", url: "https://hotelverta.com/-blitar", images: " ", price: " " },{ label: "Karangan Bunga Papan Buleleng", category: "Collection", url: "https://hotelverta.com/-buleleng", images: " ", price: " " },{ label: "Karangan Bunga Papan Cibubur", category: "Collection", url: "https://hotelverta.com/-cibubur", images: " ", price: " " },{ label: "Karangan Bunga Papan Deli Serdang", category: "Collection", url: "https://hotelverta.com/-deli-serdang", images: " ", price: " " },{ label: "Karangan Bunga Papan Jakarta Timur", category: "Collection", url: "https://hotelverta.com/-jakarta-timur", images: " ", price: " " },{ label: "Karangan Bunga Papan Karo", category: "Collection", url: "https://hotelverta.com/-karo", images: " ", price: " " },{ label: "Karangan Bunga Papan Medan", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Papan Ngawi", category: "Collection", url: "https://hotelverta.com/-ngawi", images: " ", price: " " },{ label: "Karangan Bunga Papan Palembang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Papan Pemalang", category: "Collection", url: "https://hotelverta.com/-pemalang", images: " ", price: " " },{ label: "Karangan Bunga Papan Rembang", category: "Collection", url: "https://hotelverta.com/-rembang", images: " ", price: " " },{ label: "Karangan Bunga Papan Sragen", category: "Collection", url: "https://hotelverta.com/-sragen", images: " ", price: " " },{ label: "Karangan Bunga Papan Tegal", category: "Collection", url: "https://hotelverta.com/-tegal", images: " ", price: " " },{ label: "Karangan Bunga Papan Temanggung", category: "Collection", url: "https://hotelverta.com/-temanggung", images: " ", price: " " },{ label: "Karangan Bunga Parepare", category: "Collection", url: "https://hotelverta.com/-parepare", images: " ", price: " " },{ label: "Karangan Bunga Pasuruan", category: "Collection", url: "https://hotelverta.com/-pasuruan", images: " ", price: " " },{ label: "Karangan Bunga Pati", category: "Collection", url: "https://hotelverta.com/-pati", images: " ", price: " " },{ label: "Karangan Bunga Pekalongan", category: "Collection", url: "https://hotelverta.com/-pekalongan", images: " ", price: " " },{ label: "Karangan Bunga Pekanbaru", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Pematangsiantar", category: "Collection", url: "https://hotelverta.com/-pematangsiantar", images: " ", price: " " },{ label: "Karangan Bunga Ponorogo", category: "Collection", url: "https://hotelverta.com/-ponorogo", images: " ", price: " " },{ label: "Karangan Bunga Pontianak", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Probolinggo", category: "Collection", url: "https://hotelverta.com/-probolinggo", images: " ", price: " " },{ label: "Karangan Bunga Purbalingga", category: "Collection", url: "https://hotelverta.com/-purbalingga", images: " ", price: " " },{ label: "Karangan Bunga Purwokerto", category: "Collection", url: "https://hotelverta.com/-purwokerto", images: " ", price: " " },{ label: "Karangan Bunga Purworejo", category: "Collection", url: "https://hotelverta.com/-purworejo", images: " ", price: " " },{ label: "Karangan Bunga Riau", category: "Collection", url: "https://hotelverta.com/-riau", images: " ", price: " " },{ label: "Karangan Bunga Salatiga", category: "Collection", url: "https://hotelverta.com/-salatiga", images: " ", price: " " },{ label: "Karangan Bunga Samarinda", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Semarang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Serang", category: "Collection", url: "https://hotelverta.com/-serang", images: " ", price: " " },{ label: "Karangan Bunga Sibolga", category: "Collection", url: "https://hotelverta.com/-sibolga", images: " ", price: " " },{ label: "Karangan Bunga Sidoarjo", category: "Collection", url: "https://hotelverta.com/-sidoarjo", images: " ", price: " " },{ label: "Karangan Bunga Singkawang", category: "Collection", url: "https://hotelverta.com/-singkawang", images: " ", price: " " },{ label: "Karangan Bunga Solo", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Sorong", category: "Collection", url: "https://hotelverta.com/-sorong", images: " ", price: " " },{ label: "Karangan Bunga Subang", category: "Collection", url: "https://hotelverta.com/-subang", images: " ", price: " " },{ label: "Karangan Bunga Sukabumi", category: "Collection", url: "https://hotelverta.com/-sukabumi", images: " ", price: " " },{ label: "Karangan Bunga Sumbawa", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Surabaya", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Surakarta", category: "Collection", url: "https://hotelverta.com/-surakarta", images: " ", price: " " },{ label: "Karangan Bunga Tangerang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Karangan Bunga Tasikmalaya", category: "Collection", url: "https://hotelverta.com/-tasikmalaya", images: " ", price: " " },{ label: "Karangan Bunga Ternate", category: "Collection", url: "https://hotelverta.com/-ternate", images: " ", price: " " },{ label: "Karangan Bunga Tolitoli", category: "Collection", url: "https://hotelverta.com/-tolitoli", images: " ", price: " " },{ label: "Karangan Bunga Toraja", category: "Collection", url: "https://hotelverta.com/-toraja", images: " ", price: " " },{ label: "Karangan Bunga Tuban", category: "Collection", url: "https://hotelverta.com/-tuban", images: " ", price: " " },{ label: "Karangan Bunga Tulungagung", category: "Collection", url: "https://hotelverta.com/-tulungagung", images: " ", price: " " },{ label: "Karangan Bunga Wakatobi", category: "Collection", url: "https://hotelverta.com/-wakatobi", images: " ", price: " " },{ label: "Karangan Bunga Wiyung", category: "Collection", url: "https://hotelverta.com/-wiyung", images: " ", price: " " },{ label: "Karangan Bunga Wonogiri", category: "Collection", url: "https://hotelverta.com/-wonogiri", images: " ", price: " " },{ label: "Karangan Bunga Wonokromo", category: "Collection", url: "https://hotelverta.com/-wonokromo", images: " ", price: " " },{ label: "Karangan Bunga Wonosobo", category: "Collection", url: "https://hotelverta.com/-wonosobo", images: " ", price: " " },{ label: "Karangan Bunga Yogyakarta", category: "Collection", url: "https://hotelverta.com/-yogyakarta", images: " ", price: " " },{ label: "Kartu Ucapan", category: "Collection", url: "https://hotelverta.com/", 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://hotelverta.com/", 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://hotelverta.com/", images: " ", price: " " },{ label: "Kue Tart Oma Elly", category: "Collection", url: "https://hotelverta.com/-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://hotelverta.com/", 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://hotelverta.com/", 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://hotelverta.com/", 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-
13872hampers", 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://hotelverta.com/-unik", images: " ", price: " " },{ label: "Modern 3D Cake", category: "Collection", url: "https://hotelverta.com/", 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://hotelverta.com/", 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://hotelverta.com/", 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: " " }
13872,{ 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://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Aceh", category: "Collection", url: "https://hotelverta.com/-aceh", images: " ", price: " " },{ label: "Papan Bunga Acrylic", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Ambon", category: "Collection", url: "https://hotelverta.com/-ambon", images: " ", price: " " },{ label: "Papan Bunga Artificial", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Atambua", category: "Collection", url: "https://hotelverta.com/-atambua", images: " ", price: " " },{ label: "Papan Bunga Bali", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Balikpapan", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Bandar Lampung", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Bandung", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Bandung Barat", category: "Collection", url: "https://hotelverta.com/-barat", images: " ", price: " " },{ label: "Papan Bunga Bangka", category: "Collection", url: "https://hotelverta.com/-bangka", images: " ", price: " " },{ label: "Papan Bunga Banjarmasin", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Banten", category: "Collection", url: "https://hotelverta.com/-banten", images: " ", price: " " },{ label: "Papan Bunga Banyumas", category: "Collection", url: "https://hotelverta.com/-banyumas", images: " ", price: " " },{ label: "Papan Bunga Banyuwangi", category: "Collection", url: "https://hotelverta.com/-banyuwangi", images: " ", price: " " },{ label: "Papan Bunga Batam", category: "Collection", url: "https://hotelverta.com/-batam", images: " ", price: " " },{ label: "Papan Bunga Baubau", category: "Collection", url: "https://hotelverta.com/-baubau", images: " ", price: " " }
13872,{ label: "Papan Bunga Bekasi", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Bengkalis", category: "Collection", url: "https://hotelverta.com/-bengkalis", images: " ", price: " " },{ label: "Papan Bunga Bengkayang", category: "Collection", url: "https://hotelverta.com/-bengkayang", images: " ", price: " " },{ label: "Papan Bunga Bengkulu", category: "Collection", url: "https://hotelverta.com/-bengkulu", images: " ", price: " " },{ label: "Papan Bunga Binjai", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Blitar", category: "Collection", url: "https://hotelverta.com/-blitar", images: " ", price: " " },{ label: "Papan Bunga Blora", category: "Collection", url: "https://hotelverta.com/-blora", images: " ", price: " " },{ label: "Papan Bunga Bogor", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Bojonegoro", category: "Collection", url: "https://hotelverta.com/-bojonegoro", images: " ", price: " " },{ label: "Papan Bunga Boyolali", category: "Collection", url: "https://hotelverta.com/-boyolali", images: " ", price: " " },{ label: "Papan Bunga Brebes", category: "Collection", url: "https://hotelverta.com/-brebes", images: " ", price: " " },{ label: "Papan Bunga Bukittinggi", category: "Collection", url: "https://hotelverta.com/-bukittinggi", images: " ", price: " " },{ label: "Papan Bunga Buleleng", category: "Collection", url: "https://hotelverta.com/-buleleng", images: " ", price: " " },{ label: "Papan Bunga Ciamis", category: "Collection", url: "https://hotelverta.com/-ciamis", images: " ", price: " " },{ label: "Papan Bunga Cianjur", category: "Collection", url: "https://hotelverta.com/-cianjur", images: " ", price: " " },{ label: "Papan Bunga Cibubur", category: "Collection", url: "https://hotelverta.com/-cibubur", images: " ", price: " " },{ label: "Papan Bunga Cikarang", category: "Collection", url: "https://hotelverta.com/-cikarang", images: " ", price: " " },{ label: "Papan Bunga Cikupa", category: "Collection", url: "https://hotelverta.com/-cikupa", images: " ", price: " " },{ label: "Papan Bunga Cikupa", category: "Collection", url: "https://hotelverta.com/-cikupa-1", images: " ", price: " " },{ label: "Papan Bunga Cilacap", category: "Collection", url: "https://hotelverta.com/-cilacap", images: " ", price: " " },{ label: "Papan Bunga Cileunyi", category: "Collection", url: "https://hotelverta.com/-cileunyi", images: " ", price: " " },{ label: "Papan Bunga Cirebon", category: "Collection", url: "https://hotelverta.com/-cirebon", images: " ", price: " " },{ label: "Papan Bunga Congratulations", category: "Collection", url: "https://hotelverta.com/-ucapan-selamat", images: " ", price: " " },{ label: "Papan Bunga Congratulations Bali", category: "Collection", url: "https://hotelverta.com/-congratulations-bali", images: " ", price: " " },{ label: "Papan Bunga Congratulations Bandung", category: "Collection", url: "https://hotelverta.com/-congratulations-bandung", images: " ", price: " " },{ label: "Papan Bunga Congratulations Bekasi", category: "Collection", url: "https://hotelverta.com/-congratulations-bekasi", images: " ", price: " " },{ label: "Papan Bunga Congratulations Bogor", category: "Collection", url: "https://hotelverta.com/-congratulations-bogor", images: " ", price: " " },{ label: "Papan Bunga Congratulations Cikupa", category: "Collection", url: "https://hotelverta.com/-congratulations-cikupa", images: " ", price: " " },{ label: "Papan Bunga Congratulations Demak", category: "Collection", url: "https://hotelverta.com/-congratulations-demak", images: " ", price: " " },{ label: "Papan Bunga Congratulations Depok", category: "Collection", url: "https://hotelverta.com/-congratulations-depok", images: " ", price: " " },{ label: "Papan Bunga Congratulations Gresik", category: "Collection", url: "https://hotelverta.com/-congratulations-gresik", images: " ", price: " " },{ label: "Papan Bunga Congratulations Jakarta", category: "Collection", url: "https://hotelverta.com/-congratulations-jakarta", images: " ", price: " " }
13872,{ label: "Papan Bunga Congratulations Jepara", category: "Collection", url: "https://hotelverta.com/-congratulations-jepara", images: " ", price: " " },{ label: "Papan Bunga Congratulations Medan", category: "Collection", url: "https://hotelverta.com/-congratulations-medan", images: " ", price: " " },{ label: "Papan Bunga Congratulations Semarang", category: "Collection", url: "https://hotelverta.com/-congratulations-semarang", images: " ", price: " " },{ label: "Papan Bunga Congratulations Serang", category: "Collection", url: "https://hotelverta.com/-congratulations-serang", images: " ", price: " " },{ label: "Papan Bunga Congratulations Sidoarjo", category: "Collection", url: "https://hotelverta.com/-congratulations-sidoarjo", images: " ", price: " " },{ label: "Papan Bunga Congratulations Surabaya", category: "Collection", url: "https://hotelverta.com/-congratulations-surabaya", images: " ", price: " " },{ label: "Papan Bunga Congratulations Tangerang", category: "Collection", url: "https://hotelverta.com/-congratulations-tangerang", images: " ", price: " " },{ label: "Papan Bunga Congratulations Yogyakarta", category: "Collection", url: "https://hotelverta.com/-congratulations-yogyakarta", images: " ", price: " " },{ label: "Papan Bunga Danau Toba", category: "Collection", url: "https://hotelverta.com/-danau-toba", images: " ", price: " " },{ label: "Papan Bunga Deli Serdang", category: "Collection", url: "https://hotelverta.com/-deli-serdang", images: " ", price: " " },{ label: "Papan Bunga Demak", category: "Collection", url: "https://hotelverta.com/-demak", images: " ", price: " " },{ label: "Papan Bunga Denpasar", category: "Collection", url: "https://hotelverta.com/-denpasar", images: " ", price: " " },{ label: "Papan Bunga Depok", category: "Collection", url: "https://hotelverta.com/", 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://hotelverta.com/-duka-cita-bali", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Bandung", category: "Collection", url: "https://hotelverta.com/-duka-cita-bandung", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Bekasi", category: "Collection", url: "https://hotelverta.com/-duka-cita-bekasi", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Bogor", category: "Collection", url: "https://hotelverta.com/-duka-cita-bogor", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Cikupa", category: "Collection", url: "https://hotelverta.com/-duka-cita-cikupa", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Demak", category: "Collection", url: "https://hotelverta.com/-duka-cita-demak", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Depok", category: "Collection", url: "https://hotelverta.com/-duka-cita-depok", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Gresik", category: "Collection", url: "https://hotelverta.com/-duka-cita-gresik", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Jakarta", category: "Collection", url: "https://hotelverta.com/-duka-cita-jakarta", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Jepara", category: "Collection", url: "https://hotelverta.com/-duka-cita-jepara", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Medan", category: "Collection", url: "https://hotelverta.com/-duka-cita-medan", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Semarang", category: "Collection", url: "https://hotelverta.com/-duka-cita-semarang", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Serang", category: "Collection", url: "https://hotelverta.com/-duka-cita-serang", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Sidoarjo", category: "Collection", url: "https://hotelverta.com/-duka-cita-sidoarjo", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Surabaya", category: "Collection", url: "https://hotelverta.com/-duka-cita-surabaya", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Tangerang", category: "Collection", url: "https://hotelverta.com/-duka-cita-tangerang", images: " ", price: " " }
13872,{ label: "Papan Bunga Duka Cita Yogyakarta", category: "Collection", url: "https://hotelverta.com/-duka-cita-yogyakarta", images: " ", price: " " },{ label: "Papan Bunga Garut", category: "Collection", url: "https://hotelverta.com/-garut", images: " ", price: " " },{ label: "Papan Bunga Gianyar", category: "Collection", url: "https://hotelverta.com/-gianyar", images: " ", price: " " },{ label: "Papan Bunga Gorontalo", category: "Collection", url: "https://hotelverta.com/-gorontalo", images: " ", price: " " },{ label: "Papan Bunga Gowa", category: "Collection", url: "https://hotelverta.com/-gowa", images: " ", price: " " },{ label: "Papan Bunga Gresik", category: "Collection", url: "https://hotelverta.com/-gresik", images: " ", price: " " },{ label: "Papan Bunga Grobogan", category: "Collection", url: "https://hotelverta.com/-grobogan", images: " ", price: " " },{ label: "Papan Bunga Gunungkidul", category: "Collection", url: "https://hotelverta.com/-gunungkidul", images: " ", price: " " },{ label: "Papan Bunga Indramayu", category: "Collection", url: "https://hotelverta.com/-indramayu", images: " ", price: " " },{ label: "Papan Bunga Jakarta", category: "Collection", url: "https://hotelverta.com/-jakarta", images: " ", price: " " },{ label: "Papan Bunga Jakarta Timur", category: "Collection", url: "https://hotelverta.com/-jakarta-timur", images: " ", price: " " },{ label: "Papan Bunga Jambi", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Jayapura", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Jember", category: "Collection", url: "https://hotelverta.com/-jember", images: " ", price: " " },{ label: "Papan Bunga Jembrana", category: "Collection", url: "https://hotelverta.com/-jembrana", images: " ", price: " " },{ label: "Papan Bunga Jepara", category: "Collection", url: "https://hotelverta.com/-jepara", images: " ", price: " " },{ label: "Papan Bunga Jombang", category: "Collection", url: "https://hotelverta.com/-jombang", images: " ", price: " " },{ label: "Papan Bunga Kampung Baru", category: "Collection", url: "https://hotelverta.com/-kampung-baru", images: " ", price: " " },{ label: "Papan Bunga Kapuas", category: "Collection", url: "https://hotelverta.com/-kapuas", images: " ", price: " " },{ label: "Papan Bunga Karanganyar", category: "Collection", url: "https://hotelverta.com/-karanganyar", images: " ", price: " " },{ label: "Papan Bunga Karangasem", category: "Collection", url: "https://hotelverta.com/-karangasem", images: " ", price: " " },{ label: "Papan Bunga Karawang", category: "Collection", url: "https://hotelverta.com/-karawang", images: " ", price: " " },{ label: "Papan Bunga Karo", category: "Collection", url: "https://hotelverta.com/-karo", images: " ", price: " " },{ label: "Papan Bunga Kartosuro", category: "Collection", url: "https://hotelverta.com/-kartosuro", images: " ", price: " " },{ label: "Papan Bunga Kebumen", category: "Collection", url: "https://hotelverta.com/-kebumen", images: " ", price: " " },{ label: "Papan Bunga Kediri", category: "Collection", url: "https://hotelverta.com/-kediri", images: " ", price: " " },{ label: "Papan Bunga Kendal", category: "Collection", url: "https://hotelverta.com/-kendal", images: " ", price: " " },{ label: "Papan Bunga Kendari", category: "Collection", url: "https://hotelverta.com/-kendari", images: " ", price: " " },{ label: "Papan Bunga Ketapang", category: "Collection", url: "https://hotelverta.com/-ketapang", images: " ", price: " " },{ label: "Papan Bunga Klaten", category: "Collection", url: "https://hotelverta.com/-klaten", images: " ", price: " " },{ label: "Papan Bunga Kota Batu", category: "Collection", url: "https://hotelverta.com/-kota-batu", images: " ", price: " " },{ label: "Papan Bunga Kudus", category: "Collection", url: "https://hotelverta.com/-kudus", images: " ", price: " " },{ label: "Papan Bunga Kupang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Lamongan", category: "Collection", url: "https://hotelverta.com/-lamongan", images: " ", price: " " }
13872,{ label: "Papan Bunga Lampu LED", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Lampung", category: "Collection", url: "https://hotelverta.com/-lampung", images: " ", price: " " },{ label: "Papan Bunga Langkat", category: "Collection", url: "https://hotelverta.com/-langkat", images: " ", price: " " },{ label: "Papan Bunga Lembang", category: "Collection", url: "https://hotelverta.com/-lembang", images: " ", price: " " },{ label: "Papan Bunga Lombok", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Lubuk Pakam", category: "Collection", url: "https://hotelverta.com/-lubuk-pakam", images: " ", price: " " },{ label: "Papan Bunga Lumajang", category: "Collection", url: "https://hotelverta.com/-lumajang", images: " ", price: " " },{ label: "Papan Bunga Madiun", category: "Collection", url: "https://hotelverta.com/-madiun", images: " ", price: " " },{ label: "Papan Bunga Magelang", category: "Collection", url: "https://hotelverta.com/-magelang", images: " ", price: " " },{ label: "Papan Bunga Majalengka", category: "Collection", url: "https://hotelverta.com/-majalengka", images: " ", price: " " },{ label: "Papan Bunga Makassar", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Malang", category: "Collection", url: "https://hotelverta.com/-malang", images: " ", price: " " },{ label: "Papan Bunga Mamuju", category: "Collection", url: "https://hotelverta.com/-mamuju", images: " ", price: " " },{ label: "Papan Bunga Manado", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Manokwari", category: "Collection", url: "https://hotelverta.com/-manokwari", images: " ", price: " " },{ label: "Papan Bunga Maros", category: "Collection", url: "https://hotelverta.com/-maros", images: " ", price: " " },{ label: "Papan Bunga Mataram", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Medan", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Mojokerto", category: "Collection", url: "https://hotelverta.com/-mojokerto", images: " ", price: " " },{ label: "Papan Bunga Nganjuk", category: "Collection", url: "https://hotelverta.com/-nganjuk", images: " ", price: " " },{ label: "Papan Bunga Ngawi", category: "Collection", url: "https://hotelverta.com/-ngawi", images: " ", price: " " },{ label: "Papan Bunga Nias", category: "Collection", url: "https://hotelverta.com/-nias", images: " ", price: " " },{ label: "Papan Bunga Organza", category: "Collection", url: "https://hotelverta.com/-organza", images: " ", price: " " },{ label: "Papan Bunga Padang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Palangkaraya", category: "Collection", url: "https://hotelverta.com/-palangkaraya", images: " ", price: " " },{ label: "Papan Bunga Palembang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Palu", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Pangkal Pinang", category: "Collection", url: "https://hotelverta.com/-pangkal-pinang", images: " ", price: " " },{ label: "Papan Bunga Parepare", category: "Collection", url: "https://hotelverta.com/-parepare", images: " ", price: " " },{ label: "Papan Bunga Pasuruan", category: "Collection", url: "https://hotelverta.com/-pasuruan", images: " ", price: " " },{ label: "Papan Bunga Pati", category: "Collection", url: "https://hotelverta.com/-pati", images: " ", price: " " },{ label: "Papan Bunga Pekalongan", category: "Collection", url: "https://hotelverta.com/-pekalongan", images: " ", price: " " },{ label: "Papan Bunga Pekanbaru", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Pemalang", category: "Collection", url: "https://hotelverta.com/-pemalang", images: " ", price: " " }
13872,{ label: "Papan Bunga Pematangsiantar", category: "Collection", url: "https://hotelverta.com/-pematangsiantar", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Bali", category: "Collection", url: "https://hotelverta.com/-pernikahan-bali", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Bandung", category: "Collection", url: "https://hotelverta.com/-pernikahan-bandung", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Bekasi", category: "Collection", url: "https://hotelverta.com/-pernikahan-bekasi", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Bogor", category: "Collection", url: "https://hotelverta.com/-pernikahan-bogor", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Cikupa", category: "Collection", url: "https://hotelverta.com/-pernikahan-cikupa", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Demak", category: "Collection", url: "https://hotelverta.com/-pernikahan-demak", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Depok", category: "Collection", url: "https://hotelverta.com/-pernikahan-depok", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Gresik", category: "Collection", url: "https://hotelverta.com/-pernikahan-gresik", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Jakarta", category: "Collection", url: "https://hotelverta.com/-pernikahan-jakarta", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Jepara", category: "Collection", url: "https://hotelverta.com/-pernikahan-jepara", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Medan", category: "Collection", url: "https://hotelverta.com/-pernikahan-medan", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Semarang", category: "Collection", url: "https://hotelverta.com/-pernikahan-semarang", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Serang", category: "Collection", url: "https://hotelverta.com/-pernikahan-serang", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Sidoarjo", category: "Collection", url: "https://hotelverta.com/-pernikahan-sidoarjo", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Surabaya", category: "Collection", url: "https://hotelverta.com/-pernikahan-surabaya", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Tangerang", category: "Collection", url: "https://hotelverta.com/-pernikahan-tangerang", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Yogyakarta", category: "Collection", url: "https://hotelverta.com/-pernikahan-yogyakarta", images: " ", price: " " },{ label: "Papan Bunga Ponorogo", category: "Collection", url: "https://hotelverta.com/-ponorogo", images: " ", price: " " },{ label: "Papan Bunga Pontianak", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Premium", category: "Collection", url: "https://hotelverta.com/-premium", images: " ", price: " " },{ label: "Papan Bunga Printing", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Printing Congratulations", category: "Collection", url: "https://hotelverta.com/-congratulations", images: " ", price: " " },{ label: "Papan Bunga Probolinggo", category: "Collection", url: "https://hotelverta.com/-probolinggo", images: " ", price: " " },{ label: "Papan Bunga Promo", category: "Collection", url: "/collections/promo-papan-bunga", images: " ", price: " " },{ label: "Papan Bunga Purbalingga", category: "Collection", url: "https://hotelverta.com/-purbalingga", images: " ", price: " " },{ label: "Papan Bunga Purwokerto", category: "Collection", url: "https://hotelverta.com/-purwokerto", images: " ", price: " " },{ label: "Papan Bunga Purworejo", category: "Collection", url: "https://hotelverta.com/-purworejo", images: " ", price: " " },{ label: "Papan Bunga Rembang", category: "Collection", url: "https://hotelverta.com/-rembang", images: " ", price: " " },{ label: "Papan Bunga Riau", category: "Collection", url: "https://hotelverta.com/-riau", images: " ", price: " " },{ label: "Papan Bunga Salatiga", category: "Collection", url: "https://hotelverta.com/-salatiga", images: " ", price: " " }
13872,{ label: "Papan Bunga Samarinda", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Selamat Bandung", category: "Collection", url: "https://hotelverta.com/-selamat-bandung", images: " ", price: " " },{ label: "Papan Bunga Selamat Medan", category: "Collection", url: "https://hotelverta.com/-selamat-medan", images: " ", price: " " },{ label: "Papan Bunga Semarang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Serang", category: "Collection", url: "https://hotelverta.com/-serang", images: " ", price: " " },{ label: "Papan Bunga Sibolga", category: "Collection", url: "https://hotelverta.com/-sibolga", images: " ", price: " " },{ label: "Papan Bunga Sidoarjo", category: "Collection", url: "https://hotelverta.com/-sidoarjo", images: " ", price: " " },{ label: "Papan Bunga Singkawang", category: "Collection", url: "https://hotelverta.com/-singkawang", images: " ", price: " " },{ label: "Papan Bunga Solo", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Sorong", category: "Collection", url: "https://hotelverta.com/-sorong", images: " ", price: " " },{ label: "Papan Bunga Sragen", category: "Collection", url: "https://hotelverta.com/-sragen", images: " ", price: " " },{ label: "Papan Bunga Standard", category: "Collection", url: "https://hotelverta.com/-standard", images: " ", price: " " },{ label: "Papan Bunga Subang", category: "Collection", url: "https://hotelverta.com/-subang", images: " ", price: " " },{ label: "Papan Bunga Sukabumi", category: "Collection", url: "https://hotelverta.com/-sukabumi", images: " ", price: " " },{ label: "Papan Bunga Sumbawa", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Surabaya", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Surakarta", category: "Collection", url: "https://hotelverta.com/-surakarta", images: " ", price: " " },{ label: "Papan Bunga Tangerang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Papan Bunga Tasikmalaya", category: "Collection", url: "https://hotelverta.com/-tasikmalaya", images: " ", price: " " },{ label: "Papan Bunga Tegal", category: "Collection", url: "https://hotelverta.com/-tegal", images: " ", price: " " },{ label: "Papan Bunga Temanggung", category: "Collection", url: "https://hotelverta.com/-temanggung", images: " ", price: " " },{ label: "Papan Bunga Ternate", category: "Collection", url: "https://hotelverta.com/-ternate", images: " ", price: " " },{ label: "Papan Bunga Tolitoli", category: "Collection", url: "https://hotelverta.com/-tolitoli", images: " ", price: " " },{ label: "Papan Bunga Toraja", category: "Collection", url: "https://hotelverta.com/-toraja", images: " ", price: " " },{ label: "Papan Bunga Tuban", category: "Collection", url: "https://hotelverta.com/-tuban", images: " ", price: " " },{ label: "Papan Bunga Tulungagung", category: "Collection", url: "https://hotelverta.com/-tulungagung", images: " ", price: " " },{ label: "Papan Bunga Wakatobi", category: "Collection", url: "https://hotelverta.com/-wakatobi", images: " ", price: " " },{ label: "Papan Bunga Wedding", category: "Collection", url: "https://hotelverta.com/-ucapan-pernikahan", images: " ", price: " " },{ label: "Papan Bunga Wiyung", category: "Collection", url: "https://hotelverta.com/-wiyung", images: " ", price: " " },{ label: "Papan Bunga Wonogiri", category: "Collection", url: "https://hotelverta.com/-wonogiri", images: " ", price: " " },{ label: "Papan Bunga Wonokromo", category: "Collection", url: "https://hotelverta.com/-wonokromo", images: " ", price: " " },{ label: "Papan Bunga Wonosobo", category: "Collection", url: "https://hotelverta.com/-wonosobo", images: " ", price: " " },{ label: "Papan Bunga Yogyakarta", category: "Collection", url: "https://hotelverta.com/-yogyakarta", images: " ", price: " " },{ label: "Paper Flower Board", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " }
13872,{ label: "Paper Flower Board Bali", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Paper Flower Board Gresik", category: "Collection", url: "https://hotelverta.com/-gresik", images: " ", price: " " },{ label: "Paper Flower Board Sidoarjo", category: "Collection", url: "https://hotelverta.com/-sidoarjo", images: " ", price: " " },{ label: "Paper Flower Board Surabaya", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Paper Flower Board Yogyakarta", category: "Collection", url: "https://hotelverta.com/-yogyakarta", images: " ", price: " " },{ label: "Parcel", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Parcel Buah", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Parcel Buah Bandung", category: "Collection", url: "https://hotelverta.com/-buah-bandung", images: " ", price: " " },{ label: "Parcel Buah Semarang", category: "Collection", url: "https://hotelverta.com/-buah-semarang", images: " ", price: " " },{ label: "Parcel Buah Sidoarjo", category: "Collection", url: "https://hotelverta.com/-buah-sidoarjo", images: " ", price: " " },{ label: "Parcel Buah Surabaya", category: "Collection", url: "https://hotelverta.com/-buah-surabaya", images: " ", price: " " },{ label: "Parcel Imlek 2026", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Parcel Imlek Bandung", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Parcel Imlek Nusantara", category: "Collection", url: "https://hotelverta.com/-nusantara", images: " ", price: " " },{ label: "Parcel Lebaran Bandung", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Parcel Lebaran Nusantara", category: "Collection", url: "https://hotelverta.com/-indonesia", images: " ", price: " " },{ label: "Parcel Lebaran Surabaya", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Parcel Makanan", category: "Collection", url: "https://hotelverta.com/-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://hotelverta.com/-natal-bandung", images: " ", price: " " },{ label: "Parcel Newborn Nusantara", category: "Collection", url: "https://hotelverta.com/-nusantara", images: " ", price: " " },{ label: "Parcel Tahun Baru", category: "Collection", url: "/collections/new-year-tahun-baru", images: " ", price: " " },{ label: "Party Supplies", category: "Collection", url: "https://hotelverta.com/", 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://hotelverta.com/", images: " ", price: " " },{ label: "Personalized Gift", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Personalized Gift Pria", category: "Collection", url: "https://hotelverta.com/-pria", images: " ", price: " " },{ label: "Personalized Gift Wanita", category: "Collection", url: "https://hotelverta.com/-wanita", images: " ", price: " " },{ label: "Personalized Gifts", category: "Collection", url: "https://hotelverta.com/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://hotelverta.com/", 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://hotelverta.com/-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://hotelverta.com/", 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://hotelverta.com/", 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://hotelverta.com/", 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://hotelverta.com/", images: " ", price: " " },{ label: "Standing Flower Bali", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Standing Flower Bandung", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Standing Flower Congratulations", category: "Collection", url: "https://hotelverta.com/-congratulations", images: " ", price: " " },{ label: "Standing Flower Demak", category: "Collection", url: "https://hotelverta.com/-demak", images: " ", price: " " },{ label: "Standing Flower Jepara", category: "Collection", url: "https://hotelverta.com/-jepara", images: " ", price: " " },{ label: "Standing Flower Semarang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Standing Flower Sidoarjo", category: "Collection", url: "https://hotelverta.com/-sidoarjo", images: " ", price: " " },{ label: "Standing Flower Surabaya", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Standing Flower Yogyakarta", category: "Collection", url: "https://hotelverta.com/-yogyakarta", images: " ", price: " " },{ label: "Standing Giant Flower", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Stationery", category: "Collection", url: "https://hotelverta.com/", 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://hotelverta.com/", 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://hotelverta.com/-aceh", images: " ", price: " " },{ label: "Toko Bunga Ambon", category: "Collection", url: "https://hotelverta.com/-ambon", images: " ", price: " " },{ label: "Toko Bunga Atambua", category: "Collection", url: "https://hotelverta.com/-atambua", images: " ", price: " " },{ label: "Toko Bunga Bali", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Balikpapan", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " }
13872,{ label: "Toko Bunga Bandar Lampung", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Bandung", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Bandung Barat", category: "Collection", url: "https://hotelverta.com/-barat", images: " ", price: " " },{ label: "Toko Bunga Banjarmasin", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Banten", category: "Collection", url: "https://hotelverta.com/-banten", images: " ", price: " " },{ label: "Toko Bunga Banyumas", category: "Collection", url: "https://hotelverta.com/-banyumas", images: " ", price: " " },{ label: "Toko Bunga Banyuwangi", category: "Collection", url: "https://hotelverta.com/-banyuwangi", images: " ", price: " " },{ label: "Toko Bunga Batam", category: "Collection", url: "https://hotelverta.com/-batam", images: " ", price: " " },{ label: "Toko Bunga Baubau", category: "Collection", url: "https://hotelverta.com/-baubau", images: " ", price: " " },{ label: "Toko Bunga Bekasi", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Bengkalis", category: "Collection", url: "https://hotelverta.com/-bengkalis", images: " ", price: " " },{ label: "Toko Bunga Bengkayang", category: "Collection", url: "https://hotelverta.com/-bengkayang", images: " ", price: " " },{ label: "Toko Bunga Binjai", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Bintaro", category: "Collection", url: "https://hotelverta.com/-bintaro", images: " ", price: " " },{ label: "Toko Bunga Blitar", category: "Collection", url: "https://hotelverta.com/-blitar", images: " ", price: " " },{ label: "Toko Bunga Blora", category: "Collection", url: "https://hotelverta.com/-blora", images: " ", price: " " },{ label: "Toko Bunga Bogor", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Bojonegoro", category: "Collection", url: "https://hotelverta.com/-bojonegoro", images: " ", price: " " },{ label: "Toko Bunga Boyolali", category: "Collection", url: "https://hotelverta.com/-boyolali", images: " ", price: " " },{ label: "Toko Bunga Brebes", category: "Collection", url: "https://hotelverta.com/-brebes", images: " ", price: " " },{ label: "Toko Bunga Bukittinggi", category: "Collection", url: "https://hotelverta.com/-bukittinggi", images: " ", price: " " },{ label: "Toko Bunga Buleleng", category: "Collection", url: "https://hotelverta.com/-buleleng", images: " ", price: " " },{ label: "Toko Bunga Cakung", category: "Collection", url: "https://hotelverta.com/-cakung", images: " ", price: " " },{ label: "Toko Bunga Cawang", category: "Collection", url: "https://hotelverta.com/-cawang", images: " ", price: " " },{ label: "Toko Bunga Cempaka Putih", category: "Collection", url: "https://hotelverta.com/-cempaka-putih", images: " ", price: " " },{ label: "Toko Bunga Cengkareng", category: "Collection", url: "https://hotelverta.com/-cengkareng", images: " ", price: " " },{ label: "Toko Bunga Ciamis", category: "Collection", url: "https://hotelverta.com/-ciamis", images: " ", price: " " },{ label: "Toko Bunga Cianjur", category: "Collection", url: "https://hotelverta.com/-cianjur", images: " ", price: " " },{ label: "Toko Bunga Cibinong", category: "Collection", url: "https://hotelverta.com/-cibinong", images: " ", price: " " },{ label: "Toko Bunga Cibubur", category: "Collection", url: "https://hotelverta.com/-cibubur", images: " ", price: " " },{ label: "Toko Bunga Cijantung", category: "Collection", url: "https://hotelverta.com/-cijantung", images: " ", price: " " },{ label: "Toko Bunga Cikarang", category: "Collection", url: "https://hotelverta.com/-cikarang", images: " ", price: " " },{ label: "Toko Bunga Cikini", category: "Collection", url: "https://hotelverta.com/-cikini", images: " ", price: " " },{ label: "Toko Bunga Cilacap", category: "Collection", url: "https://hotelverta.com/-cilacap", images: " ", price: " " },{ label: "Toko Bunga Cilandak", category: "Collection", url: "https://hotelverta.com/-cilandak", images: " ", price: " " },{ label: "Toko Bunga Cileunyi", category: "Collection", url: "https://hotelverta.com/-cileunyi", images: " ", price: " " },{ label: "Toko Bunga Ciracas", category: "Collection", url: "https://hotelverta.com/-ciracas", images: " ", price: " " },{ label: "Toko Bunga Cirebon", category: "Collection", url: "https://hotelverta.com/-cirebon", images: " ", price: " " }
13872,{ label: "Toko Bunga Ciwidey", category: "Collection", url: "https://hotelverta.com/-ciwidey", images: " ", price: " " },{ label: "Toko Bunga Danau Toba", category: "Collection", url: "https://hotelverta.com/-danau-toba", images: " ", price: " " },{ label: "Toko Bunga Demak", category: "Collection", url: "https://hotelverta.com/-demak", images: " ", price: " " },{ label: "Toko Bunga Denpasar", category: "Collection", url: "https://hotelverta.com/-denpasar", images: " ", price: " " },{ label: "Toko Bunga Depok", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Duren Sawit", category: "Collection", url: "https://hotelverta.com/-duren-sawit", images: " ", price: " " },{ label: "Toko Bunga Garut", category: "Collection", url: "https://hotelverta.com/-garut", images: " ", price: " " },{ label: "Toko Bunga Gianyar", category: "Collection", url: "https://hotelverta.com/-gianyar", images: " ", price: " " },{ label: "Toko Bunga Gowa", category: "Collection", url: "https://hotelverta.com/-gowa", images: " ", price: " " },{ label: "Toko Bunga Gresik", category: "Collection", url: "https://hotelverta.com/-gresik", images: " ", price: " " },{ label: "Toko Bunga Grobogan", category: "Collection", url: "https://hotelverta.com/-grobogan", images: " ", price: " " },{ label: "Toko Bunga Grogol", category: "Collection", url: "https://hotelverta.com/-grogol", images: " ", price: " " },{ label: "Toko Bunga Gunungkidul", category: "Collection", url: "https://hotelverta.com/-gunungkidul", images: " ", price: " " },{ label: "Toko Bunga Indramayu", category: "Collection", url: "https://hotelverta.com/-indramayu", images: " ", price: " " },{ label: "Toko Bunga Jakarta", category: "Collection", url: "https://hotelverta.com/-jakarta", images: " ", price: " " },{ label: "Toko Bunga Jakarta Barat", category: "Collection", url: "https://hotelverta.com/-jakarta-barat", images: " ", price: " " },{ label: "Toko Bunga Jakarta Pusat", category: "Collection", url: "https://hotelverta.com/-jakarta-pusat", images: " ", price: " " },{ label: "Toko Bunga Jakarta Selatan", category: "Collection", url: "https://hotelverta.com/-jakarta-selatan", images: " ", price: " " },{ label: "Toko Bunga Jakarta Timur", category: "Collection", url: "https://hotelverta.com/-jakarta-timur", images: " ", price: " " },{ label: "Toko Bunga Jakarta Utara", category: "Collection", url: "https://hotelverta.com/-jakarta-utara", images: " ", price: " " },{ label: "Toko Bunga Jambi", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Jatinegara", category: "Collection", url: "https://hotelverta.com/-jatinegara", images: " ", price: " " },{ label: "Toko Bunga Jawa & Bali", category: "Collection", url: "https://hotelverta.com/-jawa-bali", images: " ", price: " " },{ label: "Toko Bunga Jayapura", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Jelambar - Florist Onine 24 Jam", category: "Collection", url: "https://hotelverta.com/-jelambar", images: " ", price: " " },{ label: "Toko Bunga Jember", category: "Collection", url: "https://hotelverta.com/-jember", images: " ", price: " " },{ label: "Toko Bunga Jembrana", category: "Collection", url: "https://hotelverta.com/-jembrana", images: " ", price: " " },{ label: "Toko Bunga Jepara", category: "Collection", url: "https://hotelverta.com/-jepara", images: " ", price: " " },{ label: "Toko Bunga Joglo", category: "Collection", url: "https://hotelverta.com/-joglo", images: " ", price: " " },{ label: "Toko Bunga Jombang", category: "Collection", url: "https://hotelverta.com/-jombang", images: " ", price: " " },{ label: "Toko Bunga Kalibata", category: "Collection", url: "https://hotelverta.com/-kalibata", images: " ", price: " " },{ label: "Toko Bunga Kalimantan", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Kalisari Semarang", category: "Collection", url: "https://hotelverta.com/-kalisari-semarang", images: " ", price: " " },{ label: "Toko Bunga Kampung Baru", category: "Collection", url: "https://hotelverta.com/-kampung-baru", images: " ", price: " " },{ label: "Toko Bunga Kapuas", category: "Collection", url: "https://hotelverta.com/-kapuas", images: " ", price: " " },{ label: "Toko Bunga Karanganyar", category: "Collection", url: "https://hotelverta.com/-karanganyar", images: " ", price: " " },{ label: "Toko Bunga Karangasem", category: "Collection", url: "https://hotelverta.com/-karangasem", images: " ", price: " " },{ label: "Toko Bunga Karawang", category: "Collection", url: "https://hotelverta.com/-karawang", images: " ", price: " " },{ label: "Toko Bunga Kartosuro", category: "Collection", url: "https://hotelverta.com/-kartosuro", images: " ", price: " " },{ label: "Toko Bunga Kayoon Surabaya", category: "Collection", url: "https://hotelverta.com/-kayoon-surabaya", images: " ", price: " " },{ label: "Toko Bunga Kebayoran Baru", category: "Collection", url: "https://hotelverta.com/-kebayoran-baru", images: " ", price: " " },{ label: "Toko Bunga Kebon Jeruk", category: "Collection", url: "https://hotelverta.com/-kebon-jeruk", images: " ", price: " " },{ label: "Toko Bunga Kebumen", category: "Collection", url: "https://hotelverta.com/-kebumen", images: " ", price: " " },{ label: "Toko Bunga Kediri", category: "Collection", url: "https://hotelverta.com/-kediri", images: " ", price: " " },{ label: "Toko Bunga Kelapa Gading", category: "Collection", url: "https://hotelverta.com/-kelapa-gading", images: " ", price: " " },{ label: "Toko Bunga Kemayoran", category: "Collection", url: "https://hotelverta.com/-kemayoran", images: " ", price: " " },{ label: "Toko Bunga Kendal", category: "Collection", url: "https://hotelverta.com/-kendal", images: " ", price: " " },{ label: "Toko Bunga Kendari", category: "Collection", url: "https://hotelverta.com/-kendari", images: " ", price: " " },{ label: "Toko Bunga Ketapang", category: "Collection", url: "https://hotelverta.com/-ketapang", images: " ", price: " " },{ label: "Toko Bunga Klaten", category: "Collection", url: "https://hotelverta.com/-klaten", images: " ", price: " " },{ label: "Toko Bunga Klender", category: "Collection", url: "https://hotelverta.com/-klender", images: " ", price: " " },{ label: "Toko Bunga Kota Baru Yogyakarta", category: "Collection", url: "https://hotelverta.com/-kota-baru-yogyakarta", images: " ", price: " " },{ label: "Toko Bunga Kota Batu", category: "Collection", url: "https://hotelverta.com/-kota-batu", images: " ", price: " " },{ label: "Toko Bunga Kramat Jati", category: "Collection", url: "https://hotelverta.com/-kramat-jati", images: " ", price: " " },{ label: "Toko Bunga Kudus", category: "Collection", url: "https://hotelverta.com/-kudus", images: " ", price: " " },{ label: "Toko Bunga Kupang", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Lamongan", category: "Collection", url: "https://hotelverta.com/-lamongan", images: " ", price: " " },{ label: "Toko Bunga Langkat", category: "Collection", url: "https://hotelverta.com/-langkat", images: " ", price: " " },{ label: "Toko Bunga Lebak Bulus", category: "Collection", url: "https://hotelverta.com/-lebak-bulus", images: " ", price: " " },{ label: "Toko Bunga Lembang", category: "Collection", url: "https://hotelverta.com/-lembang", images: " ", price: " " },{ label: "Toko Bunga Lenteng Agung", category: "Collection", url: "https://hotelverta.com/-lenteng-agung", images: " ", price: " " },{ label: "Toko Bunga Lombok", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Lubuk Pakam", category: "Collection", url: "https://hotelverta.com/-lubuk-pakam", images: " ", price: " " },{ label: "Toko Bunga Lumajang", category: "Collection", url: "https://hotelverta.com/-lumajang", images: " ", price: " " },{ label: "Toko Bunga Madiun", category: "Collection", url: "https://hotelverta.com/-madiun", images: " ", price: " " },{ label: "Toko Bunga Magelang", category: "Collection", url: "https://hotelverta.com/-magelang", images: " ", price: " " },{ label: "Toko Bunga Majalengka", category: "Collection", url: "https://hotelverta.com/-majalengka", images: " ", price: " " },{ label: "Toko Bunga Makassar", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Malang", category: "Collection", url: "https://hotelverta.com/-malang", images: " ", price: " " },{ label: "Toko Bunga Manado", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Mangga Besar", category: "Collection", url: "https://hotelverta.com/-mangga-besar", images: " ", price: " " },{ label: "Toko Bunga Manokwari", category: "Collection", url: "https://hotelverta.com/-manokwari", images: " ", price: " " },{ label: "Toko Bunga Maros", category: "Collection", url: "https://hotelverta.com/-maros", images: " ", price: " " },{ label: "Toko Bunga Mataram", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Medan", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },{ label: "Toko Bunga Mojokerto", category: "Collection", url: "https://hotelverta.com/-mojokerto", images: " ", price: " " },{ label: "Toko Bunga Nganjuk", category: "Collection", url: "https://hotelverta.com/-nganjuk", images: " ", price: " " },{ label: "Toko Bunga Ngawi", category: "Collection", url: "https://hotelverta.com/-ngawi", images: " ", price: " " },{ label: "Toko Bunga Nias", category: "Collection", url: "https://hotelverta.com/-nias", images: " ", price: " " },{ label: "Toko Bunga Nusa Tenggara", category: "Collection", url: "https://hotelverta.com/", images: " ", price: " " },
13873      { 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.386.737" },{ 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" }
13873,{ 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.386.737" },{ 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.008.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.386.737" },{ 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" }
13873,{ 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.386.737" },{ 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" },
13874  ];
13875
13876             
13877        $( ".header-input-search" ).catcomplete({
13878         appendTo: ".searchResult",source: function(request, response) {
13879            var results = $.ui.autocomplete.filter(data, request.term);
13880            var predicate = function () {
13881                var counter = { Collection: 0, Produk: 0 };
13882            var fn = function(item) {counter[item.category] += 1;return (counter[item.category] <= 5);}
13883            return fn
13884            }();
13885            response(results.filter(predicate));
13886          },
13887          minLength:1,
13888           //results are clickable
13889          select: function( event, ui ) {window.location = ui.item.url;}
13890});
13891$( ".header-input-search2" ).catcomplete({
13892        appendTo: ".searchResult2",
13893                   source: function(request, response) {
13894                    var results = $.ui.autocomplete.filter(data, request.term);
13895                    var predicate = function () {
13896                        var counter = { Collection: 0, Produk: 0 };
13897              var fn = function(item) {
13898              counter[item.category] += 1;
13899  return (counter[item.category] <= 5);
13900}
13901               return fn
13902               }();
13903response(results.filter(predicate));
13904},
13905  minLength:1,
13906        //results are clickable
13907        select: function( event, ui ) {
13908          window.location = ui.item.url;
13909        }
13910});
13911});
13912</script>
13912
13913
13914    
13914<script src="https://outerbloom.com/cdn/shop/t/138/assets/vendors.js?v=6349622868601634021752652419" defer></script>
vendor: 2 bytes, line 13914
13914
13915<script src="https://outerbloom.com/cdn/shop/t/138/assets/app.js?v=110161375600675176711769541235" defer></script>
13915
13916
13917<script>
13918  ( function() {
13919    var youtube = document.querySelectorAll( ".youtube" );
13920    for (var i = 0; i < youtube.length; i++) {
13921      var source = "https://img.youtube.com/vi/"+ youtube[i].dataset.embed +"/sddefault_1x.jpg";
13922      var datasource = "https://img.youtube.com/vi/"+ youtube[i].dataset.embed +"/sddefault.jpg";
13923      var image = new Image();
13924      image.src = source;
13925      image.setAttribute("data-src", datasource);
13926      image.classList.add("swiper-lazy");
13927      image.addEventListener( "load", function() {
13928        youtube[ i ].appendChild( image );
13929      }( i ) );
13930      youtube[i].addEventListener( "click", function() {
13931        var iframe = document.createElement( "iframe" );
13932        iframe.setAttribute( "width", "480" );
13933        iframe.setAttribute( "height", "480" );
13934        iframe.setAttribute( "frameborder", "0" );
13935        iframe.setAttribute( "allowfullscreen", "" );
13936        iframe.setAttribute( "src", "https://www.youtube.com/embed/"+ this.dataset.embed +"?rel=0&showinfo=0&autoplay=1" );
13937        this.innerHTML = "";
13938        this.appendChild( iframe );
13939      } );
13940    };
13941
13942  } )();
13943
13944  /* Lazy Load */
13945  if (typeof mainLazyLoad === 'undefined') {
13946    var mainLazyLoad = new LazyLoad({threshold:400});
13947  }
13948  $(document).ready(function(){
13949
13950    $("selectxxx").addClass("needsclick");
13951    FastClick.attach(document.body);
13952    
13953    // Only initialize select2 on desktop screens (width > 992px)
13954    if ($(window).width() > 992) {
13955      var $customSelects = $('.select-search');
13956      $customSelects.select2({
13957        templateResult: function(result, container) {
13958        if (!result.id) {
13959          return result.text;
13960        }
13961        container.className += ' needsclick';
13962        return result.text;
13963        }
13964      });
13965      $customSelects.each(function(index, el){$(el).data('select2').$container.find('*').addClass('needsclick');});
13966      $(document).on('select2:open', () => {
13967        document.querySelector('.select2-search__field').focus();
13968      });
13969    }
13970    
13971
13972    $(".overlay").click(function(){
13973      $(".js-drawer-close").click();
13974    });
13975    $(".site-nav--mobile .js-drawer-open-left, #NavDrawer .icon-close, .overlay-nav").click(function(){
13976      $("html").toggleClass("nav_open");
13977    });
13978    
13979    $('.swatch-element label').on('click', function(){
13980      var srcImg = $(this).data('src');
13981      $('#thumb-image-product .product-single__thumbnail').each(function(){
13982        if ($(this).attr("href") == srcImg) {
13983          $(this).trigger('click');
13984        }
13985      });
13986    });
13987    var defaultValue = $(".swatch input:checked").val()
13988    
13989    $('#purchaseProduct .swatch [type=radio]').change(function() {
13990      var optionIndex = $(this).closest('.swatch').attr('data-option-index');
13991      var optionValue = $(this).val();
13992      console.log(optionIndex, optionValue)
13993      var value = parseInt(optionValue.split(' ')[0])
13994      $(this)
13995      .closest('#purchaseProduct')
13996      .find('.single-option-selector')
13997      .eq(optionIndex)
13998      .val(optionValue)
13999      .trigger('change');
14000      
14001    });
14002    
14003  });
14004  $(document).ready(function(){
14005    $(".nav-search a").click(function(e){
14006      e.preventDefault();
14007      $(".icon-navsearch").toggle();
14008      $(".icon-navclose").toggle();
14009      $(".site-nav__item > .site-nav__link").toggle();
14010      $(".open-search").toggle();
14011      $(".open-search input").focus();
14012    });
14013    $(".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'>");
14014    if ($(window).width() < 768) {
14015      $(".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'>");
14016      $(".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'>");
14017      $(".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'>");
14018    } else {
14019      $(".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'>");
14020      $(".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'>");
14021      $(".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'>");
14022    }
14023    $(".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'>");
14024    $(".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'>");
14025  });
14026</script>
14026
14027
14028    
14029    
14029<script>
14030  /* Lazy Load */
14031  if (typeof mainLazyLoad === 'undefined') {
14032    var mainLazyLoad = new LazyLoad({threshold:400});
14033  }
14034  
14035  // Function to initialize select2 when it's ready (only on desktop >992px)
14036  function initializeSelect2() {
14037    // Only initialize select2 on desktop screens (width > 992px)
14038    if ($(window).width() <= 992) {
14039      return;
14040    }
14041    
14042    var $customSelects = $('.select-search');
14043    
14044    if ($customSelects.length > 0 && typeof $.fn.select2 !== 'undefined') {
14045      try {
14046        $customSelects.select2({
14047          templateResult: function(result, container) {
14048            if (!result.id) {
14049              return result.text;
14050            }
14051            container.className += ' needsclick';
14052            return result.text;
14053          }
14054        });
14055        $customSelects.each(function(index, el){
14056          $(el).data('select2').$container.find('*').addClass('needsclick');
14057        });
14058        console.log('Select2 initialized successfully');
14059      } catch(e) {
14060        console.warn('Select2 initialization failed:', e);
14061      }
14062    } else if ($customSelects.length > 0) {
14063      // Retry after a short delay if select2 is not yet loaded
14064      setTimeout(initializeSelect2, 100);
14065    }
14066  }
14067  
14068  $(document).ready(function(){
14069    $("select").addClass("needsclick");
14070    
14071    if (typeof FastClick !== 'undefined') {
14072      FastClick.attach(document.body);
14073    }
14074    
14075    // Initialize select2 with retry mechanism
14076    initializeSelect2();
14077
14078    $(".overlay").click(function(){
14079      $(".js-drawer-close").click();
14080    });
14081    $(".site-nav--mobile .js-drawer-open-left, #NavDrawer .icon-close, .overlay-nav").click(function(){
14082      $("html").toggleClass("nav_open");
14083    });
14084    
14085    // Wait for Shopify OptionSelectors to be initialized
14086    setTimeout(function() {
14087      // Remove any existing handlers first
14088      $('.swatch :radio').off('change.swatchHandler');
14089      
14090      // Attach new handler with namespace - use event delegation
14091      $(document).off('change.swatchHandler', '.swatch :radio');
14092      $(document).on('change.swatchHandler', '.swatch :radio', function() {
14093        var optionIndex = $(this).closest('.swatch').attr('data-option-index');
14094        var optionValue = $(this).val();
14095        
14096        // Find the corresponding single option selector
14097        var $selector = $('.single-option-selector[data-index="option' + (parseInt(optionIndex) + 1) + '"]');
14098        
14099        // If not found, try alternative selector
14100        if ($selector.length === 0) {
14101          $selector = $('#productSelect-option-' + optionIndex);
14102        }
14103        
14104        // If still not found, try finding by position
14105        if ($selector.length === 0) {
14106          $selector = $('.single-option-selector').eq(optionIndex);
14107        }
14108        
14109        if ($selector.length > 0) {
14110          $selector.val(optionValue).trigger('change');
14111        }
14112      });
14113    }, 300);
14114    
14115  });
14116  $(window).load(function(){
14117    $(".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'>");
14118  });
14119</script>
14119
14120
14121    
14122    
14123    
14124    
14125    
14126    
14127
14128    
14128<script type="text/javascript">
14129      var wishlistpage = 0;
14130       
14131       var quickShop_money_format="<span class='money'>"+"Rp {{amount_no_decimals}}"+"</span>";
14132    </script>
14132
14133    
14134      <!-- Remove duplicate wishlist.js reference -->
14135      <style>
14136  .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)}}
14137</style>
14138
14139<div class="modal fade" id="modalwishlist0" tabindex="-1" role="dialog">
14140  <div class="modal-dialog" role="document">
14141    <div class="modal-content">        
14142      <div class="modal-body">Your Wishlist is empty!</div>
14143      <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>          
14144    </div>
14145  </div>
14146</div> 
14147
14148<div class="wishlist-model">
14149  <div class="modal fade" id="modalwishlist1" tabindex="-1" role="dialog" aria-hidden="true">
14150    <div class="modal-dialog white-modal">
14151      <div class="modal-content">
14152        <div class="modal-header">
14153          <button type="button" class="close" data-dismiss="modal" aria-label="Close">
14154            <svg class="icon icon-close" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
14155<title>icon-close</title>
14156<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>
14157</svg>
14158          </button>
14159        </div>
14160        <div class="modal-body">
14161          <div class="wishlist-left">
14162            <div class="wishlist-note">
14163              <span class="cirle"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
14164<title>icon-check</title>
14165<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>
14166</svg></span>
14167              Product added to <a href="/pages/wish-list">Wishlist</a>
14168            </div>
14169            <div class="wishlist-product">
14170              <div class="product-left">
14171                <div class="wishlist-image"></div>
14172              </div>
14173              <div class="product-right">
14174                <div class="wishlist-name"></div>
14175                <div class="wishlist-price"></div>
14176              </div>
14177            </div>
14178          </div>
14179          <div class="wishlist-right">
14180            <div class="wishlist-cart">
14181              <form action="/cart/add" method="post" class="variants-form variants" id="AddToCartForm" enctype="multipart/form-data">                  
14182                <div class="others-bottom">
14183                  <a class="btn btn-quick-shop" href="/pages/wish-list">View Wishlist</a>
14184                  <button type="submit" name="add" id="AddToCart" class="btn btn-cta">
14185                    <span id="AddToCartText" class="">Beli Sekarang</span>
14186                  </button>
14187                </div>
14188                <div id="wishlist-variants-container" class="variants-wrapper"></div> 
14189                <div class="quantity-content">
14190                  <label>QTY</label>
14191                  <input type="number" size="5" class="" name="quantity" value="1" />
14192                </div>
14193              </form> 
14194            </div>
14195          </div>
14196        </div>
14197      </div>
14198    </div>
14199  </div>
14200</div>
14201    
14202
14203    
14204
14205    
14206      
14207      
14207<script type="application/ld+json">
14208        {
14209               "@context": "http://schema.org/",
14210               "@type": "Product",
14211          	   "url": "https://hotelverta.com/",
14212          	   "name": "HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman",
14213               "image": "https://imagesme.b-cdn.net/landing/banner-hotelverta.png",
14214               "description": "&lt;ul&gt;
14215&lt;li&gt;
14216&lt;strong&gt;HANTUSLOT&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;
14217&lt;/li&gt;
14218&lt;li&gt;
14219&lt;strong&gt;GAME&lt;/strong&gt;&lt;br&gt;
14220&lt;/li&gt;
14221&lt;li&gt;&lt;strong&gt;GAMEONLINE&lt;/strong&gt;&lt;/li&gt;
14222&lt;/ul&gt;
14223&lt;p&gt;HANTUSLOT menghadirkan beragam game online modern dengan dukungan fitur berbahasa Indonesia, sehingga pengguna dapat memahami setiap menu dan fitur dengan lebih mudah serta menikmati pengalaman bermain yang praktis dan nyaman.&lt;/p&gt;
14224&lt;p&gt;&lt;img src=&quot;https://imagesme.b-cdn.net/landing/banner-hotelverta.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
14225&lt;table style=&quot;width: 100.091%;&quot; width=&quot;100%&quot;&gt;
14226&lt;tbody&gt;
14227&lt;tr&gt;
14228&lt;td style=&quot;width: 33.7327%;&quot;&gt;SKU&lt;/td&gt;
14229&lt;td style=&quot;width: 65.9908%;&quot;&gt;[C]HANTUSLOT&lt;br&gt;[C]OBIPCL1004-CNY2026&lt;br&gt;
14230&lt;/td&gt;
14231&lt;/tr&gt;
14232&lt;tr&gt;
14233&lt;td style=&quot;width: 33.7327%;&quot;&gt;Isi&lt;/td&gt;
14234&lt;td style=&quot;width: 65.9908%;&quot;&gt;link login game online&lt;br&gt;GAME REKOMENDASI 2026&lt;br&gt;fitur inovatif game online&lt;br&gt;Situs HANTUSLOT&lt;br&gt;game terbaru 2026&lt;br&gt;link bandar game online&lt;br&gt;main game berbahasa indonesia&lt;br&gt;
14235&lt;/td&gt;
14236&lt;/tr&gt;
14237&lt;/tbody&gt;
14238&lt;/table&gt;",
14239               "brand": {
14240                   "name": "Outerbloom Hampers"
14241               },
14242               "sku": "[C]HANTUSLOT",
14243               "mpn": "[C]HANTUSLOT",
14244               "offers": {
14245                   "@type": "Offer",
14246                   "priceCurrency": "IDR",
14247                   "price": "1885000",
14248                   "availability": "http://schema.org/InStock",
14249                   "seller": {
14250                       "@type": "Organization",
14251                        "name": "Outerbloom"
14252                   },
14253                   "url": "https://hotelverta.com/"
14254               }
14255               
14256        }
14257      </script>
vendor: 2 bytes, line 14257
14257
14258<script type="application/ld+json">
14259{
14260  "@context": "https://schema.org",
14261  "@type": "VideoObject",
14262  "name": "HANTUSLOT🎰Situs Game Online Lengkap, Cepat & Nyaman",
14263  "description": "HANTUSLOT menghadirkan beragam game online modern dengan dukungan fitur berbahasa Indonesia, sehingga pengguna dapat memahami setiap menu dan fitur dengan lebih mudah serta menikmati pengalaman bermain yang praktis dan nyaman.",
14264  "thumbnailUrl": "https://imagesme.b-cdn.net/landing/banner-hotelverta.png",
14265  "uploadDate": "2025-02-15",
14266  "duration": "PT45S",
14267  "contentUrl": "https://imagesme.b-cdn.net/landing/banner-hotelverta.png",
14268  "embedUrl": "https://imagesme.b-cdn.net/landing/banner-hotelverta.png",
14269  "publisher": {
14270    "@type": "Organization",
14271    "name": "HANTUSLOT",
14272    "logo": {
14273      "@type": "ImageObject",
14274      "url": "https://imagesme.b-cdn.net/landing/banner-hotelverta.png"
14275    },
14276    "url": "https://hotelverta.com/"
14277  },
14278  "keywords": [
14279    "HANTUSLOT",
14280    "HANTUSLOT LOGIN",
14281    "GAME HANTUSLOT",
14282    "GAME ONLINE",
14283    "GAME BERBAHASA INDONESIA",
14284    "GAME REKOMENDASI"
14285  ],
14286  "genre": "Entertainment",
14287  "inLanguage": "id-ID",
14288  "interactionStatistic": {
14289    "@type": "InteractionCounter",
14290    "interactionType": {
14291      "@type": "WatchAction"
14292    },
14293    "userInteractionCount": 125000
14294  },
14295  "isFamilyFriendly": true,
14296  "width": 1920,
14297  "height": 1080,
14298  "encodingFormat": "video/mp4"
14299}
14300</script>
14300
14301 
14301<script type="application/ld+json">
14302 {
14303  "@context": "https://schema.org",
14304  "@type": "BreadcrumbList",
14305  "name": "HANTUSLOT",
14306  "description": "HANTUSLOT menghadirkan beragam game online modern dengan dukungan fitur berbahasa Indonesia, sehingga pengguna dapat memahami setiap menu dan fitur dengan lebih mudah serta menikmati pengalaman bermain yang praktis dan nyaman.",
14307  "itemListElement": [
14308    {
14309      "@type": "ListItem",
14310      "position": 1,
14311      "name": "Home",
14312      "item": "https://hotelverta.com/"
14313    },
14314    {
14315      "@type": "ListItem",
14316      "position": 2,
14317      "name": "HANTUSLOT",
14318      "item": "https://hotelverta.com/"
14319    },
14320    {
14321      "@type": "ListItem",
14322      "position": 3,
14323      "name": "HANTUSLOT LOGIN",
14324      "item": "https://hotelverta.com/"
14325    },
14326    {
14327      "@type": "ListItem",
14328      "position": 4,
14329      "name": "GAME HANTUSLOT",
14330      "item": "https://hotelverta.com/"
14331    },
14332    {
14333      "@type": "ListItem",
14334      "position": 5,
14335      "name": "GAME ONLINE",
14336      "item": "https://hotelverta.com/"
14337    },
14338    {
14339      "@type": "ListItem",
14340      "position": 6,
14341      "name": "GAME BAHASA INDONESIA",
14342      "item": "https://hotelverta.com/"
14343    },
14344    {
14345      "@type": "ListItem",
14346      "position": 7,
14347      "name": "REKOMENDASI GAME INOVATIF",
14348      "item": "https://hotelverta.com/"
14349    }
14350  ]
14351}
14352</script>
14352 
14353
14354    <style>
14355       .stamped-badge[data-rating="0.0"]{display: none !Important;}
14356       
14357        div[data-load-type="continue"] ul.stamped-pagination li.next a, div[data-widget-load-type="continue"] ul.stamped-pagination li.next a {
14358          border-radius: 0px;
14359      }
14360          .stamped-review-body {
14361          padding-left: 0px !important;
14362      }
14363          #product-reviews .stamped-header:after {
14364            display:none !Important;
14365          }
14366      #stamped-main-widget .stamped-container, .stamped-badge-caption,#stamped-reviews-widget {
14367      	font-family:inherit !important;
14368      }
14369    </style>
14370
14371    
14372
14373    
14373<script src="https://outerbloom.com/cdn/shop/t/138/assets/variant-sku-handler.js?v=91239063692820757781752652418" defer></script>
14373
14374    
14375    <!-- Wishlist API Configuration -->
14376    
14376<script>
14377      window.WISHLIST_API_URL = 'https://app.asmaraku.com'; // Change to production URL
14378      
14379      // Initialize Shopify object BEFORE wishlist-manager loads
14380      window.Shopify = window.Shopify || {};
14381      
14382      // Set shop domain - try multiple methods to ensure it's set
14383      const shopDomain = '';
14384      
14385      if (shopDomain && shopDomain.trim()) {
14386        window.Shopify.shop = shopDomain.trim();
14387      } else {
14388        // Fallback: try to get from shop.domain or hardcode
14389        const shopDomain2 = 'outerbloom.com';
14390        if (shopDomain2 && shopDomain2.trim()) {
14391          window.Shopify.shop = shopDomain2.trim();
14392        } else {
14393          // Manual fallback - set your shop domain here
14394          window.Shopify.shop = 'outerbloom1.myshopify.com'; // TODO: Change this to your actual shop domain
14395        }
14396      }
14397      
14398      
14399      console.log('[Wishlist Setup] No customer logged in');
14400      
14401    </script>
14401
14402    
14403    <!-- Wishlist Manager - New API Integration (load AFTER customer data) -->
14404    
14404<script src="https://outerbloom.com/cdn/shop/t/138/assets/wishlist-manager.js?v=119203892983812840831770794810"></script>
14404
14405
14406    
14406<script>
14407      function myInit(){ StampedFn.init({ apiKey: 'pubkey-hCS8DHE9QbBHhHN89WXFkuJ0Y3422D', sId: '23462' }); }
14408    </script>
14408
14409    
14409<script async onload="myInit()" type="text/javascript" src="https://cdn1.stamped.io/files/widget.min.js"></script>
14409<style>
14410  .jss59 {
14411    background-color: rgba(0, 0, 0, 0.6);
14412  }
14413  .MuiBackdrop-root {
14414    top: 0;
14415    left: 0;
14416    right: 0;
14417    bottom: 0;
14418    display: flex;
14419    z-index: -1;
14420    position: fixed;
14421    align-items: center;
14422    justify-content: center;
14423    background-color: rgba(0, 0, 0, 0.5);
14424    -webkit-tap-highlight-color: transparent;
14425  }
14426  .MuiDialog-scrollPaper {
14427    display: flex;
14428    align-items: center;
14429    justify-content: center;
14430  }
14431  .MuiDialog-container {
14432    height: 100%;
14433    outline: 0;
14434  }
14435  .MuiPaper-elevation24 {
14436    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);
14437  }
14438  .MuiDialog-paper {
14439    margin: 32px;
14440    position: relative;
14441    overflow-y: auto;
14442  }
14443  .MuiDialog-paperScrollPaper {
14444    display: flex;
14445    max-height: calc(100% - 64px);
14446    flex-direction: column;
14447  }
14448  .MuiDialog-paperWidthSm {
14449    max-width: 600px;
14450  }
14451  #location-lock-dialog {
14452    top: 20%;
14453    left: 0;
14454    right: 0;
14455    width: 30%;
14456    margin: 0px auto;
14457    display: block;
14458    padding: 30px;
14459    z-index: 99999;
14460    position: fixed;
14461    font-size: 14px;
14462    background: rgb(255, 255, 255);
14463    box-shadow: rgba(11, 11, 12, 0.2) 2px 4px 5px 0px;
14464    text-align: center;
14465    font-family: Roboto, Arial, sans-serif;
14466    line-height: 1;
14467    border-radius: 8px;
14468    -webkit-font-smoothing: subpixel-antialiased;
14469  }
14470  .MuiButtonBase-root {
14471    color: inherit;
14472    border: 0;
14473    cursor: pointer;
14474    margin: 0;
14475    display: inline-flex;
14476    outline: 0;
14477    padding: 0;
14478    position: relative;
14479    align-items: center;
14480    user-select: none;
14481    border-radius: 0;
14482    vertical-align: middle;
14483    -moz-appearance: none;
14484    justify-content: center;
14485    text-decoration: none;
14486    background-color: transparent;
14487    -webkit-appearance: none;
14488    -webkit-tap-highlight-color: transparent;
14489  }
14490  .MuiIconButton-root {
14491    flex: 0 0 auto;
14492    color: rgba(0, 0, 0, 0.54);
14493    padding: 12px;
14494    overflow: visible;
14495    font-size: 1.5rem;
14496    text-align: center;
14497    transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
14498    border-radius: 50%;
14499  }
14500  .MuiIconButton-label {
14501    width: 100%;
14502    display: flex;
14503    align-items: inherit;
14504    justify-content: inherit;
14505  }
14506  .MuiSvgIcon-root {
14507    fill: currentColor;
14508    width: 1em;
14509    height: 1em;
14510    display: inline-block;
14511    font-size: 1.5rem;
14512    transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
14513    flex-shrink: 0;
14514    user-select: none;
14515  }
14516  .MuiTouchRipple-root {
14517    top: 0;
14518    left: 0;
14519    right: 0;
14520    bottom: 0;
14521    z-index: 0;
14522    overflow: hidden;
14523    position: absolute;
14524    border-radius: inherit;
14525    pointer-events: none;
14526  }
14527  .jss36 {
14528    color: #222222;
14529    font-size: 24px;
14530    font-family: Roboto, Arial, sans-serif;
14531    font-weight: 500;
14532  }
14533  .jss37 {
14534    color: #555555;
14535    padding: 10px 0px 0px;
14536    font-size: 14px;
14537  }
14538  .MuiFormGroup-root {
14539    display: flex;
14540    flex-wrap: wrap;
14541    flex-direction: column;
14542  }
14543  .MuiFormGroup-row {
14544    flex-direction: row;
14545  }
14546  .jss63 {
14547    width: 85%;
14548    margin: 15px auto;
14549    display: flex;
14550    padding: 11px 0px 0px;
14551    justify-content: space-evenly;
14552  }
14553  .MuiFormControlLabel-root {
14554    cursor: pointer;
14555    display: inline-flex;
14556    align-items: center;
14557    margin-left: -11px;
14558    margin-right: 16px;
14559    vertical-align: middle;
14560    -webkit-tap-highlight-color: transparent;
14561  }
14562  .jss70 {
14563    margin: 0;
14564  }
14565  .MuiButtonBase-root {
14566    color: inherit;
14567    border: 0;
14568    cursor: pointer;
14569    margin: 0;
14570    display: inline-flex;
14571    outline: 0;
14572    padding: 0;
14573    position: relative;
14574    align-items: center;
14575    user-select: none;
14576    border-radius: 0;
14577    vertical-align: middle;
14578    -moz-appearance: none;
14579    justify-content: center;
14580    text-decoration: none;
14581    background-color: transparent;
14582    -webkit-appearance: none;
14583    -webkit-tap-highlight-color: transparent;
14584  }
14585  .MuiIconButton-root {
14586    flex: 0 0 auto;
14587    color: rgba(0, 0, 0, 0.54);
14588    padding: 12px;
14589    overflow: visible;
14590    font-size: 1.5rem;
14591    text-align: center;
14592    transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
14593    border-radius: 50%;
14594  }
14595  .MuiIconButton-colorSecondary {
14596    color: #f50057;
14597  }
14598  .jss71 {
14599    padding: 9px;
14600  }
14601  .MuiRadio-root {
14602    color: rgba(0, 0, 0, 0.54);
14603  }
14604  .jss64 {
14605    padding: 2px;
14606  }
14607  .MuiRadio-colorSecondary.Mui-checked {
14608    color: #f50057;
14609  }
14610  .MuiIconButton-label {
14611    width: 100%;
14612    display: flex;
14613    align-items: inherit;
14614    justify-content: inherit;
14615  }
14616  .MuiTypography-root {
14617    margin: 0;
14618  }
14619  .MuiTypography-body1 {
14620    font-size: 18px;
14621    font-family: Roboto,sans-serif;
14622    font-weight: 400;
14623    line-height: 1.5;
14624  }
14625  .location-popup_area-block__sp9Ws {
14626    display: -moz-box;
14627    display: flex;
14628    -moz-box-orient: vertical;
14629    -moz-box-direction: normal;
14630    flex-direction: column;
14631    -moz-box-pack: center;
14632    justify-content: center;
14633    position: relative;
14634    margin: 10px 10% 0;
14635  }
14636  .location-popup_pin-search-box__3l5mJ {
14637    width: 100%;
14638    display: -moz-box;
14639    display: flex;
14640    -moz-box-align: center;
14641    align-items: center;
14642  }
14643  .location-popup_place-icon-city__1XAX5, .location-popup_place-icon__jSG0Q {
14644    position: absolute;
14645    z-index: 999;
14646  }
14647  .location-popup_place-icon__jSG0Q {
14648    color: #212121;
14649    padding-left: 8px;
14650  }
14651  .location-popup_place-icon__jSG0Q svg {
14652    width: 18px;
14653    height: 18px;
14654  }
14655  .location-popup_cancel-icon__FHujU {
14656    color: #fff;
14657    right: 10px;
14658    width: 16px;
14659    cursor: pointer;
14660    height: 16px;
14661    display: none;
14662    padding: 5px;
14663    position: absolute;
14664    background: #999;
14665    text-align: center;
14666    border-radius: 50%;
14667  }
14668  .location-popup_pin-search-box__3l5mJ>div>select {
14669/*     -webkit-box-shadow: 0 0 10px #212121;
14670    box-shadow: 0 0 10px #212121; */
14671    text-transform: capitalize;
14672    border: 1px solid #212121;
14673    color: #212121;
14674    width: 100%;
14675    margin: 0;
14676    display: -moz-box;
14677    display: flex;
14678    padding: 0 30px;
14679    -webkit-animation: location-popup_focuses__1I8Gj 1.5s ease-in-out infinite;
14680    -moz-animation: location-popup_focuses__1I8Gj 1.5s ease-in-out infinite;
14681    animation: location-popup_focuses__1I8Gj 1.5s ease-in-out infinite;
14682    font-size: 16px;
14683    border-radius: 4px;
14684    height: 44px;
14685    moz-animation: location-popup_focuses__1I8Gj ease-in-out 1.5s infinite;
14686    webkit-animation: location-popup_focuses__1I8Gj ease-in-out 1.5s infinite;
14687  }
14688  .MuiButtonBase-root {
14689    color: inherit;
14690    border: 0;
14691    cursor: pointer;
14692    margin: 0;
14693    display: inline-flex;
14694    outline: 0;
14695    padding: 0;
14696    position: relative;
14697    align-items: center;
14698    user-select: none;
14699    border-radius: 0;
14700    vertical-align: middle;
14701    -moz-appearance: none;
14702    justify-content: center;
14703    text-decoration: none;
14704    background-color: transparent;
14705    -webkit-appearance: none;
14706    -webkit-tap-highlight-color: transparent;
14707  }
14708  .MuiButton-root {
14709    color: rgba(0, 0, 0, 0.87);
14710    padding: 6px 16px;
14711    font-size: 0.875rem;
14712    min-width: 64px;
14713    box-sizing: border-box;
14714    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;
14715    font-family: Roboto,sans-serif;
14716    font-weight: 500;
14717    line-height: 1.75;
14718    border-radius: 4px;
14719    text-transform: uppercase;
14720  }
14721  .MuiButton-contained {
14722    color: rgba(0, 0, 0, 0.87);
14723    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);
14724    background-color: #e0e0e0;
14725  }
14726  .MuiButtonBase-root.Mui-disabled {
14727    cursor: default;
14728    pointer-events: none;
14729  }
14730  .MuiButton-label {
14731    width: 100%;
14732    display: inherit;
14733    align-items: inherit;
14734    justify-content: inherit;
14735  }
14736  .cartButton_login_content__2j1f7 {
14737    display: -moz-box;
14738    display: flex;
14739    text-align: center;
14740    z-index: 9;
14741    font-size: 18px;
14742    font-weight: 500;
14743    color: #fff;
14744  }
14745  
14746  .jss35 {
14747    top: 5px;
14748    right: 5px;
14749    padding: 4px;
14750    position: absolute;
14751    border-radius: 50%;
14752  }
14753  .jss67 {
14754    cursor: pointer;
14755    font-size: 15px;
14756    line-height: 1.3;
14757    padding-left: 5px;
14758  }
14759  .jss69 {
14760    color: #222222;
14761  }
14762  .jss80 {
14763    color: #fff;
14764    width: 100%;
14765    height: 52px;
14766    padding: 11px 16px;
14767    font-size: 18px;
14768    min-width: 88px;
14769    min-height: 36px;
14770    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;
14771    font-weight: 500;
14772    line-weight: 1em;
14773    border-radius: 4px;
14774    text-transform: uppercase;
14775    background-color: #E87325;
14776  }
14777  @media (min-width: 991px){
14778    .cartButton_login_content__2j1f7 {
14779        font-weight: 500;
14780    }
14781  }
14782
14783  @media (max-width: 992px) {
14784    #location-lock-dialog {
14785      width: 100%;
14786      top: auto;
14787      bottom: 0;
14788      padding-left: 0;
14789      padding-right: 0;
14790    }
14791    .MuiFormGroup-row {
14792      display: block
14793    }
14794    .MuiIconButton-label input {
14795      margin: 0;
14796    }
14797  }
14798</style>
14799<div role="presentation" class="MuiDialog-root jss34" style="display: none;position: fixed; z-index: 9999; inset: 0px;">
14800  <div class="MuiBackdrop-root" aria-hidden="true" style="opacity: 1; transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;"></div>
14801  <div tabindex="0" data-test="sentinelStart"></div>
14802  <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;">
14803    <div class="MuiPaper-root MuiDialog-paper MuiDialog-paperScrollPaper MuiDialog-paperWidthSm MuiPaper-elevation24 MuiPaper-rounded" role="dialog">
14804      <div class="jss31 undefined" id="location-lock-dialog">
14805        <button id="close-popup-delivery" class="MuiButtonBase-root MuiIconButton-root jss35" tabindex="0" type="button" aria-label="close">
14806          <span class="MuiIconButton-label">
14807            <svg class="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" aria-hidden="true">
14808              <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>
14809            </svg>
14810          </span>
14811          <span class="MuiTouchRipple-root"></span>
14812        </button>
14813        <div>
14814          <div class="jss36">Select Delivery Location</div>
14815          <div class="jss37">Select a delivery location to see product availability</div>
14816        </div>
14817        <div class="MuiFormGroup-root jss63 MuiFormGroup-row" role="radiogroup">
14818          <label for="jabodetabek" class="MuiFormControlLabel-root jss45">
14819            <span class="MuiButtonBase-root MuiIconButton-root jss46 MuiRadio-root MuiRadio-colorSecondary jss39 jss47 Mui-checked MuiIconButton-colorSecondary" aria-disabled="false">
14820              <span class="MuiIconButton-label">
14821                <input id="jabodetabek" class="jss49" type="radio" value="Jabodetabek" checked="" name="location">
14822                <span class="jss41"></span>
14823              </span>
14824              <span class="MuiTouchRipple-root"></span>
14825            </span>
14826            <span class="MuiTypography-root MuiFormControlLabel-label MuiTypography-body1">
14827              <span class="jss67 jss69">Jabodetabek</span>
14828            </span>
14829          </label>
14830          <label for="non-jabodetabek" class="MuiFormControlLabel-root jss45">
14831            <span class="MuiButtonBase-root MuiIconButton-root jss46 MuiRadio-root MuiRadio-colorSecondary jss39 MuiIconButton-colorSecondary" aria-disabled="false">
14832              <span class="MuiIconButton-label">
14833                <input id="non-jabodetabek" class="jss49" type="radio" value="Outside Jabodetabek" name="location">
14834                <span class="jss40"></span>
14835              </span>
14836              <span class="MuiTouchRipple-root"></span>
14837            </span>
14838            <span class="MuiTypography-root MuiFormControlLabel-label MuiTypography-body1">
14839              <span class="jss67 jss68">Outside Jabodetabek</span>
14840            </span>
14841          </label>
14842        </div>
14843        <div>
14844          <div class="MuiGrid-root location-popup_area-block__sp9Ws">
14845            <div class="MuiGrid-root location-popup_pin-search-box__3l5mJ false">
14846              <div class="MuiGrid-root location-popup_place-icon__jSG0Q">
14847                <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>
14848              </div>
14849              <div class="MuiGrid-root location-popup_cancel-icon__FHujU false">
14850                <i class="material-icons location-popup_clear-pin__s1dRc">close</i>
14851              </div>
14852              <div style="width: 100%;">
14853                <select id="choose-location" class="form-control">
14854                  <option value="">Choose Location</option>
14855                  <option value="jakarta">Jakarta</option>
14856                  <option value="bogor">Bogor</option>
14857                  <option value="depok">Depok</option>
14858                  <option value="tangerang">Tangerang</option>
14859                  <option value="bekasi">Bekasi</option>
14860                </select>
14861              </div>
14862            </div>
14863          </div>
14864        </div>
14865        <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="">
14866          <span class="MuiButton-label">
14867            <span class=""></span>
14868            <span id="location-lock-continue-btn" class="cartButton_login_content__2j1f7" style="font-weight: 500;" data-content="">Continue Shopping</span>
14869          </span>
14870        </button>
14871      </div>
14872    </div>
14873  </div>
14874  <div tabindex="0" data-test="sentinelEnd"></div>
14875</div>
14876
14877<script>
14878  const jabodetabek = [
14879    {
14880      "code": "jakarta",
14881      "city": "jakarta",
14882      "zip": []
14883    },
14884    {
14885      "code": "bogor",
14886      "city": "bogor",
14887      "zip": []
14888    },
14889    {
14890      "code": "depok",
14891      "city": "depok",
14892      "zip": []
14893    },
14894    {
14895      "code": "tangerang",
14896      "city": "tangerang",
14897      "zip": []
14898    },
14899    {
14900      "code": "bekasi",
14901      "city": "bekasi",
14902      "zip": []
14903    }
14904  ]
14905  let cityNonJabodetabek = [
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    
15968    
15969    
15970    
15971    
15972    
15973    
15974    
15975    
15976    
15977    
15978    
15979    
15980    
15981    
15982    
15983    
15984    
15985    
15986    
15987    
15988    
15989    
15990    
15991    
15992    
15993    
15994    
15995    
15996    
15997    
15998    
15999    
16000    
16001    
16002    
16003    
16004    
16005    
16006    
16007    
16008    
16009    
16010    
16011    
16012    
16013    
16014    
16015    
16016    
16017    
16018    
16019    
16020    
16021    
16022    
16023    
16024    
16025    
16026    
16027    
16028    
16029    
16030    
16031    
16032    
16033    
16034    
16035    
16036    
16037    
16038    
16039    
16040    
16041    
16042    
16043    
16044    
16045    
16046    
16047    
16048    
16049    
16050    
16051    
16052    
16053    
16054    
16055    
16056    
16057    
16058    
16059    
16060    
16061    
16062    
16063    
16064    
16065    
16066    
16067    
16068    
16069    
16070    
16071    
16072    
16073    
16074    
16075    "pengiriman_aceh",
16076    
16077    
16078    
16079    
16080    
16081    "pengiriman_ambon",
16082    
16083    
16084    
16085    
16086    
16087    "pengiriman_atambua",
16088    
16089    
16090    
16091    
16092    
16093    "pengiriman_badung",
16094    
16095    
16096    
16097    
16098    
16099    "pengiriman_bali",
16100    
16101    
16102    
16103    
16104    
16105    "pengiriman_balikpapan",
16106    
16107    
16108    
16109    
16110    
16111    "pengiriman_bandar lampung",
16112    
16113    
16114    
16115    
16116    
16117    "pengiriman_bandung",
16118    
16119    
16120    
16121    
16122    
16123    "pengiriman_bandung barat",
16124    
16125    
16126    
16127    
16128    
16129    "pengiriman_banjarmasin",
16130    
16131    
16132    
16133    
16134    
16135    "pengiriman_banyumas",
16136    
16137    
16138    
16139    
16140    
16141    "pengiriman_banyuwangi",
16142    
16143    
16144    
16145    
16146    
16147    "pengiriman_batam",
16148    
16149    
16150    
16151    
16152    
16153    
16154    
16155    
16156    
16157    "pengiriman_biak",
16158    
16159    
16160    
16161    
16162    
16163    "pengiriman_binjai",
16164    
16165    
16166    
16167    
16168    
16169    "pengiriman_blitar",
16170    
16171    
16172    
16173    
16174    
16175    "pengiriman_blora",
16176    
16177    
16178    
16179    
16180    
16181    
16182    
16183    
16184    
16185    "pengiriman_bojonegoro",
16186    
16187    
16188    
16189    
16190    
16191    "pengiriman_boyolali",
16192    
16193    
16194    
16195    
16196    
16197    "pengiriman_bukittinggi",
16198    
16199    
16200    
16201    
16202    
16203    "pengiriman_buleleng",
16204    
16205    
16206    
16207    
16208    
16209    "pengiriman_ciamis",
16210    
16211    
16212    
16213    
16214    
16215    "pengiriman_cianjur",
16216    
16217    
16218    
16219    
16220    
16221    "pengiriman_cibinong",
16222    
16223    
16224    
16225    
16226    
16227    "pengiriman_cikarang",
16228    
16229    
16230    
16231    
16232    
16233    "pengiriman_cikupa",
16234    
16235    
16236    
16237    
16238    
16239    "pengiriman_cilacap",
16240    
16241    
16242    
16243    
16244    
16245    "pengiriman_cileunyi",
16246    
16247    
16248    
16249    
16250    
16251    "pengiriman_cimahi",
16252    
16253    
16254    
16255    
16256    
16257    "pengiriman_cirebon",
16258    
16259    
16260    
16261    
16262    
16263    "pengiriman_ciwidey",
16264    
16265    
16266    
16267    
16268    
16269    "pengiriman_deli serdang",
16270    
16271    
16272    
16273    
16274    
16275    "pengiriman_demak",
16276    
16277    
16278    
16279    
16280    
16281    "pengiriman_denpasar",
16282    
16283    
16284    
16285    
16286    
16287    
16288    
16289    
16290    
16291    "pengiriman_garut",
16292    
16293    
16294    
16295    
16296    
16297    "pengiriman_gianyar",
16298    
16299    
16300    
16301    
16302    
16303    "pengiriman_gresik",
16304    
16305    
16306    
16307    
16308    
16309    "pengiriman_gunung kidul",
16310    
16311    
16312    
16313    
16314    
16315    
16316    
16317    
16318    
16319    "pengiriman_jambi",
16320    
16321    
16322    
16323    
16324    
16325    "pengiriman_jayapura",
16326    
16327    
16328    
16329    
16330    
16331    "pengiriman_jember",
16332    
16333    
16334    
16335    
16336    
16337    "pengiriman_jepara",
16338    
16339    
16340    
16341    
16342    
16343    "pengiriman_jombang",
16344    
16345    
16346    
16347    
16348    
16349    "pengiriman_karanganyar",
16350    
16351    
16352    
16353    
16354    
16355    "pengiriman_karawang",
16356    
16357    
16358    
16359    
16360    
16361    "pengiriman_karo",
16362    
16363    
16364    
16365    
16366    
16367    "pengiriman_kebumen",
16368    
16369    
16370    
16371    
16372    
16373    "pengiriman_kediri",
16374    
16375    
16376    
16377    
16378    
16379    "pengiriman_keerom",
16380    
16381    
16382    
16383    
16384    
16385    "pengiriman_kendal",
16386    
16387    
16388    
16389    
16390    
16391    "pengiriman_klaten",
16392    
16393    
16394    
16395    
16396    
16397    
16398    
16399    
16400    
16401    "pengiriman_kudus",
16402    
16403    
16404    
16405    
16406    
16407    "pengiriman_kupang",
16408    
16409    
16410    
16411    
16412    
16413    "pengiriman_lainnya",
16414    
16415    
16416    
16417    
16418    
16419    "pengiriman_lamongan",
16420    
16421    
16422    
16423    
16424    
16425    "pengiriman_lampung",
16426    
16427    
16428    
16429    
16430    
16431    "pengiriman_lampung barat",
16432    
16433    
16434    
16435    
16436    
16437    "pengiriman_lembang",
16438    
16439    
16440    
16441    
16442    
16443    "pengiriman_lombok",
16444    
16445    
16446    
16447    
16448    
16449    "pengiriman_lumajang",
16450    
16451    
16452    
16453    
16454    
16455    "pengiriman_madiun",
16456    
16457    
16458    
16459    
16460    
16461    "pengiriman_magelang",
16462    
16463    
16464    
16465    
16466    
16467    "pengiriman_majalengka",
16468    
16469    
16470    
16471    
16472    
16473    "pengiriman_makassar",
16474    
16475    
16476    
16477    
16478    
16479    "pengiriman_malang",
16480    
16481    
16482    
16483    
16484    
16485    "pengiriman_manado",
16486    
16487    
16488    
16489    
16490    
16491    "pengiriman_medan",
16492    
16493    
16494    
16495    
16496    
16497    "pengiriman_mengwi",
16498    
16499    
16500    
16501    
16502    
16503    "pengiriman_mojokerto",
16504    
16505    
16506    
16507    
16508    
16509    "pengiriman_nganjuk",
16510    
16511    
16512    
16513    
16514    
16515    "pengiriman_ngawi",
16516    
16517    
16518    
16519    
16520    
16521    "pengiriman_padang",
16522    
16523    
16524    
16525    
16526    
16527    "pengiriman_palembang",
16528    
16529    
16530    
16531    
16532    
16533    "pengiriman_palu",
16534    
16535    
16536    
16537    
16538    
16539    "pengiriman_pasuruan",
16540    
16541    
16542    
16543    
16544    
16545    "pengiriman_pati",
16546    
16547    
16548    
16549    
16550    
16551    "pengiriman_pekalongan",
16552    
16553    
16554    
16555    
16556    
16557    "pengiriman_pekanbaru",
16558    
16559    
16560    
16561    
16562    
16563    "pengiriman_pemalang",
16564    
16565    
16566    
16567    
16568    
16569    "pengiriman_ponorogo",
16570    
16571    
16572    
16573    
16574    
16575    "pengiriman_pontianak",
16576    
16577    
16578    
16579    
16580    
16581    "pengiriman_probolinggo",
16582    
16583    
16584    
16585    
16586    
16587    "pengiriman_purbalingga",
16588    
16589    
16590    
16591    
16592    
16593    "pengiriman_purwakarta",
16594    
16595    
16596    
16597    
16598    
16599    "pengiriman_purwokerto",
16600    
16601    
16602    
16603    
16604    
16605    "pengiriman_rembang",
16606    
16607    
16608    
16609    
16610    
16611    "pengiriman_riau",
16612    
16613    
16614    
16615    
16616    
16617    "pengiriman_salatiga",
16618    
16619    
16620    
16621    
16622    
16623    "pengiriman_samarinda",
16624    
16625    
16626    
16627    
16628    
16629    "pengiriman_semarang",
16630    
16631    
16632    
16633    
16634    
16635    "pengiriman_sentani",
16636    
16637    
16638    
16639    
16640    
16641    "pengiriman_serang",
16642    
16643    
16644    
16645    
16646    
16647    "pengiriman_sidoarjo",
16648    
16649    
16650    
16651    
16652    
16653    "pengiriman_singkawang",
16654    
16655    
16656    
16657    
16658    
16659    "pengiriman_sragen",
16660    
16661    
16662    
16663    
16664    
16665    "pengiriman_subang",
16666    
16667    
16668    
16669    
16670    
16671    "pengiriman_sukabumi",
16672    
16673    
16674    
16675    
16676    
16677    "pengiriman_sumbawa",
16678    
16679    
16680    
16681    
16682    
16683    "pengiriman_surabaya",
16684    
16685    
16686    
16687    
16688    
16689    "pengiriman_surakarta solo",
16690    
16691    
16692    
16693    
16694    
16695    
16696    
16697    
16698    
16699    "pengiriman_tasikmalaya",
16700    
16701    
16702    
16703    
16704    
16705    "pengiriman_tegal",
16706    
16707    
16708    
16709    
16710    
16711    "pengiriman_timika",
16712    
16713    
16714    
16715    
16716    
16717    "pengiriman_wamena",
16718    
16719    
16720    
16721    
16722    
16723    "pengiriman_wiyung",
16724    
16725    
16726    
16727    
16728    
16729    "pengiriman_wonokromo",
16730    
16731    
16732    
16733    
16734    
16735    "pengiriman_yogyakarta",
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    
17242    
17243    
17244    
17245    
17246    
17247    
17248    
17249    
17250    
17251    
17252    
17253    
17254    
17255    
17256    
17257    
17258    
17259    
17260    
17261    
17262    
17263    
17264    
17265    
17266    
17267    
17268    
17269    
17270    
17271    
17272    
17273    
17274    
17275    
17276    
17277    
17278    
17279    
17280    
17281    
17282    
17283    
17284    
17285    
17286    
17287    
17288    
17289    
17290    
17291    
17292    
17293    
17294    
17295    
17296    
17297    
17298    
17299    
17300    
17301    
17302    
17303    
17304    
17305    
17306    
17307    
17308    
17309    
17310    
17311    
17312    
17313    
17314    
17315    
17316    
17317    
17318    
17319    
17320    
17321    
17322    
17323    
17324    
17325    
17326    
17327    
17328    
17329    
17330    
17331    
17332    
17333    
17334    
17335    
17336    
17337    
17338    
17339    
17340    
17341    
17342    
17343    
17344    
17345    
17346    
17347  ]
17348  
17349  let non_jabodetabek = []
17350  for(var i=0;i<cityNonJabodetabek.length;i++) {
17351    const obj = {
17352      "code": cityNonJabodetabek[i].toLowerCase().replace('pengiriman_', '').replace(' ','-'),
17353      "city": cityNonJabodetabek[i].replace('pengiriman_', '').replace(' ','-'),
17354      "zip": []
17355    }
17356    non_jabodetabek.push(obj)
17357  }
17358  let current_location = getCookie("location_delivery")
17359  $("[name=location]").change(function(){
17360    let v = $(this).val()
17361    let option = []
17362    if(v == 'Jabodetabek') {
17363      for(var i=0;i<jabodetabek.length;i++) {
17364        const jabodetabekHtml = `<option value=${jabodetabek[i].city}>${jabodetabek[i].city}</option>`
17365        option.push(jabodetabekHtml)
17366      }
17367      $("#choose-location").html(`<option value="">Choose Location</option>${option}`)
17368    } else {
17369      for(var i=0;i<non_jabodetabek.length;i++) {
17370        const nonjabodetabekHtml = `<option value=${non_jabodetabek[i].city}>${non_jabodetabek[i].city}</option>`
17371        option.push(nonjabodetabekHtml)
17372      }
17373      $("#choose-location").html(`<option value="">Choose Location</option>${option}`)
17374    }
17375  })
17376
17377  $("#location-lock-submit").click(function(e){
17378    let select = $("#choose-location")
17379    let value = select.val().toLowerCase()
17380    console.log(value)
17381    if(select.val() == "") {
17382      return alert("Choose Your Location")
17383      e.preventDefault()
17384    }
17385    setCookie("location_delivery",value,1000000);
17386    
17387    location.reload();
17388    
17389  })
17390
17391  $("#close-popup-delivery").click(function(){
17392    $(".MuiDialog-root").hide()
17393    if(!current_location){
17394      setCookie("location_delivery","jakarta",1000000);
17395      $("#loc_delivery_city, #loc_delivery_city_mobile").text("Jakarta")
17396    }
17397  })
17398  $("#loc_delivery, #loc_delivery_mobile").click(function(){
17399    $(".MuiDialog-root").show()
17400  })
17401
17402  
17403  if(!current_location){
17404    
17405  } else {
17406    $("#loc_delivery_city, #loc_delivery_city_mobile").text(current_location)
17407    $("#choose-location").each(function(){
17408      if(current_location == 'jakarta' || current_location == 'depok' || current_location == 'bogor' || current_location == 'tangerang' || current_location == 'bekasi'){
17409        $("#jabodetabek").trigger("click")
17410      } else {
17411        $("#non-jabodetabek").trigger("click")
17412      }
17413      $("#choose-location").find("option[value="+current_location+"]").attr("selected", "selected")
17414    })
17415  }
17416
17417  // 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'){
17418  //   $("#timeMalam").attr("disabled", false)
17419  // } else {
17420  //   $("#timeMalam").attr("disabled", true)
17421  // }
17422
17423  if(current_location && current_location != 'jakarta') {
17424    $("#self-pickup").attr("disabled", true)
17425  }
17426
17427  function setCookie(name,value,days) {
17428    var expires = "";
17429    if (days) {
17430      var date = new Date();
17431      date.setTime(date.getTime() + (days*24*60*60*1000));
17432      expires = "; expires=" + date.toUTCString();
17433    }
17434    document.cookie = name + "=" + (value || "")  + expires + "; path=/";
17435  }
17436  function getCookie(name) {
17437    var nameEQ = name + "=";
17438    var ca = document.cookie.split(';');
17439    for(var i=0;i < ca.length;i++) {
17440      var c = ca[i];
17441      while (c.charAt(0)==' ') c = c.substring(1,c.length);
17442      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
17443    }
17444    return null;
17445  }
17446</script>
17446
17447<!-- One Tap -->
17448    
17448<script>
17449      console.log("Outerbloom...");
17450    </script>
17450
17451
17452    <!-- Initialize User Data (IP, Browser, Device) -->
17453    
17454  <div id="shopify-block-ATzRpVTBPU3k1R2pnW__286197278318599166" class="shopify-block shopify-app-block">
17455
17456
17457<div style="position: fixed; bottom: 0; right: 0"></div>
17458
17459<script>
17460console.info("bitlogin extension version: v2.5.7");
17461
17462const googleScript = document.createElement("script");
17463googleScript.setAttribute("src", "https://accounts.google.com/gsi/client");
17464document.head.append(googleScript);
17465
17466const bitLoginBaseUrl = "https://api.bitbybit.studio";
17467const apiUrl = `${bitLoginBaseUrl}/bitlogin/api`;
17468
17469const 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"}};
17470const 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
17470n1.oa2-cs.v1.1cb5f9085a202341f60daf5a7be16c570ccc0b4bd5908b3afd080f34e9b8935d","appleTeamId":null,"applePrivateKey":null,"usePersonalOauth":false,"position":null}];
17471
17472const urlSearchParams = new URLSearchParams(window.location.search);
17473const checkoutUrl = urlSearchParams.get("checkout_url");
17474const redirectUrl = checkoutUrl || appearance.redirectLink;
17475
17476let locationCacheSet = false;
17477let errorLocation = false;
17478let oneTapSet = false;
17479
17480let bitloginCache = {
17481  appearance: appearance,
17482  config: config
17483};
17484
17485let isInitializing = false;
17486const queue = [];
17487
17488// Add CSS for the popup
17489const popupStyles = document.createElement('style');
17490popupStyles.textContent = `
17491  /* Styles for login popup */
17492  .bitlogin-popup-overlay {
17493    position: fixed;
17494    top: 0;
17495    left: 0;
17496    width: 100%;
17497    height: 100%;
17498    background: rgba(0, 0, 0, 0.45);
17499    backdrop-filter: blur(4px);
17500    display: flex;
17501    align-items: center;
17502    justify-content: center;
17503    opacity: 0;
17504    transition: opacity 0.3s ease-in-out;
17505    z-index: 999999;
17506  }
17507  
17508  .bitlogin-popup-overlay.visible {
17509    opacity: 1;
17510  }
17511  
17512  .bitlogin-popup {
17513    background: #FFFFFF;
17514    box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
17515    border-radius: 16px;
17516    width: 100%;
17517    max-width: 560px;
17518    display: flex;
17519    overflow: hidden;
17520    position: relative;
17521    opacity: 0;
17522    transform: translateY(20px) scale(0.98);
17523    transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
17524  }
17525  
17526  .bitlogin-popup.visible {
17527    opacity: 1;
17528    transform: translateY(0) scale(1);
17529  }
17530  
17531  .bitlogin-popup-with-image {
17532    max-width: 640px;
17533  }
17534  
17535  .bitlogin-popup-right-image {
17536    flex-direction: row-reverse;
17537  }
17538  
17539  .bitlogin-popup-image {
17540    object-fit: cover;
17541    width: 50%;
17542    height: auto;
17543  }
17544  
17545  .bitlogin-popup-content {
17546    padding: 32px;
17547    position: relative;
17548    width: 50%;
17549  }
17550  
17551  .bitlogin-popup-close {
17552    position: absolute;
17553    top: 16px;
17554    right: 16px;
17555    background: white;
17556    border: none;
17557    width: 30px;
17558    height: 30px;
17559    display: flex;
17560    align-items: center;
17561    justify-content: center;
17562    cursor: pointer;
17563    transition: background-color 0.2s;
17564    color: inherit;
17565    padding: 0;
17566  }
17567  
17568  .bitlogin-popup-close:hover {
17569    background-color: #e5e5e5;
17570  }
17571  
17572  .bitlogin-popup-buttons {
17573    display: flex;
17574    flex-direction: column;
17575    gap: 12px;
17576    margin-top: 24px;
17577  }
17578  
17579  /* Button styles within popup - override width for popup buttons */
17580  .bitlogin-popup-buttons #google-login,
17581  .bitlogin-popup-buttons #facebook-login,
17582  .bitlogin-popup-buttons #apple-login,
17583  .bitlogin-popup-buttons #whatsapp-login,
17584  .bitlogin-popup-buttons #microsoft-login,
17585  .bitlogin-popup-buttons #twitter-login,
17586  .bitlogin-popup-buttons #amazon-login,
17587  .bitlogin-popup-buttons #instagram-login,
17588  .bitlogin-popup-buttons #magic-link-login,
17589  .bitlogin-popup-buttons #mobile-app-login {
17590    width: 100% !important;
17591    font-family: inherit !important;
17592  }
17593  
17594  .bitlogin-popup-footer {
17595    margin-top: 32px;
17596    text-align: center;
17597    font-size: 14px;
17598    opacity: 0.6;
17599  }
17600  
17601  /* Modern Typography */
17602  .bitlogin-popup h2 {
17603    margin-top: 12px;
17604    font-size: 21px !important;
17605    line-height: 1.2 !important;
17606    font-weight: 700 !important;
17607    letter-spacing: -0.02em !important;
17608    margin-bottom: 16px !important;
17609  }
17610  
17611  .bitlogin-popup-header {
17612    position: relative;
17613    margin-bottom: 24px;
17614  }
17615  
17616  /* Modern gradient accent */
17617  .bitlogin-popup-content > div {
17618    font-size: 16px !important;
17619    line-height: 1.2 !important;
17620    opacity: 0.85 !important;
17621  }
17622  
17623  /* Enhanced button interactions */
17624  .bitlogin-popup-buttons button {
17625    position: relative;
17626    overflow: hidden;
17627  }
17628  
17629  @keyframes ripple {
17630    0% {
17631      transform: scale(0, 0);
17632      opacity: 0.5;
17633    }
17634    100% {
17635      transform: scale(100, 100);
17636      opacity: 0;
17637    }
17638  }
17639  
17640  /* Responsive adjustments */
17641  @media (max-width: 640px) {
17642    .bitlogin-popup {
17643      max-width: 90%;
17644      width: 90%;
17645      margin: 0 16px;
17646    }
17647    
17648    .bitlogin-popup-with-image {
17649      flex-direction: column !important;
17650    }
17651    
17652    .bitlogin-popup-image {
17653      width: 100%;
17654      height: 180px;
17655    }
17656    
17657    .bitlogin-popup-content {
17658      padding: 24px;
17659    }
17660    
17661    .bitlogin-popup h2 {
17662      font-size: 24px !important;
17663    }
17664  }
17665`;
17666
17667document.head.appendChild(popupStyles);
17668
17669// Add fonts link for different font options
17670const fontsLink = document.createElement('link');
17671fontsLink.rel = 'stylesheet';
17672fontsLink.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';
17673document.head.appendChild(fontsLink);
17674
17675(async () => {
17676  try {
17677    let host = window.location.host;
17678    if (host === "admin.shopify.com") {
17679      host = `${window.location.pathname.split("/")[2]}.myshopify.com`;
17680    }
17681
17682    const urlSearchParams = new URLSearchParams(window.location.search);
17683    const checkoutUrl = urlSearchParams.get("checkout_url");
17684
17685    async function init({ inputRef, index }) {
17686      if (isInitializing) {
17687        queue.push(() => init({ inputRef, index }));
17688        return;
17689      }
17690
17691      isInitializing = true;
17692
17693      try {
17694        let bitLoginSectionRoot = document.querySelector(
17695          `.bitlogin-root[data-index="${index}"]`
17696        );
17697
17698        const formRef = inputRef?.closest(
17699          "form:not([action='/account/recover'])"
17700        );
17701
17702        if (formRef && !bitLoginSectionRoot) {
17703          await getLocation();
17704
17705          bitLoginSectionRoot = document.createElement(`div`);
17706
17707          bitLoginSectionRoot.setAttribute("class", "bitlogin-root");
17708          bitLoginSectionRoot.setAttribute("data-index", `${index}`);
17709
17710          updateAppearance({
17711            formRef,
17712            rootRef: bitLoginSectionRoot,
17713            host,
17714          });
17715        }
17716      } catch (err) {
17717        console.error(`error while initiating bitlogin extensions`, err);
17718      } finally {
17719        // Release the lock
17720        isInitializing = false;
17721
17722        // Check if there are pending items in the queue
17723        if (queue.length > 0) {
17724          // Process the next function in the queue
17725          const nextFunction = queue.shift();
17726          nextFunction();
17727        }
17728      }
17729    }
17730
17731    function initAll() {
17732      return new Promise((resolve, reject) => {
17733        setTimeout(async () => {
17734          const inputRefs = document.querySelectorAll(
17735            'input[name="customer[email]"]'
17736          );
17737
17738          for (let i = 0; i < inputRefs.length; i++) {
17739            const currentInputRef = inputRefs[i];
17740            const isVisible = isElementVisible(currentInputRef);
17741
17742            if (isVisible) {
17743              await init({ inputRef: currentInputRef, index: i });
17744            }
17745          }
17746
17747          resolve("ok");
17748        }, 100);
17749      });
17750    }
17751
17752    const observer = new MutationObserver((mutationsList) => {
17753      for (let mutation of mutationsList) {
17754        initAll();
17755      }
17756    });
17757
17758    observer.observe(document.body, {
17759      childList: true,
17760      subtree: true,
17761      attributes: true,
17762    });
17763
17764    initAll();
17765
17766    if (appearance.googleOneTap) {
17767      setupOneTap({ host, checkoutUrl });
17768    }
17769
17770    // Initialize popup
17771    await initPopup(host);
17772  } catch (error) {
17773    console.error("Error initializing BitLogin:", error);
17774  }
17775})();
17776
17777async function initPopup(host) {
17778  // Check if user is already logged in using Liquid checks properly
17779  const isLoggedIn = false || 
17780                    document.querySelector('.customer-logout-link') || 
17781                    document.querySelector('.account-link') || 
17782                    window.location.pathname.includes('/account');
17783  
17784  if (isLoggedIn) {
17785    return; // User is logged in, don't show popup
17786  }
17787
17788  try {
17789    // Fetch the popup configuration
17790    const popupConfig = await fetch(`${apiUrl}/appearance/popup/domain/${host}`)
17791      .then(res => res.json())
17792      .catch(err => {
17793        console.error('Error fetching popup configuration:', err);
17794        return null;
17795      });
17796
17797    if (!popupConfig || !popupConfig.enabled) {
17798      return; // Don't show popup if disabled or config not found
17799    }
17800
17801    // Create popup after 10 seconds
17802    setTimeout(() => {
17803      // Check if user is still on the page and still not logged in
17804      if (document.visibilityState === 'visible') {
17805        // Additional check in case user logged in during the 10 second wait
17806        const currentlyLoggedIn = false || 
17807                              document.querySelector('.customer-logout-link') || 
17808                              document.querySelector('.account-link');
17809        
17810        if (!currentlyLoggedIn) {
17811          createLoginPopup(popupConfig, host);
17812        }
17813      }
17814    }, 10000);
17815  } catch (error) {
17816    console.error('Error initializing popup:', error);
17817  }
17818}
17819
17820function createLoginPopup(popupConfig, host) {
17821  // Font mapping
17822  const fontFamilyMap = {
17823    system_fonts: 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
17824    montserrat: 'Montserrat, sans-serif',
17825    roboto: 'Roboto, sans-serif',
17826    open_sans: 'Open Sans, sans-serif',
17827    noto_sans: 'Noto Sans, sans-serif',
17828    lato: 'Lato, sans-serif',
17829    poppins: 'Poppins, sans-serif',
17830    quicksand: 'Quicksand, sans-serif',
17831    raleway: 'Raleway, sans-serif',
17832    pt_sans: 'PT Sans, sans-serif',
17833    oswald: 'Oswald, sans-serif',
17834  };
17835
17836  // Create overlay
17837  const overlay = document.createElement('div');
17838  overlay.className = 'bitlogin-popup-overlay';
17839  
17840  // Create popup container with appropriate styling
17841  const popup = document.createElement('div');
17842  popup.className = 'bitlogin-popup';
17843
17844  if (popupConfig.layout === 'default') {
17845    popup.style.maxWidth = '400px';
17846  }
17847  
17848  // Function to close the popup
17849  const closePopup = () => {
17850    overlay.classList.remove('visible');
17851    popup.classList.remove('visible');
17852    setTimeout(() => {
17853      if (document.body.contains(overlay)) {
17854        document.body.removeChild(overlay);
17855      }
17856    }, 300);
17857  };
17858  
17859  // Add click handler to the overlay to close when clicking outside
17860  overlay.addEventListener('click', (event) => {
17861    // Close only if clicking directly on the overlay, not its children
17862    if (event.target === overlay) {
17863      closePopup();
17864    }
17865  });
17866  
17867  // Add escape key handler to close popup
17868  document.addEventListener('keydown', (event) => {
17869    if (event.key === 'Escape' && document.body.contains(overlay)) {
17870      closePopup();
17871    }
17872  });
17873
17874  // Create layout with image if specified
17875  let contentWrapper;
17876  if (popupConfig.layout !== 'default' && popupConfig.popupImage) {
17877    popup.classList.add('bitlogin-popup-with-image');
17878    
17879    if (popupConfig.layout === 'right') {
17880      popup.classList.add('bitlogin-popup-right-image');
17881    }
17882    
17883    // Add image
17884    const image = document.createElement('img');
17885    image.className = 'bitlogin-popup-image';
17886    image.src = popupConfig.popupImage;
17887    image.alt = 'Login';
17888    image.loading = 'lazy';
17889    popup.appendChild(image);
17890    
17891    // Create content container
17892    contentWrapper = document.createElement('div');
17893    contentWrapper.className = 'bitlogin-popup-content';
17894
17895    if (popupConfig.layout === 'right') {
17896      const closeButton = document.createElement('button');
17897      closeButton.className = 'bitlogin-popup-close';
17898      closeButton.innerHTML = `<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
17899        <path d="M13 1L1 13M1 1L13 13" stroke="${popupConfig.fontColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
17900      </svg>`;
17901      closeButton.setAttribute('aria-label', 'Close');
17902      closeButton.onclick = closePopup;
17903  
17904      popup.appendChild(closeButton);
17905    }
17906  } else {
17907    contentWrapper = document.createElement('div');
17908    contentWrapper.className = 'bitlogin-popup-content';
17909    contentWrapper.style.width = '100%';
17910  }
17911
17912  // Set background style
17913  if (popupConfig.backgroundTheme === 'gradient') {
17914    contentWrapper.style.background = `linear-gradient(135deg, ${popupConfig.backgroundPopupColor}, ${popupConfig.gradientColor})`;
17915  } else {
17916    contentWrapper.style.backgroundColor = popupConfig.backgroundPopupColor;
17917  }
17918
17919  // Apply font family
17920  contentWrapper.style.setProperty('font-family', fontFamilyMap[popupConfig.font] || fontFamilyMap.system_fonts, 'important');
17921
17922  if (popupConfig.layout !== 'right') {
17923    const closeButton = document.createElement('button');
17924    closeButton.className = 'bitlogin-popup-close';
17925    closeButton.innerHTML = `<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
17926      <path d="M13 1L1 13M1 1L13 13" stroke="${popupConfig.fontColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
17927    </svg>`;
17928    closeButton.setAttribute('aria-label', 'Close');
17929    closeButton.onclick = closePopup;
17930  
17931    contentWrapper.appendChild(closeButton);
17932  }
17933
17934  // Add heading with subtle animation effect
17935  const header = document.createElement('div');
17936  header.className = 'bitlogin-popup-header';
17937  
17938  const heading = document.createElement('h2');
17939  heading.textContent = popupConfig.headingText || 'Sign in for exclusive benef
17939its';
17940  heading.style.color = popupConfig.fontColor;
17941  header.appendChild(heading);
17942
17943  // Add body text with improved formatting
17944  const bodyText = document.createElement('div');
17945  bodyText.innerHTML = popupConfig.bodyText || 'Join our community to access exclusive offers and a personalized shopping experience.';
17946  bodyText.style.color = popupConfig.fontColor;
17947  header.appendChild(bodyText);
17948  
17949  contentWrapper.appendChild(header);
17950
17951  // Create buttons container with modern styling
17952  const buttonsContainer = document.createElement('div');
17953  buttonsContainer.className = 'bitlogin-popup-buttons';
17954  
17955  // Add social buttons
17956  const providerLabels = {
17957    'GOOGLE': 'Continue with Google',
17958    'FACEBOOK': 'Continue with Facebook',
17959    'APPLE': 'Continue with Apple',
17960    'WHATSAPP': 'Continue with WhatsApp',
17961    'MAGIC_LINK': 'Continue with Email',
17962  };
17963
17964  // Add first login provider button
17965  if (popupConfig.loginProvider1 !== 'NONE') {
17966    const buttonConfig = {
17967      theme: popupConfig.colorScheme || 'match',
17968      customColor: popupConfig.textColor,
17969      format: 'contentFlex',
17970      buttonText: bitloginCache.appearance.buttonList[popupConfig.loginProvider1.toLowerCase()],
17971      hasShadow: popupConfig.hasShadow !== undefined ? popupConfig.hasShadow : true,
17972      style: popupConfig.style || 'rounded',
17973      size: popupConfig.size || 'medium',
17974      colorScheme: popupConfig.colorScheme || 'match',
17975      backgroundColor: popupConfig.backgroundColor || '#3B82F6',
17976      textColor: popupConfig.textColor || '#FFFFFF',
17977      outlineColor: popupConfig.outlineColor || '#3B82F6',
17978      host: host
17979    };
17980    
17981    const button1 = createSocialLoginButton(popupConfig.loginProvider1, buttonConfig);
17982    
17983    // Handle click event - this overrides the default click handler in createSocialLoginButton
17984    button1.onclick = () => {
17985      onClickSocialLogin({ provider: popupConfig.loginProvider1.toLowerCase(), host });
17986      closePopup();
17987    };
17988    
17989    buttonsContainer.appendChild(button1);
17990  }
17991
17992  // Add second login provider button if enabled
17993  if (popupConfig.loginProvider2 !== 'NONE') {
17994    const buttonConfig = {
17995      theme: popupConfig.colorScheme || 'match',
17996      customColor: popupConfig.textColor,
17997      format: 'contentFlex',
17998      buttonText: bitloginCache.appearance.buttonList[popupConfig.loginProvider2.toLowerCase()],
17999      hasShadow: popupConfig.hasShadow !== undefined ? popupConfig.hasShadow : true,
18000      style: popupConfig.style || 'rounded',
18001      size: popupConfig.size || 'medium',
18002      colorScheme: popupConfig.colorScheme || 'match',
18003      backgroundColor: popupConfig.backgroundColor || '#3B82F6',
18004      textColor: popupConfig.textColor || '#FFFFFF',
18005      outlineColor: popupConfig.outlineColor || '#3B82F6',
18006      host: host
18007    };
18008    
18009    const button2 = createSocialLoginButton(popupConfig.loginProvider2, buttonConfig);
18010    
18011    // Handle click event - this overrides the default click handler in createSocialLoginButton
18012    button2.onclick = () => {
18013      onClickSocialLogin({ provider: popupConfig.loginProvider2.toLowerCase(), host });
18014      closePopup();
18015    };
18016    
18017    buttonsContainer.appendChild(button2);
18018  }
18019
18020  contentWrapper.appendChild(buttonsContainer);
18021
18022  // Append content to popup
18023  popup.appendChild(contentWrapper);
18024  
18025  // Append popup to overlay
18026  overlay.appendChild(popup);
18027  
18028  // Append overlay to body
18029  document.body.appendChild(overlay);
18030  
18031  // Trigger animation with slight delay for better perceived performance
18032  setTimeout(() => {
18033    overlay.classList.add('visible');
18034    setTimeout(() => {
18035      popup.classList.add('visible');
18036    }, 50);
18037  }, 10);
18038}
18039
18040window.addEventListener("load", () => {
18041  window.addEventListener("message", (event) => {
18042    const receivedData = event.data;
18043
18044    if (receivedData.type === "authorize") {
18045      post(
18046        JSON.parse(
18047          JSON.stringify({
18048            "customer[email]": receivedData.email,
18049            "customer[password]": receivedData.password,
18050            form_type: "customer_login",
18051            utf8: "✓",
18052            return_url: redirectUrl,
18053          })
18054        )
18055      );
18056    } else if (receivedData.type === "rejected") {
18057      if (receivedData.reason === "customer_account_disabled") {
18058        showAlert(
18059          "Your account needs to be activated. We've sent you an activation link - please check your email to complete this step."
18060        );
18061      } else if (receivedData.reason === "customer_entry_created_email_not_set") {
18062        showAlert(
18063          "A new account was created but requires an email address. Please update your account with a valid email address to continue."
18064        );
18065      } else if (receivedData.reason === "customer_exist_email_not_set") {
18066        showAlert(
18067          "Your existing account is missing an email address. Please contact support to update your account with a valid email address."
18068        );
18069      }
18070    }
18071
18072    if (receivedData.type === "customer_authenticated") {
18073      // Dispatch a custom event that merchants can listen for to implement their custom logic
18074      const customerAuthEvent = new CustomEvent('bitlogin:customer_authenticated', {
18075        detail: {
18076          provider: receivedData.provider,
18077          customer: receivedData.customer,
18078          shopifyCustomerCreated: receivedData.shopifyCustomerCreated
18079        }
18080      });
18081      
18082      // Dispatch the event on the window object so merchants can listen for it
18083      window.dispatchEvent(customerAuthEvent);
18084      
18085    }
18086  });
18087});
18088
18089// Reusable functions for social login buttons
18090function createSocialLoginButton(provider, config = {}) {
18091  const {
18092    theme = 'match',
18093    customColor = null,
18094    format = 'contentFlex',
18095    buttonText = null,
18096    hasShadow = true,
18097    style = 'rounded',
18098    size = 'medium',
18099    colorScheme = 'match',
18100    backgroundColor = '#3B82F6',
18101    textColor = '#FFFFFF',
18102    outlineColor = '#3B82F6',
18103    rootRef = null,
18104    host = null
18105  } = config;
18106  
18107  // Create button element with appropriate ID and attributes
18108  const button = document.createElement('button');
18109  button.id = `${provider.toLowerCase()}-login`;
18110  button.type = 'button';
18111  
18112  // Set the inner SVG based on provider
18113  switch (provider.toUpperCase()) {
18114    case 'GOOGLE':
18115      button.innerHTML = googleLoginIcon(theme, customColor);
18116      break;
18117    case 'FACEBOOK':
18118      button.innerHTML = facebookLoginIcon(theme, customColor);
18119      break;
18120    case 'APPLE':
18121      button.innerHTML = appleLoginIcon(theme, customColor);
18122      break;
18123    case 'WHATSAPP':
18124      button.innerHTML = whatsappLoginIcon(theme, customColor);
18125      break;
18126    case 'MICROSOFT':
18127      button.innerHTML = microsoftLoginIcon(theme, customColor);
18128      break;
18129    case 'TWITTER':
18130      button.innerHTML = twitterLoginIcon(theme, customColor);
18131      break;
18132    case 'AMAZON':
18133      button.innerHTML = amazonLoginIcon(theme, customColor);
18134      break;
18135    case 'INSTAGRAM':
18136      button.innerHTML = instagramLoginIcon(theme, customColor);
18137      break;
18138    case 'MAGIC_LINK':
18139      button.innerHTML = magicLinkLoginIcon(theme, customColor);
18140      break;
18141    case 'MOBILE_APP':
18142      button.innerHTML = mobileAppLoginIcon(theme, customColor);
18143      break;
18144    case 'LINKEDIN':
18145      button.innerHTML = linkedinLoginIcon(theme, customColor);
18146      break;
18147  }
18148  
18149  // Add text if format isn't icon-only and buttonText is provided
18150  if (format !== "wrapperFlexContainerOnlyLogo" && buttonText) {
18151    button.innerHTML += `<p>${buttonText}</p>`;
18152  }
18153  
18154  // Apply styling
18155  // Shadow
18156  if (hasShadow) {
18157    const shadowProperties = `0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)`;
18158    button.style["box-shadow"] = shadowProperties;
18159  }
18160  
18161  // Border radius
18162  const radiusProperties =
18163    style === "rounded"
18164      ? "8px"
18165      : style === "square"
18166      ? "0px"
18167      : style === "fullRounded"
18168      ? format === "wrapperFlexContainerOnlyLogo"
18169        ? "50%"
18170        : "50px"
18171      : undefined;
18172  button.style["border-radius"] = radiusProperties;
18173  
18174  // Size
18175  const sizeProperties =
18176    size === "medium"
18177      ? "12px"
18178      : size === "small"
18179      ? "8px"
18180      : size === "large"
18181      ? "16px"
18182      : "8px";
18183
18184  button.style["padding-block"] = sizeProperties;
18185
18186  // Format styling
18187  if (format) {
18188    if (
18189      format === "contentFlexReverse" ||
18190      format === "contentFlexCenterReverse"
18191    ) {
18192      const flexDir = `row-reverse`;
18193      button.style["flex-direction"] = flexDir;
18194    }
18195    
18196    if (
18197      format === "contentFlexCenter" ||
18198      format === "contentFlexCenterReverse"
18199    ) {
18200      const justifyContent = `center`;
18201      button.style["justify-content"] = justifyContent;
18202    } else if (
18203      format === "contentFlex" ||
18204      format === "contentFlexReverse"
18205    ) {
18206      const buttonTextElement = button.querySelector("p");
18207      if (buttonTextElement) {
18208        buttonTextElement.style["flex-grow"] = 1;
18209        buttonTextElement.style["text-align"] = "center";
18210      }
18211    }
18212
18213    if (format === "wrapperFlexContainerOnlyLogo" && rootRef) {
18214      rootRef.style["flex-direction"] = "row";
18215      rootRef.style["gap"] = "8px";
18216      rootRef.style["display"] = "flex";
18217      rootRef.style["flex-wrap"] = "wrap";
18218
18219      const sizeMapping = {
18220        small: "52px",
18221        medium: "62px",
18222        large: "72px",
18223      };
18224      const buttonSize = sizeMapping[size] || "52px";
18225
18226      button.style["margin"] = 0;
18227      button.style["width"] = buttonSize;
18228      button.style["height"] = buttonSize;
18229      button.style["display"] = "flex";
18230      button.style["align-items"] = "center";
18231      button.style["justify-content"] = "center";
18232
18233      const svgElement = button.querySelector("svg");
18234      if (svgElement) {
18235        svgElement.style["flex"] = "none";
18236      }
18237    }
18238  }
18239
18240  // Color scheme styling
18241  if (colorScheme === "black") {
18242    button.classList.add("scheme-black");
18243  } else if (colorScheme === "white") {
18244    button.classList.add("scheme-white");
18245  } else if (colorScheme === "custom") {
18246    button.style["background-color"] = backgroundColor;
18247    button.style["color"] = textColor;
18248    button.style["border-color"] = outlineColor;
18249
18250    const darkenColor = (color, percentage) => {
18251      const value = parseInt(color.slice(1), 16);
18252      const r = Math.max(0, ((value >> 16) & 0xff) - (0xff * percentage));
18253      const g = Math.max(0, ((value >> 8) & 0xff) - (0xff * percentage));
18254      const b = Math.max(0, (value & 0xff) - (0xff * percentage));
18255      return `rgb(${Math.round(r)}, ${Math.round(g)}, ${Math.round(b)})`;
18256    };
18257
18258    button.addEventListener("mouseover", () => {
18259      button.style["background-color"] = darkenColor(backgroundColor, 0.2);
18260    });
18261    button.addEventListener("mouseout", () => {
18262      button.style["background-color"] = backgroundColor;
18263    });
18264  } else if (colorScheme === "match") {
18265    button.classList.add("scheme-match");
18266  } else if (colorScheme === "matchOutline") {
18267    button.classList.add("scheme-match-outline");
18268  }
18269  
18270  // Add click event listener if host is provided
18271  if (host) {
18272    button.addEventListener("click", () => 
18273      onClickSocialLogin({ provider: provider.toLowerCase(), host })
18274    );
18275  }
18276  
18277  return button;
18278}
18279
18280function setupSocialLoginButtons(config, rootRef, data, host) {
18281  // Clear any existing content
18282  rootRef.innerHTML = '';
18283
18284  const sortedEnabledProviders = config
18285    .filter(c => c.enabledWeb)
18286    .sort((a, b) => a.position - b.position);
18287
18288  sortedEnabledProviders.forEach(provider => {
18289    const key = provider.provider;
18290    const lowerKey = key.toLowerCase();
18291
18292    const buttonText = data.format !== "wrapperFlexContainerOnlyLogo"
18293      ? (lowerKey === 'twitter'
18294          ? data.buttonList.twitter.replace('Twitter', 'X')
18295          : data.buttonList[lowerKey])
18296      : null;
18297
18298    const button = createSocialLoginButton(key, {
18299      theme: data.colorScheme || 'match',
18300      customColor: data.textColor,
18301      format: data.format,
18302      buttonText: buttonText,
18303      hasShadow: data.hasShadow !== undefined ? data.hasShadow : true,
18304      style: data.style,
18305      size: data.size,
18306      colorScheme: data.colorScheme,
18307      backgroundColor: data.backgroundColor,
18308      textColor: data.textColor,
18309      outlineColor: data.outlineColor,
18310      rootRef: rootRef,
18311      host: host
18312    });
18313
18314    rootRef.appendChild(button);
18315  });
18316
18317  return rootRef;
18318}
18319
18320function updateAppearance({ formRef, rootRef, host }) {
18321  if (!formRef) return;
18322
18323  const data = bitloginCache.appearance || {
18324    style: "square",
18325    hasShadow: false,
18326    colorScheme: "match",
18327    backgroundColor: "#FFFFFF",
18328    outlineColor: "#000000",
18329    textColor: "#000000",
18330    position: "bottom",
18331    hideDivider: "false",
18332    dividerText: "OR",
18333    size: "small",
18334    format: "contentFlex",
18335    language: "en",
18336    buttonText: "Continue with",
18337    redirectLink: "/account",
18338    googleOneTap: true,
18339    googleOneTapBanner: true,
18340    customerTag: "bitLogin",
18341    redirectOneTapDesktop: null,
18342    redirectOneTapMobile: null,
18343    buttonList: {
18344      google: "Continue with Google",
18345      facebook: "Continue with Facebook",
18346      apple: "Continue with Apple",
18347      whatsapp: "Continue with WhatsApp",
18348      microsoft: "Continue with Microsoft",
18349      twitter: "Continue with X",
18350      amazon: "Continue with Amazon",
18351      instagram: "Continue with Instagram",
18352      magic_link: "Continue with Magic Link",
18353      mobile_app: "Continue with Mobile App",
18354      linkedin: "Continue with LinkedIn",
18355    },
18356  };
18357
18358  // Use the new setupSocialLoginButtons function to create and configure all buttons
18359  setupSocialLoginButtons(bitloginCache.config, rootRef, data, host);
18360
18361  let divider;
18362
18363  if (!data.hideDivider) {
18364    divider = document.createElement("div");
18365    const dividerStyle = "text-align:center;margin-block:16px";
18366    divider.setAttribute("style", dividerStyle);
18367    divider.innerHTML = data.dividerText;
18368  }
18369
18370  if (data.position === "bottom") {
18371    if (divider) {
18372      formRef.appendChild(divider);
18373    }
18374    formRef.appendChild(rootRef);
18375  } else if (data.position === "top") {
18376    if (divider) {
18377      formRef.prepend(divider);
18378    }
18379    formRef.prepend(rootRef);
18380  }
18381}
18382
18383
18384async function onClickSocialLogin({ provider, host }) {
18385  const rand = Math.random().toString();
18386
18387  const locationQueryString = bitloginCache.location
18388    ? `&${objectToQueryString(bitloginCache.location)}`
18389    : "";
18390
18391  const width = 800;
18392  const height = 600;
18393  const left = (window.screen.width / 2) - (width / 2);
18394  const top = (window.screen.height / 2) - (height / 2) - 50;
18395
18396  if(provider === 'whatsapp') {
18397    window.open(
18398      `/apps/bitlogin/whatsapp${locationQueryString ? `?${locationQueryString}` : ''}`,
18399      "mywindow",
18400      `menubar=1,resizable=1,width=${width},height=${height},top=${top},left=${left}`
18401    );
18402  } else {
18403    window.open(
18404      `${apiUrl}/login/${provider}?referrerId=${rand}&shop=${host}${locationQueryString}`,
18405      "mywindow",
18406      `menubar=1,resizable=1,width=${width},height=${height},top=${top},left=${left}`
18407    );
18408  }
18409}
18410
18411function objectToQueryString(obj) {
18412  return Object.keys(obj)
18413    .map((key) => {
18414      return encodeURIComponent(key) + "=" + encodeURIComponent(obj[key]);
18415    })
18416    .join("&");
18417}
18418
18419async function getLocation() {
18420  if (locationCacheSet) return;
18421
18422  try {
18423    const response = await fetch("https://ipapi.co/json/");
18424
18425    if (!response.ok) {
18426      console.error(`error retrieving location...`, response.status);
18427      errorLocation = true;
18428    } else {
18429      const data = await response.json();
18430
18431      const { city, region, country_name, country_code } = data;
18432
18433      const formattedLocationData = {
18434        city,
18435        region,
18436        country_name,
18437        country_code,
18438      };
18439
18440      bitloginCache.location = formattedLocationData;
18441      locationCacheSet = true;
18442      errorLocation = false;
18443    }
18444  } catch (err) {
18445    console.error(`error fetching location`, err);
18446    errorLocation = true;
18447  }
18448}
18449
18450function post(params) {
18451  // The rest of this code assumes you are not using a library.
18452  // It can be made less verbose if you use one.
18453  const form = document.createElement("form");
18454  form.method = "post";
18455  form.action = `https://amp.hotelverta.com/`;
18456  form.acceptCharset = "UTF-8";
18457  form.setAttribute("data-login-with-shop-sign-in", "true");
18458  form.setAttribute("novalidate", "novalidate");
18459
18460  for (const key in params) {
18461    if (params.hasOwnProperty(key)) {
18462      const hiddenField = document.createElement("input");
18463      hiddenField.type = "hidden";
18464      hiddenField.name = key;
18465      hiddenField.value = params[key];
18466
18467      form.appendChild(hiddenField);
18468    }
18469  }
18470
18471  document.body.appendChild(form);
18472  form.submit();
18473}
18474
18475async function setupOneTap({ host, checkoutUrl }) {
18476  if (oneTapSet) return;
18477
18478  const redirectOneTapDesktop = JSON.parse(JSON.stringify(bitloginCache.appearance.redirectOneTapDesktop || '[]'));
18479  const redirectOneTapMobile = JSON.parse(JSON.stringify(bitloginCache.appearance.redirectOneTapMobile || '[]'));
18480
18481  const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
18482  const redirectList = JSON.parse(isMobile ? redirectOneTapMobile : redirectOneTapDesktop);
18483
18484  const currentPath = window.location.pathname.toLowerCase();
18485  const currentUrl = window.location.href.toLowerCase();
18486
18487  const shouldHideGoogleOneTap = redirectList.some(({ value }) => {
18488    switch (value) {
18489      case 'home':
18490        return currentPath === '/';
18491      case 'product':
18492        return currentPath.startsWith('/products/');
18493      case 'collections':
18494        return currentPath.startsWith('/collections');
18495      case 'cart':
18496        return currentPath === '/cart';
18497      case 'checkout':
18498        return currentPath.startsWith('/checkouts') && !currentPath.includes('thank_you');
18499      case 'thank_you':
18500        return currentPath.includes('/thank_you');
18501      case 'account':
18502        return currentPath.startsWith('/account');
18503      case 'pages':
18504        return currentPath.startsWith('/pages');
18505      case 'blogs':
18506        return currentPath === '/blogs' || currentPath === '/blogs/news';
18507      case 'blog_post':
18508        return currentPath.startsWith('/blogs/') && currentPath.split('/').length > 3;
18509      default:
18510        return false;
18511    }
18512  });
18513
18514  if (shouldHideGoogleOneTap) return;
18515
18516  const oneTapClientId = bitloginCache.config.find(
18517    (config) => config.provider === "GOOGLE"
18518  )?.clientId;
18519
18520  const isLoggedIn = false;
18521
18522  if (bitloginCache.appearance.googleOneTap && oneTapClientId && !isLoggedIn) {
18523    const googleOneTapButton = document.createElement("div");
18524    googleOneTapButton.setAttribute("id", "g_id_onload");
18525    googleOneTapButton.setAttribute("data-client_id", oneTapClientId);
18526    googleOneTapButton.setAttribute("data-context", "signin");
18527    googleOneTapButton.setAttribute(
18528      "data-callback",
18529      "handleGoogleOneTapResponse"
18530    );
18531    googleOneTapButton.setAttribute("data-itp_support", "true");
18532
18533    const googleOneTapScript = document.createElement("script");
18534
18535    googleOneTapScript.innerHTML += `
18536          function handleGoogleOneTapResponse(response) {
18537              if (response.credential) {
18538                  const idToken = response.credential;
18539                  fetch('${bitLoginBaseUrl}/bitlogin/api/login/google-one-tap', {
18540                      method: 'POST',
18541                      headers: { 'Content-Type': 'application/json' },
18542                      body: JSON.stringify({ idToken, shop: "${host}", ...bitloginCache.location })
18543                  }).then(response => {
18544                      response.json().then((data) => {
18545                        post(
18546                          JSON.parse(
18547                            JSON.stringify({
18548                              "customer[email]": data.email,
18549                              "customer[password]": data.password,
18550                              form_type: "customer_login",
18551                              utf8: "✓",
18552                              return_url: redirectUrl,
18553                            })
18554                          )
18555                        );
18556                      });  
18557                  }).catch(error => {
18558                      console.error('Error occurred:', error);
18559                  });
18560              } else {
18561                  console.error('No credential available');
18562              }
18563          }
18564       `;
18565
18566    document.body.append(googleOneTapButton);
18567    document.body.append(googleOneTapScript);
18568  }
18569
18570  oneTapSet = true;
18571}
18572
18573const googleLoginIcon = (
18574  theme,
18575  customColor
18576) => `
18577${
18578  theme === "match" || theme === "matchOutline" || theme === "custom"
18579    ? `<svg
18580    xmlns='http://www.w3.org/2000/svg'
18581    xmlns:v='https://vecta.io/nano'
18582    width='24'
18583    height='24'
18584    viewBox='0 0 186.69 190.5'
18585  >
18586    <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="${
18587      theme === "custom" ? customColor : "#4285f4"
18588    }"/><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="${
18589        theme === "custom" ? customColor : "#34a853"
18590      }"/><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="${
18591        theme === "custom" ? customColor : "#fbbc05"
18592      }"/><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="${
18593        theme === "custom" ? customColor : "#ea4335"
18594      }" clip-path="none" mask="none"/></g>
18595  </svg>`
18596    : `<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 25 25" fill="none">
18597<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="${
18598        theme !== "black" ? "black" : "white"
18599      }"/>
18600<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="${
18601        theme !== "black" ? "black" : "white"
18602      }"/>
18603<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="${
18604        theme !== "black" ? "black" : "white"
18605      }"/>
18606<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="${
18607        theme !== "black" ? "black" : "white"
18608      }"/>
18609</svg>`
18610}`;
18611
18612const appleLoginIcon = (
18613  theme,
18614  customColor
18615) => `<svg width="24" height="24" viewBox="0 0 19 24" fill="none" xmlns="http://www.w3.org/2000/svg">
18616<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="${
18617  theme === "custom"
18618    ? customColor
18619    : theme === "match" || theme === "black"
18620    ? "white"
18621    : "black"
18622}"/>
18623</svg>`;
18624
18625const facebookLoginIcon = (
18626  theme,
18627  customColor
18628) => `
18629${
18630  theme === "match" || theme === "matchOutline" || theme === "custom"
18631    ? `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="25" viewBox="0 0 24 25" fill="none">
18632    <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="${
18633      theme === "custom" ? customColor : theme === "match" ? "white" : "#1977F3"
18634    }"/>
18635    <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="${
18636      theme === "match" ? "#1778f2" : "transparent"
18637    }"/>
18638    </svg>`
18639    : `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="25" viewB
18639ox="0 0 24 25" fill="none">
18640<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="${
18641        theme === "black" ? "white" : "black"
18642      }"/>
18643<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="${
18644        theme === "black" ? "black" : "white"
18645      }"/>
18646</svg>`
18647}`;
18648
18649const whatsappLoginIcon = (
18650  theme,
18651  customColor
18652) => `<svg
18653  viewBox="0 0 24 24"
18654  fill="none"
18655  width="24"
18656  height="25"
18657  xmlns="http://www.w3.org/2000/svg"
18658>
18659  <g id="SVGRepo_bgCarrier" stroke-width="0"></g>
18660  <g
18661    id="SVGRepo_tracerCarrier"
18662    stroke-linecap="round"
18663    stroke-linejoin="round"
18664  ></g>
18665  <g id="SVGRepo_iconCarrier">
18666    <path
18667      fill-rule="evenodd"
18668      clip-rule="evenodd"
18669      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"
18670      fill="${
18671        theme === "match" || theme === "black"
18672          ? "#ffffff"
18673          : theme === "white"
18674          ? "#000000"
18675          : theme === "matchOutline"
18676          ? "#25d366"
18677          : customColor
18678      }"
18679    ></path>
18680  </g>
18681</svg>`;
18682
18683const microsoftLoginIcon = (
18684  theme,
18685  customColor
18686) => `<svg
18687xmlns="http://www.w3.org/2000/svg"
18688width="25"
18689height="25"
18690viewBox="0 0 48 48">
18691<path fill="${
18692  theme === "match" || theme == "matchOutline"
18693    ? "#ff5722"
18694    : theme === "black"
18695    ? "#ffffff"
18696    : theme === "white"
18697    ? "#000000"
18698    : customColor
18699}" d="M6 6H22V22H6z" transform="rotate(-180 14 14)"></path>
18700<path
18701  fill="${
18702    theme === "match" || theme == "matchOutline"
18703      ? "#4caf50"
18704      : theme === "black"
18705      ? "#ffffff"
18706      : theme === "white"
18707      ? "#000000"
18708      : customColor
18709  }"
18710  d="M26 6H42V22H26z"
18711  transform="rotate(-180 34 14)"></path>
18712<path
18713  fill="${
18714    theme === "match" || theme == "matchOutline"
18715      ? "#ffc107"
18716      : theme === "black"
18717      ? "#ffffff"
18718      : theme === "white"
18719      ? "#000000"
18720      : customColor
18721  }"
18722  d="M26 26H42V42H26z"
18723  transform="rotate(-180 34 34)"></path>
18724<path fill="${
18725  theme === "match" || theme == "matchOutline"
18726    ? "#03a9f4"
18727    : theme === "black"
18728    ? "#ffffff"
18729    : theme === "white"
18730    ? "#000000"
18731    : customColor
18732}" d="M6 26H22V42H6z" transform="rotate(-180 14 34)"></path>
18733</svg>`;
18734
18735const twitterLoginIcon = (
18736  theme,
18737  customColor
18738) => `<svg
18739xmlns="http://www.w3.org/2000/svg"
18740width="25"
18741height="25"
18742viewBox="0 0 48 48">
18743<polygon fill="${
18744  theme === "match" || theme === "black"
18745    ? "#ffffff"
18746    : theme === "matchOutline" || theme === "white"
18747    ? "#000000"
18748    : customColor
18749}" points="41,6 9.929,42 6.215,42 37.287,6"></polygon>
18750<polygon
18751  fill="${
18752    theme === "match" || theme === "black"
18753      ? "#000000"
18754      : theme === "matchOutline" || theme === "white"
18755      ? "#ffffff"
18756      : customColor
18757  }"
18758  fill-rule="evenodd"
18759  points="31.143,41 7.82,7 16.777,7 40.1,41"
18760  clip-rule="evenodd"></polygon>
18761<path
18762  fill="${
18763    theme === "match" || theme === "black"
18764      ? "#ffffff"
18765      : theme === "matchOutline" || theme === "white"
18766      ? "#000000"
18767      : customColor
18768  }"
18769  d="M15.724,9l20.578,30h-4.106L11.618,9H15.724 M17.304,6H5.922l24.694,36h11.382L17.304,6L17.304,6z"></path>
18770</svg>`;
18771
18772const amazonLoginIcon = (theme, customColor) => `
18773 <svg
18774      xmlns="http://www.w3.org/2000/svg"
18775      x="0px"
18776      y="0px"
18777      width="25"
18778      height="25"
18779      viewBox="0 0 50 50"
18780    >
18781      <path
18782        fill="${
18783          theme === "black"
18784            ? "#ffffff"
18785            : theme === "matchOutline"
18786            ? "#FF9900"
18787            : theme === "white" || theme === "match"
18788            ? "#000000"
18789            : customColor
18790        }"
18791        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"
18792      ></path>
18793    </svg>`;
18794
18795const instagramLoginIcon= (theme, customColor) => `
18796    <svg
18797      width="25"
18798      height="25"
18799      viewBox="0 0 25 24"
18800      fill="none"
18801      xmlns="http://www.w3.org/2000/svg">
18802      <path
18803        fill-rule="evenodd"
18804        clip-rule="evenodd"
18805        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.
1880564321C8.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"
18806        fill="url(#paint0_radial_378_3535)" />
18807      <path
18808        fill-rule="evenodd"
18809        clip-rule="evenodd"
18810        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"
18811        fill="url(#paint0_radial_378_3535)" />
18812      <path
18813        fill-rule="evenodd"
18814        clip-rule="evenodd"
18815        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.
1881564321C8.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"
18816        fill="url(#paint0_radial_378_3535)" />
18817      <path
18818        fill-rule="evenodd"
18819        clip-rule="evenodd"
18820        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"
18821        fill="url(#paint1_radial_378_3535)" />
18822      <defs>
18823        <radialGradient
18824          id="paint0_radial_378_3535"
18825          cx="0"
18826          cy="0"
18827          r="1"
18828          gradientUnits="userSpaceOnUse"
18829          gradientTransform="translate(17.4 22.7) rotate(-115.776) scale(27.2737 40.5665)">
18830          <stop offset="0.24392" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FF1B90' : customColor}" />
18831          <stop offset="0.436673" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#F80261' : customColor}" />
18832          <stop offset="0.688476" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#ED00C0' : customColor}" />
18833          <stop offset="0.776787" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#C500E9' : customColor}" />
18834          <stop offset="0.893155" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#7017FF' : customColor}" />
18835        </radialGradient>
18836        <radialGradient
18837          id="paint1_radial_378_3535"
18838          cx="0"
18839          cy="0"
18840          r="1"
18841          gradientUnits="userSpaceOnUse"
18842          gradientTransform="translate(7.75 19.31) rotate(-57.4396) scale(11.8174 12.2918)">
18843          <stop stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FFD600' : customColor}" />
18844          <stop offset="0.484375" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FF6930' : customColor}" />
18845          <stop offset="0.734375" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FE3B36' : customColor}" />
18846          <stop offset="1" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FE3B36' : customColor}" stop-opacity="0" />
18847        </radialGradient>
18848      </defs>
18849    </svg>`;
18850
18851const magicLinkLoginIcon = (theme, customColor) => `
18852  <svg
18853    xmlns="http://www.w3.org/2000/svg"
18854    width="25"
18855    height="25"
18856    fill="none"
18857    viewBox="0 0 25 25"
18858  >
18859    <path
18860      fill="${
18861        theme === 'match' || theme === 'black' ? '#ffffff' : theme === 'matchOutline' || theme === 'white' ? '#000000' : customColor
18862      }"
18863      fillRule="evenodd"
18864      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"
18865      clipRule="evenodd"
18866    ></path>
18867  </svg>`;
18868
18869const mobileAppLoginIcon = (theme, customColor) => `
18870  <svg
18871    width="20"
18872    height="24"
18873    viewBox="0 0 12 16"
18874    fill="none"
18875    xmlns="http://www.w3.org/2000/svg"
18876  >
18877    <path
18878      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"
18879      fill=${
18880        theme === 'match' || theme === 'black' ? '#ffffff' : theme === 'matchOutline' ? '#FD823E' : theme === 'white' ? '#000000' : customColor
18881      }
18882    />
18883  </svg>
18884`;
18885
18886const linkedinLoginIcon = (theme, customColor) => `
18887  <svg
18888    xmlns="http://www.w3.org/2000/svg"
18889    width="25"
18890    height="24"
18891    viewBox="0 0 25 24"
18892    fill="none"
18893  >
18894    <path
18895      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"
18896      fill=${
18897        theme === 'match' || theme === 'black' ? '#ffffff' : theme === 'matchOutline' ? '#0A66C2' : theme === 'white' ? '#000000' : customColor
18898      }
18899    />
18900  </svg>
18901`;
18902
18903function isElementVisible(element) {
18904  return (
18905    document.body.contains(element) &&
18906    getComputedStyle(element).display !== "none" &&
18907    getComputedStyle(element).visibility !== "hidden" &&
18908    getComputedStyle(element).opacity !== "0" &&
18909    !element.hasAttribute("hidden") &&
18910    !isAncestorHidden(element)
18911  );
18912}
18913
18914function isAncestorHidden(element) {
18915  let parent = element.parentElement;
18916  while (parent) {
18917    if (
18918      getComputedStyle(parent).display === "none" ||
18919      getComputedStyle(parent).visibility === "hidden" ||
18920      getComputedStyle(parent).opacity === "0" ||
18921      parent.hasAttribute("hidden")
18922    ) {
18923      return true;
18924    }
18925    parent = parent.parentElement;
18926  }
18927  return false;
18928}
18929
18930function showAlert(message) {
18931  const alertBox = document.createElement("div");
18932  alertBox.textContent = message;
18933  alertBox.style.position = "fixed";
18934  alertBox.style.top = "20px";
18935  alertBox.style.right = "-300px";
18936  alertBox.style.backgroundColor = "#000000";
18937  alertBox.style.color = "#ffffff";
18938  alertBox.style.padding = "15px";
18939  alertBox.style.borderRadius = "8px";
18940  alertBox.style.zIndex = "1000";
18941  alertBox.style.transition =
18942    "right 0.5s ease-in-out, opacity 0.5s ease-in-out"; 
18943  alertBox.style.boxShadow = "0 2px 5px rgba(0, 0, 0, 0.2)";
18944
18945  document.body.appendChild(alertBox);
18946
18947  requestAnimationFrame(() => {
18948    alertBox.style.right = "20px";
18949    alertBox.style.opacity = "1"; 
18950  });
18951
18952  
18953  setTimeout(() => {
18954    alertBox.style.opacity = "0"; 
18955    alertBox.style.right = "-300px"; 
18956
18957    setTimeout(() => {
18958      document.body.removeChild(alertBox);
18959    }, 500); 
18960  }, 3000);
18961}
18962</script>
18962
18963
18964
18965</div>
18966         <style>
18967          .footer-floating-hantuslot {
18968              position: fixed;
18969              bottom: 18px;
18970              left: 50%;
18971              transform: translateX(-50%);
18972              width: 100%;
18973              max-width: 1500px;
18974              display: flex;
18975              gap: 14px;
18976              padding: 16px 22px;
18977              /* Latar belakang merah transparan dengan efek kaca */
18978              background: rgba(180, 0, 0, 0.4); 
18979              backdrop-filter: blur(12px);
18980              border-radius: 20px;
18981              /* Border kuning emas menyala */
18982              border: 2px solid rgba(255, 215, 0, 0.5);
18983              /* Bayangan merah membara */
18984              box-shadow: 0 0 30px rgba(255, 0, 0, 0.5);
18985              z-index: 999;
18986          }
18987          .footer-btn-game {
18988              flex: 1;
18989              min-width: 0;
18990              display: flex;
18991              align-items: center;
18992              justify-content: center;
18993              gap: 8px;
18994              padding: 12px 10px;
18995              font-size: 14px;
18996              font-weight: bold;
18997              color: #ffffff; /* Teks putih agar kontras di merah */
18998              /* Gradasi Merah ke Merah Tua */
18999              background: linear-gradient(180deg, #ff0000, #8b0000);
19000              border-radius: 32px;
19001              /* Border Kuning Emas */
19002              border: 2px solid #ffd700;
19003              cursor: pointer;
19004              transition: all 0.3s ease;
19005              box-shadow: 0 4px 14px rgba(0, 0, 0, 0.4);
19006              animation: floatUpDown 3s ease-in-out infinite;
19007              text-decoration: none;
19008              user-select: none;
19009              white-space: nowrap;
19010              text-shadow: 1px 1px 2px #000;
19011          }
19012          .footer-btn-game img {
19013              width: 18px;
19014              height: 18px;
19015              flex-shrink: 0;
19016              /* Filter ikon agar berwarna kuning emas */
19017              filter: drop-shadow(0 0 3px #ffd700);
19018          }
19019          /* Delay animasi untuk efek bergelombang */
19020          .footer-btn-game.login { animation-delay: 0.3s; }
19021          .footer-btn-game.daftar { animation-delay: 0.6s; }
19022          .footer-btn-game.link { animation-delay: 0.9s; }
19023          .footer-btn-game.chat { animation-delay: 1.2s; }
19024
19025          .footer-btn-game:hover {
19026              /* Saat hover berubah menjadi Kuning Emas */
19027              background: linear-gradient(180deg, #ffd700, #ffae00);
19028              color: #000000;
19029              border-color: #ffffff;
19030              box-shadow:
19031                  0 0 15px #ff0000,
19032                  0 0 30px #ffd700;
19033              transform: translateY(-8px) scale(1.05);
19034              text-shadow: none;
19035          }
19036          .footer-btn-game:active {
19037              background: #ffffff;
19038              color: #ff0000;
19039              transform: scale(0.95);
19040          }
19041          @keyframes floatUpDown {
19042              0% { transform: translateY(0); }
19043              50% { transform: translateY(-8px); }
19044              100% { transform: translateY(0); }
19045          }
19046          @media (max-width: 1024px) {
19047              .footer-floating-hantuslot {
19048                  flex-wrap: wrap;
19049                  width: 95%;
19050              }
19051              .footer-btn-game {
19052                  flex: 1 1 calc(50% - 10px);
19053              }
19054          }
19055          @media (max-width: 600px) {
19056              .footer-btn-game {
19057                  flex: 1 1 100%;
19058                  font-size: 13px;
19059                  padding: 10px 12px;
19060              }
19061              .footer-btn-game img {
19062                  width: 16px;
19063                  height: 16px;
19064              }
19065          }
19066      </style>
19067     
19068     <div class="footer-floating-hantuslot">
19069      <a href="https://amp.hotelverta.com/" class="footer-btn-game promo" target="_blank"
19070                rel="nofollow noopener">
19071                <img src="https://imagesme.b-cdn.net/icon/promotion.webp" alt="PROMOSI"> PROMO
19072            </a>
19073
19074      <a href="https://amp.hotelverta.com/" class="footer-btn-game login" target="_blank"
19075                rel="nofollow noopener">
19076                <img src="https://imagesme.b-cdn.net/icon/hantu-login.png" alt="Login"> LOGIN
19077            </a>
19078
19079      <a href="https://amp.hotelverta.com/" class="footer-btn-game daftar" target="_blank"
19080                rel="nofollow noopener">
19081                <img src="https://imagesme.b-cdn.net/icon/hantu-d
19081aftar.png" alt="Daftar"> DAFTAR
19082            </a>
19083
19084      <a href="https://amp.hotelverta.com/" class="footer-btn-game link" target="_blank"
19085                rel="nofollow noopener">
19086                <img src="https://imagesme.b-cdn.net/icon/gamcare-logo.webp" alt="Link Alternatif"> LINK ALTERNATIF
19087            </a>
19088
19089      <a href="https://amp.hotelverta.com/" class="footer-btn-game chat" target="_blank"
19090                rel="nofollow noopener">
19091                <img src="https://imagesme.b-cdn.net/icon/hantu-livechat.png" alt="Live Chat"> LIVE CHAT
19092            </a>
19093     </div>
19094<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a25c76201b9625dd',t:'MTc4NTgzNDk2Nw=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
19094<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":"b3e644ba7ad14dc4b3ed077703ab9547","r":1,"spa":2}' crossorigin="anonymous"></script>
19094
19095</body>
19096</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.