1<!doctype html> 2<html class="no-js" lang="en" dir="ltr"> 3 <head Bokksu Snack Box> 4 5 6 <meta charset="utf-8"> 7 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 8 <meta name="viewport" content="width=device-width,initial-scale=1"> 9 <meta name="theme-color" content="#b73d09"> 10 11<link rel="shortcut icon" href="//bokksu.com/cdn/shop/files/BokksuBrand_Logo_LanternMark_Filled_Orange_Favicon_32x32.png?v=1750968716" type="image/png"> 12 13 14 15 16 <!-- Matomo --> 17
17<script> 18 var _paq = window._paq = window._paq || []; 19 /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ 20 _paq.push(['enableLinkTracking']); 21 (function() { 22 var u="https://bokksu.matomo.cloud/"; 23 _paq.push(['setTrackerUrl', u+'matomo.php']); 24 _paq.push(['setSiteId', '1']); 25 var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; 26 g.async=true; g.src='https://cdn.matomo.cloud/bokksu.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s); 27 })(); 28 29 30 31 32 _paq.push(['trackPageView']); 33 </script>
33 34 35 <!-- Google Tag Manager --> 36 37
37<script>
vendor: 343 bytes, lines 37-41
37(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 38 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 39 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 40 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 41 })(window,document,'script','dataLayer','
41GTM-PR4MBW
vendor: 3 bytes, line 41
41');
41</script>
41 42 43<!-- End Google Tag Manager --> 44 45 46 <!-- SNB --> 47
47<script src="//bokksu.com/cdn/shop/t/3/assets/snb-to-btq.js?v=159687078308774293821790847703"></script>
47 48 <!-- Customer AI --> 49
49<script async="async" src="https://mm-uxrv.com/js/mm_74ba8d4f-b92a-477c-9c5d-23eeb3ad6a9d-89989348.js"></script>
49 50 51 <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Figtree:ital,wght@0,300..900;1,300..900&family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap"> 52 53 54 55 <link rel="stylesheet" href="//bokksu.com/cdn/shop/t/3/assets/sgm-nav.css?v=114528966866125961761783372325"> 56 57 58 <link rel="canonical" href="https://bokksu.com/"> 59 <link rel="preconnect" href="https://cdn.shopify.com" crossorigin> 60 <link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin > 61 <link rel="dns-prefetch" href="https://productreviews.shopifycdn.com"> 62 <link rel="dns-prefetch" href="https://ajax.googleapis.com"> 63 <link rel="dns-prefetch" href="https://maps.googleapis.com"> 64 <link rel="dns-prefetch" href="https://maps.gstatic.com"> 65 66
66<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
66 67
67<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/cdn.min.js"></script>
67 68
68<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.1/jquery.min.js" integrity="sha512-aVKKRRi/Q/YV+4mjoKBsE4x3H+BkegoM/em46NNlCqNTmUYADjBbeNefNxYV7giUp0VxICtqdrbqU7iVaeZNXA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
68 69 <!-- redirect to SNB for blogs/articles --> 70 71 72 73<title>Bokksu | Authentic Japanese Snack & Candy Subscription Box 74– Bokksu Snack Box 75</title> 76 77<span id="free-shipping-text-msg" style="display:none">Get To Free Shipping</span><meta name="description" content="Experience Japan every month with Bokksu. Get 20-22 artisanal Japanese snacks, candies, and tea pairings delivered worldwide from Japan. Curated around a seasonal theme and sourced from centuries-old family snack makers. Start your journey today!"><meta property="og:site_name" content="Bokksu Snack Box"> 78 <meta property="og:url" content="https://bokksu.com/"> 79 <meta property="og:title" content="Bokksu | Authentic Japanese Snack & Candy Subscription Box"> 80 <meta property="og:type" content="website"> 81 <meta property="og:description" content="Experience Japan every month with Bokksu. Get 20-22 artisanal Japanese snacks, candies, and tea pairings delivered worldwide from Japan. Curated around a seasonal theme and sourced from centuries-old family snack makers. Start your journey today!"><meta property="og:image" content="http://bokksu.com/cdn/shop/files/SNB_Compressed.jpg?v=1778135917"> 82 <meta property="og:image:secure_url" content="https://bokksu.com/cdn/shop/files/SNB_Compressed.jpg?v=1778135917"> 83 <meta property="og:image:width" content="3500"> 84 <meta property="og:image:height" content="2289"><meta name="twitter:site" content="@"> 85 <meta name="twitter:card" content="summary_large_image"> 86 <meta name="twitter:title" content="Bokksu | Authentic Japanese Snack & Candy Subscription Box"> 87 <meta name="twitter:description" content="Experience Japan every month with Bokksu. Get 20-22 artisanal Japanese snacks, candies, and tea pairings delivered worldwide from Japan. Curated around a seasonal theme and sourced from centuries-old family snack makers. Start your journey today!"> 88<!-- Link Swiper's CSS --> 89 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper/swiper-bundle.min.css"><style data-shopify>@font-face { 90 font-family: "Libre Baskerville"; 91 font-weight: 400; 92 font-style: normal; 93 font-display: swap; 94 src: url("//bokksu.com/cdn/fonts/libre_baskerville/librebaskerville_n4.2ec9ee517e3ce28d5f1e6c6e75efd8a97e59c189.woff2") format("woff2"), 95 url("//bokksu.com/cdn/fonts/libre_baskerville/librebaskerville_n4.323789551b85098885c8eccedfb1bd8f25f56007.woff") format("woff"); 96} 97 98 @font-face { 99 font-family: Lato; 100 font-weight: 400; 101 font-style: normal; 102 font-display: swap; 103 src: url("//bokksu.com/cdn/fonts/lato/lato_n4.c3b93d431f0091c8be23185e15c9d1fee1e971c5.woff2") format("woff2"), 104 url("//bokksu.com/cdn/fonts/lato/lato_n4.d5c00c781efb195594fd2fd4ad04f7882949e327.woff") format("woff"); 105} 106 107 @font-face { 108 font-family: "Libre Baskerville"; 109 font-weight: 400; 110 font-style: normal; 111 font-display: swap; 112 src: url("//bokksu.com/cdn/fonts/libre_baskerville/librebaskerville_n4.2ec9ee517e3ce28d5f1e6c6e75efd8a97e59c189.woff2") format("woff2"), 113 url("//bokksu.com/cdn/fonts/libre_baskerville/librebaskerville_n4.323789551b85098885c8eccedfb1bd8f25f56007.woff") format("woff"); 114} 115 116 117 @font-face { 118 font-family: Lato; 119 font-weight: 600; 120 font-style: normal; 121 font-display: swap; 122 src: url("//bokksu.com/cdn/fonts/lato/lato_n6.38d0e3b23b74a60f769c51d1df73fac96c580d59.woff2") format("woff2"), 123 url("//bokksu.com/cdn/fonts/lato/lato_n6.3365366161bdcc36a3f97cfbb23954d8c4bf4079.woff") format("woff"); 124} 125 126 @font-face { 127 font-family: Lato; 128 font-weight: 400; 129 font-style: italic; 130 font-display: swap; 131 src: url("//bokksu.com/cdn/fonts/lato/lato_i4.09c847adc47c2fefc3368f2e241a3712168bc4b6.woff2") format("woff2"), 132 url("//bokksu.com/cdn/fonts/lato/lato_i4.3c7d9eb6c1b0a2bf62d892c3ee4582b016d0f30c.woff") format("woff"); 133} 134 135 @font-face { 136 font-family: Lato; 137 font-weight: 600; 138 font-style: italic; 139 font-display: swap; 140 src: url("//bokksu.com/cdn/fonts/lato/lato_i6.ab357ee5069e0603c2899b31e2b8ae84c4a42a48.woff2") format("woff2"), 141 url("//bokksu.com/cdn/fonts/lato/lato_i6.3164fed79d7d987c1390528781c7c2f59ac7a746.woff") format("woff"); 142} 143 144</style><link href="//bokksu.com/cdn/shop/t/3/assets/theme.css?v=183985942248182236951788960735" rel="stylesheet" type="text/css" media="all" /> 145 146 <link href="//bokksu.com/cdn/shop/t/3/assets/next.css?v=183791828887486889451751964632" rel="stylesheet" type="text/css" media="all" /> 147 148 149 150 151 152<style data-shopify>:root { 153 /* --typeHeaderPrimary: "Libre Baskerville"; */ 154 /* --typeHeaderPrimary: 'OrpheusPro'; */ 155 --typeHeaderFallback: serif; 156 --typeHeaderSize: 36px; 157 --typeHeaderWeight: 400; 158 --typeHeaderLineHeight: 72px; 159 --typeCommLineHeight: 52px; 160 --typeSubLineHeight: 18px; 161 --typeHeaderSpacing: 0.0em; 162 163 --typeBasePrimary:Lato; 164 --typeBaseFallback:sans-serif; 165 --typeBaseSize: 16px; 166 --typeBaseWeight: 400; 167 --typeBaseSpacing: 0.025em; 168 --typeBaseLineHeight: 24px; 169 170 --colorSmallImageBg: #ffffff; 171 --colorSmallImageBgDark: #f7f7f7; 172 --colorLargeImageBg: #f6f4f1; 173 --colorLargeImageBgLight: #ffffff; 174 175 --iconWeight: 3px; 176 --iconLinecaps: miter; 177 178 179 --buttonRadius: 3px; 180 --btnPadding: 11px 25px; 181 182 183 184 --roundness: 0; 185 186 187 188 --gridThickness: 0; 189 190 191 --productTileMargin: 10%; 192 --collectionTileMargin: 17%; 193 194 --swatchSize: 40px; 195 } 196 197 @media screen and (max-width: 768px) { 198 :root { 199 --typeBaseSize: 14px; 200 201 202 --roundness: 0; 203 --btnPadding: 9px 17px; 204 205 } 206 }</style> 207 208 209 210 211
211<script> 212 document.documentElement.className = document.documentElement.className.replace('no-js', 'js'); 213 214 window.theme = window.theme || {}; 215 theme.routes = { 216 home: "/", 217 collections: "/collections", 218 cart: "/cart.js", 219 cartPage: "/cart", 220 cartAdd: "/cart/add.js", 221 cartChange: "/cart/change.js", 222 search: "/search", 223 predictiveSearch: "/search/suggest" 224 }; 225 226 theme.strings = { 227 soldOut: "Sold Out", 228 unavailable: "Unavailable", 229 inStockLabel: "In stock, ready to ship", 230 oneStockLabel: "Low stock - [count] item left", 231 otherStockLabel: "Low stock - [count] items left", 232 willNotShipUntil: "Ready to ship [date]", 233 willBeInStockAfter: "Back in stock [date]", 234 waitingForStock: "Inventory on the way", 235 savePrice: "[saved_amount] OFF", 236 cartEmpty: "Your cart is currently empty, please take a look at our collection page for delicious snack to add.", 237 cartTermsConfirmation: "You must agree with the terms and conditions of sales to check out", 238 searchCollections: "Collections:", 239 searchPages: "Pages:", 240 searchArticles: "Articles:", 241 maxQuantity: "You can only have [quantity] of [title] in your cart." 242 }; 243 theme.settings = { 244 cartType: "dropdown", 245 isCustomerTemplate:false, 246 moneyFormat: "${{amount}}", 247 saveType: "percent", 248 productImageSize: "square", 249 productImageCover: true, 250 predictiveSearch: false, 251 predictiveSearchType: "product", 252 superScriptSetting: false, 253 superScriptPrice: false, 254 quickView: true, 255 quickAdd: true, 256 localization: false, 257 start_date: '2023-07-12', 258 end_date: '2023-08-31', 259 preorderMessage: "Pre-order items cannot be combined in your purchase with other items that can be shipped immediately. To pre-order, place a separate order with only the Advent Calendar in your cart and we'll notify you when it ships!", 260 261 themeName: 'Expanse', 262 themeVersion: "4.3.4", 263 yotpoWidgetId: "538556" , 264 disableRebuyCartUpsell: false, 265 recommendationsSeedProductId: null, 266 267 268 269 270 updateSearchPlaceholder: false, 271 272 }; 273 </script>
273 274 275 276 277 278 279 280
280<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
280<meta name="facebook-domain-verification" content="jmyuquzr8qhoaf584vmc4eyyebc3hu"> 281<meta name="google-site-verification" content="4bwFafLnBpXr3oygCv2-FgNAwFJZdWXe2XMSb6dlO5A"> 282<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/65962311766/digital_wallets/dialog"> 283<meta id="in-context-paypal-metadata" data-shop-id="65962311766" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD"> 284<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
284<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=3364847702"></script>
284 285<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
286<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=3364847702&shop_id=65962311766" crossorigin="anonymous"></script>
vendor: 1 bytes, line 286
286
287<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":65962311766,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/65962311766","merchantName":"Bokksu Snack Box","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","elo","jcb"],"total":{"type":"pending","label":"Bokksu Snack Box","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 287
287
288<script id="shopify-features" type="application/json">{"accessToken":"39b47d28f3c2bdd75cf49e228521f3ba","betas":["rich-media-storefront-analytics"],"domain":"bokksu.com","predictiveSearch":true,"shopId":65962311766,"locale":"en"}</script>
vendor: 1 bytes, line 288
288
289<script>var Shopify = Shopify || {}; 290Shopify.shop = "snb-hashii.myshopify.com"; 291Shopify.locale = "en"; 292Shopify.currency = {"active":"USD","rate":"1.0"}; 293Shopify.country = "US"; 294Shopify.theme = {"name":"Expanse-Marketplace-Theme\/live-SNB","id":138710351958,"schema_name":"Expanse","schema_version":"4.3.4","theme_store_id":null,"role":"main"}; 295Shopify.theme.handle = "null"; 296Shopify.theme.style = {"id":null,"handle":null}; 297Shopify.cdnHost = "bokksu.com/cdn"; 298Shopify.routes = Shopify.routes || {}; 299Shopify.routes.root = "/"; 300Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 301Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 302Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 303Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 303
303
304<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 304
304
305<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 305
305
306<script> 307 window.ShopifyPay = window.ShopifyPay || {}; 308 window.ShopifyPay.apiHost = "shop.app\/pay"; 309 window.ShopifyPay.redirectState = null; 310</script>
vendor: 1 bytes, line 310
310
311<script> 312 window.Shopify = window.Shopify || {}; 313 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 314 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 315 window.Shopify.SignInWithShop.eligible = true; 316</script>
vendor: 1 bytes, line 316
316
317<script id="shop-js-analytics" type="application/json">{"pageType":"index"}</script>
vendor: 1 bytes, line 317
317
318<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"></script>
vendor: 1 bytes, line 318
318
319<script type="module"> 320 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 321 322 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 323 324</script>
vendor: 1 bytes, line 324
324
325<script> 326 window.Shopify = window.Shopify || {}; 327 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 328 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]}; 329</script>
vendor: 1 bytes, line 329
329
330<script>(function() { 331 var isLoaded = false; 332 function asyncLoad() { 333 if (isLoaded) return; 334 isLoaded = true; 335 var urls = ["https:\/\/str.rise-ai.com\/?shop=snb-hashii.myshopify.com","https:\/\/strn.rise-ai.com\/?shop=snb-hashii.myshopify.com","https:\/\/cdn.cookie.pii.ai\/scripts\/1\/ws\/09493852-4958-40f8-b0bc-22c803c690ab\/domain\/3140314c-2677-4720-851e-595df7c2a345\/shopify-loadscript-3140314c-2677-4720-851e-595df7c2a345.js?shop=snb-hashii.myshopify.com"]; 336 for (var i = 0; i < urls.length; i++) { 337 var s = document.createElement('script'); 338 s.type = 'text/javascript'; 339 s.async = true; 340 s.src = urls[i]; 341 var x = document.getElementsByTagName('script')[0]; 342 x.parentNode.insertBefore(s, x); 343 } 344 }; 345 if(window.attachEvent) { 346 window.attachEvent('onload', asyncLoad); 347 } else { 348 window.addEventListener('load', asyncLoad, false); 349 } 350})();</script>
vendor: 1 bytes, line 350
350
351<script id="__st">var __st={"a":65962311766,"offset":-14400,"reqid":"811c4a41-97bb-4560-8a48-f315fd3886fb-1790908320","pageurl":"bokksu.com\/","u":"7d6b0e9da75f","p":"home"};</script>
vendor: 1 bytes, line 351
351
352<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 352
352
353<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 353
353
354<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//bokksu.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 354
354
355<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//bokksu.com/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
355<script crossorigin="anonymous" defer="defer" src="//bokksu.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 355
355
356<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 356
356
357<script> 358 window.Shopify = window.Shopify || {}; 359 window.Shopify.MCP = window.Shopify.MCP || {}; 360 window.Shopify.MCP.enabled = true; 361 window.Shopify.MCP.shop = "snb-hashii.myshopify.com"; 362 window.Shopify.MCP.mcpEndpoint = "https:\/\/bokksu.com\/api\/mcp"; 363 window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n - What is your return policy?\n - What is your shipping policy?\n - What is your phone number?\n - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}]; 364</script>
vendor: 1 bytes, line 364
364
365<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/bokksu.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 366</script>
vendor: 1 bytes, line 366
366
367<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://bokksu.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 368</script>
vendor: 1 bytes, line 368
368
369<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 370 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); 371</script>
vendor: 1 bytes, line 371
371
372<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})}})); 373</script>
373 374<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://bokksu.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 375<style id="shopify-accelerated-checkout-cart"> 376 #shopify-buyer-consent { 377 margin-top: 1em; 378 display: inline-block; 379 width: 100%; 380} 381 382#shopify-buyer-consent.hidden { 383 display: none; 384} 385 386#shopify-subscription-policy-button { 387 background: none; 388 border: none; 389 padding: 0; 390 text-decoration: underline; 391 font-size: inherit; 392 cursor: pointer; 393} 394 395#shopify-subscription-policy-button::before { 396 box-shadow: none; 397} 398 399 </style> 400
401<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
401 402 403 404 405 406 407 <!-- Swiper JS --> 408
408<script src="https://cdn.jsdelivr.net/npm/swiper/swiper-bundle.min.js"></script>
408 409 410
410<script src="//bokksu.com/cdn/shop/t/3/assets/vendor-scripts-v2.js?v=28795867768355101311751964579" defer="defer"></script>
410 411
411<script src="//bokksu.com/cdn/shop/t/3/assets/theme.js?v=1013930297215615261790666043" defer="defer"></script>
411 412
412<script src="//bokksu.com/cdn/shop/t/3/assets/next.js?v=131372909002363781041751964575" defer="defer"></script>
412 413 414 415 416 417 418 419 420 421 422 423<!-- BEGIN app block: shopify://apps/yotpo-product-reviews/blocks/settings/eb7dfd7d-db44-4334-bc49-c893b51b36cf --> 424 425 426
426<script type="text/javascript" src="https://cdn-widgetsrepository.yotpo.com/v1/loader/4Kt06s6nDGIQ5QRkjcLrBcqBySp3M8NS1MLj32az?languageCode=en" async></script>
426 427 428 429 430 431<!-- END app block --><!-- BEGIN app block: shopify://apps/variant/blocks/app-embed/019abb68-84fa-7db8-b83d-93e100047882 --> 432<!-- BEGIN app snippet: variant-antiflicker --> 433 434 435 436 437<!-- END app snippet --> 438<!-- BEGIN app snippet: variant-engine-loader --><link rel="preconnect" href="https://cdn.growthbook.io"> 439<link rel="preconnect" href="https://brain.variantnow.com"> 440<link rel="preconnect" href="https://storage.googleapis.com"> 441<link rel="preload" href="https://cdn.jsdelivr.net/npm/@growthbook/[email protected]/dist/bundles/index.min.js" as="script"> 442
443<script src="https://cdn.variantnow.com/sdk/shops/cdbd5ec0-567c-4cb8-9f4a-f43846425a0e.js"></script>
vendor: 1 bytes, line 443
443
444<script> 445(function () { 446var config = window.__VARIANT_CONFIG; 447function fail(message) { 448 window.__VARIANT_CONFIG = undefined; 449 throw new Error('[Variant] ' + message); 450} 451if (!config) fail('shop config failed to load'); 452if (!config.shopId) fail('shop config is missing required field: shopId'); 453if (!config.sdkKey) fail('shop config is missing required field: sdkKey'); 454if (config.runnerMode !== 'blocking' && config.runnerMode !== 'async') { 455 fail('shop config is missing required field: runnerMode'); 456} 457if (!Array.isArray(config.redirectExperiments)) { 458 fail('shop config is missing required field: redirectExperiments'); 459} 460if (!window.__VARIANT_INITIAL_URL) { 461 window.__VARIANT_INITIAL_URL = { 462 pathname: window.location.pathname, 463 search: window.location.search 464 }; 465} 466config.shopify = { 467 country: "US", 468 pageType: "index", 469 templateSuffix: null, 470 handle: null, 471 productCollections: [], 472 customerId: "", 473 shop: "bokksu.com", 474 cartItemCount: 0 475}; 476config.hosts = { 477 sdk: "https:\/\/sdk.variantnow.com", 478 brain: "https:\/\/brain.variantnow.com", 479 pixel: "https:\/\/storage.googleapis.com\/variant_scripts", 480 analytics: "" 481}; 482config.pixelTransport = 'shopify'; 483if (window.__VARIANT_BOOT) window.__VARIANT_BOOT(); 484})(); 485</script>
vendor: 1 bytes, line 485
485
486<script src="https://cdn.variantnow.com/sdk/v1/variant.js"></script>
486 487<!-- END app snippet --> 488<!-- BEGIN app snippet: variant-chat-widget --> 489<link rel="preconnect" href="https://chat.variantnow.com"> 490
491<script 492 src="https://chat.variantnow.com/chat.js" 493 data-account-id="cdbd5ec0-567c-4cb8-9f4a-f43846425a0e" 494 defer 495></script>
495 496<!-- END app snippet --> 497 498 499<!-- END app block --><!-- BEGIN app block: shopify://apps/gorgias-live-chat-helpdesk/blocks/gorgias/a66db725-7b96-4e3f-916e-6c8e6f87aaaa -->
500<script defer data-gorgias-loader-chat src="https://config.gorgias.chat/bundle-loader/shopify/snb-hashii.myshopify.com"></script>
500 501 502
503<script defer data-gorgias-loader-convert src="https://content.9gtb.com/loader.js"></script>
503 504 505
506<script defer data-gorgias-loader-mailto-replace src="https://config.gorgias.help/api/contact-forms/replace-mailto-script.js?shopName=snb-hashii"></script>
506 507 508 509<!-- END app block --><!-- BEGIN app block: shopify://apps/maestra/blocks/maestra-embed/426c4c19-e366-44a7-a7e5-89fb1b642f46 -->
510<script> 511(function () { 512 window.maestra = window.maestra || function () { 513 window.maestra.queue.push(arguments); 514 }; 515 window.maestra.queue = window.maestra.queue || []; 516 window.maestra('create', { endpointId: "bokksu.snb" }); 517 518 519 window.maestra('personalization.viewHomepage'); 520 521 522 var started = false; 523 function startTracker() { 524 if (started) return; 525 started = true; 526 527 if (typeof window.subscribe === 'function') { 528 window.subscribe("cart-update", function (event) { 529 if (event && event.cartData && typeof Shopify !== 'undefined' 530 && Shopify.analytics && typeof Shopify.analytics.publish === 'function') { 531 var priceCents = typeof event.cartData.final_price === 'number' 532 ? event.cartData.final_price 533 : (typeof event.cartData.price === 'number' ? event.cartData.price : undefined); 534 Shopify.analytics.publish("maestra_add_to_cart_internal", { 535 cartData: event.cartData, 536 productVariantId: String(event.cartData.variant_id || event.cartData.id || ''), 537 pricePerItem: priceCents === undefined ? undefined : priceCents / 100, 538 source: event.source || "unknown" 539 }); 540 } 541 }); 542 } 543 544 var s = document.createElement('script'); 545 s.src = "https://api.maestra.io/scripts/v1/tracker.js"; 546 s.async = true; 547 document.head.appendChild(s); 548 } 549 550 function analyticsAllowed() { 551 var privacy = window.Shopify && window.Shopify.customerPrivacy; 552 return !!privacy && typeof privacy.analyticsProcessingAllowed === 'function' 553 && privacy.analyticsProcessingAllowed(); 554 } 555 556 document.addEventListener('visitorConsentCollected', function (ev) { 557 if (ev.detail && ev.detail.analyticsAllowed) startTracker(); 558 }); 559 560 if (!window.Shopify || typeof window.Shopify.loadFeatures !== 'function') { 561 startTracker(); 562 return; 563 } 564 565 // Some CMPs write consent without visitorConsentCollected or load the privacy API after us. 566 var ticksLeft = 60; 567 var recheck = setInterval(function () { 568 if (!started && analyticsAllowed()) startTracker(); 569 if (started || --ticksLeft <= 0) clearInterval(recheck); 570 }, 1000); 571 572 window.Shopify.loadFeatures( 573 [{ name: 'consent-tracking-api', version: '0.1' }], 574 function (error) { 575 if (!error && analyticsAllowed()) startTracker(); 576 } 577 ); 578})(); 579</script>
579 580 581 582 583<!-- END app block --><!-- BEGIN app block: shopify://apps/userway-website-accessibility/blocks/uw-widget-extension/bc2d8a34-1a37-451b-ab1a-271bc4e9daa7 --> 584 585 586 587
588<script type="text/javascript" async="" src="https://cdn.userway.org/widget.js?account=1QY30g7gXs&platfAppInstalledSiteId=3872233&shop=bokksu.com"></script>
588 589 590<!-- END app block --><!-- BEGIN app block: shopify://apps/onward/blocks/onward-protection-embed/b53f9cdb-2bd0-4ef4-be64-bb0b8b7f7dff -->
590<script type="text/javascript"> 591 window.addEventListener('DOMContentLoaded', () => { 592 const onward = new OnwardSetup(); 593 onward.addContainer('.cart__item-sub', {position: "beforebegin"}); 594 onward.attachCheckoutButton('.checkout-btn-class button.cart__checkout', { 595 optOutSelector: '.cart__checkout-wrapper', 596 optOutPosition: 'afterend' 597 }); 598}); 599 window.OnwardSettingsJson = {"selectedByDefault":true,"shopEnabled":true,"insuranceFeePercentage":"4.0","carbonOffsetPriceCents":1,"carbonOffsetsEnabled":true,"flatRateReturnEnabled":false,"returnsAppEnabled":false,"thirdPartyReturnsPortalUrl":null,"customerSponsoredReturnLabel":false,"returnPolicyUrl":null,"exchangesEnabled":false,"shopName":"Bokksu Snack Box: Authentic Japanese Snacks \u0026 Candy Subscription Box","shopId":563,"shopCurrencyCode":"USD","shopSupportContact":"[email protected]","shopSupportFormUrl":null,"shopBanner":"https:\/\/proxy.useonward.com\/public\/brandings\/563\/banner?ts=1758324062","minimumInsurableCartAmountCents":0,"minimumInsurancePriceCents":null,"minimumInsurancePriceVariantId":null,"maximumInsurancePriceCents":null,"maximumInsurancePriceVariantId":null,"insuranceFallback":"do_not_insure","excludePriceInSubtotalDisplay":true,"oneLine":false,"autoRemoveInsuranceFromCart":true,"poweredByEnabled":false,"inlinePoweredByEnabled":false,"disclaimerEnabled":false,"showSubscriptionWording":true,"moneyFormat":null,"checkoutButtonSelector":null,"themePrimaryColor":null,"ctaTextColor":null,"backgroundColor":"","copyLine1":"Bokksu Protection+","copyLine2":"Get 10% CashBack, Delivery Protection, 90-day Guarantee \u0026 $10 Donation Gift.","checkoutPlusCopyLine1":"Bokksu Checkout+","checkoutPlusCopyLine2":"Get 10% CashBack, Delivery Protection, 90-day Guarantee \u0026 $10 Donation Gift.","checkoutPlusEnabled":true,"checkoutPlusVariant":"checkout","checkoutPlusButtonLabel":"Checkout+ | {{subtotal_with_onward}}","checkoutPlusOptOutLabel":"continue without Checkout+","checkoutPlusOptOutContainerSelector":"","disclaimerText":"*By deselecting shipping protection, Bokksu Snack Box: Authentic Japanese Snacks \u0026 Candy Subscription Box is not liable for damaged, or stolen items","rewardsEnabled":true,"rewardsPercentage":"10.0","cashbackName":"CashBack","cashbackIssueImmediately":false,"nativeSubscriptionsEnabled":false,"cartItemCountSelector":".cart-link__bubble-num","cartSubtotalSelector":".cart__item-sub #price-text","productGuaranteesEnabled":true,"productGuaranteeDays":90,"walletsEnabled":false,"category":"Food \u0026 Drink","featuresEnabled":["widget:checkout:multi_product_debug"],"isDev":false,"modalEnabledCards":{"freeReturns":true,"returnsAndExchanges":true,"protect":true,"carbonOffsets":true,"rewards":true,"productGuarantees":true,"prioritySupport":true,"donation":true,"disclaimer":true},"shoppersUrl":"","checkoutExtensionHidden":false,"checkoutOneLine":false,"legacyAutoInsertCheckoutPlus":false,"deferredProtectionEnabled":false,"orderEditingEnabled":false,"orderEditingDeadlineMinutes":30,"orderEditingAddInsuranceCopyLine1":"Onward Checkout+","orderEditingAddInsuranceCopyLine2":null,"orderEditingAllowAddressEdits":true,"orderEditingAllowQuantityChanges":true,"orderEditingAllowedQuantityChanges":"all","orderEditingAllowAddProtection":true,"orderEditingAllowDiscountCodes":false,"orderEditingAllowUpsells":false,"orderEditingUpsellsCollectionId":null,"orderEditingUpsellsOfferSource":"smart_recommendations","orderEditingUpsellsDiscountPercentage":0,"subtotalLabel":"","subtotalLabelSelector":"","poweredByLogoColor":"black","hideForB2bCustomers":false,"attachToApplePay":false,"onwardLineitemProperties":{},"inspiredDonationsEnabled":true,"includeFullyDiscountedItemsInPremium":false,"insuranceProductImageUrl":"https:\/\/cdn.shopify.com\/s\/files\/1\/0659\/6231\/1766\/files\/onward-product-image-bokksu_5466e089-db0d-4343-9eb5-55c1fe414f5b.png?v=1751004837"}; 600 window.OnwardSettingsJson = Object.assign( 601 window.OnwardSettingsJson, 602 window.onwardSettingsOverrides ? window.onwardSettingsOverrides : {}, 603 { 604 headlessClient: false, 605 onwardWidget: { policy_bundle: {"config":{"checkout_plus_button_order":"checkout_plus_f
605irst"},"policy_settings":{"checkout_plus_button_order":{"policies":[]}}} }, 606 locale: { 607 currency_iso_code: "USD", 608 currency_rate: Shopify.currency?.rate || "1.0", 609 request_locale: Shopify?.locale || 'en' 610 } 611 } 612 ); 613 Object.freeze(window.OnwardSettingsJson); 614 window.OnwardTranslationsJson = {"en":{"modal":{"headline":"Checkout with benefits.","subheadline":"Shop with confidence â your purchase is getting an upgrade.","rewardsDisclaimer":{"text":"*{{cashbackName}} code emailed 30 days after purchase."},"rewards":{"heading":"Earn {{rewardsPercentage}}% {{cashbackName}}","text":"Get {{rewardsPercentage}}% back to be used on future purchases.*"},"protect":{"heading":"Shipping Protection","text":"From theft, loss, damage, \u0026 more - Onward has you covered."},"extendedWarranties":{"heading":"Product Protection","text":"From failure due to normal wear and tear and defects after the manufacturer's warranty expires."},"carbonOffsets":{"heading":"Carbon Neutral","text":"We'll offset the CO2 emissions of this shipment."},"productGuarantees":{"heading":"Satisfaction Guarantee","text":"If you have any quality issues within {{days}} days, we'll make it right."},"returnsAndExchanges":{"heading":"Free Returns \u0026 Exchanges","text":"Free return shipping on all US orders for returns \u0026 exchanges."},"freeReturns":{"heading":"Free Returns","text":"Free return shipping on all US orders."},"subscriptions":{"text":"Checkout+ will be added to recurring subscription orders and may be cancelled at anytime."},"prioritySupport":{"heading":"Priority Support","text":"Skip the line and get expedited customer support."},"donation":{"heading":"$10 Charitable Gift","text":"Make an impact with a donation to a cause of your choice."},"footer":{"legalPrefix":"By purchasing Checkout+, you agree and have read the","termsLabel":"Terms","and":"and","privacyLabel":"Privacy","returnPolicyNotice":"Exceptions apply. Please see the {{returnPolicyLink}} for more details.","returnPolicyLinkLabel":"return policy","poweredBy":"Powered by"}}}}; 615 Object.freeze(window.OnwardTranslationsJson); 616 617 618 619 window.OnwardCustomer = { isB2b: null, tags: null }; 620</script>
620 621 622<style id="onward-styles-sheet"> 623 .cart-item:has(a[href*="/products/onward-package-protection"]), 624 .cart__item:has(a[href*="/products/onward-package-protection"]), 625 .upez--cart-item:has(a[href*="/products/onward-package-protection"]), 626 .upcart-product-item:has(a[href*="/products/onward-package-protection"]), 627 .rebuy-cart__flyout-item:has(a[href*="/products/onward-package-protection"]) { 628 display: none; 629 } 630 631 #onward-container section { 632 max-width: unset !important; 633} 634 635.cart__footer .onward-opt-out-link { 636 padding-bottom: 10px !important; 637} 638</style> 639 640 641<!-- END app block -->
641<script src="https://cdn.shopify.com/extensions/01a0f884-4d26-788c-98bd-f9f532a12be3/trakt-359/assets/onward.js" type="text/javascript" defer="defer"></script>
641 642<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
643<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: 65962311766,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "index"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 643
643
644<script> 645 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 646</script>
vendor: 1 bytes, line 646
646
647<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
647).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 65962311766,storefrontBaseUrl: "https://bokksu.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://bokksu.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2755002454","configuration":"{\"shop_id\":\"cdbd5ec0-567c-4cb8-9f4a-f43846425a0e\",\"api_key\":\"8925106c-39dc-4d2e-9dcd-a17a0dc1682d\",\"batch\":\"false\",\"debug\":\"false\",\"batch_size\":\"10\",\"batch_timeout\":\"1000\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"e8d8f449ab471574ebe60d464d6125bb","type":"APP","apiClientId":298951540737,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
647,"dataSharingState":"unrestricted"},{"id":"2335637590","configuration":"{\"dummy\": \"shopify-requires-a-setting\", \"mparticleKey\": \"us2-c1e547c7c9a0624aa2a0f7ac73b0e563\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"00483b24138d67a073f1731751addbf7","type":"APP","apiClientId":5517037,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2078474326","configuration":"{\"ti\":\"295024041\",\"endpoint\":\"https:\/\/bat.bing.com\/action\/0\",\"tagIds\":\"[\\\"-1\\\"]\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"58a904981d2724b937c16718aa2f1aee","type":"APP","apiClientId":2997493,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2063007830","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-CV5R39K3NR\\\",\\\"AW-881230929\\\",\\\"GT-MJP89594\\\",\\\"GT-PZ6C6CBV\\\",\\\"G-GX8QL9NMMB\\\"],\\\"target_country\\\":\\\"ZZ\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-CV5R39K3NR\\\",\\\"AW-881230929\\\/2-smCLP53JwcENGImqQD\\\",\\\"MC-CXBBNG265S\\\",\\\"G-GX8QL9NMMB\\\"]},{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-CV5R39K3NR\\\",\\\"AW-881230929\\\/JfoPCKf53JwcENGImqQD\\\",\\\"MC-CXBBNG265S\\\",\\\"G-GX8QL9NMMB\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-CV5R39K3NR\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-CV5R39K3NR\\\",\\\"AW-881230929\\\/_H-4CLD53JwcENGImqQD\\\",\\\"MC-63KXP9DLVJ\\\",\\\"MC-CXBBNG265S\\\",\\\"G-GX8QL9NMMB\\\"]},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-CV5R39K3NR\\\",\\\"AW-881230929\\\/8yb2CKT53JwcENGImqQD\\\",\\\"MC-63KXP9DLVJ\\\",\\\"MC-CXBBNG265S\\\",\\\"G-GX8QL9NMMB\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-CV5R39K3NR\\\"},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-CV5R39K3NR\\\",\\\"AW-881230929\\\/oqavCK353JwcENGImqQD\\\",\\\"MC-63KXP9DLVJ\\\",\\\"MC-CXBBNG265S\\\",\\\"G-GX8QL9NMMB\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-CV5R39K3NR\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-CV5R39K3NR\\\",\\\"AW-881230929\\\/bqGpCLb53JwcENGImqQD\\\",\\\"MC-CXBBNG265S\\\",\\\"G-GX8QL9NMMB\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-CV5R39K3NR\\\",\\\"AW-881230929\\\/H1pACKr53JwcENGImqQD\\\",\\\"MC-CXBBNG265S\\\",\\\"G-GX8QL9NMMB\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-CV5R39K3NR\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"2011299926","configuration":"{\"accountID\": \"0kNB\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"6a53245b38dbdd172c1cf147630a90fd","type":"APP","apiClientId":200342863873,"privacyPurposes":["ANALYTICS"],"capabilities":["advanced_dom_events"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1957134422","configuration":"{\"accountID\":\"[email protected]\",\"endpointId\":\"bokksu.snb\",\"externalProductSystemId\":\"snb\",\"customerId\":\"snbShopifyCustomerIdNew\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7b097de7be0f46c8046b89b76a42b640","type":"APP","apiClientId":264145960961,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"}
647,{"id":"1561526358","configuration":"{\"clickstreamId\":\"7abec9be-eb55-40b7-a879-eaa69774e2e6\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"dce0ba162d2ca66f441eebf2b9a98ca0","type":"APP","apiClientId":44186959873,"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":"1279688790","configuration":"{\"vibePixelId\":\"vxI3m8\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"72859894ec8aa8d5e0246c40aaed9466","type":"APP","apiClientId":132266098689,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":[],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1279656022","configuration":"{\"pixelId\":\"5d591ff0-c39c-4835-b43e-645ad89df229\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c119f01612c13b62ab52809eb08154bb","type":"APP","apiClientId":2556259,"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":"1279557718","configuration":"{\"pixelCode\":\"C9LB23RC77UEMUC6OV00\"}","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"},{"id":"1276444758","configuration":"{\"pixel_id\":\"1717073378784411\",\"pixel_type\":\"facebook_pixel\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","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":"1273725014","configuration":"{\"campaignID\":\"17070\",\"externalExecutionURL\":\"https:\/\/engine.saasler.com\/api\/v1\/webhook_executions\/d62680ec699e313d056a49573f2288eb\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"4d2ae310e7f99f154f33560b5c81cfa9","type":"APP","apiClientId":3546795,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1212186710","configuration":"{\"store_id\":\"209808\",\"environment\":\"prod\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"10c4f173702937db6fa4bf871600cafd","type":"APP","apiClientId":294517,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"121012310","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Maestra"},{"id":"121045078","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":[],"name":"Matomo"},{"id":"127959126","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":[],"name":"Customers.AI Pixel"}
647,{"id":"129040470","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"4","type":"CUSTOM","privacyPurposes":[],"name":"InnovidXP - Action Pixel"},{"id":"140673110","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":[],"name":"Yelp Pixel"},{"id":"143392854","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":[],"name":"Google Ads"},{"id":"145653846","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":[],"name":"Microsoft UET Tag"},{"id":"166068310","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"2","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"OpenAI Ads Conversions"},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"Bokksu Snack Box","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"snb-hashii.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/bokksu.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[{"id":"7626382999638","handle":"classic-bokksu","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42939935850582","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10320567992406","handle":"artisan-coffee-pairing","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"50541659979862","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7675567538262","handle":"gift-wrap","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"43471000862806","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7676028715094","handle":"washi-box","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"43472486301782","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}],"purchasingCompany":null},},"https://bokksu.com/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"138710351958","themePublished":"true","eventMetadataId":"3b4368be-e67b-4f24-b871-12627ca90273","pageType":"home","shopId":"65962311766","storefrontBaseUrl":"https:\/\/bokksu.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
647<script> 648 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 649 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 650 window.ShopifyAnalytics.meta.currency = 'USD'; 651 var meta = {"page":{"pageType":"home","requestId":"811c4a41-97bb-4560-8a48-f315fd3886fb-1790908320"}}; 652 for (var attr in meta) { 653 window.ShopifyAnalytics.meta[attr] = meta[attr]; 654 } 655</script>
vendor: 1 bytes, line 655
655
656<script class="analytics"> 657 (function () { 658 var customDocumentWrite = function(content) { 659 var jquery = null; 660 661 if (window.jQuery) { 662 jquery = window.jQuery; 663 } else if (window.Checkout && window.Checkout.$) { 664 jquery = window.Checkout.$; 665 } 666 667 if (jquery) { 668 jquery('body').append(content); 669 } 670 }; 671 672 var hasLoggedConversion = function(token) { 673 if (token) { 674 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 675 } 676 return false; 677 } 678 679 var setCookieIfConversion = function(token) { 680 if (token) { 681 var twoMonthsFromNow = new Date(Date.now()); 682 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 683 684 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 685 } 686 } 687 688 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 689 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 690 if (trekkie.integrations) { 691 return; 692 } 693 trekkie.methods = [ 694 'identify', 695 'page', 696 'ready', 697 'track', 698 'trackForm', 699 'trackLink' 700 ]; 701 trekkie.factory = function(method) { 702 return function() { 703 var args = Array.prototype.slice.call(arguments); 704 args.unshift(method); 705 trekkie.push(args); 706 if (method == 'track' || method == 'page') { 707 var pageUrl; 708 try { 709 pageUrl = window.location.href; 710 } catch (e) {} 711 var pageReferrer; 712 try { 713 pageReferrer = document.referrer; 714 } catch (e) {} 715 try { 716 if (window.__TREKKIE_SHIM_QUEUE == null) { 717 window.__TREKKIE_SHIM_QUEUE = []; 718 } 719 window.__TREKKIE_SHIM_QUEUE.push({ 720 from: 'trekkie-stub', 721 method: method, 722 args: args.slice(1), 723 pageContext: { 724 url: pageUrl, 725 referrer: pageReferrer 726 } 727 }); 728 } catch (e) { 729 // no-op 730 } 731 } 732 return trekkie; 733 }; 734 }; 735 for (var i = 0; i < trekkie.methods.length; i++) { 736 var key = trekkie.methods[i]; 737 trekkie[key] = trekkie.factory(key); 738 } 739 trekkie.load = function(config) { 740 trekkie.config = config || {}; 741 trekkie.config.initialDocumentCookie = document.cookie; 742 var first = document.getElementsByTagName('script')[0]; 743var script = document.createElement('script'); 744script.type = 'text/javascript'; 745script.onerror = function(e) { 746 var scriptFallback = document.createElement('script'); 747 scriptFallback.type = 'text/javascript'; 748 scriptFallback.onerror = function(error) { 749 var Monorail = { 750 produce: function produce(monorailDomain, schemaId, payload) { 751 var currentMs = new Date().getTime(); 752 var event = { 753 schema_id: schemaId, 754 payload: payload, 755 metadata: { 756 event_created_at_ms: currentMs, 757 event_sent_at_ms: currentMs 758 } 759 }; 760 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 761 }, 762 sendRequest: function sendRequest(endpointUrl, payload) { 763 // Try the sendBeacon API 764 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 765 var blobData = new window.Blob([payload], { 766 type: 'text/plain' 767 }); 768 769 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 770 return true; 771 } // sendBeacon was not successful 772 773 } // XHR beacon 774 775 var xhr = new XMLHttpRequest(); 776 777 try { 778 xhr.open('POST', endpointUrl); 779 xhr.setRequestHeader('Content-Type', 'text/plain'); 780 xhr.send(payload); 781 } catch (e) { 782 console.log(e); 783 } 784 785 return false; 786 }, 787 isIos12: function isIos12() { 788 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 789 } 790 }; 791 Monorail.produce('monorail-edge.shopifysvc.com', 792 'trekkie_storefront_load_errors/1.1', 793 {shop_id: 65962311766, 794 theme_id: 138710351958, 795 app_name: "storefront", 796 context_url: window.location.href, 797 source_url: "//bokksu.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 798 799 }; 800 scriptFallback.async = true; 801 scriptFallback.src = '//bokksu.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 802 first.parentNode.insertBefore(scriptFallback, first); 803}; 804script.async = true; 805script.src = '//bokksu.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 806first.parentNode.insertBefore(script, first); 807 808 }; 809 trekkie.load( 810 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":65962311766,"isMerchantRequest":null,"themeId":138710351958,"themeCityHash":"1088565011724270943","contentLanguage":"en","currency":"USD","eventMetadataId":"3b4368be-e67b-4f24-b871-12627ca90273"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 811 ); 812 813 var loaded = false;
814 trekkie.ready(function() { 815 if (loaded) return; 816 loaded = true; 817 818 window.ShopifyAnalytics.lib = window.trekkie; 819 820 var originalDocumentWrite = document.write; 821 document.write = customDocumentWrite; 822 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 823 document.write = originalDocumentWrite; 824 825 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 826 var token = match? match[1]: undefined; 827 if (!hasLoggedConversion(token)) { 828 setCookieIfConversion(token); 829 830 } 831 }); 832 833 window.ShopifyAnalytics.lib.page(null,{"pageType":"home","requestId":"811c4a41-97bb-4560-8a48-f315fd3886fb-1790908320","shopifyEmitted":true}); 834 835 var eventsListenerScript = document.createElement('script'); 836 eventsListenerScript.async = true; 837 eventsListenerScript.src = "//bokksu.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 838 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 839})();</script>
vendor: 1 bytes, line 839
839
840<script 841 defer 842 src="https://bokksu.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 843 data-application="storefront-renderer" 844 data-shop-id="65962311766" 845 data-render-region="gcp-us-central1" 846 data-page-type="index" 847 data-theme-instance-id="138710351958" 848 data-theme-name="Expanse" 849 data-theme-version="4.3.4" 850 data-monorail-region="shop_domain" 851 data-resource-timing-sampling-rate="10" 852 data-shs="true" 853 data-shs-beacon="true" 854 data-shs-export-with-fetch="true" 855 data-shs-logs-sample-rate="1" 856 data-shs-beacon-endpoint="https://bokksu.com/api/collect" 857></script>
857 858<meta name="shopify-y" content="ebcbd2fe-0b72-4fbb-8621-db62dfe3fcd2" data-expiration="1822465920000"><meta name="shopify-s" content="c4ba585f-3127-4743-9f27-5570131ae8f0" data-expiration="1790910120000"><meta name="new-cookie-storage-activated" content="t"> 859</head> 860 861 <body 862 class="template-index 863 sugoi-mart-menu 864 865 866 bokksu-store 867 868 " 869 data-transitions="true" 870 data-button_style="round-slight" 871 data-edges="" 872 data-type_header_capitalize="false" 873 data-swatch_style="round" 874 data-grid-style="grey-square" 875 data-min-checkout = "27" 876 data-frozen-min-shipping = "99" 877 data-min-shipping = "149" 878 ><a href="#MainContent" class="skip-to-content">Skip to content</a> 879 <style> 880 .skip-to-content { 881 position: absolute; 882 left: -9999px; 883 top: auto; 884 width: 1px; 885 height: 1px; 886 overflow: hidden; 887 z-index: 10000; 888 } 889 .skip-to-content:focus, 890 .skip-to-content:focus-visible { 891 position: fixed; 892 top: 0; 893 left: 0; 894 width: auto; 895 height: auto; 896 padding: 1rem 1.25rem; 897 background: #111; 898 color: #fff; 899 font-weight: 600; 900 text-decoration: underline; 901 clip: auto; 902 outline: 3px solid #ffbf00; 903 outline-offset: 0; 904 } 905 </style> 906 907
907<script> 908 window.dataLayer = window.dataLayer || []; 909 910 const dataLayerHelper = (function() { 911 912 const storeAbbr = 'SNB'; 913 914 915 // Helper function to get a cookie by name 916 function getCookie(name) { 917 const value = "; " + document.cookie; 918 const parts = value.split("; " + name + "="); 919 if (parts.length == 2) return parts.pop().split(";").shift(); 920 } 921 922 // Helper function to set a cookie 923 function setCookie(name, value, minutes) { 924 const d = new Date(); 925 d.setTime(d.getTime() + (minutes*60*1000)); 926 const expires = "expires=" + d.toUTCString(); 927 document.cookie = name + "=" + value + ";" + expires + ";path=/"; 928 } 929 930 // Function to get UTM parameters from the URL 931 function getUTM() { 932 const urlParams = new URLSearchParams(window.location.search); 933 return { 934 source: urlParams.get('utm_source') || null, 935 medium: urlParams.get('utm_medium') || null, 936 campaign: urlParams.get('utm_campaign') || null 937 }; 938 } 939 940 // Check cookies for UTM values or set them if they don't exist 941 function getUTMParameters() { 942 const utmFromURL = getUTM(); 943 944 if (utmFromURL.source && getCookie('utm_source') != utmFromURL.source) { 945 setCookie('utm_source', utmFromURL.source, 15); 946 } 947 948 if (utmFromURL.medium && getCookie('utm_medium') != utmFromURL.medium) { 949 setCookie('utm_medium', utmFromURL.medium, 15); 950 } 951 952 if (utmFromURL.campaign && getCookie('utm_campaign') != utmFromURL.campaign) { 953 setCookie('utm_campaign', utmFromURL.campaign, 15); 954 } 955
956 const utmFromCookies = { 957 source: getCookie('utm_source') || null, 958 medium: getCookie('utm_medium') || null, 959 campaign: getCookie('utm_campaign') || null, 960 landing_page: window.location.href 961 }; 962 963 return utmFromCookies; 964 } 965 966 // Check if the value is an integer and convert it to a float ex: 5990 => 59.90 967 function checkAndConvert(value) { 968 if (Number.isInteger(value)) { 969 return value / 100; 970 } else { 971 return value; 972 } 973 } 974 975 function cartSubtotal(items) { 976 return items.reduce((total, item) => total + (item.price * item.quantity), 0); 977 } 978 979 // Get cart items from the cart object 980 function getCartItems() { 981 982 let cartItems = [ 983 984 ]; 985 return cartItems; 986 } 987 988 // Get checkout items from the checkout object 989 function getCheckoutItems() { 990 if(typeof Shopify !== 'undefined' && Shopify.Checkout){ 991 let checkoutItems = [ 992 993 ]; 994 return checkoutItems; 995 } 996 } 997 998 // Get only the fields we need from the cart items 999 function extractSelectedFields(cart) { 1000 return cart.map(item => { 1001 return { 1002 variant_id: item.id, 1003 product_id: item.product_id, 1004 sku: item.sku, 1005 title: item.title, 1006 quantity: item.quantity, 1007 price: checkAndConvert(item.price), 1008 vendor: item.vendor, 1009 category: item.product_type 1010 }; 1011 }); 1012 } 1013 1014 // Function to generate unique event_id 1015 function generateEventId() { 1016 const timestamp = Date.now(); // Current timestamp in milliseconds 1017 const randomNum = Math.floor(Math.random() * 1000000); // Random number between 0 and 999999 1018 return `${timestamp}_${randomNum}`; 1019 } 1020 1021 /* Make item object */ 1022 const itemObject = async (itemData, quantity) => { 1023 return { 1024 product_id: itemData.product.id, 1025 id: itemData.variant.id, 1026 handle: itemData.product.handle, 1027 quantity: quantity, 1028 price: itemData.variant.price, 1029 compare_price: itemData.variant.compare_at_price, 1030 sku: itemData.variant.sku, 1031 image: itemData.product.images[0]?.src || '', 1032 url: `/products/${itemData.product.handle}`, 1033 title: itemData.product.title 1034 }; 1035 }; 1036 1037 const sumQuantities = (items) => { 1038 return items.reduce((total, item) => { 1039 return total + (item.quantity || 0); 1040 }, 0); 1041 }; 1042 1043 async function fetchProductWithVariant(handle, variantId) { 1044 try { 1045 const response = await fetch(`/products/${handle}.json`); 1046 const data = await response.json(); 1047 const product = data.product; 1048 let variant = product.variants.find(variant => variant.id == variantId); 1049 return { product, variant }; 1050 } catch (error) { 1051 console.error('Error:', error); 1052 } 1053 } 1054 1055 async function fetchCartItems() { 1056 // Create a delay function to wait for 2 seconds 1057 function delay(ms) { 1058 return new Promise(resolve => setTimeout(resolve, ms)); 1059 } 1060 1061 try { 1062 // Wait for 2 seconds before fetching the cart data 1063 await delay(2000); 1064 1065 const response = await fetch(`/cart.json`); 1066 const data = await response.json(); 1067 1068 // Filter out the item with sku 'ONWARDINS01' 1069 const filteredItems = data.items.filter(item => item.sku !== 'ONWARDINS01'); 1070 1071 return filteredItems; 1072 } catch (error) { 1073 console.error('Error:', error); 1074 } 1075 } 1076 1077 function createEcommerceEntry(item, cartItems, quantityAdjustment = 0) { 1078 return { 1079 'items': [{ 1080 'item_id' : item.product_id, 1081 'item_variant' : item.id, 1082 'item_name' : item.title, 1083 'price' : checkAndConvert(item.price), 1084 'compare_price' : checkAndConvert(item.compare_at_price), 1085 'item_brand' : storeAbbr, 1086 'item_category' : item.type,
1087 'vendor' : item.vendor, 1088 'quantity' : Number(item.quantity) + Number(quantityAdjustment), 1089 'image_url' : item.image, 1090 'product_url' : item.url, 1091 'sku' : item.sku, 1092 'customer_id' : null, 1093 'customer_email' : null, 1094 }], 1095 'cart': { 1096 'cart_items' : extractSelectedFields(cartItems), 1097 'cart_quantity' : sumQuantities(cartItems), 1098 'cart_subtotal' : checkAndConvert(cartSubtotal(cartItems)) 1099 } 1100 }; 1101 } 1102 return { 1103 userData: function () { 1104 // Customer data object 1105 let customerData = { 1106 is_logged_in: false, 1107 type: 'guest', 1108 id: null, 1109 email: null, 1110 first_name: null, 1111 last_name: null, 1112 phone_number: null, 1113 accepts_marketing: null, 1114 total_spent: null, 1115 orders_count: null, 1116 default_address: null 1117 }; 1118 1119 // Liquid code to get customer data if logged in 1120 1121 1122 // Push the customer data to the dataLayer 1123 window.dataLayer.push({ 1124 'event': 'dl_user_data', 1125 'user_data': customerData, 1126 'marketing': getUTMParameters() 1127 }); 1128 }, 1129 viewItem: function() { 1130 // SKU ONWARDINS01 must be ignored 1131 let ecommerce = { 1132 'items': [{ 1133 'item_id' : null, 1134 'item_variant' : null, 1135 'item_name' : null, 1136 'price' : "", 1137 'item_brand' : storeAbbr, 1138 'item_category' : null, 1139 'vendor' : null, 1140 'image_url' : 'https://bokksu.com/cdn/shopifycloud/storefront/assets/no-image-2048-a2addb12_grande.gif', 1141 'product_url' : '', 1142 'sku' : null 1143 }], 1144 'cart': { 1145 'cart_items' : getCartItems(), 1146 'cart_quantity' : sumQuantities(getCartItems()), 1147 'cart_subtotal' : cartSubtotal(getCartItems()), 1148 } 1149 }; 1150 1151 dataLayer.push({ 1152 'pageType' : 'Product', 1153 'event' : 'dl_view_item', 1154 'event_id': generateEventId(), 1155 ecommerce 1156 }); 1157 1158 }, 1159 viewCollection: function() { 1160 1161 let ecommerce = { 1162 'collection': { 1163 'id' : null, 1164 'handle' : null, 1165 'description' : null, 1166 'products_count' : null, 1167 'products' : [ 1168 1169 ], 1170 }, 1171 'cart': { 1172 'cart_items' : getCartItems(), 1173 'cart_quantity' : sumQuantities(getCartItems()), 1174 'cart_subtotal' : cartSubtotal(getCartItems()), 1175 } 1176 }; 1177 dataLayer.push({ 1178 'pageType' : 'Collection', 1179 'event' : 'dl_view_item_list', 1180 'event_id': generateEventId(), 1181 ecommerce 1182 }); 1183 }, 1184 addToCart: async function(handle, variantId, quantity, quantityAdjustment = 1) { 1185 this.userData(); 1186 const itemData = await fetchProductWithVariant(handle, variantId); 1187 const currentCartItems = await fetchCartItems(); 1188 1189 const item = await itemObject(itemData, quantity); 1190 1191 // SKU ONWARDINS01 must be ignored 1192 if (item.sku == 'ONWARDINS01') { 1193 return; 1194 } 1195 1196 const ecommerce = createEcommerceEntry(item, currentCartItems, quantityAdjustment); 1197 dataLayer.push({ 1198 'event': 'dl_add_to_cart', 1199 'event_id': generateEventId(), 1200 ecommerce 1201 }); 1202 }, 1203 removeFromCart: async function(handle, variantId, quantity, quantityAdjustment = -1) { 1204 this.userData(); 1205 const itemData = await fetchProductWithVariant(handle, variantId); 1206 const currentCartItems = await fetchCartItems(); 1207 const item = await itemObject(itemData, quantity); 1208 1209 // SKU ONWARDINS01 must be ignored 1210 if (item.sku == 'ONWARDINS01') { 1211 return; 1212 } 1213 1214 const ecommerce = createEcommerceEntry(item, currentCartItems, quantityAdjustment); 1215 dataLayer.push({ 1216 'event': 'dl_remove_from_cart', 1217 'event_id': generateEventId(), 1218 ecommerce 1219 }); 1220 }, 1221 checkout: function() { 1222 this.userData(); 1223 if(typeof Shopify !== 'undefined' && Shopify.Checkout){ 1224 let ecommerce = { 1225 'items': [{ 1226 'transaction_id': null, 1227 'order_id': null, 1228 'customer_id': null, 1229 'affiliation': "Bokksu Snack Box", 1230 'value': "", 1231 'tax': "", 1232 'shipping': "", 1233 'subtotal': "", 1234 'currency': null, 1235 1236 'email': null, 1237 }], 1238 'cart': { 1239 'cart_items': getCheckoutItems(), 1240 'cart_quantity' : sumQuantities(getCheckoutItems()), 1241 } 1242 }; 1243 1244 if(Shopify.Checkout.step){ 1245 if(Shopify.Checkout.step.length > 0){ 1246 if (Shopify.Checkout.step === 'contact_information'){ 1247 dataLayer.push({ 1248 'event' :'dl_begin_checkout', 1249 'pageType' :'Customer Information', 1250 'step': 1, 1251 'event_id': generateEventId(), 1252 ecommerce 1253 }); 1254 }else if (Shopify.Checkout.step === 'shipping_method'){ 1255 dataLayer.push({ 1256 'event' :'add_shipping_info', 1257 'pageType' :'Shipping Information', 1258 'event_id': generateEventId(), 1259 ecommerce 1260 }); 1261 }else if( Shopify.Checkout.step === "payment_method" ){ 1262 dataLayer.push({ 1263 'event' :'add_payment_info', 1264 'event_id': generateEventId(), 1265 'pageType' :'Add Payment Info', 1266 ecommerce 1267 }); 1268 } 1269 } 1270 1271 if(Shopify.Checkout.page == "thank_you"){ 1272 dataLayer.push({ 1273 'pageType' :'Transaction', 1274 'event_id': generateEventId(), 1275 'event' :'dl_purchase', 1276 ecommerce 1277 }); 1278 } 1279 } 1280 } 1281 }, 1282 }; 1283 })(); 1284 1285 /*
1286 EVENTS ADD TO CART, REMOVE FROM CART, PURCHASE, PDP PAGE VIEW, CHECKOUT 1287 */ 1288 1289 /* User Data */ 1290 dataLayerHelper.userData(); 1291 1292 /* PDP Page view*/ 1293 1294 1295 1296 1297 /* Checkout Page view*/ 1298 setTimeout(function() { 1299 if(typeof Shopify !== 'undefined' && Shopify.Checkout){ 1300 dataLayerHelper.checkout(); 1301 } 1302 }, 2000); 1303 1304 /* Add and Remove cart items (CART and PDP minus and plus)*/ 1305 document.addEventListener('click', async function(event) { 1306 const button = event.target.closest('.js-qty__wrapper button'); 1307 if (button) { 1308 const input = button.closest('.js-qty__wrapper').querySelector('input'); 1309 if (input) { 1310 const handle = input.getAttribute('data-product-handle'); 1311 const variantId = input.getAttribute('data-variant-id'); 1312 1313 if (button.classList.contains('js-qty__adjust--minus')) { 1314 await dataLayerHelper.removeFromCart(handle, variantId, input.value, 0); 1315 } else if (button.classList.contains('js-qty__adjust--plus')) { 1316 await dataLayerHelper.addToCart(handle, variantId, input.value, 0); 1317 } 1318 } 1319 } 1320 }); 1321 1322 /* Add and Remove cart items (HOMEPAGE) */ 1323 document.addEventListener('click', async function(event) { 1324 const target = event.target.closest('.qty-custom-plus, .qty-custom-minus, .quick_add_to_cart'); 1325 if (!target) return; 1326 1327 const gridItem = target.closest('.grid-item'); 1328 if (!gridItem) return; 1329 1330 const handle = gridItem.getAttribute('data-product-handle'); 1331 const variantId = gridItem.getAttribute('data-variant-id'); 1332 1333 const quantitySpan = gridItem.querySelector('.custom-qty'); 1334 let quantity = 0; 1335 if (quantitySpan){ 1336 quantity = parseInt(quantitySpan.textContent); 1337 }; 1338 1339 if (target.classList.contains('qty-custom-minus')) { 1340 await dataLayerHelper.removeFromCart(handle, variantId, quantity, -1); 1341 } else if (target.classList.contains('qty-custom-plus')) { 1342 await dataLayerHelper.addToCart(handle, variantId, quantity, 1); 1343 } else if (target.classList.contains('quick_add_to_cart')) { 1344 await dataLayerHelper.addToCart(handle, variantId, 1, 0); 1345 } 1346 }); 1347 1348 /* Add button cart (Customers Also Loved) & add button cart normal state (PDP)*/ 1349 document.addEventListener('click', async function(event) { 1350 const button = event.target.closest('.shopify-reco-cart-add button, .pdp-atc'); 1351 if (button) { 1352 const handle = button.getAttribute('data-product-handle'); 1353 const variantId = button.getAttribute('data-variant-id'); 1354 await dataLayerHelper.addToCart(handle, variantId, 1, 0); 1355 } 1356 }); 1357 1358 /* Collection Single button and plus and minus using FS*/ 1359 window.addEventListener('fs-custom-events-product-clicked', (e) => { 1360 if(e && e.detail && e.detail.id){ 1361 const productId = e.detail.id 1362 const handle = e.detail.productURL.split('/').pop(); 1363 const variantId = e.detail.s.split('::').pop(); 1364 1365 const shadow = document.querySelector('#fast-simon-serp-app') && document.querySelector('#fast-simon-serp-app').shadowRoot ? document.querySelector('#fast-simon-serp-app').shadowRoot:null; 1366 if(shadow){ 1367 if(shadow.querySelector(`.fs-results-product-card[data-product-id="`+productId+`"]`)){ 1368 const element = shadow.querySelector(`.fs-results-product-card[data-product-id="`+productId+`"]`); 1369 if(element.querySelector(".add-item-to-cart .qty-custom-minus")){ 1370 element.querySelector(".add-item-to-cart .qty-custom-minus").addEventListener("click", function () { 1371 const quantitySpan = element.querySelector('.custom-qty'); 1372 let quantity = 0; 1373 if (quantitySpan){ 1374 quantity = parseInt(quantitySpan.textContent); 1375 }; 1376 dataLayerHelper.addToCart(handle, variantId, quantity, -1); 1377 }); 1378 } 1379 1380 if(element.querySelector(".add-item-to-cart .qty-custom-plus")){ 1381 element.querySelector(".add-item-to-cart .qty-custom-plus").addEventListener("click", function () { 1382 const quantitySpan = element.querySelector('.custom-qty'); 1383 let quantity = 0; 1384 if (quantitySpan){ 1385 quantity = parseInt(quantitySpan.textContent); 1386 }; 1387 dataLayerHelper.addToCart(handle, variantId, quantity, 1); 1388 }); 1389 } 1390 1391 if(element.querySelector(".qty-custom-add")){ 1392 dataLayerHelper.addToCart(handle, variantId, 1, 0); 1393 } 1394 } 1395 } 1396 } 1397 }); 1398</script>
1398 1399 1400 1401 1402 <!-- Google Tag Manager (noscript) -->
vendor: 77 bytes, lines 1402-1404
1402 1403 1404 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1404GTM-PR4MBW
vendor: 84 bytes, lines 1404-1405
1404" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 1405
1406<!-- End Google Tag Manager (noscript) --> 1407 1408 1409
1409<script type="text/javascript"> 1410 window.setTimeout(function() { document.body.className += " loaded"; }, 25); 1411 </script>
1411 1412 1413 1414 1415 1416 <style> 1417 :root { 1418 --sale-badge: #b73d09; 1419 --badge-best-seller: #b73d09; 1420 --badge-new: #b73d09; 1421 --brand_color_1: #b73d09; 1422 --cta_filled_static : #b73d09; 1423 --cta_outline_primary_static : #b73d09; 1424 --cta_outline_primary_hover : #b73d09; 1425 --quantity-selector-primary: #b73d09; 1426 --quantity-selector-secondary: #b73d09; 1427 --primary-color : #b73d09; 1428 --collection-primary-static : #b73d09; 1429 --collection-primary-static-hover : #b73d09; 1430 --colorTextSavings : #b73d09; 1431 --colorNav : #f4f6f1; 1432 1433 } 1434 .grid-product__price--savings{ 1435 color: #b73d09; 1436 } 1437</style> 1438 1439 1440 1441 1442 1443 1444 1445 <style> .Rise__widget { display:none !important } </style> 1446 1447 1448 1449 <div id="PageContainer" class="page-container"> 1450 <div class="transition-body"><!-- BEGIN sections: header-group --> 1451<div id="shopify-section-sections--17749310636118__toolbar" class="shopify-section shopify-section-group-header-group toolbar-section"> 1452 1453<div data-section-id="sections--17749310636118__toolbar" data-section-type="toolbar"> 1454 <div class="toolbar"> 1455 <div class="page-width"> 1456 <div class="toolbar__content">
1456<script src="//bokksu.com/cdn/shop/t/3/assets/load-image-section.js?v=162969312039988435871751964575" defer="defer"></script>
1456 1457 <div class="toolbar__item toolbar__item--announcements"> 1458 <div class="announcement-bar text-center"> 1459 <div class="slideshow-wrapper"> 1460 <button type="button" class="visually-hidden slideshow__pause" data-id="sections--17749310636118__toolbar" aria-label="Pause announcements" aria-pressed="false"> 1461 <span class="slideshow__pause-stop" aria-hidden="true"> 1462 <svg focusable="false" role="presentation" class="icon icon-pause" viewBox="0 0 10 13"><path d="M0 0h3v13H0zm7 0h3v13H7z" fill-rule="evenodd"/></svg> 1463 </span> 1464 <span class="slideshow__pause-play" aria-hidden="true"> 1465 <svg focusable="false" role="presentation" class="icon icon-play" viewBox="18.24 17.35 24.52 28.3"><path fill="#323232" d="M22.1 19.151v25.5l20.4-13.489-20.4-12.011z"/></svg> 1466 </span> 1467 </button> 1468 1469 <div 1470 id="AnnouncementSlider" 1471 class="announcement-slider " 1472 role="region" 1473 aria-roledescription="carousel" 1474 aria-label="Announcements" 1475 data-block-count="1"> 1476<div 1477 id="AnnouncementSlide-announcement_a8DXCa" 1478 class="slideshow__slide announcement-slider__slide" 1479 role="group" 1480 aria-roledescription="announcement" 1481 aria-label="1 of 1" 1482 data-index="0" 1483 > 1484 <div class="announcement-slider__content"><div class="medium-up--hide" aria-hidden="true"> 1485 <p>Rare extras when you subscribe for 3, 6, or 12 months! <a href="https://bokksu.com/products/classic-bokksu" target="_blank" title="https://bokksu.com/products/classic-bokksu"><span style="text-decoration:underline">Find Out More</span></a></p> 1486 </div> 1487 <div class="small--hide free-shiping"> 1488 <p>Rare extras when you subscribe for 3, 6, or 12 months! <a href="https://bokksu.com/products/classic-bokksu" target="_blank" title="https://bokksu.com/products/classic-bokksu"><span style="text-decoration:underline">Find Out More</span></a></p> 1489 </div></div> 1490 </div></div> 1491 </div> 1492 </div> 1493 </div> 1494 1495
1496<script> 1497 $(document).ready(function(){ 1498 $('#AnnouncementSlider').removeAttr("tabindex") 1499 }) 1500 1501 // a11y: keep off-screen announcement slides out of the keyboard tab order 1502 // WITHOUT using inert (which would kick screen-reader virtual focus when 1503 // the slide rotates). Use tabindex="-1" on focusable descendants instead. 1504 (function () { 1505 var slider = document.getElementById('AnnouncementSlider'); 1506 if (!slider) return; 1507 var FOCUSABLE_SEL = 'a[href], button, input, select, textarea, iframe, [tabindex]'; 1508 1509 function setSlideTabbable(slide, tabbable) { 1510 var focusables = slide.querySelectorAll(FOCUSABLE_SEL); 1511 for (var i = 0; i < focusables.length; i++) { 1512 var el = focusables[i]; 1513 if (tabbable) { 1514 var orig = el.getAttribute('data-a11y-orig-tabindex'); 1515 if (orig !== null && orig !== undefined) { 1516 if (orig === '__none__') el.removeAttribute('tabindex'); 1517 else el.setAttribute('tabindex', orig); 1518 el.removeAttribute('data-a11y-orig-tabindex'); 1519 } else { 1520 el.removeAttribute('tabindex'); 1521 } 1522 } else { 1523 if (el.getAttribute('data-a11y-orig-tabindex') === null) { 1524 var existing = el.getAttribute('tabindex'); 1525 el.setAttribute('data-a11y-orig-tabindex', existing === null ? '__none__' : existing); 1526 } 1527 el.setAttribute('tabindex', '-1'); 1528 } 1529 } 1530 } 1531 1532 function normalizeDots() { 1533 // Remove dots from keyboard tab order and screen reader navigation. 1534 // Guard: only set if value differs to prevent MutationObserver loops. 1535 var dotsContainer = slider.parentNode && slider.parentNode.querySelector('.flickity-page-dots'); 1536 if (dotsContainer && dotsContainer.getAttribute('aria-hidden') !== 'true') { 1537 dotsContainer.setAttribute('aria-hidden', 'true'); 1538 } 1539 var dots = slider.querySelectorAll('.flickity-page-dots .dot'); 1540 if (!dots.length && dotsContainer) dots = dotsContainer.querySelectorAll('.dot'); 1541 for (var i = 0; i < dots.length; i++) { 1542 if (dots[i].getAttribute('tabindex') !== '-1') { 1543 dots[i].setAttribute('tabindex', '-1'); 1544 } 1545 if (dots[i].getAttribute('aria-current') === 'step') { 1546 dots[i].setAttribute('aria-current', 'true'); 1547 } 1548 } 1549 } 1550 1551 function applyState() { 1552 var slides = slider.querySelectorAll('.announcement-slider__slide'); 1553 for (var i = 0; i < slides.length; i++) { 1554 var slide = slides[i]; 1555 var isActive = slide.classList.contains('is-selected'); 1556 setSlideTabbable(slide, isActive); 1557 if (isActive) { 1558 slide.removeAttribute('aria-hidden'); 1559 } else if (!slide.contains(document.activeElement)) { 1560 slide.setAttribute('aria-hidden', 'true'); 1561 } 1562 } 1563 normalizeDots(); 1564 } 1565 1566 function init() { 1567 applyState(); 1568 if (typeof MutationObserver !== 'function' || slider.dataset.a11ySlideObserved) return; 1569 slider.dataset.a11ySlideObserved = '1'; 1570 var slides = slider.querySelectorAll('.announcement-slider__slide'); 1571 var observer = new MutationObserver(function (mutations) { 1572 for (var i = 0; i < mutations.length; i++) { 1573 if (mutations[i].attributeName === 'class') { 1574 applyState(); 1575 break; 1576 } 1577 } 1578 }); 1579 for (var j = 0; j < slides.length; j++) { 1580 observer.observe(slides[j], { attributes: true, attributeFilter: ['class'] }); 1581 } 1582 // Watch dot list for class changes only (slide rotation). 1583 // Do NOT watch aria-current or aria-label â we set those ourselves 1584 // and watching them causes infinite observer loops. 1585 var dotsContainer = slider.parentNode && slider.parentNode.querySelector('.flickity-page-dots'); 1586 if (dotsContainer) { 1587 var dotObserver = new MutationObserver(function () { 1588 clearTimeout(slider._dotDebounce); 1589 slider._dotDebounce = setTimeout(normalizeDots, 50); 1590 }); 1591 dotObserver.observe(dotsContainer, { 1592 subtree: true, 1593 attributes: true, 1594 attributeFilter: ['class'] 1595 }); 1596 } 1597 } 1598 if (document.readyState === 'loading') { 1599 document.addEventListener('DOMContentLoaded', init); 1600 } else { 1601 init(); 1602 } 1603 setTimeout(init, 500); 1604 1605 // ------------------------------------------------------------------ 1606 // WCAG 2.2.2: pause autoplay on keyboard focus, hover, and when the
1607 // user prefers reduced motion. Respect the explicit pause-button 1608 // click so we don't override the user's choice. 1609 // ------------------------------------------------------------------ 1610 var getFlickity = function () { 1611 return (window.Flickity && typeof Flickity.data === 'function') 1612 ? Flickity.data(slider) 1613 : null; 1614 }; 1615 var wrapper = slider.closest('.slideshow-wrapper'); 1616 var userPaused = function () { 1617 var btn = wrapper && wrapper.querySelector('.slideshow__pause'); 1618 return !!(btn && btn.classList.contains('is-paused')); 1619 }; 1620 var reducedMotionPaused = false; 1621 var pauseAutoplay = function () { 1622 var fi = getFlickity(); 1623 if (fi && typeof fi.pausePlayer === 'function') fi.pausePlayer(); 1624 }; 1625 var resumeAutoplay = function () { 1626 if (userPaused() || reducedMotionPaused) return; 1627 var fi = getFlickity(); 1628 if (fi && typeof fi.unpausePlayer === 'function') fi.unpausePlayer(); 1629 }; 1630 1631 if (wrapper) { 1632 wrapper.addEventListener('focusin', pauseAutoplay); 1633 wrapper.addEventListener('focusout', function (e) { 1634 if (!wrapper.contains(e.relatedTarget)) resumeAutoplay(); 1635 }); 1636 wrapper.addEventListener('mouseenter', pauseAutoplay); 1637 wrapper.addEventListener('mouseleave', resumeAutoplay); 1638 } 1639 1640 if (window.matchMedia) { 1641 var rmQuery = window.matchMedia('(prefers-reduced-motion: reduce)'); 1642 var applyReducedMotion = function () { 1643 reducedMotionPaused = rmQuery.matches; 1644 var fi = getFlickity(); 1645 if (!fi) return; 1646 if (reducedMotionPaused) { 1647 if (typeof fi.stopPlayer === 'function') fi.stopPlayer(); 1648 else if (typeof fi.pausePlayer === 'function') fi.pausePlayer(); 1649 } else if (!userPaused()) { 1650 if (typeof fi.unpausePlayer === 'function') fi.unpausePlayer(); 1651 } 1652 }; 1653 var rmTries = 0; 1654 var rmPoll = setInterval(function () { 1655 if (getFlickity() || ++rmTries > 20) { 1656 clearInterval(rmPoll); 1657 if (getFlickity()) applyReducedMotion(); 1658 } 1659 }, 250); 1660 if (typeof rmQuery.addEventListener === 'function') { 1661 rmQuery.addEventListener('change', applyReducedMotion); 1662 } else if (typeof rmQuery.addListener === 'function') { 1663 rmQuery.addListener(applyReducedMotion); 1664 } 1665 } 1666 })(); 1667</script>
1667 1668</div> 1669 </div> 1670 </div> 1671</div> 1672 1673</div><div id="shopify-section-sections--17749310636118__header" class="shopify-section shopify-section-group-header-group header-section"> 1674 1675 <style> 1676 .sugoi-mart-mob-menu .slide-nav__wrapper ul li a:hover, 1677 .sugoi-mart-mob-menu .slide-nav__wrapper ul li button:hover .slide-nav__link { 1678 background: none !important; 1679 color: #ffffff !important; 1680 } 1681 </style> 1682 1683 1684<style> 1685 1686.cart__item--subtotal { 1687 font-size: 14px; 1688 line-height: 1.2; 1689 margin: 0; 1690} 1691 1692.cart_savings { 1693 font-size: 16px; 1694 line-height: 1.3; 1695 margin-bottom: 10px !important; 1696 margin-top: 4px; 1697} 1698 1699div#onward-copy-line-2 { 1700 margin: 6px 0 0 0 !important; 1701 padding: 0; 1702} 1703 1704#onward-container section { 1705 padding: 4px 0 10px !important; 1706} 1707 1708.cart__footer .onward-opt-out-link { 1709 padding: 0 !important; 1710 margin: 6px 0 4px !important; 1711} 1712 1713</style> 1714 1715 1716 <style> 1717 a.site-nav__link { 1718 padding-top: 24px !important; 1719 padding-bottom: 24px !important; 1720} 1721.site-header__logo{ 1722 margin: 10px 0 !important; 1723 margin-right:26px !important; 1724} 1725.page-width--narrow { 1726 /* max-width: 700px; */ 1727 max-width: var(--pageNarrow) !important; 1728} 1729 1730 1731 1732 /* New Is-light */ 1733 1734.is-light-new.is-light .site-header__element { 1735background: #fff !important; 1736} 1737.is-light-new .site-header__element { 1738 background: var(--colorNav) !important; 1739} 1740 1741.is-light-new.is-light .site-header__logo .logo--has-inverted { 1742opacity: 1; 1743visibility: visible; 1744overflow: auto; 1745height: initial; 1746} 1747 1748.is-light-new.is-light .site-header__logo .logo--inverted { 1749opacity: 0; 1750visibility: hidden; 1751overflow: hidden; 1752height: 0; 1753} 1754 1755.is-light-new.is-light .site-nav__link, 1756.is-light-new.is-light .site-nav__link:hover { 1757color: #000; 1758} 1759 1760.header-wrapper--overlay.is-light-new.is-light:after { 1761display: none; 1762} 1763 1764 .header-layout .subscribe-btn { 1765 display: block; 1766 font-family: 'Montserrat', sans-serif !important; 1767 font-style: normal !important; 1768 font-weight: 500 !important; 1769 font-size: 14px !important; 1770 line-height: 18px !important; 1771 text-align: center !important; 1772 letter-spacing: 5px !important; 1773 text-transform: uppercase !important; 1774 cursor: pointer !important; 1775 height: 40px !important; 1776 padding: 11px 38px !important; 1777 border-radius: 12px !important; 1778 } 1779 1780.header-layout .un-fl-submenu-icon-arrow-dj{ 1781 height: 3px; 1782 width: 3px; 1783} 1784.is-light-new .un-fl-submenu-icon-arrow-dj{ 1785 border-color: #000 !important; 1786} 1787.hero__top-subtitle{ 1788 font-family: 'Montserrat', sans-serif; 1789 text-transform: uppercase; 1790 letter-spacing: 2px !important; 1791 font-size: 12px !important; 1792 font-weight: 500 !important; 1793 line-height: 18px; 1794} 1795.un-fl-submenu-icon-arrow-dj 1796{ 1797 border-width: 0px 1px 1px 0px !important; 1798} 1799@media all and (max-width: 960px) { 1800 .header-layout .subscribe-btn , a.site-nav__link.site-nav__link--icon.AccountMobileIcone{ 1801 display: none; 1802 } 1803 .header-item--logo{ 1804 justify-content: center; 1805 } 1806 1807 .header-layout .un-fl-submenu-icon-arrow-dj { 1808 height: 3px; 1809 width: 3px; 1810 } 1811} 1812 @media all and (max-width: 960px) { 1813 1814 .header-layout .subscribe-btn, 1815 a.site-nav__link.site-nav__link--icon.AccountMobileIcone { 1816 display: none; 1817 } 1818 1819 .header-item--logo { 1820 justify-content: center; 1821 } 1822 } 1823 1824 1825 1826 .site-header__cart { 1827 padding: 0 !important; 1828 } 1829 1830 .cart__scrollable { 1831 margin-bottom: 230px !important; 1832 /* height: calc(100vh - 266px); */ 1833 } 1834 1835 a.hero__top-subtitle.site-nav__link.site-nav__link--underline:not(.site-nav__link--has-dropdown)>i { 1836 display: none; 1837 } 1838 1839 1840 @media all and (max-width: 850px) { 1841 .cart__scrollable { 1842 margin-bottom: 70px !important; 1843 /* height: calc(100vh - 170px); */ 1844 } 1845 1846 .header-layout .subscribe-btn, 1847 a.site-nav__link.site-nav__link--icon.AccountMobileIcone { 1848 display: none; 1849 } 1850 } 1851 1852 /* New Css */ 1853 @media only screen and (max-width:1200px) { 1854 .megamenu__col .megamenu__col-title { 1855 width: 50%; 1856 } 1857 1858 .megamenu__col { 1859 flex-wrap: wrap; 1860 } 1861 1862 .max-column-width { 1863 margin: auto; 1864 width: 400px !important; 1865 } 1866 1867 .Shop .megamenu__col { 1868 padding-right: 0 !important; 1869 } 1870 1871 .Shop .megamenu__col .megamenu__col-title, 1872 .About .megamenu__col .megamenu__col-title { 1873 width: 100%; 1874 } 1875 1876 .sugoi-mart-menu .slide-nav__wrapper ul li a , .slide-nav__wrapper ul li button .slide-nav__link { 1877 font-family: "Lato", sans-serif; 1878 font-weight: 400 !important; 1879 font-size: 15px !important; 1880 line-height: 140%; 1881 letter-spacing: 0.02em; 1882 text-transform: capitalize; 1883 color: #242426; 1884 border-radius: 8px; 1885 gap: 16px; 1886 transition: .3s linear 1887 } 1888 1889 } 1890 1891 @media only screen and (min-width:1201px) { 1892 .max-column-width { 1893 1894 /* New CSS */ 1895 1896 padding-top: 20px; 1897 word-break: break-word; 1898 width: 260px; 1899 font-weight: 400; 1900 font-size: 16px; 1901 line-height: 24px; 1902 text-align: center; 1903 letter-spacing: 1px; 1904 color: #000000; 1905 font-family: 'Lato'; 1906 1907 } 1908 } 1909 1910 1911 .desktop-seprator { 1912 border-top: 1px solid rgb(189, 189, 189); 1913 margin-left: 5%; 1914 width: 191%; 1915 } 1916 1917 .desktop-seprator:last-of-type { 1918 padding-bottom: 25px 1919 } 1920 1921 .cart__item {
1922 align-items: center !important; 1923 padding: 10px 20px; 1924 } 1925 1926 span.subscription-items-final-price { 1927 font-weight: 800; 1928 } 1929 1930 .cart-open body { 1931 overflow: hidden !important; 1932 } 1933 1934 .cart__footer { 1935 bottom: 91px; 1936 } 1937 1938 .scrolled-body .cart__footer { 1939 bottom: 60px; 1940 } 1941 1942 span.market-items-final-price { 1943 font-weight: 800; 1944 } 1945 1946 .subscription-product-container .subscription-free-shipping-msg a { 1947 color: #000 !important; 1948 } 1949 1950 .listing-loved-products::-webkit-scrollbar-track { 1951 -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); 1952 border-radius: 10px; 1953 background-color: #F5F5F5 !important; 1954 } 1955 1956 .listing-loved-products::-webkit-scrollbar { 1957 width: 6px; 1958 height: 6px; 1959 background-color: #F5F5F5 !important; 1960 } 1961 1962 .listing-loved-products::-webkit-scrollbar-thumb { 1963 border-radius: 10px; 1964 -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3); 1965 background-color: #BEBEBE !important; 1966 } 1967 1968 .header-version-2 .main-search-main{ 1969 position: absolute; 1970 top: 40%; 1971 transform: translateY(-50%); 1972 right: 29px; 1973 } 1974 .header-version-2 .main-search-main svg path{ 1975 fill: #000; 1976 } 1977 .header-version-2 .search__input-wrap { 1978 margin-top: 15px; 1979 } 1980 @media all and (max-width:1200px) { 1981 .cart__footer { 1982 bottom: 91px !important; 1983 } 1984 1985 } 1986 @media all and (max-width:576px) { 1987 .cart__footer { 1988 bottom: 57px !important; 1989 } 1990 .site-header__logo a { 1991 font-size: 29px !important; 1992 } 1993 .cart-open body { 1994 overflow: hidden !important; 1995 } 1996 .main-dualcart.subscription-product-container { 1997 margin-top: 13px; 1998} 1999 2000#HeaderWrapper .custom-page-width { 2001 max-width: 100%; 2002 padding: 0; 2003 position: relative; 2004} 2005} 2006 @media only screen and (max-width: 960px) { 2007 .mobile-nav-open .site-nav__link:not(.mobile-nav-trigger) { 2008 display: block; 2009 } 2010} 2011 @media only screen and (max-width: 768px) { 2012 .page-width.site-header__drawers { 2013 padding: 0 !important; 2014} 2015.header-item--logo { 2016 flex: 100 !important; 2017 justify-content: center !important; 2018} 2019} 2020body .cart-milestone .main-progress-bar-with-markups .floating-text-bottom * { 2021 font-family: 'Lato' !important; 2022 letter-spacing: 0.5px; 2023 text-align: center !important; 2024} 2025#note-wrap{ 2026 margin-bottom: 6px; 2027} 2028a.site-nav__link { 2029 padding-top: 26px; 2030 padding-bottom: 26px; 2031} 2032 2033 2034 .e-gift-heading-div{ 2035 margin-bottom: 0 !important; 2036 } 2037 .GmAddedContainer{ 2038 margin-bottom: 1.5rem; 2039 } 2040 2041 2042 2043 .header-section { 2044 position: sticky !important; 2045 } 2046 2047 2048 .is-light .site-header__element{ 2049 background: transparent !important; 2050 } 2051 2052 2053 2054 .GmAddedContainer{ 2055 margin-bottom: 0; 2056 } 2057 #note-wrap{ 2058 margin-bottom: 6px; 2059 } 2060.header-layout #search-icon-id { 2061 display: none; 2062 } 2063#announcement-banner-MKT #bannerBG , .subscribe-btn:before , .cart-link__bubble:before , #mbl-subscribe-overrides{ 2064 background-color: #b73d09 !important; 2065} 2066.subscribe-btn { 2067 color: #b73d09 !important; 2068 border: 1px solid #b73d09 !important; 2069} 2070.cart-link__bubble-num , #mbl-subscribe-overrides{ 2071color: #FFFFFF; 2072} 2073.cart__price:not(.cart__price--strikethrough){ 2074 color: #b73d09; 2075} 2076 2077 2078/* header dropdown styles */ 2079
2080/* a11y: nav button triggers â reset browser button defaults to match <a> styling */ 2081button.site-nav__link { 2082 -webkit-appearance: none; 2083 appearance: none; 2084 background: none; 2085 border: none; 2086 margin: 0; 2087 padding: 16px 20px; 2088 cursor: pointer; 2089 color: inherit; 2090 font-family: 'Montserrat', sans-serif !important; 2091 font-size: 12px !important; 2092 font-weight: 500 !important; 2093 letter-spacing: 2px !important; 2094 line-height: 18px; 2095 text-transform: uppercase; 2096 text-decoration: none; 2097 text-align: left; 2098 white-space: nowrap; 2099 display: inline-block; 2100 vertical-align: middle; 2101 } 2102 button.site-nav__link:focus-visible { 2103 outline: 2px solid currentColor; 2104 outline-offset: 2px; 2105 border-radius: 2px; 2106 } 2107 button.site-nav__link[aria-expanded="true"] .un-fl-submenu-icon-arrow-dj, 2108 button.site-nav__link[aria-expanded="true"] .dropdown-arrow { 2109 transform: rotate(225deg); 2110 } 2111.header-version-2 .site-nav__dropdown , .header-version-2 .site-nav--has-dropdown.is-focused > a, .header-version-2 .site-nav--has-dropdown:hover > a, .header-version-2 .site-nav--has-dropdown.is-focused > a svg path, .header-version-2 .site-nav--has-dropdown:hover > a svg path 2112{ 2113 background-color:#F6F4F1; 2114 } 2115 .header-version-2 .site-nav__dropdown *{ 2116 color:#000000; 2117 } 2118 .header-version-2 .site-nav__dropdown .menu-shop-now{ 2119 color:#b73d09 !important ; 2120 } 2121 /* Subscribe button: desktop only (above 961px). Beats jQuery .show() inline style. */ 2122 @media (max-width: 961px) { 2123 #btn-subscribe-overrides { 2124 display: none !important; 2125 } 2126 } 2127 2128 2129</style> 2130 2131 2132 <style> 2133 .optimize-hidden{ 2134 display: none !important; 2135 } 2136 .site-nav__link { 2137 font-size: 13px; 2138 } 2139 2140 .site-nav__link { 2141 text-transform: uppercase; 2142 letter-spacing: 0.2em; 2143 } 2144 2145 2146 2147@media only screen and (max-width: 1100px) { 2148 .mob-cart-align { 2149 height: inherit !important; 2150 overflow: auto !important; 2151 background: #ffffff !important; 2152 } 2153 .empty-cart-main { 2154 padding-bottom: 0 !important; 2155 } 2156 } 2157 </style> 2158 2159 <div data-section-id="sections--17749310636118__header" data-section-type="header"> 2160 <div 2161 id="HeaderWrapper" 2162 class=" header-version-2 header-wrapper header-wrapper--overlay is-light " 2163 > 2164 <header 2165 id="SiteHeader" 2166 class="site-header" 2167 data-sticky="true" 2168 data-overlay=" true " 2169 > 2170 <div class="site-header__element site-header__element--top"> 2171 <div class="page-width custom-page-width"> 2172 <div 2173 class="header-layout" 2174 data-layout="below" 2175 data-nav="beside" 2176 data-logo-align="left" 2177 > 2178 <button 2179 type="button" 2180 aria-controls="MobileNav" 2181 aria-expanded="false" 2182 aria-label="Site navigation" 2183 class="site-nav__link site-nav__link--icon mobile-nav-trigger optimize-hidden" 2184 > 2185 <svg 2186 aria-hidden="true" 2187 focusable="false" 2188 role="presentation" 2189 class="icon icon-hamburger"
2190 viewBox="0 0 64 64" 2191 > 2192 <path class="cls-1" d="M7 15h51"/><path class="cls-1" d="M7 32h43"/><path class="cls-1" d="M7 49h51"/> 2193 </svg> 2194 <span class="icon__fallback-text">Site navigation</span> 2195 </button><button 2196 type="button" 2197 aria-controls="MobileNav" 2198 aria-expanded="false" 2199 aria-label="Site navigation" 2200 class="site-nav__link site-nav__link--icon medium-up--hide mobile-nav-trigger" 2201 > 2202 <svg 2203 aria-hidden="true" 2204 focusable="false" 2205 role="presentation" 2206 class="icon icon-hamburger" 2207 viewBox="0 0 64 64" 2208 > 2209 <path class="cls-1" d="M7 15h51"/><path class="cls-1" d="M7 32h43"/><path class="cls-1" d="M7 49h51"/> 2210 </svg> 2211 <span class="icon__fallback-text">Site navigation</span> 2212 </button><div class="header-item header-item--logo"><style data-shopify>.header-item--logo, 2213 [data-layout="left-center"] .header-item--logo, 2214 [data-layout="left-center"] .header-item--icons { 2215 flex: 0 1 120px; 2216 } 2217 2218 @media only screen and (min-width: 769px) { 2219 .header-item--logo, 2220 [data-layout="left-center"] .header-item--logo, 2221 [data-layout="left-center"] .header-item--icons { 2222 flex: 0 0 140px; 2223 } 2224 } 2225 2226 .site-header__logo a { 2227 width: 120px; 2228 } 2229 .is-light .site-header__logo .logo--inverted { 2230 width: 120px; 2231 } 2232 @media only screen and (min-width: 769px) { 2233 .site-header__logo a { 2234 width: 140px; 2235 } 2236 2237 .is-light .site-header__logo .logo--inverted { 2238 width: 140px; 2239 } 2240 }</style><div class="h1 site-header__logo" > 2241 <a 2242 href="/" 2243 aria-label="Bokksu â home" 2244 class="site-header__logo-link logo--has-inverted"> 2245 2246 2247 2248 2249 2250 2251 2252<image-element data-aos="image-fade-in"> 2253 2254 2255 2256 2257 <img src="//bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Horizontal_Filled_Orange.png?v=1750968753&width=280" alt="" srcset="//bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Horizontal_Filled_Orange.png?v=1750968753&width=140 140w, //bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Horizontal_Filled_Orange.png?v=1750968753&width=280 280w" width="140" height="49.46666666666667" loading="eager" class="small--hide image-element" fetchpriority="high" sizes="100vw" style="max-height: 49.46666666666667px;max-width: 140px;object-fit:contain"> 2258 2259 2260 2261</image-element> 2262 2263 2264 2265 2266 2267<image-element data-aos="image-fade-in"> 2268 2269 2270 2271 2272 <img src="//bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Horizontal_Filled_Orange.png?v=1750968753&width=240" alt="" srcset="//bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Horizontal_Filled_Orange.png?v=1750968753&width=120 120w, //bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Horizontal_Filled_Orange.png?v=1750968753&width=240 240w" width="120" height="42.4" loading="eager" class="medium-up--hide image-element" fetchpriority="high" sizes="120px" style="max-height: 42.4px;max-width: 120px;object-fit:contain"> 2273 2274 2275 2276</image-element> 2277 2278</a><a 2279 href="/" 2280 aria-label="Bokksu â home" 2281 class="site-header__logo-link logo--inverted"> 2282 2283 2284 2285 2286 2287 2288<image-element data-aos="image-fade-in"> 2289 2290 2291 2292 2293 <img src="//bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Horizontal_Filled_White.png?v=1750968756&width=280" alt="" srcset="//bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Horizontal_Filled_White.png?v=1750968756&width=140 140w, //bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Horizontal_Filled_White.png?v=1750968756&width=280 280w" width="140" height="49.46666666666667" loading="eager" class="small--hide image-element" fetchpriority="high" sizes="140px" style="max-height: 49.46666666666667px;max-width: 140px;"> 2294 2295 2296 2297</image-element> 2298 2299 2300 2301 2302 2303<image-element data-aos="image-fade-in"> 2304 2305 2306 2307 2308 <img src="//bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Horizontal_Filled_White.png?v=1750968756&width=240" alt="" srcset="//bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Horizontal_Filled_White.png?v=1750968756&width=120 120w, //bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Horizontal_Filled_White.png?v=1750968756&width=240 240w" width="120" height="42.4" loading="eager" class="medium-up--hide image-element" fetchpriority="high" sizes="120px" style="max-height: 42.4px;max-width: 120px;"> 2309 2310 2311 2312</image-element> 2313 2314</a></div></div><div 2315 class="header-item header-item--navigation original-element" 2316 ><nav aria-label="Main navigation"> 2317<ul role="list" class="site-nav original-nav site-navigation site-navigation--beside small--hide"><li 2318 class="site-nav__item site-nav__expanded-item site-nav--has-dropdown site-nav--is-megamenu " 2319 ><button 2320 type="button" 2321 style="margin-bottom:-1px" 2322 class="hero__top-subtitle site-nav__link site-nav__link--underline site-nav__link--has-dropdown site-nav__dropdown-toggle" 2323 aria-haspopup="true" 2324 aria-expanded="false" 2325 > 2326 Shop 2327 2328 <i aria-hidden="true" class="un-fl-submenu-icon-arrow-dj"></i> 2329 2330 </button><div class="site-nav__dropdown megamenu text-left"> 2331 <div class="page-width"> 2332 <div class="site-nav__dropdown-animate megamenu__wrapper"><a href="#" class="site-nav__dropdown-link site-nav__dropdown-link--view-all visually-hidden">View all Shop</a><div class= "megamenu__cols" > 2333 <div class="megamenu__col" ><div class="megamenu__col-title" > 2334 2335 2336 2337 2338 2339 2340 2341 <div style="text-decoration:none" class="hero__top-subtitle site-nav__dropdown-link site-nav__dropdown-link--top-level" > 2342 Bokksu Snack Box 2343</div> 2344 2345 2346 </div> 2347 2348 <a href="/products/classic-bokksu" class="site-nav__dropdown-link"> 2349 Subscribe 2350 </a> 2351 2352 <a href="/products/gift-classic-bokksu" class="site-nav__dropdown-link"> 2353 Gift 2354 </a> 2355 2356 <a href="/pages/past-themes" class="site-nav__dropdown-link"> 2357 Past Themes 2358 </a></div><div class="megamenu__col"><div class="megamenu__col-title" > 2359 2360 2361 2362 2363 2364 2365 2366 <div style="text-decoration:none" class="hero__top-subtitle site-nav__dropdown-link site-nav__dropdown-link--top-level" > 2367 Bokksu Boutique 2368</div> 2369 2370 2371 </div> 2372 2373 <a href="https://bokksuboutique.com" class="site-nav__dropdown-link"> 2374 Shop Boutique 2375 </a></div><div class="megamenu__col"><div class="megamenu__col-title" > 2376 2377 2378 2379 2380 2381 2382 2383 <div style="text-decoration:none" class="hero__top-subtitle site-nav__dropdown-link site-nav__dropdown-link--top-level" > 2384 Gifts 2385</div> 2386 2387 2388 </div> 2389 2390 <a href="/products/gift-card" class="site-nav__dropdown-link"> 2391 Gift Cards 2392 </a> 2393 2394 <a href="https://www.bokksuboutique.com/pages/corporate-gifts" class="site-nav__dropdown-link"> 2395 Corporate Gifts 2396 </a></div> 2397</div></div> 2398 </div> 2399 </div></li><li 2400 class="site-nav__item About site-nav__expanded-item site-nav--has-dropdown site-nav--is-megamenu " 2401 ><button 2402 type="button" 2403 style="margin-bottom:-1px" 2404 class="hero__top-subtitle site-nav__link site-nav__link--underline site-nav__link--has-dropdown site-nav__dropdown-toggle" 2405 aria-haspopup="true" 2406 aria-expanded="false" 2407 > 2408 About 2409 2410 <i aria-hidden="true" class="un-fl-submenu-icon-arrow-dj"></i> 2411 2412 </button><div class="site-nav__dropdown megamenu text-left"> 2413 <div class="page-width"> 2414 <div class="site-nav__dropdown-animate megamenu__wrapper"><a href="#" class="site-nav__dropdown-link site-nav__dropdown-link--view-all visually-hidden">View all About</a><div class= "megamenu__cols" > 2415 <div class="megamenu__col" ><div class="megamenu__col-title" > 2416 2417 2418 2419 2420 2421 2422 2423 <div style="text-decoration:none" class="hero__top-subtitle site-nav__dropdown-link site-nav__dropdown-link--top-level" > 2424 About 2425</div> 2426 2427 2428 </div> 2429 2430 <a href="/pages/about" class="site-nav__dropdown-link"> 2431 Our Story 2432 </a> 2433 2434 <a href="/pages/our-makers" class="site-nav__dropdown-link"> 2435 Our Makers 2436 </a> 2437 2438 <a href="/pages/snack-bites-documentary" class="site-nav__dropdown-link"> 2439 Maker's Documentary 2440 </a></div><div class="megamenu__col"><div class="megamenu__col-title" > 2441 2442 2443 2444 2445 2446 2447 2448 <div style="text-decoration:none" class="hero__top-subtitle site-nav__dropdown-link site-nav__dropdown-link--top-level" > 2449 Support 2450</div> 2451 2452 2453 </div> 2454 2455 <a href="/pages/faq" class="site-nav__dropdown-link"> 2456 FAQ 2457 </a> 2458 2459 <a href="/pages/contact-us" class="site-nav__dropdown-link"> 2460 Contact Us 2461 </a></div><div class="megamenu__col"><div class="megamenu__col-title" > 2462 2463 2464 2465 2466 2467 2468 2469 <div style="text-decoration:none" class="hero__top-subtitle site-nav__dropdown-link site-nav__dropdown-link--top-level" > 2470 Information 2471</div> 2472 2473 2474 </div> 2475 2476 <a href="/blogs/news" class="site-nav__dropdown-link"> 2477 Our Blog 2478 </a> 2479 2480 <a href="/pages/bokksu-offers-discounts-coupons" class="site-nav__dropdown-link"> 2481 Today's Offers 2482 </a> 2483 2484 <a href="/pages/community" class="site-nav__dropdown-link"> 2485 Community 2486 </a> 2487 2488 <a href="/pages/careers" class="site-nav__dropdown-link"> 2489 Careers 2490 </a> 2491 2492 <a href="/pages/rewards" class="site-nav__dropdown-link"> 2493 Rewards 2494 </a> 2495 2496 <a href="/pages/rewards" class="site-nav__dropdown-link"> 2497 Refer a Friend 2498 </a></div> 2499</div></div> 2500 </div> 2501 </div></li><li 2502 class="site-nav__item site-nav__expanded-item site-nav--has-dropdown site-nav--is-megamenu " 2503 ><button 2504 type="button" 2505 style="margin-bottom:-1px" 2506 class="hero__top-subtitle site-nav__link site-nav__link--underline site-nav__link--has-dropdown site-nav__dropdown-toggle" 2507 aria-haspopup="true" 2508 aria-expanded="false" 2509 > 2510 Brands 2511 2512 <i aria-hidden="true" class="un-fl-submenu-icon-arrow-dj"></i> 2513 2514 </button><div class="site-nav__dropdown megamenu text-left"> 2515 <div class="page-width"> 2516 <div class="site-nav__dropdown-animate "><div > 2517 <div class="megamenu__col" style="display:flex;justify-content:space-around" ><div class="megamenu__col-title" style="text-align:center"> 2518 2519 <a style="pointer-events: none;" href="/" target="_blank" class="site-nav__dropdown-link site-nav__dropdown-link--top-level"> 2520 2521 <img 2522 class="small--hide" 2523 style="height:90px; width:100px" 2524 src="//bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Stacked_Filled_Orange_200x.png?v=1750968760" 2525 srcset="//bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Stacked_Filled_Orange_200x.png?v=1750968760 2x" alt="Bokksu Premium Snack Box"> 2526 <p class="max-column-width" style="color:grey"> Premium subscription box sourcing Japanese snacks from centuries-old family makers.</p> 2527 <a target="_blank" class="menu-shop-now" href="https://bokksu.com/products/classic-bokksu"> <div style=""></div>SHOP NOW</a> 2528 </a> 2529 2530 2531 2532 2533 2534 2535 2536 2537 </div><div class="megamenu__col-title" style="text-align:center"> 2538 2539 2540 2541 <a target="_blank" href="https://bokksuboutique.com" class="site-nav__dropdown-link site-nav__dropdown-link--top-level"> 2542 2543 <img 2544 class="small--hide" 2545 style="height:90px; width:100px" 2546 src="//bokksu.com/cdn/shop/files/BokksuBoutique_Logo_Stacked_Filled_Blue_200x.png?v=1750968708" 2547 srcset="//bokksu.com/cdn/shop/files/BokksuBoutique_Logo_Stacked_Filled_Blue_200x.png?v=1750968708 2x" alt="Bokksu Snack Boutique"> 2548 <p class="max-column-width"> Specialty and gourmet gifts for every occasion, all made and shipped from Japan. </p> 2549 <a target="_blank" class="menu-shop-now" href="https://bokksuboutique.com/"><div style=""></div> SHOP NOW</a> 2550 </a> 2551 2552 2553 2554 2555 2556 2557 </div><div class="megamenu__col-title" style="text-align:center"> 2558 2559 2560 2561 2562 <a href="https://bokksumarket.com" target="_blank" class="site-nav__dropdown-link site-nav__dropdown-link--top-level"> 2563 <img 2564 class="small--hide" 2565 style="height:90px; width:100px;" 2566 src="//bokksu.com/cdn/shop/files/BokksuMarket_Logo_Stacked_Filled_Green_200x.png?v=1750968741" 2567 srcset="//bokksu.com/cdn/shop/files/BokksuMarket_Logo_Stacked_Filled_Green_200x.png?v=1750968741 2x" alt="Bokksu Asian grocery market"> 2568 <p class="max-column-width"> Online Asian grocery store delivering pantry items, frozen foods, beverages, and more. </p> 2569 <a target="_blank" class="menu-shop-now" href="https://bokksumarket.com"> <div style=""></div> SHOP NOW</a> 2570 </a> 2571 2572 2573 2574 2575 2576 2577 </div></div> 2578</div></div> 2579 </div> 2580 </div></li></ul> 2581</nav> 2582 2583 2584</div><div class="header-item header-item--icons"> 2585 <div class="subscribe-button-wrapper optimize-hidden"> 2586 <a 2587 href="/products/classic-bokksu" 2588 id="subscribe-button" 2589 class="btn-custom subscribe-btn custom-subscribe-button optim
2589ize-hidden cart-empty" 2590 aria-labelledby="subscribe-button-label" 2591 >SUBSCRIBE <span class="small--hide">NOW</span> 2592 <span class="visually-hidden" id="subscribe-button-label">Subscribe now â Classic Bokksu Snack Box</span> 2593 </a> 2594 </div><div class="site-nav"> 2595 <div class="site-nav__icons"> 2596 <a href="/search?q=&type=product" id="search-icon-id" class="site-nav__link site-nav__link--icon js-search-header js-no-transition"> 2597 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-search" viewBox="0 0 64 64"><defs><style>.cls-1{fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:2px}</style></defs><path class="cls-1" d="M47.16 28.58A18.58 18.58 0 1 1 28.58 10a18.58 18.58 0 0 1 18.58 18.58zM54 54L41.94 42"/></svg> 2598 <span class="icon__fallback-text">Search</span> 2599 </a> 2600 2601 <a href="/products/classic-bokksu" id="btn-subscribe-overrides" class="btn-custom subscribe-btn original-element" aria-label="Subscribe now â Bokksu Snack Box">Subscribe Now</a> 2602 2603<a class="site-nav__link site-nav__link--icon small--hide site-nav__link-v2" href="/account" aria-label="My account"> 2604 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-user" viewBox="0 0 64 64"><defs><style>.cls-1{fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:2px}</style></defs><path class="cls-1" d="M35 39.84v-2.53c3.3-1.91 6-6.66 6-11.42 0-7.63 0-13.82-9-13.82s-9 6.19-9 13.82c0 4.76 2.7 9.51 6 11.42v2.53c-10.18.85-18 6-18 12.16h42c0-6.19-7.82-11.31-18-12.16z"/></svg> 2605 <span class="site-nav__icon-label small--hide icon__fallback-text" aria-hidden="true"> 2606 Account 2607 </span> 2608 </a><button 2609 id="HeaderCartTrigger" 2610 aria-controls="HeaderCart" 2611 class="cart-items-new mini-cart site-nav__link site-nav__link-v2 site-nav__link--icon js-no-transition cart-empty" 2612 data-icon="cart" 2613 aria-label="Cart, 0 items" 2614 > 2615 <span class="cart-link"> 2616 <svg class="icon jpc-cart-icon" xmlns="http://www.w3.org/2000/svg" width="27" height="26" viewBox="0 0 27 26" fill="none"> 2617 <path d="M10.1429 25.0005C10.774 25.0005 11.2857 24.4889 11.2857 23.8577C11.2857 23.2265 10.774 22.7148 10.1429 22.7148C9.51167 22.7148 9 23.2265 9 23.8577C9 24.4889 9.51167 25.0005 10.1429 25.0005Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2618 <path d="M22.7132 25.0005C23.3443 25.0005 23.856 24.4889 23.856 23.8577C23.856 23.2265 23.3443 22.7148 22.7132 22.7148C22.082 22.7148 21.5703 23.2265 21.5703 23.8577C21.5703 24.4889 22.082 25.0005 22.7132 25.0005Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2619 <path d="M1 1H5.57141L8.63425 16.3028C8.73876 16.829 9.025 17.3016 9.44287 17.638C9.86074 17.9744 10.3836 18.1531 10.92 18.1428H22.0285C22.5648 18.1531 23.0877 17.9744 23.5056 17.638C23.9234 17.3016 24.2097 16.829 24.3142 16.3028L26.1427 6.71426H6.71426" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2620 </svg> 2621 2622<span class="cart-link__bubble" aria-hidden="true"> 2623 <span class="cart-link__bubble-num">0</span> 2624 </span> 2625 </span> 2626 <span class="site-nav__icon-label small--hide icon__fallback-text" aria-hidden="true"> 2627 Cart 2628 </span> 2629 </button> 2630 2631 2632 2633 </div> 2634 2635 <div class="site-nav__close-cart"> 2636 <button type="button" class="site-nav__link site-nav__link--icon js-close-header-cart" aria-label="Close shopping cart"> 2637 <span>Close</span> 2638 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><path d="m19 17.61 27.12 27.13m0-27.13L19 44.74" style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:2px"/></svg> 2639 </button> 2640 </div> 2641 2642</div> 2643</div> 2644 </div> 2645 </div> 2646 2647 <div class="site-header__search-container"> 2648 <div class="page-width"> 2649 <div class="site-header__search"><style> 2650 .predictive-overflow-hidden { 2651 /*overflow: hidden;*/ 2652 2653 @media (--small) { 2654 overflow: auto; 2655 } 2656 } 2657 2658 predictive-search { 2659 display: flex; 2660 align-items: center; 2661 position: relative; 2662 width: 100%; 2663 max-width: 960px; 2664 margin: 0 auto; 2665 2666 &.is-active { 2667 flex: 99; 2668 } 2669 2670 &.is-active .predictive__screen { 2671 display: block; 2672 z-index: 3; 2673 } 2674 2675 &.is-active .btn--close-search { 2676 display: flex; 2677 align-items: center; 2678 justify-content: center; 2679 } 2680 &.is-active .btn--close-search1 { 2681 display: flex; 2682 align-items: center; 2683 justify-content: center; 2684 } 2685 } 2686 2687 [data-dark='true'] { 2688 & input { 2689 color: #fff !important; 2690 } 2691 2692 & .btn--search path { 2693 stroke: #fff !important; 2694 } 2695 } 2696 2697 [data-dark='false'] { 2698 & input { 2699 color: #000 !important; 2700 } 2701 2702 & .btn--search path { 2703 stroke: #000 !important; 2704 } 2705 } 2706 2707 .predictive__screen { 2708 position: fixed; 2709 width: 100vw; 2710 height: 100vh; 2711 top: 0; 2712 left: 0; 2713 background: rgba(0, 0, 0, 0.5); 2714 display: none; 2715 } 2716 2717 predictive-search form { 2718 display: flex; 2719 flex-wrap: wrap; 2720 z-index: 4; 2721 position: relative; 2722 width: 100%; 2723 } 2724 2725 .search__input-wrap { 2726 position: relative; 2727 flex: 5; 2728 transition: flex 0.3s ease-in-out; 2729 } 2730 2731 .search__input { 2732 background: var(--colorNavSearch, #fff); 2733 color: var(--color-body-text); 2734 flex: 1; 2735 width: 100%; 2736 border-radius: calc(var(--roundness, 0) * 2); 2737 } 2738 2739 .btn--search { 2740 position: absolute; 2741 top: 50%; 2742 transform: translateY(-50%); 2743 right: 15px; 2744 2745 & .icon { 2746 height: 25px; 2747 width: 25px; 2748 } 2749 2750 @media (--medium-up) { 2751 right: 10px; 2752 } 2753 } 2754 2755 .btn--close-search { 2756 display: none; 2757 flex: 30px 0 0; 2758 margin-left: 10px; 2759 2760 & .icon { 2761 height: 25px; 2762 width: 25px; 2763 } 2764 2765 & .icon path { 2766 stroke: var(--colorNavText) !important; 2767 } 2768 } 2769 2770 .btn--close-search1 { 2771 display: none; 2772 flex: 30px 0 0; 2773 margin-left: 10px; 2774 2775 & .icon { 2776 height: 25px; 2777 width: 25px; 2778 } 2779 2780 & .icon path { 2781 stroke: var(--colorNavText) !important; 2782 } 2783 } 2784 2785 .search__results { 2786 background: var(--color-body); 2787 color: var(--color-body-text); 2788 position: absolute; 2789 width: 100%; 2790 top: 100%; 2791 padding: 0; 2792 display: none; 2793 margin-top: 10px; 2794 container-type: inline-size; 2795 max-height: 80vh; 2796 overflow-y: auto; 2797 2798 @media (--small) { 2799 width: calc(100% + var(--pageWidthPadding, 17px) * 2); 2800 margin-left: calc(var(--pageWidthPadding, 17px) * -1); 2801 margin-right: calc(var(--pageWidthPadding, 17px) * -1); 2802 max-height: 75vh; 2803 2804 @nest .template-search .page-content & { 2805 max-height: 50vh; 2806 } 2807 } 2808 } 2809 2810 .results { 2811 padding: 0 20px 20px; 2812 display: block; 2813 width: 100%; 2814 2815 & ul { 2816 list-style: none; 2817 padding: 0; 2818 margin: 0; 2819 } 2820 2821 & li { 2822 transition: background 0.2s ease; 2823 margin-bottom: 0; 2824 2825 &:hover { 2826 background: rgba(0, 0, 0, 0.05); 2827 } 2828 2829 & a { 2830 display: flex; 2831 align-items: center; 2832 } 2833 } 2834 } 2835 2836 .results--queries { 2837 & span { 2838 font-weight: bolder; 2839 } 2840 2841 & mark { 2842 background-color: transparent; 2843 font-weight: normal; 2844 } 2845 } 2846 2847 .results--products span { 2848 margin-left: 10px; 2849 } 2850 2851 .results-products__image { 2852 width: 100%; 2853 min-width: 80px; 2854 max-width: 80px; 2855 height: 80px; 2856 } 2857 2858 .results-products__info { 2859 display: flex; 2860 flex-direction: column; 2861 font-size: 13px !important; 2862 } 2863 2864 .predictive-search-results { 2865 display: flex; 2866 flex-wrap: wrap; 2867 flex-direction: column; 2868 overflow-y: auto; 2869 padding: 40px 0 0; 2870 2871 & h3 { 2872 padding-bottom: 10px; 2873 border-bottom: 1px solid; 2874 border-color: var(--colorBorder); 2875 margin-bottom: 10px; 2876 font-family: 'Montserrat', sans-serif !important; 2877 font-size: 14px !important; 2878 font-weight: 600 !important; 2879 letter-spacing: 1px !important; 2880 } 2881 } 2882 2883 .predictive-search-results--none { 2884 padding-top: 20px; 2885 } 2886 2887 .predictive-search__no-results { 2888 display: block; 2889 width: 100%; 2890 2891 &:hover { 2892 opacity: 0.5; 2893 } 2894 } 2895 2896 .results__group-1 { 2897 flex: 100% 0 0; 2898 2899 & >
2899 div:not(.results--queries) { 2900 display: none; 2901 } 2902 } 2903 2904 .results__group-2 { 2905 flex: 100% 0 0; 2906 } 2907 2908 .results__search-btn { 2909 width: 100%; 2910 padding: 10px; 2911 transition: background-color 0.2s ease; 2912 border: 1px solid; 2913 border-color: var(--colorBorder); 2914 2915 &:hover { 2916 background-color: rgba(0, 0, 0, 0.05); 2917 } 2918 } 2919 2920 /* Containers 2921 ============================== */ 2922 2923 @container (min-width: 800px) { 2924 .predictive-search-results { 2925 flex-direction: row; 2926 flex-wrap: nowrap; 2927 } 2928 2929 .results { 2930 padding: 0 40px 20px; 2931 } 2932 2933 .results__group-1 { 2934 flex: 1 0 0; 2935 2936 & div:not(.results--queries) { 2937 display: block; 2938 } 2939 } 2940 2941 .results__group-2 { 2942 flex: 2 0 0; 2943 2944 & > div:not(.results--products) { 2945 display: none; 2946 } 2947 } 2948 2949 .results__search-btn { 2950 text-align: left; 2951 padding: 10px 0 10px 40px; 2952 } 2953 } 2954 2955 /* 2956 .workaround { 2957 border-bottom: 1px solid var(--colorBorder); 2958 } 2959 */ 2960</style><predictive-search 2961 data-context="header" 2962 data-enabled="false" 2963 data-dark="false" 2964><div class="predictive__screen" data-screen aria-hidden="true"></div> 2965 <form 2966 action="/search" 2967 method="get" 2968 role="search" 2969 id="search-form" 2970 > 2971 <label for="Search" class="hidden-label">Search</label> 2972 <div class="search__input-wrap align-new-search"> 2973 <input 2974 class="search__input" 2975 id="Search" 2976 type="search" 2977 name="q" 2978 value="" 2979 role="combobox" 2980 aria-expanded="false" 2981 aria-owns="predictive-search-results" 2982 aria-controls="predictive-search-results" 2983 aria-haspopup="listbox" 2984 aria-autocomplete="list" 2985 autocorrect="off" 2986 autocomplete="off" 2987 autocapitalize="off" 2988 spellcheck="false" 2989 placeholder="Search premium Japanese products" 2990 tabindex="0" 2991 > 2992 <input 2993 name="options[prefix]" 2994 type="hidden" 2995 value="last" 2996 > 2997 <button class="search-icon-new 22" type="submit"> 2998 <div class="main-search-main" aria-hidden="true"> 2999 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" aria-hidden="true" focusable="false"> 3000 <path d="M17.8139 17.3055L13.7149 13.2084C15.0687 11.88 15.861 10.0826 15.9283 8.18709C15.9957 6.29158 15.333 4.44251 14.0769 3.02131C12.8209 1.60011 11.0673 0.715191 9.17785 0.54909C7.28843 0.38299 5.40733 0.94838 3.92257 2.12863C2.43782 3.30888 1.46267 5.01396 1.19828 6.89215C0.933893 8.77034 1.40043 10.6784 2.50167 12.2226C3.6029 13.7669 5.25482 14.8296 7.11667 15.1916C8.97851 15.5535 10.9083 15.1871 12.5079 14.1679L16.7297 18.3897L17.8139 17.3055ZM2.68642 7.9561C2.68642 6.79964 3.02935 5.66914 3.67185 4.70758C4.31435 3.74601 5.22755 2.99656 6.29599 2.554C7.36442 2.11144 8.5401 1.99565 9.67434 2.22126C10.8086 2.44688 11.8505 3.00377 12.6682 3.82151C13.4859 4.63926 14.0428 5.68113 14.2685 6.81537C14.4941 7.94962 14.3783 9.12529 13.9357 10.1937C13.4932 11.2622 12.7437 12.1754 11.7821 12.8179C10.8206 13.4604 9.69008 13.8033 8.53361 13.8033C6.98346 13.8013 5.49739 13.1846 4.40126 12.0885C3.30514 10.9923 2.68845 9.50625 2.68642 7.9561Z" fill="white"></path> 3001 </svg> 3002 </div> 3003 <span class="icon__fallback-text">Search</span> 3004 </button> 3005 </div><button type="button" class="btn--close-search btn--close-search1" aria-label="Close"> 3006 <svg 3007 aria-hidden="true" 3008 focusable="false" 3009 role="presentation" 3010 class="icon icon-close"
3011 viewBox="0 0 64 64" 3012 > 3013 <defs> 3014 <style> 3015 .cls-1 { 3016 fill: none; 3017 stroke: #fff !important; 3018 stroke-miterlimit: 10; 3019 stroke-width: 2px 3020 } 3021 </style> 3022 </defs><path class="cls-1" d="M19 17.61l27.12 27.13m0-27.13L19 44.74" /> 3023 </svg> 3024 </button> 3025 <div 3026 id="predictive-search" 3027 class="search__results" 3028 tabindex="-1" 3029 ></div> 3030 </form> 3031</predictive-search>
3032<script> 3033 $(document).ready(function () { 3034 if ('https://bokksu.com'.includes('bokksu.com') || 'https://bokksu.com'.includes('snb-hashii') ) { 3035 if ('index'.includes('product') && ''.includes('Box')) { 3036 $('#search-icon-id').css('display', 'none'); 3037 $('#btn-subscribe-overrides').hide(); 3038 $('#subscribe_btn_mob').css('display', 'none'); 3039 } else if ( 3040 'index'.includes('blog') || 3041 'index'.includes('article') || 3042 location.href.includes('type=article') 3043 ) { 3044 $('#search-type').attr('value', 'article'); 3045 $('.search-type').attr('value', 'article'); 3046 $('#search-icon-id').css('display', 'block'); 3047 $('#search-icon-id').css('cursor', 'pointer'); 3048 $('#TopSearched').hide(); 3049 } else if ( 3050 location.toString().includes('subscription') || 3051 location.toString().endsWith('/products/classic-bokksu') || 3052 location.toString().includes('/collections') || 3053 location.toString().includes('/products') 3054 ) { 3055 $('#search-icon-id').css('display', 'block'); 3056 $('#search-icon-id').css('cursor', 'pointer'); 3057 $('#btn-subscribe-overrides').hide(); 3058 $('.site-header__search-form').css('display', 'block'); 3059 $('#subscribe_btn_mob').css('display', 'none'); 3060 } else { 3061 window.innerWidth > 961 && $('#btn-subscribe-overrides').show(); 3062 $('#search-icon-id').css('display', 'none'); 3063 $('#search-icon-id').css('cursor', 'unset'); 3064 $('.site-header__search-form').css('display', 'none'); 3065 $('#subscribe_btn_mob').css('display', 'flex'); 3066 } 3067 } else { 3068 if ('index'.includes('blog') || 'index'.includes('article')) { 3069 $('#search-type').attr('value', 'article'); 3070 $('#TopSearched').hide(); 3071 } 3072 } 3073 }); 3074</script>
3074 3075<button type="button" class="text-link site-header__search-btn site-header__search-btn--cancel"> 3076 <span class="medium-up--hide"> 3077 <svg 3078 aria-hidden="true" 3079 focusable="false" 3080 role="presentation" 3081 class="icon icon-close" 3082 viewBox="0 0 64 64" 3083 > 3084 <path d="m19 17.61 27.12 27.13m0-27.13L19 44.74" style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:2px"/> 3085 </svg> 3086 </span> 3087 <span class="small--hide">Cancel</span> 3088 </button> 3089 </div> 3090 </div> 3091 </div> 3092 </div><div class="page-width site-header__drawers"> 3093 <div class="site-header__drawers-container"> 3094 <div class="site-header__drawer site-header__cart snb-header-cart " id="HeaderCart" role="dialog" aria-modal="true" aria-label="Shopping cart" inert aria-hidden="true"> 3095 <div class="mob-cart-align"> 3096 <div class="align-main-cart-customer"> 3097 <div class="site-header__drawer-animate"><button 3098 type="button" 3099 class="cart-drawer__close js-close-header-cart visually-hidden" 3100 aria-label="Close shopping cart" 3101> 3102 Close shopping cart 3103</button> 3104<form 3105 action="/cart" 3106 method="post" 3107 novalidate 3108 data-location="header" 3109 class="cart__drawer-form customer-cart"> 3110 <div class="cart__scrollable"> 3111 <div data-products> 3112 3113 <div></div> 3114 </div> 3115 3116 3117 <!---cart notes here --> 3118 3119 3120 <div class="cart-upsell" data-cart-upsell><div class="cart-upsell__container" role="group" aria-label="Premium packaging options"> 3121 <h3 class="cart-upsell__heading">MAKE IT SPECIAL</h3> 3122 <p class="cart-upsell__subheading">Enhance your gift with premium packaging options</p> 3123 3124 <div class="cart-upsell__cards-wrapper"> 3125 <button type="button" class="cart-upsell__nav-button cart-upsell__nav-button--prev" aria-label="Previous product" style="display: none;"> 3126 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 3127 <path d="M15 18l-6-6 6-6"/> 3128 </svg> 3129 </button><!-- Grid wrapper for all products --> 3130 <div class="cart-upsell__cards has-two-products" data-carousel><div class="cart-upsell__card-wrapper" data-product-id="7675567538262" data-variant-id="43471000862806"> 3131 <div class="cart-upsell__card" aria-hidden="true"> 3132 <div class="cart-upsell__card-header"> 3133 <div class="cart-upsell__card-image-wrapper"><img src="//bokksu.com/cdn/shop/files/ChatGPT-2511_Xmas_Wrapping_3.png?v=1778486027&width=200" alt="Gift Wrap with Personalized Card" srcset="//bokksu.com/cdn/shop/files/ChatGPT-2511_Xmas_Wrapping_3.png?v=1778486027&width=200 200w" width="200" height="133" loading="lazy" class="cart-upsell__card-image"> 3134</div> 3135 <div class="cart-upsell__card-text-wrapper"> 3136 <h4 class="cart-upsell__card-title">Gift Wrapping + Card</h4> 3137 <p class="cart-upsell__card-description">Expert Japanese-style wrapping with personalized card.</p> 3138 </div> 3139 </div> 3140 <ul class="cart-upsell__card-features"> 3141 <li class="feature-ribbon">Premium ribbon.</li> 3142 <li class="feature-card">Personalized card.</li> 3143 </ul> 3144 </div> 3145 <div class="cart-upsell__form" data-upsell-form data-has-gift-popup="true" 3146 data-variant-id="43471000862806" 3147 data-product-tags="hidden product,NOAPPDISC,personalized-card"> 3148
3148<script type="application/json" data-product-json>{"id":7675567538262,"title":"Gift Wrap with Personalized Card","handle":"gift-wrap","description":"\u003cp\u003e\u003c\/p\u003e","published_at":"2025-12-26T17:31:40-05:00","created_at":"2025-10-15T04:24:09-04:00","vendor":"Bokksu","type":"Packing Material","tags":["hidden product","NOAPPDISC","personalized-card"],"price":1500,"price_min":1500,"price_max":1500,"available":true,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":43471000862806,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"GIFT-WRAP-CARD","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Gift Wrap with Personalized Card","public_title":null,"options":["Default Title"],"price":1500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"725065727","requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}],"images":["\/\/bokksu.com\/cdn\/shop\/files\/ChatGPT-2511_Xmas_Wrapping_3.png?v=1778486027","\/\/bokksu.com\/cdn\/shop\/files\/ChatGPT-2511_Xmas_Wrapping_4.png?v=1778486036","\/\/bokksu.com\/cdn\/shop\/files\/ChatGPT-2511_Xmas_Wrapping_2.png?v=1778486046","\/\/bokksu.com\/cdn\/shop\/files\/ChatGPT-2511_Xmas_Wrapping.png?v=1778486042"],"featured_image":"\/\/bokksu.com\/cdn\/shop\/files\/ChatGPT-2511_Xmas_Wrapping_3.png?v=1778486027","options":["Title"],"media":[{"alt":null,"id":28810454990934,"position":1,"preview_image":{"aspect_ratio":1.508,"height":1021,"width":1540,"src":"\/\/bokksu.com\/cdn\/shop\/files\/ChatGPT-2511_Xmas_Wrapping_3.png?v=1778486027"},"aspect_ratio":1.508,"height":1021,"media_type":"image","src":"\/\/bokksu.com\/cdn\/shop\/files\/ChatGPT-2511_Xmas_Wrapping_3.png?v=1778486027","width":1540},{"alt":null,"id":28810457088086,"position":2,"preview_image":{"aspect_ratio":1.5,"height":1024,"width":1536,"src":"\/\/bokksu.com\/cdn\/shop\/files\/ChatGPT-2511_Xmas_Wrapping_4.png?v=1778486036"},"aspect_ratio":1.5,"height":1024,"media_type":"image","src":"\/\/bokksu.com\/cdn\/shop\/files\/ChatGPT-2511_Xmas_Wrapping_4.png?v=1778486036","width":1536},{"alt":null,"id":28810458464342,"position":3,"preview_image":{"aspect_ratio":1.5,"height":1024,"width":1536,"src":"\/\/bokksu.com\/cdn\/shop\/files\/ChatGPT-2511_Xmas_Wrapping_2.png?v=1778486046"},"aspect_ratio":1.5,"height":1024,"media_type":"image","src":"\/\/bokksu.com\/cdn\/shop\/files\/ChatGPT-2511_Xmas_Wrapping_2.png?v=1778486046","width":1536},{"alt":null,"id":28810457972822,"position":4,"preview_image":{"aspect_ratio":1.333,"height":1086,"width":1448,"src":"\/\/bokksu.com\/cdn\/shop\/files\/ChatGPT-2511_Xmas_Wrapping.png?v=1778486042"},"aspect_ratio":1.333,"height":1086,"media_type":"image","src":"\/\/bokksu.com\/cdn\/shop\/files\/ChatGPT-2511_Xmas_Wrapping.png?v=1778486042","width":1448}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cp\u003e\u003c\/p\u003e"}</script>
3148 3149 <button type="button" class="cart-upsell__card-button" 3150 data-variant-id="43471000862806" 3151 aria-label="Add gift wrapping and personalized card for $15.00"> 3152 <span class="cart-upsell__button-icon" aria-hidden="true">+</span> 3153 <span class="cart-upsell__button-text">Add Gift Wrapping</span> 3154 <span class="cart-upsell__button-price">$15.00</span> 3155 </button> 3156 </div> 3157 </div><div class="cart-upsell__card-wrapper" data-product-id="7676028715094" data-variant-id="43472486301782"> 3158 <div class="cart-upsell__card" aria-hidden="true"> 3159 <div class="cart-upsell__card-header"> 3160 <div class="cart-upsell__card-image-wrapper"><img src="//bokksu.com/cdn/shop/files/SNB_2511_HolidayGWP_HeroBanner_710x730_Overhead_02_d208511e-0860-48e4-9f84-9cc2dc30889f.jpg?v=1770136547&width=200" alt="Japanese Washi Box" srcset="//bokksu.com/cdn/shop/files/SNB_2511_HolidayGWP_HeroBanner_710x730_Overhead_02_d208511e-0860-48e4-9f84-9cc2dc30889f.jpg?v=1770136547&width=200 200w" width="200" height="206" loading="lazy" class="cart-upsell__card-image"> 3161</div> 3162 <div class="cart-upsell__card-text-wrapper"> 3163 <h4 class="cart-upsell__card-title">Washi Box</h4> 3164 <p class="cart-upsell__card-description">Upgrade to elegant Japanese washi box packaging.</p> 3165 </div> 3166 </div> 3167 <ul class="cart-upsell__card-features"> 3168 <li class="feature-premium">Premium presentation.</li> 3169 <li class="feature-special">Special packaging.</li> 3170 </ul> 3171 </div> 3172 <div class="cart-upsell__form" data-upsell-form data-has-gift-popup="false" 3173 data-variant-id="43472486301782" 3174 data-product-tags="hidden product,hide_btq_search,washi-box"> 3175 <button type="button" class="cart-upsell__card-button" 3176 data-variant-id="43472486301782" 3177 aria-label="Upgrade to Washi Box for $20.00"> 3178 <span class="cart-upsell__button-icon" aria-hidden="true">+</span> 3179 <span class="cart-upsell__button-text">Upgrade to Washi Box</span> 3180 <span class="cart-upsell__button-price">$20.00</span> 3181 </button> 3182 </div> 3183 </div></div> 3184 <button type="button" class="cart-upsell__nav-button cart-upsell__nav-button--next" aria-label="Next product" style="display: none;"> 3185 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 3186 <path d="M9 18l6-6-6-6"/> 3187 </svg> 3188 </button> 3189 </div> 3190 3191 <p class="cart-upsell__disclaimer">Gift wrapping paper design may vary.</p> 3192 </div></div> 3193
3194<script> 3195 document.addEventListener('DOMContentLoaded', function() { 3196 const cartItems = []; 3197 3198 let hasUpsellProduct1 = false; 3199 let hasUpsellProduct2 = false; 3200 const upsellProductIds = []; 3201 3202 3203 upsellProductIds.push(7675567538262); 3204 3205 3206 upsellProductIds.push(7676028715094); 3207 3208 3209 for (let item of cartItems) { 3210 if (upsellProductIds.includes(item.product_id)) { 3211 3212 if (item.product_id === 7675567538262) { 3213 hasUpsellProduct1 = true; 3214 } 3215 3216 3217 if (item.product_id === 7676028715094) { 3218 hasUpsellProduct2 = true; 3219 } 3220 3221 } 3222 } 3223 3224 if (!hasUpsellProduct1 && (null || null || null || null)) { 3225 fetch('/cart/update.js', { 3226 method: 'POST', 3227 headers: { 'Content-Type': 'application/json' }, 3228 body: JSON.stringify({ 3229 attributes: { 3230 'recepient': '', 3231 'sender': '', 3232 'gift_note': '', 3233 'gift_option': '' 3234 } 3235 }) 3236 }).catch(function(err) { 3237 console.error('Failed to clear cart attributes:', err); 3238 }); 3239 } 3240 }); 3241</script>
3241 3242 3243<div id="gift-card-popup" class="gift-card-popup" style="display: none;"> 3244 <div class="gift-card-popup__overlay"></div> 3245 <div class="gift-card-popup__content"> 3246 <div class="gift-card-popup__header"> 3247 <h3>Personalize Your Gift!</h3> 3248 <button type="button" class="gift-card-popup__close" aria-label="Close">×</button> 3249 </div> 3250 <div class="gift-card-popup__body"> 3251 <p class="gift-card-popup__subtitle">Choose how you'd like to personalize your gift card</p> 3252 3253 <div class="gift-card-popup__options"> 3254 <label class="gift-option-label"> 3255 <input type="radio" name="gift_option" value="blank" class="gift-option-radio" checked> 3256 <div class="gift-option-content"> 3257 <strong>Leave card blank</strong> 3258 <p>No message will be included</p> 3259 </div> 3260 </label> 3261 3262 <label class="gift-option-label"> 3263 <input type="radio" name="gift_option" value="standard" class="gift-option-radio"> 3264 <div class="gift-option-content"> 3265 <strong>Include our standard message</strong> 3266 <p class="standard-message-preview">Enjoy this selection of Japanese snacks & products, a little treat from Japan to make your day special. Have a great day!</p> 3267 </div> 3268 </label> 3269 3270 <label class="gift-option-label"> 3271 <input type="radio" name="gift_option" value="custom" class="gift-option-radio"> 3272 <div class="gift-option-content"> 3273 <strong>Write a custom message</strong> 3274 <p>Add your personal touch with a custom message</p> 3275 </div> 3276 </label> 3277 </div> 3278 3279 <div id="custom-message-fields" class="custom-message-fields" style="display: none;"> 3280 <div class="gift-card-popup__field"> 3281 <label for="gift-card-to">To (Recipient Name) <span class="required">*</span></label> 3282 <input type="text" id="gift-card-to" name="gift-card-to" placeholder="Recipient's name" maxlength="100"> 3283 </div> 3284 <div class="gift-card-popup__field"> 3285 <label for="gift-card-message">Gift Message <span class="required">*</span></label> 3286 <textarea id="gift-card-message" name="gift-card-message" placeholder="Write your heartfelt message here..." 3287 rows="4" maxlength="200"></textarea> 3288 <div class="gift-card-popup__char-counter" id="gift-card-char-counter">0/200</div> 3289 </div> 3290 <div class="gift-card-popup__field"> 3291 <label for="gift-card-from">From (Sender Name) <span class="required">*</span></label> 3292 <input type="text" id="gift-card-from" name="gift-card-from" placeholder="Your name" maxlength="100"> 3293 </div> 3294 </div> 3295 3296 <div id="gift-card-preview" class="gift-card-preview" style="display: none;"> 3297 <div class="gift-card-preview__card"> 3298 <div class="gift-card-preview__content"> 3299 <div class="gift-card-preview__to"> 3300 <span class="gift-card-preview__value">To</span> 3301 <span class="gift-card-preview__value" id="previewRecipient">Recipient's name</span> 3302 </div> 3303 <div class="gift-card-preview__message" id="previewMessage"> 3304 Your gift message will appear here... 3305 </div> 3306 <div class="gift-card-preview__from"> 3307 <span class="gift-card-preview__value">From</span> 3308 <span class="gift-card-preview__value" id="previewSender">Your name</span> 3309 </div> 3310 </div> 3311 </div> 3312 </div> 3313 </div> 3314 <div class="gift-card-popup__footer"> 3315 <button type="button" class="btn gift-card-popup__cancel">Cancel</button> 3316 <button type="button" class="btn gift-card-popup__save">Save</button> 3317 </div> 3318 </div> 3319</div> 3320 3321<style> 3322 .gift-card-popup__field input::placeholder { 3323 color: #101010 !important; 3324} 3325.gift-card-popup__footer { 3326 display: flex; 3327 gap: 10px; 3328 padding-bottom: 20px; 3329 justify-content: space-between; 3330 max-width: calc(100% - 53px); 3331 margin: auto; 3332} 3333 .cart-upsell { 3334 margin: 12px 0; 3335 background: #fff; 3336 border-radius: 16px; 3337 padding: 0; 3338 position: relative; 3339 max-width: initial !important; 3340 box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); 3341 } 3342 3343 .cart-upsell__container { 3344 padding: 16px; 3345 } 3346 3347 .cart-upsell__heading { 3348 margin: 0 0 6px; 3349 font-size: 1rem; 3350 color: #101010; 3351 text-align: left; 3352 letter-spacing: 0.5px; 3353 text-transform: uppercase; 3354 font-weight: 600; 3355 } 3356 3357 .cart-upsell__subheading { 3358 margin: 0 0 16px; 3359 font-size: 0.85rem; 3360 color: #606060; 3361 text-align: left; 3362 line-height: 1.5; 3363 } 3364 3365 .cart-upsell__cards-wrapper { 3366 position: relative; 3367 margin-bottom: 12px; 3368 width: 100%; 3369 overflow: visible; 3370 } 3371 3372 3373 .cart-upsell__cards { 3374 display: flex; 3375 overflow-x: auto; 3376 overflow-y: hidden; 3377 scroll-snap-type: x mandatory; 3378 gap: 12px; 3379 scrollbar-width: none; /* Firefox */ 3380 -ms-overflow-style: none; /* IE and Edge */ 3381 -webkit-overflow-scrolling: touch; /* iOS */ 3382 scroll-behavior: smooth; 3383 touch-action: pan-x; 3384 width: 100%; 3385 } 3386 3387 .cart-upsell__cards::-webkit-scrollbar {
3388 display: none; /* Chrome, Safari, Opera */ 3389 } 3390 3391 /* Desktop: Side by side for 2 products without scrolling */ 3392 @media (min-width: 769px) { 3393 .cart-upsell__cards.has-two-products { 3394 display: flex; 3395 flex-direction: row; 3396 overflow-x: visible; 3397 overflow-y: visible; 3398 scroll-snap-type: none; 3399 gap: 12px; 3400 } 3401 } 3402 3403 .cart-upsell__card-wrapper { 3404 flex: 0 0 100%; 3405 scroll-snap-align: start; 3406 min-width: 0; 3407 box-sizing: border-box; 3408 display: flex; 3409 flex-direction: column; 3410 gap: 12px; 3411 } 3412 3413 /* Desktop: Each card takes 50% width to fit both in viewport */ 3414 @media (min-width: 769px) { 3415 .cart-upsell__cards.has-two-products .cart-upsell__card-wrapper { 3416 flex: 1; 3417 min-width: 0; 3418 max-width: calc(50% - 6px); 3419 } 3420 } 3421 3422 .cart-upsell__card { 3423 background: #F5F5F5; 3424 border-radius: 12px; 3425 padding: 10px; 3426 display: flex; 3427 flex-direction: column; 3428 gap: 10px; 3429 } 3430 3431 .cart-upsell__card-header { 3432 display: flex; 3433 gap: 10px; 3434 align-items: flex-start; 3435 } 3436 3437 .cart-upsell__card-image-wrapper { 3438 width: 60px; 3439 height: 60px; 3440 border-radius: 8px; 3441 overflow: hidden; 3442 background: transparent; 3443 display: flex; 3444 align-items: center; 3445 justify-content: center; 3446 flex-shrink: 0; 3447 } 3448 3449 .cart-upsell__card-text-wrapper { 3450 display: flex; 3451 flex-direction: column; 3452 flex: 1; 3453 min-width: 0; 3454 } 3455 3456 .cart-upsell__form { 3457 width: 100%; 3458 } 3459 3460 .cart-upsell__card-image { 3461 width: 100%; 3462 height: 100%; 3463 object-fit: cover; 3464 border-radius: 8px; 3465 display: block; 3466 margin: 0; 3467 max-width: none; 3468 } 3469 3470 .cart-upsell__card-title { 3471 margin: 0 0 4px; 3472 font-size: 0.9rem; 3473 color: #101010; 3474 font-weight: 600; 3475 text-align: left; 3476 line-height: 1.3; 3477 letter-spacing: 1px !important; 3478 } 3479 3480 .cart-upsell__card-description { 3481 margin: 0; 3482 font-size: 0.75rem; 3483 color: #606060; 3484 line-height: 1.4; 3485 text-align: left; 3486 } 3487 3488 .cart-upsell__card-features { 3489 list-style: none; 3490 padding: 0; 3491 margin: 0; 3492 display: flex; 3493 flex-direction: column; 3494 width: 100%; 3495 } 3496 3497 .cart-upsell__card-features li { 3498 font-size: 0.75rem; 3499 color: #606060; 3500 line-height: 1.3; 3501 position: relative; 3502 padding-left: 24px; 3503 margin-bottom: 4px; 3504 display: flex; 3505 align-items: center; 3506 } 3507 3508 .cart-upsell__card-features li:last-child { 3509 margin-bottom: 0; 3510 } 3511 3512 .cart-upsell__card-features li::before { 3513 content: ''; 3514 position: absolute; 3515 left: 0; 3516 width: 18px; 3517 height: 18px; 3518 background-size: contain; 3519 background-repeat: no-repeat; 3520 background-position: center; 3521 } 3522 3523 /* Individual icon styles */ 3524 .cart-upsell__card-features .feature-wrapping::before { 3525 background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"></path><path d="m3.3 7 8.7 5 8.7-5"></path><path d="M12 22V12"></path></svg>'); 3526 } 3527 3528 .cart-upsell__card-features .feature-ribbon::before { 3529 background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17.75 9.01c-.52 2.08-1.83 3.64-3.18 5.49l-2.6 3.54-2.97 4-3.5-2.54 3.85-4.97c-1.86-2.61-2.8-3.77-3.16-5.44"></path><path d="M17.75 9.01A7 7 0 0 0 6.2 9.1C6.06 8.5 6 7.82 6 7c0-3.5 2.83-5 5.98-5C15.24 2 18 3.5 18 7c0 .73-.09 1.4-.25 2.01Z"></path><path d="m9.35 14.53 2.64-3.31"></path><path d="m11.97 18.04 2.99 4 3.54-2.54-3.93-5"></path><path d="M14 8c0 1-1 2-2.01 3.22C11 10 10 9 10 8a2 2 0 1 1 4 0"></path></svg>'); 3530 } 3531 3532 .cart-upsell__card-features .feature-card::before { 3533 background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"></path></svg>'); 3534 } 3535 3536 .cart-upsell__card-features .feature-box::before { 3537 background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"></path><path d="m3.3 7 8.7 5 8.7-5"></path><path d="M12 22V12"></path></svg>'); 3538 } 3539 3540 .cart-upsell__card-features .feature-premium::before { 3541 background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2L2 7l10 5 10-5-10-5z"></path><path d="M2 17l10 5 10-5"></path><path d="M2 12l10 5 10-5"></path></svg>'); 3542 } 3543 3544 .cart-upsell__card-features .feature-special::before { 3545 background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>'); 3546 } 3547 3548 .cart-upsell__card-button { 3549 width: 100%; 3550 background: transparent; 3551 border: 1px solid var(--cta_outline_primary_static); 3552 border-radius: 8px; 3553 padding: 10px 12px; 3554 font-size: 11px; 3555 font-weight: 600; 3556 color: var(--cta_outline_primary_static); 3557 cursor: pointer; 3558 transition: all 0.2s ease; 3559 display: flex; 3560 align-items: center; 3561 justify-content: space-between; 3562 font-family: var(--button_font_family, inherit); 3563 margin-top: auto; 3564 min-height: 44px; 3565 gap: initial; 3566 box-sizing: border-box; 3567 } 3568 3569 .cart-upsell__card-button:hover { 3570 background: var(--cta_outline_primary_static); 3571 color: #fff; 3572 } 3573 3574 .cart-upsell__card-button:focus { 3575 outline: 2px solid var(--cta_outline_primary_static); 3576 outline-offset: 2px; 3577 } 3578 3579 .cart-upsell__card-button .cart-upsell__button-icon { 3580 font-size: 0.9rem; 3581 font-weight: 400; 3582 margin-right: 4px; 3583 } 3584 3585 .cart-upsell__button-text { 3586 flex: 1; 3587 text-align: left; 3588 } 3589 3590 .cart-upsell__button-price { 3591 font-weight: 600; 3592 } 3593 3594 .cart-upsell__nav-button { 3595 position: absolute; 3596 top: 50%; 3597 transform: translateY(-50%); 3598 background: #fff; 3599 border: 1px solid #e1e1e1; 3600 border-radius: 50%; 3601 width: 40px; 3602 height: 40px; 3603 display: flex; 3604 align-items: center; 3605 justify-content: center; 3606 cursor: pointer; 3607 z-index: 2; 3608 transition: all 0.2s ease; 3609 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); 3610 color: #101010; 3611 } 3612 3613 .cart-upsell__nav-button:hover:not(:disabled) { 3614 background: #f5f5f5; 3615 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 3616 transform: translateY(-50%) scale(1.05); 3617 } 3618 3619 .cart-upsell__nav-button:focus { 3620 outline: 2px solid var(--cta_outline_primary_static); 3621 outline-offset: 2px; 3622 } 3623 3624 .cart-upsell__nav-button:disabled { 3625 opacity: 0.3;
3626 cursor: not-allowed; 3627 } 3628 3629 .cart-upsell__nav-button--prev { 3630 left: 5px; 3631 } 3632 3633 .cart-upsell__nav-button--next { 3634 right: 5px; 3635 } 3636 3637 .cart-upsell__disclaimer { 3638 margin: 12px 0 0; 3639 font-size: 0.7rem; 3640 color: #606060; 3641 text-align: center; 3642 font-style: normal; 3643 } 3644 3645 .gift-card-popup { 3646 position: fixed; 3647 top: 0; 3648 left: 0; 3649 width: 100%; 3650 height: 100%; 3651 z-index: 999999; 3652 display: flex; 3653 align-items: center; 3654 justify-content: center; 3655 padding: 20px; 3656 box-sizing: border-box; 3657 } 3658 3659 .gift-card-popup__overlay { 3660 position: absolute; 3661 top: 0; 3662 left: 0; 3663 width: 100%; 3664 height: 100%; 3665 background: rgba(0, 0, 0, 0.5); 3666 backdrop-filter: blur(2px); 3667 } 3668 3669 .gift-card-popup__content { 3670 position: relative; 3671 background: #fff; 3672 border-radius: 12px; 3673 box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2); 3674 max-width: 500px; 3675 width: 100%; 3676 max-height: 85vh; 3677 max-height: calc(100dvh - 40px); 3678 overflow-y: auto; 3679 animation: popup-slide-in 0.3s ease-out; 3680 } 3681 3682 @keyframes popup-slide-in { 3683 from { 3684 opacity: 0; 3685 transform: scale(0.9) translateY(-20px); 3686 } 3687 3688 to { 3689 opacity: 1; 3690 transform: scale(1) translateY(0); 3691 } 3692 } 3693 3694 .gift-card-popup__header { 3695 display: flex; 3696 justify-content: space-between; 3697 align-items: center; 3698 padding: 20px 24px; 3699 border-bottom: 1px solid #eee; 3700 } 3701 3702 .gift-card-popup__header h3 { 3703 margin: 0; 3704 font-size: 18px !important; 3705 font-weight: 600; 3706 color: #333; 3707 } 3708 3709 .gift-card-popup__close { 3710 background: none; 3711 border: none; 3712 font-size: 24px; 3713 color: #999; 3714 cursor: pointer; 3715 padding: 0; 3716 width: 30px; 3717 height: 30px; 3718 display: flex; 3719 align-items: center; 3720 justify-content: center; 3721 border-radius: 50%; 3722 transition: all 0.2s ease; 3723 } 3724 3725 .gift-card-popup__close:hover { 3726 background: #f5f5f5; 3727 color: #333; 3728 } 3729 3730 .gift-card-popup__body { 3731 padding: 24px; 3732 } 3733 3734 .gift-card-popup__subtitle { 3735 font-size: 14px; 3736 color: #6b7280; 3737 margin: 0 0 20px 0; 3738 line-height: 1.5; 3739 } 3740 3741 .gift-card-popup__options { 3742 margin-bottom: 20px; 3743 display: flex; 3744 flex-direction: column; 3745 gap: 12px; 3746 } 3747 3748 .gift-option-label { 3749 display: flex; 3750 align-items: flex-start; 3751 padding: 16px; 3752 border: 2px solid #e5e7eb; 3753 border-radius: 8px; 3754 cursor: pointer; 3755 transition: all 0.2s; 3756 background: #ffffff; 3757 } 3758 3759 .gift-option-label:hover { 3760 border-color: #d1d5db; 3761 background: #f9fafb; 3762 } 3763 3764 .gift-option-label:has(.gift-option-radio:checked) { 3765 border-color: var(--cta_outline_primary_static, #243846); 3766 background: rgba(36, 56, 70, 0.05); 3767 } 3768 3769 .gift-option-radio { 3770 margin-top: 2px; 3771 margin-right: 12px; 3772 flex-shrink: 0; 3773 width: 18px; 3774 height: 18px; 3775 cursor: pointer; 3776 accent-color: var(--cta_outline_primary_static, #243846); 3777 } 3778 3779 .gift-option-content { 3780 flex: 1; 3781 } 3782 3783 .gift-option-content strong { 3784 display: block; 3785 font-size: 15px; 3786 color: #1f2937; 3787 margin-bottom: 4px; 3788 font-weight: 600; 3789 } 3790 3791 .gift-option-content p { 3792 font-size: 13px; 3793 color: #6b7280; 3794 margin: 0; 3795 line-height: 1.5; 3796 } 3797 3798 .standard-message-preview { 3799 font-style: italic; 3800 padding: 8px 12px; 3801 background: #f3f4f6; 3802 border-radius: 6px; 3803 margin-top: 8px !important; 3804 } 3805 3806 .custom-message-fields { 3807 padding-top: 16px; 3808 border-top: 1px solid #e5e7eb; 3809 margin-top: 8px; 3810 display: none; 3811 } 3812 3813 .gift-card-popup__field { 3814 margin-bottom: 20px; 3815 } 3816 3817 .gift-card-popup__field:last-child { 3818 margin-bottom: 0; 3819 } 3820 3821 .gift-card-popup__field label { 3822 display: block; 3823 margin-bottom: 6px; 3824 font-weight: 500; 3825 color: #333; 3826 font-size: 0.95rem; 3827 } 3828 3829 .gift-card-popup__field label .required { 3830 color: #ef4444; 3831 } 3832 3833 .gift-card-popup__field input, 3834 .gift-card-popup__field textarea { 3835 width: 100%; 3836 padding: 12px 16px; 3837 border: 2px solid #e1e1e1; 3838 border-radius: 8px; 3839 font-size: 0.95rem; 3840 transition: border-color 0.2s ease; 3841 font-family: inherit; 3842 box-sizing: border-box; 3843 } 3844 3845 .gift-card-popup__char-counter { 3846 font-size: 0.8rem; 3847 color: #666; 3848 text-align: right; 3849 margin-top: 4px; 3850 transition: color 0.2s ease; 3851 } 3852 3853 .gift-card-popup__char-counter.warning { 3854 color: #ff8c00; 3855 } 3856 3857 .gift-card-popup__char-counter.error { 3858 color: #dc3545; 3859 } 3860 3861 .gift-card-popup__field input:focus, 3862 .gift-card-popup__field textarea:focus { 3863 outline: none; 3864 border-color: #101010; 3865 } 3866 3867 .gift-card-preview { 3868 margin-top: 24px; 3869 padding-top: 24px; 3870 border-top: 1px solid #e5e7eb; 3871 display: none; 3872 justify-content: center; 3873 width: 100%; 3874 } 3875 3876 .gift-card-preview__card { 3877 background: linear-gradient(135deg, #fefefe 0%, #f9fafb 100%); 3878 border: none; 3879 border-radius: 12px; 3880 padding: 32px 28px; 3881 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); 3882 position: relative; 3883 font-family: 'Georgia', 'Times New Roman', serif; 3884 width: 100%; 3885 text-align: center; 3886 } 3887 3888 .gift-card-preview__content { 3889 position: relative; 3890 z-index: 1; 3891 display: flex; 3892 flex-direction: column; 3893 align-items: center; 3894 } 3895 3896 .gift-card-preview__to, 3897 .gift-card-preview__from { 3898 display: flex; 3899 align-items: center; 3900 gap: 8px; 3901 font-size: 16px; 3902 } 3903 3904 .gift-card-preview__value { 3905 color: #2d5016; 3906 font-weight: 500; 3907 font-style: italic; 3908 } 3909 3910 .gift-card-preview__value:empty::before { 3911 content: '...'; 3912 color: #2d5016; 3913 font-style: normal; 3914 opacity: 0.6; 3915 } 3916 3917 .gift-card-preview__message { 3918 color: #2d5016; 3919 font-size: 15px; 3920 line-height: 1.8; 3921 white-space: pre-wrap; 3922 word-wrap: break-word; 3923 font-style: italic; 3924 margin: 8px 0; 3925 } 3926 3927 .gift-card-preview__message:empty::before { 3928 content: 'Your gift message will appear here...'; 3929 color: #2d5016; 3930 font-style: normal; 3931 font-size: 14px; 3932 opacity: 0.6; 3933 } 3934 3935 .gift-card-preview__from { 3936 margin-top: auto; 3937 text-align: center; 3938 justify-content: center; 3939 } 3940 3941 .gift-card-popup__cancel { 3942 background: transparent; 3943 color: #495057; 3944 border: 1px solid #e1e1e1; 3945 padding: 10px 20px; 3946 font-size: 0.9rem; 3947 cursor: pointer; 3948 transition: all 0.2s ease; 3949 border-radius: 8px; 3950 } 3951 3952 .gift-card-popup__cancel:hover { 3953 background: #e9ecef; 3954 color: #495057; 3955 } 3956 3957 .gift-card-popup__save { 3958 background: var(--brand_color_1, #007bff); 3959 color: #fff; 3960 border: none; 3961 padding: 10px 20px; 3962 font-size: 0.9rem; 3963 cursor: pointer; 3964 transition: all 0.2s ease; 3965 border-radius: 8px; 3966 } 3967 3968 .gift-card-popup__save:hover { 3969 filter: brightness(0.95); 3970 } 3971 3972 .gift-card-popup__save:disabled { 3973 opacity: 0.6;
3974 cursor: not-allowed; 3975 } 3976 3977 3978 @media (min-width: 481px) and (max-width: 768px) { 3979 .cart-upsell__cards:not(.has-two-products) { 3980 flex-direction: column; 3981 overflow-x: visible; 3982 overflow-y: visible; 3983 scroll-snap-type: none; 3984 touch-action: auto; 3985 } 3986 3987 .cart-upsell__cards:not(.has-two-products) .cart-upsell__card { 3988 flex: 1 1 auto; 3989 width: 100%; 3990 scroll-snap-align: none; 3991 } 3992 } 3993 3994 3995 @media (max-width: 768px) { 3996 .cart-upsell__container { 3997 padding: 12px; 3998 } 3999 4000 .cart-upsell__heading { 4001 font-size: 0.95rem; 4002 margin-bottom: 6px; 4003 } 4004 4005 .cart-upsell__subheading { 4006 font-size: 0.75rem; 4007 margin-bottom: 12px; 4008 } 4009 4010 .cart-upsell__cards-wrapper { 4011 margin-bottom: 10px; 4012 overflow: visible; 4013 } 4014 4015 /* Two products on mobile - horizontal scroll */ 4016 .cart-upsell__cards.has-two-products { 4017 display: flex; 4018 flex-direction: row; 4019 overflow-x: auto; 4020 overflow-y: hidden; 4021 scroll-snap-type: x mandatory; 4022 gap: 12px; 4023 scrollbar-width: none; 4024 -ms-overflow-style: none; 4025 -webkit-overflow-scrolling: touch; 4026 scroll-behavior: smooth; 4027 padding-bottom: 5px; 4028 } 4029 4030 .cart-upsell__cards.has-two-products::-webkit-scrollbar {
4031 display: none; 4032 } 4033 4034 .cart-upsell__cards.has-two-products .cart-upsell__card-wrapper { 4035 flex: 0 0 85%; 4036 scroll-snap-align: start; 4037 min-width: 0; 4038 } 4039 4040 /* Single product on mobile - vertical stack */ 4041 .cart-upsell__cards:not(.has-two-products) { 4042 flex-direction: column; 4043 overflow-x: visible; 4044 overflow-y: visible; 4045 scroll-snap-type: none; 4046 gap: 10px; 4047 touch-action: auto; 4048 } 4049 4050 .cart-upsell__card { 4051 padding: 10px; 4052 flex: 1 1 auto; 4053 width: 100%; 4054 max-width: 100%; 4055 scroll-snap-align: none; 4056 } 4057 4058 .cart-upsell__card-header { 4059 gap: 8px; 4060 } 4061 4062 .cart-upsell__card-image-wrapper { 4063 width: 50px; 4064 height: 50px; 4065 flex-shrink: 0; 4066 background: transparent; 4067 } 4068 4069 .cart-upsell__card-image { 4070 width: 100%; 4071 height: 100%; 4072 object-fit: cover; 4073 } 4074 4075 .cart-upsell__card-title { 4076 font-size: 0.85rem; 4077 margin-bottom: 4px; 4078 } 4079 4080 .cart-upsell__card-description { 4081 font-size: 0.7rem; 4082 margin-bottom: 0; 4083 } 4084 4085 .cart-upsell__card-features { 4086 margin-bottom: 0; 4087 } 4088 4089 .cart-upsell__card-features li { 4090 font-size: 0.7rem; 4091 padding-left: 20px; 4092 margin-bottom: 5px; 4093 } 4094 4095 .cart-upsell__card-button { 4096 padding: 8px 12px; 4097 font-size: 0.75rem; 4098 min-height: 40px; 4099 } 4100 4101 .cart-upsell__nav-button { 4102 display: none; 4103 width: 36px; 4104 height: 36px; 4105 } 4106 4107 .cart-upsell__nav-button--prev { 4108 left: 5px; 4109 } 4110 4111 .cart-upsell__nav-button--next { 4112 right: 5px; 4113 } 4114 4115 .cart-upsell__disclaimer { 4116 font-size: 0.65rem; 4117 margin-top: 10px; 4118 } 4119 } 4120 4121 @media (min-width: 769px) { 4122 /* Desktop - both products side by side without scrolling */ 4123 .cart-upsell__cards.has-two-products { 4124 display: flex; 4125 flex-direction: row; 4126 overflow-x: visible; 4127 overflow-y: visible; 4128 scroll-snap-type: none; 4129 gap: 12px; 4130 width: 100%; 4131 } 4132 4133 .cart-upsell__cards.has-two-products .cart-upsell__card-wrapper { 4134 flex: 1; 4135 min-width: 0; 4136 max-width: calc(50% - 6px); 4137 } 4138 4139 /* Single product on desktop - prevent scroll, clean layout */ 4140 .cart-upsell__cards:not(.has-two-products) { 4141 display: flex; 4142 flex-direction: column; 4143 overflow-x: visible; 4144 overflow-y: visible; 4145 scroll-snap-type: none; 4146 gap: 12px; 4147 width: 100%; 4148 } 4149 4150 .cart-upsell__cards:not(.has-two-products) .cart-upsell__card-wrapper { 4151 width: 100%; 4152 max-width: 100%; 4153 } 4154 4155 /* Hide navigation buttons on desktop when no scrolling */ 4156 .cart-upsell__nav-button { 4157 display: none; 4158 } 4159 } 4160 4161 @media (max-width: 768px) { 4162 .gift-card-popup__content { 4163 width: 95%; 4164 } 4165 4166 .gift-card-popup__header, 4167 .gift-card-popup__body, 4168 .gift-card-popup__footer { 4169 padding: 16px 20px; 4170 } 4171 4172 .gift-card-popup__footer { 4173 flex-direction: column-reverse; 4174 } 4175 4176 .gift-card-popup__cancel, 4177 .gift-card-popup__save { 4178 width: 100%; 4179 padding: 12px; 4180 } 4181 4182 .gift-card-preview__card { 4183 padding: 24px 20px; 4184 } 4185 4186 .gift-card-preview__message { 4187 font-size: 14px; 4188 line-height: 1.6; 4189 min-height: 60px; 4190 } 4191 4192 .gift-card-preview__to, 4193 .gift-card-preview__from { 4194 font-size: 14px; 4195 } 4196 } 4197</style> 4198
4199<script> 4200 (function() { 4201 'use strict'; 4202 4203 // Configuration 4204 const CONFIG = { 4205 DEBOUNCE_DELAY: 150, 4206 INITIAL_CHECK_DELAY: 300, 4207 CART_UPDATE_DELAY: 400, 4208 MUTATION_DEBOUNCE: 300, 4209 VISIBILITY_CHECK_INTERVAL: 5000, // Reduced from 2000ms 4210 MAX_RETRY_ATTEMPTS: 3, 4211 RETRY_DELAY: 1000, 4212 CAROUSEL_SCROLL_DEBOUNCE: 100 4213 }; 4214 4215 // Carousel state 4216 const carouselState = { 4217 carousel: null, 4218 prevButton: null, 4219 nextButton: null, 4220 isInitialized: false, 4221 updateButtons: null 4222 }; 4223 4224 // Initialize carousel 4225 function initCarousel() { 4226 const carousel = document.querySelector('[data-carousel]'); 4227 if (!carousel) return; 4228 4229 const isMobile = window.innerWidth <= 768; 4230 4231 // On mobile, hide navigation buttons (touch scrolling is used) 4232 if (isMobile) { 4233 const prevButton = carousel.closest('.cart-upsell__cards-wrapper')?.querySelector('.cart-upsell__nav-button--prev'); 4234 const nextButton = carousel.closest('.cart-upsell__cards-wrapper')?.querySelector('.cart-upsell__nav-button--next'); 4235 if (prevButton) prevButton.style.display = 'none'; 4236 if (nextButton) nextButton.style.display = 'none'; 4237 // Still initialize for mobile to handle scroll events, but don't show buttons 4238 } 4239 4240 // Re-initialize if already initialized (for dynamic content) 4241 if (carouselState.isInitialized && carouselState.carousel === carousel) { 4242 if (carouselState.updateButtons) { 4243 setTimeout(() => carouselState.updateButtons(), 100); 4244 } 4245 return; 4246 } 4247 4248 carouselState.carousel = carousel; 4249 carouselState.prevButton = carousel.closest('.cart-upsell__cards-wrapper')?.querySelector('.cart-upsell__nav-button--prev'); 4250 carouselState.nextButton = carousel.closest('.cart-upsell__cards-wrapper')?.querySelector('.cart-upsell__nav-button--next'); 4251 4252 // Update button states 4253 function updateCarouselButtons() { 4254 if (!carouselState.carousel) return; 4255 4256 const { scrollLeft, scrollWidth, clientWidth } = carouselState.carousel; 4257 const isAtStart = scrollLeft <= 10; 4258 const isAtEnd = scrollLeft >= scrollWidth - clientWidth - 10; 4259 const needsScrolling = scrollWidth > clientWidth; 4260 const isMobile = window.innerWidth <= 768; 4261 4262 // On mobile, hide buttons (touch scrolling is used) 4263 // On desktop, show buttons when scrolling is needed (disable when at start/end) 4264 if (carouselState.prevButton) { 4265 if (isMobile) { 4266 carouselState.prevButton.style.display = 'none'; 4267 } else { 4268 carouselState.prevButton.disabled = isAtStart || !needsScrolling; 4269 carouselState.prevButton.style.display = (needsScrolling && !isAtStart) ? 'flex' : 'none'; 4270 } 4271 } 4272 if (carouselState.nextButton) { 4273 if (isMobile) { 4274 carouselState.nextButton.style.display = 'none'; 4275 } else { 4276 carouselState.nextButton.disabled = isAtEnd || !needsScrolling; 4277 carouselState.nextButton.style.display = (needsScrolling && !isAtEnd) ? 'flex' : 'none'; 4278 } 4279 } 4280 } 4281 4282 // Store function reference for external access 4283 carouselState.updateButtons = updateCarouselButtons; 4284 4285 // Initialize button state 4286 updateCarouselButtons(); 4287 4288 // Navigation handlers 4289 function scrollCarousel(direction) { 4290 if (!carouselState.carousel) return; 4291 4292 const cardWidth = carouselState.carousel.querySelector('.cart-upsell__card')?.offsetWidth || 0; 4293 const gap = 12; 4294 const scrollAmount = cardWidth + gap; 4295 4296 const currentScroll = carouselState.carousel.scrollLeft; 4297 const targetScroll = direction === 'next' 4298 ? currentScroll + scrollAmount 4299 : currentScroll - scrollAmount; 4300 4301 carouselState.carousel.scrollTo({ 4302 left: targetScroll, 4303 behavior: 'smooth' 4304 }); 4305 } 4306 4307 // Event listeners for navigation buttons 4308 if (carouselState.prevButton) { 4309 carouselState.prevButton.addEventListener('click', () => scrollCarousel('prev')); 4310 } 4311 if (carouselState.nextButton) { 4312 carouselState.nextButton.addEventListener('click', () => scrollCarousel('next')); 4313 } 4314 4315 // Update buttons on scroll (for touch scrolling) 4316 const debouncedUpdate = debounce(updateCarouselButtons, CONFIG.CAROUSEL_SCROLL_DEBOUNCE); 4317 carouselState.carousel.addEventListener('scroll', debouncedUpdate, { passive: true }); 4318 4319 // Update on resize 4320 let resizeTimeout; 4321 window.addEventListener('resize', () => { 4322 clearTimeout(resizeTimeout); 4323 resizeTimeout = setTimeout(() => { 4324 const isMobile = window.innerWidth <= 768; 4325 if (isMobile) { 4326 // Hide buttons on mobile 4327 if (carouselState.prevButton) carouselState.prevButton.style.display = 'none'; 4328 if (carouselState.nextButton) carouselState.nextButton.style.display = 'none'; 4329 } else { 4330 // Re-initialize carousel on desktop and update button visibility 4331 if (carouselState.updateButtons) { 4332 updateCarouselButtons(); 4333 } 4334 } 4335 }, 250); 4336 }, { passive: true }); 4337 4338 // Keyboard navigation 4339 carouselState.carousel.addEventListener('keydown', (e) => { 4340 if (e.key === 'ArrowLeft' && carouselState.prevButton && !carouselState.prevButton.disabled) { 4341 e.preventDefault(); 4342 scrollCarousel('prev'); 4343 } else if (e.key === 'ArrowRight' && carouselState.nextButton && !carouselState.nextButton.disabled) { 4344 e.preventDefault(); 4345 scrollCarousel('next'); 4346 } 4347 }); 4348 4349 carouselState.isInitialized = true; 4350 } 4351 4352 // State management 4353 const state = { 4354 currentGiftCardData: null, 4355 lastCartState: null, 4356 checkTimeout: null, 4357 mutationTimeout: null, 4358 isFetching: false, 4359 isInitialized: false, 4360 retryCount: 0, 4361 visibilityCheckInterval: null, 4362 cartCache: null, 4363 cacheTimestamp: 0, 4364 CACHE_DURATION: 500 // Cache cart data for 500ms 4365 }; 4366 4367 // Product IDs from Liquid 4368 const UPSELL_PRODUCT_ID_1 = 7675567538262; 4369 const UPSELL_PRODUCT_ID_2 = 7676028715094; 4370 4371 // Utility: Debounced function executor 4372 function debounce(func, wait) { 4373 let timeout;
4374 return function executedFunction(...args) { 4375 const later = () => { 4376 clearTimeout(timeout); 4377 func(...args); 4378 }; 4379 clearTimeout(timeout); 4380 timeout = setTimeout(later, wait); 4381 }; 4382 } 4383 4384 // Utility: Safe element query 4385 function safeQuerySelector(selector, context = document) { 4386 try { 4387 return context.querySelector(selector); 4388 } catch (error) { 4389 console.error('Invalid selector:', selector, error); 4390 return null; 4391 } 4392 } 4393 4394 // Utility: Get cached cart or fetch new 4395 function getCartData() { 4396 const now = Date.now(); 4397 4398 // Return cached data if still valid 4399 if (state.cartCache && (now - state.cacheTimestamp) < state.CACHE_DURATION) { 4400 return Promise.resolve(state.cartCache); 4401 } 4402 4403 // Prevent concurrent fetches 4404 if (state.isFetching) { 4405 return new Promise((resolve) => { 4406 const checkInterval = setInterval(() => { 4407 if (!state.isFetching && state.cartCache) { 4408 clearInterval(checkInterval); 4409 resolve(state.cartCache); 4410 } 4411 }, 50); 4412 4413 // Timeout after 2 seconds 4414 setTimeout(() => { 4415 clearInterval(checkInterval); 4416 resolve(null); 4417 }, 2000); 4418 }); 4419 } 4420 4421 state.isFetching = true; 4422 4423 return fetch('/cart.js', { 4424 method: 'GET', 4425 headers: { 4426 'Content-Type': 'application/json', 4427 'X-Requested-With': 'XMLHttpRequest' 4428 }, 4429 credentials: 'same-origin' 4430 }) 4431 .then(response => { 4432 if (!response.ok) { 4433 throw new Error('Cart fetch failed: ' + response.status); 4434 } 4435 return response.json(); 4436 }) 4437 .then(cart => { 4438 state.cartCache = cart; 4439 state.cacheTimestamp = Date.now(); 4440 state.retryCount = 0; 4441 return cart; 4442 }) 4443 .catch(error => { 4444 console.error('Failed to fetch cart:', error); 4445 4446 // Retry logic 4447 if (state.retryCount < CONFIG.MAX_RETRY_ATTEMPTS) { 4448 state.retryCount++; 4449 return new Promise(resolve => { 4450 setTimeout(() => { 4451 resolve(getCartData()); 4452 }, CONFIG.RETRY_DELAY * state.retryCount); 4453 }); 4454 } 4455 4456 return null; 4457 }) 4458 .finally(() => { 4459 state.isFetching = false; 4460 }); 4461 } 4462 4463 // Invalidate cache when cart changes
4464 function invalidateCartCache() { 4465 state.cartCache = null; 4466 state.cacheTimestamp = 0; 4467 } 4468 4469 // Gift card popup functions 4470 4471 // Session storage functions for gift data persistence 4472 function getGiftDataKey(productId) { 4473 return 'giftMessageData_' + (productId || UPSELL_PRODUCT_ID_1 || 'default'); 4474 } 4475 4476 function loadSavedGiftData(productId) { 4477 try { 4478 if (typeof Storage === 'undefined') { 4479 return null; 4480 } 4481 const key = getGiftDataKey(productId); 4482 const savedData = sessionStorage.getItem(key); 4483 if (savedData) { 4484 return JSON.parse(savedData); 4485 } 4486 } catch (error) { 4487 console.error('Error loading saved gift data:', error); 4488 } 4489 return null; 4490 } 4491 4492 function saveGiftData(sender, recipient, giftMessage, productId) { 4493 try { 4494 if (typeof Storage === 'undefined') { 4495 return; 4496 } 4497 const key = getGiftDataKey(productId); 4498 const data = { 4499 sender: sender, 4500 recipient: recipient,
4501 gift_note: giftMessage, 4502 timestamp: Date.now() 4503 }; 4504 sessionStorage.setItem(key, JSON.stringify(data)); 4505 } catch (error) { 4506 console.error('Error saving gift data:', error); 4507 } 4508 } 4509 4510 function clearSavedGiftData(productId) { 4511 try { 4512 if (typeof Storage === 'undefined') { 4513 return; 4514 } 4515 const key = getGiftDataKey(productId); 4516 sessionStorage.removeItem(key); 4517 } catch (error) { 4518 console.error('Error clearing gift data:', error); 4519 } 4520 } 4521 4522 function updateGiftPreview() { 4523 try { 4524 const toField = document.getElementById('gift-card-to'); 4525 const fromField = document.getElementById('gift-card-from'); 4526 const messageField = document.getElementById('gift-card-message'); 4527 const previewRecipient = document.getElementById('previewRecipient'); 4528 const previewSender = document.getElementById('previewSender'); 4529 const previewMessage = document.getElementById('previewMessage'); 4530 const previewSection = document.getElementById('gift-card-preview'); 4531 4532 if (!toField || !fromField || !messageField || !previewRecipient || !previewSender || !previewMessage || !previewSection) { 4533 return; 4534 } 4535 4536 const recipient = toField.value.trim(); 4537 const sender = fromField.value.trim(); 4538 const message = messageField.value.trim(); 4539 4540 previewRecipient.textContent = recipient || 'Recipient\'s name'; 4541 previewSender.textContent = sender || 'Your name'; 4542 previewMessage.textContent = message || 'Your gift message will appear here...'; 4543 4544 // Only show preview when custom option is selected 4545 const selectedOption = document.querySelector('.gift-option-radio:checked'); 4546 if (selectedOption && selectedOption.value === 'custom') { 4547 previewSection.style.display = 'flex'; 4548 } else { 4549 previewSection.style.display = 'none'; 4550 } 4551 } catch (error) { 4552 console.error('Error updating gift preview:', error); 4553 } 4554 } 4555 4556 // Toggle custom fields visibility based on radio selection 4557 function toggleCustomFields() { 4558 const customMessageFields = document.getElementById('custom-message-fields'); 4559 const previewSection = document.getElementById('gift-card-preview'); 4560 const selectedOption = document.querySelector('.gift-option-radio:checked'); 4561 4562 if (!customMessageFields) return; 4563 4564 if (selectedOption && selectedOption.value === 'custom') { 4565 customMessageFields.style.display = 'block'; 4566 if (previewSection) { 4567 previewSection.style.display = 'flex'; 4568 } 4569 // Make fields required 4570 const toField = document.getElementById('gift-card-to'); 4571 const fromField = document.getElementById('gift-card-from'); 4572 const messageField = document.getElementById('gift-card-message'); 4573 if (toField) toField.required = true; 4574 if (fromField) fromField.required = true; 4575 if (messageField) messageField.required = true; 4576 updateGiftPreview(); 4577 } else { 4578 customMessageFields.style.display = 'none'; 4579 if (previewSection) { 4580 previewSection.style.display = 'none'; 4581 } 4582 // Remove required attribute 4583 const toField = document.getElementById('gift-card-to'); 4584 const fromField = document.getElementById('gift-card-from'); 4585 const messageField = document.getElementById('gift-card-message'); 4586 if (toField) toField.required = false; 4587 if (fromField) fromField.required = false; 4588 if (messageField) messageField.required = false; 4589 } 4590 } 4591 4592 function showGiftCardPopup(variantId, btn, productData) { 4593 state.currentGiftCardData = { variantId, btn, productData }; 4594 const popup = document.getElementById('gift-card-popup'); 4595 if (popup) { 4596 popup.style.display = 'flex'; 4597 document.body.style.overflow = 'hidden'; 4598 4599 // Load saved data from session storage 4600 const savedData = loadSavedGiftData(productData?.id); 4601 if (savedData) { 4602 // Populate custom message fields 4603 const toField = document.getElementById('gift-card-to'); 4604 const fromField = document.getElementById('gift-card-from'); 4605 const messageField = document.getElementById('gift-card-message'); 4606 const charCounter = document.getElementById('gift-card-char-counter'); 4607 4608 if (toField) toField.value = savedData.recipient || ''; 4609 if (fromField) fromField.value = savedData.sender || ''; 4610 if (messageField) messageField.value = savedData.gift_note || ''; 4611 4612 if (charCounter && savedData.gift_note) { 4613 charCounter.textContent = `${savedData.gift_note.length} / 200`; 4614 } 4615 4616 // Select custom option if data exists 4617 const customOption = popup.querySelector('.gift-option-radio[value="custom"]'); 4618 if (customOption) { 4619 customOption.checked = true; 4620 toggleCustomFields(); 4621 } 4622 } else { 4623 // Select blank option by default 4624 const blankOption = popup.querySelector('.gift-option-radio[value="blank"]'); 4625 if (blankOption) { 4626 blankOption.checked = true; 4627 toggleCustomFields(); 4628 } 4629 } 4630 4631 requestAnimationFrame(() => { 4632 updateGiftPreview(); 4633 // Focus on first empty field if custom is selected 4634 const selectedOption = popup.querySelector('.gift-option-radio:checked'); 4635 if (selectedOption && selectedOption.value === 'custom') { 4636 const toField = document.getElementById('gift-card-to'); 4637 const messageField = document.getElementById('gift-card-message'); 4638 const fromField = document.getElementById('gift-card-from'); 4639 4640 if (toField && !toField.value) { 4641 toField.focus(); 4642 } else if (messageField && !messageField.value) { 4643 messageField.focus(); 4644 } else if (fromField && !fromField.value) { 4645 fromField.focus(); 4646 } else if (toField) { 4647 toField.focus(); 4648 toField.select(); 4649 } 4650 } 4651 }); 4652 } 4653 } 4654 4655 function hideGiftCardPopup() { 4656 const popup = document.getElementById('gift-card-popup'); 4657 if (popup) { 4658 // Save current form values to session storage before closing (only if custom option) 4659 const selectedOption = popup.querySelector('.gift-option-radio:checked'); 4660 if (selectedOption && selectedOption.value === 'custom') { 4661 const toField = document.getElementById('gift-card-to'); 4662 const fromField = document.getElementById('gift-card-from'); 4663 const messageField = document.getElementById('gift-card-message'); 4664 4665 const sender = fromField ? fromField.value.trim() : ''; 4666 const recipient = toField ? toField.value.trim() : ''; 4667 const giftMessage = messageField ? messageField.value.trim() : ''; 4668 4669 // Only save if at least one field has value 4670 if (sender || recipient || giftMessage) { 4671 const productId = state.currentGiftCardData?.productData?.id; 4672 saveGiftData(sender, recipient, giftMessage, productId); 4673 } 4674 } 4675 4676 popup.style.display = 'none'; 4677 document.body.style.overflow = ''; 4678 4679 // Reset form fields 4680 const inputs = popup.querySelectorAll('input:not([type="radio"]), textarea');
4681 inputs.forEach(input => input.value = ''); 4682 4683 // Reset to blank option 4684 const blankOption = popup.querySelector('.gift-option-radio[value="blank"]'); 4685 if (blankOption) { 4686 blankOption.checked = true; 4687 toggleCustomFields(); 4688 } 4689 4690 const charCounter = document.getElementById('gift-card-char-counter'); 4691 if (charCounter) { 4692 charCounter.textContent = '0/200'; 4693 charCounter.className = 'gift-card-popup__char-counter'; 4694 } 4695 4696 const saveBtn = popup.querySelector('.gift-card-popup__save'); 4697 if (saveBtn) { 4698 saveBtn.disabled = false; 4699 saveBtn.textContent = 'Save'; 4700 } 4701 4702 updateGiftPreview(); 4703 } 4704 state.currentGiftCardData = null; 4705 } 4706 4707 // Main widget check function 4708 function checkAndToggleUpsellWidget() { 4709 if (state.checkTimeout) { 4710 clearTimeout(state.checkTimeout); 4711 } 4712 state.checkTimeout = setTimeout(performCheck, CONFIG.DEBOUNCE_DELAY); 4713 } 4714 4715 function performCheck() { 4716 const upsellWidget = safeQuerySelector('[data-cart-upsell]'); 4717 if (!upsellWidget) { 4718 return; 4719 } 4720 4721 getCartData() 4722 .then(cart => { 4723 if (!cart) { 4724 console.warn('Cart data unavailable, skipping widget update'); 4725 return; 4726 } 4727 4728 const hasUpsellProduct1 = UPSELL_PRODUCT_ID_1 ? 4729 cart.items.some(item => item.product_id === UPSELL_PRODUCT_ID_1) : false; 4730 const hasUpsellProduct2 = UPSELL_PRODUCT_ID_2 ? 4731 cart.items.some(item => item.product_id === UPSELL_PRODUCT_ID_2) : false; 4732 4733 // Skip if state hasn't changed 4734 const currentState = `${hasUpsellProduct1}-${hasUpsellProduct2}-${cart.items.length}`; 4735 if (state.lastCartState === currentState) { 4736 return; 4737 } 4738 state.lastCartState = currentState; 4739 4740 // Check for qualifying products 4741 const hasQualifyingProducts = cart.items.some(item => { 4742 if (UPSELL_PRODUCT_ID_1 && item.product_id === UPSELL_PRODUCT_ID_1) return false; 4743 if (UPSELL_PRODUCT_ID_2 && item.product_id === UPSELL_PRODUCT_ID_2) return false; 4744 const sku = item.sku || ''; 4745 return sku.includes('CBS') || sku.includes('CBG'); 4746 }); 4747 4748 // Remove upsell items if no qualifying products 4749 if ((hasUpsellProduct1 || hasUpsellProduct2) && !hasQualifyingProducts) { 4750 removeUpsellProducts(cart, hasUpsellProduct1, hasUpsellProduct2); 4751 return; 4752 } 4753 4754 // Update card visibility 4755 updateCardVisibility(upsellWidget, hasUpsellProduct1, hasUpsellProduct2); 4756 }) 4757 .catch(err => { 4758 console.error('Error in performCheck:', err); 4759 }); 4760 } 4761 4762 function removeUpsellProducts(cart, hasProduct1, hasProduct2) { 4763 const removePromises = []; 4764 4765 if (hasProduct1) { 4766 const item1 = cart.items.find(item => item.product_id === UPSELL_PRODUCT_ID_1); 4767 if (item1 && window.theme?.cart?.changeItem) { 4768 removePromises.push( 4769 window.theme.cart.changeItem(item1.key, 0) 4770 .catch(err => console.error('Failed to remove upsell item 1:', err)) 4771 ); 4772 } 4773 } 4774 4775 if (hasProduct2) { 4776 const item2 = cart.items.find(item => item.product_id === UPSELL_PRODUCT_ID_2); 4777 if (item2 && window.theme?.cart?.changeItem) { 4778 removePromises.push( 4779 window.theme.cart.changeItem(item2.key, 0) 4780 .catch(err => console.error('Failed to remove upsell item 2:', err)) 4781 ); 4782 } 4783 } 4784 4785 if (removePromises.length > 0) { 4786 Promise.all(removePromises).then(() => { 4787 invalidateCartCache(); 4788 document.dispatchEvent(new CustomEvent('cart:build')); 4789 document.dispatchEvent(new CustomEvent('cart:updated')); 4790 }); 4791 } 4792 } 4793 4794 function updateCardVisibility(upsellWidget, hasUpsellProduct1, hasUpsellProduct2) { 4795 // Find cards in grid layout 4796 const card1 = UPSELL_PRODUCT_ID_1 ? 4797 safeQuerySelector(`.cart-upsell__cards [data-product-id="${UPSELL_PRODUCT_ID_1}"]`, upsellWidget) : null; 4798 const card2 = UPSELL_PRODUCT_ID_2 ? 4799 safeQuerySelector(`.cart-upsell__cards [data-product-id="${UPSELL_PRODUCT_ID_2}"]`, upsellWidget) : null; 4800 4801 // Count visible products 4802 const card1Visible = !hasUpsellProduct1 && (UPSELL_PRODUCT_ID_1 !== null); 4803 const card2Visible = !hasUpsellProduct2 && (UPSELL_PRODUCT_ID_2 !== null); 4804 const visibleCount = (card1Visible ? 1 : 0) + (card2Visible ? 1 : 0); 4805 4806 // Hide entire widget if both products are in cart 4807 if (hasUpsellProduct1 && hasUpsellProduct2) { 4808 upsellWidget.style.display = 'none'; 4809 return; 4810 } 4811 4812 // Update individual card visibility 4813 if (card1) { 4814 card1.style.display = hasUpsellProduct1 ? 'none' : 'block'; 4815 } 4816 if (card2) { 4817 card2.style.display = hasUpsellProduct2 ? 'none' : 'block'; 4818 } 4819 4820 // Show widget if at least one product is visible 4821 if (visibleCount > 0) { 4822 upsellWidget.style.display = 'block'; 4823 4824 // Update grid visibility 4825 const gridContainer = safeQuerySelector('.cart-upsell__cards', upsellWidget); 4826 if (gridContainer) { 4827 gridContainer.style.display = ''; 4828 } 4829 } else { 4830 // Hide widget if no products are visible 4831 upsellWidget.style.display = 'none'; 4832 } 4833 4834 // Update carousel after visibility changes 4835 if (upsellWidget.style.display !== 'none' && carouselState.carousel && carouselState.updateButtons) { 4836 requestAnimationFrame(() => { 4837 carouselState.updateButtons(); 4838 }); 4839 } 4840 } 4841 4842 function addVariantToCart(variantId, btn, giftCardPersonalization = null) { 4843 if (!variantId) return; 4844 4845 const btnElement = btn; 4846 if (btnElement) { 4847 btnElement.classList.add('btn--loading'); 4848 btnElement.disabled = true; 4849 } 4850 4851 const cartData = { 4852 id: parseInt(variantId, 10), 4853 quantity: 1 4854 }; 4855 4856 fetch('/cart/add.js', { 4857 method: 'POST', 4858 headers: { 4859 'Content-Type': 'application/json', 4860 'X-Requested-With': 'XMLHttpRequest' 4861 }, 4862 body: JSON.stringify(cartData), 4863 credentials: 'same-origin' 4864 }) 4865 .then(response => { 4866 if (!response.ok) { 4867 throw new Error('Add to cart failed: ' + response.status); 4868 } 4869 return response.json(); 4870 }) 4871 .then(data => { 4872 if (giftCardPersonalization) { 4873 const cartAttributes = { 4874 'recepient': giftCardPersonalization.to || '', 4875 'sender': giftCardPersonalization.from || '', 4876 'gift_note': giftCardPersonalization.message || '', 4877 'gift_option': giftCardPersonalization.option || 'custom' 4878 }; 4879 4880 return fetch('/cart/update.js', { 4881 method: 'POST', 4882 headers: { 4883 'Content-Type': 'application/json', 4884 'X-Requested-With': 'XMLHttpRequest' 4885 }, 4886 body: JSON.stringify({ attributes: cartAttributes }), 4887 credentials: 'same-origin' 4888 }).then(res => ({ response: res, productData: data })); 4889 } 4890 4891 return { response: { ok: true }, productData: data }; 4892 }) 4893 .then(({ response, productData }) => { 4894 if (!response.ok) { 4895 throw new Error('Cart attribute update failed'); 4896 } 4897 4898 invalidateCartCache(); 4899 4900 document.dispatchEvent(new CustomEvent('cart:build')); 4901 document.dispatchEvent(new CustomEvent('ajaxProduct:added', { 4902 detail: { product: productData } 4903 })); 4904 4905 setTimeout(() => { 4906 state.lastCartState = null; 4907 checkAndToggleUpsellWidget(); 4908 }, CONFIG.CART_UPDATE_DELAY); 4909 4910 if (giftCardPersonalization) { 4911 hideGiftCardPopup(); 4912 } 4913 }) 4914 .catch(err => { 4915 console.error('Upsell add-to-cart error:', err); 4916 alert('Failed to add item to cart. Please try again.'); 4917 }) 4918 .finally(() => { 4919 if (btnElement) { 4920 btnElement.classList.remove('btn--loading'); 4921 btnElement.disabled = false;
4922 } 4923 }); 4924 } 4925 4926 // Event handlers 4927 function handleUpsellButtonClick(e) { 4928 const btn = e.target.closest('.cart-upsell__card-button'); 4929 if (!btn) return; 4930 4931 e.preventDefault(); 4932 e.stopPropagation(); 4933 4934 const container = btn.closest('[data-upsell-form]'); 4935 const variantId = btn.getAttribute('data-variant-id') || 4936 (container && container.getAttribute('data-variant-id')); 4937 4938 if (!variantId) { 4939 console.error('No variant ID found'); 4940 return; 4941 } 4942 4943 const hasGiftPopup = container && container.getAttribute('data-has-gift-popup') === 'true'; 4944 4945 if (hasGiftPopup) { 4946 try { 4947 const productJsonElement = container.querySelector('[data-product-json]'); 4948 4949 if (!productJsonElement) { 4950 console.error('No product JSON element found'); 4951 addVariantToCart(variantId, btn); 4952 return; 4953 } 4954 4955 const productData = JSON.parse(productJsonElement.textContent); 4956 showGiftCardPopup(variantId, btn, productData); 4957 } catch (error) { 4958 console.error('Error parsing product data:', error); 4959 addVariantToCart(variantId, btn); 4960 } 4961 } else { 4962 addVariantToCart(variantId, btn); 4963 } 4964 } 4965 4966 function handlePopupClick(e) { 4967 const popup = document.getElementById('gift-card-popup'); 4968 if (!popup || popup.style.display === 'none') return; 4969 4970 if (e.target.classList.contains('gift-card-popup__overlay') || 4971 e.target.classList.contains('gift-card-popup__close') || 4972 e.target.classList.contains('gift-card-popup__cancel')) { 4973 hideGiftCardPopup(); 4974 return; 4975 } 4976 4977 if (e.target.classList.contains('gift-card-popup__save')) { 4978 if (!state.currentGiftCardData) return; 4979 4980 const saveBtn = e.target; 4981 const selectedOption = document.querySelector('.gift-option-radio:checked'); 4982 4983 if (!selectedOption) { 4984 alert('Please select a gift option.'); 4985 return; 4986 } 4987 4988 const giftOption = selectedOption.value; 4989 let personalization = null; 4990 4991 if (giftOption === 'blank') { 4992 // No personalization needed, send empty attributes 4993 personalization = { 4994 option: 'blank', 4995 to: '', 4996 from: '', 4997 message: '' 4998 }; 4999 } else if (giftOption === 'standard') { 5000 // Use standard message 5001 personalization = { 5002 option: 'standard', 5003 to: '', 5004 from: '', 5005 message: 'Enjoy this selection of Japanese snacks & products, a little treat from Japan to make your day special. Have a great day!' 5006 }; 5007 } else if (giftOption === 'custom') { 5008 // Get custom message fields 5009 const toField = document.getElementById('gift-card-to'); 5010 const fromField = document.getElementById('gift-card-from'); 5011 const messageField = document.getElementById('gift-card-message'); 5012 5013 const to = toField ? toField.value.trim() : ''; 5014 const from = fromField ? fromField.value.trim() : ''; 5015 const message = messageField ? messageField.value.trim() : ''; 5016 5017 // Validate all fields are filled for custom option 5018 if (!to || !from || !message) { 5019 alert('Please fill in all required fields for your custom message.'); 5020 return; 5021 } 5022 5023 personalization = { 5024 option: 'custom', 5025 to: to, 5026 from: from, 5027 message: message 5028 }; 5029 5030 // Save custom message to session storage 5031 const productId = state.currentGiftCardData?.productData?.id; 5032 saveGiftData(from, to, message, productId); 5033 } 5034 5035 saveBtn.disabled = true; 5036 saveBtn.textContent = 'Saving...'; 5037 5038 addVariantToCart( 5039 state.currentGiftCardData.variantId, 5040 state.currentGiftCardData.btn, 5041 personalization 5042 ); 5043 } 5044 } 5045 5046 function handleKeydown(e) { 5047 const popup = document.getElementById('gift-card-popup'); 5048 if (!popup || popup.style.display === 'none') return; 5049 5050 if (e.key === 'Escape') { 5051 hideGiftCardPopup(); 5052 } else if (e.key === 'Enter' && e.target.tagName !== 'TEXTAREA') { 5053 const saveBtn = popup.querySelector('.gift-card-popup__save'); 5054 if (saveBtn) { 5055 e.preventDefault(); 5056 saveBtn.click(); 5057 } 5058 } 5059 } 5060 5061 function handleInput(e) { 5062 if (e.target.id === 'gift-card-message') { 5063 const textarea = e.target; 5064 const charCounter = document.getElementById('gift-card-char-counter'); 5065 if (charCounter) { 5066 const currentLength = textarea.value.length; 5067 const maxLength = 200; 5068 5069 charCounter.textContent = `${currentLength}/${maxLength}`; 5070 charCounter.className = 'gift-card-popup__char-counter'; 5071 5072 if (currentLength >= maxLength) { 5073 charCounter.classList.add('error'); 5074 } else if (currentLength >= 180) { 5075 charCounter.classList.add('warning'); 5076 } 5077 } 5078 updateGiftPreview(); 5079 } else if (e.target.id === 'gift-card-to' || e.target.id === 'gift-card-from') { 5080 updateGiftPreview(); 5081 } 5082 } 5083 5084 // Optimized cart interaction handler 5085 const debouncedCartCheck = debounce(() => { 5086 invalidateCartCache(); 5087 state.lastCartState = null; 5088 checkAndToggleUpsellWidget(); 5089 }, 400); 5090 5091 function handleCartInteraction(e) { 5092 if (e.target.closest('[data-cart-remove]') || 5093 e.target.closest('[data-cart-quantity]') || 5094 e.target.closest('.cart__qty-button') || 5095 (e.target.type === 'number' && 5096 (e.target.closest('[data-cart-item]') || e.target.closest('.cart__item')))) { 5097 debouncedCartCheck(); 5098 } 5099 } 5100 5101 // Setup watchers 5102 function setupCartWatchers() { 5103 // Single consolidated event listener 5104 const cartEvents = ['cart:build', 'cart:updated', 'cart:change', 'ajaxProduct:added', 'cart:refresh']; 5105 const eventHandler = debounce(() => { 5106 invalidateCartCache(); 5107 state.lastCartState = null; 5108 checkAndToggleUpsellWidget(); 5109 }, CONFIG.DEBOUNCE_DELAY); 5110
5111 cartEvents.forEach(eventName => { 5112 document.addEventListener(eventName, eventHandler, { passive: true }); 5113 }); 5114 5115 // Optimized MutationObserver 5116 const cartContainer = safeQuerySelector('.cart__items') || 5117 safeQuerySelector('[data-cart-items]') || 5118 safeQuerySelector('.cart-drawer') || 5119 safeQuerySelector('.cart'); 5120 5121 if (cartContainer) { 5122 const debouncedMutationCheck = debounce(() => { 5123 invalidateCartCache(); 5124 state.lastCartState = null; 5125 checkAndToggleUpsellWidget(); 5126 }, CONFIG.MUTATION_DEBOUNCE); 5127 5128 const observer = new MutationObserver(mutations => { 5129 const hasRelevantChanges = mutations.some(mutation => 5130 mutation.type === 'childList' && 5131 (mutation.addedNodes.length > 0 || mutation.removedNodes.length > 0) 5132 ); 5133 5134 if (hasRelevantChanges) { 5135 debouncedMutationCheck(); 5136 } 5137 }); 5138 5139 observer.observe(cartContainer, { 5140 childList: true, 5141 subtree: true 5142 }); 5143 } 5144 5145 // Visibility change check (only when tab is visible) 5146 if (typeof document.hidden !== 'undefined') { 5147 document.addEventListener('visibilitychange', () => { 5148 if (!document.hidden) { 5149 invalidateCartCache(); 5150 checkAndToggleUpsellWidget(); 5151 } 5152 }, { passive: true }); 5153 } 5154 5155 // Reduced interval for periodic checks 5156 state.visibilityCheckInterval = setInterval(() => { 5157 if (!document.hidden) { 5158 checkAndToggleUpsellWidget(); 5159 } 5160 }, CONFIG.VISIBILITY_CHECK_INTERVAL); 5161 } 5162 5163 // Initialize 5164 function init() { 5165 if (state.isInitialized) return; 5166 state.isInitialized = true; 5167 5168 // Setup all event listeners 5169 document.addEventListener('click', handleUpsellButtonClick); 5170 document.addEventListener('click', handlePopupClick); 5171 document.addEventListener('click', handleCartInteraction); 5172 document.addEventListener('keydown', handleKeydown); 5173 document.addEventListener('input', handleInput, { passive: true }); 5174 5175 // Setup gift option radio button listeners 5176 const giftOptions = document.querySelectorAll('.gift-option-radio'); 5177 giftOptions.forEach(option => { 5178 option.addEventListener('change', toggleCustomFields); 5179 }); 5180 5181 // Initial check and setup watchers 5182 setTimeout(() => { 5183 checkAndToggleUpsellWidget(); 5184 setupCartWatchers(); 5185 initCarousel(); 5186 }, CONFIG.INITIAL_CHECK_DELAY); 5187 5188 // Also initialize carousel when widget becomes visible 5189 const observer = new MutationObserver(() => { 5190 const upsellWidget = safeQuerySelector('[data-cart-upsell]'); 5191 if (upsellWidget && upsellWidget.style.display !== 'none' && !carouselState.isInitialized) { 5192 setTimeout(initCarousel, 100); 5193 } 5194 }); 5195 5196 const upsellWidget = safeQuerySelector('[data-cart-upsell]'); 5197 if (upsellWidget) { 5198 observer.observe(upsellWidget, { 5199 attributes: true, 5200 attributeFilter: ['style'] 5201 }); 5202 } 5203 } 5204 5205 // Start when DOM is ready 5206 if (document.readyState === 'loading') { 5207 document.addEventListener('DOMContentLoaded', init); 5208 } else { 5209 init(); 5210 } 5211 5212 // Cleanup on page unload 5213 window.addEventListener('beforeunload', () => { 5214 if (state.visibilityCheckInterval) { 5215 clearInterval(state.visibilityCheckInterval); 5216 } 5217 if (state.checkTimeout) { 5218 clearTimeout(state.checkTimeout); 5219 } 5220 }); 5221 })(); 5222</script>
5222 5223 5224 5225 5226 5227 5228<div class="main-new-reviews-align" role="region" aria-roledescription="carousel" aria-label="Customer reviews"> 5229 <div class="swiper mySwiper"> 5230 <div class="swiper-wrapper"> 5231 5232 5233<div 5234 class="swiper-slide" 5235 role="group" 5236 aria-roledescription="slide" 5237 aria-label="Review 1 of 5" 5238 > 5239 <div class="main-cart-review-align"> 5240 <span class="visually-hidden">Rated 5 out of 5 stars.</span> 5241 <div class="cart__reviews-stars" aria-hidden="true"> 5242 5243 <div class="star-icon"> 5244 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5245 <defs> 5246 <linearGradient id="halfWhite"> 5247 <stop offset="100%" stop-color="#b73d09"></stop> 5248 </linearGradient> 5249 </defs> 5250 <path 5251 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5252 stroke="#b73d09" fill="url(#halfWhite)"></path> 5253 </svg> 5254 </div> 5255 5256 5257 5258 <div class="star-icon"> 5259 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5260 <defs> 5261 <linearGradient id="halfWhite"> 5262 <stop offset="100%" stop-color="#b73d09"></stop> 5263 </linearGradient> 5264 </defs> 5265 <path 5266 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5267 stroke="#b73d09" fill="url(#halfWhite)"></path> 5268 </svg> 5269 </div> 5270 5271 5272 5273 <div class="star-icon"> 5274 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5275 <defs> 5276 <linearGradient id="halfWhite"> 5277 <stop offset="100%" stop-color="#b73d09"></stop> 5278 </linearGradient> 5279 </defs> 5280 <path 5281 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5282 stroke="#b73d09" fill="url(#halfWhite)"></path> 5283 </svg> 5284 </div> 5285 5286 5287 5288 <div class="star-icon"> 5289 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5290 <defs> 5291 <linearGradient id="halfWhite"> 5292 <stop offset="100%" stop-color="#b73d09"></stop> 5293 </linearGradient> 5294 </defs> 5295 <path 5296 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5297 stroke="#b73d09" fill="url(#halfWhite)"></path> 5298 </svg> 5299 </div> 5300 5301 5302 5303 <div class="star-icon"> 5304 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5305 <defs> 5306 <linearGradient id="halfWhite"> 5307 <stop offset="100%" stop-color="#b73d09"></stop> 5308 </linearGradient> 5309 </defs> 5310 <path 5311 d="M9 14.118L14.562 17.475L13.086 11.
5311148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5312 stroke="#b73d09" fill="url(#halfWhite)"></path> 5313 </svg> 5314 </div> 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 </div> 5330 <div class="cart__reviews-text" 5331 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_text"> 5332 <p> 5333 The entire experience from ordering to following along on the shipping route and any interactions I had with you have been just great! Not to mention that the products are different to our palette making them exotic and very tasty! 5334 </p> 5335 </div> 5336 <div class="cart_reviews-author-buyer"> 5337 <span class="cart__reviews-author" 5338 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_author">Alena Z.</span> 5339 <span class="verified-buyer" 5340 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_title">Verified Buyer</span> 5341 </div> 5342 </div> 5343 </div> 5344 5345 5346<div 5347 class="swiper-slide" 5348 role="group" 5349 aria-roledescription="slide" 5350 aria-label="Review 2 of 5" 5351 > 5352 <div class="main-cart-review-align"> 5353 <span class="visually-hidden">Rated 5 out of 5 stars.</span> 5354 <div class="cart__reviews-stars" aria-hidden="true"> 5355 5356 <div class="star-icon"> 5357 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5358 <defs> 5359 <linearGradient id="halfWhite"> 5360 <stop offset="100%" stop-color="#b73d09"></stop> 5361 </linearGradient> 5362 </defs> 5363 <path 5364 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5365 stroke="#b73d09" fill="url(#halfWhite)"></path> 5366 </svg> 5367 </div> 5368 5369 5370 5371 <div class="star-icon"> 5372 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5373 <defs> 5374 <linearGradient id="halfWhite"> 5375 <stop offset="100%" stop-color="#b73d09"></stop> 5376 </linearGradient> 5377 </defs> 5378 <path 5379 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5380 stroke="#b73d09" fill="url(#halfWhite)"></path> 5381 </svg> 5382 </div> 5383 5384 5385 5386 <div class="star-icon"> 5387 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5388 <defs> 5389 <linearGradient id="halfWhite"> 5390 <stop offset="100%" stop-color="#b73d09"></stop> 5391 </linearGradient> 5392 </defs> 5393 <path 5394 d="M9 14.118L14.562 17.475L13.086 11.
5394148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5395 stroke="#b73d09" fill="url(#halfWhite)"></path> 5396 </svg> 5397 </div> 5398 5399 5400 5401 <div class="star-icon"> 5402 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5403 <defs> 5404 <linearGradient id="halfWhite"> 5405 <stop offset="100%" stop-color="#b73d09"></stop> 5406 </linearGradient> 5407 </defs> 5408 <path 5409 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5410 stroke="#b73d09" fill="url(#halfWhite)"></path> 5411 </svg> 5412 </div> 5413 5414 5415 5416 <div class="star-icon"> 5417 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5418 <defs> 5419 <linearGradient id="halfWhite"> 5420 <stop offset="100%" stop-color="#b73d09"></stop> 5421 </linearGradient> 5422 </defs> 5423 <path 5424 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5425 stroke="#b73d09" fill="url(#halfWhite)"></path> 5426 </svg> 5427 </div> 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 </div> 5443 <div class="cart__reviews-text" 5444 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_text"> 5445 <p> 5446 What a pretty box. The packaging of all the goodies was excellent. The brochure was a joy to handle and read. Iâm gifting it to my son and wife when I visit them! 5447 </p> 5448 </div> 5449 <div class="cart_reviews-author-buyer"> 5450 <span class="cart__reviews-author" 5451 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_author">Maribet U.</span> 5452 <span class="verified-buyer" 5453 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_title">Verified Buyer</span> 5454 </div> 5455 </div> 5456 </div> 5457 5458 5459<div 5460 class="swiper-slide" 5461 role="group" 5462 aria-roledescription="slide" 5463 aria-label="Review 3 of 5" 5464 > 5465 <div class="main-cart-review-align"> 5466 <span class="visually-hidden">Rated 5 out of 5 stars.</span> 5467 <div class="cart__reviews-stars" aria-hidden="true"> 5468 5469 <div class="star-icon"> 5470 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5471 <defs> 5472 <linearGradient id="halfWhite"> 5473 <stop offset="100%" stop-color="#b73d09"></stop> 5474 </linearGradient> 5475 </defs> 5476 <path 5477 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5478 stroke="#b73d09" fill="url(#halfWhite)"></path> 5479 </svg> 5480 </div> 5481 5482 5483 5484 <div class="star-icon"> 5485 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5486 <defs> 5487 <linearGradient id="halfWhite"> 5488 <stop offset="100%" stop-color="#b73d09"></stop> 5489 </linearGradient> 5490 </defs> 5491 <path 5492 d="M9 14.118L14.562 17.475L13.086 11.
5492148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5493 stroke="#b73d09" fill="url(#halfWhite)"></path> 5494 </svg> 5495 </div> 5496 5497 5498 5499 <div class="star-icon"> 5500 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5501 <defs> 5502 <linearGradient id="halfWhite"> 5503 <stop offset="100%" stop-color="#b73d09"></stop> 5504 </linearGradient> 5505 </defs> 5506 <path 5507 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5508 stroke="#b73d09" fill="url(#halfWhite)"></path> 5509 </svg> 5510 </div> 5511 5512 5513 5514 <div class="star-icon"> 5515 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5516 <defs> 5517 <linearGradient id="halfWhite"> 5518 <stop offset="100%" stop-color="#b73d09"></stop> 5519 </linearGradient> 5520 </defs> 5521 <path 5522 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5523 stroke="#b73d09" fill="url(#halfWhite)"></path> 5524 </svg> 5525 </div> 5526 5527 5528 5529 <div class="star-icon"> 5530 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5531 <defs> 5532 <linearGradient id="halfWhite"> 5533 <stop offset="100%" stop-color="#b73d09"></stop> 5534 </linearGradient> 5535 </defs> 5536 <path 5537 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5538 stroke="#b73d09" fill="url(#halfWhite)"></path> 5539 </svg> 5540 </div> 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 </div> 5556 <div class="cart__reviews-text" 5557 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_text"> 5558 <p> 5559 Excellent range of sweet and savoury with familiar and unique flavours. The box provides insight into Japan and its small family businesses delivered in a reasonable time to my small town. 5560 </p> 5561 </div> 5562 <div class="cart_reviews-author-buyer"> 5563 <span class="cart__reviews-author" 5564 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_author">Ross F.</span> 5565 <span class="verified-buyer" 5566 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_title">Verified Buyer</span> 5567 </div> 5568 </div> 5569 </div> 5570 5571 5572<div 5573 class="swiper-slide" 5574 role="group" 5575 aria-roledescription="slide" 5576 aria-label="Review 4 of 5" 5577 > 5578 <div class="main-cart-review-align">
5579 <span class="visually-hidden">Rated 5 out of 5 stars.</span> 5580 <div class="cart__reviews-stars" aria-hidden="true"> 5581 5582 <div class="star-icon"> 5583 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5584 <defs> 5585 <linearGradient id="halfWhite"> 5586 <stop offset="100%" stop-color="#b73d09"></stop> 5587 </linearGradient> 5588 </defs> 5589 <path 5590 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5591 stroke="#b73d09" fill="url(#halfWhite)"></path> 5592 </svg> 5593 </div> 5594 5595 5596 5597 <div class="star-icon"> 5598 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5599 <defs> 5600 <linearGradient id="halfWhite"> 5601 <stop offset="100%" stop-color="#b73d09"></stop> 5602 </linearGradient> 5603 </defs> 5604 <path 5605 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5606 stroke="#b73d09" fill="url(#halfWhite)"></path> 5607 </svg> 5608 </div> 5609 5610 5611 5612 <div class="star-icon"> 5613 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5614 <defs> 5615 <linearGradient id="halfWhite"> 5616 <stop offset="100%" stop-color="#b73d09"></stop> 5617 </linearGradient> 5618 </defs> 5619 <path 5620 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5621 stroke="#b73d09" fill="url(#halfWhite)"></path> 5622 </svg> 5623 </div> 5624 5625 5626 5627 <div class="star-icon"> 5628 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5629 <defs> 5630 <linearGradient id="halfWhite"> 5631 <stop offset="100%" stop-color="#b73d09"></stop> 5632 </linearGradient> 5633 </defs> 5634 <path 5635 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5636 stroke="#b73d09" fill="url(#halfWhite)"></path> 5637 </svg> 5638 </div> 5639 5640 5641 5642 <div class="star-icon"> 5643 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5644 <defs> 5645 <linearGradient id="halfWhite"> 5646 <stop offset="100%" stop-color="#b73d09"></stop> 5647 </linearGradient> 5648 </defs> 5649 <path 5650 d="M9 14.118L14.562 17.475L13.086 11.
5650148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5651 stroke="#b73d09" fill="url(#halfWhite)"></path> 5652 </svg> 5653 </div> 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 </div> 5669 <div class="cart__reviews-text" 5670 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_text"> 5671 <p> 5672 This subscription box is AMAZING! Everything from the way itâs packed to the quality and the taste! Itâs a fun way to experience authentic Japanese snack food without going to Japan! 5673 </p> 5674 </div> 5675 <div class="cart_reviews-author-buyer"> 5676 <span class="cart__reviews-author" 5677 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_author">Gabriel A.</span> 5678 <span class="verified-buyer" 5679 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_title">Verified Buyer</span> 5680 </div> 5681 </div> 5682 </div> 5683 5684 5685<div 5686 class="swiper-slide" 5687 role="group" 5688 aria-roledescription="slide" 5689 aria-label="Review 5 of 5" 5690 > 5691 <div class="main-cart-review-align"> 5692 <span class="visually-hidden">Rated 5 out of 5 stars.</span> 5693 <div class="cart__reviews-stars" aria-hidden="true"> 5694 5695 <div class="star-icon"> 5696 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5697 <defs> 5698 <linearGradient id="halfWhite"> 5699 <stop offset="100%" stop-color="#b73d09"></stop> 5700 </linearGradient> 5701 </defs> 5702 <path 5703 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5704 stroke="#b73d09" fill="url(#halfWhite)"></path> 5705 </svg> 5706 </div> 5707 5708 5709 5710 <div class="star-icon"> 5711 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5712 <defs> 5713 <linearGradient id="halfWhite"> 5714 <stop offset="100%" stop-color="#b73d09"></stop> 5715 </linearGradient> 5716 </defs> 5717 <path 5718 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5719 stroke="#b73d09" fill="url(#halfWhite)"></path> 5720 </svg> 5721 </div> 5722 5723 5724 5725 <div class="star-icon"> 5726 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5727 <defs> 5728 <linearGradient id="halfWhite"> 5729 <stop offset="100%" stop-color="#b73d09"></stop> 5730 </linearGradient> 5731 </defs> 5732 <path 5733 d="M9 14.118L14.562 17.475L13.086 11.
5733148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5734 stroke="#b73d09" fill="url(#halfWhite)"></path> 5735 </svg> 5736 </div> 5737 5738 5739 5740 <div class="star-icon"> 5741 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5742 <defs> 5743 <linearGradient id="halfWhite"> 5744 <stop offset="100%" stop-color="#b73d09"></stop> 5745 </linearGradient> 5746 </defs> 5747 <path 5748 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5749 stroke="#b73d09" fill="url(#halfWhite)"></path> 5750 </svg> 5751 </div> 5752 5753 5754 5755 <div class="star-icon"> 5756 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5757 <defs> 5758 <linearGradient id="halfWhite"> 5759 <stop offset="100%" stop-color="#b73d09"></stop> 5760 </linearGradient> 5761 </defs> 5762 <path 5763 d="M9 14.118L14.562 17.475L13.086 11.148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5764 stroke="#b73d09" fill="url(#halfWhite)"></path> 5765 </svg> 5766 </div> 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 </div> 5782 <div class="cart__reviews-text" 5783 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_text"> 5784 <p> 5785 Iâve subscribed to different snack crates over the years and Bokksu blows them all away! I always look forward to it arriving every month and the quality of snacks is outstanding. You can tell these snacks are made fresh and with love! 5786 </p> 5787 </div> 5788 <div class="cart_reviews-author-buyer"> 5789 <span class="cart__reviews-author" 5790 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_author">Amethyst B.</span> 5791 <span class="verified-buyer" 5792 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_title">Verified Buyer</span> 5793 </div> 5794 </div> 5795 </div> 5796 5797 5798</div> 5799<div class="swiper-pagination"></div> 5800</div> 5801</div> 5802<!-- Initialize Swiper -->
5803<script> 5804 var swiperReviews = new Swiper(".mySwiper", { 5805 slidesPerView: 1.2, 5806 spaceBetween: 14, 5807 initialSlide: 1, 5808 loop: true, 5809 centeredSlides: true, 5810 pagination: { 5811 el: ".swiper-pagination", 5812 clickable: true, 5813 }, 5814 on: { 5815 init: function () { 5816 if (this.slides.length <= 2) { 5817 this.params.loop = false; // Disable loop mode if there are only 2 slides 5818 } 5819 syncReviewsA11y(this); 5820 labelReviewsPagination(this); 5821 }, 5822 slideChange: function () { 5823 syncReviewsA11y(this); 5824 } 5825 } 5826 }); 5827 5828 // a11y: APG â hide non-active slides from AT. Loop-safe (value-guarded). 5829 function syncReviewsA11y(swiper) { 5830 var slides = swiper.el.querySelectorAll('.swiper-slide'); 5831 for (var i = 0; i < slides.length; i++) { 5832 var isActive = slides[i].classList.contains('swiper-slide-active'); 5833 var target = isActive ? 'false' : 'true'; 5834 if (slides[i].getAttribute('aria-hidden') !== target) { 5835 slides[i].setAttribute('aria-hidden', target); 5836 } 5837 // Hide duplicates (loop clones) from AT always â original slide carries the label 5838 if (slides[i].classList.contains('swiper-slide-duplicate')) { 5839 if (slides[i].getAttribute('aria-hidden') !== 'true') { 5840 slides[i].setAttribute('aria-hidden', 'true'); 5841 } 5842 } 5843 } 5844 } 5845 function labelReviewsPagination(swiper) { 5846 setTimeout(function () { 5847 var bullets = swiper.el.querySelectorAll('.swiper-pagination-bullet'); 5848 for (var i = 0; i < bullets.length; i++) { 5849 var label = 'Go to review ' + (i + 1); 5850 if (bullets[i].getAttribute('aria-label') !== label) { 5851 bullets[i].setAttribute('aria-label', label); 5852 } 5853 } 5854 }, 100); 5855 } 5856</script>
5856 5857 5858<style> 5859 .main-cart-review-align { 5860 padding: 16px; 5861 background: #ffffff; 5862 } 5863 5864 .main-new-reviews-align { 5865 margin: 15px -20px; 5866 } 5867 5868 .main-new-reviews-align .mySwiper { 5869 padding-bottom: 40px; 5870 } 5871 5872 .cart_reviews-author-buyer { 5873 display: flex; 5874 align-items: center; 5875 gap: 6px; 5876 } 5877 5878 .cart__reviews-stars .star-icon svg { 5879 width: 16px; 5880 height: 16px; 5881 display: block; 5882 } 5883 5884 .cart__reviews-stars { 5885 display: flex; 5886 gap: 5px; 5887 } 5888 5889 .cart__reviews-author { 5890 font-family: 'Lato'; 5891 font-size: 15px; 5892 font-weight: 600; 5893 line-height: 16.8px; 5894 letter-spacing: 0.15em; 5895 text-align: left; 5896 margin: 0 !important; 5897 color: #242426; 5898 text-transform: uppercase !important; 5899 } 5900 5901 .cart__reviews-text p { 5902 margin: 0 !important; 5903 min-height: 60px; 5904 display: -webkit-box; 5905 -webkit-line-clamp: 3; 5906 -webkit-box-orient: vertical; 5907 overflow: hidden; 5908 } 5909 5910 .cart__reviews-text { 5911 padding: 10px 0; 5912 color: #242426; 5913 font-family: Lato; 5914 font-size: 16px; 5915 font-weight: 400; 5916 line-height: 19.5px; 5917 letter-spacing: 0.02em; 5918 text-align: left; 5919 overflow: hidden; 5920 display: -webkit-box; 5921 -webkit-line-clamp: 3; 5922 -webkit-box-orient: horizontal; 5923 } 5924 5925 .verified-buyer { 5926 font-family: Lato; 5927 font-size: 14px; 5928 font-weight: 400; 5929 line-height: 18px; 5930 letter-spacing: 0.02em; 5931 text-align: left; 5932 color: #24242680; 5933 } 5934 5935 .mobile-dots { 5936 display: flex; 5937 align-items: center; 5938 justify-content: center; 5939 } 5940 5941 .mobile-dots button { 5942 background: none; 5943 border: none; 5944 display: inline-block; 5945 cursor: pointer; 5946 } 5947 5948 .mobile-arrows { 5949 margin-top: 32px; 5950 padding-bottom: 10px; 5951 } 5952 5953 .mini-cart-reviews { 5954 display: none !important; 5955 } 5956 5957 .mini-cart-reviews .button-circle { 5958 display: inline-block; 5959 width: 8px; 5960 height: 8px; 5961 border: 1px solid black; 5962 border-radius: 50%; 5963 } 5964 5965 .mini-cart-reviews .button-circle.active { 5966 background-color: black; 5967 } 5968 5969 5970 .mini-cart-reviews { 5971 padding-bottom: 34px; 5972 } 5973 5974 @media screen and (max-width: 767px) { 5975 .cart__reviews-text { 5976 font-size: 13px; 5977 } 5978 5979 .cart__reviews-author, 5980 .verified-buyer { 5981 font-size: 12px !important; 5982 } 5983 5984 .main-cart-review-align { 5985 padding: 16px; 5986 background: #ffffff; 5987 } 5988 5989 .cart__reviews-text p { 5990 -webkit-line-clamp: 3; 5991 min-height: 60px; 5992 } 5993 } 5994</style> 5995 5996 5997 </div> 5998 5999 6000 <div class="cart__footer"> 6001 <div 6002 class="cart__item-sub cart__item-row cart__item--subtotal" 6003 id="focus-subtotal"> 6004 <div id="subtotal-text">Subtotal</div> 6005 <div data-subtotal id="price-text"> 6006 $0.00 6007 </div> 6008 </div> 6009 <input 6010 hidden 6011 id="total-price" 6012 value="0"> 6013 <div data-discounts></div> 6014 6015 6016<div class="cart_savings d-none "> 6017<span> You Saved </span> 6018 6019<span class="cart_savings_amount d-none "> $0.00</span> 6020 </div> 6021 6022 6023 <div class="cart__item-row cart__checkout-wrapper payment-buttons"> 6024 6025 <div class="checkout-btn-class"> 6026 <button 6027 type="submit" 6028 name="checkout" 6029 data-terms-required="false" 6030 class="btn btn-custom btn-orange-bg cart__checkout cart__checkout_enabled"> 6031 Checkout 6032 </button> 6033 </div> 6034 6035 6036 </div> 6037 6038 <div class="cart__item-row--footer text-center"> 6039 <small class="shipping-at-checkout-text">Shipping, taxes and discounts calculated at checkout </small> 6040 </div> 6041 </div> 6042</form> 6043 6044 6045 6046 6047 <div class="empty-cart-main"> 6048 <h2 class="empty-cart-title">your cart is empty</h2> 6049 6050 <div class="empty-cart-img"> 6051 <svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewB
6051ox="0 0 200 200" fill="none" aria-hidden="true" focusable="false"> 6052 <path d="M179.733 16.8L87.0667 15.3333C86.4 15.3333 85.8667 15.8 85.7333 16.4L74 31.5333C73.5333 32.1333 73.6667 32.9333 74.2667 33.4C74.8667 33.8667 75.6667 33.7333 76.1333 33.1333L86.0667 20.3333L92.3333 53.8L67.8667 41.4C67.5333 41.2 67.1333 41.2 66.8 41.3333C66.4667 41.4667 66.2 41.7333 66 42.0667L42.2667 98C42 98.6667 42.2667 99.4 42.9333 99.7333L67.9333 111.867L29.4 125C28.7333 125.267 28.3333 126 28.6 126.667C28.8667 127.333 29.6 127.733 30.2667 127.467L71.6 113.333L164.2 120.067L122.8 138.467L99.6 136.733C98.8667 136.667 98.2 137.2 98.2 137.933C98.1333 138.667 98.6667 139.333 99.4 139.333L122.933 141.067H123C123.2 141.067 123.4 141 123.533 140.933L165.267 122.4C165.533 122.267 165.733 122.067 165.867 121.867L165.533 158.533L124.2 180.933L124.6 143.2C124.6 142.467 124 141.867 123.267 141.867C122.533 141.867 121.933 142.467 121.933 143.2L121.533 183.2C121.533 183.667 121.8 184.133 122.2 184.333C122.4 184.467 122.667 184.533 122.867 184.533C123.067 184.533 123.333 184.467 123.533 184.4L167.533 160.533C167.933 160.333 168.2 159.867 168.2 159.4L168.6 119.133L183.867 57.4L184 56.6667L184.067 56.4667C184.133 56.2667 184.067 56 184 55.8L180.867 18.8C181 18.6 181.067 18.4 181.067 18.1333C181.067 17.4 180.467 16.8 179.733 16.8ZM134.8 103.867L160.8 117.2L73.3333 110.867L95.0667 57.6L140.467 58.2667C141.2 58.2667 141.8 57.6667 141.8 56.9333C141.8 56.2 141.2 55.6 140.467 55.6L95.2 54.9333L88.3333 18L176.467 19.4L156.133 40.8667C155.6 41.4 155.667 42.2667 156.2 42.7333C156.733 43.2667 157.6 43.2 158.067 42.6667L178.4 21.2L181.2 54.3333L154.333 46.6667C153.667 46.4667 152.933 46.8667 152.733 47.5333L149.667 56.5333L134.133 102.333C133.933 102.933 134.2 103.6 134.8 103.867ZM67.9333 44.4L92.4667 56.8667L70.7333 110.267L45.2667 97.8667L67.9333 44.4ZM166.333 117.067L137 102.067L152.133 57.4L154.8 49.6L181.133 57.2L166.333 117.067Z" fill="#B73D09"/> 6053 <path d="M18.2 131.533C17.9333 131.8 17.8 132.133 17.8 132.533L17.3333 176.4C17.3333 177.133 17.8667 177.667 18.6 177.733C19.4667 177.8 105.733 183.267 110 183.533H110.067C110.8 183.533 111.333 183 111.4 182.267C111.467 181.533 110.867 180.933 110.133 180.867C106.2 180.667 30.7333 175.867 20 175.133L20.4667 133.933L87.7333 139.133C88.4667 139.2 89.1333 138.667 89.1333 137.933C89.2 137.2 88.6667 136.533 87.9333 136.533L19.2 131.267C18.8 131.2 18.4667 131.333 18.2 131.533Z" fill="#B73D09"/> 6054 </svg> 6055 </div><div class="subscribe-now-btn"> 6056 <a class="btn btn-custom btn--full btn-height btn-orange-bg" 6057 href="https://www.bokksu.com/products/classic-bokksu">Subscribe Now</a> 6058 </div> 6059</div> 6060 <style> 6061 .subscribe-now-btn{ 6062 margin-top: 40px; 6063 } 6064 .site-header__drawer-animate.is-empty { 6065 background: var(--colorWhite) !important; 6066 } 6067 .is-empty .empty-cart-main{ 6068 display: flex; 6069 } 6070 .btn-height{ 6071 height:48px !important; 6072 width: 320px !important; 6073 } 6074 .empty-cart-main{ 6075 display: none; 6076 /* width: 600px; */ 6077 padding-bottom: 0px; 6078 flex-direction: column; 6079 align-items: center; 6080 /* gap: 56px; */ 6081 justify-content: center; 6082 background-color: white; 6083 } 6084 .empty-cart { 6085 padding-bottom: 0 !important; 6086 } 6087 .empty-cart-title{ 6088 font-family: "Montserrat", sans-serif; 6089 font-size: 14px !important; 6090 font-style: normal; 6091 font-weight: 500; 6092 line-height: 18px!important; 6093 letter-spacing: 5px; 6094 text-transform: uppercase !important; 6095 margin-top: 56px; 6096 color: #828282; 6097 margin-bottom: 56px; 6098 } 6099 6100 .empty-cart-img{ 6101 display: flex; 6102 width: 260px; 6103 height: 260px; 6104 justify-content: center; 6105 align-items: center; 6106 gap: 8px; 6107 background: #F4EEE5; 6108 border-radius: 50%; 6109 } 6110 .empty-cart-img svg { 6111 width: 160px; 6112 height: 160px; 6113 } 6114 p.f-shipping-text { 6115 text-align: center; 6116 font-family: Lato; 6117 font-size: 16px; 6118 font-style: normal; 6119 font-weight: 400; 6120 line-height: 24px; 6121 letter-spacing: 0.5px; 6122 margin-top: 32px; 6123 margin-bottom: 32px; 6124 color: #828282; 6125 visibility:hidden; 6126 } 6127 6128 .subscribe-now-btn .btn.btn-custom.btn-orange-bg{ 6129 line-height: 22px !important; 6130 } 6131 6132 6133 6134 6135 .gift-products-certificate-empty-cart { 6136 padding: 6px 10px; 6137 } 6138 6139 6140 .align-close-btn-main { 6141 flex: 1 1 auto; 6142 display: flex; 6143 } 6144 6145 @media screen and (min-width:850px) { 6146 .align-main-cart-customer.adjust-mob-cart.cart-empty{ 6147 6148 display: block; 6149 width: 100%; 6150 overflow: scroll; 6151 }
6152 .site-header__drawer-animate.is-empty{ 6153 width: 100% !important; 6154 overflow: auto; 6155 max-width: 100% !important 6156 } 6157 /* .empty-cart-main{ 6158 padding-bottom: 3em; 6159 } */ 6160 /* #HeaderCart{ 6161 overflow: scroll; 6162 } */ 6163 } 6164 @media screen and (max-width:849px) { 6165 .empty-cart-main{ 6166 padding-bottom: 3em; 6167 } 6168 } 6169 6170 @media screen and (max-width: 680px) { 6171 .empty-cart-img { 6172 width: 240px; 6173 height: 240px; 6174 } 6175 .empty-cart-img svg { 6176 width: 150px; 6177 height: 150px; 6178 } 6179 .empty-cart-title { 6180 margin-top: 40px; 6181 margin-bottom: 40px; 6182 } 6183 .header-wrapper--compressed .empty-cart-title { 6184 margin-top: 54px; 6185 margin-bottom: 54px; 6186 } 6187 .empty-cart-main { 6188 padding-bottom: 3.33em; 6189 } 6190 .is-empty .empty-cart-main , .is-empty.site-header__drawer-animate , .empty-cart .align-main-cart-customer , 6191 .align-main-cart-customer.adjust-mob-cart.empty-cart { 6192 height: 100% !important; 6193 } 6194 /* .mob-cart-align { 6195 height: 100vh !important; 6196 } */ 6197 .empty-cart .empty-cart-main { 6198 justify-content: flex-start; 6199 } 6200 } 6201 6202 /* #HeaderCartTrigger.cart-empty{ 6203 padding-bottom: 26px !important; 6204 } */ 6205 .main-free-gift-empty-cart { 6206 padding: 20px 20px 0; 6207 } 6208 6209 6210 .is-empty .main-progress-bar-with-markups.main-bar-align { 6211 display: none; 6212 } 6213 6214</style> 6215 6216 6217 6218 6219 6220 6221<div class="empty-cart-main-products d-none"> 6222 <p class="empty-text">your cart is empty</p> 6223 6224 <div class="empty-cart-container"> 6225 <h2 class="picks-text">popular picks</h2> 6226 <div id="empty-cart-rebuy-products"></div> 6227 <div class="discover-more-btn"> 6228 <a class="btn btn-custom btn-light-green-bg" href="https://www.bokksumarket.com/collections/all-products">discover more</a> 6229 </div> 6230 </div> 6231</div> 6232 6233<!-- <div class="site-header__cart-empty" tabindex="0">Your cart is currently empty, please take a look at our collection page for delicious snack to add.</div> --> 6234<style> 6235 .main-dualcart.subscription-product-container + .gift-subscription-container { 6236 margin-top: 20px; 6237} 6238 /* Empty Cart Design for Products Css starts */ 6239 .cart_savings{ 6240 display: flex; 6241 justify-content: space-between; 6242 margin-bottom: 20px; 6243 } 6244 .cart_savings span{ 6245 color:#EC1C24; 6246 font-weight: 700; 6247 } 6248 6249 .is-empty .empty-cart-main-products { 6250 display: block 6251 } 6252 .empty-cart-main-products { 6253 padding: 0 40px 64px; 6254 display: none 6255 } 6256 .img-height { 6257 height: 56px 6258 } 6259 .empty-cart-rebuy-products { 6260 display: flex; 6261 flex-wrap: wrap; 6262 justify-content: end; 6263 line-height: 1.4; 6264 margin-top: 8px; 6265 } 6266 .free-gift-img img { 6267 width: 70px !important; 6268 height: 70px !important; 6269 } 6270 .free-gift-img { 6271 min-width: 70px !important; 6272 min-height: 70px !important; 6273 } 6274 .align-name-free-gift { 6275 margin-right: 10px; 6276 } 6277 .free-gift-titles { 6278 overflow: hidden; 6279 text-overflow: ellipsis; 6280 display: -webkit-box; 6281 -webkit-line-clamp: 2; 6282 -webkit-box-orient: vertical; 6283 } 6284 .gift-free-add-btn button { 6285 font-size: 14px !important; 6286 padding: 2px 14px !important; 6287 } 6288 .gift-products { 6289 padding: 10px 50px; 6290 } 6291 6292 .gwp-with-choice .gift-products { 6293 padding: 5px 20px; 6294 } 6295 6296 6297 .empty-cart-plus-icon { 6298 display: flex; 6299 width: 40px; 6300 height: 40px; 6301 padding: 14px 8px 8px; 6302 justify-content: center; 6303 align-items: center; 6304 gap: 8px; 6305 background: #6CA16E; 6306 color: white; 6307 border-radius: 24px; 6308 position: absolute; 6309 top: -12px; 6310 right: -12px; 6311 } 6312 6313 #super-scrip { 6314 top: -6.1px 6315 } 6316 6317 6318 .align-main-cart-customer.is-empty { 6319 padding-bottom: 0; 6320 } 6321 6322 .market-cart .cart__image img { 6323 position: initial !important; 6324 } 6325 6326 .align-name-free-gift-certificate { 6327 margin-left: 10px; 6328 } 6329 6330 .cart__item-details .onward-tracking-normal { 6331 min-width: 100% !important; 6332 } 6333 6334 @media only screen and (max-width:1430px) and(min-width: 850px) { 6335 .empty-cart-main-products { 6336 height: 75vh; 6337 overflow: auto; 6338 padding: 0 40px; 6339 } 6340 .empty-cart-main-products::-webkit-scrollbar {
6341 width: 1px; 6342 } 6343 6344 } 6345 @media only screen and (max-width: 850px) { 6346 .customer-loved.is-empty { 6347 display: none !important 6348 } 6349 .purchase-items.is-empty { 6350 display: none !important 6351 } 6352 .mob-cart-align { 6353 width: 100% !important 6354 } 6355 .align-main-cart-customer.is-empty { 6356 height: 80vh; 6357 overflow: auto; 6358 justify-content: flex-end; 6359 } 6360 .align-main-cart-customer::-webkit-scrollbar { 6361 width: 1px; 6362 } 6363 } 6364 /* Empty Cart Design for Products Css Ends */ 6365 6366 6367 6368 /* Empty Cart Design */ 6369 6370 .empty-cart-text h4 { 6371 font-size: 16px; 6372 font-style: normal; 6373 font-weight: 400; 6374 line-height: 24px; /* 150% */ 6375 letter-spacing: 0.5px; 6376 font-family: 'Lato'; 6377 color: #828282; 6378 display: flex; 6379 padding: 8px; 6380 justify-content: center; 6381 align-items: center; 6382 gap: 8px; 6383 margin: 0; 6384 } 6385 6386 .title-pr-empty h3 { 6387 font-size: 32px; 6388 font-style: normal; 6389 font-weight: 400; 6390 line-height: 36px; /* 112.5% */ 6391 text-transform: capitalize !important; 6392 margin-bottom: 24px; 6393 text-align: center; 6394 font-family: 'OrpheusPro'; 6395 } 6396 6397 .product-img-empty-cart { 6398 display: flex; 6399 align-items: center; 6400 gap: 16px; 6401 } 6402 6403 .product-img-empty-cart p { 6404 font-size: 16px; 6405 font-style: normal; 6406 font-weight: 400; 6407 line-height: 24px; /* 150% */ 6408 letter-spacing: 0.5px; 6409 /* font-family: 'Lato'; 6410 opacity: 0.5; */ 6411 margin: 0; 6412 } 6413 6414 .main-empty-pr { 6415 display: flex; 6416 align-items: center; 6417 justify-content: space-between; 6418 gap: 16px; 6419 padding: 16px; 6420 border-radius: 8px; 6421 background: #fff; 6422 } 6423 6424 .chevron-empty-cart img { 6425 display: block; 6426 } 6427 6428 .is-empty .empty-cart-design-main { 6429 display: block; 6430 } 6431 6432 6433 .empty-cart-design-main { 6434 padding: 18px 3em 10px; 6435 display: none; 6436 } 6437 6438 .listing-empty-cart { 6439 display: flex; 6440 flex-direction: column; 6441 gap: 24px; 6442 /* max-height: 27.5vh; */ 6443 /* overflow: auto; */ 6444 } 6445 6446 6447 .listing-empty-cart::-webkit-scrollbar-track { 6448 -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); 6449 border-radius: 10px; 6450 background-color: #dbdbdb; 6451 } 6452 6453 .listing-empty-cart::-webkit-scrollbar {
6454 width: 6px; 6455 height: 6px; 6456 background-color: #dbdbdb; 6457 } 6458 6459 .listing-empty-cart::-webkit-scrollbar-thumb { 6460 border-radius: 10px; 6461 -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); 6462 background-color: #7594ae; 6463 } 6464 6465 6466 6467 .main-empty-cart-btn a { 6468 width: 100%; 6469 border-radius: 12px; 6470 margin-top: 24px; 6471 background: var(--brand_color_1) !important; 6472 border-color: var(--brand_color_1) !important; 6473 font-size: 16px !important; 6474 line-height: 22px !important; /* 137.5% */ 6475 letter-spacing: 5px !important; 6476 font-weight: 500; 6477 } 6478 6479 #empty-cart-btn:hover, 6480 #empty-cart-btn:active, 6481 #empty-cart-btn:focus { 6482 border-color: var(--brand_color_1) !important; 6483 color: var(--brand_color_1) !important; 6484 } 6485 6486 6487 .header-wrapper--compressed .site-header__drawer { 6488 top: 0; 6489 } 6490 /* Dual Cart */ 6491 .align-title-minicart h3 { 6492 font-weight: 400; 6493 font-size: 31px !important; 6494 line-height: 38px; 6495 color: #000000; 6496 text-transform: initial !important; 6497 /* white-space: nowrap; */ 6498 margin: 0; 6499 letter-spacing: initial; 6500 } 6501 .minicart-total-amount-section h4 { 6502 font-family: 'Lato' !important; 6503 font-style: normal; 6504 font-weight: 400; 6505 font-size: 16px; 6506 line-height: 25px; 6507 text-align: right; 6508 color: black; 6509 letter-spacing: initial; 6510 margin: 0; 6511 text-transform: initial; 6512 } 6513 .align-title-minicart { 6514 display: flex; 6515 justify-content: space-between; 6516 align-items: center; 6517 } 6518 .main-dualcart { 6519 background: #FFFFFF; 6520 border-radius: 12px; 6521 } 6522 .title-section-minicart { 6523 border-bottom: 2px solid #D2DED3; 6524 padding: 16px 16px 10px; 6525 } 6526 .align-products-dualcart .cart__item { 6527 padding: 14px 10px !important; 6528 margin: 0 20px !important; 6529 border-bottom: 2px solid #D2DED3 !important; 6530 } 6531 .align-products-dualcart .cart__item:last-child { 6532 border: none !important; 6533 } 6534 .align-heading-check { 6535 margin-top: 1.5em; 6536 } 6537 .cart__scrollable { 6538 margin-bottom: 0; 6539 } 6540 .free-shipping-progress, .free-gift-progress, 6541 .free-shipping-progress-frozen { 6542 height: 100%; 6543 background: var(--brand_color_1); 6544 /* transition: width .3s; */ 6545 border-radius: 10px; 6546 z-index: 0; 6547 position: relative; 6548 } 6549 .free-shipping-progress-subscription { 6550 height: 100%; 6551 background: var(--brand_color_1); 6552 transition: width 0.3s; 6553 border-radius: 10px; 6554 z-index: 0; 6555 position: relative; 6556 } 6557 .min-shipping-mark { 6558 position: absolute; 6559 top: 50%; 6560 transform: translateY(-50%); 6561 z-index: 10; 6562 height: 10px; 6563 width: 2px; 6564 background: #294f2e; 6565 display: none; 6566 } 6567 .free-shipping-bar::before { 6568 content: ""; 6569 background: #00000026; 6570 position: absolute; 6571 left: 0; 6572 height: 6px; 6573 right: 100%; 6574 top: 50%; 6575 z-index: 0; 6576 transform: translateY(-50%); 6577 width: 100%; 6578 border-radius: 10px; 6579 } 6580 .free-shipping-bar { 6581 position: relative; 6582 height: 6px; 6583 /* overflow: hidden; */ 6584 } 6585 .free-shipping-bar-mob-popup { 6586 margin-top: 8px; 6587 } 6588 .progress-bar-titles { 6589 margin-top: 20px; 6590 } 6591 .progress-bar-titles p { 6592 margin: 0; 6593 } 6594 .progress-bar-titles p:last-child { 6595 margin-top: 4px; 6596 margin-bottom: 4px; 6597 } 6598 .main-progress-bar { 6599 margin: 0 0 1em; 6600 } 6601 /* SHO-294: accent-edge success notice when a preorder unlocks free shipping */ 6602 .main-progress-bar.is-preorder-freeship { 6603 display: flex; 6604 align-items: center; 6605 background: #ffffff; 6606 border: 1px solid #e3e3df; 6607 border-left: 3px solid #1d7a3f; 6608 border-radius: 6px; 6609 margin: 10px 0 12px; 6610 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); 6611 } 6612 .main-progress-bar.is-preorder-freeship .progress-bar-titles { 6613 display: flex; 6614 align-items: center; 6615 gap: 8px; 6616 margin-top: 0; 6617 width: 100%; 6618 } 6619 .pill-congrats { 6620 display: none; 6621 } 6622 .main-progress-bar.is-preorder-freeship .pill-congrats { 6623 display: inline; 6624 font-size: 13px; 6625 font-weight: 700; 6626 color: #1d7a3f; 6627 } 6628 .main-progress-bar.is-preorder-freeship .progress-bar-titles > .pill-truck-icon { 6629 display: block; 6630 width: 16px; 6631 height: 16px; 6632 color: #1d7a3f; 6633 flex: 0 0 auto; 6634 } 6635 .main-progress-bar.is-preorder-freeship .progress-bar-titles > .free-shipping-text { 6636 display: inline; 6637 margin: 0; 6638 font-size: 13px; 6639 line-height: 1.35; 6640 } 6641 .main-progress-bar.is-preorder-freeship .align-floating-text-bottom { 6642 display: flex; 6643 align-items: center; 6644 } 6645 .main-progress-bar.is-preorder-freeship .floating-bottom-text-img { 6646 display: flex; 6647 flex: 0 0 auto; 6648 width: auto; 6649 height: auto; 6650 padding: 0; 6651 background: none; 6652 border: 0; 6653 border-radius: 0; 6654 box-shadow: none; 6655 } 6656 .pill-truck-icon { 6657 display: none; 6658 } 6659 .main-progress-bar.is-preorder-freeship .market-icon { 6660 display: none; 6661 } 6662 .main-progress-bar.is-preorder-freeship .pill-truck-icon { 6663 display: block; 6664 width: 16px; 6665 height: 16px; 6666 color: #1d7a3f; 6667 } 6668 .main-progress-bar.is-preorder-freeship .bar-heading { 6669 display: inline; 6670 margin: 0; 6671 font-size: 13px; 6672 font-weight: 700; 6673 color: #1d7a3f; 6674 } 6675 .main-progress-bar.is-preorder-freeship .free-shipping-text { 6676 display: inline; 6677 margin: 0 0 0 5px; 6678 font-size: 13px; 6679 line-height: 1.35; 6680 } 6681 .main-progress-bar.is-preorder-freeship .free-shipping-bar, 6682 .main-progress-bar.is-preorder-freeship .bar-heading-2, 6683 .main-progress-bar.is-preorder-freeship .free-shipping-text-for-gift { 6684 display: none; 6685 } 6686 .boutique-container-margin { 6687 margin-top: 24px; 6688 } 6689 .cart__scrollable .rebuy-product-media { 6690 width: 120px !important; 6691 height: 120px !important; 6692 } 6693 .cart__scrollable .rebuy-widget { 6694 padding-bottom: 0 !important; 6695 margin-left: 0 !important; 6696 } 6697 6698 /* Cart Alignment */
6699 .site-header__drawer-animate .cart__item-sub, 6700 .site-header__drawer-animate .cart__item { 6701 align-items: start; 6702 } 6703 .site-header__drawer-animate .cart__item-price-col { 6704 display: flex; 6705 align-items: center; 6706 justify-content: end; 6707 flex-wrap: wrap; 6708 } 6709 .grid-product__price--original.compare_at{ 6710 padding-left:10px; 6711 font-size:18px 6712 } 6713 .site-header__drawer-animate small.cart__discount { 6714 width: 100%; 6715 } 6716 .cart__price--strikethrough { 6717 margin-right: 6px; 6718 } 6719 /* Cart Alignment End */ 6720 6721 @media only screen and (min-width: 1024px) { 6722 .site-header__drawer-animate .cart__item-price-col { 6723 margin-left: 95px; 6724 } 6725 } 6726 6727 @media only screen and (max-width: 960px) { 6728 .site-header__drawer-animate, 6729 .site-header__drawer { 6730 min-width: 100%; 6731 max-width: 100%; 6732 width: 100%; 6733 } 6734 .shipping-at-checkout-text { 6735 font-size: 13px !important; 6736 letter-spacing: 0 !important; 6737 } 6738 .show-not-mob { 6739 display: none; 6740 } 6741 .grid-product__price--original.compare_at{ 6742 6743 font-size:16px 6744 } 6745 } 6746 6747 /* @media screen and (max-width: 850px) { 6748 .empty-cart-text h4 { 6749 height: 30vh; 6750 } 6751 } */ 6752 @media only screen and (min-width: 850px) and(max-width:960px) { 6753 .empty-cart-design-main { 6754 height: 70vh; 6755 overflow: auto 6756 } 6757 6758 .empty-cart-design-main::-webkit-scrollbar {
6759 width: 1px; 6760 } 6761 } 6762 @media only screen and (max-width: 850px) { 6763 .customer-loved.is-empty { 6764 display: none; 6765 } 6766 .purchase-items.is-empty { 6767 display: none !important 6768 } 6769 .mob-cart-align::-webkit-scrollbar { 6770 width: 1px; 6771 } 6772 .mob-cart-align { 6773 width: 100% 6774 } 6775 } 6776 @media only screen and (max-width: 767px) { 6777 .site-header__drawer-animate { 6778 width: 100%; 6779 min-width: 100%; 6780 } 6781 .cart__scrollable { 6782 margin-bottom: 205px; 6783 } 6784 .empty-cart-main-products { 6785 padding: 0 40px; 6786 } 6787 .empty-cart-main-products .empty-text { 6788 margin-top: 0 6789 } 6790 } 6791 @media only screen and (max-width: 580px) { 6792 .cart__item-row { 6793 margin-bottom: 4px 6794} 6795 6796 .align-title-minicart h3 { 6797 font-size: 20px !important; 6798 line-height: 29px !important; 6799 } 6800 .minicart-total-amount-section h4 { 6801 font-size: 16px !important; 6802 line-height: 19px !important; 6803 } 6804 .progress-bar-titles p { 6805 /* padding: 0 0 4px; */ 6806 font-size: 14px; 6807 } 6808 .align-products-dualcart .cart__item { 6809 margin: 0 10px !important; 6810 } 6811 .cart__image a { 6812 width: 70px; 6813 height: 70px 6814 } 6815 .site-header__cart .cart__image { 6816 flex: 0 0 76px; 6817 } 6818 .cart__item-name { 6819 margin-bottom: 4px; 6820 } 6821 .cart__scrollable .rebuy-product-block { 6822 flex-wrap: nowrap; 6823 } 6824 .cart__scrollable .rebuy-product-media { 6825 width: 80px !important; 6826 height: 80px !important; 6827 } 6828 .cart__scrollable .rebuy-product-actions { 6829 width: 50px !important; 6830 } 6831 .cart__scrollable button.rebuy-button svg { 6832 width: 36px; 6833 height: 36px; 6834 margin-top: 6px; 6835 } 6836 .cart__scrollable .rebuy-money.sale { 6837 font-size: 16px; 6838 } 6839 .cart__scrollable .rebuy-money.compare-at { 6840 font-size: 16px; 6841 } 6842 .cart__item-price-col { 6843 display: flex; 6844 flex-wrap: wrap; 6845 justify-content: end; 6846 line-height: 1.4; 6847 margin-top: 8px; 6848 } 6849 .free-gift-img img { 6850 width: 70px !important; 6851 height: 70px !important; 6852 object-fit: contain; 6853 } 6854 .free-gift-img { 6855 min-width: 70px !important; 6856 min-height: 70px !important; 6857 } 6858 .align-name-free-gift { 6859 margin-right: 10px; 6860 } 6861 .free-gift-titles { 6862 overflow: hidden; 6863 text-overflow: ellipsis; 6864 display: -webkit-box; 6865 -webkit-line-clamp: 2; 6866 -webkit-box-orient: vertical; 6867 } 6868 .gift-free-add-btn button { 6869 font-size: 14px !important; 6870 padding: 2px 14px !important; 6871 } 6872 .gift-products { 6873 padding: 10px 50px 10px 30px; 6874 } 6875 } 6876 6877 @media only screen and (max-width: 349px) { 6878 .cart__item-name { 6879 display: -webkit-box; 6880 -webkit-line-clamp: 3; 6881 -webkit-box-orient: vertical; 6882 overflow: hidden; 6883 } 6884 .cart__scrollable { 6885 margin-bottom: 230px; 6886 } 6887 .title-section-minicart { 6888 padding: 16px 12px 10px 6889 } 6890 .cart__item-details .cart__item-sub { 6891 display: flex; 6892 align-items: center; 6893 justify-content: space-between; 6894 } 6895 .floating-text-bottom p, 6896 #floating-frozen-shipping-text { 6897 text-align: left; 6898 font-weight: 400; 6899 } 6900 } 6901 .cart__items{ 6902 display: flex; 6903 flex-direction: column; 6904} 6905.cart__items > * { 6906 order: 0; 6907} 6908 6909 6910 /* Free Gift Customization */ 6911 6912 .free-gift-img { 6913 min-width: 100px; 6914 min-height: 100px; 6915 } 6916 6917 .free-gift-img img { 6918 width: 100px !important; 6919 height: 100px !important; 6920 } 6921 6922 .title-section-minicart-free-gifts { 6923 display: block !important; 6924 } 6925 6926 .free-gift-certificate-bar-btq .free-gift-certificate-text { 6927 font-size: 15px; 6928 line-height: 24px; 6929 text-align: center; 6930 } 6931 6932 .free-gift-certificate-progress { 6933 height: 100%; 6934 background: var(--brand_color_1); 6935 transition: width .3s; 6936 border-radius: 10px; 6937 z-index: 0; 6938 position: relative; 6939 } 6940 6941 .align-gift-prod { 6942 display: flex; 6943 align-items: center; 6944 } 6945 6946 .align-name-free-gift { 6947 max-width: 300px; 6948 margin-left: 10px; 6949 } 6950 6951 .gwp-with-choice .align-name-free-gift { 6952 max-width: 400px; 6953 } 6954 6955 .free-gift-titles a { 6956 text-align: left; 6957 } 6958 6959 .ajax-cart__price.price { 6960 display: flex; 6961 } 6962 6963 .free-gift-titles { 6964 color: #000000; 6965 text-align: left; 6966 } 6967 6968 .gift-products { 6969 display: flex; 6970 align-items: center; 6971 justify-content: space-between; 6972 padding: 10px 50px; 6973 } 6974 6975 .gift-free-add-btn button { 6976 font-size: 14px; 6977 text-transform: inherit; 6978 border-radius: 60px; 6979 letter-spacing: 1px; 6980 background: var(--brand_color_1); 6981 padding: 6px 20px !important; 6982 color: #fff !important; 6983 } 6984 6985 .main-slider-gift .swiper-button-next:after, 6986 .main-slider-gift .swiper-rtl .swiper-button-prev:after, 6987 .main-slider-gift .swiper-button-prev:after, 6988 .main-slider-gift .swiper-rtl .swiper-button-next:after { 6989 font-size: 16px; 6990 background: #var(--brand_color_1);; 6991 width: 30px; 6992 height: 32px; 6993 display: flex; 6994 align-items: center; 6995 justify-content: center; 6996 border-radius: 100px; 6997 padding: 0 16px; 6998 color: #fff; 6999 } 7000 7001 .money, 7002 .sale { 7003 margin-right: 4px; 7004 } 7005 7006 /* .section-minicart-products { 7007 margin-bottom: 20px; 7008 } */ 7009 7010 .free-gift-certificate-amount-text { 7011 color: var(--sale-badge); 7012 font-weight: 700; 7013 } 7014 7015 span.cart_delete_close svg { 7016 width: 11px; 7017 height: 11px; 7018 } 7019 7020 .align-free-gift span.icon {
7021 width: 20px; 7022 height: 20px; 7023 background: rgba(10, 10, 10, 0.2); 7024 border-radius: 100px; 7025 display: flex; 7026 align-items: center; 7027 justify-content: center; 7028 } 7029 7030 span.cart_delete_close { 7031 width: 20px; 7032 height: 20px; 7033 display: block; 7034 } 7035 7036 .cart_delete_close span { 7037 display: flex; 7038 align-items: center; 7039 justify-content: center; 7040 border-radius: 100px; 7041 background: rgba(10, 10, 10, 0.2); 7042 } 7043 7044 .align-free-gift .swiper-button-next:after, 7045 .align-free-gift .swiper-button-prev:after { 7046 border: solid #fff; 7047 border-width: 0 2px 2px 0; 7048 display: inline-block !important; 7049 height: 8.5px !important; 7050 margin: auto !important; 7051 padding: 3px !important; 7052 border-radius: 0 !important; 7053 width: 8px !important; 7054 transform: rotate(-45deg) !important; 7055 } 7056 7057 .align-free-gift .swiper-button-next, 7058 .align-free-gift .swiper-button-prev { 7059 width: 32px !important; 7060 height: 32px !important; 7061 background: var(--brand_color_1); 7062 border-radius: 100px !important; 7063 transform: translateY(6px) !important; 7064 } 7065 7066 .align-free-gift .swiper-button-prev::after { 7067 transform: rotate(135deg) !important; 7068 } 7069 7070 .align-close-btn-main { 7071 flex: 1 1 auto; 7072 display: flex; 7073 } 7074 7075 .floating-bottom-text-img { 7076 min-height: 40px; 7077 min-width: 40px; 7078 } 7079 .floating-text-bottom p { 7080 text-align: left; 7081 } 7082 7083 #floating-frozen-shipping-text { 7084 text-align: left; 7085 font-weight: 400; 7086 } 7087 7088 7089 7090 /* Progress header bar */ 7091 7092 .subtotal-div { 7093 display: flex; 7094 flex-direction: row; 7095 justify-content: space-between; 7096 } 7097 7098 .subtotal-div p { 7099 margin: 0 7100 } 7101 7102 .collection-checkout-btn { 7103 width: 100%; 7104 margin-top: 30px; 7105 background: #294f2e 7106 } 7107 /* #floating-frozen-shipping-text { 7108 color:#000000 !important; 7109 } */ 7110 button[disabled] { 7111 opacity: 0.5; 7112 box-shadow: none 7113 } 7114 .bottom-checkout-txt { 7115 margin-top: 12px; 7116 color: #cbcbcb !important; 7117 font-size: 12px !important; 7118 } 7119 .align-floating-text-bottom { 7120 display: flex; 7121 align-items: start; 7122 margin-top: 10px; 7123 margin-bottom: 10px; 7124 } 7125 7126 .floating-text-bottom h4 { 7127 color: var(--brand_color_1); 7128 font-weight: 700; 7129 line-height: 14px; 7130 text-align: left; 7131 /* font-family: "Neue Haas Unica" !important; */ 7132 text-transform: initial; 7133 /* letter-spacing: 1px !important; */ 7134 display: block; 7135 letter-spacing: 0; 7136 text-rendering: optimizeLegibility; 7137 -webkit-font-smoothing: antialiased; 7138 margin-bottom: 0 !important; 7139 } 7140 7141 .floating-text-bottom { 7142 margin-left: 16px; 7143 } 7144 7145 .floating-bottom-text-img { 7146 border: 1px solid #AEAEAE; 7147 border-radius: 8px; 7148 width: 40px; 7149 height: 40px; 7150 display: flex; 7151 align-items: center; 7152 justify-content: center; 7153 } 7154 button.collection-checkout-btn.button.button--add-to-cart { 7155 font-size: 14px !important; 7156 } 7157 #floating-frozen-checkout-btn .floating-checkout-btn { 7158 color: #ffffff; 7159 background-color: var(--cta_outline_primary_static); 7160 border-color: var(--cta_outline_primary_static); 7161 7162 width: 100%; 7163 font-size: 14px !important; 7164 margin-top: 12px; 7165 height: 52.5px; 7166 } 7167 /* .amount-text-color { 7168 color: #000000; 7169 } */ 7170 7171 button[disabled] { 7172 opacity: 0.5; 7173 box-shadow: none 7174 } 7175 .bottom-checkout-txt { 7176 margin-top: 12px; 7177 color: #cbcbcb !important; 7178 font-size: 12px !important; 7179 } 7180 .align-floating-text-bottom { 7181 display: flex; 7182 align-items: start; 7183 } 7184 7185 .floating-text-bottom h4 { 7186 color: var(--brand_color_1); 7187 font-weight: 700; 7188 line-height: 14px; 7189 text-align: left; 7190 7191 text-transform: initial; 7192 /* letter-spacing: 1px !important; */ 7193 display: block; 7194 letter-spacing: 0; 7195 text-rendering: optimizeLegibility; 7196 -webkit-font-smoothing: antialiased; 7197 margin-bottom: 0 !important; 7198 } 7199 7200 .floating-text-bottom { 7201 margin-left: 16px; 7202 } 7203 7204 .floating-bottom-text-img { 7205 border: 1px solid #AEAEAE; 7206 border-radius: 8px; 7207 width: 40px; 7208 height: 40px; 7209 display: flex; 7210 align-items: center; 7211 justify-content: center; 7212 } 7213 button.collection-checkout-btn.button.button--add-to-cart { 7214 font-size: 14px !important; 7215 } 7216 #floating-frozen-checkout-btn .floating-checkout-btn { 7217 color: #ffffff; 7218 background-color: var(--cta_outline_primary_static); 7219 border-color: var(--cta_outline_primary_static); 7220 7221 width: 100%; 7222 font-size: 14px !important; 7223 margin-top: 12px; 7224 height: 52.5px; 7225 } 7226 /* .amount-text-color { 7227 color: #000000; 7228 } */ 7229 7230 7231 7232 7233/* updated styles for free gift */ 7234.gift_wrapper { 7235 display: flex; 7236 position: absolute; 7237 top: -22px; 7238 width: 100%; 7239 justify-content: space-between; 7240 z-index: 1; 7241 background: transparent; 7242 flex-wrap: nowrap; 7243} 7244.gift_wrapper svg { 7245 height: 45px; 7246 width: 25px; 7247 min-width: 25px; 7248 7249} 7250.gift_wrapper > div { 7251 width: 100%; 7252 display: flex; 7253 align-items: center; 7254 margin-bottom: -4px; 7255 margin-left: -2px; 7256 margin-right: -1px; 7257} 7258.gift_wrapper > div span { 7259 content: ''; 7260 background: var(--brand_color_1); 7261 width: 0; 7262 display: block; 7263 height: 6px; 7264 border-radius: 3px; 7265} 7266.main-progress-bar-with-markups .free-shipping-bar { 7267 margin-top: 24px; 7268 margin-bottom: 24px; 7269} 7270.main-progress-bar-with-markups .progress-bar-titles{ 7271 margin-top: 0; 7272} 7273.gift_wrapper svg.active > rect:first-child { 7274 fill: var(--brand_color_1); 7275} 7276.main-progress-bar-with-markups .floating-text-bottom svg * { 7277 stroke: var(--brand_color_1); 7278} 7279.gift_wrapper svg.active + div + svg:not(.active) rect:first-child, .gift_wrapper svg:nth-of-type(1):not(.active) rect:first-child { 7280 fill: var(--sale-badge); 7281 7282 } 7283.main-progress-bar-with-markups .floating-text-bottom { 7284 width: 100%; 7285 text-align: center; 7286 margin-left: 0; 7287} 7288.main-progress-bar-with-markups .floating-text-bottom *{ 7289 text-align: center !important; 7290} 7291.main-progress-bar-with-markups .floating-text-bottom p { 7292 color: #000000; 7293} 7294.main-progress-bar-with-markups .floating-text-bottom h4 , .main-progress-bar-with-markups .floating-text-bottom h4 * {
7295 color: var(--brand_color_1) !important; 7296 } 7297.main-progress-bar-with-markups .floating-text-bottom p:empty { 7298 margin: 0; 7299} 7300.main-progress-bar-with-markups .floating-text-bottom p span{ 7301 color: var(--sale-badge); 7302 font-weight: 700; 7303} 7304.main-progress-bar-with-markups .floating-text-bottom h4{ 7305 display: flex; 7306 justify-content: center; 7307 align-items: center; 7308 text-transform: none; 7309 gap: 7px; 7310} 7311.main-progress-bar-with-markups .floating-text-bottom h4 svg { 7312 height: 17px; 7313 width: 17px; 7314} 7315.main-progress-bar-with-markups.main-bar-align { 7316 padding: 2px 16px; 7317 background: #FFFFFF; 7318 border-radius: 12px; 7319 margin-bottom: 20px; 7320 margin-top: 20px; 7321} 7322 .main-progress-bar-with-markups .free-shipping-progress{ 7323 margin-left: 25px; 7324 margin-right: 23px; 7325 max-width: calc(100% - 48px); 7326 border-bottom-left-radius: 0; 7327 border-top-left-radius: 0; 7328} 7329 7330.sugoi-mart-menu .main-progress-bar-with-markups .floating-text-bottom h4{ 7331 font-family: 'Inter' !important; 7332} 7333 7334.is-empty .main-progress-bar-with-markups.main-bar-align { 7335 display: none; 7336} 7337 7338 7339.subscription-product-container .subscription-free-shipping-msg{ 7340 text-align: center; 7341 } 7342 .cart-milestone .progress-bar-titles{ 7343 margin-top: 0 ; 7344 } 7345 .customer-loved.customer-loved-v1.hide-customer-also-loved, .purchase-items.past-purchase-order.hide-purchase-items { 7346 visibility: hidden !important; 7347 height: 0 !important; 7348 width: 0 !important; 7349 padding: 0 !important; 7350 min-width: 0 !important; 7351 max-width: 0 !important; 7352 } 7353 @media all and (max-width: 850px){ 7354 .customer-loved.customer-loved-v1 .grid-product__price--savings { 7355 position: static !important; 7356 } 7357 } 7358.frozen-product-cart-container{ 7359 margin-top:20px; 7360} 7361/* updated free gift design section */ 7362 7363 7364 /* SHO-233 */ 7365 .empty-cart-prices .strike-through-price { 7366 text-decoration: line-through; 7367 color: #aeaeae; 7368 } 7369 7370 </style> 7371 7372
7372<script> 7373 var emptyCartRecoSeedId = null; 7374 7375 function emptyCartRecoCentsToParts(cents) { 7376 var n = (Number(cents) || 0) / 100; 7377 return n.toFixed(2).split('.'); 7378 } 7379 7380 function emptyCartRecoFetchProducts(seedId) { 7381 if (typeof theme !== 'undefined' && theme && theme.ShopifyRecommendations && theme.ShopifyRecommendations.fetch) { 7382 return theme.ShopifyRecommendations.fetch(seedId, 10, 'related'); 7383 } 7384 return fetch('/recommendations/products.json?product_id=' + encodeURIComponent(seedId) + '&limit=10&intent=related') 7385 .then(function (response) { return response.json(); }) 7386 .then(function (json) { 7387 var list = json.products || []; 7388 return list.filter(function (p) { 7389 var tags = p.tags; 7390 if (!tags) return true; 7391 var arr = Array.isArray(tags) ? tags : String(tags).split(',').map(function (t) { return t.trim(); }); 7392 var hasExcludeReco = arr.some(function (t) { 7393 var lo = String(t).toLowerCase(); 7394 return lo === 'exclude_recommendations' || lo === 'exclude_rebuy'; 7395 }); 7396 return !hasExcludeReco; 7397 }); 7398 }); 7399 } 7400 7401 if (emptyCartRecoSeedId) { 7402 emptyCartRecoFetchProducts(emptyCartRecoSeedId) 7403 .then(function (products) { 7404 var output = ''; 7405 var filteredProducts = (products || []).filter(function (product) { 7406 var v = product.variants && product.variants[0]; 7407 if (!v) return false; 7408 var invOk = typeof v.inventory_quantity === 'number' ? v.inventory_quantity > 0 : v.available; 7409 return product.title.length <= 35 && invOk && product.title.indexOf('Discovery Pack') === -1; 7410 }).slice(0, 3); 7411 7412 for (var i = 0; i < filteredProducts.length; i++) { 7413 var product = filteredProducts[i]; 7414 var v = product.variants[0]; 7415 var imgSrc = product.featured_image || (product.images && product.images[0]) || ''; 7416 if (String(imgSrc).indexOf('//') === 0) imgSrc = 'https:' + imgSrc; 7417 var alt = product.title || ''; 7418 var dparts = emptyCartRecoCentsToParts(v.price); 7419 var superScriptedDiscountedPrice = dparts[0] + '<sup>' + dparts[1] + '</sup>'; 7420 var superScriptedOriginalPrice = ''; 7421 if (v.compare_at_price) { 7422 var cparts = emptyCartRecoCentsToParts(v.compare_at_price); 7423 superScriptedOriginalPrice = '$' + cparts[0] + '<sup id="super-scrip">' + cparts[1] + '</sup>'; 7424 } 7425 7426 output += '<div class="img-text-container">' + 7427 '<img class="empty-cart-img" src="' + imgSrc + '&width=100" alt="' + alt.replace(/"/g, '"') + '">' + 7428 '<div class="img-title-price">' + 7429 '<h2 class="img-title">' + product.title + '</h2>' + 7430 '<div class="empty-cart-prices">' + 7431 7432 '<span class="strike-through-price">' + superScriptedOriginalPrice + '</span>' + 7433 '<span class="discounted-price">$' + superScriptedDiscountedPrice + '</span>' + 7434 '</div>' + 7435 '</div>' + 7436 '<div class="empty-cart-plus-icon">' + 7437 '<button type="button" class="text-link quick-add-btn js-quick-add-btn" tabindex="-1" onclick="addToCartSection1(' + 7438 product.id + ',' + v.id + ')" data-id="' + v.id + '">' + 7439 '<span class="cirle-btn">' + 7440 '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">' + 7441 '<path d="M12 5V19" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>' + 7442 '<path d="M5 12H19" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>' + 7443 '</svg>' + 7444 '<span class="icon__fallback-text">Add to cart</span>' + 7445 '</span>' + 7446 '</button>' + 7447 '</div>' + 7448 '</div>'; 7449 } 7450 7451 $('#empty-cart-reco-products').html(output); 7452 $('#empty-cart-reco-products').css({"display": "flex", "flex-direction": "column", "ga
7452p": "24px"}); 7453 }); 7454 } 7455 </script>
7455 7456
7457<script> 7458 (function() { 7459 let cartGiftModal, cartGiftModalClose, cartGiftCancelBtn, cartGiftForm, cartGiftNote, cartGiftCharCount, cartGiftSubmitBtn; 7460 let currentUpsellButton = null; 7461 let isInitialized = false; 7462 7463 function initializeModalElements() { 7464 /* SHO-265: drawer rebuilds replace the modal node â re-initialize when the cached one is detached */ 7465 if (isInitialized && cartGiftModal && document.body.contains(cartGiftModal)) return true; 7466 isInitialized = false; 7467 7468 cartGiftModal = document.getElementById('cartGiftModal'); 7469 if (!cartGiftModal) return false; 7470 7471 cartGiftModalClose = cartGiftModal.querySelector('.cart-gift-modal-close'); 7472 cartGiftCancelBtn = cartGiftModal.querySelector('.btn-cancel'); 7473 cartGiftForm = document.getElementById('cartGiftMessageForm'); 7474 cartGiftNote = document.getElementById('cartGiftNote'); 7475 cartGiftCharCount = cartGiftModal.querySelector('.char-count'); 7476 cartGiftSubmitBtn = cartGiftModal.querySelector('.btn-submit'); 7477 7478 if (cartGiftModalClose && cartGiftCancelBtn && cartGiftForm && cartGiftNote && cartGiftCharCount && cartGiftSubmitBtn) { 7479 setupEventListeners(); 7480 isInitialized = true; 7481 return true; 7482 } 7483 return false; 7484 } 7485 7486 function openCartGiftModal(button) { 7487 if (!initializeModalElements()) { 7488 console.error('Cart gift modal elements not found'); 7489 return; 7490 } 7491 currentUpsellButton = button; 7492 cartGiftModal.style.display = 'flex'; 7493 7494 const savedData = loadCartGiftData(); 7495 if (savedData) { 7496 document.getElementById('cartGiftSender').value = savedData.sender || ''; 7497 document.getElementById('cartGiftRecipient').value = savedData.recipient || ''; 7498 document.getElementById('cartGiftNote').value = savedData.gift_note || ''; 7499 7500 const length = savedData.gift_note ? savedData.gift_note.length : 0; 7501 cartGiftCharCount.textContent = `${length} / 200`; 7502 } 7503 7504 setTimeout(() => { 7505 updateCartGiftPreview(); 7506 7507 const senderInput = document.getElementById('cartGiftSender'); 7508 const recipientInput = document.getElementById('cartGiftRecipient'); 7509 const noteInput = document.getElementById('cartGiftNote'); 7510 7511 if (!recipientInput.value) { 7512 recipientInput.focus(); 7513 } else if (!noteInput.value) { 7514 noteInput.focus(); 7515 } else if (!senderInput.value) { 7516 senderInput.focus(); 7517 } else { 7518 recipientInput.focus(); 7519 recipientInput.select(); 7520 } 7521 }, 50); 7522 } 7523 7524 function closeCartGiftModal() { 7525 if (!cartGiftModal) return; 7526 7527 cartGiftModal.style.display = 'none'; 7528 // document.body.classList.remove('cart-modal-open'); 7529 // document.documentElement.classList.remove('cart-modal-open'); 7530 7531 const sender = document.getElementById('cartGiftSender').value.trim(); 7532 const recipient = document.getElementById('cartGiftRecipient').value.trim(); 7533 const giftMessage = document.getElementById('cartGiftNote').value.trim(); 7534 7535 if (sender || recipient || giftMessage) { 7536 saveCartGiftData(sender, recipient, giftMessage); 7537 } 7538 7539 currentUpsellButton = null; 7540 } 7541 7542 function loadCartGiftData() { 7543 try { 7544 const savedData = sessionStorage.getItem('cartGiftMessageData'); 7545 if (savedData) { 7546 return JSON.parse(savedData); 7547 } 7548 } catch (error) { 7549 console.error('Error loading cart gift data:', error); 7550 } 7551 return null; 7552 } 7553 7554 function saveCartGiftData(sender, recipient, giftMessage) { 7555 try { 7556 const data = { 7557 sender: sender, 7558 recipient: recipient,
7559 gift_note: giftMessage, 7560 timestamp: Date.now() 7561 }; 7562 sessionStorage.setItem('cartGiftMessageData', JSON.stringify(data)); 7563 } catch (error) { 7564 console.error('Error saving cart gift data:', error); 7565 } 7566 } 7567 7568 function updateCartGiftPreview() { 7569 const senderInput = document.getElementById('cartGiftSender'); 7570 const recipientInput = document.getElementById('cartGiftRecipient'); 7571 const messageInput = document.getElementById('cartGiftNote'); 7572 const previewSender = document.getElementById('cartPreviewSender'); 7573 const previewRecipient = document.getElementById('cartPreviewRecipient'); 7574 const previewMessage = document.getElementById('cartPreviewMessage'); 7575 const previewSection = document.getElementById('cartGiftPreview'); 7576 7577 if (!senderInput || !recipientInput || !messageInput || !previewSender || !previewRecipient || !previewMessage || !previewSection) { 7578 return; 7579 } 7580 7581 const sender = senderInput.value.trim(); 7582 const recipient = recipientInput.value.trim(); 7583 const message = messageInput.value.trim(); 7584 7585 previewRecipient.textContent = recipient || 'Recipient\'s name'; 7586 previewSender.textContent = sender || 'Your name'; 7587 previewMessage.textContent = message || 'Your gift message will appear here...'; 7588 7589 const selectedOption = document.querySelector('.cart-gift-option-radio:checked'); 7590 if (selectedOption && selectedOption.value === 'custom') { 7591 previewSection.style.display = 'block'; 7592 } else { 7593 previewSection.style.display = 'none'; 7594 } 7595 } 7596 7597 function setupEventListeners() { 7598 const cartSenderInput = document.getElementById('cartGiftSender'); 7599 const cartRecipientInput = document.getElementById('cartGiftRecipient'); 7600 7601 if (cartGiftNote) { 7602 cartGiftNote.addEventListener('input', () => { 7603 const length = cartGiftNote.value.length; 7604 cartGiftCharCount.textContent = `${length} / 200`; 7605 updateCartGiftPreview(); 7606 }); 7607 } 7608 7609 if (cartSenderInput) { 7610 cartSenderInput.addEventListener('input', updateCartGiftPreview); 7611 cartSenderInput.addEventListener('keyup', updateCartGiftPreview); 7612 } 7613 7614 if (cartRecipientInput) { 7615 cartRecipientInput.addEventListener('input', updateCartGiftPreview); 7616 cartRecipientInput.addEventListener('keyup', updateCartGiftPreview); 7617 } 7618 7619 const cartGiftOptions = document.querySelectorAll('.cart-gift-option-radio'); 7620 const cartCustomMessageFields = document.getElementById('cartCustomMessageFields'); 7621 7622 function toggleCartCustomFields() { 7623 const selectedOption = document.querySelector('.cart-gift-option-radio:checked'); 7624 if (selectedOption && selectedOption.value === 'custom') { 7625 cartCustomMessageFields.style.display = 'block'; 7626 document.getElementById('cartGiftSender').required = true; 7627 document.getElementById('cartGiftRecipient').required = true; 7628 document.getElementById('cartGiftNote').required = true; 7629 updateCartGiftPreview(); 7630 } else { 7631 cartCustomMessageFields.style.display = 'none'; 7632 document.getElementById('cartGiftSender').required = false; 7633 document.getElementById('cartGiftRecipient').required = false; 7634 document.getElementById('cartGiftNote').required = false; 7635 const previewSection = document.getElementById('cartGiftPreview'); 7636 if (previewSection) { 7637 previewSection.style.display = 'none'; 7638 } 7639 } 7640 } 7641 7642 cartGiftOptions.forEach(option => { 7643 option.addEventListener('change', toggleCartCustomFields); 7644 }); 7645 7646 // Initialize on load 7647 toggleCartCustomFields(); 7648 7649 cartGiftModalClose.addEventListener('click', (e) => { 7650 e.preventDefault(); 7651 e.stopPropagation(); 7652 closeCartGiftModal(); 7653 }); 7654 7655 cartGiftCancelBtn.addEventListener('click', (e) => { 7656 e.preventDefault(); 7657 e.stopPropagation(); 7658 closeCartGiftModal(); 7659 }); 7660 7661 cartGiftModal.addEventListener('click', (e) => { 7662 if (e.target === cartGiftModal) { 7663 e.preventDefault(); 7664 e.stopPropagation(); 7665 closeCartGiftModal(); 7666 } 7667 }); 7668 7669 const modalContent = cartGiftModal.querySelector('.cart-gift-modal'); 7670 if (modalContent) { 7671 modalContent.addEventListener('click', (e) => { 7672 e.stopPropagation(); 7673 }); 7674 } 7675 7676 /* SHO-265: setupEventListeners re-runs after drawer rebuilds â bind the document-level listener only once */ 7677 if (!window.__cartGiftEscBound) { 7678 window.__cartGiftEscBound = true; 7679 document.addEventListener('keydown', (e) => { 7680 if (e.key === 'Escape' && cartGiftModal && cartGiftModal.style.display === 'flex') { 7681 e.preventDefault(); 7682 e.stopPropagation(); 7683 closeCartGiftModal(); 7684 } 7685 }); 7686 } 7687 7688 cartGiftForm.addEventListener('submit', handleFormSubmit); 7689 } 7690 7691 async function handleFormSubmit(e) { 7692 e.preventDefault(); 7693 7694 if (!currentUpsellButton) return; 7695
7696 try { 7697 // Get selected gift option 7698 const selectedOption = document.querySelector('.cart-gift-option-radio:checked'); 7699 if (!selectedOption) { 7700 alert('Please select a gift option.'); 7701 return; 7702 } 7703 7704 const giftOption = selectedOption.value; 7705 let sender = ''; 7706 let recipient = ''; 7707 let giftNote = ''; 7708 7709 // Handle different options 7710 if (giftOption === 'blank') { 7711 // Leave blank - no message 7712 sender = ''; 7713 recipient = ''; 7714 giftNote = ''; 7715 } else if (giftOption === 'standard') { 7716 // Use standard message - no sender/recipient 7717 sender = ''; 7718 recipient = ''; 7719 giftNote = 'Enjoy this selection of Japanese snacks & products, a little treat from Japan to make your day special. Have a great day!'; 7720 } else if (giftOption === 'custom') { 7721 // Get custom form data 7722 const formData = new FormData(cartGiftForm); 7723 sender = formData.get('sender').trim(); 7724 recipient = formData.get('recipient').trim(); 7725 giftNote = formData.get('gift_note').trim(); 7726 7727 // Validate custom fields 7728 if (!sender || !recipient || !giftNote) { 7729 alert('Please fill in all required fields for your custom message.'); 7730 return; 7731 } 7732 } 7733 7734 cartGiftSubmitBtn.disabled = true; 7735 cartGiftSubmitBtn.classList.add('loading'); 7736 cartGiftSubmitBtn.textContent = ''; 7737 7738 const variantId = currentUpsellButton.getAttribute('data-upsell-variant-id'); 7739 const productTitle = currentUpsellButton.getAttribute('data-upsell-product-title'); 7740 7741 const response = await fetch('/cart/add.js', { 7742 method: 'POST', 7743 headers: { 'Content-Type': 'application/json' }, 7744 body: JSON.stringify({ 7745 id: variantId, 7746 quantity: 1 7747 }) 7748 }); 7749 7750 if (!response.ok) { 7751 throw new Error(`HTTP error! status: ${response.status}`); 7752 } 7753 7754 const data = await response.json(); 7755 7756 // Only update attributes if not blank 7757 const attributes = { 7758 'sender': sender, 7759 'recepient': recipient, 7760 'gift_note': giftNote, 7761 'gift_option': giftOption 7762 }; 7763 7764 await fetch('/cart/update.js', { 7765 method: 'POST', 7766 headers: { 'Content-Type': 'application/json' }, 7767 body: JSON.stringify({ attributes }) 7768 }); 7769 7770 document.dispatchEvent( 7771 new CustomEvent("ajaxProduct:added", { 7772 detail: { product: data }, 7773 }) 7774 ); 7775 7776 const upsellContainer = currentUpsellButton.closest('.cart__item-upsell'); 7777 if (upsellContainer) { 7778 upsellContainer.style.display = 'none'; 7779 } 7780 7781 // Save the gift data for future use (only for custom) 7782 if (giftOption === 'custom') { 7783 saveCartGiftData(sender, recipient, giftNote); 7784 } 7785 7786 closeCartGiftModal(); 7787 7788 cartGiftSubmitBtn.disabled = false; 7789 cartGiftSubmitBtn.classList.remove('loading'); 7790 cartGiftSubmitBtn.textContent = 'Add Gift to Cart'; 7791 7792 console.log(`${productTitle} added to cart successfully`); 7793 7794 } catch (error) { 7795 console.error('Error adding upsell to cart:', error); 7796 alert('Failed to add gift to cart. Please try again.'); 7797 7798 cartGiftSubmitBtn.disabled = false; 7799 cartGiftSubmitBtn.classList.remove('loading'); 7800 cartGiftSubmitBtn.textContent = 'Add Gift to Cart'; 7801 } 7802 } 7803 7804 /* BTQ-68: preorder (advent) items skip the modal â gift wrap + standard message added in one click, same as the LP */ 7805 async function addUpsellDirect(button) { 7806 const variantId = button.getAttribute('data-upsell-variant-id'); 7807 if (!variantId || button.disabled) return; 7808 7809 const textEl = button.querySelector('.cart__upsell-text'); 7810 const originalText = textEl ? textEl.textContent : ''; 7811 button.disabled = true; 7812 if (textEl) textEl.textContent = 'Addingâ¦'; 7813 7814 /* SHO-265: add gift wrap at the same quantity as the calendar it belongs to */ 7815 const parentQty = parseInt(button.getAttribute('data-parent-qty'), 10) || 1; 7816
7817 try { 7818 const response = await fetch('/cart/add.js', { 7819 method: 'POST', 7820 headers: { 'Content-Type': 'application/json' }, 7821 body: JSON.stringify({ id: variantId, quantity: parentQty }) 7822 }); 7823 if (!response.ok) { 7824 throw new Error(`HTTP error! status: ${response.status}`); 7825 } 7826 const data = await response.json(); 7827 7828 await fetch('/cart/update.js', { 7829 method: 'POST', 7830 headers: { 'Content-Type': 'application/json' }, 7831 body: JSON.stringify({ 7832 attributes: { 7833 'sender': '', 7834 'recepient': '', 7835 'gift_note': 'Enjoy this selection of Japanese snacks & products, a little treat from Japan to make your day special.', /* SHO-254 */ 7836 'gift_option': 'standard' 7837 } 7838 }) 7839 }); 7840 7841 document.dispatchEvent( 7842 new CustomEvent("ajaxProduct:added", { 7843 detail: { product: data }, 7844 }) 7845 ); 7846 7847 const upsellContainer = button.closest('.cart__item-upsell'); 7848 if (upsellContainer) { 7849 upsellContainer.style.display = 'none'; 7850 } 7851 } catch (error) { 7852 console.error('Error adding upsell to cart:', error); 7853 button.disabled = false; 7854 if (textEl) textEl.textContent = originalText; 7855 } 7856 } 7857 7858 function addUpsellToCart(button) { 7859 if (button.getAttribute('data-standard-gift') === 'true') { 7860 addUpsellDirect(button); 7861 return; 7862 } 7863 openCartGiftModal(button); 7864 } 7865 7866 window.addUpsellToCart = addUpsellToCart; 7867 7868 /* SHO-265: keep gift wrap quantities in sync with their parent items. 7869 Pairing comes from data-sync-upsell-variant stamped on cart rows; a shared 7870 wrap targets the SUM of its parents' quantities. The wrap is only synced 7871 while it exists in the cart (never auto-added). */ 7872 var giftSyncPairs = {}; 7873 var giftSyncBusy = false; 7874 7875 function collectGiftSyncPairs() { 7876 document.querySelectorAll('.cart__item[data-sync-upsell-variant]').forEach(function (row) { 7877 var parentVariant = row.getAttribute('data-variant-id'); 7878 var wrapVariant = row.getAttribute('data-sync-upsell-variant'); 7879 if (parentVariant && wrapVariant) giftSyncPairs[String(parentVariant)] = String(wrapVariant); 7880 }); 7881 } 7882 7883 async function syncGiftWrapQty() { 7884 if (giftSyncBusy) return; 7885 collectGiftSyncPairs(); 7886 var parents = Object.keys(giftSyncPairs); 7887 if (!parents.length) return; 7888 giftSyncBusy = true; 7889 try { 7890 var cart = await fetch('/cart.js', { credentials: 'same-origin' }).then(function (r) { return r.json(); }); 7891 var qtyByVariant = {}; 7892 cart.items.forEach(function (item) { qtyByVariant[String(item.variant_id)] = item.quantity; }); 7893 7894 /* target for each wrap = sum of the quantities of every known parent still in the cart */ 7895 var wrapTargets = {}; 7896 parents.forEach(function (parentVariant) { 7897 var wrapVariant = giftSyncPairs[parentVariant]; 7898 if (qtyByVariant[wrapVariant] === undefined) return; 7899 wrapTargets[wrapVariant] = (wrapTargets[wrapVariant] || 0) + (qtyByVariant[parentVariant] || 0); 7900 }); 7901 7902 var updates = {}; 7903 var parentGone = false; 7904 Object.keys(wrapTargets).forEach(function (wrapVariant) { 7905 if (qtyByVariant[wrapVariant] !== wrapTargets[wrapVariant]) { 7906 updates[wrapVariant] = wrapTargets[wrapVariant]; 7907 if (wrapTargets[wrapVariant] === 0) parentGone = true; 7908 } 7909 }); 7910 /* SGM-714: keep the gift message while another calendar's wrap is still in the cart */ 7911 var wrapRemains = Object.keys(wrapTargets).some(function (wrapVariant) { return wrapTargets[wrapVariant] > 0; }); 7912 if (wrapRemains) parentGone = false; 7913 7914 if (Object.keys(updates).length) { 7915 var payload = { updates: updates }; 7916 if (parentGone) { 7917 payload.attributes = { 'sender': '', 'recepient': '', 'gift_note': '', 'gift_option': '' }; 7918 } 7919 var updated = await fetch('/cart/update.js', { 7920 method: 'POST', 7921 headers: { 'Content-Type': 'application/json' }, 7922 body: JSON.stringify(payload) 7923 }).then(function (r) { return r.json(); }); 7924 document.dispatchEvent(new CustomEvent('ajaxProduct:added', { detail: { product: updated } })); 7925 } 7926 } catch (err) { 7927 console.error('Gift wrap quantity sync failed:', err); 7928 } finally { 7929 giftSyncBusy = false;
7930 } 7931 } 7932 7933 document.addEventListener('cart:updated', function () { syncGiftWrapQty(); }); 7934 document.addEventListener('ajaxProduct:added', function () { syncGiftWrapQty(); }); 7935 /* SGM-714: learn pairs from the initial render so a parent removed before any sync still drops its wrap */ 7936 collectGiftSyncPairs(); 7937 7938 if (document.readyState === 'loading') { 7939 document.addEventListener('DOMContentLoaded', initializeModalElements); 7940 } else { 7941 initializeModalElements(); 7942 } 7943 7944 document.addEventListener('click', function(e) { 7945 if (e.target.matches('.cart__upsell-btn') || e.target.closest('.cart__upsell-btn')) { 7946 e.preventDefault(); 7947 const button = e.target.matches('.cart__upsell-btn') ? e.target : e.target.closest('.cart__upsell-btn'); 7948 if (button && button.getAttribute('data-upsell-variant-id')) { 7949 addUpsellToCart(button); 7950 } 7951 return; 7952 } 7953 7954 if (e.target.matches('[data-cart-remove]') || e.target.closest('[data-cart-remove]')) { 7955 e.preventDefault(); 7956 7957 const button = e.target.matches('[data-cart-remove]') ? e.target : e.target.closest('[data-cart-remove]'); 7958 const variantKey = button.getAttribute('data-variant-key'); 7959 const lineIndex = button.getAttribute('data-line'); 7960 const cartItem = button.closest('.cart__item'); 7961 const itemTags = cartItem ? cartItem.getAttribute('data-tags') : ''; 7962 const isGiftProduct = itemTags && itemTags.includes('personalized-card'); 7963 7964 button.disabled = true; 7965 button.textContent = 'Removing...'; 7966 7967 theme.cart.changeItem(variantKey, 0) 7968 .then(async function(cart) { 7969 if (isGiftProduct) { 7970 const hasOtherGiftProducts = cart.items.some(item => { 7971 return item.properties && 7972 item.product_title && 7973 (item.product_title.toLowerCase().includes('gift') || 7974 (item.tags && item.tags.includes('personalized-card'))); 7975 }); 7976 7977 if (!hasOtherGiftProducts) { 7978 try { 7979 await fetch('/cart/update.js', { 7980 method: 'POST', 7981 headers: { 'Content-Type': 'application/json' }, 7982 body: JSON.stringify({ 7983 attributes: { 7984 'recepient': '', 7985 'sender': '', 7986 'gift_note': '', 7987 'gift_option': '' 7988 } 7989 }) 7990 }); 7991 7992 sessionStorage.removeItem('cartGiftMessageData'); 7993 } catch (err) { 7994 console.error('Failed to clear cart attributes:', err); 7995 } 7996 } 7997 } 7998 7999 document.dispatchEvent( 8000 new CustomEvent("ajaxProduct:added", { 8001 detail: {product: cart}, 8002 }) 8003 ); 8004 8005 if (cartItem) { 8006 cartItem.remove(); 8007 } 8008 }) 8009 .catch(function(error) { 8010 console.error('Error removing item from cart:', error); 8011 button.disabled = false; 8012 button.textContent = 'Remove'; 8013 }); 8014 } 8015 }); 8016 8017 })(); 8018</script>
8018</div> 8019 <style> 8020 .customer-loved { 8021 min-width: 370px; 8022 background-color: var(--calSectionBg); 8023 8024 min-height: 100vh; 8025 z-index: 99; 8026 position: relative; 8027 padding: 24px 16px 0; 8028 max-width: 400px; 8029 z-index: 99999; 8030 } 8031 8032 [data-grid-style*=grey] .customer-loved .grid-product:after { 8033 background: transparent; 8034 } 8035 8036 .loved-pro-img img { 8037 width: 80px; 8038 height: 86px; 8039 object-fit: cover; 8040 display: block; 8041 } 8042 8043 .main-loved-pro { 8044 display: flex; 8045 align-items: center; 8046 background: #fff; 8047 border-radius: 12px; 8048 padding: 13px; 8049 position: relative; 8050 max-width: initial !important; 8051 margin: 14px 0px 0 10px; 8052 } 8053 8054 .main-loved-pro__link { 8055 display: flex; 8056 align-items: center; 8057 flex: 1; 8058 min-width: 0; 8059 text-decoration: none; 8060 color: inherit; 8061 } 8062 8063 .main-loved-pro__link:focus-visible { 8064 outline: 2px solid currentColor; 8065 outline-offset: 2px; 8066 border-radius: 8px; 8067 } 8068 8069 .loved-pro-img { 8070 min-width: 80px; 8071 } 8072 8073 .title-loved-pro p { 8074 /* font-family: 'lato' !important; */ 8075 font-style: normal; 8076 font-weight: 400; 8077 font-size: 15px; 8078 line-height: 22px; 8079 color: #000000; 8080 text-transform: capitalize !important; 8081 margin-bottom: 0; 8082 letter-spacing: 1px; 8083 overflow: hidden; 8084 display: -webkit-box; 8085 -webkit-line-clamp: 2; 8086 -webkit-box-orient: vertical; 8087 } 8088 8089 .price-loved-pro { 8090 display: flex; 8091 align-items: center; 8092 margin-top: 4px; 8093 } 8094 8095 .price-loved-pro p { 8096 margin-bottom: 0; 8097 } 8098 8099 .price-loved-pro p:first-child { 8100 font-weight: 400; 8101 font-size: 16px; 8102 line-height: 24px; 8103 text-align: center; 8104 color: #B14224; 8105 } 8106 8107 .price-loved-pro p:nth-child(2) { 8108 font-weight: 400; 8109 font-size: 15px; 8110 line-height: 22px; 8111 text-align: center; 8112 color: #000000; 8113 margin-left: 5px; 8114 padding-left: 5px; 8115 border-left: 1px solid #BDBDBD; 8116 } 8117 8118 .price-loved-pro p:first-child span { 8119 color: #959494; 8120 text-decoration: line-through; 8121 } 8122 8123 .about-loved-pro { 8124 margin-left: 10px; 8125 } 8126 8127 .customer-loved-heading h3 { 8128 font-family: 'Orpheus Pro'; 8129 font-style: normal; 8130 font-weight: 400 !important; 8131 font-size: 31px !important; 8132 line-height: 38px; 8133 color: #000000; 8134 letter-spacing: 0px; 8135 text-transform: capitalize !important; 8136 margin-bottom: 0px !important; 8137 } 8138 8139 8140 .plus-icon-loved .btn--icon { 8141 width: 30px; 8142 height: 30px; 8143 display: flex; 8144 align-items: center; 8145 justify-content: center; 8146 background: var(--cta_filled_static); 8147 padding: 2px !important; 8148 transition: transform 0.1s ease-out; 8149 } 8150 8151 .plus-icon-loved .btn--icon:hover { 8152 transform: scale(1.15); 8153 } 8154 8155 .plus-icon-loved { 8156 position: absolute; 8157 top: -6px; 8158 left: -3px; 8159 } 8160 8161 .close-loved-pro { 8162 position: absolute; 8163 top: 26px; 8164 right: 14px; 8165 cursor: pointer; 8166 } 8167 8168 .close-loved-pro svg { 8169 width: 30px; 8170 height: 30px; 8171 } 8172 8173 .customer-loved.orient-add .listing-loved-products { 8174 display: none; 8175 width: 50px !important; 8176 } 8177 8178 .customer-loved.orient-add { 8179 width: 56px !important; 8180 padding: 10px; 8181 min-width: auto !important; 8182 } 8183 8184 .customer-loved.orient-add .customer-loved-heading h3 { 8185 writing-mode: vertical-rl; 8186 text-orientation: mixed; 8187 } 8188 8189 .customer-loved.orient-add .close-loved-pro { 8190 right: 20px; 8191 top: 30px; 8192 } 8193 8194 #chevron-main-loved, 8195 .customer-loved.orient-add .close-loved-pro svg { 8196 display: none; 8197 } 8198 8199 .customer-loved.orient-add #chevron-main-loved { 8200 display: block !important; 8201 transform: rotate(133deg); 8202 } 8203 8204 .customer-loved.orient-add .customer-loved-heading { 8205 padding-top: 10em; 8206 } 8207 8208 .un-fl-submenu-icon-arrow-dj { 8209 border: solid #000; 8210 border-width: 0 2px 2px 0; 8211 bottom: 0; 8212 display: inline-block; 8213 height: 10px; 8214 margin: auto; 8215 padding: 3px; 8216 /* position: absolute; */ 8217 right: 10px; 8218 top: -3px; 8219 width: 10px; 8220 transform: rotate(45deg); 8221 -webkit-transform: rotate(45deg); 8222 margin-bottom: 3px !important; 8223 } 8224 8225 .plus-icon-loved button { 8226 padding: 0; 8227 border: none; 8228 background: transparent; 8229 } 8230 8231 .plus-icon-loved button span { 8232 border-radius: 100px; 8233 cursor: pointer; 8234 } 8235 8236 /* .plus-icon-loved button span svg { 8237 filter: invert(1); 8238 } */ 8239 #theme-ajax-cart.is-drawer { 8240 width: 50%; 8241 } 8242 8243 .align-cart-main-grocery { 8244 display: flex; 8245 flex-direction: row-reverse; 8246 /* height: 100%; */ 8247 } 8248 8249 /* .align-customer-loved { 8250 position: relative; 8251 } */ 8252 .listing-loved-products { 8253 max-height: calc(100vh - 172px); 8254 overflow-y: auto; 8255 padding-right: 10px; 8256 padding-bottom: 2em; 8257 } 8258 8259 .scrolled-body .listing-loved-products { 8260 max-height: calc(100vh - 130px); 8261 } 8262 8263 .listing-loved-products::-webkit-scrollbar-track { 8264 -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); 8265 border-radius: 10px; 8266 background-color: #dbdbdb; 8267 } 8268 8269 .listing-loved-products::-webkit-scrollbar {
8270 width: 6px; 8271 height: 6px; 8272 background-color: #dbdbdb; 8273 } 8274 8275 .listing-loved-products::-webkit-scrollbar-thumb { 8276 border-radius: 10px; 8277 -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3); 8278 background-color: #7594ae; 8279 } 8280 8281 .ajax-cart--drawer { 8282 box-shadow: 0 8px 8px rgb(10 10 10 / 10%); 8283 background: #fff; 8284 } 8285 8286 #theme-ajax-cart.is-drawer { 8287 width: auto; 8288 max-width: 1100px; 8289 background: transparent; 8290 box-shadow: none; 8291 } 8292 8293 .ajax-cart { 8294 min-width: 701px; 8295 max-width: 701px; 8296 } 8297 8298 8299 .align-main-cart-customer { 8300 display: flex; 8301 flex-direction: row-reverse; 8302 background: #f6f4f1; 8303 height: 100%; 8304 } 8305 8306 .cart__footer { 8307 right: 0; 8308 z-index: 999; 8309 } 8310 8311 .cart__scrollable { 8312 margin-bottom: 0px; 8313 } 8314 8315 8316 .price-loved-pro p:nth-child(2) { 8317 display: none !important; 8318 } 8319 8320 .site-header__drawer-animate { 8321 transform: inherit !important; 8322 } 8323 8324 .cart__scrollable .rebuy-widget { 8325 display: none !important; 8326 } 8327 8328 .header-wrapper.header-wrapper--overlay.is-light.header-wrapper--compressed { 8329 8330 } 8331 8332 .header-wrapper.header-wrapper--overlay.is-light { 8333 8334 } 8335 8336 @media screen and (max-width: 1100px) { 8337 .customer-loved { 8338 width: 40% !important; 8339 min-width: auto !important; 8340 max-width: initial !important; 8341 } 8342 8343 .site-header__drawer-animate, 8344 .ajax-cart , .cart__footer { 8345 width: 60% !important; 8346 min-width: auto !important; 8347 } 8348 8349 .mob-cart-align.bg-color { 8350 background: var(--cartBGColor); 8351 } 8352 /* .cart__footer { 8353 width: 100% !important; 8354 } */ 8355 .site-header__drawer { 8356 /* padding-top: 95px; */ 8357 background: transparent; 8358 box-shadow: none; 8359 width: 100%; 8360 max-width: initial; 8361 } 8362 } 8363 8364 @media screen and (max-width: 850px) { 8365 8366 8367 .site-header__drawer-animate, 8368 .ajax-cart, 8369 .cart__footer { 8370 width: 100% !important; 8371 max-width: 100% !important; 8372 min-width: auto !important; 8373 } 8374 8375 .customer-loved, 8376 .customer-loved.orient-add { 8377 width: 100% !important; 8378 /* height: 235px; */ 8379 } 8380 8381 .customer-loved { 8382 min-height: auto !important; 8383 height: 235px; 8384 z-index: 999; 8385 padding: 24px 0 0 !important; 8386 } 8387 8388 .customer-loved-heading h3 { 8389 font-size: 26px !important; 8390 text-align: center; 8391 } 8392 8393 .customer-loved.orient-add .customer-loved-heading { 8394 padding-top: 0; 8395 } 8396 8397 .customer-loved.orient-add .customer-loved-heading h3 { 8398 writing-mode: inherit; 8399 text-orientation: inherit; 8400 } 8401 8402 .main-loved-pro { 8403 display: block; 8404 background: #fff; 8405 text-align: center; 8406 width: 200px; 8407 padding: 10px 4px; 8408 min-width: 200px; 8409 flex: auto !important; 8410 } 8411 8412 .main-loved-pro__link { 8413 display: block; 8414 width: 100%; 8415 } 8416 8417 .loved-pro-img img { 8418 width: 60px; 8419 height: 60px; 8420 margin: auto; 8421 } 8422 8423 .about-loved-pro { 8424 margin: 0; 8425 } 8426 8427 .title-loved-pro p { 8428 font-size: 14px; 8429 display: -webkit-box; 8430 max-width: 400px; 8431 -webkit-line-clamp: 2; 8432 -webkit-box-orient: vertical; 8433 overflow: hidden; 8434 text-overflow: ellipsis; 8435 line-height: 1.4; 8436 /* min-height: 39.19px; 8437 display: flex; 8438 align-items: center; 8439 justify-content: center; */ 8440 } 8441 8442 .price-loved-pro { 8443 justify-content: center; 8444 } 8445 8446 .price-loved-pro p:nth-child(2) { 8447 margin-left: 4px; 8448 padding: 0; 8449 border: none; 8450 } 8451 8452 .customer-loved.orient-add .listing-loved-products { 8453 width: 100% !important; 8454 display: flex !important; 8455 } 8456 8457 .plus-icon-loved { 8458 left: auto; 8459 right: -6px; 8460 } 8461 8462 .listing-loved-products { 8463 display: flex; 8464 padding-bottom: 8px; 8465 max-height: initial !important; 8466 } 8467 8468 .close-loved-pro { 8469 display: none !important; 8470 } 8471 8472 .cart__scrollable { 8473 overflow: inherit; 8474 margin-bottom: 40px; 8475 } 8476 .SGM.header-wrapper.header-wrapper--compressed .cart__scrollable{ 8477 margin-bottom:170px 8478 } 8479 .SGM.header-wrapper.header-wrapper--compressed .cart__scrollable.is-empty, .SGM.header-wrapper .cart__scrollable.is-empty{ 8480 margin-bottom:0 8481 } 8482 8483 .mob-cart-align { 8484 height: inherit; 8485 overflow: auto; 8486 background: #f6f4f1; 8487 } 8488 8489 .align-main-cart-customer { 8490 flex-direction: column-reverse; 8491 height: auto; 8492 background: #f6f4f1; 8493 padding-bottom: 200px; 8494 /* justify-content: flex-end; */ 8495 } 8496 8497 .header-wrapper--compressed .align-main-cart-customer { 8498 padding-bottom: 60px; 8499 } 8500 .SGM.header-wrapper--compressed .align-main-cart-customer.is-empty{ 8501 height:auto; 8502 } 8503 8504 .site-header__cart .align-main-cart-customer .cart__drawer
8504-form { 8505 max-height: initial !important; 8506 display: block !important; 8507 padding-bottom: 40px; 8508 } 8509 8510 .body-scroll-content .site-header__cart .align-main-cart-customer .cart__drawer-form { 8511 padding-bottom: 130px !important; 8512 } 8513 8514 .site-header__drawer-animate { 8515 height: auto !important; 8516 } 8517 8518 .site-header__drawer-animate { 8519 transform: none !important; 8520 } 8521 8522 .cart__footer { 8523 /* bottom: 0 !important; */ 8524 z-index: 99999; 8525 } 8526 8527 .align-main-cart-customer.adjust-mob-cart { 8528 justify-content: flex-end; 8529 } 8530 8531 .align-main-cart-customer.adjust-mob-cart .cart__scrollable ,.align-main-cart-customer.adjust-mob-cart .cart__footer { 8532 display: none !important; 8533 } 8534 8535 /* .align-main-cart-customer .rebuy-minicart { 8536 display: none !important; 8537 } */ 8538 html body[data-header="cro-header-navigations"] .site-header__cart.scrolled-body { 8539 top: 122px !important; 8540 } 8541 8542 html body[data-header="cro-header-navigations"] .scrolled-body .cart__footer { 8543 bottom: 122px !important; 8544 } 8545 html .sugoi-mart-store .align-main-cart-customer { 8546 flex-direction: column !important; 8547 padding-bottom: 0 !important; 8548 } 8549 8550 html .sugoi-mart-store.body-scroll-content .site-header__cart .align-main-cart-customer .cart__drawer-form, 8551 html .sugoi-mart-store .SGM.header-wrapper.header-wrapper--compressed .cart__scrollable, 8552 .sugoi-mart-store .header-wrapper--compressed .align-main-cart-customer { 8553 padding-bottom: 0 !important; 8554 margin-bottom: 0 !important; 8555 } 8556 8557 html .sugoi-mart-store .mob-cart-align { 8558 height: calc(100dvh - 365px) !important; 8559 } 8560 8561 .sugoi-mart-store .site-header__cart .align-main-cart-customer .cart__drawer-form { 8562 padding-bottom: 0 !important; 8563 } 8564 8565 html .sugoi-mart-store.body-scroll-content .mob-cart-align.empty-cart, 8566 html .sugoi-mart-store .mob-cart-align.empty-cart { 8567 height: inherit !important; 8568 } 8569 8570 .sugoi-mart-store .cart__footer { 8571 min-height: 266px; 8572 } 8573 8574 html .sugoi-mart-store.body-scroll-content .mob-cart-align { 8575 height: calc(100dvh - 322px) !important; 8576 } 8577 8578 html .sugoi-mart-store .align-main-cart-customer.is-empty { 8579 height: calc( 100dvh - 100px) !important; 8580 justify-content: space-between; 8581 overflow: auto; 8582 } 8583 8584 html .sugoi-mart-store.body-scroll-content .align-main-cart-customer.is-empty { 8585 overflow: auto; 8586 height: calc(100dvh - 64px) !important; 8587 justify-content: space-between; 8588 } 8589 } 8590</style> 8591 8592 8593 8594
8594<script> 8595 $('.align-cart-main-grocery').addClass('remove-padding') 8596 </script>
8596 8597
8598<script> 8599 setTimeout(() => { 8600 bindQuickAdd() 8601 }, 5000); 8602 8603 8604 function bindQuickAdd() { 8605 8606 var prodGrid = document.querySelectorAll(".product-grid"); 8607 8608 if (prodGrid.length) { 8609 for (let i = 0; i < prodGrid.length; i++) { 8610 var gridProducts = prodGrid[i].querySelectorAll(".grid-product"); 8611 8612 if (gridProducts.length) { 8613 new theme.QuickAdd(prodGrid[i]); 8614 new theme.QuickShop(prodGrid[i]); 8615 } 8616 } 8617 } 8618 } 8619</script>
8619 8620 8621 </div> 8622 </div> 8623 </div> 8624 8625 <div 8626 class="site-header__drawer site-header__mobile-nav medium-up--hide" 8627 id="MobileNav" 8628 inert 8629 aria-hidden="true" 8630 style=" background-color: #F6F4F1;" 8631 > 8632 <div class="site-header__drawer-animate"><div class="slide-nav__wrapper" data-level="1"> 8633 <div class="align-menu-main"> 8634 <ul> 8635 8636 8637 8638 8639 8640 8641<li> 8642 <div class="main-snack-boxes"> 8643 <div class="title-menu-mobile nav-dropdown active-mob-menu"> 8644 <p>Shop Snack Box Subscriptions</p> 8645 <svg aria-hidden="true" focusable="false" role="presentation" data-child="teir-1-Shop Snack Box Subscriptions" class="icon icon-chevron-right" viewBox="0 0 284.49 498.98"> 8646 <path d="M35 498.98a35 35 0 0 1-24.75-59.75l189.74-189.74L10.25 59.75a35.002 35.002 0 0 1 49.5-49.5l214.49 214.49a35 35 0 0 1 0 49.5L59.75 488.73A34.89 34.89 0 0 1 35 498.98z"></path> 8647 </svg> 8648 </div> 8649 <div class="listing-dropdown-menus snack-boxes-main-mob active-mob-submenu-show"><a href="https://www.bokksu.com/products/classic-bokksu"> 8650 <div class="snack-box-mob"><img src="//bokksu.com/cdn/shop/files/snack-box-subscription-nav_685018c7-f98c-407e-9f6f-54e324289c37_200x.png?v=1751000847" alt="" role="presentation"><h4>Bokksu Snack Box</h4> 8651 </div> 8652 </a></div> 8653 </div> 8654 </li><li> 8655 <div class="title-menu-mobile nav-dropdown "> 8656 <p>Shop Gifts</p> 8657 <svg aria-hidden="true" focusable="false" role="presentation" data-child="teir-1-Shop Gifts" class="icon icon-chevron-right" viewBox="0 0 284.49 498.98"> 8658 <path d="M35 498.98a35 35 0 0 1-24.75-59.75l189.74-189.74L10.25 59.75a35.002 35.002 0 0 1 49.5-49.5l214.49 214.49a35 35 0 0 1 0 49.5L59.75 488.73A34.89 34.89 0 0 1 35 498.98z"></path> 8659 </svg> 8660 </div> 8661 <div class="listing-dropdown-menus "> 8662 <ul><li> 8663 8664 <a href="/products/gift-classic-bokksu">Bokksu Snack Box</a> 8665 8666 </li><li> 8667 8668 <a href="/products/gift-card">Gift Cards</a> 8669 8670 </li><li> 8671 8672 <a href="https://www.bokksuboutique.com/pages/corporate-gifts">Corporate Gifts</a> 8673 8674 </li></ul> 8675 </div> 8676 </li><hr> 8677 <li> 8678 <div class="title-menu-mobile nav-dropdown"> 8679 <p>More from Bokksu</p> 8680 <svg aria-hidden="true" focusable="false" role="presentation" data-child="teir-1-More from Bokksu" class="icon icon-chevron-right" viewBox="0 0 284.49 498.98"> 8681 <path d="M35 498.98a35 35 0 0 1-24.75-59.75l189.74-189.74L10.25 59.75a35.002 35.002 0 0 1 49.5-49.5l214.49 214.49a35 35 0 0 1 0 49.5L59.75 488.73A34.89 34.89 0 0 1 35 498.98z"></path> 8682 </svg> 8683 </div> 8684 <div class="listing-dropdown-menus more-brands"> 8685 <ul> 8686 <li> 8687 <a href="https://bokksu.com/products/classic-bokksu"> 8688 <img src="//bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Stacked_Filled_Orange_200x.png?v=1750968760" alt="" role="presentation"> 8689 <p> Premium Japanese snack subscriptions. </p> 8690 </a> 8691 </li> 8692 <li> 8693 <a href="https://bokksuboutique.com/"> 8694 <img src="//bokksu.com/cdn/shop/files/BokksuBoutique_Logo_Stacked_Filled_Blue_200x.png?v=1750968708" alt="" role="presentation"> 8695 <p> Specialty and gourmet gifts only found in Japan.</p> 8696 </a> 8697 </li> 8698 <li> 8699 <a href="https://bokksumarket.com"> 8700 <img src="//bokksu.com/cdn/shop/files/BokksuMarket_Logo_Stacked_Filled_Green_200x.png?v=1750968741" alt="" role="presentation"> 8701 <p>Asian grocery essentials for cooking and eating.</p> 8702 </a> 8703 </li> 8704 8705 </ul> 8706 </div> 8707 </li><li> 8708 <div class="title-menu-mobile"> 8709 <a href="https://www.bokksu.com/account/login?return_url=%2Faccount"> 8710 <p>Account</p> 8711 </a></div> 8712 </li><li> 8713 <div class="title-menu-mobile nav-dropdown "> 8714 <p>About</p> 8715 <svg aria-hidden="true" focusable="false" role="presentation" data-child="teir-1-About" class="icon icon-chevron-right" viewBox="0 0 284.49 498.98"> 8716 <path d="M35 498.98a35 35 0 0 1-24.75-59.75l189.74-189.74L10.25 59.75a35.002 35.002 0 0 1 49.5-49.5l214.49 214.49a35 35 0 0 1 0 49.5L59.75 488.73A34.89 34.89 0 0 1 35 498.98z"></path> 8717 </svg> 8718 </div> 8719 <div class="listing-dropdown-menus "> 8720 <ul><li> 8721 8722 <a href="/pages/about">Our Story</a> 8723 8724 </li><li> 8725 8726 <a href="/pages/our-makers">Our Makers</a> 8727 8728 </li><li> 8729 8730 <a href="/pages/snack-bites-documentary">Maker's Documentary</a> 8731 8732 </li></ul> 8733 </div> 8734 </li><li> 8735 <div class="title-menu-mobile nav-dropdown "> 8736 <p>Support</p> 8737 <svg aria-hidden="true" focusable="false" role="presentation" data-child="teir-1-Support" class="icon icon-chevron-right" viewBox="0 0 284.49 498.98"> 8738 <path d="M35 498.98a35 35 0 0 1-24.75-59.75l189.74-189.74L10.25 59.75a35.002 35.002 0 0 1 49.5-49.5l214.49 214.49a35 35 0 0 1 0 49.5L59.75 488.73A34.89 34.89 0 0 1 35 498.98z"></path> 8739 </svg> 8740 </div> 8741 <div class="listing-dropdown-menus "> 8742 <ul><li> 8743 8744 <a href="/pages/faq">FAQ</a> 8745 8746 </li><li> 8747 8748 <a href="/pages/contact-us">Contact Us</a> 8749 8750 </li></ul> 8751 </div> 8752 </li><li> 8753 <div class="title-menu-mobile nav-dropdown "> 8754 <p>Information</p> 8755 <svg aria-hidden="true" focusable="false" role="presentation" data-child="teir-1-Information" class="icon icon-chevron-right" viewBox="0 0 284.49 498.98"> 8756 <path d="M35 498.98a35 35 0 0 1-24.75-59.75l189.74-189.74L10.25 59.75a35.002 35.002 0 0 1 49.5-49.5l214.49 214.49a35 35 0 0 1 0 49.5L59.75 488.73A34.89 34.89 0 0 1 35 498.98z"></path> 8757 </svg> 8758 </div> 8759 <div class="listing-dropdown-menus "> 8760 <ul><li> 8761 8762 <a href="/blogs/news">Our Blog</a> 8763 8764 </li><li> 8765 8766 <a href="/pages/bokksu-offers-discounts-coupons">Today's Offers</a> 8767 8768 </li><li> 8769 8770 <a href="/pages/community">Community</a> 8771 8772 </li><li> 8773 8774 <a href="/pages/careers">Careers</a> 8775 8776 </li><li> 8777 8778 <a href="/pages/rewards">Rewards</a> 8779 8780 </li><li> 8781 8782 <a href="/pages/rewards">Refer a Friend</a> 8783 8784 </li></ul> 8785 </div> 8786 </li><li> 8787 <div class="title-menu-mobile"><a href="/pages/past-themes"> 8788 <p>Past Themes</p> 8789 </a></div> 8790 </li></ul> 8791 </div> 8792 8793<!-- <ul class="slide-nav"></ul> --> 8794 8795</div> 8796 8797<div id="subs-btn" class="original-element"> 8798 8799 <a href="https://bokksu.com/products/classic-bokksu" id="mbl-subscribe-overrides" class="btn btn-custom subscribe-btn-js original-element">Subscribe Now</a> 8800 8801</div> 8802 8803<!-- 8804 <div style="margin-top:100px" id="subs-btn"> 8805 <a href="/products/classic-bokksu" id="mbl-subscribe-overrides" class="btn btn-custom subscribe-btn-js" 8806 >SUBSCRIBE NOW</a 8807 > 8808 </div> 8809 -->
8810<script> 8811 if(window.location.href.includes('search')){ 8812 $('#subs-btn').css('display','none') 8813 }else{ 8814 $('#subs-btn').css('display','block') 8815 } 8816 8817 $('.title-menu-mobile.nav-dropdown').click(function() { 8818 $(this).toggleClass('active-mob-menu').parent().find('.listing-dropdown-menus').slideToggle(300); 8819 }); 8820</script>
8820 8821 8822<style> 8823 8824@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700&display=swap'); 8825 8826.align-menu-main ul { 8827 margin: 0; 8828 padding: 0; 8829} 8830 8831.align-menu-main ul li { 8832 list-style: none; 8833 margin-top: 0px; 8834 margin-bottom: 16px; 8835} 8836 8837.title-menu-mobile p { 8838 font-weight: 500; 8839 font-size: 13px; 8840 line-height: 140%; 8841 letter-spacing: 0.15em; 8842 text-transform: uppercase; 8843 color: #242426; 8844 margin-bottom: 0; 8845} 8846 8847.snack-box-mob img { 8848 width: 60px; 8849 height: 60px; 8850} 8851 8852.snack-box-mob h4 { 8853 font-weight: 400; 8854 font-size: 15px; 8855 line-height: 140%; 8856 letter-spacing: 0.05em; 8857 text-transform: capitalize; 8858 color: #242426; 8859 margin-left: 14px; 8860 margin-bottom: 0; 8861} 8862 8863.snack-box-mob { 8864 display: flex; 8865 align-items: center; 8866 margin-top: 14px; 8867} 8868 8869.title-menu-mobile.nav-dropdown { 8870 display: flex; 8871 align-items: center; 8872 justify-content: space-between; 8873} 8874 8875.title-menu-mobile.nav-dropdown svg { 8876 width: 10px; 8877 height: 10px; 8878 transform: rotate(90deg); 8879 transition: .3s linear; 8880} 8881 8882.title-menu-mobile.nav-dropdown.active-mob-menu svg { 8883 transform: rotate(-89deg); 8884} 8885 8886.nav-dropdown.active-mob-menu p { 8887 color: #B73D09; 8888} 8889 8890.listing-dropdown-menus ul li a { 8891 font-weight: 400; 8892 font-size: 15px; 8893 line-height: 140%; 8894 letter-spacing: 0.02em; 8895 text-transform: capitalize; 8896 color: #242426; 8897} 8898 8899.listing-dropdown-menus { 8900 padding: 10px 10px 0 ; 8901 display: none; 8902} 8903.listing-dropdown-menus ul li:last-child { 8904 margin: 0; 8905} 8906 8907.listing-dropdown-menus ul li { 8908 margin-bottom: 8px; 8909} 8910 8911.listing-dropdown-menus.more-brands { 8912 padding: 10px 0; 8913} 8914 8915.listing-dropdown-menus.more-brands ul { 8916 grid-template-columns: repeat(2, minmax(0, 1fr)); 8917 display: grid; 8918 grid-gap: 12px; 8919} 8920 8921.listing-dropdown-menus.more-brands ul li a img { 8922 width: 66px; 8923 margin: auto; 8924} 8925 8926.listing-dropdown-menus.more-brands ul li { 8927 text-align: center; 8928 margin: 0; 8929} 8930 8931.listing-dropdown-menus.more-brands ul li a p { 8932 font-weight: 400; 8933 font-size: 11px; 8934 line-height: 130%; 8935 text-align: center; 8936 letter-spacing: 0.02em; 8937 text-transform: initial; 8938 color: #242426; 8939 margin: 6px 0 0 0; 8940} 8941 8942.listing-dropdown-menus.more-brands ul li a { 8943 display: block; 8944 padding: 14px 10px; 8945 background: #F5F5F5; 8946 border-radius: 10px; 8947} 8948 8949.site-header__mobile-nav .site-header__drawer-animate , .site-header__mobile-nav.site-header__drawer { 8950 background: #fff !important; 8951} 8952 8953.site-header__mobile-nav.site-header__drawer { 8954 height: 100vh; 8955 overflow: auto !important; 8956 min-height: 100vh !important; 8957} 8958 8959.align-menu-main hr { 8960 margin: 16px 0px; 8961} 8962 8963 div#subs-btn { 8964 padding-bottom: 8em; 8965 } 8966 8967div#subs-btn p { 8968 font-weight: 400; 8969 font-size: 13px; 8970 line-height: 140%; 8971 letter-spacing: 0.02em; 8972 text-transform: capitalize; 8973 color: #242426; 8974 text-align: center; 8975 margin: 20px 0 30px; 8976} 8977 8978 8979 8980.supports-touch.lock-scroll body { 8981 overflow: initial !important; 8982} 8983 8984/* body.sticky-body { 8985 overflow: hidden; 8986 position: fixed; 8987} */ 8988 8989.site-header__mobile-nav .site-header__drawer-animate { 8990 width: 100% !important; 8991 transition: none !important; 8992} 8993 8994.active-mob-submenu-show { 8995 display: block; 8996} 8997 8998/* .blur-body { 8999 background: initial !important; 9000 filter: none !important; 9001} */ 9002 9003@media only screen and (max-width: 960px) { 9004 #mbl-subscribe-overrides { 9005 letter-spacing: 0.15em !important; 9006 font-weight: 700 !important; 9007 font-size: 13px !important; 9008 height: auto !important; 9009 padding: 17px 16px !important; 9010 border-radius: 10px !important; 9011 } 9012} 9013 9014@media screen and (max-width: 770px) { 9015 .mobile-nav-open body { 9016 overflow: hidden !important; 9017 } 9018} 9019 9020</style> 9021</div> 9022 </div> 9023 </div> 9024 </div></header> 9025 </div> 9026 </div> 9027 9028 9029 9030 9031
9032<script> 9033 $(document).ready(function () { 9034 $('.sale-announcement').on('click', function () { 9035 const link = $(this).data('link'); 9036 if (link) { 9037 window.location.href = link; 9038 } 9039 }); 9040 // Check if userway_buttons_wrapper is rendered 9041 function checkIfRendered() { 9042 if ($('.userway_buttons_wrapper').length > 0) { 9043 $('.transition-body').removeClass('transition-body'); 9044 clearInterval(renderCheckInterval); // Stop checking once rendered 9045 } 9046 } 9047 // Check if rendered initially 9048 checkIfRendered(); 9049 // Check periodically in case element is added dynamically 9050 let renderCheckInterval = setInterval(checkIfRendered, 1000); 9051 }); 9052 9053 // Mobile Cart and Nav Opening Issue 9054 $('.show-on-mob').click(function () { 9055 $('body').toggleClass('no-scroll'); 9056 $('.sticky-filters').toggleClass('d-none'); 9057 if ($('html').hasClass('cart-open')) { 9058 $('.site-header__cart').removeClass('is-active is-cart-open'); 9059 $('html').removeClass('cart-open'); 9060 } 9061 }); 9062 $('#HeaderCartTrigger').click(function () { 9063 if ($('.main-menu-new').hasClass('show-categories')) { 9064 $('.ctaegories-icon').removeClass('icon-change'); 9065 $('.main-menu-new').removeClass('show-categories'); 9066 $('body').removeClass('no-scroll'); 9067 } 9068 }); 9069 // End Mobile Nav and Cart Opening Issue 9070 9071 function isMobile() { 9072 const regex = /Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i; 9073 return regex.test(navigator.userAgent); 9074 } 9075 $('#buttonid').click(function () { 9076 if ($(this).hasClass('icon-change')) { 9077 $(this).attr('aria-expanded', true); 9078 $(this).attr('aria-label', 'Close'); 9079 } else { 9080 $(this).attr('aria-expanded', false); 9081 $(this).attr('aria-label', 'Menu'); 9082 } 9083 }); 9084 9085 $('#buttonid').on('keydown', function (event) { 9086 if (event.keyCode == 9 && $(this).hasClass('icon-change')) { 9087 setTimeout(function () { 9088 $('.all-menu-links .main-menu-item:first-child .new-menu-item .item-links').focus(); 9089 }, 0); 9090 } 9091 9092 if (event.keyCode == 32) { 9093 if ($('#buttonid').hasClass('icon-change')) { 9094 $('#buttonid').attr('aria-expanded', true); 9095 $(this).attr('aria-label', 'Close'); 9096 } else { 9097 $('#buttonid').attr('aria-expanded', false); 9098 $(this).attr('aria-label', 'Menu'); 9099 } 9100 } 9101 }); 9102 9103 $('#buttonid').on('focus', function (event) { 9104 if (event.keyCode != 9 && !event.shiftKey) { 9105 setTimeout(function () { 9106 $('.all-menu-links .main-menu-item:first-child .new-menu-item .item-links').focus(); 9107 }, 2000); 9108 } 9109 }); 9110 9111 $(document).keydown(function (event) { 9112 if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') { 9113 event.preventDefault(); 9114 // readElementsInMain(); 9115 } 9116 }); 9117 $('.ctaegories-icon').click(function () { 9118 $(this).toggleClass('icon-change'); 9119 $('.main-menu-new').toggleClass('show-categories'); 9120 $('.all-menu-links .main-menu-item:first-child .new-menu-item #myLink').attr('tabindex', 0); 9121 $('.all-menu-links .main-menu-item:first-child .new-menu-item #myLink').focus(); 9122 }); 9123 $('.new-menu-item').click(function () { 9124 $(this).parent().toggleClass('rotate-icon').find('.listing-hovered-items').slideToggle(); 9125 }); 9126 9127 $(document).keydown(function (e) { 9128 if (e.keyCode == 9 && e.shiftKey) { 9129 if ($('.all-menu-links .main-menu-item:first-child .new-menu-item #myLink').is(':focus')) { 9130 $('#buttonid').attr('tabindex', 0); 9131 setTimeout(function () { 9132 $('#buttonid').focus(); 9133 }, 0); 9134 } 9135 } 9136 if ($('#buttonid').is(':focus')) { 9137 if (e.keyCode == 9 && !e.shiftKey) { 9138 setTimeout(function () { 9139 $('.all-menu-links .main-menu-item:first-child .new-menu-item #myLink').focus(); 9140 }, 0); 9141 } 9142 } 9143 }); 9144 function handleMenuItem(event) { 9145 if (event.keyCode == 32 && $('.main-menu-item .new-menu-item .item-links').is(':focus')) { 9146 window.location = $('.main-menu-item .new-menu-item a:focus').attr('href'); 9147 return false; 9148 } 9149 9150 if ((event.keyCode == 39 || event.keyCode == 37) && $('.main-menu-item .new-menu-item a').is(':focus')) { 9151 // $('.listing-hovered-items').hide(); 9152 } 9153 if (event.keyCode == 39 && $('.all-menu-links .main-menu-item:last-child .new-menu-item a').is(':focus')) { 9154 //alert("hiii") 9155 setTimeout(function () { 9156 $('.total-reviews-new h4').focus(); 9157 }, 1000); 9158 } 9159 } 9160 9161 // $('.main-menu-item .new-menu-item a').on('mouseover', function (event) { 9162 // if(!isMobile() && zoom < 175.0){ 9163 // $('.listing-hovered-items').show(); 9164 // } 9165 // }); 9166 9167 function handleMenusubitems(event) { 9168 if (event.keyCode == 32 && $('.main-menu-item .listing-hovered-items ul li a:focus')) { 9169 window.location = $('.main-menu-item .listing-hovered-items ul li a:focus').attr('href'); 9170 return false;
9171 } 9172 } 9173 9174 $('.main-menu-item .new-menu-item').on('keydown', handleMenuItem); 9175 $('.main-menu-item .listing-hovered-items').on('keydown', handleMenusubitems); 9176 $('.mob-user-icon .dropdown-stores').on('keydown', handleMoreAbout); 9177 $('.shop-btn').on('keydown', handleShopBtn); 9178 $('.login-link').on('keydown', handleLoginLink); 9179 9180 $('.title-menu-mobile').click(function () { 9181 $(this).toggleClass('active-mob-menu').parent().find('.dropdown-stores').slideToggle(); 9182 }); 9183 9184 // $('.main-menu-item .new-menu-item .item-links').on('mouseover', function () { 9185 // if(!isMobile() && zoom < 175.0){ 9186 // $('.listing-hovered-items').show(); 9187 // } 9188 // }); 9189 9190 function handleMoreAbout(event) { 9191 if (event.keyCode == 32 && $('.dropdown-stores .listing-dropdown-menus ul li a:focus')) { 9192 window.location = $('.dropdown-stores .listing-dropdown-menus ul li a:focus').attr('href'); 9193 return false; 9194 } 9195 } 9196 9197 function handleShopBtn(event) { 9198 if (event.keyCode == 32 && $('a:focus')) { 9199 window.location = $('a:focus').attr('href'); 9200 return false; 9201 } 9202 } 9203 function handleLoginLink(event) { 9204 if (event.keyCode == 32) { 9205 window.location = $('.login-link a').attr('href'); 9206 return false; 9207 } 9208 } 9209 9210 $('.title-menu-mobile').click(function () { 9211 $(this).toggleClass('active-mob-menu').parent().find('.dropdown-stores').slideToggle(); 9212 }); 9213 9214 const focusTrapDiv = document.getElementById('focus-menu-item'); 9215 if (focusTrapDiv) { 9216 focusTrapDiv.addEventListener('keydown', function (event) { 9217 if (event.key === 'Tab') { 9218 const focusableElements = focusTrapDiv.querySelectorAll( 9219 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])' 9220 ); 9221 const firstFocusableElement = focusableElements[0]; 9222 const lastFocusableElement = focusableElements[focusableElements.length - 1]; 9223 9224 if (event.shiftKey) { 9225 if (document.activeElement === firstFocusableElement) { 9226 event.preventDefault(); 9227 setTimeout(function () { 9228 $('#buttonid').focus(); 9229 }, 0); 9230 } 9231 } else { 9232 if (document.activeElement === lastFocusableElement) { 9233 event.preventDefault(); 9234 setTimeout(function () { 9235 $('#buttonid').focus(); 9236 }, 0); 9237 } 9238 } 9239 } 9240 }); 9241 9242 // v2 code 9243 9244 $.ajax({ 9245 type: 'POST', 9246 data: { email: '' }, 9247 url: 'https://bokksurecharge.herokuapp.com/index.php', 9248 success: function (data) { 9249 if (data.customers.length > 0) { 9250 let customer_id = data.customers[0].id; 9251 let billing_address1 = data.customers[0].billing_address1; 9252 $.ajax({ 9253 type: 'POST', 9254 data: { customer_id: customer_id }, 9255 url: 'https://bokksurecharge.herokuapp.com/menu-first-box.php', 9256 success: function (data2) { 9257 if (Number(data2) > 0) { 9258 $('#item-first-box').html('Upcoming Box'); 9259 $('#item-first-box').attr('href', 'https://bokksu.com/pages/upcoming-box'); 9260 $('.item-first-box-mobile').html('Upcoming Box'); 9261 $('.item-first-box-mobile').attr('href', 'https://bokksu.com/account'); 9262 } 9263 }, 9264 }); 9265 } 9266 }, 9267 }); 9268 9269 function resetScrollbarStylesForInjectedStyles() { 9270 $('style.pieeye-injected-style').each(function () { 9271 var styleContent = $(this).html(); 9272 if (styleContent.includes('::-webkit-scrollbar')) { 9273 // Remove styles related to scrollbar 9274 var cleanedStyleContent = styleContent.replace( 9275 /(::-webkit-scrollbar|::-webkit-scrollbar-thumb|::-webkit-scrollbar-track)[^{]*\{[^}]*\}/g, 9276 '' 9277 ); 9278 $(this).html(cleanedStyleContent); 9279 } 9280 }); 9281 } 9282 9283 const observerCallback = function (mutationsList, observer) { 9284 mutationsList.forEach(function (mutation) { 9285 if (mutation.type === 'childList' && mutation.target.nodeName.toLowerCase() === 'head') { 9286 $(mutation.addedNodes).each(function () { 9287 if ( 9288 this.nodeType === Node.ELEMENT_NODE && 9289 this.tagName.toLowerCase() === 'style' && 9290 $(this).hasClass('pieeye-injected-style') 9291 ) { 9292 resetScrollbarStylesForInjectedStyles(); 9293 } 9294 }); 9295 } 9296 }); 9297 }; 9298 const observer = new MutationObserver(observerCallback); 9299 observer.observe(document.head, { childList: true }); 9300 } 9301</script>
9301 9302
9303<script> 9304 // a11y: keep mobile-nav-trigger buttons' aria-expanded state in sync with 9305 // the drawer open/closed state, and remove the drawer from the tab order 9306 // (inert + aria-hidden) when closed so keyboard users can't tab into 9307 // off-screen drawer links. 9308 (function () { 9309 function setExpanded(value) { 9310 var triggers = document.querySelectorAll('.mobile-nav-trigger'); 9311 for (var i = 0; i < triggers.length; i++) { 9312 triggers[i].setAttribute('aria-expanded', value ? 'true' : 'false'); 9313 } 9314 var drawer = document.getElementById('MobileNav'); 9315 if (drawer) { 9316 if (value) { 9317 drawer.removeAttribute('inert'); 9318 drawer.removeAttribute('aria-hidden'); 9319 } else { 9320 drawer.setAttribute('inert', ''); 9321 drawer.setAttribute('aria-hidden', 'true'); 9322 } 9323 } 9324 } 9325 document.addEventListener('MobileNav:open', function () { setExpanded(true); }); 9326 document.addEventListener('MobileNav:close', function () { setExpanded(false); }); 9327 9328 // a11y: toggle cart drawer inert/aria-hidden based on open/closed state. 9329 // Cart uses 'is-active' or 'is-cart-open' class on #HeaderCart. 9330 var cartDrawer = document.getElementById('HeaderCart'); 9331 if (cartDrawer && typeof MutationObserver === 'function') { 9332 function syncCartDrawer() { 9333 var isOpen = cartDrawer.classList.contains('is-active') || cartDrawer.classList.contains('is-cart-open'); 9334 if (isOpen) { 9335 cartDrawer.removeAttribute('inert'); 9336 cartDrawer.removeAttribute('aria-hidden'); 9337 // Move focus to the close button so screen readers start inside the drawer. 9338 var closeBtn = cartDrawer.querySelector('.js-close-header-cart'); 9339 if (closeBtn) setTimeout(function () { closeBtn.focus(); }, 100); 9340 } else { 9341 cartDrawer.setAttribute('inert', ''); 9342 cartDrawer.setAttribute('aria-hidden', 'true'); 9343 } 9344 } 9345 new MutationObserver(syncCartDrawer).observe(cartDrawer, { 9346 attributes: true, 9347 attributeFilter: ['class'] 9348 }); 9349 9350 // a11y: desktop nav dropdown keyboard support (disclosure pattern). 9351 // Nav items with submenus are single <button> elements (not <a> links). 9352 // The parent URL is available as "View all [title]" inside the dropdown. 9353 // Uses .onclick assignment (verified working with VoiceOver). 9354 (function () { 9355 var navItems = document.querySelectorAll('.site-nav--has-dropdown'); 9356 if (!navItems.length) return; 9357 9358 navItems.forEach(function (li) { 9359 var toggle = li.querySelector('.site-nav__dropdown-toggle'); 9360 var link = li.querySelector('.site-nav__link--has-dropdown'); 9361 var dropdown = li.querySelector('.site-nav__dropdown, .megamenu'); 9362 if (!toggle) return; 9363 9364 // Wire aria-controls 9365 if (dropdown) { 9366 var dropdownId = 'nav-dropdown-' + Math.random().toString(36).slice(2, 8); 9367 dropdown.setAttribute('id', dropdownId); 9368 toggle.setAttribute('aria-controls', dropdownId); 9369 } 9370 9371 // Use .onclick (not addEventListener) â matches the console test that worked. 9372 toggle.onclick = function (e) { 9373 e.preventDefault(); 9374 e.stopPropagation(); 9375 var wasOpen = li.classList.contains('is-focused'); 9376 // Close all open dropdowns 9377 navItems.forEach(function (other) { 9378 if (other.classList.contains('is-focused')) { 9379 other.classList.remove('is-focused'); 9380 var t = other.querySelector('.site-nav__dropdown-toggle'); 9381 if (t) t.setAttribute('aria-expanded', 'false'); 9382 } 9383 }); 9384 if (!wasOpen) { 9385 li.classList.add('is-focused'); 9386 toggle.setAttribute('aria-expanded', 'true'); 9387 } 9388 }; 9389 9390 // Close on focusout (focus leaves the entire <li> + dropdown). 9391 var closeTimeout; 9392 li.addEventListener('focusin', function () { 9393 clearTimeout(closeTimeout); 9394 }); 9395 li.addEventListener('focusout', function () { 9396 closeTimeout = setTimeout(function () { 9397 if (!li.contains(document.activeElement)) { 9398 li.classList.remove('is-focused'); 9399 toggle.setAttribute('aria-expanded', 'false'); 9400 } 9401 }, 50); 9402 }); 9403 9404 // Mouse: hover opens/closes (existing behavior preserved). 9405 li.addEventListener('mouseenter', function () { 9406 li.classList.add('is-focused'); 9407 toggle.setAttribute('aria-expanded', 'true'); 9408 }); 9409 li.addEventListener('mouseleave', function () { 9410 if (!li.contains(document.activeElement)) { 9411 li.classList.remove('is-focused'); 9412 toggle.setAttribute('aria-expanded', 'false'); 9413 } 9414 }); 9415 9416 // Escape: close dropdown, return focus to the toggle button. 9417 li.addEventListener('keydown', function (e) { 9418 if (e.key === 'Escape' && li.classList.contains('is-focused')) { 9419 e.stopPropagation(); 9420 li.classList.remove('is-focused'); 9421 toggle.setAttribute('aria-expanded', 'false'); 9422 toggle.focus(); 9423 } 9424 }); 9425 }); 9426 })(); 9427 9428 // Escape key closes the cart drawer and returns focus to the cart trigger. 9429 document.addEventListener('keydown', function (e) { 9430 if (e.key === 'Escape' && (cartDrawer.classList.contains('is-active') || cartDrawer.classList.contains('is-cart-open'))) { 9431 var closeBtn = cartDrawer.querySelector('.js-close-header-cart'); 9432 if (closeBtn) closeBtn.click(); 9433 var cartTrigger = document.getElementById('HeaderCartTrigger'); 9434 if (cartTrigger) setTimeout(function () { cartTrigger.focus(); }, 200); 9435 } 9436 }); 9437 } 9438 })(); 9439</script>
9439 9440 9441 9442</div><section id="shopify-section-sections--17749310636118__cart_milestone_TaEhjU" class="shopify-section shopify-section-group-header-group d-none"> 9443 9444 9445 9446 9447 9448 9449 9450 9451 9452 9453 9454 9455 9456<span 9457 class="gwp-with-choice-section-title" 9458 data-section-title="" 9459 style="display: none;" 9460></span> 9461 9462 9463<!-- Dual Cart - Market Items Progress Bar --> 9464 9465 9466 9467 9468 9469 9470</section> 9471<!-- END sections: header-group --><!-- BEGIN sections: popup-group --> 9472 9473<!-- END sections: popup-group --><main class="main-content" id="MainContent" role="main"> 9474 <div id="shopify-section-template--17749318303830__snb_hero_native_m3PCWY" class="shopify-section"> 9475<style data-shopify>/* Desktop typography (641px+) â matches layout breakpoint ~640Ã937 */ 9476 @media (min-width: 641px) { 9477 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .snb-hero-native__preheader { 9478 color: #f8ffff; 9479 font-size: 16px; 9480 font-weight: 500; 9481 line-height: 0.8; 9482 letter-spacing: 0.2em; 9483 font-family: "Montserrat", sans-serif; 9484 } 9485 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .hero__title { 9486 color: #f8ffff; 9487 font-size: 66px; 9488 font-weight: 500; 9489 line-height: 0.9; 9490 letter-spacing: 0em; 9491 font-family: var(--typeHeaderPrimary), var(--typeHeaderFallback); 9492 } 9493 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .snb-hero-native__description { 9494 color: #f8ffff; 9495 font-size: 16px; 9496 font-weight: 400; 9497 line-height: 1.5; 9498 letter-spacing: 0em; 9499 font-family: var(--typeBasePrimary), var(--typeBaseFallback); 9500 } 9501 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .snb-hero-native__cta { 9502 color: #ffffff; 9503 --snb-cta-bg: #ffffff;--snb-cta-border: #ffffff; 9504 --snb-cta-fill: #611f13; 9505 font-size: 14px; 9506 font-weight: 600; 9507 line-height: 1.2; 9508 letter-spacing: 0.1em; 9509 font-family: var(--typeBasePrimary), var(--typeBaseFallback); 9510 } 9511 } 9512 /* Mobile layout typography (â¤640px) â matches screenshot 2 breakpoint */ 9513 @media (max-width: 640px) { 9514 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .snb-hero-native__preheader { 9515 color: #f8ffff; 9516 font-size: 12px; 9517 font-weight: 600; 9518 line-height: 0.8; 9519 letter-spacing: 0.1em; 9520 font-family: var(--typeBasePrimary), var(--typeBaseFallback); 9521 } 9522 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .hero__title { 9523 color: #f8ffff; 9524 font-size: 34px !important; 9525 font-weight: 400; 9526 line-height: 1.6 !important; 9527 letter-spacing: 0em; 9528 font-family: var(--typeHeaderPrimary), var(--typeHeaderFallback); 9529 } 9530 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .snb-hero-native__description { 9531 color: #f8ffff; 9532 font-size: 15px; 9533 font-weight: 400; 9534 line-height: 1.5; 9535 letter-spacing: 0em; 9536 font-family: var(--typeBasePrimary), var(--typeBaseFallback); 9537 } 9538 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .snb-hero-native__cta { 9539 color: #ffffff; 9540 --snb-cta-bg: #ffffff;--snb-cta-border: #ffffff; 9541 --snb-cta-fill: #611f13; 9542 font-size: 13px; 9543 font-weight: 600; 9544 line-height: 1.4; 9545 letter-spacing: 0.1em; 9546 font-family: var(--typeBasePrimary), var(--typeBaseFallback); 9547 } 9548 } 9549 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .snb-hero-native__cta:hover { 9550 color: #ffffff !important; 9551 }</style><style data-shopify>/* SNB Hero Native â base layout, carousel, content, CTA, controls (self-contained in section) */ 9552 .snb-hero-native { 9553 position: relative; 9554 overflow: hidden; 9555 margin-bottom: 0; 9556 padding-bottom: 0; 9557 border-bottom: none !important; 9558 outline: none !important; 9559 } 9560 .index-section:has(.snb-hero-native) { 9561 margin-bottom: 0 !important; 9562 padding-bottom: 0 !important; 9563 border-bottom: none !important; 9564 } 9565 div:has(> .snb-hero-native) { 9566 margin-bottom: 0 !important; 9567 padding-bottom: 0 !important; 9568 border-bottom: none !important; 9569 } 9570 .main-content > div:has(.snb-hero-native) { 9571 margin-bottom: 0 !important; 9572 padding-bottom: 0 !important; 9573 border-bottom: none !important; 9574 } 9575 .main-content:has(> div:last-child .snb-hero-native) + div, 9576 .main-content:has(> div:last-child .snb-hero-native) + section { 9577 margin-top: 0 !important; 9578 padding-top: 0 !important; 9579 border-top: none !important; 9580 } 9581 .main-content:has(> div:last-child .snb-hero-native) + div .footer__section:first-child, 9582 .main-content:has(> div:last-child .snb-hero-native) + div .footer__section:first-of-type { 9583 border-top: none !important; 9584 } 9585 .main-content > div:has(.snb-hero-native) + * { 9586 margin-top: 0 !important; 9587 padding-top: 0 !important; 9588 border-top: none !important; 9589 } 9590 .snb-hero-native--utm-show-only { 9591 display: none; 9592 } 9593 /* Pre-Flickity: prevent vertical stacking / CLS */ 9594 .snb-hero-native__slider:not(.flickity-enabled) { 9595 position: relative; 9596 overflow: hidden; 9597 } 9598 .snb-hero-native__slider:not(.flickity-enabled) .snb-hero-native__slide { 9599 display: none; 9600 } 9601 .snb-hero-native__slider:not(.flickity-enabled) .snb-hero-native__slide:first-child { 9602 display: block; 9603 } 9604 9605 .snb-hero-native__slider.flickity-enabled { 9606 overflow: visible; 9607 } 9608 .snb-hero-native__slider.flickity-enabled .flickity-viewport { 9609 width: 100%; 9610 height: 60vh; 9611 overflow: hidden; 9612 } 9613 @media (max-width: 640px) { 9614 .snb-hero-native__slider.flickity-enabled .flickity-viewport { 9615 height: 85vh; 9616 } 9617 } 9618 .snb-hero-native__slider.flickity-enabled .flickity-slider { 9619 display: flex; 9620 align-items: stretch; 9621 } 9622 .snb-hero-native__slider .snb-hero-native__slide { 9623 width: 100%; 9624 flex-shrink: 0; 9625 } 9626 .snb-hero-native__slide { 9627 position: relative; 9628 overflow: hidden; 9629 width: 100%; 9630 height: 60vh; 9631 } 9632 .snb-hero-native__slide--clickable { 9633 cursor: pointer; 9634 } 9635 .snb-hero-native__slide--clickable .snb-hero-native__cta, 9636 .snb-hero-native__slide--clickable .snb-hero-native__content { 9637 pointer-events: auto; 9638 } 9639 @media (max-width: 640px) { 9640 .snb-hero-native__slide { 9641 height: 85vh; 9642 } 9643 }
9644 @media (min-width: 961px) { 9645 .snb-hero-native__slide { 9646 max-height: 62vh; 9647 } 9648 } 9649 .snb-hero-native__bg { 9650 position: absolute; 9651 inset: 0; 9652 width: 100%; 9653 height: 100%; 9654 z-index: 0; 9655 } 9656 .snb-hero-native__bg .snb-hero-native__img { 9657 position: absolute; 9658 inset: 0; 9659 width: 100%; 9660 height: 100%; 9661 object-fit: cover; 9662 object-position: right center; 9663 display: block; 9664 } 9665 .snb-hero-native__bg .snb-hero-native__img--desktop { 9666 display: none; 9667 } 9668 .snb-hero-native__bg .snb-hero-native__img--mobile { 9669 display: block; 9670 object-position: center center; 9671 } 9672 @media (max-width: 640px) { 9673 .snb-hero-native__bg .snb-hero-native__img, 9674 .snb-hero-native__bg .snb-hero-native__img--mobile { 9675 object-position: center top; 9676 } 9677 .snb-hero-native__bg .snb-hero-native__video--native { 9678 object-position: center top; 9679 } 9680 } 9681 @media (min-width: 641px) { 9682 .snb-hero-native__bg .snb-hero-native__img--desktop { 9683 display: block; 9684 } 9685 .snb-hero-native__bg .snb-hero-native__img--mobile { 9686 display: none; 9687 } 9688 .snb-hero-native__bg .snb-hero-native__img, 9689 .snb-hero-native__bg .snb-hero-native__video--native { 9690 object-position: right center; 9691 } 9692 } 9693 .snb-hero-native__bg .snb-hero-native__video { 9694 position: absolute; 9695 inset: 0; 9696 width: 100%; 9697 height: 100%; 9698 border: none; 9699 pointer-events: none; 9700 } 9701 .snb-hero-native__bg .snb-hero-native__video--native { 9702 object-fit: cover; 9703 object-position: right center; 9704 } 9705 .snb-hero-native__video--desktop-only { 9706 display: none; 9707 } 9708 .snb-hero-native__video--mobile-only { 9709 display: block; 9710 } 9711 @media (min-width: 641px) { 9712 .snb-hero-native__video--desktop-only { 9713 display: block; 9714 } 9715 .snb-hero-native__video--mobile-only { 9716 display: none; 9717 } 9718 } 9719 .snb-hero-native__bg .snb-hero-native__video--youtube, 9720 .snb-hero-native__bg .snb-hero-native__video--vimeo { 9721 width: 100vw; 9722 height: 56.25vw; 9723 min-height: 100%; 9724 min-width: 177.78vh; 9725 left: 50%; 9726 top: 50%; 9727 transform: translate(-50%, -50%); 9728 } 9729 .snb-hero-native__content { 9730 position: absolute; 9731 z-index: 2; 9732 display: flex; 9733 box-sizing: border-box; 9734 } 9735 .snb-hero-native__content::before { 9736 display: none; 9737 content: none; 9738 } 9739 @media (max-width: 640px) { 9740 .snb-hero-native__content[data-mobile-overlay="true"]::before { 9741 content: ''; 9742 display: block; 9743 position: absolute; 9744 inset: 0; 9745 background-color: var(--snb-hero-mob-overlay-bg, rgba(0,0,0,0.4)); 9746 backdrop-filter: blur(var(--snb-hero-mob-overlay-blur, 0px)); 9747 z-index: -1; 9748 pointer-events: none; 9749 border-radius: inherit; 9750 } 9751 } 9752 @media (min-width: 641px) { 9753 .snb-hero-native__content { 9754 inset: 0; 9755 display: flex; 9756 align-items: center; 9757 padding: 80px 20px 24px; 9758 transform: translateY(-20px); 9759 } 9760 } 9761 .snb-hero-native__content-inner { 9762 width: 100%; 9763 max-width: 100%; 9764 margin: 0; 9765 display: flex; 9766 flex-direction: column; 9767 gap: 0; 9768 box-sizing: border-box; 9769 } 9770 @media (min-width: 641px) { 9771 .snb-hero-native__content-inner { 9772 max-width: 600px; 9773 margin-left: 8%; 9774 margin-right: auto; 9775 text-align: left; 9776 } 9777 } 9778 @media (max-width: 640px) { 9779 .snb-hero-native__slide { 9780 min-height: 64vh; 9781 position: relative; 9782 } 9783 .snb-hero-native__bg { 9784 display: flex; 9785 align-items: flex-end; 9786 justify-content: center; 9787 } 9788 .snb-hero-native__img { 9789 object-fit: contain; 9790 object-position: center top; 9791 width: 100%; 9792 height: auto; 9793 max-height: 100%; 9794 } 9795 .snb-hero-native__content { 9796 position: absolute; 9797 left: 0; 9798 right: 0; 9799 bottom: 0; 9800 padding: 24px 20px 28px; 9801 display: flex; 9802 justify-content: center; 9803 } 9804 .snb-hero-native__content-inner { 9805 width: 100% !important; 9806 max-width: 100% !important; 9807 display: flex; 9808 flex-direction: column; 9809 align-items: center !important; 9810 text-align: center; 9811 gap: 8px; 9812 } 9813 .snb-hero-native__content-inner .snb-hero-native__preheader, 9814 .snb-hero-native__content-inner .hero__subtitle { 9815 margin-bottom: 0 !important; 9816 } 9817 .snb-hero-native__content-inner .hero__title, 9818 .snb-hero-native__content-inner h1, 9819 .snb-hero-native__content-inner h2 { 9820 margin-top: 0 !important; 9821 margin-bottom: 0 !important; 9822 } 9823 .snb-hero-native__content-inner .snb-hero-native__description, 9824 .snb-hero-native__content-inner p { 9825 margin-top: 0 !important; 9826 margin-bottom: 0 !important; 9827 } 9828 .snb-hero-native__content-inner .snb-hero-native__cta, 9829 .snb-hero-native__content-inner .btn { 9830 margin-top: 16px !important; 9831 margin-bottom: 0 !important; 9832 } 9833 .snb-hero-native__content-inner, 9834 .snb-hero-native__content-inner * { 9835 text-align: center !important; 9836 } 9837 .snb-hero-native__content-inner .snb-hero-native__preheader, 9838 .snb-hero-native__content-inner .hero__subtitle, 9839 .snb-hero-native__content-inner .eyebrow, 9840 .snb-hero-native__content-inner .hero__eyebrow, 9841 .snb-hero-native__content-inner .subheading { 9842 text-align: center !important; 9843 margin-left: auto !important; 9844 margin-right: auto !important; 9845 } 9846 .snb-hero-native__content-inner .btn, 9847 .snb-hero-native__content-inner a.btn, 9848 .snb-hero-native__content-inner .snb-hero-native__cta, 9849 .snb-hero-native__content .btn, 9850 .snb-hero-native__content .snb-hero-native__cta { 9851 display: inline-flex !important; 9852 justify-content: center !important; 9853 text-align: center !important; 9854 margin-left: auto !important; 9855 margin-right: auto !important; 9856 } 9857 .snb-hero-native .hero__title, 9858 .snb-hero-native h1, 9859 .snb-hero-native h2, 9860 .snb-hero-native__content-inner .hero__title, 9861 .snb-hero-native__content-inner h1, 9862 .snb-hero-native__content-inner h2 { 9863 text-align: center !important; 9864 align-self: center; 9865 margin-left: auto !important; 9866 margin-right: auto !important; 9867 } 9868 .snb-hero-native__content p, 9869 .snb-hero-native__content .snb-hero-native__description { 9870 text-align: center !important; 9871 } 9872 .snb-hero-native__content .btn, 9873 .snb-hero-native__content .snb-hero-native__cta { 9874 padding: 12px 24px; 9875 width: auto; 9876 max-width: calc(100vw - 40px); 9877 min-width: 0; 9878 display: inline-flex; 9879 justify-content: center; 9880 white-space: normal; 9881 word-break: break-word; 9882 box-sizing: border-box; 9883 letter-spacing: 3px !important; 9884 margin-bottom: 30px !important; 9885 } 9886 } 9887 .snb-hero-native__preheader { 9888 font-family: "Montserrat", sans-serif; 9889 text-transform: uppercase; 9890 color: #333333; 9891 letter-spacing: 0.08em; 9892 box-sizing: border-box; 9893 display: flex; 9894 flex-direction: column; 9895 flex-shrink: 0; 9896 position: relative; 9897 text-align: left; 9898 width: auto; 9899 height: auto; 9900 margin: 0 auto 6px 0; 9901 } 9902 @media (min-width: 641px) { 9903 .snb-hero-native__preheader { 9904 color: rgba(255, 255, 255, 1); 9905 font-size: 14px; 9906 letter-spacing: 5px; 9907 line-height: 18px; 9908 font-weight: 500; 9909 margin-bottom: 6px; 9910 } 9911 } 9912 .snb-hero-native .hero__title { 9913 font-family: var(--typeHeaderPrimary), var(--typeHeaderFallback), "Orpheus Pro", Georgia, serif; 9914 color: #333333; 9915 max-width: 100%; 9916 white-space: normal; 9917 line-break: normal; 9918 box-sizing: border-box; 9919 display: flex; 9920 flex-direction: column; 9921 flex-shrink: 0; 9922 position: relative; 9923 text-align: left; 9924 width: auto; 9925 height: auto; 9926 margin: 0 auto 1rem 0; 9927 } 9928 @media (min-width: 641px) { 9929 .snb-hero-native .hero__title { 9930 color: rgba(255, 255, 255, 1); 9931 font-size: 68px; 9932 letter-spacing: 0; 9933 line-height: 70px; 9934 font-weight: 200; 9935 margin-bottom: 12px; 9936 white-space: nowrap; 9937 } 9938 } 9939 @media (max-width: 640px) { 9940 .snb-hero-native .hero__title, 9941 .snb-hero-native h1, 9942 .snb-hero-native h2 { 9943 align-self: stretch; 9944 color: var(--new-brand-grobal-brand-colors-white-ffffff, #fff); 9945 font-style: normal; 9946 } 9947 } 9948 .snb-hero-native__description { 9949 font-family: var(--typeBasePrimary), var(--typeBaseFallback), "Montserrat", sans-serif; 9950 color: #333333; 9951 margin-bottom: 1.5rem; 9952 text-align: left; 9953 width: auto; 9954 height: auto; 9955 box-sizing: border-box; 9956 } 9957 @media (min-width: 641px) { 9958 .snb-hero-native__description { 9959 color: rgba(255, 255, 255, 1); 9960 font-size: 16px; 9961 letter-spacing: 0.5px; 9962 line-height: 24px; 9963 font-weight: 400; 9964 max-width: 509px; 9965 margin-bottom: 0; 9966 } 9967 } 9968 .snb-hero-native__description p { 9969 margin: 0 0 0.5em; 9970 } 9971 .snb-hero-native__cta { 9972 position: relative; 9973 display: inline-flex; 9974 align-items: center; 9975 justify-content: center; 9976 overflow: hidden; 9977 width: auto; 9978 min-width: 240px; 9979 padding: 12px 40px; 9980 box-sizing: border-box; 9981 border-radius: 12px; 9982 border: 1.5px solid var(--snb-cta-border, #fff); 9983 text-decoration: none; 9984 cursor: pointer; 9985 white-space: nowrap; 9986 appearance: none; 9987 text-align: center; 9988 flex-shrink: 0; 9989 margin: 0 auto 0 0; 9990 font-family: "Montserrat", sans-serif; 9991 font-size: 16px; 9992 letter-spacing: 4px; 9993 line-height: 22px; 9994 font-weight: 500; 9995 background-color: var(--snb-cta-bg, #fff) !important; 9996 color: #611f13 !important; 9997 transition: color 0.2s ease; 9998 } 9999 .snb-hero-native__cta:hover { 10000 color: #fff !important; 10001 } 10002 .snb-hero-native__cta::before { 10003 content: ""; 10004 position: absolute; 10005 inset: 0; 10006 background-color: var(--snb-cta-fill, #611f13); 10007 transform: scaleX(0); 10008 transform-origin: left; 10009 transition: transform 0.2s ease; 10010 z-index: 0; 10011 border-radius: inherit; 10012 } 10013 .snb-hero-native__cta:hover::before { 10014 transform: scaleX(1); 10015 } 10016 .snb-hero-native__cta span { 10017 position: relative; 10018 z-index: 1; 10019 } 10020 @media (min-width: 641px) { 10021 .snb-hero-native__cta { 10022 margin-top: 25px; 10023 } 10024 } 10025 @media (max-width: 640px) { 10026 .snb-hero-native__cta { 10027 margin-top: 0; 10028 } 10029 } 10030 .snb-hero-native__placeholder { 10031 position: absolute; 10032 inset: 0; 10033 width: 100%; 10034 height: 100%; 10035 min-height: 280px; 10036 display: flex; 10037 align-items: center; 10038 justify-content: center; 10039 background: linear-gradient(135deg, #2c3e50 0%, #4a6fa5 100%); 10040 color: rgba(255, 255, 255, 0.6); 10041 } 10042 .snb-hero-native .flickity-prev-next-button { 10043 top: auto !important; 10044 bottom: 20px !important; 10045 width: 44px; 10046 height: 44px; 10047 transform: none !important; 10048 background-color: #fff; 10049 color: #414141; 10050 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); 10051 border: none; 10052 transition: box-shadow 0.2s ease; 10053 } 10054 .snb-hero-native .flickity-prev-next-button:hover { 10055 transform: none !important; 10056 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12); 10057 } 10058 .snb-hero-native .flickity-prev-next-button:active { 10059 transform: none !important; 10060 } 10061 .snb-hero-native .flickity-previous { 10062 left: 20px; 10063 right: auto; 10064 } 10065 .snb-hero-native .flickity-next { 10066 right: 20px; 10067 left: auto; 10068 } 10069 /* Mobile: move arrows above content area to avoid CTA overlap */ 10070 @media (max-width: 640px) { 10071 .snb-hero-native .flickity-prev-next-button { 10072 top: 50% !important; 10073 bottom: auto !important; 10074 transform: translateY(-50%) !important; 10075 width: 36px; 10076 height: 36px; 10077 background-color: rgba(255, 255, 255, 0.85); 10078 z-index: 3; 10079 } 10080 .snb-hero-native .flickity-prev-next-button:hover { 10081 transform: translateY(-50%) !important; 10082 } 10083 .snb-hero-native .flickity-previous { 10084 left: 8px; 10085 } 10086 .snb-hero-native .flickity-next { 10087 right: 8px; 10088 } 10089 } 10090 .snb-hero-native .flickity-button-icon { 10091 fill: #414141; 10092 } 10093 .snb-hero-native .flickity-page-dots { 10094 bottom: 20px; 10095 left: 50%; 10096 width: auto; 10097 transform: translateX(-50%); 10098 display: flex; 10099 align-items: center; 10100 justify-content: center; 10101 gap: 6px; 10102 padding: 6px 14px; 10103 background-color: #fff; 10104 border-radius: 999px; 10105 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); 10106 } 10107 .snb-hero-native .flickity-page-dots .dot { 10108 width: 6px; 10109 height: 6px; 10110 margin: 0; 10111 border-radius: 50%; 10112 background-color: #C4C4C4; 10113 opacity: 1; 10114 vertical-align: middle; 10115 } 10116 .snb-hero-native .flickity-page-dots .dot:hover { 10117 opacity: 1; 10118 background-color: #a0a0a0; 10119 } 10120 .snb-hero-native .flickity-page-dots .dot.is-selected { 10121 width: 24px; 10122 height: 6px; 10123 border-radius: 3px; 10124 background-color: #2E513F; 10125 } 10126 .snb-hero-native__slide--clickable:focus-visible { 10127 outline: 2px solid #fff; 10128 outline-offset: -4px; 10129 } 10130 .snb-hero-native__cta:focus-visible { 10131 outline: 2px solid currentColor; 10132 outline-offset: 3px; 10133 }
10134 .snb-hero-native__pause-btn { 10135 position: absolute; 10136 bottom: 20px; 10137 right: 80px; 10138 z-index: 10; 10139 display: inline-flex; 10140 align-items: center; 10141 justify-content: center; 10142 width: 44px; 10143 height: 44px; 10144 background-color: #fff; 10145 color: #414141; 10146 border: none; 10147 border-radius: 50%; 10148 cursor: pointer; 10149 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); 10150 padding: 0; 10151 } 10152 .snb-hero-native__pause-btn:focus-visible { 10153 outline: 2px solid #414141; 10154 outline-offset: 3px; 10155 }</style> 10156 10157 10158 10159 10160 10161 10162 10163 10164 10165<section 10166 class="hero hero--large hero--centered snb-hero-native" 10167 data-section-id="template--17749318303830__snb_hero_native_m3PCWY" 10168 data-section-type="snb-hero-native" 10169 10170 ><h1 class="visually-hidden">Discover JapanThrough Snacks</h1><div 10171 id="Slideshow-template--17749318303830__snb_hero_native_m3PCWY" 10172 class="snb-hero-native__slider loaded" 10173 role="region" 10174 aria-roledescription="carousel" 10175 aria-label="Hero slideshow" 10176 data-autoplay="false" 10177 data-speed="5000" 10178 data-arrows="true" 10179 data-dots="true"> 10180 10181 10182<div 10183 class="snb-hero-native__slide snb-hero-native__slide--slide_yUTnyh" 10184 role="group" 10185 aria-roledescription="slide" 10186 aria-labelledby="snb-hero-slide-label-template--17749318303830__snb_hero_native_m3PCWY-slide_yUTnyh" 10187 10188 > 10189 <span class="visually-hidden" id="snb-hero-slide-label-template--17749318303830__snb_hero_native_m3PCWY-slide_yUTnyh">Slide 1 of 1: Discover JapanThrough Snacks</span> 10190 <div class="snb-hero-native__bg" aria-hidden="true" inert> 10191 10192 10193 10194 10195 10196 10197 10198 10199 10200 10201 10202 10203 10204 10205 <img 10206 class="snb-hero-native__img snb-hero-native__img--desktop" 10207 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_c6d233a7e05b49dbbb437504a8260346_a74a1b61-8103-4122-aa70-f662edd1a60b.jpg?v=1771973433&width=2000" 10208 srcset=" 10209 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_c6d233a7e05b49dbbb437504a8260346_a74a1b61-8103-4122-aa70-f662edd1a60b.jpg?v=1771973433&width=800 800w, 10210 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_c6d233a7e05b49dbbb437504a8260346_a74a1b61-8103-4122-aa70-f662edd1a60b.jpg?v=1771973433&width=1200 1200w, 10211 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_c6d233a7e05b49dbbb437504a8260346_a74a1b61-8103-4122-aa70-f662edd1a60b.jpg?v=1771973433&width=2000 2000w 10212 " 10213 sizes="100vw" 10214 alt="Discover JapanThrough Snacks" 10215 width="2000" 10216 height="800" 10217 loading="eager" 10218 fetchpriority="high" 10219 10220 > 10221 10222 <img 10223 class="snb-hero-native__img snb-hero-native__img--mobile" 10224 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_27496cd0ce7a49f1a3a8742df6381083.webp?v=1772015507&width=800" 10225 srcset=" 10226 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_27496cd0ce7a49f1a3a8742df6381083.webp?v=1772015507&width=480 480w, 10227 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_27496cd0ce7a49f1a3a8742df6381083.webp?v=1772015507&width=800 800w, 10228 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_27496cd0ce7a49f1a3a8742df6381083.webp?v=1772015507&width=1200 1200w 10229 " 10230 sizes="100vw" 10231 alt="Discover JapanThrough Snacks" 10232 width="623" 10233 height="934" 10234 loading="eager" 10235 fetchpriority="high" 10236 10237 > 10238 10239 10240 </div><div class="snb-hero-native__content"> 10241 <div class="snb-hero-native__content-inner"> 10242 10243 10244 10245 <h2 class="hero__title">Discover Japan<br/>Through Snacks<br></h2> 10246 10247 10248 <div class="snb-hero-native__description"><p>Authentic Japanese snacks delivered to you monthly from Japan.</p></div> 10249 10250 10251 <a href="#snack-box-subscription" class="snb-hero-native__cta btn" aria-label="Subscribe now â view subscription plans"><span>SUBSCRIBE NOW</span></a> 10252 10253 </div> 10254 </div> 10255 </div> 10256 10257 </div> 10258 <div class="visually-hidden" id="snb-hero-status-template--17749318303830__snb_hero_native_m3PCWY" aria-live="polite" aria-atomic="true"></div> 10259</section>
10260<script> 10261(function() { 10262 var sectionId = 'template--17749318303830__snb_hero_native_m3PCWY'; 10263 var section = document.querySelector('[data-section-id="' + sectionId + '"][data-section-type="snb-hero-native"]'); 10264 if (!section) return; 10265 var slideshow = document.getElementById('Slideshow-' + sectionId); 10266 if (!slideshow) return; 10267 10268 window._snbHeroNativeFlickity = window._snbHeroNativeFlickity || {}; 10269 10270 function initSlider() { 10271 if (window._snbHeroNativeFlickity[sectionId]) return; 10272 var slides = slideshow.querySelectorAll('.snb-hero-native__slide'); 10273 slideshow.classList.add('loaded'); 10274 if (slides.length > 1 && typeof theme !== 'undefined' && theme.Slideshow) { 10275 var sliderArgs = { 10276 cellSelector: '.snb-hero-native__slide', 10277 prevNextButtons: true, 10278 pageDots: true, 10279 fade: false, 10280 setGallerySize: false, 10281 initialIndex: 0, 10282 wrapAround: true, 10283 autoPlay: (slideshow.dataset.autoplay === 'true' && !window.matchMedia('(prefers-reduced-motion: reduce)').matches) ? (parseInt(slideshow.dataset.speed, 10) || 5000) : false 10284 }; 10285 window._snbHeroNativeFlickity[sectionId] = new theme.Slideshow(slideshow, sliderArgs); 10286 } else if (slides.length === 1) { 10287 slides[0].classList.add('is-selected'); 10288 } 10289 } 10290 10291 function initPauseButton() { 10292 if (slideshow.dataset.autoplay !== 'true') return; 10293 var existing = section.querySelector('.snb-hero-native__pause-btn'); 10294 if (existing) return; 10295 var pauseBtn = document.createElement('button'); 10296 pauseBtn.type = 'button'; 10297 pauseBtn.className = 'snb-hero-native__pause-btn'; 10298 pauseBtn.setAttribute('aria-label', 'Pause slideshow'); 10299 pauseBtn.innerHTML = '<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><rect x="3" y="2" width="4" height="12"/><rect x="9" y="2" width="4" height="12"/></svg>'; 10300 // Insert as the first child of the slideshow so VoiceOver users 10301 // encounter it immediately when entering the carousel region, 10302 // before any slide content starts rotating under them. 10303 slideshow.insertBefore(pauseBtn, slideshow.firstChild); 10304 var isPaused = false; 10305 pauseBtn.addEventListener('click', function(e) { 10306 e.stopPropagation(); 10307 var flk = window._snbHeroNativeFlickity[sectionId]; 10308 if (flk) { 10309 if (isPaused) { 10310 if (typeof flk.play === 'function') flk.play(); 10311 pauseBtn.setAttribute('aria-label', 'Pause slideshow'); 10312 pauseBtn.innerHTML = '<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><rect x="3" y="2" width="4" height="12"/><rect x="9" y="2" width="4" height="12"/></svg>'; 10313 } else { 10314 if (typeof flk.pause === 'function') flk.pause(); 10315 pauseBtn.setAttribute('aria-label', 'Play slideshow'); 10316 pauseBtn.innerHTML = '<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M4 2l10 6-10 6z"/></svg>'; 10317 } 10318 isPaused = !isPaused; 10319 } 10320 }); 10321 } 10322 10323 // a11y: keep off-screen carousel slides out of the keyboard tab order 10324 // WITHOUT using inert (which would kick screen-reader virtual focus when 10325 // the slide rotates). Instead, set tabindex="-1" on focusable descendants 10326 // of inactive slides; restore on selection. Also pause autoplay while the 10327 // slideshow has focus so the user can read without rotation interruptions. 10328 var FOCUSABLE_SEL = 'a[href], button, input, select, textarea, iframe, [tabindex]'; 10329 10330 function enforceSlideInert() { 10331 var slides = slideshow.querySelectorAll('.snb-hero-native__slide'); 10332 10333 function setSlideTabbable(slide, tabbable) { 10334 var focusables = slide.querySelectorAll(FOCUSABLE_SEL); 10335 for (var i = 0; i < focusables.length; i++) { 10336 var el = focusables[i]; 10337 if (tabbable) { 10338 var orig = el.getAttribute('data-a11y-orig-tabindex'); 10339 if (orig !== null && orig !== undefined) { 10340 if (orig === '__none__') el.removeAttribute('tabindex'); 10341 else el.setAttribute('tabindex', orig); 10342 el.removeAttribute('data-a11y-orig-tabindex'); 10343 } else { 10344 el.removeAttribute('tabindex'); 10345 } 10346 } else { 10347 if (el.getAttribute('data-a11y-orig-tabindex') === null) { 10348 var existing = el.getAttribute('tabindex'); 10349 el.setAttribute('data-a11y-orig-tabindex', existing === null ? '__none__' : existing); 10350 } 10351 el.setAttribute('tabindex', '-1'); 10352 } 10353 } 10354 } 10355 10356 function applyState() { 10357 // If no slide has is-selected yet (Flickity hasn't init'd), treat first as active. 10358 var hasSelected = false;
10359 for (var k = 0; k < slides.length; k++) { 10360 if (slides[k].classList.contains('is-selected')) { hasSelected = true; break; } 10361 } 10362 10363 for (var i = 0; i < slides.length; i++) { 10364 var slide = slides[i]; 10365 var isActive = slide.classList.contains('is-selected') || (!hasSelected && i === 0); 10366 setSlideTabbable(slide, isActive); 10367 if (isActive) { 10368 slide.removeAttribute('aria-hidden'); 10369 } else if (!slide.contains(document.activeElement)) { 10370 slide.setAttribute('aria-hidden', 'true'); 10371 } 10372 } 10373 } 10374 10375 applyState(); 10376 10377 if (typeof MutationObserver === 'function' && !slideshow.dataset.a11ySlideObserved) { 10378 slideshow.dataset.a11ySlideObserved = '1'; 10379 var observer = new MutationObserver(function (mutations) { 10380 for (var i = 0; i < mutations.length; i++) { 10381 if (mutations[i].attributeName === 'class') { 10382 applyState(); 10383 break; 10384 } 10385 } 10386 }); 10387 for (var j = 0; j < slides.length; j++) { 10388 observer.observe(slides[j], { attributes: true, attributeFilter: ['class'] }); 10389 } 10390 } 10391 10392 // Pause autoplay while the slideshow has keyboard or screen-reader focus. 10393 if (!slideshow.dataset.a11yFocusPause) { 10394 slideshow.dataset.a11yFocusPause = '1'; 10395 var pausedByFocus = false; 10396 slideshow.addEventListener('focusin', function () { 10397 var flk = window._snbHeroNativeFlickity[sectionId]; 10398 if (flk && typeof flk.pause === 'function') { 10399 flk.pause(); 10400 pausedByFocus = true; 10401 } 10402 }); 10403 slideshow.addEventListener('focusout', function (e) { 10404 // Only resume if focus actually leaves the slideshow. 10405 if (slideshow.contains(e.relatedTarget)) return; 10406 if (!pausedByFocus) return; 10407 pausedByFocus = false; 10408 var flk = window._snbHeroNativeFlickity[sectionId]; 10409 if (flk && flk.args && flk.args.autoPlay && typeof flk.play === 'function') { 10410 flk.play(); 10411 } 10412 }); 10413 } 10414 } 10415 10416 // a11y: ensure Flickity-injected prev/next buttons AND page dots have 10417 // explicit aria-labels and survive third-party DOM rewrites 10418 // (e.g., UserWay overlay relabels them as "Current step"). 10419 function enforcePrevNextLabels() { 10420 function applyLabels() { 10421 var prev = slideshow.querySelector('.flickity-button.flickity-previous, .flickity-prev-next-button.flickity-previous, .flickity-prev-next-button.previous'); 10422 var next = slideshow.querySelector('.flickity-button.flickity-next, .flickity-prev-next-button.flickity-next, .flickity-prev-next-button.next'); 10423 // Build contextual labels using the slide titles from the hidden label spans. 10424 var slides = slideshow.querySelectorAll('.snb-hero-native__slide'); 10425 var currentIndex = 0; 10426 for (var si = 0; si < slides.length; si++) { 10427 if (slides[si].classList.contains('is-selected')) { currentIndex = si; break; } 10428 } 10429 var totalSlides = slides.length; 10430 function getSlideTitle(index) { 10431 if (!slides[index]) return ''; 10432 var span = slides[index].querySelector('[id^="snb-hero-slide-label-"]'); 10433 if (span) return span.textContent.replace(/^Slide \d+ of \d+:\s*/, '').trim(); 10434 return 'slide ' + (index + 1); 10435 } 10436 var prevIndex = (currentIndex - 1 + totalSlides) % totalSlides; 10437 var nextIndex = (currentIndex + 1) % totalSlides; 10438 var prevLabel = 'Previous: ' + getSlideTitle(prevIndex); 10439 var nextLabel = 'Next: ' + getSlideTitle(nextIndex); 10440 if (prev && prev.getAttribute('aria-label') !== prevLabel) { 10441 prev.setAttribute('aria-label', prevLabel); 10442 } 10443 if (next && next.getAttribute('aria-label') !== nextLabel) { 10444 next.setAttribute('aria-label', nextLabel); 10445 } 10446 // Page dots â remove from keyboard tab order and screen reader navigation. 10447 // Users navigate slides via prev/next buttons; dots remain mouse/touch clickable. 10448 // Also normalizes aria-current="step" â "true" in case any AT still reaches them. 10449 var dotsContainer = slideshow.querySelector('.flickity-page-dots'); 10450 if (dotsContainer && dotsContainer.getAttribute('aria-hidden') !== 'true') { 10451 dotsContainer.setAttribute('aria-hidden', 'true'); 10452 } 10453 var dots = slideshow.querySelectorAll('.flickity-page-dots .dot'); 10454 for (var i = 0; i < dots.length; i++) { 10455 if (dots[i].getAttribute('tabindex') !== '-1') { 10456 dots[i].setAttribute('tabindex', '-1'); 10457 } 10458 if (dots[i].getAttribute('aria-current') === 'step') { 10459 dots[i].setAttribute('aria-current', 'true'); 10460 } 10461 } 10462 } 10463 // Initial label pass only â the standalone script at the bottom of 10464 // this section handles ongoing observation. Do NOT add a MutationObserver 10465 // here â two observers on the same subtree setting the same attributes 10466 // causes an infinite loop that freezes the page. 10467 applyLabels(); 10468 setTimeout(applyLabels, 200); 10469 setTimeout(applyLabels, 500); 10470 } 10471 10472 function destroySlider() { 10473 var flk = window._snbHeroNativeFlickity[sectionId]; 10474 if (flk && typeof flk.destroy === 'function') { 10475 flk.destroy(); 10476 delete window._snbHeroNativeFlickity[sectionId]; 10477 } 10478 } 10479 10480 function onBlockSelect(evt) { 10481 if (evt.detail.sectionId !== sectionId) return; 10482 var slide = slideshow.querySelector('.snb-hero-native__slide--' + evt.detail.blockId); 10483 if (!slide) return; 10484 var slides = slideshow.querySelectorAll('.snb-hero-native__slide'); 10485 var index = [].indexOf.call(slides, slide); 10486 var flk = window._snbHeroNativeFlickity[sectionId]; 10487 if (flk && typeof flk.goToSlide === 'function') { 10488 flk.goToSlide(index); 10489 if (typeof flk.pause === 'function') flk.pause(); 10490 } 10491 } 10492 10493 function onBlockDeselect(evt) { 10494 if (evt.detail.sectionId !== sectionId) return; 10495 var flk = window._snbHeroNativeFlickity[sectionId]; 10496 if (flk && flk.args && flk.args.autoPlay && typeof flk.play === 'function') flk.play(); 10497 } 10498 10499 function onSectionUnload(evt) { 10500 if (evt.detail.sectionId === sectionId) destroySlider(); 10501 } 10502 10503 function getScrollOffset() { 10504 var scrollOffset = 0; 10505 if (typeof theme !== 'undefined' && theme.config && theme.config.stickyHeader) { 10506 var header = document.querySelector('#SiteHeader'); 10507 if (header) { 10508 scrollOffset = header.offsetHeight; 10509 } 10510 } 10511 return scrollOffset; 10512 } 10513 10514 function smoothScrollTo(targetElement) { 10515 var scrollOffset = getScrollOffset(); 10516 var targetPosition = targetElement.getBoundingClientRect().top + window.pageYOffset - scrollOffset; 10517 window.scrollTo({ 10518 top: Math.max(0, targetPosition), 10519 behavior: 'smooth' 10520 }); 10521 } 10522 10523 function initSmoothScroll() { 10524 var ctaButtons = section.querySelectorAll('.snb-hero-native__cta'); 10525 ctaButtons.forEach(function(button) { 10526 var href = button.getAttribute('href'); 10527 if (href && href.startsWith('#')) { 10528 button.addEventListener('click', function(e) { 10529 var targetId = href.substring(1); 10530 var targetElement = document.getElementById(targetId); 10531 10532 if (targetElement) { 10533 e.preventDefault(); 10534 smoothScrollTo(targetElement); 10535 } 10536 }); 10537 } 10538 }); 10539 } 10540 10541 var slideLinksInitialized = false;
10542 var slideClickData = {}; 10543 10544 function handleSlideLink(slideLink, linkType) { 10545 // If it's an anchor link (#something), always scroll 10546 if (slideLink.startsWith('#')) { 10547 var targetId = slideLink.substring(1); 10548 var targetElement = document.getElementById(targetId); 10549 10550 if (targetElement) { 10551 smoothScrollTo(targetElement); 10552 } 10553 } else if (linkType === 'scroll') { 10554 var targetElement = document.getElementById(slideLink); 10555 10556 if (targetElement) { 10557 smoothScrollTo(targetElement); 10558 } else { 10559 window.location.href = slideLink; 10560 } 10561 } else { 10562 window.location.href = slideLink; 10563 } 10564 } 10565 10566 function initSlideLinks() { 10567 if (slideLinksInitialized) return; 10568 if (!section || !slideshow) return; 10569 10570 var slides = section.querySelectorAll('.snb-hero-native__slide--clickable'); 10571 if (slides.length === 0) return; 10572 10573 slideLinksInitialized = true; 10574 10575 // Keyboard support for clickable slides 10576 slides.forEach(function(slide) { 10577 slide.addEventListener('keydown', function(e) { 10578 if (e.key === 'Enter' || e.key === ' ') { 10579 e.preventDefault(); 10580 var link = slide.getAttribute('data-slide-link'); 10581 var type = slide.getAttribute('data-slide-link-type') || 'redirect'; 10582 if (link) handleSlideLink(link, type); 10583 } 10584 }); 10585 }); 10586 10587 // Track mouse/touch events to distinguish clicks from drags 10588 var mouseDownData = {}; 10589 10590 slideshow.addEventListener('mousedown', function(e) { 10591 var slide = e.target.closest('.snb-hero-native__slide--clickable'); 10592 if (slide) { 10593 mouseDownData[slide] = { 10594 x: e.clientX, 10595 y: e.clientY, 10596 time: Date.now() 10597 }; 10598 } 10599 }, true); // Use capture phase 10600 10601 slideshow.addEventListener('touchstart', function(e) { 10602 var slide = e.target.closest('.snb-hero-native__slide--clickable'); 10603 if (slide && e.touches.length > 0) { 10604 mouseDownData[slide] = { 10605 x: e.touches[0].clientX, 10606 y: e.touches[0].clientY, 10607 time: Date.now() 10608 }; 10609 } 10610 }, true); 10611 10612 // Handle touch events for mobile 10613 slideshow.addEventListener('touchend', function(e) { 10614 var slide = e.target.closest('.snb-hero-native__slide--clickable'); 10615 if (!slide) return; 10616 10617 var slideLink = slide.getAttribute('data-slide-link'); 10618 var linkType = slide.getAttribute('data-slide-link-type') || 'redirect'; 10619 10620 if (!slideLink) return; 10621 10622 // Check if this was a drag (not a tap) 10623 var clickInfo = mouseDownData[slide]; 10624 if (clickInfo && e.changedTouches.length > 0) { 10625 var moveDistance = Math.sqrt( 10626 Math.pow(e.changedTouches[0].clientX - clickInfo.x, 2) + 10627 Math.pow(e.changedTouches[0].clientY - clickInfo.y, 2) 10628 ); 10629 var timeDiff = Date.now() - clickInfo.time; 10630 10631 // If moved more than 10px or took more than 500ms, it's a drag 10632 if (moveDistance > 10 || timeDiff > 500) { 10633 delete mouseDownData[slide]; 10634 return; 10635 } 10636 delete mouseDownData[slide]; 10637 } 10638 10639 // Only skip Flickity controls 10640 var clickedElement = e.target; 10641 if (clickedElement.closest('.flickity-button') || clickedElement.closest('.flickity-page-dots')) { 10642 return; 10643 } 10644 10645 // Handle the slide link - work anywhere on slide 10646 e.preventDefault(); 10647 e.stopPropagation(); 10648 10649 handleSlideLink(slideLink, linkType); 10650 }, true); 10651 10652 // Handle desktop mouse clicks - use capture phase to catch before Flickity 10653 slideshow.addEventListener('click', function(e) { 10654 // Find the closest clickable slide 10655 var slide = e.target.closest('.snb-hero-native__slide--clickable'); 10656 if (!slide) return; 10657 10658 var slideLink = slide.getAttribute('data-slide-link'); 10659 var linkType = slide.getAttribute('data-slide-link-type') || 'redirect'; 10660 10661 if (!slideLink) return; 10662 10663 // Check if this was a drag (not a click) 10664 var clickInfo = mouseDownData[slide]; 10665 if (clickInfo) { 10666 var moveDistance = Math.sqrt( 10667 Math.pow(e.clientX - clickInfo.x, 2) + 10668 Math.pow(e.clientY - clickInfo.y, 2) 10669 ); 10670 var timeDiff = Date.now() - clickInfo.time; 10671 10672 // If moved more than 10px or took more than 500ms, it's a drag 10673 if (moveDistance > 10 || timeDiff > 500) { 10674 delete mouseDownData[slide]; 10675 return; 10676 } 10677 delete mouseDownData[slide]; 10678 } 10679 10680 // Only skip Flickity controls 10681 var clickedElement = e.target; 10682 if (clickedElement.closest('.flickity-button') || clickedElement.closest('.flickity-page-dots')) { 10683 return; 10684 } 10685
10686 // Handle the slide link - work anywhere on slide 10687 e.preventDefault(); 10688 e.stopPropagation(); 10689 10690 handleSlideLink(slideLink, linkType); 10691 }, true); // Use capture phase to intercept before Flickity 10692 10693 // Also attach directly to each slide as a fallback for desktop 10694 // Use mouseup instead of click to avoid Flickity interference 10695 slides.forEach(function(slide) { 10696 var slideLink = slide.getAttribute('data-slide-link'); 10697 var linkType = slide.getAttribute('data-slide-link-type') || 'redirect'; 10698 10699 if (!slideLink) return; 10700 10701 var slideMouseDown = null; 10702 var isDragging = false; 10703 10704 slide.addEventListener('mousedown', function(e) { 10705 // Only skip Flickity controls 10706 if (e.target.closest('.flickity-button') || e.target.closest('.flickity-page-dots')) { 10707 return; 10708 } 10709 slideMouseDown = { 10710 x: e.clientX, 10711 y: e.clientY, 10712 time: Date.now() 10713 }; 10714 isDragging = false; 10715 }); 10716 10717 slide.addEventListener('mousemove', function(e) { 10718 if (slideMouseDown) { 10719 var moveDistance = Math.sqrt( 10720 Math.pow(e.clientX - slideMouseDown.x, 2) + 10721 Math.pow(e.clientY - slideMouseDown.y, 2) 10722 ); 10723 if (moveDistance > 5) { 10724 isDragging = true; 10725 } 10726 } 10727 }); 10728 10729 slide.addEventListener('mouseup', function(e) { 10730 // Only skip Flickity controls 10731 if (e.target.closest('.flickity-button') || e.target.closest('.flickity-page-dots')) { 10732 slideMouseDown = null; 10733 isDragging = false; 10734 return; 10735 } 10736 10737 if (!slideMouseDown || isDragging) { 10738 slideMouseDown = null; 10739 isDragging = false; 10740 return; 10741 } 10742 10743 // Check if this was a drag 10744 var moveDistance = Math.sqrt( 10745 Math.pow(e.clientX - slideMouseDown.x, 2) + 10746 Math.pow(e.clientY - slideMouseDown.y, 2) 10747 ); 10748 var timeDiff = Date.now() - slideMouseDown.time; 10749 10750 if (moveDistance > 10 || timeDiff > 500) { 10751 slideMouseDown = null; 10752 isDragging = false; 10753 return; 10754 } 10755 10756 // Handle the slide link - work anywhere on slide 10757 e.preventDefault(); 10758 e.stopPropagation(); 10759 10760 slideMouseDown = null; 10761 isDragging = false; 10762 10763 handleSlideLink(slideLink, linkType); 10764 }); 10765 10766 // Also keep click handler as backup 10767 slide.addEventListener('click', function(e) { 10768 // Only skip Flickity controls 10769 if (e.target.closest('.flickity-button') || e.target.closest('.flickity-page-dots')) { 10770 return; 10771 } 10772 10773 // Handle the slide link - work anywhere on slide 10774 e.preventDefault(); 10775 e.stopPropagation(); 10776 10777 handleSlideLink(slideLink, linkType); 10778 }); 10779 }); 10780 } 10781 10782 if (document.readyState === 'loading') { 10783 document.addEventListener('DOMContentLoaded', function() { 10784 initSlider(); 10785 initPauseButton(); 10786 initSmoothScroll(); 10787 initSlideLinks(); 10788 enforcePrevNextLabels(); 10789 enforceSlideInert(); 10790 }); 10791 } else { 10792 initSlider(); 10793 initPauseButton(); 10794 initSmoothScroll(); 10795 initSlideLinks(); 10796 enforcePrevNextLabels(); 10797 enforceSlideInert(); 10798 } 10799 document.addEventListener('shopify:section:load', function(evt) { 10800 if (evt.detail.sectionId === sectionId) { 10801 var container = document.querySelector('[data-section-id="' + sectionId + '"][data-section-type="snb-hero-native"]'); 10802 if (container) { 10803 section = container; 10804 slideshow = document.getElementById('Slideshow-' + sectionId); 10805 slideLinksInitialized = false; 10806 if (slideshow) { 10807 initSlider(); 10808 initPauseButton(); 10809 initSmoothScroll(); 10810 initSlideLinks(); 10811 enforcePrevNextLabels(); 10812 enforceSlideInert(); 10813 } 10814 } 10815 } 10816 }); 10817 document.addEventListener('shopify:block:select', onBlockSelect); 10818 document.addEventListener('shopify:block:deselect', onBlockDeselect); 10819 document.addEventListener('shopify:section:unload', onSectionUnload); 10820})(); 10821</script>
10821 10822 10823 10824
10825<script> 10826// a11y: standalone hero prev/next + dots labeler. 10827// Runs independently of the main hero script because Flickity may be 10828// initialized by theme.js, not by initSlider(). 10829(function () { 10830 var hero = document.querySelector('.snb-hero-native'); 10831 if (!hero) return; 10832 10833 function applyHeroA11y() { 10834 var prev = hero.querySelector('.flickity-button.flickity-previous'); 10835 var next = hero.querySelector('.flickity-button.flickity-next'); 10836 if (!prev && !next) return false; 10837 10838 var slides = hero.querySelectorAll('.snb-hero-native__slide'); 10839 var currentIndex = 0; 10840 for (var i = 0; i < slides.length; i++) { 10841 if (slides[i].classList.contains('is-selected')) { currentIndex = i; break; } 10842 } 10843 var total = slides.length; 10844 10845 function getTitle(index) { 10846 var slide = slides[index]; 10847 if (!slide) return 'slide ' + (index + 1); 10848 var span = slide.querySelector('[id^="snb-hero-slide-label-"]'); 10849 if (span) return span.textContent.replace(/^Slide \d+ of \d+:\s*/, '').trim(); 10850 var h = slide.querySelector('h1, h2, .hero__title'); 10851 if (h) return h.textContent.trim(); 10852 return 'slide ' + (index + 1); 10853 } 10854 10855 var prevI = (currentIndex - 1 + total) % total; 10856 var nextI = (currentIndex + 1) % total; 10857 var prevLabel = 'Previous: ' + getTitle(prevI); 10858 var nextLabel = 'Next: ' + getTitle(nextI); 10859 10860 // Guard: only set if value differs â prevents MutationObserver infinite loop. 10861 if (prev && prev.getAttribute('aria-label') !== prevLabel) prev.setAttribute('aria-label', prevLabel); 10862 if (next && next.getAttribute('aria-label') !== nextLabel) next.setAttribute('aria-label', nextLabel); 10863 10864 // Hide dots from AT 10865 var dotsContainer = hero.querySelector('.flickity-page-dots'); 10866 if (dotsContainer && dotsContainer.getAttribute('aria-hidden') !== 'true') dotsContainer.setAttribute('aria-hidden', 'true'); 10867 hero.querySelectorAll('.flickity-page-dots .dot').forEach(function (d) { 10868 if (d.getAttribute('tabindex') !== '-1') d.setAttribute('tabindex', '-1'); 10869 if (d.getAttribute('aria-current') === 'step') d.setAttribute('aria-current', 'true'); 10870 }); 10871 10872 return true; 10873 } 10874 10875 // Poll until buttons exist, then observe for slide changes. 10876 var attempts = 0; 10877 var poll = setInterval(function () { 10878 attempts++; 10879 if (applyHeroA11y() || attempts > 25) { 10880 clearInterval(poll); 10881 // Watch for slide changes (class-based) to update labels dynamically. 10882 // ONLY watch 'class' â NOT 'aria-label' or 'aria-current' â to prevent 10883 // infinite observer loops (setting an attribute re-triggers the observer). 10884 if (typeof MutationObserver === 'function') { 10885 new MutationObserver(function () { 10886 // Debounce to avoid rapid-fire during Flickity transitions. 10887 clearTimeout(hero._a11yDebounce); 10888 hero._a11yDebounce = setTimeout(applyHeroA11y, 50); 10889 }).observe(hero, { 10890 subtree: true, 10891 attributes: true, 10892 attributeFilter: ['class'] 10893 }); 10894 } 10895 } 10896 }, 200); 10897})(); 10898</script>
10898 10899 10900</div><div id="shopify-section-template--17749318303830__snb_makers_rFLVy4" class="shopify-section"> 10901<style data-shopify>#shopify-section-template--17749318303830__snb_makers_rFLVy4 { 10902 --snb-makers-bg: #f5f1ec; 10903 --snb-makers-text: #333333; 10904 --snb-makers-subtitle: #1b4b5a; 10905 --snb-makers-heading: #1b3a3a; 10906 --snb-makers-btn-bg: #b74b1a; 10907 --snb-makers-btn-text: #ffffff; 10908 --snb-makers-pt: 60px; 10909 --snb-makers-pb: 60px; 10910 } 10911 10912 .snb-makers { 10913 background-color: var(--snb-makers-bg); 10914 padding-top: var(--snb-makers-pt); 10915 padding-bottom: var(--snb-makers-pb); 10916 overflow: hidden; 10917 } 10918 10919 .snb-makers__grid { 10920 display: grid; 10921 grid-template-columns: 1fr; 10922 gap: 32px; 10923 align-items: center; 10924 } 10925 10926 .snb-makers__image-wrap { 10927 position: relative; 10928 width: 100%; 10929 overflow: hidden; 10930 } 10931 10932 .snb-makers__image-wrap img { 10933 display: block; 10934 width: 100%; 10935 height: auto; 10936 object-fit: cover; 10937 opacity: 0; 10938 transition: opacity 0.4s ease; 10939 } 10940 10941 .snb-makers__image-wrap img.is-loaded { 10942 opacity: 1; 10943 } 10944 10945 .snb-makers__content { 10946 text-align: center; 10947 padding: 0 20px; 10948 } 10949 10950 .snb-makers__subtitle { 10951 font-family: 'Montserrat', sans-serif; 10952 font-size: 14px; 10953 font-weight: 400; 10954 letter-spacing: 3px; 10955 text-transform: uppercase; 10956 color: var(--snb-makers-subtitle); 10957 margin: 0 0 12px; 10958 } 10959 10960 .snb-makers__heading { 10961 font-family: 'Orpheus Pro', serif; 10962 font-size: 32px; 10963 font-weight: 400; 10964 line-height: 1.2; 10965 color: var(--snb-makers-heading); 10966 margin: 0 0 16px; 10967 } 10968 10969 .snb-makers__description { 10970 font-family: 'Lato', sans-serif; 10971 font-size: 15px; 10972 font-weight: 400; 10973 line-height: 1.6; 10974 color: var(--snb-makers-text); 10975 margin: 0 0 24px; 10976 max-width: 480px; 10977 margin-left: auto; 10978 margin-right: auto; 10979 } 10980 10981 .snb-makers__btn { 10982 width: 100%; 10983 text-align: center; 10984 box-sizing: border-box; 10985 } 10986 10987 .snb-makers__btn:focus-visible { 10988 outline: 2px solid currentColor; 10989 outline-offset: 3px; 10990 } 10991 10992 .snb-makers__decorative { 10993 display: none; 10994 } 10995 10996 @media (min-width: 769px) { 10997 .snb-makers__grid { 10998 grid-template-columns: 1fr 1fr; 10999 gap: 60px; 11000 position: relative; 11001 } 11002 11003 11004 11005 .snb-makers__content { 11006 text-align: left; 11007 padding: 40px 0; 11008 11009 padding-right: 60px; 11010 11011 } 11012 11013 .snb-makers__subtitle { 11014 font-size: 14px; 11015 letter-spacing: 4px; 11016 margin-bottom: 16px; 11017 } 11018 11019 .snb-makers__heading { 11020 font-size: 48px; 11021 margin-bottom: 20px; 11022 } 11023 11024 .snb-makers__description { 11025 font-size: 16px; 11026 margin-left: 0; 11027 margin-right: 0; 11028 margin-bottom: 32px; 11029 max-width: 520px; 11030 } 11031 11032 .snb-makers__btn { 11033 width: auto; 11034 } 11035 11036 .snb-makers__decorative { 11037 display: block; 11038 position: absolute; 11039 11040 right: 20px; 11041 11042 top: 50%; 11043 transform: translateY(-50%); 11044 width: auto; 11045 height: 280px; 11046 pointer-events: none; 11047 } 11048 11049 .snb-makers__decorative img { 11050 display: block; 11051 height: 100%; 11052 width: auto; 11053 object-fit: contain; 11054 } 11055 } 11056 11057 @media (min-width: 1200px) { 11058 .snb-makers__heading { 11059 font-size: 54px; 11060 } 11061 11062 .snb-makers__decorative { 11063 11064 right: 40px; 11065 11066 height: 320px; 11067 } 11068 }</style><section class="snb-makers" aria-labelledby="snb-makers-heading-template--17749318303830__snb_makers_rFLVy4"> 11069 <div class="page-width"> 11070 <div class="snb-makers__grid"> 11071 <div class="snb-makers__image-wrap" aria-hidden="true"><img 11072 src="//bokksu.com/cdn/shop/files/our-makers.webp?v=1772818210&width=375" 11073 data-srcset="//bokksu.com/cdn/shop/files/our-makers.webp?v=1772818210&width=375 375w, 11074 //bokksu.com/cdn/shop/files/our-makers.webp?v=1772818210&width=550 550w, 11075 //bokksu.com/cdn/shop/files/our-makers.webp?v=1772818210&width=750 750w, 11076 //bokksu.com/cdn/shop/files/our-makers.webp?v=1772818210&width=1000 1000w, 11077 //bokksu.com/cdn/shop/files/our-makers.webp?v=1772818210&width=1200 1200w" 11078 data-src="//bokksu.com/cdn/shop/files/our-makers.webp?v=1772818210&width=750" 11079 sizes="(min-width: 769px) 50vw, 100vw" 11080 alt="" 11081 loading="lazy" 11082 width="1600" 11083 height="1067" 11084 ></div> 11085 11086 <div class="snb-makers__content"><p class="snb-makers__subtitle" aria-hidden="true">WHAT MAKES US DIFFERENT</p> 11087 <p class="visually-hidden">What makes us different</p><h2 class="snb-makers__heading" id="snb-makers-heading-template--17749318303830__snb_makers_rFLVy4">Our Commitment to Craft & Culture!</h2><div class="snb-makers__description"><p>With a Bokksu subscription, enjoy a Japanese snack box while supporting small family-run businesses in Japan and preserving their traditions.</p></div><a 11088 href="#snack-box-subscription" 11089 class="btn btn-custom btn-orange-bg snb-makers__btn" 11090 aria-label="Subscribe now â choose your plan" 11091 > 11092 SUBSCRIBE NOW 11093 </a></div><div class="snb-makers__decorative" aria-hidden="true"> 11094 <img 11095 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_532aa0c3cbe24c309cf3ccbcedf56119.webp?v=1772818349&width=200" 11096 alt="" 11097 loading="lazy" 11098 width="60" 11099 height="902" 11100 >
11101 </div></div> 11102 </div> 11103</section> 11104
11105<script> 11106(function() { 11107 var sectionId = 'template--17749318303830__snb_makers_rFLVy4'; 11108 var sectionEl = document.getElementById('shopify-section-' + sectionId); 11109 11110 function loadImages() { 11111 if (!sectionEl) return; 11112 var imgs = sectionEl.querySelectorAll('img[data-src]'); 11113 imgs.forEach(function(img) { 11114 img.onload = function() { 11115 img.classList.add('is-loaded'); 11116 }; 11117 if (img.dataset.srcset) { 11118 img.srcset = img.dataset.srcset; 11119 delete img.dataset.srcset; 11120 } 11121 img.src = img.dataset.src; 11122 delete img.dataset.src; 11123 }); 11124 } 11125 11126 function lazyInit() { 11127 if (!sectionEl) { 11128 sectionEl = document.querySelector('.snb-makers'); 11129 } 11130 if (!sectionEl) return; 11131 11132 if ('IntersectionObserver' in window) { 11133 var observer = new IntersectionObserver(function(entries) { 11134 entries.forEach(function(entry) { 11135 if (entry.isIntersecting) { 11136 observer.unobserve(entry.target); 11137 loadImages(); 11138 } 11139 }); 11140 }, { rootMargin: '200px 0px' }); 11141 observer.observe(sectionEl); 11142 } else { 11143 loadImages(); 11144 } 11145 } 11146 11147 if (document.readyState === 'loading') { 11148 document.addEventListener('DOMContentLoaded', lazyInit); 11149 } else { 11150 lazyInit(); 11151 } 11152 11153 document.addEventListener('shopify:section:load', function(evt) { 11154 if (evt.detail.sectionId === sectionId) loadImages(); 11155 }); 11156})(); 11157</script>
11157 11158 11159 11160</div><div id="shopify-section-template--17749318303830__snb_featured_by_native_JMt4K8" class="shopify-section"> 11161<style data-shopify>#shopify-section-template--17749318303830__snb_featured_by_native_JMt4K8 { 11162 --snb-featured-bg: #5b1a1a; 11163 --snb-featured-heading: #ffffff; 11164 --snb-featured-pt: 32px; 11165 --snb-featured-pb: 28px; 11166 } 11167 11168 .snb-featured { 11169 background-color: var(--snb-featured-bg); 11170 padding-top: var(--snb-featured-pt); 11171 padding-bottom: var(--snb-featured-pb); 11172 } 11173 11174 .snb-featured__heading { 11175 font-family: 'Montserrat',sans-serif; 11176 font-size: 14px !important; 11177 font-weight: 400; 11178 letter-spacing: 4px; 11179 text-transform: uppercase; 11180 text-align: center; 11181 color: var(--snb-featured-heading); 11182 margin: 0 0 40px; 11183 } 11184 11185 .snb-featured__grid { 11186 display: flex; 11187 flex-wrap: nowrap; 11188 align-items: center; 11189 justify-content: flex-start; 11190 gap: 32px; 11191 max-width: 1500px; 11192 margin: 0 auto; 11193 overflow-x: auto; 11194 -webkit-overflow-scrolling: touch; 11195 scroll-snap-type: x proximity; 11196 scrollbar-width: none; 11197 -ms-overflow-style: none; 11198 padding-bottom: 4px; 11199 } 11200 11201 /* Center the row when it fits; scroll-from-start when it overflows. 11202 `safe center` keeps the first items reachable instead of clipping them. */ 11203 @media (min-width: 769px) { 11204 .snb-featured__grid { 11205 justify-content: safe center; 11206 } 11207 } 11208 11209 .snb-featured__grid:focus-visible { 11210 outline: 2px solid var(--snb-featured-heading); 11211 outline-offset: 4px; 11212 } 11213 11214 .snb-featured__grid::-webkit-scrollbar {
11215 display: none; 11216 } 11217 11218 .snb-featured__logo { 11219 display: flex; 11220 align-items: center; 11221 justify-content: center; 11222 flex: 0 0 auto; 11223 width: 140px; 11224 scroll-snap-align: center; 11225 } 11226 11227 .snb-featured__logo img { 11228 display: block; 11229 width: 100%; 11230 height: auto; 11231 object-fit: contain; 11232 } 11233 11234 .snb-featured__logo a { 11235 display: block; 11236 width: 100%; 11237 } 11238 11239 .snb-featured__logo a:focus-visible { 11240 outline: 2px solid currentColor; 11241 outline-offset: 3px; 11242 } 11243 11244 @media (min-width: 769px) { 11245 .snb-featured__heading { 11246 font-size: 14px; 11247 margin-bottom: 48px; 11248 } 11249 11250 .snb-featured__grid { 11251 gap: 48px; 11252 } 11253 11254 .snb-featured__logo { 11255 width: 170px; 11256 } 11257 }</style><section class="snb-featured" aria-labelledby="snb-featured-heading-template--17749318303830__snb_featured_by_native_JMt4K8"> 11258 <div class="page-width"><h2 class="snb-featured__heading" id="snb-featured-heading-template--17749318303830__snb_featured_by_native_JMt4K8">FEATURED BY</h2><div class="snb-featured__grid" role="region" aria-label="FEATURED BY" tabindex="0"><div class="snb-featured__logo" ><img 11259 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_cc41954196424ea7a0b755efa3ed1638.webp?v=1773073930&width=400" 11260 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_cc41954196424ea7a0b755efa3ed1638.webp?v=1773073930&width=200 200w, 11261 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_cc41954196424ea7a0b755efa3ed1638.webp?v=1773073930&width=400 400w" 11262 sizes="(min-width: 769px) 170px, 140px" 11263 alt="Bon Appétit" 11264 loading="lazy" 11265 width="1500" 11266 height="425" 11267 ></div><div class="snb-featured__logo" ><img 11268 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_53252330e59a4d3f8db09a7b287c4d6e.png?v=1773073930&width=400" 11269 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_53252330e59a4d3f8db09a7b287c4d6e.png?v=1773073930&width=200 200w, 11270 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_53252330e59a4d3f8db09a7b287c4d6e.png?v=1773073930&width=400 400w" 11271 sizes="(min-width: 769px) 170px, 140px" 11272 alt="Byrdie" 11273 loading="lazy" 11274 width="500" 11275 height="75" 11276 ></div><div class="snb-featured__logo" ><img 11277 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_dfd1685e1df94afbbfac8b86c0edf4b3.webp?v=1773073930&width=400" 11278 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_dfd1685e1df94afbbfac8b86c0edf4b3.webp?v=1773073930&width=200 200w, 11279 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_dfd1685e1df94afbbfac8b86c0edf4b3.webp?v=1773073930&width=400 400w" 11280 sizes="(min-width: 769px) 170px, 140px" 11281 alt="TechCrunch" 11282 loading="lazy" 11283 width="1500" 11284 height="425" 11285 ></div><div class="snb-featured__logo" ><img 11286 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_63c0288e3b9e46abb7b65d678083f20b.webp?v=1773073930&width=400" 11287 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_63c0288e3b9e46abb7b65d678083f20b.webp?v=1773073930&width=200 200w, 11288 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_63c0288e3b9e46abb7b65d678083f20b.webp?v=1773073930&width=400 400w" 11289 sizes="(min-width: 769px) 170px, 140px" 11290 alt="Fast Company" 11291 loading="lazy" 11292 width="1500" 11293 height="425" 11294 ></div></div></div> 11295</section> 11296 11297 11298</div><div id="shopify-section-template--17749318303830__snb_how_it_works_native_Yx6xra" class="shopify-section"> 11299<style data-shopify>#shopify-section-template--17749318303830__snb_how_it_works_native_Yx6xra { 11300 --snb-hiw-bg: #f0e6d3; 11301 --snb-hiw-heading: #1a1a1a; 11302 --snb-hiw-title: #1a1a1a; 11303 --snb-hiw-text: #4a4a4a; 11304 --snb-hiw-pt: 48px; 11305 --snb-hiw-pb: 48px; 11306 } 11307 11308 .snb-hiw { 11309 background-color: var(--snb-hiw-bg); 11310 padding-top: var(--snb-hiw-pt); 11311 padding-bottom: var(--snb-hiw-pb); 11312 } 11313 11314 .snb-hiw__heading { 11315 font-size: 48px; 11316 font-weight: 400; 11317 text-align: center; 11318 color: var(--snb-hiw-heading); 11319 margin: 0 0 32px; 11320 } 11321 11322 .snb-hiw__grid { 11323 display: grid; 11324 grid-template-columns: 1fr; 11325 gap: 40px; 11326 max-width: 1200px; 11327 margin: 0 auto; 11328 list-style: none; 11329 padding: 0; 11330 } 11331 11332 .snb-hiw__step { 11333 text-align: center; 11334 } 11335 11336 .snb-hiw__image { 11337 position: relative; 11338 width: 100%; 11339 overflow: hidden; 11340 margin-bottom: 20px; 11341 } 11342 11343 .snb-hiw__image img { 11344 display: block; 11345 width: 100%; 11346 height: auto; 11347 object-fit: cover; 11348 } 11349 11350 .snb-hiw__image img { 11351 opacity: 0; 11352 transition: opacity 0.4s ease; 11353 } 11354 11355 .snb-hiw__image img.is-loaded { 11356 opacity: 1; 11357 } 11358 11359 .snb-hiw__title { 11360 font-size:28px; 11361 font-weight: 400; 11362 letter-spacing: 2px; 11363 text-transform: uppercase; 11364 color: var(--snb-hiw-title); 11365 margin: 0 0 12px; 11366 } 11367 11368 .snb-hiw__description { 11369 font-size: 14px; 11370 font-weight: 400; 11371 line-height: 1.6; 11372 color: var(--snb-hiw-text); 11373 margin: 0 auto; 11374 max-width: 360px; 11375 } 11376 11377 @media (min-width: 769px) { 11378 .snb-hiw__heading { 11379 font-size: 36px; 11380 margin-bottom: 40px; 11381 } 11382 11383 .snb-hiw__grid { 11384 grid-template-columns: repeat(3, 1fr); 11385 gap: 32px; 11386 } 11387 11388 .snb-hiw__title { 11389 font-size: 18px; 11390 margin-bottom: 16px; 11391 } 11392 11393 .snb-hiw__description { 11394 font-size: 14px; 11395 max-width: none; 11396 } 11397 } 11398 11399 .snb-hiw__step:focus-visible { 11400 outline: 2px solid currentColor; 11401 outline-offset: 3px; 11402 }</style><section class="snb-hiw" aria-labelledby="snb-hiw-heading-template--17749318303830__snb_how_it_works_native_Yx6xra"> 11403 <div class="page-width"><h2 class="snb-hiw__heading" id="snb-hiw-heading-template--17749318303830__snb_how_it_works_native_Yx6xra">How it works</h2><ol class="snb-hiw__grid"><li class="snb-hiw__step" ><div class="snb-hiw__image" aria-hidden="true"> 11404 <img 11405 src="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_003_1200x1200_b4714a3e-defc-4b77-99a4-cce78b278ed2.jpg?v=1780894490&width=400" 11406 data-src="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_003_1200x1200_b4714a3e-defc-4b77-99a4-cce78b278ed2.jpg?v=1780894490&width=800" 11407 data-srcset="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_003_1200x1200_b4714a3e-defc-4b77-99a4-cce78b278ed2.jpg?v=1780894490&width=400 400w, 11408 //bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_003_1200x1200_b4714a3e-defc-4b77-99a4-cce78b278ed2.jpg?v=1780894490&width=600 600w, 11409 //bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_003_1200x1200_b4714a3e-defc-4b77-99a4-cce78b278ed2.jpg?v=1780894490&width=800 800w" 11410 sizes="(min-width: 769px) 33vw, 100vw" 11411 alt="" 11412 loading="lazy" 11413 width="1200" 11414 height="1200" 11415 > 11416 </div><h3 class="snb-hiw__title">SUBSCRIBE</h3><p class="snb-hiw__description">and get a snack box delivered monthly filled with authentic treats like cakes, mochi, chips, tea, and more!</p></li><li class="snb-hiw__step" ><div class="snb-hiw__image" aria-hidden="true"> 11417 <img 11418 src="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_002_1200x1200_1.jpg?v=1780894290&width=400" 11419 data-src="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_002_1200x1200_1.jpg?v=1780894290&width=800" 11420 data-srcset="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_002_1200x1200_1.jpg?v=1780894290&width=400 400w, 11421 //bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_002_1200x1200_1.jpg?v=1780894290&width=600 600w, 11422 //bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_002_1200x1200_1.jpg?v=1780894290&width=800 800w" 11423 sizes="(min-width: 769px) 33vw, 100vw" 11424 alt="" 11425 loading="lazy" 11426 width="1200" 11427 height="1200" 11428 > 11429 </div><h3 class="snb-hiw__title">RECEIVE</h3><p class="snb-hiw__description">your first snack box and rare extra snacks when you join with a 3-, 6-, or 12-month plan.</p></li><li class="snb-hiw__step" ><div class="snb-hiw__image" aria-hidden="true"> 11430 <img 11431 src="//bokksu.com/cdn/shop/files/Bokksu_SnackBox_Box_Hero_012_Square_29da187b-7869-43b6-86af-0918585d9737.jpg?v=1780550901&width=400" 11432 data-src="//bokksu.com/cdn/shop/files/Bokksu_SnackBox_Box_Hero_012_Square_29da187b-7869-43b6-86af-0918585d9737.jpg?v=1780550901&width=800" 11433 data-srcset="//bokksu.com/cdn/shop/files/Bokksu_SnackBox_Box_Hero_012_Square_29da187b-7869-43b6-86af-0918585d9737.jpg?v=1780550901&width=400 400w, 11434 //bokksu.com/cdn/shop/files/Bokksu_SnackBox_Box_Hero_012_Square_29da187b-7869-43b6-86af-0918585d9737.jpg?v=1780550901&width=600 600w, 11435 //bokksu.com/cdn/shop/files/Bokksu_SnackBox_Box_Hero_012_Square_29da187b-7869-43b6-86af-0918585d9737.jpg?v=1780550901&width=800 800w" 11436 sizes="(min-width: 769px) 33vw, 100vw" 11437 alt="" 11438 loading="lazy" 11439 width="1200" 11440 height="1200" 11441 > 11442 </div><h3 class="snb-hiw__title">EXPERIENCE</h3><p class="snb-hiw__description">a new journey each month through Japanâs regional snacks, seasonal stories, and cultural celebrations.</p></li></ol></div> 11443</section> 11444
11445<script> 11446(function() { 11447 var sectionId = 'template--17749318303830__snb_how_it_works_native_Yx6xra'; 11448 var sectionEl = document.getElementById('shopify-section-' + sectionId); 11449 11450 function loadImages() { 11451 if (!sectionEl) return; 11452 var imgs = sectionEl.querySelectorAll('img[data-src]'); 11453 imgs.forEach(function(img) { 11454 img.onload = function() { 11455 img.classList.add('is-loaded'); 11456 }; 11457 if (img.dataset.srcset) { 11458 img.srcset = img.dataset.srcset; 11459 delete img.dataset.srcset; 11460 } 11461 img.src = img.dataset.src; 11462 delete img.dataset.src; 11463 }); 11464 } 11465 11466 function lazyInit() { 11467 if (!sectionEl) { 11468 sectionEl = document.querySelector('.snb-hiw'); 11469 } 11470 if (!sectionEl) return; 11471 11472 if ('IntersectionObserver' in window) { 11473 var observer = new IntersectionObserver(function(entries) { 11474 entries.forEach(function(entry) { 11475 if (entry.isIntersecting) { 11476 observer.unobserve(entry.target); 11477 loadImages(); 11478 } 11479 }); 11480 }, { rootMargin: '200px 0px' }); 11481 observer.observe(sectionEl); 11482 } else { 11483 loadImages(); 11484 } 11485 } 11486 11487 if (document.readyState === 'loading') { 11488 document.addEventListener('DOMContentLoaded', lazyInit); 11489 } else { 11490 lazyInit(); 11491 } 11492 11493 document.addEventListener('shopify:section:load', function(evt) { 11494 if (evt.detail.sectionId === sectionId) loadImages(); 11495 }); 11496})(); 11497</script>
11497 11498 11499 11500</div><div id="shopify-section-template--17749318303830__snb_first_box_native_iGia7U" class="shopify-section"> 11501<style data-shopify>#shopify-section-template--17749318303830__snb_first_box_native_iGia7U { 11502 --snb-fb-bg: #faf5ee; 11503 --snb-fb-heading: #1a1a1a; 11504 --snb-fb-subheading: #000000; 11505 --snb-fb-title: #b73d09; 11506 --snb-fb-text: #4a4a4a; 11507 --snb-fb-btn-bg: #b73d09; 11508 --snb-fb-btn-text: #ffffff; 11509 --snb-fb-pt: 48px; 11510 --snb-fb-pb: 48px; 11511 } 11512 11513 .snb-fb { 11514 background-color: var(--snb-fb-bg); 11515 padding-top: var(--snb-fb-pt); 11516 padding-bottom: var(--snb-fb-pb); 11517 } 11518 11519 .snb-fb__layout { 11520 display: grid; 11521 grid-template-columns: 1fr; 11522 gap: 32px; 11523 align-items: center; 11524 margin: 0 auto; 11525 } 11526 11527 /* Carousel */ 11528 .snb-fb__carousel-wrap { 11529 position: relative; 11530 width: 100%; 11531 padding: 0 36px; 11532 box-sizing: border-box; 11533 } 11534 11535 .snb-fb__carousel { 11536 width: 100%; 11537 } 11538 11539 .snb-fb__carousel:not(.flickity-enabled) { 11540 position: relative; 11541 } 11542 11543 .snb-fb__carousel:not(.flickity-enabled) .snb-fb__slide { 11544 display: none; 11545 } 11546 11547 .snb-fb__carousel:not(.flickity-enabled) .snb-fb__slide:first-child { 11548 display: block; 11549 } 11550 11551 .snb-fb__slide { 11552 width: 100%; 11553 } 11554 11555 .snb-fb__slide img { 11556 display: block; 11557 width: 100%; 11558 height: auto; 11559 object-fit: cover; 11560 } 11561 11562 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-button { 11563 background: transparent; 11564 width: 40px; 11565 height: 40px; 11566 color: #1A1A1A; 11567 } 11568 11569 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-button:hover { 11570 background: transparent; 11571 opacity: 0.7; 11572 } 11573 11574 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-previous { 11575 left: -25px; 11576 } 11577 11578 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-next { 11579 right: -32px; 11580 } 11581 11582 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-button svg { 11583 width: 20px; 11584 height: 20px; 11585 } 11586 11587 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-page-dots { 11588 position: relative; 11589 bottom: auto; 11590 margin-top: 16px; 11591 } 11592 11593 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-page-dots .dot { 11594 width: 8px; 11595 height: 8px; 11596 background: rgba(0, 0, 0, 0.2); 11597 } 11598 11599 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-page-dots .dot.is-selected { 11600 background: #1A1A1A; 11601 } 11602 11603 /* Content */ 11604 .snb-fb__content { 11605 text-align: center; 11606 padding: 0 16px; 11607 } 11608 11609 .snb-fb__subheading { 11610 font-family: 'Montserrat', sans-serif; 11611 font-size: 14px; 11612 font-weight: 500; 11613 letter-spacing: 3px; 11614 text-transform: uppercase; 11615 line-height: 18px; 11616 color: var(--snb-fb-subheading); 11617 margin: 0 0 8px; 11618 } 11619 11620 .snb-fb__heading { 11621 font-family: 'Orpheus Pro', sans-serif; 11622 font-size: 32px; 11623 font-weight: 400; 11624 line-height: 36px; 11625 color: var(--snb-fb-heading); 11626 margin: 0 0 28px; 11627 } 11628 11629 /* Features grid */ 11630 .snb-fb__features { 11631 display: grid; 11632 grid-template-columns: repeat(2, 1fr); 11633 gap: 24px 20px; 11634 margin-bottom: 32px; 11635 margin-left: 0px; 11636 list-style: none; 11637 padding: 0; 11638 } 11639 11640 .snb-fb__feature { 11641 display: flex; 11642 align-items: flex-start; 11643 gap: 10px; 11644 text-align: left; 11645 } 11646 11647 .snb-fb__feature-icon { 11648 flex-shrink: 0; 11649 width: 28px; 11650 height: 28px; 11651 } 11652 11653 .snb-fb__feature-icon img { 11654 display: block; 11655 width: 100%; 11656 height: 100%; 11657 object-fit: contain; 11658 } 11659 11660 .snb-fb__feature-icon svg { 11661 display: block; 11662 width: 100%; 11663 height: 100%; 11664 } 11665 11666 .snb-fb__feature-body { 11667 flex: 1; 11668 min-width: 0; 11669 } 11670 11671 .snb-fb__feature-title { 11672 font-family: 'Montserrat', sans-serif; 11673 font-size: 13px !important; 11674 font-weight: 600; 11675 letter-spacing: 1.5px; 11676 text-transform: uppercase; 11677 line-height: 18px; 11678 color: var(--snb-fb-title); 11679 margin: 0 0 4px; 11680 } 11681 11682 .snb-fb__feature-desc { 11683 font-family: 'Lato', sans-serif; 11684 font-size: 16px; 11685 font-weight: 400; 11686 line-height: 24px; 11687 color: var(--snb-fb-text); 11688 margin: 0; 11689 } 11690 11691 /* CTA */ 11692 .snb-fb__btn { 11693 width: 100%; 11694 text-align: center; 11695 box-sizing: border-box; 11696 } 11697 11698 @media (min-width: 769px) { 11699 .snb-fb__layout { 11700 grid-template-columns: 2fr 3fr; 11701 gap: 48px; 11702 } 11703 11704 .snb-fb__carousel-wrap { 11705 padding: 0 48px; 11706 } 11707 11708 .snb-fb__content { 11709 text-align: left; 11710 padding: 0; 11711 } 11712 11713 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-button.previous { 11714 left: -48px; 11715 } 11716 11717 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-button.next { 11718 right: -48px; 11719 } 11720 11721 .snb-fb__heading { 11722 font-size: 44px; 11723 line-height: 50px; 11724 margin-bottom: 32px; 11725 } 11726 11727 .snb-fb__features { 11728 gap: 20px 32px; 11729 margin-bottom: 36px; 11730 } 11731 11732 .snb-fb__feature-icon { 11733 width: 32px; 11734 height: 32px; 11735 } 11736 } 11737 11738 .snb-fb__btn:focus-visible { 11739 outline: 2px solid currentColor; 11740 outline-offset: 3px; 11741 } 11742 11743 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-button:focus-visible { 11744 outline: 2px solid #1A1A1A; 11745 outline-offset: 2px; 11746 }</style><section class="snb-fb" aria-labelledby="snb-fb-heading-template--17749318303830__snb_first_box_native_iGia7U"> 11747 <div class="page-width"> 11748 <div class="snb-fb__layout"><div class="snb-fb__carousel-wrap"><div 11749 class="snb-fb__carousel" 11750 id="snb-fb-carousel-template--17749318303830__snb_first_box_native_iGia7U" 11751 data-section-id="template--17749318303830__snb_first_box_native_iGia7U" 11752 role="region" 11753 aria-roledescription="carousel" 11754 aria-label="Product images" 11755 ><div 11756 class="snb-fb__slide" 11757 role="group" 11758 aria-roledescription="slide" 11759 aria-label="Image 1 of 3" 11760 11761 ><img 11762 src="//bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square_46adf27f-3374-4ec8-ab80-da4a31009a43.jpg?v=1777597091&width=900" 11763 srcset="//bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square_46adf27f-3374-4ec8-ab80-da4a31009a43.jpg?v=1777597091&width=450 450w, 11764 //bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square_46adf27f-3374-4ec8-ab80-da4a31009a43.jpg?v=1777597091&width=600 600w, 11765 //bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square_46adf27f-3374-4ec8-ab80-da4a31009a43.jpg?v=1777597091&width=900 900w" 11766 sizes="(min-width: 769px) 50vw, 100vw" 11767 alt="Product image" 11768 loading="lazy" 11769 width="1200" 11770 height="1200" 11771 ></div><div 11772 class="snb-fb__slide" 11773 role="group" 11774 aria-roledescription="slide" 11775 aria-label="Image 2 of 3" 11776 11777 ><img 11778 src="//bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_2_HeroBanner_1200x1200_0c4e23f1-ad8b-4f96-b95f-0c408a416c1d.jpg?v=1777597122&width=900" 11779 srcset="//bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_2_HeroBanner_1200x1200_0c4e23f1-ad8b-4f96-b95f-0c408a416c1d.jpg?v=1777597122&width=450 450w, 11780 //bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_2_HeroBanner_1200x1200_0c4e23f1-ad8b-4f96-b95f-0c408a416c1d.jpg?v=1777597122&width=600 600w, 11781 //bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_2_HeroBanner_1200x1200_0c4e23f1-ad8b-4f96-b95f-0c408a416c1d.jpg?v=1777597122&width=900 900w" 11782 sizes="(min-width: 769px) 50vw, 100vw" 11783 alt="Product image" 11784 loading="lazy" 11785 width="1200" 11786 height="1200" 11787 ></div><div 11788 class="snb-fb__slide" 11789 role="group" 11790 aria-roledescription="slide" 11791 aria-label="Image 3 of 3" 11792 11793 ><img 11794 src="//bokksu.com/cdn/shop/files/SNB2505_SOJ_GuideInHand_Mobile_cropped.jpg?v=1777597395&width=900" 11795 srcset="//bokksu.com/cdn/shop/files/SNB2505_SOJ_GuideInHand_Mobile_cropped.jpg?v=1777597395&width=450 450w, 11796 //bokksu.com/cdn/shop/files/SNB2505_SOJ_GuideInHand_Mobile_cropped.jpg?v=1777597395&width=600 600w, 11797 //bokksu.com/cdn/shop/files/SNB2505_SOJ_GuideInHand_Mobile_cropped.jpg?v=1777597395&width=900 900w" 11798 sizes="(min-width: 769px) 50vw, 100vw" 11799 alt="Product image" 11800 loading="lazy" 11801 width="1080" 11802 height="1080" 11803 ></div></div></div><div class="snb-fb__content"><p class="snb-fb__subheading">YOUR FIRST BOKKSU INCLUDES:</p><h2 class="snb-fb__heading" id="snb-fb-heading-template--17749318303830__snb_first_box_native_iGia7U">22 Japanese snacks, candies, & tea!</h2><ul class="snb-fb__features"><li class="snb-fb__feature" ><div class="snb-fb__feature-icon" aria-hidden="true"> 11804 <img 11805 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e1542a7512de48219082c79e9f6a71ff.png?v=1773075940&width=64" 11806 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e1542a7512de48219082c79e9f6a71ff.png?v=1773075940&width=64 1x, 11807 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e1542a7512de48219082c79e9f6a71ff.png?v=1773075940&width=128 2x" 11808 alt="" 11809 loading="lazy" 11810 width="32" 11811 height="32" 11812 > 11813 </div><div class="snb-fb__feature-body"><h3 class="snb-fb__feature-title">Gift-with-purchase</h3><p class="snb-fb__feature-desc">3, 6, 12 month subscribers receive special gifts.</p></div> 11814 </li><li class="snb-fb__feature" ><div class="snb-fb__feature-icon" aria-hidden="true"> 11815 <img 11816 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_9e18894930904f09aced5f2e537d2dc1.png?v=1773075939&width=64" 11817 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_9e18894930904f09aced5f2e537d2dc1.png?v=1773075939&width=64 1x, 11818 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_9e18894930904f09aced5f2e537d2dc1.png?v=1773075939&width=128 2x" 11819 alt="" 11820 loading="lazy" 11821 width="32" 11822 height="32" 11823 > 11824 </div><div class="snb-fb__feature-body"><h3 class="snb-fb__feature-title">Authentic Treats</h3><p class="snb-fb__feature-desc">Mochi, senbei, cakes, cookies, chips, & more</p></div> 11825 </li><li class="snb-fb__feature" ><div class="snb-fb__feature-icon" aria-hidden="true"> 11826 <img 11827 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_458ad5c11169402888e82d8013c7321b.webp?v=1773075940&width=64" 11828 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_458ad5c11169402888e82d8013c7321b.webp?v=1773075940&width=64 1x, 11829 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_458ad5c11169402888e82d8013c7321b.webp?v=1773075940&width=128 2x" 11830 alt="" 11831 loading="lazy" 11832 width="32" 11833 height="32" 11834 > 11835 </div><div class="snb-fb__feature-body"><h3 class="snb-fb__feature-title">Tea Pairing</h3><p class="snb-fb__feature-desc">New tea each month, from matcha to hojicha</p></div> 11836 </li><li class="snb-fb__feature" ><div class="snb-fb__feature-icon" aria-hidden="true"> 11837 <img 11838 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_2259f1e9bf674b948df9dd4471778025.webp?v=1773075940&width=64" 11839 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_2259f1e9bf674b948df9dd4471778025.webp?v=1773075940&width=64 1x, 11840 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_2259f1e9bf674b948df9dd4471778025.webp?v=1773075940&width=128 2x" 11841 alt="" 11842 loading="lazy" 11843 width="32" 11844 height="32" 11845 > 11846 </div><div class="snb-fb__feature-body"><h3 class="snb-fb__feature-title">Sweet & Savory</h3><p class="snb-fb__feature-desc">A mix of authentic flavors for every palate</p></div> 11847 </li><li class="snb-fb__feature" ><div class="snb-fb__feature-icon" aria-hidden="true"> 11848 <img 11849 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e871adf5b3244294b8d301f3b670a74d.webp?v=1773075939&width=64" 11850 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e871adf5b3244294b8d301f3b670a74d.webp?v=1773075939&width=64 1x, 11851 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e871adf5b3244294b8d301f3b670a74d.webp?v=1773075939&width=128 2x" 11852 alt="" 11853 loading="lazy" 11854 width="32" 11855 height="32" 11856 > 11857 </div><div class="snb-fb__feature-body"><h3 class="snb-fb__feature-title">22-24 Page Guide</h3><p class="snb-fb__feature-desc">Snack origins, allergen info, and more!</p></div> 11858 </li><li class="snb-fb__feature" ><div class="snb-fb__feature-icon" aria-hidden="true"> 11859 <img 11860 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_4cdfb0ebd4894b3e933e63cf122dc91c.webp?v=1773075940&width=64" 11861 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_4cdfb0ebd4894b3e933e63cf122dc91c.webp?v=1773075940&width=64 1x, 11862 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_4cdfb0ebd4894b3e933e63cf122dc91c.webp?v=1773075940&width=128 2x" 11863 alt="" 11864 loading="lazy" 11865 width="32" 11866 height="32" 11867 > 11868 </div><div class="snb-fb__feature-body"><h3 class="snb-fb__feature-title">Bokksu Exclusives</h3><p class="snb-fb__feature-desc">Made by local makers only for Bokksu!</p></div> 11869 </li></ul><a 11870 class="btn btn-custom btn-orange-bg snb-fb__btn" 11871 href="#snack-box-subscription" 11872 aria-label="Subscribe now â view subscription plans" 11873 > 11874 SUBSCRIBE NOW 11875 </a></div> 11876 </div> 11877 </div> 11878</section> 11879
11880<script> 11881(function() { 11882 var sectionId = 'template--17749318303830__snb_first_box_native_iGia7U'; 11883 var sectionEl = document.getElementById('shopify-section-' + sectionId); 11884 11885 function initCarousel() { 11886 var carousel = document.getElementById('snb-fb-carousel-' + sectionId); 11887 if (!carousel || carousel.dataset.flickityInit) return; 11888 11889 var slides = carousel.querySelectorAll('.snb-fb__slide'); 11890 if (slides.length <= 1) return; 11891 11892 if (typeof theme !== 'undefined' && theme.Slideshow) { 11893 new theme.Slideshow(carousel, { 11894 prevNextButtons: true, 11895 pageDots: true, 11896 wrapAround: true, 11897 adaptiveHeight: true, 11898 autoPlay: false 11899 }); 11900 carousel.dataset.flickityInit = 'true'; 11901 } else if (typeof Flickity !== 'undefined') { 11902 new Flickity(carousel, { 11903 prevNextButtons: true, 11904 pageDots: true, 11905 wrapAround: true, 11906 adaptiveHeight: true, 11907 autoPlay: false 11908 }); 11909 carousel.dataset.flickityInit = 'true'; 11910 } 11911 11912 // a11y: APG pattern â hide inactive slides from AT so VoiceOver swipe reads only the current one. 11913 function updateActiveSlide() { 11914 var flk = (typeof Flickity !== 'undefined') ? Flickity.data(carousel) : null; 11915 if (!flk) return; 11916 var active = flk.selectedElements || (flk.selectedElement ? [flk.selectedElement] : []); 11917 var cells = carousel.querySelectorAll('.snb-fb__slide'); 11918 for (var i = 0; i < cells.length; i++) { 11919 var isActive = false; 11920 for (var k = 0; k < active.length; k++) { 11921 if (active[k] === cells[i]) { isActive = true; break; } 11922 } 11923 var target = isActive ? 'false' : 'true'; 11924 if (cells[i].getAttribute('aria-hidden') !== target) { 11925 cells[i].setAttribute('aria-hidden', target); 11926 } 11927 } 11928 } 11929 setTimeout(function () { 11930 updateActiveSlide(); 11931 var flk = (typeof Flickity !== 'undefined') ? Flickity.data(carousel) : null; 11932 if (flk && !carousel.dataset.a11ySelectBound) { 11933 carousel.dataset.a11ySelectBound = '1'; 11934 flk.on('select', updateActiveSlide); 11935 } 11936 }, 200); 11937 11938 // a11y: label prev/next buttons and dots. Normalize aria-current on dots. 11939 // Loop-safe: observer watches ONLY aria-current, and only sets when value !== target. 11940 setTimeout(function () { 11941 var prev = carousel.querySelector('.flickity-prev-next-button.flickity-previous, .flickity-prev-next-button.previous, .flickity-button.previous'); 11942 var next = carousel.querySelector('.flickity-prev-next-button.flickity-next, .flickity-prev-next-button.next, .flickity-button.next'); 11943 if (prev) prev.setAttribute('aria-label', 'Previous image'); 11944 if (next) next.setAttribute('aria-label', 'Next image'); 11945 11946 var dotsContainer = carousel.querySelector('.flickity-page-dots'); 11947 if (!dotsContainer) return; 11948 11949 function normalizeDots() { 11950 var ds = dotsContainer.querySelectorAll('.dot'); 11951 for (var i = 0; i < ds.length; i++) { 11952 var label = 'Go to image ' + (i + 1); 11953 if (ds[i].getAttribute('aria-label') !== label) { 11954 ds[i].setAttribute('aria-label', label); 11955 } 11956 if (ds[i].getAttribute('aria-current') === 'step') { 11957 ds[i].setAttribute('aria-current', 'true'); 11958 } 11959 } 11960 } 11961 normalizeDots(); 11962 11963 if (dotsContainer.dataset.a11yObserver) return; 11964 dotsContainer.dataset.a11yObserver = '1'; 11965 11966 // rAF-batched + attributeFilter scoped to aria-current only â no loop. 11967 var scheduled = false; 11968 var obs = new MutationObserver(function () { 11969 if (scheduled) return; 11970 scheduled = true; 11971 requestAnimationFrame(function () { 11972 scheduled = false; 11973 normalizeDots(); 11974 }); 11975 }); 11976 obs.observe(dotsContainer, { attributes: true, subtree: true, attributeFilter: ['aria-current'] }); 11977 }, 200); 11978 } 11979 11980 function lazyInit() { 11981 if (!sectionEl) { 11982 sectionEl = document.querySelector('.snb-fb'); 11983 } 11984 if (!sectionEl) return; 11985 11986 if ('IntersectionObserver' in window) { 11987 var observer = new IntersectionObserver(function(entries) { 11988 entries.forEach(function(entry) { 11989 if (entry.isIntersecting) { 11990 observer.unobserve(entry.target); 11991 initCarousel(); 11992 } 11993 }); 11994 }, { rootMargin: '200px 0px' }); 11995 observer.observe(sectionEl); 11996 } else { 11997 initCarousel(); 11998 } 11999 } 12000 12001 if (document.readyState === 'loading') { 12002 document.addEventListener('DOMContentLoaded', lazyInit); 12003 } else { 12004 lazyInit(); 12005 } 12006 12007 document.addEventListener('shopify:section:load', function(evt) { 12008 if (evt.detail.sectionId === sectionId) initCarousel(); 12009 }); 12010})(); 12011</script>
12011 12012 12013 12014</div><div id="shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn" class="shopify-section index-section"> 12015<style data-shopify>#shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn { 12016 --snb-test-bg: #ffffff; 12017 --snb-test-quote: #3a3a3a; 12018 --snb-test-accent: #d94f00; 12019 --snb-test-name: #d94f00; 12020 --snb-test-star: #d94f00; 12021 --snb-test-pt: 40px; 12022 --snb-test-pb: 48px; 12023 } 12024 12025 .snb-test { 12026 background-color: var(--snb-test-bg); 12027 padding-top: var(--snb-test-pt); 12028 padding-bottom: var(--snb-test-pb); 12029 overflow: hidden; 12030 12031 } 12032 12033 .snb-test__layout { 12034 display: grid; 12035 grid-template-columns: 1fr; 12036 gap: 32px; 12037 align-items: center; 12038 max-width: 1200px; 12039 margin: 0 auto; 12040 } 12041 12042 /* Quote area */ 12043 .snb-test__quote-area { 12044 text-align: center; 12045 padding: 0 16px; 12046 } 12047 12048 .snb-test__quote-icon { 12049 margin-bottom: 16px; 12050 } 12051 12052 .snb-test__quote-icon img { 12053 display: block; 12054 margin: 0 auto; 12055 width: 40px; 12056 height: auto; 12057 } 12058 12059 .snb-test__quote-text { 12060 font-family: 'Orpheus Pro', sans-serif; 12061 font-size: 24px; 12062 font-weight: 200; 12063 line-height: 28px; 12064 color: var(--snb-test-quote); 12065 margin: 0 0 20px; 12066 margin-left: auto; 12067 margin-right: auto; 12068 } 12069 12070 .snb-test__stars { 12071 display: flex; 12072 justify-content: center; 12073 margin-bottom: 16px; 12074 } 12075 12076 .snb-test__stars img { 12077 display: block; 12078 height: 24px; 12079 width: auto; 12080 } 12081 12082 .snb-test__author { 12083 font-family: 'Montserrat', sans-serif; 12084 font-size: 16px; 12085 font-weight: 600; 12086 letter-spacing: 2px; 12087 text-transform: uppercase; 12088 color: var(--snb-test-name); 12089 margin: 0; 12090 } 12091 12092 /* Testimonial carousel (multiple testimonials) */ 12093 .snb-test__quote-carousel { 12094 overflow: hidden; 12095 } 12096 12097 .snb-test__quote-carousel:not(.flickity-enabled) { 12098 position: relative; 12099 } 12100 12101 .snb-test__quote-carousel:not(.flickity-enabled) .snb-test__testimonial-slide { 12102 display: none; 12103 } 12104 12105 .snb-test__quote-carousel:not(.flickity-enabled) .snb-test__testimonial-slide:first-child { 12106 display: block; 12107 } 12108 12109 .snb-test__testimonial-slide { 12110 width: 100%; 12111 text-align: center; 12112 } 12113 12114 /* Photo carousel */ 12115 .snb-test__photos-wrap { 12116 position: relative; 12117 width: 100%; 12118 padding: 0 25px; 12119 box-sizing: border-box; 12120 } 12121 12122 .snb-test__photos { 12123 width: 100%; 12124 /* overflow: hidden; */ 12125 } 12126 12127 .snb-test__photos:not(.flickity-enabled) { 12128 display: flex; 12129 } 12130 12131 .snb-test__photo-slide { 12132 padding: 0 4px; 12133 box-sizing: border-box; 12134 flex-shrink: 0; 12135 width: 100%; 12136 } 12137 12138 .snb-test__photo-slide img { 12139 display: block; 12140 width: 100%; 12141 height: auto; 12142 object-fit: cover; 12143 } 12144 12145 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-button { 12146 background: transparent; 12147 width: 40px; 12148 height: 40px; 12149 color: #1A1A1A; 12150 } 12151 12152 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-button:hover { 12153 background: transparent; 12154 opacity: 0.7; 12155 } 12156 12157 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-previous { 12158 left: -21px; 12159 } 12160 12161 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-next { 12162 right: -30px; 12163 } 12164 12165 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-button svg { 12166 width: 20px; 12167 height: 20px; 12168 } 12169 12170 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-page-dots { 12171 display: none; 12172 } 12173 12174 @media (min-width: 769px) { 12175 .snb-test__layout { 12176 gap: 36px; 12177 } 12178 12179 .snb-test__quote-area { 12180 padding: 0; 12181 } 12182 12183 .snb-test__quote-icon img { 12184 width: 56px; 12185 } 12186 12187 .snb-test__stars img { 12188 height: 28px; 12189 } 12190 12191 .snb-test__quote-text { 12192 font-size: 48px; 12193 line-height: 50px; 12194 } 12195 12196 .snb-test__photos-wrap { 12197 padding: 0 44px; 12198 } 12199 12200 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-prev-next-button.previous { 12201 left: -44px; 12202 } 12203 12204 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-prev-next-button.next { 12205 right: -44px; 12206 } 12207 12208 .snb-test__photos:not(.flickity-enabled) .snb-test__photo-slide { 12209 width: 20%; 12210 } 12211 12212 .snb-test__photo-slide { 12213 width: 20%; 12214 padding: 0 10px; 12215 } 12216 } 12217
12218 .snb-test__pause-btn { 12219 display: inline-flex; 12220 align-items: center; 12221 justify-content: center; 12222 background: transparent; 12223 border: 1px solid var(--snb-test-name); 12224 border-radius: 50%; 12225 width: 32px; 12226 height: 32px; 12227 cursor: pointer; 12228 color: var(--snb-test-name); 12229 margin-top: 16px; 12230 padding: 0; 12231 } 12232 12233 .snb-test__pause-btn:focus-visible { 12234 outline: 2px solid currentColor; 12235 outline-offset: 3px; 12236 } 12237 12238 .snb-test__quote-text { 12239 margin-block-start: 0; 12240 margin-block-end: 0; 12241 margin-inline-start: 0; 12242 margin-inline-end: 0; 12243 padding: 0; 12244 } 12245 12246 .snb-test__author { 12247 font-style: normal; 12248 }</style><section class="snb-test" aria-label="Customer testimonials"> 12249 <div class="page-width"> 12250 <div class="snb-test__layout"><div class="snb-test__quote-area"><div ><div class="snb-test__quote-icon" aria-hidden="true"> 12251 <img src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_f006b88d6f6d46258077f4c9384b1a04.webp?v=1773121456&width=112" alt="" width="56" height="56" loading="lazy"> 12252 </div><blockquote class="snb-test__quote-text">I am always excited to receive my Bokksu every month. The snacks are unique, yummy, and would make an awesome gift too!</blockquote><div class="snb-test__stars" role="img" aria-label="Rated 5 out of 5 stars"> 12253 <img src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_ff4f6deb95cd4eb290a18a2f3da821ae.webp?v=1773121457&width=300" alt="" loading="lazy" aria-hidden="true"> 12254 </div><cite class="snb-test__author">– Lucy Z</cite></div></div><div class="snb-test__photos-wrap"> 12255 <div 12256 class="snb-test__photos" 12257 id="snb-test-photos-template--17749318303830__snb_testimonial_native_G8GWGn" 12258 data-section-id="template--17749318303830__snb_testimonial_native_G8GWGn" 12259 role="region" 12260 aria-roledescription="carousel" 12261 aria-label="Customer photos" 12262 ><div 12263 class="snb-test__photo-slide" 12264 role="group" 12265 aria-roledescription="slide" 12266 aria-label="Photo 1 of 6" 12267 12268 ><img 12269 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_ffdf56a405d940a480a53eee6941e07c.webp?v=1773077929&width=600" 12270 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_ffdf56a405d940a480a53eee6941e07c.webp?v=1773077929&width=300 300w, 12271 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_ffdf56a405d940a480a53eee6941e07c.webp?v=1773077929&width=450 450w, 12272 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_ffdf56a405d940a480a53eee6941e07c.webp?v=1773077929&width=600 600w" 12273 sizes="(min-width: 769px) 200px, 100vw" 12274 alt="Customer photo" 12275 loading="lazy" 12276 width="450" 12277 height="450" 12278 ></div><div 12279 class="snb-test__photo-slide" 12280 role="group" 12281 aria-roledescription="slide" 12282 aria-label="Photo 2 of 6" 12283 12284 ><img 12285 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_950a18fde08540418bc01b2ebdeb4d12.webp?v=1773077974&width=600" 12286 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_950a18fde08540418bc01b2ebdeb4d12.webp?v=1773077974&width=300 300w, 12287 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_950a18fde08540418bc01b2ebdeb4d12.webp?v=1773077974&width=450 450w, 12288 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_950a18fde08540418bc01b2ebdeb4d12.webp?v=1773077974&width=600 600w" 12289 sizes="(min-width: 769px) 200px, 100vw" 12290 alt="Customer photo" 12291 loading="lazy" 12292 width="450" 12293 height="450" 12294 ></div><div 12295 class="snb-test__photo-slide" 12296 role="group" 12297 aria-roledescription="slide" 12298 aria-label="Photo 3 of 6" 12299 12300 ><img 12301 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_71c99de7222b4ffaa5e7357cc4085931.webp?v=1773078021&width=600" 12302 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_71c99de7222b4ffaa5e7357cc4085931.webp?v=1773078021&width=300 300w, 12303 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_71c99de7222b4ffaa5e7357cc4085931.webp?v=1773078021&width=450 450w, 12304 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_71c99de7222b4ffaa5e7357cc4085931.webp?v=1773078021&width=600 600w" 12305 sizes="(min-width: 769px) 200px, 100vw" 12306 alt="Customer photo" 12307 loading="lazy" 12308 width="1170" 12309 height="1170" 12310 ></div><div 12311 class="snb-test__photo-slide" 12312 role="group" 12313 aria-roledescription="slide" 12314 aria-label="Photo 4 of 6" 12315 12316 ><img 12317 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_a298e43d9bd74a31be815b37a727db0d.webp?v=1773078071&width=600" 12318 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_a298e43d9bd74a31be815b37a727db0d.webp?v=1773078071&width=300 300w, 12319 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_a298e43d9bd74a31be815b37a727db0d.webp?v=1773078071&width=450 450w, 12320 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_a298e43d9bd74a31be815b37a727db0d.webp?v=1773078071&width=600 600w" 12321 sizes="(min-width: 769px) 200px, 100vw" 12322 alt="Customer photo" 12323 loading="lazy" 12324 width="1170" 12325 height="1170" 12326 ></div><div 12327 class="snb-test__photo-slide" 12328 role="group" 12329 aria-roledescription="slide" 12330 aria-label="Photo 5 of 6" 12331 12332 ><img 12333 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_9c37d63dea5e4016bee2c8462c79f2bc.webp?v=1773078122&width=600" 12334 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_9c37d63dea5e4016bee2c8462c79f2bc.webp?v=1773078122&width=300 300w, 12335 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_9c37d63dea5e4016bee2c8462c79f2bc.webp?v=1773078122&width=450 450w, 12336 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_9c37d63dea5e4016bee2c8462c79f2bc.webp?v=1773078122&width=600 600w" 12337 sizes="(min-width: 769px) 200px, 100vw" 12338 alt="Customer photo" 12339 loading="lazy" 12340 width="1170" 12341 height="1170" 12342 ></div><div 12343 class="snb-test__photo-slide" 12344 role="group" 12345 aria-roledescription="slide" 12346 aria-label="Photo 6 of 6" 12347 12348 ><img 12349 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_f7e19e95c1c74179b65a3cdf6814aa13.webp?v=1773078305&width=600" 12350 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_f7e19e95c1c74179b65a3cdf6814aa13.webp?v=1773078305&width=300 300w, 12351 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_f7e19e95c1c74179b65a3cdf6814aa13.webp?v=1773078305&width=450 450w, 12352 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_f7e19e95c1c74179b65a3cdf6814aa13.webp?v=1773078305&width=600 600w" 12353 sizes="(min-width: 769px) 200px, 100vw" 12354 alt="Customer photo" 12355 loading="lazy" 12356 width="1170" 12357 height="1170" 12358 ></div></div>
12359 </div></div> 12360 </div> 12361</section> 12362
12363<script> 12364(function() { 12365 var sectionId = 'template--17749318303830__snb_testimonial_native_G8GWGn'; 12366 var sectionEl = document.getElementById('shopify-section-' + sectionId); 12367 12368 function initPhotoCarousel() { 12369 var photos = document.getElementById('snb-test-photos-' + sectionId); 12370 if (!photos || photos.dataset.flickityInit) return; 12371 12372 var slides = photos.querySelectorAll('.snb-test__photo-slide'); 12373 if (slides.length <= 1) return; 12374 12375 if (typeof theme !== 'undefined' && theme.Slideshow) { 12376 new theme.Slideshow(photos, { 12377 prevNextButtons: true, 12378 pageDots: false, 12379 wrapAround: true, 12380 adaptiveHeight: false, 12381 autoPlay: false, 12382 cellAlign: 'left', 12383 contain: true, 12384 groupCells: true 12385 }); 12386 photos.dataset.flickityInit = 'true'; 12387 } else if (typeof Flickity !== 'undefined') { 12388 new Flickity(photos, { 12389 prevNextButtons: true, 12390 pageDots: false, 12391 wrapAround: true, 12392 adaptiveHeight: false, 12393 autoPlay: false, 12394 cellAlign: 'left', 12395 contain: true, 12396 groupCells: true 12397 }); 12398 photos.dataset.flickityInit = 'true'; 12399 } 12400 12401 // a11y: APG pattern â hide inactive slides, label prev/next. 12402 function updatePhotoSlides() { 12403 var flk = (typeof Flickity !== 'undefined') ? Flickity.data(photos) : null; 12404 if (!flk) return; 12405 var active = flk.selectedElements || (flk.selectedElement ? [flk.selectedElement] : []); 12406 var cells = photos.querySelectorAll('.snb-test__photo-slide'); 12407 for (var i = 0; i < cells.length; i++) { 12408 var isActive = false; 12409 for (var k = 0; k < active.length; k++) { 12410 if (active[k] === cells[i]) { isActive = true; break; } 12411 } 12412 var target = isActive ? 'false' : 'true'; 12413 if (cells[i].getAttribute('aria-hidden') !== target) { 12414 cells[i].setAttribute('aria-hidden', target); 12415 } 12416 } 12417 } 12418 setTimeout(function () { 12419 var prev = photos.querySelector('.flickity-prev-next-button.flickity-previous, .flickity-prev-next-button.previous, .flickity-button.previous'); 12420 var next = photos.querySelector('.flickity-prev-next-button.flickity-next, .flickity-prev-next-button.next, .flickity-button.next'); 12421 if (prev) prev.setAttribute('aria-label', 'Previous photo'); 12422 if (next) next.setAttribute('aria-label', 'Next photo'); 12423 12424 updatePhotoSlides(); 12425 var flk = (typeof Flickity !== 'undefined') ? Flickity.data(photos) : null; 12426 if (flk && !photos.dataset.a11ySelectBound) { 12427 photos.dataset.a11ySelectBound = '1'; 12428 flk.on('select', updatePhotoSlides); 12429 } 12430 }, 200); 12431 } 12432 12433 function initQuoteCarousel() { 12434 var quotes = document.getElementById('snb-test-quotes-' + sectionId); 12435 if (!quotes || quotes.dataset.flickityInit) return; 12436 12437 var slides = quotes.querySelectorAll('.snb-test__testimonial-slide'); 12438 if (slides.length <= 1) return; 12439 12440 if (typeof Flickity !== 'undefined') { 12441 new Flickity(quotes, { 12442 prevNextButtons: false, 12443 pageDots: true, 12444 wrapAround: true, 12445 adaptiveHeight: true, 12446 autoPlay: 6000 12447 }); 12448 quotes.dataset.flickityInit = 'true'; 12449 12450 // a11y: APG â hide inactive quote slides 12451 function updateQuoteSlides() { 12452 var flk = Flickity.data(quotes); 12453 if (!flk) return; 12454 var active = flk.selectedElements || (flk.selectedElement ? [flk.selectedElement] : []); 12455 var cells = quotes.querySelectorAll('.snb-test__testimonial-slide'); 12456 for (var i = 0; i < cells.length; i++) { 12457 var isActive = false; 12458 for (var k = 0; k < active.length; k++) { 12459 if (active[k] === cells[i]) { isActive = true; break; } 12460 } 12461 var target = isActive ? 'false' : 'true'; 12462 if (cells[i].getAttribute('aria-hidden') !== target) { 12463 cells[i].setAttribute('aria-hidden', target); 12464 } 12465 } 12466 } 12467 setTimeout(function () { 12468 updateQuoteSlides(); 12469 var f = Flickity.data(quotes); 12470 if (f && !quotes.dataset.a11ySelectBound) { 12471 quotes.dataset.a11ySelectBound = '1'; 12472 f.on('select', updateQuoteSlides); 12473 } 12474 }, 200); 12475 12476 // a11y: label dots, normalize aria-current. Loop-safe: only watch aria-current, guarded
12476setAttribute, rAF-batched. 12477 setTimeout(function () { 12478 var dotsContainer = quotes.querySelector('.flickity-page-dots'); 12479 if (!dotsContainer) return; 12480 12481 function normalizeDots() { 12482 var ds = dotsContainer.querySelectorAll('.dot'); 12483 for (var i = 0; i < ds.length; i++) { 12484 var label = 'Go to testimonial ' + (i + 1); 12485 if (ds[i].getAttribute('aria-label') !== label) { 12486 ds[i].setAttribute('aria-label', label); 12487 } 12488 if (ds[i].getAttribute('aria-current') === 'step') { 12489 ds[i].setAttribute('aria-current', 'true'); 12490 } 12491 } 12492 } 12493 normalizeDots(); 12494 12495 if (dotsContainer.dataset.a11yObserver) return; 12496 dotsContainer.dataset.a11yObserver = '1'; 12497 12498 var scheduled = false; 12499 var obs = new MutationObserver(function () { 12500 if (scheduled) return; 12501 scheduled = true; 12502 requestAnimationFrame(function () { 12503 scheduled = false; 12504 normalizeDots(); 12505 }); 12506 }); 12507 obs.observe(dotsContainer, { attributes: true, subtree: true, attributeFilter: ['aria-current'] }); 12508 }, 200); 12509 // Add pause/play button for autoplay 12510 var pauseBtn = document.createElement('button'); 12511 pauseBtn.type = 'button'; 12512 pauseBtn.className = 'snb-test__pause-btn'; 12513 pauseBtn.setAttribute('aria-label', 'Pause testimonials'); 12514 pauseBtn.innerHTML = '<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><rect x="3" y="2" width="4" height="12"/><rect x="9" y="2" width="4" height="12"/></svg>'; 12515 var quoteArea = quotes.closest('.snb-test__quote-area'); 12516 if (quoteArea) quoteArea.appendChild(pauseBtn); 12517 var isPaused = false; 12518 pauseBtn.addEventListener('click', function() { 12519 var flk = Flickity.data(quotes); 12520 if (flk) { 12521 if (isPaused) { 12522 flk.playPlayer(); 12523 pauseBtn.setAttribute('aria-label', 'Pause testimonials'); 12524 pauseBtn.innerHTML = '<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><rect x="3" y="2" width="4" height="12"/><rect x="9" y="2" width="4" height="12"/></svg>'; 12525 } else { 12526 flk.pausePlayer(); 12527 pauseBtn.setAttribute('aria-label', 'Play testimonials'); 12528 pauseBtn.innerHTML = '<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M4 2l10 6-10 6z"/></svg>'; 12529 } 12530 isPaused = !isPaused; 12531 } 12532 }); 12533 } 12534 } 12535 12536 function init() { 12537 initPhotoCarousel(); 12538 initQuoteCarousel(); 12539 } 12540 12541 function lazyInit() { 12542 if (!sectionEl) { 12543 sectionEl = document.querySelector('.snb-test'); 12544 } 12545 if (!sectionEl) return; 12546 12547 if ('IntersectionObserver' in window) { 12548 var observer = new IntersectionObserver(function(entries) { 12549 entries.forEach(function(entry) { 12550 if (entry.isIntersecting) { 12551 observer.unobserve(entry.target); 12552 init(); 12553 } 12554 }); 12555 }, { rootMargin: '200px 0px' }); 12556 observer.observe(sectionEl); 12557 } else { 12558 init(); 12559 } 12560 } 12561 12562 if (document.readyState === 'loading') { 12563 document.addEventListener('DOMContentLoaded', lazyInit); 12564 } else { 12565 lazyInit(); 12566 } 12567 12568 document.addEventListener('shopify:section:load', function(evt) { 12569 if (evt.detail.sectionId === sectionId) init(); 12570 }); 12571})(); 12572</script>
12572 12573 12574 12575</div><div id="shopify-section-template--17749318303830__snb_subs_panel_3rfYyF" class="shopify-section snb-pdp-section index-section"><style data-shopify>#shopify-section-template--17749318303830__snb_subs_panel_3rfYyF { 12576 --snb-pdp-ash: #1a1a1a; 12577 --snb-pdp-lantern: #b73d09; 12578 --snb-pdp-washi: #f6f4f1; 12579 --snb-pdp-persimmon: #b73d09; 12580 --snb-pdp-red-beans: #b73d09; 12581 --snb-pdp-white: #ffffff; 12582 --snb-pdp-border: #e8e8e1; 12583 --snb-pdp-badge: #602012; 12584 --snb-pdp-sale-bg: #b73d09; 12585 --snb-pdp-sale-color: #ffffff; 12586 --snb-pdp-radius: 8px; 12587 } 12588 12589 .snb-pdp { 12590 display: grid; 12591 grid-template-columns: 1fr; 12592 gap: 0; 12593 max-width: 1400px; 12594 margin: 0 auto; 12595 padding: 0; 12596 font-family: "Lato", sans-serif; 12597 color: var(--snb-pdp-ash); 12598 overflow: clip; 12599 box-sizing: border-box; 12600 } 12601 12602 @media (min-width: 769px) { 12603 .snb-pdp { 12604 grid-template-columns: 1fr 1fr; 12605 gap: 60px; 12606 align-items: start; 12607 padding: 0px 30px !importan; 12608 } 12609 } 12610 12611 .snb-pdp *, 12612 .snb-pdp *::before, 12613 .snb-pdp *::after { 12614 box-sizing: border-box; 12615 } 12616 12617 /* ââ Gallery ââ */ 12618 .snb-pdp__gallery { 12619 display: flex; 12620 flex-direction: column; 12621 gap: 0; 12622 min-width: 0; 12623 } 12624 12625 @media (min-width: 769px) { 12626 .snb-pdp__gallery { 12627 flex-direction: row; 12628 gap: 15px; 12629 position: sticky; 12630 top: 20px; 12631 align-self: start; 12632 } 12633 } 12634 12635 /* ââ Mobile Carousel ââ */ 12636 .snb-pdp__carousel { 12637 display: flex; 12638 overflow-x: auto; 12639 scroll-snap-type: x mandatory; 12640 -webkit-overflow-scrolling: touch; 12641 scrollbar-width: none; 12642 } 12643 12644 .snb-pdp__carousel::-webkit-scrollbar {
12645 display: none; 12646 } 12647 12648 @media (min-width: 769px) { 12649 .snb-pdp__carousel { 12650 display: none; 12651 } 12652 } 12653 12654 @keyframes snb-pdp-shimmer { 12655 0% { background-position: -400px 0; } 12656 100% { background-position: 400px 0; } 12657 } 12658 12659 .snb-pdp__carousel-slide { 12660 flex: 0 0 calc(100% / 1.2); 12661 scroll-snap-align: start; 12662 aspect-ratio: 390 / 353; 12663 overflow: hidden; 12664 background: linear-gradient( 12665 90deg, 12666 var(--snb-pdp-border) 0%, 12667 var(--snb-pdp-washi) 40%, 12668 var(--snb-pdp-border) 80% 12669 ); 12670 background-size: 800px 100%; 12671 animation: snb-pdp-shimmer 1.5s infinite linear; 12672 margin-right: 8px; 12673 } 12674 12675 .snb-pdp__carousel-slide:has(img.snb-pdp--loaded) { 12676 animation: none; 12677 background: none; 12678 } 12679 12680 .snb-pdp__carousel-slide img { 12681 width: 100%; 12682 height: 100%; 12683 object-fit: cover; 12684 display: block; 12685 opacity: 0; 12686 transition: opacity 0.3s ease; 12687 } 12688 12689 .snb-pdp__carousel-slide img.snb-pdp--loaded { 12690 opacity: 1; 12691 } 12692 12693 .snb-pdp__dots { 12694 display: flex; 12695 justify-content: center; 12696 gap: 6px; 12697 padding: 12px 0; 12698 } 12699 12700 @media (min-width: 769px) { 12701 .snb-pdp__dots { 12702 display: none; 12703 } 12704 } 12705 12706 .snb-pdp__dot { 12707 width: 27px; 12708 height: 6px; 12709 border-radius: 6px; 12710 background: #fff; 12711 border: 1px solid #A53E23; 12712 padding: 0; 12713 cursor: pointer; 12714 transition: background 0.2s ease; 12715 } 12716 12717 .snb-pdp__dot--active { 12718 background: #A53E23; 12719 } 12720 12721 .snb-pdp__dot:focus-visible { 12722 outline: 2px solid var(--snb-pdp-lantern); 12723 outline-offset: 2px; 12724 } 12725 12726 /* ââ Desktop Gallery (thumbs + main) ââ */ 12727 .snb-pdp__desktop-gallery { 12728 display: none; 12729 } 12730 12731 @media (min-width: 769px) { 12732 .snb-pdp__desktop-gallery { 12733 display: flex; 12734 gap: 15px; 12735 width: 100%; 12736 } 12737 } 12738 12739 .snb-pdp__thumbs { 12740 display: flex; 12741 flex-direction: column; 12742 gap: 12px; 12743 width: 80px; 12744 flex-shrink: 0; 12745 position: relative; 12746 overflow: hidden; 12747 max-height: 500px; 12748 } 12749 12750 .snb-pdp__thumbs-scroller { 12751 display: flex; 12752 flex-direction: column; 12753 gap: 12px; 12754 overflow-y: auto; 12755 scrollbar-width: none; 12756 max-height: 100%; 12757 } 12758 12759 .snb-pdp__thumbs-scroller::-webkit-scrollbar {
12760 display: none; 12761 } 12762 12763 .snb-pdp__thumb { 12764 width: 76px; 12765 height: 76px; 12766 border: 1px solid var(--snb-pdp-border); 12767 border-radius: 4px; 12768 overflow: hidden; 12769 cursor: pointer; 12770 flex-shrink: 0; 12771 background: var(--snb-pdp-white); 12772 padding: 0; 12773 } 12774 12775 .snb-pdp__thumb--active { 12776 border: 2px solid var(--snb-pdp-ash); 12777 } 12778 12779 .snb-pdp__thumb img { 12780 width: 100%; 12781 height: 100%; 12782 object-fit: cover; 12783 display: block; 12784 } 12785 12786 .snb-pdp__thumb-arrow { 12787 display: flex; 12788 align-items: center; 12789 justify-content: center; 12790 background: var(--snb-pdp-white); 12791 border: none; 12792 cursor: pointer; 12793 padding: 8px 0; 12794 width: 100%; 12795 } 12796 12797 .snb-pdp__thumb-arrow svg { 12798 width: 10px; 12799 height: 6px; 12800 } 12801 12802 .snb-pdp__main-image { 12803 flex: 1; 12804 min-width: 0; 12805 overflow: hidden; 12806 background: linear-gradient( 12807 90deg, 12808 var(--snb-pdp-border) 0%, 12809 var(--snb-pdp-washi) 40%, 12810 var(--snb-pdp-border) 80% 12811 ); 12812 background-size: 800px 100%; 12813 animation: snb-pdp-shimmer 1.5s infinite linear; 12814 min-height: 300px; 12815 } 12816 12817 .snb-pdp__main-image:has(img.snb-pdp--loaded) { 12818 animation: none; 12819 background: var(--snb-pdp-washi); 12820 min-height: auto; 12821 } 12822 12823 @media (min-width: 769px) { 12824 .snb-pdp__main-image { 12825 max-height: 500px; 12826 border-radius: 4px; 12827 min-height: 400px; 12828 } 12829 12830 .snb-pdp__main-image:has(img.snb-pdp--loaded) { 12831 min-height: auto; 12832 } 12833 } 12834 12835 .snb-pdp__main-image img { 12836 width: 100%; 12837 height: 100%; 12838 object-fit: cover; 12839 display: block; 12840 opacity: 0; 12841 transition: opacity 0.3s ease; 12842 } 12843 12844 .snb-pdp__main-image img.snb-pdp--loaded { 12845 opacity: 1; 12846 } 12847 12848 /* ââ Info column ââ */ 12849 .snb-pdp__info { 12850 display: flex; 12851 flex-direction: column; 12852 gap: 0; 12853 padding: 20px 20px 40px; 12854 min-width: 0; 12855 } 12856 12857 12858 /* ââ Header ââ */ 12859 .snb-pdp__preheader { 12860 font-family: "Montserrat", sans-serif; 12861 font-weight: 500; 12862 font-size: 14px; 12863 letter-spacing: 5px; 12864 text-transform: uppercase; 12865 line-height: 18px; 12866 margin: 0 0 4px; 12867 } 12868 12869 12870 .snb-pdp__title { 12871 font-family: "Orpheus Pro", serif; 12872 font-weight: 400; 12873 font-size: 48px !important; 12874 line-height: 52px !important; 12875 margin: 0 0 20px; 12876 text-transform: capitalize; 12877 word-break: break-word; 12878 } 12879 12880 @media (min-width: 769px) { 12881 .snb-pdp__info { 12882 padding: 0; 12883 } 12884 12885 .snb-pdp__title { 12886 font-size: 48px; 12887 line-height: 52px; 12888 } 12889 } 12890 12891 /* ââ Rating ââ */ 12892 .snb-pdp__rating { 12893 display: flex; 12894 align-items: center; 12895 gap: 16px; 12896 margin-bottom: 8px; 12897 } 12898 12899 @media (min-width: 769px) { 12900 .snb-pdp__rating { 12901 margin-bottom: 24px; 12902 } 12903 } 12904 12905 .snb-pdp__stars { 12906 display: flex; 12907 gap: 4px; 12908 } 12909 12910 .snb-pdp__stars svg { 12911 width: 16px; 12912 height: 16px; 12913 fill: var(--snb-pdp-ash); 12914 } 12915 12916 .snb-pdp__rating-number { 12917 font-family: "Orpheus Pro", serif; 12918 font-size: 16px; 12919 line-height: 18px; 12920 } 12921 12922 .snb-pdp__review-count { 12923 font-family: "Orpheus Pro", serif; 12924 font-size: 16px; 12925 line-height: 18px; 12926 color: var(--snb-pdp-ash); 12927 } 12928 12929 12930 /* ââ Sale Banner ââ */ 12931 .snb-pdp__sale-banner { 12932 background: var(--snb-pdp-sale-bg); 12933 color: var(--snb-pdp-sale-color); 12934 border-radius: var(--snb-pdp-radius); 12935 padding: 12px 6px; 12936 text-align: center; 12937 font-family: "Lato", sans-serif; 12938 font-size: 16px; 12939 line-height: 24px; 12940 letter-spacing: 0.5px; 12941 margin-bottom: 8px; 12942 } 12943 .snb-pdp__sale-banner p{ 12944 margin: 0; 12945 } 12946 12947 .snb-pdp__sale-banner strong { 12948 font-family: "Lato", sans-serif; 12949 font-weight: 700; 12950 } 12951 12952 /* ââ Plan Cards ââ */ 12953 .snb-pdp__plans { 12954 display: flex; 12955 flex-direction: column; 12956 gap: 8px; 12957 margin-bottom: 24px; 12958 } 12959 12960 .snb-pdp__plan { 12961 border: 1px solid var(--snb-pdp-ash); 12962 border-radius: var(--snb-pdp-radius); 12963 cursor: pointer; 12964 overflow: hidden; 12965 background: var(--snb-pdp-white); 12966 transition: border-color 0.2s ease; 12967 outline: none; 12968 } 12969 12970 .snb-pdp__plan:focus-visible { 12971 outline: 2px solid var(--snb-pdp-lantern); 12972 outline-offset: 2px; 12973 } 12974 12975 .snb-pdp__plan--active { 12976 border: 2px solid var(--snb-pdp-ash); 12977 } 12978 12979 .snb-pdp__plan-header { 12980 display: flex; 12981 align-items: center; 12982 justify-content: space-between; 12983 padding: 12px 24px; 12984 min-height: 64px; 12985 min-width: 0; 12986 } 12987 12988 .snb-pdp__plan--active .snb-pdp__plan-header { 12989 background: var(--snb-pdp-red-beans); 12990 border-color: var(--snb-pdp-red-beans); 12991 color: var(--snb-pdp-white); 12992 border-radius: 7px 7px 0 0; 12993 } 12994 12995 .snb-pdp__plan-left { 12996 display: flex; 12997 flex-direction: column; 12998 gap: 4px; 12999 } 13000 13001 @media (min-width: 1200px) { 13002 .snb-pdp__plan-left { 13003 flex-direction: row; 13004 align-items: center; 13005 gap: 16px; 13006 } 13007 13008 13009 } 13010 13011 .snb-pdp__plan-badge { 13012 font-family: "Montserrat", sans-serif; 13013 font-weight: 500; 13014 font-size: 10px; 13015 text-transform: uppercase; 13016 line-height: 12px; 13017 order: -1; 13018 } 13019 13020 @media (min-width: 1200px) { 13021 .snb-pdp__plan-badge { 13022 order: 1; 13023 display: inline-flex; 13024 align-items: center; 13025 padding: 6px 12px; 13026 border-radius: 24px; 13027 background: var(--snb-pdp-lantern); 13028 color: var(--snb-pdp-white); 13029 } 13030 } 13031 13032 .snb-pdp__plan--active .snb-pdp__plan-badge { 13033 color: var(--snb-pdp-white); 13034 } 13035 13036 @media (min-width: 1200px) { 13037 .snb-pdp__plan--active .snb-pdp__plan-badge { 13038 background: var(--snb-pdp-badge); 13039 } 13040 } 13041 13042 .snb-pdp__plan:not(.snb-pdp__plan--active) .snb-pdp__plan-badge { 13043 color: var(--snb-pdp-persimmon); 13044 } 13045 13046 @media (min-width: 1200px) { 13047 .snb-pdp__plan:not(.snb-pdp__plan--active) .snb-pdp__plan-badge { 13048 color: var(--snb-pdp-white); 13049 background: var(--snb-pdp-lantern); 13050 } 13051 } 13052 13053 .snb-pdp__plan-name { 13054 font-family: "Orpheus Pro", serif; 13055 font-size: 20px; 13056 line-height: 24px; 13057 word-break: break-word; 13058 } 13059 13060 @media (min-width: 1200px) { 13061 .snb-pdp__plan-name { 13062 font-size: 28px; 13063 line-height: 28px; 13064 } 13065 } 13066 13067 .snb-pdp__plan-right { 13068 display: flex; 13069 flex-direction: column; 13070 align-items: flex-end; 13071 gap: 4px; 13072 } 13073 13074 @media (min-width: 1200px) { 13075 .snb-pdp__plan-right { 13076 flex-direction: row; 13077 align-items: center; 13078 gap: 12px; 13079 } 13080 } 13081 13082 .snb-pdp__plan-save { 13083 font-family: "Montserrat", sans-serif; 13084 font-weight: 500; 13085 font-size: 12px; 13086 text-transform: uppercase; 13087 color: var(--snb-pdp-persimmon); 13088 line-height: 12px; 13089 } 13090 13091 .snb-pdp__plan--active .snb-pdp__plan-save { 13092 color: var(--snb-pdp-white); 13093 } 13094 13095 .snb-pdp__plan-divider { 13096 display: none; 13097 width: 1px; 13098 height: 20px; 13099 background: var(--snb-pdp-border); 13100 } 13101 13102 @media (min-width: 1200px) { 13103 .snb-pdp__plan-divider { 13104 display: block; 13105 } 13106 } 13107 13108 .snb-pdp__plan--active .snb-pdp__plan-divider { 13109 background: rgba(255, 255, 255, 0.3); 13110 } 13111 13112 .snb-pdp__plan-price { 13113 font-family: "Orpheus Pro", serif; 13114 font-size: 20px; 13115 line-height: 24px; 13116 } 13117 13118 @media (min-width: 1200px) { 13119 .snb-pdp__plan-price { 13120 font-size: 28px; 13121 line-height: 28px; 13122 } 13123 } 13124 13125 /* ââ Gift Promo ââ */ 13126 .snb-pdp__promo { 13127 display: none; 13128 } 13129 13130 .snb-pdp__plan--active .snb-pdp__promo { 13131 display: flex; 13132 flex-wrap: wrap; 13133 align-items: center; 13134 gap: 16px; 13135 padding: 16px; 13136 background: var(--snb-pdp-washi); 13137 border-radius: 0 0 7px 7px; 13138 } 13139 13140 @media (min-width: 769px) { 13141 .snb-pdp__promo { 13142 flex-wrap: nowrap; 13143 padding: 16px 24px; 13144 } 13145 } 13146 13147 .snb-pdp__promo-image { 13148 width: 48px; 13149 height: 48px; 13150 border-radius: 4px; 13151 overflow: hidden; 13152 flex-shrink: 0; 13153 } 13154 13155 @media (min-width: 769px) { 13156 .snb-pdp__promo-image { 13157 width: 64px; 13158 height: 64px; 13159 } 13160 } 13161 13162 .snb-pdp__promo-image img { 13163 width: 100%; 13164 height: 100%; 13165 object-fit: cover; 13166 display: block; 13167 } 13168 13169 .snb-pdp__promo-text { 13170 flex: 1; 13171 min-width: 0; 13172 } 13173 13174 .snb-pdp__promo-title { 13175 font-family: "Montserrat", sans-serif; 13176 font-weight: 500; 13177 font-size: 14px; 13178 letter-spacing: 1px; 13179 text-transform: uppercase; 13180 line-height: 16px; 13181 margin: 0 0 4px; 13182 } 13183 13184 @media (min-width: 769px) { 13185 .snb-pdp__promo-title { 13186 font-size: 16px; 13187 } 13188 } 13189 13190 .snb-pdp__promo-desc { 13191 font-size: 12px; 13192 line-height: 16px; 13193 margin: 0; 13194 color: var(--snb-pdp-ash); 13195 } 13196 13197 .snb-pdp__promo-code-btn { 13198 display: inline-flex; 13199 align-items: center; 13200 justify-content: center; 13201 gap: 8px; 13202 padding: 12px 16px; 13203 border: 1px solid var(--snb-pdp-ash); 13204 border-radius: 24px; 13205 background: transparent; 13206 cursor: pointer; 13207 font-family: "Montserrat", sans-serif; 13208 font-weight: 500; 13209 font-size: 12px; 13210 text-transform: uppercase; 13211 color: var(--snb-pdp-ash); 13212 line-height: 16px; 13213 transition: background 0.2s ease; 13214 width: 100%; 13215 } 13216 13217 @media (min-width: 769px) { 13218 .snb-pdp__promo-code-btn { 13219 width: auto; 13220 flex-shrink: 0; 13221 } 13222 } 13223 13224 .snb-pdp__promo-code-btn:hover { 13225 background: var(--snb-pdp-lantern); 13226 color: var(--snb-pdp-white); 13227 } 13228 13229 .snb-pdp__promo-code-btn:hover svg { 13230 stroke: var(--snb-pdp-white); 13231 } 13232 13233 .snb-pdp__promo-code-btn svg { 13234 width: 16px; 13235 height: 16px; 13236 stroke: var(--snb-pdp-ash); 13237 fill: none; 13238 } 13239 13240 /* ââ Add-on pairings (SHO-325) ââ */ 13241 .snb-pdp__addons { 13242 display: flex; 13243 flex-direction: column; 13244 gap: 8px; 13245 margin: -8px 0 24px; 13246 } 13247 13248 /* whole card is the hit area (label overlay); checkbox sits in the top-right corner */ 13249 .snb-pdp__addon { 13250 position: relative; 13251 display: grid; 13252 grid-template-columns: auto minmax(0, 1fr) auto; 13253 grid-template-areas: 13254 "image eyebrow check" 13255 "image title price" 13256 "desc desc desc";
13257 align-items: center; 13258 column-gap: 12px; 13259 row-gap: 2px; 13260 padding: 14px 14px 14px 16px; 13261 margin: 0; 13262 border: 1px solid var(--snb-pdp-border); 13263 border-radius: var(--snb-pdp-radius); 13264 background: var(--snb-pdp-washi); 13265 color: var(--snb-pdp-ash); 13266 cursor: pointer; 13267 transition: border-color 0.2s ease, background 0.2s ease; 13268 } 13269 13270 .snb-pdp__addon--no-image { 13271 grid-template-columns: minmax(0, 1fr) auto; 13272 grid-template-areas: 13273 "eyebrow check" 13274 "title price" 13275 "desc desc"; 13276 } 13277 13278 .snb-pdp__addon-hit { 13279 position: absolute; 13280 inset: 0; 13281 z-index: 1; 13282 margin: 0; 13283 border-radius: inherit; 13284 cursor: pointer; 13285 } 13286 13287 .snb-pdp__addon-image { 13288 grid-area: image; 13289 align-self: start; 13290 width: 56px; 13291 height: 56px; 13292 border-radius: 4px; 13293 overflow: hidden; 13294 } 13295 13296 .snb-pdp__addon-image img { 13297 width: 100%; 13298 height: 100%; 13299 object-fit: cover; 13300 display: block; 13301 } 13302 13303 .snb-pdp__addon-eyebrow { 13304 grid-area: eyebrow; 13305 font-family: "Montserrat", sans-serif; 13306 font-weight: 500; 13307 font-size: 11px; 13308 letter-spacing: 1px; 13309 text-transform: uppercase; 13310 line-height: 14px; 13311 color: var(--snb-pdp-persimmon); 13312 } 13313 13314 .snb-pdp__addon-title { 13315 grid-area: title; 13316 display: flex; 13317 align-items: flex-start; 13318 gap: 6px; 13319 min-width: 0; 13320 font-family: "Montserrat", sans-serif; 13321 font-weight: 500; 13322 font-size: 14px; 13323 line-height: 18px; 13324 } 13325 13326 .snb-pdp__addon-price { 13327 grid-area: price; 13328 justify-self: end; 13329 align-self: start; 13330 display: flex; 13331 flex-direction: column; 13332 align-items: flex-end; 13333 font-family: "Orpheus Pro", serif; 13334 font-size: 18px; 13335 line-height: 22px; 13336 white-space: nowrap; 13337 } 13338 13339 .snb-pdp__addon-price-note { 13340 font-family: "Lato", sans-serif; 13341 font-size: 10px; 13342 line-height: 12px; 13343 letter-spacing: 0.3px; 13344 opacity: 0.75; 13345 margin-top: 2px; 13346 } 13347 13348 .snb-pdp__addon-desc { 13349 grid-area: desc; 13350 margin-top: 6px; 13351 font-size: 12px; 13352 line-height: 16px; 13353 } 13354 13355 .snb-pdp__addon-learn { 13356 position: relative; 13357 z-index: 2; 13358 -webkit-appearance: none; 13359 appearance: none; 13360 display: inline; 13361 padding: 0; 13362 border: 0; 13363 background: none; 13364 font: inherit; 13365 color: var(--snb-pdp-ash); 13366 text-decoration: underline; 13367 text-underline-offset: 2px; 13368 cursor: pointer; 13369 } 13370 13371 .snb-pdp__addon-learn:hover { 13372 color: var(--snb-pdp-lantern); 13373 } 13374 13375 .snb-pdp__addon-learn:focus-visible { 13376 outline: 2px solid var(--snb-pdp-lantern); 13377 outline-offset: 2px; 13378 } 13379 13380 .snb-pdp__addon-check { 13381 grid-area: check; 13382 align-self: start; 13383 justify-self: end; 13384 pointer-events: none; 13385 display: inline-flex; 13386 align-items: center; 13387 justify-content: center; 13388 width: 20px; 13389 height: 20px; 13390 border: 1.5px solid var(--snb-pdp-ash); 13391 border-radius: 4px; 13392 background: var(--snb-pdp-white); 13393 transition: background 0.2s ease, border-color 0.2s ease; 13394 } 13395 13396 .snb-pdp__addon-check svg { 13397 width: 12px; 13398 height: 12px; 13399 stroke: var(--snb-pdp-white); 13400 fill: none; 13401 opacity: 0; 13402 } 13403 13404 .snb-pdp__addon--checked .snb-pdp__addon-check { 13405 background: var(--snb-pdp-lantern); 13406 border-color: var(--snb-pdp-lantern); 13407 } 13408 13409 .snb-pdp__addon--checked .snb-pdp__addon-check svg { 13410 opacity: 1; 13411 } 13412 13413 /* info button rides above the label overlay so it opens the modal instead of toggling */ 13414 .snb-pdp__addon-info { 13415 position: relative; 13416 z-index: 2; 13417 display: inline-flex; 13418 align-items: center; 13419 justify-content: center; 13420 width: 24px; 13421 height: 24px; 13422 margin: -3px 0; 13423 flex-shrink: 0; 13424 padding: 0; 13425 border: none; 13426 border-radius: 50%; 13427 background: transparent; 13428 color: var(--snb-pdp-ash); 13429 cursor: pointer; 13430 transition: background 0.2s ease, color 0.2s ease; 13431 } 13432 13433 .snb-pdp__addon-info svg { 13434 width: 18px; 13435 height: 18px; 13436 stroke: currentColor; 13437 fill: none; 13438 } 13439 13440 .snb-pdp__addon-info:hover { 13441 background: var(--snb-pdp-white); 13442 color: var(--snb-pdp-lantern); 13443 } 13444 13445 .snb-pdp__addon-info:focus-visible { 13446 outline: 2px solid var(--snb-pdp-lantern); 13447 outline-offset: 2px; 13448 } 13449 13450 .snb-pdp__addon:hover, 13451 .snb-pdp__addon--checked { 13452 border-color: var(--snb-pdp-ash); 13453 } 13454 13455 .snb-pdp__addon--checked { 13456 background: var(--snb-pdp-white); 13457 } 13458 13459 .snb-pdp__addon:focus-within { 13460 outline: 2px solid var(--snb-pdp-lantern); 13461 outline-offset: 2px; 13462 } 13463 13464 .snb-pdp__addon--placeholder { 13465 display: flex; 13466 justify-content: center; 13467 font-size: 12px; 13468 cursor: default; 13469 } 13470 13471 /* desktop: large image left, price stacked under the corner checkbox */ 13472 @media (min-width: 769px) { 13473 .snb-pdp__addon { 13474 grid-template-columns: auto minmax(0, 1fr) auto; 13475 grid-template-areas: 13476 "image eyebrow check" 13477 "image title price" 13478 "image desc price"; 13479 column-gap: 16px; 13480 padding: 12px 16px; 13481 } 13482 13483 .snb-pdp__addon--no-image { 13484 grid-template-columns: minmax(0, 1fr) auto; 13485 grid-template-areas: 13486 "eyebrow check" 13487 "title price" 13488 "desc price"; 13489 } 13490 13491 .snb-pdp__addon-image { 13492 align-self: center; 13493 width: 72px; 13494 height: 72px; 13495 } 13496 13497 .snb-pdp__addon-price { 13498 justify-self: end; 13499 align-self: center; 13500 font-size: 20px; 13501 line-height: 24px; 13502 } 13503 13504 .snb-pdp__addon-desc { 13505 margin-top: 0; 13506 } 13507 } 13508 13509 /* Add-on details modal (SHO-325) â cloned to <body>, so it carries its own tokens */ 13510 .snb-pdp-modal { 13511 --snb-pdp-modal-bg: #f6f4f1; 13512 --snb-pdp-modal-text: #1a1a1a; 13513 --snb-pdp-modal-accent: #b73d09; 13514 --snb-pdp-modal-surface: #ffffff; 13515 --snb-pdp-modal-border: #e8e8e1; 13516 position: fixed; 13517 inset: 0; 13518 z-index: 10000; 13519 display: flex; 13520 align-items: center; 13521 justify-content: center; 13522 padding: 16px; 13523 opacity: 0; 13524 visibility: hidden; 13525 transition: opacity 0.25s ease, visibility 0.25s ease; 13526 font-family: "Lato", sans-serif; 13527 color: var(--snb-pdp-modal-text); 13528 box-sizing: border-box; 13529 } 13530 13531 .snb-pdp-modal *, 13532 .snb-pdp-modal *::before, 13533 .snb-pdp-modal *::after { 13534 box-sizing: border-box; 13535 } 13536 13537 .snb-pdp-modal--open { 13538 opacity: 1; 13539 visibility: visible; 13540 } 13541 13542 .snb-pdp-modal__backdrop { 13543 position: absolute; 13544 inset: 0; 13545 background: rgba(0, 0, 0, 0.6); 13546 cursor: pointer; 13547 } 13548 13549 .snb-pdp-modal__box { 13550 position: relative; 13551 z-index: 1; 13552 display: flex; 13553 flex-direction: column; 13554 width: 100%; 13555 max-width: 1100px; 13556 max-height: 92vh; 13557 overflow-y: auto; 13558 background: var(--snb-pdp-modal-bg); 13559 border-radius: 8px; 13560 } 13561 13562 @media (min-width: 769px) { 13563 .snb-pdp-modal__box { 13564 flex-direction: row; 13565 max-height: 85vh; 13566 overflow: hidden; 13567 } 13568 } 13569 13570 .snb-pdp-modal__close { 13571 position: absolute; 13572 top: 12px; 13573 right: 12px; 13574 z-index: 3; 13575 width: 40px; 13576 height: 40px; 13577 display: inline-flex; 13578 align-items: center; 13579 justify-content: center; 13580 padding: 0; 13581 border: none; 13582 border-radius: 50%; 13583 background: var(--snb-pdp-modal-bg); 13584 color: var(--snb-pdp-modal-text); 13585 cursor: pointer; 13586 } 13587 13588 @media (min-width: 769px) { 13589 .snb-pdp-modal__close { 13590 top: 28px; 13591 right: 28px; 13592 background: transparent; 13593 } 13594 } 13595 13596 .snb-pdp-modal__close svg { 13597 width: 22px; 13598 height: 22px; 13599 stroke: currentColor; 13600 fill: none; 13601 } 13602 13603 .snb-pdp-modal__close:focus-visible, 13604 .snb-pdp-modal__thumb:focus-visible { 13605 outline: 2px solid var(--snb-pdp-modal-accent); 13606 outline-offset: 2px; 13607 } 13608 13609 .snb-pdp-modal__media { 13610 position: relative; 13611 width: 100%; 13612 aspect-ratio: 4 / 3; 13613 flex-shrink: 0; 13614 overflow: hidden; 13615 background: var(--snb-pdp-modal-surface); 13616 } 13617 13618 @media (min-width: 769px) { 13619 .snb-pdp-modal__media { 13620 flex: 0 0 50%; 13621 max-width: 50%; 13622 aspect-ratio: auto; 13623 min-height: 560px; 13624 } 13625 } 13626 13627 .snb-pdp-modal__slide { 13628 position: absolute; 13629 inset: 0; 13630 opacity: 0; 13631 transition: opacity 0.3s ease; 13632 } 13633 13634 .snb-pdp-modal__slide--active { 13635 opacity: 1; 13636 } 13637 13638 .snb-pdp-modal__slide img { 13639 width: 100%; 13640 height: 100%; 13641 object-fit: cover; 13642 display: block; 13643 } 13644 13645 .snb-pdp-modal__thumbs { 13646 position: absolute; 13647 right: 12px; 13648 bottom: 12px; 13649 display: flex; 13650 flex-direction: row; 13651 gap: 8px; 13652 z-index: 2; 13653 } 13654 13655 @media (min-width: 769px) { 13656 .snb-pdp-modal__thumbs { 13657 right: 40px; 13658 bottom: 40px; 13659 flex-direction: column; 13660 } 13661 } 13662 13663 .snb-pdp-modal__thumb { 13664 width: 64px; 13665 height: 64px; 13666 padding: 0; 13667 border: 2px solid transparent; 13668 border-radius: 4px; 13669 overflow: hidden; 13670 background: var(--snb-pdp-modal-surface); 13671 cursor: pointer; 13672 opacity: 0.85; 13673 transition: opacity 0.2s ease, border-color 0.2s ease; 13674 } 13675 13676 @media (min-width: 769px) { 13677 .snb-pdp-modal__thumb { 13678 width: 96px; 13679 height: 96px; 13680 } 13681 } 13682 13683 .snb-pdp-modal__thumb img { 13684 width: 100%; 13685 height: 100%; 13686 object-fit: cover; 13687 display: block; 13688 } 13689 13690 .snb-pdp-modal__thumb:hover, 13691 .snb-pdp-modal__thumb--active { 13692 opacity: 1; 13693 border-color: var(--snb-pdp-modal-surface); 13694 } 13695 13696 .snb-pdp-modal__content { 13697 flex: 1; 13698 min-width: 0; 13699 padding: 28px 20px 32px; 13700 } 13701 13702 @media (min-width: 769px) { 13703 .snb-pdp-modal__content { 13704 padding: 120px 60px 60px; 13705 overflow-y: auto; 13706 } 13707 } 13708 13709 .snb-pdp-modal__eyebrow { 13710 font-family: "Montserrat", sans-serif; 13711 font-weight: 500; 13712 font-size: 13px; 13713 letter-spacing: 2px; 13714 text-transform: uppercase; 13715 line-height: 16px; 13716 color: var(--snb-pdp-modal-accent); 13717 margin: 0 0 16px; 13718 } 13719 13720 .snb-pdp-modal__title { 13721 font-family: "Orpheus Pro", serif; 13722 font-weight: 400; 13723 font-size: 36px; 13724 line-height: 1.1; 13725 margin: 0 0 20px; 13726 color: var(--snb-pdp-modal-text); 13727 } 13728 13729 @media (min-width: 769px) { 13730 .snb-pdp-modal__title { 13731 font-size: 52px; 13732 } 13733 } 13734 13735 .snb-pdp-modal__desc { 13736 font-size: 16px; 13737 line-height: 1.75; 13738 margin: 0 0 32px; 13739 } 13740 13741 .snb-pdp-modal__desc p { 13742 margin: 0 0 8px; 13743 } 13744 13745 .snb-pdp-modal__desc p:last-child { 13746 margin-bottom: 0; 13747 } 13748 13749 .snb-pdp-modal__meta { 13750 display: flex; 13751 flex-wrap: wrap; 13752 margin: 0; 13753 padding: 24px 12px; 13754 background: var(--snb-pdp-modal-surface); 13755 border-radius: 8px; 13756 } 13757 13758 .snb-pdp-modal__meta-item { 13759 flex: 1 1 0; 13760 min-width: 120px; 13761 text-align: center; 13762 padding: 4px 12px; 13763 } 13764 13765 .snb-pdp-modal__meta-item + .snb-pdp-modal__meta-item { 13766 border-left: 1px solid var(--snb-pdp-modal-border); 13767 } 13768 13769 .snb-pdp-modal__meta dt { 13770 font-family: "Montserrat", sans-serif; 13771 font-weight: 500; 13772 font-size: 11px; 13773 letter-spacing: 1.5px; 13774 text-transform: uppercase; 13775 line-height: 14px; 13776 margin: 0 0 8px; 13777 } 13778 13779 .snb-pdp-modal__meta dd { 13780 font-family: "Orpheus Pro", serif; 13781 font-size: 22px; 13782 line-height: 1.2; 13783 margin: 0; 13784 } 13785 13786 @media (min-width: 769px) { 13787 .snb-pdp-modal__meta dd { 13788 font-size: 28px; 13789 } 13790 } 13791 13792 /* ââ Pricing + CTA ââ */ 13793 .snb-pdp__checkout { 13794 display: flex; 13795 flex-direction: column; 13796 gap: 8px; 13797 margin-bottom: 24px; 13798 } 13799 13800 @media (min-width: 1200px) { 13801 .snb-pdp__checkout { 13802 flex-direction: row; 13803 align-items: flex-start; 13804 justify-content: space-between; 13805 gap: 24px; 13806 } 13807 } 13808 13809 .snb-pdp__pricing { 13810 display: flex; 13811 flex-direction: row; 13812 align-items: flex-start; 13813 gap: 0; 13814 flex-wrap: wrap; 13815 } 13816 13817 @media (min-width: 1200px) { 13818 .snb-pdp__pricing { 13819 flex-direction: column; 13820 } 13821 } 13822 13823 .snb-pdp__pricing-left { 13824 display: flex; 13825 flex-direction: column; 13826 margin-right: 8px; 13827 } 13828 13829 @media (min-width: 1200px) { 13830 .snb-pdp__pricing-left { 13831 margin-right: 0; 13832 } 13833 } 13834 13835 .snb-pdp__pricing-label { 13836 font-family: "Montserrat", sans-serif; 13837 font-weight: 500; 13838 font-size: 12px; 13839 text-transform: uppercase; 13840 line-height: 12px; 13841 } 13842 13843 .snb-pdp__pricing-save { 13844 font-family: "Montserrat", sans-serif; 13845 font-weight: 500; 13846 font-size: 12px; 13847 text-transform: uppercase; 13848 line-height: 12px; 13849 color: var(--snb-pdp-persimmon); 13850 margin-top: 6px; 13851 } 13852 13853 @media (min-width: 1200px) { 13854 .snb-pdp__pricing-save { 13855 margin-top: 8px; 13856 } 13857 } 13858 13859 .snb-pdp__pricing-right { 13860 display: flex; 13861 flex-direction: column; 13862 } 13863 13864 .snb-pdp__pricing-row { 13865 display: flex; 13866 align-items: baseline; 13867 gap: 16px; 13868 } 13869 13870 .snb-pdp__price { 13871 font-family: "Orpheus Pro", serif; 13872 font-size: 28px; 13873 line-height: 32px; 13874 color: var(--snb-pdp-ash); 13875 } 13876 13877 @media (min-width: 1200px) { 13878 .snb-pdp__price { 13879 font-size: 32px; 13880 } 13881 } 13882 13883 .snb-pdp__compare-price { 13884 font-family: "Orpheus Pro", serif; 13885 font-size: 28px; 13886 line-height: 32px; 13887 color: var(--snb-pdp-persimmon); 13888 text-decoration: line-through; 13889 } 13890 13891 @media (min-width: 1200px) { 13892 .snb-pdp__compare-price { 13893 font-size: 32px; 13894 } 13895 } 13896 13897 .snb-pdp__billing-note { 13898 font-size: 16px; 13899 line-height: 24px; 13900 letter-spacing: 0.5px; 13901 margin-top: 0; 13902 text-align: right; 13903 } 13904 13905 @media (min-width: 1200px) { 13906 .snb-pdp__billing-note { 13907 text-align: left; 13908 margin-top: 0; 13909 } 13910 } 13911 13912 .snb-pdp__form { 13913 width: 100%; 13914 } 13915 13916 @media (min-width: 1200px) { 13917 .snb-pdp__form { 13918 flex: 1; 13919text-align:end; 13920 } 13921 .snb-pdp__cta { 13922 height: 76px; 13923 } 13924 13925 } 13926 13927 .snb-pdp__cta { 13928 text-align: center; 13929 } 13930 13931 .snb-pdp__cta[disabled] { 13932 opacity: 0.5;
13933 cursor: not-allowed; 13934 } 13935 13936 /* ââ Divider ââ */ 13937 .snb-pdp__divider { 13938 border: none; 13939 border-top: 1px solid var(--snb-pdp-border); 13940 margin: 0 0 12px; 13941 } 13942.snb-pdp__disclaimer { 13943 padding-bottom: 12px; 13944 text-align: center; 13945 font-size: 13px 13946} 13947 /* ââ USP List ââ */ 13948 .snb-pdp__usps { 13949 display: flex; 13950 flex-direction: column; 13951 gap: 10px; 13952 margin-bottom: 40px; 13953 content-visibility: auto; 13954 contain-intrinsic-size: auto 200px; 13955 } 13956 13957 .snb-pdp__usp { 13958 display: flex; 13959 align-items: center; 13960 gap: 10px; 13961 } 13962 13963 .snb-pdp__usp-icon { 13964 width: 25px; 13965 height: 25px; 13966 flex-shrink: 0; 13967 } 13968 13969 .snb-pdp__usp-icon img { 13970 width: 100%; 13971 height: 100%; 13972 object-fit: contain; 13973 display: block; 13974 } 13975 13976 .snb-pdp__usp-text { 13977 font-size: 16px; 13978 line-height: 24px; 13979 letter-spacing: 0.5px; 13980 } 13981 13982 /* ââ Description ââ */ 13983 .snb-pdp__description { 13984 display: flex; 13985 flex-direction: column; 13986 gap: 24px; 13987 margin-bottom: 40px; 13988 content-visibility: auto; 13989 contain-intrinsic-size: auto 150px; 13990 } 13991 13992 .snb-pdp__description-heading { 13993 font-family: "Orpheus Pro", serif; 13994 font-weight: 500; 13995 font-size: 24px; 13996 line-height: 30px; 13997 margin: 0; 13998 } 13999 14000 @media (min-width: 769px) { 14001 .snb-pdp__description-heading { 14002 font-size: 28px; 14003 } 14004 } 14005 14006 .snb-pdp__description-text { 14007 font-size: 16px; 14008 line-height: 24px; 14009 letter-spacing: 0.5px; 14010 } 14011 14012 .snb-pdp__description-text p { 14013 margin: 0 0 12px; 14014 } 14015 14016 .snb-pdp__description-text p:last-child { 14017 margin-bottom: 0; 14018 } 14019 14020 /* ââ Collapsible Details ââ */ 14021 .snb-pdp__details-toggle { 14022 display: flex; 14023 align-items: center; 14024 justify-content: space-between; 14025 width: 100%; 14026 padding: 0; 14027 background: none; 14028 border: none; 14029 cursor: pointer; 14030 font-family: "Lato", sans-serif; 14031 font-weight: 600; 14032 font-size: 18px; 14033 letter-spacing: 1px; 14034 line-height: 22px; 14035 color: var(--snb-pdp-ash); 14036 text-align: left; 14037 } 14038 14039 .snb-pdp__details-toggle:focus-visible { 14040 outline: 2px solid var(--snb-pdp-ash); 14041 outline-offset: 4px; 14042 border-radius: 2px; 14043 } 14044 14045 .snb-pdp__details-icon { 14046 width: 12px; 14047 height: 12px; 14048 transition: transform 0.3s ease; 14049 flex-shrink: 0; 14050 } 14051 14052 .snb-pdp__details[open] .snb-pdp__details-icon { 14053 transform: rotate(180deg); 14054 } 14055 14056 .snb-pdp__details-content { 14057 padding-top: 16px; 14058 font-size: 16px; 14059 line-height: 24px; 14060 letter-spacing: 0.5px; 14061 } 14062 14063 .snb-pdp__details-content p { 14064 margin: 0 0 12px; 14065 } 14066 14067 .snb-pdp__details-content p:last-child { 14068 margin-bottom: 0; 14069 }</style><section id="snack-box-subscription" class="snb-pdp page-width" data-section-id="template--17749318303830__snb_subs_panel_3rfYyF" data-section-type="snb-pdp-subscription"><div class="snb-pdp__gallery"><div 14070 class="snb-pdp__carousel" 14071 data-snb-carousel 14072 aria-hidden="true" 14073 inert 14074 ><div 14075 class="snb-pdp__carousel-slide" 14076 role="group" 14077 aria-roledescription="slide" 14078 aria-label="Image 1 of 10" 14079 14080 > 14081 <img 14082 src="//bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square.jpg?v=1777541638&width=800" 14083 srcset="//bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square.jpg?v=1777541638&width=400 400w, 14084 //bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square.jpg?v=1777541638&width=600 600w, 14085 //bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square.jpg?v=1777541638&width=800 800w" 14086 sizes="(min-width: 769px) 50vw, 85vw" 14087 loading="lazy" 14088 alt="Bokksu Snack Box Subscription" 14089 width="1200" 14090 height="1200" 14091 > 14092 </div><div 14093 class="snb-pdp__carousel-slide" 14094 role="group" 14095 aria-roledescription="slide" 14096 aria-label="Image 2 of 10" 14097 14098 > 14099 <img 14100 src="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_001_Fullcrop_HiRes.jpg?v=1780550983&width=800" 14101 srcset="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_001_Fullcrop_HiRes.jpg?v=1780550983&width=400 400w, 14102 //bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_001_Fullcrop_HiRes.jpg?v=1780550983&width=600 600w, 14103 //bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_001_Fullcrop_HiRes.jpg?v=1780550983&width=800 800w" 14104 sizes="(min-width: 769px) 50vw, 85vw" 14105 loading="lazy" 14106 alt="Bokksu Snack Box Subscription" 14107 width="3178" 14108 height="2224" 14109 > 14110 </div><div 14111 class="snb-pdp__carousel-slide" 14112 role="group" 14113 aria-roledescription="slide" 14114 aria-label="Image 3 of 10" 14115 14116 > 14117 <img 14118 src="//bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_HeroBanner_03_1200x1500_2.jpg?v=1780551296&width=800" 14119 srcset="//bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_HeroBanner_03_1200x1500_2.jpg?v=1780551296&width=400 400w, 14120 //bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_HeroBanner_03_1200x1500_2.jpg?v=1780551296&width=600 600w, 14121 //bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_HeroBanner_03_1200x1500_2.jpg?v=1780551296&width=800 800w" 14122 sizes="(min-width: 769px) 50vw, 85vw" 14123 loading="lazy" 14124 alt="Bokksu Snack Box Subscription" 14125 width="1200" 14126 height="1500" 14127 > 14128 </div><div 14129 class="snb-pdp__carousel-slide" 14130 role="group" 14131 aria-roledescription="slide" 14132 aria-label="Image 4 of 10" 14133 14134 > 14135 <img 14136 src="//bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fda752fd-1f0a-4fd3-961e-121d89bcd850.png?v=1790830789&width=800" 14137 srcset="//bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fda752fd-1f0a-4fd3-961e-121d89bcd850.png?v=1790830789&width=400 400w, 14138 //bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fda752fd-1f0a-4fd3-961e-121d89bcd850.png?v=1790830789&width=600 600w, 14139 //bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fda752fd-1f0a-4fd3-961e-121d89bcd850.png?v=1790830789&width=800 800w" 14140 sizes="(min-width: 769px) 50vw, 85vw" 14141 loading="lazy" 14142 alt="Bokksu Snack Box Subscription" 14143 width="1080" 14144 height="1080" 14145 > 14146 </div><div 14147 class="snb-pdp__carousel-slide" 14148 role="group" 14149 aria-roledescription="slide" 14150 aria-label="Image 5 of 10" 14151 14152 > 14153 <img 14154 src="//bokksu.com/cdn/shop/files/SNB2608_MemoriesofSummer_HeroBanner_780x800_b5940a7b-3814-4069-a6c9-8de5f1104d21.jpg?v=1788502617&width=800" 14155 srcset="//bokksu.com/cdn/shop/files/SNB2608_MemoriesofSummer_HeroBanner_780x800_b5940a7b-3814-4069-a6c9-8de5f1104d21.jpg?v=1788502617&width=400 400w, 14156 //bokksu.com/cdn/shop/files/SNB2608_MemoriesofSummer_HeroBanner_780x800_b5940a7b-3814-4069-a6c9-8de5f1104d21.jpg?v=1788502617&width=600 600w, 14157 //bokksu.com/cdn/shop/files/SNB2608_MemoriesofSummer_HeroBanner_780x800_b5940a7b-3814-4069-a6c9-8de5f1104d21.jpg?v=1788502617&width=800 800w" 14158 sizes="(min-width: 769px) 50vw, 85vw" 14159 loading="lazy" 14160 alt="Bokksu Snack Box Subscription" 14161 width="780" 14162 height="800" 14163 > 14164 </div><div 14165 class="snb-pdp__carousel-slide" 14166 role="group" 14167 aria-roledescription="slide" 14168 aria-label="Image 6 of 10" 14169 14170 > 14171 <img 14172 src="//bokksu.com/cdn/shop/files/SNB2607_BambooWishesofTanabata_Hero_2000x2000_01.jpg?v=1785902687&width=800" 14173 srcset="//bokksu.com/cdn/shop/files/SNB2607_BambooWishesofTanabata_Hero_2000x2000_01.jpg?v=1785902687&width=400 400w, 14174 //bokksu.com/cdn/shop/files/SNB2607_BambooWishesofTanabata_Hero_2000x2000_01.jpg?v=1785902687&width=600 600w, 14175 //bokksu.com/cdn/shop/files/SNB2607_BambooWishesofTanabata_Hero_2000x2000_01.jpg?v=1785902687&width=800 800w" 14176 sizes="(min-width: 769px) 50vw, 85vw" 14177 loading="lazy" 14178 alt="Bokksu Snack Box Subscription" 14179 width="2000" 14180 height="2000" 14181 > 14182 </div><div 14183 class="snb-pdp__carousel-slide" 14184 role="group" 14185 aria-roledescription="slide" 14186 aria-label="Image 7 of 10" 14187 14188 > 14189 <img 14190 src="//bokksu.com/cdn/shop/files/Angled-Hero-Mobile_02168747-e2a4-410d-ba69-f4cd66e540bd.png?v=1789715827&width=800" 14191 srcset="//bokksu.com/cdn/shop/files/Angled-Hero-Mobile_02168747-e2a4-410d-ba69-f4cd66e540bd.png?v=1789715827&width=400 400w, 14192 //bokksu.com/cdn/shop/files/Angled-Hero-Mobile_02168747-e2a4-410d-ba69-f4cd66e540bd.png?v=1789715827&width=600 600w, 14193 //bokksu.com/cdn/shop/files/Angled-Hero-Mobile_02168747-e2a4-410d-ba69-f4cd66e540bd.png?v=1789715827&width=800 800w" 14194 sizes="(min-width: 769px) 50vw, 85vw" 14195 loading="lazy" 14196 alt="Bokksu Snack Box Subscription" 14197 width="1080" 14198 height="1080" 14199 > 14200 </div><div 14201 class="snb-pdp__carousel-slide" 14202 role="group" 14203 aria-roledescription="slide" 14204 aria-label="Image 8 of 10" 14205 14206 > 14207 <img 14208 src="//bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fcd713ce-6049-4f8
142086-9f85-dc3a854162ae.png?v=1778043728&width=800" 14209 srcset="//bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fcd713ce-6049-4f86-9f85-dc3a854162ae.png?v=1778043728&width=400 400w, 14210 //bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fcd713ce-6049-4f86-9f85-dc3a854162ae.png?v=1778043728&width=600 600w, 14211 //bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fcd713ce-6049-4f86-9f85-dc3a854162ae.png?v=1778043728&width=800 800w" 14212 sizes="(min-width: 769px) 50vw, 85vw" 14213 loading="lazy" 14214 alt="Bokksu Snack Box Subscription" 14215 width="1080" 14216 height="1080" 14217 > 14218 </div><div 14219 class="snb-pdp__carousel-slide" 14220 role="group" 14221 aria-roledescription="slide" 14222 aria-label="Image 9 of 10" 14223 14224 > 14225 <img 14226 src="//bokksu.com/cdn/shop/files/page2.jpg?v=1778043607&width=800" 14227 srcset="//bokksu.com/cdn/shop/files/page2.jpg?v=177804360
142277&width=400 400w, 14228 //bokksu.com/cdn/shop/files/page2.jpg?v=1778043607&width=600 600w, 14229 //bokksu.com/cdn/shop/files/page2.jpg?v=1778043607&width=800 800w" 14230 sizes="(min-width: 769px) 50vw, 85vw" 14231 loading="lazy" 14232 alt="Bokksu Snack Box Subscription" 14233 width="1000" 14234 height="1000" 14235 > 14236 </div><div 14237 class="snb-pdp__carousel-slide" 14238 role="group" 14239 aria-roledescription="slide" 14240 aria-label="Image 10 of 10" 14241 14242 > 14243 <img 14244 src="//bokksu.com/cdn/shop/files/2603-Sakura-Silk-Lounge-2000x2000-SNB_efd4e2d2-a8d5-416e-aa7f-cf270f76acf6.jpg?v=1777541673&width=800" 14245 srcset="//bokksu.com/cdn/shop/files/2603-Sakura-Silk-Lounge-2000x2000-SNB_efd4e2d2-a8d5-416e-aa7f-cf270f76acf6.jpg?v=1777541673&width=400 400w, 14246 //bokksu.com/cdn/shop/files/2603-Sakura-Silk-Lounge-2000x2000-SNB_efd4e2d2-a8d5-416e-aa7f-cf270f76acf6.jpg?v=1777541673&width=600 600w, 14247 //bokksu.com/cdn/shop/files/2603-Sakura-Silk-Lounge-2000x2000-SNB_efd4e2d2-a8d5-416e-aa7f-cf270f76acf6.jpg?v=1777541673&width=800 800w" 14248 sizes="(min-width: 769px) 50vw, 85vw" 14249 loading="lazy" 14250 alt="Bokksu Snack Box Subscription" 14251 width="2000" 14252 height="2000" 14253 > 14254 </div></div><div class="snb-pdp__dots" data-snb-dots aria-hidden="true"><button 14255 type="button" 14256 role="tab" 14257 class="snb-pdp__dot snb-pdp__dot--active" 14258 data-snb-dot="0" 14259 aria-label="Go to image 1" 14260 aria-selected="true" 14261 ></button><button 14262 type="button" 14263 role="tab" 14264 class="snb-pdp__dot" 14265 data-snb-dot="1" 14266 aria-label="Go to image 2" 14267 aria-selected="false" 14268 ></button><button 14269 type="button" 14270 role="tab" 14271 class="snb-pdp__dot" 14272 data-snb-dot="2" 14273 aria-label="Go to image 3" 14274 aria-selected="false" 14275 ></button><button 14276 type="button" 14277 role="tab" 14278 class="snb-pdp__dot" 14279 data-snb-dot="3" 14280 aria-label="Go to image 4" 14281 aria-selected="false" 14282 ></button><button 14283 type="button" 14284 role="tab" 14285 class="snb-pdp__dot" 14286 data-snb-dot="4" 14287 aria-label="Go to image 5" 14288 aria-selected="false" 14289 ></button><button 14290 type="button" 14291 role="tab" 14292 class="snb-pdp__dot" 14293 data-snb-dot="5" 14294 aria-label="Go to image 6" 14295 aria-selected="false" 14296 ></button><button 14297 type="button" 14298 role="tab" 14299 class="snb-pdp__dot" 14300 data-snb-dot="6" 14301 aria-label="Go to image 7" 14302 aria-selected="false" 14303 ></button><button 14304 type="button" 14305 role="tab" 14306 class="snb-pdp__dot" 14307 data-snb-dot="7" 14308 aria-label="Go to image 8" 14309 aria-selected="false" 14310 ></button><button 14311 type="button" 14312 role="tab" 14313 class="snb-pdp__dot" 14314 data-snb-dot="8" 14315 aria-label="Go to image 9" 14316 aria-selected="false" 14317 ></button><button 14318 type="button" 14319 role="tab" 14320 class="snb-pdp__dot" 14321 data-snb-dot="9" 14322 aria-label="Go to image 10" 14323 aria-selected="false" 14324 ></button></div><div class="snb-pdp__desktop-gallery"><div class="snb-pdp__thumbs" aria-hidden="true" inert> 14325 <div class="snb-pdp__thumbs-scroller" data-snb-thumbs><button 14326 type="button" 14327 class="snb-pdp__thumb snb-pdp__thumb--active" 14328 data-snb-thumb 14329 data-index="0" 14330 data-img-src="//bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square.jpg?v=1777541638&width=1200" 14331 data-img-alt="Bokksu Snack Box Subscription" 14332 tabindex="-1" 14333 14334 > 14335 <img 14336 src="//bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square.jpg?v=1777541638&width=160" 14337 loading="lazy" 14338 alt="" 14339 width="76" 14340 height="76" 14341 > 14342 </button><button 14343 type="button" 14344 class="snb-pdp__thumb" 14345 data-snb-thumb 14346 data-index="1" 14347 data-img-src="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_001_Fullcrop_HiRes.jpg?v=1780550983&width=1200" 14348 data-img-alt="Bokksu Snack Box Subscription" 14349 tabindex="-1" 14350 14351 > 14352 <img 14353 src="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_001_Fullcrop_HiRes.jpg?v=1780550983&width=160" 14354 loading="lazy" 14355 alt="" 14356 width="76" 14357 height="76" 14358 > 14359 </button><button 14360 type="button" 14361 class="snb-pdp__thumb" 14362 data-snb-thumb 14363 data-index="2" 14364 data-img-src="//bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_HeroBanner_03_1200x1500_2.jpg?v=1780551296&width=1200" 14365 data-img-alt="Bokksu Snack Box Subscription" 14366 tabindex="-1" 14367 14368 > 14369 <img 14370 src="//bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_HeroBanner_03_1200x1500_2.jpg?v=1780551296&width=160" 14371 loading="lazy" 14372 alt="" 14373 width="76" 14374 height="76" 14375 > 14376 </button><button 14377 type="button" 14378 class="snb-pdp__thumb" 14379 data-snb-thumb 14380 data-index="3" 14381 data-img-src="//bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fda752fd-1f0a-4fd3-961e-121d89bcd850.png?v=1790830789&width=1200" 14382 data-img-alt="Bokksu Snack Box Subscription" 14383 tabindex="-1" 14384 14385 > 14386 <img 14387 src="//bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fda752fd-1f0a-4fd3-961e-121d89bcd850.png?v=1790830789&width=160" 14388 loading="lazy" 14389 alt="" 14390 width="76" 14391 height="76" 14392 > 14393 </button><button 14394 type="button" 14395 class="snb-pdp__thumb" 14396 data-snb-thumb 14397 data-index="4" 14398 data-img-src="//bokksu.com/cdn/shop/files/SNB2608_MemoriesofSummer_HeroBanner_780x800_b5940a7b-3814-4069-a6c9-8de5f1104d21.jpg?v=1788502617&width=1200" 14399 data-img-alt="Bokksu Snack Box Subscription" 14400 tabindex="-1" 14401 14402 > 14403 <img 14404 src="//bokksu.com/cdn/shop/files/SNB2608_MemoriesofSummer_HeroBanner_780x800_b5940a7b-3814-4069-a6c9-8de5f1104d21.jpg?v=1788502617&width=160" 14405 loading="lazy" 14406 alt="" 14407 width="76" 14408 height="76" 14409 > 14410 </button><button 14411 type="button" 14412 class="snb-pdp__thumb" 14413 data-snb-thumb 14414 data-index="5" 14415 data-img-src="//bokksu.com/cdn/shop/files/SNB2607_BambooWishesofTanabata_Hero_2000x2000_01.jpg?v=1785902687&width=1200" 14416 data-img-alt="Bokksu Snack Box Subscription" 14417 tabindex="-1" 14418 14419 > 14420 <img 14421 src="//bokksu.com/cdn/shop/files/SNB2607_BambooWishesofTanabata_Hero_2000x2000_01.jpg?v=1785902687&width=160" 14422 loading="lazy" 14423 alt="" 14424 width="76" 14425 height="76" 14426 > 14427 </button><button 14428 type="button" 14429 class="snb-pdp__thumb" 14430 data-snb-thumb 14431 data-index="6" 14432 data-img-src="//bokksu.com/cdn/shop/files/Angled-Hero-Mobile_02168747-e2a4-410d-ba69-f4cd66e540bd.png?v=1789715827&width=1200" 14433 data-img-alt="Bokksu Snack Box Subscription" 14434 tabindex="-1" 14435 14436 > 14437 <img 14438 src="//bokksu.com/cdn/shop/files/Angled-Hero-Mobile_02168747-e2a4-410d-ba69-f4cd66e540bd.png?v=1789715827&width=160" 14439 loading="lazy" 14440 alt="" 14441 width="76" 14442 height="76" 14443 > 14444 </button><button 14445 type="button" 14446 class="snb-pdp__thumb" 14447 data-snb-thumb 14448 data-index="7" 14449 data-img-src="//bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fcd713ce-6049-4f8
144496-9f85-dc3a854162ae.png?v=1778043728&width=1200" 14450 data-img-alt="Bokksu Snack Box Subscription" 14451 tabindex="-1" 14452 14453 > 14454 <img 14455 src="//bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fcd713ce-6049-4f86-9f85-dc3a854162ae.png?v=1778043728&width=160" 14456 loading="lazy" 14457 alt="" 14458 width="76" 14459 height="76" 14460 > 14461 </button><button 14462 type="button" 14463 class="snb-pdp__thumb" 14464 data-snb-thumb 14465 data-index="8" 14466 data-img-src="//bokksu.com/cdn/shop/files/page2.jpg?v=1778043607&width=1200" 14467 data-img-alt="Bokksu Snack Box Subscription" 14468 tabindex="-1" 14469 14470 > 14471 <img 14472 src="//bokksu.com/cdn/shop/files/page2.jpg?v=177804360
144727&width=160" 14473 loading="lazy" 14474 alt="" 14475 width="76" 14476 height="76" 14477 > 14478 </button><button 14479 type="button" 14480 class="snb-pdp__thumb" 14481 data-snb-thumb 14482 data-index="9" 14483 data-img-src="//bokksu.com/cdn/shop/files/2603-Sakura-Silk-Lounge-2000x2000-SNB_efd4e2d2-a8d5-416e-aa7f-cf270f76acf6.jpg?v=1777541673&width=1200" 14484 data-img-alt="Bokksu Snack Box Subscription" 14485 tabindex="-1" 14486 14487 > 14488 <img 14489 src="//bokksu.com/cdn/shop/files/2603-Sakura-Silk-Lounge-2000x2000-SNB_efd4e2d2-a8d5-416e-aa7f-cf270f76acf6.jpg?v=1777541673&width=160" 14490 loading="lazy" 14491 alt="" 14492 width="76" 14493 height="76" 14494 > 14495 </button></div><button type="button" class="snb-pdp__thumb-arrow" data-snb-thumb-next tabindex="-1"> 14496 <svg viewBox="0 0 10 6" fill="none" aria-hidden="true"> 14497 <path d="M1 1L5 5L9 1" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 14498 </svg> 14499 </button></div><div class="snb-pdp__main-image" data-snb-main-image><img 14500 src="//bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square.jpg?v=1777541638&width=1200" 14501 loading="lazy" 14502 alt="Bokksu Snack Box Subscription" 14503 width="1200" 14504 height="1200" 14505 ></div> 14506 </div></div><div class="snb-pdp__info"> 14507 <p class="snb-pdp__preheader">Choose your plan</p> 14508 14509 14510<h2 class="snb-pdp__title">Snack Box Subscription</h2> 14511<div class="snb-pdp__sale-banner"><p>Free gift snacks with 3-, 6-, or 12-month subscriptions!</p></div><div class="snb-pdp__plans" data-snb-plans role="radiogroup" aria-label="Subscription plan length"><div 14512 class="snb-pdp__plan" 14513 data-snb-plan 14514 role="radio" 14515 tabindex="-1" 14516 aria-checked="false"aria-label="12 Months, Best Value, $32.99 per month, Save $84. Includes gifts with purchase: PLUS Grilled Hokkaido Corn: Soy sauce flavor (2 pc) and CACAOCAT Chocolate Dark (2 pc)" 14517 data-base-label="12 Months, Best Value, $32.99 per month, Save $84" 14518 data-promo-label="Promotion: gifts with purchase, PLUS Grilled Hokkaido Corn: Soy sauce flavor (2 pc) and CACAOCAT Chocolate Dark (2 pc)" 14519 data-variant-id="42939935326294" 14520 data-selling-plan-id="2094104662" 14521 data-price="$395.88" 14522 data-compare-price="$479.88" 14523 data-save-text="Save $84" 14524 data-billing-note="Billed annually, cancel anytime." 14525 14526 > 14527 <div class="snb-pdp__plan-header"> 14528 <div class="snb-pdp__plan-left"> 14529 <span class="snb-pdp__plan-name">12 Months</span><span class="snb-pdp__plan-badge">Best Value</span></div> 14530 <div class="snb-pdp__plan-right"><span class="snb-pdp__plan-save">Save $84</span> 14531 <span class="snb-pdp__plan-divider" aria-hidden="true"></span><span class="snb-pdp__plan-price" aria-hidden="true">$32.99/mo</span> 14532 <span class="visually-hidden">$32.99 per month</span> 14533 </div> 14534 </div><div class="snb-pdp__promo" data-snb-promo><div class="snb-pdp__promo-image"> 14535 <img 14536 src="//bokksu.com/cdn/shop/files/bokksu_feb26_15_CACAOCAT_Chocolate_Dark_a.jpg?v=1776857270&width=128" 14537 loading="lazy" 14538 alt="gifts with purchase" 14539 width="64" 14540 height="64" 14541 > 14542 </div><div class="snb-pdp__promo-text"> 14543 <p class="snb-pdp__promo-title">gifts with purchase</p><p class="snb-pdp__promo-desc">PLUS Grilled Hokkaido Corn: Soy sauce flavor (2 pc) and CACAOCAT Chocolate Dark (2 pc)</p></div></div></div><div 14544 class="snb-pdp__plan snb-pdp__plan--active" 14545 data-snb-plan 14546 role="radio" 14547 tabindex="0" 14548 aria-checked="true"aria-label="6 Months, POPULAR, $33.99 per month, Save $36. Includes gifts with purchase: PLUS Grilled Hokkaido Corn: Soy sauce flavor (2 pc) and CACAOCAT Chocolate Dark (2 pc)" 14549 data-base-label="6 Months, POPULAR, $33.99 per month, Save $36" 14550 data-promo-label="Promotion: gifts with purchase, PLUS Grilled Hokkaido Corn: Soy sauce flavor (2 pc) and CACAOCAT Chocolate Dark (2 pc)" 14551 data-variant-id="42939934900310" 14552 data-selling-plan-id="2093940822" 14553 data-price="$203.94" 14554 data-compare-price="$239.94" 14555 data-save-text="Save $36" 14556 data-billing-note="Billed every 6 months, cancel anytime." 14557 14558 > 14559 <div class="snb-pdp__plan-header"> 14560 <div class="snb-pdp__plan-left">
14561 <span class="snb-pdp__plan-name">6 Months</span><span class="snb-pdp__plan-badge">POPULAR</span></div> 14562 <div class="snb-pdp__plan-right"><span class="snb-pdp__plan-save">Save $36</span> 14563 <span class="snb-pdp__plan-divider" aria-hidden="true"></span><span class="snb-pdp__plan-price" aria-hidden="true">$33.99/mo</span> 14564 <span class="visually-hidden">$33.99 per month</span> 14565 </div> 14566 </div><div class="snb-pdp__promo" data-snb-promo><div class="snb-pdp__promo-image"> 14567 <img 14568 src="//bokksu.com/cdn/shop/files/GrilledHokkaidoCornSoysauceflavor_SM2065_00_2000x2000_77c800a9-6316-42e9-a3be-d99018b72fd7.jpg?v=1790831608&width=128" 14569 loading="lazy" 14570 alt="gifts with purchase" 14571 width="64" 14572 height="64" 14573 > 14574 </div><div class="snb-pdp__promo-text"> 14575 <p class="snb-pdp__promo-title">gifts with purchase</p><p class="snb-pdp__promo-desc">PLUS Grilled Hokkaido Corn: Soy sauce flavor (2 pc) and CACAOCAT Chocolate Dark (2 pc)</p></div></div></div><div 14576 class="snb-pdp__plan" 14577 data-snb-plan 14578 role="radio" 14579 tabindex="-1" 14580 aria-checked="false"aria-label="3 Months, $35.99 per month, Save $12. Includes gifts with purchase: PLUS Grilled Hokkaido Corn: Soy sauce flavor (2 pc) and CACAOCAT Chocolate Dark (2 pc)" 14581 data-base-label="3 Months, $35.99 per month, Save $12" 14582 data-promo-label="Promotion: gifts with purchase, PLUS Grilled Hokkaido Corn: Soy sauce flavor (2 pc) and CACAOCAT Chocolate Dark (2 pc)" 14583 data-variant-id="42939930902614" 14584 data-selling-plan-id="2093842518" 14585 data-price="$107.97" 14586 data-compare-price="$119.97" 14587 data-save-text="Save $12" 14588 data-billing-note="Billed every 3 months, cancel anytime." 14589 14590 > 14591 <div class="snb-pdp__plan-header"> 14592 <div class="snb-pdp__plan-left"> 14593 <span class="snb-pdp__plan-name">3 Months</span></div> 14594 <div class="snb-pdp__plan-right"><span class="snb-pdp__plan-save">Save $12</span> 14595 <span class="snb-pdp__plan-divider" aria-hidden="true"></span><span class="snb-pdp__plan-price" aria-hidden="true">$35.99/mo</span> 14596 <span class="visually-hidden">$35.99 per month</span> 14597 </div> 14598 </div><div class="snb-pdp__promo" data-snb-promo><div class="snb-pdp__promo-image"> 14599 <img 14600 src="//bokksu.com/cdn/shop/files/CACAOCATChocolateDark_00_2000x2000_8e62fa50-4da1-4cb0-8dfa-6d4a0088eabb.jpg?v=1782884927&width=128" 14601 loading="lazy" 14602 alt="gifts with purchase" 14603 width="64" 14604 height="64" 14605 > 14606 </div><div class="snb-pdp__promo-text"> 14607 <p class="snb-pdp__promo-title">gifts with purchase</p><p class="snb-pdp__promo-desc">PLUS Grilled Hokkaido Corn: Soy sauce flavor (2 pc) and CACAOCAT Chocolate Dark (2 pc)</p></div></div></div><div 14608 class="snb-pdp__plan" 14609 data-snb-plan 14610 role="radio" 14611 tabindex="-1" 14612 aria-checked="false"aria-label="1 Month, $39.99 per month. Includes gifts with purchase: Upgrade to a 3, 6, or 12-month plan to receive exclusive gifts." 14613 data-base-label="1 Month, $39.99 per month" 14614 data-promo-label="Promotion: gifts with purchase, Upgrade to a 3, 6, or 12-month plan to receive exclusive gifts." 14615 data-variant-id="42939935850582" 14616 data-selling-plan-id="2093514838" 14617 data-price="$39.99" 14618 data-compare-price="" 14619 data-save-text="" 14620 data-billing-note="Billed monthly, cancel anytime." 14621 14622 > 14623 <div class="snb-pdp__plan-header"> 14624 <div class="snb-pdp__plan-left">
14625 <span class="snb-pdp__plan-name">1 Month</span></div> 14626 <div class="snb-pdp__plan-right"><span class="snb-pdp__plan-price" aria-hidden="true">$39.99/mo</span> 14627 <span class="visually-hidden">$39.99 per month</span> 14628 </div> 14629 </div><div class="snb-pdp__promo" data-snb-promo><div class="snb-pdp__promo-image"> 14630 <img 14631 src="//bokksu.com/cdn/shop/files/ChatGPT-2511_Xmas_Wrapping_3.png?v=1778486027&width=128" 14632 loading="lazy" 14633 alt="gifts with purchase" 14634 width="64" 14635 height="64" 14636 > 14637 </div><div class="snb-pdp__promo-text"> 14638 <p class="snb-pdp__promo-title">gifts with purchase</p><p class="snb-pdp__promo-desc">Upgrade to a 3, 6, or 12-month plan to receive exclusive gifts.</p></div></div></div></div><div class="snb-pdp__addons" data-snb-addons><div 14639 class="snb-pdp__addon" 14640 data-snb-addon 14641 14642 ><label class="snb-pdp__addon-hit"> 14643 <input 14644 type="checkbox" 14645 class="visually-hidden" 14646 data-snb-addon-input 14647 data-variant-id="50541659979862" 14648 data-price-cents="1000" 14649 data-addon-title="Artisan Coffee Pairing" 14650 aria-label="Add Artisan Coffee Pairing for $10.00, one-time add-on" 14651 14652 > 14653 </label><span class="snb-pdp__addon-image" aria-hidden="true"> 14654 <img 14655 src="//bokksu.com/cdn/shop/files/SNB26108399-edit.jpg?v=1790675934&width=144" 14656 loading="lazy" 14657 alt="" 14658 width="72" 14659 height="72" 14660 > 14661 </span><span class="snb-pdp__addon-eyebrow"><b>HAND-PICKED FOR YOUR SNACKS</b></span><span class="snb-pdp__addon-title"> 14662 <button 14663 type="button" 14664 class="snb-pdp__addon-info" 14665 data-snb-addon-info="snb-addon-modal-addon_C7MpMU" 14666 aria-haspopup="dialog" 14667 aria-label="More about Artisan Coffee Pairing" 14668 > 14669 <svg viewBox="0 0 20 20" aria-hidden="true" stroke-width="1.5" stroke-linecap="round"> 14670 <circle cx="10" cy="10" r="8.25"/> 14671 <path d="M10 9v5"/> 14672 <circle cx="10" cy="6.25" r="0.4" fill="currentColor"/> 14673 </svg> 14674 </button> 14675 <span>Artisan Coffee Pairing</span> 14676 </span><span class="snb-pdp__addon-desc"><i>Ships with your first box · </i> <button type="button" class="snb-pdp__addon-learn" data-snb-addon-info="snb-addon-modal-addon_C7MpMU" aria-haspopup="dialog"><i>Learn more</i></button></span><span class="snb-pdp__addon-price" aria-hidden="true"> 14677 +$10.00 14678<span class="snb-pdp__addon-price-note">one-time add-on</span></span> 14679 <span class="snb-pdp__addon-check" aria-hidden="true"> 14680 <svg viewBox="0 0 12 12" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 6.5L4.5 9L10 3"/></svg> 14681 </span> 14682 </div><template data-snb-addon-modal="snb-addon-modal-addon_C7MpMU"> 14683 <div class="snb-pdp-modal" role="dialog" aria-modal="true" aria-labelledby="snb-addon-modal-addon_C7MpMU-title"> 14684 <div class="snb-pdp-modal__backdrop" data-snb-modal-close></div> 14685 <div class="snb-pdp-modal__box"> 14686 <button type="button" class="snb-pdp-modal__close" data-snb-modal-close aria-label="Close"> 14687 <svg viewBox="0 0 20 20" aria-hidden="true" stroke-width="1.5" stroke-linecap="round"><path d="M15 5L5 15M5 5l10 10"/></svg> 14688 </button> 14689 <div class="snb-pdp-modal__media"><div class="snb-pdp-modal__slide snb-pdp-modal__slide--active" data-snb-modal-slide="0"> 14690 <img src="//bokksu.com/cdn/shop/files/SNB26108399-edit.jpg?v=1790675934&width=1200" alt="Artisan Coffee Pairing" loading="lazy" width="1200" height="1200"> 14691 </div><div class="snb-pdp-modal__slide" data-snb-modal-slide="1"> 14692 <img src="//bokksu.com/cdn/shop/files/SNB26108413_db9f5199-6d51-4eba-8f0c-b72dbdc2253b.jpg?v=1790581651&width=1200" alt="Artisan Coffee Pairing" loading="lazy" width="1200" height="1200"> 14693 </div><div class="snb-pdp-modal__slide" data-snb-modal-slide="2"> 14694 <img src="//bokksu.com/cdn/shop/files/SNB26108396-edit.jpg?v=1790675980&width=1200" alt="Artisan Coffee Pairing" loading="lazy" width="1200" height="1200"> 14695 </div><div class="snb-pdp-modal__slide" data-snb-modal-slide="3"> 14696 <img src="//bokksu.com/cdn/shop/files/SNB26108411_5defec55-b362-4bbd-8121-6b5dcce13d5e.jpg?v=1790581650&width=1200" alt="Artisan Coffee Pairing" loading="lazy" width="1200" height="1200"> 14697 </div><div class="snb-pdp-modal__thumbs" role="tablist" aria-label="Product images"><button type="button" class="snb-pdp-modal__thumb snb-pdp-modal__thumb--active" role="tab" aria-selected="true" data-snb-modal-thumb="0" aria-label="Image 1"> 14698 <img src="//bokksu.com/cdn/shop/files/SNB26108399-edit.jpg?v=1790675934&width=200" alt="" loading="lazy" width="96" height="96"> 14699 </button><button type="button" class="snb-pdp-modal__thumb" role="tab" aria-selected="false" data-snb-modal-thumb="1" aria-label="Image 2"> 14700 <img src="//bokksu.com/cdn/shop/files/SNB26108413_db9f5199-6d51-4eba-8f0c-b72dbdc2253b.jpg?v=1790581651&width=200" alt="" loading="lazy" width="96" height="96"> 14701 </button><button type="button" class="snb-pdp-modal__thumb" role="tab" aria-selected="false" data-snb-modal-thumb="2" aria-label="Image 3"> 14702 <img src="//bokksu.com/cdn/shop/files/SNB26108396-edit.jpg?v=1790675980&width=200" alt="" loading="lazy" width="96" height="96"> 14703 </button><button type="button" class="snb-pdp-modal__thumb" role="tab" aria-selected="false" data-snb-modal-thumb="3" aria-label="Image 4"> 14704 <img src="//bokksu.com/cdn/shop/files/SNB26108411_5defec55-b362-4bbd-8121-6b5dcce13d5e.jpg?v=1790581650&width=200" alt="" loading="lazy" width="96" height="96"> 14705 </button></div></div> 14706 <div class="snb-pdp-modal__content"><p class="snb-pdp-modal__eyebrow"><b>HAND-PICKED FOR YOUR SNACKS</b></p><h2 class="snb-pdp-modal__title" id="snb-addon-modal-addon_C7MpMU-title">Artisan Coffee Pairing</h2><div class="snb-pdp-modal__desc"><p><span style="color: rgb(0, 0, 0);">Bring a little Japanese coffee culture to your Bokksu Snack Box.</span></p> 14707<p><span style="color: rgb(0, 0, 0);">Our Artisan Coffee Pairing brings you three single-serve pour-overs of Calm Orange, a specialty coffee from Japanese roaster Lambda Coffee Club. Each one comes in an origami-like pour-over format designed to unfold right over your mug. There's no grinder or coffee machine needed. All you need is hot water, a cup, and a moment of peace with a delicious Japanese coffee.</span></p> 14708<p><span style="color: rgb(0, 0, 0);">The roaster and flavor are named up front, so you know exactly what you're brewing.</span></p> 14709<p><span style="color: rgb(0, 0, 0);"><strong>What's Included</strong></span></p> 14710<ul> 14711<li style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">3 single-serve pour-overs of Calm Orange (the same coffee in each
14711)</span></li> 14712<li style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">Fold-out pour-over format</span></li> 14713<li style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">Roaster and flavor notes</span></li> 14714<li style="color: rgb(0, 0, 0);"> 14715<span style="color: rgb(0, 0, 0);">Packed inside your Snack Box, so everything arrives together</span><br> 14716</li> 14717</ul> 14718<p><span style="color: rgb(0, 0, 0);"><strong>Why Add Coffee?</strong></span></p> 14719<p><span style="color: rgb(0, 0, 0);">We wanted to bring a new ritual to your Bokksu Snack Box. Turn your next delivery into a small coffee break or a slower start to your morning, with something new to brew, taste, and discover.</span></p> 14720<p><span style="color: rgb(0, 0, 0);"><strong>Japanese Coffee, Prepared with Japanese Simplicity</strong></span></p> 14721<p><span style="color: rgb(0, 0, 0);">The single-serve pour-over unfolds directly over your mug. All you need is hot water and a cup, with no special equipment required.</span></p> 14722<p><span style="color: rgb(0, 0, 0);"><strong>Know What You're Drinking</strong></span></p> 14723<p><span style="color: rgb(0, 0, 0);">Like all our curations, we tell you the story behind each cup: who roasted it, what's in the blend, and how it tastes.</span></p> 14724<p><span style="color: rgb(0, 0, 0);"><strong>Calm Orange</strong> <em>A Moment of Calm in Every Cup</em></span></p> 14725<p><span style="color: rgb(0, 0, 0);">Bright, orange-like aromas meet delicate chamomile notes and a smooth, chocolatey richness. This medium-dark roast blends beans from Peru and Tanzania for a cup that's bright, smooth, and well balanced. Rich and satisfying, yet pleasantly fresh, Calm Orange is the kind of coffee you'll find yourself reaching for again and again. It's a comforting blend made to bring a little calm to your everyday afternoon.</span></p> 14726<ul> 14727<li style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">Flavor Notes: Orange / Chamomile / Chocolate</span></li> 14728<li style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">Origin: Peru / Tanzania</span></li> 14729<li style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">Roast: Medium Dark</span></li> 14730<li style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">Roaster: Lambda Coffee Club, Japan</span></li> 14731<li style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">Format: Single-serve pour-over bag, 3 per pack</span></li> 14732</ul> 14733<p><span style="color: rgb(0, 0, 0);"><strong>How to Brew</strong></span></p> 14734<ol> 14735<li data-list="ordered" style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">Tear open the pack and unfold the pour-over.</span></li> 14736<li data-list="ordered" style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">Hook it over the rim of your mug.</span></li> 14737<li data-list="ordered" style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">Slowly pour hot water over the grounds, following the guide on the pack.</span></li> 14738<li data-list="ordered" style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">Lift it out and enjoy.</span></li> 14739</ol> 14740<p><span style="color: rgb(0, 0, 0);"><strong>How It Works</strong></span></p> 14741<ul> 14742<li style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">This is a one-time add-on, not a subscription. You'll only receive it if you add it.</span></li> 14743<li style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">New subscribers: add it at checkout and it arrives in your first box.</span></li> 14744<li style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">Current subscribers: add it from your account and it ships in your next box.</span></li> 14745<li style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">Limited release, available while supplies last.</span></li> 14746</ul> 14747<p><span style="color: rgb(0, 0, 0);"><strong>Add Coffee to Your <a href="https://bokksu.com/products/classic-bokksu" rel="noopener noreferrer" style="color: rgb(0, 0, 0);" target="_blank">Bokksu Snack Box.</a></strong></span></p></div></div> 14748 </div> 14749 </div> 14750 </template></div><div class="snb-pdp__checkout"> 14751 <div class="snb-pdp__pricing"> 14752 <div class="snb-pdp__pricing-left">
14753 <span class="snb-pdp__pricing-label">Total:</span> 14754 <span class="snb-pdp__pricing-save" data-snb-pricing-save> 14755 Save $36 14756 </span> 14757 </div> 14758 <div class="snb-pdp__pricing-right"> 14759 <div class="snb-pdp__pricing-row"> 14760 <span class="snb-pdp__price" data-snb-total-price> 14761 $203.94 14762 </span> 14763 <span class="snb-pdp__compare-price" data-snb-compare-price> 14764 $239.94 14765 </span> 14766 </div> 14767 <span class="snb-pdp__billing-note" data-snb-billing-note> 14768 Billed every 6 months, cancel anytime. 14769 </span> 14770 </div> 14771 </div> 14772 14773 <div class="snb-pdp__form"> 14774 <button 14775 type="button" 14776 class="btn btn-custom btn-orange-bg snb-pdp__cta" 14777 data-snb-add-to-cart 14778 aria-busy="false" 14779 14780 > 14781 Select this Plan 14782 </button> 14783 <div class="visually-hidden" data-snb-status aria-live="polite" aria-atomic="true"></div> 14784 </div> 14785 </div><hr class="snb-pdp__divider"> 14786<span class="snb-pdp__disclaimer">Total plus shipping fee calculated at checkout. All prices in USD </span><div class="snb-pdp__usps"><div class="snb-pdp__usp" ><div class="snb-pdp__usp-icon"> 14787 <img 14788 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_ab9fda4723b448e6854df90186c75da0.png?v=1773117736&width=50" 14789 loading="lazy" 14790 alt="" 14791 width="25" 14792 height="25" 14793 > 14794 </div><span class="snb-pdp__usp-text">20+ Japan-exclusive snacks</span> 14795 </div><div class="snb-pdp__usp" ><div class="snb-pdp__usp-icon"> 14796 <img 14797 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_fe8ec12a8ae547f39c71e48cd2191849.png?v=1773117801&width=50" 14798 loading="lazy" 14799 alt="" 14800 width="25" 14801 height="25" 14802 > 14803 </div><span class="snb-pdp__usp-text">20 to 24-page Culture Guide</span> 14804 </div><div class="snb-pdp__usp" ><div class="snb-pdp__usp-icon"> 14805 <img 14806 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_b30ec418f2d3472bb3ad400b0d6b69ad.png?v=1773117735&width=50" 14807 loading="lazy" 14808 alt="" 14809 width="25" 14810 height="25" 14811 > 14812 </div><span class="snb-pdp__usp-text">New themed curation every month</span> 14813 </div><div class="snb-pdp__usp" ><div class="snb-pdp__usp-icon"> 14814 <img 14815 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_d4b28eded79a47828bae28b497f49244.png?v=1773117736&width=50" 14816 loading="lazy" 14817 alt="" 14818 width="25" 14819 height="25" 14820 > 14821 </div><span class="snb-pdp__usp-text">Support Japanese family businesses</span> 14822 </div><div class="snb-pdp__usp" ><div class="snb-pdp__usp-icon"> 14823 <img 14824 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_38de99aead68404aa5c8fc91b1d74d8d.png?v=1773117736&width=50" 14825 loading="lazy" 14826 alt="" 14827 width="25" 14828 height="25" 14829 > 14830 </div><span class="snb-pdp__usp-text">Great balance of sweet & savory flavors</span> 14831 </div><div class="snb-pdp__usp" ><div class="snb-pdp__usp-icon"> 14832 <img 14833 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_d4b28eded79a47828bae28b497f49244_1.png?v=1773117736&width=50" 14834 loading="lazy" 14835 alt="" 14836 width="25" 14837 height="25" 14838 > 14839 </div><span class="snb-pdp__usp-text">Limited-Time Bonus: Special Gifts added to your new Subscription (3M/6M/12M)</span> 14840 </div></div><div class="snb-pdp__description"><h2 class="snb-pdp__description-heading">Experience Japan From Home</h2><div class="snb-pdp__description-text"><p>Bokksu delivers to your door the experience of tasting authentic Japanese snacks, candies, and teas sourced directly from centuries-old family makers. Every box you purchase supports these family-run business in Japan and helps keep their traditions alive.</p><p>Details:</p><ul><li><strong>All new subscribers</strong>, will receive our Seasons of Japan box.</li><li>The box includes <strong>20â22 Japanese snacks, sweets, and a tea</strong>, expertly curated in celebration of Japan's four seasons. Youâll also find a <strong>24-page Culture Guide </strong>detailing each productâs origin, flavor notes, and common allergens.</li><li>New 3-, 6-, and 12-month subscribers will receive Grilled Hokkaido Corn: Soy sauce flavor (2 pc) and CACAOCAT Chocolate Dark (2 pc).</li><li>Current 1-month subscribers may upgrade their plan and current 3-, 6-, and annual subscribers may extend their plan to receive free exclusive gifts by contacting <a href="mailto:[email protected]">[email protected]</a>.</li></ul></div></div></div> 14841</section> 14842
14843<script> 14844 (function() { 14845 var section = document.querySelector('[data-section-id="template--17749318303830__snb_subs_panel_3rfYyF"]') 14846 if (!section) return 14847 14848 function initSection() { 14849 var plans = section.querySelectorAll('[data-snb-plan]') 14850 var totalPrice = section.querySelector('[data-snb-total-price]') 14851 var comparePrice = section.querySelector('[data-snb-compare-price]') 14852 var pricingSave = section.querySelector('[data-snb-pricing-save]') 14853 var billingNote = section.querySelector('[data-snb-billing-note]') 14854 var addToCartBtn = section.querySelector('[data-snb-add-to-cart]') 14855 var statusRegion = section.querySelector('[data-snb-status]') 14856 var activePromoWrap = section.querySelector('[data-snb-active-promo]') 14857 var activePromoText = section.querySelector('[data-snb-active-promo-text]') 14858 var activePromoCopy = section.querySelector('[data-snb-active-promo-copy]') 14859 var activePromoCodeText = section.querySelector('[data-snb-active-promo-code-text]') 14860 var thumbs = section.querySelectorAll('[data-snb-thumb]') 14861 var mainImage = section.querySelector('[data-snb-main-image]') 14862 var thumbNextBtn = section.querySelector('[data-snb-thumb-next]') 14863 var thumbScroller = section.querySelector('[data-snb-thumbs]') 14864 14865 // Lazy load fade-in 14866 function handleImageLoad(img) { 14867 if (img.complete && img.naturalWidth > 0) { 14868 img.classList.add('snb-pdp--loaded') 14869 } else { 14870 img.addEventListener('load', function() { 14871 img.classList.add('snb-pdp--loaded') 14872 }) 14873 } 14874 } 14875 14876 section.querySelectorAll('.snb-pdp__carousel-slide img, .snb-pdp__main-image img').forEach(handleImageLoad) 14877 14878 // Track active plan variant + selling plan 14879 var activePlan = { 14880 variantId: '', 14881 sellingPlanId: '' 14882 } 14883 14884 function setActivePlan(planEl) { 14885 activePlan.variantId = planEl.getAttribute('data-variant-id') || '' 14886 activePlan.sellingPlanId = planEl.getAttribute('data-selling-plan-id') || '' 14887 } 14888 14889 // SHO-325: add-on pairings ride along with the selected plan 14890 var addonInputs = section.querySelectorAll('[data-snb-addon-input]') 14891 var planPriceText = totalPrice ? totalPrice.textContent.trim() : '' 14892 14893 function checkedAddons() { 14894 var out = [] 14895 addonInputs.forEach(function(input) { 14896 var id = parseInt(input.getAttribute('data-variant-id'), 10) 14897 if (input.checked && id) out.push(input) 14898 }) 14899 return out 14900 } 14901 14902 function renderTotal() { 14903 if (!totalPrice || !planPriceText) return 14904 var extraCents = 0 14905 checkedAddons().forEach(function(input) { 14906 extraCents += parseInt(input.getAttribute('data-price-cents'), 10) || 0 14907 }) 14908 if (!extraCents) { 14909 totalPrice.textContent = planPriceText 14910 return 14911 } 14912 var base = parseFloat(planPriceText.replace(/[^0-9.]/g, '')) 14913 if (isNaN(base)) return 14914 var prefix = (planPriceText.match(/^[^0-9]*/) || [''])[0] 14915 totalPrice.textContent = prefix + (base + extraCents / 100).toFixed(2) 14916 } 14917 14918 addonInputs.forEach(function(input) { 14919 input.addEventListener('change', function() { 14920 var card = input.closest('[data-snb-addon]') 14921 if (card) card.classList.toggle('snb-pdp__addon--checked', input.checked) 14922 renderTotal() 14923 var title = input.getAttribute('data-addon-title') || 'Add-on' 14924 announceStatus(input.checked ? title + ' added to your order' : title + ' removed from your order') 14925 }) 14926 }) 14927 14928 renderTotal() 14929 14930 // SHO-325: add-on details modal (template cloned to <body> so section stacking can't clip it) 14931 var modalHost = null 14932 var openModal = null 14933 var modalTrigger = null 14934 14935 function trapFocus(e, modal) { 14936 var focusable = modal.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])') 14937 if (!focusable.length) return 14938 var first = focusable[0] 14939 var last = focusable[focusable.length - 1] 14940 if (e.shiftKey && document.activeElement === first) { 14941 e.preventDefault() 14942 last.focus() 14943 } else if (!e.shiftKey && document.activeElement === last) { 14944 e.preventDefault() 14945 first.focus() 14946 } 14947 } 14948 14949 function closeAddonModal() { 14950 if (!openModal) return 14951 var modal = openModal 14952 openModal = null 14953 modal.classList.remove('snb-pdp-modal--open') 14954 document.body.style.overflow = '' 14955 setTimeout(function() { 14956 if (modal.parentNode) modal.parentNode.removeChild(modal) 14957 }, 250) 14958 if (modalTrigger) modalTrigger.focus() 14959 modalTrigger = null 14960 } 14961 14962 function showModalSlide(modal, index) { 14963 modal.querySelectorAll('[data-snb-modal-slide]').forEach(function(slide) { 14964 slide.classList.toggle('snb-pdp-modal__slide--active', slide.getAttribute('data-snb-modal-slide') === String(index)) 14965 }) 14966 modal.querySelectorAll('[data-snb-modal-thumb]').forEach(function(thumb) { 14967 var active = thumb.getAttribute('data-snb-modal-thumb') === String(index) 14968 thumb.classList.toggle('snb-pdp-modal__thumb--active', active) 14969 thumb.setAttribute('aria-selected', active ? 'true' : 'false') 14970 }) 14971 } 14972 14973 function openAddonModal(id, trigger) { 14974 var template = section.querySelector('template[data-snb-addon-modal="' + id + '"]') 14975 if (!template) return 14976 closeAddonModal() 14977 if (!modalHost) { 14978 modalHost = document.createElement('div') 14979 modalHost.setAttribute('data-snb-modal-host', '') 14980 document.body.appendChild(modalHost) 14981 } 14982 modalHost.innerHTML = '' 14983 modalHost.appendChild(template.content.cloneNode(true)) 14984 var modal = modalHost.firstElementChild 14985 if (!modal) return 14986 openModal = modal 14987 modalTrigger = trigger 14988 document.body.style.overflow = 'hidden' 14989 14990 modal.addEventListener('click', function(e) { 14991 if (e.target.closest('[data-snb-modal-close]')) { 14992 closeAddonModal() 14993 return 14994 } 14995 var thumb = e.target.closest('[data-snb-modal-thumb]') 14996 if (thumb) showModalSlide(modal, thumb.getAttribute('data-snb-modal-thumb')) 14997 }) 14998 modal.addEventListener('keydown', function(e) { 14999 if (e.key === 'Escape') { 15000 e.preventDefault() 15001 closeAddonModal() 15002 } else if (e.key === 'Tab') { 15003 trapFocus(e, modal) 15004 } 15005 }) 15006 15007 requestAnimationFrame(function() { 15008 modal.classList.add('snb-pdp-modal--open') 15009 var closeBtn = modal.querySelector('.snb-pdp-modal__close') 15010 if (closeBtn) closeBtn.focus() 15011 }) 15012 } 15013 15014 section.addEventListener('click', function(e) { 15015 var btn = e.target.closest('[data-snb-addon-info]') 15016 if (!btn) return 15017 e.preventDefault() 15018 openAddonModal(btn.getAttribute('data-snb-addon-info'), btn) 15019 }) 15020 15021 function selectPlan(plan) { 15022 plans.forEach(function(p) { 15023 p.classList.remove('snb-pdp__plan--active') 15024 p.setAttribute('aria-checked', 'false') 15025 p.setAttribute('tabindex', '-1') 15026 /* Reset to base label (no promo) for unselected plans */ 15027 var baseLabel = p.getAttribute('data-base-label') 15028 if (baseLabel) p.setAttribute('aria-label', baseLabel) 15029 }) 15030 plan.classList.add('snb-pdp__plan--active') 15031 plan.setAttribute('aria-checked', 'true') 15032 plan.setAttribute('tabindex', '0') 15033 /* Add promo to aria-label only for the selected plan */ 15034 var baseLabel = plan.getAttribute('data-base-label') || '' 15035 var promoLabel = plan.getAttribute('data-promo-label') || '' 15036 plan.setAttribute('aria-label', promoLabel ? baseLabel + ', ' + promoLabel : baseLabel) 15037 plan.focus()
15038 setActivePlan(plan) 15039 15040 var price = plan.getAttribute('data-price') 15041 var compare = plan.getAttribute('data-compare-price') 15042 var save = plan.getAttribute('data-save-text') 15043 var note = plan.getAttribute('data-billing-note') 15044 15045 if (totalPrice && price) { 15046 planPriceText = price 15047 renderTotal() 15048 } 15049 if (comparePrice) { 15050 comparePrice.textContent = compare || '' 15051 comparePrice.style.display = compare ? '' : 'none' 15052 } 15053 if (pricingSave) { 15054 pricingSave.textContent = save || '' 15055 pricingSave.style.display = save ? '' : 'none' 15056 } 15057 if (billingNote && note) billingNote.textContent = note 15058 15059 /* Update accessible promo section outside radiogroup */ 15060 var promo = plan.querySelector('[data-snb-promo]') 15061 if (promo && activePromoWrap) { 15062 var promoTitle = promo.querySelector('.snb-pdp__promo-title') 15063 var promoDesc = promo.querySelector('.snb-pdp__promo-desc') 15064 var promoCodeBtn = plan.querySelector('[data-snb-copy-code]') 15065 var promoMsg = '' 15066 if (promoTitle) promoMsg += promoTitle.textContent 15067 if (promoDesc) promoMsg += '. ' + promoDesc.textContent 15068 if (activePromoText) activePromoText.textContent = promoMsg 15069 activePromoWrap.style.display = '' 15070 if (promoCodeBtn && activePromoCopy) { 15071 var code = promoCodeBtn.getAttribute('data-snb-copy-code') 15072 activePromoCopy.setAttribute('aria-label', 'Copy discount code ' + code) 15073 activePromoCopy.setAttribute('data-snb-copy-code', code) 15074 if (activePromoCodeText) activePromoCodeText.textContent = code 15075 activePromoCopy.style.display = '' 15076 } else if (activePromoCopy) { 15077 activePromoCopy.style.display = 'none' 15078 } 15079 } else if (activePromoWrap) { 15080 activePromoWrap.style.display = 'none' 15081 } 15082 } 15083 15084 // Init from first active plan â add promo to its label 15085 var firstActive = section.querySelector('.snb-pdp__plan--active') 15086 if (firstActive) { 15087 setActivePlan(firstActive) 15088 var baseLabel = firstActive.getAttribute('data-base-label') || '' 15089 var promoLabel = firstActive.getAttribute('data-promo-label') || '' 15090 if (promoLabel) firstActive.setAttribute('aria-label', baseLabel + ', ' + promoLabel) 15091 /* Also populate the accessible promo area */ 15092 var promo = firstActive.querySelector('[data-snb-promo]') 15093 if (promo && activePromoWrap) { 15094 var pt = promo.querySelector('.snb-pdp__promo-title') 15095 var pd = promo.querySelector('.snb-pdp__promo-desc') 15096 var pc = firstActive.querySelector('[data-snb-copy-code]') 15097 if (pt && activePromoText) activePromoText.textContent = pt.textContent + (pd ? '. ' + pd.textContent : '') 15098 activePromoWrap.style.display = '' 15099 if (pc && activePromoCopy) { 15100 var code = pc.getAttribute('data-snb-copy-code') 15101 activePromoCopy.setAttribute('aria-label', 'Copy discount code ' + code) 15102 activePromoCopy.setAttribute('data-snb-copy-code', code) 15103 if (activePromoCodeText) activePromoCodeText.textContent = code 15104 activePromoCopy.style.display = '' 15105 } 15106 } 15107 } 15108 15109 // Plan selection â click 15110 plans.forEach(function(plan) { 15111 plan.addEventListener('click', function() { 15112 selectPlan(plan) 15113 }) 15114 }) 15115 15116 // Plan selection â keyboard (arrow keys + space/enter for radiogroup) 15117 var plansContainer = section.querySelector('[data-snb-plans]') 15118 if (plansContainer) { 15119 plansContainer.addEventListener('keydown', function(e) { 15120 var planArray = Array.prototype.slice.call(plans) 15121 var currentIndex = planArray.indexOf(document.activeElement) 15122 if (currentIndex === -1) return 15123 15124 var nextIndex = -1 15125 if (e.key === 'ArrowDown' || e.key === 'ArrowRight') { 15126 e.preventDefault() 15127 nextIndex = (currentIndex + 1) % planArray.length 15128 } else if (e.key === 'ArrowUp' || e.key === 'ArrowLeft') { 15129 e.preventDefault() 15130 nextIndex = (currentIndex - 1 + planArray.length) % planArray.length 15131 } else if (e.key === ' ' || e.key === 'Enter') { 15132 e.preventDefault() 15133 selectPlan(planArray[currentIndex]) 15134 return 15135 } 15136 15137 if (nextIndex !== -1) { 15138 selectPlan(planArray[nextIndex]) 15139 } 15140 }) 15141 } 15142 15143 // Announce status to screen readers 15144 function announceStatus(message) { 15145 if (statusRegion) statusRegion.textContent = message 15146 } 15147 15148 // AJAX Add to Cart 15149 if (addToCartBtn) { 15150 addToCartBtn.addEventListener('click', function() { 15151 if (addToCartBtn.disabled) return 15152 if (!activePlan.variantId) return 15153 15154 var originalText = addToCartBtn.textContent 15155 addToCartBtn.disabled = true 15156 addToCartBtn.setAttribute('aria-busy', 'true') 15157 addToCartBtn.textContent = 'Adding...' 15158 announceStatus('Adding item to cart') 15159 15160 var body = { 15161 items: [{ 15162 id: parseInt(activePlan.variantId, 10), 15163 quantity: 1 15164 }] 15165 } 15166 15167 if (activePlan.sellingPlanId) { 15168 body.items[0].selling_plan = parseInt(activePlan.sellingPlanId, 10) 15169 } 15170 15171 // SHO-325: add-ons only ever enter the cart in the same request as the plan
15172 checkedAddons().forEach(function(input) { 15173 body.items.push({ 15174 id: parseInt(input.getAttribute('data-variant-id'), 10), 15175 quantity: 1 15176 }) 15177 }) 15178 15179 fetch('/cart/add.js', { 15180 method: 'POST', 15181 body: JSON.stringify(body), 15182 credentials: 'same-origin', 15183 headers: { 15184 'Content-Type': 'application/json' 15185 } 15186 }) 15187 .then(function(response) { 15188 return response.json() 15189 }) 15190 .then(function(data) { 15191 if (data.status && data.status === 422) { 15192 var errMsg = data.description || 'Error adding to cart' 15193 addToCartBtn.textContent = errMsg 15194 announceStatus(errMsg) 15195 addToCartBtn.setAttribute('aria-busy', 'false') 15196 setTimeout(function() { 15197 addToCartBtn.textContent = originalText 15198 addToCartBtn.disabled = false 15199 }, 3000) 15200 return 15201 } 15202 15203 addToCartBtn.textContent = 'Added!' 15204 addToCartBtn.setAttribute('aria-busy', 'false') 15205 announceStatus(body.items.length > 1 ? 'Items added to cart' : 'Item added to cart') 15206 15207 // Dispatch theme event to open cart drawer 15208 document.dispatchEvent( 15209 new CustomEvent('ajaxProduct:added', { 15210 detail: { product: data, addToCartBtn: addToCartBtn } 15211 }) 15212 ) 15213 15214 setTimeout(function() { 15215 addToCartBtn.textContent = originalText 15216 addToCartBtn.disabled = false 15217 }, 2000) 15218 }) 15219 .catch(function() { 15220 addToCartBtn.textContent = 'Error - try again' 15221 addToCartBtn.setAttribute('aria-busy', 'false') 15222 announceStatus('Error adding to cart, please try again') 15223 setTimeout(function() { 15224 addToCartBtn.textContent = originalText 15225 addToCartBtn.disabled = false 15226 }, 3000) 15227 }) 15228 }) 15229 } 15230 15231 // Mobile carousel with dots 15232 var carousel = section.querySelector('[data-snb-carousel]') 15233 var dots = section.querySelectorAll('[data-snb-dot]') 15234 var scrollTimer = null 15235 15236 if (carousel && dots.length > 0) { 15237 carousel.addEventListener('scroll', function() { 15238 if (scrollTimer) clearTimeout(scrollTimer) 15239 scrollTimer = setTimeout(function() { 15240 var slideWidth = carousel.firstElementChild 15241 ? carousel.firstElementChild.offsetWidth 15242 : 1 15243 var activeIndex = Math.round(carousel.scrollLeft / slideWidth) 15244 dots.forEach(function(d, i) { 15245 d.classList.toggle('snb-pdp__dot--active', i === activeIndex) 15246 d.setAttribute('aria-selected', i === activeIndex ? 'true' : 'false') 15247 }) 15248 }, 50) 15249 }) 15250 15251 dots.forEach(function(dot) { 15252 dot.addEventListener('click', function() { 15253 var index = parseInt(dot.getAttribute('data-snb-dot'), 10) 15254 var slideWidth = carousel.firstElementChild 15255 ? carousel.firstElementChild.offsetWidth 15256 : 0 15257 carousel.scrollTo({ left: slideWidth * index, behavior: 'smooth' }) 15258 }) 15259 }) 15260 } 15261 15262 // Desktop thumbnail gallery 15263 var useCustomImages = true 15264 thumbs.forEach(function(thumb) { 15265 thumb.addEventListener('click', function() { 15266 var index = parseInt(thumb.getAttribute('data-index'), 10) 15267 thumbs.forEach(function(t) { t.classList.remove('snb-pdp__thumb--active') }) 15268 thumb.classList.add('snb-pdp__thumb--active') 15269 15270 if (mainImage) { 15271 var img = mainImage.querySelector('img') 15272 if (img) { 15273 img.classList.remove('snb-pdp--loaded') 15274 if (useCustomImages && thumb.hasAttribute('data-img-src')) { 15275 img.src = thumb.getAttribute('data-img-src') 15276 img.alt = thumb.getAttribute('data-img-alt') || '' 15277 } else { 15278 var media = [{"alt":null,"id":26901055242326,"position":1,"preview_image":{"aspect_ratio":1.0,"height":1200,"width":1200,"src":"\/\/bokksu.com\/cdn\/shop\/files\/BokksuSnackBox_OnTan_de3cef1c-71c2-4173-bcaf-1c138eabfe3f.jpg?v=1751004849"},"aspect_ratio":1.0,"height":1200,"media_type":"image","src":"\/\/bokksu.com\/cdn\/shop\/files\/BokksuSnackBox_OnTan_de3cef1c-71c2-4173-bcaf-1c138eabfe3f.jpg?v=1751004849","width":1200},{"alt":null,"id":26901092171862,"position":2,"preview_image":{"aspect_ratio":1.0,"height":1200,"width":1200,"src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Box_Hero_012_Square_9cd71666-ba05-4ff8-a592-0e8536cc2a66.jpg?v=1751004848"},"aspect_ratio":1.0,"height":1200,"media_type":"image","src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Box_Hero_012_Square_9cd71666-ba05-4ff8-a592-0e8536cc2a66.jpg?v=1751004848","width":1200},{"alt":null,"id":26901086928982,"position":3,"preview_image":{"aspect_ratio":1.0,"height":1200,"width":1200,"src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Box_Hero_001_Square_320abcd0-7c60-4c01-a47e-22a2bd6da15a.jpg?v=1751004852"},"aspect_ratio":1.0,"height":1200,"media_type":"image","src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Box_Hero_001_Square_320abcd0-7c60-4c01-a47e-22a2bd6da15a.jpg?v=1751004852","
15278width":1200},{"alt":null,"id":26901110521942,"position":4,"preview_image":{"aspect_ratio":1.0,"height":1200,"width":1200,"src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Lifestyle_4_Square_59beb8fe-9490-45c4-8e12-bb1b742918e1.jpg?v=1751004854"},"aspect_ratio":1.0,"height":1200,"media_type":"image","src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Lifestyle_4_Square_59beb8fe-9490-45c4-8e12-bb1b742918e1.jpg?v=1751004854","width":1200},{"alt":null,"id":26901104525398,"position":5,"preview_image":{"aspect_ratio":1.0,"height":1200,"width":1200,"src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Lifestyle_17_Square2_9a30e8d3-90ad-45a6-ba36-d855bd57a60a.jpg?v=1751004854"},"aspect_ratio":1.0,"height":1200,"media_type":"image","src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Lifestyle_17_Square2_9a30e8d3-90ad-45a6-ba36-d855bd57a60a.jpg?v=1751004854","width":1200},{"alt":null,"id":26901099937878,"position":6,"preview_image":{"aspect_ratio":1.0,"height":1200,"width":1200,"src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Lifestyle_11_Square_7d407cce-baa0-4b07-b1d5-8607fdab8362.jpg?v=1751004848"},"aspect_ratio":1.0,"height":1200,"media_type":"image","src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Lifestyle_11_Square_7d407cce-baa0-4b07-b1d5-8607fdab8362.jpg?v=1751004848","width":1200},{"alt":null,"id":27174902792278,"position":7,"preview_image":{"aspect_ratio":1.0,"height":2000,"width":2000,"src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Box_ThreeMonths_Open_ba2a3f98-4554-41f4-9699-6f971f118639.jpg?v=1756847760"},"aspect_ratio":1.0,"height":2000,"media_type":"image","src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Box_ThreeMonths_Open_ba2a3f98-4554-41f4-9699-6f971f118639.jpg?v=1756847760","width":2000},{"alt":null,"id":27174911410262,"position":8,"preview_image":{"aspect_ratio":1.0,"height":2000,"width":2000,"src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Box_SixMonths_Open_f5e4092a-73c0-4e5b-a764-202b4d27c620.jpg?v=1756847803"},"aspect_ratio":1.0,"height":2000,"media_type":"image","src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Box_SixMonths_Open_f5e4092a-73c0-4e5b-a764-202b4d27c620.jpg?v=1756847803","width":2000},{"alt":null,"id":27174917406806,"position":9,"preview_image":{"aspect_ratio":1.001,"height":1999,"width":2000,"src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Box_TwelveMonths_Open_5166095d-91ed-4e70-bd6f-6f4bc17655b4.jpg?v=1756847832"},"aspect_ratio":1.001,"height":1999,"media_type":"image","src":"\/\/bokksu.com\/cdn\/shop\/files\/Bokksu_SnackBox_Box_TwelveMonths_Open_5166095d-91ed-4e70-bd6f-6f4bc17655b4.jpg?v=1756847832","width":2000}] 15279 if (media[index]) { 15280 var src = media[index].src || media[index].preview_image.src 15281 img.src = src.replace(/(\.[a-z]+)\?/, '$1?width=1200&') 15282 img.alt = media[index].alt || 'Bokksu Snack Box Subscription' 15283 } 15284 } 15285 handleImageLoad(img) 15286 } 15287 } 15288 }) 15289 }) 15290 15291 // Thumb scroll 15292 if (thumbNextBtn && thumbScroller) { 15293 thumbNextBtn.addEventListener('click', function() { 15294 thumbScroller.scrollBy({ top: 95, behavior: 'smooth' }) 15295 }) 15296 } 15297 15298 // Copy promo code (event delegation for dynamic buttons) 15299 section.addEventListener('click', function(e) { 15300 var btn = e.target.closest('[data-snb-copy-code]') 15301 if (!btn) return 15302 e.stopPropagation() 15303 var code = btn.getAttribute('data-snb-copy-code') 15304 if (navigator.clipboard) { 15305 navigator.clipboard.writeText(code) 15306 var span = btn.querySelector('span') 15307 if (span) { 15308 var original = span.textContent 15309 span.textContent = 'Copied!' 15310 announceStatus('Discount code ' + code + ' copied to clipboard') 15311 setTimeout(function() { span.textContent = original }, 2000) 15312 } 15313 } 15314 }) 15315 } // end initSection 15316 15317 initSection() 15318 })() 15319</script>
15319 15320</div> 15321 </main><!-- BEGIN sections: footer-group --> 15322<div id="shopify-section-sections--17749310603350__footer" class="shopify-section shopify-section-group-footer-group"> 15323 15324 15325<div class="footer__section footer__section--border"> 15326 <div class="page-width"> 15327 <div class="footer__newsletter"><div class="footer__subscribe rte rte--nomargin footer-subscribe-text"> 15328 <p>Sign up & get $5 off your first order + exclusive deals!</p> 15329 </div></div> 15330 </div> 15331 </div> 15332<footer class="site-footer bokksu-footer" data-section-id="sections--17749310603350__footer" data-section-type="footer-section" role="contentinfo"> 15333 <div id="FooterMenus" class="footer__section footer__section--menus"> 15334 <div class="page-width"> 15335 <div class="footer__blocks"> 15336 15337 <div 15338 15339 class="footer__block block__contact" 15340 data-type="contact" 15341 > 15342 <div class="footer__mobile-section-without-border SocialAndLogo"> 15343 <div class="footer__blocks--mobile SocialAndLogo"> 15344 <div class="footer__block--mobile "> 15345 <div class="footer__title"> 15346 <img 15347 width="60px" 15348 src="https://cdn.shopify.com/s/files/1/0715/7101/3829/files/BokksuBrand_Logo_LanternMark_Outline_White.png?v=1749809784?format=webp&width=100" 15349 alt="Bokksu Premium Snack Boxes" 15350 > 15351 </div> 15352 15353 <ul class="footer__menu footer__menu--underline"></ul> 15354 </div><div class="footer__block--mobile footer-block-mobile-social"> 15355 15356 <ul class="no-bullets social-icons footer__social" aria-label="Social media links"><li> 15357 <a target="_blank" rel="noopener" href="https://instagram.com/bokksu" title="Bokksu Snack Box on Instagram"> 15358 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-instagram" viewBox="0 0 32 32"><title>instagram</title><path fill="#444" d="M16 3.094c4.206 0 4.7.019 6.363.094 1.538.069 2.369.325 2.925.544.738.287 1.262.625 1.813 1.175s.894 1.075 1.175 1.813c.212.556.475 1.387.544 2.925.075 1.662.094 2.156.094 6.363s-.019 4.7-.094 6.363c-.069 1.538-.325 2.369-.544 2.925-.288.738-.625 1.262-1.175 1.813s-1.075.894-1.813 1.175c-.556.212-1.387.475-2.925.544-1.663.075-2.156.094-6.363.094s-4.7-.019-6.363-.094c-1.537-.069-2.369-.325-2.925-.544-.737-.288-1.263-.625-1.813-1.175s-.894-1.075-1.175-1.813c-.212-.556-.475-1.387-.544-2.925-.075-1.663-.094-2.156-.094-6.363s.019-4.7.094-6.363c.069-1.537.325-2.369.544-2.925.287-.737.625-1.263 1.175-1.813s1.075-.894 1.813-1.175c.556-.212 1.388-.475 2.925-.544 1.662-.081 2.156-.094 6.363-.094zm0-2.838c-4.275 0-4.813.019-6.494.094-1.675.075-2.819.344-3.819.731-1.037.4-1.913.944-2.788 1.819S1.486 4.656 1.08 5.688c-.387 1-.656 2.144-.731 3.825-.075 1.675-.094 2.213-.094 6.488s.019 4.813.094 6.494c.075 1.675.344 2.819.731 3.825.4 1.038.944 1.913 1.819 2.788s1.756 1.413 2.788 1.819c1 .387 2.144.656 3.825.731s2.213.094 6.494.094 4.813-.019 6.494-.094c1.675-.075 2.819-.344 3.825-.731 1.038-.4 1.913-.944 2.788-1.819s1.413-1.756 1.819-2.788c.387-1 .656-2.144.731-3.825s.094-2.212.094-6.494-.019-4.813-.094-6.494c-.075-1.675-.344-2.819-.731-3.825-.4-1.038-.944-1.913-1.819-2.788s-1.756-1.413-2.788-1.819c-1-.387-2.144-.656-3.825-.731C20.812.275 20.275.256 16 .256z"/><path fill="#444" d="M16 7.912a8.088 8.088 0 0 0 0 16.175c4.463 0 8.087-3.625 8.087-8.088s-3.625-8.088-8.088-8.088zm0 13.338a5.25 5.25 0 1 1 0-10.5 5.25 5.25 0 1 1 0 10.5zM26.294 7.594a1.887 1.887 0 1 1-3.774.002 1.887 1.887 0 0 1 3.774-.003z"/></svg> 15359 <span class="icon__fallback-text">Instagram</span> 15360 </a> 15361 </li><li> 15362 <a target="_blank" rel="noopener" href="https://www.facebook.com/bokksu" title="Bokksu Snack Box on Facebook"> 15363 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-facebook" viewBox="0 0 14222 14222"><path d="M14222 7112c0 3549.352-2600.418 6491.344-6000 7024.72V9168h1657l315-2056H8222V5778c0-562 275-1111 1159-1111h897V2917s-814-139-1592-139c-1624 0-2686 984-2686 2767v1567H4194v2056h1806v4968.72C2600.418 13603.344 0 10661.352 0 7112 0 3184.703 3183.703 1 7111 1s7111 3183.703 7111 7111Zm-8222 7025c362 57 733 86 1111 86-377.945 0-749.003-29.485-1111-86.28Zm2222 0v-.28a7107.458 7107.458 0 0 1-167.717 24.267A7407.158 7407.158 0 0 0 8222 14137Zm-167.717 23.987C7745.664 14201.89 7430.797 14223 7111 14223c319.843 0 634.675-21.479 943.283-62.013Z"/></svg>
15364 <span class="icon__fallback-text">Facebook</span> 15365 </a> 15366 </li><li> 15367 <a target="_blank" rel="noopener" href="https://www.youtube.com/@Bokksu" title="Bokksu Snack Box on YouTube"> 15368 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-youtube" viewBox="0 0 21 20"><path fill="#444" d="M-.196 15.803q0 1.23.812 2.092t1.977.861h14.946q1.165 0 1.977-.861t.812-2.092V3.909q0-1.23-.82-2.116T17.539.907H2.593q-1.148 0-1.969.886t-.82 2.116v11.894zm7.465-2.149V6.058q0-.115.066-.18.049-.016.082-.016l.082.016 7.153 3.806q.066.066.066.164 0 .066-.066.131l-7.153 3.806q-.033.033-.066.033-.066 0-.098-.033-.066-.066-.066-.131z"/></svg> 15369 <span class="icon__fallback-text">YouTube</span> 15370 </a> 15371 </li><li> 15372 <a target="_blank" rel="noopener" href="https://www.tiktok.com/@bokksu" title="Bokksu Snack Box on TikTok"> 15373 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-tiktok" viewBox="0 0 2859 3333"><path d="M2081 0c55 473 319 755 778 785v532c-266 26-499-61-770-225v995c0 1264-1378 1659-1932 753-356-583-138-1606 1004-1647v561c-87 14-180 36-265 65-254 86-398 247-358 531 77 544 1075 705 992-358V1h551z"/></svg> 15374 <span class="icon__fallback-text">TikTok</span> 15375 </a> 15376 </li></ul> 15377 15378 15379 15380 </div></div> 15381 </div> 15382 <style> 15383 .SocialAndLogo { 15384 display: flex; 15385 flex-direction: column; 15386 justify-content: space-between; 15387 height: 100%; 15388 } 15389 </style> 15390 15391 15392</div> 15393 15394 <div 15395 15396 class="footer__block block__menu" 15397 data-type="menu" 15398 > 15399<nav aria-label="Brands"> 15400 <div class="footer__title hero__top-subtitle footer-margin-bottom" id="footer-menu-title-footer-0"> 15401 Brands 15402 </div> 15403 15404 <ul role="list" class="footer__menu"><li> 15405 <a href="https://bokksuboutique.com">Bokksu Boutique</a> 15406 </li><li> 15407 <a href="https://bokksumarket.com">Bokksu Market</a> 15408 </li></ul> 15409 </nav> 15410<style> 15411 .footer__menu .pieeye-links { 15412 display: inline-block; 15413 padding: 4px 0; 15414 max-width: 170px; 15415 } 15416 15417 .footer__menu .pieeye-links:hover { 15418 text-decoration: underline; 15419 } 15420 15421 .site-footer .pieeye-links { 15422 color: #ffffff; 15423 color: var(--colorFooterText); 15424 } 15425</style> 15426</div> 15427 15428 <div 15429 15430 class="footer__block block__menu" 15431 data-type="menu" 15432 > 15433<nav aria-label="INFORMATION"> 15434 <div class="footer__title hero__top-subtitle footer-margin-bottom" id="footer-menu-title-8e428145-e5f4-4b31-8787-fb5edbc644fc"> 15435 INFORMATION 15436 </div> 15437 15438 <ul role="list" class="footer__menu"><li> 15439 <a href="/pages/about">About Us</a> 15440 </li><li> 15441 <a href="/pages/bokksu-offers-discounts-coupons">Today's Offers</a> 15442 </li><li> 15443 <a href="/pages/rewards">Refer a Friend</a> 15444 </li><li> 15445 <a href="https://bokksuboutique.com/pages/corporate-gifts">Corporate Gifts</a> 15446 </li><li> 15447 <a href="/pages/rewards">Rewards</a> 15448 </li><li> 15449 <a href="/blogs/news">Blog</a> 15450 </li><li> 15451 <a href="/pages/careers">Careers</a> 15452 </li></ul> 15453 </nav> 15454<style> 15455 .footer__menu .pieeye-links { 15456 display: inline-block; 15457 padding: 4px 0; 15458 max-width: 170px; 15459 } 15460 15461 .footer__menu .pieeye-links:hover { 15462 text-decoration: underline; 15463 } 15464 15465 .site-footer .pieeye-links { 15466 color: #ffffff; 15467 color: var(--colorFooterText); 15468 } 15469</style> 15470</div> 15471 15472 <div 15473 15474 class="footer__block block__menu" 15475 data-type="menu" 15476 > 15477<nav aria-label="Support"> 15478 <div class="footer__title hero__top-subtitle footer-margin-bottom" id="footer-menu-title-05398a65-6873-4bd2-8114-894b394283c4"> 15479 Support 15480 </div> 15481 15482 <ul role="list" class="footer__menu"><li> 15483 <a href="/pages/contact-us">Contact Us</a> 15484 </li><li> 15485 <a href="/pages/community">Community</a> 15486 </li><li> 15487 <a href="/pages/privacy-policy-with-ccpa">Privacy Policy</a> 15488 </li><li> 15489 <a href="/pages/terms-conditions">Terms</a> 15490 </li><li> 15491 <a href="/pages/faq">FAQ</a> 15492 </li><li> 15493 <a href="/pages/accessibility-statement">Accessibility Statement</a> 15494 </li></ul> 15495 </nav><div class="footer__block--mobile footer-block-mobile-support-social"> 15496 15497 <ul class="no-bullets social-icons footer__social" aria-label="Social media links"><li> 15498 <a target="_blank" rel="noopener" href="https://instagram.com/bokksu" title="Bokksu Snack Box on Instagram"> 15499 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-instagram" viewBox="0 0 32 32"><title>instagram</title><path fill="#444" d="M16 3.094c4.206 0 4.7.019 6.363.094 1.538.069 2.369.325 2.925.544.738.287 1.262.625 1.813 1.175s.894 1.075 1.175 1.813c.212.556.475 1.387.544 2.925.075 1.662.094 2.156.094 6.363s-.019 4.7-.094 6.363c-.069 1.538-.325 2.369-.544 2.925-.288.738-.625 1.262-1.175 1.813s-1.075.894-1.813 1.175c-.556.212-1.387.475-2.925.544-1.663.075-2.156.094-6.363.094s-4.7-.019-6.363-.094c-1.537-.069-2.369-.325-2.925-.544-.737-.288-1.263-.625-1.813-1.175s-.894-1.075-1.175-1.813c-.212-.556-.475-1.387-.544-2.925-.075-1.663-.094-2.156-.094-6.363s.019-4.7.094-6.363c.069-1.537.325-2.369.544-2.925.287-.737.625-1.263 1.175-1.813s1.075-.894 1.813-1.175c.556-.212 1.388-.475 2.925-.544 1.662-.081 2.156-.094 6.363-.094zm0-2.838c-4.275 0-4.813.019-6.494.094-1.675.075-2.819.344-3.819.731-1.037.4-1.913.944-2.788 1.819S1.486 4.656 1.08 5.688c-.387 1-.656 2.144-.731 3.825-.
15499075 1.675-.094 2.213-.094 6.488s.019 4.813.094 6.494c.075 1.675.344 2.819.731 3.825.4 1.038.944 1.913 1.819 2.788s1.756 1.413 2.788 1.819c1 .387 2.144.656 3.825.731s2.213.094 6.494.094 4.813-.019 6.494-.094c1.675-.075 2.819-.344 3.825-.731 1.038-.4 1.913-.944 2.788-1.819s1.413-1.756 1.819-2.788c.387-1 .656-2.144.731-3.825s.094-2.212.094-6.494-.019-4.813-.094-6.494c-.075-1.675-.344-2.819-.731-3.825-.4-1.038-.944-1.913-1.819-2.788s-1.756-1.413-2.788-1.819c-1-.387-2.144-.656-3.825-.731C20.812.275 20.275.256 16 .256z"/><path fill="#444" d="M16 7.912a8.088 8.088 0 0 0 0 16.175c4.463 0 8.087-3.625 8.087-8.088s-3.625-8.088-8.088-8.088zm0 13.338a5.25 5.25 0 1 1 0-10.5 5.25 5.25 0 1 1 0 10.5zM26.294 7.594a1.887 1.887 0 1 1-3.774.002 1.887 1.887 0 0 1 3.774-.003z"/></svg> 15500 <span class="icon__fallback-text">Instagram</span> 15501 </a> 15502 </li><li> 15503 <a target="_blank" rel="noopener" href="https://www.facebook.com/bokksu" title="Bokksu Snack Box on Facebook"> 15504 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-facebook" viewBox="0 0 14222 14222"><path d="M14222 7112c0 3549.352-2600.418 6491.344-6000 7024.72V9168h1657l315-2056H8222V5778c0-562 275-1111 1159-1111h897V2917s-814-139-1592-139c-1624 0-2686 984-2686 2767v1567H4194v2056h1806v4968.72C2600.418 13603.344 0 10661.352 0 7112 0 3184.703 3183.703 1 7111 1s7111 3183.703 7111 7111Zm-8222 7025c362 57 733 86 1111 86-377.945 0-749.003-29.485-1111-86.28Zm2222 0v-.28a7107.458 7107.458 0 0 1-167.717 24.267A7407.158 7407.158 0 0 0 8222 14137Zm-167.717 23.987C7745.664 14201.89 7430.797 14223 7111 14223c319.843 0 634.675-21.479 943.283-62.013Z"/></svg> 15505 <span class="icon__fallback-text">Facebook</span> 15506 </a> 15507 </li><li> 15508 <a target="_blank" rel="noopener" href="https://www.youtube.com/@Bokksu" title="Bokksu Snack Box on YouTube"> 15509 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-youtube" viewBox="0 0 21 20"><path fill="#444" d="M-.196 15.803q0 1.23.812 2.092t1.977.861h14.946q1.165 0 1.977-.861t.812-2.092V3.909q0-1.23-.82-2.116T17.539.907H2.593q-1.148 0-1.969.886t-.82 2.116v11.894zm7.465-2.149V6.058q0-.115.066-.18.049-.016.082-.016l.082.016 7.153 3.806q.066.066.066.164 0 .066-.066.131l-7.153 3.806q-.033.033-.066.033-.066 0-.098-.033-.066-.066-.066-.131z"/></svg> 15510 <span class="icon__fallback-text">YouTube</span> 15511 </a> 15512 </li><li> 15513 <a target="_blank" rel="noopener" href="https://www.tiktok.com/@bokksu" title="Bokksu Snack Box on TikTok"> 15514 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-tiktok" viewBox="0 0 2859 3333"><path d="M2081 0c55 473 319 755 778 785v532c-266 26-499-61-770-225v995c0 1264-1378 1659-1932 753-356-583-138-1606 1004-1647v561c-87 14-180 36-265 65-254 86-398 247-358 531 77 544 1075 705 992-358V1h551z"/></svg> 15515 <span class="icon__fallback-text">TikTok</span> 15516 </a> 15517 </li></ul> 15518 15519 15520 15521 </div> 15522<style> 15523 .footer__menu .pieeye-links { 15524 display: inline-block; 15525 padding: 4px 0; 15526 max-width: 170px; 15527 } 15528 15529 .footer__menu .pieeye-links:hover { 15530 text-decoration: underline; 15531 } 15532 15533 .site-footer .pieeye-links { 15534 color: #ffffff; 15535 color: var(--colorFooterText); 15536 } 15537</style> 15538</div> 15539 15540 <div 15541 15542 class="footer__block block__payment" 15543 data-type="payment" 15544 > 15545 15546<div class="footer__mobile-section PayementAndKlaviyo"> 15547 <!-- 15548 <div> 15549 <div class="footer__title KlaviyoMailinTitle">join our mailing list</div> 15550 <div class="KlaviyoMailinSubTitle">sign up to get exclusive offers,the latest snack trends, and more!</div> 15551 <div class="klaviyo-form-JZT2sH"></div> 15552 </div> 15553 --> 15554 <div class="footer__blocks--mobile"> 15555 <div class="main_contact_footer"></div><div class="footer__block--mobile"> 15556 <div class="footer__title accept-payments"> 15557 We accept 15558 </div> 15559 <ul class="inline-list payment-icons"><li class="icon--payment"> 15560 <svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-amazon"><title id="pi-amazon">Amazon</title><path d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000" fill-rule="nonzero" opacity=".07"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32" fill="#FFF" fill-rule="nonzero"/><path d="M25.26 16.23c-1.697 1.48-4.157 2.27-6.275 2.27-2.97 0-5.644-1.3-7.666-3.463-.16-.17-.018-.402.173-.27 2.183 1.504 4.882 2.408 7.67 2.408 1.88 0 3.95-.46 5.85-1.416.288-.145.53.222.248.47v.001zm.706-.957c-.216-.328-1.434-.155-1.98-.078-.167.024-.193-.148-.043-.27.97-.81 2.562-.576 2.748-.305.187.272-.047 2.16-.96 3.063-.14.138-.272.064-.21-.12.205-.604.664-1.96.446-2.29h-.001z" fill="#F90" fill-rule="nonzero"/><path d="M21.814 15.291c-.574-.498-.676-.73-.993-1.205-.947 1.012-1.618 1.315-2.85 1.315-1.453 0-2.587-.938-2.587-2.818 0-1.467.762-2.467 1.844-2.955.94-.433 2.25-.51 3.25-.628v-.235c0-.43.033-.94-.208-1.31-.212-.333-.616-.47-.97-.47-.66 0-1.25.353-1.392 1.085-.
1556003.163-.144.323-.3.33l-1.677-.187c-.14-.033-.296-.153-.257-.38.386-2.125 2.223-2.766 3.867-2.766.84 0 1.94.234 2.604.9.842.82.762 1.918.762 3.11v2.818c0 .847.335 1.22.65 1.676.113.164.138.36-.003.482-.353.308-.98.88-1.326 1.2a.367.367 0 0 1-.414.038zm-1.659-2.533c.34-.626.323-1.214.323-1.918v-.392c-1.25 0-2.57.28-2.57 1.82 0 .782.386 1.31 1.05 1.31.487 0 .922-.312 1.197-.82z" fill="#221F1F"/></svg> 15561 15562 </li><li class="icon--payment"> 15563 <svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-american_express"><title id="pi-american_express">American Express</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#0071CE" style="fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;"/><path d="M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z" stroke="black" stroke-opacity="0.07" style="stroke:black;stroke-opacity:0.07;"/><path d="M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z" fill="white" style="fill:white;fill-opacity:1;"/></svg> 15564 15565 </li><li class="icon--payment"> 15566 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" role="img" x="0" y="0" width="38" height="24" viewBox="0 0 165.521 105.965" xml:space="preserve" aria-labelledby="pi-apple_pay"><title id="pi-apple_pay">Apple Pay</title><path fill="#000" d="M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z" /><path fill="#FFF" d="M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875" /><g><g><path fill="#000" d="M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303
155661.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858" /><path fill="#000" d="M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048" /></g><g><path fill="#000" d="M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z" /><path fill="#000" d="M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z" /><path fill="#000" d="M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z" /></g></g></svg> 15567 15568 </li><li class="icon--payment"> 15569 <svg viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img" width="38" height="24" aria-labelledby="pi-diners_club"><title id="pi-diners_club">Diners Club</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"/><path d="M12 12v3.7c0 .3-.2.3-.5.2-1.9-.8-3-3.3-2.3-5.4.4-1.1 1.2-2 2.3-2.4.4-.2.5-.1.5.2V12zm2 0V8.3c0-.3 0-.3.3-.2 2.1.8 3.2 3.3 2.4 5.4-.4 1.1-1.2 2-2.3 2.4-.4.2-.4.1-.4-.2V12zm7.2-7H13c3.8 0 6.8 3.1 6.8 7s-3 7-6.8 7h8.2c3.8 0 6.8-3.1 6.8-7s-3-7-6.8-7z" fill="#3086C8"/></svg> 15570 </li><li class="icon--payment"> 15571 <svg viewBox="0 0 38 24" width="38" height="24" role="img" aria-labelledby="pi-discover" fill="none" xmlns="http://www.w3.org/2000/svg"><title id="pi-discover">Discover</title><path fill="#000" opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z" fill="#fff"/><path d="M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z" fill="#231F20"/><path d="M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z" fill="url(#pi-paint0_linear)"/><path opacity=".65" d="M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z" fill="url(#pi-paint1_linear)"/><path d="M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z" fill="#231F20"/><path d="M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z" fill="#231F20"/><path d="M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z" fill="#F48120"/><defs><linearGradient id="pi-paint0_linear" x1="21.657" y1="12.275" x2="19.632" y2="9.104" gradientUnits="userSpaceOnUse"><stop stop-color="#F89F20"/><stop offset=".25" stop-color="#F79A20"/><stop offset=".533" stop-color="#F68D20"/><stop offset=".62" stop-color="#F58720"/><stop offset=".723" stop-color="#F48120"/><stop offset="1" stop-color="#F37521"/></linearGradient><linearGradient id="pi-paint1_linear" x1="21.338" y1="12.232" x2="18.378" y2="6.446" gradientUnits="userSpaceOnUse"><stop stop-color="#F58720"/><stop offset=".359" stop-color="#E16F27"/><stop offset=".703" stop-color="#D4602C"/><stop offset=".982" stop-color="#D05B2E"/></linearGradient></defs></svg> 15572 </li><li class="icon--payment"> 15573 <svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-google_pay"><title id="pi-google_pay">Google Pay</title><path d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000" opacity=".07"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32" fill="#FFF"/><path d="M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.
1557306zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z" fill="#5F6368"/><path d="M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z" fill="#4285F4"/><path d="M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z" fill="#34A853"/><path d="M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z" fill="#FBBC04"/><path d="M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z" fill="#EA4335"/></svg> 15574 15575 </li><li class="icon--payment"> 15576 <svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-master"><title id="pi-master">Mastercard</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#1C1C1C" style="fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;"/><path d="M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z" fill="#232323" style="fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;"/><path d="M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z" fill="#EB001B" style="fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;"/><path d="M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z" fill="#F79E1B" style="fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;"/><path d="M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z" fill="#FF5F00" style="fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;"/></svg> 15577 15578 </li><li class="icon--payment"> 15579 <svg viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" width="38" height="24" role="img" aria-labelledby="pi-paypal"><title id="pi-paypal">PayPal</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"/><path fill="#003087" d="M23.9 8.3c.2-1 0-1.7-.6-2.3-.6-.7-1.7-1-3.1-1h-4.1c-.3 0-.5.2-.6.5L14 15.6c0 .2.1.4.3.4H17l.4-3.4 1.8-2.2 4.7-2.1z"/><path fill="#3086C8" d="M23.9 8.3l-.2.2c-.5 2.8-2.2 3.8-4.6 3.8H18c-.3 0-.5.2-.6.5l-.6 3.9-.2 1c0 .2.1.4.3.4H19c.3 0 .5-.2.5-.4v-.1l.4-2.4v-.1c0-.2.3-.4.5-.4h.3c2.1 0 3.7-.8 4.1-3.2.2-1 .1-1.8-.4-2.4-.1-.5-.3-.7-.5-.8z"/><path fill="#012169" d="M23.3 8.1c-.1-.1-.2-.1-.3-.1-.1 0-.2 0-.3-.1-.3-.1-.7-.1-1.1-.1h-3c-.1 0-.2
155790-.2.1-.2.1-.3.2-.3.4l-.7 4.4v.1c0-.3.3-.5.6-.5h1.3c2.5 0 4.1-1 4.6-3.8v-.2c-.1-.1-.3-.2-.5-.2h-.1z"/></svg> 15580 </li><li class="icon--payment"> 15581 <svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-shopify_pay"><title id="pi-shopify_pay">Shop Pay</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000"/><path d="M35.889 0C37.05 0 38 .982 38 2.182v19.636c0 1.2-.95 2.182-2.111 2.182H2.11C.95 24 0 23.018 0 21.818V2.182C0 .982.95 0 2.111 0H35.89z" fill="#5A31F4"/><path d="M9.35 11.368c-1.017-.223-1.47-.31-1.47-.705 0-.372.306-.558.92-.558.54 0 .934.238 1.225.704a.079.079 0 00.104.03l1.146-.584a.082.082 0 00.032-.114c-.475-.831-1.353-1.286-2.51-1.286-1.52 0-2.464.755-2.464 1.956 0 1.275 1.15 1.597 2.17 1.82 1.02.222 1.474.31 1.474.705 0 .396-.332.582-.993.582-.612 0-1.065-.282-1.34-.83a.08.08 0 00-.107-.035l-1.143.57a.083.083 0 00-.036.111c.454.92 1.384 1.437 2.627 1.437 1.583 0 2.539-.742 2.539-1.98s-1.155-1.598-2.173-1.82v-.003zM15.49 8.855c-.65 0-1.224.232-1.636.646a.04.04 0 01-.069-.03v-2.64a.08.08 0 00-.08-.081H12.27a.08.08 0 00-.08.082v8.194a.08.08 0 00.08.082h1.433a.08.08 0 00.081-.082v-3.594c0-.695.528-1.227 1.239-1.227.71 0 1.226.521 1.226 1.227v3.594a.08.08 0 00.081.082h1.433a.08.08 0 00.081-.082v-3.594c0-1.51-.981-2.577-2.355-2.577zM20.753 8.62c-.778 0-1.507.24-2.03.588a.082.082 0 00-.027.109l.632 1.088a.08.08 0 00.11.03 2.5 2.5 0 011.318-.366c1.25 0 2.17.891 2.17 2.068 0 1.003-.736 1.745-1.669 1.745-.76 0-1.288-.446-1.288-1.077 0-.361.152-.657.548-.866a.08.08 0 00.032-.113l-.596-1.018a.08.08 0 00-.098-.035c-.799.299-1.359 1.018-1.359 1.984 0 1.46 1.152 2.55 2.76 2.55 1.877 0 3.227-1.313 3.227-3.195 0-2.018-1.57-3.492-3.73-3.492zM28.675 8.843c-.724 0-1.373.27-1.845.746-.026.027-.069.007-.069-.029v-.572a.08.08 0 00-.08-.082h-1.397a.08.08 0 00-.08.082v8.182a.08.08 0 00.08.081h1.433a.08.08 0 00.081-.081v-2.683c0-.036.043-.054.069-.03a2.6 2.6 0 001.808.7c1.682 0 2.993-1.373 2.993-3.157s-1.313-3.157-2.993-3.157zm-.271 4.929c-.956 0-1.681-.768-1.681-1.783s.723-1.783 1.681-1.783c.958 0 1.68.755 1.68 1.783 0 1.027-.713 1.783-1.681 1.783h.001z" fill="#fff"/></svg> 15582 15583 </li><li class="icon--payment"> 15584 <svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-visa"><title id="pi-visa">Visa</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#142FBD" style="fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;"/><path d="M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z" fill="#1532CB" style="fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;"/><path d="M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778
1558416.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z" fill="white" style="fill:white;fill-opacity:1;"/></svg> 15585 15586 </li></ul> 15587 </div></div> 15588 </div> 15589 15590 <div id="main_popup" aria-hidden="true" inert> 15591 <div class="popup_align"> 15592 <div class="popup_close"> 15593 <img src="//bokksu.com/cdn/shop/t/3/assets/close.svg?v=88995623347698921431751964582" class="img-block" alt="close"> 15594 </div> 15595 <div class="popup_header"> 15596 <img src="//bokksu.com/cdn/shop/t/3/assets/logo.svg?v=117790338284208930901751964576" class="img-block" alt="logo"> 15597 </div> 15598 <div class="popup_about"> 15599 <p class="h3">Text us</p> 15600 <p> 15601 By signing up via text, you agree to receive recurring automated promotional and personalized marketing text 15602 messages (e.g. cart reminders) from Bokksu at the cell number used when signing up. Consent is not a condition 15603 of any purchase. Reply HELP for help and STOP to cancel. Msg frequency varies. Msg & data rates may apply. View 15604 <a href="http://attn.tv/bokksu/terms.html" aria-label="SMS terms and conditions">Terms</a> & 15605 <a href="https://attnl.tv/p/pCu" aria-label="SMS privacy policy">Privacy Policy</a>. 15606 </p> 15607 <p> 15608 Our text for support service is available for the US. We are here to assist with general FAQ and questions, but 15609 for any issues related to your account, cancellation, refunds, orders and account updates, please create a 15610 support ticket at https://bokksu.com/pages/contact-us. 15611 </p> 15612 </div> 15613 <div class="contact_popup"> 15614 <a href="sms:20126?&body=Hello" aria-label="Text HELLO to 20126 for support and offers"> 15615 <p class="h4"> 15616 Text HELLO to 20126 for support <br> 15617 & to get offers via text. 15618 </p> 15619 <div class="contact_img"> 15620 <img src="//bokksu.com/cdn/shop/t/3/assets/phone.svg?v=66969348285319116291751964578" class="img-block" alt="phone"> 15621 </div> 15622 </a> 15623 </div> 15624 </div> 15625 </div> 15626 15627 <div class="overlay_popup_custom"></div> 15628 15629 <style> 15630 .PayementAndKlaviyo { 15631 display: flex; 15632 flex-direction: column; 15633 justify-content: space-between; 15634 height: 100%; 15635 } 15636 .shop-address{ 15637 color: #FFF; 15638font-family: Lato; 15639font-size: 12px; 15640font-style: normal; 15641font-weight: 400; 15642line-height: 125%; 15643 } 15644 </style> 15645 15646 15647</div></div> 15648 </div> 15649 </div> 15650 15651 <div class="footer__section"> 15652 <div class="page-width text-center small--text-left"> 15653 <nav class="footer__base-links" aria-label="Legal and policies"><span> 15654 © 2026 15655Bokksu Inc. 15656</span><a href="https://bokksuboutique.com">Bokksu Boutique</a><a href="https://bokksumarket.com">Bokksu Market</a></nav> 15657 </div> 15658 </div> 15659 </footer> 15660 15661 15662 15663 15664 15665 15666
15666<script type="application/ld+json"> 15667 { 15668 "@context": "https://schema.org", 15669 "@type": "Organization", 15670 "name": "Bokksu", 15671 "legalName" : "Bokksu", 15672 "url": "https://www.bokksu.com/", 15673 "logo": "https://cdn.shopify.com/s/files/1/1083/2612/files/BokksuSnackBox_Logo_Horizontal_Filled_Orange_140x.png?v=1665613822", 15674 "sameAs": [ 15675 "https://www.instagram.com/bokksu/", 15676 "https://www.facebook.com/bokksu", 15677 "https://www.youtube.com/@Bokksu", 15678 "https://www.tiktok.com/@bokksu" 15679 ], 15680 "contactPoint": { 15681 "@type": "ContactPoint", 15682 "contactType": "customer support", 15683 "telephone": "Service Phone Number", // Please fill in the service phone number 15684 "email": "[email protected]" // Please confirm your contact email 15685 }, 15686 "potentialAction": { 15687 "@type": "SearchAction", 15688 "target": "https://www.bokksu.com/search/node?keys={search_term_string}", 15689 "query-input": "required name=search_term_string" 15690 } 15691 } 15692 </script>
15692 15693 15694 15695 15696 <style> 15697 15698 15699@media only screen and (max-width:960px) { 15700.footer-promotions .grid__item { 15701 margin-bottom: 32px 15702} 15703 15704.footer-promotions .grid__item:last-child { 15705 margin-bottom: 0; 15706} 15707} 15708 15709.footer-promotion { 15710width: 100%; 15711text-align: center; 15712padding: 22px; 15713border-radius: var(--roundness); 15714overflow: hidden 15715} 15716 15717@media only screen and (min-width:961px) { 15718 15719.footer-promotion { 15720 padding: 30px 15721} 15722} 15723 15724.footer-promotion .scheme-image { 15725border-radius: calc(var(--roundness) + 2px); 15726} 15727 15728.footer-promotion[class*=color-scheme-]:not(.color-scheme-none) .btn { 15729border: 0; 15730} 15731 15732.footer__grid-image { 15733display: block; 15734text-align: center; 15735margin-bottom: 17px 15736} 15737 15738@media only screen and (min-width:961px) { 15739 15740.footer__grid-image { 15741 margin-bottom: 20px 15742} 15743} 15744 15745.footer__grid-image img { 15746display: block; 15747} 15748 15749.site-footer { 15750font-size: var(--typeBaseSize); 15751background-color: #3f1107 15752; 15753background-color: var(--colorFooter); 15754color: #ffffff 15755; 15756color: var(--colorFooterText) 15757} 15758 15759.site-footer a { 15760color: #ffffff 15761; 15762color: var(--colorFooterText); 15763} 15764 15765.site-footer .faux-select { 15766font-size: calc(var(--typeBaseSize) - 1px); 15767min-width: 120px; 15768} 15769 15770.footer__section { 15771padding: 30px 0; 15772border-top: 1px solid; 15773border-top-color: #e8e8e1 15774; 15775border-top-color: var(--colorBorder); 15776background-color: var(--colorFooter); 15777 15778} 15779 15780.bokksu-store .footer__section { 15781 border-top-color: transparent; 15782} 15783 15784.site-footer .footer__section { 15785border-top-color: #f2eee7 15786; 15787border-top-color: var(--colorFooterBorder) 15788} 15789 15790@media only screen and (min-width:961px) { 15791.footer__section--menus { 15792 padding-top: 50px; 15793} 15794} 15795 15796@media only screen and (max-width:960px) { 15797.footer__mobile-section { 15798 margin-top: 20px; 15799 margin-left: -40px; 15800 margin-left: calc(var(--pageWidthPadding)*-1); 15801 margin-right: -40px; 15802 margin-right: calc(var(--pageWidthPadding)*-1); 15803 padding: 20px var(--pageWidthPadding) 0; 15804 border-top: 1px solid; 15805 border-top-color: #f2eee7 15806 ; 15807 border-top-color: var(--colorFooterBorder); 15808} 15809 15810.footer__mobile-section-without-border { 15811 margin-left: -40px; 15812 margin-left: calc(var(--pageWidthPadding)*-1); 15813 margin-right: -40px; 15814 margin-right: calc(var(--pageWidthPadding)*-1); 15815 padding: 0 35px 53px; 15816} 15817} 15818 15819.footer__title { 15820margin-bottom: 15px; 15821font-weight: 700; 15822font-size: var(--typeBaseSize); 15823} 15824 .bokksu-footer .footer__title img { 15825 width: 60px !important; 15826 height: 100% !important; 15827 } 15828 15829@media only screen and (max-width:960px) { 15830 .footer__block--mobile .accept-payments{ 15831 margin-top: 5px; 15832 } 15833 } 15834 15835@media only screen and (min-width:961px) { 15836 .footer__block--mobile .accept-payments{ 15837 margin-top: -5px; 15838 } 15839 } 15840 15841.footer__subscribe { 15842font-weight: 700; 15843font-size: calc(var(--typeBaseSize) + 2px); 15844color: #fff; 15845} 15846 15847.footer__menu { 15848margin: 0 0 20px; 15849padding: 0; 15850list-style: none 15851} 15852 15853/* Footer Desktop */ 15854@media (min-width: 768px) { 15855 .footer_left { 15856 flex: 40%; 15857 } 15858 /* .footer_right { 15859 flex: 60%; 15860 } */ 15861 .footer__menu a { 15862 display: inline-block; 15863 padding: 4px 0; 15864 max-width: 170px; 15865 } 15866 .footer__block.block__contact { 15867 margin-right: 1.5em; 15868 max-width: 160px !important; 15869 } 15870 .footer__block.block__menu { 15871 15872 max-width: 190px !important; 15873 } 15874} 15875 15876/* Footer Mobile */ 15877@media (max-width: 767px) { 15878 .footer_wrapper { 15879 flex-direction: column; 15880 } 15881 15882 .footer_left, .footer_right { 15883 flex: 100%; 15884 } 15885} 15886 15887@media only screen and (max-width:960px) { 15888 15889.footer__menu { 15890 margin-bottom: 0 15891} 15892} 15893 15894.footer__menu li { 15895margin: 0; 15896} 15897 15898.footer__menu a { 15899display: inline-block; 15900padding: 4px 0; 15901max-width: 170px; 15902} 15903.footer__menu a:hover { 15904text-decoration: underline; 15905 15906} 15907 15908.footer__menu .icon { 15909margin-right: 10px 15910} 15911 15912[dir=rtl] .footer__menu .icon { 15913margin-right: 0; 15914margin-left: 10px 15915} 15916 15917.footer__menu--underline a { 15918text-decoration: underline; 15919text-underline-offset: 2px; 15920} 15921 15922.footer__newsletter { 15923display: flex; 15924justify-content: center; 15925align-items: center; 15926padding: 0 20px 15927} 15928 15929.footer__newsletter > * { 15930padding: 0 20px; 15931} 15932 15933.footer__newsletter .newsletter__input-group { 15934margin-bottom: 0; 15935} 15936 15937@media only screen and (max-width:960px) { 15938 15939.footer__newsletter { 15940 flex-wrap: wrap; 15941 text-align: center; 15942 justify-content: center; 15943 padding: 0; 15944} 15945 15946.footer__newsletter > * { 15947 padding: 0; 15948} 15949 15950.footer__newsletter .newsletter__input-group { 15951 max-width: none 15952} 15953 15954.footer__newsletter .newsletter__input-group .btn { 15955 min-width: auto; 15956} 15957 15958.footer__newsletter form { 15959 width: 100%; 15960 margin: 20px auto 0; 15961} 15962} 15963 15964.footer__blocks { 15965display: flex; 15966flex-wrap: wrap;
15967justify-content: center; 15968} 15969 15970.footer__block { 15971flex: 0 1 25%; 15972} 15973.footer__block.block__contact { 15974 margin-right: 1.5em; 15975 max-width: unset; 15976} 15977 .footer__block.block__menu { 15978 15979 max-width: unset ; 15980} 15981 .footer__block.block__payment { 15982 max-width: 420px !important; 15983} 15984 15985 .footer__base-links{ 15986 display:block !important; 15987 } 15988 .weblayer--box-subscription-sms-email-signup { 15989 display: flex; 15990 justify-content: normal !important; 15991} 15992 .input-group .newsletter-subscription-field { 15993 padding-left: 10px !important; 15994 border-radius: 12px !important; 15995 min-width: 379px !important; 15996 background: #fff !important; 15997 } 15998@media only screen and (max-width:960px) { 15999.footer__blocks--mobile { 16000 display: flex; 16001 flex-wrap: wrap; 16002} 16003 16004.footer__block, 16005.footer__block--mobile { 16006 max-width: none; 16007 flex: 1 1 50%; 16008} 16009 16010.footer__block[data-type=contact], 16011.footer__block[data-type=payment] { 16012 flex: 1 0 100%; 16013} 16014} 16015 16016.footer__social { 16017margin: 0 16018} 16019 16020form + .footer__social { 16021margin-top: 30px 16022} 16023 16024.footer__social li { 16025display: inline-block; 16026margin: 0 15px 15px 0; 16027} 16028 16029.footer__social a { 16030display: block; 16031} 16032 16033.footer__social .icon { 16034width: 21px; 16035height: 21px 16036} 16037 16038.footer__social .icon.icon--wide { 16039width: 40px; 16040} 16041 16042.payment-icons { 16043-webkit-user-select: none; 16044user-select: none; 16045cursor: default; 16046margin-bottom: 20px 16047} 16048 16049@media only screen and (max-width:960px) { 16050 16051.payment-icons { 16052 margin-bottom: 0 16053} 16054} 16055 16056.payment-icons li { 16057cursor: default; 16058margin: 0 8px 4px 0; 16059} 16060 16061.footer__base-links { 16062font-size: 13px 16063} 16064 16065.footer__base-links a, 16066.footer__base-links span { 16067display: inline-block; 16068padding: 2px 20px 2px 0; 16069} 16070 16071.footer__base-links a { 16072text-underline-offset: 2px; 16073} 16074.footer__base-links a:hover { 16075text-decoration: underline; 16076} 16077.errors, 16078.note { 16079border-radius: 0; 16080padding: 6px 12px; 16081margin-bottom: 15px; 16082border: 1px solid transparent; 16083text-align: left 16084} 16085 16086.errors ol, 16087.errors ul, 16088.note ol, 16089.note ul { 16090margin-top: 0; 16091margin-bottom: 0; 16092} 16093 16094.errors li:last-child, 16095.note li:last-child { 16096margin-bottom: 0; 16097} 16098 16099.errors p, 16100.note p { 16101margin-bottom: 0; 16102} 16103 16104.note { 16105border-color: #e8e8e1 16106; 16107border-color: var(--colorBorder); 16108} 16109 16110.errors ul { 16111list-style: disc outside; 16112margin-left: 20px; 16113} 16114 16115.note--success { 16116color: #56ad6a; 16117border-width: 0; 16118/* margin-top:15px; */ 16119margin-bottom: 0; 16120} 16121 16122.note-contact { 16123color: #56ad6a !important; 16124padding: 24px 0 !important; 16125} 16126 16127.note--success a { 16128color: #56ad6a; 16129text-decoration: underline 16130} 16131 16132.note--success a:hover { 16133text-decoration: none; 16134} 16135 16136.errors, 16137.form-error { 16138color: #d02e2e; 16139} 16140.errors li::marker { 16141color: #d02e2e; 16142} 16143 16144.errors a, 16145.form-error a { 16146color: #d02e2e; 16147text-decoration: underline 16148} 16149 16150.errors a:hover, 16151.form-error a:hover { 16152text-decoration: none; 16153} 16154 16155.pagination { 16156margin: 60px 0; 16157text-align: center 16158} 16159 16160.pagination > span { 16161display: inline-block; 16162vertical-align: middle; 16163line-height: 1; 16164} 16165 16166.pagination a { 16167display: inline-block; 16168} 16169 16170.pagination .page.current, 16171.pagination a:not(.btn) { 16172padding: 8px 12px; 16173} 16174 16175.pagination .page.current { 16176opacity: 0.3; 16177} 16178 16179.pagination .btn { 16180transition: transform 0.15s ease-out 16181} 16182 16183.pagination .btn:hover { 16184transform: scale(1.08); 16185} 16186 16187.pagination .btn .icon { 16188width: 13px; 16189height: 13px; 16190} 16191 16192.rte:after { 16193content: ""; 16194display: table; 16195clear: both; 16196} 16197 16198.rte { 16199margin-bottom: 7.5px 16200} 16201 16202@media only screen and (min-width:961px) { 16203 16204.rte { 16205 margin-bottom: 15px 16206} 16207} 16208 16209.rte:last-child { 16210margin-bottom: 0; 16211} 16212 16213.rte + .rte { 16214margin-top: 30px; 16215} 16216 16217.rte ol, 16218.rte p, 16219.rte table, 16220.rte ul { 16221margin-bottom: 15px 16222} 16223 </style> 16224 16225 16226</div> 16227<!-- END sections: footer-group --></div> 16228 </div><div id="VideoModal" class="modal"> 16229 <div class="modal__inner"> 16230 <div class="modal__centered page-width text-center"> 16231 <div class="modal__centered-content"> 16232 <div class="video-wrapper video-wrapper--modal"> 16233 <div id="VideoHolder"></div> 16234 </div> 16235 </div> 16236 </div> 16237 16238 <button type="button" class="btn btn--circle btn--icon modal__close js-modal-close"> 16239 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><path d="m19 17.61 27.12 27.13m0-27.13L19 44.74" style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:2px"/></svg>
16240 <span class="icon__fallback-text">"Close (esc)"</span> 16241 </button> 16242 </div> 16243</div> 16244<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true"> 16245 <div class="pswp__bg"></div> 16246 <div class="pswp__scroll-wrap"> 16247 <div class="pswp__container"> 16248 <div class="pswp__item"></div> 16249 <div class="pswp__item"></div> 16250 <div class="pswp__item"></div> 16251 </div> 16252 16253 <div class="pswp__ui pswp__ui--hidden"> 16254 <button class="btn btn--secondary btn--circle pswp__button pswp__button--arrow--left" title="Previous"> 16255 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-left" viewBox="0 0 284.49 498.98"><path d="M249.49 0a35 35 0 0 1 24.75 59.75L84.49 249.49l189.75 189.74a35.002 35.002 0 1 1-49.5 49.5L10.25 274.24a35 35 0 0 1 0-49.5L224.74 10.25A34.89 34.89 0 0 1 249.49 0z"/></svg> 16256 </button> 16257 16258 <button class="btn btn--secondary btn--circle btn--large pswp__button pswp__button--close" title="Close (esc)"> 16259 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><defs><style>.cls-1{fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:2px}</style></defs><path class="cls-1" d="M19 17.61l27.12 27.13m0-27.13L19 44.74"/></svg> 16260 </button> 16261 16262 <button class="btn btn--secondary btn--circle pswp__button pswp__button--arrow--right" title="Next"> 16263 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-right" viewBox="0 0 284.49 498.98"><path d="M35 498.98a35 35 0 0 1-24.75-59.75l189.74-189.74L10.25 59.75a35.002 35.002 0 0 1 49.5-49.5l214.49 214.49a35 35 0 0 1 0 49.5L59.75 488.73A34.89 34.89 0 0 1 35 498.98z"/></svg> 16264 </button> 16265 </div> 16266 </div> 16267</div> 16268<div id="QuickAddModal" class="modal modal--square quick-add-modal quick-shop-modal-focus" tabindex="0"> 16269 <div class="modal__inner product-temp"> 16270 <div class="modal__centered"> 16271 <div class="modal__centered-content"> 16272 <div id="QuickAddHolder"></div> 16273 </div> 16274 16275 <button type="button" class="btn btn--circle btn--icon modal__close js-modal-close"> 16276 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"> 16277 <path d="m19 17.61 27.12 27.13m0-27.13L19 44.74" style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:2px"/> 16278 </svg> 16279 <span class="icon__fallback-text">"Close (esc)"</span> 16280 </button> 16281 </div> 16282 </div> 16283</div> 16284<tool-tip data-tool-tip=""> 16285 <div class="tool-tip__inner" data-tool-tip-inner> 16286 <button class="tool-tip__close" data-tool-tip-close=""><svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><path d="m19 17.61 27.12 27.13m0-27.13L19 44.74" style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:2px"/></svg></button> 16287 <div data-tool-tip-title>Bokksu | Authentic Japanese Snack & Candy Subscription Box</div> 16288 <div class="tool-tip__content" data-tool-tip-content> 16289 </div> 16290 </div> 16291</tool-tip> 16292<div id="ProductModals"></div> 16293 16294 16295 16296 16297 16298
16298<script> let showFreeGiftSwiper = true </script>
16298 16299 16300 <!-- Free Gift Customizations --> 16301 <span id="free-gift-1-amount" style="display: none;"> 16302 150 16303 </span> 16304 <span id="free-gift-2-amount" style="display: none;"> 16305 16306 </span> 16307 <span id="selected-gift-1-product" style="display: none;"> free-folder-set-free-gift-with-all-boutique-orders-while-supplies-last </span> 16308 <span id="selected-gift-2-product" style="display: none;"> </span> 16309 16310 16311 16312 <span id="selected-gift-1-product-inventory-quantity" style="display: none;"> </span> 16313 16314 16315 16316 16317 <span id="selected-gift-2-product-inventory-quantity" style="display: none;"> </span> 16318 16319 16320 <div style="display: none;"> 16321 16322 16323 16324 <span class="selected_gift_collection_name" style="display: none;"></span> 16325 16326 </div> 16327 16328 16329 <span id="free-gift-certificate-feature-with-4-tiers" style="display: none;"> Off </span> 16330 <span id="selected-free-gift-certificate-product" style="display: none;"> complimentary-bokksu-snack-box-seasons-of-japan-on-orders-above-200 </span> 16331 <span id="free-gift-certificate-tier-1-amount" style="display: none;"> </span> 16332 <span id="free-gift-certificate-tier-2-amount" style="display: none;"> </span> 16333 <span id="free-gift-certificate-tier-3-amount" style="display: none;"> </span> 16334 <span id="free-gift-certificate-tier-4-amount" style="display: none;"> </span> 16335 <span id="free-gift-certificate-message" style="display: none;"> </span> 16336 <span class="gift-products-icons" data-btq-url="//bokksu.com/cdn/shop/t/3/assets/boutique-gift.png?v=11092744576135776981751964577" data-sub-url="//bokksu.com/cdn/shop/t/3/assets/gift-icon-subscription.png?v=128537720170191215231751964575" style="display: none;"></span> 16337 16338 16339 16340
16340<script src="//bokksu.com/cdn/shop/t/3/assets/recently-viewed.js?v=164611006926442500801751964576" defer="defer"></script>
16340 16341
16341<script src="//bokksu.com/cdn/shop/t/3/assets/collection.js?v=61855754316230853941751964575" defer="defer"></script>
16341 16342 16343 16344
16345<script> 16346 var initGorgiasChatPromise = (window.GorgiasChat) ? window.GorgiasChat.init() : new Promise(function (resolve) { window.addEventListener('gorgias-widget-loaded', function () { resolve();})}); 16347 initGorgiasChatPromise.then(async () => { 16348 // SHO-319: privacyPolicyDisclaimer renders HTML; the intro text keys escape it 16349 GorgiasChat.updateTexts({ 16350 "privacyPolicyDisclaimer": "Hi there! By using this chat feature, you consent to Bokksu and its authorized service providers recording and using information about you and your chat session solely on Bokksuâs behalf. Bokksu may use or disclose this information in accordance with its \u003ca href=\"https:\/\/bokksu.com\/pages\/privacy-policy\" target=\"_blank\"\u003ePrivacy Policy\u003c\/a\u003e. If you do not consent to these terms, please do not use this chat feature. Instead, you can contact us by email or phone. By continuing to interact with the chat or submitting information through it, you acknowledge and agree to Bokksuâs \u003ca href=\"https:\/\/bokksu.com\/pages\/privacy-policy\" target=\"_blank\"\u003ePrivacy Policy\u003c\/a\u003e." 16351 }) 16352 GorgiasChat.hidePoweredBy(true) 16353 }) 16354</script>
16354 16355 16356 16357 16358 16359 16360 16361
16361<script id="sg-js-global-vars"> 16362 sgGlobalVars = 16363 {}; 16364 16365 16366 if(sgGlobalVars) { 16367 sgGlobalVars.cart = {"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":"USD","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0}; 16368 sgGlobalVars.currentProduct = null; 16369 sgGlobalVars.isAdmin = `false`; 16370 } 16371 </script>
16371 16372
16372<script> 16373 // Event to run when size optimization is required 16374 const optimizeSize = () => { 16375 // Push the event to the data layer 16376 dataLayer.push({'event': 'optimize.size'}); 16377 } 16378 16379 // Event listener for window resize 16380 window.addEventListener('resize', () => { 16381 if (window.innerWidth <= 960) { 16382 optimizeSize(); 16383 } 16384 }); 16385 16386 // Also check at least once at the start 16387 if (window.innerWidth <= 960) { 16388 optimizeSize(); 16389 } 16390 </script>
16390 16391 16392
16392<script src="//bokksu.com/cdn/shop/t/3/assets/interact.js?v=176245359230577931561751964578" defer="true"></script>
16392 16393 16394 16395 16396 16397 16398
16398<script async src="https://js.adsrvr.org/up_loader.3.0.0.js"></script>
16398 16399
16399<script> 16400 window.ttdConversionEventsLayer = window.ttdConversionEventsLayer || []; 16401 function ttdConversionEvents() { 16402 window.ttdConversionEventsLayer.push(arguments); 16403 } 16404 16405 ttdConversionEvents("init", { 16406 advertiserId: "4aipb3q", 16407 pixelIds: ["fnzha9m"] 16408 }); 16409 16410 ttdConversionEvents("event", { 16411 advertiserId: "4aipb3q", 16412 pixelIds: ["fnzha9m"] 16413 }); 16414 </script>
16414 16415 16416<style> button.onward-opt-out-link#checkout-btn {background: transparent !important;} .sales-point .icon-and-text {margin-top: 20px;} .btn {font-family: "Montserrat", sans-serif !important;} button.collapsible-trigger {color: #000 !important;} .yotpo-head .yotpo-headline {font-family: "Orpheus Pro" !important;} .charge-up {margin-bottom: 0 !important;} .charge-up-widget__wrapper {gap: unset !important; max-width: none !important;} .main-progress-bar,.main-progress-bar-gift,[data-tags~="hidden"]:has(#onward-container) #onward-container {display: none !important;} .corp-select__trigger {border-radius: 8px !important;} .template-product-buy-with-prime #search-icon-id {display: none;} .more-brands ul li:first-child,html.cart-open #chat-button,html.cart-open .Rise__widget,html.cart-open .userway_p5 {display: none;} </style> 16417<div id="shopify-block-AMXlNNXM5SWtGZ0cxR__17151115064775110295" class="shopify-block shopify-app-block"><style data-recharge-theme='{"has_theme_customization": true, "design_mode": false }'> 16418 .recharge-theme { 16419 /* App */ 16420 --recharge-app-background: #FFFFFF; 16421 --recharge-app-container: 1200px; 16422 --recharge-app-vertical-padding: 32px; 16423 16424 /* Brand colors */ 16425 16426--recharge-color-brand: #467C99; 16427 16428 /* Tints */ 16429 --recharge-color-brand-120: #38637a; 16430 --recharge-color-brand-20: #6b96ad; 16431 --recharge-color-brand-40: #90b0c2; 16432 --recharge-color-brand-60: #b5cbd6; 16433 --recharge-color-brand-75: #d1dee6; 16434 --recharge-color-brand-85: #e3ebf0; 16435 16436 /* Neutral */ 16437 --recharge-color-neutral: hsl(201, 35%, 7%); 16438 --recharge-color-neutral-80: hsl(201, 7%, 25%); 16439 --recharge-color-neutral-70: hsl(201, 5%, 35%); 16440 --recharge-color-neutral-40: hsl(201, 3%, 63%); 16441 --recharge-color-neutral-10: hsl(201, 2%, 91%); 16442 16443 16444 /* Links */ 16445 --recharge-button-secondary: #467C99; 16446 --recharge-button-secondary-120: #38637a; 16447 --recharge-button-secondary-60: #90b0c2; 16448 16449 /* Images */ 16450 --recharge-images-ratio: 1; 16451 16452 /* Cards */ 16453 16454 --recharge-cards-background: #F6F4F1; 16455 16456 16457 16458 --recharge-cards-border-color: RGBA(0,0,0,0); 16459 16460 16461 /* Fonts */ 16462 --recharge-typography-scale: 16px; 16463 --recharge-typography-size-1: calc(3 * var(--recharge-typography-scale)); 16464 --recharge-typography-size-2: calc(2.25 * var(--recharge-typography-scale)); 16465 --recharge-typography-size-3: calc(1.625 * var(--recharge-typography-scale)); 16466 --recharge-typography-size-4: calc(1.25 * var(--recharge-typography-scale)); 16467 --recharge-typography-size-5: calc(1 * var(--recharge-typography-scale)); 16468 --recharge-typography-size-6: calc(.875 * var(--recharge-typography-scale)); 16469 16470 /** Text **/ 16471 --recharge-typography-light: #FFFFFF; 16472 --recharge-typography-primary: var(--recharge-color-neutral); 16473 --recharge-typography-secondary: var(--recharge-color-neutral-70); 16474 16475 /* Corners */ 16476 --recharge-corners-radius: 8px; 16477 16478 --recharge-button-border-radius: 8px; 16479 16480 16481 /* Views */ 16482 16483 --recharge-views-background: #FFFFFF; 16484 16485 16486 /* Buttons */ 16487 --recharge-button-font-family: inherit; 16488 --recharge-button-brand: var(--recharge-color-brand); 16489 --recharge-button-color: #FFFFFF; 16490 } 16491</style> 16492 16493</div>
16493<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
16493 16494</body> 16495</html> 16496
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.