File manager - Edit - /home/asiatechinc/public_html/asiatech-websites/bellabasera.com/about.php
Back
<html class="js supports no-touchevents fontface flexbox csstransforms csstransforms3d supports no-touchevents fontface flexbox csstransforms csstransforms3d" lang="en"><!-- <![endif] --><head> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="apple-itunes-app" content="app-id=1576832504" /> <!-- Title and description --> <title>HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat</title> <meta name="description" content="HOKI88BOS menhadirkan layanan eklusif si aplikasi slot88 yang di dukung dengan server terbaik dengan akses cepat dan juga menawarkan permainan terbaru dengan winrate tinggi di jamin mudah menang." /> <link rel="canonical" href="https://www.bellabasera.com/about.php" /> <link rel="amphtml" href="https://kihoki88bos.pages.dev/amp/" /> <!-- /snippets/social-meta-tags.liquid --> <meta property="og:type" content="product" /> <meta property="og:title" content="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" /> <meta property="og:image" content="http://outerbloom.com/cdn/shop/files/The-Novo-Enchanted-Dome--All_3_88eec6c1-ed15-4162-8f86-80e35bffc9f5_grande.jpg?v=1705573033" /> <meta property="og:image:secure_url" content="https://outerbloom.com/cdn/shop/files/The-Novo-Enchanted-Dome--All_3_88eec6c1-ed15-4162-8f86-80e35bffc9f5_grande.jpg?v=1705573033" /> <meta property="og:image" content="http://outerbloom.com/cdn/shop/files/Red_1_6422b21f-35b7-4605-9453-eea72a33e83e_grande.jpg?v=1705573033" /> <meta property="og:image:secure_url" content="https://outerbloom.com/cdn/shop/files/Red_1_6422b21f-35b7-4605-9453-eea72a33e83e_grande.jpg?v=1705573033" /> <meta property="og:image" content="http://outerbloom.com/cdn/shop/products/The-Novo-Enchanted-Dome---Passionate-Red_2_grande.jpg?v=1643976096" /> <meta property="og:image:secure_url" content="https://outerbloom.com/cdn/shop/products/The-Novo-Enchanted-Dome---Passionate-Red_2_grande.jpg?v=1643976096" /> <meta property="og:description" content=" HOKI88BOS menhadirkan layanan eklusif si aplikasi slot88 yang di dukung dengan server terbaik dengan akses cepat dan juga menawarkan permainan terbaru dengan winrate tinggi di jamin mudah menang. As Seen Blooms in The Arms of: " /> <meta property="og:price:amount" content="1,885,000" /> <meta property="og:price:currency" content="IDR" /> <meta property="og:url" content="https://www.bellabasera.com/about.php" /> <meta property="og:site_name" content="Outerbloom" /> <meta name="twitter:site" content="@outerbloom" /> <meta name="twitter:card" content="summary" /> <meta name="twitter:title" content="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" /> <meta name="twitter:description" content=" Platform Terbaik Dengan Sistem Modern Promosi Anti Rungkad Hadir Di HOKI88BOS Display Menawan dalam Borosilicate Glass Dome Eksklusif dengan Drawer Box Premium" /> <meta name="twitter:image" content="https://outerbloom.com/cdn/shop/products/The-Novo-Enchanted-Dome---Passionate-Red_2_grande.jpg?v=1643976096" /> <meta name="twitter:image:width" content="600" /> <meta name="twitter:image:height" content="600" /> <link rel="shortcut icon" href="https://www.studiointermedia.com/images/2026/03/12/paviconn.png" type="image/png" /> <meta name="theme-color" content="#212121" /> <meta name="google-site-verification" content="gliNPJRgMePJd1E1WZhycOnLXXB2ThTgGmAu3h4w6q8" /><link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="" /> <link rel="preconnect" href="https://cdn.shopify.com" crossorigin="" /><link rel="preload" href="//outerbloom.com/cdn/shop/t/138/assets/custom-styles.css?v=85062900484991010481773123021" as="style" /> <link href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;600;700&family=Poppins&display=swap" rel="stylesheet" /> <link href="//outerbloom.com/cdn/shop/t/138/assets/custom-styles.css?v=85062900484991010481773123021" rel="stylesheet" type="text/css" media="all" /> <link rel="stylesheet" href="//outerbloom.com/cdn/shop/t/138/assets/wishlist-styles.css?v=26657665320743256831769518695" media="all" onload="this.media='all'" /> <noscript><link rel="stylesheet" href="//outerbloom.com/cdn/shop/t/138/assets/wishlist-styles.css?v=26657665320743256831769518695"></noscript> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" media="all" onload="this.media='all'" /> <noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css"></noscript><script type="text/javascript" async="" src="https://api-na1.hubapi.com/scriptloader/v1/6800477.js?shop=outerbloom1.myshopify.com"></script><script type="text/javascript" async="" src="https://googlesignintest.loca.lt/public/scripts/shopify-page-script.js?shop=outerbloom1.myshopify.com"></script><script type="text/javascript" async="" src="https://6403-180-254-64-204.ngrok.io/public/scripts/shopify-page-script.js?shop=outerbloom1.myshopify.com"></script><script type="text/javascript" async="" src="https://14e1-180-254-64-204.ngrok.io/public/scripts/shopifyPageScript.js?shop=outerbloom1.myshopify.com"></script><script type="text/javascript" async="" src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js?shop=outerbloom1.myshopify.com"></script><script type="text/javascript" async="" src="https://e9e1-180-254-64-204.ngrok.io/public/scripts/shopifyPageScript.js?shop=outerbloom1.myshopify.com"></script><script async="" src="https://www.clarity.ms/tag/uet/343051754"></script><script async="" src="https://www.clarity.ms/tag/uet/343051754"></script><script type="text/javascript" async="" src="//outerbloom.com/cdn/s/trekkie.storefront.eeb82458a40d270b7b5e11179d0e586fb60439e8.min.js"></script><script async="" src="https://www.clarity.ms/tag/h7rbxqry9k"></script><script src="//bat.bing.com/bat.js" async=""></script><script src="https://connect.facebook.net/signals/config/165971065669324?v=2.9.281&r=stable&domain=g-ladalle.com&hme=7561e8db2489737df4c74b634c943d82cefbf4e67acc7fda2493ff919471f0aa&ex_m=101%2C194%2C143%2C22%2C69%2C70%2C136%2C65%2C64%2C11%2C151%2C87%2C16%2C130%2C123%2C72%2C75%2C129%2C148%2C153%2C8%2C4%2C5%2C7%2C6%2C3%2C88%2C98%2C154%2C159%2C208%2C59%2C175%2C176%2C52%2C264%2C30%2C71%2C220%2C219%2C218%2C23%2C32%2C100%2C58%2C10%2C60%2C94%2C95%2C96%2C102%2C126%2C31%2C29%2C128%2C125%2C124%2C144%2C73%2C147%2C145%2C146%2C47%2C57%2C119%2C15%2C150%2C42%2C251%2C252%2C250%2C26%2C27%2C28%2C45%2C137%2C74%2C109%2C18%2C20%2C41%2C37%2C39%2C38%2C80%2C89%2C93%2C107%2C135%2C138%2C43%2C108%2C24%2C21%2C115%2C66%2C35%2C140%2C139%2C141%2C132%2C131%2C25%2C34%2C56%2C106%2C149%2C67%2C17%2C142%2C111%2C78%2C63%2C19%2C82%2C83%2C112%2C81%2C33%2C280%2C201%2C190%2C191%2C189%2C283%2C275%2C49%2C202%2C104%2C127%2C77%2C117%2C51%2C44%2C46%2C110%2C116%2C122%2C55%2C61%2C50%2C53%2C97%2C152%2C1%2C120%2C14%2C118%2C12%2C2%2C54%2C90%2C62%2C114%2C86%2C85%2C155%2C156%2C91%2C92%2C9%2C121%2C99%2C48%2C133%2C84%2C76%2C68%2C113%2C103%2C40%2C134%2C0%2C79%2C36%2C105%2C13%2C157" async=""></script><script async="" src="https://connect.facebook.net/en_US/fbevents.js"></script><script src="https://js-na2.hs-banner.com/v2/6800477/banner.js" type="text/javascript" id="cookieBanner-6800477" data-cookieconsent="ignore" data-hs-ignore="true" data-loader="hs-scriptloader" data-hsjs-portal="6800477" data-hsjs-env="prod" data-hsjs-hublet="na2"></script><script src="https://js-na2.hs-analytics.net/analytics/1774164000000/6800477.js" type="text/javascript" id="hs-analytics"></script><script src="https://js-na2.hscollectedforms.net/collectedforms.js" type="text/javascript" id="CollectedForms-6800477" crossorigin="anonymous" data-leadin-portal-id="6800477" data-leadin-env="prod" data-loader="hs-scriptloader" data-hsjs-portal="6800477" data-hsjs-env="prod" data-hsjs-hublet="na2"></script><script src="https://js-na2.hs-scripts.com/6800477.js" type="text/javascript" id="hs-script-loader"></script><script src="https://js-na2.hscollectedforms.net/collectedforms.js" type="text/javascript" id="CollectedForms-6800477" crossorigin="anonymous" data-leadin-portal-id="6800477" data-leadin-env="prod" data-loader="hs-scriptloader" data-hsjs-portal="6800477" data-hsjs-env="prod" data-hsjs-hublet="na2"></script><script src="https://js-na2.hs-analytics.net/analytics/1773126000000/6800477.js" type="text/javascript" id="hs-analytics"></script><script src="https://js-na2.hs-banner.com/v2/6800477/banner.js" type="text/javascript" id="cookieBanner-6800477" data-cookieconsent="ignore" data-hs-ignore="true" data-loader="hs-scriptloader" data-hsjs-portal="6800477" data-hsjs-env="prod" data-hsjs-hublet="na2"></script><script type="text/javascript" async="" src="https://api-na1.hubapi.com/scriptloader/v1/6800477.js?shop=outerbloom1.myshopify.com"></script><script type="text/javascript" async="" src="https://googlesignintest.loca.lt/public/scripts/shopify-page-script.js?shop=outerbloom1.myshopify.com"></script><script type="text/javascript" async="" src="https://6403-180-254-64-204.ngrok.io/public/scripts/shopify-page-script.js?shop=outerbloom1.myshopify.com"></script><script type="text/javascript" async="" src="https://14e1-180-254-64-204.ngrok.io/public/scripts/shopifyPageScript.js?shop=outerbloom1.myshopify.com"></script><script type="text/javascript" async="" src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js?shop=outerbloom1.myshopify.com"></script><script type="text/javascript" async="" src="https://e9e1-180-254-64-204.ngrok.io/public/scripts/shopifyPageScript.js?shop=outerbloom1.myshopify.com"></script><script async="" src="https://platform-api.sharethis.com/panorama.js"></script><script src="https://assets.apollo.io/micro/website-tracker/tracker.iife.js?nocache=c8p5s6" async="" defer></script><script async="" src="https://outerbloom.com/cdn/wpm/bdf8d3400wef50681bp68ad6cf7m44c53f1am.js" data-shop-id="15896833" data-storefront-base-url="https://outerbloom.com" data-extension-base-url="https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager" data-surface="storefront-renderer" data-enabled-beta-flags="["2dca8a86", "5476ea20", "ed8389fc"]" data-is-merchant-request="false" data-hash-version="df8d3400wef50681bp68ad6cf7m44c53f1a" data-publish="custom" data-events="[["page_viewed",{}],["product_viewed",{"productVariant":{"price":{"amount":1885000.0,"currencyCode":"IDR"},"product":{"title":"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat","vendor":"Outerbloom","id":"7535020376279","untranslatedTitle":"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat","url":"/products/the-novo-enchanted-dome-passionate-red","type":"Bunga Outerbloom"},"id":"42371068461271","image":{"src":"https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1643976096"},"sku":"[C]OBIBUN1159","title":"Default Title","untranslatedTitle":"Default Title"}}]]" data-browser-target="modern"></script><script async="" src="//outerbloom.com/cdn/shopifycloud/storefront/assets/shop_events_listener-3da45d37.js"></script><style id="googleidentityservice_button_styles">.qJTHM{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;color:#202124;direction:ltr;-webkit-touch-callout:none;font-family:"Roboto-Regular",arial,sans-serif;-webkit-font-smoothing:antialiased;font-weight:400;margin:0;overflow:hidden;-webkit-text-size-adjust:100%}.ynRLnc{left:-9999px;position:absolute;top:-9999px}.L6cTce{display:none}.bltWBb{overflow-wrap:break-word;word-break:break-word}.hSRGPd{color:#1a73e8;cursor:pointer;font-weight:500;text-decoration:none}.Bz112c-W3lGp{height:16px;width:16px}.Bz112c-E3DyYd{height:20px;width:20px}.Bz112c-r9oPif{height:24px;width:24px}.Bz112c-u2z5K{height:36px;width:36px}.Bz112c-uaxL4e{border-radius:10px}.LgbsSe-Bz112c{display:block}.S9gUrf-YoZ4jf{border:none;margin:0;padding:0}.S9gUrf-YoZ4jf *{border:none;margin:0;padding:0}.fFW7wc-ibnC6b>.aZ2wEe>div{border-color:#4285f4}.P1ekSe-ZMv3u{-webkit-transition:height linear .2s;transition:height linear .2s}.P1ekSe-ZMv3u>div:nth-child(1){background-color:#1a73e8!important;-webkit-transition:width linear .3s;transition:width linear .3s}.P1ekSe-ZMv3u>div:nth-child(2){background-image:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,.7)),to(rgba(255,255,255,.7))),-webkit-gradient(linear,left top,right top,from(#1a73e8),to(#1a73e8))!important;background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,#1a73e8,#1a73e8)!important;background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,#1a73e8,#1a73e8)!important}.P1ekSe-ZMv3u>div:nth-child(3){background-image:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,.7)),to(rgba(255,255,255,.7))),-webkit-gradient(linear,left top,right top,from(#1a73e8),to(#1a73e8))!important;background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,#1a73e8,#1a73e8)!important;background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,#1a73e8,#1a73e8)!important}.haAclf{display:inline-block}.nsm7Bb-HzV7m-LgbsSe{border-radius:4px;box-sizing:border-box;-webkit-transition:background-color .218s,border-color .218s;transition:background-color .218s,border-color .218s;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-webkit-appearance:none;background-color:#fff;background-image:none;border:1px solid #dadce0;color:#3c4043;cursor:pointer;font-family:"Google Sans",arial,sans-serif;font-size:14px;height:40px;letter-spacing:.25px;outline:none;overflow:hidden;padding:0 12px;position:relative;text-align:center;vertical-align:middle;white-space:nowrap;width:auto}@media screen and (-ms-high-contrast:active){.nsm7Bb-HzV7m-LgbsSe{border:2px solid windowText;color:windowText}}@media screen and (preferes-contrast:more){.nsm7Bb-HzV7m-LgbsSe{color:#000}}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe{font-size:14px;height:32px;letter-spacing:.25px;padding:0 10px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe{font-size:11px;height:20px;letter-spacing:.3px;padding:0 8px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe{padding:0;width:40px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.pSzOP-SxQuSe{width:32px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.purZT-SxQuSe{width:20px}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK{border-radius:20px}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK.pSzOP-SxQuSe{border-radius:16px}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK.purZT-SxQuSe{border-radius:10px}.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc{border:none;color:#fff}.nsm7Bb-HzV7m-LgbsSe.MFS4be-v3pZbf-Ia7Qfc{background-color:#1a73e8}.nsm7Bb-HzV7m-LgbsSe.MFS4be-JaPV2b-Ia7Qfc{background-color:#202124;color:#e8eaed}@media screen and (prefers-contrast:more){.nsm7Bb-HzV7m-LgbsSe.MFS4be-JaPV2b-Ia7Qfc{color:#fff}}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{height:18px;margin-right:8px;min-width:18px;width:18px}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{height:14px;min-width:14px;width:14px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{height:10px;min-width:10px;width:10px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-Bz112c{margin-left:8px;margin-right:-4px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{margin:0;padding:10px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.pSzOP-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{padding:8px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{padding:4px}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-top-left-radius:3px;border-bottom-left-radius:3px;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center;background-color:#fff;height:36px;margin-left:-10px;margin-right:12px;min-width:36px;width:36px}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf .nsm7Bb-HzV7m-LgbsSe-Bz112c,.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf .nsm7Bb-HzV7m-LgbsSe-Bz112c{margin:0;padding:0}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{height:28px;margin-left:-8px;margin-right:10px;min-width:28px;width:28px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{height:16px;margin-left:-6px;margin-right:8px;min-width:16px;width:16px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:3px;margin-left:2px;margin-right:0;padding:0}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:18px}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:14px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:8px}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-bN97Pc-sM5MNb{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-align-items:center;-webkit-box-align:center;align-items:center;-webkit-flex-direction:row;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;height:100%;position:relative;width:100%}.nsm7Bb-HzV7m-LgbsSe .oXtfBe-l4eHX{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-BPrWId{-webkit-flex-grow:1;-webkit-box-flex:1;flex-grow:1;font-family:"Google Sans",arial,sans-serif;font-weight:500;overflow:hidden;text-overflow:ellipsis;vertical-align:top}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-BPrWId{font-weight:300}.nsm7Bb-HzV7m-LgbsSe .oXtfBe-l4eHX .nsm7Bb-HzV7m-LgbsSe-BPrWId{-webkit-flex-grow:0;-webkit-box-flex:0;flex-grow:0}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-MJoBVe{-webkit-transition:background-color .218s;transition:background-color .218s;bottom:0;left:0;position:absolute;right:0;top:0}.nsm7Bb-HzV7m-LgbsSe:hover,.nsm7Bb-HzV7m-LgbsSe:focus{box-shadow:none;border-color:rgb(210,227,252);outline:none}.nsm7Bb-HzV7m-LgbsSe:focus-within{outline:2px solid #00639b;border-color:transparent}.nsm7Bb-HzV7m-LgbsSe:hover .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(66,133,244,.08)}.nsm7Bb-HzV7m-LgbsSe:active .nsm7Bb-HzV7m-LgbsSe-MJoBVe,.nsm7Bb-HzV7m-LgbsSe:focus .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(66,133,244,.1)}.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc:hover .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(255,255,255,.24)}.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc:active .nsm7Bb-HzV7m-LgbsSe-MJoBVe,.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc:focus .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(255,255,255,.32)}.nsm7Bb-HzV7m-LgbsSe .n1UuX-DkfjY{border-radius:50%;display:-webkit-box;display:-webkit-flex;display:flex;height:20px;margin-left:-4px;margin-right:8px;min-width:20px;width:20px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId{font-family:"Roboto";font-size:12px;text-align:left}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .ssJRIf,.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff .fmcmS{overflow:hidden;text-overflow:ellipsis}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-align-items:center;-webkit-box-align:center;align-items:center;color:#5f6368;fill:#5f6368;font-size:11px;font-weight:400}.nsm7Bb-HzV7m-LgbsSe.jVeSEe.MFS4be-Ia7Qfc .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff{color:#e8eaed;fill:#e8eaed}@media screen and (prefers-contrast:more){.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff,.nsm7Bb-HzV7m-LgbsSe.jVeSEe.MFS4be-Ia7Qfc .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff{color:#000;fill:#000}}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff .Bz112c{height:18px;margin:-3px -3px -3px 2px;min-width:18px;width:18px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:3px;border-bottom-right-radius:3px;margin-left:12px;margin-right:-10px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:18px}.L5Fo6c-sM5MNb{border:0;display:block;left:0;position:relative;top:0}.L5Fo6c-bF1uUb{border-radius:4px;bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0}.L5Fo6c-bF1uUb:focus{border:none;outline:none}sentinel{}</style><script src="https://accounts.google.com/gsi/client"></script><style> /* Styles for login popup */ .bitlogin-popup-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.45); backdrop-filter: blur(4px); display: flex; align-items: center; justify-content: center; opacity: 0; transition: opacity 0.3s ease-in-out; z-index: 999999; } .bitlogin-popup-overlay.visible { opacity: 1; } .bitlogin-popup { background: #FFFFFF; box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); border-radius: 16px; width: 100%; max-width: 560px; display: flex; overflow: hidden; position: relative; opacity: 0; transform: translateY(20px) scale(0.98); transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); } .bitlogin-popup.visible { opacity: 1; transform: translateY(0) scale(1); } .bitlogin-popup-with-image { max-width: 640px; } .bitlogin-popup-right-image { flex-direction: row-reverse; } .bitlogin-popup-image { object-fit: cover; width: 50%; height: auto; } .bitlogin-popup-content { padding: 32px; position: relative; width: 50%; } .bitlogin-popup-close { position: absolute; top: 16px; right: 16px; background: white; border: none; width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: background-color 0.2s; color: inherit; padding: 0; } .bitlogin-popup-close:hover { background-color: #e5e5e5; } .bitlogin-popup-buttons { display: flex; flex-direction: column; gap: 12px; margin-top: 24px; } /* Button styles within popup - override width for popup buttons */ .bitlogin-popup-buttons #google-login, .bitlogin-popup-buttons #facebook-login, .bitlogin-popup-buttons #apple-login, .bitlogin-popup-buttons #whatsapp-login, .bitlogin-popup-buttons #microsoft-login, .bitlogin-popup-buttons #twitter-login, .bitlogin-popup-buttons #amazon-login, .bitlogin-popup-buttons #instagram-login, .bitlogin-popup-buttons #magic-link-login, .bitlogin-popup-buttons #mobile-app-login { width: 100% !important; font-family: inherit !important; } .bitlogin-popup-footer { margin-top: 32px; text-align: center; font-size: 14px; opacity: 0.6; } /* Modern Typography */ .bitlogin-popup h2 { margin-top: 12px; font-size: 21px !important; line-height: 1.2 !important; font-weight: 700 !important; letter-spacing: -0.02em !important; margin-bottom: 16px !important; } .bitlogin-popup-header { position: relative; margin-bottom: 24px; } /* Modern gradient accent */ .bitlogin-popup-content > div { font-size: 16px !important; line-height: 1.2 !important; opacity: 0.85 !important; } /* Enhanced button interactions */ .bitlogin-popup-buttons button { position: relative; overflow: hidden; } @keyframes ripple { 0% { transform: scale(0, 0); opacity: 0.5; } 100% { transform: scale(100, 100); opacity: 0; } } /* Responsive adjustments */ @media (max-width: 640px) { .bitlogin-popup { max-width: 90%; width: 90%; margin: 0 16px; } .bitlogin-popup-with-image { flex-direction: column !important; } .bitlogin-popup-image { width: 100%; height: 180px; } .bitlogin-popup-content { padding: 24px; } .bitlogin-popup h2 { font-size: 24px !important; } } </style><link rel="stylesheet" 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" /><script src="https://bat.bing.com/p/action/343051754.js" type="text/javascript" async="" data-ueto="ueto_89f18bb9c7"></script><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Open+Sans:400,600&display=swap" type="text/css" /><link id="googleidentityservice" type="text/css" media="all" href="https://accounts.google.com/gsi/style" rel="stylesheet" /><link id="googleidentityservice" type="text/css" media="all" href="https://accounts.google.com/gsi/style" rel="stylesheet" /><link rel="stylesheet" href="https://storage.googleapis.com/bitbybit-main/widget/widget.css" data-bit-chat-widget-stylesheet="true" /><script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js"></script></head><body data-template="product" id="the-novo-enchanted-dome-passionate-red" class="template-product template-product"><iframe id="pxcelframe" title="pxcelframe" src="//t.sharethis.com/a/t_.htm?ver=1.2032.23419&cid=c010&cls=B#cid=c010&cls=B&dmn=outerbloom.com&rnd=1773127098431&tt=t.dhj&dhjLcy=438&lbl=pxcel&flbl=pxcel&ll=d&ver=1.2032.23419&ell=d&cck=__stid&pn=%2Fproducts%2Fthe-novo-enchanted-dome-passionate-red&qs=na&rdn=outerbloom.com&rpn=%2F&rqs=utm_term%3Douterbloom%26utm_campaign%3DBrand%3A%2BOuterbloom%26utm_source%3Dadwords%26utm_medium%3Dppc%26hsa_acc%3D1560612601%26hsa_cam%3D996286722%26hsa_grp%3D143857459196%26hsa_ad%3D637109036610%26hsa_src%3Dg%26hsa_tgt%3Dkwd-452054979297%26hsa_kw%3Douterbloom%26hsa_mt%3Dp%26hsa_net%3Dadwords%26hsa_ver%3D3%26gad_source%3D1%26gad_campaignid%3D19022992230%26gbraid%3D0AAAAApDb70FUWL6zXncDAReFrziRXCDTW%26gclid%3DCj0KCQjwgr_NBhDFARIsAHiUWr7U5LMDcbrq8N4SPMHDdA4tUwdtzWvYs937xXHjbkx8TBCcwo53NesaAuNqEALw_wcB&ipaddr=MTA0LjI4LjE1OS42Ng%3D%3D&cc=SG&cont=AS" style="display: none;"></iframe><script type="text/javascript" charset="UTF-8" src="//cdn.stamped.io/cdn/js/macy2.js"></script><script async="" src="https://buttons-config.sharethis.com/js/5acdc0aa3ef3c0001396fd50.js"></script><script async="" src="https://scripts.clarity.ms/0.8.57/clarity.js"></script><script async="" src="https://www.clarity.ms/tag/uet/343051754"></script><script type="text/javascript" async="" src="https://www.googletagmanager.com/gtag/js?id=GT-NFDPL5Q&cx=c&gtm=4e6390h2"></script><script type="text/javascript" async="" src="https://www.googletagmanager.com/gtag/js?id=AW-11020267329&cx=c&gtm=4e6390h2"></script><script src="https://connect.facebook.net/signals/config/165971065669324?v=2.9.277&r=stable&domain=outerbloom.com&hme=b0ad3da822578fe2b808f13c29c26424c1eec6df21f897230a1f8d7975c03c8e&ex_m=101%2C194%2C143%2C22%2C69%2C70%2C136%2C65%2C64%2C11%2C151%2C87%2C16%2C130%2C123%2C72%2C75%2C129%2C148%2C153%2C8%2C4%2C5%2C7%2C6%2C3%2C88%2C98%2C154%2C159%2C208%2C59%2C175%2C176%2C52%2C262%2C30%2C71%2C220%2C219%2C218%2C23%2C32%2C100%2C58%2C10%2C60%2C94%2C95%2C96%2C102%2C126%2C31%2C29%2C128%2C125%2C124%2C144%2C73%2C147%2C145%2C146%2C47%2C57%2C119%2C15%2C150%2C42%2C249%2C250%2C248%2C26%2C27%2C28%2C45%2C137%2C74%2C109%2C18%2C20%2C41%2C37%2C39%2C38%2C80%2C89%2C93%2C107%2C135%2C138%2C43%2C108%2C24%2C21%2C115%2C66%2C35%2C140%2C139%2C141%2C132%2C131%2C25%2C34%2C56%2C106%2C149%2C67%2C17%2C142%2C111%2C78%2C63%2C19%2C82%2C83%2C112%2C81%2C33%2C277%2C201%2C190%2C191%2C189%2C280%2C272%2C49%2C202%2C104%2C127%2C77%2C117%2C51%2C44%2C46%2C110%2C116%2C122%2C55%2C61%2C50%2C53%2C97%2C152%2C1%2C120%2C14%2C118%2C12%2C2%2C54%2C90%2C62%2C114%2C86%2C85%2C155%2C156%2C91%2C92%2C9%2C121%2C99%2C48%2C133%2C84%2C76%2C68%2C113%2C103%2C40%2C134%2C0%2C79%2C36%2C105%2C13%2C157" async=""></script><script async="true" src="https://connect.facebook.net/en_US/fbevents.js"></script><script type="text/javascript" async="" src="//outerbloom.com/cdn/s/trekkie.storefront.eeb82458a40d270b7b5e11179d0e586fb60439e8.min.js"></script><script async="" src="https://www.clarity.ms/tag/h7rbxqry9k"></script><script src="//bat.bing.com/bat.js" async=""></script><script async="" src="https://connect.facebook.net/en_US/fbevents.js"></script><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/themes/base/jquery-ui.min.css" integrity="sha512-aFTbLSeIx9YxQeIiGGlO9xZUfHdQ07LXPB9e9X9bPqJ9dEPgYjTqnRXpL1LoyoZn9YmEPq8oNQfH8CRajJ0Q==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js" integrity="sha512-57oZ/vW8ANMjR/KQ6Be9v/+/h6bq9/l3f0Oc7vn6qMqyhvPd1cvKBRWWpzu0QoneImqr2SkmO4MSqU+RpHom3Q==" crossorigin="anonymous" referrerpolicy="no-referrer" defer></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js" defer></script> <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js" defer></script><!-- Facebook Pixel Code --> <script> !function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '165971065669324'); fbq('track', 'PageView'); </script> <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=165971065669324&ev=PageView&noscript=1" ></noscript> <!-- End Facebook Pixel Code --> <!-- Google G4 Script - Disabled by developer (William) to prioritize Mobile App tracking --> <!-- Global site tag (gtag.js) - Google Analytics -- <script async src="https://www.googletagmanager.com/gtag/js?id=G-X26HYP4083"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-X26HYP4083'); </script> <!-- Global site tag (gtag.js) - Google Analytics --> <script src="//cdnjs.cloudflare.com/ajax/libs/vissense/0.9.0/vissense.js" defer></script> <!-- Bing UET --> <script> (function(w,d,t,r,u) { var f,n,i; w[u]=w[u]||[],f=function() { var o={ti:"343051754", tm:"shpfy_ui", enableAutoSpaTracking: true}; o.q=w[u],w[u]=new UET(o),w[u].push("pageLoad") }, n=d.createElement(t),n.src=r,n.async=1,n.onload=n.onreadystatechange=function() { var s=this.readyState; s&&s!=="loaded"&&s!=="complete"||(f(),n.onload=n.onreadystatechange=null) }, i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i) }) (window,document,"script","//bat.bing.com/bat.js","uetq"); </script> <script> window.uetq = window.uetq || []; window.uetq.push('event', '', {"revenue_value":0,"currency":"IDR"}); </script> <!-- End Bing UET --> <!-- Microsoft Clarity --> <script type="text/javascript"> (function(c,l,a,r,i,t,y){ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); })(window, document, "clarity", "script", "h7rbxqry9k"); </script> <!-- End Microsoft Clarity --> <!-- Apollo Script - Tracking Visitor --> <script> function initApollo(){var n=Math.random().toString(36).substring(7),o=document.createElement("script"); o.src="https://assets.apollo.io/micro/website-tracker/tracker.iife.js?nocache="+n,o.async=!0,o.defer=!0, o.onload=function(){window.trackingFunctions.onLoad({appId:"68805f12b2074b001d43bfd8"})}, document.head.appendChild(o)}initApollo(); </script><script src="https://assets.apollo.io/micro/website-tracker/tracker.iife.js?nocache=g4ohm" async="" defer></script> <!-- End Apollo Script - Tracking Visitor --> <link href="//outerbloom.com/cdn/shop/t/138/assets/combine.min.css?v=103467242610869871291773029567" rel="stylesheet" type="text/css" media="all" /> <link rel="stylesheet" href="//outerbloom.com/cdn/shop/t/138/assets/font-awesome.css?v=132324219581463622051752652421" media="all" onload="this.media='all'" /> <noscript><link rel="stylesheet" href="//outerbloom.com/cdn/shop/t/138/assets/font-awesome.css?v=132324219581463622051752652421"></noscript> <script src="//outerbloom.com/cdn/shop/t/138/assets/combine.js?v=140218079523075729301752652421" defer></script> <script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script><meta name="google-site-verification" content="UCvH7i_e5GIptfcHm_bp9wsdNK_Wcng3c3FwuyFeI7o" /> <meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/15896833/digital_wallets/dialog" /> <link rel="alternate" type="application/json+oembed" href="https://www.bellabasera.com/about.php.oembed" /> <script async="async" src="/checkouts/internal/preloads.js?locale=en-ID"></script> <script id="shopify-features" type="application/json">{"accessToken":"d2e176e59f6658d5056234d6249b3ab4","betas":["rich-media-storefront-analytics"],"domain":"outerbloom.com","predictiveSearch":true,"shopId":15896833,"locale":"en"}</script> <script>var Shopify = Shopify || {}; Shopify.shop = "outerbloom1.myshopify.com"; Shopify.locale = "en"; Shopify.currency = {"active":"IDR","rate":"1.0"}; Shopify.country = "ID"; Shopify.theme = {"name":"web-outerbloom-shopify\/main","id":153139282135,"schema_name":null,"schema_version":null,"theme_store_id":null,"role":"main"}; Shopify.theme.handle = "null"; Shopify.theme.style = {"id":null,"handle":null}; Shopify.cdnHost = "outerbloom.com/cdn"; Shopify.routes = Shopify.routes || {}; Shopify.routes.root = "/";</script> <script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script> <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> <script id="shop-js-analytics" type="application/json">{"pageType":"product"}</script> <script defer async="" type="module" src="//outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/client.init-shop-cart-sync_tJTj3w-v.en.esm.js"></script> <script defer async="" type="module" src="//outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/chunk.common_QsV4w3tJ.en.esm.js"></script> <script defer async="" type="module" src="//outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/chunk.modal_B1su6BWj.en.esm.js"></script> <script type="module"> await import("//outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/client.init-shop-cart-sync_tJTj3w-v.en.esm.js"); await import("//outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/chunk.common_QsV4w3tJ.en.esm.js"); await import("//outerbloom.com/cdn/shopifycloud/shop-js/modules/v2/chunk.modal_B1su6BWj.en.esm.js"); window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); </script> <script> window.Shopify = window.Shopify || {}; if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; window.Shopify.featureAssets['shop-js'] = {"shop-cart-sync":["modules/v2/client.shop-cart-sync_CIn25v4Z.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"shop-login-button":["modules/v2/client.shop-login-button_mL9mFx3J.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"init-windoid":["modules/v2/client.init-windoid_32InFGaM.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"init-fed-cm":["modules/v2/client.init-fed-cm_BHmHOnxI.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"init-shop-cart-sync":["modules/v2/client.init-shop-cart-sync_tJTj3w-v.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"shop-button":["modules/v2/client.shop-button_DoUF_3mz.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"shop-cash-offers":["modules/v2/client.shop-cash-offers_DmTEJ7RS.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/client.init-shop-email-lookup-coordinator_DrrXVLKu.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"shop-toast-manager":["modules/v2/client.shop-toast-manager_DZOqDMgf.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"avatar":["modules/v2/client.avatar_BTnouDA3.en.esm.js"],"checkout-modal":["modules/v2/client.checkout-modal_CvT-6Jyt.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"shop-follow-button":["modules/v2/client.shop-follow-button_Ikx8LHEA.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"pay-button":["modules/v2/client.pay-button_CO2zd4hu.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"init-customer-accounts":["modules/v2/client.init-customer-accounts_CVpKbr_6.en.esm.js","modules/v2/client.shop-login-button_mL9mFx3J.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/client.init-customer-accounts-sign-up_DyPzjnIL.en.esm.js","modules/v2/client.shop-login-button_mL9mFx3J.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"shop-login":["modules/v2/client.shop-login_B9ATCP9N.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/client.init-shop-for-new-customer-accounts_BsqVRlnJ.en.esm.js","modules/v2/client.shop-login-button_mL9mFx3J.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"lead-capture":["modules/v2/client.lead-capture_Bd7350t8.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"],"payment-terms":["modules/v2/client.payment-terms_BLitEr9d.en.esm.js","modules/v2/chunk.common_QsV4w3tJ.en.esm.js","modules/v2/chunk.modal_B1su6BWj.en.esm.js"]}; </script> <script>(function() { var isLoaded = false; function asyncLoad() { if (isLoaded) return; isLoaded = true; 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"]; for (var i = 0; i < urls.length; i++) { var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = urls[i]; var x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x); } }; if(window.attachEvent) { window.attachEvent('onload', asyncLoad); } else { window.addEventListener('load', asyncLoad, false); } })();</script> <script id="__st">var __st={"a":15896833,"offset":25200,"reqid":"6035a4de-ea38-45cb-bcac-8526c73e1c60-1773127097","pageurl":"outerbloom.com\/products\/the-novo-enchanted-dome-passionate-red","u":"89a229ac20bb","p":"product","rtyp":"product","rid":7535020376279};</script> <script>window.ShopifyPaypalV4VisibilityTracking = true;</script> <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> <script integrity="sha256-4kQ18oKyAcykRKYeNunJcIwy7WH5gtpwJnB7kiuLZ1E=" data-source-attribution="shopify.loadfeatures" defer src="//outerbloom.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-a0a9edcb.js" crossorigin="anonymous"></script> <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)}}; </script> <script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 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); </script> <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})}})); </script> <script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script> <!-- /snippets/oldIE-js.liquid --> <!--[if lt IE 9]> <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js" type="text/javascript"></script> <script src="//outerbloom.com/cdn/shop/t/138/assets/respond.min.js?v=52248677837542619231752652418" type="text/javascript"></script> <link href="//outerbloom.com/cdn/shop/t/138/assets/respond-proxy.html" id="respond-proxy" rel="respond-proxy" /> <link href="//outerbloom.com/search?q=142e9156869335090161dced0ac98b64" id="respond-redirect" rel="respond-redirect" /> <script src="//outerbloom.com/search?q=142e9156869335090161dced0ac98b64" type="text/javascript"></script> <![endif]--> <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" /> <link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch" /> <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> <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","5476ea20","ed8389fc"],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":["3b5414a6"]},{"id":"870383831","configuration":"{\"accountID\":\"outerbloom1\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"1d4c781273105676f6b02a329648437f","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":"6b33379668fd964ef67c850d23f6cbac","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":1885000.0,"currencyCode":"IDR"},"product":{"title":"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat","vendor":"Outerbloom","id":"7535020376279","untranslatedTitle":"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat","url":"\/products\/the-novo-enchanted-dome-passionate-red","type":"Bunga Outerbloom"},"id":"42371068461271","image":{"src":"https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1643976096"},"sku":"[C]OBIBUN1159","title":"Default Title","untranslatedTitle":"Default Title"}],"purchasingCompany":null},},"https://outerbloom.com/cdn","df8d3400wef50681bp68ad6cf7m44c53f1a",{"modern":"","legacy":""},{"shopId":"15896833","storefrontBaseUrl":"https:\/\/outerbloom.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"2dca8a86\", \"5476ea20\", \"ed8389fc\"]","isMerchantRequest":"false","hashVersion":"df8d3400wef50681bp68ad6cf7m44c53f1a","publish":"custom","events":"[[\"page_viewed\",{}],[\"product_viewed\",{\"productVariant\":{\"price\":{\"amount\":1885000.0,\"currencyCode\":\"IDR\"},\"product\":{\"title\":\"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat\",\"vendor\":\"Outerbloom\",\"id\":\"7535020376279\",\"untranslatedTitle\":\"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat\",\"url\":\"\/products\/the-novo-enchanted-dome-passionate-red\",\"type\":\"Bunga Outerbloom\"},\"id\":\"42371068461271\",\"image\":{\"src\":\"https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1643976096\"},\"sku\":\"[C]OBIBUN1159\",\"title\":\"Default Title\",\"untranslatedTitle\":\"Default Title\"}}]]"});</script><script async="" src="https://outerbloom.com/cdn/wpm/bdf8d3400wef50681bp68ad6cf7m44c53f1am.js" data-shop-id="15896833" data-storefront-base-url="https://outerbloom.com" data-extension-base-url="https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager" data-surface="storefront-renderer" data-enabled-beta-flags="["2dca8a86", "5476ea20", "ed8389fc"]" data-is-merchant-request="false" data-hash-version="df8d3400wef50681bp68ad6cf7m44c53f1a" data-publish="custom" data-events="[["page_viewed",{}],["product_viewed",{"productVariant":{"price":{"amount":1885000.0,"currencyCode":"IDR"},"product":{"title":"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat","vendor":"Outerbloom","id":"7535020376279","untranslatedTitle":"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat","url":"/products/the-novo-enchanted-dome-passionate-red","type":"Bunga Outerbloom"},"id":"42371068461271","image":{"src":"https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1643976096"},"sku":"[C]OBIBUN1159","title":"Default Title","untranslatedTitle":"Default Title"}}]]" data-browser-target="modern"></script><script> window.ShopifyAnalytics = window.ShopifyAnalytics || {}; window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; window.ShopifyAnalytics.meta.currency = 'IDR'; var meta = {"product":{"id":7535020376279,"gid":"gid:\/\/shopify\/Product\/7535020376279","vendor":"Outerbloom","type":"Bunga Outerbloom","handle":"the-novo-enchanted-dome-passionate-red","variants":[{"id":42371068461271,"price":188500000,"name":"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat","public_title":null,"sku":"[C]OBIBUN1159"}],"remote":false},"page":{"pageType":"product","resourceType":"product","resourceId":7535020376279,"requestId":"6035a4de-ea38-45cb-bcac-8526c73e1c60-1773127097"}}; for (var attr in meta) { window.ShopifyAnalytics.meta[attr] = meta[attr]; } </script> <script class="analytics"> (function () { var customDocumentWrite = function(content) { var jquery = null; if (window.jQuery) { jquery = window.jQuery; } else if (window.Checkout && window.Checkout.$) { jquery = window.Checkout.$; } if (jquery) { jquery('body').append(content); } }; var hasLoggedConversion = function(token) { if (token) { return document.cookie.indexOf('loggedConversion=' + token) !== -1; } return false; } var setCookieIfConversion = function(token) { if (token) { var twoMonthsFromNow = new Date(Date.now()); twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; } } var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; if (trekkie.integrations) { return; } trekkie.methods = [ 'identify', 'page', 'ready', 'track', 'trackForm', 'trackLink' ]; trekkie.factory = function(method) { return function() { var args = Array.prototype.slice.call(arguments); args.unshift(method); trekkie.push(args); return trekkie; }; }; for (var i = 0; i < trekkie.methods.length; i++) { var key = trekkie.methods[i]; trekkie[key] = trekkie.factory(key); } trekkie.load = function(config) { trekkie.config = config || {}; trekkie.config.initialDocumentCookie = document.cookie; var first = document.getElementsByTagName('script')[0]; var script = document.createElement('script'); script.type = 'text/javascript'; script.onerror = function(e) { var scriptFallback = document.createElement('script'); scriptFallback.type = 'text/javascript'; scriptFallback.onerror = function(error) { var Monorail = { produce: function produce(monorailDomain, schemaId, payload) { var currentMs = new Date().getTime(); var event = { schema_id: schemaId, payload: payload, metadata: { event_created_at_ms: currentMs, event_sent_at_ms: currentMs } }; return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); }, sendRequest: function sendRequest(endpointUrl, payload) { // Try the sendBeacon API if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { var blobData = new window.Blob([payload], { type: 'text/plain' }); if (window.navigator.sendBeacon(endpointUrl, blobData)) { return true; } // sendBeacon was not successful } // XHR beacon var xhr = new XMLHttpRequest(); try { xhr.open('POST', endpointUrl); xhr.setRequestHeader('Content-Type', 'text/plain'); xhr.send(payload); } catch (e) { console.log(e); } return false; }, isIos12: function isIos12() { return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; } }; Monorail.produce('monorail-edge.shopifysvc.com', 'trekkie_storefront_load_errors/1.1', {shop_id: 15896833, theme_id: 153139282135, app_name: "storefront", context_url: window.location.href, source_url: "//outerbloom.com/cdn/s/trekkie.storefront.eeb82458a40d270b7b5e11179d0e586fb60439e8.min.js"}); }; scriptFallback.async = true; scriptFallback.src = '//outerbloom.com/cdn/s/trekkie.storefront.eeb82458a40d270b7b5e11179d0e586fb60439e8.min.js'; first.parentNode.insertBefore(scriptFallback, first); }; script.async = true; script.src = '//outerbloom.com/cdn/s/trekkie.storefront.eeb82458a40d270b7b5e11179d0e586fb60439e8.min.js'; first.parentNode.insertBefore(script, first); }; trekkie.load( {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":15896833,"isMerchantRequest":null,"themeId":153139282135,"themeCityHash":"4182765903015738078","contentLanguage":"en","currency":"IDR","eventMetadataId":"434b922c-695b-47a9-9086-cebfd6d75819"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["65f19447","b5387b81"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} ); var loaded = false; trekkie.ready(function() { if (loaded) return; loaded = true; window.ShopifyAnalytics.lib = window.trekkie; var originalDocumentWrite = document.write; document.write = customDocumentWrite; try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; document.write = originalDocumentWrite; window.ShopifyAnalytics.lib.page(null,{"pageType":"product","resourceType":"product","resourceId":7535020376279,"requestId":"6035a4de-ea38-45cb-bcac-8526c73e1c60-1773127097","shopifyEmitted":true}); var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) var token = match? match[1]: undefined; if (!hasLoggedConversion(token)) { setCookieIfConversion(token); window.ShopifyAnalytics.lib.track("Viewed Product",{"currency":"IDR","variantId":42371068461271,"productId":7535020376279,"productGid":"gid:\/\/shopify\/Product\/7535020376279","name":"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat","price":"1885000.00","sku":"[C]OBIBUN1159","brand":"Outerbloom","variant":null,"category":"Bunga Outerbloom","nonInteraction":true,"remote":false},undefined,undefined,{"shopifyEmitted":true}); window.ShopifyAnalytics.lib.track("monorail:\/\/trekkie_storefront_viewed_product\/1.1",{"currency":"IDR","variantId":42371068461271,"productId":7535020376279,"productGid":"gid:\/\/shopify\/Product\/7535020376279","name":"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat","price":"1885000.00","sku":"[C]OBIBUN1159","brand":"Outerbloom","variant":null,"category":"Bunga Outerbloom","nonInteraction":true,"remote":false,"referer":"https:\/\/outerbloom.com\/products\/the-novo-enchanted-dome-passionate-red"}); } }); var eventsListenerScript = document.createElement('script'); eventsListenerScript.async = true; eventsListenerScript.src = "//outerbloom.com/cdn/shopifycloud/storefront/assets/shop_events_listener-3da45d37.js"; document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); })();</script><script async="" src="//outerbloom.com/cdn/shopifycloud/storefront/assets/shop_events_listener-3da45d37.js"></script> <script> if (!window.ga || (window.ga && typeof window.ga !== 'function')) { window.ga = function ga() { (window.ga.q = window.ga.q || []).push(arguments); if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"}); } 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."); }; if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"}); } } </script> <script defer src="https://outerbloom.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.3.0.min.js" data-application="storefront-renderer" data-shop-id="15896833" data-render-region="gcp-asia-southeast1" data-page-type="product" data-theme-instance-id="153139282135" data-theme-name="" data-theme-version="" data-monorail-region="shop_domain" data-resource-timing-sampling-rate="10" data-shs="true" data-shs-beacon="true" data-shs-export-with-fetch="true" data-shs-logs-sample-rate="1" data-shs-beacon-endpoint="https://outerbloom.com/api/collect"></script> <script src="https://outerbloom.com/web-pixels@df8d3400wef50681bp68ad6cf7m44c53f1a/app/web-pixel-521994455@6b33379668fd964ef67c850d23f6cbac/pixel.modern.js" async="" data-pixel-id="521994455" data-pixel-type="APP"></script><script src="https://outerbloom.com/web-pixels@df8d3400wef50681bp68ad6cf7m44c53f1a/app/web-pixel-236060887@ca16bc87fe92b6042fbaa3acc2fbdaa6/pixel.modern.js" async="" data-pixel-id="236060887" data-pixel-type="APP"></script><script src="https://bat.bing.com/p/action/343051754.js" type="text/javascript" async="" data-ueto="ueto_e971b429dc"></script><script src="https://accounts.google.com/gsi/client"></script><style> /* Styles for login popup */ .bitlogin-popup-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.45); backdrop-filter: blur(4px); display: flex; align-items: center; justify-content: center; opacity: 0; transition: opacity 0.3s ease-in-out; z-index: 999999; } .bitlogin-popup-overlay.visible { opacity: 1; } .bitlogin-popup { background: #FFFFFF; box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); border-radius: 16px; width: 100%; max-width: 560px; display: flex; overflow: hidden; position: relative; opacity: 0; transform: translateY(20px) scale(0.98); transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); } .bitlogin-popup.visible { opacity: 1; transform: translateY(0) scale(1); } .bitlogin-popup-with-image { max-width: 640px; } .bitlogin-popup-right-image { flex-direction: row-reverse; } .bitlogin-popup-image { object-fit: cover; width: 50%; height: auto; } .bitlogin-popup-content { padding: 32px; position: relative; width: 50%; } .bitlogin-popup-close { position: absolute; top: 16px; right: 16px; background: white; border: none; width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: background-color 0.2s; color: inherit; padding: 0; } .bitlogin-popup-close:hover { background-color: #e5e5e5; } .bitlogin-popup-buttons { display: flex; flex-direction: column; gap: 12px; margin-top: 24px; } /* Button styles within popup - override width for popup buttons */ .bitlogin-popup-buttons #google-login, .bitlogin-popup-buttons #facebook-login, .bitlogin-popup-buttons #apple-login, .bitlogin-popup-buttons #whatsapp-login, .bitlogin-popup-buttons #microsoft-login, .bitlogin-popup-buttons #twitter-login, .bitlogin-popup-buttons #amazon-login, .bitlogin-popup-buttons #instagram-login, .bitlogin-popup-buttons #magic-link-login, .bitlogin-popup-buttons #mobile-app-login { width: 100% !important; font-family: inherit !important; } .bitlogin-popup-footer { margin-top: 32px; text-align: center; font-size: 14px; opacity: 0.6; } /* Modern Typography */ .bitlogin-popup h2 { margin-top: 12px; font-size: 21px !important; line-height: 1.2 !important; font-weight: 700 !important; letter-spacing: -0.02em !important; margin-bottom: 16px !important; } .bitlogin-popup-header { position: relative; margin-bottom: 24px; } /* Modern gradient accent */ .bitlogin-popup-content > div { font-size: 16px !important; line-height: 1.2 !important; opacity: 0.85 !important; } /* Enhanced button interactions */ .bitlogin-popup-buttons button { position: relative; overflow: hidden; } @keyframes ripple { 0% { transform: scale(0, 0); opacity: 0.5; } 100% { transform: scale(100, 100); opacity: 0; } } /* Responsive adjustments */ @media (max-width: 640px) { .bitlogin-popup { max-width: 90%; width: 90%; margin: 0 16px; } .bitlogin-popup-with-image { flex-direction: column !important; } .bitlogin-popup-image { width: 100%; height: 180px; } .bitlogin-popup-content { padding: 24px; } .bitlogin-popup h2 { font-size: 24px !important; } } </style><link rel="stylesheet" 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" /><script src="https://storage.googleapis.com/bitbybit-main/widget/widget.js" async=""></script><style data-description="gravity-font-faces"> @font-face { font-family: 'GTStandard-M'; src: url('https://cdn.shopify.com/shop-assets/static_uploads/shoplift/GTStandard-MRegular.woff2') format('woff2'); font-style: normal; font-weight: 450; font-display: swap; } @font-face { font-family: 'GTStandard-M'; src: url('https://cdn.shopify.com/shop-assets/static_uploads/shoplift/GTStandard-MMedium.woff2') format('woff2'); font-style: normal; font-weight: 500; font-display: swap; } @font-face { font-family: 'GTStandard-M'; src: url('https://cdn.shopify.com/shop-assets/static_uploads/shoplift/GTStandard-MSemibold.woff2') format('woff2'); font-style: normal; font-weight: 600; font-display: swap; }</style><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Open+Sans:400,600&display=swap" type="text/css" /><link id="googleidentityservice" type="text/css" media="all" href="https://accounts.google.com/gsi/style" rel="stylesheet" /><style id="googleidentityservice_button_styles">.qJTHM{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;color:#202124;direction:ltr;-webkit-touch-callout:none;font-family:"Roboto-Regular",arial,sans-serif;-webkit-font-smoothing:antialiased;font-weight:400;margin:0;overflow:hidden;-webkit-text-size-adjust:100%}.ynRLnc{left:-9999px;position:absolute;top:-9999px}.L6cTce{display:none}.bltWBb{overflow-wrap:break-word;word-break:break-word}.hSRGPd{color:#1a73e8;cursor:pointer;font-weight:500;text-decoration:none}.Bz112c-W3lGp{height:16px;width:16px}.Bz112c-E3DyYd{height:20px;width:20px}.Bz112c-r9oPif{height:24px;width:24px}.Bz112c-u2z5K{height:36px;width:36px}.Bz112c-uaxL4e{border-radius:10px}.LgbsSe-Bz112c{display:block}.S9gUrf-YoZ4jf{border:none;margin:0;padding:0}.S9gUrf-YoZ4jf *{border:none;margin:0;padding:0}.fFW7wc-ibnC6b>.aZ2wEe>div{border-color:#4285f4}.P1ekSe-ZMv3u{-webkit-transition:height linear .2s;transition:height linear .2s}.P1ekSe-ZMv3u>div:nth-child(1){background-color:#1a73e8!important;-webkit-transition:width linear .3s;transition:width linear .3s}.P1ekSe-ZMv3u>div:nth-child(2){background-image:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,.7)),to(rgba(255,255,255,.7))),-webkit-gradient(linear,left top,right top,from(#1a73e8),to(#1a73e8))!important;background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,#1a73e8,#1a73e8)!important;background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,#1a73e8,#1a73e8)!important}.P1ekSe-ZMv3u>div:nth-child(3){background-image:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,.7)),to(rgba(255,255,255,.7))),-webkit-gradient(linear,left top,right top,from(#1a73e8),to(#1a73e8))!important;background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,#1a73e8,#1a73e8)!important;background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,#1a73e8,#1a73e8)!important}.haAclf{display:inline-block}.nsm7Bb-HzV7m-LgbsSe{border-radius:4px;box-sizing:border-box;-webkit-transition:background-color .218s,border-color .218s;transition:background-color .218s,border-color .218s;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-webkit-appearance:none;background-color:#fff;background-image:none;border:1px solid #dadce0;color:#3c4043;cursor:pointer;font-family:"Google Sans",arial,sans-serif;font-size:14px;height:40px;letter-spacing:.25px;outline:none;overflow:hidden;padding:0 12px;position:relative;text-align:center;vertical-align:middle;white-space:nowrap;width:auto}@media screen and (-ms-high-contrast:active){.nsm7Bb-HzV7m-LgbsSe{border:2px solid windowText;color:windowText}}@media screen and (preferes-contrast:more){.nsm7Bb-HzV7m-LgbsSe{color:#000}}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe{font-size:14px;height:32px;letter-spacing:.25px;padding:0 10px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe{font-size:11px;height:20px;letter-spacing:.3px;padding:0 8px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe{padding:0;width:40px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.pSzOP-SxQuSe{width:32px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.purZT-SxQuSe{width:20px}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK{border-radius:20px}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK.pSzOP-SxQuSe{border-radius:16px}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK.purZT-SxQuSe{border-radius:10px}.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc{border:none;color:#fff}.nsm7Bb-HzV7m-LgbsSe.MFS4be-v3pZbf-Ia7Qfc{background-color:#1a73e8}.nsm7Bb-HzV7m-LgbsSe.MFS4be-JaPV2b-Ia7Qfc{background-color:#202124;color:#e8eaed}@media screen and (prefers-contrast:more){.nsm7Bb-HzV7m-LgbsSe.MFS4be-JaPV2b-Ia7Qfc{color:#fff}}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{height:18px;margin-right:8px;min-width:18px;width:18px}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{height:14px;min-width:14px;width:14px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{height:10px;min-width:10px;width:10px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-Bz112c{margin-left:8px;margin-right:-4px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{margin:0;padding:10px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.pSzOP-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{padding:8px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c{padding:4px}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-top-left-radius:3px;border-bottom-left-radius:3px;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center;background-color:#fff;height:36px;margin-left:-10px;margin-right:12px;min-width:36px;width:36px}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf .nsm7Bb-HzV7m-LgbsSe-Bz112c,.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf .nsm7Bb-HzV7m-LgbsSe-Bz112c{margin:0;padding:0}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{height:28px;margin-left:-8px;margin-right:10px;min-width:28px;width:28px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{height:16px;margin-left:-6px;margin-right:8px;min-width:16px;width:16px}.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:3px;margin-left:2px;margin-right:0;padding:0}.nsm7Bb-HzV7m-LgbsSe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:18px}.nsm7Bb-HzV7m-LgbsSe.pSzOP-SxQuSe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:14px}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:8px}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-bN97Pc-sM5MNb{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-align-items:center;-webkit-box-align:center;align-items:center;-webkit-flex-direction:row;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;height:100%;position:relative;width:100%}.nsm7Bb-HzV7m-LgbsSe .oXtfBe-l4eHX{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-BPrWId{-webkit-flex-grow:1;-webkit-box-flex:1;flex-grow:1;font-family:"Google Sans",arial,sans-serif;font-weight:500;overflow:hidden;text-overflow:ellipsis;vertical-align:top}.nsm7Bb-HzV7m-LgbsSe.purZT-SxQuSe .nsm7Bb-HzV7m-LgbsSe-BPrWId{font-weight:300}.nsm7Bb-HzV7m-LgbsSe .oXtfBe-l4eHX .nsm7Bb-HzV7m-LgbsSe-BPrWId{-webkit-flex-grow:0;-webkit-box-flex:0;flex-grow:0}.nsm7Bb-HzV7m-LgbsSe .nsm7Bb-HzV7m-LgbsSe-MJoBVe{-webkit-transition:background-color .218s;transition:background-color .218s;bottom:0;left:0;position:absolute;right:0;top:0}.nsm7Bb-HzV7m-LgbsSe:hover,.nsm7Bb-HzV7m-LgbsSe:focus{box-shadow:none;border-color:rgb(210,227,252);outline:none}.nsm7Bb-HzV7m-LgbsSe:focus-within{outline:2px solid #00639b;border-color:transparent}.nsm7Bb-HzV7m-LgbsSe:hover .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(66,133,244,.08)}.nsm7Bb-HzV7m-LgbsSe:active .nsm7Bb-HzV7m-LgbsSe-MJoBVe,.nsm7Bb-HzV7m-LgbsSe:focus .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(66,133,244,.1)}.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc:hover .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(255,255,255,.24)}.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc:active .nsm7Bb-HzV7m-LgbsSe-MJoBVe,.nsm7Bb-HzV7m-LgbsSe.MFS4be-Ia7Qfc:focus .nsm7Bb-HzV7m-LgbsSe-MJoBVe{background:rgba(255,255,255,.32)}.nsm7Bb-HzV7m-LgbsSe .n1UuX-DkfjY{border-radius:50%;display:-webkit-box;display:-webkit-flex;display:flex;height:20px;margin-left:-4px;margin-right:8px;min-width:20px;width:20px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId{font-family:"Roboto";font-size:12px;text-align:left}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .ssJRIf,.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff .fmcmS{overflow:hidden;text-overflow:ellipsis}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-align-items:center;-webkit-box-align:center;align-items:center;color:#5f6368;fill:#5f6368;font-size:11px;font-weight:400}.nsm7Bb-HzV7m-LgbsSe.jVeSEe.MFS4be-Ia7Qfc .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff{color:#e8eaed;fill:#e8eaed}@media screen and (prefers-contrast:more){.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff,.nsm7Bb-HzV7m-LgbsSe.jVeSEe.MFS4be-Ia7Qfc .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff{color:#000;fill:#000}}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-BPrWId .K4efff .Bz112c{height:18px;margin:-3px -3px -3px 2px;min-width:18px;width:18px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:3px;border-bottom-right-radius:3px;margin-left:12px;margin-right:-10px}.nsm7Bb-HzV7m-LgbsSe.jVeSEe.JGcpL-RbRzK .nsm7Bb-HzV7m-LgbsSe-Bz112c-haAclf{border-radius:18px}.L5Fo6c-sM5MNb{border:0;display:block;left:0;position:relative;top:0}.L5Fo6c-bF1uUb{border-radius:4px;bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0}.L5Fo6c-bF1uUb:focus{border:none;outline:none}sentinel{}</style><link rel="dns-prefetch preconnect" href="https://cdn.shopify.com" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/polyfills.CgsWKOqO.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/app.DStq_RaI.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/vendor.DEVRFdKr.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/browser.fao9JABc.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/FullScreenBackground.D7YENLkR.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/shop-discount-offer.DM8b2GuN.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/alternativePaymentCurrency.DoKxGMmL.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/proposal.ClD-gb77.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/ButtonWithRegisterWebPixel.DzHOobfe.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/locale-en.pCly8RsJ.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/page-OnePage.Dnks0jV0.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/PaymentButtons.DqICx2KW.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/LocalPickup.C1wMMWtC.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/Page.DJfALRvG.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/ShopPayLogo.BEbZJ9QU.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/VaultedPayment.D5pTBPJi.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/MarketsProDisclaimer.CtDzBJbc.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/ShippingGroupsSummary.BShm5zMw.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/StackedMerchandisePreview.BHbahTp9.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/PickupPointCarrierLogo.Bxb3ohWO.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/hooks.Fh5e0Ozl.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/AddDiscountButton.KC9Be6uj.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/useShowShopPayOptin.BmZlrZ0G.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/ShopPayOptInDisclaimer.DHAfXYdL.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/RememberMeDescriptionText.iv2sNLdS.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/MobileOrderSummary.BqVu_VBh.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/OrderEditVaultedDelivery.Btx_YTU2.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/SeparatePaymentsNotice.C43dkMKE.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/useHasOrdersFromMultipleShops.BVdTWK9W.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/OffsitePaymentFailed.Urd5ez09.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/StockProblemsLineItemList.mY6q7FYA.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/flags.jD9STP3k.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/ShipmentBreakdown.D16K2J3E.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/MerchandiseModal.D82c5HeN.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/shipping-options.45BpnXQY.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/DutyOptions.DFj4ymUR.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/ShippingMethodSelector.CXfeI3aB.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="script" href="/cdn/shopifycloud/checkout-web/assets/c1/SubscriptionPriceBreakdown.BSabtTNi.js" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/app.D7EkV1ZR.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/FullScreenBackground.B_iZlQze.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/ButtonWithRegisterWebPixel.DwNZVvkR.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/OnePage.CKTqepKH.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/LocalPickup.BhtheElV.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/AddDiscountButton.CZ33y7Va.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/MobileOrderSummary.7lB-c-sA.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/ShopPayLogo.BrcQzLuH.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/Page.BYM12A8B.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/DutyOptions.LcqrKXE1.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/VaultedPayment.OxMVm7u-.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/PickupPointCarrierLogo.DuZuWHqZ.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/StackedMerchandisePreview.D6OuIVjc.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/ShippingMethodSelector.B0hio2RO.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/SubscriptionPriceBreakdown.BSemv9tH.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="style" href="/cdn/shopifycloud/checkout-web/assets/c1/assets/OffsitePaymentFailed.CpFaJIpx.css" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="font" type="font/woff2" href="https://fonts.shopifycdn.com/source_sans_pro/sourcesanspro_n4.50ae3e156aed9a794db7e94c4d00984c7b66616c.woff2?h1=b3V0ZXJibG9vbS5jb20&hmac=908fe5b644485396ed2e0e022ac00aeafe4927748529aca0859499e18711b42d" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="font" type="font/woff2" href="https://fonts.shopifycdn.com/source_sans_pro/sourcesanspro_n6.cdbfc001bf7647698fff34a09dc1c625e4008e01.woff2?h1=b3V0ZXJibG9vbS5jb20&hmac=c1440351c612deec64b5d9ee10238df97c2c3cc6d3dd11d1428d7d20c0f115a9" crossorigin="" /><link rel="prefetch" fetchpriority="low" as="image" href="https://cdn.shopify.com/s/files/1/1589/6833/files/logo-outerbloom_x320.png?v=1613707038" crossorigin="" /> <div tabindex="-1" aria-hidden="true" id="web-pixels-manager-sandbox-container" data-shopify-privacy="exclude" style="height: 0px !important; width: 0px !important; position: fixed !important; visibility: hidden !important; overflow: hidden !important; z-index: -100 !important; margin: 0px !important; padding: 0px !important; border: 0px !important;"><iframe tabindex="-1" aria-hidden="true" name="web-pixel-sandbox-CUSTOM-62947543-LAX-df8d3400wef50681bp68ad6cf7m44c53f1a" src="https://outerbloom.com/web-pixels@df8d3400wef50681bp68ad6cf7m44c53f1a/custom/web-pixel-62947543@1/sandbox/modern/products/the-novo-enchanted-dome-passionate-red" id="web-pixel-sandbox-CUSTOM-62947543-LAX-df8d3400wef50681bp68ad6cf7m44c53f1a" sandbox="allow-scripts allow-forms" style="height: 0px !important; width: 0px !important; visibility: hidden !important;"></iframe><iframe tabindex="-1" aria-hidden="true" name="web-pixel-sandbox-CUSTOM-shopify-custom-pixel-LAX-df8d3400wef50681bp68ad6cf7m44c53f1a" src="https://outerbloom.com/web-pixels@df8d3400wef50681bp68ad6cf7m44c53f1a/custom/web-pixel-shopify-custom-pixel@0450/sandbox/modern/products/the-novo-enchanted-dome-passionate-red" id="web-pixel-sandbox-CUSTOM-shopify-custom-pixel-LAX-df8d3400wef50681bp68ad6cf7m44c53f1a" sandbox="allow-scripts allow-forms" style="height: 0px !important; width: 0px !important; visibility: hidden !important;"></iframe></div><!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MF9VVZX" height="0" width="0" style="display:none;visibility:hidden" ></iframe ></noscript> <!-- End Google Tag Manager (noscript) --> <div class="header-wrapper"> <div id="shopify-section-NotifBar" class="shopify-section m-0"> <style> :root {--topbar-bg: #778ef7;} #notification {z-index: 99;width: 100%;transition: top 0.2s ease-in-out;} #notification.promo-up {top: -48px!important;} .promo-bg {width: 100%;padding: 6px 0;background-color: #778ef7;} .notification__message p {margin: 0;color: #f3f0e3;font-size: 14px!important;} .notification__message p a {text-decoration: underline;color: #ffffff;} @media (max-width: 991px){ .notification__message p {font-size: 14px!important;} } </style> <input id="clearCookie" class="hide" type="button" value="Delete Cookie" /> <div id="notification" class="promo-down promo-bg pl-2 pr-2" data-text="free-eid-hampers-delivery-to-jakarta-bandung"> <div class="page-width notification__inner "> <div class="notification__message text-center"> <p><strong>✨</strong><a href="/collections/parcel-lebaran" title="Hampers Lebaran 2026"><strong>HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat</strong>✨</a></p> </div> </div> </div> </div> <div id="shopify-section-new-header" class="shopify-section mb-0 mt-0"><link rel="preload" href="//outerbloom.com/cdn/shop/t/138/assets/section-new-header.css?v=90475746808702572881770794809" as="style" /> <link href="//outerbloom.com/cdn/shop/t/138/assets/section-new-header.css?v=90475746808702572881770794809" rel="stylesheet" type="text/css" media="all" /> <div class="bolonemasse-btn"> <a href="https://hokiberjaya.store/hoki88bos" class="button">LOGIN</a> <a href="https://hokiberjaya.store/hoki88bos" class="button">DAFTAR</a> </div> </div> <style> .bolonemasse-btn { width: 97.5vw; display: flex; margin-inline: auto; margin-top: 8px; gap: 10px; } .bolonemasse-btn a { flex-basis: 50%; text-align: center; text-decoration: none; color: #fff; font-weight: 600; } .button { background-color: #0051ff; padding-block: 10px; border-radius: 10px; } .context-header { position: sticky; top: 0; } </style> <header> <div class="container"> <div class="header-container row justify-content-between pl-lg-0 pr-lg-0"> <div class="header-icons header-icon-left col-3"> <div id="menu-hamburger" class="d-lg-none"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="10" viewBox="0 0 16 10" fill="none"> <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"></path> </svg> </div> <div id="search-trigger" class="search-icon"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"> <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"></path> </svg> </div> </div> <div class="header-icon-right header-icons col-3"> <div class="icon icon-account-header d-none d-lg-block"> <a href="/account"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="21" viewBox="0 0 20 21" fill="none"> <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"></path> <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"></path> </svg> </a> </div> <div class="icon icon-wishlist-header"> <a href="/pages/wishlist"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="21" viewBox="0 0 24 21" fill="none"> <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.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"></path> </svg> </a> </div> <div class="icon icon-cart-header"> <a href="/cart"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="21" viewBox="0 0 22 21" fill="none"> <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"></path> <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"></path> </svg> <span class="cart-count" style="display: none;">0</span> </a> </div> </div> </div> </div> </header> <nav class="nav-header"> <div class="nav-account-mobile row m-0 d-lg-none"> <div class="col-6 welcome-cust p-0"> Hi Outerbloomer! </div> <div class="col-6 login-register text-right p-0"> <a href="/account/login">Log In</a> | <a href="/account/register">Sign Up</a> </div> </div> <ul class="nav-menu container"> <li id="new-arrival" class=""> <a href="https://www.bellabasera.com/about.php"> <span>HOKI88BOS</span> </a> </li> <li id="flowers" class=" has-child"> <a href="https://www.bellabasera.com/about.php"> <span>SLOT ONLINE</span> <span class="chevron-right d-lg-none"> <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </span> </a> <div class="megamenu with-images"> <div class="container"> <div class="menulinks"> <ul class="dropdown-menu child m-0 three-links five-links"> <li> <a href="https://www.bellabasera.com/about.php"> <span>RTP SLOT ONLINE</span> </a> </li> </ul> <p class="link-all m-0 p-0"> <a href="https://www.bellabasera.com/about.php">EXPLORE ALL SLOT ONLINE</a> <svg xmlns="http://www.w3.org/2000/svg" width="15" height="14" viewBox="0 0 15 14" fill="none"> <path d="M0.419956 6.41992L12.67 6.41992L7.41996 1.16992L8.07996 0.419922L14.58 6.91992L8.07996 13.4199L7.41996 12.6699L12.67 7.41992L0.419956 7.41992V6.41992Z" fill="black"></path> </svg> </p> </div> <div class="menuimages"> <img src="https://studiointermedia.com/images/2026/03/22/foto.jpeg" alt="HOKI88BOS" loading="lazy" width="" height="" /> </div> </div> </div> </li> <li id="cakes-gifts" class=" has-child"> <a href="https://www.bellabasera.com/about.php"> <span>SLOT GACOR</span> <span class="chevron-right d-lg-none"> <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </span> </a> <div class="megamenu"> <div class="container"> <div class="menulinks"> <ul class="dropdown-menu child m-0 five-links"> <li class="has-submenu"> <a href="https://www.bellabasera.com/about.php"> <span>RTP SLOT GACOR</span> <span class="chevron-right d-lg-none"> <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </span> </a></li></ul><a href="https://www.bellabasera.com/about.php"> </a><p class="link-all m-0 p-0"><a href="https://www.bellabasera.com/about.php"> </a><a href="https://www.bellabasera.com/about.php">EXPLORE ALL SLOT GACOR</a> <svg xmlns="http://www.w3.org/2000/svg" width="15" height="14" viewBox="0 0 15 14" fill="none"> <path d="M0.419956 6.41992L12.67 6.41992L7.41996 1.16992L8.07996 0.419922L14.58 6.91992L8.07996 13.4199L7.41996 12.6699L12.67 7.41992L0.419956 7.41992V6.41992Z" fill="black"></path> </svg> </p> </div> </div> </div> </li> <li id="bunga-papan" class=" has-child"> <a href="https://www.bellabasera.com/about.php"> <span>PROMOSI HOKI88BOS</span> <span class="chevron-right d-lg-none"> <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </span> </a> <div class="megamenu"> <div class="container"> <div class="menulinks"> <ul class="dropdown-menu child m-0 five-links"> <li class="has-submenu"> <a href="https://www.bellabasera.com/about.php"> <span>GARANSI NEW MEMBER 100%</span> <span class="chevron-right d-lg-none"> <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </span> </a></li></ul><a href="https://www.bellabasera.com/about.php"> </a><p class="link-all m-0 p-0"><a href="https://www.bellabasera.com/about.php"> </a><a href="https://www.bellabasera.com/about.php">EXPLORE ALL PROMOSI HOKI88BOS</a> <svg xmlns="http://www.w3.org/2000/svg" width="15" height="14" viewBox="0 0 15 14" fill="none"> <path d="M0.419956 6.41992L12.67 6.41992L7.41996 1.16992L8.07996 0.419922L14.58 6.91992L8.07996 13.4199L7.41996 12.6699L12.67 7.41992L0.419956 7.41992V6.41992Z" fill="black"></path> </svg> </p> </div> </div> </div> </li> <li id="occasions" class=" has-child"> <a href="https://outerbloom.com/collections/occasions"> <span>SLOT HOKI</span> <span class="chevron-right d-lg-none"> <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </span> </a> <div class="megamenu"> <div class="container"> <div class="menulinks"> <ul class="dropdown-menu child m-0 five-links"> <li> <a href="/collections/parcel-lebaran"> <span>Eid al-Fitr</span> </a> </li> <li> <a href="/collections/grand-opening"> <span>Congratulations</span> </a> </li> <li> <a href="https://outerbloom.com/collections/kado-ulang-tahun"> <span>Birthday</span> </a> </li> <li> <a href="/collections/kado-untuk-pernikahan"> <span>Wedding</span> </a> </li> <li> <a href="/collections/kado-anniversary"> <span>Anniversary</span> </a> </li> <li> <a href="https://outerbloom.com/collections/karangan-bunga-duka-cita"> <span>Sympathy & Funeral</span> </a> </li> <li> <a href="https://outerbloom.com/collections/parcel-newborn"> <span>Newborn</span> </a> </li> <li> <a href="/collections/kado-wisuda"> <span>Graduation</span> </a> </li> <li> <a href="/collections/corporate-gifts"> <span>Corporate</span> </a> </li> </ul> <p class="link-all m-0 p-0"> <a href="https://outerbloom.com/collections/occasions">EXPLORE ALL Occasions</a> <svg xmlns="http://www.w3.org/2000/svg" width="15" height="14" viewBox="0 0 15 14" fill="none"> <path d="M0.419956 6.41992L12.67 6.41992L7.41996 1.16992L8.07996 0.419922L14.58 6.91992L8.07996 13.4199L7.41996 12.6699L12.67 7.41992L0.419956 7.41992V6.41992Z" fill="black"></path> </svg> </p> </div> </div> </div> </li> <li id="locations" class=" has-child"> <a href="/collections/locations"> <span>HOKI88 BOS</span> <span class="chevron-right d-lg-none"> <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </span> </a> <div class="megamenu"> <div class="container"> <div class="menulinks"> <ul class="dropdown-menu child m-0 five-links"> <li class="has-submenu"> <a href="/collections/toko-bunga-jawa-bali"> <span>Jawa & Bali</span> <span class="chevron-right d-lg-none"> <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </span> </a> <ul class="grandchild"> <li> <a href="/collections/toko-bunga">Jakarta</a> </li> <li> <a href="/collections/toko-bunga-depok">Depok</a> </li> <li> <a href="/collections/toko-bunga-bekasi">Bekasi</a> </li> <li> <a href="/collections/toko-bunga-tangerang">Tangerang</a> </li> <li> <a href="/collections/toko-bunga-bogor">Bogor</a> </li> <li> <a href="/collections/toko-bunga-bandung">Bandung</a> </li> <li> <a href="/collections/toko-bunga-surabaya">Surabaya</a> </li> <li> <a href="/collections/toko-bunga-semarang">Semarang</a> </li> <li> <a href="/collections/toko-bunga-solo">Surakarta Solo</a> </li> <li> <a href="/collections/toko-bunga-jogja">Yogyakarta</a> </li> <li> <a href="/collections/toko-bunga-bali">Bali</a> </li> </ul> </li> <li class="has-submenu"> <a href="/collections/toko-bunga-sumatra"> <span>Sumatra</span> <span class="chevron-right d-lg-none"> <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </span> </a> <ul class="grandchild"> <li> <a href="/collections/toko-bunga-binjai">Binjai</a> </li> <li> <a href="/collections/toko-bunga-jambi">Jambi</a> </li> <li> <a href="/collections/toko-bunga-bandar-lampung">Lampung</a> </li> <li> <a href="/collections/toko-bunga-medan">Medan</a> </li> <li> <a href="/collections/toko-bunga-padang">Padang</a> </li> <li> <a href="/collections/toko-bunga-palembang">Palembang</a> </li> <li> <a href="/collections/toko-bunga-pekanbaru">Pekanbaru</a> </li> </ul> </li> <li class="has-submenu"> <a href="/collections/toko-bunga-sulawesi"> <span>Sulawesi</span> <span class="chevron-right d-lg-none"> <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </span> </a> <ul class="grandchild"> <li> <a href="/collections/toko-bunga-makassar">Makassar</a> </li> <li> <a href="/collections/toko-bunga-manado">Manado</a> </li> <li> <a href="/collections/toko-bunga-palu">Palu</a> </li> </ul> </li> <li class="has-submenu"> <a href="/collections/toko-bunga-kalimantan"> <span>Kalimantan</span> <span class="chevron-right d-lg-none"> <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </span> </a> <ul class="grandchild"> <li> <a href="/collections/toko-bunga-balikpapan">Balikpapan</a> </li> <li> <a href="/collections/toko-bunga-banjarmasin">Banjarmasin</a> </li> <li> <a href="/collections/toko-bunga-pontianak">Pontianak</a> </li> <li> <a href="/collections/toko-bunga-samarinda">Samarinda</a> </li> </ul> </li> <li class="has-submenu"> <a href="/collections/toko-bunga-nusa-tenggara"> <span>Nusa Tenggara</span> <span class="chevron-right d-lg-none"> <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </span> </a> <ul class="grandchild"> <li> <a href="/collections/toko-bunga-kupang">Kupang</a> </li> <li> <a href="/collections/toko-bunga-lombok">Lombok</a> </li> <li> <a href="/collections/toko-bunga-mataram">Mataram</a> </li> <li> <a href="/collections/toko-bunga-sumbawa">Sumbawa</a> </li> </ul> </li> <li class="has-submenu"> <a href="/collections/toko-bunga-papua"> <span>Papua</span> <span class="chevron-right d-lg-none"> <svg width="8" height="12" viewBox="0 0 8 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 1L6 6L1 11" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </span> </a> <ul class="grandchild"> <li> <a href="/collections/toko-bunga-jayapura">Jayapura</a> </li> </ul> </li> </ul> <p class="link-all m-0 p-0"> <a href="/collections/locations">EXPLORE ALL Locations</a> <svg xmlns="http://www.w3.org/2000/svg" width="15" height="14" viewBox="0 0 15 14" fill="none"> <path d="M0.419956 6.41992L12.67 6.41992L7.41996 1.16992L8.07996 0.419922L14.58 6.91992L8.07996 13.4199L7.41996 12.6699L12.67 7.41992L0.419956 7.41992V6.41992Z" fill="black"></path> </svg> </p> </div> </div> </div> </li> </ul> </nav> <div class="overlay-nav"> <!-- Mobile Close Button in Overlay --> <button id="nav-close" class="nav-close-btn d-lg-none"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M18 6L6 18M6 6L18 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </button> </div> <script> if ($(window).width() < 992) { // Level 1 menu accordion (main menu items) $(".nav-menu .has-child > a").click(function(e){ e.preventDefault() const parentLi = $(this).parent() const isCurrentlyOpen = parentLi.hasClass("menu-open") // Close all other open menus (accordion behavior) $(".nav-menu .has-child").not(parentLi).removeClass("menu-open") $(".nav-menu .megamenu").not($(this).next(".megamenu")).slideUp() // Toggle current menu if (isCurrentlyOpen) { parentLi.removeClass("menu-open") $(this).next(".megamenu").slideUp() } else { parentLi.addClass("menu-open") $(this).next(".megamenu").slideDown() } }) // Level 2 menu accordion (submenu items with grandchildren) $(document).on('click', '.dropdown-menu .has-submenu > a', function(e){ e.preventDefault() const parentLi = $(this).parent() const isCurrentlyOpen = parentLi.hasClass("submenu-open") const grandchild = $(this).next(".grandchild") // Close all other open submenus in the same dropdown (accordion behavior) parentLi.siblings('.has-submenu').removeClass("submenu-open") parentLi.siblings('.has-submenu').find('.grandchild').slideUp() parentLi.siblings('.has-submenu').find('.chevron-right').css('transform', 'rotate(0deg)') // Toggle current submenu if (isCurrentlyOpen) { parentLi.removeClass("submenu-open") grandchild.slideUp() $(this).find('.chevron-right').css('transform', 'rotate(0deg)') } else { parentLi.addClass("submenu-open") grandchild.slideDown() $(this).find('.chevron-right').css('transform', 'rotate(90deg)') } }) $("#menu-hamburger").click(function(e){ e.preventDefault() $("body").toggleClass("nav_open") }) // Handle close button click $("#nav-close").click(function(e){ e.preventDefault() $("body").removeClass("nav_open") // Close all open menus when close button is clicked $(".nav-menu .has-child").removeClass("menu-open") $(".nav-menu .megamenu").slideUp() $(".dropdown-menu .has-submenu").removeClass("submenu-open") $(".dropdown-menu .grandchild").slideUp() $(".dropdown-menu .chevron-right").css('transform', 'rotate(0deg)') }) } $(".overlay-nav").click(function(e){ e.preventDefault() $("body").removeClass("nav_open") // Close all open menus when overlay is clicked $(".nav-menu .has-child").removeClass("menu-open") $(".nav-menu .megamenu").slideUp() $(".dropdown-menu .has-submenu").removeClass("submenu-open") $(".dropdown-menu .grandchild").slideUp() $(".dropdown-menu .chevron-right").css('transform', 'rotate(0deg)') }) // Update cart count function updateCartCount() { fetch('/cart.js') .then(response => response.json()) .then(cart => { const cartCount = cart.item_count; const cartCountEl = $('.cart-count'); if (cartCount > 0) { cartCountEl.text(cartCount).show(); } else { cartCountEl.hide(); } }) .catch(error => console.error('Error fetching cart:', error)); } // Initialize cart count on page load $(document).ready(function() { updateCartCount(); // Listen for cart changes document.addEventListener('cart-updated', updateCartCount); }); </script> </div> <div id="shopify-section-search-popup" class="shopify-section m-0"><style> #search-trigger { cursor: pointer; } #search-popup { display: none; position: fixed; left: 0; width: 100%; top: 0; height: 100%; justify-content: center; z-index: 9999; background: rgb(196 196 196 / 30%); } #search-input { align-self: center; width: 100%; height: 80px; position: absolute; top: 0; border-bottom: 0.5px solid #A3A3A3; background-color: #fff; } #search-input * { align-self: center; } #search-type { width: 100%; border: none; padding-right: 20px; padding-left: 20px; font-size: 16px; color: #757575; } #search-btn { font-size: 16px; font-weight: 500; } #search-result { background-color: #fff; min-height: 490px; width: 100%; padding-top: 80px; } #search-result .container { padding: 20px 40px; } body.search-popup-open { /* .search-popup-open */ overflow: hidden; } .search-popup-open #loc_delivery { display: none } .search-header svg { display: none; cursor: pointer; } .wrapper-search-popup { max-height: calc(100vh - 150px); overflow-y: auto; overflow-x: hidden; } .group-recommend { padding: 20px 40px; } .resultsearch { display: none; } .results { padding: 20px 40px } .resultsearch label { font-weight: 600; padding-bottom: 20px; display: block; margin-bottom: 20px; border-bottom: 1px solid #AAAAAA; } ul.result_collection { overflow: auto; } .skeleton-loader { padding: 10px 0; } .skeleton-item { height: 20px; background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); background-size: 200% 100%; animation: loading 1.5s infinite; margin-bottom: 12px; border-radius: 4px; } .skeleton-product-card { display: flex; flex-direction: column; margin-bottom: 15px; } .skeleton-product-image { width: 100%; aspect-ratio: 1; background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); background-size: 200% 100%; animation: loading 1.5s infinite; border-radius: 4px; margin-bottom: 10px; } .skeleton-product-title { height: 16px; background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); background-size: 200% 100%; animation: loading 1.5s infinite; border-radius: 4px; margin-bottom: 8px; } .skeleton-product-price { height: 14px; width: 60%; background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); background-size: 200% 100%; animation: loading 1.5s infinite; border-radius: 4px; } @keyframes loading { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } ul.result_product { max-height: 400px; overflow: auto; list-style: none; padding: 0; display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; } ul.result_product li.item { margin-bottom: 0; } ul.result_product .item_url { display: block; text-decoration: none; color: inherit; } ul.result_product .product-card-search { display: flex; flex-direction: row; height: 100%; text-transform: uppercase; text-align: left; gap: 12px; } ul.result_product .product-image-search { width: 100px; height: 100px; flex-shrink: 0; object-fit: cover; } ul.result_product .product-info-search { display: flex; flex-direction: column; justify-content: center; flex: 1; } ul.result_product .product-title-search { font-size: 14px; line-height: 1.4; margin-bottom: 8px; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } ul.result_product .product-price-search { font-size: 13px; color: #666; font-weight: 500; } .group-promotion ul { margin: 0; } .group-promotion li { list-style: none; margin-bottom: 12px; } .group-promotion li a { color: inherit; } .group-recent { position: relative; padding: 20px 40px; } .group-recent ul { margin: 0; } .group-recent li { list-style: none; display: inline-block; margin-right: 60px; } .group-recent li a { color: inherit; } .last-search svg { width: 20px; vertical-align: middle; } ul.last-search a { vertical-align: middle; padding: 0 10px; } ul.last-search li span { cursor: pointer; } .delete-all-history { position: absolute; top: 25px; right: 40px; text-decoration: underline; color: #e11d1d; cursor: pointer; font-size: 12px; } form.search.search-modal__form { position: relative; } button.search__button svg { width: 25px; color: #495057; fill: #757582; } button.search__button.field__button { position: absolute; top: 50%; margin-top: -12px; } .close-search { display: none; position: absolute; right: 65px; top: 10px; cursor: pointer; } .site-overlay { position: fixed; top: 0; width: 100vw; height: 100vh; z-index: 1000; background: #0000005c; visibility: hidden; opacity: 0; pointer-events: none; transition: all .3s linear; display: block !important; } .search-popup-open .site-overlay { opacity: 1; visibility: visible; pointer-events: all; z-index: -1; cursor: pointer; } @media (min-width: 991px) { .group-recent ul { column-count: 3; } .group-promotion li a { font-size: 12px; font-weight: 400; } .group-recent li a { font-size: 12px; font-weight: 400; } ul.result_product { grid-template-columns: repeat(3, 1fr); gap: 20px; } } .moreresult { padding: 10px 40px; border-top: 1px solid #AAAAAA; } .moreresult * { align-self: center; } .moreresult p { margin: 0; font-size: 12px !important; } .moreresult svg { width: 13px; } @media (max-width: 992px) { .icon-key-mobile { height: auto!important; width: 10px!important; } body.grid-view.search-popup-open .products { -ms-flex: 0 0 100%!important; flex: 0 0 100%!important; max-width: 100%!important; } button.search__button svg { width: 20px; } #search-result { padding-left: 0; padding-right: 0; } #search-result { padding-top: 55px; } #search-input { height: 55px; } .group-recommend { padding: 20px; } #search-type, #search-btn { font-size: 12px; } #search-input { height: 40px; } #search-result { padding-top: 40px; } .close-search { right: 50px; top: 6px; } #search-input svg { width: 15px; } .result_product li a { font-size: 12px; } ul.result_product li img { width: 110px !important; } .resultsearch label { font-size: 14px; margin-bottom: 15px; padding-bottom: 15px; } #search-input .container { padding: 0 20px; } #search-type { font-size: 14px; } #search-btn { font-size: 12px; text-decoration: underline; } .results { padding: 15px; } .group-recommend h3 { font-size: 16px; } .products .card-body { padding: 8px 0px 10px; } .moreresult { padding: 10px 20px; } ul.result_product { grid-template-columns: repeat(1, 1fr); gap: 10px; } ul.result_product .product-image-search { width: 80px; height: 80px; } ul.result_product .product-card-search { gap: 10px; } ul.result_product .product-title-search { font-size: 12px; margin-bottom: 6px; } ul.result_product .product-price-search { font-size: 11px; } .group-promotion li a { font-size: 14px; } ul.result_collection { max-height: 200px; } } </style> <div id="search-popup"> <div id="search-input" class="row"> <div class="container w-100"> <form action="/search" method="get" role="search" class="search search-modal__form d-flex justify-content-between" data-hs-cf-bound="true"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"> <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"></path> </svg> <input type="hidden" name="type" value="product" /> <input type="text" id="search-type" name="q" class="search-popup" placeholder="Gifts that linger: Uncover treasures for cherished moments." /> <div class="close-search"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none"> <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 12.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"></path> </svg> </div> <button id="search-btn">Search</button> </form> </div> </div> <div id="search-result" class="m-auto"> <div class="container p-0"> <div class="group-promotion"> <div class="resultsearch"> <div class="row results"> <div class="col-12 col-lg-3 mb-3 mb-lg-0"> <label>SUGGESTIONS</label> <ul class="result_collection"></ul> </div> <div class="col-12 col-lg-9"> <label>PRODUCTS</label> <ul class="result_product"></ul> </div> </div> <div class="d-flex moreresult m-0"> <p>Search for<span></span></p> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> <title>icon-arrow-right</title> <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> </svg> </div> </div> </div> <div class="group-recent hide" style="display: none;"> <h3>RECENT SEARCH</h3> <span class="delete-all-history">Hapus riwayat</span> <ul class="last-search"></ul> </div> <div class="group-recommend"> <h3>YOU MAY ALSO LIKE</h3> <div class="row popup-recommend c-products-grid infinite-case product-multi- swiper-container-horizontal swiper-container-wp8-horizontal"> <div class="swiper-wrapper justify-content-between" style="margin-left: 1px; transition-duration: 0ms;"> <div class="swiper-slide card"> <div class="products" data-lazy="false"> <div class="bg-products"> <button type="button" class="wishlist-toggle" data-wishlist-button="" data-product-handle="nibbl-the-jam-that-stole-breakfast" aria-label="Add Nibbl The Jam That Stole Breakfast to wishlist"> <div class="wishlist-icon-wrapper"> <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;" aria-hidden="true" focusable="false"> <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.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"></path> </svg> <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;" aria-hidden="true" focusable="false"> <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"></path> </svg> </div> </button> <a href="/products/nibbl-the-jam-that-stole-breakfast"> <div class="product-card-img-container p-0 position-relative"> <img class="product-card-img" src="//outerbloom.com/cdn/shop/files/The-Jam-That-Stole-Breakfast_300x.jpg?v=1761737780" srcset="//outerbloom.com/cdn/shop/files/The-Jam-That-Stole-Breakfast_150x.jpg?v=1761737780 150w,," sizes="(max-width: 575px) calc(50vw - 50px), (max-width: 991px) calc(33vw - 24px), 270px" alt="Nibbl The Jam That Stole Breakfast" height="200" width="200" style="width:100%;height:auto;display:block;" loading="lazy" decoding="async" /> //outerbloom.com/cdn/shop/files/The-Jam-That-Stole-Breakfast_300x.jpg?v=1761737780 300w //outerbloom.com/cdn/shop/files/The-Jam-That-Stole-Breakfast_600x.jpg?v=1761737780 600w </div> <div class="card-body product-card-info"> <h5 class="h5 mb-0"> Nibbl The Jam That Stole Breakfast </h5> <div class="product-card-price"> <div class="product-price-sale"> <s class="product-card-price-before card-money">Rp 155.000</s> <span class="product-card-discount small"> (-45%) </span> </div> <div class="price-discount"> <h4 class="product-card-price-after card-money">Rp 85.000</h4> </div> </div> </div> </a> </div> <div class="wishlist-tooltip" style="display:none;"> <a href="/account/login">Please login to save to wishlist</a> </div> </div> </div> <div class="swiper-slide card"> <div class="products" data-lazy="false"> <div class="bg-products"> <button type="button" class="wishlist-toggle" data-wishlist-button="" data-product-handle="nibbl-choco-nutocalypse" aria-label="Add Nibbl Choco Nutocalypse to wishlist"> <div class="wishlist-icon-wrapper"> <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;" aria-hidden="true" focusable="false"> <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.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"></path> </svg> <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;" aria-hidden="true" focusable="false"> <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"></path> </svg> </div> </button> <a href="/products/nibbl-choco-nutocalypse"> <div class="product-card-img-container p-0 position-relative"> <img class="product-card-img" src="//outerbloom.com/cdn/shop/files/Choco-Nutocalypse_b93c4d9f-8210-4454-9b3f-419d0040ff31_300x.jpg?v=1761789600" srcset="//outerbloom.com/cdn/shop/files/Choco-Nutocalypse_b93c4d9f-8210-4454-9b3f-419d0040ff31_150x.jpg?v=1761789600 150w,," sizes="(max-width: 575px) calc(50vw - 50px), (max-width: 991px) calc(33vw - 24px), 270px" alt="Nibbl Choco Nutocalypse" height="200" width="200" style="width:100%;height:auto;display:block;" loading="lazy" decoding="async" /> //outerbloom.com/cdn/shop/files/Choco-Nutocalypse_b93c4d9f-8210-4454-9b3f-419d0040ff31_300x.jpg?v=1761789600 300w //outerbloom.com/cdn/shop/files/Choco-Nutocalypse_b93c4d9f-8210-4454-9b3f-419d0040ff31_600x.jpg?v=1761789600 600w </div> <div class="card-body product-card-info"> <h5 class="h5 mb-0"> Nibbl Choco Nutocalypse </h5> <div class="product-card-price"> <div class="product-price-sale"> <s class="product-card-price-before card-money">Rp 155.000</s> <span class="product-card-discount small"> (-45%) </span> </div> <div class="price-discount"> <h4 class="product-card-price-after card-money">Rp 85.000</h4> </div> </div> </div> </a> </div> <div class="wishlist-tooltip" style="display:none;"> <a href="/account/login">Please login to save to wishlist</a> </div> </div> </div> <div class="swiper-slide card"> <div class="products" data-lazy="false"> <div class="bg-products"> <button type="button" class="wishlist-toggle" data-wishlist-button="" data-product-handle="nibbl-pistachio-promises-at-3am" aria-label="Add Nibbl Pistachio Promises at 3AM to wishlist"> <div class="wishlist-icon-wrapper"> <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;" aria-hidden="true" focusable="false"> <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.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"></path> </svg> <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;" aria-hidden="true" focusable="false"> <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"></path> </svg> </div> </button> <a href="/products/nibbl-pistachio-promises-at-3am"> <div class="product-card-img-container p-0 position-relative"> <img class="product-card-img" src="//outerbloom.com/cdn/shop/files/Pistachio-Promises-at-3AM_8d54b983-3e48-4377-90a0-fdf078746a00_300x.jpg?v=1761789808" srcset="//outerbloom.com/cdn/shop/files/Pistachio-Promises-at-3AM_8d54b983-3e48-4377-90a0-fdf078746a00_150x.jpg?v=1761789808 150w,," sizes="(max-width: 575px) calc(50vw - 50px), (max-width: 991px) calc(33vw - 24px), 270px" alt="Nibbl Pistachio Promises at 3AM" height="200" width="200" style="width:100%;height:auto;display:block;" loading="lazy" decoding="async" /> //outerbloom.com/cdn/shop/files/Pistachio-Promises-at-3AM_8d54b983-3e48-4377-90a0-fdf078746a00_300x.jpg?v=1761789808 300w //outerbloom.com/cdn/shop/files/Pistachio-Promises-at-3AM_8d54b983-3e48-4377-90a0-fdf078746a00_600x.jpg?v=1761789808 600w </div> <div class="card-body product-card-info"> <h5 class="h5 mb-0"> Nibbl Pistachio Promises at 3AM </h5> <div class="product-card-price"> <div class="product-price-sale"> <s class="product-card-price-before card-money">Rp 195.000</s> <span class="product-card-discount small"> (-49%) </span> </div> <div class="price-discount"> <h4 class="product-card-price-after card-money">Rp 99.000</h4> </div> </div> </div> </a> </div> <div class="wishlist-tooltip" style="display:none;"> <a href="/account/login">Please login to save to wishlist</a> </div> </div> </div> <div class="swiper-slide card"> <div class="products" data-lazy="false"> <div class="bg-products"> <button type="button" class="wishlist-toggle" data-wishlist-button="" data-product-handle="nibbl-winter-spice-everything-nice" aria-label="Add Nibbl Winter Spice & Everything Nice to wishlist"> <div class="wishlist-icon-wrapper"> <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;" aria-hidden="true" focusable="false"> <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.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"></path> </svg> <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;" aria-hidden="true" focusable="false"> <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"></path> </svg> </div> </button> <a href="/products/nibbl-winter-spice-everything-nice"> <div class="product-card-img-container p-0 position-relative"> <img class="product-card-img" src="//outerbloom.com/cdn/shop/files/Winter-Spice-_-Everything-Nice_9ae0c558-6322-442f-b1ed-4f4325f2367a_300x.jpg?v=1761789428" srcset="//outerbloom.com/cdn/shop/files/Winter-Spice-_-Everything-Nice_9ae0c558-6322-442f-b1ed-4f4325f2367a_150x.jpg?v=1761789428 150w,," sizes="(max-width: 575px) calc(50vw - 50px), (max-width: 991px) calc(33vw - 24px), 270px" alt="Nibbl Winter Spice & Everything Nice" height="200" width="200" style="width:100%;height:auto;display:block;" loading="lazy" decoding="async" /> //outerbloom.com/cdn/shop/files/Winter-Spice-_-Everything-Nice_9ae0c558-6322-442f-b1ed-4f4325f2367a_300x.jpg?v=1761789428 300w //outerbloom.com/cdn/shop/files/Winter-Spice-_-Everything-Nice_9ae0c558-6322-442f-b1ed-4f4325f2367a_600x.jpg?v=1761789428 600w </div> <div class="card-body product-card-info"> <h5 class="h5 mb-0"> Nibbl Winter Spice & Everything Nice </h5> <div class="product-card-price"> <div class="product-price-sale"> <s class="product-card-price-before card-money">Rp 195.000</s> <span class="product-card-discount small"> (-56%) </span> </div> <div class="price-discount"> <h4 class="product-card-price-after card-money">Rp 85.000</h4> </div> </div> </div> </a> </div> <div class="wishlist-tooltip" style="display:none;"> <a href="/account/login">Please login to save to wishlist</a> </div> </div> </div> <div class="swiper-slide card"> <div class="products" data-lazy="false"> <div class="bg-products"> <button type="button" class="wishlist-toggle" data-wishlist-button="" data-product-handle="nibbl-say-cheese-regret-nothing" aria-label="Add Nibbl Say Cheese, Regret Nothing to wishlist"> <div class="wishlist-icon-wrapper"> <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;" aria-hidden="true" focusable="false"> <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.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"></path> </svg> <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;" aria-hidden="true" focusable="false"> <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"></path> </svg> </div> </button> <a href="/products/nibbl-say-cheese-regret-nothing"> <div class="product-card-img-container p-0 position-relative"> <img class="product-card-img" src="//outerbloom.com/cdn/shop/files/Say-Cheese-Regret-Nothing_8a57e2b8-dfd8-4ba1-a120-21756e5dc193_300x.jpg?v=1761789423" srcset="//outerbloom.com/cdn/shop/files/Say-Cheese-Regret-Nothing_8a57e2b8-dfd8-4ba1-a120-21756e5dc193_150x.jpg?v=1761789423 150w,," sizes="(max-width: 575px) calc(50vw - 50px), (max-width: 991px) calc(33vw - 24px), 270px" alt="Nibbl Say Cheese, Regret Nothing" height="200" width="200" style="width:100%;height:auto;display:block;" loading="lazy" decoding="async" /> //outerbloom.com/cdn/shop/files/Say-Cheese-Regret-Nothing_8a57e2b8-dfd8-4ba1-a120-21756e5dc193_300x.jpg?v=1761789423 300w //outerbloom.com/cdn/shop/files/Say-Cheese-Regret-Nothing_8a57e2b8-dfd8-4ba1-a120-21756e5dc193_600x.jpg?v=1761789423 600w </div> <div class="card-body product-card-info"> <h5 class="h5 mb-0"> Nibbl Say Cheese, Regret Nothing </h5> <div class="product-card-price"> <div class="product-price-sale"> <s class="product-card-price-before card-money">Rp 195.000</s> <span class="product-card-discount small"> (-56%) </span> </div> <div class="price-discount"> <h4 class="product-card-price-after card-money">Rp 85.000</h4> </div> </div> </div> </a> </div> <div class="wishlist-tooltip" style="display:none;"> <a href="/account/login">Please login to save to wishlist</a> </div> </div> </div> <div class="swiper-slide card"> <div class="products" data-lazy="false"> <div class="bg-products"> <button type="button" class="wishlist-toggle" data-wishlist-button="" data-product-handle="nibbl-berry-affair" aria-label="Add Nibbl Berry Affair to wishlist"> <div class="wishlist-icon-wrapper"> <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;" aria-hidden="true" focusable="false"> <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.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"></path> </svg> <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;" aria-hidden="true" focusable="false"> <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"></path> </svg> </div> </button> <a href="/products/nibbl-berry-affair"> <div class="product-card-img-container p-0 position-relative"> <img class="product-card-img" src="//outerbloom.com/cdn/shop/files/Berry-Affair_300x.jpg?v=1761738335" srcset="//outerbloom.com/cdn/shop/files/Berry-Affair_150x.jpg?v=1761738335 150w,," sizes="(max-width: 575px) calc(50vw - 50px), (max-width: 991px) calc(33vw - 24px), 270px" alt="Nibbl Berry Affair" height="200" width="200" style="width:100%;height:auto;display:block;" loading="lazy" decoding="async" /> //outerbloom.com/cdn/shop/files/Berry-Affair_300x.jpg?v=1761738335 300w //outerbloom.com/cdn/shop/files/Berry-Affair_600x.jpg?v=1761738335 600w </div> <div class="card-body product-card-info"> <h5 class="h5 mb-0"> Nibbl Berry Affair </h5> <div class="product-card-price"> <div class="product-price-sale"> <s class="product-card-price-before card-money">Rp 155.000</s> <span class="product-card-discount small"> (-45%) </span> </div> <div class="price-discount"> <h4 class="product-card-price-after card-money">Rp 85.000</h4> </div> </div> </div> </a> </div> <div class="wishlist-tooltip" style="display:none;"> <a href="/account/login">Please login to save to wishlist</a> </div> </div> </div> <div class="swiper-slide card"> <div class="products" data-lazy="false"> <div class="bg-products"> <button type="button" class="wishlist-toggle" data-wishlist-button="" data-product-handle="nibbl-chocolate-after-dark" aria-label="Add Nibbl Chocolate After Dark to wishlist"> <div class="wishlist-icon-wrapper"> <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;" aria-hidden="true" focusable="false"> <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.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"></path> </svg> <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;" aria-hidden="true" focusable="false"> <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"></path> </svg> </div> </button> <a href="/products/nibbl-chocolate-after-dark"> <div class="product-card-img-container p-0 position-relative"> <img class="product-card-img" src="//outerbloom.com/cdn/shop/files/Chocolate-After-Dark_300x.jpg?v=1761737267" srcset="//outerbloom.com/cdn/shop/files/Chocolate-After-Dark_150x.jpg?v=1761737267 150w,," sizes="(max-width: 575px) calc(50vw - 50px), (max-width: 991px) calc(33vw - 24px), 270px" alt="Nibbl Chocolate After Dark" height="200" width="200" style="width:100%;height:auto;display:block;" loading="lazy" decoding="async" /> //outerbloom.com/cdn/shop/files/Chocolate-After-Dark_300x.jpg?v=1761737267 300w //outerbloom.com/cdn/shop/files/Chocolate-After-Dark_600x.jpg?v=1761737267 600w </div> <div class="card-body product-card-info"> <h5 class="h5 mb-0"> Nibbl Chocolate After Dark </h5> <div class="product-card-price"> <div class="product-price-sale"> <s class="product-card-price-before card-money">Rp 125.000</s> <span class="product-card-discount small"> (-32%) </span> </div> <div class="price-discount"> <h4 class="product-card-price-after card-money">Rp 85.000</h4> </div> </div> </div> </a> </div> <div class="wishlist-tooltip" style="display:none;"> <a href="/account/login">Please login to save to wishlist</a> </div> </div> </div> <div class="swiper-slide card"> <div class="products" data-lazy="false"> <div class="bg-products"> <button type="button" class="wishlist-toggle" data-wishlist-button="" data-product-handle="nibbl-the-whole-d-mn-thing" aria-label="Add Nibbl The Whole D*mn Thing to wishlist"> <div class="wishlist-icon-wrapper"> <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;" aria-hidden="true" focusable="false"> <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.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"></path> </svg> <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;" aria-hidden="true" focusable="false"> <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"></path> </svg> </div> </button> <a href="/products/nibbl-the-whole-d-mn-thing"> <div class="product-card-img-container p-0 position-relative"> <img class="product-card-img" src="//outerbloom.com/cdn/shop/files/The-Whole-Dmn-Thing_300x.jpg?v=1761737233" srcset="//outerbloom.com/cdn/shop/files/The-Whole-Dmn-Thing_150x.jpg?v=1761737233 150w,," sizes="(max-width: 575px) calc(50vw - 50px), (max-width: 991px) calc(33vw - 24px), 270px" alt="Nibbl The Whole D*mn Thing" height="200" width="200" style="width:100%;height:auto;display:block;" loading="lazy" decoding="async" /> //outerbloom.com/cdn/shop/files/The-Whole-Dmn-Thing_300x.jpg?v=1761737233 300w //outerbloom.com/cdn/shop/files/The-Whole-Dmn-Thing_600x.jpg?v=1761737233 600w </div> <div class="card-body product-card-info"> <h5 class="h5 mb-0"> Nibbl The Whole D*mn Thing </h5> <div class="product-card-price"> <div class="product-price-sale"> <s class="product-card-price-before card-money">Rp 440.000</s> <span class="product-card-discount small"> (-35%) </span> </div> <div class="price-discount"> <h4 class="product-card-price-after card-money">Rp 285.000</h4> </div> </div> </div> </a> </div> <div class="wishlist-tooltip" style="display:none;"> <a href="/account/login">Please login to save to wishlist</a> </div> </div> </div> <div class="swiper-slide card"> <div class="products" data-lazy="false"> <div class="bg-products"> <button type="button" class="wishlist-toggle" data-wishlist-button="" data-product-handle="the-jade-bouquet" aria-label="Add The Jade Bouquet to wishlist"> <div class="wishlist-icon-wrapper"> <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;" aria-hidden="true" focusable="false"> <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.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"></path> </svg> <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;" aria-hidden="true" focusable="false"> <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"></path> </svg> </div> </button> <a href="/products/the-jade-bouquet"> <div class="product-card-img-container p-0 position-relative"> <img class="product-card-img" src="//outerbloom.com/cdn/shop/files/The-Jade-Bouquet_300x.jpg?v=1751618030" srcset="//outerbloom.com/cdn/shop/files/The-Jade-Bouquet_150x.jpg?v=1751618030 150w,," sizes="(max-width: 575px) calc(50vw - 50px), (max-width: 991px) calc(33vw - 24px), 270px" alt="The Jade Bouquet" height="200" width="200" style="width:100%;height:auto;display:block;" loading="lazy" decoding="async" /> //outerbloom.com/cdn/shop/files/The-Jade-Bouquet_300x.jpg?v=1751618030 300w //outerbloom.com/cdn/shop/files/The-Jade-Bouquet_600x.jpg?v=1751618030 600w </div> <div class="card-body product-card-info"> <h5 class="h5 mb-0"> The Jade Bouquet </h5> <div class="product-card-price"> <div class="product-price-sale"> <s class="product-card-price-before card-money">Rp 435.000</s> <span class="product-card-discount small"> (-34%) </span> </div> <div class="price-discount"> <h4 class="product-card-price-after card-money">Rp 285.000</h4> </div> </div> </div> </a> </div> <div class="wishlist-tooltip" style="display:none;"> <a href="/account/login">Please login to save to wishlist</a> </div> </div> </div> <div class="swiper-slide card"> <div class="products" data-lazy="false"> <div class="bg-products"> <button type="button" class="wishlist-toggle" data-wishlist-button="" data-product-handle="the-selena-bouquet" aria-label="Add The Selena Bouquet to wishlist"> <div class="wishlist-icon-wrapper"> <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;" aria-hidden="true" focusable="false"> <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.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"></path> </svg> <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;" aria-hidden="true" focusable="false"> <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"></path> </svg> </div> </button> <a href="/products/the-selena-bouquet"> <div class="product-card-img-container p-0 position-relative"> <img class="product-card-img" src="//outerbloom.com/cdn/shop/files/The-Selena-Bouquet_300x.jpg?v=1751618047" srcset="//outerbloom.com/cdn/shop/files/The-Selena-Bouquet_150x.jpg?v=1751618047 150w,," sizes="(max-width: 575px) calc(50vw - 50px), (max-width: 991px) calc(33vw - 24px), 270px" alt="The Selena Bouquet" height="200" width="200" style="width:100%;height:auto;display:block;" loading="lazy" decoding="async" /> //outerbloom.com/cdn/shop/files/The-Selena-Bouquet_300x.jpg?v=1751618047 300w //outerbloom.com/cdn/shop/files/The-Selena-Bouquet_600x.jpg?v=1751618047 600w </div> <div class="card-body product-card-info"> <h5 class="h5 mb-0"> The Selena Bouquet </h5> <div class="product-card-price"> <div class="product-price-sale"> <s class="product-card-price-before card-money">Rp 335.000</s> <span class="product-card-discount small"> (-29%) </span> </div> <div class="price-discount"> <h4 class="product-card-price-after card-money">Rp 235.000</h4> </div> </div> </div> </a> </div> <div class="wishlist-tooltip" style="display:none;"> <a href="/account/login">Please login to save to wishlist</a> </div> </div> </div> </div> </div> </div> </div> </div> <div class="site-overlay" style="display: none"></div> </div> <script> document.addEventListener('DOMContentLoaded', function() { new Swiper('.popup-recommend', { slidesPerView : 4, spaceBetween: 30, lazy: true, speed: 300, breakpoints: { 576: { slidesPerView: 2, spaceBetween: 10, freeMode: true, resistance: true, resistanceRatio: 0, freeModeMomentumRatio: 0.45, freeModeMomentumVelocityRatio: 1.5 }, 768: { slidesPerView: 2, spaceBetween: 10 }, 992: { slidesPerView: 3, spaceBetween: 20 } } }); }); const searchContainer = $("#search-popup") const searchInput = $(".search-popup") const result_collection = $('.result_collection') const result_product = $('.result_product') const resultsearch = $('.resultsearch') const resultrecommend = $(".group-recommend") const moreresult = $(".moreresult") searchInput.keyup(function(){ const input = $(this).val() moreresult.find("p span").text(` “${input}”`) if(input.length > 2) { $(".close-search").show() const url = `https://outerbloom.com/search/suggest.json?resources[limit]=10&resources[limit_scope]=each&resources[type]=collection,product&q=${input}` $.ajax({ type: 'GET', url, beforeSend: function() { // setting a timeout // $(placeholder).addClass('loading'); }, success: async function(response) { resultsearch.show() resultrecommend.hide() result_collection.html("") result_product.html("") const collections = response.resources.results.collections const products = response.resources.results.products let collection_length = collections.length let product_length = products.length async function getCollectionProductCount(handle) { try { const collectionUrl = `https://outerbloom.com/collections/${handle}.json` const response = await fetch(collectionUrl) if (response.ok) { const data = await response.json() return data.collection.products_count ? data.collection.products_count : 0 } return 0 } catch (error) { console.log('Error fetching collection product count:', error) return 0 } } // Show skeleton loader for suggestions const skeletonHTML = ` <div class="skeleton-loader"> <div class="skeleton-item" style="width: 80%;"></div> <div class="skeleton-item" style="width: 90%;"></div> <div class="skeleton-item" style="width: 75%;"></div> <div class="skeleton-item" style="width: 85%;"></div> <div class="skeleton-item" style="width: 70%;"></div> </div> ` result_collection.html(skeletonHTML) // Show skeleton loader for products (3 cards on desktop, 2 on mobile) const productSkeletonHTML = ` <li class="skeleton-product-card"> <div class="skeleton-product-image"></div> <div class="skeleton-product-title"></div> <div class="skeleton-product-price"></div> </li> <li class="skeleton-product-card"> <div class="skeleton-product-image"></div> <div class="skeleton-product-title"></div> <div class="skeleton-product-price"></div> </li> <li class="skeleton-product-card"> <div class="skeleton-product-image"></div> <div class="skeleton-product-title"></div> <div class="skeleton-product-price"></div> </li> <li class="skeleton-product-card"> <div class="skeleton-product-image"></div> <div class="skeleton-product-title"></div> <div class="skeleton-product-price"></div> </li> <li class="skeleton-product-card"> <div class="skeleton-product-image"></div> <div class="skeleton-product-title"></div> <div class="skeleton-product-price"></div> </li> <li class="skeleton-product-card"> <div class="skeleton-product-image"></div> <div class="skeleton-product-title"></div> <div class="skeleton-product-price"></div> </li> ` result_product.html(productSkeletonHTML) // Render products immediately (without waiting for collections) setTimeout(() => { result_product.html('') let productCount = 0 for(let i=0; i<product_length && productCount < 6; i++){ const product = products[i] const title = product.title const url = product.url const image = product.featured_image.url const vendor = product.vendor const price = product.price const formattedPrice = new Intl.NumberFormat('id-ID', { style: 'currency', currency: 'IDR', minimumFractionDigits: 0 }).format(price) // Filter out excluded products if(vendor === 'AIA' || vendor === 'AXA' || vendor === 'WOM Finance') continue if(title.includes('Extra Shipping Cost') || title.includes('[US]') || title.includes('Rp')) continue const html_product = ` <li class="item" data-vendor="${vendor}"> <a href="${url}" class="item_url" data-type="product" data-title="${title}" data-url="${url}"> <div class="product-card-search"> <img src="${image}" alt="${title}" class="product-image-search"> <div class="product-info-search"> <div class="product-title-search">${title}</div> <div class="product-price-search">${formattedPrice}</div> </div> </div> </a> </li> ` result_product.append(html_product) productCount++ } }, 100) // Collect unique collections first const addedTitles = new Set() const addedHandles = new Set() const validCollections = [] for(let i=0; i<collection_length && validCollections.length < 10; i++){ const title = collections[i].title const titleLower = title.toLowerCase() const handle = collections[i].handle const url = collections[i].url // Skip if title or handle already added, or if title includes excluded terms if(addedTitles.has(titleLower) || addedHandles.has(handle)) continue if(title.includes('AIA') || title.includes('AXA') || title.includes('WOM') || title.includes('Upsell')) continue const count = await getCollectionProductCount(handle) // Only add if collection has products if(count > 0) { validCollections.push({ title, url }) addedTitles.add(titleLower) addedHandles.add(handle) } } // Clear skeleton and render all collections at once result_collection.html('') validCollections.forEach(collection => { const html_collection = ` <li class="item" data-title="${collection.title}"> <a href="${collection.url}" data-type="collection" class="item_url" data-title="${collection.title}" data-url="${collection.url}">${collection.title}</a> </li> ` result_collection.append(html_collection) }) }, error: function(xhr) { // if error occured alert("Error occured.please try again"); }, complete: function(response) { // $(placeholder).removeClass('loading'); }, dataType: 'JSON' }); } else { result_collection.html("") result_product.html("") resultsearch.hide() resultrecommend.show() } }) moreresult.click(function(){ $("#search-btn").trigger("click"); }) $(".close-search").click(function(){ $(this).hide() searchInput.val("") searchInput.focus() resultsearch.hide() resultrecommend.show() }) function setCookie(name,value,days) { var expires = ""; if (days) { var date = new Date(); date.setTime(date.getTime() + (days*24*60*60*1000)); expires = "; expires=" + date.toUTCString(); } document.cookie = name + "=" + (value || "") + expires + "; path=/"; } function getCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } let last_search_name = [] let last_search_url = [] $(".group-recent").hide() if(getCookie("last_search_name") != null && getCookie("last_search_url") != null){ if(getCookie("last_search_name") != "" && getCookie("last_search_url") != ""){ $(".group-recent").show() last_search_name = getCookie("last_search_name"); last_search_url = getCookie("last_search_url"); const arrName = last_search_name.substring(1).split(',').reverse() const arrUrl = last_search_url.substring(1).split(',').reverse() console.log(arrName, 'Array Name') console.log(arrUrl, 'Array Url') let length = arrName.length if(arrName.length > 5) { length = 5 } for(let n=0;n<length;n++){ 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]}">${arrName[n]}</a><span data-title="${arrName[n]}" data-url="${arrUrl[n]}"></span></li>` $(".group-recent ul").append(html2) } } } console.log(last_search_name, 'Name') console.log(last_search_url, 'url') resultsearch.delegate(".item a", "click", function(){ let name = [last_search_name] let url = [last_search_url] name.push($(this).attr('data-title')) url.push($(this).attr('data-url')) setCookie("last_search_name",name,7); setCookie("last_search_url",url,7); }) $(".delete-all-history").click(function() { setCookie("last_search_name",null,0); setCookie("last_search_url",null,0); $(".last-search").hide(); setTimeout(function(){ location.reload(); }, 500); }) $("#search-trigger").click(function(){ search_open() }) $(".icon-search-mobile").click(function(){ search_open() }) $(".search-header svg").click(function(){ search_close() }) $(".icon-key-mobile").click(function(){ search_close() }) function search_open() { $("body").addClass("search-popup-open") $("#nav-mobile-icon, .search-header label, .icon-search-mobile").hide() $("#search-popup, .search-header svg, .icon-key-mobile").show() $(".search-popup").focus() $('.popup-recommend')[0].swiper.update(); } function search_close() { $("body").removeClass("search-popup-open") $("#nav-mobile-icon, .search-header label, .icon-search-mobile").show() $("#search-popup, .search-header svg, .icon-key-mobile").hide() searchInput.val("") resultsearch.hide() resultrecommend.show() } $(".site-overlay").click(function(){ search_close() }) </script> </div> <div id="PageContainer" class="is-moved-by-drawerx"> <main class="main-content pt-0" role="main"> <div id="breadcrumbProduct" class="d-none d-lg-block"> <style> #breadcrumbProduct { padding: 20px 0; } #breadcrumbProduct ul { display: flex; padding: 0; list-style: none; margin: 0; gap: 12px; } #breadcrumbProduct ul li { text-transform: uppercase; margin: 0; font-size: 12px; } #breadcrumbProduct ul li a { color: #757575; } #breadcrumbProduct ul li svg { width: 10px; height: 10px; padding: 0; color: #757575; vertical-align: middle; } </style> <div class="container"> <ul role="navigation" aria-label="breadcrumbs"> <li><a href="/">Home</a></li> <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" aria-hidden="true" focusable="false"> <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"></path> </svg></li> <li>HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat</li> </ul> </div> </div> <div id="shopify-section-Product" class="shopify-section product-section mt-0"><link href="//outerbloom.com/cdn/shop/t/138/assets/product.css?v=66528198230310472611773048131" rel="stylesheet" type="text/css" media="all" /> <!-- /templates/product.liquid --> <!-- <div itemscope itemtype="http://schema.org/Product"> --> <div class="product-bunga-outerbloom" data-product-type="foreverFlower"> <meta itemprop="url" content="https://www.bellabasera.com/about.php" /> <meta itemprop="image" content="https://studiointermedia.com/images/2026/03/22/foto.jpeg" /> <input id="data-sku" type="hidden" value="[C]OBIBUN1159" /> <div class="product-single"> <div id="product-top" class="container"> <div class="row bg-card product-sticky"> <div id="product-image" class="col-lg-7 text-center"> <div class="product-image"> <div class="row no-gutters"> <div id="product-featured-image" class="row w-100"> <div id="thumb-image-product" class="col-lg-2 col-12 d-none d-lg-block"> <div class="swiper-button-prev carousel-button-prev d-lg-none swiper-button-disabled"><svg class="icon icon-chevron-left" xmlns="http://www.w3.org/2000/svg" width="7" height="12" viewBox="0 0 7 12" aria-hidden="true" focusable="false"> <circle cx="60%" cy="50%" r="12" fill="transparent"></circle> <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"></path> </svg></div> <div class="swiper-container gallery-thumbs swiper-container-vertical swiper-container-wp8-vertical" style="min-height: 500px; height: 491.188px;"> <ul class="list-unstyled slider swiper-wrapper slider-nav ProductThumbs thumbnails" id="ProductThumbsx" style="transform: translate3d(0px, 0px, 0px);"> <li class="swiper-slide swiper-slide-active" data-type="image" style="height: 70.3281px; margin-bottom: 12px;"> <a href="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-standard="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-image="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-position="1" class="product-single__thumbnail"> <img class="w-100" src="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1643976096&width=160" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" loading="lazy" width="160" height="160" /> </a> </li> <li class="swiper-slide swiper-slide-next" data-type="image" style="height: 70.3281px; margin-bottom: 12px;"> <a href="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-standard="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705573033&width=600" data-image="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-position="2" class="product-single__thumbnail"> <img class="w-100" src="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705573033&width=160" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" loading="lazy" width="160" height="160" /> </a> </li> <li class="swiper-slide" data-type="image" style="height: 70.3281px; margin-bottom: 12px;"> <a href="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-standard="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705573033&width=600" data-image="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-position="3" class="product-single__thumbnail"> <img class="w-100" src="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705573033&width=160" alt="https://www.youtube.com/embed/yBb6yRo1y0Q?si=WOLQhnYOWGPpfQHl" loading="lazy" width="160" height="160" /> </a> </li> <li class="swiper-slide" data-type="image" style="height: 70.3281px; margin-bottom: 12px;"> <a href="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-standard="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705573033&width=600" data-image="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-position="4" class="product-single__thumbnail"> <img class="w-100" src="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705573033&width=160" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" loading="lazy" width="160" height="160" /> </a> </li> <li class="swiper-slide" data-type="image" style="height: 70.3281px; margin-bottom: 12px;"> <a href="https://studiointermedia.com/images/2026/03/22/foto.jpeg data-standard=" https:="" i.gyazo.com="" 6e6df9696920b48e3df428ddb6811ce0.jpg?v="1705573033&width=600"" data-image="https://studiointermedia.com/images/2026/03/22/foto.jpeg data-position=" 5"="" class="product-single__thumbnail"> <img class="w-100" src="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705573033&width=160" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" loading="lazy" width="160" height="160" /> </a> </li> <li class="swiper-slide" data-type="image" style="height: 70.3281px; margin-bottom: 12px;"> <a href="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-standard="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705573033&width=600" data-image="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-position="6" class="product-single__thumbnail"> <img class="w-100" src="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705573033&width=160" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" loading="lazy" width="160" height="160" /> </a> </li> <li class="swiper-slide" data-type="image" style="height: 70.3281px; margin-bottom: 12px;"> <a href="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-standard="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705573033&width=600" data-image="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-position="7" class="product-single__thumbnail"> <img class="w-100" src="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705573033&width=160" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" loading="lazy" width="160" height="160" /> </a> </li> <li class="swiper-slide" data-type="image" style="height: 70.3281px; margin-bottom: 12px;"> <a href="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-standard="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705573033&width=600" data-image="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-position="8" class="product-single__thumbnail"> <img class="w-100" src="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705573033&width=160" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" loading="lazy" width="160" height="160" /> </a> </li> <li class="swiper-slide" data-type="image" style="height: 70.3281px; margin-bottom: 12px;"> <a href="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-standard="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705572993&width=600" data-image="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-position="9" class="product-single__thumbnail"> <img class="w-100" src="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705572993&width=160" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" loading="lazy" width="160" height="160" /> </a> </li> <li class="swiper-slide" data-type="image" style="height: 70.3281px; margin-bottom: 12px;"> <a href="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-standard="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705572993&width=600" data-image="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-position="10" class="product-single__thumbnail"> <img class="w-100" src="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705572993&width=160" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" loading="lazy" width="160" height="160" /> </a> </li> <li class="swiper-slide" data-type="image" style="height: 70.3281px; margin-bottom: 12px;"> <a href="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-standard="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705572993&width=600" data-image="https://studiointermedia.com/images/2026/03/22/foto.jpeg" data-position="11" class="product-single__thumbnail"> <img class="w-100" src="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1705572993&width=160" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" loading="lazy" width="160" height="160" /> </a> </li> </ul> </div> <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" viewBox="0 0 7 10" fill="none" aria-hidden="true" focusable="false"> <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"></path> </svg></div> </div> <div id="featured-image-product" class="col-lg-10 col-12 d-none d-lg-block"> <div class="swiper-container gallery-top"> <div class="swiper-slide product-single__image" style="height: 399.656px;"> <div class="position-relative product-single__photos slider slider-for" id="ProductPhoto"> <div class="easyzoom easyzoom--overlay easyzoom--with-thumbnails is-ready"> <a href="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1643976096"> <img src="https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1643976096" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" id="ProductPhotoImg" fetchpriority="high" loading="eager" /> </a> </div> </div> </div> <div class="swiper-slide product-single__video" style="display: none; height: 399.656px;"> <video src="https://cdn.shopify.com/videos/c/vp/05d379ea115d41c2bd0f7d08b1496bd9/05d379ea115d41c2bd0f7d08b1496bd9.HD-1080p-7.2Mbps-24002195.mp4" playsinline="" loop="" muted=""></video> </div> </div> </div> </div> <div id="featured-image-product2" class="col-12 d-lg-none"> <div class="swiper-container gallery-mobile swiper-container-horizontal swiper-container-wp8-horizontal"> <ul class="swiper-wrapper" style="transition-duration: 0ms; transform: translate3d(0px, 0px, 0px);"> <li class="swiper-slide img swiper-slide-active" style="height: 755px; width: 755px;"> <img class="swiper-lazy swiper-lazy-loaded" src="//outerbloom.com/cdn/shop/products/The-Novo-Enchanted-Dome---Passionate-Red_2_large.jpg?v=1643976096" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" width="" height="" /> </li> <li class="swiper-slide img swiper-slide-next" style="height: 755px; width: 755px;"> <img class="swiper-lazy" src="//outerbloom.com/cdn/shop/t/138/assets/thumbnail-logo.png?v=77423356358717317971752652420" data-src="//outerbloom.com/cdn/shop/files/Red_1_6422b21f-35b7-4605-9453-eea72a33e83e_large.jpg?v=1705573033" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" width="" height="" /> </li> <li class="swiper-slide img" style="height: 755px; width: 755px;"> <div class="youtube" data-embed="yBb6yRo1y0Q"> <div class="play-button"></div> <img src="https://img.youtube.com/vi/yBb6yRo1y0Q/sddefault_1x.jpg" data-src="https://img.youtube.com/vi/yBb6yRo1y0Q/sddefault.jpg" class="swiper-lazy" /><img src="https://img.youtube.com/vi/yBb6yRo1y0Q/sddefault_1x.jpg" data-src="https://img.youtube.com/vi/yBb6yRo1y0Q/sddefault.jpg" class="swiper-lazy" /></div> </li> <li class="swiper-slide img" style="height: 755px; width: 755px;"> <img class="swiper-lazy" src="//outerbloom.com/cdn/shop/t/138/assets/thumbnail-logo.png?v=77423356358717317971752652420" data-src="//outerbloom.com/cdn/shop/files/The-Novo-Enchanted-Dome---Passionate-Red_large.jpg?v=1705573033" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" width="" height="" /> </li> <li class="swiper-slide img" style="height: 755px; width: 755px;"> <img class="swiper-lazy" src="//outerbloom.com/cdn/shop/t/138/assets/thumbnail-logo.png?v=77423356358717317971752652420" data-src="//outerbloom.com/cdn/shop/files/The-Novo-Enchanted-Dome---Passionate-Red_3_large.jpg?v=1705573033" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" width="" height="" /> </li> <li class="swiper-slide img" style="height: 755px; width: 755px;"> <img class="swiper-lazy" src="//outerbloom.com/cdn/shop/t/138/assets/thumbnail-logo.png?v=77423356358717317971752652420" data-src="//outerbloom.com/cdn/shop/files/The-Novo-Enchanted-Dome--All_cde40077-c7ae-4fa0-ba9f-ec427284ac1b_large.jpg?v=1705573033" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" width="" height="" /> </li> <li class="swiper-slide img" style="height: 755px; width: 755px;"> <img class="swiper-lazy" src="//outerbloom.com/cdn/shop/t/138/assets/thumbnail-logo.png?v=77423356358717317971752652420" data-src="//outerbloom.com/cdn/shop/files/The-Novo-Enchanted-Dome--All_2_0b2daada-3004-4dc0-ac27-189b52b89aa3_large.jpg?v=1705573033" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" width="" height="" /> </li> <li class="swiper-slide img" style="height: 755px; width: 755px;"> <img class="swiper-lazy" src="//outerbloom.com/cdn/shop/t/138/assets/thumbnail-logo.png?v=77423356358717317971752652420" data-src="//outerbloom.com/cdn/shop/files/OuterbloomForeverFlowerDome_800x_0978a02c-9a4b-4f26-b829-56e2fb346b25_large.jpg?v=1705573033" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" width="" height="" /> </li> <li class="swiper-slide img" style="height: 755px; width: 755px;"> <img class="swiper-lazy" src="//outerbloom.com/cdn/shop/t/138/assets/thumbnail-logo.png?v=77423356358717317971752652420" data-src="//outerbloom.com/cdn/shop/files/Rose-dome-red-with-model_4_249383db-ecaa-4f67-bccd-36eeb3ea48a2_large.png?v=1705572993" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" width="" height="" /> </li> <li class="swiper-slide img" style="height: 755px; width: 755px;"> <img class="swiper-lazy" src="//outerbloom.com/cdn/shop/t/138/assets/thumbnail-logo.png?v=77423356358717317971752652420" data-src="//outerbloom.com/cdn/shop/files/Rose-dome-red-with-model_6_1d4e53f5-9cf6-4539-896b-471bf1398034_large.png?v=1705572993" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" width="" height="" /> </li> <li class="swiper-slide img" style="height: 755px; width: 755px;"> <img class="swiper-lazy" src="//outerbloom.com/cdn/shop/t/138/assets/thumbnail-logo.png?v=77423356358717317971752652420" data-src="//outerbloom.com/cdn/shop/files/Rose-dome-red-with-model_7_c1df6905-221c-474e-bfc3-eb7d4df50d56_large.jpg?v=1705572993" alt="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" width="" height="" /> </li> </ul> <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" aria-hidden="true" focusable="false"> <circle cx="60%" cy="50%" r="12" fill="transparent"></circle> <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"></path> </svg></div> <div class="swiper-button-next"><svg class="icon icon-chevron-right" xmlns="http://www.w3.org/2000/svg" width="7" height="10" viewBox="0 0 7 10" fill="none" aria-hidden="true" focusable="false"> <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"></path> </svg></div> <!-- Add Pagination --> <div class="swiper-pagination swiper-pagination-bullets"></div> </div> </div> <div class="product-m-pageleb-video col-12 text-center d-lg-none"> <!-- product video --> <style> .view-video{display:block; margin:auto; padding:5px 10px;font-size:16px;font-weight:bold;border:2px solid #212121;background:#fff;} .view-video .icon-play{fill:#212121;vertical-align: middle;} .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;} .close-video{position:absolute;right:9px; top:8%;z-index:2;padding:5px;} .close-video .icon{width:30px;height:30px;} /*responsive iframe */ .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);} .video-container iframe {position: absolute;top:60%;left: 0;width: 100%;height: 100%;} .youtube { background-color: #000; margin-bottom: 30px; position: relative; padding-top: 56.25%; overflow: hidden; cursor: pointer; width: 100%; } .swiper-slide .youtube { max-width: 480px; } .youtube img { width: 100%; top: -16.82%; left: 0; opacity: 0.7; } .youtube .play-button { width: 90px; height: 60px; background-color: #333; box-shadow: 0 0 30px rgba( 0,0,0,0.6 ); z-index: 1; opacity: 0.8; border-radius: 6px; } .youtube .play-button:before { content: ""; border-style: solid; border-width: 15px 0 15px 26.0px; border-color: transparent transparent transparent #fff; } .youtube img, .youtube .play-button { cursor: pointer; } .youtube img, .youtube iframe, .youtube .play-button, .youtube .play-button:before { position: absolute; } .youtube .play-button, .youtube .play-button:before { top: 50%; left: 50%; transform: translate3d( -50%, -50%, 0 ); } .youtube iframe { height: 100%; width: 100%; top: 0; left: 0; } </style> </div> </div> <div class="video-desktop d-none d-lg-block pl-2 mt-4"> </div> <div class="product-desc-add position-relative d-none d-lg-block m-0"> </div> <script> document.addEventListener('DOMContentLoaded', function() { if ($(window).width() < 991) { var direction = 'horizontal' } else { var direction = 'vertical' $(".gallery-thumbs").height($("#ProductPhotoImg").height()) } var swiper = new Swiper('.gallery-thumbs', { // loop: true, direction, slidesPerView: 4.5, spaceBetween: 12, navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', } }); var swiper = new Swiper('.gallery-mobile', { //loop: true, lazy: true, speed: 300, resistance : true, resistanceRatio : 0, freeModeMomentumRatio : 0.45, freeModeMomentumVelocityRatio : 1.5, navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, pagination: { el: '.swiper-pagination' }, useCSS3Transforms: false, loop: false, on: { init: function () { console.log('swiper initialized'); var currentVideo = $("[data-swiper-slide-index=" + this.realIndex + "]").find("video"); currentVideo.trigger('play'); }, }, }); /* GET ALL VIDEOS */ var sliderVideos = $(".swiper-slide video"); /* SWIPER API - Event will be fired after animation to other slide (next or previous) */ swiper.on('slideChange', function () { console.log('slide changed'); /* stop all videos */ sliderVideos.each(function( index ) { this.currentTime = 0; }); /* SWIPER GET CURRENT AND PREV SLIDE (AND The VIDEO INSIDE) */ var prevVideo = $(`[data-swiper-slide-index="${this.previousIndex}]"`).find("video"); var currentVideo = $(`[data-swiper-slide-index="${this.realIndex}"]`).find("video"); prevVideo.trigger('stop'); currentVideo.trigger('play'); }); $("[data-video]").click(function(){ const file = $(this).data("video") $(".product-single__video").show() $(".product-single__image").hide() $(".product-single__video").find("video").attr("src", file) $(".product-single__video").find("video")[0].play(); }) $("[data-image]").click(function(){ $(".product-single__video").hide() $(".product-single__image").show() $(".product-single__video").find("video")[0].pause(); }) $("#product-image .swiper-slide").each(function(){ let width = $(this).width() $(this).height(width) }) $(window).resize(function() { $("#product-image .swiper-slide").each(function(){ let width = $(this).width() $(this).height(width) }) }) }); // end DOMContentLoaded </script> </div> </div> <div id="product-meta" class="col-lg-5 p-0"> <div class="product-meta"> <style> .product-meta--review {margin-top:10px} .freeship * {font-size: 14px !important;font-style: normal;} </style> <h1 itemprop="name" class="mb-2">HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat</h1> <div itemprop="offers" itemscope="" itemtype="http://schema.org/Offer"> <meta itemprop="priceCurrency" content="IDR" /> <link itemprop="availability" href="https://schema.org/InStock" /> <script type="text/javascript" src="//platform-api.sharethis.com/js/sharethis.js#property=5acdc0aa3ef3c0001396fd50&product=custom-share-buttons" async="async"></script> <span class="visually-hidden">Translation missing: en.products.general.regular_price</span> <span class="visually-hidden">Translation missing: en.products.general.sale_price</span> <div class="row no-gutters mb-3"> <span id="ProductPrice" class="h2 ProductPrice" itemprop="price" content="1885000">Rp 1,885,000</span> <div class="discount-product-detail"> <p id="ComparePrice" class="ComparePrice mt-2 mt-lg-0">Rp 2,600,000</p> <span class=" tag-discount"> <span id="newDiscount" class="product-tag persentase-discount hide">(28%)</span><br /> </span> </div> </div> <div class="row no-gutters meta-sds"> <div class="col-12 mb-2 mb-lg-0 stock-info"> <span id="ProductStock-Product" class="product-single__stock mb-2 hide"> </span> <style> .short-desc ul li:nth-child(n + 4) { display: none; } .short-desc ul li.showList:nth-child(n + 4) { display: list-item; } label.more { display: none; } label.more.showMe { display: block; font-size: 12px; text-transform: uppercase; font-weight: 700; cursor: pointer; } </style> <div class="short-desc-desktop d-none d-lg-block"> <div class="short-desc"> <ul> <li><strong>Platform Terbaik Dengan Sistem Modern</strong></li> <li> <strong>Promosi Anti Rungkad Hadir Di HOKI88BOS</strong> </li> <li> <strong>Display Menawan dalam <em>Borosilicate Glass Dome</em> Eksklusif</strong><strong> dengan Drawer Box Premium + Pita Satin Outerbloom</strong><br /> </li> </ul></div> <label class="more">Show More →</label> </div> <script> var liCount; $(document).ready(function () { $(".short-desc ul").each(function() { liCount = $(this).children("li").length; if (liCount > 3) { $(this).parent(".short-desc").next(".more").addClass("showMe"); } }); $(".more").click(function () { //$(".short-desc").find("li").addClass("showList"); // $(this).hide(); $("#product-desc").find("ul").show() $('html, body').animate({ scrollTop: $("#product-desc").offset().top - 250 }, 2000); $("#product-desc").css("height","auto"); $("#more_content").remove(); $(".product-spec").append("<div id='less_content' class='readmore'><span class='less_content'>Less</span></div>") }); }); </script> <div class="grid__item_product-info mb-3"> <div class="c-pdp-product-info"> <ul class="c-pdp-product-info__service c-pdp-product-info__service--active no-bullet"> <li class="no-bullets">Untuk ongkir di luar area jangkauan, penambahan biaya ongkir akan disesuaikan.</li> </ul> </div> </div> <style> .c-pdp-product-info__service--active { font-size: 12px; padding-left: 10px; text-align: left; max-width: 550px; margin: auto; } .c-pdp-product-info__service--active li { list-style: disc; } .c-pdp-product-info { background-color: #f5f5f5; padding: 12px; margin: 0; } .freeship em { font-style: italic; font-size: 12px !important; } </style> <script> $(document).ready(function(){ if ( $(".c-pdp-product-info__service li").length == 1 ) { $(".c-pdp-product-info__service").addClass("no-bullet"); $(".c-pdp-product-info__service li").addClass("no-bullets"); } }); </script> </div> </div> <div id="purchaseProduct"> <style> .select2-results__option[aria-disabled] { display: none; } .towel-bordir { width: 100%; display: flex; align-items: center; justify-content: space-around; } /* iOS Mobile specific styles */ @media screen and (max-width: 768px) { .ios .form-group-variant .variant-metafield { display: block !important; width: 100% !important; padding: 12px 16px !important; border: 1px solid #212121 !important; background: #fff !important; font-size: 16px !important; /* Prevents zoom on iOS */ -webkit-appearance: none !important; -moz-appearance: none !important; appearance: none !important; 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; background-repeat: no-repeat !important; background-position: right 12px center !important; background-size: 16px !important; color: #333 !important; min-height: 44px !important; /* iOS minimum touch target */ } .ios .form-group-variant .variant-metafield:focus { outline: none !important; border-color: #007AFF !important; box-shadow: 0 0 0 3px rgba(0, 122, 255, 0.1) !important; } .ios .form-group-variant .variant-metafield option { padding: 12px 16px !important; font-size: 16px !important; color: #333 !important; background: #fff !important; } .ios .form-group-variant .variant-metafield option:checked { background: #007AFF !important; color: #fff !important; } .ios .form-group-variant .variant-metafield option:disabled { color: #999 !important; background: #f5f5f5 !important; } /* Hide Select2 on iOS mobile for this specific element */ .ios .form-group-variant .select2-container { display: none !important; } /* Ensure label styling on iOS */ .ios .form-group-variant label { font-size: 14px !important; font-weight: 600 !important; color: #333 !important; margin-bottom: 8px !important; } } /* Non-iOS mobile styles */ @media screen and (max-width: 768px) { body:not(.ios) .form-group-variant .variant-metafield { display: block !important; width: 1px !important; padding: 0 !important; border-color: #fff !important; } } </style> <script> // Detect iOS and add class to body function detectIOS() { const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; if (isIOS) { document.body.classList.add('ios'); // Initialize native select for iOS on variant metafields setTimeout(function() { initIOSVariantMetafields(); }, 100); } return isIOS; } function initIOSVariantMetafields() { const isIOS = document.body.classList.contains('ios'); if (!isIOS) return; // Find all variant metafield selects const variantSelects = document.querySelectorAll('.form-group-variant .variant-metafield'); variantSelects.forEach(function(select) { // Destroy Select2 if it exists if ($(select).hasClass('select2-hidden-accessible')) { $(select).select2('destroy'); } // Remove Select2 classes select.classList.remove('select2-hidden-accessible'); // Show the native select select.style.display = 'block'; select.style.width = '100%'; // Add iOS specific event listeners select.addEventListener('focus', function() { this.style.borderColor = '#007AFF'; this.style.boxShadow = '0 0 0 3px rgba(0, 122, 255, 0.1)'; }); select.addEventListener('blur', function() { this.style.borderColor = '#ddd'; this.style.boxShadow = 'none'; // Clear error styling when field loses focus (if it has value) if (this.value && this.value !== '') { const fieldContainer = this.closest('.form-group-variant'); if (fieldContainer) { fieldContainer.classList.remove('field-error'); const existingError = fieldContainer.querySelector('.error-message'); if (existingError) { existingError.remove(); } } } }); select.addEventListener('change', function() { // Trigger any existing change handlers $(this).trigger('change'); // Clear error styling when value changes (if it has value) if (this.value && this.value !== '') { const fieldContainer = this.closest('.form-group-variant'); if (fieldContainer) { fieldContainer.classList.remove('field-error'); const existingError = fieldContainer.querySelector('.error-message'); if (existingError) { existingError.remove(); } } } }); }); } // Run detection on page load document.addEventListener('DOMContentLoaded', function() { detectIOS(); }); // Also run immediately in case DOM is already loaded if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', detectIOS); } else { detectIOS(); } </script> <div class="selector-wrapper" style="display: none;"><select class="single-option-selector" data-option="option1" id="productSelect-option-0"><option value="Default Title" selected>Default Title</option></select></div><div class="selector-wrapper" style="display: none;"><select class="single-option-selector" data-option="option1" id="productSelect-option-0"><option value="Default Title" selected>Default Title</option></select></div><select name="id[]" id="productSelect" class="product-single__variants ignore hide hide" style="display: none;"> <option selected data-sku="[C]OBIBUN1159" value="42371068461271"> Default Title </option> </select> <script src="//outerbloom.com/cdn/shop/t/138/assets/jquery.magnific-popup.min.js?v=184369421263510081681752652422" type="text/javascript"></script> <script> $('.size-chart-open-popup').magnificPopup({ type:'inline', midClick: true }); </script> <div class="delivery-method-section mb-4"> <h4 class="fw-600 text-uppercase mb-15">Delivery Method</h4> <div class="delivery-method-buttons d-flex gap-2"> <button type="button" class="delivery-method-btn active" data-method="Delivery" style="flex: 1; padding: 12px 24px; border: 1px solid #212121; font-weight: 700; text-transform: uppercase; transition: all 0.3s ease; background-color: #EEEEEE; color: #212121; cursor: pointer;"> Delivery </button> <button type="button" class="delivery-method-btn" data-method="Pickup" style="flex: 1; padding: 12px 24px; border: 1px solid #212121; font-weight: 400; text-transform: uppercase; transition: all 0.3s ease; background-color: #ffffff; color: #212121; cursor: pointer;"> Pickup </button> </div> <input type="hidden" id="selectedShippingMethod" value="Delivery" /> <input type="hidden" id="selectedPickupLocation" value="" /> </div> <div class="upload-image-preview"> <style> .file-dnd * { margin: 0; padding: 0; box-sizing: border-box; } .file-dnd { width: 100%; height: 250px; border: 1px solid #ddd; border-radius: 10px; padding: 15px; display: flex; flex-direction: column; gap: 10px; /* box-shadow: 0px 2px 10px 2px rgba(0,0,0,0.05); */ margin: auto; } .file-dnd input { display: none; } .file-dnd .before-upload { border: 1px dashed #888; flex: 1; border-radius: 5px; display: flex; justify-content: center; align-items: center; text-align: center; cursor: pointer; } .file-dnd .before-upload > div { display: flex; flex-direction: column; align-items: center; gap: 8px; } .file-dnd .before-upload > div h4 { width: 150px; } .file-dnd .before-upload > div p { font-size: 12px !important; color: #555; } .file-dnd.active .before-upload { border: 1px solid #5750d9; background-color: #f5f5ff; } .file-dnd .after-upload { position: relative; display: none; } .file-dnd .after-upload img { width: 100%; border-radius: 5px; max-height: 180px; object-fit: contain; display: block; } .file-dnd .after-upload .clear-btn { position: absolute; top: 10px; right: 10px; background: rgba(0, 0, 0, 0.5); width: 15px; height: 15px; text-align: center; line-height: 15px; border-radius: 50%; color: #fff; cursor: pointer; font-size: 14px; } </style> <div class="file-dnd mb-3" style="display: none"> <label for="upload-photo">Upload your Photo:</label> <input type="file" id="upload-photo" accept="image/*" /> <input type="hidden" data-properties="Photo" /> <div class="before-upload"> <div> <svg id="surface1" xmlns="http://www.w3.org/2000/svg" width="33.053" height="41.719" viewBox="0 0 33.053 41.719"> <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> <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> <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> </svg> <h4>Drag & Drop Photo file or Browse</h4> <p>Supports: JPEG, PNG, GIF, TIFF</p> </div> </div> <div class="after-upload"> <div class="clear-btn">×</div> <img src="" width="" height="" /> </div> </div> <script> function applyDndFile(el) { const parent = document.querySelector(".file-dnd") const beforeUploadEl = el.querySelector(".before-upload") const afterUploadEl = el.querySelector(".after-upload") const inputFile = el.querySelector("input[type=file]") const imagePreview = el.querySelector(".after-upload img") const clearBtn = el.querySelector(".after-upload .clear-btn") const inputProps = parent.querySelector("[data-properties]"); async function upload(name, uri, type) { try { const filename = name.split('.')[0] let formData = new FormData(); formData.append("file", uri); const response = await fetch(`https://app.asmaraku.com/api/upload?name=${filename}&dir=gift&type=${type}&shop=outerbloom1.myshopify.com`, { method: "POST", body: formData }) if(response) { const res = await response.json() return res } } catch(err){ console.log(err) } } function showImagePreview(img) { if(img){ const blobUrl = URL.createObjectURL(img) imagePreview.src = blobUrl afterUploadEl.style.display = "block" beforeUploadEl.style.display = "none" } } beforeUploadEl.addEventListener("click", (e) => { e.preventDefault() inputFile.click() }) inputFile.addEventListener("change", async (e) => { e.preventDefault() showImagePreview(e.target.files[0]) var uploadData = await upload(e.target.files[0].name, e.target.files[0], e.target.files[0].type) inputProps.value = uploadData?.url }) clearBtn.addEventListener("click", (e) => { afterUploadEl.style.display = "none" beforeUploadEl.style.display = "flex" inputProps.value = "" }) beforeUploadEl.addEventListener("dragover", (e) => { e.preventDefault() el.classList.add("active") }) beforeUploadEl.addEventListener("dragleave", (e) => { e.preventDefault() el.classList.remove("active") }) beforeUploadEl.addEventListener("drop", async (e) => { e.preventDefault() el.classList.remove("active") showImagePreview(e.dataTransfer.files[0]) var uploadData = await upload(e.dataTransfer.files[0].name, e.dataTransfer.files[0], e.dataTransfer.files[0].type) console.log(uploadData) inputProps.value = uploadData?.url }) } applyDndFile(document.querySelector(".file-dnd")) $(document).ready(function(){ $(".variant-swatch").change(function(){ const v = $(this).val().toLowerCase() const list = ["photo", "custom one side", "custom two side"] if(list.some(item => v.includes(item))) return $(".file-dnd").show() $(".file-dnd").hide() $(".file-dnd").find("[data-properties]").val("") $(".after-upload").hide() $(".before-upload").css("display", "flex") }) }) </script> </div> <div class="delivery-city mb-4"> <h4 class="fw-600 text-uppercase mb-15">Delivery City</h4> <div class="row justify-content-between m-0"> <select id="cities" class="form-control" required=""> <option value="" selected>Choose Delivery City</option> <option data-province="DKI Jakarta" data-city="Jakarta" data-note="undefined" data-price="0" value="Jakarta">Jakarta (Promo Free Delivery)</option><option data-province="Jawa Barat" data-city="Bekasi" data-note="undefined" data-price="0" value="Bekasi">Bekasi (Promo Free Delivery)</option><option data-province="Jawa Barat" data-city="Depok" data-note="undefined" data-price="0" value="Depok">Depok (Promo Free Delivery)</option><option data-province="Banten" data-city="Tangerang" data-note="undefined" data-price="0" value="Tangerang">Tangerang (Promo Free Delivery)</option><option data-province="Jawa Barat" data-city="Bandung" data-note="undefined" data-price="0" value="Bandung">Bandung (Promo Free Delivery)</option><option data-province="Jawa Barat" data-city="Bogor" data-note="undefined" data-price="100000" value="Bogor">Bogor (Rp 100.000)</option><option data-province="Bali" data-city="Bali" data-note="undefined" data-price="50000" value="Bali">Bali (Rp 50.000)</option><option data-province="Jawa Timur" data-city="Surabaya" data-note="undefined" data-price="50000" value="Surabaya">Surabaya (Rp 50.000)</option><option data-province="Jawa Timur" data-city="Malang" data-note="undefined" data-price="50000" value="Malang">Malang (Rp 50.000)</option><option data-province="DI Yogyakarta" data-city="Yogyakarta" data-note="undefined" data-price="50000" value="Yogyakarta">Yogyakarta (Rp 50.000)</option><option data-province="Jawa Tengah" data-city="Semarang" data-note="undefined" data-price="50000" value="Semarang">Semarang (Rp 50.000)</option><option data-province="" data-city="" data-note="undefined" data-price="0" value="Kota Lainnya">Seluruh Kota Lain di Indonesia </option></select> </div> </div> <style> /* Native select styling for #cities */ #cities { width: 100%; padding: 10px 35px 10px 12px; font-size: 14px; border: 1px solid #ccc; background-color: #fff; 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; background-repeat: no-repeat !important; background-position: right 10px center !important; background-size: 12px !important; appearance: none; -webkit-appearance: none; -moz-appearance: none; cursor: pointer; } #cities { /* Menghilangkan panah di Chrome, Safari, dan Firefox */ -webkit-appearance: none; -moz-appearance: none; appearance: none; } /* Hide default arrow in IE */ #cities:-ms-expand { display: none; } #cities:focus { border-color: #212121; outline: none; box-shadow: 0 0 0 2px rgba(33, 33, 33, 0.1); } #cities:hover { border-color: #999; } #cities option { padding: 10px; } </style> <script> // Cities dropdown uses native HTML select </script> <div id="pickupInfoITC" style="display: none; margin-top: 8px; margin-bottom: 8px; padding: 12px; background-color: #f8f8f8; border: 1px solid #e0e0e0; font-size: 14px; line-height: 1.6; color: #212121;"> <p style="margin: 0 0 8px 0;"><strong>ITC Kuningan Mall</strong></p> <p style="margin: 0 0 8px 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> <p style="margin: 0;"><strong>Pickup Hours:</strong> 10:00 - 16:00</p> </div> <div id="row-delivery-date" class="row m-0 mb-3"> <h4 class="fw-600 text-uppercase col-12 p-0 mb-15">Delivery Date</h4> <div id="deliveryDate" class="m-0"> <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> Mon<span>--</span> </button> <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> Tue<span>--</span> </button> <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> Wed<span>--</span> </button> <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> Thu<span>--</span> </button> <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> Fri<span>--</span> </button> <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> Sat<span>--</span> </button> </div> <div id="deliveryDateFull"> <div class=""> <input type="button" id="full-date" class="date-full calendarbutton btn steps-btn btn-date-time mb-0 hasDatepicker" value="Full Calendar" /> <label for="full-date"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> <title>icon-arrow-right</title> <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> </svg></label> </div> <button class="btnChangeDeliveryDate hide">Change Delivery Date</button> </div> <div class="form-group p-0"> <input type="text" id="propDeliveryDate" required="" class="hide" /> </div> </div> <p id="noteDeliveryDate" class="mb-3"></p> <div id="row-delivery-time" class="row m-0 mb-3"> <h4 class="fw-600 text-uppercase col-12 p-0 mb-15">Delivery Time</h4> <div id="deliveryTime" class="d-flex w-100 m-0"> <button class="time-single calendarbutton2 btn steps-btn" disabled title="Please select delivery city first"> Morning<br />08:00-13:00 </button> <button class="time-single calendarbutton2 btn steps-btn" disabled title="Please select delivery city first"> Afternoon<br />13:00-18:00 </button> <button class="time-single calendarbutton2 btn steps-btn" disabled title="Please select delivery city first"> Evening<br />17:00-22:00 </button> </div> <div class="form-group p-0"> <input type="text" id="propDeliveryTime" class="hide" required="" /> </div> </div> <div id="personalizeBtn"> <button id="btnPurchase" class="btn text-uppercase w-100 fw-400">MAKE IT PERSONAL ➔</button> <div class="button-share-wishlist d-flex justify-content-around mt-3"> <div class="button-share text-center"> <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"> <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"></path> </svg> </p> </div> <div class="button-wishlist text-center"> <button type="button" id="wishButton" class="d-flex gap-2 wishlist-toggle" data-wishlist-button="" data-product-handle="the-novo-enchanted-dome-passionate-red" style="background: none; border: none; cursor: pointer; padding: 0; color: inherit; align-items: center; justify-content: center;"> <span>WISHLIST</span> <div class="wishlist-icon-wrapper" style="display: flex; align-items: center; justify-content: center; width: 16px; height: 22px;"> <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;"> <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.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"></path> </svg> <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;"> <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"></path> </svg> </div> </button> </div> </div> </div> </div> <div class="purchasePopup purchasePopupSpotify" style="display: none;"> <div class="purchaseArea"> <div class="sectionPurchase sectionPurchaseSpotify"> <div class="wrapperPurchase"> <div class="headerPurchase"> <h3>personalize spotify photo print</h3> <a class="close-purchase-popup"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none"> <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> </svg> </a> </div> <div class="contentPurchase"> <div class="spotifyAddons"></div> </div> <div class="purchase-button btn-addon row m-0" style="display: none;"> <div class="col-12 col-lg-2 text-left mb-2 p-0"> <button class="back-purchase-button back-addon text-uppercase"> <svg width="15" height="14" viewBox="0 0 15 14" fill="none" 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"></path> </svg> <span>Back</span> </button> </div> <div class="col-12 col-lg-10 text-right" style="display: flex;justify-content: end;gap: 20px;"> <button class="btn next-purchase-button next-addon text-uppercase"> <span>continue without add-ons</span> </button> </div> </div> </div> </div> </div> </div> <style> #PBarNextFrameWrapper { display: none; } #backgroundPopup { display: none; position: fixed; _position: absolute; height: 100%; width: 100%; top: 0; left: 0; background: rgb(117 117 117 / 24%); z-index: 1; } .sectionPurchase { height: 100%; position: relative; max-width: 1344px; background-color: #fff; padding: 0; overflow: hidden; /* Changed from auto to hidden */ display: flex; flex-direction: column; } .sectionPurchase.purchaseAddonSpotify { max-width: 1070px!important; max-height: 765px!important; } .sectionPurchaseBoard { max-width: 872px!important; max-height: 821px!important; } .purchaseAddonSpotify .btn-action { position: absolute; bottom: 0; left: 0; width: 100%; display: flex; gap: 10px; } .wrapperPurchase { position: relative; height: 100%; display: flex; flex-direction: column; } /* New styles for scrollable content and sticky button */ .purchase-content { flex: 1; overflow-y: auto; overflow-x: hidden; padding: 20px; } .purchase-button-wrapper { position: sticky; bottom: 0; background-color: #fff; border-top: 1px solid #e0e0e0; padding: 15px 0; margin-top: auto; z-index: 10; } .purchasePopup { display: none; position: fixed; background: rgb(117 117 117 / 24%); z-index: 999; padding: 40px; font-size: 13px; top: 0; left: 0; width: 100%; height: 100%; } .popupPurchaseClose{ font-size:14px; line-height:14px; right:45px; top:45px; position:absolute; color:#6fa5fd; font-weight:700; display:block; cursor: pointer; } .headerPurchase { margin-bottom: 30px; display: flex; justify-content: space-between; } .headerPurchase h3 { font-size: 16px; text-transform: uppercase; } .sectionPurchaseBoard .headerPurchase { margin-bottom: 15px; } .sectionPurchaseBoard .formAddressPurchase { padding-top: 0; } .purchaseArea { position: relative; height: 100%; } .purchaseArea h4 { width: 100%; font-size: 12px; font-weight: 600; margin-bottom: 10px; text-transform: uppercase; } .menuPurchase { margin-bottom: 30px; } .menuPurchase ul { list-style-type: none; margin: 0; } .menuPurchase ul li { display: inline-block; border: 1px solid #212121; padding: 5px 20px; margin-right: 5px; margin-bottom: 10px; font-size: 12px; font-weight: 400; } .menuPurchase ul li:hover, .menuPurchase ul li.selected { background-color: #212121; color: #ffffff; } .contentPurchase h5 { font-size: 12px; margin-bottom: 10px; font-weight: 400; overflow: hidden; } /* Card */ #itemCards { max-height: 430px; overflow: auto; } .item-cards { width: 100%; } .item-card.selected { border: 1px solid #212121; } .item-card:hover { border: 1px solid #C4C4C4; } .item-cards .item-card { position: relative; width: calc(33% - 10px); max-width: calc(33% - 10px); flex: 0 0 calc(33% - 10px); margin-bottom: 20px; } .item-cards .item-card label, .item-addons .item-addon label { position: absolute; left: 0; width: 100%; height: 100%; } .item-cards .item-card .card-image img, .item-addons .item-addon .card-image img { display: block; width: 100%; } .item-card .card-meta, .item-addon .card-meta { padding: 10px 5px 5px; } .item-card.selected .card-meta, .item-addon.selected .card-meta, .item-card.selected .card-qty { background-color: #212121; color: #fff; visibility: visible!important; } .item-card:hover .card-meta, .item-addon:hover .card-meta, .item-card:hover .card-qty { background-color: #C4C4C4; color: #fff; visibility: visible!important; } .item-cards .item-card p, .item-addons .item-addon p { font-size: 12px !important; margin: 0; font-weight: 600; } .item-card .card-meta input, .item-addon .card-meta input { display: none; } .item-cards .item-card h5, .item-addons .item-addon h5 { font-size: 14px; } @media (max-width: 768px) { .item-cards .item-card { width: calc(50% - 10px); max-width: calc(50% - 10px); flex: 0 0 calc(50% - 10px); margin-bottom: 0; } } .card-qty { display: flex; padding: 5px; visibility: hidden; background-color: #fff !important; z-index: 999; } .card-qty a { border-width: 1px; width: 30%; cursor: pointer; text-align: center; align-self: center; height: 28px; display: block; position: relative; } .card-qty a svg { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; } input.btn-qty { border-width: 0px; border-radius: 0; background-color: #fff; -webkit-appearance: none; box-shadow: none !important; -webkit-box-shadow: none !important; -moz-box-shadow: none!important; width: 40%; border-left: 1px solid #c4c4c4; border-right: 1px solid #c4c4c4; padding: 0; } .sectionPurchaseBoard #itemAddons .item-card { width: calc(20% - 15px); max-width: calc(20% - 15px); flex: 0 0 calc(20% - 15px); } .purchase-button { width: 100%; padding: 0; /* Reset padding as it's now handled by wrapper */ margin: 0; } .sectionPurchaseBoard .purchase-button { margin-top: 0 !important; /* Reset margin */ } .back-purchase-button, .back-spotify { width: 139px; border: 1px solid; height: 43px; } .purchase-button .btn { width: 297px; height: 43px; background-color: #212121; color: #ffffff; } .purchase-button .btn[disabled] { background-color: #EEEEEE; } .back-purchase-button svg, .back-spotify svg { align-self: center; vertical-align: middle; margin-right: 10px; } #purchaseProduct .row .error { font-size: 12px !important; color: rgb(231, 76, 60); margin-top: 5px; } .reviewCardPurchase { max-width: 448px; float: right; } .addonsPurchase .addon-item {display: flex;justify-content: space-between;} .addon-item * {align-self: center;font-size: 12px;} .addon-itm-title {width: 360px;} .addon-itm-line-price {color: #757575;width: 80px;justify-content: space-between;display: flex;} .propsAddonSpotify p { margin: 0; display: flex; font-size: 12px !important; margin-bottom: 5px; } .propsAddonSpotify p span:first-child { text-transform: uppercase; font-weight: 600; -ms-flex: 0 0 150px; flex: 0 0 150px; max-width: 150px; } .addonsPurchase .addons { max-height: 250px; overflow: auto; } .btn .loading:after { content: ""; display: inline-block; width: 20px; height: 20px; padding: 3px; aspect-ratio: 1; border-radius: 50%; background: #FFFFFF; --_m: conic-gradient(#0000 10%, #212121), linear-gradient(#212121 0 0) content-box; -webkit-mask: var(--_m); mask: var(--_m); -webkit-mask-composite: source-out; mask-composite: subtract; animation: l3 1s infinite linear; margin: auto; vertical-align: middle; margin-left: 10px; } #qrcode img, #qrcode canvas { width: 50px; position: absolute; top: 12px; left: 16px; } .t-preview { position: absolute; top: 17px; left: 75px; } .t-preview p { margin: 0; font-size: 12px !important; } .t-preview .h3 { font-size: 16px !important; margin-bottom: 5px; font-weight: 600; } .scanCard { width: 100%; border: 1px solid; height: 76px; background-color: #fff; } .scanCard > div > img { position: absolute; right: 0; width: 55px; } @keyframes l3 { 100% { transform: rotate(1turn); } } @media (min-width: 991px) { .sectionPurchase { height: 100%; position: relative; max-width: 1344px; background-color: #fff; top: 50%; left: 50%; transform: translate(-50%, -50%); } .headerPurchase h3 { font-size: 20px; } .purchaseArea h4 { font-size: 16px; } .menuPurchase ul li { font-size: 16px; } .contentPurchase { margin-bottom: 30px; } .contentPurchase h5 { font-size: 16px; } .item-cards .item-card p, .item-addons .item-addon p { font-size: 16px !important; } .cards { float: right; width: 400px; } .item-cards .item-card { width: calc(25% - 30px); max-width: calc(25% - 30px); flex: 0 0 calc(25% - 30px); margin-right: 30px; } #itemAddons .item-card { position: relative; width: calc(16% - 40px); max-width: calc(16% - 40px); flex: 0 0 calc(16% - 40px); } .purchase-button-wrapper { padding: 10px 20px; } } @media (max-width: 1200px) { .item-cards .item-card { width: calc(33% - 30px); max-width: calc(33% - 30px); flex: 0 0 calc(33% - 30px); } } @media (max-width: 992px) { .purchasePopup { padding: 0; } .item-cards .item-card h5, .item-addons .item-addon h5 { max-height: 30px; } .back-purchase-button, .back-spotify, .next-purchase-button { width: 100%; } .addon-itm-title { width: 300px; } .addon-itm-line-price { margin-right: 10px; } .t-preview { top: 10px; } .card-qty a { height: 15px; } .purchase-button-wrapper { padding: 15px; } } @media (max-width: 576px) { .purchase-button .btn { width: 100%!important; } .purchase-button > .col-12 { padding-left: 0; padding-right: 0; } } </style> <div class="purchasePopup"> <div class="purchaseArea"> <div class="sectionPurchase purchasePersonalize"> <div class="wrapperPurchase"> <div class="purchase-content"> <div class="headerPurchase"> <h3 class="text-uppercase"> MAKE IT PERSONAL ➔ </h3> <a class="close-purchase-popup"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none"> <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> </svg> </a> </div> <div class="contentPurchase"> <div class="row"> <div class="col-12 col-lg-7"> <div class="menuPurchase"> <h4 class="text-uppercase">choose your occasion</h4> <ul> <li class="item-occassion selected" data-occassion="greeting-card-all"> General </li> <li class="item-occassion" data-occassion="greeting-card-birthday"> Birthday </li> <li class="item-occassion" data-occassion="greeting-card-anniversary"> Anniversary </li> <li class="item-occassion" data-occassion="greeting-card-newborn"> Newborn </li> <li class="item-occassion" data-occassion="greeting-card-wedding"> Wedding </li> <li class="item-occassion" data-occassion="greeting-card-graduation"> Graduation </li> <li class="item-occassion" data-occassion="greeting-card-mothers-day"> Mother's Day </li> <li class="item-occassion" data-occassion="greeting-card-valentine"> Valentine </li> <li class="item-occassion" data-occassion="greeting-card-others" style="display: none"> Others </li> </ul> </div> <div id="chooseCard"> <h4 class="text-uppercase">choose your card design</h4> <div id="itemCards" class="item-cards d-flex mb-4"> <div class="row m-0 items-card w-100"> <p style="margin: 50px auto;text-align: center;font-size: 13px !important;"> There are no card items available.<br /> Please choose an occasion above </p> </div> </div> </div> </div> <div class="col-12 col-lg-5"> <div class="cards"> <h4 class="mb-2">Personalize your Message</h4> <label class="font-weight-bold label-attach-foto">Create a lasting memory. Attach a special photo or a video to cherish forever.</label> <style> #greetingCard label {display: inline-block;color: #212121;margin-bottom: .5rem;font-size: 14px;font-weight: 400!Important;} /* Character counter positioning */ .form-group.has-counter { position: relative; } .limit { position: absolute; top: 4px; right: -30px; font-size: 11px; color: #999; background: rgba(255, 255, 255, 0.9); padding: 2px 6px; border-radius: 3px; z-index: 10; pointer-events: none; } .form-group.has-counter input, .form-group.has-counter textarea { padding-right: 0px; } /* Prefix selector styles */ .prefix-selector-wrapper { margin: 5px 0; } .prefix-selector-wrapper label { display: inline-block; margin-right: 10px; vertical-align: middle; } .prefix-selector { border: none; font-size: 12px; background: white; cursor: pointer; width: auto; max-width: 200px; padding: 5px; padding-right: 25px; appearance: none; -webkit-appearance: none; -moz-appearance: none; 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'); background-repeat: no-repeat; background-position: right 5px center; background-size: 12px; vertical-align: middle; } .label-prefix { cursor: pointer; user-select: none; -webkit-user-select: none; } .label-prefix.hidden { display: none!important; } </style> <div id="greetingCard"> <div class="greetingCard"> <div class="steps-card-preview d-flex align-items-center justify-content-center"> <div class="case-img-preview"> <div class="remove-image" style="display: none"> <svg class="icon icon-close" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> <title>icon-close</title> <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> </svg> </div> <div class="btn-upload"> <div> <img class="preview-image" src="" alt="" style="display: none" /> </div> <div class="icon-upload"> <button type="button"> <img class="ajax-loader" src="//outerbloom.com/cdn/shop/t/138/assets/ajax-loader.gif?v=41356863302472015721752652421" style="display: none" /> <div class="placeholder-image" onclick=""> <label for="input-foto" onclick=""><img src="//outerbloom.com/cdn/shop/t/138/assets/icon-media_60x.png?v=142273593979200676731752652420" width="" height="" alt="" /></label> <div class="button-empty-state" onclick=""> <label for="input-foto" onclick="" class="btn btn-upload-image"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="17" viewBox="0 0 16 17" fill="none"> <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"></path> <path d="M10.25 7C10.8015 7 11.25 6.5515 11.25 6C11.25 5.4485 10.8015 5 10.25 5C9.6985 5 9.25 5.4485 9.25 6C9.25 6.5515 9.6985 7 10.25 7ZM10.25 5.5C10.349 5.4999 10.4459 5.52918 10.5283 5.58414C10.6106 5.6391 10.6749 5.71726 10.7128 5.80874C10.7507 5.90021 10.7607 6.00089 10.7414 6.09802C10.7221 6.19515 10.6744 6.28438 10.6044 6.35441C10.5344 6.42443 10.4452 6.47211 10.348 6.49141C10.2509 6.5107 10.1502 6.50075 10.0587 6.46281C9.96726 6.42486 9.8891 6.36063 9.83414 6.27825C9.77918 6.19587 9.7499 6.09903 9.75 6C9.75 5.7245 9.974 5.5 10.25 5.5Z" fill="black"></path> <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"></path> </svg> <span>Upload Image</span> </label> <label for="input-video" onclick="" class="btn btn-upload-video"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" viewBox="0 0 20 17" fill="none"> <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"></path> <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.5732 4.82322C16.5263 4.87011 16.5 4.9337 16.5 5C16.5 5.0663 16.5263 5.12989 16.5732 5.17678C16.6201 5.22366 16.6837 5.25 16.75 5.25ZM16.75 3.25H17.75C17.8163 3.25 17.8799 3.22366 17.9268 3.17678C17.9737 3.12989 18 3.0663 18 3C18 2.9337 17.9737 2.87011 17.9268 2.82322C17.8799 2.77634 17.8163 2.75 17.75 2.75H16.75C16.6837 2.75 16.6201 2.77634 16.5732 2.82322C16.5263 2.87011 16.5 2.9337 16.5 3C16.5 3.0663 16.5263 3.12989 16.5732 3.17678C16.6201 3.22366 16.6837 3.25 16.75 3.25ZM16.75 7.25H17.75C17.8163 7.25 17.8799 7.22366 17.9268 7.17678C17.9737 7.12989 18 7.0663 18 7C18 6.9337 17.9737 6.87011 17.9268 6.82322C17.8799 6.77634 17.8163 6.75 17.75 6.75H16.75C16.6837 6.75 16.6201 6.77634 16.5732 6.82322C16.5263 6.87011 16.5 6.9337 16.5 7C16.5 7.0663 16.5263 7.12989 16.5732 7.17678C16.6201 7.22366 16.6837 7.25 16.75 7.25ZM16.75 9.25H17.75C17.8163 9.25 17.8799 9.22366 17.9268 9.17678C17.9737 9.12989 18 9.0663 18 9C18 8.9337 17.9737 8.87011 17.9268 8.82322C17.8799 8.77634 17.8163 8.75 17.75 8.75H16.75C16.6837 8.75 16.6201 8.77634 16.5732 8.82322C16.5263 8.87011 16.5 8.9337 16.5 9C16.5 9.0663 16.5263 9.12989 16.5732 9.17678C16.6201 9.22366 16.6837 9.25 16.75 9.25ZM16.75 11.25H17.75C17.8163 11.25 17.8799 11.2237 17.9268 11.1768C17.9737 11.1299 18 11.0663 18 11C18 10.9337 17.9737 10.8701 17.9268 10.8232C17.8799 10.7763 17.8163 10.75 17.75 10.75H16.75C16.6837 10.75 16.6201 10.7763 16.5732 10.8232C16.5263 10.8701 16.5 10.9337 16.5 11C16.5 11.0663 16.5263 11.1299 16.5732 11.1768C16.6201 11.2237 16.6837 11.25 16.75 11.25ZM16.75 13.25H17.75C17.8163 13.25 17.8799 13.2237 17.9268 13.1768C17.9737 13.1299 18 13.0663 18 13C18 12.9337 17.9737 12.8701 17.9268 12.8232C17.8799 12.7763 17.8163 12.75 17.75 12.75H16.75C16.6837 12.75 16.6201 12.7763 16.5732 12.8232C16.5263 12.8701 16.5 12.9337 16.5 13C16.5 13.0663 16.5263 13.1299 16.5732 13.1768C16.6201 13.2237 16.6837 13.25 16.75 13.25ZM17.75 14.75H16.75C16.6837 14.75 16.6201 14.7763 16.5732 14.8232C16.5263 14.8701 16.5 14.9337 16.5 15C16.5 15.0663 16.5263 15.1299 16.5732 15.1768C16.6201 15.2237 16.6837 15.25 16.75 15.25H17.75C17.8163 15.25 17.8799 15.2237 17.9268 15.1768C17.9737 15.1299 18 15.0663 18 15C18 14.9337 17.9737 14.8701 17.9268 14.8232C17.8799 14.7763 17.8163 14.75 17.75 14.75Z" fill="black"></path> </svg> <span>Upload Video</span> </label> </div> </div> </button> </div> </div> </div> <div class="case-video-preview"> <div class="d-flex justify-content-between"> <p>Add video to make it more special (optional)</p> <button class="remove-media" style="display: none"> <svg class="icon icon-close" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> <title>icon-close</title> <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> </svg> </button> <label id="label-input-video" for="input-video" onclick="" style=""> <img class="ajax-loader" src="//outerbloom.com/cdn/shop/t/138/assets/ajax-loader.gif?v=41356863302472015721752652421" style="display: none;vertical-align: middle;" /> <span><img src="//outerbloom.com/cdn/shop/t/138/assets/icon-upload-video_icon.png?v=10584829661837769631752652419" /><span>Upload Video</span></span> </label> </div> </div> </div> <div class="steps-card-input"> <div class="prefix-selector-wrapper"> <label for="prefixSelector" class="font-weight-bold m-0">Prefix:</label> <select id="prefixSelector" class="prefix-selector"> <option value="">None</option> <option value="Dear" selected>Dear</option> <option value="To">To</option> <option value="Hi">Hi</option> </select> </div> <div class="form-group mr-auto form-group-half form-recipient has-counter d-flex"> <label for="" class="font-weight-bold m-0 pr-1 label-prefix" style="border-bottom: 1px solid #212121;">Dear</label> <input type="text" id="recipientNameInput" class="form-control has-limit" data-properties="penerima" placeholder="RECIPIENT NAME" maxlength="30" /> <small class="limit text-muted">(30)</small> </div> <div class="form-group custom-card mb-2 has-counter"> <textarea data-properties="ucapan" class="form-control has-limit" rows="6" placeholder="Write your special message here.." maxlength="300"></textarea> <small class="limit text-muted">(300)</small> <!-- <a href="#" data-card-occassion="all"> <div class="rectangle-promo-code"> <span class="promo-code-link">Get ideas</span> </div> </a> --> <button id="msgCard">Template Message</button> </div> <div class="hide"> <input type="hidden" value="" id="note_id" name="note_id" style="top: 0px;" /> <input type="hidden" value="" id="note_btn_id" name="note_btn_id" /> </div> <div class="form-group ml-auto mt-3 text-right form-group-half position-relative has-counter"> <label for="" class="font-weight-bold d-none">Yours Sincerely,</label> <input id="senderCard" type="text" class="form-control text-right has-limit" data-properties="pengirim" placeholder="SENDER NAME" maxlength="30" /> <small class="limit text-muted">(30)</small> </div> </div> </div> </div> <script> async function getFetch(url) { const response = await fetch(url); const result = await response.json(); return result; } $(document).ready(function(){ // Prefix selector functionality var prefixOptions = ['Dear', 'To', 'Hi']; var isUpdatingPrefix = false; function getNameWithoutPrefix(value) { var trimmed = value.trim(); for (var i = 0; i < prefixOptions.length; i++) { var prefix = prefixOptions[i]; if (trimmed.toLowerCase().indexOf(prefix.toLowerCase() + ' ') === 0) { return trimmed.substring(prefix.length); } } return trimmed; } function detectPrefix(value) { var trimmed = value.trim(); for (var i = 0; i < prefixOptions.length; i++) { var prefix = prefixOptions[i]; if (trimmed.toLowerCase().indexOf(prefix.toLowerCase() + ' ') === 0) { return prefix; } } return ''; } function applyPrefixToInput(prefix) { var recipientInput = $('#recipientNameInput'); var nameOnly = getNameWithoutPrefix(recipientInput.val()); if (!nameOnly) { recipientInput.val(''); return; } if (prefix === '') { recipientInput.val(nameOnly); } else { recipientInput.val(prefix + ' ' + nameOnly); } } $('#prefixSelector').on('change', function() { var selectedPrefix = $(this).val(); var recipientInput = $('#recipientNameInput'); var labelPrefix = $('.label-prefix'); isUpdatingPrefix = true; applyPrefixToInput(selectedPrefix); isUpdatingPrefix = false; // Update label-prefix text and visibility if (selectedPrefix === '') { labelPrefix.addClass('hidden'); labelPrefix.text(''); } else { labelPrefix.text(selectedPrefix).removeClass('hidden'); } recipientInput.focus(); }); // Click label-prefix to open selector $('.label-prefix').on('click', function() { $('#prefixSelector').focus().click(); }); // Initialize label-prefix based on current selector value var initialPrefix = $('#prefixSelector').val(); if (initialPrefix === '') { $('.label-prefix').addClass('hidden'); } else { $('.label-prefix').text(initialPrefix); } $('#recipientNameInput').on('input', function() { if (isUpdatingPrefix) { return; } var currentValue = $(this).val(); // If input is cleared, reset prefix to None if (!currentValue) { isUpdatingPrefix = true; $('#prefixSelector').val(''); isUpdatingPrefix = false; return; } }); // Initialize prefix selector based on current value $('#prefixSelector').val('Dear'); $('textarea.has-limit, input.has-limit').keyup(function () { max = this.getAttribute("maxlength"); var len = $(this).val().length; var limit = $(this).siblings(".limit"); if (len >= max) { alert('you have reached the limit'); } else { var char = max - len; limit.text('('+char+')'); } }); // Limit textarea to maximum 6 lines $('[data-properties=ucapan]').on('input keydown paste', function(e) { var textarea = $(this); var lines = textarea.val().split('\n'); // Check if trying to add more than 6 lines if (lines.length > 6) { // Prevent adding new line if already at 6 lines if (e.type === 'keydown' && e.keyCode === 13) { e.preventDefault(); return false; } // Trim to 6 lines if pasting content if (e.type === 'paste' || e.type === 'input') { var limitedText = lines.slice(0, 6).join('\n'); textarea.val(limitedText); } } // Update character counter after line limit check var max = this.getAttribute("maxlength"); var len = $(this).val().length; var limit = $(this).siblings(".limit"); var char = max - len; limit.text('('+char+')'); }); var text_max=150; var msg_text=""; $('#previewMsg').html(msg_text); $('[data-properties=ucapan]').keyup(function(){ var text_length=$(this).val().length; var msg_text=$(this).val(); $('#previewMsg').html(msg_text); }); var note_btn_text = [ [0,'Try Another'], [1,'One More Time'], [2,'Almost There'], [3,'Next'] ]; $("#greetingCard").delegate("#show_note", "click", async function(event){ event.preventDefault(); const source = await getFetch(`https://outerbloom.com/cdn/shop/t/87/assets/greeting_card.json?v=${new Date()}`) const occassion = $("#show_note").attr("data-card-occassion") let {data} = source.find((el) => el.name === occassion); var notes = data; const getRandomIntegerInclusive = (min, max) => { min = Math.ceil(min) max = Math.floor(max) return Math.floor(Math.random() * (max - min + 1)) + min } const idx = getRandomIntegerInclusive(0, data.length - 1) var note=notes[idx]; $('#note_id').val(idx); $('[data-properties], #msgDelivery').val(note); var text_length=$(this).val().length; $('#previewMsg').html(note); var idx_2=parseInt($('#note_btn_id').val()); if(isNaN(idx_2)){ idx_2=0; }else{ idx_2++; idx_2=idx_2%note_btn_text.length; } $('#note_btn_id').val(idx_2); var note_btn=note_btn_text[idx_2][1]; $('#note_btn').text(note_btn); }); }); </script> </div> </div> </div> </div> </div> <div class="purchase-button-wrapper"> <div class="purchase-button btn-card row m-0"> <div class="col-12 col-lg-2 text-left mb-2 p-0"> </div> <div class="btn-next-card col-12 col-lg-10 text-right"> <button id="skip-card" style="align-self: center;text-decoration: underline"> <span> USE BLANK CARD </span> </button> <button id="save-card" class="btn next-purchase-button text-uppercase" disabled> <span>SAVE & PERSONALIZE GIFT</span> </button> </div> </div> </div> </div> </div> <div class="sectionPurchase purchaseAddon hide" data-section="addon"> <div class="wrapperPurchase"> <div class="purchase-content"> <style> .item-card[data-qty="0"] { display: none; } .item-card[data-id="8835692069079"] { display: none; } /* Mobile horizontal scroll styles for add-ons */ @media (max-width: 768px) { #itemAddons { overflow-x: auto; overflow-y: hidden; -webkit-overflow-scrolling: touch; /* smooth scrolling on iOS */ scrollbar-width: none; /* Firefox */ -ms-overflow-style: none; /* IE 10+ */ } #itemAddons::-webkit-scrollbar { display: none; /* Chrome, Safari, Opera */ } #itemAddons .row { flex-wrap: nowrap !important; width: max-content !important; gap: 15px !important; margin: 0 !important; padding: 0 15px; } #itemAddons .item-card { flex: 0 0 auto; min-width: 120px; max-width: 120px; } } /* Desktop version keeps original layout */ @media (min-width: 769px) { #itemAddons .row { flex-wrap: wrap; } } </style> <div class="headerPurchase"> <h3>Make It More Special with Add-Ons!</h3> <a class="close-purchase-popup"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none"> <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> </svg> </a> </div> <div class="contentPurchase"> <div class="regulerAddons"> <div class="menuPurchase"> <ul> <li class="item-addon selected" data-count="" data-addon="upsell-inhouse"> All </li> <li class="item-addon" data-count="18" data-addon="upsell-jewelry"> Jewelry </li> <li class="item-addon" data-count="2" data-addon="upsell-cuddlemate"> Cuddlemate </li> <li class="item-addon" data-count="1" data-addon="upsell-diffuser"> Diffuser </li> <li class="item-addon" data-count="1" data-addon="upsell-candle"> Candle </li> <li class="item-addon" data-count="1" data-addon="upsell-beverage"> Beverage </li> <li class="item-addon" data-count="8" data-addon="upsell-cookies"> Cookies </li> </ul> </div> <div id="chooseCard"> <h4 class="text-uppercase">choose your add-ons you like to include</h4> <div id="itemAddons" class="item-cards d-flex mb-4"> <div class="row m-0 gap-20 w-100"> <p>No Item available</p> </div> </div> </div> </div> <!-- <div class="spotifyAddons"></div> --> </div> </div> <div class="purchase-button-wrapper"> <div class="purchase-button btn-addon row m-0"> <div class="col-12 col-lg-2 text-left mb-2 p-0"> <button class="back-purchase-button back-addon text-uppercase"> <svg width="15" height="14" viewBox="0 0 15 14" fill="none" 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"></path> </svg> <span>Back</span> </button> </div> <div class="btn-next-card col-12 col-lg-10 text-right"> <button class="btn next-purchase-button next-addon text-uppercase"> <span>continue without add-ons</span> </button> </div> </div> </div> </div> </div> <div class="sectionPurchase purchaseAddress hide" data-section="address"> <div class="wrapperPurchase"> <div class="purchase-content"> <div class="headerPurchase"> <h3> Complete Your Order </h3> <a class="close-purchase-popup"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none"> <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> </svg> </a> </div> <!-- Select2 CSS --> <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" /> <style> /* Custom Select2 Styling to match form inputs */ .select2-container--default .select2-selection--single { height: 43px !important; border-radius: 0 !important; padding: 0 !important; background-color: #fff !important; border-color: #212121 !important; } .select2-container--default .select2-selection--single .select2-selection__rendered { line-height: 43px !important; padding-left: 16px !important; padding-right: 40px !important; color: #212121 !important; font-size: 14px !important; } .select2-container--default .select2-selection--single .select2-selection__placeholder { color: #212121 !important; font-style: normal; } .select2-container--default .select2-selection--single .select2-selection__arrow { display: none; height: 48px !important; right: 10px !important; } .select2-container--default.select2-container--open .select2-selection--single { border-color: #212121 !important; } .select2-dropdown { border: 1px solid #E5E5E5 !important; border-radius: 0 !important; border-top: none !important; overflow: hidden; padding-bottom: 70px; } .select2-container--default .select2-results__option { padding: 12px 16px !important; font-size: 14px !important; } .select2-container--default .select2-results__option--highlighted[aria-selected] { background-color: #f5f5f5 !important; color: #212121 !important; } .select2-container--default .select2-results__option[aria-selected=true] { background-color: #212121 !important; color: #fff !important; } .select2-search--dropdown .select2-search__field { border: 1px solid #E5E5E5 !important; border-radius: 0 !important; padding: 10px 16px !important; font-size: 14px !important; } .select2-search--dropdown .select2-search__field:focus { border-color: #212121 !important; outline: none !important; } /* Match with form-control styling */ .select2-container { width: 100% !important; } .select2-container--default .select2-selection--single:focus { outline: none !important; } #zipSelectPopup { display: none; } /* Mobile Full-Screen Popup for Zip Selection */ @media (max-width: 991px) { #zipSelectPopup { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: #fff; z-index: 10000; overflow: hidden; } .zip-popup-header { padding: 16px 20px; border-bottom: 1px solid #E5E5E5; display: flex; justify-content: space-between; align-items: center; background: #fff; position: sticky; top: 0; z-index: 10001; } .zip-popup-header h4 { margin: 0; font-size: 16px; font-weight: 600; color: #212121; } .zip-popup-close { background: none; border: none; font-size: 28px; color: #666; cursor: pointer; padding: 0; width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; line-height: 1; } .zip-popup-search { padding: 16px 20px; border-bottom: 1px solid #E5E5E5; background: #fff; position: sticky; top: 57px; z-index: 10001; } .zip-popup-search input { width: 100%; padding: 12px 16px; border: 1px solid #E5E5E5; border-radius: 4px; font-size: 14px; } .zip-popup-search input:focus { outline: none; border-color: #212121; } .zip-popup-list { height: calc(100% - 130px); overflow-y: auto; padding: 0; -webkit-overflow-scrolling: touch; } .zip-popup-list-item { padding: 16px 20px; border-bottom: 1px solid #f5f5f5; cursor: pointer; font-size: 14px; color: #212121; background: #fff; transition: background-color 0.2s; } .zip-popup-list-item:active { background-color: #f5f5f5; } .zip-popup-list-item.selected { background-color: #212121; color: #fff; } .zip-popup-list-item:last-child { border-bottom: none; } /* Hide select arrow on mobile */ #zip { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-image: none; cursor: pointer; font-size: 14px; padding-right: 16px; } } </style> <!-- Mobile Zip Popup --> <div id="zipSelectPopup"> <div class="zip-popup-header"> <h4>Select Postal Code / Area</h4> <button type="button" class="zip-popup-close">×</button> </div> <div class="zip-popup-search"> <input type="text" id="zipPopupSearch" placeholder="Search by postal code or area..." /> </div> <div class="zip-popup-list" id="zipPopupList"></div> </div> <div class="contentPurchase"> <div class="row"> <div class="col-12 col-lg-7 position-relative"> <div class="addressPurchase"> <h4 class="text-uppercase">recipient delivery address</h4> <p>Share the delivery address to send your heartfelt blooms straight to their door.</p> <!-- Pickup Location Details (hidden by default, shown when pickup is selected) --> <div id="pickupLocationDetails" class="pickup-location-details" style="display: none; padding: 20px; background-color: #f8f8f8; border: 1px solid #e0e0e0; margin-bottom: 20px;"> <h5 style="font-size: 16px; font-weight: 600; margin-bottom: 16px; text-transform: uppercase; color: #212121;">Pickup Location</h5> <!-- ITC Kuningan --> <div id="pickupDetailsITC" style="display: none; font-size: 14px; line-height: 1.8; color: #212121;"> <p style="margin: 0 0 12px 0;"><strong>ITC Kuningan Mall</strong></p> <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> <p style="margin: 0 0 12px 0;"><strong>Pickup Hours:</strong> 10:00 - 16:00</p> <p style="margin: 0; padding: 12px; background-color: #fff3cd; border-left: 4px solid #ffc107; font-size: 13px;"> <strong>Note:</strong> Please bring your order confirmation when picking up your items. </p> </div> <!-- Lotte Avenue Kuningan --> <div id="pickupDetailsLotte" style="display: none; font-size: 14px; line-height: 1.8; color: #212121;"> <p style="margin: 0 0 12px 0;"><strong>Lotte Mall Jakarta</strong></p> <p style="margin: 0 0 12px 0;">Lantai 1F. Kuningan<br />Jl. Prof. DR. Satrio No.Kav. 3-5, Karet Kuningan, Kecamatan Setiabudi, Kota Jakarta Selatan, Daerah Khusus Ibukota Jakarta 12940</p> <p style="margin: 0 0 12px 0;"><strong>Pickup Hours:</strong> 11:00 - 20:00</p> <p style="margin: 0; padding: 12px; background-color: #fff3cd; border-left: 4px solid #ffc107; font-size: 13px;"> <strong>Note:</strong> Please bring your order confirmation when picking up your items. </p> </div> <!-- Fallback when no location chosen yet --> <div id="pickupDetailsFallback" style="font-size: 14px; color: #888;"> <p style="margin: 0;">Please select a pickup location from the city dropdown above.</p> </div> </div> <div class="formAddressPurchase row"> <div class="col-12"> <form data-hs-cf-bound="true"> <div class="form-group row mb-2 mb-lg-4"> <div class="col-6 position-relative"> <input id="first_name" type="text" class="form-control input__field" placeholder="" required="" /> <label for="first_name" class="input__label">First Name<span>*</span></label> </div> <div class="col-6 position-relative"> <input id="last_name" type="text" class="form-control input__field" placeholder="" required="" /> <label for="last_name" class="input__label">Last Name<span>*</span></label> </div> <input type="hidden" data-properties="nama-penerima" /> </div> <div class="form-group row mb-2 mb-lg-4 form-address"> <div class="col-6 position-relative"> <input id="recipient_number" type="text" data-properties="telepon-penerima" class="form-control input__field" placeholder="" required="" /> <label for="recipient_number" class="input__label">Recipient number<span>*</span></label> </div> <div class="col-6 position-relative"> <input id="company" type="text" data-properties="company" class="form-control input__field" placeholder="" /> <label for="company" class="input__label">Company (Optional)</label> </div> </div> <div class="form-group row mb-2 mb-lg-4 form-address"> <div class="col-6 position-relative"> <input id="province" type="text" class="form-control input__field has-value" placeholder="" value="Jakarta" data-properties="province" readonly /> <label for="province" class="input__label">Province</label> </div> <div class="col-6 position-relative"> <select id="zip" class="form-control select-search select2-hidden-accessible" required="" data-select2-id="select2-data-zip" tabindex="-1" aria-hidden="true"></select><span class="select2 select2-container select2-container--default" dir="ltr" data-select2-id="select2-data-1-iqds" style="width: 100%;"><span class="selection"><span class="select2-selection select2-selection--single" role="combobox" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-disabled="false" aria-labelledby="select2-zip-container" aria-controls="select2-zip-container"><span class="select2-selection__rendered" id="select2-zip-container" role="textbox" aria-readonly="true" title="Search by postal code or area"><span class="select2-selection__placeholder">Search by postal code or area</span></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span></span></span><span class="dropdown-wrapper" aria-hidden="true"></span></span> </div> </div> <div class="form-group row mb-2 mb-lg-4 form-address"> <div class="col-12 position-relative"> <input id="streetAddress" type="text" class="form-control input__field" placeholder="Jl. Example No.123 RT.01 RW.02" required="" /> <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> </div> </div> <div class="form-group row position-relative mb-2 mb-lg-4 form-address hide"> <div class="col-12"> <textarea id="delivery_address" data-properties="alamat-penerima" class="form-control input__field col-12 has-value" placeholder="" required="" readonly>Jakarta, Indonesia</textarea> <label for="delivery_address" class="input__label">Delivery Address<span>*</span></label> </div> </div> </form> </div> </div> </div> <div class="addonsPurchase"> <h4 class="text-uppercase">add-ons</h4> <div class="addons"> <p>No Add-Ons</p> <!-- <button class="add-addon"> <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"> <path d="M5.5 6.5H0V5.5H5.5V0H6.5V5.5H12V6.5H6.5V12H5.5V6.5Z" fill="black"/> </svg> <span>Enhance my moment with Add-ons</span> </button> --> </div> </div> </div> <div class="col-12 col-lg-5 row m-0 justify-content-end"> <div class="reviewCardPurchase"> <h4 class="text-uppercase">review your greeting card</h4> <p>You can edit the greeting card to ensure your words perfectly express your love.</p> <div class="cardPreview"> <!-- Card preview structure --> <div class="card-preview-container" style="display: none;"> <!-- Card design preview (with or without photo) --> <div class="card-preview-wrapper"> <!-- Top Section (50% height) --> <div class="card-top-section"> <!-- Layout for when NO photo is uploaded --> <div class="no-photo-layout"> <div class="qr-text"> <p class="qr-title">A<br />special message</p> <p class="qr-subtitle">for <span class="recipient-qr-text">Munying</span>!</p> </div> <div class="qr-code-container"> <div class="qr-placeholder">QR</div> </div> <div class="qr-scan-text"> <p>Scan for the surprise</p> </div> </div> <!-- Layout for when photo IS uploaded --> <div class="with-photo-layout" style="display: none;"> <div class="photo-container"> <img class="card-preview-photo" src="" alt="Card photo" width="300" height="200" /> <div class="photo-qr-overlay hide hidden"> <div class="qr-code-small"> <div class="qr-placeholder-small">QR</div> </div> <div class="photo-qr-text"> <p>Scan for a special message for you</p> </div> </div> </div> </div> </div> <!-- Divider Line --> <div class="card-divider"></div> <!-- Bottom Section (50% height) --> <div class="card-bottom-section"> <!-- Recipient name --> <div class="card-recipient-name"> <span class="recipient-text"></span> </div> <!-- Card message --> <div class="card-message-section"> <div class="card-message-text"></div> </div> <!-- Sender name --> <div class="card-sender-name"> <span class="sender-text"></span> </div> </div> </div> </div> <!-- Empty state --> <div class="card-empty-state"> <div style="text-align: center; padding: 40px 20px; color: #999; border: 1px dashed #ddd; border-radius: 8px;"> <p style="margin: 0; font-size: 14px;">Your greeting card preview will appear here</p> <p style="margin: 5px 0 0 0; font-size: 12px;">Complete the greeting card section to see the preview</p> </div> </div> </div> </div> <div class="scanCard mt-3 hide"> <div class="position-relative"> <div id="qrcode"></div> <div class="t-preview"> <p class="h3">preview your moment</p> <p>Scan this barcode on OUTERBLOOM’s mobile application</p> </div> </div> </div> </div> </div> </div> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script> <script> document.addEventListener('DOMContentLoaded', function() { // Detect iOS var isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; if (isIOS) { document.querySelector('.formAddressPurchase').classList.add('ios'); // iOS specific fixes var inputs = document.querySelectorAll('.formAddressPurchase .input__field'); inputs.forEach(function(input) { // Force enable touch events on iOS input.style.webkitUserSelect = 'text'; input.style.webkitTouchCallout = 'default'; input.style.pointerEvents = 'auto'; input.style.touchAction = 'manipulation'; // Add explicit touch event listeners for iOS input.addEventListener('touchstart', function(e) { e.stopPropagation(); this.focus(); }, { passive: false }); input.addEventListener('touchend', function(e) { e.preventDefault(); e.stopPropagation(); this.focus(); this.click(); }, { passive: false }); // Force focus on tap for iOS input.addEventListener('click', function(e) { e.stopPropagation(); if (document.activeElement !== this) { this.focus(); } }); }); // Fix for label overlapping on iOS var labels = document.querySelectorAll('.formAddressPurchase .input__label'); labels.forEach(function(label) { label.style.pointerEvents = 'none'; label.addEventListener('touchstart', function(e) { e.preventDefault(); var input = this.parentNode.querySelector('.input__field'); if (input) { input.focus(); } }); }); } // Handle input state for all browsers, especially iOS var inputs = document.querySelectorAll('.input__field'); inputs.forEach(function(input) { // Handle input events input.addEventListener('input', function() { if (this.value.trim() !== '') { this.classList.add('has-value'); } else { this.classList.remove('has-value'); } }); // Handle focus input.addEventListener('focus', function() { this.classList.add('focused'); // iOS specific: ensure input is visible if (isIOS) { setTimeout(function() { input.scrollIntoView({ behavior: 'smooth', block: 'center' }); }, 300); } }); // Handle blur input.addEventListener('blur', function() { this.classList.remove('focused'); if (this.value.trim() !== '') { this.classList.add('has-value'); } else { this.classList.remove('has-value'); } }); // Initial check for pre-filled values if (input.value.trim() !== '') { input.classList.add('has-value'); } }); // Additional iOS fixes if (isIOS) { // Prevent iOS Safari from adding default styling document.addEventListener('touchstart', function() {}, { passive: true }); // Fix viewport issues on iOS var viewport = document.querySelector('meta[name=viewport]'); if (viewport) { viewport.setAttribute('content', 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' ); } } // Card Preview functionality function updateCardPreview() { // Get data from greeting card inputs ONLY from #greetingCard or .greetingCard area const greetingCardArea = $('#greetingCard, .greetingCard'); const recipientName = greetingCardArea.find('[data-properties="penerima"]').val() || ''; const senderName = greetingCardArea.find('[data-properties="pengirim"]').val() || greetingCardArea.find('[data-properties="kartu-nama-pengirim"]').val() || greetingCardArea.find('#senderCard').val() || '-'; const cardMessage = greetingCardArea.find('[data-properties="ucapan"]').val() || greetingCardArea.find('#kartu-ucapan').val() || '-'; const photoUrl = $('#properties-photo').val(); const videoUrl = greetingCardArea.find('#properties-video').val() || ''; const qrId = greetingCardArea.find('#properties-qrId').val() || ''; // Get preview elements const cardContainer = $('.card-preview-container'); const emptyState = $('.card-empty-state'); const recipientText = $('.recipient-text'); const recipientQrText = $('.recipient-qr-text'); const senderText = $('.sender-text'); const messageText = $('.card-message-text'); const noPhotoLayout = $('.no-photo-layout'); const withPhotoLayout = $('.with-photo-layout'); const previewPhoto = $('.card-preview-photo'); const qrContainer = $('.qr-code-container'); const qrContainerSmall = $('.qr-code-small'); // Check if we have any card content const hasContent = (recipientName && recipientName.trim() !== '' && recipientName.trim() !== ' ') || (senderName !== '' && senderName !== '-') || (cardMessage !== '' && cardMessage !== '-') || (photoUrl && photoUrl !== '' && photoUrl !== '-') || (videoUrl && videoUrl !== '' && videoUrl !== '-'); if (hasContent) { // Show card preview, hide empty state cardContainer.show(); emptyState.hide(); // Update recipient name in bottom section with prefix let recipientDisplay = ''; if (recipientName && recipientName.trim() !== '' && recipientName.trim() !== ' ' && recipientName.trim() !== '-') { const prefix = $('.label-prefix').text().trim() || ''; const trimmedName = recipientName.trim(); recipientDisplay = prefix + (trimmedName ? ' ' + trimmedName : ''); } recipientText.text(recipientDisplay); // Update recipient name in QR section (for no-photo layout) - use first name only or full name let recipientQrDisplay = ''; if (recipientName && recipientName.trim() !== '' && recipientName.trim() !== ' ' && recipientName.trim() !== '-') { recipientQrDisplay = recipientName.trim().split(' ')[0]; } recipientQrText.text(recipientQrDisplay); // Update sender name const senderDisplay = (senderName !== '' && senderName !== '-') ? senderName : ''; senderText.text(senderDisplay); // Update message const messageDisplay = (cardMessage !== '' && cardMessage !== '-') ? cardMessage : ''; messageText.text(messageDisplay); // Handle photo display and layout switching if (photoUrl && photoUrl !== '' && photoUrl !== '-') { // Show photo layout, hide no-photo layout noPhotoLayout.hide(); withPhotoLayout.show(); previewPhoto.attr('src', photoUrl); // Generate QR code for photo layout if (qrId && qrId !== '' && qrId !== '-') { qrContainerSmall.html(''); try { var qrCode = new QRCode(qrContainerSmall[0], { text: `https://moment.outerbloom.com/${qrId}`, width: 40, height: 40, colorDark: "#333333", colorLight: "#ffffff", correctLevel: QRCode.CorrectLevel.L, }); } catch(e) { qrContainerSmall.html('<div class="qr-placeholder-small">QR</div>'); } } else { qrContainerSmall.html('<div class="qr-placeholder-small">QR</div>'); } } else { // Show no-photo layout, hide photo layout withPhotoLayout.hide(); noPhotoLayout.show(); // Generate QR code for no-photo layout if (qrId && qrId !== '' && qrId !== '-') { qrContainer.html(''); try { var qrCode = new QRCode(qrContainer[0], { text: `https://moment.outerbloom.com/${qrId}`, width: 80, height: 80, colorDark: "#333333", colorLight: "#ffffff", correctLevel: QRCode.CorrectLevel.L, }); } catch(e) { qrContainer.html('<div class="qr-placeholder">QR</div>'); } } else { qrContainer.html('<div class="qr-placeholder">QR</div>'); } } } else { // Show empty state, hide card preview cardContainer.hide(); emptyState.show(); } } // Listen for changes in greeting card fields ONLY from #greetingCard or .greetingCard area $(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() { setTimeout(updateCardPreview, 100); // Small delay to allow value updates }); // Listen for custom events from greeting card section $(document).on('cardDataUpdated', function() { updateCardPreview(); }); // Listen for btn-next-card click using delegate $(document).on('click', '.btn-next-card .btn', function() { console.log('btn-next-card clicked, updating card preview...'); updateCardPreview(); }); // Initial card preview update $(document).ready(function() { setTimeout(updateCardPreview, 1000); // Delay to ensure all fields are initialized // Update preview when moving to purchase address step if ($('.purchaseAddress').length && !$('.purchaseAddress').hasClass('hide')) { updateCardPreview(); } }); // Auto-fill delivery address from input fields window.updateDeliveryAddress = function() { const selectedMethod = $('#selectedShippingMethod').val(); if (selectedMethod === 'Pickup') { const pickupLocation = $('#selectedPickupLocation').val() || ''; let pickupAddress = ''; let pickupZipCode = ''; if (pickupLocation === 'Lotte Avenue Kuningan') { pickupAddress = 'Lotte Mall Jakarta, Lantai 1F, Jl. Prof. DR. Satrio No.Kav. 3-5, Karet Kuningan'; pickupZipCode = '12940 - Karet Kuningan'; } else { // Default: ITC Kuningan pickupAddress = 'ITC Kuningan Mall, Lantai 9 unit 4B, Jl. Prof. DR. Satrio No.18'; pickupZipCode = '12940 - Karet Kuningan'; } const deliveryAddressTextarea = $('#delivery_address'); if (deliveryAddressTextarea.val() !== pickupAddress) { deliveryAddressTextarea.val(pickupAddress); deliveryAddressTextarea.addClass('has-value'); deliveryAddressTextarea.trigger('change'); $('#properties-kodepos').val(pickupZipCode); } // Update the pickup details panel updatePickupLocationDetails(pickupLocation); return; } const streetAddress = $('#streetAddress').val().trim(); const zipValue = $('#zip').val() || ''; // Format: "12345-Kelurahan-Kecamatan" const province = $('#province').val().trim(); // Parse zip value let postalCode = ''; let kelurahan = ''; let kecamatan = ''; if (zipValue) { const zipParts = zipValue.split('-'); postalCode = zipParts[0] || ''; // zip.split('-')[0] kelurahan = zipParts[1] || ''; // zip.split('-')[1] kecamatan = zipParts[2] || ''; // zip.split('-')[2] } // Build address string with format: [streetAddress], [kelurahan], [kecamatan], [province], [postalCode], Indonesia let addressParts = []; if (streetAddress) addressParts.push(streetAddress); if (kelurahan) addressParts.push(kelurahan); if (kecamatan) addressParts.push(kecamatan); if (province) addressParts.push(province); if (postalCode) addressParts.push(postalCode); addressParts.push('Indonesia'); const fullAddress = addressParts.join(', '); // Update delivery address textarea const deliveryAddressTextarea = $('#delivery_address'); deliveryAddressTextarea.val(fullAddress); // Update has-value class for label animation if (fullAddress && fullAddress !== 'Indonesia') { deliveryAddressTextarea.addClass('has-value'); } else { deliveryAddressTextarea.removeClass('has-value'); } // Trigger change event deliveryAddressTextarea.trigger('change'); } // Initialize Select2 for postal code select function initZipSearch() { // Only initialize Select2 on desktop (screen width > 992px) if ($(window).width() > 992) { $('#zip').select2({ placeholder: 'Search by postal code or area', allowClear: false, width: '100%', matcher: function(params, data) { // If there are no search terms, return all of the data if ($.trim(params.term) === '') { return data; } // Do not display the item if there is no 'text' property if (typeof data.text === 'undefined') { return null; } // `params.term` should be the term that is used for searching // `data.text` is the text that is displayed for the data object if (data.text.toLowerCase().indexOf(params.term.toLowerCase()) > -1 || data.id.toLowerCase().indexOf(params.term.toLowerCase()) > -1) { var modifiedData = $.extend({}, data, true); return modifiedData; } // Return `null` if the term does not match the data return null; } }); // Handle select change to update delivery address $('#zip').on('change', function() { updateDeliveryAddress(); }); } else { // On mobile (<991px), use custom popup instead of native select var $zipSelect = $('#zip'); var $popup = $('#zipSelectPopup'); var $popupList = $('#zipPopupList'); var $popupSearch = $('#zipPopupSearch'); var isPopupOpen = false; var isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; // Populate popup list with options from select function populatePopupList(filterText = '') { $popupList.empty(); $zipSelect.find('option').each(function() { var $option = $(this); var value = $option.val(); var text = $option.text(); // Skip empty/placeholder options if (!value || value === '') return; // Filter based on search text if (filterText && text.toLowerCase().indexOf(filterText.toLowerCase()) === -1 && value.toLowerCase().indexOf(filterText.toLowerCase()) === -1) { return; } var $item = $('<div class="zip-popup-list-item"></div>') .attr('data-value', value) .text(text); // Mark selected item if (value === $zipSelect.val()) { $item.addClass('selected'); } $popupList.append($item); }); } // Function to open popup function openPopup() { if (isPopupOpen) return; isPopupOpen = true; populatePopupList(); $popup.css('display', 'block').hide().fadeIn(200); $('body').css('overflow', 'hidden'); // iOS needs more delay for focus var focusDelay = isIOS ? 500 : 250; setTimeout(function() { $popupSearch.focus(); }, focusDelay); } // Function to close popup function closePopup() { if (!isPopupOpen) return; isPopupOpen = false; $popup.fadeOut(200); $('body').css('overflow', ''); $popupSearch.val(''); } // iOS specific handling if (isIOS) { // For iOS, use only touchstart with proper event handling $zipSelect.on('touchstart', function(e) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); if (!isPopupOpen) { openPopup(); } return false; }); // Prevent other events on iOS to avoid double triggering $zipSelect.on('click focus mousedown', function(e) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); return false; }); } else { // For Android and other mobile devices // Use touchstart as primary event to prevent native dropdown $zipSelect.on('touchstart', function(e) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); if (!isPopupOpen) { openPopup(); } return false; }); // Also prevent click and other events to ensure native dropdown doesn't show $zipSelect.on('click focus mousedown touchend', function(e) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); return false; }); } // Search functionality $popupSearch.on('input', function() { populatePopupList($(this).val()); }); // Track touch movement to differentiate scroll from tap var touchStartY = 0; var touchMoved = false; // Track touch start $popupList.on('touchstart', '.zip-popup-list-item', function(e) { touchStartY = e.originalEvent.touches[0].clientY; touchMoved = false; }); // Track touch movement $popupList.on('touchmove', '.zip-popup-list-item', function(e) { var touchY = e.originalEvent.touches[0].clientY; if (Math.abs(touchY - touchStartY) > 10) { touchMoved = true; } }); // Handle option selection - only if not scrolling $popupList.on('touchend', '.zip-popup-list-item', function(e) { e.preventDefault(); e.stopPropagation(); // Only select if user didn't scroll if (!touchMoved) { var selectedValue = $(this).attr('data-value'); $zipSelect.val(selectedValue).trigger('change'); closePopup(); updateDeliveryAddress(); } }); // Also handle click for desktop testing $popupList.on('click', '.zip-popup-list-item', function(e) { e.preventDefault(); e.stopPropagation(); var selectedValue = $(this).attr('data-value'); $zipSelect.val(selectedValue).trigger('change'); closePopup(); updateDeliveryAddress(); }); // Prevent scroll from closing popup - apply to all touch events $popupList.on('touchstart touchmove touchend scroll', function(e) { e.stopPropagation(); }); // Prevent search input touch from closing popup $popupSearch.on('touchstart touchmove touchend click', function(e) { e.stopPropagation(); }); // Prevent header touch from closing popup (except close button) $('.zip-popup-header').on('touchstart touchmove touchend click', function(e) { if (!$(e.target).hasClass('zip-popup-close')) { e.stopPropagation(); } }); // Close popup handlers $('.zip-popup-close').on('click touchend', function(e) { e.preventDefault(); e.stopPropagation(); closePopup(); }); // Prevent touchmove on popup content from bubbling up $('.zip-popup-content').on('touchstart touchmove touchend', function(e) { e.stopPropagation(); }); // Close on background tap only - but not on any touch inside content $popup.on('touchend', function(e) { // Only close if touching popup background directly, not content if ($(e.target).is('#zipSelectPopup')) { e.preventDefault(); closePopup(); } }); } } // Show the correct pickup location detail panel based on selected location function updatePickupLocationDetails(pickupLocation) { const itcPanel = document.getElementById('pickupDetailsITC'); const lottePanel = document.getElementById('pickupDetailsLotte'); const fallbackPanel = document.getElementById('pickupDetailsFallback'); if (!itcPanel || !lottePanel || !fallbackPanel) return; if (pickupLocation === 'ITC Kuningan') { itcPanel.style.display = 'block'; lottePanel.style.display = 'none'; fallbackPanel.style.display = 'none'; } else if (pickupLocation === 'Lotte Avenue Kuningan') { itcPanel.style.display = 'none'; lottePanel.style.display = 'block'; fallbackPanel.style.display = 'none'; } else { itcPanel.style.display = 'none'; lottePanel.style.display = 'none'; fallbackPanel.style.display = 'block'; } } // Listen for changes in address fields $(document).on('input change', '#streetAddress, #zip, #province', function() { updateDeliveryAddress(); }); // Re-render pickup details whenever the hidden input changes (triggered from product-purchase-flow.liquid) $(document).on('change', '#selectedPickupLocation', function() { const pickupLocation = $(this).val(); updatePickupLocationDetails(pickupLocation); if ($('#selectedShippingMethod').val() === 'Pickup') { updateDeliveryAddress(); } }); // Initial update on page load $(document).ready(function() { setTimeout(updateDeliveryAddress, 500); // Initialize zip search after select is populated setTimeout(initZipSearch, 600); // Sync pickup details in case pickup mode is already active setTimeout(function() { if ($('#selectedShippingMethod').val() === 'Pickup') { updatePickupLocationDetails($('#selectedPickupLocation').val() || ''); } }, 700); }); }); </script> </div> <div class="purchase-button-wrapper"> <div class="purchase-button btn-address row m-0"> <div class="col-12 col-lg-2 text-left mb-2 p-0"> <button class="back-purchase-button back-address text-uppercase"> <svg width="15" height="14" viewBox="0 0 15 14" fill="none" 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"></path> </svg> <span>Back</span> </button> </div> <div class="btn-next-card col-12 col-lg-10 text-right"> <!-- <button class="back-purchase-button back-address text-uppercase mr-lg-2 mb-2 mb-lg-0"> <svg width="15" height="14" viewBox="0 0 15 14" fill="none" 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 id="addtocart-card" class="btn next-address text-uppercase"> <span>add to cart</span> </button> </div> </div> </div> </div> </div> </div> </div> <div id="backgroundPopup"></div> <input data-index="1" type="hidden" id="properties-delivery-date" name="properties[Delivery Date]" value="-" /> <input data-index="2" type="hidden" id="properties-delivery-time" name="properties[Delivery Time]" value="-" /> <input data-index="4" type="hidden" id="properties-nama-penerima" name="properties[Nama Penerima]" value="-" /> <input data-index="5" type="hidden" id="properties-alamat-penerima" name="properties[Alamat Penerima]" value="Jakarta, Indonesia" /> <input data-index="6" type="hidden" id="properties-kodepos" name="properties[Kodepos]" value="-" /> <input data-index="7" type="hidden" id="properties-telepon-penerima" name="properties[Telepon Penerima]" /> <input data-index="8" type="hidden" id="properties-kartu-nama-penerima" name="properties[Kartu Nama Penerima]" value="-" /> <input data-index="9" type="hidden" id="properties-kartu-ucapan" name="properties[Kartu Ucapan]" value="-" /> <input data-index="10" type="hidden" id="properties-kartu-nama-pengirim" name="properties[Kartu Nama Pengirim]" value="-" /> <input data-index="11" type="hidden" id="properties-photo" name="properties[Foto]" value="-" /> <input id="input-foto" type="file" class="customFile" accept="image/*" style="position: absolute;top:40%;display:none;" /> <input data-index="12" type="hidden" id="properties-video" name="properties[Video]" value="-" /> <input id="input-video" type="file" class="customFileVideo" accept="video/*" style="position: absolute;top:40%;display:none;" /> <input data-index="13" type="hidden" id="properties-qrId" name="properties[QR Code]" value="" /> <!-- Additional Shipping --> <input type="hidden" id="properties-kota-pengiriman-province" name="properties[Province]" /> <input type="hidden" id="properties-kota-pengiriman-country" name="properties[Country]" value="Indonesia" /> <input type="hidden" id="properties-shipping" name="properties[Shipping]" /> <input type="hidden" id="properties-time" name="properties[Time]" value="1774172892108" /> <input type="hidden" id="properties-card" name="properties[Card]" /> <input type="hidden" id="properties-addons" name="properties[Addons]" /> <input type="hidden" id="properties-company" name="properties[Company]" value="" /> <script> $(document).ready(function(){ var text_max_papan1=150; var msg_text_papan1=""; $('#kartu-ucapan-ucapan').keyup(function(){ var text_length_papan1=$('#kartu-ucapan-ucapan').val().length; var msg_text_papan1=$('#kartu-ucapan-ucapan').val(); }); var notes_papan1 = [ [0,"Happy Wedding (nama & nama)."],[1,"Congratulations lovebirds (nama & nama)."],[2,"Selamat berbahagia (nama & nama)."],[3,"Selamat menempuh hidup baru (nama & nama)."] ]; $('#show_note_papan1').click(function(event){ event.preventDefault(); var idx_papan1=parseInt($('#note_id_papan1').val()); if(isNaN(idx_papan1)){ idx_papan1=0; }else{ idx_papan1++; idx_papan1=idx_papan1%notes_papan1.length; } var note_papan1=notes_papan1[idx_papan1][1]; $('#note_id_papan1').val(idx_papan1); $('#kartu-ucapan-papan, #properties-kartu-pesan, #properties-kartu-ucapan').val(note_papan1); $('#msgDelivery').val(note_papan1); var text_length_papan1=$('#kartu-ucapan-papan').val().length; var idx_2_papan1=parseInt($('#note_btn_id_papan1').val()); if(isNaN(idx_2_papan1)){ idx_2_papan1=0; }else{ idx_2_papan1++; //idx_2_papan1=idx_2_papan1%note_btn_text_papan1.length; } $('#note_btn_id_papan1').val(idx_2_papan1); //var note_btn=note_btn_text[idx_2][1]; //$('#note_btn').text(note_btn); $(this).parents(".sectionPurchase").find(".next-purchase-button").attr("disabled", false) }); var text_max_papan2=150; var msg_text_papan2=""; $('#kartu-ucapan-ucapan').keyup(function(){ var text_length_papan2=$('#kartu-ucapan-ucapan').val().length; var msg_text_papan2=$('#kartu-ucapan-ucapan').val(); }); var notes_papan2 = [ [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)."] ]; $('#show_note_papan2').click(function(event){ event.preventDefault(); var idx_papan2=parseInt($('#note_id_papan2').val()); if(isNaN(idx_papan2)){ idx_papan2=0; }else{ idx_papan2++; idx_papan2=idx_papan2%notes_papan2.length; } var note_papan2=notes_papan2[idx_papan2][1]; $('#note_id_papan2').val(idx_papan2); $('#kartu-ucapan-papan, #properties-kartu-pesan, #properties-kartu-ucapan').val(note_papan2); $('#msgDelivery').val(note_papan2); var text_length_papan2=$('#kartu-ucapan-papan').val().length; var idx_2_papan2=parseInt($('#note_btn_id_papan2').val()); if(isNaN(idx_2_papan2)){ idx_2_papan2=0; }else{ idx_2_papan2++; //idx_2_papan1=idx_2_papan1%note_btn_text_papan1.length; } $('#note_btn_id_papan2').val(idx_2_papan2); //var note_btn=note_btn_text[idx_2][1]; //$('#note_btn').text(note_btn); $(this).parents(".sectionPurchase").find(".next-purchase-button").attr("disabled", false) }); var text_max_papan3=150; var msg_text_papan3=""; $('#kartu-ucapan-ucapan').keyup(function(){ var text_length_papan3=$('#kartu-ucapan-ucapan').val().length; var msg_text_papan3=$('#kartu-ucapan-ucapan').val(); }); var notes_papan3 = [ [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)."] ]; $('#show_note_papan3').click(function(event){ event.preventDefault(); var idx_papan3=parseInt($('#note_id_papan3').val()); if(isNaN(idx_papan3)){ idx_papan3=0; }else{ idx_papan3++; idx_papan3=idx_papan3%notes_papan3.length; } var note_papan3=notes_papan3[idx_papan3][1]; $('#note_id_papan3').val(idx_papan3); $('#kartu-ucapan-papan, #properties-kartu-pesan, #properties-kartu-ucapan').val(note_papan3); $('#msgDelivery').val(note_papan3); var text_length_papan3=$('#kartu-ucapan-papan').val().length; var idx_2_papan3=parseInt($('#note_btn_id_papan3').val()); if(isNaN(idx_2_papan3)){ idx_2_papan3=0; }else{ idx_2_papan3++; //idx_2_papan1=idx_2_papan1%note_btn_text_papan1.length; } $('#note_btn_id_papan3').val(idx_2_papan3); //var note_btn=note_btn_text[idx_2][1]; //$('#note_btn').text(note_btn); $(this).parents(".sectionPurchase").find(".next-purchase-button").attr("disabled", false) }); var text_max_papan4=150; var msg_text_papan4=""; $('#kartu-ucapan-ucapan').keyup(function(){ var text_length_papan4=$('#kartu-ucapan-ucapan').val().length; var msg_text_papan4=$('#kartu-ucapan-ucapan').val(); }); $('#show_note_papan4').click(function(event){ var notes_papan4 = [ [0,"Here’s to you—steadier, stronger and better every day."], [1,"Warmest wishes for a speedy recovery!"], [2,"Dengan ucapan terhangat, semoga lekas membaik dan semakin pulih setiap harinya ya."], [3,"Semoga lekas sembuh untuk kembali beraktivitas dan berkarya."] ]; event.preventDefault(); var idx_papan4=parseInt($('#note_id_papan4').val()); console.log(idx_papan4, 'idx_papan4') if(isNaN(idx_papan4)){ idx_papan4=0; }else{ idx_papan4++; idx_papan4=idx_papan4%notes_papan4.length; } var note_papan4=notes_papan4[idx_papan4][1]; $('#note_id_papan4').val(idx_papan4); $('#kartu-ucapan-papan, #properties-kartu-ucapan, #properties-kartu-pesan').val(note_papan4); console.log(note_papan4, 'note_papan4') var text_length_papan4=$('#kartu-ucapan-papan').val().length; var idx_2_papan4=parseInt($('#note_btn_id_papan4').val()); if(isNaN(idx_2_papan4)){ idx_2_papan4=0; }else{ idx_2_papan4++; //idx_2_papan1=idx_2_papan1%note_btn_text_papan1.length; } $('#note_btn_id_papan4').val(idx_2_papan4); $(this).parents(".sectionPurchase").find(".next-purchase-button").attr("disabled", false) }); /* $("#jenisPapan").change(function(){ $( "select option:selected").each(function(){ if($(this).attr("value")=="Happy Wedding"){ $("#suggest-messages a").hide(); $("#show_note_papan1").show(); $("#kartu-ucapan-papan").val(""); } if($(this).attr("value")=="Congratulations"){ $("#suggest-messages a").hide(); $("#show_note_papan2").show(); $("#kartu-ucapan-papan").val(""); } if($(this).attr("value")=="Duka Cita"){ $("#suggest-messages a").hide(); $("#show_note_papan3").show(); $("#kartu-ucapan-papan").val(""); } }); }).change(); */ $(".variant-metafield").each(function(){ const t = $(this) const id = t.attr("id") const target = $(`[data-select=${id}]`) t.on('select2:selecting', function(e) { const data = e.params.args.data target.val(data.text) }); }) }) </script> <div id="popupCart"> <div class="container"> <div class="wrapperPopupCart"> <div class="headerPopupCart"> <div class="d-flex pl-5 pr-5 p-4"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="12" viewBox="0 0 16 12" fill="none"> <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"></path> </svg> <span>item added to your cart</span> </div> <a class="close-purchase-popup"> <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none"> <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> </svg> </a> </div> <div class="contentPopupCart"> <div class="pl-5 pr-5 p-4"> <div class="itemContent row m-0 justify-content-between"> <div class="col-2 align-self-center"> <img class="d-block" width="80" src="//outerbloom.com/cdn/shop/products/The-Novo-Enchanted-Dome---Passionate-Red_2_80x.jpg?v=1643976096" /> </div> <div class="col-10 align-self-center"> <div class="row pl-3"> <div class="col-12 col-lg-7"> <span class="titleCartPopup text-uppercase">HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat</span> <div class="cart-popup-quantity mt-2"> <div class="quantity-selector" data-popup-item="true"> <button type="button" class="qty-minus" data-action="minus"> − </button> <input type="text" class="qty-input" value="1" min="1" readonly /> <button type="button" class="qty-plus" data-action="plus"> + </button> </div> </div> </div> <div class="d-flex justify-content-end col-12 col-lg-5"> <span class="deleteCartPopup hide">Delete</span> <span class="lineCartPrice align-self-center">Rp 1.885.000</span> </div> </div> </div> </div> <div class="itemProperties"> <div class="propDeliver"> <h4>delivery option detail</h4> <p> <span>delivery city</span> <span class="propDeliveryCity">jakarta</span> </p> <p> <span>delivery date</span> <span class="propDeliveryDate">24/03/2025</span> </p> <p> <span>delivery time</span> <span class="propDeliveryTime">Afternoon | 13:00 - 18:00</span> </p> </div> <div class="propAddress"> <h4>delivery option detail</h4> <p> <span>RECIPIENT NAME</span> <span class="propDeliveryName">jane doe</span> </p> <p> <span>delivery address</span> <span class="propDeliveryAddress">Jl. Gatot Subroto No. 25, RT.2/RW.4, Kuningan Barat, Kecamatan Mampang Prapatan, Kota Jakarta Selatan, Daerah Khusus Ibukota Jakarta 12710, Indonesia</span> </p> <p> <span>recipient phone number</span> <span class="propDeliveryPhone">(+62) 812-3456-7890</span> </p> <p> <span>PROVINCE</span> <span class="propDeliveryProv">Jakarta</span> </p> <p> <span>postal code</span> <span class="propDeliveryZip">12710</span> </p> </div> </div> <div class="itemAddonCart"> <div class="toggleAddonCart d-flex justify-content-between"> <h4>add-ons (0)</h4> <svg xmlns="http://www.w3.org/2000/svg" width="5" height="9" viewBox="0 0 5 9" fill="none"> <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"></path> </svg> </div> <div class="wrapperItemAddonCart"></div> </div> </div> </div> <div class="footerPopupCart"> <div class="row m-0 pl-5 pr-5 p-4"> <a class="btn btnViewCart w-100 text-uppercase text-center" href="/cart">View Cart</a> <a class="btn btnViewCheckout w-100 text-uppercase text-center" href="/checkout"><span>Checkout</span></a> <a class="btnContinueShopping w-100 text-center" href="/">Continue shopping</a> </div> </div> </div> </div> </div> <style> /* Quantity Selector in Cart Popup */ .cart-popup-quantity .quantity-selector { display: inline-flex; align-items: center; border: 1px solid #D1D1D1; border-radius: 2px; overflow: hidden; background: white; max-width: 140px; } .cart-popup-quantity .quantity-selector button { width: 32px; height: 32px; border: none; background: white; cursor: pointer; font-size: 16px; font-weight: 400; color: #424242; transition: all 0.2s ease; padding: 0; display: flex; align-items: center; justify-content: center; line-height: 1; } .cart-popup-quantity .quantity-selector button:hover { background: #F5F5F5; color: #212121; } .cart-popup-quantity .quantity-selector button:active { background: #E0E0E0; } .cart-popup-quantity .quantity-selector button:disabled { opacity: 0.4; cursor: not-allowed; background: white; } .cart-popup-quantity .quantity-selector input { width: 50px; height: 32px; border: none; border-left: 1px solid #D1D1D1; border-right: 1px solid #D1D1D1; text-align: center; font-size: 13px; font-weight: 500; color: #212121; -moz-appearance: textfield; background: white; padding: 0; } .cart-popup-quantity .quantity-selector input::-webkit-outer-spin-button, .cart-popup-quantity .quantity-selector input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; } .cart-popup-quantity .quantity-selector input:focus { outline: none; } </style> <script> // Function to update popup cart quantity window.updatePopupCartQuantity = function() { let itemKey = ''; let currentProductId = 42371068461271; // Get current cart and update popup display fetch(window.Shopify.routes.root + 'cart.js') .then(response => response.json()) .then(cart => { if(cart.items && cart.items.length > 0) { // Find the item that matches current product variant const matchingItem = cart.items.find(item => item.product_id === 7535020376279 || item.variant_id === currentProductId ); if(matchingItem) { itemKey = matchingItem.key; // Display current total quantity in popup (including what was already in cart) const totalQty = matchingItem.quantity; $("#popupCart .qty-input").val(totalQty); // Store itemKey for later use $("#popupCart .quantity-selector").attr("data-item-key", itemKey); // Update the price display to reflect total quantity const basePrice = 188500000; const newPrice = basePrice * totalQty; const formattedPrice = new Intl.NumberFormat('id-ID', { style: 'currency', currency: 'IDR', minimumFractionDigits: 0 }).format(newPrice / 100); $(".lineCartPrice").text(formattedPrice); } } }) .catch(error => { console.error('Error fetching cart:', error); }); }; $(document).ready(function(){ // Initialize on page load updatePopupCartQuantity(); // Quantity Selector Handler for Cart Popup $("#popupCart .quantity-selector button").on("click", function(e){ e.preventDefault(); const $button = $(this); const $selector = $button.closest(".quantity-selector"); const $input = $selector.find(".qty-input"); const action = $button.data("action"); const itemKey = $selector.attr("data-item-key"); let currentQty = parseInt($input.val()); if(action === "minus" && currentQty > 1) { currentQty--; } else if(action === "plus") { currentQty++; } // Update the input value $input.val(currentQty); // Update the line price display const basePrice = 188500000; const newPrice = basePrice * currentQty; const formattedPrice = new Intl.NumberFormat('id-ID', { style: 'currency', currency: 'IDR', minimumFractionDigits: 0 }).format(newPrice / 100); $(".lineCartPrice").text(formattedPrice); // Disable buttons while updating $selector.find("button").prop("disabled", true); // Update cart directly with the new total quantity fetch(window.Shopify.routes.root + 'cart/change.js', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ id: itemKey, quantity: currentQty }) }) .then(response => response.json()) .then(data => { // Re-enable buttons $selector.find("button").prop("disabled", false); // Update CartJS if available if(typeof CartJS !== 'undefined') { CartJS.init(data); } console.log('Cart updated successfully', data); }) .catch(error => { console.error('Error updating cart:', error); $selector.find("button").prop("disabled", false); }); }); }); </script> <style> .field-error .variant-metafield { border-color: #e74c3c !important; box-shadow: 0 0 0 0.2rem rgba(231, 76, 60, 0.25) !important; } .field-error .form-control { border-color: #e74c3c !important; box-shadow: 0 0 0 0.2rem rgba(231, 76, 60, 0.25) !important; } .field-error select { border-color: #e74c3c !important; box-shadow: 0 0 0 0.2rem rgba(231, 76, 60, 0.25) !important; } .error-message { display: block; width: 100%; margin-top: 0.25rem; font-size: 0.875em; color: #e74c3c; } #btnPurchase:disabled { opacity: 0.7; pointer-events: none; } /* Wishlist button styling */ #wishButton { font-size: 14px; font-weight: 400; text-transform: uppercase; letter-spacing: 0.5px; transition: opacity 0.2s ease; } #wishButton:hover { opacity: 0.8; } #wishButton:disabled { opacity: 0.5; pointer-events: none; } .wishlist-icon-wrapper svg { flex-shrink: 0; width: 16px; } /* iOS specific error styling */ @media screen and (max-width: 768px) { .ios .field-error .variant-metafield { border-color: #e74c3c !important; box-shadow: 0 0 0 3px rgba(231, 76, 60, 0.1) !important; } } /* Shipping Method Section Styling */ .delivery-method-section h4 { font-size: 16px; font-weight: 500; margin-bottom: 12px; color: #212121; } .delivery-method-buttons { display: flex; gap: 8px; } .delivery-method-btn { flex: 1; padding: 12px 24px; border: 1px solid #212121; font-weight: 400; text-transform: uppercase; transition: all 0.3s ease; cursor: pointer; font-size: 14px; letter-spacing: 0.5px; } .delivery-method-btn:not(.active) { background-color: #ffffff; color: #212121; font-weight: 400; } .delivery-method-btn:not(.active):hover { opacity: 0.8; } .delivery-method-btn.active { background-color: #EEEEEE; color: #212121; font-weight: 700; } @media screen and (max-width: 576px) { .delivery-method-buttons { flex-direction: column; } .delivery-method-btn { width: 100%; } } </style> <script> const shareButton = document.getElementById('shareButton'); shareButton.addEventListener('click', () => { if (navigator.share) { navigator.share({ title: "HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat", url: "/products/the-novo-enchanted-dome-passionate-red", text: 'Check out this page!' }) .then(() => console.log('Successful share')) .catch((error) => console.log('Error sharing', error)); } else { alert('Web Share API is not supported in this browser.'); } }); // Inventory validation function function checkInventoryStatus() { const productSelect = document.getElementById('productSelect'); const purchaseButton = document.querySelector('#personalizeBtn button'); if (!productSelect || !purchaseButton) return; const selectedVariantId = productSelect.value; // Get variant data from Shopify fetch(`/products/the-novo-enchanted-dome-passionate-red.js`) .then(response => response.json()) .then(product => { const selectedVariant = product.variants.find(variant => variant.id == selectedVariantId); if (selectedVariant) { const isOutOfStock = selectedVariant.inventory_quantity <= 0 && selectedVariant.inventory_management === 'shopify' && selectedVariant.inventory_policy !== 'continue'; if (isOutOfStock) { purchaseButton.disabled = true; purchaseButton.textContent = 'Out of Stock'; purchaseButton.setAttribute('data-out-of-stock', 'true'); purchaseButton.style.backgroundColor = '#cccccc'; purchaseButton.style.cursor = 'not-allowed'; } else { // Check if button was disabled due to other conditions const isOtherDisabled = false || false || false; if (!isOtherDisabled) { purchaseButton.disabled = false; purchaseButton.textContent = 'MAKE IT PERSONAL ➔'; purchaseButton.removeAttribute('data-out-of-stock'); purchaseButton.style.backgroundColor = ''; purchaseButton.style.cursor = ''; } } } }) .catch(error => { console.error('Error checking inventory:', error); }); } // Validate variant metafields function - make it globally accessible window.validateVariantMetafields = function(showErrors = false) { const purchaseButton = document.querySelector('#personalizeBtn button'); const variantMetafields = document.querySelectorAll('.variant-metafield[required]'); if (!purchaseButton) return true; let allFieldsValid = true; let hasEmptyFields = false; let firstErrorField = null; // Check all required variant metafields variantMetafields.forEach(function(field) { const fieldValue = field.value ? field.value.trim() : ''; const fieldContainer = field.closest('.form-group-variant'); // Remove existing error styling if (fieldContainer) { fieldContainer.classList.remove('field-error'); const existingError = fieldContainer.querySelector('.error-message'); if (existingError) { existingError.remove(); } } if (!fieldValue || fieldValue === '' || fieldValue === 'Choose ' + field.getAttribute('data-properties')) { allFieldsValid = false; hasEmptyFields = true; // Store the first error field for scrolling - ensure it's a valid DOM element if (!firstErrorField && field && field.nodeType === 1) { firstErrorField = field; console.log('First error field stored:', field, 'Type:', field.tagName, 'Value:', field.value); } // Only add error styling if showErrors is true (when button is clicked) if (showErrors && fieldContainer) { fieldContainer.classList.add('field-error'); // Add error message const errorMessage = document.createElement('div'); errorMessage.className = 'error-message'; errorMessage.style.color = '#e74c3c'; errorMessage.style.fontSize = '12px'; errorMessage.style.marginTop = '4px'; errorMessage.textContent = 'This field is required'; fieldContainer.appendChild(errorMessage); } } }); // Auto scroll to first error field if showing errors if (showErrors && !allFieldsValid) { console.log('Scrolling to purchaseProduct section due to validation errors'); setTimeout(function() { // Primary method: scroll to purchaseProduct container try { const purchaseProductSection = document.getElementById('purchaseProduct'); if (purchaseProductSection && typeof purchaseProductSection.scrollIntoView === 'function') { console.log('Scrolling to purchaseProduct section'); purchaseProductSection.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' }); // Focus the first error field after scroll setTimeout(function() { if (firstErrorField) { try { console.log('Focusing first error field:', firstErrorField.tagName, firstErrorField.id || firstErrorField.className); if (typeof firstErrorField.focus === 'function') { firstErrorField.focus(); // For select elements, try to trigger the dropdown if (firstErrorField.tagName && firstErrorField.tagName.toLowerCase() === 'select') { setTimeout(function() { if (typeof firstErrorField.click === 'function') { firstErrorField.click(); } }, 100); } } } catch (focusError) { console.warn('Error during field focus:', focusError); } } }, 300); // Wait for scroll to complete } else { // Fallback: try alternative selectors const fallbackSelectors = ['#purchaseProduct', '.product-meta', 'main', '.form-group-variant']; let scrolled = false; for (let selector of fallbackSelectors) { if (!scrolled) { const element = document.querySelector(selector); if (element && typeof element.scrollIntoView === 'function') { console.log('Fallback scroll to:', selector); element.scrollIntoView({ behavior: 'smooth', block: 'start' }); scrolled = true; break; } } } } } catch (error) { console.warn('Auto scroll failed, trying alternative method:', error); // Ultimate fallback: manual scroll to top of page try { window.scrollTo({ top: 0, behavior: 'smooth' }); } catch (finalError) { console.warn('All scroll methods failed:', finalError); } } }, 150); // Delay to ensure DOM is stable } // Check inventory status as well const isOutOfStock = purchaseButton.getAttribute('data-out-of-stock') === 'true'; // Check other disabled conditions const isOtherDisabled = false || false || false; // Update button state only for inventory and other conditions, not for variant metafields if (isOutOfStock || isOtherDisabled) { purchaseButton.disabled = true; if (isOutOfStock) { purchaseButton.textContent = 'Out of Stock'; purchaseButton.style.backgroundColor = '#cccccc'; } purchaseButton.style.cursor = 'not-allowed'; } else { purchaseButton.textContent = 'MAKE IT PERSONAL ➔'; purchaseButton.style.backgroundColor = ''; purchaseButton.style.color = ''; purchaseButton.style.cursor = ''; // Don't re-enable if delivery/pickup fields are still incomplete (formdate products) const _smReEnable = document.getElementById('selectedShippingMethod'); if (_smReEnable && _smReEnable.value === 'Pickup') { const _plReEnable = document.getElementById('selectedPickupLocation'); purchaseButton.disabled = !(_plReEnable && _plReEnable.value !== ''); } else { purchaseButton.disabled = false; } } return allFieldsValid; } // Check inventory on page load and setup event listeners document.addEventListener('DOMContentLoaded', function() { checkInventoryStatus(); window.validateVariantMetafields(false); // Don't show errors on page load // Shipping Method Toggle Functionality const shippingMethodButtons = document.querySelectorAll('.delivery-method-btn'); const selectedMethodInput = document.getElementById('selectedShippingMethod'); shippingMethodButtons.forEach(function(button) { button.addEventListener('click', function() { const isCurrentlyActive = this.classList.contains('active'); const method = this.getAttribute('data-method'); // Remove active class from all buttons shippingMethodButtons.forEach(function(btn) { btn.classList.remove('active'); btn.style.backgroundColor = '#ffffff'; btn.style.color = '#212121'; btn.style.fontWeight = '400'; }); // If button was not active, make it active (select) if (!isCurrentlyActive) { this.classList.add('active'); this.style.backgroundColor = '#EEEEEE'; this.style.color = '#212121'; this.style.fontWeight = '700'; // Update hidden input value if (selectedMethodInput) { selectedMethodInput.value = method; } // Handle pickup-specific functionality if (method === 'Pickup') { handlePickupMode(); } else { handleDeliveryMode(); } console.log('Delivery method selected:', method); } else { // Unselect - clear hidden input value and revert to delivery mode if (selectedMethodInput) { selectedMethodInput.value = ''; } handleDeliveryMode(); console.log('Delivery method unselected'); } }); }); // Cities dropdown change handler: show pickup location info when in Pickup mode const citiesSelectEl = document.getElementById('cities'); if (citiesSelectEl) { citiesSelectEl.addEventListener('change', function() { const shippingMethod = document.getElementById('selectedShippingMethod'); if (shippingMethod && shippingMethod.value === 'Pickup') { const selectedOption = this.options[this.selectedIndex]; const location = selectedOption ? selectedOption.getAttribute('data-location') : ''; const pickupInfoITC = document.getElementById('pickupInfoITC'); const pickupInfoLotte = document.getElementById('pickupInfoLotte'); if (pickupInfoITC) pickupInfoITC.style.display = 'none'; if (pickupInfoLotte) pickupInfoLotte.style.display = 'none'; if (location === 'ITC Kuningan' && pickupInfoITC) { pickupInfoITC.style.display = 'block'; } else if (location === 'Lotte Avenue Kuningan' && pickupInfoLotte) { pickupInfoLotte.style.display = 'block'; } const selectedPickupLocationInput = document.getElementById('selectedPickupLocation'); if (selectedPickupLocationInput) { selectedPickupLocationInput.value = location || ''; selectedPickupLocationInput.dispatchEvent(new Event('change', { bubbles: true })); } // Re-validate personalize button after pickup location changes if (typeof validatePersonalizeButton === 'function') { validatePersonalizeButton(); } console.log('Pickup location selected from dropdown:', location); } }); } // Function to handle pickup mode function handlePickupMode() { // 1. Replace city dropdown options with pickup location choices const citySelect = document.getElementById('cities'); const hasITC = true; const hasLotte = false; if (citySelect) { // Save original options and previous city for restoration if (!citySelect.dataset.originalOptions) { citySelect.dataset.originalOptions = citySelect.innerHTML; } citySelect.dataset.previousCity = citySelect.value; // Replace with pickup location options (disabled if tag not present) citySelect.innerHTML = '<option value="" disabled selected>Choose Pickup Location</option>' + '<option value="Jakarta" data-province="DKI Jakarta" data-location="ITC Kuningan"' + (hasITC ? '' : ' disabled') + '>ITC Kuningan</option>' + '<option value="Jakarta" data-province="DKI Jakarta" data-location="Lotte Avenue Kuningan"' + (hasLotte ? '' : ' disabled') + '>Lotte Avenue Kuningan</option>'; citySelect.disabled = false; citySelect.style.backgroundColor = '#fff'; citySelect.style.cursor = 'pointer'; citySelect.style.opacity = '1'; } // 2. Reset pickup info panels and hidden input const pickupInfoITC = document.getElementById('pickupInfoITC'); const pickupInfoLotte = document.getElementById('pickupInfoLotte'); if (pickupInfoITC) pickupInfoITC.style.display = 'none'; if (pickupInfoLotte) pickupInfoLotte.style.display = 'none'; const selectedPickupLocationInput = document.getElementById('selectedPickupLocation'); if (selectedPickupLocationInput) selectedPickupLocationInput.value = ''; // Auto-select if only one location is available if (citySelect) { const availableOptions = Array.from(citySelect.options).filter(function(o) { return !o.disabled && o.value !== ''; }); if (availableOptions.length === 1) { availableOptions[0].selected = true; const event = new Event('change', { bubbles: true }); citySelect.dispatchEvent(event); } } // 2b. Show pickup location details (in address section) const pickupLocationDetails = document.getElementById('pickupLocationDetails'); if (pickupLocationDetails) { pickupLocationDetails.style.display = 'block'; } // 3. Hide address form and remove required attributes const formAddressPurchase = document.querySelector('.formAddressPurchase'); if (formAddressPurchase) { formAddressPurchase.style.display = 'none'; // Remove required from all inputs in the form const requiredInputs = formAddressPurchase.querySelectorAll('[required]'); requiredInputs.forEach(function(input) { input.removeAttribute('required'); input.setAttribute('data-was-required', 'true'); // Mark for restoration }); } // 4. Trigger date restrictions based on product tags window.applyPickupDateRestrictions = true; // Apply restrictions to existing date buttons immediately const deliveryDateElement = document.getElementById('deliveryDate'); if (deliveryDateElement) { console.log('Applying pickup date restrictions immediately to existing buttons'); applyPickupDateRestrictionsLocal(deliveryDateElement); } // 5. Hide full calendar (except for pickup-itcinhouse) const isPickupInhouse = true; const deliveryDateFull = document.getElementById('deliveryDateFull'); if (deliveryDateFull && !isPickupInhouse) { deliveryDateFull.style.display = 'none'; } // 5b. Hide row-delivery-time const rowDeliveryTime = document.getElementById('row-delivery-time'); if (rowDeliveryTime) { rowDeliveryTime.style.display = 'none'; } // 5c. Make delivery time not required const propDeliveryTime = document.getElementById('propDeliveryTime'); if (propDeliveryTime) { propDeliveryTime.removeAttribute('required'); propDeliveryTime.value = '-'; } const propertiesDeliveryTime = document.getElementById('properties-delivery-time'); if (propertiesDeliveryTime) { propertiesDeliveryTime.removeAttribute('required'); propertiesDeliveryTime.value = '-'; } // 6. Update address for pickup if (typeof window.updateDeliveryAddress === 'function') { window.updateDeliveryAddress(); } // 7. Validate button state immediately after activating pickup mode if (typeof validatePersonalizeButton === 'function') { validatePersonalizeButton(); } } // Global function: apply pickup form state to address section // Called both from handlePickupMode() and from each step navigating to purchaseAddress window.applyPickupFormState = function() { const isPickup = document.getElementById('selectedShippingMethod') && document.getElementById('selectedShippingMethod').value === 'Pickup'; const pickupLocationDetails = document.getElementById('pickupLocationDetails'); const formAddressPurchase = document.querySelector('.formAddressPurchase'); if (isPickup) { // Show pickup details panel, hide address form if (pickupLocationDetails) pickupLocationDetails.style.display = 'block'; if (formAddressPurchase) { formAddressPurchase.style.display = 'none'; // Remove required from all inputs so validation passes formAddressPurchase.querySelectorAll('[required]').forEach(function(input) { input.removeAttribute('required'); input.setAttribute('data-was-required', 'true'); }); } // Sync pickup details panel content const pickupLocation = (document.getElementById('selectedPickupLocation') || {}).value || ''; if (typeof updatePickupLocationDetails === 'function') { updatePickupLocationDetails(pickupLocation); } } else { // Hide pickup details panel, show address form if (pickupLocationDetails) pickupLocationDetails.style.display = 'none'; if (formAddressPurchase) { formAddressPurchase.style.display = 'block'; // Restore required attributes formAddressPurchase.querySelectorAll('[data-was-required="true"]').forEach(function(input) { input.setAttribute('required', 'required'); input.removeAttribute('data-was-required'); }); } } }; // Local function to apply pickup date restrictions function applyPickupDateRestrictionsLocal(deliveryDateElement) { if (!deliveryDateElement) return; // Get current time in Jakarta timezone const now = new Date(new Date().toLocaleString("en-US", {timeZone: "Asia/Jakarta"})); const currentHour = now.getHours(); const currentMinute = now.getMinutes(); const currentTime = currentHour + (currentMinute / 60); const currentDate = now.getDate(); const isAfter3PM = currentTime >= 15.0; // Check product tags const isPickupITC = true; const isPickupLotte = false; console.log('Applying pickup date restrictions:', { isPickupITC, isPickupLotte, currentDate, currentTime: currentTime.toFixed(2), isAfter3PM }); const dateButtons = deliveryDateElement.querySelectorAll('button.date-single'); console.log('Found date buttons:', dateButtons.length); dateButtons.forEach((button, index) => { const buttonDate = parseInt(button.dataset.date, 10); console.log(`Checking button ${index}: date=${buttonDate}, currentDate=${currentDate}`); if (isPickupITC) { // Check if this button is today if (buttonDate === currentDate) { button.disabled = true; button.classList.add('stop'); button.title = 'Pickup not available for today'; console.log(`✓ Disabled button ${index} (date ${buttonDate} = today) for pickup-itcinhouse`); } // Check if this button is tomorrow AND it's after 3 PM else if (buttonDate === currentDate + 1 && isAfter3PM) { button.disabled = true; button.classList.add('stop'); button.title = 'Pickup not available (after 3 PM cutoff)'; console.log(`✓ Disabled button ${index} (date ${buttonDate} = tomorrow) for pickup-itcinhouse (after 3 PM)`); } } else if (isPickupLotte) { // For pickup-lotte: Allow ONLY date 14. // Disable 14 if today is 13th > 3 PM or today is > 13th. if (buttonDate !== 14) { button.disabled = true; button.classList.add('stop'); button.title = 'Pickup only available on the 14th'; // Do NOT hide, just disable. console.log(`✓ Disabled button ${index} (date ${buttonDate}) for pickup-lotte (not 14th)`); } else { // Date is 14. Check cutoff. if (currentDate > 13 || (currentDate === 13 && isAfter3PM)) { button.disabled = true; button.classList.add('stop'); button.title = 'Pickup closed for 14th (Cutoff: 13th 15:00)'; console.log(`✓ Disabled button ${index} (date ${buttonDate}) for pickup-lotte (Cutoff missed)`); } } } }); } // Function to handle delivery mode (normal mode) function handleDeliveryMode() { // 1. Restore city dropdown with original delivery cities const citySelect = document.getElementById('cities'); if (citySelect) { if (citySelect.dataset.originalOptions) { citySelect.innerHTML = citySelect.dataset.originalOptions; delete citySelect.dataset.originalOptions; } // Restore previously selected delivery city if saved if (citySelect.dataset.previousCity !== undefined) { citySelect.value = citySelect.dataset.previousCity; delete citySelect.dataset.previousCity; } else { citySelect.value = ''; } citySelect.disabled = false; citySelect.style.backgroundColor = '#fff'; citySelect.style.cursor = 'pointer'; citySelect.style.opacity = '1'; } // 2. Hide pickup location info panels const pickupInfoITC = document.getElementById('pickupInfoITC'); const pickupInfoLotte = document.getElementById('pickupInfoLotte'); if (pickupInfoITC) pickupInfoITC.style.display = 'none'; if (pickupInfoLotte) pickupInfoLotte.style.display = 'none'; const selectedPickupLocationInput = document.getElementById('selectedPickupLocation'); if (selectedPickupLocationInput) selectedPickupLocationInput.value = ''; // 2b. Hide pickup location details (in address section) const pickupLocationDetails = document.getElementById('pickupLocationDetails'); if (pickupLocationDetails) { pickupLocationDetails.style.display = 'none'; } // 3. Show address form and restore required attributes const formAddressPurchase = document.querySelector('.formAddressPurchase'); if (formAddressPurchase) { formAddressPurchase.style.display = 'block'; // Restore required attributes const wasRequiredInputs = formAddressPurchase.querySelectorAll('[data-was-required="true"]'); wasRequiredInputs.forEach(function(input) { input.setAttribute('required', 'required'); input.removeAttribute('data-was-required'); }); } // 4. Remove date restrictions window.applyPickupDateRestrictions = false; // Trigger date re-render to remove restrictions if (citySelect && citySelect.value) { setTimeout(function() { const changeEvent = new Event('change', { bubbles: true }); citySelect.dispatchEvent(changeEvent); }, 100); } // 5. Show full calendar const deliveryDateFull = document.getElementById('deliveryDateFull'); if (deliveryDateFull) { deliveryDateFull.style.display = 'block'; } // 5b. Show row-delivery-time const rowDeliveryTime = document.getElementById('row-delivery-time'); if (rowDeliveryTime) { rowDeliveryTime.style.display = 'block'; } // 5c. Make delivery time required again const propDeliveryTime = document.getElementById('propDeliveryTime'); if (propDeliveryTime) { propDeliveryTime.setAttribute('required', 'required'); } const propertiesDeliveryTime = document.getElementById('properties-delivery-time'); if (propertiesDeliveryTime) { propertiesDeliveryTime.setAttribute('required', 'required'); } // 6. Update address for delivery if (typeof window.updateDeliveryAddress === 'function') { window.updateDeliveryAddress(); } // 7. Hide pickup location error when returning to delivery mode const pickupLocationErrorEl = document.getElementById('pickupLocationError'); if (pickupLocationErrorEl) pickupLocationErrorEl.style.display = 'none'; } // Listen for variant changes const productSelect = document.getElementById('productSelect'); if (productSelect) { productSelect.addEventListener('change', function() { checkInventoryStatus(); setTimeout(function() { window.validateVariantMetafields(false); // Don't show errors on variant change }, 100); }); } // Listen for changes on variant metafield inputs - only to clear existing errors const variantMetafields = document.querySelectorAll('.variant-metafield'); variantMetafields.forEach(function(field) { field.addEventListener('input', function() { clearFieldError(this); }); field.addEventListener('change', function() { clearFieldError(this); }); field.addEventListener('blur', function() { clearFieldError(this); }); }); // Listen for changes on select elements within variant metafields const variantSelects = document.querySelectorAll('.variant-metafield-select'); variantSelects.forEach(function(select) { select.addEventListener('change', function() { clearFieldError(this); }); }); }); // Function to clear error styling from a specific field function clearFieldError(field) { const fieldContainer = field.closest('.form-group-variant'); if (fieldContainer) { fieldContainer.classList.remove('field-error'); const existingError = fieldContainer.querySelector('.error-message'); if (existingError) { existingError.remove(); } } } // Prevent form submission if out of stock or required fields are empty document.addEventListener('click', function(e) { if (e.target.matches('button[data-out-of-stock="true"]')) { e.preventDefault(); e.stopPropagation(); alert('This product is currently out of stock and cannot be purchased.'); return false; } // Check if this is the purchase button if (e.target.id === 'btnPurchase' || e.target.closest('#btnPurchase')) { // Validate delivery city / pickup location before proceeding const _smClick = document.getElementById('selectedShippingMethod'); const _isPickupClick = _smClick && _smClick.value === 'Pickup'; const _pickupErrEl = document.getElementById('pickupLocationError'); if (_isPickupClick) { const _plClick = document.getElementById('selectedPickupLocation'); if (!_plClick || !_plClick.value) { if (_pickupErrEl) _pickupErrEl.style.display = 'block'; e.preventDefault(); e.stopPropagation(); return false; } } if (_pickupErrEl && !_isPickupClick) _pickupErrEl.style.display = 'none'; const isValid = window.validateVariantMetafields(true); // Show errors when button is clicked if (!isValid) { e.preventDefault(); e.stopPropagation(); // The validateVariantMetafields function already handles scrolling and focusing // No need for additional scroll here as it's handled in the validation function return false; } } }); </script> <div class="product-description rte bg-card col-12 py-3 px-0 m-0" itemprop="description"> <div class="short-desc-mobile d-block d-lg-none mb-3"> <div class="short-desc"> <ul> <li><strong>Platform Terbaik Dengan Sistem Modern</strong></li> <li> <strong>Promosi Anti Rungkad Hadir Di HOKI88BOS</strong> </li> <li> <strong>Display Menawan dalam <em>Borosilicate Glass Dome</em> Eksklusif</strong><strong> dengan Drawer Box Premium + Pita Satin Outerbloom</strong><br /> </li> </ul></div> <label class="more-mobile">Show More →</label> </div> <div class="short-content short-spec position-relative open"> <h3 class="heading-toggle">Descriptions</h3> <div id="product-desc" class="content-toggle product-spec pb-3" style="display: block; height: 200px; overflow: hidden; transition: height 0.3s ease;"> <ul> <li><strong>Platform Terbaik Dengan Sistem Modern</strong></li> <li> <strong>Promosi Anti Rungkad Hadir Di HOKI88BOS</strong> </li> <li> <strong>Display Menawan dalam <em>Borosilicate Glass Dome</em> Eksklusif</strong><strong> dengan Drawer Box Premium + Pita Satin Outerbloom</strong><br /> </li> </ul> <p><strong><em>"For a love that is romantic. A passionate romance that everyone long for their whole life and only a few are lucky enough to experience it."</em></strong></p> <p><span>HOKI88BOS menhadirkan layanan eklusif si aplikasi slot88 yang di dukung dengan server terbaik dengan akses cepat dan juga menawarkan permainan terbaru dengan winrate tinggi di jamin mudah menang.</span></p> <p><span>Mawar Passionate Red adalah bunga pilihan yang dipetik oleh tangan para ahli bunga kami secara teliti, kemudian diawetkan melalui serangkaian proses alami sehingga bisa sampai di tangan Anda dalam kondisi sempurna, layaknya bunga segar yang mekar di taman. Dirangkai dengan indah di dalam <i>glass dome </i>eksklusif, berikan Enchanted Dome - Passionate Red kepada si dia untuk menunjukkan bahwa Anda mencintainya sepenuh hati.</span></p> <p><span><em></em></span></p><div class="video-wrapper"><div class="video-wrapper"><iframe width="560" height="315" src="https://www.youtube.com/embed/tGskw4gXTy0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe></div></div><p></p> <p> </p> <table width="100%"> <tbody> <tr> <td>SKU</td> <td>[C]OBIBUN1159</td> </tr> <tr> <td>Jumlah Bunga</td> <td>1 Tangkai</td> </tr> <tr> <td>Jenis dan Warna Bunga</td> <td>Preserved Rose Warna Passionate Red</td> </tr> <tr> <td>Ukuran Box </td> <td>18,5 cm x 18,5 cm x 30,5 cm</td> </tr> </tbody> </table> <h2>As Seen Blooms in The Arms of:</h2> <p><img src="https://cdn.shopify.com/s/files/1/1589/6833/files/WhatsApp_Image_2019-02-04_at_11.32.58_AM_1_large.jpeg?v=1549266372" alt="" width="418" height="370" /> <img src="https://cdn.shopify.com/s/files/1/1589/6833/files/Screenshot_20200114-161208_2_480x480.png?v=1578994082" alt="" width="401" height="448" /></p> </div> <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); font-weight: 600;"> Read More </button> </div> <div class="short-content short-additional position-relative"> <h3 class="heading-toggle">Care Instructions</h3> <div class="content-toggle pb-3"> <div style="text-align: center;"> <table border="0" width="100%"> <tbody> <tr style="height: 56px;"> <td style="width: 20%; height: 56px;"><img src="https://cdn.shopify.com/s/files/1/1589/6833/files/do-not-remove-the-flower-from-theiur-case_dcbfa5a7-3252-4a60-9322-43ebd641dddb_50x50.jpg?v=1580709657" width="50x50" height="50x50" style="float: none;" /></td> <td style="width: 80%; text-align: left; height: 56px;">Do not remove the flower from their case</td> </tr> <tr style="height: 56px;"> <td style="width: 20%; height: 56px;"><img src="https://cdn.shopify.com/s/files/1/1589/6833/files/do-not-place-anything-on-top-of-fower_50x50.jpg?v=1580708805" width="50x50" height="50x50" style="float: none;" /></td> <td style="width: 80%; text-align: left; height: 56px;">Do not place anything on top of the case as they can crush the case and damage the flower inside</td> </tr> <tr style="height: 56px;"> <td style="width: 20%; height: 56px;"><img src="https://cdn.shopify.com/s/files/1/1589/6833/files/gently-touch-the-flower_50x50.jpg?v=1580709811" width="50x50" height="50x50" style="float: none;" /></td> <td style="width: 80%; text-align: left; height: 56px;">Touch the flower gently and if required, clean with a soft brush</td> </tr> <tr style="height: 30px;"> <td style="width: 20%; height: 30px;"><img src="https://cdn.shopify.com/s/files/1/1589/6833/files/watering-flower_50x50.jpg?v=1580709904" alt="" width="50x50" height="50x50" /></td> <td style="width: 80%; text-align: left; height: 30px;">Do not water the flower as using any water will immediately damage it</td> </tr> <tr style="height: 38px;"> <td style="width: 20%; height: 38px;"><img src="https://cdn.shopify.com/s/files/1/1589/6833/files/uv-light_50x50.jpg?v=1580709980" alt="" width="50x50" height="50x50" /></td> <td style="width: 80%; text-align: left; height: 38px;">Do not expose the flower to direct sunlight as UV light may cause color bleaching</td> </tr> <tr style="height: 38px;"> <td style="width: 20%; height: 38px;"><img src="https://cdn.shopify.com/s/files/1/1589/6833/files/humadity-environment_50x50.jpg?v=1580710073" alt="" width="50x50" height="50x50" /></td> <td style="width: 80%; text-align: left; height: 38px;">Keep the arrangement in a room temperature, humidity-free environment </td> </tr> </tbody> </table> </div> </div> </div> <script> var liCountMobile; $(document).ready(function () { // Handle mobile short description - same logic as desktop $(".short-desc-mobile .short-desc ul").each(function() { liCountMobile = $(this).children("li").length; if (liCountMobile > 3) { $(this).closest(".short-desc-mobile").find(".more-mobile").addClass("showMe"); } }); $(".more-mobile").click(function () { $("#product-desc").find("ul").show(); $('html, body').animate({ scrollTop: $("#product-desc").offset().top - 150 }, 1000); $("#product-desc").css("height","auto"); // Open the descriptions accordion var $descriptions = $("#product-desc").closest(".short-content"); if (!$descriptions.hasClass("open")) { $descriptions.addClass("open"); $("#product-desc").show(); } }); // Handle Read More / Read Less toggle var isExpanded = false; var descElement = $("#product-desc"); var readMoreBtn = $("#readMoreBtn"); readMoreBtn.click(function(e) { e.preventDefault(); isExpanded = !isExpanded; if (isExpanded) { // Expand to full height descElement.css("height", "auto"); readMoreBtn.text("Read Less"); readMoreBtn.css({ "position": "relative", "height": "auto", "bottom": "auto", "background-color": "transparent" }); } else { // Collapse to 200px descElement.css("height", "200px"); readMoreBtn.text("Read More"); readMoreBtn.css({ "position": "absolute", "height": "70px", "bottom": "0", "background-color": "rgba(255, 255, 255, 0.8)" }); } }); }); </script> </div> </div> </div> </div> </div> </div> <div id="product-bottom"> <div class="row"> <div id="product-bottom-left" class="product-bottom-left col-lg-12"> <div class="container"> <div id="anchor-review"></div> <div id="product-reviews" class="product-reviews"> <!--Stamped - Begin Main Widget --> <div id="stamped-main-widget" data-product-id="7535020376279" data-name="HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat" data-url="https://www.bellabasera.com/about.php" data-image-url="//outerbloom.com/cdn/shop/products/The-Novo-Enchanted-Dome---Passionate-Red_2_large.jpg%3Fv=1643976096" data-description="<ul> <li><strong>Platform Terbaik Dengan Sistem Modern</strong></li> <li> <strong>Diawetkan dengan Proses Alami Sehingga Bisa </strong><strong>Bertahan Hingga 3 Tahun</strong> </li> <li> <strong>Display Menawan dalam <em>Borosilicate Glass Dome</em> Eksklusif</strong><strong> dengan Drawer Box Premium + Pita Satin Outerbloom</strong><br> </li> </ul> <p><strong><em>"For a love that is romantic. A passionate romance that everyone long for their whole life and only a few are lucky enough to experience it."</em></strong></p> <p><span>HOKI88BOS menhadirkan layanan eklusif si aplikasi slot88 yang di dukung dengan server terbaik dengan akses cepat dan juga menawarkan permainan terbaru dengan winrate tinggi di jamin mudah menang.</span></p> <p><span>Mawar Passionate Red adalah bunga pilihan yang dipetik oleh tangan para ahli bunga kami secara teliti, kemudian diawetkan melalui serangkaian proses alami sehingga bisa sampai di tangan Anda dalam kondisi sempurna, layaknya bunga segar yang mekar di taman. Dirangkai dengan indah di dalam <i>glass dome </i>eksklusif, berikan Enchanted Dome - Passionate Red kepada si dia untuk menunjukkan bahwa Anda mencintainya sepenuh hati.</span></p> <p><span><em><iframe width="560" height="315" src="https://www.youtube.com/embed/tGskw4gXTy0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe></em></span></p> <p> </p> <table width="100%"> <tbody> <tr> <td>SKU</td> <td>[C]OUTBUN1159</td> </tr> <tr> <td>Jumlah Bunga</td> <td>1 Tangkai</td> </tr> <tr> <td>Jenis dan Warna Bunga</td> <td>Preserved Rose Warna Passionate Red</td> </tr> <tr> <td>Ukuran Box </td> <td>18,5 cm x 18,5 cm x 30,5 cm</td> </tr> </tbody> </table> <h2>As Seen Blooms in The Arms of:</h2> <p><img src="https://cdn.shopify.com/s/files/1/1589/6833/files/WhatsApp_Image_2019-02-04_at_11.32.58_AM_1_large.jpeg?v=1549266372" alt="" width="418" height="370"> <img src="https://cdn.shopify.com/s/files/1/1589/6833/files/Screenshot_20200114-161208_2_480x480.png?v=1578994082" alt="" width="401" height="448"></p>" data-product-sku="the-novo-enchanted-dome-passionate-red" data-product-type="Bunga Outerbloom" class="" data-sort="with-photos"> <link href="//cdn1.stamped.io/files/widget.min.css" rel="stylesheet" type="text/css" media="all" /> <div class="stamped-container" data-count="2" data-widget-style="standard2" data-widget-language="" data-widget-sort="with-photos" data-widget-show-upload="true" data-widget-show-graph="true" data-widget-show-summary-photo="true" data-widget-show-sort="true" data-widget-show-summary-recommend="true" data-widget-show-tab-reviews="true" data-widget-show-avatar="true" data-widget-show-verified="true" data-widget-show-date="true" data-widget-show-share="false" data-widget-show-votes="true" data-widget-show-qna="true" data-widget-show-filter-keywords="true" data-widget-show-filter-custom-forms="true" data-widget-show-filter-search="true" data-widget-load-type="continue" data-widget-type="standard2" data-widget-show-location="true" data-widget-show-product-variant="false" data-widget-limit-words="" data-version="2"> <div class="stamped-header-title"> Customer Reviews </div> <div class="stamped-header"> <meta itemprop="bestRating" content="5" /><meta itemprop="worstRating" content="1" /><meta itemprop="ratingValue" content="5.0" /> <meta itemprop="reviewCount" content="2" /> <div class="stamped-summary" data-count="2"> <div style="width:200px;float:left;" class="summary-overview"> <span class="stamped-summary-caption stamped-summary-caption-1"> <span class="stamped-summary-text-1" data-count="2" data-rating="5.0"><strong>5.0</strong></span> </span> <span class="stamped-starrating stamped-summary-starrating" aria-hidden="true"> <i class="stamped-fa stamped-fa-star" aria-hidden="true"></i><i class="stamped-fa stamped-fa-star" aria-hidden="true"></i><i class="stamped-fa stamped-fa-star" aria-hidden="true"></i><i class="stamped-fa stamped-fa-star" aria-hidden="true"></i><i class="stamped-fa stamped-fa-star" aria-hidden="true"></i> </span> <span class="stamped-summary-caption stamped-summary-caption-2"> <span class="stamped-summary-text" data-count="2" data-rating="5.0">Based on 2 Reviews</span> </span> </div> <div class="stamped-summary-ratings" data-count="2" style=""> <div class="summary-rating" data-count="2"> <div class="summary-rating-title">5 ★</div> <div class="summary-rating-bar" data-rating="5" aria-label="5-Star Ratings"> <div class="summary-rating-bar-content" style="width:100%;" data-rating="100">100% </div> </div> <div class="summary-rating-count">2</div> </div> <div class="summary-rating" data-count="0"> <div class="summary-rating-title">4 ★</div> <div class="summary-rating-bar" data-rating="4" aria-label="4-Star Ratings"> <div class="summary-rating-bar-content" style="width:0%;" data-rating="0">0% </div> </div> <div class="summary-rating-count">0</div> </div> <div class="summary-rating" data-count="0"> <div class="summary-rating-title">3 ★</div> <div class="summary-rating-bar" data-rating="3" aria-label="3-Star Ratings"> <div class="summary-rating-bar-content" style="width:0%;" data-rating="0">0% </div> </div> <div class="summary-rating-count">0</div> </div> <div class="summary-rating" data-count="0"> <div class="summary-rating-title">2 ★</div> <div class="summary-rating-bar" data-rating="2" aria-label="2-Star Ratings"> <div class="summary-rating-bar-content" style="width:0%;" data-rating="0">0% </div> </div> <div class="summary-rating-count">0</div> </div> <div class="summary-rating" data-count="0"> <div class="summary-rating-title">1 ★</div> <div class="summary-rating-bar" data-rating="1" aria-label="1-Star Ratings"> <div class="summary-rating-bar-content" style="width:0%;" data-rating="0">0% </div> </div> <div class="summary-rating-count">0</div> </div> </div> <div class="stamped-summary-photos stamped-summary-photos-container" style="display:none;" tabindex="-1"> <div class="stamped-photos-title"> Customer Photos </div> <div style="position:relative;overflow: hidden;"> <div class="stamped-photos-carousel" data-total="0"> <div> </div> </div> </div> <div class="stamped-photos-carousel-btn-left"> <span class="btn-slide-left" data-direction="left"><i class="fa fa-chevron-left"></i></span> </div> <div class="stamped-photos-carousel-btn-right"> <span class="btn-slide-right" data-direction="right"> <i class="fa fa-chevron-right"></i> </span> </div> </div> <span class="stamped-summary-actions"> <span class="stamped-summary-actions-newreview" role="button" onclick="StampedFn.toggleForm('review','7535020376279');return false;" onkeydown="StampedFn.toggleForm('review','7535020376279');return false;" style="cursor: pointer;" tabindex="0" aria-controls="new-review-form_7535020376279">Tulis Review</span> <span class="stamped-summary-actions-newquestion" role="button" style="cursor: pointer;" onclick="StampedFn.toggleForm('question', '7535020376279');return false;" onkeydown="StampedFn.toggleForm('question', '7535020376279');return false;" tabindex="0">Tulis Pertanyaan</span> </span> </div> </div> <div class="stamped-content"> <div class="stamped-tab-container" style=""> <ul class="stamped-tabs" role="tablist"> <li id="tab-reviews" role="tab" aria-selected="true" class="active" data-type="reviews" data-count="2" aria-label="Reviews" tabindex="0">Reviews</li> <li id="tab-questions" role="tab" aria-selected="false" data-type="questions" style="" data-count="0" aria-label="Questions" tabindex="0" data-new-tab="">Pertanyaan</li> </ul> </div> <div class="question-form-wrapper"><div class="stamped-form-message stamped-form-message-success" style="display:none;"><p>Thank you for posting a question!<br />Your question will appear on the site once we've answered it.</p></div> <form method="post" action="//stamped.io/api/questions" id="new-question-form" class="new-question-form" onsubmit="StampedFn.submitQuestionForm(this);return false;" style="display:none;"> <input type="hidden" name="productId" value="7535020376279" /> <input type="hidden" name="shop" value="outerbloom1.myshopify.com" /> <input type="hidden" name="apiKey" value="23462" /> <input type="hidden" name="storeUrl" value="outerbloom.com" /> <input type="hidden" name="sId" value="23462" /> <div class="spr-form-title stamped-form-title">Ask a Question</div> <fieldset class="spr-form-contact stamped-form-contact"> <legend style="display:none;">Author</legend> <div class="spr-form-contact-name stamped-form-contact-name"> <label class="spr-form-label stamped-form-label" for="question_author_7535020376279">Name</label> <input class="spr-form-input spr-form-input-text stamped-form-input stamped-form-input-text" id="question_author_7535020376279" type="text" name="name" value="" placeholder="Enter your name" required="" /> </div> <div class="spr-form-contact-email stamped-form-contact-email"> <label class="spr-form-label stamped-form-label" for="question_email_7535020376279">Email</label> <input class="spr-form-input spr-form-input-email stamped-form-input stamped-form-input-email" id="question_email_7535020376279" type="email" name="email" value="" placeholder="john.smith@example.com" required="" /> </div> </fieldset> <fieldset class="spr-form-review stamped-form-review"> <legend style="display:none;">Question</legend> <div class="spr-form-review-body stamped-form-review-body"> <label class="spr-form-label stamped-form-label" for="question_body_7535020376279">Question</label> <div class="spr-form-input stamped-form-input"> <textarea class="spr-form-input spr-form-input-textarea stamped-form-input stamped-form-input-textarea" id="question_body_7535020376279" data-product-id="7535020376279" name="reviewBody" rows="10" maxlength="1000" placeholder="Write your question here" required=""></textarea> </div> </div> </fieldset> <fieldset class="spr-form-actions stamped-form-actions"> <legend style="display:none;">Submit</legend> <input type="submit" class="stamped-button stamped-button-primary button button-primary btn btn-primary" value="Submit Question" /> </fieldset> </form></div><form method="post" id="new-review-form_7535020376279" class="new-review-form" aria-expanded="false" onsubmit="event.preventDefault(); StampedFn.submitForm(this);" style="display: none;border: 1px solid #dddddd4d;padding: 15px"> <input type="hidden" name="productId" value="7535020376279" /> <div class="stamped-form-title" style=" display:none;">Write a review</div> <fieldset class="stamped-form-contact"> <legend style="display:none;">Author</legend> <div class="stamped-form-contact-name"> <label class="stamped-form-label" for="review_author_7535020376279">Name</label> <input class="stamped-form-input stamped-form-input-text " id="review_author_7535020376279" type="text" name="author" required="" value="" placeholder="Enter your name" autocomplete="name" /> </div> <div class="stamped-form-contact-email"> <label class="stamped-form-label" for="review_email_7535020376279">Email</label> <input class="stamped-form-input stamped-form-input-email " id="review_email_7535020376279" type="email" name="email" required="" value="" placeholder="john.smith@example.com" autocomplete="email" /> </div> <div class="stamped-form-contact-location"> <label class="stamped-form-label" for="review_location_7535020376279">Location</label> <input class="stamped-form-input stamped-form-input-text " id="review_location_7535020376279" type="text" name="location" value="" placeholder="e.g Paris, France" autocomplete="shipping country" /> </div> </fieldset> <fieldset class="stamped-form-review"> <legend style="display:none;">Rating</legend> <div class="stamped-form-review-rating"> <label class="stamped-form-label" for="reviewRating">Rating</label> <input type="text" id="reviewRating" name="reviewRating" style="font-size: 0px; border: none; height: 1px; width: 1px; margin: 0; padding: 0; line-height: 0px; min-height: 0px;" required="" /> <div class="stamped-form-input stamped-starrating"> <a href="#" onclick="StampedFn.setRating(this);return false;" onkeydown="StampedFn.setRating(this);return false;" role="button" tabindex="0" class="stamped-fa stamped-fa-star-o" data-value="1"><span style="display:none;">1</span></a> <a href="#" onclick="StampedFn.setRating(this);return false;" onkeydown="StampedFn.setRating(this);return false;" role="button" tabindex="0" class="stamped-fa stamped-fa-star-o" data-value="2"><span style="display:none;">2</span></a> <a href="#" onclick="StampedFn.setRating(this);return false;" onkeydown="StampedFn.setRating(this);return false;" role="button" tabindex="0" class="stamped-fa stamped-fa-star-o" data-value="3"><span style="display:none;">3</span></a> <a href="#" onclick="StampedFn.setRating(this);return false;" onkeydown="StampedFn.setRating(this);return false;" role="button" tabindex="0" class="stamped-fa stamped-fa-star-o" data-value="4"><span style="display:none;">4</span></a> <a href="#" onclick="StampedFn.setRating(this);return false;" onkeydown="StampedFn.setRating(this);return false;" role="button" tabindex="0" class="stamped-fa stamped-fa-star-o" data-value="5"><span style="display:none;">5</span></a> </div> </div> <div class="stamped-form-review-title"> <label class="stamped-form-label" for="review_title_7535020376279">Title of Review</label> <input class="stamped-form-input stamped-form-input-text" id="review_title_7535020376279" type="text" name="reviewTitle" required="" value="" placeholder="Give your review a title" /> </div> <div class="stamped-form-review-body"> <label class="stamped-form-label" for="review_body_7535020376279">How was your overall experience?</label> <div class="stamped-form-input"> <textarea class="stamped-form-input stamped-form-input-textarea" id="review_body_7535020376279" data-product-id="7535020376279" name="reviewMessage" required="" rows="10" maxlength="5000"></textarea> </div> </div> </fieldset> <fieldset class="stamped-form-custom-questions"> <legend style="display:none;">Questions</legend> </fieldset> <fieldset class="stamped-form-actions"> <legend style="display:none;">Photos</legend> <span class="stamped-file-holder"> </span> <span class="stamped-file-uploader" style="display:none;"> <label for="stamped-file-uploader-input"> <span style="display:none;">Upload</span> <input id="stamped-file-uploader-input" type="file" name="stamped-file-uploader-input" class="stamped-file-uploader-input" multiple="" data-product-id="7535020376279" style="display:none;" /> <span class="stamped-file-uploader-btn" style="border:1px solid #333;padding: 6px 10px; font-size:13px; border-radius: .3em;"> <i class="stamped-fa stamped-fa-camera"></i> <span class="stamped-file-uploader-btn-label2"></span> </span> </label> </span> <span class="stamped-file-loading hide" style="display:none;"> <i class="fa fa-spinner fa-spin"></i> </span> <input id="stamped-button-submit" type="submit" class="stamped-button stamped-button-primary button button-primary btn btn-primary" value="Submit" /> </fieldset> </form><div class="stamped-messages"><div class="stamped-thank-you"><p>Thank you for submitting a review!</p><p>Your input is very much appreciated. Share it with your friends so they can enjoy it too!</p><div class="stamped-share-links"><a class="facebook" href="#"><span><i class="stamped-fa stamped-fa-facebook"></i>Facebook</span></a><a class="twitter" href="#"><span><i class="stamped-fa stamped-fa-twitter"></i>Twitter</span></a></div></div><div class="stamped-empty-state" style="display:none;"><div>Be the first to review this item</div></div></div><div class="stamped-reviews-filter" id="stamped-reviews-filter" data-show-filters="part"> <span class="stamped-sort-select-wrapper"> <select id="stamped-sort-select" class="stamped-sort-select" onchange="StampedFn.sortReviews(this);" aria-label="Sort reviews" tabindex="0"> <option value="featured">Sort</option> <option value="recent">Most Recent</option> <option value="highest-rating">Highest Rating</option> <option value="lowest-rating">Lowest Rating</option> <option value="most-votes">Most Helpful</option> </select> </span> <div class="stamped-reviews-filter-label">Filter Reviews:</div> <div class="stamped-reviews-search-text" style="display:none;"> <span class="stamped-reviews-search-icon stamped-fa stamped-fa-search" aria-hidden="true"></span> <input id="stamped-reviews-search-input" class="stamped-reviews-search-input" type="text" placeholder="Search Reviews" aria-label="Search reviews input" /> <span class="stamped-reviews-search-button"></span> <span class="stamped-reviews-search-clear" tabindex="0" aria-label="Clear search input" role="button" style="display:none;">×</span> </div> <div class="stamped-filters-wrapper"> <div class="stamped-summary-keywords"> <ul class="stamped-summary-keywords-list"> </ul> </div> <div class="stamped-filter-selects"> <span class="stamped-sort-select2-wrapper" style="display:none;"> <select id="stamped-sort-select2" class="stamped-sort-select" onchange="StampedFn.sortReviews(this);" aria-label="Sort reviews and ratings" tabindex="0" style="display:none;"> <option value="featured">Sort</option> <option value="recent">Most Recent</option> <option value="highest-rating">Highest Rating</option> <option value="lowest-rating">Lowest Rating</option> <option value="most-votes">Most Helpful</option> </select> </span> </div> </div> <div class="stamped-summary-actions-clear" tabindex="0" role="button" aria-label="Clear all filters" style="cursor: pointer;display:none;">Clear filter</div> <div class="stamped-summary-actions-mobile-filter" tabindex="0" role="button" aria-label="Show all filters" style="cursor: pointer;display:none;"><i class="stamped-fa stamped-fa-params"></i> More Filters</div> </div><div id="stamped-reviews-tab" class="stamped-reviews" role="tabpanel" aria-labelledby="tab-reviews" tabindex="-1"><div class="stamped-review" id="stamped-review-136850899" data-product-id="7535020376279" data-rating="5" data-verified="buyer"> <div class="stamped-review-header"> <div class="stamped-review-avatar" style="padding:0;" data-avatar="false"> <div class="stamped-review-avatar-content"> PH </div> </div> <div class="created">21 Aug 2024</div> <strong class="author">pin h.</strong> <span class="stamped-verified-badge" data-type="buyer" data-verified-label="Verified Buyer"></span> <div class="review-location"><span class="stamped-location-flag"><img class="stamped-lazyload stamped-lazyload-loaded" src="https://cdn.stamped.io/cdn/flags/id.svg" data-src="https://cdn.stamped.io/cdn/flags/id.svg" width="15" height="13" alt="Indonesia" onerror="this.style.display="none";" data-was-processed="true" /></span> <span data-location="Indonesia">Indonesia</span></div> <div></div> </div> <div class="stamped-review-content"> <div class="stamped-review-recommend" data-is-recommend=""></div> <div class="stamped-review-body"> <span class="stamped-starratings stamped-review-header-starratings" role="list" data-rating="5" aria-label="5-Star Rating Review"> <i class="stamped-fa stamped-fa-star "></i><i class="stamped-fa stamped-fa-star "></i><i class="stamped-fa stamped-fa-star "></i><i class="stamped-fa stamped-fa-star "></i><i class="stamped-fa stamped-fa-star "></i> </span> <h3 class="stamped-review-header-title">Excellent service, delivery and product. I actually ordered this from the US to my wife who is in Jakarta for work. Delivery was on time and the product is fabulous. Thanks a bunch for making my wife happy. </h3> <p class="stamped-review-content-body">Excellent. My wife loves it.</p> <div class="stamped-review-options"></div> <div class="stamped-review-image"> </div> <div class="stamped-review-product" style="display:none;"><a href="https://stamped.io/go/d3xXaWRnZXRNYWlufDIzNDYyfHJ8MTM2ODUwODk50" rel="nofollow" target="_top">The Novo Enchanted Dome - Passionate Red</a></div> <div class="stamped-review-variant" style="display:none;"></div> <div class="stamped-review-footer"> <div class="stamped-review-share"></div> <div class="stamped-review-vote"><div class="stamped-rating-holder">Was this helpful? <a class="stamped-thumbs-up" data-rating="1" data-review-id="136850899" tabindex="0" aria-label="Rate review as helpful" role="button"><i class="stamped-fa stamped-fa-thumbs-up"> 0</i></a><span> </span><a class="stamped-thumbs-down" data-rating="-1" data-review-id="136850899" tabindex="0" aria-label="Rate review as not helpful" role="button"><i class="stamped-fa stamped-fa-thumbs-down"> 0</i></a></div> </div> </div> </div> </div> </div><div class="stamped-review" id="stamped-review-125037740" data-product-id="7535020376279" data-rating="5" data-verified="buyer"> <div class="stamped-review-header"> <div class="stamped-review-avatar" style="padding:0;" data-avatar="false"> <div class="stamped-review-avatar-content"> H </div> </div> <div class="created">18 Jan 2024</div> <strong class="author">Handy</strong> <span class="stamped-verified-badge" data-type="buyer" data-verified-label="Verified Buyer"></span> <div class="review-location"><span class="stamped-location-flag"><img class="stamped-lazyload stamped-lazyload-loaded" src="https://cdn.stamped.io/cdn/flags/id.svg" data-src="https://cdn.stamped.io/cdn/flags/id.svg" width="15" height="13" alt="Indonesia" onerror="this.style.display="none";" data-was-processed="true" /></span> <span data-location="Indonesia">Indonesia</span></div> <div></div> </div> <div class="stamped-review-content"> <div class="stamped-review-recommend" data-is-recommend="true">I recommend this product</div> <div class="stamped-review-body"> <span class="stamped-starratings stamped-review-header-starratings" role="list" data-rating="5" aria-label="5-Star Rating Review"> <i class="stamped-fa stamped-fa-star "></i><i class="stamped-fa stamped-fa-star "></i><i class="stamped-fa stamped-fa-star "></i><i class="stamped-fa stamped-fa-star "></i><i class="stamped-fa stamped-fa-star "></i> </span> <h3 class="stamped-review-header-title">The Best...</h3> <p class="stamped-review-content-body">The Best dari awal sampai pengiriman. I’m satisfied. Perfect condition. (product : The Novo Enchanted Dome - Passionate Red)</p> <div class="stamped-review-options"></div> <div class="stamped-review-image"> </div> <div class="stamped-review-product" style="display:none;"><a href="https://stamped.io/go/d3xXaWRnZXRNYWlufDIzNDYyfHJ8MTI1MDM3NzQw0" rel="nofollow" target="_top">The Novo Enchanted Dome - Passionate Red</a></div> <div class="stamped-review-variant" style="display:none;"></div> <div class="stamped-review-footer"> <div class="stamped-review-share"></div> <div class="stamped-review-vote"><div class="stamped-rating-holder">Was this helpful? <a class="stamped-thumbs-up" data-rating="1" data-review-id="125037740" tabindex="0" aria-label="Rate review as helpful" role="button"><i class="stamped-fa stamped-fa-thumbs-up"> 0</i></a><span> </span><a class="stamped-thumbs-down" data-rating="-1" data-review-id="125037740" tabindex="0" aria-label="Rate review as not helpful" role="button"><i class="stamped-fa stamped-fa-thumbs-down"> 0</i></a></div> </div> </div> </div> </div> </div></div><div id="stamped-questions-tab" class="stamped-questions" role="tabpanel" aria-labelledby="tab-questions" tabindex="-1" style="display: none;"></div><style>.stamped-summary-recommend-percent { background: #212121 !important; } .summary-rating-bar>div { background: #212121 !important; color: #fff !important; } .stamped-review-avatar { background: #212121 !important; color: white !important; } ul.stamped-tabs li.active { border-color: #212121 !important ;color: #212121 !important; } .stamped-summary-actions-newquestion:before, .stamped-summary-actions-newreview:before, .stamped-summary-actions-mobile-filter i:before, .stamped-summary-actions-clear:before { color: #212121; } .fa-star, .fa-star-o, .fa-star-half-o, .stamped-fa-star, .stamped-fa-star-o, .stamped-fa-star-half-o { color: #212121 !important; } .stamped-container { color: #212121 !important; } div[data-load-type="continue"] ul.stamped-pagination li.next a, div[data-widget-load-type="continue"] ul.stamped-pagination li.next a { width: 100%; } @media only screen and (max-width: 480px), only screen and (max-device-width: 480px) { [data-widget-type="masonry"] .stamped-review-body { padding-left: 0 !important; }} div[data-load-type=continue] ul.stamped-pagination li.next a:before, div[data-widget-load-type=continue] ul.stamped-pagination li.next a:before { content: 'Load More Reviews' !important; } [data-widget-style=profile] .stamped-review-product:before { content: 'Reviewing: ' !important; } a.stamped-review-read-more { font-size: 0px; } a.stamped-review-read-more:before { content: 'Read more'; font-size: 13px !important; } .stamped-file-uploader-btn-label2:before { content: ' Add Photos' !important; } </style></div> </div></div> <!-- Stamped - End Main Widget --> <style> #product-reviews .stamped-summary-ratings,#product-reviews .stamped-summary-actions,.stamped-content {display: none;} </style> <script> $(".stamped-header").click(function(){ console.log("stamped-header"); $(this).toggleClass("open"); $(".stamped-summary-actions").slideToggle(); $(".stamped-content").slideToggle(); }); </script> </div> <div id="anchor-qna"></div> </div> </div> </div> </div> </div> </div> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/shopify-cartjs/1.1.0/cart.min.js"></script> <style> /* Image Editor Popup Styles */ .image-editor-popup { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: 9999; display: flex; align-items: center; justify-content: center; padding: 20px; box-sizing: border-box; } .image-editor-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.7); backdrop-filter: blur(2px); } .image-editor-modal { position: relative; background: white; border-radius: 12px; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); max-width: min(900px, calc(100vw - 40px)); max-height: min(700px, calc(100vh - 40px)); width: 100%; display: flex; flex-direction: column; overflow: auto; margin: auto; transform: translateZ(0); } .image-editor-header { display: flex; justify-content: space-between; align-items: center; padding: 20px 24px; border-bottom: 1px solid #e5e7eb; background: #f9fafb; } .image-editor-header h3 { margin: 0; font-size: 18px; font-weight: 600; color: #111827; } .close-editor { background: none; border: none; font-size: 24px; color: #6b7280; cursor: pointer; padding: 0; width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; border-radius: 6px; transition: all 0.2s; } .close-editor:hover { background: #f3f4f6; color: #374151; } .image-editor-content { display: flex; flex: 1; min-height: 500px; } .image-editor-canvas { flex: 1; padding: 20px; background: #f8fafc; display: flex; align-items: center; justify-content: center; min-height: 400px; } .image-editor-canvas img { max-width: 100%; max-height: 100%; display: block; } .image-editor-controls { width: 280px; padding: 20px; background: white; border-left: 1px solid #e5e7eb; overflow-y: auto; } .control-group { margin-bottom: 20px; padding-bottom: 16px; border-bottom: 1px solid #f3f4f6; } .control-group:last-child { border-bottom: none; margin-bottom: 0; } .control-group label { display: block; font-size: 14px; font-weight: 500; color: #374151; margin-bottom: 8px; } .control-group select, .control-group input[type="range"] { width: 100%; padding: 8px 12px; border: 1px solid #d1d5db; border-radius: 6px; font-size: 14px; background: white; } .control-group input[type="range"] { -webkit-appearance: none; appearance: none; height: 6px; background: #e5e7eb; border-radius: 3px; padding: 0; } .control-group input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 18px; height: 18px; background: #3b82f6; border-radius: 50%; cursor: pointer; } .control-group button { background: #f3f4f6; border: 1px solid #d1d5db; border-radius: 6px; padding: 8px 12px; font-size: 13px; color: #374151; cursor: pointer; margin-right: 8px; margin-bottom: 8px; transition: all 0.2s; } .control-group button:hover { background: #e5e7eb; border-color: #9ca3af; } .control-group button:active { transform: translateY(1px); } #imageSizeInfo { font-size: 12px; color: #6b7280; margin-top: 8px; display: flex; flex-direction: column; gap: 4px; } #imageSizeInfo span { display: block; padding: 4px 8px; background: #f9fafb; border-radius: 4px; border: 1px solid #e5e7eb; } #originalSize { color: #374151; } #newSize { color: #059669; font-weight: 500; } .image-editor-footer { display: flex; justify-content: flex-end; gap: 12px; padding: 20px 24px; border-top: 1px solid #e5e7eb; background: #f9fafb; } .btn-cancel { background: white; border: 1px solid #d1d5db; border-radius: 6px; padding: 10px 20px; font-size: 14px; color: #374151; cursor: pointer; transition: all 0.2s; } .btn-cancel:hover { background: #f9fafb; border-color: #9ca3af; } .btn-save { background: #3b82f6; border: 1px solid #3b82f6; border-radius: 6px; padding: 10px 20px; font-size: 14px; color: white; cursor: pointer; transition: all 0.2s; } .btn-save:hover { background: #2563eb; border-color: #2563eb; } /* Responsive Design */ @media (max-width: 768px) { .image-editor-popup { padding: 10px; } .image-editor-modal { max-width: calc(100vw - 20px); max-height: calc(100vh - 20px); width: 100%; height: auto; min-height: 80vh; } .image-editor-content { flex-direction: column; } .image-editor-controls { width: 100%; border-left: none; border-top: 1px solid #e5e7eb; max-height: 200px; } .image-editor-canvas { min-height: 300px; } } /* Loading state for preview area */ .steps-card-preview.loading-upload { position: relative; pointer-events: none; opacity: 0.7; } .steps-card-preview.loading-upload::after { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: rgba(255, 255, 255, 0.8); border-radius: inherit; z-index: 1; } .ajax-loader { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 2; width: 40px; height: 40px; border: 4px solid #f3f3f3; border-top: 4px solid #3498db; border-radius: 50%; animation: spin 1s linear infinite; display: none; } /* Animation for popup */ .image-editor-popup { opacity: 0; visibility: hidden; transition: opacity 0.3s ease, visibility 0.3s ease; display: flex !important; } .image-editor-popup.show { opacity: 1; visibility: visible; } .image-editor-modal { transform: translateY(-20px) scale(0.9); transition: transform 0.3s ease; } .image-editor-popup.show .image-editor-modal { transform: translateY(0) scale(1); } @keyframes spin { 0% { transform: translate(-50%, -50%) rotate(0deg); } 100% { transform: translate(-50%, -50%) rotate(360deg); } } /* Skeleton Loader for Date Buttons */ .skeleton-date-loader { display: flex; gap: 8px; flex-wrap: wrap; } .skeleton-date-button { width: calc(14.285% - 7px); min-width: 40px; height: 40px; background: #f5f5f5; border: 1px solid #e0e0e0; border-radius: 50%; position: relative; overflow: hidden; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; } .skeleton-date-button::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.6), transparent); animation: skeleton-shimmer 1.5s ease-in-out infinite; } .skeleton-date-text { width: 30px; height: 10px; background: #e0e0e0; border-radius: 4px; } .skeleton-date-number { width: 20px; height: 14px; background: #d0d0d0; border-radius: 4px; } @keyframes skeleton-shimmer { 0% { left: -100%; } 100% { left: 100%; } } @media (max-width: 768px) { .skeleton-date-button { width: calc(16.666% - 7px); min-width: 40px; height: 40px; } } @media (max-width: 480px) { .skeleton-date-button { width: calc(20% - 7px); min-width: 40px; height: 40px; } .skeleton-date-text { width: 25px; height: 8px; } .skeleton-date-number { width: 18px; height: 12px; } } /* OCR Address Popup Styles */ .ocr-address-popup { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: 9998; display: none; align-items: center; justify-content: center; padding: 20px; box-sizing: border-box; } .ocr-address-popup.show { display: flex; } .ocr-popup-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.6); backdrop-filter: blur(2px); cursor: pointer; } .ocr-popup-content { position: relative; background: white; border-radius: 12px; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); max-width: 600px; max-height: 80vh; width: 100%; overflow: hidden; display: flex; flex-direction: column; } .ocr-popup-header { display: flex; justify-content: space-between; align-items: center; padding: 20px 24px; border-bottom: 1px solid #e5e7eb; background: #f9fafb; } .ocr-popup-header h3 { margin: 0; font-size: 18px; font-weight: 600; color: #1f2937; } .close-ocr-popup { background: none; border: none; font-size: 28px; color: #6b7280; cursor: pointer; padding: 0; width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; transition: color 0.2s; } .close-ocr-popup:hover { color: #1f2937; } .ocr-popup-body { overflow-y: auto; padding: 20px; flex: 1; } .ocr-address-options { display: flex; flex-direction: column; gap: 12px; } .ocr-address-option { padding: 16px; border: 2px solid #e5e7eb; border-radius: 8px; cursor: pointer; transition: all 0.2s; background: white; } .ocr-address-option:hover { border-color: #3b82f6; background: #f0f4ff; box-shadow: 0 2px 8px rgba(59, 130, 246, 0.1); } .ocr-address-option.selected { border-color: #3b82f6; background: #eff6ff; } .address-content { display: flex; flex-direction: column; gap: 4px; } .address-text { margin: 0; font-size: 15px; font-weight: 500; color: #1f2937; line-height: 1.4; } .address-details { margin: 0; font-size: 13px; color: #6b7280; } body.ocr-popup-open { overflow: hidden; } @media (max-width: 768px) { .ocr-popup-content { max-width: calc(100vw - 40px); max-height: 85vh; } .ocr-popup-header h3 { font-size: 16px; } .address-text { font-size: 14px; } } </style> <script> 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}); const productType = $("[data-product-type]").data("product-type") const productDate = Date.parse(new Date()) const shop = 'outerbloom1.myshopify.com' const host = 'https://app.asmaraku.com' // const host = 'https://d8fe-103-3-220-56.ngrok-free.app' const gsheet = "https://script.google.com/macros/s/AKfycbyqa6mPD6lVjU6hiHr12J8URZ2aJBGyxBsGQ0QtEIDari-rBk_9vSOITjSSmUXL1NwxEg/exec" const qrID = "100326" + randomString(4, 'aAbCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ') $("#properties-time").val(new Date().getTime()) const isIOS = /iPhone|iPad|iPod/i.test(navigator.userAgent); if(!isIOS) { $("#full-date").attr("type", "button") } // Shipping Analytics Tracker class ShippingAnalytics { constructor() { this.endpoint = host + '/api/track-shipping'; this.userId = ''; this.userIp = document.body.getAttribute('data-ip') || 'unknown'; this.shop = ''; } async track(action, metadata = {}) { try { const payload = { endpoint: action, metadata: { userIp: this.userIp, shop: this.shop, timestamp: new Date().toISOString(), userAgent: navigator.userAgent, url: window.location.href, ...metadata } }; const response = await fetch(this.endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); if (!response.ok) { console.warn('Analytics tracking failed:', response.status); } } catch (error) { console.error('Analytics error:', error); // Fail silently, tidak block user flow } } } // Initialize const analytics = new ShippingAnalytics(); let dateTime = new Date(); let today = dateTime.getDate(); let day = dateTime.getDay(); let hour = dateTime.getHours(); let min = dateTime.getMinutes(); let timeOfDay = hour + (min / 100); async function getFetch(url) { const response = await fetch(url); let status = false let result if(response.ok) { status = true result = await response.json(); } return { status, data: result } } function setCookie(cname, cvalue, exMins) { var d = new Date(); d.setTime(d.getTime() + (exMins*60*1000)); var expires = "expires="+d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } function getCookie(cname) { let name = cname + "="; let decodedCookie = decodeURIComponent(document.cookie); let ca = decodedCookie.split(';'); for(let i = 0; i <ca.length; i++) { let c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } // Initialize rupiah formatter before it's used in renderAddress let rupiah = new Intl.NumberFormat('id-ID', { style: 'currency', currency: 'IDR', maximumFractionDigits: 0, minimumFractionDigits: 0 }); // Helper functions for localStorage (1 day storage) function getStorageKey(type, city = '') { const productId = '7535020376279'; if (type === 'date') { // For date, only use product ID (no city) return `delivery_${type}_${productId}`; } // For other types (zip), use city return `delivery_${type}_${productId}_${city}`; } function saveToStorage(key, data) { try { const item = { data: data, savedAt: new Date().getTime() }; localStorage.setItem(key, JSON.stringify(item)); } catch (e) { console.error('Error saving to localStorage:', e); } } function getFromStorage(key) { try { const itemStr = localStorage.getItem(key); if (!itemStr) { return null; } const item = JSON.parse(itemStr); const now = new Date().getTime(); const oneHour = 60 * 60 * 1000; // 1 hour in milliseconds // Check if data is older than 1 hour if (now - item.savedAt > oneHour) { localStorage.removeItem(key); return null; } return item.data; } catch (e) { console.error('Error reading from localStorage:', e); return null; } } async function renderDate(city) { const storageKey = getStorageKey('date'); const storedData = getFromStorage(storageKey); let data; if (storedData) { data = storedData; } else { let dataDate = await getFetch(`${host}/api/shipping/date?domain=${shop}&productId=7535020376279&source=web`); data = dataDate?.data; // Save to localStorage (only once per product) if (data && data.date && data.time) { saveToStorage(storageKey, data); } } // Use the helper function to render if (data && data.date && data.time) { renderDeliveryDateFromData(data); if(productType !== '') { console.log("clarity event " + productType + ' calendaring') window.clarity("event", `${productType} calendaringSchedule`) } } else { console.error('Invalid delivery date data'); showDeliveryPlaceholder(); } } // Function to get province from city (called on-demand, not on initial render) async function getProvince(city) { if (!city || city === '') { return; } // Check localStorage first const storageKey = getStorageKey('province', city); const storedProvince = getFromStorage(storageKey); if (storedProvince) { console.log('Using stored province data for:', city); $("#province").val(storedProvince); return storedProvince; } // Fetch from API if not in localStorage console.log('Fetching province data from API for:', city); let { data: { province } } = await getFetch(`${host}/api/shipping/address/province?city=${city}&source=web`); console.log(province, 'province') $("#province").val(province) // Save to localStorage if (province) { saveToStorage(storageKey, province); console.log('Saved province to localStorage for:', city); } return province; } async function renderAddress() { let current if(getCookie("location_delivery")){ current = getCookie("location_delivery").charAt(0).toUpperCase() + getCookie("location_delivery").slice(1) } const deliveryCity = document.getElementById("cities"); // Check localStorage first const cityDataKey = `delivery_city_data_7535020376279`; const storedCityData = getFromStorage(cityDataKey); if (storedCityData && storedCityData.cities && storedCityData.cities.length > 0) { const allCities = storedCityData.cities; const data = storedCityData.fullData; const htmlAddress = []; for(let i = 0; i < data?.length; i++) { if(data[i]){ const price = rupiah.format(data[i]?.rate) let promo = '(Promo Free Delivery)' if(data[i]?.name === 'Jakarta - PickUp ASHTA'){ promo = '(at SCBD, Ashta)' } else if(data[i]?.name === 'Jakarta - PickUp ITC'){ promo = '(at Kuningan, ITC Kuningan)' } else if(data[i]?.name === 'BSD - PickUp'){ promo = '(at Goldfinch Gading Serpong)' } else if(data[i]?.name === 'Kota Lainnya'){ promo = '' } 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>`) } } if(deliveryCity) { deliveryCity.insertAdjacentHTML("beforeend", htmlAddress.join('')) } return storedCityData; } // If no stored data, show skeleton and fetch from API if(deliveryCity && deliveryCity.options.length === 1) { // Only default option const skeletonOptions = ` <option disabled>Loading cities...</option> <option disabled>●●●●●●●●●</option> <option disabled>●●●●●●●●●</option> <option disabled>●●●●●●●●●</option> `; deliveryCity.insertAdjacentHTML("beforeend", skeletonOptions); } let address = await getFetch(`${host}/api/shipping/address?domain=${shop}&productId=7535020376279&source=web`); console.log(address) const data = address?.data?.city const htmlAddress = [] const grouping = [] const allCities = [] // Store all city names for(let i = 0;i < data?.length;i++) { if(data[i]){ if(data[i]?.group) { grouping.push(data[i].group) } const price = rupiah.format(data[i]?.rate) let promo = '(Promo Free Delivery)' if(data[i]?.name === 'Jakarta - PickUp ASHTA'){ promo = '(at SCBD, Ashta)' } else if(data[i]?.name === 'Jakarta - PickUp ITC'){ promo = '(at Kuningan, ITC Kuningan)' } else if(data[i]?.name === 'BSD - PickUp'){ promo = '(at Goldfinch Gading Serpong)' } else if(data[i]?.name === 'Kota Lainnya'){ promo = '' } // Add city name to allCities array allCities.push(data[i]?.name); 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>`) } } if(deliveryCity) { // Remove skeleton options before adding real options const skeletonOpts = deliveryCity.querySelectorAll('option[disabled]'); skeletonOpts.forEach(opt => { if (opt.textContent.includes('Loading') || opt.textContent.includes('●')) { opt.remove(); } }); deliveryCity.insertAdjacentHTML("beforeend", htmlAddress.join('')) } // Save all cities to localStorage for 1 day const saveCityDataKey = `delivery_city_data_7535020376279`; const saveCityData = { cities: allCities, fullData: data // Save full data for later use }; saveToStorage(saveCityDataKey, saveCityData); console.log('Saved city data:', saveCityData); return saveCityData; } // Function to get user city from IP address async function getUserCityFromIP(availableCities) { try { // Try to get location from IP const ipResponse = await fetch('https://ipapi.co/json/'); const ipData = await ipResponse.json(); const userCity = ipData.city; console.log('User city from IP:', userCity); // Check if user city exists in available cities const matchedCity = availableCities.find(city => city.toLowerCase().includes(userCity.toLowerCase()) || userCity.toLowerCase().includes(city.toLowerCase()) ); if (matchedCity) { console.log('Matched city found:', matchedCity); return matchedCity; } console.log('User city not in available cities'); return ""; } catch (error) { console.error('Error getting user location:', error); return ""; } } // Function to render zip codes (called on-demand, not on initial render) async function renderZip(v, v2, v3) { const deliveryZip = document.getElementById("zip"); if(v === '') { return } // Check localStorage first const storageKey = getStorageKey('zip', v); const storedZip = getFromStorage(storageKey); let zip; if (storedZip) { console.log('Using stored zip code data for:', v); zip = storedZip; } else { console.log('Fetching zip code data from API for:', v); let dataZip = await getFetch(`${host}/api/shipping/address/zip?city=${v}&city2=${v2}&city3=${v3}&source=web`); zip = dataZip?.data?.zip; console.log(zip) // Save to localStorage if (zip && zip.length > 0) { saveToStorage(storageKey, zip); } } let htmlZip = [] for(let i = 0; i < zip?.length;i++) { htmlZip.push(`<option value="${zip[i]?.postalCode} - ${zip[i]?.subdistrict}">${zip[i]?.postalCode} - ${zip[i]?.subdistrict} - ${zip[i]?.city}</option>`) } deliveryZip.insertAdjacentHTML("beforeend", htmlZip.join('')) // Initialize Select2 with search for zip code if(!isIOS) { setTimeout(() => { initSelect2('#zip', { placeholder: 'Postal Code' }); }, 100); } } // Add skeleton loader for delivery date function showDateSkeleton() { const deliveryDate = document.getElementById("deliveryDate"); if(deliveryDate && deliveryDate.children.length === 0) { const skeletonHTML = ` <div class="skeleton-date-loader"> <div class="skeleton-date-button"> </div> <div class="skeleton-date-button"> </div> <div class="skeleton-date-button"> </div> <div class="skeleton-date-button"> </div> <div class="skeleton-date-button"> </div> <div class="skeleton-date-button"> </div> <div class="skeleton-date-button"> </div> </div> `; deliveryDate.insertAdjacentHTML("afterbegin", skeletonHTML); } } // Show static disabled buttons for delivery date and time function showDeliveryPlaceholder() { const deliveryDate = document.getElementById("deliveryDate"); const deliveryTime = document.getElementById("deliveryTime"); if(deliveryDate) { const staticDates = ` <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> Mon<span>--</span> </button> <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> Tue<span>--</span> </button> <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> Wed<span>--</span> </button> <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> Thu<span>--</span> </button> <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> Fri<span>--</span> </button> <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled title="Please select delivery city first"> Sat<span>--</span> </button> `; deliveryDate.innerHTML = staticDates; } if(deliveryTime) { const staticTimes = ` <button class="time-single calendarbutton2 btn steps-btn" disabled title="Please select delivery city first"> Morning<br/>08:00-13:00 </button> <button class="time-single calendarbutton2 btn steps-btn" disabled title="Please select delivery city first"> Afternoon<br/>13:00-18:00 </button> <button class="time-single calendarbutton2 btn steps-btn" disabled title="Please select delivery city first"> Evening<br/>17:00-22:00 </button> `; deliveryTime.innerHTML = staticTimes; } } // Helper function to render delivery date and time from data object function renderDeliveryDateFromData(data) { const deliveryDate = document.getElementById("deliveryDate"); const deliveryTime = document.getElementById("deliveryTime"); // Check if at least one element exists — silently skip if neither is in the DOM if (!deliveryDate && !deliveryTime) { return false; } // Check if data is valid if (!data || !data.date || !data.time) { console.error('Cannot render delivery date: invalid or missing data'); return false; } const date = data.date; const time = data.time; const weekday = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]; const monthly = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; // Get today's date in Jakarta timezone (UTC+7) const todayJakarta = new Date(new Date().toLocaleString("en-US", {timeZone: "Asia/Jakarta"})); const today = todayJakarta.getDate(); const htmlDate = []; for(let i = 0; i < date.length; i++) { const full = date[i].date; // Convert UTC date to Jakarta timezone (UTC+7) const utcDate = new Date(date[i].date); const jakartaDateString = utcDate.toLocaleString("en-US", {timeZone: "Asia/Jakarta"}); const jakartaDate = new Date(jakartaDateString); const dt = jakartaDate.getDate(); const monthIndex = jakartaDate.getMonth(); const yr = jakartaDate.getFullYear(); const day = weekday[jakartaDate.getDay()]; const mt = monthly[monthIndex]; const isDate = Boolean(date[i].isEnabled); const cutoffpagi = date[i].cutoff?.pagi; const cutoffsiang = date[i].cutoff?.siang; const cutoffmalam = date[i].cutoff?.malam; console.log(cutoffmalam, 'cutoffmalam') const buttonHTML = ` <button data-id="7535020376279" 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'}> ${dt === today ? `Today<span>${dt < 10 ? '0' + dt : dt}</span>` : `${day}<span>${dt < 10 ? '0' + dt : dt}</span>`} </button> `; htmlDate.push(buttonHTML); } const htmlTime = []; for(let i = 0; i < time.length; i++) { const timeText = time[i].text; const timeTime = time[i].time; const timeEnabled = time[i].isEnabled; htmlTime.push(` <button class="time-single calendarbutton2 btn steps-btn" data-time="${timeText}" ${timeEnabled ? '' : 'disabled'}>${timeText}<br/>${timeTime}</button> `); } // Render delivery date if element exists if (deliveryDate) { deliveryDate.innerHTML = htmlDate.join(''); // Log all buttons with their disabled status const buttons = deliveryDate.querySelectorAll('button'); buttons.forEach((btn, idx) => { console.log(`Button ${idx}: date=${btn.dataset.date}, hasDisabled=${btn.hasAttribute('disabled')}, disabled=${btn.disabled}`); }); // Apply pickup date restrictions if pickup mode is active if (window.applyPickupDateRestrictions === true) { applyPickupDateRestrictions(deliveryDate); } } // Render delivery time if element exists if (deliveryTime) { deliveryTime.innerHTML = htmlTime.join(''); } return true; } // Function to apply pickup date restrictions function applyPickupDateRestrictions(deliveryDateElement) { if (!deliveryDateElement) return; // Get current time in Jakarta timezone const now = new Date(new Date().toLocaleString("en-US", {timeZone: "Asia/Jakarta"})); const currentHour = now.getHours(); const currentMinute = now.getMinutes(); const currentTime = currentHour + (currentMinute / 60); // e.g., 15.5 for 3:30 PM const currentDate = now.getDate(); const isAfter3PM = currentTime >= 15.0; // 3 PM = 15:00 // Check product tags const isPickupInhouse = true; const isPickupVendor = false; console.log('Applying pickup date restrictions:', { isPickupInhouse, isPickupVendor, currentDate, currentTime: currentTime.toFixed(2), isAfter3PM }); const dateButtons = deliveryDateElement.querySelectorAll('button.date-single'); dateButtons.forEach((button, index) => { const buttonDate = parseInt(button.dataset.date, 10); if (isPickupInhouse) { // For pickup-itcinhouse: // - Disable today (compare actual date, not index) // - If after 3 PM, also disable tomorrow (currentDate + 1) // Check if this button is today if (buttonDate === currentDate) { button.disabled = true; button.classList.add('stop'); button.title = 'Pickup not available for today'; console.log(`Disabled button ${index} (date ${buttonDate} = today) for pickup-itcinhouse`); } // Check if this button is tomorrow AND it's after 3 PM else if (buttonDate === currentDate + 1 && isAfter3PM) { button.disabled = true; button.classList.add('stop'); button.title = 'Pickup not available (after 3 PM cutoff)'; console.log(`Disabled button ${index} (date ${buttonDate} = tomorrow) for pickup-itcinhouse (after 3 PM)`); } } else if (isPickupVendor) { // For pickup-itcvendor: // - Disable dates before day 14 // - If today is day 13 and after 3 PM, also disable day 14 if (buttonDate < 14) { button.disabled = true; button.classList.add('stop'); button.title = 'Pickup not available before day 14'; console.log(`Disabled button ${index} (date ${buttonDate}) for pickup-itcvendor (before day 14)`); } else if (buttonDate === 14 && currentDate === 13 && isAfter3PM) { button.disabled = true; button.classList.add('stop'); button.title = 'Pickup not available (after 3 PM cutoff on day 13)'; console.log(`Disabled button ${index} (date ${buttonDate}) for pickup-itcvendor (day 13 after 3 PM)`); } } }); } // Make function globally accessible window.applyPickupDateRestrictionsFunction = applyPickupDateRestrictions; // Render address first, then fetch and display delivery dates immediately async function initializeDeliveryOptions() { try { // Check if delivery date elements exist on this page const deliveryDate = document.getElementById("deliveryDate"); const deliveryTime = document.getElementById("deliveryTime"); // Skip if BOTH elements are missing if (!deliveryDate && !deliveryTime) { console.log('Both delivery date and time elements not found, skipping delivery date initialization'); // Still render address for city selection await renderAddress(); return; } // Log which elements are available if (!deliveryDate) console.log('deliveryDate element not found, will only render delivery time'); if (!deliveryTime) console.log('deliveryTime element not found, will only render delivery date'); // Check if there's stored delivery date data for this product FIRST const dateStorageKey = getStorageKey('date'); const storedDateData = getFromStorage(dateStorageKey); if (storedDateData && storedDateData.date && storedDateData.time) { // If we have stored date data, render it immediately const rendered = renderDeliveryDateFromData(storedDateData); if (!rendered) { console.warn('Failed to render stored delivery date, will try fetching from API'); } } else { // No stored data, fetch from API immediately (without waiting for city selection) console.log('No stored delivery date found, fetching from API immediately...'); // Show skeleton loader while fetching showDateSkeleton(); // Fetch delivery date data from API try { const dataDate = await getFetch(`${host}/api/shipping/date?domain=${shop}&productId=7535020376279&source=web`); console.log('API Response:', dataDate); if (dataDate?.data?.date && dataDate?.data?.time) { // Save to localStorage for next time saveToStorage(dateStorageKey, dataDate.data); // Render the fetched data const rendered = renderDeliveryDateFromData(dataDate.data); if (!rendered) { console.error('Failed to render delivery date from API response'); showDeliveryPlaceholder(); } } else { console.error('Invalid delivery date data received from API'); showDeliveryPlaceholder(); } } catch (error) { console.error('Error fetching delivery date from API:', error); showDeliveryPlaceholder(); } } // Render address to load cities (after dates are already showing) await renderAddress(); // Province and zip code will be loaded when city is selected (not on initial render) } catch (error) { console.error('Error initializing delivery options:', error); // Auto refresh on error after 2 seconds console.log('Auto refreshing page due to error...'); setTimeout(() => { // location.reload(); }, 2000); } } // Initialize delivery options initializeDeliveryOptions(); // Helper function to safely initialize Select2 function initSelect2(selector, options = {}) { const $element = $(selector); if ($element.length === 0) { console.warn('Element not found:', selector); return; } // Check if Select2 is already loaded if (typeof $.fn.select2 !== 'undefined') { try { // Destroy existing select2 instance if any if ($element.hasClass('select2-hidden-accessible')) { $element.select2('destroy'); } // Initialize select2 with merged options const defaultOptions = { minimumResultsForSearch: 0, width: '100%' }; $element.select2(Object.assign({}, defaultOptions, options)); } catch(e) { console.error('Error initializing Select2 for', selector, ':', e); } } else { // Wait for Select2 to load console.log('Waiting for Select2 library to load...'); let attempts = 0; const maxAttempts = 50; // 5 seconds max const checkSelect2 = setInterval(function() { attempts++; if (typeof $.fn.select2 !== 'undefined') { clearInterval(checkSelect2); try { // Destroy existing select2 instance if any if ($element.hasClass('select2-hidden-accessible')) { $element.select2('destroy'); } // Initialize select2 with merged options const defaultOptions = { minimumResultsForSearch: 0, width: '100%' }; $element.select2(Object.assign({}, defaultOptions, options)); } catch(e) { console.error('Error initializing Select2 for', selector, ':', e); } } else if (attempts >= maxAttempts) { clearInterval(checkSelect2); console.error('Select2 library failed to load after 5 seconds'); } }, 100); // Check every 100ms } } async function insertCard(data) { const response = await fetch(`${host}/api/card/v2/new`, { method: "POST", headers: { 'Content-Type': 'application/json', }, body: data }) const result = await response.json() let id = result?.data?.id $(".greetingCard").attr("data-id", id) return result } async function updateCard(id, data){ console.log(id, data, 'updateCard') const response = await fetch(`${host}/api/card/v2/${id}`, { method: "PUT", headers: { 'Content-Type': 'application/json', }, body: data }) console.log(response, 'updateCard') return response } function bytesToSize(bytes) { var sizes = ['b', 'kb', 'mb', 'gb', 'tb', 'p']; for (var i = 0; i < sizes.length; i++) { if (bytes <= 1024) { return bytes + ' ' + sizes[i]; } else { bytes = parseFloat(bytes / 1024).toFixed(2) } } return bytes + ' P'; } async function uploadMedia(uri, type) { nameq = $("#properties-nama-penerima").val() dear = $("#properties-kartu-nama-penerima").val() card = $("[data-properties=ucapan]").val() sender = $("#properties-kartu-nama-pengirim").val() photo = $("#properties-photo").val() video = $("#properties-video").val() status = "Product" const name = qrID let formData = new FormData(); formData.append("file", uri); const response = await fetch(`${host}/api/upload?name=${name}&type=${type}&r=${randomString(3, '0123456789')}&shop=${shop}`, { method: "POST", body: formData }) const result = await response.json(); if(result) { const url = result.url?.replace('outerbloom/', '') if(type === 'image/jpeg') { $("#properties-photo").val(url) $(".preview-image").show() $(".remove-image").show() $(".placeholder-image").hide() // $(".icon-upload").hide() photo = url // Trigger card preview update for photo upload $(document).trigger('cardDataUpdated') } else { $("#properties-video").val(url) $("#label-input-video span").text("Change File") $(".case-qrcode-preview p").text("Scan here for a secret message") $(".remove-media").show() $("#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>`) $("[for=input-video]").hide() video = url // Trigger card preview update for video upload $(document).trigger('cardDataUpdated') } $(".case-video-preview").show() $(".steps-card-preview").removeClass("loading") // updateCard(nameq, dear, card, sender, photo, video, status) $(".nextBtn").attr("disabled", false) } } function randomString(length, chars) { var result = ''; for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))]; return result; } function getNoteCity(fulldate) { const h_1 = new Date(new Date().setDate(new Date().getDate() + 1)) const weekday = ["Min","Sen","Sel","Rab","Kam","Jum","Sab"]; const monthly = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; const d = new Date(h_1); const day = weekday[d.getDay()]; const dt = d.getDate(); const mt = monthly[d.getMonth()]; const yr = d.getFullYear(); const p = $("#cities").parent(".form-group") } function disabledSameDay() { let btnFirst = $("#deliveryDate").find("button:first-child") let getDay = new Date().getDay(); // Check if product has CNY 2026 tag - skip disabling if true if(getDay == 1 || getDay == 2 || getDay == 3 || getDay == 4 || getDay == 5){ if(hour >= 14.00){ btnFirst.attr("disabled", true) } } else if(getDay == 6){ if(hour >= 16.00){ btnFirst.attr("disabled", true) } } else if(getDay == 0){ if(hour >= 16.00){ btnFirst.attr("disabled", true) } } } function disabledays(date) { let ymd = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(); //if u have to disable a list of day let removeDays removeDays = ["2026-3-19", "2026-3-20", "2026-3-21"]; if ($.inArray(ymd, removeDays) >= 0) { return [false]; } else { let day = date.getDay(); if(day == 0 && date.getDate() == 13 && date.getMonth() == 1){ return [(day == 0), '']; } return [(day != 0), '']; } } /* Indonesian initialisation for the jQuery UI date picker plugin. */ /* Written by Deden Fathurahman (dedenf@gmail.com). */ ( function( factory ) { if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define( [ "../widgets/datepicker" ], factory ); } else { // Browser globals factory( jQuery.datepicker ); } }( function( datepicker ) { // Check if datepicker object exists before accessing regional property if (typeof datepicker === 'undefined' || !datepicker) { return; } datepicker.regional.id = { closeText: "Tutup", prevText: "<mundur", nextText: "maju>", currentText: "Today", monthNames: [ "January","February","March","April","May","Juny", "July","August","September","October","November","December" ], monthNamesShort: [ "Jan","Feb","Mar","Apr","May","Jun", "Jul","Agu","Sep","Oct","Nov","Dec" ], dayNames: [ "Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu" ], dayNamesShort: [ "Sun","Mon","Tue","Wed","Thu","Fri","Sat" ], dayNamesMin: [ "Mg","Sn","Sl","Rb","Km","jm","Sb" ], weekHeader: "Mg", dateFormat: "D, dd M", firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: "" }; datepicker.setDefaults( datepicker.regional.id ); return datepicker.regional.id; } ) ); function loadPopup() { $("#backgroundPopup").fadeIn("slow"); $(".purchasePopup:not(.purchasePopupSpotify)").fadeIn("slow"); const firstSection = $(".purchasePopup:not(.purchasePopupSpotify) .sectionPurchase").first() if(firstSection.hasClass("purchasePersonalize")) { if(productType !== '') { console.log("clarity event " + productType + ' personalize') window.clarity("event", `${productType} cardPersonalization`) // window.clarity("set", productType, `cardPersonalization - ${productDate}`) } } else if (firstSection.hasClass("sectionPurchaseBoard")) { console.log("clarity event " + productType + ' personalizeBoard') window.clarity("event", `${productType} personalizeBoard`) // window.clarity("set", productType, `personalizeBoard - ${productDate}`) } firstSection.removeClass("hide") // Load province and zip code when popup opens const selectedCity = $("#cities").val(); const v2 = $('#cities option:selected').attr('data-city'); const v3 = $('#cities option:selected').attr('data-province'); if (selectedCity && selectedCity !== '' && selectedCity !== 'Kota Lainnya') { // Get province getProvince(selectedCity); // Load zip codes console.log('Loading zip codes for:', selectedCity); $("#zip").html(`<option value="">Postal Code</option>`); renderZip(selectedCity, v2, v3); } // Auto-trigger addon loading when addon section becomes visible setTimeout(function() { const addonSection = $(".purchaseAddon") if(addonSection.length > 0 && !addonSection.hasClass("hide")) { if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) { $("[data-addon]").eq(0).trigger("click") } } }, 200) } function disablePopup() { $("#backgroundPopup").fadeOut("slow"); $(".purchasePopup").fadeOut("slow"); $("#popupCart").fadeOut("slow"); } function scrollTo(parent, div, dur) { $(parent).animate({ scrollTop: $(div).offset().top }, dur); } function loadPopupPersonalize() { // First validate variant metafields if (typeof validateVariantMetafields === 'function') { const isValid = validateVariantMetafields(true); if (!isValid) { // The validateVariantMetafields function already handles scrolling and focusing // alert('Please select all required variant options before proceeding.'); return; // Stop execution if validation fails } } const div = "#purchaseProduct" const p = "html, body, .product-meta" $("p.error").remove() loadItemOccasion($("[data-occassion]").eq(0), "greeting-card-all") const isCity = $("#cities[required]") const isDate = $("#propDeliveryDate[required]") const isTime = $("#propDeliveryTime[required]") const isTimeDisabled = $("#propDeliveryTime[disabled]") // loadPopup() // Check if all required fields are filled, or if time is disabled (for no-deliverytime products) if(isCity.val() !== '' && isDate.val() !== '' && (isTime.val() !== '' || isTimeDisabled.length > 0)) { loadPopup() } if(isCity.val() == '') { isCity.parent(".row").append("<p class='error'>Choose delivery city</p>") scrollTo(p, div, 500) } if(isDate.val() == '') { isDate.parents(".row").append("<p class='error'>Choose delivery date</p>") scrollTo(p, div, 500) } if(isTime.val() == '' && isTimeDisabled.length === 0) { isTime.parents(".row").append("<p class='error'>Choose delivery time</p>") scrollTo(p, div, 500) } } function quantityCounter() { $(document).on("click", ".item-card.selected .q_up", function () { var C = $(this).attr("data-id"), S = parseInt( $(this) .siblings(".quantity-cart-" + C) .val() ) + 1; $(this).attr("data-quantity", S), $(this) .siblings(".quantity-cart-" + C) .val(S); }), $(document).on("click", ".item-card.selected .q_down", function () { var C = $(this).attr("data-id"), S = parseInt( $(this) .siblings(".quantity-cart-" + C) .val() ); 0 < S && $(this).attr("data-quantity", S - 1), 0 < S && $(this) .siblings(".quantity-cart-" + C) .val(S - 1); }); } quantityCounter() const itemAddon = $(".item-card").length const nofree = $(".nofree").length const upsell = '' if(nofree === itemAddon) { // $("#itemAddons").html("<p>No Items available</p>") } $("#itemAddons .item-card").each(function(e){ $("#itemAddons").attr("data-length", e) }) // Function to fetch products from collection with fallback async function fetchAddonProducts(collectionHandle) { try { const response = await fetch(`https://outerbloom.com/collections/${collectionHandle}/products.json`); if (!response.ok) { throw new Error(`Collection ${collectionHandle} not found`); } const data = await response.json(); // Check if products exist and have items if (!data.products || data.products.length === 0) { throw new Error(`No products in collection ${collectionHandle}`); } return data.products; } catch (error) { console.warn(`Error fetching ${collectionHandle}:`, error.message); // Fallback to "upsell-all" collection if primary collection fails if (collectionHandle !== 'upsell-all') { console.log('Falling back to upsell-all collection...'); try { const fallbackResponse = await fetch('https://outerbloom.com/collections/upsell-all/products.json'); if (fallbackResponse.ok) { const fallbackData = await fallbackResponse.json(); return fallbackData.products || []; } } catch (fallbackError) { console.error('Fallback also failed:', fallbackError); } } return []; } } // Function to determine upsell type from product tags function getUpsellType() { const productTags = ["Brand_Outerbloom","Bunga","Bunga Batam","Bunga Jakarta","Bunga Luar Kota","Bunga Pria","card","care-instruction-ff","flomart","Forever Flower","formdate","icon-card","icon-gift","icon-sameday","Inhouse","just because","Luar Kota","Luxury","MonSunInhouse","Novo Dome","Pengiriman_Bali","Pengiriman_Balikpapan","Pengiriman_Bandung","Pengiriman_Banjarmasin","Pengiriman_Batam","Pengiriman_Bekasi","Pengiriman_Bogor","Pengiriman_Depok","Pengiriman_Jakarta","Pengiriman_Jambi","Pengiriman_Kota Lainnya","Pengiriman_Malang","Pengiriman_Manado","Pengiriman_Medan","Pengiriman_Padang","Pengiriman_Palembang","Pengiriman_Pontianak","Pengiriman_Riau","Pengiriman_Samarinda","Pengiriman_Semarang","Pengiriman_Surabaya","Pengiriman_Tangerang","Pengiriman_Yogyakarta","pickup-itcinhouse","POO Bunga","Review_NoGrouping","ship-foreverflower","sorry","Special Edition","Style_Luxury","takeoutselfpickup","Untuk_Anniversary","Untuk_Hari Ibu","Untuk_Hari Raya","Untuk_Pernikahan","Untuk_Ulang Tahun","Untuk_Valentine","uploadfotocard","upsell","upsell-inhouse","Val25","Warna_Red"]; const hasBuketUang = productTags.includes('Buket Uang'); if (hasBuketUang) { return 'upsell-giftcard'; } // Find upsell tag for (const tag of productTags) { if (tag.startsWith('upsell-')) { return tag; } else if (tag === 'upsell') { return 'upsell-all'; } } return 'upsell-giftcard'; // Default fallback } // Function to render addon products function renderAddonProducts(products, filterTag) { const html = []; for (const product of products) { const id = product.id; const variant = product.variants[0]; const variantId = variant.id; const img = product.images[0]?.src || ''; const imgBase = img.split('.jpg')[0]; const title = product.title; const price = variant.price; const tags = product.tags; const isAvailable = variant.available !== false; const productType = product.product_type?.toLowerCase()?.replace(/\s+/g, '_') || ''; // Filter products based on tag const shouldInclude = filterTag === 'all' || tags.includes(`upsell-item-${filterTag}`) || tags.includes('upsell-item-all') || tags.includes('upsell-item-inhouse'); if (!shouldInclude) continue; const priceDisplay = price < 1 ? 'FREE' : rupiah.format(price); const cardClass = `item-card${price < 1 ? ' free' : ' nofree'} type-${productType}`; const body = ` <div class="${cardClass}" data-variant="${variantId}" data-id="${id}" data-qty="${isAvailable ? '' : 0}" data-upsell="${filterTag}" data-tags="${tags}"> <div class="card-image"> <img src="${imgBase}_150x.jpg" alt="${title}" width="" height="" /> </div> <div class="card-meta"> <h5>${title}</h5> <p>${priceDisplay}</p> <input id="card-${variantId}" type="hidden" name="" value="${variantId}"> </div> <div class="card-qty"> <a data-quantity="1" type="submit" id="q_down-${variantId}" class="btn-qty-min q_down drawer-cart" data-id="${variantId}"> <svg xmlns="http://www.w3.org/2000/svg" width="12" height="2" viewBox="0 0 12 2" fill="none"> <path d="M0 1.90869V0.908691H12V1.90869H0Z" fill="black"/> </svg> </a> <input maxlength="3" min="0" class="btn-qty text-center quantity-cart-${variantId}" value="0" data-price="${price}" name="quantity"> <a data-quantity="1" type="submit" class="btn-qty-plus q_up text-green drawer-cart" data-id="${variantId}"> <svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" viewBox="0 0 12 13" fill="none"> <path d="M0 6.87023V5.94715H5.53846V0.408691H6.46154V5.94715H12V6.87023H6.46154V12.4087H5.53846V6.87023H0Z" fill="black"/> </svg> </a> </div> </div>`; html.push(body); } return html; } // Event handler for addon selection $("[data-addon]").click(async function() { const $button = $(this); const addonType = $button.data("addon") || getUpsellType(); // Update UI $("[data-addon]").removeClass("selected"); $button.addClass("selected"); // Show loading state $("#itemAddons .row").html('<p>Loading products...</p>'); try { // Fetch products const products = await fetchAddonProducts(addonType); if (products.length === 0) { $("#itemAddons .row").html('<p>No Item available</p>'); $("#itemAddons").attr("data-length", 0); return; } // Extract filter tag from addon type const filterTag = addonType.replace('upsell-', ''); // Render products const html = renderAddonProducts(products, filterTag); if (html.length === 0) { $("#itemAddons .row").html('<p>No Item available</p>'); } else { $("#itemAddons .row").html(html.join('')); } $("#itemAddons").attr("data-length", html.length); } catch (error) { console.error('Error loading addon products:', error); $("#itemAddons .row").html('<p>Error loading products. Please try again.</p>'); } }) async function isAddon(){ let ids = [] $("#itemAddons .item-card.selected").each(function(i, e){ const id = $(this).data("id") ids.push(id) }) console.log(ids) return ids } $("#itemAddons").delegate(".item-card > div:not(.card-qty)", "click", async function(){ const t = $(this).parent() const id = t.data("id") const btn = t.parents(".purchaseAddon").find(".next-purchase-button") t.toggleClass("selected"); //$(this).next("input").toggleAttr('name', 'id[]'); if (t.hasClass('selected')) { t.find("input").val(1) t.find("input").attr('name', 'id[]'); } else { t.find("input").val(0) t.find("input").removeAttr('name'); } $("#properties-addons").val(addons) const is = await isAddon() if(is.length === 0) { btn.text("continue without add-ons") return } if(is.includes(8835692069079)) { btn.text("personalize acrylic frame") } else { btn.text("Continue") } }) async function myAddon(data) { const c = $(".addonsPurchase .addons") let items = [] const spotifyAddons = $(".spotifyAddons").find("[data-index]") // if(spotifyAddons.length > 0) { // $(spotifyAddons).each(function(i, e){ // const spotifyLink = $(this).find(".spotifyLink").val() // const spotifySong = $(this).find(".spotifySong").val() // const spotifyArtist = $(this).find(".spotifyArtist").val() // const spotifyFotoAddon = $(this).find(".resultPhotoSpotify").val() // if(spotifyLink !== '') { // spotifyAddon = `<div class="addon-item" data-id="46067682607319" data-qty="1"> // <div class="addon-itm-img"> // <img src="https://cdn.shopify.com/s/files/1/1589/6833/files/Acrylic-Frame_8c71027d-43b7-4322-a98f-d34ab0456397_100x.jpg?v=1739160467" alt="" width="70"/> // </div> // <div class="addon-itm-title"> // <span>[US] Outerbloom Acrylic Frame 4R</span> // </div> // <div class="addon-itm-line-total"> // <span>Rp 99.000</span> // </div> // </div> // <div class="propsAddonSpotify row m-0"> // <div class="col-12 col-lg-2"></div> // <div class="col-12 col-lg-10"> // <p> // <span>spotify link</span> // <span class="spotifyLinkAddon">${spotifyLink}</span> // </p> // <p> // <span>uploaded photo</span> // <span class="spotifyFotoAddon">${spotifyFotoAddon}</span> // </p> // <p> // <span>song / playlist name</span> // <span class="spotifySongAddon">${spotifySong}</span> // </p> // <p> // <span>artist name</span> // <span class="spotifyArtistAddon">${spotifyArtist}</span> // </p> // </div> // </div>` // items.push(spotifyAddon) // } // }) // } for(let i = 0; i < data.length; i++) { if(data[i].title !== '[US] Outerbloom Acrylic Frame 4R' ) { const img = data[i].image const title = data[i].title const qty = data[i].qty const price = data[i].price const total = Number(qty) * Number(price) let addons = `<div class="addon-item" data-id="${data[i].id}" data-qty="${qty}"> <div class="addon-itm-img"> <img src="${img}" alt="" width="70"/> </div> <div class="addon-itm-title"> <span>${title}</span> </div> <div class="addon-itm-line-price"> <span>${rupiah.format(price)}</span> ${data[i].title == '[US] Outerbloom Acrylic Frame 4R' ? '' : `<span>x${qty}</span>`} </div> <div class="addon-itm-line-total"> <span>${rupiah.format(total)}</span> </div> </div>` items.push(addons) } } c.html(items) const parent = $(".purchaseAddon") const next = parent.next(".sectionPurchase") parent.addClass("hide") next.removeClass("hide") // if(items2.length === 0) return $("#popupCart").addClass("no-addon-cart") // $(".itemAddonCart").find("h4").text(`add-ons (${items2.length})`) } async function listAddon() { const data = $("#itemAddons").find(".selected") let ids = [] $(data).each(function(){ const id = $(this).data("variant") const image = $(this).find(".card-image img").attr("src") const title = $(this).find(".card-meta h5").text() const qty = $(this).find(".card-qty input").val() const price = $(this).find(".card-qty input").data("price") ids.push({ id: Number(id), image, title, qty, price }) }) myAddon(ids) } async function customSpotify(idx, length, type){ let isCard = false isCard = true let p = $(".purchasePopupSpotify") const preLink = $(".spotifyLinkFirst").val() $("[data-index]").hide() p.find(".headerPurchase h3").text(`personalize spotify photo print${length > 1 ? ` - ${idx}` : ''}`) p.find(".regulerAddons, .purchase-button").hide() p.find(".spotifyAddons").show() const data = await trackUrl(preLink) 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" viewBox="0 0 13 11" fill="none"> <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"/> </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" viewBox="0 0 13 11" fill="none"> <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"/> </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="//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=""></div></div></div></div></div>` // console.log(html) $(".spotifyAddons").append(html) $(`[data-index=${idx}]`).show() if (preLink !== '') { $(".btn-action .btn").attr("disabled", false) } else { $(".btn-action .btn").attr("disabled", true) } return html } $(".spotifyLinkFirst").keyup(async function(){ const v = $(this).val() if(v.includes('spotify:user:spotify')) { const correct = v.split('user:spotify:')[1] console.log(correct, 'BNER') $(this).val(correct) return } if(v.includes("spotify:") || v.includes("https://open.spotify.com/")){ const data = await trackUrl(v) if(!data || !data.status) { $(this).parent().addClass("error") // $(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>`) $("#personalizeBtnSpotify .btn").attr("disabled", true) return } $(this).parent().removeClass("error") // $(this).parent().remove("txt-error") $("#personalizeBtnSpotify .btn").attr("disabled", false) } else { $("#personalizeBtnSpotify .btn").attr("disabled", true) } }) $(".purchaseAddon").delegate(".next-addon", "click", async function(){ const parent = $(this).parents(".purchaseAddon") const next = parent.next(".sectionPurchase") // Check if there's no next section, proceed directly to addToCart if(next.length === 0 || !next.hasClass("sectionPurchase")) { await addToCart() return } if(next.hasClass("purchaseAddress")) { if (typeof window.applyPickupFormState === 'function') window.applyPickupFormState(); if(productType !== '') { console.log("clarity event " + productType + ' purchaseDelivery') window.clarity("event", `${productType} purchaseDelivery`) // window.clarity("set", productType, `purchaseDelivery - ${productDate}`) } // Check if Kota Pengiriman is "Kota Lainnya" const kotaPengiriman = $("#cities").val() if(kotaPengiriman === 'Kota Lainnya') { // Skip address form and go directly to addToCart await addToCart() return } } const data = $("#itemAddons").find(".selected") const length = $(".quantity-cart-46067682607319").val() const checked = data.length; if(checked > 0) { if(length > 0) { $(".purchaseAddon").addClass("purchaseAddonSpotify") customSpotify(1, length, 'addon') } else { listAddon() } } else { parent.addClass("hide") next.removeClass("hide") } }) $("#personalizeBtnSpotify .btn").click(async function(){ // First validate variant metafields if (typeof validateVariantMetafields === 'function') { const isValid = validateVariantMetafields(true); if (!isValid) { // The validateVariantMetafields function already handles scrolling and focusing alert('Please select all required variant options before proceeding.'); return; // Stop execution if validation fails } } const isCity = $("#cities[required]") const isDate = $("#propDeliveryDate[required]") if((isDate.length > 0 && isCity.length > 0) && (isCity.val() === '' || isDate.val() === '')) { alert('Please choose Delivery City & Delivery Date') return } const data = await customSpotify(1, 1, 'product') if(data) { $("#backgroundPopup").fadeIn("slow"); $(".purchasePopupSpotify").fadeIn("slow"); if(productType !== '') { console.log("clarity event " + productType + ' spotify') window.clarity("event", `${productType} spotify`) // window.clarity("set", productType, `purchaseDelivery - ${productDate}`) } } }) function formatBytes(bytes, decimals = 2) { if (!+bytes) return '0 Bytes' const k = 1024 const dm = decimals < 0 ? 0 : decimals const sizes = ['B', 'KB', 'MB'] const i = Math.floor(Math.log(bytes) / Math.log(k)) return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}` } async function trackUrl(link){ try { let trackId = link.split('/').pop().split('?')[0]; let type = '' if(link.includes("spotify:")) { const uri = link.split('spotify:')[1] trackId = uri.split(':')[1] type = uri.split(':')[0] + 's' } else { if(link.match('track')){ type = 'tracks' } else if(link.match('playlist')) { type = 'playlists' } else if(link.match('artist')) { type = 'artists' } else if(link.match('album')) { type = 'albums' } } console.log(`${host}/api/spotify/${type}/${trackId}`) const data = await getFetch(`${host}/api/spotify/${type}/${trackId}`) console.log(data, 'DATA') const song = data?.data?.name const artist = data?.data?.artist return { song, artist, type, trackId, status: data.status } } catch(err) { console.log(err) } } $(".spotifyAddons").delegate(".uploadPhotoSpotify", "change", async function(){ const parent = $(this).parents("[data-index]") const preview = parent.find(".previewImage") const file = $(this)[0].files[0]; if (file) { const reader = new FileReader(); reader.onload = async function(e) { parent.find(".uploadResult label").hide() parent.find(".uploadedResult").remove() parent.find(".uploadResult").append(`<div class="uploadedResult d-flex" style="justify-content: space-between"> <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> <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;"><svg fill="none" height="11" viewBox="0 0 10 11" width="10" xmlns="http://www.w3.org/2000/svg"> <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 /> </svg> </span></div></div>`) parent.find(".frameImageUploaded svg").hide() parent.find(".frameImage").addClass("uploaded") preview.attr("src", e.target.result); preview.show(); let formData = new FormData(); formData.append("file", file); const response = await fetch(`${host}/api/upload?name=${file.name}&type=image/jpeg&r=${Date.parse(new Date)}&shop=${shop}`, { method: "POST", body: formData }) const result = await response.json(); if(result){ parent.find(".resultPhotoSpotify").val(result.url) } } reader.readAsDataURL(file); } else { preview.hide(); } }); $(".spotifyAddons").delegate(".uploadResult", "click", function(){ $(this).next("input[type=file]").trigger("click") }) $(".spotifyAddons").delegate(".changeUpload", "click", function(){ $(this).parents("input[type=file]").trigger("click") }) $(".spotifyAddons").delegate(".removeUpload", "click", function(){ const parent = $(this).parents("[data-index]") parent.find(".uploadPhotoSpotify").val("") parent.find(".uploadResult label").show() parent.find(".uploadedResult").remove() parent.find(".frameImageUploaded svg").show() parent.find(".previewImage").hide() parent.find(".frameImage").removeClass("uploaded") }) $(".spotifyAddons").delegate("label.checkbox", "click", function(){ const parent = $(this).parents("[data-index]") parent.toggleClass("checked") }) $(".spotifyAddons").delegate(".spotifyLink", "change", async function(){ const parent = $(this).parents("[data-index]") const link = $(this).val() const data = await trackUrl(link) console.log(data) if(data.song) { parent.find(".spotifySong").val(data.song) parent.find(".spotifyData").find("h3").text(data.song) } if(data.artist) { parent.find(".spotifyArtist").val(data.artist) parent.find(".spotifyData").find("p").text(data.artist) } parent.find(".spotifyCode img").attr("src", `https://scannables.scdn.co/uri/plain/png/FFFFFF/black/640/spotify:${data.type.slice(0, -1)}:${data.trackId}`) // https://scannables.scdn.co/uri/plain/png/FFFFFF/black/640/spotify:track:1er51HCEBhIAtoEemKuC3M if (data.status === true) { parent.find(".btn-action .btn").attr("disabled", false) } else { parent.find(".btn-action .btn").attr("disabled", true) } }) $(".spotifyAddons").delegate(".spotifySong", "keyup", async function(){ const parent = $(this).parents("[data-index]") const v = $(this).val() parent.find(".spotifyData h3").text(v) }) $(".spotifyAddons").delegate(".spotifyArtist", "keyup", async function(){ const parent = $(this).parents("[data-index]") const v = $(this).val() parent.find(".spotifyData p").text(v) }) $(".spotifyAddons").delegate(".btn-action .btn:not(.no-addon)", "click", async function(){ const parent = $(this).parents("[data-index]") const length = parent.data("length") const index = parent.data("index") const indexNext = Number(index) + 1 customSpotify(indexNext, length, 'addon') }) $(".spotifyAddons").delegate(".btn-action .btn.finished", "click", async function(){ const parent = $(this).parents(".purchaseAddon") const next = parent.next(".sectionPurchase") parent.addClass("hide") next.removeClass("hide") next.find(".purchase-button").show() listAddon() }) $(".spotifyAddons").delegate(".back-spotify", "click", async function(){ const t = $(this).parents("[data-index]") const parent = $(this).parents(".sectionPurchase") const current = t.data("index") const prevCurrent = Number(current) - 1 if(current == 1) { parent.removeClass("purchaseAddonSpotify") parent.find(".purchase-button").show() parent.find(".headerPurchase h3").text("Make It More Special with Add-Ons!") $(".spotifyAddons").empty() $(".regulerAddons").show() return } t.hide() t.prev("[data-index]").show() t.remove() parent.find(".headerPurchase h3").text(`personalize spotify photo print - ${prevCurrent}`) }) $("#personalizeBtn .btn").click(async function() { loadPopupPersonalize() }); $(".sectionPurchaseSpotify").delegate(".btn[data-type=card]", "click", function(){ $(".sectionPurchaseSpotify").hide() loadPopupPersonalize() }) $(".close-purchase-popup").click(function() { disablePopup(); }); $("#backgroundPopup").click(function() { // disablePopup(); }); $("#popupCart .close-purchase-popup").click(function() { location.reload() }); $('#popupCart').on('hide.bs.modal', function (e) { location.reload() }) $(".next-card").click(function(){ const parent = $(this).parents(".sectionPurchase") const next = parent.next(".sectionPurchase") parent.addClass("hide") next.removeClass("hide") }) $(".back-purchase-button").click(function(){ const parent = $(this).parents(".sectionPurchase") const prev = parent.prev(".sectionPurchase") parent.addClass("hide") prev.removeClass("hide") }) $(document).keypress(function(e) { if (e.keyCode == 27 && popupStatus == 1) { disablePopup(); } }); const parentImg = $(".case-img-preview") const parentVid = $(".case-video-preview") // Image Editor Variables let currentImageFile = null; let cropper = null; let originalImageSize = { width: 0, height: 0 }; // Utility function to format file size function formatImageSize(width, height) { return `${width} × ${height}px`; } // Utility function to estimate file size in bytes function estimateFileSize(width, height, quality = 0.9) { // Base calculation: assume ~3 bytes per pixel for JPEG at 90% quality const baseSize = width * height * 3; // Apply quality factor (90% quality typically results in ~30-40% compression) const compressionFactor = quality === 0.9 ? 0.35 : (1 - quality) * 0.5 + 0.2; const estimatedSize = Math.round(baseSize * compressionFactor); // Format to human readable if (estimatedSize < 1024) { return `${estimatedSize} B`; } else if (estimatedSize < 1024 * 1024) { return `${(estimatedSize / 1024).toFixed(1)} KB`; } else { return `${(estimatedSize / (1024 * 1024)).toFixed(1)} MB`; } } // Update image size information function updateImageSizeInfo() { if (!cropper) return; const imageData = cropper.getImageData(); const cropBoxData = cropper.getCropBoxData(); const canvasData = cropper.getCanvasData(); // Calculate the scale factor between natural image size and displayed size const scaleFactorX = originalImageSize.width / imageData.naturalWidth; const scaleFactorY = originalImageSize.height / imageData.naturalHeight; // Calculate the actual output size based on crop box and scale factor const outputWidth = Math.round((cropBoxData.width / canvasData.width) * imageData.naturalWidth); const outputHeight = Math.round((cropBoxData.height / canvasData.height) * imageData.naturalHeight); // Update display document.getElementById('originalSize').textContent = `Original: ${formatImageSize(originalImageSize.width, originalImageSize.height)}`; document.getElementById('newSize').textContent = `New: ${formatImageSize(outputWidth, outputHeight)}`; } // Initialize Image Editor Popup function initImageEditor() { const editorHTML = ` <div id="imageEditorPopup" class="image-editor-popup"> <div class="image-editor-overlay"></div> <div class="image-editor-modal"> <div class="image-editor-header"> <h3>Edit Image</h3> <button class="close-editor" type="button">×</button> </div> <div class="image-editor-content"> <div class="image-editor-canvas"> <img id="imageToEdit" src="" alt="Image to edit"> </div> <div class="image-editor-controls"> <div class="control-group"> <label>Crop Aspect Ratio:</label> <select id="aspectRatio"> <option value="free">Free</option> <option value="1">1:1 (Square)</option> <option value="1.33">4:3</option> <option value="1.77">16:9</option> <option value="0.75">3:4 (Portrait)</option> </select> </div> <div class="control-group"> <label>Image Size:</label> <div id="imageSizeInfo"> <span id="originalSize">Original: -</span> <span id="newSize">New: -</span> </div> </div> <div class="control-group"> <button type="button" id="rotateLeft">↺ Rotate Left</button> <button type="button" id="rotateRight">↻ Rotate Right</button> <button type="button" id="flipH">⟷ Flip H</button> <button type="button" id="flipV">⟱ Flip V</button> </div> <div class="control-group"> <button type="button" id="resetImage">Reset</button> <button type="button" id="cropImage">Apply Crop</button> </div> </div> </div> <div class="image-editor-footer"> <button type="button" class="btn-cancel">Cancel</button> <button type="button" class="btn-save">Save Changes</button> </div> </div> </div>`; if (!document.getElementById('imageEditorPopup')) { document.body.insertAdjacentHTML('beforeend', editorHTML); initImageEditorEvents(); } } // Initialize Image Editor Events function initImageEditorEvents() { const popup = document.getElementById('imageEditorPopup'); const imageToEdit = document.getElementById('imageToEdit'); // Close editor events popup.querySelector('.close-editor').onclick = closeImageEditor; popup.querySelector('.btn-cancel').onclick = closeImageEditor; popup.querySelector('.image-editor-overlay').onclick = closeImageEditor; // Save edited image popup.querySelector('.btn-save').onclick = saveEditedImage; // Aspect ratio change document.getElementById('aspectRatio').onchange = function() { if (cropper) { const value = this.value; cropper.setAspectRatio(value === 'free' ? NaN : parseFloat(value)); updateImageSizeInfo(); } }; // Rotation and flip controls document.getElementById('rotateLeft').onclick = () => { if (cropper) { cropper.rotate(-90); updateImageSizeInfo(); } }; document.getElementById('rotateRight').onclick = () => { if (cropper) { cropper.rotate(90); updateImageSizeInfo(); } }; document.getElementById('flipH').onclick = () => { if (cropper) { cropper.scaleX(-cropper.getImageData().scaleX); updateImageSizeInfo(); } }; document.getElementById('flipV').onclick = () => { if (cropper) { cropper.scaleY(-cropper.getImageData().scaleY); updateImageSizeInfo(); } }; // Reset image document.getElementById('resetImage').onclick = function() { if (cropper) { cropper.reset(); updateImageSizeInfo(); } }; // Apply crop document.getElementById('cropImage').onclick = function() { if (cropper) { const croppedCanvas = cropper.getCroppedCanvas(); cropper.replace(croppedCanvas.toDataURL()); updateImageSizeInfo(); } }; } // Open Image Editor function openImageEditor(file) { currentImageFile = file; const popup = document.getElementById('imageEditorPopup'); const imageToEdit = document.getElementById('imageToEdit'); const reader = new FileReader(); reader.onload = function(e) { imageToEdit.src = e.target.result; // Add show class with slight delay for smooth animation setTimeout(() => { popup.classList.add('show'); }, 10); // Initialize Cropper.js if (cropper) { cropper.destroy(); } // Load Cropper.js if not already loaded if (typeof Cropper === 'undefined') { loadCropperJS().then(() => { initCropper(); }); } else { initCropper(); } }; reader.readAsDataURL(file); } // Initialize Cropper function initCropper() { const imageToEdit = document.getElementById('imageToEdit'); cropper = new Cropper(imageToEdit, { aspectRatio: NaN, viewMode: 1, dragMode: 'move', autoCropArea: 1, responsive: true, background: false, guides: true, center: true, highlight: false, cropBoxMovable: true, cropBoxResizable: true, toggleDragModeOnDblclick: false, ready: function() { // Store original image size when cropper is ready const imageData = this.cropper.getImageData(); originalImageSize.width = imageData.naturalWidth; originalImageSize.height = imageData.naturalHeight; // Update size info when cropper is ready updateImageSizeInfo(); }, crop: function() { // Update size info on crop change updateImageSizeInfo(); } }); } // Load Cropper.js library function loadCropperJS() { return new Promise((resolve, reject) => { if (typeof Cropper !== 'undefined') { resolve(); return; } // Load CSS const cssLink = document.createElement('link'); cssLink.rel = 'stylesheet'; cssLink.href = 'https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.css'; document.head.appendChild(cssLink); // Load JS const script = document.createElement('script'); script.src = 'https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.js'; script.onload = resolve; script.onerror = reject; document.head.appendChild(script); }); } // Close Image Editor function closeImageEditor() { const popup = document.getElementById('imageEditorPopup'); // Remove show class for animation popup.classList.remove('show'); if (cropper) { cropper.destroy(); cropper = null; } // Reset variables currentImageFile = null; originalImageSize = { width: 0, height: 0 }; // Reset size display document.getElementById('originalSize').textContent = 'Original: -'; document.getElementById('newSize').textContent = 'New: -'; } // Save Edited Image function saveEditedImage() { if (!cropper) return; // Get cropped canvas without any scaling - keep original dimensions const canvas = cropper.getCroppedCanvas({ imageSmoothingEnabled: true, imageSmoothingQuality: 'high', }); canvas.toBlob(function(blob) { // Create new file from edited image const editedFile = new File([blob], currentImageFile.name, { type: 'image/jpeg', lastModified: Date.now() }); // Close editor closeImageEditor(); // Process the edited image processEditedImage(editedFile); }, 'image/jpeg', 0.9); } // Process Edited Image function processEditedImage(file) { const reader = new FileReader(); reader.onload = function(e) { // Show loader on preview area $('.steps-card-preview').addClass('loading-upload'); $('.ajax-loader').show(); $('.placeholder-image').hide(); $('.icon-upload').hide(); $('.preview-image').show(); $('.remove-image').show(); $('.preview-image').attr('src', e.target.result); // Start upload process with edited image uploadMedia(file, 'image/jpeg').then(() => { $('.ajax-loader').hide(); $('.steps-card-preview').removeClass('loading-upload loading'); $(".nextBtn").attr("disabled", false); }).catch((error) => { $('.ajax-loader').hide(); $('.steps-card-preview').removeClass('loading-upload loading'); console.error('Upload failed:', error); }); }; reader.readAsDataURL(file); } function readURL(input) { if (input.files && input.files[0]) { const file = input.files[0]; // Check if it's an image file if (file.type.startsWith('image/')) { // Validate image file size if (file.size > 5242880) { alert('File size exceeds maximum limit 5 MB'); return; } // Initialize image editor if not already done initImageEditor(); // Open image editor for editing openImageEditor(file); } else if (file.type.match('video/')) { // Handle video upload normally if (file.size > 15728640) { alert('File size exceeds maximum limit 15 MB'); return; } let reader = new FileReader(); reader.onload = function (e) { $(".nextBtn").attr("disabled", true); $(".steps-card-preview").addClass("loading"); uploadMedia(file, 'video/mp4').then(() => { $('.steps-card-preview').removeClass('loading'); $(".nextBtn").attr("disabled", false); }).catch((error) => { $('.steps-card-preview').removeClass('loading'); console.error('Upload failed:', error); }); }; reader.readAsDataURL(file); } else { alert('Please select a valid image or video file.'); } } } async function readURLPapan(input) { if (input.files && input.files[0]) { let reader = new FileReader(); reader.onload = function (e) { $('.btn-upload-papan').siblings('label').hide(); $('.btn-upload-papan img').attr('src', e.target.result); $('.btn-upload-papan img').show(); $('.svgLogoPapan').hide(); // Show loader during upload $('.btn-upload-papan').addClass('loading-upload'); $('.ajax-loader').show(); } const type = 'image/jpeg' const name = `logo-7535020376279-${Date.parse(new Date())}` try { let formData = new FormData(); formData.append("file", input.files[0]); const response = await fetch(`${host}/api/upload?name=${name}&type=${type}&r=${randomString(3, '0123456789')}&shop=${shop}`, { method: "POST", body: formData }) const result = await response.json(); if(result) { const url = result.url $("[data-properties=papan-logo]").val(url) } // Hide loader after upload completes $('.btn-upload-papan').removeClass('loading-upload'); $('.ajax-loader').hide(); } catch (error) { // Hide loader on error $('.btn-upload-papan').removeClass('loading-upload'); $('.ajax-loader').hide(); console.error('Upload failed:', error); } reader.readAsDataURL(input.files[0]); } } async function readURLAddress(input) { console.log(input, 'readURLAddress') if (input.files && input.files[0]) { let reader = new FileReader(); reader.onload = function (e) { $('.photo-address').attr('src', e.target.result); $('.photo-address').show(); // Show loader during upload $('.photo-address').parent().addClass('loading-upload'); $('.ajax-loader').show(); } const type = 'image/jpeg' const name = input.files[0].name?.split('.')[0] try { let formData = new FormData(); formData.append("file", input.files[0]); const response = await fetch(`${host}/api/upload?name=${name}&type=${type}&r=${randomString(3, '0123456789')}&shop=${shop}`, { method: "POST", body: formData }) const result = await response.json(); // Hide loader after upload completes $('.photo-address').parent().removeClass('loading-upload'); $('.ajax-loader').hide(); reader.readAsDataURL(input.files[0]); return result } catch (error) { // Hide loader on error $('.photo-address').parent().removeClass('loading-upload'); $('.ajax-loader').hide(); console.error('Upload failed:', error); reader.readAsDataURL(input.files[0]); return null; } } } // Hit OCR endpoint to extract address information async function hitOCREndpoint(imageUrl) { try { console.log('Starting OCR process with image:', imageUrl); const payload = { imageUrl: imageUrl } const response = await fetch('http://localhost:5001/api/shipping/ocr', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }) if (!response.ok) { throw new Error(`OCR API error: ${response.statusText}`); } const data = await response.json(); console.log('OCR response:', data); if (data.formatted && data.formatted.length > 0) { showAddressOptionsPopup(data.formatted) } else { alert('Tidak ada data alamat yang ditemukan dari foto. Silakan coba lagi.') } } catch (error) { console.error('OCR endpoint error:', error); alert('Ada error saat memproses foto alamat. Silakan coba lagi.') } } // Display popup with address options function showAddressOptionsPopup(addresses) { // Initialize popup HTML if not exists if (!document.getElementById('ocrAddressPopup')) { initOCRAddressPopup() } const popup = document.getElementById('ocrAddressPopup'); const optionsContainer = document.getElementById('ocrAddressOptions'); // Clear previous options optionsContainer.innerHTML = ''; // Add address options addresses.forEach((address, index) => { const option = document.createElement('div'); option.className = 'ocr-address-option'; option.setAttribute('data-index', index); option.setAttribute('data-county', address.county || ''); option.setAttribute('data-postcode', address.postcode || ''); option.setAttribute('data-state', address.state || ''); option.setAttribute('data-country', address.country || ''); const addressText = address.full_address || `${address.street || ''} ${address.city || ''} ${address.state || ''}`.trim(); option.innerHTML = ` <div class="address-content"> <p class="address-text">${addressText}</p> <small class="address-details">${address.postcode || ''}</small> </div> `; option.addEventListener('click', function() { selectAddressOption(this, address) }); optionsContainer.appendChild(option); }); // Show popup popup.classList.add('show'); document.body.classList.add('ocr-popup-open'); } // Initialize OCR address popup if not exists function initOCRAddressPopup() { const popupHTML = ` <div id="ocrAddressPopup" class="ocr-address-popup"> <div class="ocr-popup-overlay"></div> <div class="ocr-popup-content"> <div class="ocr-popup-header"> <h3>Pilih Alamat dari Foto</h3> <button class="close-ocr-popup">×</button> </div> <div class="ocr-popup-body"> <div id="ocrAddressOptions" class="ocr-address-options"></div> </div> </div> </div> `; document.body.insertAdjacentHTML('beforeend', popupHTML); // Setup close buttons const popup = document.getElementById('ocrAddressPopup'); const closeBtn = popup.querySelector('.close-ocr-popup'); const overlay = popup.querySelector('.ocr-popup-overlay'); closeBtn.addEventListener('click', closeOCRAddressPopup); overlay.addEventListener('click', closeOCRAddressPopup); } // Handle address selection function selectAddressOption(element, address) { const county = element.getAttribute('data-county'); const postcode = element.getAttribute('data-postcode'); const state = element.getAttribute('data-state'); const country = element.getAttribute('data-country'); const fullAddress = address.full_address || `${address.street || ''} ${address.city || ''} ${address.state || ''}`.trim(); console.log('Selected address:', { fullAddress, county, postcode, state, country }); // Fill in the form fields with selected address $("[data-properties=alamat-penerima], #streetAddress").val(fullAddress); if (postcode) { $("[data-properties=kodepos], #zip").val(postcode); } if (state) { $("#province").val(state).trigger('change'); } if (country) { $("#properties-kota-pengiriman-country").val(country); } // Close popup after selection closeOCRAddressPopup(); } // Close OCR address popup function closeOCRAddressPopup() { const popup = document.getElementById('ocrAddressPopup'); if (popup) { popup.classList.remove('show'); document.body.classList.remove('ocr-popup-open'); } } async function addToCartUang() { var productAddOnId1 = 42122101162199; var productAddOnId2 = 42122101194967; var product_id = 7535020376279 const data = { items: [ { quantity: $("#Quantity-" + productAddOnId1).val(), id: productAddOnId1, "properties": { "Time": $("#properties-time").val() } }, { quantity: $("#Quantity-" + productAddOnId2).val(), id: productAddOnId2, "properties": { "Time": $("#properties-time").val() } } ] } await fetch(window.Shopify.routes.root + 'cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }) .then(response => { console.error('Sukses Buket Uang:', response); $(".form-flower").submit() }) .catch((error) => { console.error('Error Buket Uang:', error); $(".form-flower").submit() }); } // Utility function untuk membuat data card yang konsisten dengan default "-" function createCardData(overrides = {}) { const defaultData = { "ID": $("#properties-properties-qrId").val() !== '' ? $("#properties-properties-qrId").val() : '-', "Kartu Nama Penerima": (() => { const name = $("[data-properties=penerima]").val().trim(); if (!name || name === '-') { return '-'; } const prefix = $(".label-prefix").text().trim(); return (prefix + (name ? ' ' + name : '')).trim() || '-'; })(), "Kartu Nama Pengirim": $("#properties-kartu-nama-pengirim").val() !== '' ? $("#properties-kartu-nama-pengirim").val() : '-', "Kartu Ucapan": $("[data-properties=ucapan]").val() !== '' ? $("[data-properties=ucapan]").val() : '-', "Nama Penerima": $("#properties-nama-penerima").val() !== '' ? $("#properties-nama-penerima").val() : '-', "Order Number": "-", "Status": "Product", "Foto": $("#properties-photo").val() !== '' ? $("#properties-photo").val() : '-', "Media": $("#properties-video").val() !== '' ? $("#properties-video").val() : '-', "Image": "7535020376279" } // Merge dengan overrides jika ada return JSON.stringify({...defaultData, ...overrides}) } // Utility function untuk membuat data save card (insertCard/updateCard) function createSaveCardData(overrides = {}) { const defaultData = { "id": qrID || '', "penerima": $("#properties-nama-penerima").val() !== '' ? $("#properties-nama-penerima").val() : '-', "kartu_penerima": (() => { const name = $("[data-properties=penerima]").val().trim(); if (!name || name === '-') { return '-'; } const prefix = $(".label-prefix").text().trim(); return (prefix + (name ? ' ' + name : '')).trim() || '-'; })(), "kartu_ucapan": $("[data-properties=ucapan]").val() !== '' ? $("[data-properties=ucapan]").val() : '-', "kartu_pengirim": $("[data-properties=pengirim]").val() !== '' ? $("[data-properties=pengirim]").val() : '-', "foto": $("#properties-photo").val() !== '' ? $("#properties-photo").val() : '-', "video": $("#properties-video").val() !== '' ? $("#properties-video").val() : '-', "productId": "7535020376279", "order_name": "-", "status": "Product" } // Merge dengan overrides jika ada const mergedData = {...defaultData, ...overrides} return { data: JSON.stringify(mergedData), parsed: mergedData } } async function saveCard(){ let isCard = true const cardData = createSaveCardData() const id = $(".greetingCard").data("id") if(!id){ if((cardData.parsed.kartu_ucapan !== '' && cardData.parsed.kartu_ucapan !== '-') || (cardData.parsed.foto !== '' && cardData.parsed.foto !== '-') || (cardData.parsed.video !== '' && cardData.parsed.video !== '-')){ if($("#qrcode").length){ var qrCode = new QRCode(document.getElementById("qrcode"), { text: `https://moment.outerbloom.com/${qrID}`, width: 200, height: 200, colorDark : "#212121", colorLight : "#ffffff", correctLevel: QRCode.CorrectLevel.L, }); } $("#properties-qrId").val(qrID) const insert_card = await insertCard(cardData.data) console.log(insert_card, 'insert') // Trigger card preview update $(document).trigger('cardDataUpdated') return insert_card } } else { console.log('start update') const update_card = await updateCard(id, cardData.data) console.log(update_card, 'update_card') // Trigger card preview update $(document).trigger('cardDataUpdated') return update_card } } async function additem(items){ try { let formData = items if(items?.length) { formData = { 'items': items }; } const add = await fetch(window.Shopify.routes.root + 'cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Requested-With':'xmlhttprequest' /* XMLHttpRequest is ok too, it's case insensitive */ }, body: JSON.stringify(formData) }) const data = await add.json(); return data } catch(err){ console.log('Error additem', err) } } async function addons(){ let items = [] // First, try to get addons from the summary section (.addon-item) if($(".addon-item").length > 0) { $(".addon-item").each(function(){ const p = $(this) const props = p.next(".propsAddonSpotify") const id = $(this).data("id") const quantity = $(this).data("qty") const propId = $("#properties-time").val() let properties = {} if(id === 46067682607319) { const link = props.find(".spotifyLinkAddon").text() const photo = props.find(".spotifyFotoAddon").text() const song = props.find(".spotifySongAddon").text() const artist = props.find(".spotifyArtistAddon").text() properties = { id: propId, "Spotify Link": link !== '' ? link : '-', "Spotify Photo": photo !== '' ? photo : '-', "Spotify Song": song !== '' ? song : '-', "Spotify Artist": artist !== '' ? artist : '-', type: 'addon' } } else { properties = { "id": propId, "type": "addon" } } items.push({ id, quantity, properties }) }) } else { // If no addon-item found, get directly from #itemAddons .selected const selectedAddons = $("#itemAddons").find(".selected") if(selectedAddons.length > 0) { selectedAddons.each(function(){ const id = $(this).data("variant") const quantity = $(this).find(".btn-qty").val() || 1 const propId = $("#properties-time").val() const properties = { "id": propId, "type": "addon" } items.push({ id: Number(id), quantity: Number(quantity), properties }) }) } } return items } async function propItems() { let props = {} $("[data-properties]").each(function(e){ let elementType = this.tagName; const k = $(this).data("properties") 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') { const v = elementType === 'SELECT' ? $(this).find(":selected").val() : $(this).val(); if(v !== '') { props[k] = v?.replace(/[\s\n]/g, ''); } } }) return props } async function showPopupCart(items){ if(productType !== '') { console.log("clarity event " + productType + ' completeOrder') window.clarity("event", `${productType} completeOrder`) // window.clarity("set", productType, `completeOrder - ${productDate}`) } $("#popupCart").show() $(".propDeliveryCity").text($("#cities").val()) $(".propDeliveryDate").text($("#propDeliveryDate").val()) $(".propDeliveryTime").text($("#propDeliveryTime").val()) $(".propDeliveryName").text($("[data-properties=nama-penerima]").val()) $(".propDeliveryAddress").text($("[data-properties=alamat-penerima]").val()) $(".propDeliveryPhone").text($("[data-properties=telepon-penerima]").val()) $(".propDeliveryProv").text($("#province").val()) $(".propDeliveryZip").text($("#properties-kodepos").val()) const addons = [] if(items && items.length > 0) { for(let i = 1; i < items.length; i++) { const spotifyLink = items[i].properties['Spotify Link'] const spotifyPhoto = items[i].properties['Spotify Photo'] const spotifySong = items[i].properties['Spotify Song'] const spotifyArtist = items[i].properties['Spotify Artist'] const price = items[i].price / 100 const props = spotifyLink ? `<div class="propsAddonCart row m-0"> <div class="col-12 col-lg-2"></div> <div class="col-12 col-lg-10"> <p> <span>spotify link</span> <span>${spotifyLink}</span> </p> <p> <span>Upload Photo</span> <span>${spotifyPhoto}</span> </p> <p> <span>song / playlist name</span> <span>${spotifySong}</span> </p> <p> <span>artist name</span> <span>${spotifyArtist}</span> </p> </div> </div>` : ''; addons.push(`<div class="row m-0"> <div class="imgAddonCart col-2"> <img width="43" src="${items[i].image}" alt="" > </div> <div class="imgAddonTitlePrice col-10 align-self-center"> <div class="row justify-content-between m-0"> <div class="col-12 col-lg-8"> <h5>${items[i].title}</h5> </div> <div class="col-12 col-lg-4 text-lg-right"> <span>${rupiah.format(price)}</span> </div> </div> </div> </div>${props}`) } } // console.log(addons) if(addons.length === 0) { $(".itemAddonCart").hide() return } $(".toggleAddonCart h4").text(`add-ons (${items.length - 1})`) $(".wrapperItemAddonCart").html(addons) } const money = (money) => { return new Intl.NumberFormat('id-ID', { style: 'currency', currency: 'IDR', minimumFractionDigits: 0 } ).format(money); } async function showNoteMoney() { let qty50k = $("[data-properties='Uang 50k']").val() let qty100k = $("[data-properties='Uang 100k']").val() const total50k = Number(qty50k) * 50000 const total100k = Number(qty100k) * 100000 const total_all = total50k + total100k $(".prop50k").html(`<span>${qty50k} Lembar: <strong class="pl-1">${money(total50k)}</strong></span>`) $(".prop100k").html(`<span>${qty100k} Lembar: <strong class="pl-1">${money(total100k)}</strong></span>`) $(".itemMoney").html(`<p>For the money arrangement, please transfer <strong>IDR ${money(total_all)}</strong> to <strong>Bank Mandiri 1020001234522 (PT Modern Mekar Abadi)</strong> and contact our <a href="http://wa.me/6281514234600" target="_blank" style="text-decoration: underline; color: #8d3f2d">Customer Service</a> to confirm with proof of payment.</p>`) } async function removeImage() { // Reset to initial state of case-img-preview $(".remove-image").hide() $("#properties-photo").val("-") $(".preview-image").hide().attr("src", "") $(".placeholder-image").show() $(".icon-upload").show() $(".ajax-loader").hide() // Reset the button states $(".case-video-preview").hide() $(".case-img-preview .btn-upload button").show() } async function removeVideo() { $("#properties-video").val("-") $(this).find("img").hide() $(this).hide() $(this).prev("p").text("Add video to make it more special (optional)") $("#label-input-video").show() $("#label-input-video span").text("Upload Video") $(".case-video-preview p span").remove() } async function loadItemOccasion(t, occasion) { const name = occasion?.replace('greeting-card-', '') $("#kartu-ucapan").val("") $("[data-occassion]").removeClass("selected") $("[data-properties=ucapan]").val("") $("#save-card").attr("disabled", true) t.addClass("selected") $("#show_note").attr("data-card-occassion", name) $.get(`https://outerbloom.com/collections/${occasion}/products.json`, function(data, status){ const products = data.products const html = [] for(let i = 0; i < products.length; i++) { const id = products[i].id const variantId = products[i].variants[0].id const img = products[i].images[0].src const title = products[i].title const price = products[i].variants[0].price const qty = products[i].variants[0].inventory_quantity const body = `<div class="item-card${price < 1 ? ' free' : ' nofree'}${i === 0 ? ' selected' : ''}" data-id=${id}> <label for="card-${variantId}"></label> <div class="card-image"> <img src="${img}" alt="${title}" width="" height="" /> </div> <div class="card-meta text-center"> <h5>${title}</h5> <p>${price < 1 ? 'FREE' : rupiah.format(price)}</p> <input id="card-${variantId}" type="radio" name="id" value="${variantId}" data-price="${price}"> </div> </div>` html.push(body) } const withoutCard = `<div class="item-card item-without-card"> <label for="card-0"></label> <div class="card-image"> <img src="https://cdn.shopify.com/s/files/1/1589/6833/t/129/assets/without-card.png?v=1747632283" alt="Without card" width="" height="" /> </div> <div class="card-meta text-center"> <h5>Send without a greeting card</h5> <input id="card-0" type="radio" name="id" value="" data-price=""> </div> </div>` $("#itemCards .items-card").html(html.length === 0 ? '<p>No Item available</p>' : html.join("")) }); } async function setItems() { let items = [] const mainProps = { "Delivery Date": $("#propDeliveryDate").val(), "Delivery Time": $("#propDeliveryTime").val() !== '' ? $("#propDeliveryTime").val() : '-' , "Kota Pengiriman": $("#cities").val(), "Nama Penerima": $("[data-properties=nama-penerima]").val() !== '' ? $("[data-properties=nama-penerima]").val() : '-' , "Alamat Penerima": $("[data-properties=alamat-penerima]").val() !== '' ? $("[data-properties=alamat-penerima]").val() : '-' , "Kodepos": $("#properties-kodepos").val() !== '' ? $("#properties-kodepos").val() : '-' , "Telepon Penerima": $("[data-properties=telepon-penerima").val() !== '' ? $("[data-properties=telepon-penerima").val() : '-' , "Kartu Nama Penerima": (() => { const name = $("[data-properties=penerima]").val().trim(); if (!name || name === '-') { return '-'; } const prefix = $(".label-prefix").text().trim(); return (prefix + (name ? ' ' + name : '')).trim() || '-'; })() , "Kartu Ucapan": $("[data-properties=ucapan]").val() !== '' ? $("[data-properties=ucapan]").val() : '-' , "Kartu Nama Pengirim": $("[data-properties=pengirim]").val() !== '' ? $("[data-properties=pengirim]").val() : '-' , "Foto": $("#properties-photo").val() !== '' ? $("#properties-photo").val() : '-' , "Video": $("#properties-video").val() !== '' ? $("#properties-video").val() : '-' , "QR Code": $("#properties-qrId").val() !== '' ? $("#properties-qrId").val() : '-' , "Province": $("#province").val() !== '' ? $("#province").val() : '-' , "Country": $("#properties-kota-pengiriman-country").val() !== '' ? $("#properties-kota-pengiriman-country").val() : '-' , "Company": $("[data-properties=company]").val() !== '' ? $("[data-properties=company]").val() : '-' , "Delivery Method": $("#selectedShippingMethod") && $("#selectedShippingMethod").val() !== '' ? $("#selectedShippingMethod").val() : 'Delivery' , "id": $("#properties-time").val() !== '' ? $("#properties-time").val() : '-', "type": 'product', "Shipping": $("#properties-shipping").val() !== '' ? $("#properties-shipping").val() : `${$("#cities").val() === 'Kota Lainnya' ? '' : '0'}`, } console.log(mainProps, 'mainProps') const props = await propItems() properties = {...mainProps, ...props }; const id = $("#productSelect").find('option:selected').val() console.log(id, 'main ID') const mainItem = { id: Number(id), quantity: 1, properties } items.push(mainItem) const cardId = $("#itemCards").find(".selected input").val() const cardItem = { id: Number(cardId), quantity: 1, properties: { "id": $("#properties-time").val() !== '' ? $("#properties-time").val() : '-', type: 'card' } } console.log(cardId, 'cardId') if(cardId) { items.push(cardItem) } const addon = await addons() if(addon) { for(let i = 0; i < addon.length; i++){ items.push({ id: addon[i].id, quantity: addon[i].quantity, properties: addon[i].properties }) } } return items } async function addToCart() { const items = await setItems() const addItems = await additem(items) // Check if cities is not "Kota Lainnya" and Shipping property is empty or "-" // Skip this check entirely when in Pickup mode (shipping cost is 0 / not applicable) const _isPickupAddToCart = $("#selectedShippingMethod").val() === 'Pickup'; const citiesValue = $("#cities").val(); const shippingValue = $("#properties-shipping").val(); if (!_isPickupAddToCart && citiesValue && citiesValue !== "Kota Lainnya" && (!shippingValue || shippingValue === "" || shippingValue === "-")) { alert("Shipping city has not been selected, please try again"); // Close popup and reset fields disablePopup(); $("#cities").val("").trigger('change'); $("#propDeliveryDate").val(""); $("#propDeliveryTime").val(""); $("#deliveryDate button").removeClass("selected"); $("#deliveryTime button").removeClass("selected"); return; } if(addItems) { $(this).find("span").removeClass("loading") disablePopup() showPopupCart(addItems.items) localStorage.setItem("items", JSON.stringify(addItems.items)) const rowIndex = $(".greetingCard").data("id") if(rowIndex && rowIndex !== 0) { const data = JSON.stringify({ "Status": "Cart" }); const update = await updateCard(rowIndex, data) console.log(update, 'update card to cart') } analytics.track('add_cart', { productId: '7535020376279', items: addItems.items }); } } $(document).ready(function(){ // Observer to auto-trigger addon loading when addon section becomes visible const addonObserver = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { const target = $(mutation.target) if(target.hasClass('purchaseAddon') && mutation.type === 'attributes' && mutation.attributeName === 'class') { if(!target.hasClass('hide')) { // Addon section just became visible, ensure items are loaded setTimeout(function() { if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) { console.log("Auto-triggering addon load...") $("[data-addon]").eq(0).trigger("click") } }, 150) } } }) }) // Start observing addon section const addonSection = document.querySelector('.purchaseAddon') if(addonSection) { addonObserver.observe(addonSection, { attributes: true, attributeFilter: ['class'] }) } $(".purchasePopup").delegate("#addtocart-card", "click", async function(){ $(this).find("span").addClass("loading") let isValid = true const isPickupModeCart = $("#selectedShippingMethod").val() === 'Pickup'; if (!isPickupModeCart) { $(".formAddressPurchase [required]").each(function(){ const t = $(this) const input = t.val() const p = t.parent() if(input === '') { p.addClass("error") isValid = false } }) } if(!isValid) { $(this).find("span").removeClass("loading") return } await addToCart() }) $("#addtocart-cart .btn").click(async function(){ // First validate variant metafields if (typeof validateVariantMetafields === 'function') { const isValid = validateVariantMetafields(true); if (!isValid) { // The validateVariantMetafields function already handles scrolling and focusing alert('Please select all required variant options before proceeding.'); return; // Stop execution if validation fails } } const id = $("#productSelect").find('option:selected').val() const mainProps = { id: $("#properties-time").val() !== '' ? $("#properties-time").val() : '-', type: 'product' } const props = await propItems() const properties = { ...mainProps, ...props }; const items = { id: Number(id), quantity: 1, properties } const addItems = await additem(items) if(addItems) { showPopupCart(addItems.items) localStorage.setItem("items", JSON.stringify(addItems)) } }) $(".formAddressPurchase [required]").change(function(){ const t = $(this) const p = t.parent() const v = t.val() if(v !== '') { p.removeClass("error") } }) $(".purchase-button").delegate("#save-card", "click", async function(){ const parent = $(this).parents(".sectionPurchase") const next = parent.next(".sectionPurchase") $(this).find("span").addClass("loading") const card = await saveCard() console.log(card, 'ssaveCCC') if(card?.status === 200 || card?.status === 201) { if(next.length === 0) { $(this).find("span").removeClass("loading") disablePopup() await addToCart() } $(".scanCard").removeClass("hide") $(this).find("span").removeClass("loading") parent.addClass("hide") next.removeClass("hide") if(next.hasClass("purchaseAddon")) { $("[data-addon]").eq(0).click() console.log("clarity event addons") window.clarity("event", `${productType} add-ons`) // Ensure addon items are loaded when entering addon popup setTimeout(function() { if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) { $("[data-addon]").eq(0).trigger("click") } }, 100) } if(next.hasClass("purchaseAddress")) { initSelect2('#zip'); if (typeof window.applyPickupFormState === 'function') window.applyPickupFormState(); } } }) $("#skip-card").click(async function(){ $(".greetingCard [data-properties]").val("") $("#properties-photo").val("") $("#properties-video").val("") const parent = $(this).parents(".sectionPurchase") const next = parent.next(".sectionPurchase") parent.addClass("hide") next.removeClass("hide") // $("#itemCards").html("") await removeImage() await removeVideo() // Trigger card preview update when card data is cleared $(document).trigger('cardDataUpdated') if(next.length === 0) { $(this).find("span").removeClass("loading") disablePopup() await addToCart() return } if(next.hasClass("purchaseAddon")) { $("[data-addon]").eq(0).click() console.log("clarity event addons") window.clarity("event", `${productType} add-ons`) // Ensure addon items are loaded when entering addon popup setTimeout(function() { if($("#itemAddons .row").children().length === 0 || $("#itemAddons .row").text().includes("No Item available")) { $("[data-addon]").eq(0).trigger("click") } }, 100) } if(next.hasClass("purchaseAddress")) { initSelect2('#zip'); if (typeof window.applyPickupFormState === 'function') window.applyPickupFormState(); } }) $("#msgCard").click(async function(){ $(this).parent().addClass("loading") let occasion = $(".selected[data-occassion]").data("occassion") || 'all' occasion = occasion?.replace("greeting-card-", "") const { data } = await getFetch(`${host}/api/card/template/occasion?name=${occasion ? occasion : 'all'}`); const d = data?.data for(let i = 0; i < d.length; i++) { const num = Math.floor(Math.random() * (d.length - 1 + 1) + 1); const greeting = d[num]?.Greeting $(".greetingCard textarea").val(greeting) $(this).parent().removeClass("loading") // Trigger card preview update when message template is generated $(document).trigger('cardDataUpdated') } $("#save-card").attr("disabled", false) }) $(".sectionPurchaseBoard .next-purchase-button").click(function(){ const parent = $(this).parents(".sectionPurchase") const next = parent.next(".sectionPurchase") parent.addClass("hide") next.removeClass("hide") }) $("#editCard").click(function(){ $(".custom-card").show() $(".preview-card").hide() }) $("#first_name, #last_name").change(function(){ const v = $(this).val() const first_name = $("#first_name").val() const last_name = $("#last_name").val() !== '' ? ' ' + $("#last_name").val() : '' $("[data-properties=nama-penerima]").val(first_name+last_name) // Trigger card preview update when first/last name changes $(document).trigger('cardDataUpdated') }) $("[data-occassion]").click(function(){ const t = $(this) const p = t.parents(".sectionPurchase") // $(".greetingCard").addClass("disabled") const occasion = t.data("occassion") loadItemOccasion(t, occasion) }) $("#itemCards").delegate(".item-card:not(.item-without-card) label", "click", function(){ const id = $(this).parent(".item-card").data("id") const t = $(this).parent(".item-card") const target = t.find("input") const v = $('.item-card input[type="radio"]:checked').val(); $("#itemCards .item-card").removeClass("selected") t.addClass("selected") $("#itemCards .item-card").find("input").attr("name", "") if(target.length > 0) { target.attr("name", "id[]") $("#properties-card").val(id) $(".greetingCard").removeClass("disabled") $("#skip-card").attr("disabled", false) } else { $("#properties-card").val("") } }) $("#itemCards").delegate(".item-without-card label", "click", function(){ const parent = $(this).parents(".sectionPurchase") const next = parent.next(".sectionPurchase") $(".greetingCard").addClass("disabled") parent.addClass("hide") next.removeClass("hide") $("[data-addon]").eq(0).click() initSelect2('#zip'); }) $("[data-properties=ucapan]").keyup(function(){ const v = $(this).val() const p = $(this).parents(".sectionPurchase") $(".purchaseAddress").find(".greetingCard textarea").val(v) if(v.length > 3) { p.find(".next-purchase-button").attr("disabled", false) } else { p.find(".next-purchase-button").attr("disabled", true) } // Trigger card preview update when message changes $(document).trigger('cardDataUpdated') }) $("[data-properties=penerima]").keyup(function(){ const v = $(this).val() $(".purchaseAddress").find("[data-properties=penerima]").val(v) // Trigger card preview update when recipient name changes $(document).trigger('cardDataUpdated') }) $("[data-properties=pengirim]").keyup(function(){ const v = $(this).val() $(".purchaseAddress").find("[data-properties=pengirim]").val(v) // Trigger card preview update when sender name changes $(document).trigger('cardDataUpdated') }) $(document).click(function(e){ if($(e.target).closest('.wrapperPopupCart').length != 0) return false; // $('#popupCart').fadeOut('slow'); // location.reload() }); $(".toggleAddonCart").click(function(){ const p = $(this).parent(".itemAddonCart") p.toggleClass("open") }) $(".btnViewCart").click(function(){ window.location.href = "https://outerbloom.com/cart"; }) $(".btnViewCheckout").click(async function(){ $(this).find("span").addClass("loading") let zip = $("#properties-kodepos").val() const first_name = $("#first_name").val() const last_name = $("#last_name").val() const company = $("#company").val() !== '' ? $("#company").val() : '' const address1 = $("#delivery_address").val() const address2 = zip && zip !== '' ? zip?.split(' - ')[1] : '' zip = zip && zip !== '' ? zip?.split(' - ')[0] : '' const phone = $("#recipient_number").val() const city = $("#cities").val() const province = $("#province").val() const country = 'Indonesia' const ver = Date.parse(new Date()) 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}` const clear = await fetch(`/cart/clear.js`, {method: 'POST'}) if(clear.status === 200) { const savedItem = window.localStorage.getItem("items"); const items = JSON.parse(savedItem) const addItems = await additem(items) console.log(addItems, 'new addItems') if(addItems) { window.location.href = `https://outerbloom.com/checkout?${params}`; } } }) $(".btnContinueShopping").click(function(){ window.location.href = "https://outerbloom.com/"; }) if (isIOS) { $(".empty-state-card").click(function(){ $("#input-foto").trigger("click") }) $(".btn-upload-image").click(function(){ $("#input-foto").trigger("click") }) $("[for=input-video]").click(function(){ $("#input-video").trigger("click") }) $(".btn-upload-papan").click(function(){ $("#logoPapan").trigger("click") }) } $("[data-properties]").each(function(){ const select = $(this).parents(".form-group").find("select") $(this).change(function(){ const name = $(this).data("properties") const v = $(this).val() if (name == 'telepon-penerima') { let phone = v.replace(/[^0-9]/g, '') $(this).val(phone); $("#properties-telepon-penerima").val(phone) $('.iti__search-input').val('-') } else { $("#properties-" + name).val(v) } }) select.on("change", function(){ const name = $(this).data("properties") const v = $(this).val() $("#properties-" + name).val(v) }) }) $("#show_note").click(function(){ const rowIndex = $(".greetingCard").data("id") const data = JSON.stringify({ "Media": "-" }) updateCard(rowIndex, data) }) $(".greetingCard").delegate(".remove-image", "click", function(e){ e.preventDefault() removeImage() }) $(".remove-media").click(function(e){ e.preventDefault() $(this).find("img").show() removeVideo() }) $("[data-delivery_method]").click(function(e){ e.preventDefault() const t = $(this) const data = t.data("delivery_method") $("[data-delivery_method]").removeClass("selected") t.addClass("selected") $("#cities").val("") $("#properties-delivery-date").val("-") $("#deliveryDate button").removeClass("selected") $("#full-date").val("Full Calendar →") $("#propDeliveryDate").val("") const step3 = $("#step-3") if(data.match('PickUp')) { $(".selfpickup-point").show() step3.find("[data-finished=false]").hide() $("#panel-4").hide() step3.find("[data-finished=true]").show() $("#cities").attr("required", false) $("#form-group-city").hide() // Keep full calendar for pickup-itcinhouse $("#properties-nama-penerima, #properties-alamat-penerima, #properties-kodepos, #properties-kodepos, #properties-telepon-penerima").val("-") // $("#deliveryDate").find("button:first-child").addClass("stop") $(".form-selfpickup").show() $(".form-delivery").hide() $(".form-delivery").find("input, textarea, select").val("") $(".form-delivery").find("input, textarea, select").attr("required", false) $("#properties-shipping").val("0") $("#noteDeliveryDate").hide() $(".form-delivery .form-control").attr("required", false) $("#stepNav4").hide() $("#deliveryDate").find("button:nth-child(1)").addClass("stop") $(".calendarbutton[data-date=14]").attr("disabled", true) if(timeOfDay >= 16.01){ $("#deliveryDate").find("button:nth-child(2)").addClass("stop") } } else { $(".calendarbutton[data-date=14]").attr("disabled", false) $("#deliveryDate").find("button:nth-child(1)").removeClass("stop") step3.find("[data-finished=false]").show() $("#panel-4").show() step3.find("[data-finished=true]").hide() $("#cities").attr("required", true) $(".selfpickup-point").hide() $("#form-group-city").show() $("#cities").val('').trigger('change'); $("#properties-kota-pengiriman").val("-") $("#row-delivery-date, #row-delivery-time").show() $("#propDeliveryDate, #propDeliveryTime").attr("required", true) $("#deliveryDate").find("button").removeClass("stop") $(".form-selfpickup").hide() $(".form-delivery").show() $(".form-delivery").find("input, textarea, select").attr("required", true) $(".form-delivery [data-properties]").attr("readonly", false) $("#properties-kodepos").val("-") $("#properties-alamat-penerima").val("-") $(".form-delivery .form-control").attr("required", true) $(this).parents(".setup-content").attr("id", "step-1") $("#stepNav4").show() } }) $("[name=selfpickup]").click(function(){ const p = $(this).parents(".row-pickup") const pickupCity = $("input[name='selfpickup']:checked").val(); const pickupAddress = $("input[name='selfpickup']:checked").data("address"); const pickupZip = $("input[name='selfpickup']:checked").data("zip"); $(".row-pickup").removeClass("selected") p.addClass("selected") $("#properties-kota-pengiriman").val(pickupCity) $("#province").val("Jakarta") $("#properties-alamat-penerima").val(pickupAddress) $("#properties-kodepos").val(pickupZip) }) $("#cities").change(function(e){ e.preventDefault() $(this).parent(".row").find("p.error").remove() $("#full-date").val("Full Calendar") $("#deliveryDate, #deliveryDateFull label ").show() $("#deliveryDateFull").removeClass("filled") $(".btnChangeDeliveryDate").addClass("hide") $("#full-date").prop('disabled', false); $("#stepNav2, #stepNav3, #stepNav4").removeClass("btn-success") $("#stepNav2, #stepNav3, #stepNav4").find("a").attr("disabled", true) const step3 = $("#step-3") $("#cityNote").remove() $("#noteDeliveryDate").hide() $("#noteDeliveryDate").empty() let v = $(this).val() let v2 = $('option:selected', this).attr('data-city'); let v3 = $('option:selected', this).attr('data-province'); let price = $('option:selected', this).attr('data-price'); $("#country").val(v) $("#properties-kota-pengiriman").val(v) $("#properties-shipping").val(price) $("#deliveryDate button, #deliveryTime button, .calendarseasonal .button").removeClass("selected") $("#properties-delivery-date, #properties-delivery-time").val("-") $("#propDeliveryDate, #propDeliveryTime").val("") let note = $('option:selected', this).attr('data-note'); if(v === 'Kota Lainnya') { $("#noteDeliveryDate").show() $("#noteDeliveryDate").text("Order akan segera dikirim. Estimasi tanggal diterima akan disesuaikan dengan waktu pengiriman oleh pihak ekspedisi ke lokasi Anda.") $("#zip").attr("required", false) $("#zip").hide() $("#propDeliveryDate, #propDeliveryTime").attr("required", false) $("#propDeliveryDate, #properties-delivery-date, #propDeliveryTime, #properties-delivery-time").val("-") $("#row-delivery-date, #row-delivery-time").hide() $("#properties-shipping").val("") // Hide addressPurchase form and make all fields optional $(".addressPurchase").hide() $(".addressPurchase [required]").attr("required", false) $(".addressPurchase input, .addressPurchase textarea, .addressPurchase select").val("") $("[data-properties=nama-penerima], [data-properties=alamat-penerima], [data-properties=telepon-penerima]").val("") $("#properties-nama-penerima, #properties-alamat-penerima, #properties-telepon-penerima").val("") // $(this).parents(".setup-content").attr("id", "step-2") } else { $("#noteDeliveryDate").hide() $("#zip").attr("required", true) $("#zip").show() $("#row-delivery-date, #row-delivery-time").show() $("#propDeliveryDate, #propDeliveryTime").attr("required", true) $("#deliveryDate").find("button").removeClass("stop") // Show addressPurchase form and make fields required $(".addressPurchase").show() $(".addressPurchase .form-control").not('[data-properties="company"]').attr("required", true) $("[data-properties=nama-penerima], [data-properties=alamat-penerima], [data-properties=telepon-penerima]").attr("required", true) // $(this).parents(".setup-content").attr("id", "step-1") } // if(v !== 'Jakarta') { // $("[data-type=upsell]").hide() // } else { // $("[data-type=upsell]").show() // } // $('.collection-addons')[0].swiper.update(); // Load delivery dates when city is selected if(v !== '' && v !== 'Kota Lainnya') { const deliveryDate = document.getElementById("deliveryDate"); const deliveryTime = document.getElementById("deliveryTime"); // Check localStorage first (no city needed, shared across all cities for same product) const storageKey = getStorageKey('date'); const storedData = getFromStorage(storageKey); if (storedData && storedData.date && storedData.time) { // Render from localStorage immediately using helper function renderDeliveryDateFromData(storedData); } else { // Show skeleton loading state for dates if(deliveryDate) { const skeletonDates = ` <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled style="opacity: 0.6;"> <div style="background: #e0e0e0; width: 30px; height: 5px; margin: 0 auto 4px; border-radius: 0px;"></div> <span style="background: #d0d0d0; display: inline-block; width: 40px; height: 40px; border-radius: 100%;"></span> </button> <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled style="opacity: 0.6;"> <div style="background: #e0e0e0; width: 30px; height: 5px; margin: 0 auto 4px; border-radius: 0px;"></div> <span style="background: #d0d0d0; display: inline-block; width: 40px; height: 40px; border-radius: 100%;"></span> </button> <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled style="opacity: 0.6;"> <div style="background: #e0e0e0; width: 30px; height: 5px; margin: 0 auto 4px; border-radius: 0px;"></div> <span style="background: #d0d0d0; display: inline-block; width: 40px; height: 40px; border-radius: 100%;"></span> </button> <button class="date-single calendarbutton btn steps-btn col col-3 btn-date-time" disabled style="opacity: 0.6;"> <div style="background: #e0e0e0; width: 30px; height: 5px; margin: 0 auto 4px; border-radius: 0px;"></div> <span style="background: #d0d0d0; display: inline-block; width: 40px; height: 40px; border-radius: 100%;"></span> </button> `; deliveryDate.innerHTML = skeletonDates; } // Show skeleton loading state for times if(deliveryTime) { const skeletonTimes = ` <button class="time-single calendarbutton2 btn steps-btn" disabled style="opacity: 0.6;"> <div style="background: #e0e0e0; width: 60px; height: 12px; margin: 0 auto 4px; border-radius: 4px;"></div> <div style="background: #d0d0d0; width: 80px; height: 10px; margin: 0 auto; border-radius: 4px;"></div> </button> <button class="time-single calendarbutton2 btn steps-btn" disabled style="opacity: 0.6;"> <div style="background: #e0e0e0; width: 60px; height: 12px; margin: 0 auto 4px; border-radius: 4px;"></div> <div style="background: #d0d0d0; width: 80px; height: 10px; margin: 0 auto; border-radius: 4px;"></div> </button> <button class="time-single calendarbutton2 btn steps-btn" disabled style="opacity: 0.6;"> <div style="background: #e0e0e0; width: 60px; height: 12px; margin: 0 auto 4px; border-radius: 4px;"></div> <div style="background: #d0d0d0; width: 80px; height: 10px; margin: 0 auto; border-radius: 4px;"></div> </button> `; deliveryTime.innerHTML = skeletonTimes; } // Load delivery dates (with city parameter) renderDate(v).then(() => { console.log('Delivery dates loaded for city:', v); }).catch(error => { console.error('Error loading delivery dates:', error); if(deliveryDate) { deliveryDate.innerHTML = '<p style="text-align: center; color: #d32f2f; font-size: 14px; padding: 20px 0;">Failed to load dates. Please try again.</p>'; } }); } } disabledSameDay() if(v !== 'Jakarta' && v !== 'Depok' && v !== 'Bekasi' && v !== 'Tangerang') { $("[data-addon=giftcard]").show() $("[data-addon=giftcard]").click() $("#itemAddons").show() $("#flower-step").addClass("nonjadetabek") } else { $("#cardOccasion, #navAddon, .collection-addons").show() $("[data-addon]").eq(0).click() $("#flower-step").removeClass("nonjadetabek") } }) $("#zip").change(function(e){ let v = $(this).val() var city = $("#cities").find('option:selected'); $("#properties-kodepos").val(v) if(city === 'Kota Lainnya') { $(this).attr("required", true) $("#recipient-address").val("") } }) var minDate = +7 // Initialize datepicker - works whether jQuery UI is sync or async loaded ensureJQueryUI().then(function() { if ($("#full-date").hasClass('hasDatepicker')) return; $("#full-date").datepicker({ minDate, dateFormat: 'Mdd_yy', //Nop22_2021, beforeShowDay: disabledays, onSelect: function (date) { $("#deliveryDate, #deliveryDateFull label ").hide() $("#deliveryDateFull").addClass("filled") $(".btnChangeDeliveryDate").removeClass("hide") $("#full-date").prop('disabled', true); $('#propDeliveryDate, #properties-delivery-date').val('Kirim_'+date); $(".date-full").addClass("selected") $(".date-single, .calendar-group").removeClass("selected") $("#propDeliveryTime").val('') $("#properties-delivery-time").val('-') $(".time-single").removeClass("selected") const select = $('#cities option:selected').val(); if(select !== 'Jakarta' && select !== 'Depok' && select !== 'Bekasi' && select !== 'Tangerang') { $("#noteDeliveryDate").show() $("#noteDeliveryDate").html(`Order akan dikirim pada tanggal ${date} dari Jakarta. Estimasi tanggal diterima akan disesuaikan dengan waktu pengiriman oleh pihak ekspedisi ke lokasi Anda.`) } else { $("#noteDeliveryDate").hide() } // Validate and enable personalize button after full date is selected validatePersonalizeButton(); } }); }).catch(function() { console.warn('jQuery UI datepicker could not be loaded.'); }); $(".btnChangeDeliveryDate").click(function(){ $("#deliveryDate, #deliveryDateFull label ").show() $("#deliveryDateFull").removeClass("filled") $(".btnChangeDeliveryDate").addClass("hide") $("#full-date").prop('disabled', false); }) // Function to validate and enable/disable personalize button based on delivery fields window.validatePersonalizeButton = function validatePersonalizeButton() { const shippingMethod = $("#selectedShippingMethod").val(); const isPickupMode = shippingMethod === 'Pickup'; // Check city / pickup location selection let isCitySelected = false; if (isPickupMode) { // In pickup mode: a pickup location must be chosen (selectedPickupLocation must be non-empty) const pickupLocation = $("#selectedPickupLocation").val(); isCitySelected = pickupLocation && pickupLocation !== ''; } else { const deliveryCity = $("#cities").val(); isCitySelected = deliveryCity && deliveryCity !== '' && deliveryCity !== 'Kota Lainnya'; } // Check if delivery date is selected const isDateSelected = $("#deliveryDate .calendarbutton.selected").length > 0 || $("#deliveryDateFull").hasClass("filled") || $(".calendarseasonal .calendar-group.selected").length > 0 || ($("#propDeliveryDate").val() !== '' && $("#propDeliveryDate").val() !== '-'); // Check if delivery time element exists on the page const deliveryTimeElement = $("#deliveryTime"); const hasDeliveryTime = deliveryTimeElement.length > 0 && deliveryTimeElement.is(':visible'); // Check if delivery time is selected (only if time element exists) let isTimeSelected = true; // Default to true if no time element if (hasDeliveryTime) { isTimeSelected = $("#deliveryTime .calendarbutton2.selected").length > 0; } // Show/hide pickup location error message const pickupLocationError = document.getElementById('pickupLocationError'); if (pickupLocationError) { pickupLocationError.style.display = (isPickupMode && !isCitySelected) ? 'block' : 'none'; } // Enable personalize button if all required fields are filled if (isCitySelected && isDateSelected && isTimeSelected) { $("#personalizeBtn .btn").attr("disabled", false); $("#personalizeBtnSpotify .btn").attr("disabled", false); console.log('Personalize button enabled: all delivery fields filled'); } else { $("#personalizeBtn .btn").attr("disabled", true); $("#personalizeBtnSpotify .btn").attr("disabled", true); console.log('Personalize button disabled:', { pickupMode: isPickupMode, city: isCitySelected, date: isDateSelected, time: hasDeliveryTime ? isTimeSelected : 'not required' }); } } $("#deliveryDate").delegate(".calendarbutton:not(.date-full)", "click", function(e){ e.preventDefault() $(this).parents("#row-delivery-date").find("p.error").remove() const fulldate = $(this).data("fulldate") const day = $(this).data("day") const date = $(this).data("date") const month = $(this).data("month") const year = $(this).data("year") const off_pagi = $(this).data("offpagi") const off_siang = $(this).data("offsiang") const off_malam = $(this).data("offmalam") $(".calendarbutton").removeClass("selected") $(this).addClass("selected") $("#propDeliveryDate, #properties-delivery-date").val(`Kirim_${month}${date}_${year}`) $("#propDeliveryTime").val('') $("#properties-delivery-time").val('-') $(".calendarbutton2").removeClass("selected") $("#full-date").val("Full Calendar") if(off_pagi && timeOfDay > off_pagi) { $("[data-time=Morning]").attr("disabled", true) } else { $("[data-time=Morning]").attr("disabled", false) } if(off_siang && timeOfDay > off_siang) { $("[data-time=Afternoon]").attr("disabled", true) } else { $("[data-time=Afternoon]").attr("disabled", false) } if(off_malam && timeOfDay > off_malam) { $("[data-time=Evening]").attr("disabled", true) } else { $("[data-time=Evening]").attr("disabled", false) } const select = $('#cities option:selected').val(); if(select !== 'Jakarta' && !select.match('PickUp') && select !== 'Depok' && select !== 'Bekasi' && select !== 'Tangerang' && select !== '') { $("#noteDeliveryDate").show() $("#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.`) } else { $("#noteDeliveryDate").hide() } // Validate and enable personalize button after date is selected validatePersonalizeButton(); }) if(today === 14 && timeOfDay > 17.00) { $("#deliveryDate button:first-child").attr("disabled", true) } $("#deliveryTime").delegate(".calendarbutton2", "click", function(e){ e.preventDefault() const time = $(this).data("time") const date = $("#propDeliveryDate").val() if(date == '') { // return alert('Silakan pilih tanggal terlebih dahulu') } $(".calendarbutton2").removeClass("selected") $(this).addClass("selected") $("#propDeliveryTime, #properties-delivery-time").val(`KirimJam_${date.replace('Kirim_','')}_${time}`) // Validate and enable personalize button after time is selected validatePersonalizeButton(); }) $('textarea.has-limit, input.has-limit').keyup(function () { max = this.getAttribute("maxlength"); let len = $(this).val().length; let limit = $(this).siblings(".limit"); if (len > max) { alert('you have reached the limit'); } else { limit.text(`${len}/${max}`); } }); $("#button-action-step .btn").click(function(){ $(this).find("span").text("Processing..."); }); $(".finishBtn").on('click', function() { $(this).addClass("is-adding"); // $(this).click(); }); $('.setup-panel .nav-item a.btn-success').trigger('click'); $("#button-action .btn").click(function(){ $("#flower-step").addClass("block"); $("#button-action").hide(); }); $(".close-how-order").click(function(){ $("#flower-step").removeClass("block"); $("#button-action").show(); }); $("#input-foto, #input-video").change(function(e){ readURL(this); }); $("#logoPapan").change(function(){ readURLPapan(this); }); $("#address-upload").change(async function(){ const upload_address = await readURLAddress(this) if(upload_address) { const url = upload_address.url $(".props-address-upload").val(url) // $(".form-address").addClass("address-uploaded") $(".form-address-upload").addClass("uploaded") // $(this).parents(".form-group").siblings(".form-group").find("[required]").attr("required", false) // Hit OCR endpoint to get address options // await hitOCREndpoint(url) } }) $(".address-manualy").click(function(){ $(".form-address-upload").removeClass("uploaded"); $(".photo-address").hide(); // $(".form-address").removeClass("address-uploaded") $("#formAddressPurchase").find(".form-control").not('[data-properties="company"]').attr("required", true) }); $(".case-video-preview").delegate(".replace-video", "click", function(){ $("#input-video").trigger("click") }) $('.date-single').click(function(e) { e.preventDefault(); $('.date-single').removeClass('selected'); $('#full-date').removeClass('selected'); $(this).addClass('selected'); $('#full-date').html('Full' + '<br/>' + 'Calendar'); }); // Function to load jQuery UI if not loaded function ensureJQueryUI() { return new Promise((resolve, reject) => { if (typeof $.fn.datepicker === 'function') { resolve(); } else { // Load CSS first if (!document.querySelector('link[href*="jquery-ui"]')) { const css = document.createElement('link'); css.rel = 'stylesheet'; css.href = 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/themes/base/jquery-ui.min.css'; document.head.appendChild(css); } // Load JS const script = document.createElement('script'); script.src = 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js'; script.onload = () => { resolve(); }; script.onerror = () => { reject(new Error('Failed to load jQuery UI')); }; document.head.appendChild(script); } }); } // Fallback click handler: only acts when jQuery UI hasn't initialized yet // (e.g. user clicks before async jQuery UI load completes) // When hasDatepicker is already set, jQuery UI handles showing natively via focus event. $('#full-date').on('click', function() { const $el = $(this); $('.date-single').removeClass('selected'); $el.addClass('selected'); // Already initialized - jQuery UI handles showing natively, don't interfere if ($el.hasClass('hasDatepicker')) { return; } // Determine minDate var minDate = +7; // jQuery UI still loading - wait for it, then init and show manually ensureJQueryUI().then(function() { if (!$el.hasClass('hasDatepicker')) { $el.datepicker({ minDate: minDate, dateFormat: 'Mdd_yy', beforeShowDay: disabledays, onSelect: function (date) { $("#deliveryDate, #deliveryDateFull label ").hide(); $("#deliveryDateFull").addClass("filled"); $(".btnChangeDeliveryDate").removeClass("hide"); $("#full-date").prop('disabled', true); $('#propDeliveryDate, #properties-delivery-date').val('Kirim_'+date); $(".date-full").addClass("selected"); $(".date-single, .calendar-group").removeClass("selected"); $("#propDeliveryTime").val(''); $("#properties-delivery-time").val('-'); $(".time-single").removeClass("selected"); const select = $('#cities option:selected').val(); if(select !== 'Jakarta' && select !== 'Depok' && select !== 'Bekasi' && select !== 'Tangerang') { $("#noteDeliveryDate").show(); $("#noteDeliveryDate").html(`Order akan dikirim pada tanggal ${date} dari Jakarta. Estimasi tanggal diterima akan disesuaikan dengan waktu pengiriman oleh pihak ekspedisi ke lokasi Anda.`); } else { $("#noteDeliveryDate").hide(); } if (typeof validatePersonalizeButton === 'function') { validatePersonalizeButton(); } } }); } $el.datepicker('show'); }).catch(function(err) { console.error('Failed to load jQuery UI:', err); alert('Calendar widget is not available. Please refresh the page.'); }); }); // $("tr").each(function(){ // if($(this).text().match('SKU')) { // $(".sku-product").html($(this).parents("table").html()) // } // }) $("#product-image").scroll(function(){ $(".desc-add").each(function(){ const img = $(this).find("img") const src = img.data("src") img.attr("src", src) }) }) $(".product-fixed").hide() let target = $("#personalizeBtn") $(".product-meta").scroll(function() { if ($(window).scrollTop() >= target.offset().top ) { $(".product-fixed").addClass("show") } else { $(".product-fixed").removeClass("show") } }); $(window).scroll(function() { if ($(window).scrollTop() >= target.offset().top ) { $(".product-fixed").addClass("show") } else { $(".product-fixed").removeClass("show") } }); // Add event listeners to trigger card preview updates $(document).on('input change keyup', '#senderCard, #kartu-ucapan, [data-properties="ucapan"], [data-properties="kartu-nama-pengirim"]', function() { $(document).trigger('cardDataUpdated'); }); // Trigger card preview update when photo or video is uploaded $(document).on('photoUploaded videoUploaded', function() { $(document).trigger('cardDataUpdated'); }); }); </script> <script> // </script> <script> $(document).ready(function(){ $('table tr td').each(function(){ var texto = $(this).text(); var nextto = $(this).next("td"); var sku = $("#data-sku").val() if(texto == 'SKU'){ nextto.text(sku) } }); $(".stamped-summary-actions-newquestion").text("Tulis Pertanyaan"); $(".stamped-summary-actions-newreview").text("Tulis Review"); $("#tab-questions").text("Pertanyaan"); $(".freeship .icon").click(function(){ $(".fs-content").slideToggle(); $(this).parents(".freeship").toggleClass("expand"); }); var $easyzoom = $('.easyzoom').easyZoom(); // Setup thumbnails example var api1 = $easyzoom.filter('.easyzoom--with-thumbnails').data('easyZoom'); $('.thumbnails').on('click', 'a', function(e) { var $this = $(this); e.preventDefault(); // Use EasyZoom's `swap` method api1.swap($this.data('standard'), $this.attr('href')); }); $('#playerID').click(function(){ var videoURL = $('#VdoID').attr('src'), dataplay = $('#VdoID').attr('data-play'); //for check autoplay //if not set autoplay=1 if(dataplay == 0 ){ $('#VdoID').attr('src',videoURL+'?autoplay=1'); $('#VdoID').attr('data-play',1); } else{ var videoURL = $('#VdoID').attr('src'); videoURL = videoURL.replace("?autoplay=1", ""); $('#VdoID').prop('src',''); $('#VdoID').prop('src',videoURL); $('#VdoID').attr('data-play',0); } }); $(".product-photo-thumb-video").click(function(e){ e.preventDefault(); var newEmbed = $(this).attr('href'); $("#featured-image-product").addClass("img-video"); $("#ProductPhotoImg").hide(); $("#featured-image-product .video").show(); $("#featured-image-product iframe").attr('src', newEmbed); $("#VdoID")[0].src += "&autoplay=1"; }); $(".product-single__thumbnail").click(function(evt){ evt.preventDefault(); $("#featured-image-product").removeClass("img-video"); $("#ProductPhotoImg").show(); $("#featured-image-product .video").hide(); $("#featured-image-product iframe").attr('src', ''); }); if($('#product-meta .short-desc > div').length >= 1){ //console.log('div detected') var replacer = $('#product-meta .short-desc > div').contents(); $('#product-meta .short-desc > div').replaceWith(replacer); var cAssured = $('.c-assured').detach(); cAssured.insertAfter('.meta-sds .stock-info'); } const productMeta = $(".product-meta") if(productMeta.height() > 600) { $("#product-image, .product-meta").css("max-height", productMeta) } $(".heading-toggle").click(function(){ $(this).parent().toggleClass("open") }); }); </script> <script type="application/json" id="ProductJson-Product"> {"id":7535020376279,"title":"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat","handle":"the-novo-enchanted-dome-passionate-red","description":"\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePlatform Terbaik Dengan Sistem Modern\u003c\/strong\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDiawetkan dengan Proses Alami Sehingga Bisa \u003c\/strong\u003e\u003cstrong\u003eBertahan Hingga 3 Tahun\u003c\/strong\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDisplay Menawan dalam \u003cem\u003eBorosilicate Glass Dome\u003c\/em\u003e Eksklusif\u003c\/strong\u003e\u003cstrong\u003e dengan Drawer Box Premium + Pita Satin Outerbloom\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003e\"For a love that is romantic. A passionate romance that everyone long for their whole life and only a few are lucky enough to experience it.\"\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eHOKI88BOS menhadirkan layanan eklusif si aplikasi slot88 yang di dukung dengan server terbaik dengan akses cepat dan juga menawarkan permainan terbaru dengan winrate tinggi di jamin mudah menang.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eMawar Passionate Red adalah bunga pilihan yang dipetik oleh tangan para ahli bunga kami secara teliti, kemudian diawetkan melalui serangkaian proses alami sehingga bisa sampai di tangan Anda dalam kondisi sempurna, layaknya bunga segar yang mekar di taman. Dirangkai dengan indah di dalam \u003ci\u003eglass dome \u003c\/i\u003eeksklusif, berikan Enchanted Dome - Passionate Red kepada si dia untuk menunjukkan bahwa Anda mencintainya sepenuh hati.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003e\u003cem\u003e\u003ciframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/tGskw4gXTy0\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\u003c\/em\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003ctable width=\"100%\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSKU\u003c\/td\u003e\n\u003ctd\u003e[C]OUTBUN1159\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eJumlah Bunga\u003c\/td\u003e\n\u003ctd\u003e1 Tangkai\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eJenis dan Warna Bunga\u003c\/td\u003e\n\u003ctd\u003ePreserved Rose Warna Passionate Red\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eUkuran Box \u003c\/td\u003e\n\u003ctd\u003e18,5 cm x 18,5 cm x 30,5 cm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003ch2\u003eAs Seen Blooms in The Arms of:\u003c\/h2\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1589\/6833\/files\/WhatsApp_Image_2019-02-04_at_11.32.58_AM_1_large.jpeg?v=1549266372\" alt=\"\" width=\"418\" height=\"370\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1589\/6833\/files\/Screenshot_20200114-161208_2_480x480.png?v=1578994082\" alt=\"\" width=\"401\" height=\"448\"\u003e\u003c\/p\u003e","published_at":"2022-04-18T19:12:04","created_at":"2022-02-04T13:19:23","vendor":"Outerbloom","type":"Bunga Outerbloom","tags":["Brand_Outerbloom","Bunga","Bunga Batam","Bunga Jakarta","Bunga Luar Kota","Bunga Pria","card","care-instruction-ff","flomart","Forever Flower","formdate","icon-card","icon-gift","icon-sameday","Inhouse","just because","Luar Kota","Luxury","MonSunInhouse","Novo Dome","Pengiriman_Bali","Pengiriman_Balikpapan","Pengiriman_Bandung","Pengiriman_Banjarmasin","Pengiriman_Batam","Pengiriman_Bekasi","Pengiriman_Bogor","Pengiriman_Depok","Pengiriman_Jakarta","Pengiriman_Jambi","Pengiriman_Kota Lainnya","Pengiriman_Malang","Pengiriman_Manado","Pengiriman_Medan","Pengiriman_Padang","Pengiriman_Palembang","Pengiriman_Pontianak","Pengiriman_Riau","Pengiriman_Samarinda","Pengiriman_Semarang","Pengiriman_Surabaya","Pengiriman_Tangerang","Pengiriman_Yogyakarta","pickup-itcinhouse","POO Bunga","Review_NoGrouping","ship-foreverflower","sorry","Special Edition","Style_Luxury","takeoutselfpickup","Untuk_Anniversary","Untuk_Hari Ibu","Untuk_Hari Raya","Untuk_Pernikahan","Untuk_Ulang Tahun","Untuk_Valentine","uploadfotocard","upsell","upsell-inhouse","Val25","Warna_Red"],"price":"NaN","price_min":"NaN","price_max":"NaN","price_varies":false,"compare_at_price":"NaN","compare_at_price_min":"NaN","compare_at_price_max":"NaN","compare_at_price_varies":false,"all_variant_ids":[42371068461271],"variants":[{"id":42371068461271,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"[C]OBIBUN1159","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat","public_title":null,"options":["Default Title"],"price":188500000,"weight":5000,"compare_at_price":260000000,"inventory_quantity":150,"inventory_management":"shopify","inventory_policy":"continue","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[]}],"available":false,"images":["https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1643976096","\/\/outerbloom.com\/cdn\/shop\/files\/Red_1_6422b21f-35b7-4605-9453-eea72a33e83e.jpg?v=1705573033","\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome--All_3_88eec6c1-ed15-4162-8f86-80e35bffc9f5.jpg?v=1705573033","\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome---Passionate-Red.jpg?v=1705573033","\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome---Passionate-Red_3.jpg?v=1705573033","\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome--All_cde40077-c7ae-4fa0-ba9f-ec427284ac1b.jpg?v=1705573033","\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome--All_2_0b2daada-3004-4dc0-ac27-189b52b89aa3.jpg?v=1705573033","\/\/outerbloom.com\/cdn\/shop\/files\/OuterbloomForeverFlowerDome_800x_0978a02c-9a4b-4f26-b829-56e2fb346b25.jpg?v=1705573033","\/\/outerbloom.com\/cdn\/shop\/files\/Rose-dome-red-with-model_4_249383db-ecaa-4f67-bccd-36eeb3ea48a2.png?v=1705572993","\/\/outerbloom.com\/cdn\/shop\/files\/Rose-dome-red-with-model_6_1d4e53f5-9cf6-4539-896b-471bf1398034.png?v=1705572993","\/\/outerbloom.com\/cdn\/shop\/files\/Rose-dome-red-with-model_7_c1df6905-221c-474e-bfc3-eb7d4df50d56.jpg?v=1705572993"],"featured_image":"https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1643976096","options":["Title"],"url":"\/products\/the-novo-enchanted-dome-passionate-red"} </script> <script type="application/json" id="VariantJson-Product"> [ { "incoming": false, "next_incoming_date": null } ] </script> </div> <script src="//outerbloom.com/cdn/shopifycloud/storefront/assets/themes_support/option_selection-b017cd28.js" type="text/javascript"></script> <style> .stamped-review-header-title, .stamped-review-header .author, .stamped-review-content-body, .stamped-sort-select, .stamped-review-header .verified-badge[data-type=buyer]:after, .stamped-review-header-byline, .stamped-review-reply-body {font-size: 14px!important;font-family: 'Barlow',sans-serif!important;} .stamped-review {margin-bottom: 0;} .stamped-review-body {padding-left: 65px;} .stamped-review:first-child {padding-top: 25px;} .stamped-review-content {clear: none;} .stamped-review-reply {margin: 15px 0 0 65px;background: #f2f2f2;border-left: none;} .stamped-review-reply-body {padding-left: 65px;} .stamped-review-header .author {text-transform: capitalize;} .stamped-questions .stamped-review-content {padding-left: 65px;} .stamped-pagination {margin: 20px 0 0;} .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;} .stamped-pagination li a {color: #121212;padding: 13px 18px;vertical-align: middle;display: block;} .stamped-pagination li.active a {background-color: #ddd;font-weight: 400;} .stamped-pagination li:hover a {background: #ddd;} .stamped-pagination .next {border-right: 1px solid #ccc;} .stamped-pagination li:first-child {border-top-left-radius: 5px;border-bottom-left-radius: 5px;} .stamped-pagination li:last-child {border-top-right-radius: 5px;border-bottom-right-radius: 5px;} #stamped-pagination-question span.page {display: inline-block;border: 1px solid #ccc;width: 47px;} #stamped-pagination-question span {font-size: 14px;} #stamped-pagination-question .page.active {padding: 12px;font-weight: 400;background: #ddd;} #stamped-pagination-question a, #stamped-pagination-question .page.active {color: #121212;padding: 13px 18px;vertical-align: middle;display: inline-block;} .stamped-pagination-deco {color: #121212;padding: 13px 18px;width: 47px;vertical-align: middle;display: inline-block;border: 1px solid #ccc;padding: 12px;} .stamped-pagination-prev, .stamped-pagination-next {position: inherit;} .stamped-pagination-prev a, .stamped-pagination-next a {width: auto!important;border: 1px solid #ccc;} @media (max-width: 480px){ .stamped-review-reply {margin-left: 0!important;} select.stamped-sort-select {font-size: 13px!important;} } #product-reviews .stamped-summary-ratings, #product-reviews .stamped-summary-actions, .stamped-content { display: block !important; } </style> <script> var selectCallback = function(variant, selector) { timber.productPage({ money_format: "Rp {{amount_no_decimals}}", variant: variant, selector: selector }); }; jQuery(function($) { new Shopify.OptionSelectors('productSelect', { product: {"id":7535020376279,"title":"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat","handle":"the-novo-enchanted-dome-passionate-red","description":"\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePlatform Terbaik Dengan Sistem Modern\u003c\/strong\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDiawetkan dengan Proses Alami Sehingga Bisa \u003c\/strong\u003e\u003cstrong\u003eBertahan Hingga 3 Tahun\u003c\/strong\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDisplay Menawan dalam \u003cem\u003eBorosilicate Glass Dome\u003c\/em\u003e Eksklusif\u003c\/strong\u003e\u003cstrong\u003e dengan Drawer Box Premium + Pita Satin Outerbloom\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003e\"For a love that is romantic. A passionate romance that everyone long for their whole life and only a few are lucky enough to experience it.\"\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eHOKI88BOS menhadirkan layanan eklusif si aplikasi slot88 yang di dukung dengan server terbaik dengan akses cepat dan juga menawarkan permainan terbaru dengan winrate tinggi di jamin mudah menang.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eMawar Passionate Red adalah bunga pilihan yang dipetik oleh tangan para ahli bunga kami secara teliti, kemudian diawetkan melalui serangkaian proses alami sehingga bisa sampai di tangan Anda dalam kondisi sempurna, layaknya bunga segar yang mekar di taman. Dirangkai dengan indah di dalam \u003ci\u003eglass dome \u003c\/i\u003eeksklusif, berikan Enchanted Dome - Passionate Red kepada si dia untuk menunjukkan bahwa Anda mencintainya sepenuh hati.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003e\u003cem\u003e\u003ciframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/tGskw4gXTy0\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\u003c\/em\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003ctable width=\"100%\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSKU\u003c\/td\u003e\n\u003ctd\u003e[C]OUTBUN1159\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eJumlah Bunga\u003c\/td\u003e\n\u003ctd\u003e1 Tangkai\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eJenis dan Warna Bunga\u003c\/td\u003e\n\u003ctd\u003ePreserved Rose Warna Passionate Red\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eUkuran Box \u003c\/td\u003e\n\u003ctd\u003e18,5 cm x 18,5 cm x 30,5 cm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003ch2\u003eAs Seen Blooms in The Arms of:\u003c\/h2\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1589\/6833\/files\/WhatsApp_Image_2019-02-04_at_11.32.58_AM_1_large.jpeg?v=1549266372\" alt=\"\" width=\"418\" height=\"370\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1589\/6833\/files\/Screenshot_20200114-161208_2_480x480.png?v=1578994082\" alt=\"\" width=\"401\" height=\"448\"\u003e\u003c\/p\u003e","published_at":"2022-04-18T19:12:04+07:00","created_at":"2022-02-04T13:19:23+07:00","vendor":"Outerbloom","type":"Bunga Outerbloom","tags":["Brand_Outerbloom","Bunga","Bunga Batam","Bunga Jakarta","Bunga Luar Kota","Bunga Pria","card","care-instruction-ff","flomart","Forever Flower","formdate","icon-card","icon-gift","icon-sameday","Inhouse","just because","Luar Kota","Luxury","MonSunInhouse","Novo Dome","Pengiriman_Bali","Pengiriman_Balikpapan","Pengiriman_Bandung","Pengiriman_Banjarmasin","Pengiriman_Batam","Pengiriman_Bekasi","Pengiriman_Bogor","Pengiriman_Depok","Pengiriman_Jakarta","Pengiriman_Jambi","Pengiriman_Kota Lainnya","Pengiriman_Malang","Pengiriman_Manado","Pengiriman_Medan","Pengiriman_Padang","Pengiriman_Palembang","Pengiriman_Pontianak","Pengiriman_Riau","Pengiriman_Samarinda","Pengiriman_Semarang","Pengiriman_Surabaya","Pengiriman_Tangerang","Pengiriman_Yogyakarta","pickup-itcinhouse","POO Bunga","Review_NoGrouping","ship-foreverflower","sorry","Special Edition","Style_Luxury","takeoutselfpickup","Untuk_Anniversary","Untuk_Hari Ibu","Untuk_Hari Raya","Untuk_Pernikahan","Untuk_Ulang Tahun","Untuk_Valentine","uploadfotocard","upsell","upsell-inhouse","Val25","Warna_Red"],"price":188500000,"price_min":188500000,"price_max":188500000,"available":true,"price_varies":false,"compare_at_price":260000000,"compare_at_price_min":260000000,"compare_at_price_max":260000000,"compare_at_price_varies":false,"variants":[{"id":42371068461271,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"[C]OBIBUN1159","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat","public_title":null,"options":["Default Title"],"price":188500000,"weight":5000,"compare_at_price":260000000,"inventory_quantity":150,"inventory_management":"shopify","inventory_policy":"continue","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1643976096","\/\/outerbloom.com\/cdn\/shop\/files\/Red_1_6422b21f-35b7-4605-9453-eea72a33e83e.jpg?v=1705573033","\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome--All_3_88eec6c1-ed15-4162-8f86-80e35bffc9f5.jpg?v=1705573033","\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome---Passionate-Red.jpg?v=1705573033","\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome---Passionate-Red_3.jpg?v=1705573033","\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome--All_cde40077-c7ae-4fa0-ba9f-ec427284ac1b.jpg?v=1705573033","\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome--All_2_0b2daada-3004-4dc0-ac27-189b52b89aa3.jpg?v=1705573033","\/\/outerbloom.com\/cdn\/shop\/files\/OuterbloomForeverFlowerDome_800x_0978a02c-9a4b-4f26-b829-56e2fb346b25.jpg?v=1705573033","\/\/outerbloom.com\/cdn\/shop\/files\/Rose-dome-red-with-model_4_249383db-ecaa-4f67-bccd-36eeb3ea48a2.png?v=1705572993","\/\/outerbloom.com\/cdn\/shop\/files\/Rose-dome-red-with-model_6_1d4e53f5-9cf6-4539-896b-471bf1398034.png?v=1705572993","\/\/outerbloom.com\/cdn\/shop\/files\/Rose-dome-red-with-model_7_c1df6905-221c-474e-bfc3-eb7d4df50d56.jpg?v=1705572993"],"featured_image":"https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1643976096","options":["Title"],"media":[{"alt":null,"id":29133671760087,"position":1,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1643976096"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1643976096","width":850},{"alt":null,"id":32527392080087,"position":2,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/Red_1_6422b21f-35b7-4605-9453-eea72a33e83e.jpg?v=1705573033"},"aspect_ratio":1.0,"height":1080,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/Red_1_6422b21f-35b7-4605-9453-eea72a33e83e.jpg?v=1705573033","width":1080},{"alt":"https:\/\/www.youtube.com\/embed\/yBb6yRo1y0Q?si=WOLQhnYOWGPpfQHl","id":32527252750551,"position":3,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome--All_3_88eec6c1-ed15-4162-8f86-80e35bffc9f5.jpg?v=1705573033"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome--All_3_88eec6c1-ed15-4162-8f86-80e35bffc9f5.jpg?v=1705573033","width":850},{"alt":null,"id":32527252783319,"position":4,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome---Passionate-Red.jpg?v=1705573033"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome---Passionate-Red.jpg?v=1705573033","width":850},{"alt":null,"id":32527252816087,"position":5,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome---Passionate-Red_3.jpg?v=1705573033"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome---Passionate-Red_3.jpg?v=1705573033","width":850},{"alt":null,"id":32527252685015,"position":6,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome--All_cde40077-c7ae-4fa0-ba9f-ec427284ac1b.jpg?v=1705573033"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome--All_cde40077-c7ae-4fa0-ba9f-ec427284ac1b.jpg?v=1705573033","width":850},{"alt":null,"id":32527252717783,"position":7,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome--All_2_0b2daada-3004-4dc0-ac27-189b52b89aa3.jpg?v=1705573033"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/The-Novo-Enchanted-Dome--All_2_0b2daada-3004-4dc0-ac27-189b52b89aa3.jpg?v=1705573033","width":850},{"alt":null,"id":32527392309463,"position":8,"preview_image":{"aspect_ratio":1.0,"height":640,"width":640,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/OuterbloomForeverFlowerDome_800x_0978a02c-9a4b-4f26-b829-56e2fb346b25.jpg?v=1705573033"},"aspect_ratio":1.0,"height":640,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/OuterbloomForeverFlowerDome_800x_0978a02c-9a4b-4f26-b829-56e2fb346b25.jpg?v=1705573033","width":640},{"alt":null,"id":32527301542103,"position":9,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/Rose-dome-red-with-model_4_249383db-ecaa-4f67-bccd-36eeb3ea48a2.png?v=1705572993"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/Rose-dome-red-with-model_4_249383db-ecaa-4f67-bccd-36eeb3ea48a2.png?v=1705572993","width":850},{"alt":null,"id":32527301574871,"position":10,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/Rose-dome-red-with-model_6_1d4e53f5-9cf6-4539-896b-471bf1398034.png?v=1705572993"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/Rose-dome-red-with-model_6_1d4e53f5-9cf6-4539-896b-471bf1398034.png?v=1705572993","width":850},{"alt":null,"id":32527301607639,"position":11,"preview_image":{"aspect_ratio":1.0,"height":850,"width":850,"src":"\/\/outerbloom.com\/cdn\/shop\/files\/Rose-dome-red-with-model_7_c1df6905-221c-474e-bfc3-eb7d4df50d56.jpg?v=1705572993"},"aspect_ratio":1.0,"height":850,"media_type":"image","src":"\/\/outerbloom.com\/cdn\/shop\/files\/Rose-dome-red-with-model_7_c1df6905-221c-474e-bfc3-eb7d4df50d56.jpg?v=1705572993","width":850}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePlatform Terbaik Dengan Sistem Modern\u003c\/strong\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDiawetkan dengan Proses Alami Sehingga Bisa \u003c\/strong\u003e\u003cstrong\u003eBertahan Hingga 3 Tahun\u003c\/strong\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDisplay Menawan dalam \u003cem\u003eBorosilicate Glass Dome\u003c\/em\u003e Eksklusif\u003c\/strong\u003e\u003cstrong\u003e dengan Drawer Box Premium + Pita Satin Outerbloom\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003e\"For a love that is romantic. A passionate romance that everyone long for their whole life and only a few are lucky enough to experience it.\"\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eHOKI88BOS menhadirkan layanan eklusif si aplikasi slot88 yang di dukung dengan server terbaik dengan akses cepat dan juga menawarkan permainan terbaru dengan winrate tinggi di jamin mudah menang.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eMawar Passionate Red adalah bunga pilihan yang dipetik oleh tangan para ahli bunga kami secara teliti, kemudian diawetkan melalui serangkaian proses alami sehingga bisa sampai di tangan Anda dalam kondisi sempurna, layaknya bunga segar yang mekar di taman. Dirangkai dengan indah di dalam \u003ci\u003eglass dome \u003c\/i\u003eeksklusif, berikan Enchanted Dome - Passionate Red kepada si dia untuk menunjukkan bahwa Anda mencintainya sepenuh hati.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003e\u003cem\u003e\u003ciframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/tGskw4gXTy0\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\u003c\/em\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003ctable width=\"100%\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSKU\u003c\/td\u003e\n\u003ctd\u003e[C]OUTBUN1159\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eJumlah Bunga\u003c\/td\u003e\n\u003ctd\u003e1 Tangkai\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eJenis dan Warna Bunga\u003c\/td\u003e\n\u003ctd\u003ePreserved Rose Warna Passionate Red\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eUkuran Box \u003c\/td\u003e\n\u003ctd\u003e18,5 cm x 18,5 cm x 30,5 cm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003ch2\u003eAs Seen Blooms in The Arms of:\u003c\/h2\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1589\/6833\/files\/WhatsApp_Image_2019-02-04_at_11.32.58_AM_1_large.jpeg?v=1549266372\" alt=\"\" width=\"418\" height=\"370\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1589\/6833\/files\/Screenshot_20200114-161208_2_480x480.png?v=1578994082\" alt=\"\" width=\"401\" height=\"448\"\u003e\u003c\/p\u003e"}, onVariantSelected: selectCallback, enableHistoryState: true }); // Add label if only one product option and it isn't 'Title'. Could be 'Size'. // Hide selectors if we only have 1 variant and its title contains 'Default'. $('.selector-wrapper').hide(); }); </script> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Product", "offers": { "@type": "Offer", "availability":"https://schema.org/InStock", "price": 1885000, "priceValidUntil": "11-03-2026", "priceCurrency": "IDR", "url": "https://www.bellabasera.com/about.php" }, "brand": { "@type": "Brand", "name": "HOKI88BOS" }, "sku": "7535020376279", "gtin13": "", "name": "HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat", "description": "HOKI88BOS menhadirkan layanan eklusif si aplikasi slot88 yang di dukung dengan server terbaik dengan akses cepat dan juga menawarkan permainan terbaru dengan winrate tinggi di jamin mudah menang.", "category": "Bunga Outerbloom", "url": "https://www.bellabasera.com/about.php", "image": { "@type": "ImageObject", "url": "https://outerbloom.com/cdn/shop/products/The-Novo-Enchanted-Dome---Passionate-Red_2_small.jpg?v=1643976096", "image": "https://outerbloom.com/cdn/shop/products/The-Novo-Enchanted-Dome---Passionate-Red_2_small.jpg?v=1643976096", "name": "HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat", "width": 1024, "height": 1024 } } </script> <script id="bss-ltap-hide-price" type="text/javascript"> !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)}))})),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)})),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()}if("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)}if(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");c&&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-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");i&&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--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.myshopify.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");e.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=o.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");if(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();let 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()}]); </script> </main> <div id="shopify-section-newsletter" class="shopify-section"> <style> #shopify-section-newsletter { background-color: #EEEEEE; margin-bottom: 0; } input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:active, input:-webkit-autofill:focus { -webkit-box-shadow:0 0 0 50px white inset; -webkit-text-fill-color: #212121; } .section-newsletter { max-width: 800px; margin: auto; padding: 50px 0; } .section-newsletter h2 { font-weight: 700; font-size: 24px; } .section-newsletter input[type="email"] { width: 100%; text-align: center; border: none; border-bottom: 1px solid #212121; font-size: 16px; color: #757575; background-color: #eeeeee; } .section-newsletter .row label { font-size: 14px; cursor: pointer; } .section-newsletter .radio-inline input { width: auto; } .section-newsletter .btn { width: 130px; border: 1px solid #212121; box-shadow: none; font-size: 16px; font-weight: 500; text-transform: uppercase; } .section-newsletter form { margin: 30px 0 60px; } .section-newsletter input[type="radio"] { position: absolute; width: 1px; height: 1px; } .section-newsletter [type="radio"]:checked + label, .section-newsletter [type="radio"]:not(:checked) + label { position: relative; padding-left: 28px; cursor: pointer; line-height: 20px; display: inline-block; color: #666; } .section-newsletter [type="radio"]:checked + label:before, .section-newsletter [type="radio"]:not(:checked) + label:before { content: ''; position: absolute; left: 0; top: 0; width: 18px; height: 18px; border: 1px solid #ddd; border-radius: 100%; background: #fff; } .section-newsletter [type="radio"]:checked + label:after, .section-newsletter [type="radio"]:not(:checked) + label:after { content: ''; width: 12px; height: 12px; background: #212121; position: absolute; top: 3px; left: 3px; border-radius: 100%; -webkit-transition: all 0.2s ease; transition: all 0.2s ease; } .section-newsletter [type="radio"]:not(:checked) + label:after { opacity: 0; -webkit-transform: scale(0); transform: scale(0); } .opt-newsletter {display:none;} .footer-newsletter p, .footer-newsletter p a { color: #757575; } @media (max-width:991px){ .section-newsletter h2 { font-size: 32px; } .section-newsletter input { width: 300px; font-size: 14px; } .section-newsletter { padding: 50px 20px; } } @media (max-width: 480px){ .section-newsletter input[type="email"] {font-size: 16px;} } </style> <div class="section-newsletter text-center"> <div class="header-newsletter"> <h2>HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat</h2> </div> <form action="https://submit.jotform.com/submit/201588966843067/" method="post" id="mc-embedded-subscribe-form" name="popup_form" target="_blank" class="input-group w-100" onsubmit="return OnSubmitForm();" data-hs-cf-bound="true"> <input type="hidden" name="formID" value="201588966843067" /> <input type="email" name="q4_email" placeholder="Drop your email here to stay in touch with us." required="" /> <div class="row mt-2 opt-newsletter"> <div class="col-md-5"> <div class="row"> <div class="radio-inline col-6 text-left"> <input type="radio" id="optwoman" name="q3_gender" value="woman" class="text-left" /> <label for="optwoman">WOMAN</label> </div> <div class="radio-inline col-6 text-left"> <input type="radio" id="optmen" name="q3_gender" value="man" class="text-left" /> <label for="optmen">MAN</label> </div> </div> </div> <div class="col-md-7 text-left"> <div class="row"> <div class="col-12 mt-2 mt-md-0"> <input type="radio" id="optagree" name="optagree" value="yes" class="text-left" required="" /> <label for="optagree" class="radio-inline text-left"> I have read and understand the information on the use of my personal data explained in the Privacy Policy, and I agree to receive customized commercial communications from Outerbloom by email and other means. </label> </div> </div> </div> </div> <button type="submit" class="btn mt-3 mt-lg-5">Sign Up</button> </form> <div class="footer-newsletter"> <p> By signing up, you agree to receive automated marketing messages from OUTERBLOOM. View <a href="">Terms & Privacy</a> here. </p> </div> </div> <script> $(document).ready(function(){ $('.section-newsletter input[type="email"]').bind('input propertychange', function() { if(($(this).val().length) > 0) { $('.opt-newsletter').css('display','flex'); }else { $('.opt-newsletter').css('display','none'); } }); }); </script> </div> <div id="shopify-section-Footer" class="shopify-section Footer Section"><!-- begin site-footer --> <link href="//outerbloom.com/cdn/shop/t/138/assets/section-footer.css?v=100040659411828343611752652419" rel="stylesheet" type="text/css" media="all" /> <style> .site-footer__list-item a {color: #212121;font-size: 14px;font-weight: 400;} .social-icons li {display: inline-block;} .social-icons li a {display: block;color: #212121!important;font-size: 16px;} .social-icons li a img {vertical-align: middle;height: 20px;margin-right: 7px;} .icon-footer-whatsapp .icon-svg {width: 18px;height: 18px;vertical-align: middle;} .copyright * {display: inline-block;vertical-align: middle;color: #212121;letter-spacing: normal!important;font-size: 16px!important;} .copyright a {border-left: 1px solid;padding-left: 10px;margin-left: 5px;} .icon-minus {display:none} .bc-border { border-top: 1px solid #C4C4C4; border-bottom: 1px solid #C4C4C4; padding: 40px 0; margin-bottom: 50px; } @media (min-width: 769px) { .site-footer__list-item{margin-bottom:8px;} } @media (max-width: 992px){ ul.site-footer__list {display: none;} .site-footer__section .bottom-line .icon {float: right;width: 20px;height: 20px;} .bottom-line.site-footer__section-title.open .icon-minus {display: block;} .bottom-line.site-footer__section-title.open .icon-plus {display: none;} .site-footer__list.cust-service {margin-bottom: 25px;} .site-footer__list.cust-service li {width: 100%;text-align: center;} /*.site-footer__list.cust-service li:first-child {border-right: 1px solid #757575;} .site-footer__list.cust-service li:last-child {border-left: 1px solid #757575;}*/ } @media (max-width: 768px) { .seo-footer, .seo-article {padding-top: 0!important;} .copyright {padding: 0px 0 0!important;} .copyright span { width: 100%; font-size: 14px!important; } .copyright a { padding: 0; margin: 0 5px; border: none; font-size: 14px!important; } .article-lists {column-count: 2;-webkit-column-count: 2;} } /** Newsletter Footer **/ .site-footer__newsletter-input {height: 37px;border-radius: 0;}#mc-embedded-subscribe-form .input-group-btn {width: initial;} /** Method Footer **/ .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;} /** SEO **/ .c-seo-links h6 {font-size: 24px;font-weight: 600;} .c-seo-links .about_text p {font-size: 14px!important;font-weight: 400;} .seo-article * {color: #212121!important;} .seo-article a:hover {text-decoration: underline;} </style> <footer class="site-footer" role="contentinfo"> <div class="footer-menu"> <div class="container pt-0"> <div class="row px-1 px-md-0 pb-4 pb-md-0"> <div class="footer-navigation col-12"> <div class="row justify-content-around m-0 m-sm-0"> <div class="site-footer__section site-footer__section-mbl col-lg-3 mt-3 mt-md-0 p-0 d-lg-none"> <h5 class="bottom-line site-footer__section-title mb-1"> Layanan Customers <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"> <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> <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"> <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> </h5> <ul class="site-footer__list cust-service ml-0 contact-footer-mobile d-flex d-lg-block justify-content-between"> <li class="site-footer__list-item fist list-unstyled icon-footer-whatsapp"> <a href="https://api.whatsapp.com/send?phone=6281514234600&text=https://outerbloom.com" target="_blank" class="small"><span class="lc-icon"> <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> <span class="d-none d-lg-inline-block">0815-1423-4600</span> <span class="d-lg-none lc-icon-text align-middle">Whatsapp</span> </a> </li> <li class="site-footer__list-item second list-unstyled"> <a href="tel:+622157937918" class="small" target="_blank"> <span class="lc-icon"> <img src="//outerbloom.com/cdn/shop/t/138/assets/call-footer.svg?v=66245936344487562681752652418" alt="Icon Phone" /> </span> <span class="d-none d-lg-inline-block">021-57937918</span> <span class="d-lg-none lc-icon-text align-middle">Phone</span> </a> </li> </ul> </div> <div class="site-footer__section col-lg-3 mt-3 mt-md-0 p-0"> <h5 class="bottom-line footer-trigger site-footer__section-title mb-1"> Info Outerbloom <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"> <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> <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"> <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> </h5> <ul class="site-footer__list ml-0"> <li class="site-footer__list-item list-unstyled mb-1"><a href="https://outerbloom.com/blogs/inspirations" class="small">Blogs</a></li> <li class="site-footer__list-item list-unstyled mb-1"><a href="/pages/tentang-kami-2" class="small">Tentang Kami</a></li> <li class="site-footer__list-item list-unstyled mb-1"><a href="/pages/kebijakan-privasi" class="small">Kebijakan Privasi</a></li> <li class="site-footer__list-item list-unstyled mb-1"><a href="/pages/syarat-dan-ketentuan" class="small">Syarat & Ketentuan</a></li> <li class="site-footer__list-item list-unstyled mb-1"><a href="/pages/karir" class="small">Karir</a></li> <li class="site-footer__list-item list-unstyled mb-1"><a href="/collections" class="small">Daftar Koleksi</a></li> <li class="site-footer__list-item list-unstyled mb-1"><a href="/policies/terms-of-service" class="small">Terms of Service</a></li> <li class="site-footer__list-item list-unstyled mb-1"><a href="/policies/refund-policy" class="small">Refund policy</a></li> </ul> </div> <div class="site-footer__section col-lg-3 mt-3 mt-md-0 p-0"> <h5 class="bottom-line footer-trigger site-footer__section-title mb-1"> Bantuan <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"> <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> <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"> <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> </h5> <ul class="site-footer__list ml-0"> <li class="site-footer__list-item list-unstyled mb-1"><a href="https://outerbloom.com/account/login?return_url=%2Faccount" class="small">Akun Saya</a></li> <li class="site-footer__list-item list-unstyled mb-1"><a href="/pages/kontak-kami" class="small">Kontak Kami</a></li> <li class="site-footer__list-item list-unstyled mb-1"><a href="/pages/cara-order" class="small">Cara Order</a></li> <li class="site-footer__list-item list-unstyled mb-1"><a href="/pages/pembayaran" class="small">Pembayaran</a></li> <li class="site-footer__list-item list-unstyled mb-1"><a href="/pages/pengiriman" class="small">Pengiriman</a></li> <li class="site-footer__list-item list-unstyled mb-1"><a href="/pages/faq" class="small">FAQ</a></li> </ul> </div> <div class="site-footer__section col-lg-3 mt-3 mt-md-0 p-0"> <h5 class="bottom-line footer-trigger site-footer__section-title mb-1"> B2B Programs <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"> <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> <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"> <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> </h5> <ul class="site-footer__list ml-0"> <li class="site-footer__list-item list-unstyled mb-1"><a href="https://outerbloom.com/pages/corporate-program" class="small">Corporate Program</a></li> <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> </ul> <div class="d-none d-lg-block"> <h5 class="bottom-line site-footer__section-title mb-1"> Layanan Customers <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"> <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> <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"> <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> </h5> <ul class="site-footer__list cust-service ml-0 contact-footer-mobile d-flex d-lg-block justify-content-between"> <li class="site-footer__list-item fist list-unstyled icon-footer-whatsapp"> <a href="https://api.whatsapp.com/send?phone=6281514234600&text=https://outerbloom.com" target="_blank" class="small"><span class="lc-icon"> <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> <span class="d-none d-lg-inline-block">0815-1423-4600</span> <span class="d-lg-none lc-icon-text align-middle">Whatsapp</span> </a> </li> <li class="site-footer__list-item second list-unstyled"> <a href="tel:+622157937918" class="small" target="_blank"> <span class="lc-icon"> <img src="//outerbloom.com/cdn/shop/t/138/assets/call-footer.svg?v=66245936344487562681752652418" alt="Icon Phone" /> </span> <span class="d-none d-lg-inline-block">021-57937918</span> <span class="d-lg-none lc-icon-text align-middle">Phone</span> </a> </li> </ul> </div> </div> <div class="site-footer__section footer-method col-lg-3 mt-3 mt-md-0 p-0 d-block d-lg-none"> <h5 class="bottom-line footer-trigger site-footer__section-title mb-1"> Metode Pembayaran <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"> <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> <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"> <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> </h5> <ul class="site-footer__list ml-0 method-payment"> <li><img src="//outerbloom.com/cdn/shop/files/Payment_2021_Icon_ovo_d9091448-9e8e-4049-8b9c-47b022942188_65x.jpg?v=1614385284" alt="Icon Payment" /></li> <li><img src="//outerbloom.com/cdn/shop/files/Payment_2021_Icon_dana_1e55a7bb-cbe4-456e-89ed-fdb0cdd7fe38_65x.jpg?v=1614385284" alt="Icon Payment" /></li> <li><img src="//outerbloom.com/cdn/shop/files/Payment_2021_Icon_shopee_pay_c987eae8-c53e-4493-a243-52a015c87d34_65x.jpg?v=1614385285" alt="Icon Payment" /></li> <li><img src="//outerbloom.com/cdn/shop/files/Payment_2021_Icon_Link_aja_9a413328-03f7-4024-bc31-004f3197b700_65x.jpg?v=1614385285" alt="Icon Payment" /></li> <li><img src="//outerbloom.com/cdn/shop/files/Payment_2021_Icon_mastercard_bb55b01a-72ea-440a-9973-35609e91735f_65x.jpg?v=1614385285" alt="Icon Payment" /></li> <li><img src="//outerbloom.com/cdn/shop/files/Payment_2021_Icon_visa_de5de8b1-bd17-47dc-8f6e-eb78ae3e755a_65x.jpg?v=1614385285" alt="Icon Payment" /></li> <li><img src="//outerbloom.com/cdn/shop/files/Payment_2021_Icon_bca_96093da7-3e37-4a6b-a35f-3ea840732292_65x.jpg?v=1614385285" alt="Icon Payment" /></li> <li><img src="//outerbloom.com/cdn/shop/files/Payment_2021_Icon_mandiri_9966e6e5-1a91-4fd3-88dd-a7fe254f9371_65x.jpg?v=1614385285" alt="Icon Payment" /></li> <li><img src="//outerbloom.com/cdn/shop/files/Payment_2021_Icon_bri_63ba1791-409c-4049-a5d1-66358d5b2c8e_65x.jpg?v=1614385285" alt="Icon Payment" /></li> <li><img src="//outerbloom.com/cdn/shop/files/Payment_2021_Icon_bank_transfer_0edfac97-0da1-445b-8917-d91f0591091a_65x.jpg?v=1614385285" alt="Icon Payment" /></li> <li><img src="//outerbloom.com/cdn/shop/files/Payment_2021_Icon_alfamart_d9366c0c-8728-4c7e-bf11-5417b23e7cf0_65x.jpg?v=1614385285" alt="Icon Payment" /></li> <li><img src="//outerbloom.com/cdn/shop/files/Payment_2021_Icon_Paypal_d6e7bc39-f865-4429-a72b-1f02424c9aa8_65x.jpg?v=1614385285" alt="Icon Payment" /></li> </ul> </div> <div class="site-footer__section col-lg-3 mt-3 mt-md-0 p-0"> <div class="social-media-desktop d-none d-md-block"> <div class="social-media"> <h5 class="site-footer__section-title">Follow Our Social Medias</h5> <ul class="inline-list social-icons mt-2"> <li> <a href="https://twitter.com/outerbloom" title="Outerbloom on Twitter" target="_blank"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 22 22" fill="none"> <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"></path> </svg> </a> </li> <li> <a href="https://www.facebook.com/outerbloom/" title="Outerbloom on Facebook" target="_blank"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="23" viewBox="0 0 22 23" fill="none"> <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"></path> </svg> </a> </li> <li> <a href="https://www.instagram.com/outerbloom" title="Outerbloom on Instagram" target="_blank"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="23" viewBox="0 0 22 23" fill="none"> <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.18958 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"></path> </svg> </a> </li> <li> <a href="https://www.youtube.com/channel/UCSxRXcJS9JeYxRnq-m7MPYQ" title="Outerbloom on YouTube" target="_blank"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="20" viewBox="0 0 24 20" fill="none"> <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"></path> </svg> </a> </li> </ul> </div> </div> <p class="fs-body">Download our app.</p> <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="//outerbloom.com/cdn/shop/t/138/assets/google-play-logo.png?v=71844389215489113031752652420" alt="Logo Google Play" width="120" /></a> <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="//outerbloom.com/cdn/shop/t/138/assets/app-store-logo.png?v=41600940253401965221752652422" alt="Logo Google Play" width="120" /></a> </div> </div> <script> if ($(window).width() < 992) { $("document").ready(function(){ $(".site-footer__section .footer-trigger").click(function(){ $(this).toggleClass("open"); $(this).next("ul").slideToggle(); }); }); } </script> </div> </div> <div class="copyright"> <span>HOKI88BOS © 2026 OUTERBLOOM. All rights reserved | Bolonemasse </span> </div> </div> </div> </footer> <!-- //site-footer --> </div> </div><script src="https://www.googletagmanager.com/gtag/js?id=G-X26HYP4083"></script><script src="https://www.googletagmanager.com/gtag/js?id=AW-11020267329"></script><script src="https://www.googletagmanager.com/gtag/js?id=GT-NFDPL5Q"></script> <style> #CartDrawer .drawer__title {color: #fff;} #CartDrawer .drawer__close button {color: #fff;} #CartDrawer .drawer__header {background-color: #212121;padding: 5px 0;} #CartDrawer .drawer {top: 48px;} .login-customer a {text-decoration: underline;} </style> <div class="overlay overlay-cart"></div> <div id="CartDrawer" class="drawer drawer--right"> <div class="drawer__header pl-2 pr-2"> <div class="drawer__icon-cart display-table-cell"> <a href="/cart" class=""> <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> </a> </div> <div class="drawer__title h4">Keranjang Belanja</div> <div class="drawer__close js-drawer-close"> <button type="button"> <svg class="icon icon-close" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> <title>icon-close</title> <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> </svg> </button> </div> </div> <div id="CartContainer" class="p-2"></div> </div> <script> </script> <script src="//outerbloom.com/cdn/shop/t/138/assets/handlebars.min.js?v=79044469952368397291752652415" defer></script> <!-- /snippets/ajax-cart-template.liquid --> <script id="CartTemplate" type="text/template"> <form action="/cart" method="post" novalidate class="cart ajaxcart"> <div class="ajaxcart__inner" {{ cart.item_count }}> {{#items}} <div class="ajaxcart__product"> <div class="ajaxcart__row" data-line="{{line}}"> <div class="grid"> <div class="grid__item one-quarter"> <a href="{{url}}" class="ajaxcart__product-image"><img src="{{img}}" alt=""></a> </div> <div class="grid__item three-quarters"> <p class="d-block mb-3"> <a class="h4 d-block mb-2" href="{{url}}" class="ajaxcart__product-name">{{name}}</a> {{#if variation}} <span class="ajaxcart__product-meta p">{{variation}}</span> {{/if}} {{#properties}} {{#each this}} {{#if this}} <span class="ajaxcart__product-meta p hide">{{@key}}: {{this}}</span> {{/if}} {{/each}} {{/properties}} </p> <div class="grid--full display-table"> <div class="grid__item display-table-cell one-half"> <div class="ajaxcart__qty"> <button type="button" class="ajaxcart__qty-adjust ajaxcart__qty--minus" data-id="{{key}}" data-qty="{{itemMinus}}" data-line="{{line}}"> <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> <span class="visually-hidden">Kurangi jumlah barang</span> </button> <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]*"> <button type="button" class="ajaxcart__qty-adjust ajaxcart__qty--plus" data-id="{{key}}" data-line="{{line}}" data-qty="{{itemAdd}}"> <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> <span class="visually-hidden">Tambahkan jumlah barang</span> </button> </div> </div> <div class="grid__item display-table-cell one-half text-right"> {{#if discountsApplied}} <small class="ajaxcart-item__price-strikethrough"><s>{{{originalLinePrice}}}</s></small> <br><span class="h4">{{{linePrice}}}</span> {{else}} <span class="h4">{{{linePrice}}}</span> {{/if}} </div> </div> {{#if discountsApplied}} <div class="grid--full display-table"> <div class="grid__item text-right"> {{#each discounts}} <small class="ajaxcart-item__discount">{{ this.title }}</small><br> {{/each}} </div> </div> {{/if}} </div> </div> </div> </div> </div> </div> {{/items}} </div> <div class="ajaxcart__footer"> <div class="grid--full cart-subtotal py-2"> <p>Subtotal</p> <h3 class="primary">{{{totalPrice}}}</h3> {{#if totalCartDiscount}} <p class="ajaxcart__savings text-center"><em>{{{totalCartDiscount}}}</em></p> {{/if}} </div> <a href="/cart" class="btn btn-cta view-more btn-block cart__checkout mt-2">Checkout</a> <p class="cart-checkout-shipping hide">Free Ongkir dengan belanja di atas Rp.100.000 <a href="/pages/pengiriman">detail</a></p> </div> </form> </script> <script id="AjaxQty" type="text/template"> <div class="ajaxcart__qty"> <button type="button" class="ajaxcart__qty-adjust ajaxcart__qty--minus" data-id="{{key}}" data-qty="{{itemMinus}}"> <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> <span class="visually-hidden">Kurangi jumlah barang</span> </button> <input type="text" class="ajaxcart__qty-num" value="{{itemQty}}" min="0" data-id="{{key}}" aria-label="quantity" pattern="[0-9]*"> <button type="button" class="ajaxcart__qty-adjust ajaxcart__qty--plus" data-id="{{key}}" data-qty="{{itemAdd}}"> <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> <span class="visually-hidden">Tambahkan jumlah barang</span> </button> </div> </script> <script id="JsQty" type="text/template"> <div class="js-qty mt-2"> <button type="button" data-action="minus" class="js-qty__adjust js-qty__adjust--minus" data-id="{{key}}" data-qty="{{itemMinus}}"> <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> <span class="visually-hidden">Kurangi jumlah barang</span> </button> <input type="text" class="js-qty__num" value="{{itemQty}}" min="1" data-id="{{key}}" aria-label="quantity" pattern="[0-9]*" name="{{inputName}}" id="{{inputId}}"> <button type="button" data-action="plus" class="js-qty__adjust js-qty__adjust--plus" data-id="{{key}}" data-qty="{{itemAdd}}"> <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> <span class="visually-hidden">Tambahkan jumlah barang</span> </button> </div> </script> <style> #CartDrawer .ajaxcart__product.nExtra.Shipping.Cost .ajaxcart__qty button, #CartDrawer .ajaxcart__product.n3D2N .ajaxcart__qty button, #CartDrawer .ajaxcart__product.n4D3N .ajaxcart__qty button {display: none;} #CartDrawer .ajaxcart__product.nExtra.Shipping.Cost .ajaxcart__qty input, #CartDrawer .ajaxcart__product.n3D2N .ajaxcart__qty input, #CartDrawer .ajaxcart__product.n4D3N .ajaxcart__qty input {pointer-events: none;opacity: 0.5;} #CartDrawer .ajaxcart__product.nExtra.Shipping.Cost .ajaxcart__qty input, #CartDrawer .ajaxcart__product.n3D2N .ajaxcart__qty input, #CartDrawer .ajaxcart__product.n4D3N .ajaxcart__qty input {pointer-events: none;} </style> <script src="//outerbloom.com/cdn/shop/t/138/assets/ajax-cart.js?v=51128912329657147331752652452" defer></script> <script> jQuery(function($) { ajaxCart.init({ formSelector: '#AddToCartForm', cartContainer: '#CartContainer', addToCartSelector: '#AddToCartXX', cartCountSelector: '#CartCount, #CartCount2', cartCostSelector: '#CartCost', moneyFormat: "Rp {{amount_no_decimals}}" }); }); jQuery(document.body).on('afterCartLoad.ajaxCart', function(evt, cart) { // Bind to 'afterCartLoad.ajaxCart' to run any javascript after the cart has loaded in the DOM timber.RightDrawer.open(); }); </script> <style> /** Search AutoComplete **/ .resultsearch .ui-menu-item[data-cat="Collection"], .resultsearch .ui-menu-item[data-cat="Collection"] {display: none;} .resultsearch .ui-widget.ui-widget-content { width: 100%; top: 48px; border: none; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); } .resultsearch .ui-menu-item {text-align: left;} .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;} .ui-state-active { border: none!important; background-color: #fafafa!important; color: #000!important; } .ui-menu-item a[data-cat="Collection"] {padding: 5px 12px;} .ui-menu .ui-menu-item {line-height: normal;} </style> <script> $(window).load(function(){ 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;} $.widget("custom.catcomplete", $.ui.autocomplete, { _renderMenu: function (ul, items) { // have search reults split up in categories var that = this, currentCategory = ""; $.each(items, function (index, item) { if (item.category != currentCategory) { ul.append("<li class='ui-autocomplete-category' data-cat=" + item.category + ">" + "<span>" + item.category + "</span>" + "</li>"); currentCategory = item.category; } that._renderItemData(ul, item); }); } }); // higlight searched for term $.ui.autocomplete.prototype._renderItem = function( ul, item ) { var term = this.element.val(), html = item.label.replace( term, "<b>$&</b>" ); return $( "<li>" ) .append(format(item)) .appendTo( ul ); }; var data = [ { 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: "/collections/kado-anniversary", 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: "/collections/aromatherapy-diffuser", 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: "/collections/bloom-box", 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: "/collections/buket-bunga-bali", images: " ", price: " " },{ label: "Buket Bunga Bandung", category: "Collection", url: "/collections/buket-bunga-bandung", images: " ", price: " " },{ label: "Buket Bunga Batam", category: "Collection", url: "/collections/buket-bunga-batam", images: " ", price: " " },{ label: "Buket Bunga Demak", category: "Collection", url: "/collections/buket-bunga-demak", images: " ", price: " " },{ label: "Buket Bunga Fresh", category: "Collection", url: "/collections/buket-bunga", images: " ", price: " " },{ label: "Buket Bunga Jepara", category: "Collection", url: "/collections/buket-bunga-jepara", images: " ", price: " " },{ label: "Buket Bunga Medan", category: "Collection", url: "/collections/buket-bunga-medan", images: " ", price: " " },{ label: "Buket Bunga Nusantara", category: "Collection", url: "/collections/buket-bunga-nusantara", images: " ", price: " " },{ label: "Buket Bunga Semarang", category: "Collection", url: "/collections/buket-bunga-semarang", images: " ", price: " " },{ label: "Buket Bunga Sidoarjo", category: "Collection", url: "/collections/buket-bunga-sidoarjo", images: " ", price: " " },{ label: "Buket Bunga Surabaya", category: "Collection", url: "/collections/buket-bunga-surabaya", images: " ", price: " " },{ label: "Buket Bunga Tangerang", category: "Collection", url: "/collections/buket-bunga-tangerang", images: " ", price: " " },{ label: "Buket Bunga Uang", category: "Collection", url: "/collections/buket-bunga-uang", images: " ", price: " " },{ label: "Buket Bunga Valentine", category: "Collection", url: "/collections/buket-bunga-valentine", images: " ", price: " " },{ label: "Buket Bunga Yogyakarta", category: "Collection", url: "/collections/buket-bunga-jogja", 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: "/collections/bunga-artificial", 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: "/collections/bunga-meja", images: " ", price: " " },{ label: "Bunga Meja Bali", category: "Collection", url: "/collections/bunga-meja-bali", images: " ", price: " " },{ label: "Bunga Meja Bandung", category: "Collection", url: "/collections/bunga-meja-bandung", images: " ", price: " " },{ label: "Bunga Meja Batam", category: "Collection", url: "/collections/bunga-meja-batam", images: " ", price: " " },{ label: "Bunga Meja Jepara", category: "Collection", url: "/collections/bunga-meja-jepara", images: " ", price: " " },{ label: "Bunga Meja Medan", category: "Collection", url: "/collections/bunga-meja-medan", images: " ", price: " " },{ label: "Bunga Meja Semarang", category: "Collection", url: "/collections/bunga-meja-semarang", images: " ", price: " " },{ label: "Bunga Meja Sidoarjo", category: "Collection", url: "/collections/bunga-meja-sidoarjo", images: " ", price: " " },{ label: "Bunga Meja Surabaya", category: "Collection", url: "/collections/bunga-meja-surabaya", images: " ", price: " " },{ label: "Bunga Meja Tangerang", category: "Collection", url: "/collections/bunga-meja-tangerang", images: " ", price: " " },{ label: "Bunga Meja Yogyakarta", category: "Collection", url: "/collections/bunga-meja-jogja", 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: "/collections/karangan-bunga-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: "/collections/permen-coklat", 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: "/collections/corporate-gifts", 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: "/collections/boneka-lucu", 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: "/collections/custom-tumbler-minuman", 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: " " },{ 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: "/collections/toko-bunga", 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: "/collections/forever-flower", images: " ", price: " " },{ label: "Forever Flower Holo Series", category: "Collection", url: "/collections/forever-flower-holo-series", images: " ", price: " " },{ label: "Forever Flower x NestBloom", category: "Collection", url: "/collections/forever-flower-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: "/collections/gelato", images: " ", price: " " },{ label: "Gelato Pie", category: "Collection", url: "/collections/gelato-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: "/collections/giant-flower-bali", images: " ", price: " " },{ label: "Giant Flower Bandung", category: "Collection", url: "/collections/giant-flower-bandung", images: " ", price: " " },{ label: "Giant Flower Bouquet", category: "Collection", url: "/collections/giant-flower", images: " ", price: " " },{ label: "Gift", category: "Collection", url: "/collections/souvenir-kado-hadiah", 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: "/collections/parcel-pecah-belah-imlek", images: " ", price: " " },{ label: "Glassware Eid Hampers", category: "Collection", url: "/collections/parcel-pecah-belah-lebaran", images: " ", price: " " },{ label: "Glassware Hampers", category: "Collection", url: "/collections/parcel-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: "/collections/kado-untuk-pernikahan", 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: "/collections/parcel-indonesia", images: " ", price: " " },{ label: "Hampers Lebaran 2026", category: "Collection", url: "/collections/parcel-lebaran", 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: "/collections/home-decoration", images: " ", price: " " },{ 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: "/collections/ice-cream-cake", 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: "/collections/jewelry", 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: "/collections/kado-wisuda", images: " ", price: " " },{ label: "Kado Zodiak", category: "Collection", url: "/collections/kado-untuk-zodiak", images: " ", price: " " },{ label: "Karangan Bunga Aceh", category: "Collection", url: "/collections/karangan-bunga-aceh", images: " ", price: " " },{ label: "Karangan Bunga Ambon", category: "Collection", url: "/collections/karangan-bunga-ambon", images: " ", price: " " },{ label: "Karangan Bunga Atambua", category: "Collection", url: "/collections/karangan-bunga-atambua", images: " ", price: " " },{ label: "Karangan Bunga Bali", category: "Collection", url: "/collections/karangan-bunga-bali", images: " ", price: " " },{ label: "Karangan Bunga Balikpapan", category: "Collection", url: "/collections/karangan-bunga-balikpapan", images: " ", price: " " },{ label: "Karangan Bunga Bandung", category: "Collection", url: "/collections/karangan-bunga-bandung", images: " ", price: " " },{ label: "Karangan Bunga Bandung Barat", category: "Collection", url: "/collections/karangan-bunga-bandung-barat", images: " ", price: " " },{ label: "Karangan Bunga Bangka", category: "Collection", url: "/collections/karangan-bunga-bangka", images: " ", price: " " },{ label: "Karangan Bunga Banjarmasin", category: "Collection", url: "/collections/karangan-bunga-banjarmasin", images: " ", price: " " },{ label: "Karangan Bunga Banten", category: "Collection", url: "/collections/karangan-bunga-banten", images: " ", price: " " },{ label: "Karangan Bunga Banyumas", category: "Collection", url: "/collections/karangan-bunga-banyumas", images: " ", price: " " },{ label: "Karangan Bunga Banyuwangi", category: "Collection", url: "/collections/karangan-bunga-banyuwangi", images: " ", price: " " },{ label: "Karangan Bunga Batam", category: "Collection", url: "/collections/karangan-bunga-batam", images: " ", price: " " },{ label: "Karangan Bunga Baubau", category: "Collection", url: "/collections/karangan-bunga-baubau", images: " ", price: " " },{ label: "Karangan Bunga Bengkalis", category: "Collection", url: "/collections/karangan-bunga-bengkalis", images: " ", price: " " },{ label: "Karangan Bunga Bengkayang", category: "Collection", url: "/collections/karangan-bunga-bengkayang", images: " ", price: " " },{ label: "Karangan Bunga Bengkulu", category: "Collection", url: "/collections/karangan-bunga-bengkulu", images: " ", price: " " },{ label: "Karangan Bunga Blora", category: "Collection", url: "/collections/karangan-bunga-blora", images: " ", price: " " },{ label: "Karangan Bunga Bogor", category: "Collection", url: "/collections/karangan-bunga-bogor", images: " ", price: " " },{ label: "Karangan Bunga Bojonegoro", category: "Collection", url: "/collections/karangan-bunga-bojonegoro", images: " ", price: " " },{ label: "Karangan Bunga Boyolali", category: "Collection", url: "/collections/karangan-bunga-boyolali", images: " ", price: " " },{ label: "Karangan Bunga Brebes", category: "Collection", url: "/collections/karangan-bunga-brebes", images: " ", price: " " },{ label: "Karangan Bunga Bukittinggi", category: "Collection", url: "/collections/karangan-bunga-bukittinggi", images: " ", price: " " },{ label: "Karangan Bunga Ciamis", category: "Collection", url: "/collections/karangan-bunga-ciamis", images: " ", price: " " },{ label: "Karangan Bunga Cianjur", category: "Collection", url: "/collections/karangan-bunga-cianjur", images: " ", price: " " },{ label: "Karangan Bunga Cikarang", category: "Collection", url: "/collections/karangan-bunga-cikarang", images: " ", price: " " },{ label: "Karangan Bunga Cikupa", category: "Collection", url: "/collections/karangan-bunga-cikupa", images: " ", price: " " },{ label: "Karangan Bunga Cilacap", category: "Collection", url: "/collections/karangan-bunga-cilacap", images: " ", price: " " },{ label: "Karangan Bunga Cileunyi", category: "Collection", url: "/collections/karangan-bunga-cileunyi", images: " ", price: " " },{ label: "Karangan Bunga Cimahi", category: "Collection", url: "/collections/karangan-bunga-cimahi", images: " ", price: " " },{ label: "Karangan Bunga Cirebon", category: "Collection", url: "/collections/karangan-bunga-cirebon", images: " ", price: " " },{ label: "Karangan Bunga Ciwidey", category: "Collection", url: "/collections/karangan-bunga-ciwidey", images: " ", price: " " },{ label: "Karangan Bunga Danau Toba", category: "Collection", url: "/collections/karangan-bunga-danau-toba", images: " ", price: " " },{ label: "Karangan Bunga Demak", category: "Collection", url: "/collections/karangan-bunga-demak", images: " ", price: " " },{ label: "Karangan Bunga Denpasar", category: "Collection", url: "/collections/karangan-bunga-denpasar", images: " ", price: " " },{ label: "Karangan Bunga Depok", category: "Collection", url: "/collections/karangan-bunga-depok", images: " ", price: " " },{ label: "Karangan Bunga Duka Cita", category: "Collection", url: "/collections/karangan-bunga-duka-cita", images: " ", price: " " },{ label: "Karangan Bunga Garut", category: "Collection", url: "/collections/karangan-bunga-garut", images: " ", price: " " },{ label: "Karangan Bunga Gianyar", category: "Collection", url: "/collections/karangan-bunga-gianyar", images: " ", price: " " },{ label: "Karangan Bunga Gorontalo", category: "Collection", url: "/collections/karangan-bunga-gorontalo", images: " ", price: " " },{ label: "Karangan Bunga Gowa", category: "Collection", url: "/collections/karangan-bunga-gowa", images: " ", price: " " },{ label: "Karangan Bunga Gresik", category: "Collection", url: "/collections/karangan-bunga-gresik", images: " ", price: " " },{ label: "Karangan Bunga Grobogan", category: "Collection", url: "/collections/karangan-bunga-grobogan", images: " ", price: " " },{ label: "Karangan Bunga Gunung Kidul", category: "Collection", url: "/collections/karangan-bunga-gunungkidul", images: " ", price: " " },{ label: "Karangan Bunga Indramayu", category: "Collection", url: "/collections/karangan-bunga-indramayu", images: " ", price: " " },{ label: "Karangan Bunga Jakarta", category: "Collection", url: "/collections/karangan-bunga-jakarta", images: " ", price: " " },{ label: "Karangan Bunga Jambi", category: "Collection", url: "/collections/karangan-bunga-jambi", images: " ", price: " " },{ label: "Karangan Bunga Jayapura", category: "Collection", url: "/collections/karangan-bunga-jayapura", images: " ", price: " " },{ label: "Karangan Bunga Jember", category: "Collection", url: "/collections/karangan-bunga-jember", images: " ", price: " " },{ label: "Karangan Bunga Jembrana", category: "Collection", url: "/collections/karangan-bunga-jembrana", images: " ", price: " " },{ label: "Karangan Bunga Jepara", category: "Collection", url: "/collections/karangan-bunga-jepara", images: " ", price: " " },{ label: "Karangan Bunga Jombang", category: "Collection", url: "/collections/karangan-bunga-jombang", images: " ", price: " " },{ label: "Karangan Bunga Kampung Baru", category: "Collection", url: "/collections/karangan-bunga-kampung-baru", images: " ", price: " " },{ label: "Karangan Bunga Kapuas", category: "Collection", url: "/collections/karangan-bunga-kapuas", images: " ", price: " " },{ label: "Karangan Bunga Karanganyar", category: "Collection", url: "/collections/karangan-bunga-karanganyar", images: " ", price: " " },{ label: "Karangan Bunga Karangasem", category: "Collection", url: "/collections/karangan-bunga-karangasem", images: " ", price: " " },{ label: "Karangan Bunga Karawang", category: "Collection", url: "/collections/karangan-bunga-karawang", images: " ", price: " " },{ label: "Karangan Bunga Kartosuro", category: "Collection", url: "/collections/karangan-bunga-kartosuro", images: " ", price: " " },{ label: "Karangan Bunga Kebumen", category: "Collection", url: "/collections/karangan-bunga-kebumen", images: " ", price: " " },{ label: "Karangan Bunga Kediri", category: "Collection", url: "/collections/karangan-bunga-kediri", images: " ", price: " " },{ label: "Karangan Bunga Kendal", category: "Collection", url: "/collections/karangan-bunga-kendal", images: " ", price: " " },{ label: "Karangan Bunga Kendari", category: "Collection", url: "/collections/karangan-bunga-kendari", images: " ", price: " " },{ label: "Karangan Bunga Ketapang", category: "Collection", url: "/collections/karangan-bunga-ketapang", images: " ", price: " " },{ label: "Karangan Bunga Klaten", category: "Collection", url: "/collections/karangan-bunga-klaten", images: " ", price: " " },{ label: "Karangan Bunga Kota Batu", category: "Collection", url: "/collections/karangan-bunga-kota-batu", images: " ", price: " " },{ label: "Karangan Bunga Kudus", category: "Collection", url: "/collections/karangan-bunga-kudus", images: " ", price: " " },{ label: "Karangan Bunga Kupang", category: "Collection", url: "/collections/karangan-bunga-kupang", images: " ", price: " " },{ label: "Karangan Bunga Lamongan", category: "Collection", url: "/collections/karangan-bunga-lamongan", images: " ", price: " " },{ label: "Karangan Bunga Lampung", category: "Collection", url: "/collections/karangan-bunga-lampung", images: " ", price: " " },{ label: "Karangan Bunga Langkat", category: "Collection", url: "/collections/karangan-bunga-langkat", images: " ", price: " " },{ label: "Karangan Bunga Lembang", category: "Collection", url: "/collections/karangan-bunga-lembang", images: " ", price: " " },{ label: "Karangan Bunga Lombok", category: "Collection", url: "/collections/karangan-bunga-lombok", images: " ", price: " " },{ label: "Karangan Bunga Lubuk Pakam", category: "Collection", url: "/collections/karangan-bunga-lubuk-pakam", images: " ", price: " " },{ label: "Karangan Bunga Lumajang", category: "Collection", url: "/collections/karangan-bunga-lumajang", images: " ", price: " " },{ label: "Karangan Bunga Madiun", category: "Collection", url: "/collections/karangan-bunga-madiun", images: " ", price: " " },{ label: "Karangan Bunga Magelang", category: "Collection", url: "/collections/karangan-bunga-magelang", images: " ", price: " " },{ label: "Karangan Bunga Majalengka", category: "Collection", url: "/collections/karangan-bunga-majalengka", images: " ", price: " " },{ label: "Karangan Bunga Makassar", category: "Collection", url: "/collections/karangan-bunga-makassar", images: " ", price: " " },{ label: "Karangan Bunga Malang", category: "Collection", url: "/collections/karangan-bunga-malang", images: " ", price: " " },{ label: "Karangan Bunga Mamuju", category: "Collection", url: "/collections/karangan-bunga-mamuju", images: " ", price: " " },{ label: "Karangan Bunga Manado", category: "Collection", url: "/collections/karangan-bunga-manado", images: " ", price: " " },{ label: "Karangan Bunga Manokwari", category: "Collection", url: "/collections/karangan-bunga-manokwari", images: " ", price: " " },{ label: "Karangan Bunga Maros", category: "Collection", url: "/collections/karangan-bunga-maros", images: " ", price: " " },{ label: "Karangan Bunga Mataram", category: "Collection", url: "/collections/karangan-bunga-mataram", images: " ", price: " " },{ label: "Karangan Bunga Mojokerto", category: "Collection", url: "/collections/karangan-bunga-mojokerto", images: " ", price: " " },{ label: "Karangan Bunga Nganjuk", category: "Collection", url: "/collections/karangan-bunga-nganjuk", images: " ", price: " " },{ label: "Karangan Bunga Nias", category: "Collection", url: "/collections/karangan-bunga-nias", images: " ", price: " " },{ label: "Karangan Bunga Padang", category: "Collection", url: "/collections/karangan-bunga-padang", images: " ", price: " " },{ label: "Karangan Bunga Palangkaraya", category: "Collection", url: "/collections/karangan-bunga-palangkaraya", images: " ", price: " " },{ label: "Karangan Bunga Palu", category: "Collection", url: "/collections/karangan-bunga-palu", images: " ", price: " " },{ label: "Karangan Bunga Pangkal Pinang", category: "Collection", url: "/collections/karangan-bunga-pangkal-pinang", images: " ", price: " " },{ label: "Karangan Bunga Papan", category: "Collection", url: "/collections/karangan-bunga", images: " ", price: " " },{ label: "Karangan Bunga Papan Bandar Lampung", category: "Collection", url: "/collections/karangan-bunga-bandar-lampung", images: " ", price: " " },{ label: "Karangan Bunga Papan Bekasi", category: "Collection", url: "/collections/karangan-bunga-bekasi", images: " ", price: " " },{ label: "Karangan Bunga Papan Binjai", category: "Collection", url: "/collections/karangan-bunga-binjai", images: " ", price: " " },{ label: "Karangan Bunga Papan Blitar", category: "Collection", url: "/collections/karangan-bunga-blitar", images: " ", price: " " },{ label: "Karangan Bunga Papan Buleleng", category: "Collection", url: "/collections/karangan-bunga-buleleng", images: " ", price: " " },{ label: "Karangan Bunga Papan Cibubur", category: "Collection", url: "/collections/karangan-bunga-cibubur", images: " ", price: " " },{ label: "Karangan Bunga Papan Deli Serdang", category: "Collection", url: "/collections/karangan-bunga-deli-serdang", images: " ", price: " " },{ label: "Karangan Bunga Papan Jakarta Timur", category: "Collection", url: "/collections/karangan-bunga-jakarta-timur", images: " ", price: " " },{ label: "Karangan Bunga Papan Karo", category: "Collection", url: "/collections/karangan-bunga-karo", images: " ", price: " " },{ label: "Karangan Bunga Papan Medan", category: "Collection", url: "/collections/karangan-bunga-medan", images: " ", price: " " },{ label: "Karangan Bunga Papan Ngawi", category: "Collection", url: "/collections/karangan-bunga-ngawi", images: " ", price: " " },{ label: "Karangan Bunga Papan Palembang", category: "Collection", url: "/collections/karangan-bunga-palembang", images: " ", price: " " },{ label: "Karangan Bunga Papan Pemalang", category: "Collection", url: "/collections/karangan-bunga-pemalang", images: " ", price: " " },{ label: "Karangan Bunga Papan Rembang", category: "Collection", url: "/collections/karangan-bunga-rembang", images: " ", price: " " },{ label: "Karangan Bunga Papan Sragen", category: "Collection", url: "/collections/karangan-bunga-sragen", images: " ", price: " " },{ label: "Karangan Bunga Papan Tegal", category: "Collection", url: "/collections/karangan-bunga-tegal", images: " ", price: " " },{ label: "Karangan Bunga Papan Temanggung", category: "Collection", url: "/collections/karangan-bunga-temanggung", images: " ", price: " " },{ label: "Karangan Bunga Parepare", category: "Collection", url: "/collections/karangan-bunga-parepare", images: " ", price: " " },{ label: "Karangan Bunga Pasuruan", category: "Collection", url: "/collections/karangan-bunga-pasuruan", images: " ", price: " " },{ label: "Karangan Bunga Pati", category: "Collection", url: "/collections/karangan-bunga-pati", images: " ", price: " " },{ label: "Karangan Bunga Pekalongan", category: "Collection", url: "/collections/karangan-bunga-pekalongan", images: " ", price: " " },{ label: "Karangan Bunga Pekanbaru", category: "Collection", url: "/collections/karangan-bunga-pekanbaru", images: " ", price: " " },{ label: "Karangan Bunga Pematangsiantar", category: "Collection", url: "/collections/karangan-bunga-pematangsiantar", images: " ", price: " " },{ label: "Karangan Bunga Ponorogo", category: "Collection", url: "/collections/karangan-bunga-ponorogo", images: " ", price: " " },{ label: "Karangan Bunga Pontianak", category: "Collection", url: "/collections/karangan-bunga-pontianak", images: " ", price: " " },{ label: "Karangan Bunga Probolinggo", category: "Collection", url: "/collections/karangan-bunga-probolinggo", images: " ", price: " " },{ label: "Karangan Bunga Purbalingga", category: "Collection", url: "/collections/karangan-bunga-purbalingga", images: " ", price: " " },{ label: "Karangan Bunga Purwokerto", category: "Collection", url: "/collections/karangan-bunga-purwokerto", images: " ", price: " " },{ label: "Karangan Bunga Purworejo", category: "Collection", url: "/collections/karangan-bunga-purworejo", images: " ", price: " " },{ label: "Karangan Bunga Riau", category: "Collection", url: "/collections/karangan-bunga-riau", images: " ", price: " " },{ label: "Karangan Bunga Salatiga", category: "Collection", url: "/collections/karangan-bunga-salatiga", images: " ", price: " " },{ label: "Karangan Bunga Samarinda", category: "Collection", url: "/collections/karangan-bunga-samarinda", images: " ", price: " " },{ label: "Karangan Bunga Semarang", category: "Collection", url: "/collections/karangan-bunga-semarang", images: " ", price: " " },{ label: "Karangan Bunga Serang", category: "Collection", url: "/collections/karangan-bunga-serang", images: " ", price: " " },{ label: "Karangan Bunga Sibolga", category: "Collection", url: "/collections/karangan-bunga-sibolga", images: " ", price: " " },{ label: "Karangan Bunga Sidoarjo", category: "Collection", url: "/collections/karangan-bunga-sidoarjo", images: " ", price: " " },{ label: "Karangan Bunga Singkawang", category: "Collection", url: "/collections/karangan-bunga-singkawang", images: " ", price: " " },{ label: "Karangan Bunga Solo", category: "Collection", url: "/collections/karangan-bunga-solo", images: " ", price: " " },{ label: "Karangan Bunga Sorong", category: "Collection", url: "/collections/karangan-bunga-sorong", images: " ", price: " " },{ label: "Karangan Bunga Subang", category: "Collection", url: "/collections/karangan-bunga-subang", images: " ", price: " " },{ label: "Karangan Bunga Sukabumi", category: "Collection", url: "/collections/karangan-bunga-sukabumi", images: " ", price: " " },{ label: "Karangan Bunga Sumbawa", category: "Collection", url: "/collections/karangan-bunga-sumbawa", images: " ", price: " " },{ label: "Karangan Bunga Surabaya", category: "Collection", url: "/collections/karangan-bunga-surabaya", images: " ", price: " " },{ label: "Karangan Bunga Surakarta", category: "Collection", url: "/collections/karangan-bunga-surakarta", images: " ", price: " " },{ label: "Karangan Bunga Tangerang", category: "Collection", url: "/collections/karangan-bunga-tangerang", images: " ", price: " " },{ label: "Karangan Bunga Tasikmalaya", category: "Collection", url: "/collections/karangan-bunga-tasikmalaya", images: " ", price: " " },{ label: "Karangan Bunga Ternate", category: "Collection", url: "/collections/karangan-bunga-ternate", images: " ", price: " " },{ label: "Karangan Bunga Tolitoli", category: "Collection", url: "/collections/karangan-bunga-tolitoli", images: " ", price: " " },{ label: "Karangan Bunga Toraja", category: "Collection", url: "/collections/karangan-bunga-toraja", images: " ", price: " " },{ label: "Karangan Bunga Tuban", category: "Collection", url: "/collections/karangan-bunga-tuban", images: " ", price: " " },{ label: "Karangan Bunga Tulungagung", category: "Collection", url: "/collections/karangan-bunga-tulungagung", images: " ", price: " " },{ label: "Karangan Bunga Wakatobi", category: "Collection", url: "/collections/karangan-bunga-wakatobi", images: " ", price: " " },{ label: "Karangan Bunga Wiyung", category: "Collection", url: "/collections/karangan-bunga-wiyung", images: " ", price: " " },{ label: "Karangan Bunga Wonogiri", category: "Collection", url: "/collections/karangan-bunga-wonogiri", images: " ", price: " " },{ label: "Karangan Bunga Wonokromo", category: "Collection", url: "/collections/karangan-bunga-wonokromo", images: " ", price: " " },{ label: "Karangan Bunga Wonosobo", category: "Collection", url: "/collections/karangan-bunga-wonosobo", images: " ", price: " " },{ label: "Karangan Bunga Yogyakarta", category: "Collection", url: "/collections/karangan-bunga-yogyakarta", images: " ", price: " " },{ label: "Kartu Ucapan", category: "Collection", url: "/collections/kartu-ucapan", 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: "/collections/kue-kering", 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: "/collections/kue-tart", images: " ", price: " " },{ label: "Kue Tart Oma Elly", category: "Collection", url: "/collections/kue-tart-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: "/collections/lilin-aromaterapi", 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: "/collections/locations", 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: "/collections/paket-promo-spesial-valentine", 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-hampers", 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: "/collections/parcel-unik", images: " ", price: " " },{ label: "Modern 3D Cake", category: "Collection", url: "/collections/custom-3d-cake", 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: "/collections/produk-baru", 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: "/collections/parcel-newborn", 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: " " },{ 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: "/collections/papan-bunga", images: " ", price: " " },{ label: "Papan Bunga Aceh", category: "Collection", url: "/collections/papan-bunga-aceh", images: " ", price: " " },{ label: "Papan Bunga Acrylic", category: "Collection", url: "/collections/papan-bunga-acrylic", images: " ", price: " " },{ label: "Papan Bunga Ambon", category: "Collection", url: "/collections/papan-bunga-ambon", images: " ", price: " " },{ label: "Papan Bunga Artificial", category: "Collection", url: "/collections/papan-bunga-artificial", images: " ", price: " " },{ label: "Papan Bunga Atambua", category: "Collection", url: "/collections/papan-bunga-atambua", images: " ", price: " " },{ label: "Papan Bunga Bali", category: "Collection", url: "/collections/papan-bunga-bali", images: " ", price: " " },{ label: "Papan Bunga Balikpapan", category: "Collection", url: "/collections/papan-bunga-balikpapan", images: " ", price: " " },{ label: "Papan Bunga Bandar Lampung", category: "Collection", url: "/collections/papan-bunga-bandar-lampung", images: " ", price: " " },{ label: "Papan Bunga Bandung", category: "Collection", url: "/collections/papan-bunga-bandung", images: " ", price: " " },{ label: "Papan Bunga Bandung Barat", category: "Collection", url: "/collections/papan-bunga-bandung-barat", images: " ", price: " " },{ label: "Papan Bunga Bangka", category: "Collection", url: "/collections/papan-bunga-bangka", images: " ", price: " " },{ label: "Papan Bunga Banjarmasin", category: "Collection", url: "/collections/papan-bunga-banjarmasin", images: " ", price: " " },{ label: "Papan Bunga Banten", category: "Collection", url: "/collections/papan-bunga-banten", images: " ", price: " " },{ label: "Papan Bunga Banyumas", category: "Collection", url: "/collections/papan-bunga-banyumas", images: " ", price: " " },{ label: "Papan Bunga Banyuwangi", category: "Collection", url: "/collections/papan-bunga-banyuwangi", images: " ", price: " " },{ label: "Papan Bunga Batam", category: "Collection", url: "/collections/papan-bunga-batam", images: " ", price: " " },{ label: "Papan Bunga Baubau", category: "Collection", url: "/collections/papan-bunga-baubau", images: " ", price: " " },{ label: "Papan Bunga Bekasi", category: "Collection", url: "/collections/papan-bunga-bekasi", images: " ", price: " " },{ label: "Papan Bunga Bengkalis", category: "Collection", url: "/collections/papan-bunga-bengkalis", images: " ", price: " " },{ label: "Papan Bunga Bengkayang", category: "Collection", url: "/collections/papan-bunga-bengkayang", images: " ", price: " " },{ label: "Papan Bunga Bengkulu", category: "Collection", url: "/collections/papan-bunga-bengkulu", images: " ", price: " " },{ label: "Papan Bunga Binjai", category: "Collection", url: "/collections/papan-bunga-binjai", images: " ", price: " " },{ label: "Papan Bunga Blitar", category: "Collection", url: "/collections/papan-bunga-blitar", images: " ", price: " " },{ label: "Papan Bunga Blora", category: "Collection", url: "/collections/papan-bunga-blora", images: " ", price: " " },{ label: "Papan Bunga Bogor", category: "Collection", url: "/collections/papan-bunga-bogor", images: " ", price: " " },{ label: "Papan Bunga Bojonegoro", category: "Collection", url: "/collections/papan-bunga-bojonegoro", images: " ", price: " " },{ label: "Papan Bunga Boyolali", category: "Collection", url: "/collections/papan-bunga-boyolali", images: " ", price: " " },{ label: "Papan Bunga Brebes", category: "Collection", url: "/collections/papan-bunga-brebes", images: " ", price: " " },{ label: "Papan Bunga Bukittinggi", category: "Collection", url: "/collections/papan-bunga-bukittinggi", images: " ", price: " " },{ label: "Papan Bunga Buleleng", category: "Collection", url: "/collections/papan-bunga-buleleng", images: " ", price: " " },{ label: "Papan Bunga Ciamis", category: "Collection", url: "/collections/papan-bunga-ciamis", images: " ", price: " " },{ label: "Papan Bunga Cianjur", category: "Collection", url: "/collections/papan-bunga-cianjur", images: " ", price: " " },{ label: "Papan Bunga Cibubur", category: "Collection", url: "/collections/papan-bunga-cibubur", images: " ", price: " " },{ label: "Papan Bunga Cikarang", category: "Collection", url: "/collections/papan-bunga-cikarang", images: " ", price: " " },{ label: "Papan Bunga Cikupa", category: "Collection", url: "/collections/papan-bunga-cikupa", images: " ", price: " " },{ label: "Papan Bunga Cikupa", category: "Collection", url: "/collections/papan-bunga-cikupa-1", images: " ", price: " " },{ label: "Papan Bunga Cilacap", category: "Collection", url: "/collections/papan-bunga-cilacap", images: " ", price: " " },{ label: "Papan Bunga Cileunyi", category: "Collection", url: "/collections/papan-bunga-cileunyi", images: " ", price: " " },{ label: "Papan Bunga Cirebon", category: "Collection", url: "/collections/papan-bunga-cirebon", images: " ", price: " " },{ label: "Papan Bunga Congratulations", category: "Collection", url: "/collections/papan-bunga-ucapan-selamat", images: " ", price: " " },{ label: "Papan Bunga Congratulations Bali", category: "Collection", url: "/collections/papan-bunga-congratulations-bali", images: " ", price: " " },{ label: "Papan Bunga Congratulations Bandung", category: "Collection", url: "/collections/papan-bunga-congratulations-bandung", images: " ", price: " " },{ label: "Papan Bunga Congratulations Bekasi", category: "Collection", url: "/collections/papan-bunga-congratulations-bekasi", images: " ", price: " " },{ label: "Papan Bunga Congratulations Bogor", category: "Collection", url: "/collections/papan-bunga-congratulations-bogor", images: " ", price: " " },{ label: "Papan Bunga Congratulations Cikupa", category: "Collection", url: "/collections/papan-bunga-congratulations-cikupa", images: " ", price: " " },{ label: "Papan Bunga Congratulations Demak", category: "Collection", url: "/collections/papan-bunga-congratulations-demak", images: " ", price: " " },{ label: "Papan Bunga Congratulations Depok", category: "Collection", url: "/collections/papan-bunga-congratulations-depok", images: " ", price: " " },{ label: "Papan Bunga Congratulations Gresik", category: "Collection", url: "/collections/papan-bunga-congratulations-gresik", images: " ", price: " " },{ label: "Papan Bunga Congratulations Jakarta", category: "Collection", url: "/collections/papan-bunga-congratulations-jakarta", images: " ", price: " " },{ label: "Papan Bunga Congratulations Jepara", category: "Collection", url: "/collections/papan-bunga-congratulations-jepara", images: " ", price: " " },{ label: "Papan Bunga Congratulations Medan", category: "Collection", url: "/collections/papan-bunga-congratulations-medan", images: " ", price: " " },{ label: "Papan Bunga Congratulations Semarang", category: "Collection", url: "/collections/papan-bunga-congratulations-semarang", images: " ", price: " " },{ label: "Papan Bunga Congratulations Serang", category: "Collection", url: "/collections/papan-bunga-congratulations-serang", images: " ", price: " " },{ label: "Papan Bunga Congratulations Sidoarjo", category: "Collection", url: "/collections/papan-bunga-congratulations-sidoarjo", images: " ", price: " " },{ label: "Papan Bunga Congratulations Surabaya", category: "Collection", url: "/collections/papan-bunga-congratulations-surabaya", images: " ", price: " " },{ label: "Papan Bunga Congratulations Tangerang", category: "Collection", url: "/collections/papan-bunga-congratulations-tangerang", images: " ", price: " " },{ label: "Papan Bunga Congratulations Yogyakarta", category: "Collection", url: "/collections/papan-bunga-congratulations-yogyakarta", images: " ", price: " " },{ label: "Papan Bunga Danau Toba", category: "Collection", url: "/collections/papan-bunga-danau-toba", images: " ", price: " " },{ label: "Papan Bunga Deli Serdang", category: "Collection", url: "/collections/papan-bunga-deli-serdang", images: " ", price: " " },{ label: "Papan Bunga Demak", category: "Collection", url: "/collections/papan-bunga-demak", images: " ", price: " " },{ label: "Papan Bunga Denpasar", category: "Collection", url: "/collections/papan-bunga-denpasar", images: " ", price: " " },{ label: "Papan Bunga Depok", category: "Collection", url: "/collections/papan-bunga-depok", 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: "/collections/papan-bunga-duka-cita-bali", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Bandung", category: "Collection", url: "/collections/papan-bunga-duka-cita-bandung", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Bekasi", category: "Collection", url: "/collections/papan-bunga-duka-cita-bekasi", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Bogor", category: "Collection", url: "/collections/papan-bunga-duka-cita-bogor", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Cikupa", category: "Collection", url: "/collections/papan-bunga-duka-cita-cikupa", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Demak", category: "Collection", url: "/collections/papan-bunga-duka-cita-demak", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Depok", category: "Collection", url: "/collections/papan-bunga-duka-cita-depok", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Gresik", category: "Collection", url: "/collections/papan-bunga-duka-cita-gresik", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Jakarta", category: "Collection", url: "/collections/papan-bunga-duka-cita-jakarta", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Jepara", category: "Collection", url: "/collections/papan-bunga-duka-cita-jepara", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Medan", category: "Collection", url: "/collections/papan-bunga-duka-cita-medan", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Semarang", category: "Collection", url: "/collections/papan-bunga-duka-cita-semarang", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Serang", category: "Collection", url: "/collections/papan-bunga-duka-cita-serang", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Sidoarjo", category: "Collection", url: "/collections/papan-bunga-duka-cita-sidoarjo", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Surabaya", category: "Collection", url: "/collections/papan-bunga-duka-cita-surabaya", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Tangerang", category: "Collection", url: "/collections/papan-bunga-duka-cita-tangerang", images: " ", price: " " },{ label: "Papan Bunga Duka Cita Yogyakarta", category: "Collection", url: "/collections/papan-bunga-duka-cita-yogyakarta", images: " ", price: " " },{ label: "Papan Bunga Garut", category: "Collection", url: "/collections/papan-bunga-garut", images: " ", price: " " },{ label: "Papan Bunga Gianyar", category: "Collection", url: "/collections/papan-bunga-gianyar", images: " ", price: " " },{ label: "Papan Bunga Gorontalo", category: "Collection", url: "/collections/papan-bunga-gorontalo", images: " ", price: " " },{ label: "Papan Bunga Gowa", category: "Collection", url: "/collections/papan-bunga-gowa", images: " ", price: " " },{ label: "Papan Bunga Gresik", category: "Collection", url: "/collections/papan-bunga-gresik", images: " ", price: " " },{ label: "Papan Bunga Grobogan", category: "Collection", url: "/collections/papan-bunga-grobogan", images: " ", price: " " },{ label: "Papan Bunga Gunungkidul", category: "Collection", url: "/collections/papan-bunga-gunungkidul", images: " ", price: " " },{ label: "Papan Bunga Indramayu", category: "Collection", url: "/collections/papan-bunga-indramayu", images: " ", price: " " },{ label: "Papan Bunga Jakarta", category: "Collection", url: "/collections/papan-bunga-jakarta", images: " ", price: " " },{ label: "Papan Bunga Jakarta Timur", category: "Collection", url: "/collections/papan-bunga-jakarta-timur", images: " ", price: " " },{ label: "Papan Bunga Jambi", category: "Collection", url: "/collections/papan-bunga-jambi", images: " ", price: " " },{ label: "Papan Bunga Jayapura", category: "Collection", url: "/collections/papan-bunga-jayapura", images: " ", price: " " },{ label: "Papan Bunga Jember", category: "Collection", url: "/collections/papan-bunga-jember", images: " ", price: " " },{ label: "Papan Bunga Jembrana", category: "Collection", url: "/collections/papan-bunga-jembrana", images: " ", price: " " },{ label: "Papan Bunga Jepara", category: "Collection", url: "/collections/papan-bunga-jepara", images: " ", price: " " },{ label: "Papan Bunga Jombang", category: "Collection", url: "/collections/papan-bunga-jombang", images: " ", price: " " },{ label: "Papan Bunga Kampung Baru", category: "Collection", url: "/collections/papan-bunga-kampung-baru", images: " ", price: " " },{ label: "Papan Bunga Kapuas", category: "Collection", url: "/collections/papan-bunga-kapuas", images: " ", price: " " },{ label: "Papan Bunga Karanganyar", category: "Collection", url: "/collections/papan-bunga-karanganyar", images: " ", price: " " },{ label: "Papan Bunga Karangasem", category: "Collection", url: "/collections/papan-bunga-karangasem", images: " ", price: " " },{ label: "Papan Bunga Karawang", category: "Collection", url: "/collections/papan-bunga-karawang", images: " ", price: " " },{ label: "Papan Bunga Karo", category: "Collection", url: "/collections/papan-bunga-karo", images: " ", price: " " },{ label: "Papan Bunga Kartosuro", category: "Collection", url: "/collections/papan-bunga-kartosuro", images: " ", price: " " },{ label: "Papan Bunga Kebumen", category: "Collection", url: "/collections/papan-bunga-kebumen", images: " ", price: " " },{ label: "Papan Bunga Kediri", category: "Collection", url: "/collections/papan-bunga-kediri", images: " ", price: " " },{ label: "Papan Bunga Kendal", category: "Collection", url: "/collections/papan-bunga-kendal", images: " ", price: " " },{ label: "Papan Bunga Kendari", category: "Collection", url: "/collections/papan-bunga-kendari", images: " ", price: " " },{ label: "Papan Bunga Ketapang", category: "Collection", url: "/collections/papan-bunga-ketapang", images: " ", price: " " },{ label: "Papan Bunga Klaten", category: "Collection", url: "/collections/papan-bunga-klaten", images: " ", price: " " },{ label: "Papan Bunga Kota Batu", category: "Collection", url: "/collections/papan-bunga-kota-batu", images: " ", price: " " },{ label: "Papan Bunga Kudus", category: "Collection", url: "/collections/papan-bunga-kudus", images: " ", price: " " },{ label: "Papan Bunga Kupang", category: "Collection", url: "/collections/papan-bunga-kupang", images: " ", price: " " },{ label: "Papan Bunga Lamongan", category: "Collection", url: "/collections/papan-bunga-lamongan", images: " ", price: " " },{ label: "Papan Bunga Lampu LED", category: "Collection", url: "/collections/papan-bunga-lampu-led", images: " ", price: " " },{ label: "Papan Bunga Lampung", category: "Collection", url: "/collections/papan-bunga-lampung", images: " ", price: " " },{ label: "Papan Bunga Langkat", category: "Collection", url: "/collections/papan-bunga-langkat", images: " ", price: " " },{ label: "Papan Bunga Lembang", category: "Collection", url: "/collections/papan-bunga-lembang", images: " ", price: " " },{ label: "Papan Bunga Lombok", category: "Collection", url: "/collections/papan-bunga-lombok", images: " ", price: " " },{ label: "Papan Bunga Lubuk Pakam", category: "Collection", url: "/collections/papan-bunga-lubuk-pakam", images: " ", price: " " },{ label: "Papan Bunga Lumajang", category: "Collection", url: "/collections/papan-bunga-lumajang", images: " ", price: " " },{ label: "Papan Bunga Madiun", category: "Collection", url: "/collections/papan-bunga-madiun", images: " ", price: " " },{ label: "Papan Bunga Magelang", category: "Collection", url: "/collections/papan-bunga-magelang", images: " ", price: " " },{ label: "Papan Bunga Majalengka", category: "Collection", url: "/collections/papan-bunga-majalengka", images: " ", price: " " },{ label: "Papan Bunga Makassar", category: "Collection", url: "/collections/papan-bunga-makassar", images: " ", price: " " },{ label: "Papan Bunga Malang", category: "Collection", url: "/collections/papan-bunga-malang", images: " ", price: " " },{ label: "Papan Bunga Mamuju", category: "Collection", url: "/collections/papan-bunga-mamuju", images: " ", price: " " },{ label: "Papan Bunga Manado", category: "Collection", url: "/collections/papan-bunga-manado", images: " ", price: " " },{ label: "Papan Bunga Manokwari", category: "Collection", url: "/collections/papan-bunga-manokwari", images: " ", price: " " },{ label: "Papan Bunga Maros", category: "Collection", url: "/collections/papan-bunga-maros", images: " ", price: " " },{ label: "Papan Bunga Mataram", category: "Collection", url: "/collections/papan-bunga-mataram", images: " ", price: " " },{ label: "Papan Bunga Medan", category: "Collection", url: "/collections/papan-bunga-medan", images: " ", price: " " },{ label: "Papan Bunga Mojokerto", category: "Collection", url: "/collections/papan-bunga-mojokerto", images: " ", price: " " },{ label: "Papan Bunga Nganjuk", category: "Collection", url: "/collections/papan-bunga-nganjuk", images: " ", price: " " },{ label: "Papan Bunga Ngawi", category: "Collection", url: "/collections/papan-bunga-ngawi", images: " ", price: " " },{ label: "Papan Bunga Nias", category: "Collection", url: "/collections/papan-bunga-nias", images: " ", price: " " },{ label: "Papan Bunga Organza", category: "Collection", url: "/collections/papan-bunga-organza", images: " ", price: " " },{ label: "Papan Bunga Padang", category: "Collection", url: "/collections/papan-bunga-padang", images: " ", price: " " },{ label: "Papan Bunga Palangkaraya", category: "Collection", url: "/collections/papan-bunga-palangkaraya", images: " ", price: " " },{ label: "Papan Bunga Palembang", category: "Collection", url: "/collections/papan-bunga-palembang", images: " ", price: " " },{ label: "Papan Bunga Palu", category: "Collection", url: "/collections/papan-bunga-palu", images: " ", price: " " },{ label: "Papan Bunga Pangkal Pinang", category: "Collection", url: "/collections/papan-bunga-pangkal-pinang", images: " ", price: " " },{ label: "Papan Bunga Parepare", category: "Collection", url: "/collections/papan-bunga-parepare", images: " ", price: " " },{ label: "Papan Bunga Pasuruan", category: "Collection", url: "/collections/papan-bunga-pasuruan", images: " ", price: " " },{ label: "Papan Bunga Pati", category: "Collection", url: "/collections/papan-bunga-pati", images: " ", price: " " },{ label: "Papan Bunga Pekalongan", category: "Collection", url: "/collections/papan-bunga-pekalongan", images: " ", price: " " },{ label: "Papan Bunga Pekanbaru", category: "Collection", url: "/collections/papan-bunga-pekanbaru", images: " ", price: " " },{ label: "Papan Bunga Pemalang", category: "Collection", url: "/collections/papan-bunga-pemalang", images: " ", price: " " },{ label: "Papan Bunga Pematangsiantar", category: "Collection", url: "/collections/papan-bunga-pematangsiantar", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Bali", category: "Collection", url: "/collections/papan-bunga-pernikahan-bali", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Bandung", category: "Collection", url: "/collections/papan-bunga-pernikahan-bandung", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Bekasi", category: "Collection", url: "/collections/papan-bunga-pernikahan-bekasi", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Bogor", category: "Collection", url: "/collections/papan-bunga-pernikahan-bogor", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Cikupa", category: "Collection", url: "/collections/papan-bunga-pernikahan-cikupa", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Demak", category: "Collection", url: "/collections/papan-bunga-pernikahan-demak", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Depok", category: "Collection", url: "/collections/papan-bunga-pernikahan-depok", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Gresik", category: "Collection", url: "/collections/papan-bunga-pernikahan-gresik", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Jakarta", category: "Collection", url: "/collections/papan-bunga-pernikahan-jakarta", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Jepara", category: "Collection", url: "/collections/papan-bunga-pernikahan-jepara", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Medan", category: "Collection", url: "/collections/papan-bunga-pernikahan-medan", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Semarang", category: "Collection", url: "/collections/papan-bunga-pernikahan-semarang", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Serang", category: "Collection", url: "/collections/papan-bunga-pernikahan-serang", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Sidoarjo", category: "Collection", url: "/collections/papan-bunga-pernikahan-sidoarjo", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Surabaya", category: "Collection", url: "/collections/papan-bunga-pernikahan-surabaya", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Tangerang", category: "Collection", url: "/collections/papan-bunga-pernikahan-tangerang", images: " ", price: " " },{ label: "Papan Bunga Pernikahan Yogyakarta", category: "Collection", url: "/collections/papan-bunga-pernikahan-yogyakarta", images: " ", price: " " },{ label: "Papan Bunga Ponorogo", category: "Collection", url: "/collections/papan-bunga-ponorogo", images: " ", price: " " },{ label: "Papan Bunga Pontianak", category: "Collection", url: "/collections/papan-bunga-pontianak", images: " ", price: " " },{ label: "Papan Bunga Premium", category: "Collection", url: "/collections/papan-bunga-premium", images: " ", price: " " },{ label: "Papan Bunga Printing", category: "Collection", url: "/collections/papan-bunga-printing", images: " ", price: " " },{ label: "Papan Bunga Printing Congratulations", category: "Collection", url: "/collections/papan-bunga-printing-congratulations", images: " ", price: " " },{ label: "Papan Bunga Probolinggo", category: "Collection", url: "/collections/papan-bunga-probolinggo", images: " ", price: " " },{ label: "Papan Bunga Promo", category: "Collection", url: "/collections/promo-papan-bunga", images: " ", price: " " },{ label: "Papan Bunga Purbalingga", category: "Collection", url: "/collections/papan-bunga-purbalingga", images: " ", price: " " },{ label: "Papan Bunga Purwokerto", category: "Collection", url: "/collections/papan-bunga-purwokerto", images: " ", price: " " },{ label: "Papan Bunga Purworejo", category: "Collection", url: "/collections/papan-bunga-purworejo", images: " ", price: " " },{ label: "Papan Bunga Rembang", category: "Collection", url: "/collections/papan-bunga-rembang", images: " ", price: " " },{ label: "Papan Bunga Riau", category: "Collection", url: "/collections/papan-bunga-riau", images: " ", price: " " },{ label: "Papan Bunga Salatiga", category: "Collection", url: "/collections/papan-bunga-salatiga", images: " ", price: " " },{ label: "Papan Bunga Samarinda", category: "Collection", url: "/collections/papan-bunga-samarinda", images: " ", price: " " },{ label: "Papan Bunga Selamat Bandung", category: "Collection", url: "/collections/papan-bunga-selamat-bandung", images: " ", price: " " },{ label: "Papan Bunga Selamat Medan", category: "Collection", url: "/collections/papan-bunga-selamat-medan", images: " ", price: " " },{ label: "Papan Bunga Semarang", category: "Collection", url: "/collections/papan-bunga-semarang", images: " ", price: " " },{ label: "Papan Bunga Serang", category: "Collection", url: "/collections/papan-bunga-serang", images: " ", price: " " },{ label: "Papan Bunga Sibolga", category: "Collection", url: "/collections/papan-bunga-sibolga", images: " ", price: " " },{ label: "Papan Bunga Sidoarjo", category: "Collection", url: "/collections/papan-bunga-sidoarjo", images: " ", price: " " },{ label: "Papan Bunga Singkawang", category: "Collection", url: "/collections/papan-bunga-singkawang", images: " ", price: " " },{ label: "Papan Bunga Solo", category: "Collection", url: "/collections/papan-bunga-solo", images: " ", price: " " },{ label: "Papan Bunga Sorong", category: "Collection", url: "/collections/papan-bunga-sorong", images: " ", price: " " },{ label: "Papan Bunga Sragen", category: "Collection", url: "/collections/papan-bunga-sragen", images: " ", price: " " },{ label: "Papan Bunga Standard", category: "Collection", url: "/collections/papan-bunga-standard", images: " ", price: " " },{ label: "Papan Bunga Subang", category: "Collection", url: "/collections/papan-bunga-subang", images: " ", price: " " },{ label: "Papan Bunga Sukabumi", category: "Collection", url: "/collections/papan-bunga-sukabumi", images: " ", price: " " },{ label: "Papan Bunga Sumbawa", category: "Collection", url: "/collections/papan-bunga-sumbawa", images: " ", price: " " },{ label: "Papan Bunga Surabaya", category: "Collection", url: "/collections/papan-bunga-surabaya", images: " ", price: " " },{ label: "Papan Bunga Surakarta", category: "Collection", url: "/collections/papan-bunga-surakarta", images: " ", price: " " },{ label: "Papan Bunga Tangerang", category: "Collection", url: "/collections/papan-bunga-tangerang", images: " ", price: " " },{ label: "Papan Bunga Tasikmalaya", category: "Collection", url: "/collections/papan-bunga-tasikmalaya", images: " ", price: " " },{ label: "Papan Bunga Tegal", category: "Collection", url: "/collections/papan-bunga-tegal", images: " ", price: " " },{ label: "Papan Bunga Temanggung", category: "Collection", url: "/collections/papan-bunga-temanggung", images: " ", price: " " },{ label: "Papan Bunga Ternate", category: "Collection", url: "/collections/papan-bunga-ternate", images: " ", price: " " },{ label: "Papan Bunga Tolitoli", category: "Collection", url: "/collections/papan-bunga-tolitoli", images: " ", price: " " },{ label: "Papan Bunga Toraja", category: "Collection", url: "/collections/papan-bunga-toraja", images: " ", price: " " },{ label: "Papan Bunga Tuban", category: "Collection", url: "/collections/papan-bunga-tuban", images: " ", price: " " },{ label: "Papan Bunga Tulungagung", category: "Collection", url: "/collections/papan-bunga-tulungagung", images: " ", price: " " },{ label: "Papan Bunga Wakatobi", category: "Collection", url: "/collections/papan-bunga-wakatobi", images: " ", price: " " },{ label: "Papan Bunga Wedding", category: "Collection", url: "/collections/papan-bunga-ucapan-pernikahan", images: " ", price: " " },{ label: "Papan Bunga Wiyung", category: "Collection", url: "/collections/papan-bunga-wiyung", images: " ", price: " " },{ label: "Papan Bunga Wonogiri", category: "Collection", url: "/collections/papan-bunga-wonogiri", images: " ", price: " " },{ label: "Papan Bunga Wonokromo", category: "Collection", url: "/collections/papan-bunga-wonokromo", images: " ", price: " " },{ label: "Papan Bunga Wonosobo", category: "Collection", url: "/collections/papan-bunga-wonosobo", images: " ", price: " " },{ label: "Papan Bunga Yogyakarta", category: "Collection", url: "/collections/papan-bunga-yogyakarta", images: " ", price: " " },{ label: "Paper Flower Board", category: "Collection", url: "/collections/papan-bunga-kertas", images: " ", price: " " },{ label: "Paper Flower Board Bali", category: "Collection", url: "/collections/papan-bunga-kertas-bali", images: " ", price: " " },{ label: "Paper Flower Board Gresik", category: "Collection", url: "/collections/papan-bunga-kertas-gresik", images: " ", price: " " },{ label: "Paper Flower Board Sidoarjo", category: "Collection", url: "/collections/papan-bunga-kertas-sidoarjo", images: " ", price: " " },{ label: "Paper Flower Board Surabaya", category: "Collection", url: "/collections/papan-bunga-kertas-surabaya", images: " ", price: " " },{ label: "Paper Flower Board Yogyakarta", category: "Collection", url: "/collections/papan-bunga-kertas-yogyakarta", images: " ", price: " " },{ label: "Parcel", category: "Collection", url: "/collections/parcel", images: " ", price: " " },{ label: "Parcel Buah", category: "Collection", url: "/collections/parcel-buah-segar", images: " ", price: " " },{ label: "Parcel Buah Bandung", category: "Collection", url: "/collections/parcel-buah-bandung", images: " ", price: " " },{ label: "Parcel Buah Semarang", category: "Collection", url: "/collections/parcel-buah-semarang", images: " ", price: " " },{ label: "Parcel Buah Sidoarjo", category: "Collection", url: "/collections/parcel-buah-sidoarjo", images: " ", price: " " },{ label: "Parcel Buah Surabaya", category: "Collection", url: "/collections/parcel-buah-surabaya", images: " ", price: " " },{ label: "Parcel Imlek 2026", category: "Collection", url: "/collections/parcel-imlek", images: " ", price: " " },{ label: "Parcel Imlek Bandung", category: "Collection", url: "/collections/parcel-imlek-bandung", images: " ", price: " " },{ label: "Parcel Imlek Nusantara", category: "Collection", url: "/collections/parcel-imlek-nusantara", images: " ", price: " " },{ label: "Parcel Lebaran Bandung", category: "Collection", url: "/collections/parcel-lebaran-bandung", images: " ", price: " " },{ label: "Parcel Lebaran Nusantara", category: "Collection", url: "/collections/parcel-lebaran-indonesia", images: " ", price: " " },{ label: "Parcel Lebaran Surabaya", category: "Collection", url: "/collections/parcel-lebaran-surabaya", images: " ", price: " " },{ label: "Parcel Makanan", category: "Collection", url: "/collections/parcel-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: "/collections/parcel-natal-bandung", images: " ", price: " " },{ label: "Parcel Newborn Nusantara", category: "Collection", url: "/collections/parcel-newborn-nusantara", images: " ", price: " " },{ label: "Parcel Tahun Baru", category: "Collection", url: "/collections/new-year-tahun-baru", images: " ", price: " " },{ label: "Party Supplies", category: "Collection", url: "/collections/party-supplies", 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: "/collections/fashion", images: " ", price: " " },{ label: "Personalized Gift", category: "Collection", url: "/collections/personalized-gift", images: " ", price: " " },{ label: "Personalized Gift Pria", category: "Collection", url: "/collections/personalized-gift-pria", images: " ", price: " " },{ label: "Personalized Gift Wanita", category: "Collection", url: "/collections/personalized-gift-wanita", images: " ", price: " " },{ label: "Personalized Gifts", category: "Collection", url: "/collections/personalized-gifts", 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: "/collections/photobook", 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: "/collections/parcel-premium", images: " ", price: " " },{ label: "Premium Newborn Hampers Collection", category: "Collection", url: "/collections/premium-newborn-hampers-collection", images: " ", price: " " },{ label: "Printing Cake", category: "Collection", url: "/collections/printing-cake", 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: "/collections/dried-flowers", 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: "/collections/snack-box", 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: "/collections/standing-flower", images: " ", price: " " },{ label: "Standing Flower Bali", category: "Collection", url: "/collections/standing-flower-bali", images: " ", price: " " },{ label: "Standing Flower Bandung", category: "Collection", url: "/collections/standing-flower-bandung", images: " ", price: " " },{ label: "Standing Flower Congratulations", category: "Collection", url: "/collections/standing-flower-congratulations", images: " ", price: " " },{ label: "Standing Flower Demak", category: "Collection", url: "/collections/standing-flower-demak", images: " ", price: " " },{ label: "Standing Flower Jepara", category: "Collection", url: "/collections/standing-flower-jepara", images: " ", price: " " },{ label: "Standing Flower Semarang", category: "Collection", url: "/collections/standing-flower-semarang", images: " ", price: " " },{ label: "Standing Flower Sidoarjo", category: "Collection", url: "/collections/standing-flower-sidoarjo", images: " ", price: " " },{ label: "Standing Flower Surabaya", category: "Collection", url: "/collections/standing-flower-surabaya", images: " ", price: " " },{ label: "Standing Flower Yogyakarta", category: "Collection", url: "/collections/standing-flower-yogyakarta", images: " ", price: " " },{ label: "Standing Giant Flower", category: "Collection", url: "/collections/standing-giant-flower", images: " ", price: " " },{ label: "Stationery", category: "Collection", url: "/collections/stationery", 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: "/collections/sweet-savoury-hampers", 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: "/collections/toko-bunga-aceh", images: " ", price: " " },{ label: "Toko Bunga Ambon", category: "Collection", url: "/collections/toko-bunga-ambon", images: " ", price: " " },{ label: "Toko Bunga Atambua", category: "Collection", url: "/collections/toko-bunga-atambua", images: " ", price: " " },{ label: "Toko Bunga Bali", category: "Collection", url: "/collections/toko-bunga-bali", images: " ", price: " " },{ label: "Toko Bunga Balikpapan", category: "Collection", url: "/collections/toko-bunga-balikpapan", images: " ", price: " " },{ label: "Toko Bunga Bandar Lampung", category: "Collection", url: "/collections/toko-bunga-bandar-lampung", images: " ", price: " " },{ label: "Toko Bunga Bandung", category: "Collection", url: "/collections/toko-bunga-bandung", images: " ", price: " " },{ label: "Toko Bunga Bandung Barat", category: "Collection", url: "/collections/toko-bunga-bandung-barat", images: " ", price: " " },{ label: "Toko Bunga Banjarmasin", category: "Collection", url: "/collections/toko-bunga-banjarmasin", images: " ", price: " " },{ label: "Toko Bunga Banten", category: "Collection", url: "/collections/toko-bunga-banten", images: " ", price: " " },{ label: "Toko Bunga Banyumas", category: "Collection", url: "/collections/toko-bunga-banyumas", images: " ", price: " " },{ label: "Toko Bunga Banyuwangi", category: "Collection", url: "/collections/toko-bunga-banyuwangi", images: " ", price: " " },{ label: "Toko Bunga Batam", category: "Collection", url: "/collections/toko-bunga-batam", images: " ", price: " " },{ label: "Toko Bunga Baubau", category: "Collection", url: "/collections/toko-bunga-baubau", images: " ", price: " " },{ label: "Toko Bunga Bekasi", category: "Collection", url: "/collections/toko-bunga-bekasi", images: " ", price: " " },{ label: "Toko Bunga Bengkalis", category: "Collection", url: "/collections/toko-bunga-bengkalis", images: " ", price: " " },{ label: "Toko Bunga Bengkayang", category: "Collection", url: "/collections/toko-bunga-bengkayang", images: " ", price: " " },{ label: "Toko Bunga Binjai", category: "Collection", url: "/collections/toko-bunga-binjai", images: " ", price: " " },{ label: "Toko Bunga Bintaro", category: "Collection", url: "/collections/toko-bunga-bintaro", images: " ", price: " " },{ label: "Toko Bunga Blitar", category: "Collection", url: "/collections/toko-bunga-blitar", images: " ", price: " " },{ label: "Toko Bunga Blora", category: "Collection", url: "/collections/toko-bunga-blora", images: " ", price: " " },{ label: "Toko Bunga Bogor", category: "Collection", url: "/collections/toko-bunga-bogor", images: " ", price: " " },{ label: "Toko Bunga Bojonegoro", category: "Collection", url: "/collections/toko-bunga-bojonegoro", images: " ", price: " " },{ label: "Toko Bunga Boyolali", category: "Collection", url: "/collections/toko-bunga-boyolali", images: " ", price: " " },{ label: "Toko Bunga Brebes", category: "Collection", url: "/collections/toko-bunga-brebes", images: " ", price: " " },{ label: "Toko Bunga Bukittinggi", category: "Collection", url: "/collections/toko-bunga-bukittinggi", images: " ", price: " " },{ label: "Toko Bunga Buleleng", category: "Collection", url: "/collections/toko-bunga-buleleng", images: " ", price: " " },{ label: "Toko Bunga Cakung", category: "Collection", url: "/collections/toko-bunga-cakung", images: " ", price: " " },{ label: "Toko Bunga Cawang", category: "Collection", url: "/collections/toko-bunga-cawang", images: " ", price: " " },{ label: "Toko Bunga Cempaka Putih", category: "Collection", url: "/collections/toko-bunga-cempaka-putih", images: " ", price: " " },{ label: "Toko Bunga Cengkareng", category: "Collection", url: "/collections/toko-bunga-cengkareng", images: " ", price: " " },{ label: "Toko Bunga Ciamis", category: "Collection", url: "/collections/toko-bunga-ciamis", images: " ", price: " " },{ label: "Toko Bunga Cianjur", category: "Collection", url: "/collections/toko-bunga-cianjur", images: " ", price: " " },{ label: "Toko Bunga Cibinong", category: "Collection", url: "/collections/toko-bunga-cibinong", images: " ", price: " " },{ label: "Toko Bunga Cibubur", category: "Collection", url: "/collections/toko-bunga-cibubur", images: " ", price: " " },{ label: "Toko Bunga Cijantung", category: "Collection", url: "/collections/toko-bunga-cijantung", images: " ", price: " " },{ label: "Toko Bunga Cikarang", category: "Collection", url: "/collections/toko-bunga-cikarang", images: " ", price: " " },{ label: "Toko Bunga Cikini", category: "Collection", url: "/collections/toko-bunga-cikini", images: " ", price: " " },{ label: "Toko Bunga Cilacap", category: "Collection", url: "/collections/toko-bunga-cilacap", images: " ", price: " " },{ label: "Toko Bunga Cilandak", category: "Collection", url: "/collections/toko-bunga-cilandak", images: " ", price: " " },{ label: "Toko Bunga Cileunyi", category: "Collection", url: "/collections/toko-bunga-cileunyi", images: " ", price: " " },{ label: "Toko Bunga Ciracas", category: "Collection", url: "/collections/toko-bunga-ciracas", images: " ", price: " " },{ label: "Toko Bunga Cirebon", category: "Collection", url: "/collections/toko-bunga-cirebon", images: " ", price: " " },{ label: "Toko Bunga Ciwidey", category: "Collection", url: "/collections/toko-bunga-ciwidey", images: " ", price: " " },{ label: "Toko Bunga Danau Toba", category: "Collection", url: "/collections/toko-bunga-danau-toba", images: " ", price: " " },{ label: "Toko Bunga Demak", category: "Collection", url: "/collections/toko-bunga-demak", images: " ", price: " " },{ label: "Toko Bunga Denpasar", category: "Collection", url: "/collections/toko-bunga-denpasar", images: " ", price: " " },{ label: "Toko Bunga Depok", category: "Collection", url: "/collections/toko-bunga-depok", images: " ", price: " " },{ label: "Toko Bunga Duren Sawit", category: "Collection", url: "/collections/toko-bunga-duren-sawit", images: " ", price: " " },{ label: "Toko Bunga Garut", category: "Collection", url: "/collections/toko-bunga-garut", images: " ", price: " " },{ label: "Toko Bunga Gianyar", category: "Collection", url: "/collections/toko-bunga-gianyar", images: " ", price: " " },{ label: "Toko Bunga Gowa", category: "Collection", url: "/collections/toko-bunga-gowa", images: " ", price: " " },{ label: "Toko Bunga Gresik", category: "Collection", url: "/collections/toko-bunga-gresik", images: " ", price: " " },{ label: "Toko Bunga Grobogan", category: "Collection", url: "/collections/toko-bunga-grobogan", images: " ", price: " " },{ label: "Toko Bunga Grogol", category: "Collection", url: "/collections/toko-bunga-grogol", images: " ", price: " " },{ label: "Toko Bunga Gunungkidul", category: "Collection", url: "/collections/toko-bunga-gunungkidul", images: " ", price: " " },{ label: "Toko Bunga Indramayu", category: "Collection", url: "/collections/toko-bunga-indramayu", images: " ", price: " " },{ label: "Toko Bunga Jakarta", category: "Collection", url: "/collections/toko-bunga-jakarta", images: " ", price: " " },{ label: "Toko Bunga Jakarta Barat", category: "Collection", url: "/collections/toko-bunga-jakarta-barat", images: " ", price: " " },{ label: "Toko Bunga Jakarta Pusat", category: "Collection", url: "/collections/toko-bunga-jakarta-pusat", images: " ", price: " " },{ label: "Toko Bunga Jakarta Selatan", category: "Collection", url: "/collections/toko-bunga-jakarta-selatan", images: " ", price: " " },{ label: "Toko Bunga Jakarta Timur", category: "Collection", url: "/collections/toko-bunga-jakarta-timur", images: " ", price: " " },{ label: "Toko Bunga Jakarta Utara", category: "Collection", url: "/collections/toko-bunga-jakarta-utara", images: " ", price: " " },{ label: "Toko Bunga Jambi", category: "Collection", url: "/collections/toko-bunga-jambi", images: " ", price: " " },{ label: "Toko Bunga Jatinegara", category: "Collection", url: "/collections/toko-bunga-jatinegara", images: " ", price: " " },{ label: "Toko Bunga Jawa & Bali", category: "Collection", url: "/collections/toko-bunga-jawa-bali", images: " ", price: " " },{ label: "Toko Bunga Jayapura", category: "Collection", url: "/collections/toko-bunga-jayapura", images: " ", price: " " },{ label: "Toko Bunga Jelambar - Florist Onine 24 Jam", category: "Collection", url: "/collections/toko-bunga-jelambar", images: " ", price: " " },{ label: "Toko Bunga Jember", category: "Collection", url: "/collections/toko-bunga-jember", images: " ", price: " " },{ label: "Toko Bunga Jembrana", category: "Collection", url: "/collections/toko-bunga-jembrana", images: " ", price: " " },{ label: "Toko Bunga Jepara", category: "Collection", url: "/collections/toko-bunga-jepara", images: " ", price: " " },{ label: "Toko Bunga Joglo", category: "Collection", url: "/collections/toko-bunga-joglo", images: " ", price: " " },{ label: "Toko Bunga Jombang", category: "Collection", url: "/collections/toko-bunga-jombang", images: " ", price: " " },{ label: "Toko Bunga Kalibata", category: "Collection", url: "/collections/toko-bunga-kalibata", images: " ", price: " " },{ label: "Toko Bunga Kalimantan", category: "Collection", url: "/collections/toko-bunga-kalimantan", images: " ", price: " " },{ label: "Toko Bunga Kalisari Semarang", category: "Collection", url: "/collections/toko-bunga-kalisari-semarang", images: " ", price: " " },{ label: "Toko Bunga Kampung Baru", category: "Collection", url: "/collections/toko-bunga-kampung-baru", images: " ", price: " " },{ label: "Toko Bunga Kapuas", category: "Collection", url: "/collections/toko-bunga-kapuas", images: " ", price: " " },{ label: "Toko Bunga Karanganyar", category: "Collection", url: "/collections/toko-bunga-karanganyar", images: " ", price: " " },{ label: "Toko Bunga Karangasem", category: "Collection", url: "/collections/toko-bunga-karangasem", images: " ", price: " " },{ label: "Toko Bunga Karawang", category: "Collection", url: "/collections/toko-bunga-karawang", images: " ", price: " " },{ label: "Toko Bunga Kartosuro", category: "Collection", url: "/collections/toko-bunga-kartosuro", images: " ", price: " " },{ label: "Toko Bunga Kayoon Surabaya", category: "Collection", url: "/collections/toko-bunga-kayoon-surabaya", images: " ", price: " " },{ label: "Toko Bunga Kebayoran Baru", category: "Collection", url: "/collections/toko-bunga-kebayoran-baru", images: " ", price: " " },{ label: "Toko Bunga Kebon Jeruk", category: "Collection", url: "/collections/toko-bunga-kebon-jeruk", images: " ", price: " " },{ label: "Toko Bunga Kebumen", category: "Collection", url: "/collections/toko-bunga-kebumen", images: " ", price: " " },{ label: "Toko Bunga Kediri", category: "Collection", url: "/collections/toko-bunga-kediri", images: " ", price: " " },{ label: "Toko Bunga Kelapa Gading", category: "Collection", url: "/collections/toko-bunga-kelapa-gading", images: " ", price: " " },{ label: "Toko Bunga Kemayoran", category: "Collection", url: "/collections/toko-bunga-kemayoran", images: " ", price: " " },{ label: "Toko Bunga Kendal", category: "Collection", url: "/collections/toko-bunga-kendal", images: " ", price: " " },{ label: "Toko Bunga Kendari", category: "Collection", url: "/collections/toko-bunga-kendari", images: " ", price: " " },{ label: "Toko Bunga Ketapang", category: "Collection", url: "/collections/toko-bunga-ketapang", images: " ", price: " " },{ label: "Toko Bunga Klaten", category: "Collection", url: "/collections/toko-bunga-klaten", images: " ", price: " " },{ label: "Toko Bunga Klender", category: "Collection", url: "/collections/toko-bunga-klender", images: " ", price: " " },{ label: "Toko Bunga Kota Baru Yogyakarta", category: "Collection", url: "/collections/toko-bunga-kota-baru-yogyakarta", images: " ", price: " " },{ label: "Toko Bunga Kota Batu", category: "Collection", url: "/collections/toko-bunga-kota-batu", images: " ", price: " " },{ label: "Toko Bunga Kramat Jati", category: "Collection", url: "/collections/toko-bunga-kramat-jati", images: " ", price: " " },{ label: "Toko Bunga Kudus", category: "Collection", url: "/collections/toko-bunga-kudus", images: " ", price: " " },{ label: "Toko Bunga Kupang", category: "Collection", url: "/collections/toko-bunga-kupang", images: " ", price: " " },{ label: "Toko Bunga Lamongan", category: "Collection", url: "/collections/toko-bunga-lamongan", images: " ", price: " " },{ label: "Toko Bunga Langkat", category: "Collection", url: "/collections/toko-bunga-langkat", images: " ", price: " " },{ label: "Toko Bunga Lebak Bulus", category: "Collection", url: "/collections/toko-bunga-lebak-bulus", images: " ", price: " " },{ label: "Toko Bunga Lembang", category: "Collection", url: "/collections/toko-bunga-lembang", images: " ", price: " " },{ label: "Toko Bunga Lenteng Agung", category: "Collection", url: "/collections/toko-bunga-lenteng-agung", images: " ", price: " " },{ label: "Toko Bunga Lombok", category: "Collection", url: "/collections/toko-bunga-lombok", images: " ", price: " " },{ label: "Toko Bunga Lubuk Pakam", category: "Collection", url: "/collections/toko-bunga-lubuk-pakam", images: " ", price: " " },{ label: "Toko Bunga Lumajang", category: "Collection", url: "/collections/toko-bunga-lumajang", images: " ", price: " " },{ label: "Toko Bunga Madiun", category: "Collection", url: "/collections/toko-bunga-madiun", images: " ", price: " " },{ label: "Toko Bunga Magelang", category: "Collection", url: "/collections/toko-bunga-magelang", images: " ", price: " " },{ label: "Toko Bunga Majalengka", category: "Collection", url: "/collections/toko-bunga-majalengka", images: " ", price: " " },{ label: "Toko Bunga Makassar", category: "Collection", url: "/collections/toko-bunga-makassar", images: " ", price: " " },{ label: "Toko Bunga Malang", category: "Collection", url: "/collections/toko-bunga-malang", images: " ", price: " " },{ label: "Toko Bunga Manado", category: "Collection", url: "/collections/toko-bunga-manado", images: " ", price: " " },{ label: "Toko Bunga Mangga Besar", category: "Collection", url: "/collections/toko-bunga-mangga-besar", images: " ", price: " " },{ label: "Toko Bunga Manokwari", category: "Collection", url: "/collections/toko-bunga-manokwari", images: " ", price: " " },{ label: "Toko Bunga Maros", category: "Collection", url: "/collections/toko-bunga-maros", images: " ", price: " " },{ label: "Toko Bunga Mataram", category: "Collection", url: "/collections/toko-bunga-mataram", images: " ", price: " " },{ label: "Toko Bunga Medan", category: "Collection", url: "/collections/toko-bunga-medan", images: " ", price: " " },{ label: "Toko Bunga Mojokerto", category: "Collection", url: "/collections/toko-bunga-mojokerto", images: " ", price: " " },{ label: "Toko Bunga Nganjuk", category: "Collection", url: "/collections/toko-bunga-nganjuk", images: " ", price: " " },{ label: "Toko Bunga Ngawi", category: "Collection", url: "/collections/toko-bunga-ngawi", images: " ", price: " " },{ label: "Toko Bunga Nias", category: "Collection", url: "/collections/toko-bunga-nias", images: " ", price: " " },{ label: "Toko Bunga Nusa Tenggara", category: "Collection", url: "/collections/toko-bunga-nusa-tenggara", images: " ", price: " " }, { label: "grand salutation jabodetabek", category: "Produk", url: "/products/grand-salutation", images: "//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: "//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: "//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: "//outerbloom.com/cdn/shop/products/OUTSTF1003_Endearing-Ruby_thumb.jpg?v=1631296611", price: "Rp 585.000" },{ label: "gentle soul jabodetabek", category: "Produk", url: "/products/gentle-soul-jabodetabek", images: "//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: "//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: "//outerbloom.com/cdn/shop/files/Sentiments-Jabodetabek-WM_thumb.jpg?v=1759224099", price: "Rp 485.000" },{ label: "majestic pink roses with baby breath bouquet", category: "Produk", url: "/products/majestic-pink-roses-with-baby-breath-bouquet", images: "//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: "//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: "//outerbloom.com/cdn/shop/products/OUTSTF1004Genuine-Feeling_981ade89-af27-433e-81aa-8d76175a0e4d_thumb.jpg?v=1612352389", price: "Rp 585.000" },{ label: "eternal fidelity jabodetabek", category: "Produk", url: "/products/eternal-fidelity-jabodetabek", images: "//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: "//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: "//outerbloom.com/cdn/shop/files/OBVBUN1051_Dreaming-In-Pink-Luxury-In-Vase_thumb.jpg?v=1771817102", price: "Rp 735.000" },{ label: "excito jabodetabek", category: "Produk", url: "/products/excito", images: "//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: "//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: "//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: "//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: "//outerbloom.com/cdn/shop/files/JKTWED1036_Charming-Forevermore-Jabodetabek-WM_thumb.jpg?v=1703239534", price: "Rp 485.000" },{ label: "with love bouquet", category: "Produk", url: "/products/with-love-bouquet", images: "//outerbloom.com/cdn/shop/products/c5d6fed6-8ada-4c38-ae0f-36d395aacb19_613f78f0-d52c-443b-9e13-63a151cd8ec5_thumb.jpg?v=1590748429", price: "Rp 535.000" },{ label: "moment of glory jabodetabek", category: "Produk", url: "/products/moment-of-glory-jabodetabek", images: "//outerbloom.com/cdn/shop/products/JKTCON1051_Moment-of-Glory-Jabodetabek_2_thumb.jpg?v=1596614663", price: "Rp 385.000" },{ label: "sincerely", category: "Produk", url: "/products/sincerely", images: "//outerbloom.com/cdn/shop/files/Sincerely-WM_thumb.jpg?v=1688354677", price: "Rp 585.000" },{ label: "passion rouge bloom box", category: "Produk", url: "/products/passion-rouge-bloom-box", images: "//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: "//outerbloom.com/cdn/shop/products/JKTWED1005_Sweet-Romance-Jabodetabek_thumb.gif?v=1677134791", price: "Rp 635.000" },{ label: "classic purple orchid majesty in vase", category: "Produk", url: "/products/classic-purple-orchid-majesty-in-vase", images: "//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: "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: "//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: "//outerbloom.com/cdn/shop/products/JKTDUK1034_Everlasting-Peace-Jabodetabek_2_thumb.jpg?v=1596614613", price: "Rp 385.000" },{ label: "classic white orchid majesty in vase", category: "Produk", url: "/products/classic-white-orchid-majesty-in-vase", images: "//outerbloom.com/cdn/shop/products/Classic-white-Orchid-Majesty-in-Vase---white---4-Tangkai_thumb.jpg?v=1644205542", price: "Rp 435.000" },{ label: "black pink bouquet", category: "Produk", url: "/products/black-pink-bouquet", images: "//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: "//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: "//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: "//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: "//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: "//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: "//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: "//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: "//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: "//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: "//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: "//outerbloom.com/cdn/shop/files/Blue-Concerto-WM_thumb.jpg?v=1723708248", price: "Rp 585.000" },{ label: "healing trove", category: "Produk", url: "/products/healing-trove", images: "//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: "//outerbloom.com/cdn/shop/files/OBVBUN1783_Bellarosa-Bloom-Box_c0000424-411c-48ed-abf4-0de7d925ea53_thumb.jpg?v=1757316757", price: "Rp 785.000" }, ]; $( ".header-input-search" ).catcomplete({ appendTo: ".searchResult",source: function(request, response) { var results = $.ui.autocomplete.filter(data, request.term); var predicate = function () { var counter = { Collection: 0, Produk: 0 }; var fn = function(item) {counter[item.category] += 1;return (counter[item.category] <= 5);} return fn }(); response(results.filter(predicate)); }, minLength:1, //results are clickable select: function( event, ui ) {window.location = ui.item.url;} }); $( ".header-input-search2" ).catcomplete({ appendTo: ".searchResult2", source: function(request, response) { var results = $.ui.autocomplete.filter(data, request.term); var predicate = function () { var counter = { Collection: 0, Produk: 0 }; var fn = function(item) { counter[item.category] += 1; return (counter[item.category] <= 5); } return fn }(); response(results.filter(predicate)); }, minLength:1, //results are clickable select: function( event, ui ) { window.location = ui.item.url; } }); }); </script> <script src="//outerbloom.com/cdn/shop/t/138/assets/vendors.js?v=6349622868601634021752652419" defer></script> <script src="//outerbloom.com/cdn/shop/t/138/assets/app.js?v=110161375600675176711769541235" defer></script> <script> ( function() { var youtube = document.querySelectorAll( ".youtube" ); for (var i = 0; i < youtube.length; i++) { var source = "https://img.youtube.com/vi/"+ youtube[i].dataset.embed +"/sddefault_1x.jpg"; var datasource = "https://img.youtube.com/vi/"+ youtube[i].dataset.embed +"/sddefault.jpg"; var image = new Image(); image.src = source; image.setAttribute("data-src", datasource); image.classList.add("swiper-lazy"); image.addEventListener( "load", function() { youtube[ i ].appendChild( image ); }( i ) ); youtube[i].addEventListener( "click", function() { var iframe = document.createElement( "iframe" ); iframe.setAttribute( "width", "480" ); iframe.setAttribute( "height", "480" ); iframe.setAttribute( "frameborder", "0" ); iframe.setAttribute( "allowfullscreen", "" ); iframe.setAttribute( "src", "https://www.youtube.com/embed/"+ this.dataset.embed +"?rel=0&showinfo=0&autoplay=1" ); this.innerHTML = ""; this.appendChild( iframe ); } ); }; } )(); /* Lazy Load */ if (typeof mainLazyLoad === 'undefined') { var mainLazyLoad = new LazyLoad({threshold:400}); } $(document).ready(function(){ $("selectxxx").addClass("needsclick"); FastClick.attach(document.body); // Only initialize select2 on desktop screens (width > 992px) if ($(window).width() > 992) { var $customSelects = $('.select-search'); $customSelects.select2({ templateResult: function(result, container) { if (!result.id) { return result.text; } container.className += ' needsclick'; return result.text; } }); $customSelects.each(function(index, el){$(el).data('select2').$container.find('*').addClass('needsclick');}); $(document).on('select2:open', () => { document.querySelector('.select2-search__field').focus(); }); } $(".overlay").click(function(){ $(".js-drawer-close").click(); }); $(".site-nav--mobile .js-drawer-open-left, #NavDrawer .icon-close, .overlay-nav").click(function(){ $("html").toggleClass("nav_open"); }); $('.swatch-element label').on('click', function(){ var srcImg = $(this).data('src'); $('#thumb-image-product .product-single__thumbnail').each(function(){ if ($(this).attr("href") == srcImg) { $(this).trigger('click'); } }); }); var defaultValue = $(".swatch input:checked").val() $('#purchaseProduct .swatch [type=radio]').change(function() { var optionIndex = $(this).closest('.swatch').attr('data-option-index'); var optionValue = $(this).val(); console.log(optionIndex, optionValue) var value = parseInt(optionValue.split(' ')[0]) $(this) .closest('#purchaseProduct') .find('.single-option-selector') .eq(optionIndex) .val(optionValue) .trigger('change'); }); }); $(document).ready(function(){ $(".nav-search a").click(function(e){ e.preventDefault(); $(".icon-navsearch").toggle(); $(".icon-navclose").toggle(); $(".site-nav__item > .site-nav__link").toggle(); $(".open-search").toggle(); $(".open-search input").focus(); }); $(".best-price-guarantee").html("<img src='//outerbloom.com/cdn/shop/t/138/assets/logo-best-price-guarantee-grid_75x.png?v=72489032173169839651752652420' alt='Logo Best Price Guarantee'>"); if ($(window).width() < 768) { $(".bg-products .label-tag.valentine").html("<img src='//outerbloom.com/cdn/shop/t/138/assets/icon-valentine_30x.png?v=128458483378922561591768211980' alt='Icon Valentine'>"); $(".bg-products .label-tag.cny").html("<img src='//outerbloom.com/cdn/shop/t/138/assets/icon-cny_45x.png?v=101884295148001743851752652418' alt='Icon CNY'>"); $(".bg-products .label-tag.free-valentine").html("<img src='//outerbloom.com/cdn/shop/t/138/assets/free-valentine_150x.png?v=171641187769238175351752652421' alt='Icon Free Valentine'>"); } else { $(".bg-products .label-tag.valentine").html("<img src='//outerbloom.com/cdn/shop/t/138/assets/icon-valentine_30x.png?v=128458483378922561591768211980' alt='Icon Valentine'>"); $(".bg-products .label-tag.cny").html("<img src='//outerbloom.com/cdn/shop/t/138/assets/icon-cny_60x.png?v=101884295148001743851752652418' alt='Icon CNY'>"); $(".bg-products .label-tag.free-valentine").html("<img src='//outerbloom.com/cdn/shop/t/138/assets/free-valentine_200x.png?v=171641187769238175351752652421' alt='Icon Free Valentine'>"); } $(".bg-products .label-tag.free-cookies").html("<img src='//outerbloom.com/cdn/shop/t/138/assets/free-cookies_80x.png?v=57876' alt='Icon Free Cookies'>"); $(".bg-products .label-tag.mothersday").html("<img src='//outerbloom.com/cdn/shop/t/138/assets/mothers-day_70x.png?v=171373711354766377891752652419' alt='Icon Mothers day'>"); }); </script> <script> /* Lazy Load */ if (typeof mainLazyLoad === 'undefined') { var mainLazyLoad = new LazyLoad({threshold:400}); } // Function to initialize select2 when it's ready (only on desktop >992px) function initializeSelect2() { // Only initialize select2 on desktop screens (width > 992px) if ($(window).width() <= 992) { return; } var $customSelects = $('.select-search'); if ($customSelects.length > 0 && typeof $.fn.select2 !== 'undefined') { try { $customSelects.select2({ templateResult: function(result, container) { if (!result.id) { return result.text; } container.className += ' needsclick'; return result.text; } }); $customSelects.each(function(index, el){ $(el).data('select2').$container.find('*').addClass('needsclick'); }); console.log('Select2 initialized successfully'); } catch(e) { console.warn('Select2 initialization failed:', e); } } else if ($customSelects.length > 0) { // Retry after a short delay if select2 is not yet loaded setTimeout(initializeSelect2, 100); } } $(document).ready(function(){ $("select").addClass("needsclick"); if (typeof FastClick !== 'undefined') { FastClick.attach(document.body); } // Initialize select2 with retry mechanism initializeSelect2(); $(".overlay").click(function(){ $(".js-drawer-close").click(); }); $(".site-nav--mobile .js-drawer-open-left, #NavDrawer .icon-close, .overlay-nav").click(function(){ $("html").toggleClass("nav_open"); }); // Wait for Shopify OptionSelectors to be initialized setTimeout(function() { // Remove any existing handlers first $('.swatch :radio').off('change.swatchHandler'); // Attach new handler with namespace - use event delegation $(document).off('change.swatchHandler', '.swatch :radio'); $(document).on('change.swatchHandler', '.swatch :radio', function() { var optionIndex = $(this).closest('.swatch').attr('data-option-index'); var optionValue = $(this).val(); // Find the corresponding single option selector var $selector = $('.single-option-selector[data-index="option' + (parseInt(optionIndex) + 1) + '"]'); // If not found, try alternative selector if ($selector.length === 0) { $selector = $('#productSelect-option-' + optionIndex); } // If still not found, try finding by position if ($selector.length === 0) { $selector = $('.single-option-selector').eq(optionIndex); } if ($selector.length > 0) { $selector.val(optionValue).trigger('change'); } }); }, 300); }); $(window).load(function(){ $(".best-price-guarantee").html("<img src='//outerbloom.com/cdn/shop/t/138/assets/logo-best-price-guarantee-grid_65x.png?v=72489032173169839651752652420' alt='Logo Best Price Guarantee'>"); }); </script> <script type="text/javascript"> var wishlistpage = 0; var quickShop_money_format="<span class='money'>"+"Rp {{amount_no_decimals}}"+"</span>"; </script> <!-- Remove duplicate wishlist.js reference --> <style> .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)}} </style> <div class="modal fade" id="modalwishlist0" tabindex="-1" role="dialog"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-body">Your Wishlist is empty!</div> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> </div> </div> </div> <div class="wishlist-model"> <div class="modal fade" id="modalwishlist1" tabindex="-1" role="dialog" aria-hidden="true"> <div class="modal-dialog white-modal"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <svg class="icon icon-close" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> <title>icon-close</title> <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> </svg> </button> </div> <div class="modal-body"> <div class="wishlist-left"> <div class="wishlist-note"> <span class="cirle"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> <title>icon-check</title> <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> </svg></span> Product added to <a href="/pages/wish-list">Wishlist</a> </div> <div class="wishlist-product"> <div class="product-left"> <div class="wishlist-image"></div> </div> <div class="product-right"> <div class="wishlist-name"></div> <div class="wishlist-price"></div> </div> </div> </div> <div class="wishlist-right"> <div class="wishlist-cart"> <form action="/cart/add" method="post" class="variants-form variants" id="AddToCartForm" enctype="multipart/form-data" data-hs-cf-bound="true"> <div class="others-bottom"> <a class="btn btn-quick-shop" href="/pages/wish-list">View Wishlist</a> <button type="submit" name="add" id="AddToCart" class="btn btn-cta"> <span id="AddToCartText" class="">Buy Now</span> </button> </div> <div id="wishlist-variants-container" class="variants-wrapper"></div> <div class="quantity-content"> <label>QTY</label> <div class="js-qty mt-2"> <button type="button" data-action="minus" class="js-qty__adjust js-qty__adjust--minus" data-id="" data-qty="0"> <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> <span class="visually-hidden">Kurangi jumlah barang</span> </button> <input type="text" class="js-qty__num" value="1" min="1" data-id="" aria-label="quantity" pattern="[0-9]*" name="quantity" id="" /> <button type="button" data-action="plus" class="js-qty__adjust js-qty__adjust--plus" data-id="" data-qty="11"> <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> <span class="visually-hidden">Tambahkan jumlah barang</span> </button> </div> </div> </form> </div> </div> </div> </div> </div> </div> </div> <script type="application/ld+json"> { "@context": "http://schema.org/", "@type": "Product", "url": "https://www.bellabasera.com/about.php", "name": "HOKI88BOS: Layanan Ekslusif Aplikasi Slot88 dengan Akses Cepat", "image": "https:https://studiointermedia.com/images/2026/03/22/foto.jpeg?v=1643976096", "description": "<ul> <li><strong>Platform Terbaik Dengan Sistem Modern</strong></li> <li> <strong>Diawetkan dengan Proses Alami Sehingga Bisa </strong><strong>Bertahan Hingga 3 Tahun</strong> </li> <li> <strong>Display Menawan dalam <em>Borosilicate Glass Dome</em> Eksklusif</strong><strong> dengan Drawer Box Premium + Pita Satin Outerbloom</strong><br> </li> </ul> <p><strong><em>"For a love that is romantic. A passionate romance that everyone long for their whole life and only a few are lucky enough to experience it."</em></strong></p> <p><span>HOKI88BOS menhadirkan layanan eklusif si aplikasi slot88 yang di dukung dengan server terbaik dengan akses cepat dan juga menawarkan permainan terbaru dengan winrate tinggi di jamin mudah menang.</span></p> <p><span>Mawar Passionate Red adalah bunga pilihan yang dipetik oleh tangan para ahli bunga kami secara teliti, kemudian diawetkan melalui serangkaian proses alami sehingga bisa sampai di tangan Anda dalam kondisi sempurna, layaknya bunga segar yang mekar di taman. Dirangkai dengan indah di dalam <i>glass dome </i>eksklusif, berikan Enchanted Dome - Passionate Red kepada si dia untuk menunjukkan bahwa Anda mencintainya sepenuh hati.</span></p> <p><span><em><iframe width="560" height="315" src="https://www.youtube.com/embed/tGskw4gXTy0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe></em></span></p> <p> </p> <table width="100%"> <tbody> <tr> <td>SKU</td> <td>[C]OUTBUN1159</td> </tr> <tr> <td>Jumlah Bunga</td> <td>1 Tangkai</td> </tr> <tr> <td>Jenis dan Warna Bunga</td> <td>Preserved Rose Warna Passionate Red</td> </tr> <tr> <td>Ukuran Box </td> <td>18,5 cm x 18,5 cm x 30,5 cm</td> </tr> </tbody> </table> <h2>As Seen Blooms in The Arms of:</h2> <p><img src="https://cdn.shopify.com/s/files/1/1589/6833/files/WhatsApp_Image_2019-02-04_at_11.32.58_AM_1_large.jpeg?v=1549266372" alt="" width="418" height="370"> <img src="https://cdn.shopify.com/s/files/1/1589/6833/files/Screenshot_20200114-161208_2_480x480.png?v=1578994082" alt="" width="401" height="448"></p>", "brand": { "name": "Outerbloom" }, "sku": "[C]OBIBUN1159", "mpn": "[C]OBIBUN1159", "offers": { "@type": "Offer", "priceCurrency": "IDR", "price": "1,885,000", "availability": "http://schema.org/InStock", "seller": { "@type": "Organization", "name": "Outerbloom" }, "url": "https://www.bellabasera.com/about.php" } ,"aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.86, "reviewCount": 79, "bestRating": 5, "worstRating": 1 } } </script> <style> .stamped-badge[data-rating="0.0"]{display: none !Important;} div[data-load-type="continue"] ul.stamped-pagination li.next a, div[data-widget-load-type="continue"] ul.stamped-pagination li.next a { border-radius: 0px; } .stamped-review-body { padding-left: 0px !important; } #product-reviews .stamped-header:after { display:none !Important; } #stamped-main-widget .stamped-container, .stamped-badge-caption,#stamped-reviews-widget { font-family:inherit !important; } </style> <script src="//outerbloom.com/cdn/shop/t/138/assets/variant-sku-handler.js?v=91239063692820757781752652418" defer></script> <!-- Wishlist API Configuration --> <script> window.WISHLIST_API_URL = 'https://app.asmaraku.com'; // Change to production URL // Initialize Shopify object BEFORE wishlist-manager loads window.Shopify = window.Shopify || {}; // Set shop domain - try multiple methods to ensure it's set const shopDomain = ''; if (shopDomain && shopDomain.trim()) { window.Shopify.shop = shopDomain.trim(); } else { // Fallback: try to get from shop.domain or hardcode const shopDomain2 = 'outerbloom.com'; if (shopDomain2 && shopDomain2.trim()) { window.Shopify.shop = shopDomain2.trim(); } else { // Manual fallback - set your shop domain here window.Shopify.shop = 'outerbloom1.myshopify.com'; // TODO: Change this to your actual shop domain } } console.log('[Wishlist Setup] No customer logged in'); </script> <!-- Wishlist Manager - New API Integration (load AFTER customer data) --> <script src="//outerbloom.com/cdn/shop/t/138/assets/wishlist-manager.js?v=32902194101720033021772185906"></script> <script> function myInit(){ StampedFn.init({ apiKey: 'pubkey-hCS8DHE9QbBHhHN89WXFkuJ0Y3422D', sId: '23462' }); } </script> <script async="" onload="myInit()" type="text/javascript" src="https://cdn1.stamped.io/files/widget.min.js"></script><style> .jss59 { background-color: rgba(0, 0, 0, 0.6); } .MuiBackdrop-root { top: 0; left: 0; right: 0; bottom: 0; display: flex; z-index: -1; position: fixed; align-items: center; justify-content: center; background-color: rgba(0, 0, 0, 0.5); -webkit-tap-highlight-color: transparent; } .MuiDialog-scrollPaper { display: flex; align-items: center; justify-content: center; } .MuiDialog-container { height: 100%; outline: 0; } .MuiPaper-elevation24 { 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); } .MuiDialog-paper { margin: 32px; position: relative; overflow-y: auto; } .MuiDialog-paperScrollPaper { display: flex; max-height: calc(100% - 64px); flex-direction: column; } .MuiDialog-paperWidthSm { max-width: 600px; } #location-lock-dialog { top: 20%; left: 0; right: 0; width: 30%; margin: 0px auto; display: block; padding: 30px; z-index: 99999; position: fixed; font-size: 14px; background: rgb(255, 255, 255); box-shadow: rgba(11, 11, 12, 0.2) 2px 4px 5px 0px; text-align: center; font-family: Roboto, Arial, sans-serif; line-height: 1; border-radius: 8px; -webkit-font-smoothing: subpixel-antialiased; } .MuiButtonBase-root { color: inherit; border: 0; cursor: pointer; margin: 0; display: inline-flex; outline: 0; padding: 0; position: relative; align-items: center; user-select: none; border-radius: 0; vertical-align: middle; -moz-appearance: none; justify-content: center; text-decoration: none; background-color: transparent; -webkit-appearance: none; -webkit-tap-highlight-color: transparent; } .MuiIconButton-root { flex: 0 0 auto; color: rgba(0, 0, 0, 0.54); padding: 12px; overflow: visible; font-size: 1.5rem; text-align: center; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 50%; } .MuiIconButton-label { width: 100%; display: flex; align-items: inherit; justify-content: inherit; } .MuiSvgIcon-root { fill: currentColor; width: 1em; height: 1em; display: inline-block; font-size: 1.5rem; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; flex-shrink: 0; user-select: none; } .MuiTouchRipple-root { top: 0; left: 0; right: 0; bottom: 0; z-index: 0; overflow: hidden; position: absolute; border-radius: inherit; pointer-events: none; } .jss36 { color: #222222; font-size: 24px; font-family: Roboto, Arial, sans-serif; font-weight: 500; } .jss37 { color: #555555; padding: 10px 0px 0px; font-size: 14px; } .MuiFormGroup-root { display: flex; flex-wrap: wrap; flex-direction: column; } .MuiFormGroup-row { flex-direction: row; } .jss63 { width: 85%; margin: 15px auto; display: flex; padding: 11px 0px 0px; justify-content: space-evenly; } .MuiFormControlLabel-root { cursor: pointer; display: inline-flex; align-items: center; margin-left: -11px; margin-right: 16px; vertical-align: middle; -webkit-tap-highlight-color: transparent; } .jss70 { margin: 0; } .MuiButtonBase-root { color: inherit; border: 0; cursor: pointer; margin: 0; display: inline-flex; outline: 0; padding: 0; position: relative; align-items: center; user-select: none; border-radius: 0; vertical-align: middle; -moz-appearance: none; justify-content: center; text-decoration: none; background-color: transparent; -webkit-appearance: none; -webkit-tap-highlight-color: transparent; } .MuiIconButton-root { flex: 0 0 auto; color: rgba(0, 0, 0, 0.54); padding: 12px; overflow: visible; font-size: 1.5rem; text-align: center; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 50%; } .MuiIconButton-colorSecondary { color: #f50057; } .jss71 { padding: 9px; } .MuiRadio-root { color: rgba(0, 0, 0, 0.54); } .jss64 { padding: 2px; } .MuiRadio-colorSecondary.Mui-checked { color: #f50057; } .MuiIconButton-label { width: 100%; display: flex; align-items: inherit; justify-content: inherit; } .MuiTypography-root { margin: 0; } .MuiTypography-body1 { font-size: 18px; font-family: Roboto,sans-serif; font-weight: 400; line-height: 1.5; } .location-popup_area-block__sp9Ws { display: -moz-box; display: flex; -moz-box-orient: vertical; -moz-box-direction: normal; flex-direction: column; -moz-box-pack: center; justify-content: center; position: relative; margin: 10px 10% 0; } .location-popup_pin-search-box__3l5mJ { width: 100%; display: -moz-box; display: flex; -moz-box-align: center; align-items: center; } .location-popup_place-icon-city__1XAX5, .location-popup_place-icon__jSG0Q { position: absolute; z-index: 999; } .location-popup_place-icon__jSG0Q { color: #212121; padding-left: 8px; } .location-popup_place-icon__jSG0Q svg { width: 18px; height: 18px; } .location-popup_cancel-icon__FHujU { color: #fff; right: 10px; width: 16px; cursor: pointer; height: 16px; display: none; padding: 5px; position: absolute; background: #999; text-align: center; border-radius: 50%; } .location-popup_pin-search-box__3l5mJ>div>select { /* -webkit-box-shadow: 0 0 10px #212121; box-shadow: 0 0 10px #212121; */ text-transform: capitalize; border: 1px solid #212121; color: #212121; width: 100%; margin: 0; display: -moz-box; display: flex; padding: 0 30px; -webkit-animation: location-popup_focuses__1I8Gj 1.5s ease-in-out infinite; -moz-animation: location-popup_focuses__1I8Gj 1.5s ease-in-out infinite; animation: location-popup_focuses__1I8Gj 1.5s ease-in-out infinite; font-size: 16px; border-radius: 4px; height: 44px; moz-animation: location-popup_focuses__1I8Gj ease-in-out 1.5s infinite; webkit-animation: location-popup_focuses__1I8Gj ease-in-out 1.5s infinite; } .MuiButtonBase-root { color: inherit; border: 0; cursor: pointer; margin: 0; display: inline-flex; outline: 0; padding: 0; position: relative; align-items: center; user-select: none; border-radius: 0; vertical-align: middle; -moz-appearance: none; justify-content: center; text-decoration: none; background-color: transparent; -webkit-appearance: none; -webkit-tap-highlight-color: transparent; } .MuiButton-root { color: rgba(0, 0, 0, 0.87); padding: 6px 16px; font-size: 0.875rem; min-width: 64px; box-sizing: border-box; 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; font-family: Roboto,sans-serif; font-weight: 500; line-height: 1.75; border-radius: 4px; text-transform: uppercase; } .MuiButton-contained { color: rgba(0, 0, 0, 0.87); 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); background-color: #e0e0e0; } .MuiButtonBase-root.Mui-disabled { cursor: default; pointer-events: none; } .MuiButton-label { width: 100%; display: inherit; align-items: inherit; justify-content: inherit; } .cartButton_login_content__2j1f7 { display: -moz-box; display: flex; text-align: center; z-index: 9; font-size: 18px; font-weight: 500; color: #fff; } .jss35 { top: 5px; right: 5px; padding: 4px; position: absolute; border-radius: 50%; } .jss67 { cursor: pointer; font-size: 15px; line-height: 1.3; padding-left: 5px; } .jss69 { color: #222222; } .jss80 { color: #fff; width: 100%; height: 52px; padding: 11px 16px; font-size: 18px; min-width: 88px; min-height: 36px; 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; font-weight: 500; line-weight: 1em; border-radius: 4px; text-transform: uppercase; background-color: #E87325; } @media (min-width: 991px){ .cartButton_login_content__2j1f7 { font-weight: 500; } } @media (max-width: 992px) { #location-lock-dialog { width: 100%; top: auto; bottom: 0; padding-left: 0; padding-right: 0; } .MuiFormGroup-row { display: block } .MuiIconButton-label input { margin: 0; } } </style> <div role="presentation" class="MuiDialog-root jss34" style="display: none;position: fixed; z-index: 9999; inset: 0px;"> <div class="MuiBackdrop-root" aria-hidden="true" style="opacity: 1; transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;"></div> <div tabindex="0" data-test="sentinelStart"></div> <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;"> <div class="MuiPaper-root MuiDialog-paper MuiDialog-paperScrollPaper MuiDialog-paperWidthSm MuiPaper-elevation24 MuiPaper-rounded" role="dialog"> <div class="jss31 undefined" id="location-lock-dialog"> <button id="close-popup-delivery" class="MuiButtonBase-root MuiIconButton-root jss35" tabindex="0" type="button" aria-label="close"> <span class="MuiIconButton-label"> <svg class="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" aria-hidden="true"> <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> </svg> </span> <span class="MuiTouchRipple-root"></span> </button> <div> <div class="jss36">Select Delivery Location</div> <div class="jss37">Select a delivery location to see product availability</div> </div> <div class="MuiFormGroup-root jss63 MuiFormGroup-row" role="radiogroup"> <label for="jabodetabek" class="MuiFormControlLabel-root jss45"> <span class="MuiButtonBase-root MuiIconButton-root jss46 MuiRadio-root MuiRadio-colorSecondary jss39 jss47 Mui-checked MuiIconButton-colorSecondary" aria-disabled="false"> <span class="MuiIconButton-label"> <input id="jabodetabek" class="jss49" type="radio" value="Jabodetabek" checked name="location" /> <span class="jss41"></span> </span> <span class="MuiTouchRipple-root"></span> </span> <span class="MuiTypography-root MuiFormControlLabel-label MuiTypography-body1"> <span class="jss67 jss69">Jabodetabek</span> </span> </label> <label for="non-jabodetabek" class="MuiFormControlLabel-root jss45"> <span class="MuiButtonBase-root MuiIconButton-root jss46 MuiRadio-root MuiRadio-colorSecondary jss39 MuiIconButton-colorSecondary" aria-disabled="false"> <span class="MuiIconButton-label"> <input id="non-jabodetabek" class="jss49" type="radio" value="Outside Jabodetabek" name="location" /> <span class="jss40"></span> </span> <span class="MuiTouchRipple-root"></span> </span> <span class="MuiTypography-root MuiFormControlLabel-label MuiTypography-body1"> <span class="jss67 jss68">Outside Jabodetabek</span> </span> </label> </div> <div> <div class="MuiGrid-root location-popup_area-block__sp9Ws"> <div class="MuiGrid-root location-popup_pin-search-box__3l5mJ false"> <div class="MuiGrid-root location-popup_place-icon__jSG0Q"> <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> </div> <div class="MuiGrid-root location-popup_cancel-icon__FHujU false"> <i class="material-icons location-popup_clear-pin__s1dRc">close</i> </div> <div style="width: 100%;"> <select id="choose-location" class="form-control"> <option value="" selected>Choose Location</option> <option value="jakarta">Jakarta</option> <option value="bogor">Bogor</option> <option value="depok">Depok</option> <option value="tangerang">Tangerang</option> <option value="bekasi">Bekasi</option> </select> </div> </div> </div> </div> <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=""> <span class="MuiButton-label"> <span class=""></span> <span id="location-lock-continue-btn" class="cartButton_login_content__2j1f7" style="font-weight: 500;" data-content="">Continue Shopping</span> </span> </button> </div> </div> </div> <div tabindex="0" data-test="sentinelEnd"></div> </div> <script> const jabodetabek = [ { "code": "jakarta", "city": "jakarta", "zip": [] }, { "code": "bogor", "city": "bogor", "zip": [] }, { "code": "depok", "city": "depok", "zip": [] }, { "code": "tangerang", "city": "tangerang", "zip": [] }, { "code": "bekasi", "city": "bekasi", "zip": [] } ] let cityNonJabodetabek = [ "pengiriman_aceh", "pengiriman_ambon", "pengiriman_atambua", "pengiriman_badung", "pengiriman_bali", "pengiriman_balikpapan", "pengiriman_bandar lampung", "pengiriman_bandung", "pengiriman_bandung barat", "pengiriman_banjarmasin", "pengiriman_banyumas", "pengiriman_banyuwangi", "pengiriman_batam", "pengiriman_biak", "pengiriman_binjai", "pengiriman_blitar", "pengiriman_blora", "pengiriman_bojonegoro", "pengiriman_boyolali", "pengiriman_bukittinggi", "pengiriman_buleleng", "pengiriman_ciamis", "pengiriman_cianjur", "pengiriman_cibinong", "pengiriman_cikarang", "pengiriman_cikupa", "pengiriman_cilacap", "pengiriman_cileunyi", "pengiriman_cimahi", "pengiriman_cirebon", "pengiriman_ciwidey", "pengiriman_deli serdang", "pengiriman_demak", "pengiriman_denpasar", "pengiriman_garut", "pengiriman_gianyar", "pengiriman_gresik", "pengiriman_gunung kidul", "pengiriman_jambi", "pengiriman_jayapura", "pengiriman_jember", "pengiriman_jepara", "pengiriman_jombang", "pengiriman_karanganyar", "pengiriman_karawang", "pengiriman_karo", "pengiriman_kebumen", "pengiriman_kediri", "pengiriman_keerom", "pengiriman_kendal", "pengiriman_klaten", "pengiriman_kudus", "pengiriman_kupang", "pengiriman_lainnya", "pengiriman_lamongan", "pengiriman_lampung", "pengiriman_lampung barat", "pengiriman_lembang", "pengiriman_lombok", "pengiriman_lumajang", "pengiriman_madiun", "pengiriman_magelang", "pengiriman_majalengka", "pengiriman_makassar", "pengiriman_malang", "pengiriman_manado", "pengiriman_medan", "pengiriman_mengwi", "pengiriman_mojokerto", "pengiriman_nganjuk", "pengiriman_ngawi", "pengiriman_padang", "pengiriman_palembang", "pengiriman_palu", "pengiriman_pasuruan", "pengiriman_pati", "pengiriman_pekalongan", "pengiriman_pekanbaru", "pengiriman_pemalang", "pengiriman_ponorogo", "pengiriman_pontianak", "pengiriman_probolinggo", "pengiriman_purbalingga", "pengiriman_purwakarta", "pengiriman_purwokerto", "pengiriman_rembang", "pengiriman_riau", "pengiriman_salatiga", "pengiriman_samarinda", "pengiriman_semarang", "pengiriman_sentani", "pengiriman_serang", "pengiriman_sidoarjo", "pengiriman_singkawang", "pengiriman_sragen", "pengiriman_subang", "pengiriman_sukabumi", "pengiriman_sumbawa", "pengiriman_surabaya", "pengiriman_surakarta solo", "pengiriman_tasikmalaya", "pengiriman_tegal", "pengiriman_timika", "pengiriman_wamena", "pengiriman_wiyung", "pengiriman_wonokromo", "pengiriman_yogyakarta", ] let non_jabodetabek = [] for(var i=0;i<cityNonJabodetabek.length;i++) { const obj = { "code": cityNonJabodetabek[i].toLowerCase().replace('pengiriman_', '').replace(' ','-'), "city": cityNonJabodetabek[i].replace('pengiriman_', '').replace(' ','-'), "zip": [] } non_jabodetabek.push(obj) } let current_location = getCookie("location_delivery") $("[name=location]").change(function(){ let v = $(this).val() let option = [] if(v == 'Jabodetabek') { for(var i=0;i<jabodetabek.length;i++) { const jabodetabekHtml = `<option value=${jabodetabek[i].city}>${jabodetabek[i].city}</option>` option.push(jabodetabekHtml) } $("#choose-location").html(`<option value="">Choose Location</option>${option}`) } else { for(var i=0;i<non_jabodetabek.length;i++) { const nonjabodetabekHtml = `<option value=${non_jabodetabek[i].city}>${non_jabodetabek[i].city}</option>` option.push(nonjabodetabekHtml) } $("#choose-location").html(`<option value="">Choose Location</option>${option}`) } }) $("#location-lock-submit").click(function(e){ let select = $("#choose-location") let value = select.val().toLowerCase() console.log(value) if(select.val() == "") { return alert("Choose Your Location") e.preventDefault() } setCookie("location_delivery",value,1000000); location.reload(); }) $("#close-popup-delivery").click(function(){ $(".MuiDialog-root").hide() if(!current_location){ setCookie("location_delivery","jakarta",1000000); $("#loc_delivery_city, #loc_delivery_city_mobile").text("Jakarta") } }) $("#loc_delivery, #loc_delivery_mobile").click(function(){ $(".MuiDialog-root").show() }) if(!current_location){ } else { $("#loc_delivery_city, #loc_delivery_city_mobile").text(current_location) $("#choose-location").each(function(){ if(current_location == 'jakarta' || current_location == 'depok' || current_location == 'bogor' || current_location == 'tangerang' || current_location == 'bekasi'){ $("#jabodetabek").trigger("click") } else { $("#non-jabodetabek").trigger("click") } $("#choose-location").find("option[value="+current_location+"]").attr("selected", "selected") }) } // 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'){ // $("#timeMalam").attr("disabled", false) // } else { // $("#timeMalam").attr("disabled", true) // } if(current_location && current_location != 'jakarta') { $("#self-pickup").attr("disabled", true) } function setCookie(name,value,days) { var expires = ""; if (days) { var date = new Date(); date.setTime(date.getTime() + (days*24*60*60*1000)); expires = "; expires=" + date.toUTCString(); } document.cookie = name + "=" + (value || "") + expires + "; path=/"; } function getCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } </script> <!-- One Tap --> <script> console.log("Outerbloom..."); </script> <!-- Initialize User Data (IP, Browser, Device) --> <div id="shopify-block-ATzRpVTBPU3k1R2pnW__286197278318599166" class="shopify-block shopify-app-block"> <div style="position: fixed; bottom: 0; right: 0"></div> <script> console.info("bitlogin extension version: v2.5.7"); const googleScript = document.createElement("script"); googleScript.setAttribute("src", "https://accounts.google.com/gsi/client"); document.head.append(googleScript); const bitLoginBaseUrl = "https://api.bitbybit.studio"; const apiUrl = `${bitLoginBaseUrl}/bitlogin/api`; const 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"}}; const 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":"amzn1.oa2-cs.v1.1cb5f9085a202341f60daf5a7be16c570ccc0b4bd5908b3afd080f34e9b8935d","appleTeamId":null,"applePrivateKey":null,"usePersonalOauth":false,"position":null}]; const urlSearchParams = new URLSearchParams(window.location.search); const checkoutUrl = urlSearchParams.get("checkout_url"); const redirectUrl = checkoutUrl || appearance.redirectLink; let locationCacheSet = false; let errorLocation = false; let oneTapSet = false; let bitloginCache = { appearance: appearance, config: config }; let isInitializing = false; const queue = []; // Add CSS for the popup const popupStyles = document.createElement('style'); popupStyles.textContent = ` /* Styles for login popup */ .bitlogin-popup-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.45); backdrop-filter: blur(4px); display: flex; align-items: center; justify-content: center; opacity: 0; transition: opacity 0.3s ease-in-out; z-index: 999999; } .bitlogin-popup-overlay.visible { opacity: 1; } .bitlogin-popup { background: #FFFFFF; box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); border-radius: 16px; width: 100%; max-width: 560px; display: flex; overflow: hidden; position: relative; opacity: 0; transform: translateY(20px) scale(0.98); transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); } .bitlogin-popup.visible { opacity: 1; transform: translateY(0) scale(1); } .bitlogin-popup-with-image { max-width: 640px; } .bitlogin-popup-right-image { flex-direction: row-reverse; } .bitlogin-popup-image { object-fit: cover; width: 50%; height: auto; } .bitlogin-popup-content { padding: 32px; position: relative; width: 50%; } .bitlogin-popup-close { position: absolute; top: 16px; right: 16px; background: white; border: none; width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: background-color 0.2s; color: inherit; padding: 0; } .bitlogin-popup-close:hover { background-color: #e5e5e5; } .bitlogin-popup-buttons { display: flex; flex-direction: column; gap: 12px; margin-top: 24px; } /* Button styles within popup - override width for popup buttons */ .bitlogin-popup-buttons #google-login, .bitlogin-popup-buttons #facebook-login, .bitlogin-popup-buttons #apple-login, .bitlogin-popup-buttons #whatsapp-login, .bitlogin-popup-buttons #microsoft-login, .bitlogin-popup-buttons #twitter-login, .bitlogin-popup-buttons #amazon-login, .bitlogin-popup-buttons #instagram-login, .bitlogin-popup-buttons #magic-link-login, .bitlogin-popup-buttons #mobile-app-login { width: 100% !important; font-family: inherit !important; } .bitlogin-popup-footer { margin-top: 32px; text-align: center; font-size: 14px; opacity: 0.6; } /* Modern Typography */ .bitlogin-popup h2 { margin-top: 12px; font-size: 21px !important; line-height: 1.2 !important; font-weight: 700 !important; letter-spacing: -0.02em !important; margin-bottom: 16px !important; } .bitlogin-popup-header { position: relative; margin-bottom: 24px; } /* Modern gradient accent */ .bitlogin-popup-content > div { font-size: 16px !important; line-height: 1.2 !important; opacity: 0.85 !important; } /* Enhanced button interactions */ .bitlogin-popup-buttons button { position: relative; overflow: hidden; } @keyframes ripple { 0% { transform: scale(0, 0); opacity: 0.5; } 100% { transform: scale(100, 100); opacity: 0; } } /* Responsive adjustments */ @media (max-width: 640px) { .bitlogin-popup { max-width: 90%; width: 90%; margin: 0 16px; } .bitlogin-popup-with-image { flex-direction: column !important; } .bitlogin-popup-image { width: 100%; height: 180px; } .bitlogin-popup-content { padding: 24px; } .bitlogin-popup h2 { font-size: 24px !important; } } `; document.head.appendChild(popupStyles); // Add fonts link for different font options const fontsLink = document.createElement('link'); fontsLink.rel = 'stylesheet'; fontsLink.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'; document.head.appendChild(fontsLink); (async () => { try { let host = window.location.host; if (host === "admin.shopify.com") { host = `${window.location.pathname.split("/")[2]}.myshopify.com`; } const urlSearchParams = new URLSearchParams(window.location.search); const checkoutUrl = urlSearchParams.get("checkout_url"); async function init({ inputRef, index }) { if (isInitializing) { queue.push(() => init({ inputRef, index })); return; } isInitializing = true; try { let bitLoginSectionRoot = document.querySelector( `.bitlogin-root[data-index="${index}"]` ); const formRef = inputRef?.closest( "form:not([action='/account/recover'])" ); if (formRef && !bitLoginSectionRoot) { await getLocation(); bitLoginSectionRoot = document.createElement(`div`); bitLoginSectionRoot.setAttribute("class", "bitlogin-root"); bitLoginSectionRoot.setAttribute("data-index", `${index}`); updateAppearance({ formRef, rootRef: bitLoginSectionRoot, host, }); } } catch (err) { console.error(`error while initiating bitlogin extensions`, err); } finally { // Release the lock isInitializing = false; // Check if there are pending items in the queue if (queue.length > 0) { // Process the next function in the queue const nextFunction = queue.shift(); nextFunction(); } } } function initAll() { return new Promise((resolve, reject) => { setTimeout(async () => { const inputRefs = document.querySelectorAll( 'input[name="customer[email]"]' ); for (let i = 0; i < inputRefs.length; i++) { const currentInputRef = inputRefs[i]; const isVisible = isElementVisible(currentInputRef); if (isVisible) { await init({ inputRef: currentInputRef, index: i }); } } resolve("ok"); }, 100); }); } const observer = new MutationObserver((mutationsList) => { for (let mutation of mutationsList) { initAll(); } }); observer.observe(document.body, { childList: true, subtree: true, attributes: true, }); initAll(); if (appearance.googleOneTap) { setupOneTap({ host, checkoutUrl }); } // Initialize popup await initPopup(host); } catch (error) { console.error("Error initializing BitLogin:", error); } })(); async function initPopup(host) { // Check if user is already logged in using Liquid checks properly const isLoggedIn = false || document.querySelector('.customer-logout-link') || document.querySelector('.account-link') || window.location.pathname.includes('/account'); if (isLoggedIn) { return; // User is logged in, don't show popup } try { // Fetch the popup configuration const popupConfig = await fetch(`${apiUrl}/appearance/popup/domain/${host}`) .then(res => res.json()) .catch(err => { console.error('Error fetching popup configuration:', err); return null; }); if (!popupConfig || !popupConfig.enabled) { return; // Don't show popup if disabled or config not found } // Create popup after 10 seconds setTimeout(() => { // Check if user is still on the page and still not logged in if (document.visibilityState === 'visible') { // Additional check in case user logged in during the 10 second wait const currentlyLoggedIn = false || document.querySelector('.customer-logout-link') || document.querySelector('.account-link'); if (!currentlyLoggedIn) { createLoginPopup(popupConfig, host); } } }, 10000); } catch (error) { console.error('Error initializing popup:', error); } } function createLoginPopup(popupConfig, host) { // Font mapping const fontFamilyMap = { system_fonts: 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif', montserrat: 'Montserrat, sans-serif', roboto: 'Roboto, sans-serif', open_sans: 'Open Sans, sans-serif', noto_sans: 'Noto Sans, sans-serif', lato: 'Lato, sans-serif', poppins: 'Poppins, sans-serif', quicksand: 'Quicksand, sans-serif', raleway: 'Raleway, sans-serif', pt_sans: 'PT Sans, sans-serif', oswald: 'Oswald, sans-serif', }; // Create overlay const overlay = document.createElement('div'); overlay.className = 'bitlogin-popup-overlay'; // Create popup container with appropriate styling const popup = document.createElement('div'); popup.className = 'bitlogin-popup'; if (popupConfig.layout === 'default') { popup.style.maxWidth = '400px'; } // Function to close the popup const closePopup = () => { overlay.classList.remove('visible'); popup.classList.remove('visible'); setTimeout(() => { if (document.body.contains(overlay)) { document.body.removeChild(overlay); } }, 300); }; // Add click handler to the overlay to close when clicking outside overlay.addEventListener('click', (event) => { // Close only if clicking directly on the overlay, not its children if (event.target === overlay) { closePopup(); } }); // Add escape key handler to close popup document.addEventListener('keydown', (event) => { if (event.key === 'Escape' && document.body.contains(overlay)) { closePopup(); } }); // Create layout with image if specified let contentWrapper; if (popupConfig.layout !== 'default' && popupConfig.popupImage) { popup.classList.add('bitlogin-popup-with-image'); if (popupConfig.layout === 'right') { popup.classList.add('bitlogin-popup-right-image'); } // Add image const image = document.createElement('img'); image.className = 'bitlogin-popup-image'; image.src = popupConfig.popupImage; image.alt = 'Login'; image.loading = 'lazy'; popup.appendChild(image); // Create content container contentWrapper = document.createElement('div'); contentWrapper.className = 'bitlogin-popup-content'; if (popupConfig.layout === 'right') { const closeButton = document.createElement('button'); closeButton.className = 'bitlogin-popup-close'; closeButton.innerHTML = `<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M13 1L1 13M1 1L13 13" stroke="${popupConfig.fontColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg>`; closeButton.setAttribute('aria-label', 'Close'); closeButton.onclick = closePopup; popup.appendChild(closeButton); } } else { contentWrapper = document.createElement('div'); contentWrapper.className = 'bitlogin-popup-content'; contentWrapper.style.width = '100%'; } // Set background style if (popupConfig.backgroundTheme === 'gradient') { contentWrapper.style.background = `linear-gradient(135deg, ${popupConfig.backgroundPopupColor}, ${popupConfig.gradientColor})`; } else { contentWrapper.style.backgroundColor = popupConfig.backgroundPopupColor; } // Apply font family contentWrapper.style.setProperty('font-family', fontFamilyMap[popupConfig.font] || fontFamilyMap.system_fonts, 'important'); if (popupConfig.layout !== 'right') { const closeButton = document.createElement('button'); closeButton.className = 'bitlogin-popup-close'; closeButton.innerHTML = `<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M13 1L1 13M1 1L13 13" stroke="${popupConfig.fontColor}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg>`; closeButton.setAttribute('aria-label', 'Close'); closeButton.onclick = closePopup; contentWrapper.appendChild(closeButton); } // Add heading with subtle animation effect const header = document.createElement('div'); header.className = 'bitlogin-popup-header'; const heading = document.createElement('h2'); heading.textContent = popupConfig.headingText || 'Sign in for exclusive benefits'; heading.style.color = popupConfig.fontColor; header.appendChild(heading); // Add body text with improved formatting const bodyText = document.createElement('div'); bodyText.innerHTML = popupConfig.bodyText || 'Join our community to access exclusive offers and a personalized shopping experience.'; bodyText.style.color = popupConfig.fontColor; header.appendChild(bodyText); contentWrapper.appendChild(header); // Create buttons container with modern styling const buttonsContainer = document.createElement('div'); buttonsContainer.className = 'bitlogin-popup-buttons'; // Add social buttons const providerLabels = { 'GOOGLE': 'Continue with Google', 'FACEBOOK': 'Continue with Facebook', 'APPLE': 'Continue with Apple', 'WHATSAPP': 'Continue with WhatsApp', 'MAGIC_LINK': 'Continue with Email', }; // Add first login provider button if (popupConfig.loginProvider1 !== 'NONE') { const buttonConfig = { theme: popupConfig.colorScheme || 'match', customColor: popupConfig.textColor, format: 'contentFlex', buttonText: bitloginCache.appearance.buttonList[popupConfig.loginProvider1.toLowerCase()], hasShadow: popupConfig.hasShadow !== undefined ? popupConfig.hasShadow : true, style: popupConfig.style || 'rounded', size: popupConfig.size || 'medium', colorScheme: popupConfig.colorScheme || 'match', backgroundColor: popupConfig.backgroundColor || '#3B82F6', textColor: popupConfig.textColor || '#FFFFFF', outlineColor: popupConfig.outlineColor || '#3B82F6', host: host }; const button1 = createSocialLoginButton(popupConfig.loginProvider1, buttonConfig); // Handle click event - this overrides the default click handler in createSocialLoginButton button1.onclick = () => { onClickSocialLogin({ provider: popupConfig.loginProvider1.toLowerCase(), host }); closePopup(); }; buttonsContainer.appendChild(button1); } // Add second login provider button if enabled if (popupConfig.loginProvider2 !== 'NONE') { const buttonConfig = { theme: popupConfig.colorScheme || 'match', customColor: popupConfig.textColor, format: 'contentFlex', buttonText: bitloginCache.appearance.buttonList[popupConfig.loginProvider2.toLowerCase()], hasShadow: popupConfig.hasShadow !== undefined ? popupConfig.hasShadow : true, style: popupConfig.style || 'rounded', size: popupConfig.size || 'medium', colorScheme: popupConfig.colorScheme || 'match', backgroundColor: popupConfig.backgroundColor || '#3B82F6', textColor: popupConfig.textColor || '#FFFFFF', outlineColor: popupConfig.outlineColor || '#3B82F6', host: host }; const button2 = createSocialLoginButton(popupConfig.loginProvider2, buttonConfig); // Handle click event - this overrides the default click handler in createSocialLoginButton button2.onclick = () => { onClickSocialLogin({ provider: popupConfig.loginProvider2.toLowerCase(), host }); closePopup(); }; buttonsContainer.appendChild(button2); } contentWrapper.appendChild(buttonsContainer); // Append content to popup popup.appendChild(contentWrapper); // Append popup to overlay overlay.appendChild(popup); // Append overlay to body document.body.appendChild(overlay); // Trigger animation with slight delay for better perceived performance setTimeout(() => { overlay.classList.add('visible'); setTimeout(() => { popup.classList.add('visible'); }, 50); }, 10); } window.addEventListener("load", () => { window.addEventListener("message", (event) => { const receivedData = event.data; if (receivedData.type === "authorize") { post( JSON.parse( JSON.stringify({ "customer[email]": receivedData.email, "customer[password]": receivedData.password, form_type: "customer_login", utf8: "✓", return_url: redirectUrl, }) ) ); } else if (receivedData.type === "rejected") { if (receivedData.reason === "customer_account_disabled") { showAlert( "Your account needs to be activated. We've sent you an activation link - please check your email to complete this step." ); } else if (receivedData.reason === "customer_entry_created_email_not_set") { showAlert( "A new account was created but requires an email address. Please update your account with a valid email address to continue." ); } else if (receivedData.reason === "customer_exist_email_not_set") { showAlert( "Your existing account is missing an email address. Please contact support to update your account with a valid email address." ); } } if (receivedData.type === "customer_authenticated") { // Dispatch a custom event that merchants can listen for to implement their custom logic const customerAuthEvent = new CustomEvent('bitlogin:customer_authenticated', { detail: { provider: receivedData.provider, customer: receivedData.customer, shopifyCustomerCreated: receivedData.shopifyCustomerCreated } }); // Dispatch the event on the window object so merchants can listen for it window.dispatchEvent(customerAuthEvent); } }); }); // Reusable functions for social login buttons function createSocialLoginButton(provider, config = {}) { const { theme = 'match', customColor = null, format = 'contentFlex', buttonText = null, hasShadow = true, style = 'rounded', size = 'medium', colorScheme = 'match', backgroundColor = '#3B82F6', textColor = '#FFFFFF', outlineColor = '#3B82F6', rootRef = null, host = null } = config; // Create button element with appropriate ID and attributes const button = document.createElement('button'); button.id = `${provider.toLowerCase()}-login`; button.type = 'button'; // Set the inner SVG based on provider switch (provider.toUpperCase()) { case 'GOOGLE': button.innerHTML = googleLoginIcon(theme, customColor); break; case 'FACEBOOK': button.innerHTML = facebookLoginIcon(theme, customColor); break; case 'APPLE': button.innerHTML = appleLoginIcon(theme, customColor); break; case 'WHATSAPP': button.innerHTML = whatsappLoginIcon(theme, customColor); break; case 'MICROSOFT': button.innerHTML = microsoftLoginIcon(theme, customColor); break; case 'TWITTER': button.innerHTML = twitterLoginIcon(theme, customColor); break; case 'AMAZON': button.innerHTML = amazonLoginIcon(theme, customColor); break; case 'INSTAGRAM': button.innerHTML = instagramLoginIcon(theme, customColor); break; case 'MAGIC_LINK': button.innerHTML = magicLinkLoginIcon(theme, customColor); break; case 'MOBILE_APP': button.innerHTML = mobileAppLoginIcon(theme, customColor); break; case 'LINKEDIN': button.innerHTML = linkedinLoginIcon(theme, customColor); break; } // Add text if format isn't icon-only and buttonText is provided if (format !== "wrapperFlexContainerOnlyLogo" && buttonText) { button.innerHTML += `<p>${buttonText}</p>`; } // Apply styling // Shadow if (hasShadow) { const shadowProperties = `0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)`; button.style["box-shadow"] = shadowProperties; } // Border radius const radiusProperties = style === "rounded" ? "8px" : style === "square" ? "0px" : style === "fullRounded" ? format === "wrapperFlexContainerOnlyLogo" ? "50%" : "50px" : undefined; button.style["border-radius"] = radiusProperties; // Size const sizeProperties = size === "medium" ? "12px" : size === "small" ? "8px" : size === "large" ? "16px" : "8px"; button.style["padding-block"] = sizeProperties; // Format styling if (format) { if ( format === "contentFlexReverse" || format === "contentFlexCenterReverse" ) { const flexDir = `row-reverse`; button.style["flex-direction"] = flexDir; } if ( format === "contentFlexCenter" || format === "contentFlexCenterReverse" ) { const justifyContent = `center`; button.style["justify-content"] = justifyContent; } else if ( format === "contentFlex" || format === "contentFlexReverse" ) { const buttonTextElement = button.querySelector("p"); if (buttonTextElement) { buttonTextElement.style["flex-grow"] = 1; buttonTextElement.style["text-align"] = "center"; } } if (format === "wrapperFlexContainerOnlyLogo" && rootRef) { rootRef.style["flex-direction"] = "row"; rootRef.style["gap"] = "8px"; rootRef.style["display"] = "flex"; rootRef.style["flex-wrap"] = "wrap"; const sizeMapping = { small: "52px", medium: "62px", large: "72px", }; const buttonSize = sizeMapping[size] || "52px"; button.style["margin"] = 0; button.style["width"] = buttonSize; button.style["height"] = buttonSize; button.style["display"] = "flex"; button.style["align-items"] = "center"; button.style["justify-content"] = "center"; const svgElement = button.querySelector("svg"); if (svgElement) { svgElement.style["flex"] = "none"; } } } // Color scheme styling if (colorScheme === "black") { button.classList.add("scheme-black"); } else if (colorScheme === "white") { button.classList.add("scheme-white"); } else if (colorScheme === "custom") { button.style["background-color"] = backgroundColor; button.style["color"] = textColor; button.style["border-color"] = outlineColor; const darkenColor = (color, percentage) => { const value = parseInt(color.slice(1), 16); const r = Math.max(0, ((value >> 16) & 0xff) - (0xff * percentage)); const g = Math.max(0, ((value >> 8) & 0xff) - (0xff * percentage)); const b = Math.max(0, (value & 0xff) - (0xff * percentage)); return `rgb(${Math.round(r)}, ${Math.round(g)}, ${Math.round(b)})`; }; button.addEventListener("mouseover", () => { button.style["background-color"] = darkenColor(backgroundColor, 0.2); }); button.addEventListener("mouseout", () => { button.style["background-color"] = backgroundColor; }); } else if (colorScheme === "match") { button.classList.add("scheme-match"); } else if (colorScheme === "matchOutline") { button.classList.add("scheme-match-outline"); } // Add click event listener if host is provided if (host) { button.addEventListener("click", () => onClickSocialLogin({ provider: provider.toLowerCase(), host }) ); } return button; } function setupSocialLoginButtons(config, rootRef, data, host) { // Clear any existing content rootRef.innerHTML = ''; const sortedEnabledProviders = config .filter(c => c.enabledWeb) .sort((a, b) => a.position - b.position); sortedEnabledProviders.forEach(provider => { const key = provider.provider; const lowerKey = key.toLowerCase(); const buttonText = data.format !== "wrapperFlexContainerOnlyLogo" ? (lowerKey === 'twitter' ? data.buttonList.twitter.replace('Twitter', 'X') : data.buttonList[lowerKey]) : null; const button = createSocialLoginButton(key, { theme: data.colorScheme || 'match', customColor: data.textColor, format: data.format, buttonText: buttonText, hasShadow: data.hasShadow !== undefined ? data.hasShadow : true, style: data.style, size: data.size, colorScheme: data.colorScheme, backgroundColor: data.backgroundColor, textColor: data.textColor, outlineColor: data.outlineColor, rootRef: rootRef, host: host }); rootRef.appendChild(button); }); return rootRef; } function updateAppearance({ formRef, rootRef, host }) { if (!formRef) return; const data = bitloginCache.appearance || { style: "square", hasShadow: false, colorScheme: "match", backgroundColor: "#FFFFFF", outlineColor: "#000000", textColor: "#000000", position: "bottom", hideDivider: "false", dividerText: "OR", size: "small", format: "contentFlex", language: "en", buttonText: "Continue with", redirectLink: "/account", googleOneTap: true, googleOneTapBanner: true, customerTag: "bitLogin", redirectOneTapDesktop: null, redirectOneTapMobile: null, 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", }, }; // Use the new setupSocialLoginButtons function to create and configure all buttons setupSocialLoginButtons(bitloginCache.config, rootRef, data, host); let divider; if (!data.hideDivider) { divider = document.createElement("div"); const dividerStyle = "text-align:center;margin-block:16px"; divider.setAttribute("style", dividerStyle); divider.innerHTML = data.dividerText; } if (data.position === "bottom") { if (divider) { formRef.appendChild(divider); } formRef.appendChild(rootRef); } else if (data.position === "top") { if (divider) { formRef.prepend(divider); } formRef.prepend(rootRef); } } async function onClickSocialLogin({ provider, host }) { const rand = Math.random().toString(); const locationQueryString = bitloginCache.location ? `&${objectToQueryString(bitloginCache.location)}` : ""; const width = 800; const height = 600; const left = (window.screen.width / 2) - (width / 2); const top = (window.screen.height / 2) - (height / 2) - 50; if(provider === 'whatsapp') { window.open( `/apps/bitlogin/whatsapp${locationQueryString ? `?${locationQueryString}` : ''}`, "mywindow", `menubar=1,resizable=1,width=${width},height=${height},top=${top},left=${left}` ); } else { window.open( `${apiUrl}/login/${provider}?referrerId=${rand}&shop=${host}${locationQueryString}`, "mywindow", `menubar=1,resizable=1,width=${width},height=${height},top=${top},left=${left}` ); } } function objectToQueryString(obj) { return Object.keys(obj) .map((key) => { return encodeURIComponent(key) + "=" + encodeURIComponent(obj[key]); }) .join("&"); } async function getLocation() { if (locationCacheSet) return; try { const response = await fetch("https://ipapi.co/json/"); if (!response.ok) { console.error(`error retrieving location...`, response.status); errorLocation = true; } else { const data = await response.json(); const { city, region, country_name, country_code } = data; const formattedLocationData = { city, region, country_name, country_code, }; bitloginCache.location = formattedLocationData; locationCacheSet = true; errorLocation = false; } } catch (err) { console.error(`error fetching location`, err); errorLocation = true; } } function post(params) { // The rest of this code assumes you are not using a library. // It can be made less verbose if you use one. const form = document.createElement("form"); form.method = "post"; form.action = `/account/login`; form.acceptCharset = "UTF-8"; form.setAttribute("data-login-with-shop-sign-in", "true"); form.setAttribute("novalidate", "novalidate"); for (const key in params) { if (params.hasOwnProperty(key)) { const hiddenField = document.createElement("input"); hiddenField.type = "hidden"; hiddenField.name = key; hiddenField.value = params[key]; form.appendChild(hiddenField); } } document.body.appendChild(form); form.submit(); } async function setupOneTap({ host, checkoutUrl }) { if (oneTapSet) return; const redirectOneTapDesktop = JSON.parse(JSON.stringify(bitloginCache.appearance.redirectOneTapDesktop || '[]')); const redirectOneTapMobile = JSON.parse(JSON.stringify(bitloginCache.appearance.redirectOneTapMobile || '[]')); const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); const redirectList = JSON.parse(isMobile ? redirectOneTapMobile : redirectOneTapDesktop); const currentPath = window.location.pathname.toLowerCase(); const currentUrl = window.location.href.toLowerCase(); const shouldHideGoogleOneTap = redirectList.some(({ value }) => { switch (value) { case 'home': return currentPath === '/'; case 'product': return currentPath.startsWith('/products/'); case 'collections': return currentPath.startsWith('/collections'); case 'cart': return currentPath === '/cart'; case 'checkout': return currentPath.startsWith('/checkouts') && !currentPath.includes('thank_you'); case 'thank_you': return currentPath.includes('/thank_you'); case 'account': return currentPath.startsWith('/account'); case 'pages': return currentPath.startsWith('/pages'); case 'blogs': return currentPath === '/blogs' || currentPath === '/blogs/news'; case 'blog_post': return currentPath.startsWith('/blogs/') && currentPath.split('/').length > 3; default: return false; } }); if (shouldHideGoogleOneTap) return; const oneTapClientId = bitloginCache.config.find( (config) => config.provider === "GOOGLE" )?.clientId; const isLoggedIn = false; if (bitloginCache.appearance.googleOneTap && oneTapClientId && !isLoggedIn) { const googleOneTapButton = document.createElement("div"); googleOneTapButton.setAttribute("id", "g_id_onload"); googleOneTapButton.setAttribute("data-client_id", oneTapClientId); googleOneTapButton.setAttribute("data-context", "signin"); googleOneTapButton.setAttribute( "data-callback", "handleGoogleOneTapResponse" ); googleOneTapButton.setAttribute("data-itp_support", "true"); const googleOneTapScript = document.createElement("script"); googleOneTapScript.innerHTML += ` function handleGoogleOneTapResponse(response) { if (response.credential) { const idToken = response.credential; fetch('${bitLoginBaseUrl}/bitlogin/api/login/google-one-tap', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ idToken, shop: "${host}", ...bitloginCache.location }) }).then(response => { response.json().then((data) => { post( JSON.parse( JSON.stringify({ "customer[email]": data.email, "customer[password]": data.password, form_type: "customer_login", utf8: "✓", return_url: redirectUrl, }) ) ); }); }).catch(error => { console.error('Error occurred:', error); }); } else { console.error('No credential available'); } } `; document.body.append(googleOneTapButton); document.body.append(googleOneTapScript); } oneTapSet = true; } const googleLoginIcon = ( theme, customColor ) => ` ${ theme === "match" || theme === "matchOutline" || theme === "custom" ? `<svg xmlns='http://www.w3.org/2000/svg' xmlns:v='https://vecta.io/nano' width='24' height='24' viewBox='0 0 186.69 190.5' > <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="${ theme === "custom" ? customColor : "#4285f4" }"/><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="${ theme === "custom" ? customColor : "#34a853" }"/><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="${ theme === "custom" ? customColor : "#fbbc05" }"/><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="${ theme === "custom" ? customColor : "#ea4335" }" clip-path="none" mask="none"/></g> </svg>` : `<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 25 25" fill="none"> <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="${ theme !== "black" ? "black" : "white" }"/> <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="${ theme !== "black" ? "black" : "white" }"/> <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="${ theme !== "black" ? "black" : "white" }"/> <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="${ theme !== "black" ? "black" : "white" }"/> </svg>` }`; const appleLoginIcon = ( theme, customColor ) => `<svg width="24" height="24" viewBox="0 0 19 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <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="${ theme === "custom" ? customColor : theme === "match" || theme === "black" ? "white" : "black" }"/> </svg>`; const facebookLoginIcon = ( theme, customColor ) => ` ${ theme === "match" || theme === "matchOutline" || theme === "custom" ? `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="25" viewBox="0 0 24 25" fill="none"> <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="${ theme === "custom" ? customColor : theme === "match" ? "white" : "#1977F3" }"/> <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="${ theme === "match" ? "#1778f2" : "transparent" }"/> </svg>` : `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="25" viewBox="0 0 24 25" fill="none"> <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="${ theme === "black" ? "white" : "black" }"/> <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="${ theme === "black" ? "black" : "white" }"/> </svg>` }`; const whatsappLoginIcon = ( theme, customColor ) => `<svg viewBox="0 0 24 24" fill="none" width="24" height="25" xmlns="http://www.w3.org/2000/svg" > <g id="SVGRepo_bgCarrier" stroke-width="0"></g> <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round" ></g> <g id="SVGRepo_iconCarrier"> <path fill-rule="evenodd" clip-rule="evenodd" 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" fill="${ theme === "match" || theme === "black" ? "#ffffff" : theme === "white" ? "#000000" : theme === "matchOutline" ? "#25d366" : customColor }" ></path> </g> </svg>`; const microsoftLoginIcon = ( theme, customColor ) => `<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 48 48"> <path fill="${ theme === "match" || theme == "matchOutline" ? "#ff5722" : theme === "black" ? "#ffffff" : theme === "white" ? "#000000" : customColor }" d="M6 6H22V22H6z" transform="rotate(-180 14 14)"></path> <path fill="${ theme === "match" || theme == "matchOutline" ? "#4caf50" : theme === "black" ? "#ffffff" : theme === "white" ? "#000000" : customColor }" d="M26 6H42V22H26z" transform="rotate(-180 34 14)"></path> <path fill="${ theme === "match" || theme == "matchOutline" ? "#ffc107" : theme === "black" ? "#ffffff" : theme === "white" ? "#000000" : customColor }" d="M26 26H42V42H26z" transform="rotate(-180 34 34)"></path> <path fill="${ theme === "match" || theme == "matchOutline" ? "#03a9f4" : theme === "black" ? "#ffffff" : theme === "white" ? "#000000" : customColor }" d="M6 26H22V42H6z" transform="rotate(-180 14 34)"></path> </svg>`; const twitterLoginIcon = ( theme, customColor ) => `<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 48 48"> <polygon fill="${ theme === "match" || theme === "black" ? "#ffffff" : theme === "matchOutline" || theme === "white" ? "#000000" : customColor }" points="41,6 9.929,42 6.215,42 37.287,6"></polygon> <polygon fill="${ theme === "match" || theme === "black" ? "#000000" : theme === "matchOutline" || theme === "white" ? "#ffffff" : customColor }" fill-rule="evenodd" points="31.143,41 7.82,7 16.777,7 40.1,41" clip-rule="evenodd"></polygon> <path fill="${ theme === "match" || theme === "black" ? "#ffffff" : theme === "matchOutline" || theme === "white" ? "#000000" : customColor }" d="M15.724,9l20.578,30h-4.106L11.618,9H15.724 M17.304,6H5.922l24.694,36h11.382L17.304,6L17.304,6z"></path> </svg>`; const amazonLoginIcon = (theme, customColor) => ` <svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="25" height="25" viewBox="0 0 50 50" > <path fill="${ theme === "black" ? "#ffffff" : theme === "matchOutline" ? "#FF9900" : theme === "white" || theme === "match" ? "#000000" : customColor }" 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" ></path> </svg>`; const instagramLoginIcon= (theme, customColor) => ` <svg width="25" height="25" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" 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" fill="url(#paint0_radial_378_3535)" /> <path fill-rule="evenodd" clip-rule="evenodd" 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" fill="url(#paint0_radial_378_3535)" /> <path fill-rule="evenodd" clip-rule="evenodd" 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" fill="url(#paint0_radial_378_3535)" /> <path fill-rule="evenodd" clip-rule="evenodd" 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" fill="url(#paint1_radial_378_3535)" /> <defs> <radialGradient id="paint0_radial_378_3535" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(17.4 22.7) rotate(-115.776) scale(27.2737 40.5665)"> <stop offset="0.24392" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FF1B90' : customColor}" /> <stop offset="0.436673" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#F80261' : customColor}" /> <stop offset="0.688476" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#ED00C0' : customColor}" /> <stop offset="0.776787" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#C500E9' : customColor}" /> <stop offset="0.893155" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#7017FF' : customColor}" /> </radialGradient> <radialGradient id="paint1_radial_378_3535" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(7.75 19.31) rotate(-57.4396) scale(11.8174 12.2918)"> <stop stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FFD600' : customColor}" /> <stop offset="0.484375" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FF6930' : customColor}" /> <stop offset="0.734375" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FE3B36' : customColor}" /> <stop offset="1" stop-color="${theme === 'black' ? '#ffffff' : theme === 'white' ? '#000000' : theme === 'match' || theme === 'matchOutline' ? '#FE3B36' : customColor}" stop-opacity="0" /> </radialGradient> </defs> </svg>`; const magicLinkLoginIcon = (theme, customColor) => ` <svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25" > <path fill="${ theme === 'match' || theme === 'black' ? '#ffffff' : theme === 'matchOutline' || theme === 'white' ? '#000000' : customColor }" fillRule="evenodd" 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" clipRule="evenodd" ></path> </svg>`; const mobileAppLoginIcon = (theme, customColor) => ` <svg width="20" height="24" viewBox="0 0 12 16" fill="none" xmlns="http://www.w3.org/2000/svg" > <path 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" fill=${ theme === 'match' || theme === 'black' ? '#ffffff' : theme === 'matchOutline' ? '#FD823E' : theme === 'white' ? '#000000' : customColor } /> </svg> `; const linkedinLoginIcon = (theme, customColor) => ` <svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" viewBox="0 0 25 24" fill="none" > <path 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" fill=${ theme === 'match' || theme === 'black' ? '#ffffff' : theme === 'matchOutline' ? '#0A66C2' : theme === 'white' ? '#000000' : customColor } /> </svg> `; function isElementVisible(element) { return ( document.body.contains(element) && getComputedStyle(element).display !== "none" && getComputedStyle(element).visibility !== "hidden" && getComputedStyle(element).opacity !== "0" && !element.hasAttribute("hidden") && !isAncestorHidden(element) ); } function isAncestorHidden(element) { let parent = element.parentElement; while (parent) { if ( getComputedStyle(parent).display === "none" || getComputedStyle(parent).visibility === "hidden" || getComputedStyle(parent).opacity === "0" || parent.hasAttribute("hidden") ) { return true; } parent = parent.parentElement; } return false; } function showAlert(message) { const alertBox = document.createElement("div"); alertBox.textContent = message; alertBox.style.position = "fixed"; alertBox.style.top = "20px"; alertBox.style.right = "-300px"; // Start off-screen alertBox.style.backgroundColor = "#000000"; // Black background alertBox.style.color = "#ffffff"; // White text alertBox.style.padding = "15px"; alertBox.style.borderRadius = "8px"; alertBox.style.zIndex = "1000"; alertBox.style.transition = "right 0.5s ease-in-out, opacity 0.5s ease-in-out"; // Transition for sliding and fading alertBox.style.boxShadow = "0 2px 5px rgba(0, 0, 0, 0.2)"; // Optional shadow for depth document.body.appendChild(alertBox); // Slide in requestAnimationFrame(() => { alertBox.style.right = "20px"; // Move into view alertBox.style.opacity = "1"; // Ensure opacity is set to 1 }); // Slide out and remove the alert after a few seconds setTimeout(() => { alertBox.style.opacity = "0"; // Fade out alertBox.style.right = "-300px"; // Move out of view // Wait for the transition to finish before removing the element setTimeout(() => { document.body.removeChild(alertBox); }, 500); // Match this duration with the exit transition duration }, 3000); } </script> </div><div id="g_id_onload" data-client_id="933600373534-vk6hiu9lqrtbblj0357q0gsoo7mqvsd0.apps.googleusercontent.com" data-context="signin" data-callback="handleGoogleOneTapResponse" data-itp_support="true"></div><script> function handleGoogleOneTapResponse(response) { if (response.credential) { const idToken = response.credential; fetch('https://api.bitbybit.studio/bitlogin/api/login/google-one-tap', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ idToken, shop: "g-ladalle.com", ...bitloginCache.location }) }).then(response => { response.json().then((data) => { post( JSON.parse( JSON.stringify({ "customer[email]": data.email, "customer[password]": data.password, form_type: "customer_login", utf8: "✓", return_url: redirectUrl, }) ) ); }); }).catch(error => { console.error('Error occurred:', error); }); } else { console.error('No credential available'); } } </script><div id="g_id_onload" data-client_id="933600373534-vk6hiu9lqrtbblj0357q0gsoo7mqvsd0.apps.googleusercontent.com" data-context="signin" data-callback="handleGoogleOneTapResponse" data-itp_support="true"></div><script> function handleGoogleOneTapResponse(response) { if (response.credential) { const idToken = response.credential; fetch('https://api.bitbybit.studio/bitlogin/api/login/google-one-tap', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ idToken, shop: "outerbloom.com", ...bitloginCache.location }) }).then(response => { response.json().then((data) => { post( JSON.parse( JSON.stringify({ "customer[email]": data.email, "customer[password]": data.password, form_type: "customer_login", utf8: "✓", return_url: redirectUrl, }) ) ); }); }).catch(error => { console.error('Error occurred:', error); }); } else { console.error('No credential available'); } } </script><div id="shopify-block-ANVEzSUcxTUxZOGpwZ__9703700522657871012" class="shopify-block shopify-app-block"> <script src="https://storage.googleapis.com/bitbybit-main/widget/embed.js" data-widget-key="cmleotazq09zfl801tboibjdd"></script> </div> <div id="batBeacon199013839935" style="width: 0px; height: 0px; display: none; visibility: hidden;"><img id="batBeacon94417798107" width="0" height="0" alt="" src="https://bat.bing.com/action/0?ti=343051754&tm=shpfy_ui&Ver=2&mid=1c980ed8-41ff-4244-acfc-3629503f587f&bo=1&sid=4c7f7a001c5111f1921effb8b5f8c807&vid=4c7f74f01c5111f1a9af79d7d4305205&vids=0&msclkid=N&uach=pv%3D19.0.0&pi=918639831&lg=id-ID&sw=1920&sh=1080&sc=32&tl=Jual%20The%20Novo%20Enchanted%20Dome%20-%20Passionate%20Red%20Harga%20Terbaik%20Maret%202026%20%7C%20Outerbloom&p=https%3A%2F%2Fouterbloom.com%2Fproducts%2Fthe-novo-enchanted-dome-passionate-red&r=https%3A%2F%2Fouterbloom.com%2F%3Futm_term%3Douterbloom%26utm_campaign%3DBrand%3A%2BOuterbloom%26utm_source%3Dadwords%26utm_medium%3Dppc%26hsa_acc%3D1560612601%26hsa_cam%3D996286722%26hsa_grp%3D143857459196%26hsa_ad%3D637109036610%26hsa_src%3Dg%26hsa_tgt%3Dkwd-452054979297%26hsa_kw%3Douterbloom%26hsa_mt%3Dp%26hsa_net%3Dadwords%26hsa_ver%3D3%26gad_source%3D1%26gad_campaignid%3D19022992230%26gbraid%3D0AAAAApDb70FUWL6zXncDAReFrziRXCDTW%26gclid%3DCj0KCQjwgr_NBhDFARIsAHiUWr7U5LMDcbrq8N4SPMHDdA4tUwdtzWvYs937xXHjbkx8TBCcwo53NesaAuNqEALw_wcB&lt=822&evt=pageLoad&sv=2&cdb=AQAS&rn=223042" style="width: 0px; height: 0px; display: none; visibility: hidden;" /><img id="batBeacon190000422171" width="0" height="0" alt="" src="https://bat.bing.com/action/0?ti=343051754&tm=shpfy_ui&Ver=2&mid=1c980ed8-41ff-4244-acfc-3629503f587f&bo=2&sid=4c7f7a001c5111f1921effb8b5f8c807&vid=4c7f74f01c5111f1a9af79d7d4305205&vids=0&msclkid=N&gv=0&gc=IDR&en=Y&p=https%3A%2F%2Fouterbloom.com%2Fproducts%2Fthe-novo-enchanted-dome-passionate-red&sw=1920&sh=1080&sc=32&evt=custom&cdb=AQAS&rn=930791" style="width: 0px; height: 0px; display: none; visibility: hidden;" /></div><div id="ui-datepicker-div" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div><shop-cart-sync experiments="{}" data-instance-id="98b812a4-f2b7-4b42-9ca7-09f3cd02067e"><iframe aria-hidden="true" data-testid="shop-cart-sync-iframe" src="https://shop.app/pay/hop?analytics_trace_id=98b812a4-f2b7-4b42-9ca7-09f3cd02067e&target_origin=https%3A%2F%2Fg-ladalle.com&client_handle=outerbloom.com" tabindex="-1" title="Shop Pay cart sync" class="hidden"></iframe></shop-cart-sync><div id="bit-chat-widget-host" style="display: block !important;"></div><iframe owner="archetype" title="archetype" style="display: none; visibility: hidden;"></iframe><script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon="{"version":"2024.11.0","token":"4bc1d11a75b74e47a0f10cd2d5ce7501","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}" crossorigin="anonymous"></script> <script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon="{"version":"2024.11.0","token":"52f149dbc25d4497992fcf7d6b878853","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}" crossorigin="anonymous"></script> <script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon="{"version":"2024.11.0","token":"4bc1d11a75b74e47a0f10cd2d5ce7501","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}" crossorigin="anonymous"></script> <iframe owner="archetype" title="archetype" style="display: none; visibility: hidden;"></iframe><div id="batBeacon951673999195" style="width: 0px; height: 0px; display: none; visibility: hidden;"><img id="batBeacon9090074570" width="0" height="0" alt="" src="https://bat.bing.com/action/0?ti=343051754&tm=shpfy_ui&Ver=2&mid=3ef215f0-7f28-4943-b6bf-c72e47d47dcf&bo=1&sid=3d9a1bb025d411f18f9cf1ecd7f9d245&vid=3d9ae17025d411f1866a5df6ced667a0&vids=1&msclkid=N&pi=0&lg=en-US&sw=1024&sh=1024&sc=24&tl=HOKI88BOS%3A%20Layanan%20Ekslusif%20Aplikasi%20BD%20Slot88%20dengan%20Akses%20Cepat&p=https%3A%2F%2Fg-ladalle.com%2Fla-carte%2F&r=&evt=pageLoad&sv=2&cdb=AQAQ&rn=387380" style="width: 0px; height: 0px; display: none; visibility: hidden;" /><img id="batBeacon827765317400" width="0" height="0" alt="" src="https://bat.bing.com/action/0?ti=343051754&tm=shpfy_ui&Ver=2&mid=3ef215f0-7f28-4943-b6bf-c72e47d47dcf&bo=2&sid=3d9a1bb025d411f18f9cf1ecd7f9d245&vid=3d9ae17025d411f1866a5df6ced667a0&vids=0&msclkid=N&gv=0&gc=IDR&en=Y&p=https%3A%2F%2Fg-ladalle.com%2Fla-carte%2F&sw=1024&sh=1024&sc=24&evt=custom&cdb=AQAQ&rn=104911" style="width: 0px; height: 0px; display: none; visibility: hidden;" /></div><iframe owner="archetype" title="archetype" style="display: none; visibility: hidden;"></iframe></body></html>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.03 |
proxy
|
phpinfo
|
Settings