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=101017841936864862721776235462"></script>
47 48 <!-- Customer AI --> 49
49<script async="async" src="https://240.1.2.3/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":"4b6c279a-42c4-40d7-97be-5f25e2b7720d-1790269752","pageurl":"bokksu.com\/","u":"853ef973283a","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=132526422010737728721788431937" 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/userway-website-accessibility/blocks/uw-widget-extension/bc2d8a34-1a37-451b-ab1a-271bc4e9daa7 --> 424 425 426 427
428<script type="text/javascript" async="" src="https://cdn.userway.org/widget.js?account=1QY30g7gXs&platfAppInstalledSiteId=3872233&shop=bokksu.com"></script>
428 429 430<!-- END app block --><!-- BEGIN app block: shopify://apps/gorgias-live-chat-helpdesk/blocks/gorgias/a66db725-7b96-4e3f-916e-6c8e6f87aaaa -->
431<script defer data-gorgias-loader-chat src="https://config.gorgias.chat/bundle-loader/shopify/snb-hashii.myshopify.com"></script>
431 432 433
434<script defer data-gorgias-loader-convert src="https://content.9gtb.com/loader.js"></script>
434 435 436
437<script defer data-gorgias-loader-mailto-replace src="https://config.gorgias.help/api/contact-forms/replace-mailto-script.js?shopName=snb-hashii"></script>
437 438 439 440<!-- END app block --><!-- BEGIN app block: shopify://apps/yotpo-product-reviews/blocks/settings/eb7dfd7d-db44-4334-bc49-c893b51b36cf --> 441 442 443
443<script type="text/javascript" src="https://cdn-widgetsrepository.yotpo.com/v1/loader/4Kt06s6nDGIQ5QRkjcLrBcqBySp3M8NS1MLj32az?languageCode=en" async></script>
443 444 445 446 447 448<!-- END app block --><!-- BEGIN app block: shopify://apps/maestra/blocks/maestra-embed/426c4c19-e366-44a7-a7e5-89fb1b642f46 -->
449<script> 450(function () { 451 window.maestra = window.maestra || function () { 452 window.maestra.queue.push(arguments); 453 }; 454 window.maestra.queue = window.maestra.queue || []; 455 window.maestra('create', { endpointId: "bokksu.snb" }); 456 457 458 window.maestra('personalization.viewHomepage'); 459 460 461 var started = false; 462 function startTracker() { 463 if (started) return; 464 started = true; 465 466 if (typeof window.subscribe === 'function') { 467 window.subscribe("cart-update", function (event) { 468 if (event && event.cartData && typeof Shopify !== 'undefined' 469 && Shopify.analytics && typeof Shopify.analytics.publish === 'function') { 470 var priceCents = typeof event.cartData.final_price === 'number' 471 ? event.cartData.final_price 472 : (typeof event.cartData.price === 'number' ? event.cartData.price : undefined); 473 Shopify.analytics.publish("maestra_add_to_cart_internal", { 474 cartData: event.cartData, 475 productVariantId: String(event.cartData.variant_id || event.cartData.id || ''), 476 pricePerItem: priceCents === undefined ? undefined : priceCents / 100, 477 source: event.source || "unknown" 478 }); 479 } 480 }); 481 } 482 483 var s = document.createElement('script'); 484 s.src = "https://api.maestra.io/scripts/v1/tracker.js"; 485 s.async = true; 486 document.head.appendChild(s); 487 } 488 489 function analyticsAllowed() { 490 var privacy = window.Shopify && window.Shopify.customerPrivacy; 491 return !!privacy && typeof privacy.analyticsProcessingAllowed === 'function' 492 && privacy.analyticsProcessingAllowed(); 493 } 494 495 document.addEventListener('visitorConsentCollected', function (ev) { 496 if (ev.detail && ev.detail.analyticsAllowed) startTracker(); 497 }); 498 499 if (!window.Shopify || typeof window.Shopify.loadFeatures !== 'function') { 500 startTracker(); 501 return; 502 } 503 504 // Some CMPs write consent without visitorConsentCollected or load the privacy API after us. 505 var ticksLeft = 60; 506 var recheck = setInterval(function () { 507 if (!started && analyticsAllowed()) startTracker(); 508 if (started || --ticksLeft <= 0) clearInterval(recheck); 509 }, 1000); 510 511 window.Shopify.loadFeatures( 512 [{ name: 'consent-tracking-api', version: '0.1' }], 513 function (error) { 514 if (!error && analyticsAllowed()) startTracker(); 515 } 516 ); 517})(); 518</script>
518 519 520 521 522<!-- END app block --><!-- BEGIN app block: shopify://apps/onward/blocks/onward-protection-embed/b53f9cdb-2bd0-4ef4-be64-bb0b8b7f7dff -->
522<script type="text/javascript"> 523 window.addEventListener('DOMContentLoaded', () => { 524 const onward = new OnwardSetup(); 525 onward.addContainer('.cart__item-sub', {position: "beforebegin"}); 526 onward.attachCheckoutButton('.checkout-btn-class button.cart__checkout', { 527 optOutSelector: '.cart__checkout-wrapper', 528 optOutPosition: 'afterend' 529 }); 530}); 531 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]","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","widget:checkout:qty_clamp"],"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,"orderEditingAllowAddProtection":true,"orderEditingAllowDiscountCodes":false,"orderEditingAllowUpsells":false,"orderEditingUpsellsCollectionId":null,"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"}; 532 window.OnwardSettingsJson = Object.assign( 533 window.OnwardSettingsJson, 534 window.onwardSettingsOverrides ? window.onwardSettingsOverrides : {}, 535 { 536 headlessClient: false, 537 onwardWidget: { policy_bundle: {"config":{"checkout_plus_button_order":"checkout_plus_first"},"policy_settings":{"checkout_plus_button_order":{"policies":[]}}} }, 538 locale: { 539 currency_iso_code: "USD", 540 currency_rate: Shopify.currency?.rate || "1.0", 541 request_locale: Shopify?.locale || 'en' 542 } 543 } 544 ); 545 Object.freeze(window.OnwardSettingsJson); 546 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"}}}}; 547 Object.freeze(window.OnwardTranslationsJson); 548 549 550 551 window.OnwardCustomer = { isB2b: null, tags: null }; 552</script>
552 553 554<style id="onward-styles-sheet"> 555 .cart-item:has(a[href*="/products/onward-package-protection"]), 556 .cart__item:has(a[href*="/products/onward-package-protection"]), 557 .upez--cart-item:has(a[href*="/products/onward-package-protection"]), 558 .upcart-product-item:has(a[href*="/products/onward-package-protection"]), 559 .rebuy-cart__flyout-item:has(a[href*="/products/onward-package-protection"]) { 560 display: none; 561 } 562 563 #onward-container section { 564 max-width: unset !important; 565} 566 567.cart__footer .onward-opt-out-link { 568 padding-bottom: 10px !important; 569} 570</style> 571 572 573<!-- END app block -->
573<script src="https://cdn.shopify.com/extensions/01a0b5e5-aa1c-7f8a-b804-75389ad6a12c/trakt-351/assets/onward.js" type="text/javascript" defer="defer"></script>
573 574<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
575<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 575
575
576<script> 577 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 578</script>
vendor: 1 bytes, line 578
578
579<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}
579).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: ["16072cab","8450a54b"],webPixelsConfigList: [{"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\"
579:\"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"},{"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"}
579,{"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":"7a47b06116c806e4367c27d301f4f458","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"},{"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"}
579,{"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":"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","c8540278we853e1abpb62b2c4amde256306",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"138710351958","themePublished":"true","eventMetadataId":"407446a2-bf1f-4a19-aff7-12a4c06d9a8c","pageType":"home","shopId":"65962311766","storefrontBaseUrl":"https:\/\/bokksu.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"16072cab\", \"8450a54b\"]","isMerchantRequest":"false","hashVersion":"c8540278we853e1abpb62b2c4amde256306","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
579<script> 580 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 581 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 582 window.ShopifyAnalytics.meta.currency = 'USD'; 583 var meta = {"page":{"pageType":"home","requestId":"4b6c279a-42c4-40d7-97be-5f25e2b7720d-1790269752"}}; 584 for (var attr in meta) { 585 window.ShopifyAnalytics.meta[attr] = meta[attr]; 586 } 587</script>
vendor: 1 bytes, line 587
587
588<script class="analytics"> 589 (function () { 590 var customDocumentWrite = function(content) { 591 var jquery = null; 592 593 if (window.jQuery) { 594 jquery = window.jQuery; 595 } else if (window.Checkout && window.Checkout.$) { 596 jquery = window.Checkout.$; 597 } 598 599 if (jquery) { 600 jquery('body').append(content); 601 } 602 }; 603 604 var hasLoggedConversion = function(token) { 605 if (token) { 606 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 607 } 608 return false; 609 } 610 611 var setCookieIfConversion = function(token) { 612 if (token) { 613 var twoMonthsFromNow = new Date(Date.now()); 614 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 615 616 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 617 } 618 } 619 620 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 621 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 622 if (trekkie.integrations) { 623 return; 624 } 625 trekkie.methods = [ 626 'identify', 627 'page', 628 'ready', 629 'track', 630 'trackForm', 631 'trackLink' 632 ]; 633 trekkie.factory = function(method) { 634 return function() { 635 var args = Array.prototype.slice.call(arguments); 636 args.unshift(method); 637 trekkie.push(args); 638 if (method == 'track' || method == 'page') { 639 try { 640 if (window.__TREKKIE_SHIM_QUEUE == null) { 641 window.__TREKKIE_SHIM_QUEUE = []; 642 } 643 window.__TREKKIE_SHIM_QUEUE.push({ 644 from: 'trekkie-stub', 645 method: method, 646 args: args.slice(1) 647 }); 648 } catch (e) { 649 // no-op 650 } 651 } 652 return trekkie; 653 }; 654 }; 655 for (var i = 0; i < trekkie.methods.length; i++) { 656 var key = trekkie.methods[i]; 657 trekkie[key] = trekkie.factory(key); 658 } 659 trekkie.load = function(config) { 660 trekkie.config = config || {}; 661 trekkie.config.initialDocumentCookie = document.cookie; 662 var first = document.getElementsByTagName('script')[0]; 663var script = document.createElement('script'); 664script.type = 'text/javascript'; 665script.onerror = function(e) { 666 var scriptFallback = document.createElement('script'); 667 scriptFallback.type = 'text/javascript'; 668 scriptFallback.onerror = function(error) { 669 var Monorail = { 670 produce: function produce(monorailDomain, schemaId, payload) { 671 var currentMs = new Date().getTime(); 672 var event = { 673 schema_id: schemaId, 674 payload: payload, 675 metadata: { 676 event_created_at_ms: currentMs, 677 event_sent_at_ms: currentMs 678 } 679 }; 680 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 681 }, 682 sendRequest: function sendRequest(endpointUrl, payload) { 683 // Try the sendBeacon API 684 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 685 var blobData = new window.Blob([payload], { 686 type: 'text/plain' 687 }); 688 689 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 690 return true; 691 } // sendBeacon was not successful 692 693 } // XHR beacon 694 695 var xhr = new XMLHttpRequest(); 696 697 try { 698 xhr.open('POST', endpointUrl); 699 xhr.setRequestHeader('Content-Type', 'text/plain'); 700 xhr.send(payload); 701 } catch (e) { 702 console.log(e); 703 } 704 705 return false; 706 }, 707 isIos12: function isIos12() { 708 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 709 } 710 }; 711 Monorail.produce('monorail-edge.shopifysvc.com', 712 'trekkie_storefront_load_errors/1.1', 713 {shop_id: 65962311766, 714 theme_id: 138710351958, 715 app_name: "storefront", 716 context_url: window.location.href, 717 source_url: "//bokksu.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js"}); 718 719 }; 720 scriptFallback.async = true; 721 scriptFallback.src = '//bokksu.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js'; 722 first.parentNode.insertBefore(scriptFallback, first); 723}; 724script.async = true; 725script.src = '//bokksu.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js'; 726first.parentNode.insertBefore(script, first); 727 728 }; 729 trekkie.load( 730 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":65962311766,"isMerchantRequest":null,"themeId":138710351958,"themeCityHash":"17855864791714387038","contentLanguage":"en","currency":"USD","eventMetadataId":"407446a2-bf1f-4a19-aff7-12a4c06d9a8c"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 731 ); 732 733 var loaded = false;
734 trekkie.ready(function() { 735 if (loaded) return; 736 loaded = true; 737 738 window.ShopifyAnalytics.lib = window.trekkie; 739 740 var originalDocumentWrite = document.write; 741 document.write = customDocumentWrite; 742 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 743 document.write = originalDocumentWrite; 744 745 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 746 var token = match? match[1]: undefined; 747 if (!hasLoggedConversion(token)) { 748 setCookieIfConversion(token); 749 750 } 751 }); 752 753 window.ShopifyAnalytics.lib.page(null,{"pageType":"home","requestId":"4b6c279a-42c4-40d7-97be-5f25e2b7720d-1790269752","shopifyEmitted":true}); 754 755 var eventsListenerScript = document.createElement('script'); 756 eventsListenerScript.async = true; 757 eventsListenerScript.src = "//bokksu.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 758 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 759})();</script>
vendor: 1 bytes, line 759
759
760<script 761 defer 762 src="https://bokksu.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 763 data-application="storefront-renderer" 764 data-shop-id="65962311766" 765 data-render-region="gcp-us-central1" 766 data-page-type="index" 767 data-theme-instance-id="138710351958" 768 data-theme-name="Expanse" 769 data-theme-version="4.3.4" 770 data-monorail-region="shop_domain" 771 data-resource-timing-sampling-rate="10" 772 data-shs="true" 773 data-shs-beacon="true" 774 data-shs-export-with-fetch="true" 775 data-shs-logs-sample-rate="1" 776 data-shs-beacon-endpoint="https://bokksu.com/api/collect" 777></script>
777 778<meta name="shopify-y" content="fe327322-27f0-48a2-b4d5-da8cc853f588" data-expiration="1821827352000"><meta name="shopify-s" content="ea199bf7-291c-4129-bad9-48672a4911fa" data-expiration="1790271552000"><meta name="new-cookie-storage-activated" content="t"> 779</head> 780 781 <body 782 class="template-index 783 sugoi-mart-menu 784 785 786 bokksu-store 787 788 " 789 data-transitions="true" 790 data-button_style="round-slight" 791 data-edges="" 792 data-type_header_capitalize="false" 793 data-swatch_style="round" 794 data-grid-style="grey-square" 795 data-min-checkout = "27" 796 data-frozen-min-shipping = "99" 797 data-min-shipping = "149" 798 ><a href="#MainContent" class="skip-to-content">Skip to content</a> 799 <style> 800 .skip-to-content { 801 position: absolute; 802 left: -9999px; 803 top: auto; 804 width: 1px; 805 height: 1px; 806 overflow: hidden; 807 z-index: 10000; 808 } 809 .skip-to-content:focus, 810 .skip-to-content:focus-visible { 811 position: fixed; 812 top: 0; 813 left: 0; 814 width: auto; 815 height: auto; 816 padding: 1rem 1.25rem; 817 background: #111; 818 color: #fff; 819 font-weight: 600; 820 text-decoration: underline; 821 clip: auto; 822 outline: 3px solid #ffbf00; 823 outline-offset: 0; 824 } 825 </style> 826 827
827<script> 828 window.dataLayer = window.dataLayer || []; 829 830 const dataLayerHelper = (function() { 831 832 const storeAbbr = 'SNB'; 833 834 835 // Helper function to get a cookie by name 836 function getCookie(name) { 837 const value = "; " + document.cookie; 838 const parts = value.split("; " + name + "="); 839 if (parts.length == 2) return parts.pop().split(";").shift(); 840 } 841 842 // Helper function to set a cookie 843 function setCookie(name, value, minutes) { 844 const d = new Date(); 845 d.setTime(d.getTime() + (minutes*60*1000)); 846 const expires = "expires=" + d.toUTCString(); 847 document.cookie = name + "=" + value + ";" + expires + ";path=/"; 848 } 849 850 // Function to get UTM parameters from the URL 851 function getUTM() { 852 const urlParams = new URLSearchParams(window.location.search); 853 return { 854 source: urlParams.get('utm_source') || null, 855 medium: urlParams.get('utm_medium') || null, 856 campaign: urlParams.get('utm_campaign') || null 857 }; 858 } 859 860 // Check cookies for UTM values or set them if they don't exist 861 function getUTMParameters() { 862 const utmFromURL = getUTM(); 863 864 if (utmFromURL.source && getCookie('utm_source') != utmFromURL.source) { 865 setCookie('utm_source', utmFromURL.source, 15); 866 } 867 868 if (utmFromURL.medium && getCookie('utm_medium') != utmFromURL.medium) { 869 setCookie('utm_medium', utmFromURL.medium, 15); 870 } 871 872 if (utmFromURL.campaign && getCookie('utm_campaign') != utmFromURL.campaign) { 873 setCookie('utm_campaign', utmFromURL.campaign, 15); 874 } 875
876 const utmFromCookies = { 877 source: getCookie('utm_source') || null, 878 medium: getCookie('utm_medium') || null, 879 campaign: getCookie('utm_campaign') || null, 880 landing_page: window.location.href 881 }; 882 883 return utmFromCookies; 884 } 885 886 // Check if the value is an integer and convert it to a float ex: 5990 => 59.90 887 function checkAndConvert(value) { 888 if (Number.isInteger(value)) { 889 return value / 100; 890 } else { 891 return value; 892 } 893 } 894 895 function cartSubtotal(items) { 896 return items.reduce((total, item) => total + (item.price * item.quantity), 0); 897 } 898 899 // Get cart items from the cart object 900 function getCartItems() { 901 902 let cartItems = [ 903 904 ]; 905 return cartItems; 906 } 907 908 // Get checkout items from the checkout object 909 function getCheckoutItems() { 910 if(typeof Shopify !== 'undefined' && Shopify.Checkout){ 911 let checkoutItems = [ 912 913 ]; 914 return checkoutItems; 915 } 916 } 917 918 // Get only the fields we need from the cart items 919 function extractSelectedFields(cart) { 920 return cart.map(item => { 921 return { 922 variant_id: item.id, 923 product_id: item.product_id, 924 sku: item.sku, 925 title: item.title, 926 quantity: item.quantity, 927 price: checkAndConvert(item.price), 928 vendor: item.vendor, 929 category: item.product_type 930 }; 931 }); 932 } 933 934 // Function to generate unique event_id 935 function generateEventId() { 936 const timestamp = Date.now(); // Current timestamp in milliseconds 937 const randomNum = Math.floor(Math.random() * 1000000); // Random number between 0 and 999999 938 return `${timestamp}_${randomNum}`; 939 } 940 941 /* Make item object */ 942 const itemObject = async (itemData, quantity) => { 943 return { 944 product_id: itemData.product.id, 945 id: itemData.variant.id, 946 handle: itemData.product.handle, 947 quantity: quantity, 948 price: itemData.variant.price, 949 compare_price: itemData.variant.compare_at_price, 950 sku: itemData.variant.sku, 951 image: itemData.product.images[0]?.src || '', 952 url: `/products/${itemData.product.handle}`, 953 title: itemData.product.title 954 }; 955 }; 956 957 const sumQuantities = (items) => { 958 return items.reduce((total, item) => { 959 return total + (item.quantity || 0); 960 }, 0); 961 }; 962 963 async function fetchProductWithVariant(handle, variantId) { 964 try { 965 const response = await fetch(`/products/${handle}.json`); 966 const data = await response.json(); 967 const product = data.product; 968 let variant = product.variants.find(variant => variant.id == variantId); 969 return { product, variant }; 970 } catch (error) { 971 console.error('Error:', error); 972 } 973 } 974 975 async function fetchCartItems() { 976 // Create a delay function to wait for 2 seconds 977 function delay(ms) { 978 return new Promise(resolve => setTimeout(resolve, ms)); 979 } 980 981 try { 982 // Wait for 2 seconds before fetching the cart data 983 await delay(2000); 984 985 const response = await fetch(`/cart.json`); 986 const data = await response.json(); 987 988 // Filter out the item with sku 'ONWARDINS01' 989 const filteredItems = data.items.filter(item => item.sku !== 'ONWARDINS01'); 990 991 return filteredItems; 992 } catch (error) { 993 console.error('Error:', error); 994 } 995 } 996 997 function createEcommerceEntry(item, cartItems, quantityAdjustment = 0) { 998 return { 999 'items': [{ 1000 'item_id' : item.product_id, 1001 'item_variant' : item.id, 1002 'item_name' : item.title, 1003 'price' : checkAndConvert(item.price), 1004 'compare_price' : checkAndConvert(item.compare_at_price), 1005 'item_brand' : storeAbbr, 1006 'item_category' : item.type,
1007 'vendor' : item.vendor, 1008 'quantity' : Number(item.quantity) + Number(quantityAdjustment), 1009 'image_url' : item.image, 1010 'product_url' : item.url, 1011 'sku' : item.sku, 1012 'customer_id' : null, 1013 'customer_email' : null, 1014 }], 1015 'cart': { 1016 'cart_items' : extractSelectedFields(cartItems), 1017 'cart_quantity' : sumQuantities(cartItems), 1018 'cart_subtotal' : checkAndConvert(cartSubtotal(cartItems)) 1019 } 1020 }; 1021 } 1022 return { 1023 userData: function () { 1024 // Customer data object 1025 let customerData = { 1026 is_logged_in: false, 1027 type: 'guest', 1028 id: null, 1029 email: null, 1030 first_name: null, 1031 last_name: null, 1032 phone_number: null, 1033 accepts_marketing: null, 1034 total_spent: null, 1035 orders_count: null, 1036 default_address: null 1037 }; 1038 1039 // Liquid code to get customer data if logged in 1040 1041 1042 // Push the customer data to the dataLayer 1043 window.dataLayer.push({ 1044 'event': 'dl_user_data', 1045 'user_data': customerData, 1046 'marketing': getUTMParameters() 1047 }); 1048 }, 1049 viewItem: function() { 1050 // SKU ONWARDINS01 must be ignored 1051 let ecommerce = { 1052 'items': [{ 1053 'item_id' : null, 1054 'item_variant' : null, 1055 'item_name' : null, 1056 'price' : "", 1057 'item_brand' : storeAbbr, 1058 'item_category' : null, 1059 'vendor' : null, 1060 'image_url' : 'https://bokksu.com/cdn/shopifycloud/storefront/assets/no-image-2048-a2addb12_grande.gif', 1061 'product_url' : '', 1062 'sku' : null 1063 }], 1064 'cart': { 1065 'cart_items' : getCartItems(), 1066 'cart_quantity' : sumQuantities(getCartItems()), 1067 'cart_subtotal' : cartSubtotal(getCartItems()), 1068 } 1069 }; 1070 1071 dataLayer.push({ 1072 'pageType' : 'Product', 1073 'event' : 'dl_view_item', 1074 'event_id': generateEventId(), 1075 ecommerce 1076 }); 1077 1078 }, 1079 viewCollection: function() { 1080 1081 let ecommerce = { 1082 'collection': { 1083 'id' : null, 1084 'handle' : null, 1085 'description' : null, 1086 'products_count' : null, 1087 'products' : [ 1088 1089 ], 1090 }, 1091 'cart': { 1092 'cart_items' : getCartItems(), 1093 'cart_quantity' : sumQuantities(getCartItems()), 1094 'cart_subtotal' : cartSubtotal(getCartItems()), 1095 } 1096 }; 1097 dataLayer.push({ 1098 'pageType' : 'Collection', 1099 'event' : 'dl_view_item_list', 1100 'event_id': generateEventId(), 1101 ecommerce 1102 }); 1103 }, 1104 addToCart: async function(handle, variantId, quantity, quantityAdjustment = 1) { 1105 this.userData(); 1106 const itemData = await fetchProductWithVariant(handle, variantId); 1107 const currentCartItems = await fetchCartItems(); 1108 1109 const item = await itemObject(itemData, quantity); 1110 1111 // SKU ONWARDINS01 must be ignored 1112 if (item.sku == 'ONWARDINS01') { 1113 return; 1114 } 1115 1116 const ecommerce = createEcommerceEntry(item, currentCartItems, quantityAdjustment); 1117 dataLayer.push({ 1118 'event': 'dl_add_to_cart', 1119 'event_id': generateEventId(), 1120 ecommerce 1121 }); 1122 }, 1123 removeFromCart: async function(handle, variantId, quantity, quantityAdjustment = -1) { 1124 this.userData(); 1125 const itemData = await fetchProductWithVariant(handle, variantId); 1126 const currentCartItems = await fetchCartItems(); 1127 const item = await itemObject(itemData, quantity); 1128 1129 // SKU ONWARDINS01 must be ignored 1130 if (item.sku == 'ONWARDINS01') { 1131 return; 1132 } 1133 1134 const ecommerce = createEcommerceEntry(item, currentCartItems, quantityAdjustment); 1135 dataLayer.push({ 1136 'event': 'dl_remove_from_cart', 1137 'event_id': generateEventId(), 1138 ecommerce 1139 }); 1140 }, 1141 checkout: function() { 1142 this.userData(); 1143 if(typeof Shopify !== 'undefined' && Shopify.Checkout){ 1144 let ecommerce = { 1145 'items': [{ 1146 'transaction_id': null, 1147 'order_id': null, 1148 'customer_id': null, 1149 'affiliation': "Bokksu Snack Box", 1150 'value': "", 1151 'tax': "", 1152 'shipping': "", 1153 'subtotal': "", 1154 'currency': null, 1155 1156 'email': null, 1157 }], 1158 'cart': { 1159 'cart_items': getCheckoutItems(), 1160 'cart_quantity' : sumQuantities(getCheckoutItems()), 1161 } 1162 }; 1163 1164 if(Shopify.Checkout.step){ 1165 if(Shopify.Checkout.step.length > 0){ 1166 if (Shopify.Checkout.step === 'contact_information'){ 1167 dataLayer.push({ 1168 'event' :'dl_begin_checkout', 1169 'pageType' :'Customer Information', 1170 'step': 1, 1171 'event_id': generateEventId(), 1172 ecommerce 1173 }); 1174 }else if (Shopify.Checkout.step === 'shipping_method'){ 1175 dataLayer.push({ 1176 'event' :'add_shipping_info', 1177 'pageType' :'Shipping Information', 1178 'event_id': generateEventId(), 1179 ecommerce 1180 }); 1181 }else if( Shopify.Checkout.step === "payment_method" ){ 1182 dataLayer.push({ 1183 'event' :'add_payment_info', 1184 'event_id': generateEventId(), 1185 'pageType' :'Add Payment Info', 1186 ecommerce 1187 }); 1188 } 1189 } 1190 1191 if(Shopify.Checkout.page == "thank_you"){ 1192 dataLayer.push({ 1193 'pageType' :'Transaction', 1194 'event_id': generateEventId(), 1195 'event' :'dl_purchase', 1196 ecommerce 1197 }); 1198 } 1199 } 1200 } 1201 }, 1202 }; 1203 })(); 1204 1205 /*
1206 EVENTS ADD TO CART, REMOVE FROM CART, PURCHASE, PDP PAGE VIEW, CHECKOUT 1207 */ 1208 1209 /* User Data */ 1210 dataLayerHelper.userData(); 1211 1212 /* PDP Page view*/ 1213 1214 1215 1216 1217 /* Checkout Page view*/ 1218 setTimeout(function() { 1219 if(typeof Shopify !== 'undefined' && Shopify.Checkout){ 1220 dataLayerHelper.checkout(); 1221 } 1222 }, 2000); 1223 1224 /* Add and Remove cart items (CART and PDP minus and plus)*/ 1225 document.addEventListener('click', async function(event) { 1226 const button = event.target.closest('.js-qty__wrapper button'); 1227 if (button) { 1228 const input = button.closest('.js-qty__wrapper').querySelector('input'); 1229 if (input) { 1230 const handle = input.getAttribute('data-product-handle'); 1231 const variantId = input.getAttribute('data-variant-id'); 1232 1233 if (button.classList.contains('js-qty__adjust--minus')) { 1234 await dataLayerHelper.removeFromCart(handle, variantId, input.value, 0); 1235 } else if (button.classList.contains('js-qty__adjust--plus')) { 1236 await dataLayerHelper.addToCart(handle, variantId, input.value, 0); 1237 } 1238 } 1239 } 1240 }); 1241 1242 /* Add and Remove cart items (HOMEPAGE) */ 1243 document.addEventListener('click', async function(event) { 1244 const target = event.target.closest('.qty-custom-plus, .qty-custom-minus, .quick_add_to_cart'); 1245 if (!target) return; 1246 1247 const gridItem = target.closest('.grid-item'); 1248 if (!gridItem) return; 1249 1250 const handle = gridItem.getAttribute('data-product-handle'); 1251 const variantId = gridItem.getAttribute('data-variant-id'); 1252 1253 const quantitySpan = gridItem.querySelector('.custom-qty'); 1254 let quantity = 0; 1255 if (quantitySpan){ 1256 quantity = parseInt(quantitySpan.textContent); 1257 }; 1258 1259 if (target.classList.contains('qty-custom-minus')) { 1260 await dataLayerHelper.removeFromCart(handle, variantId, quantity, -1); 1261 } else if (target.classList.contains('qty-custom-plus')) { 1262 await dataLayerHelper.addToCart(handle, variantId, quantity, 1); 1263 } else if (target.classList.contains('quick_add_to_cart')) { 1264 await dataLayerHelper.addToCart(handle, variantId, 1, 0); 1265 } 1266 }); 1267 1268 /* Add button cart (Customers Also Loved) & add button cart normal state (PDP)*/ 1269 document.addEventListener('click', async function(event) { 1270 const button = event.target.closest('.shopify-reco-cart-add button, .pdp-atc'); 1271 if (button) { 1272 const handle = button.getAttribute('data-product-handle'); 1273 const variantId = button.getAttribute('data-variant-id'); 1274 await dataLayerHelper.addToCart(handle, variantId, 1, 0); 1275 } 1276 }); 1277 1278 /* Collection Single button and plus and minus using FS*/ 1279 window.addEventListener('fs-custom-events-product-clicked', (e) => { 1280 if(e && e.detail && e.detail.id){ 1281 const productId = e.detail.id 1282 const handle = e.detail.productURL.split('/').pop(); 1283 const variantId = e.detail.s.split('::').pop(); 1284 1285 const shadow = document.querySelector('#fast-simon-serp-app') && document.querySelector('#fast-simon-serp-app').shadowRoot ? document.querySelector('#fast-simon-serp-app').shadowRoot:null; 1286 if(shadow){ 1287 if(shadow.querySelector(`.fs-results-product-card[data-product-id="`+productId+`"]`)){ 1288 const element = shadow.querySelector(`.fs-results-product-card[data-product-id="`+productId+`"]`); 1289 if(element.querySelector(".add-item-to-cart .qty-custom-minus")){ 1290 element.querySelector(".add-item-to-cart .qty-custom-minus").addEventListener("click", function () { 1291 const quantitySpan = element.querySelector('.custom-qty'); 1292 let quantity = 0; 1293 if (quantitySpan){ 1294 quantity = parseInt(quantitySpan.textContent); 1295 }; 1296 dataLayerHelper.addToCart(handle, variantId, quantity, -1); 1297 }); 1298 } 1299 1300 if(element.querySelector(".add-item-to-cart .qty-custom-plus")){ 1301 element.querySelector(".add-item-to-cart .qty-custom-plus").addEventListener("click", function () { 1302 const quantitySpan = element.querySelector('.custom-qty'); 1303 let quantity = 0; 1304 if (quantitySpan){ 1305 quantity = parseInt(quantitySpan.textContent); 1306 }; 1307 dataLayerHelper.addToCart(handle, variantId, quantity, 1); 1308 }); 1309 } 1310 1311 if(element.querySelector(".qty-custom-add")){ 1312 dataLayerHelper.addToCart(handle, variantId, 1, 0); 1313 } 1314 } 1315 } 1316 } 1317 }); 1318</script>
1318 1319 1320 1321 1322 <!-- Google Tag Manager (noscript) -->
vendor: 77 bytes, lines 1322-1324
1322 1323 1324 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1324GTM-PR4MBW
vendor: 84 bytes, lines 1324-1325
1324" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 1325
1326<!-- End Google Tag Manager (noscript) --> 1327 1328 1329
1329<script type="text/javascript"> 1330 window.setTimeout(function() { document.body.className += " loaded"; }, 25); 1331 </script>
1331 1332 1333 1334 1335 1336 <style> 1337 :root { 1338 --sale-badge: #b73d09; 1339 --badge-best-seller: #b73d09; 1340 --badge-new: #b73d09; 1341 --brand_color_1: #b73d09; 1342 --cta_filled_static : #b73d09; 1343 --cta_outline_primary_static : #b73d09; 1344 --cta_outline_primary_hover : #b73d09; 1345 --quantity-selector-primary: #b73d09; 1346 --quantity-selector-secondary: #b73d09; 1347 --primary-color : #b73d09; 1348 --collection-primary-static : #b73d09; 1349 --collection-primary-static-hover : #b73d09; 1350 --colorTextSavings : #b73d09; 1351 --colorNav : #f4f6f1; 1352 1353 } 1354 .grid-product__price--savings{ 1355 color: #b73d09; 1356 } 1357</style> 1358 1359 1360 1361 1362 1363 1364 1365 <style> .Rise__widget { display:none !important } </style> 1366 1367 1368 1369 <div id="PageContainer" class="page-container"> 1370 <div class="transition-body"><!-- BEGIN sections: header-group --> 1371<div id="shopify-section-sections--17749310636118__toolbar" class="shopify-section shopify-section-group-header-group toolbar-section"> 1372 1373<div data-section-id="sections--17749310636118__toolbar" data-section-type="toolbar"> 1374 <div class="toolbar"> 1375 <div class="page-width"> 1376 <div class="toolbar__content">
1376<script src="//bokksu.com/cdn/shop/t/3/assets/load-image-section.js?v=162969312039988435871751964575" defer="defer"></script>
1376 1377 <div class="toolbar__item toolbar__item--announcements"> 1378 <div class="announcement-bar text-center"> 1379 <div class="slideshow-wrapper"> 1380 <button type="button" class="visually-hidden slideshow__pause" data-id="sections--17749310636118__toolbar" aria-label="Pause announcements" aria-pressed="false"> 1381 <span class="slideshow__pause-stop" aria-hidden="true"> 1382 <svg focusable="false" role="presentation" class="icon icon-pause" viewBox="0 0 10 13"><path d="M0 0h3v13H0zm7 0h3v13H7z" fill-rule="evenodd"/></svg> 1383 </span> 1384 <span class="slideshow__pause-play" aria-hidden="true"> 1385 <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> 1386 </span> 1387 </button> 1388 1389 <div 1390 id="AnnouncementSlider" 1391 class="announcement-slider " 1392 role="region" 1393 aria-roledescription="carousel" 1394 aria-label="Announcements" 1395 data-block-count="1"> 1396<div 1397 id="AnnouncementSlide-announcement_a8DXCa" 1398 class="slideshow__slide announcement-slider__slide" 1399 role="group" 1400 aria-roledescription="announcement" 1401 aria-label="1 of 1" 1402 data-index="0" 1403 > 1404 <div class="announcement-slider__content"><div class="medium-up--hide" aria-hidden="true"> 1405 <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> 1406 </div> 1407 <div class="small--hide free-shiping"> 1408 <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> 1409 </div></div> 1410 </div></div> 1411 </div> 1412 </div> 1413 </div> 1414 1415
1416<script> 1417 $(document).ready(function(){ 1418 $('#AnnouncementSlider').removeAttr("tabindex") 1419 }) 1420 1421 // a11y: keep off-screen announcement slides out of the keyboard tab order 1422 // WITHOUT using inert (which would kick screen-reader virtual focus when 1423 // the slide rotates). Use tabindex="-1" on focusable descendants instead. 1424 (function () { 1425 var slider = document.getElementById('AnnouncementSlider'); 1426 if (!slider) return; 1427 var FOCUSABLE_SEL = 'a[href], button, input, select, textarea, iframe, [tabindex]'; 1428 1429 function setSlideTabbable(slide, tabbable) { 1430 var focusables = slide.querySelectorAll(FOCUSABLE_SEL); 1431 for (var i = 0; i < focusables.length; i++) { 1432 var el = focusables[i]; 1433 if (tabbable) { 1434 var orig = el.getAttribute('data-a11y-orig-tabindex'); 1435 if (orig !== null && orig !== undefined) { 1436 if (orig === '__none__') el.removeAttribute('tabindex'); 1437 else el.setAttribute('tabindex', orig); 1438 el.removeAttribute('data-a11y-orig-tabindex'); 1439 } else { 1440 el.removeAttribute('tabindex'); 1441 } 1442 } else { 1443 if (el.getAttribute('data-a11y-orig-tabindex') === null) { 1444 var existing = el.getAttribute('tabindex'); 1445 el.setAttribute('data-a11y-orig-tabindex', existing === null ? '__none__' : existing); 1446 } 1447 el.setAttribute('tabindex', '-1'); 1448 } 1449 } 1450 } 1451 1452 function normalizeDots() { 1453 // Remove dots from keyboard tab order and screen reader navigation. 1454 // Guard: only set if value differs to prevent MutationObserver loops. 1455 var dotsContainer = slider.parentNode && slider.parentNode.querySelector('.flickity-page-dots'); 1456 if (dotsContainer && dotsContainer.getAttribute('aria-hidden') !== 'true') { 1457 dotsContainer.setAttribute('aria-hidden', 'true'); 1458 } 1459 var dots = slider.querySelectorAll('.flickity-page-dots .dot'); 1460 if (!dots.length && dotsContainer) dots = dotsContainer.querySelectorAll('.dot'); 1461 for (var i = 0; i < dots.length; i++) { 1462 if (dots[i].getAttribute('tabindex') !== '-1') { 1463 dots[i].setAttribute('tabindex', '-1'); 1464 } 1465 if (dots[i].getAttribute('aria-current') === 'step') { 1466 dots[i].setAttribute('aria-current', 'true'); 1467 } 1468 } 1469 } 1470 1471 function applyState() { 1472 var slides = slider.querySelectorAll('.announcement-slider__slide'); 1473 for (var i = 0; i < slides.length; i++) { 1474 var slide = slides[i]; 1475 var isActive = slide.classList.contains('is-selected'); 1476 setSlideTabbable(slide, isActive); 1477 if (isActive) { 1478 slide.removeAttribute('aria-hidden'); 1479 } else if (!slide.contains(document.activeElement)) { 1480 slide.setAttribute('aria-hidden', 'true'); 1481 } 1482 } 1483 normalizeDots(); 1484 } 1485 1486 function init() { 1487 applyState(); 1488 if (typeof MutationObserver !== 'function' || slider.dataset.a11ySlideObserved) return; 1489 slider.dataset.a11ySlideObserved = '1'; 1490 var slides = slider.querySelectorAll('.announcement-slider__slide'); 1491 var observer = new MutationObserver(function (mutations) { 1492 for (var i = 0; i < mutations.length; i++) { 1493 if (mutations[i].attributeName === 'class') { 1494 applyState(); 1495 break; 1496 } 1497 } 1498 }); 1499 for (var j = 0; j < slides.length; j++) { 1500 observer.observe(slides[j], { attributes: true, attributeFilter: ['class'] }); 1501 } 1502 // Watch dot list for class changes only (slide rotation). 1503 // Do NOT watch aria-current or aria-label â we set those ourselves 1504 // and watching them causes infinite observer loops. 1505 var dotsContainer = slider.parentNode && slider.parentNode.querySelector('.flickity-page-dots'); 1506 if (dotsContainer) { 1507 var dotObserver = new MutationObserver(function () { 1508 clearTimeout(slider._dotDebounce); 1509 slider._dotDebounce = setTimeout(normalizeDots, 50); 1510 }); 1511 dotObserver.observe(dotsContainer, { 1512 subtree: true, 1513 attributes: true, 1514 attributeFilter: ['class'] 1515 }); 1516 } 1517 } 1518 if (document.readyState === 'loading') { 1519 document.addEventListener('DOMContentLoaded', init); 1520 } else { 1521 init(); 1522 } 1523 setTimeout(init, 500); 1524 1525 // ------------------------------------------------------------------ 1526 // WCAG 2.2.2: pause autoplay on keyboard focus, hover, and when the
1527 // user prefers reduced motion. Respect the explicit pause-button 1528 // click so we don't override the user's choice. 1529 // ------------------------------------------------------------------ 1530 var getFlickity = function () { 1531 return (window.Flickity && typeof Flickity.data === 'function') 1532 ? Flickity.data(slider) 1533 : null; 1534 }; 1535 var wrapper = slider.closest('.slideshow-wrapper'); 1536 var userPaused = function () { 1537 var btn = wrapper && wrapper.querySelector('.slideshow__pause'); 1538 return !!(btn && btn.classList.contains('is-paused')); 1539 }; 1540 var reducedMotionPaused = false; 1541 var pauseAutoplay = function () { 1542 var fi = getFlickity(); 1543 if (fi && typeof fi.pausePlayer === 'function') fi.pausePlayer(); 1544 }; 1545 var resumeAutoplay = function () { 1546 if (userPaused() || reducedMotionPaused) return; 1547 var fi = getFlickity(); 1548 if (fi && typeof fi.unpausePlayer === 'function') fi.unpausePlayer(); 1549 }; 1550 1551 if (wrapper) { 1552 wrapper.addEventListener('focusin', pauseAutoplay); 1553 wrapper.addEventListener('focusout', function (e) { 1554 if (!wrapper.contains(e.relatedTarget)) resumeAutoplay(); 1555 }); 1556 wrapper.addEventListener('mouseenter', pauseAutoplay); 1557 wrapper.addEventListener('mouseleave', resumeAutoplay); 1558 } 1559 1560 if (window.matchMedia) { 1561 var rmQuery = window.matchMedia('(prefers-reduced-motion: reduce)'); 1562 var applyReducedMotion = function () { 1563 reducedMotionPaused = rmQuery.matches; 1564 var fi = getFlickity(); 1565 if (!fi) return; 1566 if (reducedMotionPaused) { 1567 if (typeof fi.stopPlayer === 'function') fi.stopPlayer(); 1568 else if (typeof fi.pausePlayer === 'function') fi.pausePlayer(); 1569 } else if (!userPaused()) { 1570 if (typeof fi.unpausePlayer === 'function') fi.unpausePlayer(); 1571 } 1572 }; 1573 var rmTries = 0; 1574 var rmPoll = setInterval(function () { 1575 if (getFlickity() || ++rmTries > 20) { 1576 clearInterval(rmPoll); 1577 if (getFlickity()) applyReducedMotion(); 1578 } 1579 }, 250); 1580 if (typeof rmQuery.addEventListener === 'function') { 1581 rmQuery.addEventListener('change', applyReducedMotion); 1582 } else if (typeof rmQuery.addListener === 'function') { 1583 rmQuery.addListener(applyReducedMotion); 1584 } 1585 } 1586 })(); 1587</script>
1587 1588</div> 1589 </div> 1590 </div> 1591</div> 1592 1593</div><div id="shopify-section-sections--17749310636118__header" class="shopify-section shopify-section-group-header-group header-section"> 1594 1595 <style> 1596 .sugoi-mart-mob-menu .slide-nav__wrapper ul li a:hover, 1597 .sugoi-mart-mob-menu .slide-nav__wrapper ul li button:hover .slide-nav__link { 1598 background: none !important; 1599 color: #ffffff !important; 1600 } 1601 </style> 1602 1603 1604<style> 1605 1606.cart__item--subtotal { 1607 font-size: 14px; 1608 line-height: 1.2; 1609 margin: 0; 1610} 1611 1612.cart_savings { 1613 font-size: 16px; 1614 line-height: 1.3; 1615 margin-bottom: 10px !important; 1616 margin-top: 4px; 1617} 1618 1619div#onward-copy-line-2 { 1620 margin: 6px 0 0 0 !important; 1621 padding: 0; 1622} 1623 1624#onward-container section { 1625 padding: 4px 0 10px !important; 1626} 1627 1628.cart__footer .onward-opt-out-link { 1629 padding: 0 !important; 1630 margin: 6px 0 4px !important; 1631} 1632 1633</style> 1634 1635 1636 <style> 1637 a.site-nav__link { 1638 padding-top: 24px !important; 1639 padding-bottom: 24px !important; 1640} 1641.site-header__logo{ 1642 margin: 10px 0 !important; 1643 margin-right:26px !important; 1644} 1645.page-width--narrow { 1646 /* max-width: 700px; */ 1647 max-width: var(--pageNarrow) !important; 1648} 1649 1650 1651 1652 /* New Is-light */ 1653 1654.is-light-new.is-light .site-header__element { 1655background: #fff !important; 1656} 1657.is-light-new .site-header__element { 1658 background: var(--colorNav) !important; 1659} 1660 1661.is-light-new.is-light .site-header__logo .logo--has-inverted { 1662opacity: 1; 1663visibility: visible; 1664overflow: auto; 1665height: initial; 1666} 1667 1668.is-light-new.is-light .site-header__logo .logo--inverted { 1669opacity: 0; 1670visibility: hidden; 1671overflow: hidden; 1672height: 0; 1673} 1674 1675.is-light-new.is-light .site-nav__link, 1676.is-light-new.is-light .site-nav__link:hover { 1677color: #000; 1678} 1679 1680.header-wrapper--overlay.is-light-new.is-light:after { 1681display: none; 1682} 1683 1684 .header-layout .subscribe-btn { 1685 display: block; 1686 font-family: 'Montserrat', sans-serif !important; 1687 font-style: normal !important; 1688 font-weight: 500 !important; 1689 font-size: 14px !important; 1690 line-height: 18px !important; 1691 text-align: center !important; 1692 letter-spacing: 5px !important; 1693 text-transform: uppercase !important; 1694 cursor: pointer !important; 1695 height: 40px !important; 1696 padding: 11px 38px !important; 1697 border-radius: 12px !important; 1698 } 1699 1700.header-layout .un-fl-submenu-icon-arrow-dj{ 1701 height: 3px; 1702 width: 3px; 1703} 1704.is-light-new .un-fl-submenu-icon-arrow-dj{ 1705 border-color: #000 !important; 1706} 1707.hero__top-subtitle{ 1708 font-family: 'Montserrat', sans-serif; 1709 text-transform: uppercase; 1710 letter-spacing: 2px !important; 1711 font-size: 12px !important; 1712 font-weight: 500 !important; 1713 line-height: 18px; 1714} 1715.un-fl-submenu-icon-arrow-dj 1716{ 1717 border-width: 0px 1px 1px 0px !important; 1718} 1719@media all and (max-width: 960px) { 1720 .header-layout .subscribe-btn , a.site-nav__link.site-nav__link--icon.AccountMobileIcone{ 1721 display: none; 1722 } 1723 .header-item--logo{ 1724 justify-content: center; 1725 } 1726 1727 .header-layout .un-fl-submenu-icon-arrow-dj { 1728 height: 3px; 1729 width: 3px; 1730 } 1731} 1732 @media all and (max-width: 960px) { 1733 1734 .header-layout .subscribe-btn, 1735 a.site-nav__link.site-nav__link--icon.AccountMobileIcone { 1736 display: none; 1737 } 1738 1739 .header-item--logo { 1740 justify-content: center; 1741 } 1742 } 1743 1744 1745 1746 .site-header__cart { 1747 padding: 0 !important; 1748 } 1749 1750 .cart__scrollable { 1751 margin-bottom: 230px !important; 1752 /* height: calc(100vh - 266px); */ 1753 } 1754 1755 a.hero__top-subtitle.site-nav__link.site-nav__link--underline:not(.site-nav__link--has-dropdown)>i { 1756 display: none; 1757 } 1758 1759 1760 @media all and (max-width: 850px) { 1761 .cart__scrollable { 1762 margin-bottom: 70px !important; 1763 /* height: calc(100vh - 170px); */ 1764 } 1765 1766 .header-layout .subscribe-btn, 1767 a.site-nav__link.site-nav__link--icon.AccountMobileIcone { 1768 display: none; 1769 } 1770 } 1771 1772 /* New Css */ 1773 @media only screen and (max-width:1200px) { 1774 .megamenu__col .megamenu__col-title { 1775 width: 50%; 1776 } 1777 1778 .megamenu__col { 1779 flex-wrap: wrap; 1780 } 1781 1782 .max-column-width { 1783 margin: auto; 1784 width: 400px !important; 1785 } 1786 1787 .Shop .megamenu__col { 1788 padding-right: 0 !important; 1789 } 1790 1791 .Shop .megamenu__col .megamenu__col-title, 1792 .About .megamenu__col .megamenu__col-title { 1793 width: 100%; 1794 } 1795 1796 .sugoi-mart-menu .slide-nav__wrapper ul li a , .slide-nav__wrapper ul li button .slide-nav__link { 1797 font-family: "Lato", sans-serif; 1798 font-weight: 400 !important; 1799 font-size: 15px !important; 1800 line-height: 140%; 1801 letter-spacing: 0.02em; 1802 text-transform: capitalize; 1803 color: #242426; 1804 border-radius: 8px; 1805 gap: 16px; 1806 transition: .3s linear 1807 } 1808 1809 } 1810 1811 @media only screen and (min-width:1201px) { 1812 .max-column-width { 1813 1814 /* New CSS */ 1815 1816 padding-top: 20px; 1817 word-break: break-word; 1818 width: 260px; 1819 font-weight: 400; 1820 font-size: 16px; 1821 line-height: 24px; 1822 text-align: center; 1823 letter-spacing: 1px; 1824 color: #000000; 1825 font-family: 'Lato'; 1826 1827 } 1828 } 1829 1830 1831 .desktop-seprator { 1832 border-top: 1px solid rgb(189, 189, 189); 1833 margin-left: 5%; 1834 width: 191%; 1835 } 1836 1837 .desktop-seprator:last-of-type { 1838 padding-bottom: 25px 1839 } 1840 1841 .cart__item {
1842 align-items: center !important; 1843 padding: 10px 20px; 1844 } 1845 1846 span.subscription-items-final-price { 1847 font-weight: 800; 1848 } 1849 1850 .cart-open body { 1851 overflow: hidden !important; 1852 } 1853 1854 .cart__footer { 1855 bottom: 91px; 1856 } 1857 1858 .scrolled-body .cart__footer { 1859 bottom: 60px; 1860 } 1861 1862 span.market-items-final-price { 1863 font-weight: 800; 1864 } 1865 1866 .subscription-product-container .subscription-free-shipping-msg a { 1867 color: #000 !important; 1868 } 1869 1870 .listing-loved-products::-webkit-scrollbar-track { 1871 -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); 1872 border-radius: 10px; 1873 background-color: #F5F5F5 !important; 1874 } 1875 1876 .listing-loved-products::-webkit-scrollbar { 1877 width: 6px; 1878 height: 6px; 1879 background-color: #F5F5F5 !important; 1880 } 1881 1882 .listing-loved-products::-webkit-scrollbar-thumb { 1883 border-radius: 10px; 1884 -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3); 1885 background-color: #BEBEBE !important; 1886 } 1887 1888 .header-version-2 .main-search-main{ 1889 position: absolute; 1890 top: 40%; 1891 transform: translateY(-50%); 1892 right: 29px; 1893 } 1894 .header-version-2 .main-search-main svg path{ 1895 fill: #000; 1896 } 1897 .header-version-2 .search__input-wrap { 1898 margin-top: 15px; 1899 } 1900 @media all and (max-width:1200px) { 1901 .cart__footer { 1902 bottom: 91px !important; 1903 } 1904 1905 } 1906 @media all and (max-width:576px) { 1907 .cart__footer { 1908 bottom: 57px !important; 1909 } 1910 .site-header__logo a { 1911 font-size: 29px !important; 1912 } 1913 .cart-open body { 1914 overflow: hidden !important; 1915 } 1916 .main-dualcart.subscription-product-container { 1917 margin-top: 13px; 1918} 1919 1920#HeaderWrapper .custom-page-width { 1921 max-width: 100%; 1922 padding: 0; 1923 position: relative; 1924} 1925} 1926 @media only screen and (max-width: 960px) { 1927 .mobile-nav-open .site-nav__link:not(.mobile-nav-trigger) { 1928 display: block; 1929 } 1930} 1931 @media only screen and (max-width: 768px) { 1932 .page-width.site-header__drawers { 1933 padding: 0 !important; 1934} 1935.header-item--logo { 1936 flex: 100 !important; 1937 justify-content: center !important; 1938} 1939} 1940body .cart-milestone .main-progress-bar-with-markups .floating-text-bottom * { 1941 font-family: 'Lato' !important; 1942 letter-spacing: 0.5px; 1943 text-align: center !important; 1944} 1945#note-wrap{ 1946 margin-bottom: 6px; 1947} 1948a.site-nav__link { 1949 padding-top: 26px; 1950 padding-bottom: 26px; 1951} 1952 1953 1954 .e-gift-heading-div{ 1955 margin-bottom: 0 !important; 1956 } 1957 .GmAddedContainer{ 1958 margin-bottom: 1.5rem; 1959 } 1960 1961 1962 1963 .header-section { 1964 position: sticky !important; 1965 } 1966 1967 1968 .is-light .site-header__element{ 1969 background: transparent !important; 1970 } 1971 1972 1973 1974 .GmAddedContainer{ 1975 margin-bottom: 0; 1976 } 1977 #note-wrap{ 1978 margin-bottom: 6px; 1979 } 1980.header-layout #search-icon-id { 1981 display: none; 1982 } 1983#announcement-banner-MKT #bannerBG , .subscribe-btn:before , .cart-link__bubble:before , #mbl-subscribe-overrides{ 1984 background-color: #b73d09 !important; 1985} 1986.subscribe-btn { 1987 color: #b73d09 !important; 1988 border: 1px solid #b73d09 !important; 1989} 1990.cart-link__bubble-num , #mbl-subscribe-overrides{ 1991color: #FFFFFF; 1992} 1993.cart__price:not(.cart__price--strikethrough){ 1994 color: #b73d09; 1995} 1996 1997 1998/* header dropdown styles */ 1999
2000/* a11y: nav button triggers â reset browser button defaults to match <a> styling */ 2001button.site-nav__link { 2002 -webkit-appearance: none; 2003 appearance: none; 2004 background: none; 2005 border: none; 2006 margin: 0; 2007 padding: 16px 20px; 2008 cursor: pointer; 2009 color: inherit; 2010 font-family: 'Montserrat', sans-serif !important; 2011 font-size: 12px !important; 2012 font-weight: 500 !important; 2013 letter-spacing: 2px !important; 2014 line-height: 18px; 2015 text-transform: uppercase; 2016 text-decoration: none; 2017 text-align: left; 2018 white-space: nowrap; 2019 display: inline-block; 2020 vertical-align: middle; 2021 } 2022 button.site-nav__link:focus-visible { 2023 outline: 2px solid currentColor; 2024 outline-offset: 2px; 2025 border-radius: 2px; 2026 } 2027 button.site-nav__link[aria-expanded="true"] .un-fl-submenu-icon-arrow-dj, 2028 button.site-nav__link[aria-expanded="true"] .dropdown-arrow { 2029 transform: rotate(225deg); 2030 } 2031.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 2032{ 2033 background-color:#F6F4F1; 2034 } 2035 .header-version-2 .site-nav__dropdown *{ 2036 color:#000000; 2037 } 2038 .header-version-2 .site-nav__dropdown .menu-shop-now{ 2039 color:#b73d09 !important ; 2040 } 2041 /* Subscribe button: desktop only (above 961px). Beats jQuery .show() inline style. */ 2042 @media (max-width: 961px) { 2043 #btn-subscribe-overrides { 2044 display: none !important; 2045 } 2046 } 2047 2048 2049</style> 2050 2051 2052 <style> 2053 .optimize-hidden{ 2054 display: none !important; 2055 } 2056 .site-nav__link { 2057 font-size: 13px; 2058 } 2059 2060 .site-nav__link { 2061 text-transform: uppercase; 2062 letter-spacing: 0.2em; 2063 } 2064 2065 2066 2067@media only screen and (max-width: 1100px) { 2068 .mob-cart-align { 2069 height: inherit !important; 2070 overflow: auto !important; 2071 background: #ffffff !important; 2072 } 2073 .empty-cart-main { 2074 padding-bottom: 0 !important; 2075 } 2076 } 2077 </style> 2078 2079 <div data-section-id="sections--17749310636118__header" data-section-type="header"> 2080 <div 2081 id="HeaderWrapper" 2082 class=" header-version-2 header-wrapper header-wrapper--overlay is-light " 2083 > 2084 <header 2085 id="SiteHeader" 2086 class="site-header" 2087 data-sticky="true" 2088 data-overlay=" true " 2089 > 2090 <div class="site-header__element site-header__element--top"> 2091 <div class="page-width custom-page-width"> 2092 <div 2093 class="header-layout" 2094 data-layout="below" 2095 data-nav="beside" 2096 data-logo-align="left" 2097 > 2098 <button 2099 type="button" 2100 aria-controls="MobileNav" 2101 aria-expanded="false" 2102 aria-label="Site navigation" 2103 class="site-nav__link site-nav__link--icon mobile-nav-trigger optimize-hidden" 2104 > 2105 <svg 2106 aria-hidden="true" 2107 focusable="false" 2108 role="presentation" 2109 class="icon icon-hamburger"
2110 viewBox="0 0 64 64" 2111 > 2112 <path class="cls-1" d="M7 15h51"/><path class="cls-1" d="M7 32h43"/><path class="cls-1" d="M7 49h51"/> 2113 </svg> 2114 <span class="icon__fallback-text">Site navigation</span> 2115 </button><button 2116 type="button" 2117 aria-controls="MobileNav" 2118 aria-expanded="false" 2119 aria-label="Site navigation" 2120 class="site-nav__link site-nav__link--icon medium-up--hide mobile-nav-trigger" 2121 > 2122 <svg 2123 aria-hidden="true" 2124 focusable="false" 2125 role="presentation" 2126 class="icon icon-hamburger" 2127 viewBox="0 0 64 64" 2128 > 2129 <path class="cls-1" d="M7 15h51"/><path class="cls-1" d="M7 32h43"/><path class="cls-1" d="M7 49h51"/> 2130 </svg> 2131 <span class="icon__fallback-text">Site navigation</span> 2132 </button><div class="header-item header-item--logo"><style data-shopify>.header-item--logo, 2133 [data-layout="left-center"] .header-item--logo, 2134 [data-layout="left-center"] .header-item--icons { 2135 flex: 0 1 120px; 2136 } 2137 2138 @media only screen and (min-width: 769px) { 2139 .header-item--logo, 2140 [data-layout="left-center"] .header-item--logo, 2141 [data-layout="left-center"] .header-item--icons { 2142 flex: 0 0 140px; 2143 } 2144 } 2145 2146 .site-header__logo a { 2147 width: 120px; 2148 } 2149 .is-light .site-header__logo .logo--inverted { 2150 width: 120px; 2151 } 2152 @media only screen and (min-width: 769px) { 2153 .site-header__logo a { 2154 width: 140px; 2155 } 2156 2157 .is-light .site-header__logo .logo--inverted { 2158 width: 140px; 2159 } 2160 }</style><div class="h1 site-header__logo" > 2161 <a 2162 href="/" 2163 aria-label="Bokksu â home" 2164 class="site-header__logo-link logo--has-inverted"> 2165 2166 2167 2168 2169 2170 2171 2172<image-element data-aos="image-fade-in"> 2173 2174 2175 2176 2177 <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"> 2178 2179 2180 2181</image-element> 2182 2183 2184 2185 2186 2187<image-element data-aos="image-fade-in"> 2188 2189 2190 2191 2192 <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"> 2193 2194 2195 2196</image-element> 2197 2198</a><a 2199 href="/" 2200 aria-label="Bokksu â home" 2201 class="site-header__logo-link logo--inverted"> 2202 2203 2204 2205 2206 2207 2208<image-element data-aos="image-fade-in"> 2209 2210 2211 2212 2213 <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;"> 2214 2215 2216 2217</image-element> 2218 2219 2220 2221 2222 2223<image-element data-aos="image-fade-in"> 2224 2225 2226 2227 2228 <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;"> 2229 2230 2231 2232</image-element> 2233 2234</a></div></div><div 2235 class="header-item header-item--navigation original-element" 2236 ><nav aria-label="Main navigation"> 2237<ul role="list" class="site-nav original-nav site-navigation site-navigation--beside small--hide"><li 2238 class="site-nav__item site-nav__expanded-item site-nav--has-dropdown site-nav--is-megamenu " 2239 ><button 2240 type="button" 2241 style="margin-bottom:-1px" 2242 class="hero__top-subtitle site-nav__link site-nav__link--underline site-nav__link--has-dropdown site-nav__dropdown-toggle" 2243 aria-haspopup="true" 2244 aria-expanded="false" 2245 > 2246 Shop 2247 2248 <i aria-hidden="true" class="un-fl-submenu-icon-arrow-dj"></i> 2249 2250 </button><div class="site-nav__dropdown megamenu text-left"> 2251 <div class="page-width"> 2252 <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" > 2253 <div class="megamenu__col" ><div class="megamenu__col-title" > 2254 2255 2256 2257 2258 2259 2260 2261 <div style="text-decoration:none" class="hero__top-subtitle site-nav__dropdown-link site-nav__dropdown-link--top-level" > 2262 Bokksu Snack Box 2263</div> 2264 2265 2266 </div> 2267 2268 <a href="/products/classic-bokksu" class="site-nav__dropdown-link"> 2269 Subscribe 2270 </a> 2271 2272 <a href="/products/gift-classic-bokksu" class="site-nav__dropdown-link"> 2273 Gift 2274 </a> 2275 2276 <a href="/pages/past-themes" class="site-nav__dropdown-link"> 2277 Past Themes 2278 </a></div><div class="megamenu__col"><div class="megamenu__col-title" > 2279 2280 2281 2282 2283 2284 2285 2286 <div style="text-decoration:none" class="hero__top-subtitle site-nav__dropdown-link site-nav__dropdown-link--top-level" > 2287 Bokksu Boutique 2288</div> 2289 2290 2291 </div> 2292 2293 <a href="https://bokksuboutique.com" class="site-nav__dropdown-link"> 2294 Shop Boutique 2295 </a></div><div class="megamenu__col"><div class="megamenu__col-title" > 2296 2297 2298 2299 2300 2301 2302 2303 <div style="text-decoration:none" class="hero__top-subtitle site-nav__dropdown-link site-nav__dropdown-link--top-level" > 2304 Gifts 2305</div> 2306 2307 2308 </div> 2309 2310 <a href="/products/gift-card" class="site-nav__dropdown-link"> 2311 Gift Cards 2312 </a> 2313 2314 <a href="https://www.bokksuboutique.com/pages/corporate-gifts" class="site-nav__dropdown-link"> 2315 Corporate Gifts 2316 </a></div> 2317</div></div> 2318 </div> 2319 </div></li><li 2320 class="site-nav__item About site-nav__expanded-item site-nav--has-dropdown site-nav--is-megamenu " 2321 ><button 2322 type="button" 2323 style="margin-bottom:-1px" 2324 class="hero__top-subtitle site-nav__link site-nav__link--underline site-nav__link--has-dropdown site-nav__dropdown-toggle" 2325 aria-haspopup="true" 2326 aria-expanded="false" 2327 > 2328 About 2329 2330 <i aria-hidden="true" class="un-fl-submenu-icon-arrow-dj"></i> 2331 2332 </button><div class="site-nav__dropdown megamenu text-left"> 2333 <div class="page-width"> 2334 <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" > 2335 <div class="megamenu__col" ><div class="megamenu__col-title" > 2336 2337 2338 2339 2340 2341 2342 2343 <div style="text-decoration:none" class="hero__top-subtitle site-nav__dropdown-link site-nav__dropdown-link--top-level" > 2344 About 2345</div> 2346 2347 2348 </div> 2349 2350 <a href="/pages/about" class="site-nav__dropdown-link"> 2351 Our Story 2352 </a> 2353 2354 <a href="/pages/our-makers" class="site-nav__dropdown-link"> 2355 Our Makers 2356 </a> 2357 2358 <a href="/pages/snack-bites-documentary" class="site-nav__dropdown-link"> 2359 Maker's Documentary 2360 </a></div><div class="megamenu__col"><div class="megamenu__col-title" > 2361 2362 2363 2364 2365 2366 2367 2368 <div style="text-decoration:none" class="hero__top-subtitle site-nav__dropdown-link site-nav__dropdown-link--top-level" > 2369 Support 2370</div> 2371 2372 2373 </div> 2374 2375 <a href="/pages/faq" class="site-nav__dropdown-link"> 2376 FAQ 2377 </a> 2378 2379 <a href="/pages/contact-us" class="site-nav__dropdown-link"> 2380 Contact Us 2381 </a></div><div class="megamenu__col"><div class="megamenu__col-title" > 2382 2383 2384 2385 2386 2387 2388 2389 <div style="text-decoration:none" class="hero__top-subtitle site-nav__dropdown-link site-nav__dropdown-link--top-level" > 2390 Information 2391</div> 2392 2393 2394 </div> 2395 2396 <a href="/blogs/news" class="site-nav__dropdown-link"> 2397 Our Blog 2398 </a> 2399 2400 <a href="/pages/bokksu-offers-discounts-coupons" class="site-nav__dropdown-link"> 2401 Today's Offers 2402 </a> 2403 2404 <a href="/pages/community" class="site-nav__dropdown-link"> 2405 Community 2406 </a> 2407 2408 <a href="/pages/careers" class="site-nav__dropdown-link"> 2409 Careers 2410 </a> 2411 2412 <a href="/pages/rewards" class="site-nav__dropdown-link"> 2413 Rewards 2414 </a> 2415 2416 <a href="/pages/rewards" class="site-nav__dropdown-link"> 2417 Refer a Friend 2418 </a></div> 2419</div></div> 2420 </div> 2421 </div></li><li 2422 class="site-nav__item site-nav__expanded-item site-nav--has-dropdown site-nav--is-megamenu " 2423 ><button 2424 type="button" 2425 style="margin-bottom:-1px" 2426 class="hero__top-subtitle site-nav__link site-nav__link--underline site-nav__link--has-dropdown site-nav__dropdown-toggle" 2427 aria-haspopup="true" 2428 aria-expanded="false" 2429 > 2430 Brands 2431 2432 <i aria-hidden="true" class="un-fl-submenu-icon-arrow-dj"></i> 2433 2434 </button><div class="site-nav__dropdown megamenu text-left"> 2435 <div class="page-width"> 2436 <div class="site-nav__dropdown-animate "><div > 2437 <div class="megamenu__col" style="display:flex;justify-content:space-around" ><div class="megamenu__col-title" style="text-align:center"> 2438 2439 <a style="pointer-events: none;" href="/" target="_blank" class="site-nav__dropdown-link site-nav__dropdown-link--top-level"> 2440 2441 <img 2442 class="small--hide" 2443 style="height:90px; width:100px" 2444 src="//bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Stacked_Filled_Orange_200x.png?v=1750968760" 2445 srcset="//bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Stacked_Filled_Orange_200x.png?v=1750968760 2x" alt="Bokksu Premium Snack Box"> 2446 <p class="max-column-width" style="color:grey"> Premium subscription box sourcing Japanese snacks from centuries-old family makers.</p> 2447 <a target="_blank" class="menu-shop-now" href="https://bokksu.com/products/classic-bokksu"> <div style=""></div>SHOP NOW</a> 2448 </a> 2449 2450 2451 2452 2453 2454 2455 2456 2457 </div><div class="megamenu__col-title" style="text-align:center"> 2458 2459 2460 2461 <a target="_blank" href="https://bokksuboutique.com" class="site-nav__dropdown-link site-nav__dropdown-link--top-level"> 2462 2463 <img 2464 class="small--hide" 2465 style="height:90px; width:100px" 2466 src="//bokksu.com/cdn/shop/files/BokksuBoutique_Logo_Stacked_Filled_Blue_200x.png?v=1750968708" 2467 srcset="//bokksu.com/cdn/shop/files/BokksuBoutique_Logo_Stacked_Filled_Blue_200x.png?v=1750968708 2x" alt="Bokksu Snack Boutique"> 2468 <p class="max-column-width"> Specialty and gourmet gifts for every occasion, all made and shipped from Japan. </p> 2469 <a target="_blank" class="menu-shop-now" href="https://bokksuboutique.com/"><div style=""></div> SHOP NOW</a> 2470 </a> 2471 2472 2473 2474 2475 2476 2477 </div><div class="megamenu__col-title" style="text-align:center"> 2478 2479 2480 2481 2482 <a href="https://bokksumarket.com" target="_blank" class="site-nav__dropdown-link site-nav__dropdown-link--top-level"> 2483 <img 2484 class="small--hide" 2485 style="height:90px; width:100px;" 2486 src="//bokksu.com/cdn/shop/files/BokksuMarket_Logo_Stacked_Filled_Green_200x.png?v=1750968741" 2487 srcset="//bokksu.com/cdn/shop/files/BokksuMarket_Logo_Stacked_Filled_Green_200x.png?v=1750968741 2x" alt="Bokksu Asian grocery market"> 2488 <p class="max-column-width"> Online Asian grocery store delivering pantry items, frozen foods, beverages, and more. </p> 2489 <a target="_blank" class="menu-shop-now" href="https://bokksumarket.com"> <div style=""></div> SHOP NOW</a> 2490 </a> 2491 2492 2493 2494 2495 2496 2497 </div></div> 2498</div></div> 2499 </div> 2500 </div></li></ul> 2501</nav> 2502 2503 2504</div><div class="header-item header-item--icons"> 2505 <div class="subscribe-button-wrapper optimize-hidden"> 2506 <a 2507 href="/products/classic-bokksu" 2508 id="subscribe-button" 2509 class="btn-custom subscribe-btn custom-subscribe-button optim
2509ize-hidden cart-empty" 2510 aria-labelledby="subscribe-button-label" 2511 >SUBSCRIBE <span class="small--hide">NOW</span> 2512 <span class="visually-hidden" id="subscribe-button-label">Subscribe now â Classic Bokksu Snack Box</span> 2513 </a> 2514 </div><div class="site-nav"> 2515 <div class="site-nav__icons"> 2516 <a href="/search?q=&type=product" id="search-icon-id" class="site-nav__link site-nav__link--icon js-search-header js-no-transition"> 2517 <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> 2518 <span class="icon__fallback-text">Search</span> 2519 </a> 2520 2521 <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> 2522 2523<a class="site-nav__link site-nav__link--icon small--hide site-nav__link-v2" href="/account" aria-label="My account"> 2524 <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> 2525 <span class="site-nav__icon-label small--hide icon__fallback-text" aria-hidden="true"> 2526 Account 2527 </span> 2528 </a><button 2529 id="HeaderCartTrigger" 2530 aria-controls="HeaderCart" 2531 class="cart-items-new mini-cart site-nav__link site-nav__link-v2 site-nav__link--icon js-no-transition cart-empty" 2532 data-icon="cart" 2533 aria-label="Cart, 0 items" 2534 > 2535 <span class="cart-link"> 2536 <svg class="icon jpc-cart-icon" xmlns="http://www.w3.org/2000/svg" width="27" height="26" viewBox="0 0 27 26" fill="none"> 2537 <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"/> 2538 <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"/> 2539 <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"/> 2540 </svg> 2541 2542<span class="cart-link__bubble" aria-hidden="true"> 2543 <span class="cart-link__bubble-num">0</span> 2544 </span> 2545 </span> 2546 <span class="site-nav__icon-label small--hide icon__fallback-text" aria-hidden="true"> 2547 Cart 2548 </span> 2549 </button> 2550 2551 2552 2553 </div> 2554 2555 <div class="site-nav__close-cart"> 2556 <button type="button" class="site-nav__link site-nav__link--icon js-close-header-cart" aria-label="Close shopping cart"> 2557 <span>Close</span> 2558 <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> 2559 </button> 2560 </div> 2561 2562</div> 2563</div> 2564 </div> 2565 </div> 2566 2567 <div class="site-header__search-container"> 2568 <div class="page-width"> 2569 <div class="site-header__search"><style> 2570 .predictive-overflow-hidden { 2571 /*overflow: hidden;*/ 2572 2573 @media (--small) { 2574 overflow: auto; 2575 } 2576 } 2577 2578 predictive-search { 2579 display: flex; 2580 align-items: center; 2581 position: relative; 2582 width: 100%; 2583 max-width: 960px; 2584 margin: 0 auto; 2585 2586 &.is-active { 2587 flex: 99; 2588 } 2589 2590 &.is-active .predictive__screen { 2591 display: block; 2592 z-index: 3; 2593 } 2594 2595 &.is-active .btn--close-search { 2596 display: flex; 2597 align-items: center; 2598 justify-content: center; 2599 } 2600 &.is-active .btn--close-search1 { 2601 display: flex; 2602 align-items: center; 2603 justify-content: center; 2604 } 2605 } 2606 2607 [data-dark='true'] { 2608 & input { 2609 color: #fff !important; 2610 } 2611 2612 & .btn--search path { 2613 stroke: #fff !important; 2614 } 2615 } 2616 2617 [data-dark='false'] { 2618 & input { 2619 color: #000 !important; 2620 } 2621 2622 & .btn--search path { 2623 stroke: #000 !important; 2624 } 2625 } 2626 2627 .predictive__screen { 2628 position: fixed; 2629 width: 100vw; 2630 height: 100vh; 2631 top: 0; 2632 left: 0; 2633 background: rgba(0, 0, 0, 0.5); 2634 display: none; 2635 } 2636 2637 predictive-search form { 2638 display: flex; 2639 flex-wrap: wrap; 2640 z-index: 4; 2641 position: relative; 2642 width: 100%; 2643 } 2644 2645 .search__input-wrap { 2646 position: relative; 2647 flex: 5; 2648 transition: flex 0.3s ease-in-out; 2649 } 2650 2651 .search__input { 2652 background: var(--colorNavSearch, #fff); 2653 color: var(--color-body-text); 2654 flex: 1; 2655 width: 100%; 2656 border-radius: calc(var(--roundness, 0) * 2); 2657 } 2658 2659 .btn--search { 2660 position: absolute; 2661 top: 50%; 2662 transform: translateY(-50%); 2663 right: 15px; 2664 2665 & .icon { 2666 height: 25px; 2667 width: 25px; 2668 } 2669 2670 @media (--medium-up) { 2671 right: 10px; 2672 } 2673 } 2674 2675 .btn--close-search { 2676 display: none; 2677 flex: 30px 0 0; 2678 margin-left: 10px; 2679 2680 & .icon { 2681 height: 25px; 2682 width: 25px; 2683 } 2684 2685 & .icon path { 2686 stroke: var(--colorNavText) !important; 2687 } 2688 } 2689 2690 .btn--close-search1 { 2691 display: none; 2692 flex: 30px 0 0; 2693 margin-left: 10px; 2694 2695 & .icon { 2696 height: 25px; 2697 width: 25px; 2698 } 2699 2700 & .icon path { 2701 stroke: var(--colorNavText) !important; 2702 } 2703 } 2704 2705 .search__results { 2706 background: var(--color-body); 2707 color: var(--color-body-text); 2708 position: absolute; 2709 width: 100%; 2710 top: 100%; 2711 padding: 0; 2712 display: none; 2713 margin-top: 10px; 2714 container-type: inline-size; 2715 max-height: 80vh; 2716 overflow-y: auto; 2717 2718 @media (--small) { 2719 width: calc(100% + var(--pageWidthPadding, 17px) * 2); 2720 margin-left: calc(var(--pageWidthPadding, 17px) * -1); 2721 margin-right: calc(var(--pageWidthPadding, 17px) * -1); 2722 max-height: 75vh; 2723 2724 @nest .template-search .page-content & { 2725 max-height: 50vh; 2726 } 2727 } 2728 } 2729 2730 .results { 2731 padding: 0 20px 20px; 2732 display: block; 2733 width: 100%; 2734 2735 & ul { 2736 list-style: none; 2737 padding: 0; 2738 margin: 0; 2739 } 2740 2741 & li { 2742 transition: background 0.2s ease; 2743 margin-bottom: 0; 2744 2745 &:hover { 2746 background: rgba(0, 0, 0, 0.05); 2747 } 2748 2749 & a { 2750 display: flex; 2751 align-items: center; 2752 } 2753 } 2754 } 2755 2756 .results--queries { 2757 & span { 2758 font-weight: bolder; 2759 } 2760 2761 & mark { 2762 background-color: transparent; 2763 font-weight: normal; 2764 } 2765 } 2766 2767 .results--products span { 2768 margin-left: 10px; 2769 } 2770 2771 .results-products__image { 2772 width: 100%; 2773 min-width: 80px; 2774 max-width: 80px; 2775 height: 80px; 2776 } 2777 2778 .results-products__info { 2779 display: flex; 2780 flex-direction: column; 2781 font-size: 13px !important; 2782 } 2783 2784 .predictive-search-results { 2785 display: flex; 2786 flex-wrap: wrap; 2787 flex-direction: column; 2788 overflow-y: auto; 2789 padding: 40px 0 0; 2790 2791 & h3 { 2792 padding-bottom: 10px; 2793 border-bottom: 1px solid; 2794 border-color: var(--colorBorder); 2795 margin-bottom: 10px; 2796 font-family: 'Montserrat', sans-serif !important; 2797 font-size: 14px !important; 2798 font-weight: 600 !important; 2799 letter-spacing: 1px !important; 2800 } 2801 } 2802 2803 .predictive-search-results--none { 2804 padding-top: 20px; 2805 } 2806 2807 .predictive-search__no-results { 2808 display: block; 2809 width: 100%; 2810 2811 &:hover { 2812 opacity: 0.5; 2813 } 2814 } 2815 2816 .results__group-1 { 2817 flex: 100% 0 0; 2818 2819 & >
2819 div:not(.results--queries) { 2820 display: none; 2821 } 2822 } 2823 2824 .results__group-2 { 2825 flex: 100% 0 0; 2826 } 2827 2828 .results__search-btn { 2829 width: 100%; 2830 padding: 10px; 2831 transition: background-color 0.2s ease; 2832 border: 1px solid; 2833 border-color: var(--colorBorder); 2834 2835 &:hover { 2836 background-color: rgba(0, 0, 0, 0.05); 2837 } 2838 } 2839 2840 /* Containers 2841 ============================== */ 2842 2843 @container (min-width: 800px) { 2844 .predictive-search-results { 2845 flex-direction: row; 2846 flex-wrap: nowrap; 2847 } 2848 2849 .results { 2850 padding: 0 40px 20px; 2851 } 2852 2853 .results__group-1 { 2854 flex: 1 0 0; 2855 2856 & div:not(.results--queries) { 2857 display: block; 2858 } 2859 } 2860 2861 .results__group-2 { 2862 flex: 2 0 0; 2863 2864 & > div:not(.results--products) { 2865 display: none; 2866 } 2867 } 2868 2869 .results__search-btn { 2870 text-align: left; 2871 padding: 10px 0 10px 40px; 2872 } 2873 } 2874 2875 /* 2876 .workaround { 2877 border-bottom: 1px solid var(--colorBorder); 2878 } 2879 */ 2880</style><predictive-search 2881 data-context="header" 2882 data-enabled="false" 2883 data-dark="false" 2884><div class="predictive__screen" data-screen aria-hidden="true"></div> 2885 <form 2886 action="/search" 2887 method="get" 2888 role="search" 2889 id="search-form" 2890 > 2891 <label for="Search" class="hidden-label">Search</label> 2892 <div class="search__input-wrap align-new-search"> 2893 <input 2894 class="search__input" 2895 id="Search" 2896 type="search" 2897 name="q" 2898 value="" 2899 role="combobox" 2900 aria-expanded="false" 2901 aria-owns="predictive-search-results" 2902 aria-controls="predictive-search-results" 2903 aria-haspopup="listbox" 2904 aria-autocomplete="list" 2905 autocorrect="off" 2906 autocomplete="off" 2907 autocapitalize="off" 2908 spellcheck="false" 2909 placeholder="Search premium Japanese products" 2910 tabindex="0" 2911 > 2912 <input 2913 name="options[prefix]" 2914 type="hidden" 2915 value="last" 2916 > 2917 <button class="search-icon-new 22" type="submit"> 2918 <div class="main-search-main" aria-hidden="true"> 2919 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" aria-hidden="true" focusable="false"> 2920 <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> 2921 </svg> 2922 </div> 2923 <span class="icon__fallback-text">Search</span> 2924 </button> 2925 </div><button type="button" class="btn--close-search btn--close-search1" aria-label="Close"> 2926 <svg 2927 aria-hidden="true" 2928 focusable="false" 2929 role="presentation" 2930 class="icon icon-close"
2931 viewBox="0 0 64 64" 2932 > 2933 <defs> 2934 <style> 2935 .cls-1 { 2936 fill: none; 2937 stroke: #fff !important; 2938 stroke-miterlimit: 10; 2939 stroke-width: 2px 2940 } 2941 </style> 2942 </defs><path class="cls-1" d="M19 17.61l27.12 27.13m0-27.13L19 44.74" /> 2943 </svg> 2944 </button> 2945 <div 2946 id="predictive-search" 2947 class="search__results" 2948 tabindex="-1" 2949 ></div> 2950 </form> 2951</predictive-search>
2952<script> 2953 $(document).ready(function () { 2954 if ('https://bokksu.com'.includes('bokksu.com') || 'https://bokksu.com'.includes('snb-hashii') ) { 2955 if ('index'.includes('product') && ''.includes('Box')) { 2956 $('#search-icon-id').css('display', 'none'); 2957 $('#btn-subscribe-overrides').hide(); 2958 $('#subscribe_btn_mob').css('display', 'none'); 2959 } else if ( 2960 'index'.includes('blog') || 2961 'index'.includes('article') || 2962 location.href.includes('type=article') 2963 ) { 2964 $('#search-type').attr('value', 'article'); 2965 $('.search-type').attr('value', 'article'); 2966 $('#search-icon-id').css('display', 'block'); 2967 $('#search-icon-id').css('cursor', 'pointer'); 2968 $('#TopSearched').hide(); 2969 } else if ( 2970 location.toString().includes('subscription') || 2971 location.toString().endsWith('/products/classic-bokksu') || 2972 location.toString().includes('/collections') || 2973 location.toString().includes('/products') 2974 ) { 2975 $('#search-icon-id').css('display', 'block'); 2976 $('#search-icon-id').css('cursor', 'pointer'); 2977 $('#btn-subscribe-overrides').hide(); 2978 $('.site-header__search-form').css('display', 'block'); 2979 $('#subscribe_btn_mob').css('display', 'none'); 2980 } else { 2981 window.innerWidth > 961 && $('#btn-subscribe-overrides').show(); 2982 $('#search-icon-id').css('display', 'none'); 2983 $('#search-icon-id').css('cursor', 'unset'); 2984 $('.site-header__search-form').css('display', 'none'); 2985 $('#subscribe_btn_mob').css('display', 'flex'); 2986 } 2987 } else { 2988 if ('index'.includes('blog') || 'index'.includes('article')) { 2989 $('#search-type').attr('value', 'article'); 2990 $('#TopSearched').hide(); 2991 } 2992 } 2993 }); 2994</script>
2994 2995<button type="button" class="text-link site-header__search-btn site-header__search-btn--cancel"> 2996 <span class="medium-up--hide"> 2997 <svg 2998 aria-hidden="true" 2999 focusable="false" 3000 role="presentation" 3001 class="icon icon-close" 3002 viewBox="0 0 64 64" 3003 > 3004 <path d="m19 17.61 27.12 27.13m0-27.13L19 44.74" style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:2px"/> 3005 </svg> 3006 </span> 3007 <span class="small--hide">Cancel</span> 3008 </button> 3009 </div> 3010 </div> 3011 </div> 3012 </div><div class="page-width site-header__drawers"> 3013 <div class="site-header__drawers-container"> 3014 <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"> 3015 <div class="mob-cart-align"> 3016 <div class="align-main-cart-customer"> 3017 <div class="site-header__drawer-animate"><button 3018 type="button" 3019 class="cart-drawer__close js-close-header-cart visually-hidden" 3020 aria-label="Close shopping cart" 3021> 3022 Close shopping cart 3023</button> 3024<form 3025 action="/cart" 3026 method="post" 3027 novalidate 3028 data-location="header" 3029 class="cart__drawer-form customer-cart"> 3030 <div class="cart__scrollable"> 3031 <div data-products> 3032 3033 <div></div> 3034 </div> 3035 3036 3037 <!---cart notes here --> 3038 3039 3040 <div class="cart-upsell" data-cart-upsell><div class="cart-upsell__container" role="group" aria-label="Premium packaging options"> 3041 <h3 class="cart-upsell__heading">MAKE IT SPECIAL</h3> 3042 <p class="cart-upsell__subheading">Enhance your gift with premium packaging options</p> 3043 3044 <div class="cart-upsell__cards-wrapper"> 3045 <button type="button" class="cart-upsell__nav-button cart-upsell__nav-button--prev" aria-label="Previous product" style="display: none;"> 3046 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 3047 <path d="M15 18l-6-6 6-6"/> 3048 </svg> 3049 </button><!-- Grid wrapper for all products --> 3050 <div class="cart-upsell__cards has-two-products" data-carousel><div class="cart-upsell__card-wrapper" data-product-id="7675567538262" data-variant-id="43471000862806"> 3051 <div class="cart-upsell__card" aria-hidden="true"> 3052 <div class="cart-upsell__card-header"> 3053 <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"> 3054</div> 3055 <div class="cart-upsell__card-text-wrapper"> 3056 <h4 class="cart-upsell__card-title">Gift Wrapping + Card</h4> 3057 <p class="cart-upsell__card-description">Expert Japanese-style wrapping with personalized card.</p> 3058 </div> 3059 </div> 3060 <ul class="cart-upsell__card-features"> 3061 <li class="feature-ribbon">Premium ribbon.</li> 3062 <li class="feature-card">Personalized card.</li> 3063 </ul> 3064 </div> 3065 <div class="cart-upsell__form" data-upsell-form data-has-gift-popup="true" 3066 data-variant-id="43471000862806" 3067 data-product-tags="hidden product,NOAPPDISC,personalized-card"> 3068
3068<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>
3068 3069 <button type="button" class="cart-upsell__card-button" 3070 data-variant-id="43471000862806" 3071 aria-label="Add gift wrapping and personalized card for $15.00"> 3072 <span class="cart-upsell__button-icon" aria-hidden="true">+</span> 3073 <span class="cart-upsell__button-text">Add Gift Wrapping</span> 3074 <span class="cart-upsell__button-price">$15.00</span> 3075 </button> 3076 </div> 3077 </div><div class="cart-upsell__card-wrapper" data-product-id="7676028715094" data-variant-id="43472486301782"> 3078 <div class="cart-upsell__card" aria-hidden="true"> 3079 <div class="cart-upsell__card-header"> 3080 <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"> 3081</div> 3082 <div class="cart-upsell__card-text-wrapper"> 3083 <h4 class="cart-upsell__card-title">Washi Box</h4> 3084 <p class="cart-upsell__card-description">Upgrade to elegant Japanese washi box packaging.</p> 3085 </div> 3086 </div> 3087 <ul class="cart-upsell__card-features"> 3088 <li class="feature-premium">Premium presentation.</li> 3089 <li class="feature-special">Special packaging.</li> 3090 </ul> 3091 </div> 3092 <div class="cart-upsell__form" data-upsell-form data-has-gift-popup="false" 3093 data-variant-id="43472486301782" 3094 data-product-tags="hidden product,hide_btq_search,washi-box"> 3095 <button type="button" class="cart-upsell__card-button" 3096 data-variant-id="43472486301782" 3097 aria-label="Upgrade to Washi Box for $20.00"> 3098 <span class="cart-upsell__button-icon" aria-hidden="true">+</span> 3099 <span class="cart-upsell__button-text">Upgrade to Washi Box</span> 3100 <span class="cart-upsell__button-price">$20.00</span> 3101 </button> 3102 </div> 3103 </div></div> 3104 <button type="button" class="cart-upsell__nav-button cart-upsell__nav-button--next" aria-label="Next product" style="display: none;"> 3105 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 3106 <path d="M9 18l6-6-6-6"/> 3107 </svg> 3108 </button> 3109 </div> 3110 3111 <p class="cart-upsell__disclaimer">Gift wrapping paper design may vary.</p> 3112 </div></div> 3113
3114<script> 3115 document.addEventListener('DOMContentLoaded', function() { 3116 const cartItems = []; 3117 3118 let hasUpsellProduct1 = false; 3119 let hasUpsellProduct2 = false; 3120 const upsellProductIds = []; 3121 3122 3123 upsellProductIds.push(7675567538262); 3124 3125 3126 upsellProductIds.push(7676028715094); 3127 3128 3129 for (let item of cartItems) { 3130 if (upsellProductIds.includes(item.product_id)) { 3131 3132 if (item.product_id === 7675567538262) { 3133 hasUpsellProduct1 = true; 3134 } 3135 3136 3137 if (item.product_id === 7676028715094) { 3138 hasUpsellProduct2 = true; 3139 } 3140 3141 } 3142 } 3143 3144 if (!hasUpsellProduct1 && (null || null || null || null)) { 3145 fetch('/cart/update.js', { 3146 method: 'POST', 3147 headers: { 'Content-Type': 'application/json' }, 3148 body: JSON.stringify({ 3149 attributes: { 3150 'recepient': '', 3151 'sender': '', 3152 'gift_note': '', 3153 'gift_option': '' 3154 } 3155 }) 3156 }).catch(function(err) { 3157 console.error('Failed to clear cart attributes:', err); 3158 }); 3159 } 3160 }); 3161</script>
3161 3162 3163<div id="gift-card-popup" class="gift-card-popup" style="display: none;"> 3164 <div class="gift-card-popup__overlay"></div> 3165 <div class="gift-card-popup__content"> 3166 <div class="gift-card-popup__header"> 3167 <h3>Personalize Your Gift!</h3> 3168 <button type="button" class="gift-card-popup__close" aria-label="Close">×</button> 3169 </div> 3170 <div class="gift-card-popup__body"> 3171 <p class="gift-card-popup__subtitle">Choose how you'd like to personalize your gift card</p> 3172 3173 <div class="gift-card-popup__options"> 3174 <label class="gift-option-label"> 3175 <input type="radio" name="gift_option" value="blank" class="gift-option-radio" checked> 3176 <div class="gift-option-content"> 3177 <strong>Leave card blank</strong> 3178 <p>No message will be included</p> 3179 </div> 3180 </label> 3181 3182 <label class="gift-option-label"> 3183 <input type="radio" name="gift_option" value="standard" class="gift-option-radio"> 3184 <div class="gift-option-content"> 3185 <strong>Include our standard message</strong> 3186 <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> 3187 </div> 3188 </label> 3189 3190 <label class="gift-option-label"> 3191 <input type="radio" name="gift_option" value="custom" class="gift-option-radio"> 3192 <div class="gift-option-content"> 3193 <strong>Write a custom message</strong> 3194 <p>Add your personal touch with a custom message</p> 3195 </div> 3196 </label> 3197 </div> 3198 3199 <div id="custom-message-fields" class="custom-message-fields" style="display: none;"> 3200 <div class="gift-card-popup__field"> 3201 <label for="gift-card-to">To (Recipient Name) <span class="required">*</span></label> 3202 <input type="text" id="gift-card-to" name="gift-card-to" placeholder="Recipient's name" maxlength="100"> 3203 </div> 3204 <div class="gift-card-popup__field"> 3205 <label for="gift-card-message">Gift Message <span class="required">*</span></label> 3206 <textarea id="gift-card-message" name="gift-card-message" placeholder="Write your heartfelt message here..." 3207 rows="4" maxlength="200"></textarea> 3208 <div class="gift-card-popup__char-counter" id="gift-card-char-counter">0/200</div> 3209 </div> 3210 <div class="gift-card-popup__field"> 3211 <label for="gift-card-from">From (Sender Name) <span class="required">*</span></label> 3212 <input type="text" id="gift-card-from" name="gift-card-from" placeholder="Your name" maxlength="100"> 3213 </div> 3214 </div> 3215 3216 <div id="gift-card-preview" class="gift-card-preview" style="display: none;"> 3217 <div class="gift-card-preview__card"> 3218 <div class="gift-card-preview__content"> 3219 <div class="gift-card-preview__to"> 3220 <span class="gift-card-preview__value">To</span> 3221 <span class="gift-card-preview__value" id="previewRecipient">Recipient's name</span> 3222 </div> 3223 <div class="gift-card-preview__message" id="previewMessage"> 3224 Your gift message will appear here... 3225 </div> 3226 <div class="gift-card-preview__from"> 3227 <span class="gift-card-preview__value">From</span> 3228 <span class="gift-card-preview__value" id="previewSender">Your name</span> 3229 </div> 3230 </div> 3231 </div> 3232 </div> 3233 </div> 3234 <div class="gift-card-popup__footer"> 3235 <button type="button" class="btn gift-card-popup__cancel">Cancel</button> 3236 <button type="button" class="btn gift-card-popup__save">Save</button> 3237 </div> 3238 </div> 3239</div> 3240 3241<style> 3242 .gift-card-popup__field input::placeholder { 3243 color: #101010 !important; 3244} 3245.gift-card-popup__footer { 3246 display: flex; 3247 gap: 10px; 3248 padding-bottom: 20px; 3249 justify-content: space-between; 3250 max-width: calc(100% - 53px); 3251 margin: auto; 3252} 3253 .cart-upsell { 3254 margin: 12px 0; 3255 background: #fff; 3256 border-radius: 16px; 3257 padding: 0; 3258 position: relative; 3259 max-width: initial !important; 3260 box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); 3261 } 3262 3263 .cart-upsell__container { 3264 padding: 16px; 3265 } 3266 3267 .cart-upsell__heading { 3268 margin: 0 0 6px; 3269 font-size: 1rem; 3270 color: #101010; 3271 text-align: left; 3272 letter-spacing: 0.5px; 3273 text-transform: uppercase; 3274 font-weight: 600; 3275 } 3276 3277 .cart-upsell__subheading { 3278 margin: 0 0 16px; 3279 font-size: 0.85rem; 3280 color: #606060; 3281 text-align: left; 3282 line-height: 1.5; 3283 } 3284 3285 .cart-upsell__cards-wrapper { 3286 position: relative; 3287 margin-bottom: 12px; 3288 width: 100%; 3289 overflow: visible; 3290 } 3291 3292 3293 .cart-upsell__cards { 3294 display: flex; 3295 overflow-x: auto; 3296 overflow-y: hidden; 3297 scroll-snap-type: x mandatory; 3298 gap: 12px; 3299 scrollbar-width: none; /* Firefox */ 3300 -ms-overflow-style: none; /* IE and Edge */ 3301 -webkit-overflow-scrolling: touch; /* iOS */ 3302 scroll-behavior: smooth; 3303 touch-action: pan-x; 3304 width: 100%; 3305 } 3306 3307 .cart-upsell__cards::-webkit-scrollbar {
3308 display: none; /* Chrome, Safari, Opera */ 3309 } 3310 3311 /* Desktop: Side by side for 2 products without scrolling */ 3312 @media (min-width: 769px) { 3313 .cart-upsell__cards.has-two-products { 3314 display: flex; 3315 flex-direction: row; 3316 overflow-x: visible; 3317 overflow-y: visible; 3318 scroll-snap-type: none; 3319 gap: 12px; 3320 } 3321 } 3322 3323 .cart-upsell__card-wrapper { 3324 flex: 0 0 100%; 3325 scroll-snap-align: start; 3326 min-width: 0; 3327 box-sizing: border-box; 3328 display: flex; 3329 flex-direction: column; 3330 gap: 12px; 3331 } 3332 3333 /* Desktop: Each card takes 50% width to fit both in viewport */ 3334 @media (min-width: 769px) { 3335 .cart-upsell__cards.has-two-products .cart-upsell__card-wrapper { 3336 flex: 1; 3337 min-width: 0; 3338 max-width: calc(50% - 6px); 3339 } 3340 } 3341 3342 .cart-upsell__card { 3343 background: #F5F5F5; 3344 border-radius: 12px; 3345 padding: 10px; 3346 display: flex; 3347 flex-direction: column; 3348 gap: 10px; 3349 } 3350 3351 .cart-upsell__card-header { 3352 display: flex; 3353 gap: 10px; 3354 align-items: flex-start; 3355 } 3356 3357 .cart-upsell__card-image-wrapper { 3358 width: 60px; 3359 height: 60px; 3360 border-radius: 8px; 3361 overflow: hidden; 3362 background: transparent; 3363 display: flex; 3364 align-items: center; 3365 justify-content: center; 3366 flex-shrink: 0; 3367 } 3368 3369 .cart-upsell__card-text-wrapper { 3370 display: flex; 3371 flex-direction: column; 3372 flex: 1; 3373 min-width: 0; 3374 } 3375 3376 .cart-upsell__form { 3377 width: 100%; 3378 } 3379 3380 .cart-upsell__card-image { 3381 width: 100%; 3382 height: 100%; 3383 object-fit: cover; 3384 border-radius: 8px; 3385 display: block; 3386 margin: 0; 3387 max-width: none; 3388 } 3389 3390 .cart-upsell__card-title { 3391 margin: 0 0 4px; 3392 font-size: 0.9rem; 3393 color: #101010; 3394 font-weight: 600; 3395 text-align: left; 3396 line-height: 1.3; 3397 letter-spacing: 1px !important; 3398 } 3399 3400 .cart-upsell__card-description { 3401 margin: 0; 3402 font-size: 0.75rem; 3403 color: #606060; 3404 line-height: 1.4; 3405 text-align: left; 3406 } 3407 3408 .cart-upsell__card-features { 3409 list-style: none; 3410 padding: 0; 3411 margin: 0; 3412 display: flex; 3413 flex-direction: column; 3414 width: 100%; 3415 } 3416 3417 .cart-upsell__card-features li { 3418 font-size: 0.75rem; 3419 color: #606060; 3420 line-height: 1.3; 3421 position: relative; 3422 padding-left: 24px; 3423 margin-bottom: 4px; 3424 display: flex; 3425 align-items: center; 3426 } 3427 3428 .cart-upsell__card-features li:last-child { 3429 margin-bottom: 0; 3430 } 3431 3432 .cart-upsell__card-features li::before { 3433 content: ''; 3434 position: absolute; 3435 left: 0; 3436 width: 18px; 3437 height: 18px; 3438 background-size: contain; 3439 background-repeat: no-repeat; 3440 background-position: center; 3441 } 3442 3443 /* Individual icon styles */ 3444 .cart-upsell__card-features .feature-wrapping::before { 3445 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>'); 3446 } 3447 3448 .cart-upsell__card-features .feature-ribbon::before { 3449 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>'); 3450 } 3451 3452 .cart-upsell__card-features .feature-card::before { 3453 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>'); 3454 } 3455 3456 .cart-upsell__card-features .feature-box::before { 3457 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>'); 3458 } 3459 3460 .cart-upsell__card-features .feature-premium::before { 3461 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>'); 3462 } 3463 3464 .cart-upsell__card-features .feature-special::before { 3465 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>'); 3466 } 3467 3468 .cart-upsell__card-button { 3469 width: 100%; 3470 background: transparent; 3471 border: 1px solid var(--cta_outline_primary_static); 3472 border-radius: 8px; 3473 padding: 10px 12px; 3474 font-size: 11px; 3475 font-weight: 600; 3476 color: var(--cta_outline_primary_static); 3477 cursor: pointer; 3478 transition: all 0.2s ease; 3479 display: flex; 3480 align-items: center; 3481 justify-content: space-between; 3482 font-family: var(--button_font_family, inherit); 3483 margin-top: auto; 3484 min-height: 44px; 3485 gap: initial; 3486 box-sizing: border-box; 3487 } 3488 3489 .cart-upsell__card-button:hover { 3490 background: var(--cta_outline_primary_static); 3491 color: #fff; 3492 } 3493 3494 .cart-upsell__card-button:focus { 3495 outline: 2px solid var(--cta_outline_primary_static); 3496 outline-offset: 2px; 3497 } 3498 3499 .cart-upsell__card-button .cart-upsell__button-icon { 3500 font-size: 0.9rem; 3501 font-weight: 400; 3502 margin-right: 4px; 3503 } 3504 3505 .cart-upsell__button-text { 3506 flex: 1; 3507 text-align: left; 3508 } 3509 3510 .cart-upsell__button-price { 3511 font-weight: 600; 3512 } 3513 3514 .cart-upsell__nav-button { 3515 position: absolute; 3516 top: 50%; 3517 transform: translateY(-50%); 3518 background: #fff; 3519 border: 1px solid #e1e1e1; 3520 border-radius: 50%; 3521 width: 40px; 3522 height: 40px; 3523 display: flex; 3524 align-items: center; 3525 justify-content: center; 3526 cursor: pointer; 3527 z-index: 2; 3528 transition: all 0.2s ease; 3529 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); 3530 color: #101010; 3531 } 3532 3533 .cart-upsell__nav-button:hover:not(:disabled) { 3534 background: #f5f5f5; 3535 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 3536 transform: translateY(-50%) scale(1.05); 3537 } 3538 3539 .cart-upsell__nav-button:focus { 3540 outline: 2px solid var(--cta_outline_primary_static); 3541 outline-offset: 2px; 3542 } 3543 3544 .cart-upsell__nav-button:disabled { 3545 opacity: 0.3;
3546 cursor: not-allowed; 3547 } 3548 3549 .cart-upsell__nav-button--prev { 3550 left: 5px; 3551 } 3552 3553 .cart-upsell__nav-button--next { 3554 right: 5px; 3555 } 3556 3557 .cart-upsell__disclaimer { 3558 margin: 12px 0 0; 3559 font-size: 0.7rem; 3560 color: #606060; 3561 text-align: center; 3562 font-style: normal; 3563 } 3564 3565 .gift-card-popup { 3566 position: fixed; 3567 top: 0; 3568 left: 0; 3569 width: 100%; 3570 height: 100%; 3571 z-index: 999999; 3572 display: flex; 3573 align-items: center; 3574 justify-content: center; 3575 padding: 20px; 3576 box-sizing: border-box; 3577 } 3578 3579 .gift-card-popup__overlay { 3580 position: absolute; 3581 top: 0; 3582 left: 0; 3583 width: 100%; 3584 height: 100%; 3585 background: rgba(0, 0, 0, 0.5); 3586 backdrop-filter: blur(2px); 3587 } 3588 3589 .gift-card-popup__content { 3590 position: relative; 3591 background: #fff; 3592 border-radius: 12px; 3593 box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2); 3594 max-width: 500px; 3595 width: 100%; 3596 max-height: 85vh; 3597 max-height: calc(100dvh - 40px); 3598 overflow-y: auto; 3599 animation: popup-slide-in 0.3s ease-out; 3600 } 3601 3602 @keyframes popup-slide-in { 3603 from { 3604 opacity: 0; 3605 transform: scale(0.9) translateY(-20px); 3606 } 3607 3608 to { 3609 opacity: 1; 3610 transform: scale(1) translateY(0); 3611 } 3612 } 3613 3614 .gift-card-popup__header { 3615 display: flex; 3616 justify-content: space-between; 3617 align-items: center; 3618 padding: 20px 24px; 3619 border-bottom: 1px solid #eee; 3620 } 3621 3622 .gift-card-popup__header h3 { 3623 margin: 0; 3624 font-size: 18px !important; 3625 font-weight: 600; 3626 color: #333; 3627 } 3628 3629 .gift-card-popup__close { 3630 background: none; 3631 border: none; 3632 font-size: 24px; 3633 color: #999; 3634 cursor: pointer; 3635 padding: 0; 3636 width: 30px; 3637 height: 30px; 3638 display: flex; 3639 align-items: center; 3640 justify-content: center; 3641 border-radius: 50%; 3642 transition: all 0.2s ease; 3643 } 3644 3645 .gift-card-popup__close:hover { 3646 background: #f5f5f5; 3647 color: #333; 3648 } 3649 3650 .gift-card-popup__body { 3651 padding: 24px; 3652 } 3653 3654 .gift-card-popup__subtitle { 3655 font-size: 14px; 3656 color: #6b7280; 3657 margin: 0 0 20px 0; 3658 line-height: 1.5; 3659 } 3660 3661 .gift-card-popup__options { 3662 margin-bottom: 20px; 3663 display: flex; 3664 flex-direction: column; 3665 gap: 12px; 3666 } 3667 3668 .gift-option-label { 3669 display: flex; 3670 align-items: flex-start; 3671 padding: 16px; 3672 border: 2px solid #e5e7eb; 3673 border-radius: 8px; 3674 cursor: pointer; 3675 transition: all 0.2s; 3676 background: #ffffff; 3677 } 3678 3679 .gift-option-label:hover { 3680 border-color: #d1d5db; 3681 background: #f9fafb; 3682 } 3683 3684 .gift-option-label:has(.gift-option-radio:checked) { 3685 border-color: var(--cta_outline_primary_static, #243846); 3686 background: rgba(36, 56, 70, 0.05); 3687 } 3688 3689 .gift-option-radio { 3690 margin-top: 2px; 3691 margin-right: 12px; 3692 flex-shrink: 0; 3693 width: 18px; 3694 height: 18px; 3695 cursor: pointer; 3696 accent-color: var(--cta_outline_primary_static, #243846); 3697 } 3698 3699 .gift-option-content { 3700 flex: 1; 3701 } 3702 3703 .gift-option-content strong { 3704 display: block; 3705 font-size: 15px; 3706 color: #1f2937; 3707 margin-bottom: 4px; 3708 font-weight: 600; 3709 } 3710 3711 .gift-option-content p { 3712 font-size: 13px; 3713 color: #6b7280; 3714 margin: 0; 3715 line-height: 1.5; 3716 } 3717 3718 .standard-message-preview { 3719 font-style: italic; 3720 padding: 8px 12px; 3721 background: #f3f4f6; 3722 border-radius: 6px; 3723 margin-top: 8px !important; 3724 } 3725 3726 .custom-message-fields { 3727 padding-top: 16px; 3728 border-top: 1px solid #e5e7eb; 3729 margin-top: 8px; 3730 display: none; 3731 } 3732 3733 .gift-card-popup__field { 3734 margin-bottom: 20px; 3735 } 3736 3737 .gift-card-popup__field:last-child { 3738 margin-bottom: 0; 3739 } 3740 3741 .gift-card-popup__field label { 3742 display: block; 3743 margin-bottom: 6px; 3744 font-weight: 500; 3745 color: #333; 3746 font-size: 0.95rem; 3747 } 3748 3749 .gift-card-popup__field label .required { 3750 color: #ef4444; 3751 } 3752 3753 .gift-card-popup__field input, 3754 .gift-card-popup__field textarea { 3755 width: 100%; 3756 padding: 12px 16px; 3757 border: 2px solid #e1e1e1; 3758 border-radius: 8px; 3759 font-size: 0.95rem; 3760 transition: border-color 0.2s ease; 3761 font-family: inherit; 3762 box-sizing: border-box; 3763 } 3764 3765 .gift-card-popup__char-counter { 3766 font-size: 0.8rem; 3767 color: #666; 3768 text-align: right; 3769 margin-top: 4px; 3770 transition: color 0.2s ease; 3771 } 3772 3773 .gift-card-popup__char-counter.warning { 3774 color: #ff8c00; 3775 } 3776 3777 .gift-card-popup__char-counter.error { 3778 color: #dc3545; 3779 } 3780 3781 .gift-card-popup__field input:focus, 3782 .gift-card-popup__field textarea:focus { 3783 outline: none; 3784 border-color: #101010; 3785 } 3786 3787 .gift-card-preview { 3788 margin-top: 24px; 3789 padding-top: 24px; 3790 border-top: 1px solid #e5e7eb; 3791 display: none; 3792 justify-content: center; 3793 width: 100%; 3794 } 3795 3796 .gift-card-preview__card { 3797 background: linear-gradient(135deg, #fefefe 0%, #f9fafb 100%); 3798 border: none; 3799 border-radius: 12px; 3800 padding: 32px 28px; 3801 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); 3802 position: relative; 3803 font-family: 'Georgia', 'Times New Roman', serif; 3804 width: 100%; 3805 text-align: center; 3806 } 3807 3808 .gift-card-preview__content { 3809 position: relative; 3810 z-index: 1; 3811 display: flex; 3812 flex-direction: column; 3813 align-items: center; 3814 } 3815 3816 .gift-card-preview__to, 3817 .gift-card-preview__from { 3818 display: flex; 3819 align-items: center; 3820 gap: 8px; 3821 font-size: 16px; 3822 } 3823 3824 .gift-card-preview__value { 3825 color: #2d5016; 3826 font-weight: 500; 3827 font-style: italic; 3828 } 3829 3830 .gift-card-preview__value:empty::before { 3831 content: '...'; 3832 color: #2d5016; 3833 font-style: normal; 3834 opacity: 0.6; 3835 } 3836 3837 .gift-card-preview__message { 3838 color: #2d5016; 3839 font-size: 15px; 3840 line-height: 1.8; 3841 white-space: pre-wrap; 3842 word-wrap: break-word; 3843 font-style: italic; 3844 margin: 8px 0; 3845 } 3846 3847 .gift-card-preview__message:empty::before { 3848 content: 'Your gift message will appear here...'; 3849 color: #2d5016; 3850 font-style: normal; 3851 font-size: 14px; 3852 opacity: 0.6; 3853 } 3854 3855 .gift-card-preview__from { 3856 margin-top: auto; 3857 text-align: center; 3858 justify-content: center; 3859 } 3860 3861 .gift-card-popup__cancel { 3862 background: transparent; 3863 color: #495057; 3864 border: 1px solid #e1e1e1; 3865 padding: 10px 20px; 3866 font-size: 0.9rem; 3867 cursor: pointer; 3868 transition: all 0.2s ease; 3869 border-radius: 8px; 3870 } 3871 3872 .gift-card-popup__cancel:hover { 3873 background: #e9ecef; 3874 color: #495057; 3875 } 3876 3877 .gift-card-popup__save { 3878 background: var(--brand_color_1, #007bff); 3879 color: #fff; 3880 border: none; 3881 padding: 10px 20px; 3882 font-size: 0.9rem; 3883 cursor: pointer; 3884 transition: all 0.2s ease; 3885 border-radius: 8px; 3886 } 3887 3888 .gift-card-popup__save:hover { 3889 filter: brightness(0.95); 3890 } 3891 3892 .gift-card-popup__save:disabled { 3893 opacity: 0.6;
3894 cursor: not-allowed; 3895 } 3896 3897 3898 @media (min-width: 481px) and (max-width: 768px) { 3899 .cart-upsell__cards:not(.has-two-products) { 3900 flex-direction: column; 3901 overflow-x: visible; 3902 overflow-y: visible; 3903 scroll-snap-type: none; 3904 touch-action: auto; 3905 } 3906 3907 .cart-upsell__cards:not(.has-two-products) .cart-upsell__card { 3908 flex: 1 1 auto; 3909 width: 100%; 3910 scroll-snap-align: none; 3911 } 3912 } 3913 3914 3915 @media (max-width: 768px) { 3916 .cart-upsell__container { 3917 padding: 12px; 3918 } 3919 3920 .cart-upsell__heading { 3921 font-size: 0.95rem; 3922 margin-bottom: 6px; 3923 } 3924 3925 .cart-upsell__subheading { 3926 font-size: 0.75rem; 3927 margin-bottom: 12px; 3928 } 3929 3930 .cart-upsell__cards-wrapper { 3931 margin-bottom: 10px; 3932 overflow: visible; 3933 } 3934 3935 /* Two products on mobile - horizontal scroll */ 3936 .cart-upsell__cards.has-two-products { 3937 display: flex; 3938 flex-direction: row; 3939 overflow-x: auto; 3940 overflow-y: hidden; 3941 scroll-snap-type: x mandatory; 3942 gap: 12px; 3943 scrollbar-width: none; 3944 -ms-overflow-style: none; 3945 -webkit-overflow-scrolling: touch; 3946 scroll-behavior: smooth; 3947 padding-bottom: 5px; 3948 } 3949 3950 .cart-upsell__cards.has-two-products::-webkit-scrollbar {
3951 display: none; 3952 } 3953 3954 .cart-upsell__cards.has-two-products .cart-upsell__card-wrapper { 3955 flex: 0 0 85%; 3956 scroll-snap-align: start; 3957 min-width: 0; 3958 } 3959 3960 /* Single product on mobile - vertical stack */ 3961 .cart-upsell__cards:not(.has-two-products) { 3962 flex-direction: column; 3963 overflow-x: visible; 3964 overflow-y: visible; 3965 scroll-snap-type: none; 3966 gap: 10px; 3967 touch-action: auto; 3968 } 3969 3970 .cart-upsell__card { 3971 padding: 10px; 3972 flex: 1 1 auto; 3973 width: 100%; 3974 max-width: 100%; 3975 scroll-snap-align: none; 3976 } 3977 3978 .cart-upsell__card-header { 3979 gap: 8px; 3980 } 3981 3982 .cart-upsell__card-image-wrapper { 3983 width: 50px; 3984 height: 50px; 3985 flex-shrink: 0; 3986 background: transparent; 3987 } 3988 3989 .cart-upsell__card-image { 3990 width: 100%; 3991 height: 100%; 3992 object-fit: cover; 3993 } 3994 3995 .cart-upsell__card-title { 3996 font-size: 0.85rem; 3997 margin-bottom: 4px; 3998 } 3999 4000 .cart-upsell__card-description { 4001 font-size: 0.7rem; 4002 margin-bottom: 0; 4003 } 4004 4005 .cart-upsell__card-features { 4006 margin-bottom: 0; 4007 } 4008 4009 .cart-upsell__card-features li { 4010 font-size: 0.7rem; 4011 padding-left: 20px; 4012 margin-bottom: 5px; 4013 } 4014 4015 .cart-upsell__card-button { 4016 padding: 8px 12px; 4017 font-size: 0.75rem; 4018 min-height: 40px; 4019 } 4020 4021 .cart-upsell__nav-button { 4022 display: none; 4023 width: 36px; 4024 height: 36px; 4025 } 4026 4027 .cart-upsell__nav-button--prev { 4028 left: 5px; 4029 } 4030 4031 .cart-upsell__nav-button--next { 4032 right: 5px; 4033 } 4034 4035 .cart-upsell__disclaimer { 4036 font-size: 0.65rem; 4037 margin-top: 10px; 4038 } 4039 } 4040 4041 @media (min-width: 769px) { 4042 /* Desktop - both products side by side without scrolling */ 4043 .cart-upsell__cards.has-two-products { 4044 display: flex; 4045 flex-direction: row; 4046 overflow-x: visible; 4047 overflow-y: visible; 4048 scroll-snap-type: none; 4049 gap: 12px; 4050 width: 100%; 4051 } 4052 4053 .cart-upsell__cards.has-two-products .cart-upsell__card-wrapper { 4054 flex: 1; 4055 min-width: 0; 4056 max-width: calc(50% - 6px); 4057 } 4058 4059 /* Single product on desktop - prevent scroll, clean layout */ 4060 .cart-upsell__cards:not(.has-two-products) { 4061 display: flex; 4062 flex-direction: column; 4063 overflow-x: visible; 4064 overflow-y: visible; 4065 scroll-snap-type: none; 4066 gap: 12px; 4067 width: 100%; 4068 } 4069 4070 .cart-upsell__cards:not(.has-two-products) .cart-upsell__card-wrapper { 4071 width: 100%; 4072 max-width: 100%; 4073 } 4074 4075 /* Hide navigation buttons on desktop when no scrolling */ 4076 .cart-upsell__nav-button { 4077 display: none; 4078 } 4079 } 4080 4081 @media (max-width: 768px) { 4082 .gift-card-popup__content { 4083 width: 95%; 4084 } 4085 4086 .gift-card-popup__header, 4087 .gift-card-popup__body, 4088 .gift-card-popup__footer { 4089 padding: 16px 20px; 4090 } 4091 4092 .gift-card-popup__footer { 4093 flex-direction: column-reverse; 4094 } 4095 4096 .gift-card-popup__cancel, 4097 .gift-card-popup__save { 4098 width: 100%; 4099 padding: 12px; 4100 } 4101 4102 .gift-card-preview__card { 4103 padding: 24px 20px; 4104 } 4105 4106 .gift-card-preview__message { 4107 font-size: 14px; 4108 line-height: 1.6; 4109 min-height: 60px; 4110 } 4111 4112 .gift-card-preview__to, 4113 .gift-card-preview__from { 4114 font-size: 14px; 4115 } 4116 } 4117</style> 4118
4119<script> 4120 (function() { 4121 'use strict'; 4122 4123 // Configuration 4124 const CONFIG = { 4125 DEBOUNCE_DELAY: 150, 4126 INITIAL_CHECK_DELAY: 300, 4127 CART_UPDATE_DELAY: 400, 4128 MUTATION_DEBOUNCE: 300, 4129 VISIBILITY_CHECK_INTERVAL: 5000, // Reduced from 2000ms 4130 MAX_RETRY_ATTEMPTS: 3, 4131 RETRY_DELAY: 1000, 4132 CAROUSEL_SCROLL_DEBOUNCE: 100 4133 }; 4134 4135 // Carousel state 4136 const carouselState = { 4137 carousel: null, 4138 prevButton: null, 4139 nextButton: null, 4140 isInitialized: false, 4141 updateButtons: null 4142 }; 4143 4144 // Initialize carousel 4145 function initCarousel() { 4146 const carousel = document.querySelector('[data-carousel]'); 4147 if (!carousel) return; 4148 4149 const isMobile = window.innerWidth <= 768; 4150 4151 // On mobile, hide navigation buttons (touch scrolling is used) 4152 if (isMobile) { 4153 const prevButton = carousel.closest('.cart-upsell__cards-wrapper')?.querySelector('.cart-upsell__nav-button--prev'); 4154 const nextButton = carousel.closest('.cart-upsell__cards-wrapper')?.querySelector('.cart-upsell__nav-button--next'); 4155 if (prevButton) prevButton.style.display = 'none'; 4156 if (nextButton) nextButton.style.display = 'none'; 4157 // Still initialize for mobile to handle scroll events, but don't show buttons 4158 } 4159 4160 // Re-initialize if already initialized (for dynamic content) 4161 if (carouselState.isInitialized && carouselState.carousel === carousel) { 4162 if (carouselState.updateButtons) { 4163 setTimeout(() => carouselState.updateButtons(), 100); 4164 } 4165 return; 4166 } 4167 4168 carouselState.carousel = carousel; 4169 carouselState.prevButton = carousel.closest('.cart-upsell__cards-wrapper')?.querySelector('.cart-upsell__nav-button--prev'); 4170 carouselState.nextButton = carousel.closest('.cart-upsell__cards-wrapper')?.querySelector('.cart-upsell__nav-button--next'); 4171 4172 // Update button states 4173 function updateCarouselButtons() { 4174 if (!carouselState.carousel) return; 4175 4176 const { scrollLeft, scrollWidth, clientWidth } = carouselState.carousel; 4177 const isAtStart = scrollLeft <= 10; 4178 const isAtEnd = scrollLeft >= scrollWidth - clientWidth - 10; 4179 const needsScrolling = scrollWidth > clientWidth; 4180 const isMobile = window.innerWidth <= 768; 4181 4182 // On mobile, hide buttons (touch scrolling is used) 4183 // On desktop, show buttons when scrolling is needed (disable when at start/end) 4184 if (carouselState.prevButton) { 4185 if (isMobile) { 4186 carouselState.prevButton.style.display = 'none'; 4187 } else { 4188 carouselState.prevButton.disabled = isAtStart || !needsScrolling; 4189 carouselState.prevButton.style.display = (needsScrolling && !isAtStart) ? 'flex' : 'none'; 4190 } 4191 } 4192 if (carouselState.nextButton) { 4193 if (isMobile) { 4194 carouselState.nextButton.style.display = 'none'; 4195 } else { 4196 carouselState.nextButton.disabled = isAtEnd || !needsScrolling; 4197 carouselState.nextButton.style.display = (needsScrolling && !isAtEnd) ? 'flex' : 'none'; 4198 } 4199 } 4200 } 4201 4202 // Store function reference for external access 4203 carouselState.updateButtons = updateCarouselButtons; 4204 4205 // Initialize button state 4206 updateCarouselButtons(); 4207 4208 // Navigation handlers 4209 function scrollCarousel(direction) { 4210 if (!carouselState.carousel) return; 4211 4212 const cardWidth = carouselState.carousel.querySelector('.cart-upsell__card')?.offsetWidth || 0; 4213 const gap = 12; 4214 const scrollAmount = cardWidth + gap; 4215 4216 const currentScroll = carouselState.carousel.scrollLeft; 4217 const targetScroll = direction === 'next' 4218 ? currentScroll + scrollAmount 4219 : currentScroll - scrollAmount; 4220 4221 carouselState.carousel.scrollTo({ 4222 left: targetScroll, 4223 behavior: 'smooth' 4224 }); 4225 } 4226 4227 // Event listeners for navigation buttons 4228 if (carouselState.prevButton) { 4229 carouselState.prevButton.addEventListener('click', () => scrollCarousel('prev')); 4230 } 4231 if (carouselState.nextButton) { 4232 carouselState.nextButton.addEventListener('click', () => scrollCarousel('next')); 4233 } 4234 4235 // Update buttons on scroll (for touch scrolling) 4236 const debouncedUpdate = debounce(updateCarouselButtons, CONFIG.CAROUSEL_SCROLL_DEBOUNCE); 4237 carouselState.carousel.addEventListener('scroll', debouncedUpdate, { passive: true }); 4238 4239 // Update on resize 4240 let resizeTimeout; 4241 window.addEventListener('resize', () => { 4242 clearTimeout(resizeTimeout); 4243 resizeTimeout = setTimeout(() => { 4244 const isMobile = window.innerWidth <= 768; 4245 if (isMobile) { 4246 // Hide buttons on mobile 4247 if (carouselState.prevButton) carouselState.prevButton.style.display = 'none'; 4248 if (carouselState.nextButton) carouselState.nextButton.style.display = 'none'; 4249 } else { 4250 // Re-initialize carousel on desktop and update button visibility 4251 if (carouselState.updateButtons) { 4252 updateCarouselButtons(); 4253 } 4254 } 4255 }, 250); 4256 }, { passive: true }); 4257 4258 // Keyboard navigation 4259 carouselState.carousel.addEventListener('keydown', (e) => { 4260 if (e.key === 'ArrowLeft' && carouselState.prevButton && !carouselState.prevButton.disabled) { 4261 e.preventDefault(); 4262 scrollCarousel('prev'); 4263 } else if (e.key === 'ArrowRight' && carouselState.nextButton && !carouselState.nextButton.disabled) { 4264 e.preventDefault(); 4265 scrollCarousel('next'); 4266 } 4267 }); 4268 4269 carouselState.isInitialized = true; 4270 } 4271 4272 // State management 4273 const state = { 4274 currentGiftCardData: null, 4275 lastCartState: null, 4276 checkTimeout: null, 4277 mutationTimeout: null, 4278 isFetching: false, 4279 isInitialized: false, 4280 retryCount: 0, 4281 visibilityCheckInterval: null, 4282 cartCache: null, 4283 cacheTimestamp: 0, 4284 CACHE_DURATION: 500 // Cache cart data for 500ms 4285 }; 4286 4287 // Product IDs from Liquid 4288 const UPSELL_PRODUCT_ID_1 = 7675567538262; 4289 const UPSELL_PRODUCT_ID_2 = 7676028715094; 4290 4291 // Utility: Debounced function executor 4292 function debounce(func, wait) { 4293 let timeout;
4294 return function executedFunction(...args) { 4295 const later = () => { 4296 clearTimeout(timeout); 4297 func(...args); 4298 }; 4299 clearTimeout(timeout); 4300 timeout = setTimeout(later, wait); 4301 }; 4302 } 4303 4304 // Utility: Safe element query 4305 function safeQuerySelector(selector, context = document) { 4306 try { 4307 return context.querySelector(selector); 4308 } catch (error) { 4309 console.error('Invalid selector:', selector, error); 4310 return null; 4311 } 4312 } 4313 4314 // Utility: Get cached cart or fetch new 4315 function getCartData() { 4316 const now = Date.now(); 4317 4318 // Return cached data if still valid 4319 if (state.cartCache && (now - state.cacheTimestamp) < state.CACHE_DURATION) { 4320 return Promise.resolve(state.cartCache); 4321 } 4322 4323 // Prevent concurrent fetches 4324 if (state.isFetching) { 4325 return new Promise((resolve) => { 4326 const checkInterval = setInterval(() => { 4327 if (!state.isFetching && state.cartCache) { 4328 clearInterval(checkInterval); 4329 resolve(state.cartCache); 4330 } 4331 }, 50); 4332 4333 // Timeout after 2 seconds 4334 setTimeout(() => { 4335 clearInterval(checkInterval); 4336 resolve(null); 4337 }, 2000); 4338 }); 4339 } 4340 4341 state.isFetching = true; 4342 4343 return fetch('/cart.js', { 4344 method: 'GET', 4345 headers: { 4346 'Content-Type': 'application/json', 4347 'X-Requested-With': 'XMLHttpRequest' 4348 }, 4349 credentials: 'same-origin' 4350 }) 4351 .then(response => { 4352 if (!response.ok) { 4353 throw new Error('Cart fetch failed: ' + response.status); 4354 } 4355 return response.json(); 4356 }) 4357 .then(cart => { 4358 state.cartCache = cart; 4359 state.cacheTimestamp = Date.now(); 4360 state.retryCount = 0; 4361 return cart; 4362 }) 4363 .catch(error => { 4364 console.error('Failed to fetch cart:', error); 4365 4366 // Retry logic 4367 if (state.retryCount < CONFIG.MAX_RETRY_ATTEMPTS) { 4368 state.retryCount++; 4369 return new Promise(resolve => { 4370 setTimeout(() => { 4371 resolve(getCartData()); 4372 }, CONFIG.RETRY_DELAY * state.retryCount); 4373 }); 4374 } 4375 4376 return null; 4377 }) 4378 .finally(() => { 4379 state.isFetching = false; 4380 }); 4381 } 4382 4383 // Invalidate cache when cart changes
4384 function invalidateCartCache() { 4385 state.cartCache = null; 4386 state.cacheTimestamp = 0; 4387 } 4388 4389 // Gift card popup functions 4390 4391 // Session storage functions for gift data persistence 4392 function getGiftDataKey(productId) { 4393 return 'giftMessageData_' + (productId || UPSELL_PRODUCT_ID_1 || 'default'); 4394 } 4395 4396 function loadSavedGiftData(productId) { 4397 try { 4398 if (typeof Storage === 'undefined') { 4399 return null; 4400 } 4401 const key = getGiftDataKey(productId); 4402 const savedData = sessionStorage.getItem(key); 4403 if (savedData) { 4404 return JSON.parse(savedData); 4405 } 4406 } catch (error) { 4407 console.error('Error loading saved gift data:', error); 4408 } 4409 return null; 4410 } 4411 4412 function saveGiftData(sender, recipient, giftMessage, productId) { 4413 try { 4414 if (typeof Storage === 'undefined') { 4415 return; 4416 } 4417 const key = getGiftDataKey(productId); 4418 const data = { 4419 sender: sender, 4420 recipient: recipient,
4421 gift_note: giftMessage, 4422 timestamp: Date.now() 4423 }; 4424 sessionStorage.setItem(key, JSON.stringify(data)); 4425 } catch (error) { 4426 console.error('Error saving gift data:', error); 4427 } 4428 } 4429 4430 function clearSavedGiftData(productId) { 4431 try { 4432 if (typeof Storage === 'undefined') { 4433 return; 4434 } 4435 const key = getGiftDataKey(productId); 4436 sessionStorage.removeItem(key); 4437 } catch (error) { 4438 console.error('Error clearing gift data:', error); 4439 } 4440 } 4441 4442 function updateGiftPreview() { 4443 try { 4444 const toField = document.getElementById('gift-card-to'); 4445 const fromField = document.getElementById('gift-card-from'); 4446 const messageField = document.getElementById('gift-card-message'); 4447 const previewRecipient = document.getElementById('previewRecipient'); 4448 const previewSender = document.getElementById('previewSender'); 4449 const previewMessage = document.getElementById('previewMessage'); 4450 const previewSection = document.getElementById('gift-card-preview'); 4451 4452 if (!toField || !fromField || !messageField || !previewRecipient || !previewSender || !previewMessage || !previewSection) { 4453 return; 4454 } 4455 4456 const recipient = toField.value.trim(); 4457 const sender = fromField.value.trim(); 4458 const message = messageField.value.trim(); 4459 4460 previewRecipient.textContent = recipient || 'Recipient\'s name'; 4461 previewSender.textContent = sender || 'Your name'; 4462 previewMessage.textContent = message || 'Your gift message will appear here...'; 4463 4464 // Only show preview when custom option is selected 4465 const selectedOption = document.querySelector('.gift-option-radio:checked'); 4466 if (selectedOption && selectedOption.value === 'custom') { 4467 previewSection.style.display = 'flex'; 4468 } else { 4469 previewSection.style.display = 'none'; 4470 } 4471 } catch (error) { 4472 console.error('Error updating gift preview:', error); 4473 } 4474 } 4475 4476 // Toggle custom fields visibility based on radio selection 4477 function toggleCustomFields() { 4478 const customMessageFields = document.getElementById('custom-message-fields'); 4479 const previewSection = document.getElementById('gift-card-preview'); 4480 const selectedOption = document.querySelector('.gift-option-radio:checked'); 4481 4482 if (!customMessageFields) return; 4483 4484 if (selectedOption && selectedOption.value === 'custom') { 4485 customMessageFields.style.display = 'block'; 4486 if (previewSection) { 4487 previewSection.style.display = 'flex'; 4488 } 4489 // Make fields required 4490 const toField = document.getElementById('gift-card-to'); 4491 const fromField = document.getElementById('gift-card-from'); 4492 const messageField = document.getElementById('gift-card-message'); 4493 if (toField) toField.required = true; 4494 if (fromField) fromField.required = true; 4495 if (messageField) messageField.required = true; 4496 updateGiftPreview(); 4497 } else { 4498 customMessageFields.style.display = 'none'; 4499 if (previewSection) { 4500 previewSection.style.display = 'none'; 4501 } 4502 // Remove required attribute 4503 const toField = document.getElementById('gift-card-to'); 4504 const fromField = document.getElementById('gift-card-from'); 4505 const messageField = document.getElementById('gift-card-message'); 4506 if (toField) toField.required = false; 4507 if (fromField) fromField.required = false; 4508 if (messageField) messageField.required = false; 4509 } 4510 } 4511 4512 function showGiftCardPopup(variantId, btn, productData) { 4513 state.currentGiftCardData = { variantId, btn, productData }; 4514 const popup = document.getElementById('gift-card-popup'); 4515 if (popup) { 4516 popup.style.display = 'flex'; 4517 document.body.style.overflow = 'hidden'; 4518 4519 // Load saved data from session storage 4520 const savedData = loadSavedGiftData(productData?.id); 4521 if (savedData) { 4522 // Populate custom message fields 4523 const toField = document.getElementById('gift-card-to'); 4524 const fromField = document.getElementById('gift-card-from'); 4525 const messageField = document.getElementById('gift-card-message'); 4526 const charCounter = document.getElementById('gift-card-char-counter'); 4527 4528 if (toField) toField.value = savedData.recipient || ''; 4529 if (fromField) fromField.value = savedData.sender || ''; 4530 if (messageField) messageField.value = savedData.gift_note || ''; 4531 4532 if (charCounter && savedData.gift_note) { 4533 charCounter.textContent = `${savedData.gift_note.length} / 200`; 4534 } 4535 4536 // Select custom option if data exists 4537 const customOption = popup.querySelector('.gift-option-radio[value="custom"]'); 4538 if (customOption) { 4539 customOption.checked = true; 4540 toggleCustomFields(); 4541 } 4542 } else { 4543 // Select blank option by default 4544 const blankOption = popup.querySelector('.gift-option-radio[value="blank"]'); 4545 if (blankOption) { 4546 blankOption.checked = true; 4547 toggleCustomFields(); 4548 } 4549 } 4550 4551 requestAnimationFrame(() => { 4552 updateGiftPreview(); 4553 // Focus on first empty field if custom is selected 4554 const selectedOption = popup.querySelector('.gift-option-radio:checked'); 4555 if (selectedOption && selectedOption.value === 'custom') { 4556 const toField = document.getElementById('gift-card-to'); 4557 const messageField = document.getElementById('gift-card-message'); 4558 const fromField = document.getElementById('gift-card-from'); 4559 4560 if (toField && !toField.value) { 4561 toField.focus(); 4562 } else if (messageField && !messageField.value) { 4563 messageField.focus(); 4564 } else if (fromField && !fromField.value) { 4565 fromField.focus(); 4566 } else if (toField) { 4567 toField.focus(); 4568 toField.select(); 4569 } 4570 } 4571 }); 4572 } 4573 } 4574 4575 function hideGiftCardPopup() { 4576 const popup = document.getElementById('gift-card-popup'); 4577 if (popup) { 4578 // Save current form values to session storage before closing (only if custom option) 4579 const selectedOption = popup.querySelector('.gift-option-radio:checked'); 4580 if (selectedOption && selectedOption.value === 'custom') { 4581 const toField = document.getElementById('gift-card-to'); 4582 const fromField = document.getElementById('gift-card-from'); 4583 const messageField = document.getElementById('gift-card-message'); 4584 4585 const sender = fromField ? fromField.value.trim() : ''; 4586 const recipient = toField ? toField.value.trim() : ''; 4587 const giftMessage = messageField ? messageField.value.trim() : ''; 4588 4589 // Only save if at least one field has value 4590 if (sender || recipient || giftMessage) { 4591 const productId = state.currentGiftCardData?.productData?.id; 4592 saveGiftData(sender, recipient, giftMessage, productId); 4593 } 4594 } 4595 4596 popup.style.display = 'none'; 4597 document.body.style.overflow = ''; 4598 4599 // Reset form fields 4600 const inputs = popup.querySelectorAll('input:not([type="radio"]), textarea');
4601 inputs.forEach(input => input.value = ''); 4602 4603 // Reset to blank option 4604 const blankOption = popup.querySelector('.gift-option-radio[value="blank"]'); 4605 if (blankOption) { 4606 blankOption.checked = true; 4607 toggleCustomFields(); 4608 } 4609 4610 const charCounter = document.getElementById('gift-card-char-counter'); 4611 if (charCounter) { 4612 charCounter.textContent = '0/200'; 4613 charCounter.className = 'gift-card-popup__char-counter'; 4614 } 4615 4616 const saveBtn = popup.querySelector('.gift-card-popup__save'); 4617 if (saveBtn) { 4618 saveBtn.disabled = false; 4619 saveBtn.textContent = 'Save'; 4620 } 4621 4622 updateGiftPreview(); 4623 } 4624 state.currentGiftCardData = null; 4625 } 4626 4627 // Main widget check function 4628 function checkAndToggleUpsellWidget() { 4629 if (state.checkTimeout) { 4630 clearTimeout(state.checkTimeout); 4631 } 4632 state.checkTimeout = setTimeout(performCheck, CONFIG.DEBOUNCE_DELAY); 4633 } 4634 4635 function performCheck() { 4636 const upsellWidget = safeQuerySelector('[data-cart-upsell]'); 4637 if (!upsellWidget) { 4638 return; 4639 } 4640 4641 getCartData() 4642 .then(cart => { 4643 if (!cart) { 4644 console.warn('Cart data unavailable, skipping widget update'); 4645 return; 4646 } 4647 4648 const hasUpsellProduct1 = UPSELL_PRODUCT_ID_1 ? 4649 cart.items.some(item => item.product_id === UPSELL_PRODUCT_ID_1) : false; 4650 const hasUpsellProduct2 = UPSELL_PRODUCT_ID_2 ? 4651 cart.items.some(item => item.product_id === UPSELL_PRODUCT_ID_2) : false; 4652 4653 // Skip if state hasn't changed 4654 const currentState = `${hasUpsellProduct1}-${hasUpsellProduct2}-${cart.items.length}`; 4655 if (state.lastCartState === currentState) { 4656 return; 4657 } 4658 state.lastCartState = currentState; 4659 4660 // Check for qualifying products 4661 const hasQualifyingProducts = cart.items.some(item => { 4662 if (UPSELL_PRODUCT_ID_1 && item.product_id === UPSELL_PRODUCT_ID_1) return false; 4663 if (UPSELL_PRODUCT_ID_2 && item.product_id === UPSELL_PRODUCT_ID_2) return false; 4664 const sku = item.sku || ''; 4665 return sku.includes('CBS') || sku.includes('CBG'); 4666 }); 4667 4668 // Remove upsell items if no qualifying products 4669 if ((hasUpsellProduct1 || hasUpsellProduct2) && !hasQualifyingProducts) { 4670 removeUpsellProducts(cart, hasUpsellProduct1, hasUpsellProduct2); 4671 return; 4672 } 4673 4674 // Update card visibility 4675 updateCardVisibility(upsellWidget, hasUpsellProduct1, hasUpsellProduct2); 4676 }) 4677 .catch(err => { 4678 console.error('Error in performCheck:', err); 4679 }); 4680 } 4681 4682 function removeUpsellProducts(cart, hasProduct1, hasProduct2) { 4683 const removePromises = []; 4684 4685 if (hasProduct1) { 4686 const item1 = cart.items.find(item => item.product_id === UPSELL_PRODUCT_ID_1); 4687 if (item1 && window.theme?.cart?.changeItem) { 4688 removePromises.push( 4689 window.theme.cart.changeItem(item1.key, 0) 4690 .catch(err => console.error('Failed to remove upsell item 1:', err)) 4691 ); 4692 } 4693 } 4694 4695 if (hasProduct2) { 4696 const item2 = cart.items.find(item => item.product_id === UPSELL_PRODUCT_ID_2); 4697 if (item2 && window.theme?.cart?.changeItem) { 4698 removePromises.push( 4699 window.theme.cart.changeItem(item2.key, 0) 4700 .catch(err => console.error('Failed to remove upsell item 2:', err)) 4701 ); 4702 } 4703 } 4704 4705 if (removePromises.length > 0) { 4706 Promise.all(removePromises).then(() => { 4707 invalidateCartCache(); 4708 document.dispatchEvent(new CustomEvent('cart:build')); 4709 document.dispatchEvent(new CustomEvent('cart:updated')); 4710 }); 4711 } 4712 } 4713 4714 function updateCardVisibility(upsellWidget, hasUpsellProduct1, hasUpsellProduct2) { 4715 // Find cards in grid layout 4716 const card1 = UPSELL_PRODUCT_ID_1 ? 4717 safeQuerySelector(`.cart-upsell__cards [data-product-id="${UPSELL_PRODUCT_ID_1}"]`, upsellWidget) : null; 4718 const card2 = UPSELL_PRODUCT_ID_2 ? 4719 safeQuerySelector(`.cart-upsell__cards [data-product-id="${UPSELL_PRODUCT_ID_2}"]`, upsellWidget) : null; 4720 4721 // Count visible products 4722 const card1Visible = !hasUpsellProduct1 && (UPSELL_PRODUCT_ID_1 !== null); 4723 const card2Visible = !hasUpsellProduct2 && (UPSELL_PRODUCT_ID_2 !== null); 4724 const visibleCount = (card1Visible ? 1 : 0) + (card2Visible ? 1 : 0); 4725 4726 // Hide entire widget if both products are in cart 4727 if (hasUpsellProduct1 && hasUpsellProduct2) { 4728 upsellWidget.style.display = 'none'; 4729 return; 4730 } 4731 4732 // Update individual card visibility 4733 if (card1) { 4734 card1.style.display = hasUpsellProduct1 ? 'none' : 'block'; 4735 } 4736 if (card2) { 4737 card2.style.display = hasUpsellProduct2 ? 'none' : 'block'; 4738 } 4739 4740 // Show widget if at least one product is visible 4741 if (visibleCount > 0) { 4742 upsellWidget.style.display = 'block'; 4743 4744 // Update grid visibility 4745 const gridContainer = safeQuerySelector('.cart-upsell__cards', upsellWidget); 4746 if (gridContainer) { 4747 gridContainer.style.display = ''; 4748 } 4749 } else { 4750 // Hide widget if no products are visible 4751 upsellWidget.style.display = 'none'; 4752 } 4753 4754 // Update carousel after visibility changes 4755 if (upsellWidget.style.display !== 'none' && carouselState.carousel && carouselState.updateButtons) { 4756 requestAnimationFrame(() => { 4757 carouselState.updateButtons(); 4758 }); 4759 } 4760 } 4761 4762 function addVariantToCart(variantId, btn, giftCardPersonalization = null) { 4763 if (!variantId) return; 4764 4765 const btnElement = btn; 4766 if (btnElement) { 4767 btnElement.classList.add('btn--loading'); 4768 btnElement.disabled = true; 4769 } 4770 4771 const cartData = { 4772 id: parseInt(variantId, 10), 4773 quantity: 1 4774 }; 4775 4776 fetch('/cart/add.js', { 4777 method: 'POST', 4778 headers: { 4779 'Content-Type': 'application/json', 4780 'X-Requested-With': 'XMLHttpRequest' 4781 }, 4782 body: JSON.stringify(cartData), 4783 credentials: 'same-origin' 4784 }) 4785 .then(response => { 4786 if (!response.ok) { 4787 throw new Error('Add to cart failed: ' + response.status); 4788 } 4789 return response.json(); 4790 }) 4791 .then(data => { 4792 if (giftCardPersonalization) { 4793 const cartAttributes = { 4794 'recepient': giftCardPersonalization.to || '', 4795 'sender': giftCardPersonalization.from || '', 4796 'gift_note': giftCardPersonalization.message || '', 4797 'gift_option': giftCardPersonalization.option || 'custom' 4798 }; 4799 4800 return fetch('/cart/update.js', { 4801 method: 'POST', 4802 headers: { 4803 'Content-Type': 'application/json', 4804 'X-Requested-With': 'XMLHttpRequest' 4805 }, 4806 body: JSON.stringify({ attributes: cartAttributes }), 4807 credentials: 'same-origin' 4808 }).then(res => ({ response: res, productData: data })); 4809 } 4810 4811 return { response: { ok: true }, productData: data }; 4812 }) 4813 .then(({ response, productData }) => { 4814 if (!response.ok) { 4815 throw new Error('Cart attribute update failed'); 4816 } 4817 4818 invalidateCartCache(); 4819 4820 document.dispatchEvent(new CustomEvent('cart:build')); 4821 document.dispatchEvent(new CustomEvent('ajaxProduct:added', { 4822 detail: { product: productData } 4823 })); 4824 4825 setTimeout(() => { 4826 state.lastCartState = null; 4827 checkAndToggleUpsellWidget(); 4828 }, CONFIG.CART_UPDATE_DELAY); 4829 4830 if (giftCardPersonalization) { 4831 hideGiftCardPopup(); 4832 } 4833 }) 4834 .catch(err => { 4835 console.error('Upsell add-to-cart error:', err); 4836 alert('Failed to add item to cart. Please try again.'); 4837 }) 4838 .finally(() => { 4839 if (btnElement) { 4840 btnElement.classList.remove('btn--loading'); 4841 btnElement.disabled = false;
4842 } 4843 }); 4844 } 4845 4846 // Event handlers 4847 function handleUpsellButtonClick(e) { 4848 const btn = e.target.closest('.cart-upsell__card-button'); 4849 if (!btn) return; 4850 4851 e.preventDefault(); 4852 e.stopPropagation(); 4853 4854 const container = btn.closest('[data-upsell-form]'); 4855 const variantId = btn.getAttribute('data-variant-id') || 4856 (container && container.getAttribute('data-variant-id')); 4857 4858 if (!variantId) { 4859 console.error('No variant ID found'); 4860 return; 4861 } 4862 4863 const hasGiftPopup = container && container.getAttribute('data-has-gift-popup') === 'true'; 4864 4865 if (hasGiftPopup) { 4866 try { 4867 const productJsonElement = container.querySelector('[data-product-json]'); 4868 4869 if (!productJsonElement) { 4870 console.error('No product JSON element found'); 4871 addVariantToCart(variantId, btn); 4872 return; 4873 } 4874 4875 const productData = JSON.parse(productJsonElement.textContent); 4876 showGiftCardPopup(variantId, btn, productData); 4877 } catch (error) { 4878 console.error('Error parsing product data:', error); 4879 addVariantToCart(variantId, btn); 4880 } 4881 } else { 4882 addVariantToCart(variantId, btn); 4883 } 4884 } 4885 4886 function handlePopupClick(e) { 4887 const popup = document.getElementById('gift-card-popup'); 4888 if (!popup || popup.style.display === 'none') return; 4889 4890 if (e.target.classList.contains('gift-card-popup__overlay') || 4891 e.target.classList.contains('gift-card-popup__close') || 4892 e.target.classList.contains('gift-card-popup__cancel')) { 4893 hideGiftCardPopup(); 4894 return; 4895 } 4896 4897 if (e.target.classList.contains('gift-card-popup__save')) { 4898 if (!state.currentGiftCardData) return; 4899 4900 const saveBtn = e.target; 4901 const selectedOption = document.querySelector('.gift-option-radio:checked'); 4902 4903 if (!selectedOption) { 4904 alert('Please select a gift option.'); 4905 return; 4906 } 4907 4908 const giftOption = selectedOption.value; 4909 let personalization = null; 4910 4911 if (giftOption === 'blank') { 4912 // No personalization needed, send empty attributes 4913 personalization = { 4914 option: 'blank', 4915 to: '', 4916 from: '', 4917 message: '' 4918 }; 4919 } else if (giftOption === 'standard') { 4920 // Use standard message 4921 personalization = { 4922 option: 'standard', 4923 to: '', 4924 from: '', 4925 message: 'Enjoy this selection of Japanese snacks & products, a little treat from Japan to make your day special. Have a great day!' 4926 }; 4927 } else if (giftOption === 'custom') { 4928 // Get custom message fields 4929 const toField = document.getElementById('gift-card-to'); 4930 const fromField = document.getElementById('gift-card-from'); 4931 const messageField = document.getElementById('gift-card-message'); 4932 4933 const to = toField ? toField.value.trim() : ''; 4934 const from = fromField ? fromField.value.trim() : ''; 4935 const message = messageField ? messageField.value.trim() : ''; 4936 4937 // Validate all fields are filled for custom option 4938 if (!to || !from || !message) { 4939 alert('Please fill in all required fields for your custom message.'); 4940 return; 4941 } 4942 4943 personalization = { 4944 option: 'custom', 4945 to: to, 4946 from: from, 4947 message: message 4948 }; 4949 4950 // Save custom message to session storage 4951 const productId = state.currentGiftCardData?.productData?.id; 4952 saveGiftData(from, to, message, productId); 4953 } 4954 4955 saveBtn.disabled = true; 4956 saveBtn.textContent = 'Saving...'; 4957 4958 addVariantToCart( 4959 state.currentGiftCardData.variantId, 4960 state.currentGiftCardData.btn, 4961 personalization 4962 ); 4963 } 4964 } 4965 4966 function handleKeydown(e) { 4967 const popup = document.getElementById('gift-card-popup'); 4968 if (!popup || popup.style.display === 'none') return; 4969 4970 if (e.key === 'Escape') { 4971 hideGiftCardPopup(); 4972 } else if (e.key === 'Enter' && e.target.tagName !== 'TEXTAREA') { 4973 const saveBtn = popup.querySelector('.gift-card-popup__save'); 4974 if (saveBtn) { 4975 e.preventDefault(); 4976 saveBtn.click(); 4977 } 4978 } 4979 } 4980 4981 function handleInput(e) { 4982 if (e.target.id === 'gift-card-message') { 4983 const textarea = e.target; 4984 const charCounter = document.getElementById('gift-card-char-counter'); 4985 if (charCounter) { 4986 const currentLength = textarea.value.length; 4987 const maxLength = 200; 4988 4989 charCounter.textContent = `${currentLength}/${maxLength}`; 4990 charCounter.className = 'gift-card-popup__char-counter'; 4991 4992 if (currentLength >= maxLength) { 4993 charCounter.classList.add('error'); 4994 } else if (currentLength >= 180) { 4995 charCounter.classList.add('warning'); 4996 } 4997 } 4998 updateGiftPreview(); 4999 } else if (e.target.id === 'gift-card-to' || e.target.id === 'gift-card-from') { 5000 updateGiftPreview(); 5001 } 5002 } 5003 5004 // Optimized cart interaction handler 5005 const debouncedCartCheck = debounce(() => { 5006 invalidateCartCache(); 5007 state.lastCartState = null; 5008 checkAndToggleUpsellWidget(); 5009 }, 400); 5010 5011 function handleCartInteraction(e) { 5012 if (e.target.closest('[data-cart-remove]') || 5013 e.target.closest('[data-cart-quantity]') || 5014 e.target.closest('.cart__qty-button') || 5015 (e.target.type === 'number' && 5016 (e.target.closest('[data-cart-item]') || e.target.closest('.cart__item')))) { 5017 debouncedCartCheck(); 5018 } 5019 } 5020 5021 // Setup watchers 5022 function setupCartWatchers() { 5023 // Single consolidated event listener 5024 const cartEvents = ['cart:build', 'cart:updated', 'cart:change', 'ajaxProduct:added', 'cart:refresh']; 5025 const eventHandler = debounce(() => { 5026 invalidateCartCache(); 5027 state.lastCartState = null; 5028 checkAndToggleUpsellWidget(); 5029 }, CONFIG.DEBOUNCE_DELAY); 5030
5031 cartEvents.forEach(eventName => { 5032 document.addEventListener(eventName, eventHandler, { passive: true }); 5033 }); 5034 5035 // Optimized MutationObserver 5036 const cartContainer = safeQuerySelector('.cart__items') || 5037 safeQuerySelector('[data-cart-items]') || 5038 safeQuerySelector('.cart-drawer') || 5039 safeQuerySelector('.cart'); 5040 5041 if (cartContainer) { 5042 const debouncedMutationCheck = debounce(() => { 5043 invalidateCartCache(); 5044 state.lastCartState = null; 5045 checkAndToggleUpsellWidget(); 5046 }, CONFIG.MUTATION_DEBOUNCE); 5047 5048 const observer = new MutationObserver(mutations => { 5049 const hasRelevantChanges = mutations.some(mutation => 5050 mutation.type === 'childList' && 5051 (mutation.addedNodes.length > 0 || mutation.removedNodes.length > 0) 5052 ); 5053 5054 if (hasRelevantChanges) { 5055 debouncedMutationCheck(); 5056 } 5057 }); 5058 5059 observer.observe(cartContainer, { 5060 childList: true, 5061 subtree: true 5062 }); 5063 } 5064 5065 // Visibility change check (only when tab is visible) 5066 if (typeof document.hidden !== 'undefined') { 5067 document.addEventListener('visibilitychange', () => { 5068 if (!document.hidden) { 5069 invalidateCartCache(); 5070 checkAndToggleUpsellWidget(); 5071 } 5072 }, { passive: true }); 5073 } 5074 5075 // Reduced interval for periodic checks 5076 state.visibilityCheckInterval = setInterval(() => { 5077 if (!document.hidden) { 5078 checkAndToggleUpsellWidget(); 5079 } 5080 }, CONFIG.VISIBILITY_CHECK_INTERVAL); 5081 } 5082 5083 // Initialize 5084 function init() { 5085 if (state.isInitialized) return; 5086 state.isInitialized = true; 5087 5088 // Setup all event listeners 5089 document.addEventListener('click', handleUpsellButtonClick); 5090 document.addEventListener('click', handlePopupClick); 5091 document.addEventListener('click', handleCartInteraction); 5092 document.addEventListener('keydown', handleKeydown); 5093 document.addEventListener('input', handleInput, { passive: true }); 5094 5095 // Setup gift option radio button listeners 5096 const giftOptions = document.querySelectorAll('.gift-option-radio'); 5097 giftOptions.forEach(option => { 5098 option.addEventListener('change', toggleCustomFields); 5099 }); 5100 5101 // Initial check and setup watchers 5102 setTimeout(() => { 5103 checkAndToggleUpsellWidget(); 5104 setupCartWatchers(); 5105 initCarousel(); 5106 }, CONFIG.INITIAL_CHECK_DELAY); 5107 5108 // Also initialize carousel when widget becomes visible 5109 const observer = new MutationObserver(() => { 5110 const upsellWidget = safeQuerySelector('[data-cart-upsell]'); 5111 if (upsellWidget && upsellWidget.style.display !== 'none' && !carouselState.isInitialized) { 5112 setTimeout(initCarousel, 100); 5113 } 5114 }); 5115 5116 const upsellWidget = safeQuerySelector('[data-cart-upsell]'); 5117 if (upsellWidget) { 5118 observer.observe(upsellWidget, { 5119 attributes: true, 5120 attributeFilter: ['style'] 5121 }); 5122 } 5123 } 5124 5125 // Start when DOM is ready 5126 if (document.readyState === 'loading') { 5127 document.addEventListener('DOMContentLoaded', init); 5128 } else { 5129 init(); 5130 } 5131 5132 // Cleanup on page unload 5133 window.addEventListener('beforeunload', () => { 5134 if (state.visibilityCheckInterval) { 5135 clearInterval(state.visibilityCheckInterval); 5136 } 5137 if (state.checkTimeout) { 5138 clearTimeout(state.checkTimeout); 5139 } 5140 }); 5141 })(); 5142</script>
5142 5143 5144 5145 5146 5147 5148<div class="main-new-reviews-align" role="region" aria-roledescription="carousel" aria-label="Customer reviews"> 5149 <div class="swiper mySwiper"> 5150 <div class="swiper-wrapper"> 5151 5152 5153<div 5154 class="swiper-slide" 5155 role="group" 5156 aria-roledescription="slide" 5157 aria-label="Review 1 of 5" 5158 > 5159 <div class="main-cart-review-align"> 5160 <span class="visually-hidden">Rated 5 out of 5 stars.</span> 5161 <div class="cart__reviews-stars" aria-hidden="true"> 5162 5163 <div class="star-icon"> 5164 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5165 <defs> 5166 <linearGradient id="halfWhite"> 5167 <stop offset="100%" stop-color="#b73d09"></stop> 5168 </linearGradient> 5169 </defs> 5170 <path 5171 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" 5172 stroke="#b73d09" fill="url(#halfWhite)"></path> 5173 </svg> 5174 </div> 5175 5176 5177 5178 <div class="star-icon"> 5179 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5180 <defs> 5181 <linearGradient id="halfWhite"> 5182 <stop offset="100%" stop-color="#b73d09"></stop> 5183 </linearGradient> 5184 </defs> 5185 <path 5186 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" 5187 stroke="#b73d09" fill="url(#halfWhite)"></path> 5188 </svg> 5189 </div> 5190 5191 5192 5193 <div class="star-icon"> 5194 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5195 <defs> 5196 <linearGradient id="halfWhite"> 5197 <stop offset="100%" stop-color="#b73d09"></stop> 5198 </linearGradient> 5199 </defs> 5200 <path 5201 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" 5202 stroke="#b73d09" fill="url(#halfWhite)"></path> 5203 </svg> 5204 </div> 5205 5206 5207 5208 <div class="star-icon"> 5209 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5210 <defs> 5211 <linearGradient id="halfWhite"> 5212 <stop offset="100%" stop-color="#b73d09"></stop> 5213 </linearGradient> 5214 </defs> 5215 <path 5216 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" 5217 stroke="#b73d09" fill="url(#halfWhite)"></path> 5218 </svg> 5219 </div> 5220 5221 5222 5223 <div class="star-icon"> 5224 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5225 <defs> 5226 <linearGradient id="halfWhite"> 5227 <stop offset="100%" stop-color="#b73d09"></stop> 5228 </linearGradient> 5229 </defs> 5230 <path 5231 d="M9 14.118L14.562 17.475L13.086 11.
5231148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5232 stroke="#b73d09" fill="url(#halfWhite)"></path> 5233 </svg> 5234 </div> 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 </div> 5250 <div class="cart__reviews-text" 5251 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_text"> 5252 <p> 5253 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! 5254 </p> 5255 </div> 5256 <div class="cart_reviews-author-buyer"> 5257 <span class="cart__reviews-author" 5258 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_author">Alena Z.</span> 5259 <span class="verified-buyer" 5260 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_title">Verified Buyer</span> 5261 </div> 5262 </div> 5263 </div> 5264 5265 5266<div 5267 class="swiper-slide" 5268 role="group" 5269 aria-roledescription="slide" 5270 aria-label="Review 2 of 5" 5271 > 5272 <div class="main-cart-review-align"> 5273 <span class="visually-hidden">Rated 5 out of 5 stars.</span> 5274 <div class="cart__reviews-stars" aria-hidden="true"> 5275 5276 <div class="star-icon"> 5277 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5278 <defs> 5279 <linearGradient id="halfWhite"> 5280 <stop offset="100%" stop-color="#b73d09"></stop> 5281 </linearGradient> 5282 </defs> 5283 <path 5284 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" 5285 stroke="#b73d09" fill="url(#halfWhite)"></path> 5286 </svg> 5287 </div> 5288 5289 5290 5291 <div class="star-icon"> 5292 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5293 <defs> 5294 <linearGradient id="halfWhite"> 5295 <stop offset="100%" stop-color="#b73d09"></stop> 5296 </linearGradient> 5297 </defs> 5298 <path 5299 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" 5300 stroke="#b73d09" fill="url(#halfWhite)"></path> 5301 </svg> 5302 </div> 5303 5304 5305 5306 <div class="star-icon"> 5307 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5308 <defs> 5309 <linearGradient id="halfWhite"> 5310 <stop offset="100%" stop-color="#b73d09"></stop> 5311 </linearGradient> 5312 </defs> 5313 <path 5314 d="M9 14.118L14.562 17.475L13.086 11.
5314148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5315 stroke="#b73d09" fill="url(#halfWhite)"></path> 5316 </svg> 5317 </div> 5318 5319 5320 5321 <div class="star-icon"> 5322 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5323 <defs> 5324 <linearGradient id="halfWhite"> 5325 <stop offset="100%" stop-color="#b73d09"></stop> 5326 </linearGradient> 5327 </defs> 5328 <path 5329 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" 5330 stroke="#b73d09" fill="url(#halfWhite)"></path> 5331 </svg> 5332 </div> 5333 5334 5335 5336 <div class="star-icon"> 5337 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5338 <defs> 5339 <linearGradient id="halfWhite"> 5340 <stop offset="100%" stop-color="#b73d09"></stop> 5341 </linearGradient> 5342 </defs> 5343 <path 5344 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" 5345 stroke="#b73d09" fill="url(#halfWhite)"></path> 5346 </svg> 5347 </div> 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 </div> 5363 <div class="cart__reviews-text" 5364 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_text"> 5365 <p> 5366 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! 5367 </p> 5368 </div> 5369 <div class="cart_reviews-author-buyer"> 5370 <span class="cart__reviews-author" 5371 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_author">Maribet U.</span> 5372 <span class="verified-buyer" 5373 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_title">Verified Buyer</span> 5374 </div> 5375 </div> 5376 </div> 5377 5378 5379<div 5380 class="swiper-slide" 5381 role="group" 5382 aria-roledescription="slide" 5383 aria-label="Review 3 of 5" 5384 > 5385 <div class="main-cart-review-align"> 5386 <span class="visually-hidden">Rated 5 out of 5 stars.</span> 5387 <div class="cart__reviews-stars" aria-hidden="true"> 5388 5389 <div class="star-icon"> 5390 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5391 <defs> 5392 <linearGradient id="halfWhite"> 5393 <stop offset="100%" stop-color="#b73d09"></stop> 5394 </linearGradient> 5395 </defs> 5396 <path 5397 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" 5398 stroke="#b73d09" fill="url(#halfWhite)"></path> 5399 </svg> 5400 </div> 5401 5402 5403 5404 <div class="star-icon"> 5405 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5406 <defs> 5407 <linearGradient id="halfWhite"> 5408 <stop offset="100%" stop-color="#b73d09"></stop> 5409 </linearGradient> 5410 </defs> 5411 <path 5412 d="M9 14.118L14.562 17.475L13.086 11.
5412148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5413 stroke="#b73d09" fill="url(#halfWhite)"></path> 5414 </svg> 5415 </div> 5416 5417 5418 5419 <div class="star-icon"> 5420 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5421 <defs> 5422 <linearGradient id="halfWhite"> 5423 <stop offset="100%" stop-color="#b73d09"></stop> 5424 </linearGradient> 5425 </defs> 5426 <path 5427 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" 5428 stroke="#b73d09" fill="url(#halfWhite)"></path> 5429 </svg> 5430 </div> 5431 5432 5433 5434 <div class="star-icon"> 5435 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5436 <defs> 5437 <linearGradient id="halfWhite"> 5438 <stop offset="100%" stop-color="#b73d09"></stop> 5439 </linearGradient> 5440 </defs> 5441 <path 5442 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" 5443 stroke="#b73d09" fill="url(#halfWhite)"></path> 5444 </svg> 5445 </div> 5446 5447 5448 5449 <div class="star-icon"> 5450 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5451 <defs> 5452 <linearGradient id="halfWhite"> 5453 <stop offset="100%" stop-color="#b73d09"></stop> 5454 </linearGradient> 5455 </defs> 5456 <path 5457 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" 5458 stroke="#b73d09" fill="url(#halfWhite)"></path> 5459 </svg> 5460 </div> 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 </div> 5476 <div class="cart__reviews-text" 5477 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_text"> 5478 <p> 5479 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. 5480 </p> 5481 </div> 5482 <div class="cart_reviews-author-buyer"> 5483 <span class="cart__reviews-author" 5484 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_author">Ross F.</span> 5485 <span class="verified-buyer" 5486 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_title">Verified Buyer</span> 5487 </div> 5488 </div> 5489 </div> 5490 5491 5492<div 5493 class="swiper-slide" 5494 role="group" 5495 aria-roledescription="slide" 5496 aria-label="Review 4 of 5" 5497 > 5498 <div class="main-cart-review-align">
5499 <span class="visually-hidden">Rated 5 out of 5 stars.</span> 5500 <div class="cart__reviews-stars" aria-hidden="true"> 5501 5502 <div class="star-icon"> 5503 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5504 <defs> 5505 <linearGradient id="halfWhite"> 5506 <stop offset="100%" stop-color="#b73d09"></stop> 5507 </linearGradient> 5508 </defs> 5509 <path 5510 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" 5511 stroke="#b73d09" fill="url(#halfWhite)"></path> 5512 </svg> 5513 </div> 5514 5515 5516 5517 <div class="star-icon"> 5518 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5519 <defs> 5520 <linearGradient id="halfWhite"> 5521 <stop offset="100%" stop-color="#b73d09"></stop> 5522 </linearGradient> 5523 </defs> 5524 <path 5525 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" 5526 stroke="#b73d09" fill="url(#halfWhite)"></path> 5527 </svg> 5528 </div> 5529 5530 5531 5532 <div class="star-icon"> 5533 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5534 <defs> 5535 <linearGradient id="halfWhite"> 5536 <stop offset="100%" stop-color="#b73d09"></stop> 5537 </linearGradient> 5538 </defs> 5539 <path 5540 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" 5541 stroke="#b73d09" fill="url(#halfWhite)"></path> 5542 </svg> 5543 </div> 5544 5545 5546 5547 <div class="star-icon"> 5548 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5549 <defs> 5550 <linearGradient id="halfWhite"> 5551 <stop offset="100%" stop-color="#b73d09"></stop> 5552 </linearGradient> 5553 </defs> 5554 <path 5555 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" 5556 stroke="#b73d09" fill="url(#halfWhite)"></path> 5557 </svg> 5558 </div> 5559 5560 5561 5562 <div class="star-icon"> 5563 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5564 <defs> 5565 <linearGradient id="halfWhite"> 5566 <stop offset="100%" stop-color="#b73d09"></stop> 5567 </linearGradient> 5568 </defs> 5569 <path 5570 d="M9 14.118L14.562 17.475L13.086 11.
5570148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5571 stroke="#b73d09" fill="url(#halfWhite)"></path> 5572 </svg> 5573 </div> 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 </div> 5589 <div class="cart__reviews-text" 5590 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_text"> 5591 <p> 5592 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! 5593 </p> 5594 </div> 5595 <div class="cart_reviews-author-buyer"> 5596 <span class="cart__reviews-author" 5597 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_author">Gabriel A.</span> 5598 <span class="verified-buyer" 5599 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_title">Verified Buyer</span> 5600 </div> 5601 </div> 5602 </div> 5603 5604 5605<div 5606 class="swiper-slide" 5607 role="group" 5608 aria-roledescription="slide" 5609 aria-label="Review 5 of 5" 5610 > 5611 <div class="main-cart-review-align"> 5612 <span class="visually-hidden">Rated 5 out of 5 stars.</span> 5613 <div class="cart__reviews-stars" aria-hidden="true"> 5614 5615 <div class="star-icon"> 5616 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5617 <defs> 5618 <linearGradient id="halfWhite"> 5619 <stop offset="100%" stop-color="#b73d09"></stop> 5620 </linearGradient> 5621 </defs> 5622 <path 5623 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" 5624 stroke="#b73d09" fill="url(#halfWhite)"></path> 5625 </svg> 5626 </div> 5627 5628 5629 5630 <div class="star-icon"> 5631 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5632 <defs> 5633 <linearGradient id="halfWhite"> 5634 <stop offset="100%" stop-color="#b73d09"></stop> 5635 </linearGradient> 5636 </defs> 5637 <path 5638 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" 5639 stroke="#b73d09" fill="url(#halfWhite)"></path> 5640 </svg> 5641 </div> 5642 5643 5644 5645 <div class="star-icon"> 5646 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5647 <defs> 5648 <linearGradient id="halfWhite"> 5649 <stop offset="100%" stop-color="#b73d09"></stop> 5650 </linearGradient> 5651 </defs> 5652 <path 5653 d="M9 14.118L14.562 17.475L13.086 11.
5653148L18 6.891L11.529 6.342L9 0.375L6.471 6.342L0 6.891L4.914 11.148L3.438 17.475L9 14.118Z" 5654 stroke="#b73d09" fill="url(#halfWhite)"></path> 5655 </svg> 5656 </div> 5657 5658 5659 5660 <div class="star-icon"> 5661 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5662 <defs> 5663 <linearGradient id="halfWhite"> 5664 <stop offset="100%" stop-color="#b73d09"></stop> 5665 </linearGradient> 5666 </defs> 5667 <path 5668 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" 5669 stroke="#b73d09" fill="url(#halfWhite)"></path> 5670 </svg> 5671 </div> 5672 5673 5674 5675 <div class="star-icon"> 5676 <svg viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" width="15" height="15"> 5677 <defs> 5678 <linearGradient id="halfWhite"> 5679 <stop offset="100%" stop-color="#b73d09"></stop> 5680 </linearGradient> 5681 </defs> 5682 <path 5683 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" 5684 stroke="#b73d09" fill="url(#halfWhite)"></path> 5685 </svg> 5686 </div> 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 </div> 5702 <div class="cart__reviews-text" 5703 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_text"> 5704 <p> 5705 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! 5706 </p> 5707 </div> 5708 <div class="cart_reviews-author-buyer"> 5709 <span class="cart__reviews-author" 5710 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_author">Amethyst B.</span> 5711 <span class="verified-buyer" 5712 data-live-text-setting="section.sections--16543358058694__header.block.review_nQLNTK.review_title">Verified Buyer</span> 5713 </div> 5714 </div> 5715 </div> 5716 5717 5718</div> 5719<div class="swiper-pagination"></div> 5720</div> 5721</div> 5722<!-- Initialize Swiper -->
5723<script> 5724 var swiperReviews = new Swiper(".mySwiper", { 5725 slidesPerView: 1.2, 5726 spaceBetween: 14, 5727 initialSlide: 1, 5728 loop: true, 5729 centeredSlides: true, 5730 pagination: { 5731 el: ".swiper-pagination", 5732 clickable: true, 5733 }, 5734 on: { 5735 init: function () { 5736 if (this.slides.length <= 2) { 5737 this.params.loop = false; // Disable loop mode if there are only 2 slides 5738 } 5739 syncReviewsA11y(this); 5740 labelReviewsPagination(this); 5741 }, 5742 slideChange: function () { 5743 syncReviewsA11y(this); 5744 } 5745 } 5746 }); 5747 5748 // a11y: APG â hide non-active slides from AT. Loop-safe (value-guarded). 5749 function syncReviewsA11y(swiper) { 5750 var slides = swiper.el.querySelectorAll('.swiper-slide'); 5751 for (var i = 0; i < slides.length; i++) { 5752 var isActive = slides[i].classList.contains('swiper-slide-active'); 5753 var target = isActive ? 'false' : 'true'; 5754 if (slides[i].getAttribute('aria-hidden') !== target) { 5755 slides[i].setAttribute('aria-hidden', target); 5756 } 5757 // Hide duplicates (loop clones) from AT always â original slide carries the label 5758 if (slides[i].classList.contains('swiper-slide-duplicate')) { 5759 if (slides[i].getAttribute('aria-hidden') !== 'true') { 5760 slides[i].setAttribute('aria-hidden', 'true'); 5761 } 5762 } 5763 } 5764 } 5765 function labelReviewsPagination(swiper) { 5766 setTimeout(function () { 5767 var bullets = swiper.el.querySelectorAll('.swiper-pagination-bullet'); 5768 for (var i = 0; i < bullets.length; i++) { 5769 var label = 'Go to review ' + (i + 1); 5770 if (bullets[i].getAttribute('aria-label') !== label) { 5771 bullets[i].setAttribute('aria-label', label); 5772 } 5773 } 5774 }, 100); 5775 } 5776</script>
5776 5777 5778<style> 5779 .main-cart-review-align { 5780 padding: 16px; 5781 background: #ffffff; 5782 } 5783 5784 .main-new-reviews-align { 5785 margin: 15px -20px; 5786 } 5787 5788 .main-new-reviews-align .mySwiper { 5789 padding-bottom: 40px; 5790 } 5791 5792 .cart_reviews-author-buyer { 5793 display: flex; 5794 align-items: center; 5795 gap: 6px; 5796 } 5797 5798 .cart__reviews-stars .star-icon svg { 5799 width: 16px; 5800 height: 16px; 5801 display: block; 5802 } 5803 5804 .cart__reviews-stars { 5805 display: flex; 5806 gap: 5px; 5807 } 5808 5809 .cart__reviews-author { 5810 font-family: 'Lato'; 5811 font-size: 15px; 5812 font-weight: 600; 5813 line-height: 16.8px; 5814 letter-spacing: 0.15em; 5815 text-align: left; 5816 margin: 0 !important; 5817 color: #242426; 5818 text-transform: uppercase !important; 5819 } 5820 5821 .cart__reviews-text p { 5822 margin: 0 !important; 5823 min-height: 60px; 5824 display: -webkit-box; 5825 -webkit-line-clamp: 3; 5826 -webkit-box-orient: vertical; 5827 overflow: hidden; 5828 } 5829 5830 .cart__reviews-text { 5831 padding: 10px 0; 5832 color: #242426; 5833 font-family: Lato; 5834 font-size: 16px; 5835 font-weight: 400; 5836 line-height: 19.5px; 5837 letter-spacing: 0.02em; 5838 text-align: left; 5839 overflow: hidden; 5840 display: -webkit-box; 5841 -webkit-line-clamp: 3; 5842 -webkit-box-orient: horizontal; 5843 } 5844 5845 .verified-buyer { 5846 font-family: Lato; 5847 font-size: 14px; 5848 font-weight: 400; 5849 line-height: 18px; 5850 letter-spacing: 0.02em; 5851 text-align: left; 5852 color: #24242680; 5853 } 5854 5855 .mobile-dots { 5856 display: flex; 5857 align-items: center; 5858 justify-content: center; 5859 } 5860 5861 .mobile-dots button { 5862 background: none; 5863 border: none; 5864 display: inline-block; 5865 cursor: pointer; 5866 } 5867 5868 .mobile-arrows { 5869 margin-top: 32px; 5870 padding-bottom: 10px; 5871 } 5872 5873 .mini-cart-reviews { 5874 display: none !important; 5875 } 5876 5877 .mini-cart-reviews .button-circle { 5878 display: inline-block; 5879 width: 8px; 5880 height: 8px; 5881 border: 1px solid black; 5882 border-radius: 50%; 5883 } 5884 5885 .mini-cart-reviews .button-circle.active { 5886 background-color: black; 5887 } 5888 5889 5890 .mini-cart-reviews { 5891 padding-bottom: 34px; 5892 } 5893 5894 @media screen and (max-width: 767px) { 5895 .cart__reviews-text { 5896 font-size: 13px; 5897 } 5898 5899 .cart__reviews-author, 5900 .verified-buyer { 5901 font-size: 12px !important; 5902 } 5903 5904 .main-cart-review-align { 5905 padding: 16px; 5906 background: #ffffff; 5907 } 5908 5909 .cart__reviews-text p { 5910 -webkit-line-clamp: 3; 5911 min-height: 60px; 5912 } 5913 } 5914</style> 5915 5916 5917 </div> 5918 5919 5920 <div class="cart__footer"> 5921 <div 5922 class="cart__item-sub cart__item-row cart__item--subtotal" 5923 id="focus-subtotal"> 5924 <div id="subtotal-text">Subtotal</div> 5925 <div data-subtotal id="price-text"> 5926 $0.00 5927 </div> 5928 </div> 5929 <input 5930 hidden 5931 id="total-price" 5932 value="0"> 5933 <div data-discounts></div> 5934 5935 5936<div class="cart_savings d-none "> 5937<span> You Saved </span> 5938 5939<span class="cart_savings_amount d-none "> $0.00</span> 5940 </div> 5941 5942 5943 <div class="cart__item-row cart__checkout-wrapper payment-buttons"> 5944 5945 <div class="checkout-btn-class"> 5946 <button 5947 type="submit" 5948 name="checkout" 5949 data-terms-required="false" 5950 class="btn btn-custom btn-orange-bg cart__checkout cart__checkout_enabled"> 5951 Checkout 5952 </button> 5953 </div> 5954 5955 5956 </div> 5957 5958 <div class="cart__item-row--footer text-center"> 5959 <small class="shipping-at-checkout-text">Shipping, taxes and discounts calculated at checkout </small> 5960 </div> 5961 </div> 5962</form> 5963 5964 5965 5966 5967 <div class="empty-cart-main"> 5968 <h2 class="empty-cart-title">your cart is empty</h2> 5969 5970 <div class="empty-cart-img"> 5971 <svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewB
5971ox="0 0 200 200" fill="none" aria-hidden="true" focusable="false"> 5972 <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"/> 5973 <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"/> 5974 </svg> 5975 </div><div class="subscribe-now-btn"> 5976 <a class="btn btn-custom btn--full btn-height btn-orange-bg" 5977 href="https://www.bokksu.com/products/classic-bokksu">Subscribe Now</a> 5978 </div> 5979</div> 5980 <style> 5981 .subscribe-now-btn{ 5982 margin-top: 40px; 5983 } 5984 .site-header__drawer-animate.is-empty { 5985 background: var(--colorWhite) !important; 5986 } 5987 .is-empty .empty-cart-main{ 5988 display: flex; 5989 } 5990 .btn-height{ 5991 height:48px !important; 5992 width: 320px !important; 5993 } 5994 .empty-cart-main{ 5995 display: none; 5996 /* width: 600px; */ 5997 padding-bottom: 0px; 5998 flex-direction: column; 5999 align-items: center; 6000 /* gap: 56px; */ 6001 justify-content: center; 6002 background-color: white; 6003 } 6004 .empty-cart { 6005 padding-bottom: 0 !important; 6006 } 6007 .empty-cart-title{ 6008 font-family: "Montserrat", sans-serif; 6009 font-size: 14px !important; 6010 font-style: normal; 6011 font-weight: 500; 6012 line-height: 18px!important; 6013 letter-spacing: 5px; 6014 text-transform: uppercase !important; 6015 margin-top: 56px; 6016 color: #828282; 6017 margin-bottom: 56px; 6018 } 6019 6020 .empty-cart-img{ 6021 display: flex; 6022 width: 260px; 6023 height: 260px; 6024 justify-content: center; 6025 align-items: center; 6026 gap: 8px; 6027 background: #F4EEE5; 6028 border-radius: 50%; 6029 } 6030 .empty-cart-img svg { 6031 width: 160px; 6032 height: 160px; 6033 } 6034 p.f-shipping-text { 6035 text-align: center; 6036 font-family: Lato; 6037 font-size: 16px; 6038 font-style: normal; 6039 font-weight: 400; 6040 line-height: 24px; 6041 letter-spacing: 0.5px; 6042 margin-top: 32px; 6043 margin-bottom: 32px; 6044 color: #828282; 6045 visibility:hidden; 6046 } 6047 6048 .subscribe-now-btn .btn.btn-custom.btn-orange-bg{ 6049 line-height: 22px !important; 6050 } 6051 6052 6053 6054 6055 .gift-products-certificate-empty-cart { 6056 padding: 6px 10px; 6057 } 6058 6059 6060 .align-close-btn-main { 6061 flex: 1 1 auto; 6062 display: flex; 6063 } 6064 6065 @media screen and (min-width:850px) { 6066 .align-main-cart-customer.adjust-mob-cart.cart-empty{ 6067 6068 display: block; 6069 width: 100%; 6070 overflow: scroll; 6071 }
6072 .site-header__drawer-animate.is-empty{ 6073 width: 100% !important; 6074 overflow: auto; 6075 max-width: 100% !important 6076 } 6077 /* .empty-cart-main{ 6078 padding-bottom: 3em; 6079 } */ 6080 /* #HeaderCart{ 6081 overflow: scroll; 6082 } */ 6083 } 6084 @media screen and (max-width:849px) { 6085 .empty-cart-main{ 6086 padding-bottom: 3em; 6087 } 6088 } 6089 6090 @media screen and (max-width: 680px) { 6091 .empty-cart-img { 6092 width: 240px; 6093 height: 240px; 6094 } 6095 .empty-cart-img svg { 6096 width: 150px; 6097 height: 150px; 6098 } 6099 .empty-cart-title { 6100 margin-top: 40px; 6101 margin-bottom: 40px; 6102 } 6103 .header-wrapper--compressed .empty-cart-title { 6104 margin-top: 54px; 6105 margin-bottom: 54px; 6106 } 6107 .empty-cart-main { 6108 padding-bottom: 3.33em; 6109 } 6110 .is-empty .empty-cart-main , .is-empty.site-header__drawer-animate , .empty-cart .align-main-cart-customer , 6111 .align-main-cart-customer.adjust-mob-cart.empty-cart { 6112 height: 100% !important; 6113 } 6114 /* .mob-cart-align { 6115 height: 100vh !important; 6116 } */ 6117 .empty-cart .empty-cart-main { 6118 justify-content: flex-start; 6119 } 6120 } 6121 6122 /* #HeaderCartTrigger.cart-empty{ 6123 padding-bottom: 26px !important; 6124 } */ 6125 .main-free-gift-empty-cart { 6126 padding: 20px 20px 0; 6127 } 6128 6129 6130 .is-empty .main-progress-bar-with-markups.main-bar-align { 6131 display: none; 6132 } 6133 6134</style> 6135 6136 6137 6138 6139 6140 6141<div class="empty-cart-main-products d-none"> 6142 <p class="empty-text">your cart is empty</p> 6143 6144 <div class="empty-cart-container"> 6145 <h2 class="picks-text">popular picks</h2> 6146 <div id="empty-cart-rebuy-products"></div> 6147 <div class="discover-more-btn"> 6148 <a class="btn btn-custom btn-light-green-bg" href="https://www.bokksumarket.com/collections/all-products">discover more</a> 6149 </div> 6150 </div> 6151</div> 6152 6153<!-- <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> --> 6154<style> 6155 .main-dualcart.subscription-product-container + .gift-subscription-container { 6156 margin-top: 20px; 6157} 6158 /* Empty Cart Design for Products Css starts */ 6159 .cart_savings{ 6160 display: flex; 6161 justify-content: space-between; 6162 margin-bottom: 20px; 6163 } 6164 .cart_savings span{ 6165 color:#EC1C24; 6166 font-weight: 700; 6167 } 6168 6169 .is-empty .empty-cart-main-products { 6170 display: block 6171 } 6172 .empty-cart-main-products { 6173 padding: 0 40px 64px; 6174 display: none 6175 } 6176 .img-height { 6177 height: 56px 6178 } 6179 .empty-cart-rebuy-products { 6180 display: flex; 6181 flex-wrap: wrap; 6182 justify-content: end; 6183 line-height: 1.4; 6184 margin-top: 8px; 6185 } 6186 .free-gift-img img { 6187 width: 70px !important; 6188 height: 70px !important; 6189 } 6190 .free-gift-img { 6191 min-width: 70px !important; 6192 min-height: 70px !important; 6193 } 6194 .align-name-free-gift { 6195 margin-right: 10px; 6196 } 6197 .free-gift-titles { 6198 overflow: hidden; 6199 text-overflow: ellipsis; 6200 display: -webkit-box; 6201 -webkit-line-clamp: 2; 6202 -webkit-box-orient: vertical; 6203 } 6204 .gift-free-add-btn button { 6205 font-size: 14px !important; 6206 padding: 2px 14px !important; 6207 } 6208 .gift-products { 6209 padding: 10px 50px; 6210 } 6211 6212 .gwp-with-choice .gift-products { 6213 padding: 5px 20px; 6214 } 6215 6216 6217 .empty-cart-plus-icon { 6218 display: flex; 6219 width: 40px; 6220 height: 40px; 6221 padding: 14px 8px 8px; 6222 justify-content: center; 6223 align-items: center; 6224 gap: 8px; 6225 background: #6CA16E; 6226 color: white; 6227 border-radius: 24px; 6228 position: absolute; 6229 top: -12px; 6230 right: -12px; 6231 } 6232 6233 #super-scrip { 6234 top: -6.1px 6235 } 6236 6237 6238 .align-main-cart-customer.is-empty { 6239 padding-bottom: 0; 6240 } 6241 6242 .market-cart .cart__image img { 6243 position: initial !important; 6244 } 6245 6246 .align-name-free-gift-certificate { 6247 margin-left: 10px; 6248 } 6249 6250 .cart__item-details .onward-tracking-normal { 6251 min-width: 100% !important; 6252 } 6253 6254 @media only screen and (max-width:1430px) and(min-width: 850px) { 6255 .empty-cart-main-products { 6256 height: 75vh; 6257 overflow: auto; 6258 padding: 0 40px; 6259 } 6260 .empty-cart-main-products::-webkit-scrollbar {
6261 width: 1px; 6262 } 6263 6264 } 6265 @media only screen and (max-width: 850px) { 6266 .customer-loved.is-empty { 6267 display: none !important 6268 } 6269 .purchase-items.is-empty { 6270 display: none !important 6271 } 6272 .mob-cart-align { 6273 width: 100% !important 6274 } 6275 .align-main-cart-customer.is-empty { 6276 height: 80vh; 6277 overflow: auto; 6278 justify-content: flex-end; 6279 } 6280 .align-main-cart-customer::-webkit-scrollbar { 6281 width: 1px; 6282 } 6283 } 6284 /* Empty Cart Design for Products Css Ends */ 6285 6286 6287 6288 /* Empty Cart Design */ 6289 6290 .empty-cart-text h4 { 6291 font-size: 16px; 6292 font-style: normal; 6293 font-weight: 400; 6294 line-height: 24px; /* 150% */ 6295 letter-spacing: 0.5px; 6296 font-family: 'Lato'; 6297 color: #828282; 6298 display: flex; 6299 padding: 8px; 6300 justify-content: center; 6301 align-items: center; 6302 gap: 8px; 6303 margin: 0; 6304 } 6305 6306 .title-pr-empty h3 { 6307 font-size: 32px; 6308 font-style: normal; 6309 font-weight: 400; 6310 line-height: 36px; /* 112.5% */ 6311 text-transform: capitalize !important; 6312 margin-bottom: 24px; 6313 text-align: center; 6314 font-family: 'OrpheusPro'; 6315 } 6316 6317 .product-img-empty-cart { 6318 display: flex; 6319 align-items: center; 6320 gap: 16px; 6321 } 6322 6323 .product-img-empty-cart p { 6324 font-size: 16px; 6325 font-style: normal; 6326 font-weight: 400; 6327 line-height: 24px; /* 150% */ 6328 letter-spacing: 0.5px; 6329 /* font-family: 'Lato'; 6330 opacity: 0.5; */ 6331 margin: 0; 6332 } 6333 6334 .main-empty-pr { 6335 display: flex; 6336 align-items: center; 6337 justify-content: space-between; 6338 gap: 16px; 6339 padding: 16px; 6340 border-radius: 8px; 6341 background: #fff; 6342 } 6343 6344 .chevron-empty-cart img { 6345 display: block; 6346 } 6347 6348 .is-empty .empty-cart-design-main { 6349 display: block; 6350 } 6351 6352 6353 .empty-cart-design-main { 6354 padding: 18px 3em 10px; 6355 display: none; 6356 } 6357 6358 .listing-empty-cart { 6359 display: flex; 6360 flex-direction: column; 6361 gap: 24px; 6362 /* max-height: 27.5vh; */ 6363 /* overflow: auto; */ 6364 } 6365 6366 6367 .listing-empty-cart::-webkit-scrollbar-track { 6368 -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); 6369 border-radius: 10px; 6370 background-color: #dbdbdb; 6371 } 6372 6373 .listing-empty-cart::-webkit-scrollbar {
6374 width: 6px; 6375 height: 6px; 6376 background-color: #dbdbdb; 6377 } 6378 6379 .listing-empty-cart::-webkit-scrollbar-thumb { 6380 border-radius: 10px; 6381 -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); 6382 background-color: #7594ae; 6383 } 6384 6385 6386 6387 .main-empty-cart-btn a { 6388 width: 100%; 6389 border-radius: 12px; 6390 margin-top: 24px; 6391 background: var(--brand_color_1) !important; 6392 border-color: var(--brand_color_1) !important; 6393 font-size: 16px !important; 6394 line-height: 22px !important; /* 137.5% */ 6395 letter-spacing: 5px !important; 6396 font-weight: 500; 6397 } 6398 6399 #empty-cart-btn:hover, 6400 #empty-cart-btn:active, 6401 #empty-cart-btn:focus { 6402 border-color: var(--brand_color_1) !important; 6403 color: var(--brand_color_1) !important; 6404 } 6405 6406 6407 .header-wrapper--compressed .site-header__drawer { 6408 top: 0; 6409 } 6410 /* Dual Cart */ 6411 .align-title-minicart h3 { 6412 font-weight: 400; 6413 font-size: 31px !important; 6414 line-height: 38px; 6415 color: #000000; 6416 text-transform: initial !important; 6417 /* white-space: nowrap; */ 6418 margin: 0; 6419 letter-spacing: initial; 6420 } 6421 .minicart-total-amount-section h4 { 6422 font-family: 'Lato' !important; 6423 font-style: normal; 6424 font-weight: 400; 6425 font-size: 16px; 6426 line-height: 25px; 6427 text-align: right; 6428 color: black; 6429 letter-spacing: initial; 6430 margin: 0; 6431 text-transform: initial; 6432 } 6433 .align-title-minicart { 6434 display: flex; 6435 justify-content: space-between; 6436 align-items: center; 6437 } 6438 .main-dualcart { 6439 background: #FFFFFF; 6440 border-radius: 12px; 6441 } 6442 .title-section-minicart { 6443 border-bottom: 2px solid #D2DED3; 6444 padding: 16px 16px 10px; 6445 } 6446 .align-products-dualcart .cart__item { 6447 padding: 14px 10px !important; 6448 margin: 0 20px !important; 6449 border-bottom: 2px solid #D2DED3 !important; 6450 } 6451 .align-products-dualcart .cart__item:last-child { 6452 border: none !important; 6453 } 6454 .align-heading-check { 6455 margin-top: 1.5em; 6456 } 6457 .cart__scrollable { 6458 margin-bottom: 0; 6459 } 6460 .free-shipping-progress, .free-gift-progress, 6461 .free-shipping-progress-frozen { 6462 height: 100%; 6463 background: var(--brand_color_1); 6464 /* transition: width .3s; */ 6465 border-radius: 10px; 6466 z-index: 0; 6467 position: relative; 6468 } 6469 .free-shipping-progress-subscription { 6470 height: 100%; 6471 background: var(--brand_color_1); 6472 transition: width 0.3s; 6473 border-radius: 10px; 6474 z-index: 0; 6475 position: relative; 6476 } 6477 .min-shipping-mark { 6478 position: absolute; 6479 top: 50%; 6480 transform: translateY(-50%); 6481 z-index: 10; 6482 height: 10px; 6483 width: 2px; 6484 background: #294f2e; 6485 display: none; 6486 } 6487 .free-shipping-bar::before { 6488 content: ""; 6489 background: #00000026; 6490 position: absolute; 6491 left: 0; 6492 height: 6px; 6493 right: 100%; 6494 top: 50%; 6495 z-index: 0; 6496 transform: translateY(-50%); 6497 width: 100%; 6498 border-radius: 10px; 6499 } 6500 .free-shipping-bar { 6501 position: relative; 6502 height: 6px; 6503 /* overflow: hidden; */ 6504 } 6505 .free-shipping-bar-mob-popup { 6506 margin-top: 8px; 6507 } 6508 .progress-bar-titles { 6509 margin-top: 20px; 6510 } 6511 .progress-bar-titles p { 6512 margin: 0; 6513 } 6514 .progress-bar-titles p:last-child { 6515 margin-top: 4px; 6516 margin-bottom: 4px; 6517 } 6518 .main-progress-bar { 6519 margin: 0 0 1em; 6520 } 6521 /* SHO-294: accent-edge success notice when a preorder unlocks free shipping */ 6522 .main-progress-bar.is-preorder-freeship { 6523 display: flex; 6524 align-items: center; 6525 background: #ffffff; 6526 border: 1px solid #e3e3df; 6527 border-left: 3px solid #1d7a3f; 6528 border-radius: 6px; 6529 margin: 10px 0 12px; 6530 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); 6531 } 6532 .main-progress-bar.is-preorder-freeship .progress-bar-titles { 6533 display: flex; 6534 align-items: center; 6535 gap: 8px; 6536 margin-top: 0; 6537 width: 100%; 6538 } 6539 .pill-congrats { 6540 display: none; 6541 } 6542 .main-progress-bar.is-preorder-freeship .pill-congrats { 6543 display: inline; 6544 font-size: 13px; 6545 font-weight: 700; 6546 color: #1d7a3f; 6547 } 6548 .main-progress-bar.is-preorder-freeship .progress-bar-titles > .pill-truck-icon { 6549 display: block; 6550 width: 16px; 6551 height: 16px; 6552 color: #1d7a3f; 6553 flex: 0 0 auto; 6554 } 6555 .main-progress-bar.is-preorder-freeship .progress-bar-titles > .free-shipping-text { 6556 display: inline; 6557 margin: 0; 6558 font-size: 13px; 6559 line-height: 1.35; 6560 } 6561 .main-progress-bar.is-preorder-freeship .align-floating-text-bottom { 6562 display: flex; 6563 align-items: center; 6564 } 6565 .main-progress-bar.is-preorder-freeship .floating-bottom-text-img { 6566 display: flex; 6567 flex: 0 0 auto; 6568 width: auto; 6569 height: auto; 6570 padding: 0; 6571 background: none; 6572 border: 0; 6573 border-radius: 0; 6574 box-shadow: none; 6575 } 6576 .pill-truck-icon { 6577 display: none; 6578 } 6579 .main-progress-bar.is-preorder-freeship .market-icon { 6580 display: none; 6581 } 6582 .main-progress-bar.is-preorder-freeship .pill-truck-icon { 6583 display: block; 6584 width: 16px; 6585 height: 16px; 6586 color: #1d7a3f; 6587 } 6588 .main-progress-bar.is-preorder-freeship .bar-heading { 6589 display: inline; 6590 margin: 0; 6591 font-size: 13px; 6592 font-weight: 700; 6593 color: #1d7a3f; 6594 } 6595 .main-progress-bar.is-preorder-freeship .free-shipping-text { 6596 display: inline; 6597 margin: 0 0 0 5px; 6598 font-size: 13px; 6599 line-height: 1.35; 6600 } 6601 .main-progress-bar.is-preorder-freeship .free-shipping-bar, 6602 .main-progress-bar.is-preorder-freeship .bar-heading-2, 6603 .main-progress-bar.is-preorder-freeship .free-shipping-text-for-gift { 6604 display: none; 6605 } 6606 .boutique-container-margin { 6607 margin-top: 24px; 6608 } 6609 .cart__scrollable .rebuy-product-media { 6610 width: 120px !important; 6611 height: 120px !important; 6612 } 6613 .cart__scrollable .rebuy-widget { 6614 padding-bottom: 0 !important; 6615 margin-left: 0 !important; 6616 } 6617 6618 /* Cart Alignment */
6619 .site-header__drawer-animate .cart__item-sub, 6620 .site-header__drawer-animate .cart__item { 6621 align-items: start; 6622 } 6623 .site-header__drawer-animate .cart__item-price-col { 6624 display: flex; 6625 align-items: center; 6626 justify-content: end; 6627 flex-wrap: wrap; 6628 } 6629 .grid-product__price--original.compare_at{ 6630 padding-left:10px; 6631 font-size:18px 6632 } 6633 .site-header__drawer-animate small.cart__discount { 6634 width: 100%; 6635 } 6636 .cart__price--strikethrough { 6637 margin-right: 6px; 6638 } 6639 /* Cart Alignment End */ 6640 6641 @media only screen and (min-width: 1024px) { 6642 .site-header__drawer-animate .cart__item-price-col { 6643 margin-left: 95px; 6644 } 6645 } 6646 6647 @media only screen and (max-width: 960px) { 6648 .site-header__drawer-animate, 6649 .site-header__drawer { 6650 min-width: 100%; 6651 max-width: 100%; 6652 width: 100%; 6653 } 6654 .shipping-at-checkout-text { 6655 font-size: 13px !important; 6656 letter-spacing: 0 !important; 6657 } 6658 .show-not-mob { 6659 display: none; 6660 } 6661 .grid-product__price--original.compare_at{ 6662 6663 font-size:16px 6664 } 6665 } 6666 6667 /* @media screen and (max-width: 850px) { 6668 .empty-cart-text h4 { 6669 height: 30vh; 6670 } 6671 } */ 6672 @media only screen and (min-width: 850px) and(max-width:960px) { 6673 .empty-cart-design-main { 6674 height: 70vh; 6675 overflow: auto 6676 } 6677 6678 .empty-cart-design-main::-webkit-scrollbar {
6679 width: 1px; 6680 } 6681 } 6682 @media only screen and (max-width: 850px) { 6683 .customer-loved.is-empty { 6684 display: none; 6685 } 6686 .purchase-items.is-empty { 6687 display: none !important 6688 } 6689 .mob-cart-align::-webkit-scrollbar { 6690 width: 1px; 6691 } 6692 .mob-cart-align { 6693 width: 100% 6694 } 6695 } 6696 @media only screen and (max-width: 767px) { 6697 .site-header__drawer-animate { 6698 width: 100%; 6699 min-width: 100%; 6700 } 6701 .cart__scrollable { 6702 margin-bottom: 205px; 6703 } 6704 .empty-cart-main-products { 6705 padding: 0 40px; 6706 } 6707 .empty-cart-main-products .empty-text { 6708 margin-top: 0 6709 } 6710 } 6711 @media only screen and (max-width: 580px) { 6712 .cart__item-row { 6713 margin-bottom: 4px 6714} 6715 6716 .align-title-minicart h3 { 6717 font-size: 20px !important; 6718 line-height: 29px !important; 6719 } 6720 .minicart-total-amount-section h4 { 6721 font-size: 16px !important; 6722 line-height: 19px !important; 6723 } 6724 .progress-bar-titles p { 6725 /* padding: 0 0 4px; */ 6726 font-size: 14px; 6727 } 6728 .align-products-dualcart .cart__item { 6729 margin: 0 10px !important; 6730 } 6731 .cart__image a { 6732 width: 70px; 6733 height: 70px 6734 } 6735 .site-header__cart .cart__image { 6736 flex: 0 0 76px; 6737 } 6738 .cart__item-name { 6739 margin-bottom: 4px; 6740 } 6741 .cart__scrollable .rebuy-product-block { 6742 flex-wrap: nowrap; 6743 } 6744 .cart__scrollable .rebuy-product-media { 6745 width: 80px !important; 6746 height: 80px !important; 6747 } 6748 .cart__scrollable .rebuy-product-actions { 6749 width: 50px !important; 6750 } 6751 .cart__scrollable button.rebuy-button svg { 6752 width: 36px; 6753 height: 36px; 6754 margin-top: 6px; 6755 } 6756 .cart__scrollable .rebuy-money.sale { 6757 font-size: 16px; 6758 } 6759 .cart__scrollable .rebuy-money.compare-at { 6760 font-size: 16px; 6761 } 6762 .cart__item-price-col { 6763 display: flex; 6764 flex-wrap: wrap; 6765 justify-content: end; 6766 line-height: 1.4; 6767 margin-top: 8px; 6768 } 6769 .free-gift-img img { 6770 width: 70px !important; 6771 height: 70px !important; 6772 object-fit: contain; 6773 } 6774 .free-gift-img { 6775 min-width: 70px !important; 6776 min-height: 70px !important; 6777 } 6778 .align-name-free-gift { 6779 margin-right: 10px; 6780 } 6781 .free-gift-titles { 6782 overflow: hidden; 6783 text-overflow: ellipsis; 6784 display: -webkit-box; 6785 -webkit-line-clamp: 2; 6786 -webkit-box-orient: vertical; 6787 } 6788 .gift-free-add-btn button { 6789 font-size: 14px !important; 6790 padding: 2px 14px !important; 6791 } 6792 .gift-products { 6793 padding: 10px 50px 10px 30px; 6794 } 6795 } 6796 6797 @media only screen and (max-width: 349px) { 6798 .cart__item-name { 6799 display: -webkit-box; 6800 -webkit-line-clamp: 3; 6801 -webkit-box-orient: vertical; 6802 overflow: hidden; 6803 } 6804 .cart__scrollable { 6805 margin-bottom: 230px; 6806 } 6807 .title-section-minicart { 6808 padding: 16px 12px 10px 6809 } 6810 .cart__item-details .cart__item-sub { 6811 display: flex; 6812 align-items: center; 6813 justify-content: space-between; 6814 } 6815 .floating-text-bottom p, 6816 #floating-frozen-shipping-text { 6817 text-align: left; 6818 font-weight: 400; 6819 } 6820 } 6821 .cart__items{ 6822 display: flex; 6823 flex-direction: column; 6824} 6825.cart__items > * { 6826 order: 0; 6827} 6828 6829 6830 /* Free Gift Customization */ 6831 6832 .free-gift-img { 6833 min-width: 100px; 6834 min-height: 100px; 6835 } 6836 6837 .free-gift-img img { 6838 width: 100px !important; 6839 height: 100px !important; 6840 } 6841 6842 .title-section-minicart-free-gifts { 6843 display: block !important; 6844 } 6845 6846 .free-gift-certificate-bar-btq .free-gift-certificate-text { 6847 font-size: 15px; 6848 line-height: 24px; 6849 text-align: center; 6850 } 6851 6852 .free-gift-certificate-progress { 6853 height: 100%; 6854 background: var(--brand_color_1); 6855 transition: width .3s; 6856 border-radius: 10px; 6857 z-index: 0; 6858 position: relative; 6859 } 6860 6861 .align-gift-prod { 6862 display: flex; 6863 align-items: center; 6864 } 6865 6866 .align-name-free-gift { 6867 max-width: 300px; 6868 margin-left: 10px; 6869 } 6870 6871 .gwp-with-choice .align-name-free-gift { 6872 max-width: 400px; 6873 } 6874 6875 .free-gift-titles a { 6876 text-align: left; 6877 } 6878 6879 .ajax-cart__price.price { 6880 display: flex; 6881 } 6882 6883 .free-gift-titles { 6884 color: #000000; 6885 text-align: left; 6886 } 6887 6888 .gift-products { 6889 display: flex; 6890 align-items: center; 6891 justify-content: space-between; 6892 padding: 10px 50px; 6893 } 6894 6895 .gift-free-add-btn button { 6896 font-size: 14px; 6897 text-transform: inherit; 6898 border-radius: 60px; 6899 letter-spacing: 1px; 6900 background: var(--brand_color_1); 6901 padding: 6px 20px !important; 6902 color: #fff !important; 6903 } 6904 6905 .main-slider-gift .swiper-button-next:after, 6906 .main-slider-gift .swiper-rtl .swiper-button-prev:after, 6907 .main-slider-gift .swiper-button-prev:after, 6908 .main-slider-gift .swiper-rtl .swiper-button-next:after { 6909 font-size: 16px; 6910 background: #var(--brand_color_1);; 6911 width: 30px; 6912 height: 32px; 6913 display: flex; 6914 align-items: center; 6915 justify-content: center; 6916 border-radius: 100px; 6917 padding: 0 16px; 6918 color: #fff; 6919 } 6920 6921 .money, 6922 .sale { 6923 margin-right: 4px; 6924 } 6925 6926 /* .section-minicart-products { 6927 margin-bottom: 20px; 6928 } */ 6929 6930 .free-gift-certificate-amount-text { 6931 color: var(--sale-badge); 6932 font-weight: 700; 6933 } 6934 6935 span.cart_delete_close svg { 6936 width: 11px; 6937 height: 11px; 6938 } 6939 6940 .align-free-gift span.icon {
6941 width: 20px; 6942 height: 20px; 6943 background: rgba(10, 10, 10, 0.2); 6944 border-radius: 100px; 6945 display: flex; 6946 align-items: center; 6947 justify-content: center; 6948 } 6949 6950 span.cart_delete_close { 6951 width: 20px; 6952 height: 20px; 6953 display: block; 6954 } 6955 6956 .cart_delete_close span { 6957 display: flex; 6958 align-items: center; 6959 justify-content: center; 6960 border-radius: 100px; 6961 background: rgba(10, 10, 10, 0.2); 6962 } 6963 6964 .align-free-gift .swiper-button-next:after, 6965 .align-free-gift .swiper-button-prev:after { 6966 border: solid #fff; 6967 border-width: 0 2px 2px 0; 6968 display: inline-block !important; 6969 height: 8.5px !important; 6970 margin: auto !important; 6971 padding: 3px !important; 6972 border-radius: 0 !important; 6973 width: 8px !important; 6974 transform: rotate(-45deg) !important; 6975 } 6976 6977 .align-free-gift .swiper-button-next, 6978 .align-free-gift .swiper-button-prev { 6979 width: 32px !important; 6980 height: 32px !important; 6981 background: var(--brand_color_1); 6982 border-radius: 100px !important; 6983 transform: translateY(6px) !important; 6984 } 6985 6986 .align-free-gift .swiper-button-prev::after { 6987 transform: rotate(135deg) !important; 6988 } 6989 6990 .align-close-btn-main { 6991 flex: 1 1 auto; 6992 display: flex; 6993 } 6994 6995 .floating-bottom-text-img { 6996 min-height: 40px; 6997 min-width: 40px; 6998 } 6999 .floating-text-bottom p { 7000 text-align: left; 7001 } 7002 7003 #floating-frozen-shipping-text { 7004 text-align: left; 7005 font-weight: 400; 7006 } 7007 7008 7009 7010 /* Progress header bar */ 7011 7012 .subtotal-div { 7013 display: flex; 7014 flex-direction: row; 7015 justify-content: space-between; 7016 } 7017 7018 .subtotal-div p { 7019 margin: 0 7020 } 7021 7022 .collection-checkout-btn { 7023 width: 100%; 7024 margin-top: 30px; 7025 background: #294f2e 7026 } 7027 /* #floating-frozen-shipping-text { 7028 color:#000000 !important; 7029 } */ 7030 button[disabled] { 7031 opacity: 0.5; 7032 box-shadow: none 7033 } 7034 .bottom-checkout-txt { 7035 margin-top: 12px; 7036 color: #cbcbcb !important; 7037 font-size: 12px !important; 7038 } 7039 .align-floating-text-bottom { 7040 display: flex; 7041 align-items: start; 7042 margin-top: 10px; 7043 margin-bottom: 10px; 7044 } 7045 7046 .floating-text-bottom h4 { 7047 color: var(--brand_color_1); 7048 font-weight: 700; 7049 line-height: 14px; 7050 text-align: left; 7051 /* font-family: "Neue Haas Unica" !important; */ 7052 text-transform: initial; 7053 /* letter-spacing: 1px !important; */ 7054 display: block; 7055 letter-spacing: 0; 7056 text-rendering: optimizeLegibility; 7057 -webkit-font-smoothing: antialiased; 7058 margin-bottom: 0 !important; 7059 } 7060 7061 .floating-text-bottom { 7062 margin-left: 16px; 7063 } 7064 7065 .floating-bottom-text-img { 7066 border: 1px solid #AEAEAE; 7067 border-radius: 8px; 7068 width: 40px; 7069 height: 40px; 7070 display: flex; 7071 align-items: center; 7072 justify-content: center; 7073 } 7074 button.collection-checkout-btn.button.button--add-to-cart { 7075 font-size: 14px !important; 7076 } 7077 #floating-frozen-checkout-btn .floating-checkout-btn { 7078 color: #ffffff; 7079 background-color: var(--cta_outline_primary_static); 7080 border-color: var(--cta_outline_primary_static); 7081 7082 width: 100%; 7083 font-size: 14px !important; 7084 margin-top: 12px; 7085 height: 52.5px; 7086 } 7087 /* .amount-text-color { 7088 color: #000000; 7089 } */ 7090 7091 button[disabled] { 7092 opacity: 0.5; 7093 box-shadow: none 7094 } 7095 .bottom-checkout-txt { 7096 margin-top: 12px; 7097 color: #cbcbcb !important; 7098 font-size: 12px !important; 7099 } 7100 .align-floating-text-bottom { 7101 display: flex; 7102 align-items: start; 7103 } 7104 7105 .floating-text-bottom h4 { 7106 color: var(--brand_color_1); 7107 font-weight: 700; 7108 line-height: 14px; 7109 text-align: left; 7110 7111 text-transform: initial; 7112 /* letter-spacing: 1px !important; */ 7113 display: block; 7114 letter-spacing: 0; 7115 text-rendering: optimizeLegibility; 7116 -webkit-font-smoothing: antialiased; 7117 margin-bottom: 0 !important; 7118 } 7119 7120 .floating-text-bottom { 7121 margin-left: 16px; 7122 } 7123 7124 .floating-bottom-text-img { 7125 border: 1px solid #AEAEAE; 7126 border-radius: 8px; 7127 width: 40px; 7128 height: 40px; 7129 display: flex; 7130 align-items: center; 7131 justify-content: center; 7132 } 7133 button.collection-checkout-btn.button.button--add-to-cart { 7134 font-size: 14px !important; 7135 } 7136 #floating-frozen-checkout-btn .floating-checkout-btn { 7137 color: #ffffff; 7138 background-color: var(--cta_outline_primary_static); 7139 border-color: var(--cta_outline_primary_static); 7140 7141 width: 100%; 7142 font-size: 14px !important; 7143 margin-top: 12px; 7144 height: 52.5px; 7145 } 7146 /* .amount-text-color { 7147 color: #000000; 7148 } */ 7149 7150 7151 7152 7153/* updated styles for free gift */ 7154.gift_wrapper { 7155 display: flex; 7156 position: absolute; 7157 top: -22px; 7158 width: 100%; 7159 justify-content: space-between; 7160 z-index: 1; 7161 background: transparent; 7162 flex-wrap: nowrap; 7163} 7164.gift_wrapper svg { 7165 height: 45px; 7166 width: 25px; 7167 min-width: 25px; 7168 7169} 7170.gift_wrapper > div { 7171 width: 100%; 7172 display: flex; 7173 align-items: center; 7174 margin-bottom: -4px; 7175 margin-left: -2px; 7176 margin-right: -1px; 7177} 7178.gift_wrapper > div span { 7179 content: ''; 7180 background: var(--brand_color_1); 7181 width: 0; 7182 display: block; 7183 height: 6px; 7184 border-radius: 3px; 7185} 7186.main-progress-bar-with-markups .free-shipping-bar { 7187 margin-top: 24px; 7188 margin-bottom: 24px; 7189} 7190.main-progress-bar-with-markups .progress-bar-titles{ 7191 margin-top: 0; 7192} 7193.gift_wrapper svg.active > rect:first-child { 7194 fill: var(--brand_color_1); 7195} 7196.main-progress-bar-with-markups .floating-text-bottom svg * { 7197 stroke: var(--brand_color_1); 7198} 7199.gift_wrapper svg.active + div + svg:not(.active) rect:first-child, .gift_wrapper svg:nth-of-type(1):not(.active) rect:first-child { 7200 fill: var(--sale-badge); 7201 7202 } 7203.main-progress-bar-with-markups .floating-text-bottom { 7204 width: 100%; 7205 text-align: center; 7206 margin-left: 0; 7207} 7208.main-progress-bar-with-markups .floating-text-bottom *{ 7209 text-align: center !important; 7210} 7211.main-progress-bar-with-markups .floating-text-bottom p { 7212 color: #000000; 7213} 7214.main-progress-bar-with-markups .floating-text-bottom h4 , .main-progress-bar-with-markups .floating-text-bottom h4 * {
7215 color: var(--brand_color_1) !important; 7216 } 7217.main-progress-bar-with-markups .floating-text-bottom p:empty { 7218 margin: 0; 7219} 7220.main-progress-bar-with-markups .floating-text-bottom p span{ 7221 color: var(--sale-badge); 7222 font-weight: 700; 7223} 7224.main-progress-bar-with-markups .floating-text-bottom h4{ 7225 display: flex; 7226 justify-content: center; 7227 align-items: center; 7228 text-transform: none; 7229 gap: 7px; 7230} 7231.main-progress-bar-with-markups .floating-text-bottom h4 svg { 7232 height: 17px; 7233 width: 17px; 7234} 7235.main-progress-bar-with-markups.main-bar-align { 7236 padding: 2px 16px; 7237 background: #FFFFFF; 7238 border-radius: 12px; 7239 margin-bottom: 20px; 7240 margin-top: 20px; 7241} 7242 .main-progress-bar-with-markups .free-shipping-progress{ 7243 margin-left: 25px; 7244 margin-right: 23px; 7245 max-width: calc(100% - 48px); 7246 border-bottom-left-radius: 0; 7247 border-top-left-radius: 0; 7248} 7249 7250.sugoi-mart-menu .main-progress-bar-with-markups .floating-text-bottom h4{ 7251 font-family: 'Inter' !important; 7252} 7253 7254.is-empty .main-progress-bar-with-markups.main-bar-align { 7255 display: none; 7256} 7257 7258 7259.subscription-product-container .subscription-free-shipping-msg{ 7260 text-align: center; 7261 } 7262 .cart-milestone .progress-bar-titles{ 7263 margin-top: 0 ; 7264 } 7265 .customer-loved.customer-loved-v1.hide-customer-also-loved, .purchase-items.past-purchase-order.hide-purchase-items { 7266 visibility: hidden !important; 7267 height: 0 !important; 7268 width: 0 !important; 7269 padding: 0 !important; 7270 min-width: 0 !important; 7271 max-width: 0 !important; 7272 } 7273 @media all and (max-width: 850px){ 7274 .customer-loved.customer-loved-v1 .grid-product__price--savings { 7275 position: static !important; 7276 } 7277 } 7278.frozen-product-cart-container{ 7279 margin-top:20px; 7280} 7281/* updated free gift design section */ 7282 7283 7284 /* SHO-233 */ 7285 .empty-cart-prices .strike-through-price { 7286 text-decoration: line-through; 7287 color: #aeaeae; 7288 } 7289 7290 </style> 7291 7292
7292<script> 7293 var emptyCartRecoSeedId = null; 7294 7295 function emptyCartRecoCentsToParts(cents) { 7296 var n = (Number(cents) || 0) / 100; 7297 return n.toFixed(2).split('.'); 7298 } 7299 7300 function emptyCartRecoFetchProducts(seedId) { 7301 if (typeof theme !== 'undefined' && theme && theme.ShopifyRecommendations && theme.ShopifyRecommendations.fetch) { 7302 return theme.ShopifyRecommendations.fetch(seedId, 10, 'related'); 7303 } 7304 return fetch('/recommendations/products.json?product_id=' + encodeURIComponent(seedId) + '&limit=10&intent=related') 7305 .then(function (response) { return response.json(); }) 7306 .then(function (json) { 7307 var list = json.products || []; 7308 return list.filter(function (p) { 7309 var tags = p.tags; 7310 if (!tags) return true; 7311 var arr = Array.isArray(tags) ? tags : String(tags).split(',').map(function (t) { return t.trim(); }); 7312 var hasExcludeReco = arr.some(function (t) { 7313 var lo = String(t).toLowerCase(); 7314 return lo === 'exclude_recommendations' || lo === 'exclude_rebuy'; 7315 }); 7316 return !hasExcludeReco; 7317 }); 7318 }); 7319 } 7320 7321 if (emptyCartRecoSeedId) { 7322 emptyCartRecoFetchProducts(emptyCartRecoSeedId) 7323 .then(function (products) { 7324 var output = ''; 7325 var filteredProducts = (products || []).filter(function (product) { 7326 var v = product.variants && product.variants[0]; 7327 if (!v) return false; 7328 var invOk = typeof v.inventory_quantity === 'number' ? v.inventory_quantity > 0 : v.available; 7329 return product.title.length <= 35 && invOk && product.title.indexOf('Discovery Pack') === -1; 7330 }).slice(0, 3); 7331 7332 for (var i = 0; i < filteredProducts.length; i++) { 7333 var product = filteredProducts[i]; 7334 var v = product.variants[0]; 7335 var imgSrc = product.featured_image || (product.images && product.images[0]) || ''; 7336 if (String(imgSrc).indexOf('//') === 0) imgSrc = 'https:' + imgSrc; 7337 var alt = product.title || ''; 7338 var dparts = emptyCartRecoCentsToParts(v.price); 7339 var superScriptedDiscountedPrice = dparts[0] + '<sup>' + dparts[1] + '</sup>'; 7340 var superScriptedOriginalPrice = ''; 7341 if (v.compare_at_price) { 7342 var cparts = emptyCartRecoCentsToParts(v.compare_at_price); 7343 superScriptedOriginalPrice = '$' + cparts[0] + '<sup id="super-scrip">' + cparts[1] + '</sup>'; 7344 } 7345 7346 output += '<div class="img-text-container">' + 7347 '<img class="empty-cart-img" src="' + imgSrc + '&width=100" alt="' + alt.replace(/"/g, '"') + '">' + 7348 '<div class="img-title-price">' + 7349 '<h2 class="img-title">' + product.title + '</h2>' + 7350 '<div class="empty-cart-prices">' + 7351 7352 '<span class="strike-through-price">' + superScriptedOriginalPrice + '</span>' + 7353 '<span class="discounted-price">$' + superScriptedDiscountedPrice + '</span>' + 7354 '</div>' + 7355 '</div>' + 7356 '<div class="empty-cart-plus-icon">' + 7357 '<button type="button" class="text-link quick-add-btn js-quick-add-btn" tabindex="-1" onclick="addToCartSection1(' + 7358 product.id + ',' + v.id + ')" data-id="' + v.id + '">' + 7359 '<span class="cirle-btn">' + 7360 '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">' + 7361 '<path d="M12 5V19" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>' + 7362 '<path d="M5 12H19" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>' + 7363 '</svg>' + 7364 '<span class="icon__fallback-text">Add to cart</span>' + 7365 '</span>' + 7366 '</button>' + 7367 '</div>' + 7368 '</div>'; 7369 } 7370 7371 $('#empty-cart-reco-products').html(output); 7372 $('#empty-cart-reco-products').css({"display": "flex", "flex-direction": "column", "ga
7372p": "24px"}); 7373 }); 7374 } 7375 </script>
7375 7376
7377<script> 7378 (function() { 7379 let cartGiftModal, cartGiftModalClose, cartGiftCancelBtn, cartGiftForm, cartGiftNote, cartGiftCharCount, cartGiftSubmitBtn; 7380 let currentUpsellButton = null; 7381 let isInitialized = false; 7382 7383 function initializeModalElements() { 7384 /* SHO-265: drawer rebuilds replace the modal node â re-initialize when the cached one is detached */ 7385 if (isInitialized && cartGiftModal && document.body.contains(cartGiftModal)) return true; 7386 isInitialized = false; 7387 7388 cartGiftModal = document.getElementById('cartGiftModal'); 7389 if (!cartGiftModal) return false; 7390 7391 cartGiftModalClose = cartGiftModal.querySelector('.cart-gift-modal-close'); 7392 cartGiftCancelBtn = cartGiftModal.querySelector('.btn-cancel'); 7393 cartGiftForm = document.getElementById('cartGiftMessageForm'); 7394 cartGiftNote = document.getElementById('cartGiftNote'); 7395 cartGiftCharCount = cartGiftModal.querySelector('.char-count'); 7396 cartGiftSubmitBtn = cartGiftModal.querySelector('.btn-submit'); 7397 7398 if (cartGiftModalClose && cartGiftCancelBtn && cartGiftForm && cartGiftNote && cartGiftCharCount && cartGiftSubmitBtn) { 7399 setupEventListeners(); 7400 isInitialized = true; 7401 return true; 7402 } 7403 return false; 7404 } 7405 7406 function openCartGiftModal(button) { 7407 if (!initializeModalElements()) { 7408 console.error('Cart gift modal elements not found'); 7409 return; 7410 } 7411 currentUpsellButton = button; 7412 cartGiftModal.style.display = 'flex'; 7413 7414 const savedData = loadCartGiftData(); 7415 if (savedData) { 7416 document.getElementById('cartGiftSender').value = savedData.sender || ''; 7417 document.getElementById('cartGiftRecipient').value = savedData.recipient || ''; 7418 document.getElementById('cartGiftNote').value = savedData.gift_note || ''; 7419 7420 const length = savedData.gift_note ? savedData.gift_note.length : 0; 7421 cartGiftCharCount.textContent = `${length} / 200`; 7422 } 7423 7424 setTimeout(() => { 7425 updateCartGiftPreview(); 7426 7427 const senderInput = document.getElementById('cartGiftSender'); 7428 const recipientInput = document.getElementById('cartGiftRecipient'); 7429 const noteInput = document.getElementById('cartGiftNote'); 7430 7431 if (!recipientInput.value) { 7432 recipientInput.focus(); 7433 } else if (!noteInput.value) { 7434 noteInput.focus(); 7435 } else if (!senderInput.value) { 7436 senderInput.focus(); 7437 } else { 7438 recipientInput.focus(); 7439 recipientInput.select(); 7440 } 7441 }, 50); 7442 } 7443 7444 function closeCartGiftModal() { 7445 if (!cartGiftModal) return; 7446 7447 cartGiftModal.style.display = 'none'; 7448 // document.body.classList.remove('cart-modal-open'); 7449 // document.documentElement.classList.remove('cart-modal-open'); 7450 7451 const sender = document.getElementById('cartGiftSender').value.trim(); 7452 const recipient = document.getElementById('cartGiftRecipient').value.trim(); 7453 const giftMessage = document.getElementById('cartGiftNote').value.trim(); 7454 7455 if (sender || recipient || giftMessage) { 7456 saveCartGiftData(sender, recipient, giftMessage); 7457 } 7458 7459 currentUpsellButton = null; 7460 } 7461 7462 function loadCartGiftData() { 7463 try { 7464 const savedData = sessionStorage.getItem('cartGiftMessageData'); 7465 if (savedData) { 7466 return JSON.parse(savedData); 7467 } 7468 } catch (error) { 7469 console.error('Error loading cart gift data:', error); 7470 } 7471 return null; 7472 } 7473 7474 function saveCartGiftData(sender, recipient, giftMessage) { 7475 try { 7476 const data = { 7477 sender: sender, 7478 recipient: recipient,
7479 gift_note: giftMessage, 7480 timestamp: Date.now() 7481 }; 7482 sessionStorage.setItem('cartGiftMessageData', JSON.stringify(data)); 7483 } catch (error) { 7484 console.error('Error saving cart gift data:', error); 7485 } 7486 } 7487 7488 function updateCartGiftPreview() { 7489 const senderInput = document.getElementById('cartGiftSender'); 7490 const recipientInput = document.getElementById('cartGiftRecipient'); 7491 const messageInput = document.getElementById('cartGiftNote'); 7492 const previewSender = document.getElementById('cartPreviewSender'); 7493 const previewRecipient = document.getElementById('cartPreviewRecipient'); 7494 const previewMessage = document.getElementById('cartPreviewMessage'); 7495 const previewSection = document.getElementById('cartGiftPreview'); 7496 7497 if (!senderInput || !recipientInput || !messageInput || !previewSender || !previewRecipient || !previewMessage || !previewSection) { 7498 return; 7499 } 7500 7501 const sender = senderInput.value.trim(); 7502 const recipient = recipientInput.value.trim(); 7503 const message = messageInput.value.trim(); 7504 7505 previewRecipient.textContent = recipient || 'Recipient\'s name'; 7506 previewSender.textContent = sender || 'Your name'; 7507 previewMessage.textContent = message || 'Your gift message will appear here...'; 7508 7509 const selectedOption = document.querySelector('.cart-gift-option-radio:checked'); 7510 if (selectedOption && selectedOption.value === 'custom') { 7511 previewSection.style.display = 'block'; 7512 } else { 7513 previewSection.style.display = 'none'; 7514 } 7515 } 7516 7517 function setupEventListeners() { 7518 const cartSenderInput = document.getElementById('cartGiftSender'); 7519 const cartRecipientInput = document.getElementById('cartGiftRecipient'); 7520 7521 if (cartGiftNote) { 7522 cartGiftNote.addEventListener('input', () => { 7523 const length = cartGiftNote.value.length; 7524 cartGiftCharCount.textContent = `${length} / 200`; 7525 updateCartGiftPreview(); 7526 }); 7527 } 7528 7529 if (cartSenderInput) { 7530 cartSenderInput.addEventListener('input', updateCartGiftPreview); 7531 cartSenderInput.addEventListener('keyup', updateCartGiftPreview); 7532 } 7533 7534 if (cartRecipientInput) { 7535 cartRecipientInput.addEventListener('input', updateCartGiftPreview); 7536 cartRecipientInput.addEventListener('keyup', updateCartGiftPreview); 7537 } 7538 7539 const cartGiftOptions = document.querySelectorAll('.cart-gift-option-radio'); 7540 const cartCustomMessageFields = document.getElementById('cartCustomMessageFields'); 7541 7542 function toggleCartCustomFields() { 7543 const selectedOption = document.querySelector('.cart-gift-option-radio:checked'); 7544 if (selectedOption && selectedOption.value === 'custom') { 7545 cartCustomMessageFields.style.display = 'block'; 7546 document.getElementById('cartGiftSender').required = true; 7547 document.getElementById('cartGiftRecipient').required = true; 7548 document.getElementById('cartGiftNote').required = true; 7549 updateCartGiftPreview(); 7550 } else { 7551 cartCustomMessageFields.style.display = 'none'; 7552 document.getElementById('cartGiftSender').required = false; 7553 document.getElementById('cartGiftRecipient').required = false; 7554 document.getElementById('cartGiftNote').required = false; 7555 const previewSection = document.getElementById('cartGiftPreview'); 7556 if (previewSection) { 7557 previewSection.style.display = 'none'; 7558 } 7559 } 7560 } 7561 7562 cartGiftOptions.forEach(option => { 7563 option.addEventListener('change', toggleCartCustomFields); 7564 }); 7565 7566 // Initialize on load 7567 toggleCartCustomFields(); 7568 7569 cartGiftModalClose.addEventListener('click', (e) => { 7570 e.preventDefault(); 7571 e.stopPropagation(); 7572 closeCartGiftModal(); 7573 }); 7574 7575 cartGiftCancelBtn.addEventListener('click', (e) => { 7576 e.preventDefault(); 7577 e.stopPropagation(); 7578 closeCartGiftModal(); 7579 }); 7580 7581 cartGiftModal.addEventListener('click', (e) => { 7582 if (e.target === cartGiftModal) { 7583 e.preventDefault(); 7584 e.stopPropagation(); 7585 closeCartGiftModal(); 7586 } 7587 }); 7588 7589 const modalContent = cartGiftModal.querySelector('.cart-gift-modal'); 7590 if (modalContent) { 7591 modalContent.addEventListener('click', (e) => { 7592 e.stopPropagation(); 7593 }); 7594 } 7595 7596 /* SHO-265: setupEventListeners re-runs after drawer rebuilds â bind the document-level listener only once */ 7597 if (!window.__cartGiftEscBound) { 7598 window.__cartGiftEscBound = true; 7599 document.addEventListener('keydown', (e) => { 7600 if (e.key === 'Escape' && cartGiftModal && cartGiftModal.style.display === 'flex') { 7601 e.preventDefault(); 7602 e.stopPropagation(); 7603 closeCartGiftModal(); 7604 } 7605 }); 7606 } 7607 7608 cartGiftForm.addEventListener('submit', handleFormSubmit); 7609 } 7610 7611 async function handleFormSubmit(e) { 7612 e.preventDefault(); 7613 7614 if (!currentUpsellButton) return; 7615
7616 try { 7617 // Get selected gift option 7618 const selectedOption = document.querySelector('.cart-gift-option-radio:checked'); 7619 if (!selectedOption) { 7620 alert('Please select a gift option.'); 7621 return; 7622 } 7623 7624 const giftOption = selectedOption.value; 7625 let sender = ''; 7626 let recipient = ''; 7627 let giftNote = ''; 7628 7629 // Handle different options 7630 if (giftOption === 'blank') { 7631 // Leave blank - no message 7632 sender = ''; 7633 recipient = ''; 7634 giftNote = ''; 7635 } else if (giftOption === 'standard') { 7636 // Use standard message - no sender/recipient 7637 sender = ''; 7638 recipient = ''; 7639 giftNote = 'Enjoy this selection of Japanese snacks & products, a little treat from Japan to make your day special. Have a great day!'; 7640 } else if (giftOption === 'custom') { 7641 // Get custom form data 7642 const formData = new FormData(cartGiftForm); 7643 sender = formData.get('sender').trim(); 7644 recipient = formData.get('recipient').trim(); 7645 giftNote = formData.get('gift_note').trim(); 7646 7647 // Validate custom fields 7648 if (!sender || !recipient || !giftNote) { 7649 alert('Please fill in all required fields for your custom message.'); 7650 return; 7651 } 7652 } 7653 7654 cartGiftSubmitBtn.disabled = true; 7655 cartGiftSubmitBtn.classList.add('loading'); 7656 cartGiftSubmitBtn.textContent = ''; 7657 7658 const variantId = currentUpsellButton.getAttribute('data-upsell-variant-id'); 7659 const productTitle = currentUpsellButton.getAttribute('data-upsell-product-title'); 7660 7661 const response = await fetch('/cart/add.js', { 7662 method: 'POST', 7663 headers: { 'Content-Type': 'application/json' }, 7664 body: JSON.stringify({ 7665 id: variantId, 7666 quantity: 1 7667 }) 7668 }); 7669 7670 if (!response.ok) { 7671 throw new Error(`HTTP error! status: ${response.status}`); 7672 } 7673 7674 const data = await response.json(); 7675 7676 // Only update attributes if not blank 7677 const attributes = { 7678 'sender': sender, 7679 'recepient': recipient, 7680 'gift_note': giftNote, 7681 'gift_option': giftOption 7682 }; 7683 7684 await fetch('/cart/update.js', { 7685 method: 'POST', 7686 headers: { 'Content-Type': 'application/json' }, 7687 body: JSON.stringify({ attributes }) 7688 }); 7689 7690 document.dispatchEvent( 7691 new CustomEvent("ajaxProduct:added", { 7692 detail: { product: data }, 7693 }) 7694 ); 7695 7696 const upsellContainer = currentUpsellButton.closest('.cart__item-upsell'); 7697 if (upsellContainer) { 7698 upsellContainer.style.display = 'none'; 7699 } 7700 7701 // Save the gift data for future use (only for custom) 7702 if (giftOption === 'custom') { 7703 saveCartGiftData(sender, recipient, giftNote); 7704 } 7705 7706 closeCartGiftModal(); 7707 7708 cartGiftSubmitBtn.disabled = false; 7709 cartGiftSubmitBtn.classList.remove('loading'); 7710 cartGiftSubmitBtn.textContent = 'Add Gift to Cart'; 7711 7712 console.log(`${productTitle} added to cart successfully`); 7713 7714 } catch (error) { 7715 console.error('Error adding upsell to cart:', error); 7716 alert('Failed to add gift to cart. Please try again.'); 7717 7718 cartGiftSubmitBtn.disabled = false; 7719 cartGiftSubmitBtn.classList.remove('loading'); 7720 cartGiftSubmitBtn.textContent = 'Add Gift to Cart'; 7721 } 7722 } 7723 7724 /* BTQ-68: preorder (advent) items skip the modal â gift wrap + standard message added in one click, same as the LP */ 7725 async function addUpsellDirect(button) { 7726 const variantId = button.getAttribute('data-upsell-variant-id'); 7727 if (!variantId || button.disabled) return; 7728 7729 const textEl = button.querySelector('.cart__upsell-text'); 7730 const originalText = textEl ? textEl.textContent : ''; 7731 button.disabled = true; 7732 if (textEl) textEl.textContent = 'Addingâ¦'; 7733 7734 /* SHO-265: add gift wrap at the same quantity as the calendar it belongs to */ 7735 const parentQty = parseInt(button.getAttribute('data-parent-qty'), 10) || 1; 7736
7737 try { 7738 const response = await fetch('/cart/add.js', { 7739 method: 'POST', 7740 headers: { 'Content-Type': 'application/json' }, 7741 body: JSON.stringify({ id: variantId, quantity: parentQty }) 7742 }); 7743 if (!response.ok) { 7744 throw new Error(`HTTP error! status: ${response.status}`); 7745 } 7746 const data = await response.json(); 7747 7748 await fetch('/cart/update.js', { 7749 method: 'POST', 7750 headers: { 'Content-Type': 'application/json' }, 7751 body: JSON.stringify({ 7752 attributes: { 7753 'sender': '', 7754 'recepient': '', 7755 'gift_note': 'Enjoy this selection of Japanese snacks & products, a little treat from Japan to make your day special.', /* SHO-254 */ 7756 'gift_option': 'standard' 7757 } 7758 }) 7759 }); 7760 7761 document.dispatchEvent( 7762 new CustomEvent("ajaxProduct:added", { 7763 detail: { product: data }, 7764 }) 7765 ); 7766 7767 const upsellContainer = button.closest('.cart__item-upsell'); 7768 if (upsellContainer) { 7769 upsellContainer.style.display = 'none'; 7770 } 7771 } catch (error) { 7772 console.error('Error adding upsell to cart:', error); 7773 button.disabled = false; 7774 if (textEl) textEl.textContent = originalText; 7775 } 7776 } 7777 7778 function addUpsellToCart(button) { 7779 if (button.getAttribute('data-standard-gift') === 'true') { 7780 addUpsellDirect(button); 7781 return; 7782 } 7783 openCartGiftModal(button); 7784 } 7785 7786 window.addUpsellToCart = addUpsellToCart; 7787 7788 /* SHO-265: keep gift wrap quantities in sync with their parent items. 7789 Pairing comes from data-sync-upsell-variant stamped on cart rows; a shared 7790 wrap targets the SUM of its parents' quantities. The wrap is only synced 7791 while it exists in the cart (never auto-added). */ 7792 var giftSyncPairs = {}; 7793 var giftSyncBusy = false; 7794 7795 function collectGiftSyncPairs() { 7796 document.querySelectorAll('.cart__item[data-sync-upsell-variant]').forEach(function (row) { 7797 var parentVariant = row.getAttribute('data-variant-id'); 7798 var wrapVariant = row.getAttribute('data-sync-upsell-variant'); 7799 if (parentVariant && wrapVariant) giftSyncPairs[String(parentVariant)] = String(wrapVariant); 7800 }); 7801 } 7802 7803 async function syncGiftWrapQty() { 7804 if (giftSyncBusy) return; 7805 collectGiftSyncPairs(); 7806 var parents = Object.keys(giftSyncPairs); 7807 if (!parents.length) return; 7808 giftSyncBusy = true; 7809 try { 7810 var cart = await fetch('/cart.js', { credentials: 'same-origin' }).then(function (r) { return r.json(); }); 7811 var qtyByVariant = {}; 7812 cart.items.forEach(function (item) { qtyByVariant[String(item.variant_id)] = item.quantity; }); 7813 7814 /* target for each wrap = sum of the quantities of every known parent still in the cart */ 7815 var wrapTargets = {}; 7816 parents.forEach(function (parentVariant) { 7817 var wrapVariant = giftSyncPairs[parentVariant]; 7818 if (qtyByVariant[wrapVariant] === undefined) return; 7819 wrapTargets[wrapVariant] = (wrapTargets[wrapVariant] || 0) + (qtyByVariant[parentVariant] || 0); 7820 }); 7821 7822 var updates = {}; 7823 var parentGone = false; 7824 Object.keys(wrapTargets).forEach(function (wrapVariant) { 7825 if (qtyByVariant[wrapVariant] !== wrapTargets[wrapVariant]) { 7826 updates[wrapVariant] = wrapTargets[wrapVariant]; 7827 if (wrapTargets[wrapVariant] === 0) parentGone = true; 7828 } 7829 }); 7830 7831 if (Object.keys(updates).length) { 7832 var payload = { updates: updates }; 7833 if (parentGone) { 7834 payload.attributes = { 'sender': '', 'recepient': '', 'gift_note': '', 'gift_option': '' }; 7835 } 7836 var updated = await fetch('/cart/update.js', { 7837 method: 'POST', 7838 headers: { 'Content-Type': 'application/json' }, 7839 body: JSON.stringify(payload) 7840 }).then(function (r) { return r.json(); }); 7841 document.dispatchEvent(new CustomEvent('ajaxProduct:added', { detail: { product: updated } })); 7842 } 7843 } catch (err) { 7844 console.error('Gift wrap quantity sync failed:', err); 7845 } finally { 7846 giftSyncBusy = false;
7847 } 7848 } 7849 7850 document.addEventListener('cart:updated', function () { syncGiftWrapQty(); }); 7851 document.addEventListener('ajaxProduct:added', function () { syncGiftWrapQty(); }); 7852 7853 7854 if (document.readyState === 'loading') { 7855 document.addEventListener('DOMContentLoaded', initializeModalElements); 7856 } else { 7857 initializeModalElements(); 7858 } 7859 7860 document.addEventListener('click', function(e) { 7861 if (e.target.matches('.cart__upsell-btn') || e.target.closest('.cart__upsell-btn')) { 7862 e.preventDefault(); 7863 const button = e.target.matches('.cart__upsell-btn') ? e.target : e.target.closest('.cart__upsell-btn'); 7864 if (button && button.getAttribute('data-upsell-variant-id')) { 7865 addUpsellToCart(button); 7866 } 7867 return; 7868 } 7869 7870 if (e.target.matches('[data-cart-remove]') || e.target.closest('[data-cart-remove]')) { 7871 e.preventDefault(); 7872 7873 const button = e.target.matches('[data-cart-remove]') ? e.target : e.target.closest('[data-cart-remove]'); 7874 const variantKey = button.getAttribute('data-variant-key'); 7875 const lineIndex = button.getAttribute('data-line'); 7876 const cartItem = button.closest('.cart__item'); 7877 const itemTags = cartItem ? cartItem.getAttribute('data-tags') : ''; 7878 const isGiftProduct = itemTags && itemTags.includes('personalized-card'); 7879 7880 button.disabled = true; 7881 button.textContent = 'Removing...'; 7882 7883 theme.cart.changeItem(variantKey, 0) 7884 .then(async function(cart) { 7885 if (isGiftProduct) { 7886 const hasOtherGiftProducts = cart.items.some(item => { 7887 return item.properties && 7888 item.product_title && 7889 (item.product_title.toLowerCase().includes('gift') || 7890 (item.tags && item.tags.includes('personalized-card'))); 7891 }); 7892 7893 if (!hasOtherGiftProducts) { 7894 try { 7895 await fetch('/cart/update.js', { 7896 method: 'POST', 7897 headers: { 'Content-Type': 'application/json' }, 7898 body: JSON.stringify({ 7899 attributes: { 7900 'recepient': '', 7901 'sender': '', 7902 'gift_note': '', 7903 'gift_option': '' 7904 } 7905 }) 7906 }); 7907 7908 sessionStorage.removeItem('cartGiftMessageData'); 7909 } catch (err) { 7910 console.error('Failed to clear cart attributes:', err); 7911 } 7912 } 7913 } 7914 7915 document.dispatchEvent( 7916 new CustomEvent("ajaxProduct:added", { 7917 detail: {product: cart}, 7918 }) 7919 ); 7920 7921 if (cartItem) { 7922 cartItem.remove(); 7923 } 7924 }) 7925 .catch(function(error) { 7926 console.error('Error removing item from cart:', error); 7927 button.disabled = false; 7928 button.textContent = 'Remove'; 7929 }); 7930 } 7931 }); 7932 7933 })(); 7934</script>
7934</div> 7935 <style> 7936 .customer-loved { 7937 min-width: 370px; 7938 background-color: var(--calSectionBg); 7939 7940 min-height: 100vh; 7941 z-index: 99; 7942 position: relative; 7943 padding: 24px 16px 0; 7944 max-width: 400px; 7945 z-index: 99999; 7946 } 7947 7948 [data-grid-style*=grey] .customer-loved .grid-product:after { 7949 background: transparent; 7950 } 7951 7952 .loved-pro-img img { 7953 width: 80px; 7954 height: 86px; 7955 object-fit: cover; 7956 display: block; 7957 } 7958 7959 .main-loved-pro { 7960 display: flex; 7961 align-items: center; 7962 background: #fff; 7963 border-radius: 12px; 7964 padding: 13px; 7965 position: relative; 7966 max-width: initial !important; 7967 margin: 14px 0px 0 10px; 7968 } 7969 7970 .main-loved-pro__link { 7971 display: flex; 7972 align-items: center; 7973 flex: 1; 7974 min-width: 0; 7975 text-decoration: none; 7976 color: inherit; 7977 } 7978 7979 .main-loved-pro__link:focus-visible { 7980 outline: 2px solid currentColor; 7981 outline-offset: 2px; 7982 border-radius: 8px; 7983 } 7984 7985 .loved-pro-img { 7986 min-width: 80px; 7987 } 7988 7989 .title-loved-pro p { 7990 /* font-family: 'lato' !important; */ 7991 font-style: normal; 7992 font-weight: 400; 7993 font-size: 15px; 7994 line-height: 22px; 7995 color: #000000; 7996 text-transform: capitalize !important; 7997 margin-bottom: 0; 7998 letter-spacing: 1px; 7999 overflow: hidden; 8000 display: -webkit-box; 8001 -webkit-line-clamp: 2; 8002 -webkit-box-orient: vertical; 8003 } 8004 8005 .price-loved-pro { 8006 display: flex; 8007 align-items: center; 8008 margin-top: 4px; 8009 } 8010 8011 .price-loved-pro p { 8012 margin-bottom: 0; 8013 } 8014 8015 .price-loved-pro p:first-child { 8016 font-weight: 400; 8017 font-size: 16px; 8018 line-height: 24px; 8019 text-align: center; 8020 color: #B14224; 8021 } 8022 8023 .price-loved-pro p:nth-child(2) { 8024 font-weight: 400; 8025 font-size: 15px; 8026 line-height: 22px; 8027 text-align: center; 8028 color: #000000; 8029 margin-left: 5px; 8030 padding-left: 5px; 8031 border-left: 1px solid #BDBDBD; 8032 } 8033 8034 .price-loved-pro p:first-child span { 8035 color: #959494; 8036 text-decoration: line-through; 8037 } 8038 8039 .about-loved-pro { 8040 margin-left: 10px; 8041 } 8042 8043 .customer-loved-heading h3 { 8044 font-family: 'Orpheus Pro'; 8045 font-style: normal; 8046 font-weight: 400 !important; 8047 font-size: 31px !important; 8048 line-height: 38px; 8049 color: #000000; 8050 letter-spacing: 0px; 8051 text-transform: capitalize !important; 8052 margin-bottom: 0px !important; 8053 } 8054 8055 8056 .plus-icon-loved .btn--icon { 8057 width: 30px; 8058 height: 30px; 8059 display: flex; 8060 align-items: center; 8061 justify-content: center; 8062 background: var(--cta_filled_static); 8063 padding: 2px !important; 8064 transition: transform 0.1s ease-out; 8065 } 8066 8067 .plus-icon-loved .btn--icon:hover { 8068 transform: scale(1.15); 8069 } 8070 8071 .plus-icon-loved { 8072 position: absolute; 8073 top: -6px; 8074 left: -3px; 8075 } 8076 8077 .close-loved-pro { 8078 position: absolute; 8079 top: 26px; 8080 right: 14px; 8081 cursor: pointer; 8082 } 8083 8084 .close-loved-pro svg { 8085 width: 30px; 8086 height: 30px; 8087 } 8088 8089 .customer-loved.orient-add .listing-loved-products { 8090 display: none; 8091 width: 50px !important; 8092 } 8093 8094 .customer-loved.orient-add { 8095 width: 56px !important; 8096 padding: 10px; 8097 min-width: auto !important; 8098 } 8099 8100 .customer-loved.orient-add .customer-loved-heading h3 { 8101 writing-mode: vertical-rl; 8102 text-orientation: mixed; 8103 } 8104 8105 .customer-loved.orient-add .close-loved-pro { 8106 right: 20px; 8107 top: 30px; 8108 } 8109 8110 #chevron-main-loved, 8111 .customer-loved.orient-add .close-loved-pro svg { 8112 display: none; 8113 } 8114 8115 .customer-loved.orient-add #chevron-main-loved { 8116 display: block !important; 8117 transform: rotate(133deg); 8118 } 8119 8120 .customer-loved.orient-add .customer-loved-heading { 8121 padding-top: 10em; 8122 } 8123 8124 .un-fl-submenu-icon-arrow-dj { 8125 border: solid #000; 8126 border-width: 0 2px 2px 0; 8127 bottom: 0; 8128 display: inline-block; 8129 height: 10px; 8130 margin: auto; 8131 padding: 3px; 8132 /* position: absolute; */ 8133 right: 10px; 8134 top: -3px; 8135 width: 10px; 8136 transform: rotate(45deg); 8137 -webkit-transform: rotate(45deg); 8138 margin-bottom: 3px !important; 8139 } 8140 8141 .plus-icon-loved button { 8142 padding: 0; 8143 border: none; 8144 background: transparent; 8145 } 8146 8147 .plus-icon-loved button span { 8148 border-radius: 100px; 8149 cursor: pointer; 8150 } 8151 8152 /* .plus-icon-loved button span svg { 8153 filter: invert(1); 8154 } */ 8155 #theme-ajax-cart.is-drawer { 8156 width: 50%; 8157 } 8158 8159 .align-cart-main-grocery { 8160 display: flex; 8161 flex-direction: row-reverse; 8162 /* height: 100%; */ 8163 } 8164 8165 /* .align-customer-loved { 8166 position: relative; 8167 } */ 8168 .listing-loved-products { 8169 max-height: calc(100vh - 172px); 8170 overflow-y: auto; 8171 padding-right: 10px; 8172 padding-bottom: 2em; 8173 } 8174 8175 .scrolled-body .listing-loved-products { 8176 max-height: calc(100vh - 130px); 8177 } 8178 8179 .listing-loved-products::-webkit-scrollbar-track { 8180 -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); 8181 border-radius: 10px; 8182 background-color: #dbdbdb; 8183 } 8184 8185 .listing-loved-products::-webkit-scrollbar {
8186 width: 6px; 8187 height: 6px; 8188 background-color: #dbdbdb; 8189 } 8190 8191 .listing-loved-products::-webkit-scrollbar-thumb { 8192 border-radius: 10px; 8193 -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3); 8194 background-color: #7594ae; 8195 } 8196 8197 .ajax-cart--drawer { 8198 box-shadow: 0 8px 8px rgb(10 10 10 / 10%); 8199 background: #fff; 8200 } 8201 8202 #theme-ajax-cart.is-drawer { 8203 width: auto; 8204 max-width: 1100px; 8205 background: transparent; 8206 box-shadow: none; 8207 } 8208 8209 .ajax-cart { 8210 min-width: 701px; 8211 max-width: 701px; 8212 } 8213 8214 8215 .align-main-cart-customer { 8216 display: flex; 8217 flex-direction: row-reverse; 8218 background: #f6f4f1; 8219 height: 100%; 8220 } 8221 8222 .cart__footer { 8223 right: 0; 8224 z-index: 999; 8225 } 8226 8227 .cart__scrollable { 8228 margin-bottom: 0px; 8229 } 8230 8231 8232 .price-loved-pro p:nth-child(2) { 8233 display: none !important; 8234 } 8235 8236 .site-header__drawer-animate { 8237 transform: inherit !important; 8238 } 8239 8240 .cart__scrollable .rebuy-widget { 8241 display: none !important; 8242 } 8243 8244 .header-wrapper.header-wrapper--overlay.is-light.header-wrapper--compressed { 8245 8246 } 8247 8248 .header-wrapper.header-wrapper--overlay.is-light { 8249 8250 } 8251 8252 @media screen and (max-width: 1100px) { 8253 .customer-loved { 8254 width: 40% !important; 8255 min-width: auto !important; 8256 max-width: initial !important; 8257 } 8258 8259 .site-header__drawer-animate, 8260 .ajax-cart , .cart__footer { 8261 width: 60% !important; 8262 min-width: auto !important; 8263 } 8264 8265 .mob-cart-align.bg-color { 8266 background: var(--cartBGColor); 8267 } 8268 /* .cart__footer { 8269 width: 100% !important; 8270 } */ 8271 .site-header__drawer { 8272 /* padding-top: 95px; */ 8273 background: transparent; 8274 box-shadow: none; 8275 width: 100%; 8276 max-width: initial; 8277 } 8278 } 8279 8280 @media screen and (max-width: 850px) { 8281 8282 8283 .site-header__drawer-animate, 8284 .ajax-cart, 8285 .cart__footer { 8286 width: 100% !important; 8287 max-width: 100% !important; 8288 min-width: auto !important; 8289 } 8290 8291 .customer-loved, 8292 .customer-loved.orient-add { 8293 width: 100% !important; 8294 /* height: 235px; */ 8295 } 8296 8297 .customer-loved { 8298 min-height: auto !important; 8299 height: 235px; 8300 z-index: 999; 8301 padding: 24px 0 0 !important; 8302 } 8303 8304 .customer-loved-heading h3 { 8305 font-size: 26px !important; 8306 text-align: center; 8307 } 8308 8309 .customer-loved.orient-add .customer-loved-heading { 8310 padding-top: 0; 8311 } 8312 8313 .customer-loved.orient-add .customer-loved-heading h3 { 8314 writing-mode: inherit; 8315 text-orientation: inherit; 8316 } 8317 8318 .main-loved-pro { 8319 display: block; 8320 background: #fff; 8321 text-align: center; 8322 width: 200px; 8323 padding: 10px 4px; 8324 min-width: 200px; 8325 flex: auto !important; 8326 } 8327 8328 .main-loved-pro__link { 8329 display: block; 8330 width: 100%; 8331 } 8332 8333 .loved-pro-img img { 8334 width: 60px; 8335 height: 60px; 8336 margin: auto; 8337 } 8338 8339 .about-loved-pro { 8340 margin: 0; 8341 } 8342 8343 .title-loved-pro p { 8344 font-size: 14px; 8345 display: -webkit-box; 8346 max-width: 400px; 8347 -webkit-line-clamp: 2; 8348 -webkit-box-orient: vertical; 8349 overflow: hidden; 8350 text-overflow: ellipsis; 8351 line-height: 1.4; 8352 /* min-height: 39.19px; 8353 display: flex; 8354 align-items: center; 8355 justify-content: center; */ 8356 } 8357 8358 .price-loved-pro { 8359 justify-content: center; 8360 } 8361 8362 .price-loved-pro p:nth-child(2) { 8363 margin-left: 4px; 8364 padding: 0; 8365 border: none; 8366 } 8367 8368 .customer-loved.orient-add .listing-loved-products { 8369 width: 100% !important; 8370 display: flex !important; 8371 } 8372 8373 .plus-icon-loved { 8374 left: auto; 8375 right: -6px; 8376 } 8377 8378 .listing-loved-products { 8379 display: flex; 8380 padding-bottom: 8px; 8381 max-height: initial !important; 8382 } 8383 8384 .close-loved-pro { 8385 display: none !important; 8386 } 8387 8388 .cart__scrollable { 8389 overflow: inherit; 8390 margin-bottom: 40px; 8391 } 8392 .SGM.header-wrapper.header-wrapper--compressed .cart__scrollable{ 8393 margin-bottom:170px 8394 } 8395 .SGM.header-wrapper.header-wrapper--compressed .cart__scrollable.is-empty, .SGM.header-wrapper .cart__scrollable.is-empty{ 8396 margin-bottom:0 8397 } 8398 8399 .mob-cart-align { 8400 height: inherit; 8401 overflow: auto; 8402 background: #f6f4f1; 8403 } 8404 8405 .align-main-cart-customer { 8406 flex-direction: column-reverse; 8407 height: auto; 8408 background: #f6f4f1; 8409 padding-bottom: 200px; 8410 /* justify-content: flex-end; */ 8411 } 8412 8413 .header-wrapper--compressed .align-main-cart-customer { 8414 padding-bottom: 60px; 8415 } 8416 .SGM.header-wrapper--compressed .align-main-cart-customer.is-empty{ 8417 height:auto; 8418 } 8419 8420 .site-header__cart .align-main-cart-customer .cart__drawer
8420-form { 8421 max-height: initial !important; 8422 display: block !important; 8423 padding-bottom: 40px; 8424 } 8425 8426 .body-scroll-content .site-header__cart .align-main-cart-customer .cart__drawer-form { 8427 padding-bottom: 130px !important; 8428 } 8429 8430 .site-header__drawer-animate { 8431 height: auto !important; 8432 } 8433 8434 .site-header__drawer-animate { 8435 transform: none !important; 8436 } 8437 8438 .cart__footer { 8439 /* bottom: 0 !important; */ 8440 z-index: 99999; 8441 } 8442 8443 .align-main-cart-customer.adjust-mob-cart { 8444 justify-content: flex-end; 8445 } 8446 8447 .align-main-cart-customer.adjust-mob-cart .cart__scrollable ,.align-main-cart-customer.adjust-mob-cart .cart__footer { 8448 display: none !important; 8449 } 8450 8451 /* .align-main-cart-customer .rebuy-minicart { 8452 display: none !important; 8453 } */ 8454 html body[data-header="cro-header-navigations"] .site-header__cart.scrolled-body { 8455 top: 122px !important; 8456 } 8457 8458 html body[data-header="cro-header-navigations"] .scrolled-body .cart__footer { 8459 bottom: 122px !important; 8460 } 8461 html .sugoi-mart-store .align-main-cart-customer { 8462 flex-direction: column !important; 8463 padding-bottom: 0 !important; 8464 } 8465 8466 html .sugoi-mart-store.body-scroll-content .site-header__cart .align-main-cart-customer .cart__drawer-form, 8467 html .sugoi-mart-store .SGM.header-wrapper.header-wrapper--compressed .cart__scrollable, 8468 .sugoi-mart-store .header-wrapper--compressed .align-main-cart-customer { 8469 padding-bottom: 0 !important; 8470 margin-bottom: 0 !important; 8471 } 8472 8473 html .sugoi-mart-store .mob-cart-align { 8474 height: calc(100dvh - 365px) !important; 8475 } 8476 8477 .sugoi-mart-store .site-header__cart .align-main-cart-customer .cart__drawer-form { 8478 padding-bottom: 0 !important; 8479 } 8480 8481 html .sugoi-mart-store.body-scroll-content .mob-cart-align.empty-cart, 8482 html .sugoi-mart-store .mob-cart-align.empty-cart { 8483 height: inherit !important; 8484 } 8485 8486 .sugoi-mart-store .cart__footer { 8487 min-height: 266px; 8488 } 8489 8490 html .sugoi-mart-store.body-scroll-content .mob-cart-align { 8491 height: calc(100dvh - 322px) !important; 8492 } 8493 8494 html .sugoi-mart-store .align-main-cart-customer.is-empty { 8495 height: calc( 100dvh - 100px) !important; 8496 justify-content: space-between; 8497 overflow: auto; 8498 } 8499 8500 html .sugoi-mart-store.body-scroll-content .align-main-cart-customer.is-empty { 8501 overflow: auto; 8502 height: calc(100dvh - 64px) !important; 8503 justify-content: space-between; 8504 } 8505 } 8506</style> 8507 8508 8509 8510
8510<script> 8511 $('.align-cart-main-grocery').addClass('remove-padding') 8512 </script>
8512 8513
8514<script> 8515 setTimeout(() => { 8516 bindQuickAdd() 8517 }, 5000); 8518 8519 8520 function bindQuickAdd() { 8521 8522 var prodGrid = document.querySelectorAll(".product-grid"); 8523 8524 if (prodGrid.length) { 8525 for (let i = 0; i < prodGrid.length; i++) { 8526 var gridProducts = prodGrid[i].querySelectorAll(".grid-product"); 8527 8528 if (gridProducts.length) { 8529 new theme.QuickAdd(prodGrid[i]); 8530 new theme.QuickShop(prodGrid[i]); 8531 } 8532 } 8533 } 8534 } 8535</script>
8535 8536 8537 </div> 8538 </div> 8539 </div> 8540 8541 <div 8542 class="site-header__drawer site-header__mobile-nav medium-up--hide" 8543 id="MobileNav" 8544 inert 8545 aria-hidden="true" 8546 style=" background-color: #F6F4F1;" 8547 > 8548 <div class="site-header__drawer-animate"><div class="slide-nav__wrapper" data-level="1"> 8549 <div class="align-menu-main"> 8550 <ul> 8551 8552 8553 8554 8555 8556 8557<li> 8558 <div class="main-snack-boxes"> 8559 <div class="title-menu-mobile nav-dropdown active-mob-menu"> 8560 <p>Shop Snack Box Subscriptions</p> 8561 <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"> 8562 <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> 8563 </svg> 8564 </div> 8565 <div class="listing-dropdown-menus snack-boxes-main-mob active-mob-submenu-show"><a href="https://www.bokksu.com/products/classic-bokksu"> 8566 <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> 8567 </div> 8568 </a></div> 8569 </div> 8570 </li><li> 8571 <div class="title-menu-mobile nav-dropdown "> 8572 <p>Shop Gifts</p> 8573 <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"> 8574 <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> 8575 </svg> 8576 </div> 8577 <div class="listing-dropdown-menus "> 8578 <ul><li> 8579 8580 <a href="/products/gift-classic-bokksu">Bokksu Snack Box</a> 8581 8582 </li><li> 8583 8584 <a href="/products/gift-card">Gift Cards</a> 8585 8586 </li><li> 8587 8588 <a href="https://www.bokksuboutique.com/pages/corporate-gifts">Corporate Gifts</a> 8589 8590 </li></ul> 8591 </div> 8592 </li><hr> 8593 <li> 8594 <div class="title-menu-mobile nav-dropdown"> 8595 <p>More from Bokksu</p> 8596 <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"> 8597 <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> 8598 </svg> 8599 </div> 8600 <div class="listing-dropdown-menus more-brands"> 8601 <ul> 8602 <li> 8603 <a href="https://bokksu.com/products/classic-bokksu"> 8604 <img src="//bokksu.com/cdn/shop/files/BokksuSnackBox_Logo_Stacked_Filled_Orange_200x.png?v=1750968760" alt="" role="presentation"> 8605 <p> Premium Japanese snack subscriptions. </p> 8606 </a> 8607 </li> 8608 <li> 8609 <a href="https://bokksuboutique.com/"> 8610 <img src="//bokksu.com/cdn/shop/files/BokksuBoutique_Logo_Stacked_Filled_Blue_200x.png?v=1750968708" alt="" role="presentation"> 8611 <p> Specialty and gourmet gifts only found in Japan.</p> 8612 </a> 8613 </li> 8614 <li> 8615 <a href="https://bokksumarket.com"> 8616 <img src="//bokksu.com/cdn/shop/files/BokksuMarket_Logo_Stacked_Filled_Green_200x.png?v=1750968741" alt="" role="presentation"> 8617 <p>Asian grocery essentials for cooking and eating.</p> 8618 </a> 8619 </li> 8620 8621 </ul> 8622 </div> 8623 </li><li> 8624 <div class="title-menu-mobile"> 8625 <a href="https://www.bokksu.com/account/login?return_url=%2Faccount"> 8626 <p>Account</p> 8627 </a></div> 8628 </li><li> 8629 <div class="title-menu-mobile nav-dropdown "> 8630 <p>About</p> 8631 <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"> 8632 <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> 8633 </svg> 8634 </div> 8635 <div class="listing-dropdown-menus "> 8636 <ul><li> 8637 8638 <a href="/pages/about">Our Story</a> 8639 8640 </li><li> 8641 8642 <a href="/pages/our-makers">Our Makers</a> 8643 8644 </li><li> 8645 8646 <a href="/pages/snack-bites-documentary">Maker's Documentary</a> 8647 8648 </li></ul> 8649 </div> 8650 </li><li> 8651 <div class="title-menu-mobile nav-dropdown "> 8652 <p>Support</p> 8653 <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"> 8654 <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> 8655 </svg> 8656 </div> 8657 <div class="listing-dropdown-menus "> 8658 <ul><li> 8659 8660 <a href="/pages/faq">FAQ</a> 8661 8662 </li><li> 8663 8664 <a href="/pages/contact-us">Contact Us</a> 8665 8666 </li></ul> 8667 </div> 8668 </li><li> 8669 <div class="title-menu-mobile nav-dropdown "> 8670 <p>Information</p> 8671 <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"> 8672 <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> 8673 </svg> 8674 </div> 8675 <div class="listing-dropdown-menus "> 8676 <ul><li> 8677 8678 <a href="/blogs/news">Our Blog</a> 8679 8680 </li><li> 8681 8682 <a href="/pages/bokksu-offers-discounts-coupons">Today's Offers</a> 8683 8684 </li><li> 8685 8686 <a href="/pages/community">Community</a> 8687 8688 </li><li> 8689 8690 <a href="/pages/careers">Careers</a> 8691 8692 </li><li> 8693 8694 <a href="/pages/rewards">Rewards</a> 8695 8696 </li><li> 8697 8698 <a href="/pages/rewards">Refer a Friend</a> 8699 8700 </li></ul> 8701 </div> 8702 </li><li> 8703 <div class="title-menu-mobile"><a href="/pages/past-themes"> 8704 <p>Past Themes</p> 8705 </a></div> 8706 </li></ul> 8707 </div> 8708 8709<!-- <ul class="slide-nav"></ul> --> 8710 8711</div> 8712 8713<div id="subs-btn" class="original-element"> 8714 8715 <a href="https://bokksu.com/products/classic-bokksu" id="mbl-subscribe-overrides" class="btn btn-custom subscribe-btn-js original-element">Subscribe Now</a> 8716 8717</div> 8718 8719<!-- 8720 <div style="margin-top:100px" id="subs-btn"> 8721 <a href="/products/classic-bokksu" id="mbl-subscribe-overrides" class="btn btn-custom subscribe-btn-js" 8722 >SUBSCRIBE NOW</a 8723 > 8724 </div> 8725 -->
8726<script> 8727 if(window.location.href.includes('search')){ 8728 $('#subs-btn').css('display','none') 8729 }else{ 8730 $('#subs-btn').css('display','block') 8731 } 8732 8733 $('.title-menu-mobile.nav-dropdown').click(function() { 8734 $(this).toggleClass('active-mob-menu').parent().find('.listing-dropdown-menus').slideToggle(300); 8735 }); 8736</script>
8736 8737 8738<style> 8739 8740@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'); 8741 8742.align-menu-main ul { 8743 margin: 0; 8744 padding: 0; 8745} 8746 8747.align-menu-main ul li { 8748 list-style: none; 8749 margin-top: 0px; 8750 margin-bottom: 16px; 8751} 8752 8753.title-menu-mobile p { 8754 font-weight: 500; 8755 font-size: 13px; 8756 line-height: 140%; 8757 letter-spacing: 0.15em; 8758 text-transform: uppercase; 8759 color: #242426; 8760 margin-bottom: 0; 8761} 8762 8763.snack-box-mob img { 8764 width: 60px; 8765 height: 60px; 8766} 8767 8768.snack-box-mob h4 { 8769 font-weight: 400; 8770 font-size: 15px; 8771 line-height: 140%; 8772 letter-spacing: 0.05em; 8773 text-transform: capitalize; 8774 color: #242426; 8775 margin-left: 14px; 8776 margin-bottom: 0; 8777} 8778 8779.snack-box-mob { 8780 display: flex; 8781 align-items: center; 8782 margin-top: 14px; 8783} 8784 8785.title-menu-mobile.nav-dropdown { 8786 display: flex; 8787 align-items: center; 8788 justify-content: space-between; 8789} 8790 8791.title-menu-mobile.nav-dropdown svg { 8792 width: 10px; 8793 height: 10px; 8794 transform: rotate(90deg); 8795 transition: .3s linear; 8796} 8797 8798.title-menu-mobile.nav-dropdown.active-mob-menu svg { 8799 transform: rotate(-89deg); 8800} 8801 8802.nav-dropdown.active-mob-menu p { 8803 color: #B73D09; 8804} 8805 8806.listing-dropdown-menus ul li a { 8807 font-weight: 400; 8808 font-size: 15px; 8809 line-height: 140%; 8810 letter-spacing: 0.02em; 8811 text-transform: capitalize; 8812 color: #242426; 8813} 8814 8815.listing-dropdown-menus { 8816 padding: 10px 10px 0 ; 8817 display: none; 8818} 8819.listing-dropdown-menus ul li:last-child { 8820 margin: 0; 8821} 8822 8823.listing-dropdown-menus ul li { 8824 margin-bottom: 8px; 8825} 8826 8827.listing-dropdown-menus.more-brands { 8828 padding: 10px 0; 8829} 8830 8831.listing-dropdown-menus.more-brands ul { 8832 grid-template-columns: repeat(2, minmax(0, 1fr)); 8833 display: grid; 8834 grid-gap: 12px; 8835} 8836 8837.listing-dropdown-menus.more-brands ul li a img { 8838 width: 66px; 8839 margin: auto; 8840} 8841 8842.listing-dropdown-menus.more-brands ul li { 8843 text-align: center; 8844 margin: 0; 8845} 8846 8847.listing-dropdown-menus.more-brands ul li a p { 8848 font-weight: 400; 8849 font-size: 11px; 8850 line-height: 130%; 8851 text-align: center; 8852 letter-spacing: 0.02em; 8853 text-transform: initial; 8854 color: #242426; 8855 margin: 6px 0 0 0; 8856} 8857 8858.listing-dropdown-menus.more-brands ul li a { 8859 display: block; 8860 padding: 14px 10px; 8861 background: #F5F5F5; 8862 border-radius: 10px; 8863} 8864 8865.site-header__mobile-nav .site-header__drawer-animate , .site-header__mobile-nav.site-header__drawer { 8866 background: #fff !important; 8867} 8868 8869.site-header__mobile-nav.site-header__drawer { 8870 height: 100vh; 8871 overflow: auto !important; 8872 min-height: 100vh !important; 8873} 8874 8875.align-menu-main hr { 8876 margin: 16px 0px; 8877} 8878 8879 div#subs-btn { 8880 padding-bottom: 8em; 8881 } 8882 8883div#subs-btn p { 8884 font-weight: 400; 8885 font-size: 13px; 8886 line-height: 140%; 8887 letter-spacing: 0.02em; 8888 text-transform: capitalize; 8889 color: #242426; 8890 text-align: center; 8891 margin: 20px 0 30px; 8892} 8893 8894 8895 8896.supports-touch.lock-scroll body { 8897 overflow: initial !important; 8898} 8899 8900/* body.sticky-body { 8901 overflow: hidden; 8902 position: fixed; 8903} */ 8904 8905.site-header__mobile-nav .site-header__drawer-animate { 8906 width: 100% !important; 8907 transition: none !important; 8908} 8909 8910.active-mob-submenu-show { 8911 display: block; 8912} 8913 8914/* .blur-body { 8915 background: initial !important; 8916 filter: none !important; 8917} */ 8918 8919@media only screen and (max-width: 960px) { 8920 #mbl-subscribe-overrides { 8921 letter-spacing: 0.15em !important; 8922 font-weight: 700 !important; 8923 font-size: 13px !important; 8924 height: auto !important; 8925 padding: 17px 16px !important; 8926 border-radius: 10px !important; 8927 } 8928} 8929 8930@media screen and (max-width: 770px) { 8931 .mobile-nav-open body { 8932 overflow: hidden !important; 8933 } 8934} 8935 8936</style> 8937</div> 8938 </div> 8939 </div> 8940 </div></header> 8941 </div> 8942 </div> 8943 8944 8945 8946 8947
8948<script> 8949 $(document).ready(function () { 8950 $('.sale-announcement').on('click', function () { 8951 const link = $(this).data('link'); 8952 if (link) { 8953 window.location.href = link; 8954 } 8955 }); 8956 // Check if userway_buttons_wrapper is rendered 8957 function checkIfRendered() { 8958 if ($('.userway_buttons_wrapper').length > 0) { 8959 $('.transition-body').removeClass('transition-body'); 8960 clearInterval(renderCheckInterval); // Stop checking once rendered 8961 } 8962 } 8963 // Check if rendered initially 8964 checkIfRendered(); 8965 // Check periodically in case element is added dynamically 8966 let renderCheckInterval = setInterval(checkIfRendered, 1000); 8967 }); 8968 8969 // Mobile Cart and Nav Opening Issue 8970 $('.show-on-mob').click(function () { 8971 $('body').toggleClass('no-scroll'); 8972 $('.sticky-filters').toggleClass('d-none'); 8973 if ($('html').hasClass('cart-open')) { 8974 $('.site-header__cart').removeClass('is-active is-cart-open'); 8975 $('html').removeClass('cart-open'); 8976 } 8977 }); 8978 $('#HeaderCartTrigger').click(function () { 8979 if ($('.main-menu-new').hasClass('show-categories')) { 8980 $('.ctaegories-icon').removeClass('icon-change'); 8981 $('.main-menu-new').removeClass('show-categories'); 8982 $('body').removeClass('no-scroll'); 8983 } 8984 }); 8985 // End Mobile Nav and Cart Opening Issue 8986 8987 function isMobile() { 8988 const regex = /Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i; 8989 return regex.test(navigator.userAgent); 8990 } 8991 $('#buttonid').click(function () { 8992 if ($(this).hasClass('icon-change')) { 8993 $(this).attr('aria-expanded', true); 8994 $(this).attr('aria-label', 'Close'); 8995 } else { 8996 $(this).attr('aria-expanded', false); 8997 $(this).attr('aria-label', 'Menu'); 8998 } 8999 }); 9000 9001 $('#buttonid').on('keydown', function (event) { 9002 if (event.keyCode == 9 && $(this).hasClass('icon-change')) { 9003 setTimeout(function () { 9004 $('.all-menu-links .main-menu-item:first-child .new-menu-item .item-links').focus(); 9005 }, 0); 9006 } 9007 9008 if (event.keyCode == 32) { 9009 if ($('#buttonid').hasClass('icon-change')) { 9010 $('#buttonid').attr('aria-expanded', true); 9011 $(this).attr('aria-label', 'Close'); 9012 } else { 9013 $('#buttonid').attr('aria-expanded', false); 9014 $(this).attr('aria-label', 'Menu'); 9015 } 9016 } 9017 }); 9018 9019 $('#buttonid').on('focus', function (event) { 9020 if (event.keyCode != 9 && !event.shiftKey) { 9021 setTimeout(function () { 9022 $('.all-menu-links .main-menu-item:first-child .new-menu-item .item-links').focus(); 9023 }, 2000); 9024 } 9025 }); 9026 9027 $(document).keydown(function (event) { 9028 if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') { 9029 event.preventDefault(); 9030 // readElementsInMain(); 9031 } 9032 }); 9033 $('.ctaegories-icon').click(function () { 9034 $(this).toggleClass('icon-change'); 9035 $('.main-menu-new').toggleClass('show-categories'); 9036 $('.all-menu-links .main-menu-item:first-child .new-menu-item #myLink').attr('tabindex', 0); 9037 $('.all-menu-links .main-menu-item:first-child .new-menu-item #myLink').focus(); 9038 }); 9039 $('.new-menu-item').click(function () { 9040 $(this).parent().toggleClass('rotate-icon').find('.listing-hovered-items').slideToggle(); 9041 }); 9042 9043 $(document).keydown(function (e) { 9044 if (e.keyCode == 9 && e.shiftKey) { 9045 if ($('.all-menu-links .main-menu-item:first-child .new-menu-item #myLink').is(':focus')) { 9046 $('#buttonid').attr('tabindex', 0); 9047 setTimeout(function () { 9048 $('#buttonid').focus(); 9049 }, 0); 9050 } 9051 } 9052 if ($('#buttonid').is(':focus')) { 9053 if (e.keyCode == 9 && !e.shiftKey) { 9054 setTimeout(function () { 9055 $('.all-menu-links .main-menu-item:first-child .new-menu-item #myLink').focus(); 9056 }, 0); 9057 } 9058 } 9059 }); 9060 function handleMenuItem(event) { 9061 if (event.keyCode == 32 && $('.main-menu-item .new-menu-item .item-links').is(':focus')) { 9062 window.location = $('.main-menu-item .new-menu-item a:focus').attr('href'); 9063 return false; 9064 } 9065 9066 if ((event.keyCode == 39 || event.keyCode == 37) && $('.main-menu-item .new-menu-item a').is(':focus')) { 9067 // $('.listing-hovered-items').hide(); 9068 } 9069 if (event.keyCode == 39 && $('.all-menu-links .main-menu-item:last-child .new-menu-item a').is(':focus')) { 9070 //alert("hiii") 9071 setTimeout(function () { 9072 $('.total-reviews-new h4').focus(); 9073 }, 1000); 9074 } 9075 } 9076 9077 // $('.main-menu-item .new-menu-item a').on('mouseover', function (event) { 9078 // if(!isMobile() && zoom < 175.0){ 9079 // $('.listing-hovered-items').show(); 9080 // } 9081 // }); 9082 9083 function handleMenusubitems(event) { 9084 if (event.keyCode == 32 && $('.main-menu-item .listing-hovered-items ul li a:focus')) { 9085 window.location = $('.main-menu-item .listing-hovered-items ul li a:focus').attr('href'); 9086 return false;
9087 } 9088 } 9089 9090 $('.main-menu-item .new-menu-item').on('keydown', handleMenuItem); 9091 $('.main-menu-item .listing-hovered-items').on('keydown', handleMenusubitems); 9092 $('.mob-user-icon .dropdown-stores').on('keydown', handleMoreAbout); 9093 $('.shop-btn').on('keydown', handleShopBtn); 9094 $('.login-link').on('keydown', handleLoginLink); 9095 9096 $('.title-menu-mobile').click(function () { 9097 $(this).toggleClass('active-mob-menu').parent().find('.dropdown-stores').slideToggle(); 9098 }); 9099 9100 // $('.main-menu-item .new-menu-item .item-links').on('mouseover', function () { 9101 // if(!isMobile() && zoom < 175.0){ 9102 // $('.listing-hovered-items').show(); 9103 // } 9104 // }); 9105 9106 function handleMoreAbout(event) { 9107 if (event.keyCode == 32 && $('.dropdown-stores .listing-dropdown-menus ul li a:focus')) { 9108 window.location = $('.dropdown-stores .listing-dropdown-menus ul li a:focus').attr('href'); 9109 return false; 9110 } 9111 } 9112 9113 function handleShopBtn(event) { 9114 if (event.keyCode == 32 && $('a:focus')) { 9115 window.location = $('a:focus').attr('href'); 9116 return false; 9117 } 9118 } 9119 function handleLoginLink(event) { 9120 if (event.keyCode == 32) { 9121 window.location = $('.login-link a').attr('href'); 9122 return false; 9123 } 9124 } 9125 9126 $('.title-menu-mobile').click(function () { 9127 $(this).toggleClass('active-mob-menu').parent().find('.dropdown-stores').slideToggle(); 9128 }); 9129 9130 const focusTrapDiv = document.getElementById('focus-menu-item'); 9131 if (focusTrapDiv) { 9132 focusTrapDiv.addEventListener('keydown', function (event) { 9133 if (event.key === 'Tab') { 9134 const focusableElements = focusTrapDiv.querySelectorAll( 9135 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])' 9136 ); 9137 const firstFocusableElement = focusableElements[0]; 9138 const lastFocusableElement = focusableElements[focusableElements.length - 1]; 9139 9140 if (event.shiftKey) { 9141 if (document.activeElement === firstFocusableElement) { 9142 event.preventDefault(); 9143 setTimeout(function () { 9144 $('#buttonid').focus(); 9145 }, 0); 9146 } 9147 } else { 9148 if (document.activeElement === lastFocusableElement) { 9149 event.preventDefault(); 9150 setTimeout(function () { 9151 $('#buttonid').focus(); 9152 }, 0); 9153 } 9154 } 9155 } 9156 }); 9157 9158 // v2 code 9159 9160 $.ajax({ 9161 type: 'POST', 9162 data: { email: '' }, 9163 url: 'https://bokksurecharge.herokuapp.com/index.php', 9164 success: function (data) { 9165 if (data.customers.length > 0) { 9166 let customer_id = data.customers[0].id; 9167 let billing_address1 = data.customers[0].billing_address1; 9168 $.ajax({ 9169 type: 'POST', 9170 data: { customer_id: customer_id }, 9171 url: 'https://bokksurecharge.herokuapp.com/menu-first-box.php', 9172 success: function (data2) { 9173 if (Number(data2) > 0) { 9174 $('#item-first-box').html('Upcoming Box'); 9175 $('#item-first-box').attr('href', 'https://bokksu.com/pages/upcoming-box'); 9176 $('.item-first-box-mobile').html('Upcoming Box'); 9177 $('.item-first-box-mobile').attr('href', 'https://bokksu.com/account'); 9178 } 9179 }, 9180 }); 9181 } 9182 }, 9183 }); 9184 9185 function resetScrollbarStylesForInjectedStyles() { 9186 $('style.pieeye-injected-style').each(function () { 9187 var styleContent = $(this).html(); 9188 if (styleContent.includes('::-webkit-scrollbar')) { 9189 // Remove styles related to scrollbar 9190 var cleanedStyleContent = styleContent.replace( 9191 /(::-webkit-scrollbar|::-webkit-scrollbar-thumb|::-webkit-scrollbar-track)[^{]*\{[^}]*\}/g, 9192 '' 9193 ); 9194 $(this).html(cleanedStyleContent); 9195 } 9196 }); 9197 } 9198 9199 const observerCallback = function (mutationsList, observer) { 9200 mutationsList.forEach(function (mutation) { 9201 if (mutation.type === 'childList' && mutation.target.nodeName.toLowerCase() === 'head') { 9202 $(mutation.addedNodes).each(function () { 9203 if ( 9204 this.nodeType === Node.ELEMENT_NODE && 9205 this.tagName.toLowerCase() === 'style' && 9206 $(this).hasClass('pieeye-injected-style') 9207 ) { 9208 resetScrollbarStylesForInjectedStyles(); 9209 } 9210 }); 9211 } 9212 }); 9213 }; 9214 const observer = new MutationObserver(observerCallback); 9215 observer.observe(document.head, { childList: true }); 9216 } 9217</script>
9217 9218
9219<script> 9220 // a11y: keep mobile-nav-trigger buttons' aria-expanded state in sync with 9221 // the drawer open/closed state, and remove the drawer from the tab order 9222 // (inert + aria-hidden) when closed so keyboard users can't tab into 9223 // off-screen drawer links. 9224 (function () { 9225 function setExpanded(value) { 9226 var triggers = document.querySelectorAll('.mobile-nav-trigger'); 9227 for (var i = 0; i < triggers.length; i++) { 9228 triggers[i].setAttribute('aria-expanded', value ? 'true' : 'false'); 9229 } 9230 var drawer = document.getElementById('MobileNav'); 9231 if (drawer) { 9232 if (value) { 9233 drawer.removeAttribute('inert'); 9234 drawer.removeAttribute('aria-hidden'); 9235 } else { 9236 drawer.setAttribute('inert', ''); 9237 drawer.setAttribute('aria-hidden', 'true'); 9238 } 9239 } 9240 } 9241 document.addEventListener('MobileNav:open', function () { setExpanded(true); }); 9242 document.addEventListener('MobileNav:close', function () { setExpanded(false); }); 9243 9244 // a11y: toggle cart drawer inert/aria-hidden based on open/closed state. 9245 // Cart uses 'is-active' or 'is-cart-open' class on #HeaderCart. 9246 var cartDrawer = document.getElementById('HeaderCart'); 9247 if (cartDrawer && typeof MutationObserver === 'function') { 9248 function syncCartDrawer() { 9249 var isOpen = cartDrawer.classList.contains('is-active') || cartDrawer.classList.contains('is-cart-open'); 9250 if (isOpen) { 9251 cartDrawer.removeAttribute('inert'); 9252 cartDrawer.removeAttribute('aria-hidden'); 9253 // Move focus to the close button so screen readers start inside the drawer. 9254 var closeBtn = cartDrawer.querySelector('.js-close-header-cart'); 9255 if (closeBtn) setTimeout(function () { closeBtn.focus(); }, 100); 9256 } else { 9257 cartDrawer.setAttribute('inert', ''); 9258 cartDrawer.setAttribute('aria-hidden', 'true'); 9259 } 9260 } 9261 new MutationObserver(syncCartDrawer).observe(cartDrawer, { 9262 attributes: true, 9263 attributeFilter: ['class'] 9264 }); 9265 9266 // a11y: desktop nav dropdown keyboard support (disclosure pattern). 9267 // Nav items with submenus are single <button> elements (not <a> links). 9268 // The parent URL is available as "View all [title]" inside the dropdown. 9269 // Uses .onclick assignment (verified working with VoiceOver). 9270 (function () { 9271 var navItems = document.querySelectorAll('.site-nav--has-dropdown'); 9272 if (!navItems.length) return; 9273 9274 navItems.forEach(function (li) { 9275 var toggle = li.querySelector('.site-nav__dropdown-toggle'); 9276 var link = li.querySelector('.site-nav__link--has-dropdown'); 9277 var dropdown = li.querySelector('.site-nav__dropdown, .megamenu'); 9278 if (!toggle) return; 9279 9280 // Wire aria-controls 9281 if (dropdown) { 9282 var dropdownId = 'nav-dropdown-' + Math.random().toString(36).slice(2, 8); 9283 dropdown.setAttribute('id', dropdownId); 9284 toggle.setAttribute('aria-controls', dropdownId); 9285 } 9286 9287 // Use .onclick (not addEventListener) â matches the console test that worked. 9288 toggle.onclick = function (e) { 9289 e.preventDefault(); 9290 e.stopPropagation(); 9291 var wasOpen = li.classList.contains('is-focused'); 9292 // Close all open dropdowns 9293 navItems.forEach(function (other) { 9294 if (other.classList.contains('is-focused')) { 9295 other.classList.remove('is-focused'); 9296 var t = other.querySelector('.site-nav__dropdown-toggle'); 9297 if (t) t.setAttribute('aria-expanded', 'false'); 9298 } 9299 }); 9300 if (!wasOpen) { 9301 li.classList.add('is-focused'); 9302 toggle.setAttribute('aria-expanded', 'true'); 9303 } 9304 }; 9305 9306 // Close on focusout (focus leaves the entire <li> + dropdown). 9307 var closeTimeout; 9308 li.addEventListener('focusin', function () { 9309 clearTimeout(closeTimeout); 9310 }); 9311 li.addEventListener('focusout', function () { 9312 closeTimeout = setTimeout(function () { 9313 if (!li.contains(document.activeElement)) { 9314 li.classList.remove('is-focused'); 9315 toggle.setAttribute('aria-expanded', 'false'); 9316 } 9317 }, 50); 9318 }); 9319 9320 // Mouse: hover opens/closes (existing behavior preserved). 9321 li.addEventListener('mouseenter', function () { 9322 li.classList.add('is-focused'); 9323 toggle.setAttribute('aria-expanded', 'true'); 9324 }); 9325 li.addEventListener('mouseleave', function () { 9326 if (!li.contains(document.activeElement)) { 9327 li.classList.remove('is-focused'); 9328 toggle.setAttribute('aria-expanded', 'false'); 9329 } 9330 }); 9331 9332 // Escape: close dropdown, return focus to the toggle button. 9333 li.addEventListener('keydown', function (e) { 9334 if (e.key === 'Escape' && li.classList.contains('is-focused')) { 9335 e.stopPropagation(); 9336 li.classList.remove('is-focused'); 9337 toggle.setAttribute('aria-expanded', 'false'); 9338 toggle.focus(); 9339 } 9340 }); 9341 }); 9342 })(); 9343 9344 // Escape key closes the cart drawer and returns focus to the cart trigger. 9345 document.addEventListener('keydown', function (e) { 9346 if (e.key === 'Escape' && (cartDrawer.classList.contains('is-active') || cartDrawer.classList.contains('is-cart-open'))) { 9347 var closeBtn = cartDrawer.querySelector('.js-close-header-cart'); 9348 if (closeBtn) closeBtn.click(); 9349 var cartTrigger = document.getElementById('HeaderCartTrigger'); 9350 if (cartTrigger) setTimeout(function () { cartTrigger.focus(); }, 200); 9351 } 9352 }); 9353 } 9354 })(); 9355</script>
9355 9356 9357 9358</div><section id="shopify-section-sections--17749310636118__cart_milestone_TaEhjU" class="shopify-section shopify-section-group-header-group d-none"> 9359 9360 9361 9362 9363 9364 9365 9366 9367 9368 9369 9370 9371 9372<span 9373 class="gwp-with-choice-section-title" 9374 data-section-title="" 9375 style="display: none;" 9376></span> 9377 9378 9379<!-- Dual Cart - Market Items Progress Bar --> 9380 9381 9382 9383 9384 9385 9386</section> 9387<!-- END sections: header-group --><!-- BEGIN sections: popup-group --> 9388 9389<!-- END sections: popup-group --><main class="main-content" id="MainContent" role="main"> 9390 <div id="shopify-section-template--17749318303830__snb_hero_native_m3PCWY" class="shopify-section"> 9391<style data-shopify>/* Desktop typography (641px+) â matches layout breakpoint ~640Ã937 */ 9392 @media (min-width: 641px) { 9393 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .snb-hero-native__preheader { 9394 color: #f8ffff; 9395 font-size: 16px; 9396 font-weight: 500; 9397 line-height: 0.8; 9398 letter-spacing: 0.2em; 9399 font-family: "Montserrat", sans-serif; 9400 } 9401 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .hero__title { 9402 color: #f8ffff; 9403 font-size: 66px; 9404 font-weight: 500; 9405 line-height: 0.9; 9406 letter-spacing: 0em; 9407 font-family: var(--typeHeaderPrimary), var(--typeHeaderFallback); 9408 } 9409 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .snb-hero-native__description { 9410 color: #f8ffff; 9411 font-size: 16px; 9412 font-weight: 400; 9413 line-height: 1.5; 9414 letter-spacing: 0em; 9415 font-family: var(--typeBasePrimary), var(--typeBaseFallback); 9416 } 9417 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .snb-hero-native__cta { 9418 color: #ffffff; 9419 --snb-cta-bg: #ffffff;--snb-cta-border: #ffffff; 9420 --snb-cta-fill: #611f13; 9421 font-size: 14px; 9422 font-weight: 600; 9423 line-height: 1.2; 9424 letter-spacing: 0.1em; 9425 font-family: var(--typeBasePrimary), var(--typeBaseFallback); 9426 } 9427 } 9428 /* Mobile layout typography (â¤640px) â matches screenshot 2 breakpoint */ 9429 @media (max-width: 640px) { 9430 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .snb-hero-native__preheader { 9431 color: #f8ffff; 9432 font-size: 12px; 9433 font-weight: 600; 9434 line-height: 0.8; 9435 letter-spacing: 0.1em; 9436 font-family: var(--typeBasePrimary), var(--typeBaseFallback); 9437 } 9438 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .hero__title { 9439 color: #f8ffff; 9440 font-size: 34px !important; 9441 font-weight: 400; 9442 line-height: 1.6 !important; 9443 letter-spacing: 0em; 9444 font-family: var(--typeHeaderPrimary), var(--typeHeaderFallback); 9445 } 9446 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .snb-hero-native__description { 9447 color: #f8ffff; 9448 font-size: 15px; 9449 font-weight: 400; 9450 line-height: 1.5; 9451 letter-spacing: 0em; 9452 font-family: var(--typeBasePrimary), var(--typeBaseFallback); 9453 } 9454 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .snb-hero-native__cta { 9455 color: #ffffff; 9456 --snb-cta-bg: #ffffff;--snb-cta-border: #ffffff; 9457 --snb-cta-fill: #611f13; 9458 font-size: 13px; 9459 font-weight: 600; 9460 line-height: 1.4; 9461 letter-spacing: 0.1em; 9462 font-family: var(--typeBasePrimary), var(--typeBaseFallback); 9463 } 9464 } 9465 #shopify-section-template--17749318303830__snb_hero_native_m3PCWY .snb-hero-native__slide--slide_yUTnyh .snb-hero-native__cta:hover { 9466 color: #ffffff !important; 9467 }</style><style data-shopify>/* SNB Hero Native â base layout, carousel, content, CTA, controls (self-contained in section) */ 9468 .snb-hero-native { 9469 position: relative; 9470 overflow: hidden; 9471 margin-bottom: 0; 9472 padding-bottom: 0; 9473 border-bottom: none !important; 9474 outline: none !important; 9475 } 9476 .index-section:has(.snb-hero-native) { 9477 margin-bottom: 0 !important; 9478 padding-bottom: 0 !important; 9479 border-bottom: none !important; 9480 } 9481 div:has(> .snb-hero-native) { 9482 margin-bottom: 0 !important; 9483 padding-bottom: 0 !important; 9484 border-bottom: none !important; 9485 } 9486 .main-content > div:has(.snb-hero-native) { 9487 margin-bottom: 0 !important; 9488 padding-bottom: 0 !important; 9489 border-bottom: none !important; 9490 } 9491 .main-content:has(> div:last-child .snb-hero-native) + div, 9492 .main-content:has(> div:last-child .snb-hero-native) + section { 9493 margin-top: 0 !important; 9494 padding-top: 0 !important; 9495 border-top: none !important; 9496 } 9497 .main-content:has(> div:last-child .snb-hero-native) + div .footer__section:first-child, 9498 .main-content:has(> div:last-child .snb-hero-native) + div .footer__section:first-of-type { 9499 border-top: none !important; 9500 } 9501 .main-content > div:has(.snb-hero-native) + * { 9502 margin-top: 0 !important; 9503 padding-top: 0 !important; 9504 border-top: none !important; 9505 } 9506 .snb-hero-native--utm-show-only { 9507 display: none; 9508 } 9509 /* Pre-Flickity: prevent vertical stacking / CLS */ 9510 .snb-hero-native__slider:not(.flickity-enabled) { 9511 position: relative; 9512 overflow: hidden; 9513 } 9514 .snb-hero-native__slider:not(.flickity-enabled) .snb-hero-native__slide { 9515 display: none; 9516 } 9517 .snb-hero-native__slider:not(.flickity-enabled) .snb-hero-native__slide:first-child { 9518 display: block; 9519 } 9520 9521 .snb-hero-native__slider.flickity-enabled { 9522 overflow: visible; 9523 } 9524 .snb-hero-native__slider.flickity-enabled .flickity-viewport { 9525 width: 100%; 9526 height: 60vh; 9527 overflow: hidden; 9528 } 9529 @media (max-width: 640px) { 9530 .snb-hero-native__slider.flickity-enabled .flickity-viewport { 9531 height: 85vh; 9532 } 9533 } 9534 .snb-hero-native__slider.flickity-enabled .flickity-slider { 9535 display: flex; 9536 align-items: stretch; 9537 } 9538 .snb-hero-native__slider .snb-hero-native__slide { 9539 width: 100%; 9540 flex-shrink: 0; 9541 } 9542 .snb-hero-native__slide { 9543 position: relative; 9544 overflow: hidden; 9545 width: 100%; 9546 height: 60vh; 9547 } 9548 .snb-hero-native__slide--clickable { 9549 cursor: pointer; 9550 } 9551 .snb-hero-native__slide--clickable .snb-hero-native__cta, 9552 .snb-hero-native__slide--clickable .snb-hero-native__content { 9553 pointer-events: auto; 9554 } 9555 @media (max-width: 640px) { 9556 .snb-hero-native__slide { 9557 height: 85vh; 9558 } 9559 }
9560 @media (min-width: 961px) { 9561 .snb-hero-native__slide { 9562 max-height: 62vh; 9563 } 9564 } 9565 .snb-hero-native__bg { 9566 position: absolute; 9567 inset: 0; 9568 width: 100%; 9569 height: 100%; 9570 z-index: 0; 9571 } 9572 .snb-hero-native__bg .snb-hero-native__img { 9573 position: absolute; 9574 inset: 0; 9575 width: 100%; 9576 height: 100%; 9577 object-fit: cover; 9578 object-position: right center; 9579 display: block; 9580 } 9581 .snb-hero-native__bg .snb-hero-native__img--desktop { 9582 display: none; 9583 } 9584 .snb-hero-native__bg .snb-hero-native__img--mobile { 9585 display: block; 9586 object-position: center center; 9587 } 9588 @media (max-width: 640px) { 9589 .snb-hero-native__bg .snb-hero-native__img, 9590 .snb-hero-native__bg .snb-hero-native__img--mobile { 9591 object-position: center top; 9592 } 9593 .snb-hero-native__bg .snb-hero-native__video--native { 9594 object-position: center top; 9595 } 9596 } 9597 @media (min-width: 641px) { 9598 .snb-hero-native__bg .snb-hero-native__img--desktop { 9599 display: block; 9600 } 9601 .snb-hero-native__bg .snb-hero-native__img--mobile { 9602 display: none; 9603 } 9604 .snb-hero-native__bg .snb-hero-native__img, 9605 .snb-hero-native__bg .snb-hero-native__video--native { 9606 object-position: right center; 9607 } 9608 } 9609 .snb-hero-native__bg .snb-hero-native__video { 9610 position: absolute; 9611 inset: 0; 9612 width: 100%; 9613 height: 100%; 9614 border: none; 9615 pointer-events: none; 9616 } 9617 .snb-hero-native__bg .snb-hero-native__video--native { 9618 object-fit: cover; 9619 object-position: right center; 9620 } 9621 .snb-hero-native__video--desktop-only { 9622 display: none; 9623 } 9624 .snb-hero-native__video--mobile-only { 9625 display: block; 9626 } 9627 @media (min-width: 641px) { 9628 .snb-hero-native__video--desktop-only { 9629 display: block; 9630 } 9631 .snb-hero-native__video--mobile-only { 9632 display: none; 9633 } 9634 } 9635 .snb-hero-native__bg .snb-hero-native__video--youtube, 9636 .snb-hero-native__bg .snb-hero-native__video--vimeo { 9637 width: 100vw; 9638 height: 56.25vw; 9639 min-height: 100%; 9640 min-width: 177.78vh; 9641 left: 50%; 9642 top: 50%; 9643 transform: translate(-50%, -50%); 9644 } 9645 .snb-hero-native__content { 9646 position: absolute; 9647 z-index: 2; 9648 display: flex; 9649 box-sizing: border-box; 9650 } 9651 .snb-hero-native__content::before { 9652 display: none; 9653 content: none; 9654 } 9655 @media (max-width: 640px) { 9656 .snb-hero-native__content[data-mobile-overlay="true"]::before { 9657 content: ''; 9658 display: block; 9659 position: absolute; 9660 inset: 0; 9661 background-color: var(--snb-hero-mob-overlay-bg, rgba(0,0,0,0.4)); 9662 backdrop-filter: blur(var(--snb-hero-mob-overlay-blur, 0px)); 9663 z-index: -1; 9664 pointer-events: none; 9665 border-radius: inherit; 9666 } 9667 } 9668 @media (min-width: 641px) { 9669 .snb-hero-native__content { 9670 inset: 0; 9671 display: flex; 9672 align-items: center; 9673 padding: 80px 20px 24px; 9674 transform: translateY(-20px); 9675 } 9676 } 9677 .snb-hero-native__content-inner { 9678 width: 100%; 9679 max-width: 100%; 9680 margin: 0; 9681 display: flex; 9682 flex-direction: column; 9683 gap: 0; 9684 box-sizing: border-box; 9685 } 9686 @media (min-width: 641px) { 9687 .snb-hero-native__content-inner { 9688 max-width: 600px; 9689 margin-left: 8%; 9690 margin-right: auto; 9691 text-align: left; 9692 } 9693 } 9694 @media (max-width: 640px) { 9695 .snb-hero-native__slide { 9696 min-height: 64vh; 9697 position: relative; 9698 } 9699 .snb-hero-native__bg { 9700 display: flex; 9701 align-items: flex-end; 9702 justify-content: center; 9703 } 9704 .snb-hero-native__img { 9705 object-fit: contain; 9706 object-position: center top; 9707 width: 100%; 9708 height: auto; 9709 max-height: 100%; 9710 } 9711 .snb-hero-native__content { 9712 position: absolute; 9713 left: 0; 9714 right: 0; 9715 bottom: 0; 9716 padding: 24px 20px 28px; 9717 display: flex; 9718 justify-content: center; 9719 } 9720 .snb-hero-native__content-inner { 9721 width: 100% !important; 9722 max-width: 100% !important; 9723 display: flex; 9724 flex-direction: column; 9725 align-items: center !important; 9726 text-align: center; 9727 gap: 8px; 9728 } 9729 .snb-hero-native__content-inner .snb-hero-native__preheader, 9730 .snb-hero-native__content-inner .hero__subtitle { 9731 margin-bottom: 0 !important; 9732 } 9733 .snb-hero-native__content-inner .hero__title, 9734 .snb-hero-native__content-inner h1, 9735 .snb-hero-native__content-inner h2 { 9736 margin-top: 0 !important; 9737 margin-bottom: 0 !important; 9738 } 9739 .snb-hero-native__content-inner .snb-hero-native__description, 9740 .snb-hero-native__content-inner p { 9741 margin-top: 0 !important; 9742 margin-bottom: 0 !important; 9743 } 9744 .snb-hero-native__content-inner .snb-hero-native__cta, 9745 .snb-hero-native__content-inner .btn { 9746 margin-top: 16px !important; 9747 margin-bottom: 0 !important; 9748 } 9749 .snb-hero-native__content-inner, 9750 .snb-hero-native__content-inner * { 9751 text-align: center !important; 9752 } 9753 .snb-hero-native__content-inner .snb-hero-native__preheader, 9754 .snb-hero-native__content-inner .hero__subtitle, 9755 .snb-hero-native__content-inner .eyebrow, 9756 .snb-hero-native__content-inner .hero__eyebrow, 9757 .snb-hero-native__content-inner .subheading { 9758 text-align: center !important; 9759 margin-left: auto !important; 9760 margin-right: auto !important; 9761 } 9762 .snb-hero-native__content-inner .btn, 9763 .snb-hero-native__content-inner a.btn, 9764 .snb-hero-native__content-inner .snb-hero-native__cta, 9765 .snb-hero-native__content .btn, 9766 .snb-hero-native__content .snb-hero-native__cta { 9767 display: inline-flex !important; 9768 justify-content: center !important; 9769 text-align: center !important; 9770 margin-left: auto !important; 9771 margin-right: auto !important; 9772 } 9773 .snb-hero-native .hero__title, 9774 .snb-hero-native h1, 9775 .snb-hero-native h2, 9776 .snb-hero-native__content-inner .hero__title, 9777 .snb-hero-native__content-inner h1, 9778 .snb-hero-native__content-inner h2 { 9779 text-align: center !important; 9780 align-self: center; 9781 margin-left: auto !important; 9782 margin-right: auto !important; 9783 } 9784 .snb-hero-native__content p, 9785 .snb-hero-native__content .snb-hero-native__description { 9786 text-align: center !important; 9787 } 9788 .snb-hero-native__content .btn, 9789 .snb-hero-native__content .snb-hero-native__cta { 9790 padding: 12px 24px; 9791 width: auto; 9792 max-width: calc(100vw - 40px); 9793 min-width: 0; 9794 display: inline-flex; 9795 justify-content: center; 9796 white-space: normal; 9797 word-break: break-word; 9798 box-sizing: border-box; 9799 letter-spacing: 3px !important; 9800 margin-bottom: 30px !important; 9801 } 9802 } 9803 .snb-hero-native__preheader { 9804 font-family: "Montserrat", sans-serif; 9805 text-transform: uppercase; 9806 color: #333333; 9807 letter-spacing: 0.08em; 9808 box-sizing: border-box; 9809 display: flex; 9810 flex-direction: column; 9811 flex-shrink: 0; 9812 position: relative; 9813 text-align: left; 9814 width: auto; 9815 height: auto; 9816 margin: 0 auto 6px 0; 9817 } 9818 @media (min-width: 641px) { 9819 .snb-hero-native__preheader { 9820 color: rgba(255, 255, 255, 1); 9821 font-size: 14px; 9822 letter-spacing: 5px; 9823 line-height: 18px; 9824 font-weight: 500; 9825 margin-bottom: 6px; 9826 } 9827 } 9828 .snb-hero-native .hero__title { 9829 font-family: var(--typeHeaderPrimary), var(--typeHeaderFallback), "Orpheus Pro", Georgia, serif; 9830 color: #333333; 9831 max-width: 100%; 9832 white-space: normal; 9833 line-break: normal; 9834 box-sizing: border-box; 9835 display: flex; 9836 flex-direction: column; 9837 flex-shrink: 0; 9838 position: relative; 9839 text-align: left; 9840 width: auto; 9841 height: auto; 9842 margin: 0 auto 1rem 0; 9843 } 9844 @media (min-width: 641px) { 9845 .snb-hero-native .hero__title { 9846 color: rgba(255, 255, 255, 1); 9847 font-size: 68px; 9848 letter-spacing: 0; 9849 line-height: 70px; 9850 font-weight: 200; 9851 margin-bottom: 12px; 9852 white-space: nowrap; 9853 } 9854 } 9855 @media (max-width: 640px) { 9856 .snb-hero-native .hero__title, 9857 .snb-hero-native h1, 9858 .snb-hero-native h2 { 9859 align-self: stretch; 9860 color: var(--new-brand-grobal-brand-colors-white-ffffff, #fff); 9861 font-style: normal; 9862 } 9863 } 9864 .snb-hero-native__description { 9865 font-family: var(--typeBasePrimary), var(--typeBaseFallback), "Montserrat", sans-serif; 9866 color: #333333; 9867 margin-bottom: 1.5rem; 9868 text-align: left; 9869 width: auto; 9870 height: auto; 9871 box-sizing: border-box; 9872 } 9873 @media (min-width: 641px) { 9874 .snb-hero-native__description { 9875 color: rgba(255, 255, 255, 1); 9876 font-size: 16px; 9877 letter-spacing: 0.5px; 9878 line-height: 24px; 9879 font-weight: 400; 9880 max-width: 509px; 9881 margin-bottom: 0; 9882 } 9883 } 9884 .snb-hero-native__description p { 9885 margin: 0 0 0.5em; 9886 } 9887 .snb-hero-native__cta { 9888 position: relative; 9889 display: inline-flex; 9890 align-items: center; 9891 justify-content: center; 9892 overflow: hidden; 9893 width: auto; 9894 min-width: 240px; 9895 padding: 12px 40px; 9896 box-sizing: border-box; 9897 border-radius: 12px; 9898 border: 1.5px solid var(--snb-cta-border, #fff); 9899 text-decoration: none; 9900 cursor: pointer; 9901 white-space: nowrap; 9902 appearance: none; 9903 text-align: center; 9904 flex-shrink: 0; 9905 margin: 0 auto 0 0; 9906 font-family: "Montserrat", sans-serif; 9907 font-size: 16px; 9908 letter-spacing: 4px; 9909 line-height: 22px; 9910 font-weight: 500; 9911 background-color: var(--snb-cta-bg, #fff) !important; 9912 color: #611f13 !important; 9913 transition: color 0.2s ease; 9914 } 9915 .snb-hero-native__cta:hover { 9916 color: #fff !important; 9917 } 9918 .snb-hero-native__cta::before { 9919 content: ""; 9920 position: absolute; 9921 inset: 0; 9922 background-color: var(--snb-cta-fill, #611f13); 9923 transform: scaleX(0); 9924 transform-origin: left; 9925 transition: transform 0.2s ease; 9926 z-index: 0; 9927 border-radius: inherit; 9928 } 9929 .snb-hero-native__cta:hover::before { 9930 transform: scaleX(1); 9931 } 9932 .snb-hero-native__cta span { 9933 position: relative; 9934 z-index: 1; 9935 } 9936 @media (min-width: 641px) { 9937 .snb-hero-native__cta { 9938 margin-top: 25px; 9939 } 9940 } 9941 @media (max-width: 640px) { 9942 .snb-hero-native__cta { 9943 margin-top: 0; 9944 } 9945 } 9946 .snb-hero-native__placeholder { 9947 position: absolute; 9948 inset: 0; 9949 width: 100%; 9950 height: 100%; 9951 min-height: 280px; 9952 display: flex; 9953 align-items: center; 9954 justify-content: center; 9955 background: linear-gradient(135deg, #2c3e50 0%, #4a6fa5 100%); 9956 color: rgba(255, 255, 255, 0.6); 9957 } 9958 .snb-hero-native .flickity-prev-next-button { 9959 top: auto !important; 9960 bottom: 20px !important; 9961 width: 44px; 9962 height: 44px; 9963 transform: none !important; 9964 background-color: #fff; 9965 color: #414141; 9966 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); 9967 border: none; 9968 transition: box-shadow 0.2s ease; 9969 } 9970 .snb-hero-native .flickity-prev-next-button:hover { 9971 transform: none !important; 9972 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12); 9973 } 9974 .snb-hero-native .flickity-prev-next-button:active { 9975 transform: none !important; 9976 } 9977 .snb-hero-native .flickity-previous { 9978 left: 20px; 9979 right: auto; 9980 } 9981 .snb-hero-native .flickity-next { 9982 right: 20px; 9983 left: auto; 9984 } 9985 /* Mobile: move arrows above content area to avoid CTA overlap */ 9986 @media (max-width: 640px) { 9987 .snb-hero-native .flickity-prev-next-button { 9988 top: 50% !important; 9989 bottom: auto !important; 9990 transform: translateY(-50%) !important; 9991 width: 36px; 9992 height: 36px; 9993 background-color: rgba(255, 255, 255, 0.85); 9994 z-index: 3; 9995 } 9996 .snb-hero-native .flickity-prev-next-button:hover { 9997 transform: translateY(-50%) !important; 9998 } 9999 .snb-hero-native .flickity-previous { 10000 left: 8px; 10001 } 10002 .snb-hero-native .flickity-next { 10003 right: 8px; 10004 } 10005 } 10006 .snb-hero-native .flickity-button-icon { 10007 fill: #414141; 10008 } 10009 .snb-hero-native .flickity-page-dots { 10010 bottom: 20px; 10011 left: 50%; 10012 width: auto; 10013 transform: translateX(-50%); 10014 display: flex; 10015 align-items: center; 10016 justify-content: center; 10017 gap: 6px; 10018 padding: 6px 14px; 10019 background-color: #fff; 10020 border-radius: 999px; 10021 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); 10022 } 10023 .snb-hero-native .flickity-page-dots .dot { 10024 width: 6px; 10025 height: 6px; 10026 margin: 0; 10027 border-radius: 50%; 10028 background-color: #C4C4C4; 10029 opacity: 1; 10030 vertical-align: middle; 10031 } 10032 .snb-hero-native .flickity-page-dots .dot:hover { 10033 opacity: 1; 10034 background-color: #a0a0a0; 10035 } 10036 .snb-hero-native .flickity-page-dots .dot.is-selected { 10037 width: 24px; 10038 height: 6px; 10039 border-radius: 3px; 10040 background-color: #2E513F; 10041 } 10042 .snb-hero-native__slide--clickable:focus-visible { 10043 outline: 2px solid #fff; 10044 outline-offset: -4px; 10045 } 10046 .snb-hero-native__cta:focus-visible { 10047 outline: 2px solid currentColor; 10048 outline-offset: 3px; 10049 }
10050 .snb-hero-native__pause-btn { 10051 position: absolute; 10052 bottom: 20px; 10053 right: 80px; 10054 z-index: 10; 10055 display: inline-flex; 10056 align-items: center; 10057 justify-content: center; 10058 width: 44px; 10059 height: 44px; 10060 background-color: #fff; 10061 color: #414141; 10062 border: none; 10063 border-radius: 50%; 10064 cursor: pointer; 10065 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); 10066 padding: 0; 10067 } 10068 .snb-hero-native__pause-btn:focus-visible { 10069 outline: 2px solid #414141; 10070 outline-offset: 3px; 10071 }</style> 10072 10073 10074 10075 10076 10077 10078 10079 10080 10081<section 10082 class="hero hero--large hero--centered snb-hero-native" 10083 data-section-id="template--17749318303830__snb_hero_native_m3PCWY" 10084 data-section-type="snb-hero-native" 10085 10086 ><h1 class="visually-hidden">Discover JapanThrough Snacks</h1><div 10087 id="Slideshow-template--17749318303830__snb_hero_native_m3PCWY" 10088 class="snb-hero-native__slider loaded" 10089 role="region" 10090 aria-roledescription="carousel" 10091 aria-label="Hero slideshow" 10092 data-autoplay="false" 10093 data-speed="5000" 10094 data-arrows="true" 10095 data-dots="true"> 10096 10097 10098<div 10099 class="snb-hero-native__slide snb-hero-native__slide--slide_yUTnyh" 10100 role="group" 10101 aria-roledescription="slide" 10102 aria-labelledby="snb-hero-slide-label-template--17749318303830__snb_hero_native_m3PCWY-slide_yUTnyh" 10103 10104 > 10105 <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> 10106 <div class="snb-hero-native__bg" aria-hidden="true" inert> 10107 10108 10109 10110 10111 10112 10113 10114 10115 10116 10117 10118 10119 10120 10121 <img 10122 class="snb-hero-native__img snb-hero-native__img--desktop" 10123 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_c6d233a7e05b49dbbb437504a8260346_a74a1b61-8103-4122-aa70-f662edd1a60b.jpg?v=1771973433&width=2000" 10124 srcset=" 10125 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_c6d233a7e05b49dbbb437504a8260346_a74a1b61-8103-4122-aa70-f662edd1a60b.jpg?v=1771973433&width=800 800w, 10126 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_c6d233a7e05b49dbbb437504a8260346_a74a1b61-8103-4122-aa70-f662edd1a60b.jpg?v=1771973433&width=1200 1200w, 10127 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_c6d233a7e05b49dbbb437504a8260346_a74a1b61-8103-4122-aa70-f662edd1a60b.jpg?v=1771973433&width=2000 2000w 10128 " 10129 sizes="100vw" 10130 alt="Discover JapanThrough Snacks" 10131 width="2000" 10132 height="800" 10133 loading="eager" 10134 fetchpriority="high" 10135 10136 > 10137 10138 <img 10139 class="snb-hero-native__img snb-hero-native__img--mobile" 10140 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_27496cd0ce7a49f1a3a8742df6381083.webp?v=1772015507&width=800" 10141 srcset=" 10142 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_27496cd0ce7a49f1a3a8742df6381083.webp?v=1772015507&width=480 480w, 10143 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_27496cd0ce7a49f1a3a8742df6381083.webp?v=1772015507&width=800 800w, 10144 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_27496cd0ce7a49f1a3a8742df6381083.webp?v=1772015507&width=1200 1200w 10145 " 10146 sizes="100vw" 10147 alt="Discover JapanThrough Snacks" 10148 width="623" 10149 height="934" 10150 loading="eager" 10151 fetchpriority="high" 10152 10153 > 10154 10155 10156 </div><div class="snb-hero-native__content"> 10157 <div class="snb-hero-native__content-inner"> 10158 10159 10160 10161 <h2 class="hero__title">Discover Japan<br/>Through Snacks<br></h2> 10162 10163 10164 <div class="snb-hero-native__description"><p>Authentic Japanese snacks delivered to you monthly from Japan.</p></div> 10165 10166 10167 <a href="#snack-box-subscription" class="snb-hero-native__cta btn" aria-label="Subscribe now â view subscription plans"><span>SUBSCRIBE NOW</span></a> 10168 10169 </div> 10170 </div> 10171 </div> 10172 10173 </div> 10174 <div class="visually-hidden" id="snb-hero-status-template--17749318303830__snb_hero_native_m3PCWY" aria-live="polite" aria-atomic="true"></div> 10175</section>
10176<script> 10177(function() { 10178 var sectionId = 'template--17749318303830__snb_hero_native_m3PCWY'; 10179 var section = document.querySelector('[data-section-id="' + sectionId + '"][data-section-type="snb-hero-native"]'); 10180 if (!section) return; 10181 var slideshow = document.getElementById('Slideshow-' + sectionId); 10182 if (!slideshow) return; 10183 10184 window._snbHeroNativeFlickity = window._snbHeroNativeFlickity || {}; 10185 10186 function initSlider() { 10187 if (window._snbHeroNativeFlickity[sectionId]) return; 10188 var slides = slideshow.querySelectorAll('.snb-hero-native__slide'); 10189 slideshow.classList.add('loaded'); 10190 if (slides.length > 1 && typeof theme !== 'undefined' && theme.Slideshow) { 10191 var sliderArgs = { 10192 cellSelector: '.snb-hero-native__slide', 10193 prevNextButtons: true, 10194 pageDots: true, 10195 fade: false, 10196 setGallerySize: false, 10197 initialIndex: 0, 10198 wrapAround: true, 10199 autoPlay: (slideshow.dataset.autoplay === 'true' && !window.matchMedia('(prefers-reduced-motion: reduce)').matches) ? (parseInt(slideshow.dataset.speed, 10) || 5000) : false 10200 }; 10201 window._snbHeroNativeFlickity[sectionId] = new theme.Slideshow(slideshow, sliderArgs); 10202 } else if (slides.length === 1) { 10203 slides[0].classList.add('is-selected'); 10204 } 10205 } 10206 10207 function initPauseButton() { 10208 if (slideshow.dataset.autoplay !== 'true') return; 10209 var existing = section.querySelector('.snb-hero-native__pause-btn'); 10210 if (existing) return; 10211 var pauseBtn = document.createElement('button'); 10212 pauseBtn.type = 'button'; 10213 pauseBtn.className = 'snb-hero-native__pause-btn'; 10214 pauseBtn.setAttribute('aria-label', 'Pause slideshow'); 10215 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>'; 10216 // Insert as the first child of the slideshow so VoiceOver users 10217 // encounter it immediately when entering the carousel region, 10218 // before any slide content starts rotating under them. 10219 slideshow.insertBefore(pauseBtn, slideshow.firstChild); 10220 var isPaused = false; 10221 pauseBtn.addEventListener('click', function(e) { 10222 e.stopPropagation(); 10223 var flk = window._snbHeroNativeFlickity[sectionId]; 10224 if (flk) { 10225 if (isPaused) { 10226 if (typeof flk.play === 'function') flk.play(); 10227 pauseBtn.setAttribute('aria-label', 'Pause slideshow'); 10228 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>'; 10229 } else { 10230 if (typeof flk.pause === 'function') flk.pause(); 10231 pauseBtn.setAttribute('aria-label', 'Play slideshow'); 10232 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>'; 10233 } 10234 isPaused = !isPaused; 10235 } 10236 }); 10237 } 10238 10239 // a11y: keep off-screen carousel slides out of the keyboard tab order 10240 // WITHOUT using inert (which would kick screen-reader virtual focus when 10241 // the slide rotates). Instead, set tabindex="-1" on focusable descendants 10242 // of inactive slides; restore on selection. Also pause autoplay while the 10243 // slideshow has focus so the user can read without rotation interruptions. 10244 var FOCUSABLE_SEL = 'a[href], button, input, select, textarea, iframe, [tabindex]'; 10245 10246 function enforceSlideInert() { 10247 var slides = slideshow.querySelectorAll('.snb-hero-native__slide'); 10248 10249 function setSlideTabbable(slide, tabbable) { 10250 var focusables = slide.querySelectorAll(FOCUSABLE_SEL); 10251 for (var i = 0; i < focusables.length; i++) { 10252 var el = focusables[i]; 10253 if (tabbable) { 10254 var orig = el.getAttribute('data-a11y-orig-tabindex'); 10255 if (orig !== null && orig !== undefined) { 10256 if (orig === '__none__') el.removeAttribute('tabindex'); 10257 else el.setAttribute('tabindex', orig); 10258 el.removeAttribute('data-a11y-orig-tabindex'); 10259 } else { 10260 el.removeAttribute('tabindex'); 10261 } 10262 } else { 10263 if (el.getAttribute('data-a11y-orig-tabindex') === null) { 10264 var existing = el.getAttribute('tabindex'); 10265 el.setAttribute('data-a11y-orig-tabindex', existing === null ? '__none__' : existing); 10266 } 10267 el.setAttribute('tabindex', '-1'); 10268 } 10269 } 10270 } 10271 10272 function applyState() { 10273 // If no slide has is-selected yet (Flickity hasn't init'd), treat first as active. 10274 var hasSelected = false;
10275 for (var k = 0; k < slides.length; k++) { 10276 if (slides[k].classList.contains('is-selected')) { hasSelected = true; break; } 10277 } 10278 10279 for (var i = 0; i < slides.length; i++) { 10280 var slide = slides[i]; 10281 var isActive = slide.classList.contains('is-selected') || (!hasSelected && i === 0); 10282 setSlideTabbable(slide, isActive); 10283 if (isActive) { 10284 slide.removeAttribute('aria-hidden'); 10285 } else if (!slide.contains(document.activeElement)) { 10286 slide.setAttribute('aria-hidden', 'true'); 10287 } 10288 } 10289 } 10290 10291 applyState(); 10292 10293 if (typeof MutationObserver === 'function' && !slideshow.dataset.a11ySlideObserved) { 10294 slideshow.dataset.a11ySlideObserved = '1'; 10295 var observer = new MutationObserver(function (mutations) { 10296 for (var i = 0; i < mutations.length; i++) { 10297 if (mutations[i].attributeName === 'class') { 10298 applyState(); 10299 break; 10300 } 10301 } 10302 }); 10303 for (var j = 0; j < slides.length; j++) { 10304 observer.observe(slides[j], { attributes: true, attributeFilter: ['class'] }); 10305 } 10306 } 10307 10308 // Pause autoplay while the slideshow has keyboard or screen-reader focus. 10309 if (!slideshow.dataset.a11yFocusPause) { 10310 slideshow.dataset.a11yFocusPause = '1'; 10311 var pausedByFocus = false; 10312 slideshow.addEventListener('focusin', function () { 10313 var flk = window._snbHeroNativeFlickity[sectionId]; 10314 if (flk && typeof flk.pause === 'function') { 10315 flk.pause(); 10316 pausedByFocus = true; 10317 } 10318 }); 10319 slideshow.addEventListener('focusout', function (e) { 10320 // Only resume if focus actually leaves the slideshow. 10321 if (slideshow.contains(e.relatedTarget)) return; 10322 if (!pausedByFocus) return; 10323 pausedByFocus = false; 10324 var flk = window._snbHeroNativeFlickity[sectionId]; 10325 if (flk && flk.args && flk.args.autoPlay && typeof flk.play === 'function') { 10326 flk.play(); 10327 } 10328 }); 10329 } 10330 } 10331 10332 // a11y: ensure Flickity-injected prev/next buttons AND page dots have 10333 // explicit aria-labels and survive third-party DOM rewrites 10334 // (e.g., UserWay overlay relabels them as "Current step"). 10335 function enforcePrevNextLabels() { 10336 function applyLabels() { 10337 var prev = slideshow.querySelector('.flickity-button.flickity-previous, .flickity-prev-next-button.flickity-previous, .flickity-prev-next-button.previous'); 10338 var next = slideshow.querySelector('.flickity-button.flickity-next, .flickity-prev-next-button.flickity-next, .flickity-prev-next-button.next'); 10339 // Build contextual labels using the slide titles from the hidden label spans. 10340 var slides = slideshow.querySelectorAll('.snb-hero-native__slide'); 10341 var currentIndex = 0; 10342 for (var si = 0; si < slides.length; si++) { 10343 if (slides[si].classList.contains('is-selected')) { currentIndex = si; break; } 10344 } 10345 var totalSlides = slides.length; 10346 function getSlideTitle(index) { 10347 if (!slides[index]) return ''; 10348 var span = slides[index].querySelector('[id^="snb-hero-slide-label-"]'); 10349 if (span) return span.textContent.replace(/^Slide \d+ of \d+:\s*/, '').trim(); 10350 return 'slide ' + (index + 1); 10351 } 10352 var prevIndex = (currentIndex - 1 + totalSlides) % totalSlides; 10353 var nextIndex = (currentIndex + 1) % totalSlides; 10354 var prevLabel = 'Previous: ' + getSlideTitle(prevIndex); 10355 var nextLabel = 'Next: ' + getSlideTitle(nextIndex); 10356 if (prev && prev.getAttribute('aria-label') !== prevLabel) { 10357 prev.setAttribute('aria-label', prevLabel); 10358 } 10359 if (next && next.getAttribute('aria-label') !== nextLabel) { 10360 next.setAttribute('aria-label', nextLabel); 10361 } 10362 // Page dots â remove from keyboard tab order and screen reader navigation. 10363 // Users navigate slides via prev/next buttons; dots remain mouse/touch clickable. 10364 // Also normalizes aria-current="step" â "true" in case any AT still reaches them. 10365 var dotsContainer = slideshow.querySelector('.flickity-page-dots'); 10366 if (dotsContainer && dotsContainer.getAttribute('aria-hidden') !== 'true') { 10367 dotsContainer.setAttribute('aria-hidden', 'true'); 10368 } 10369 var dots = slideshow.querySelectorAll('.flickity-page-dots .dot'); 10370 for (var i = 0; i < dots.length; i++) { 10371 if (dots[i].getAttribute('tabindex') !== '-1') { 10372 dots[i].setAttribute('tabindex', '-1'); 10373 } 10374 if (dots[i].getAttribute('aria-current') === 'step') { 10375 dots[i].setAttribute('aria-current', 'true'); 10376 } 10377 } 10378 } 10379 // Initial label pass only â the standalone script at the bottom of 10380 // this section handles ongoing observation. Do NOT add a MutationObserver 10381 // here â two observers on the same subtree setting the same attributes 10382 // causes an infinite loop that freezes the page. 10383 applyLabels(); 10384 setTimeout(applyLabels, 200); 10385 setTimeout(applyLabels, 500); 10386 } 10387 10388 function destroySlider() { 10389 var flk = window._snbHeroNativeFlickity[sectionId]; 10390 if (flk && typeof flk.destroy === 'function') { 10391 flk.destroy(); 10392 delete window._snbHeroNativeFlickity[sectionId]; 10393 } 10394 } 10395 10396 function onBlockSelect(evt) { 10397 if (evt.detail.sectionId !== sectionId) return; 10398 var slide = slideshow.querySelector('.snb-hero-native__slide--' + evt.detail.blockId); 10399 if (!slide) return; 10400 var slides = slideshow.querySelectorAll('.snb-hero-native__slide'); 10401 var index = [].indexOf.call(slides, slide); 10402 var flk = window._snbHeroNativeFlickity[sectionId]; 10403 if (flk && typeof flk.goToSlide === 'function') { 10404 flk.goToSlide(index); 10405 if (typeof flk.pause === 'function') flk.pause(); 10406 } 10407 } 10408 10409 function onBlockDeselect(evt) { 10410 if (evt.detail.sectionId !== sectionId) return; 10411 var flk = window._snbHeroNativeFlickity[sectionId]; 10412 if (flk && flk.args && flk.args.autoPlay && typeof flk.play === 'function') flk.play(); 10413 } 10414 10415 function onSectionUnload(evt) { 10416 if (evt.detail.sectionId === sectionId) destroySlider(); 10417 } 10418 10419 function getScrollOffset() { 10420 var scrollOffset = 0; 10421 if (typeof theme !== 'undefined' && theme.config && theme.config.stickyHeader) { 10422 var header = document.querySelector('#SiteHeader'); 10423 if (header) { 10424 scrollOffset = header.offsetHeight; 10425 } 10426 } 10427 return scrollOffset; 10428 } 10429 10430 function smoothScrollTo(targetElement) { 10431 var scrollOffset = getScrollOffset(); 10432 var targetPosition = targetElement.getBoundingClientRect().top + window.pageYOffset - scrollOffset; 10433 window.scrollTo({ 10434 top: Math.max(0, targetPosition), 10435 behavior: 'smooth' 10436 }); 10437 } 10438 10439 function initSmoothScroll() { 10440 var ctaButtons = section.querySelectorAll('.snb-hero-native__cta'); 10441 ctaButtons.forEach(function(button) { 10442 var href = button.getAttribute('href'); 10443 if (href && href.startsWith('#')) { 10444 button.addEventListener('click', function(e) { 10445 var targetId = href.substring(1); 10446 var targetElement = document.getElementById(targetId); 10447 10448 if (targetElement) { 10449 e.preventDefault(); 10450 smoothScrollTo(targetElement); 10451 } 10452 }); 10453 } 10454 }); 10455 } 10456 10457 var slideLinksInitialized = false;
10458 var slideClickData = {}; 10459 10460 function handleSlideLink(slideLink, linkType) { 10461 // If it's an anchor link (#something), always scroll 10462 if (slideLink.startsWith('#')) { 10463 var targetId = slideLink.substring(1); 10464 var targetElement = document.getElementById(targetId); 10465 10466 if (targetElement) { 10467 smoothScrollTo(targetElement); 10468 } 10469 } else if (linkType === 'scroll') { 10470 var targetElement = document.getElementById(slideLink); 10471 10472 if (targetElement) { 10473 smoothScrollTo(targetElement); 10474 } else { 10475 window.location.href = slideLink; 10476 } 10477 } else { 10478 window.location.href = slideLink; 10479 } 10480 } 10481 10482 function initSlideLinks() { 10483 if (slideLinksInitialized) return; 10484 if (!section || !slideshow) return; 10485 10486 var slides = section.querySelectorAll('.snb-hero-native__slide--clickable'); 10487 if (slides.length === 0) return; 10488 10489 slideLinksInitialized = true; 10490 10491 // Keyboard support for clickable slides 10492 slides.forEach(function(slide) { 10493 slide.addEventListener('keydown', function(e) { 10494 if (e.key === 'Enter' || e.key === ' ') { 10495 e.preventDefault(); 10496 var link = slide.getAttribute('data-slide-link'); 10497 var type = slide.getAttribute('data-slide-link-type') || 'redirect'; 10498 if (link) handleSlideLink(link, type); 10499 } 10500 }); 10501 }); 10502 10503 // Track mouse/touch events to distinguish clicks from drags 10504 var mouseDownData = {}; 10505 10506 slideshow.addEventListener('mousedown', function(e) { 10507 var slide = e.target.closest('.snb-hero-native__slide--clickable'); 10508 if (slide) { 10509 mouseDownData[slide] = { 10510 x: e.clientX, 10511 y: e.clientY, 10512 time: Date.now() 10513 }; 10514 } 10515 }, true); // Use capture phase 10516 10517 slideshow.addEventListener('touchstart', function(e) { 10518 var slide = e.target.closest('.snb-hero-native__slide--clickable'); 10519 if (slide && e.touches.length > 0) { 10520 mouseDownData[slide] = { 10521 x: e.touches[0].clientX, 10522 y: e.touches[0].clientY, 10523 time: Date.now() 10524 }; 10525 } 10526 }, true); 10527 10528 // Handle touch events for mobile 10529 slideshow.addEventListener('touchend', function(e) { 10530 var slide = e.target.closest('.snb-hero-native__slide--clickable'); 10531 if (!slide) return; 10532 10533 var slideLink = slide.getAttribute('data-slide-link'); 10534 var linkType = slide.getAttribute('data-slide-link-type') || 'redirect'; 10535 10536 if (!slideLink) return; 10537 10538 // Check if this was a drag (not a tap) 10539 var clickInfo = mouseDownData[slide]; 10540 if (clickInfo && e.changedTouches.length > 0) { 10541 var moveDistance = Math.sqrt( 10542 Math.pow(e.changedTouches[0].clientX - clickInfo.x, 2) + 10543 Math.pow(e.changedTouches[0].clientY - clickInfo.y, 2) 10544 ); 10545 var timeDiff = Date.now() - clickInfo.time; 10546 10547 // If moved more than 10px or took more than 500ms, it's a drag 10548 if (moveDistance > 10 || timeDiff > 500) { 10549 delete mouseDownData[slide]; 10550 return; 10551 } 10552 delete mouseDownData[slide]; 10553 } 10554 10555 // Only skip Flickity controls 10556 var clickedElement = e.target; 10557 if (clickedElement.closest('.flickity-button') || clickedElement.closest('.flickity-page-dots')) { 10558 return; 10559 } 10560 10561 // Handle the slide link - work anywhere on slide 10562 e.preventDefault(); 10563 e.stopPropagation(); 10564 10565 handleSlideLink(slideLink, linkType); 10566 }, true); 10567 10568 // Handle desktop mouse clicks - use capture phase to catch before Flickity 10569 slideshow.addEventListener('click', function(e) { 10570 // Find the closest clickable slide 10571 var slide = e.target.closest('.snb-hero-native__slide--clickable'); 10572 if (!slide) return; 10573 10574 var slideLink = slide.getAttribute('data-slide-link'); 10575 var linkType = slide.getAttribute('data-slide-link-type') || 'redirect'; 10576 10577 if (!slideLink) return; 10578 10579 // Check if this was a drag (not a click) 10580 var clickInfo = mouseDownData[slide]; 10581 if (clickInfo) { 10582 var moveDistance = Math.sqrt( 10583 Math.pow(e.clientX - clickInfo.x, 2) + 10584 Math.pow(e.clientY - clickInfo.y, 2) 10585 ); 10586 var timeDiff = Date.now() - clickInfo.time; 10587 10588 // If moved more than 10px or took more than 500ms, it's a drag 10589 if (moveDistance > 10 || timeDiff > 500) { 10590 delete mouseDownData[slide]; 10591 return; 10592 } 10593 delete mouseDownData[slide]; 10594 } 10595 10596 // Only skip Flickity controls 10597 var clickedElement = e.target; 10598 if (clickedElement.closest('.flickity-button') || clickedElement.closest('.flickity-page-dots')) { 10599 return; 10600 } 10601
10602 // Handle the slide link - work anywhere on slide 10603 e.preventDefault(); 10604 e.stopPropagation(); 10605 10606 handleSlideLink(slideLink, linkType); 10607 }, true); // Use capture phase to intercept before Flickity 10608 10609 // Also attach directly to each slide as a fallback for desktop 10610 // Use mouseup instead of click to avoid Flickity interference 10611 slides.forEach(function(slide) { 10612 var slideLink = slide.getAttribute('data-slide-link'); 10613 var linkType = slide.getAttribute('data-slide-link-type') || 'redirect'; 10614 10615 if (!slideLink) return; 10616 10617 var slideMouseDown = null; 10618 var isDragging = false; 10619 10620 slide.addEventListener('mousedown', function(e) { 10621 // Only skip Flickity controls 10622 if (e.target.closest('.flickity-button') || e.target.closest('.flickity-page-dots')) { 10623 return; 10624 } 10625 slideMouseDown = { 10626 x: e.clientX, 10627 y: e.clientY, 10628 time: Date.now() 10629 }; 10630 isDragging = false; 10631 }); 10632 10633 slide.addEventListener('mousemove', function(e) { 10634 if (slideMouseDown) { 10635 var moveDistance = Math.sqrt( 10636 Math.pow(e.clientX - slideMouseDown.x, 2) + 10637 Math.pow(e.clientY - slideMouseDown.y, 2) 10638 ); 10639 if (moveDistance > 5) { 10640 isDragging = true; 10641 } 10642 } 10643 }); 10644 10645 slide.addEventListener('mouseup', function(e) { 10646 // Only skip Flickity controls 10647 if (e.target.closest('.flickity-button') || e.target.closest('.flickity-page-dots')) { 10648 slideMouseDown = null; 10649 isDragging = false; 10650 return; 10651 } 10652 10653 if (!slideMouseDown || isDragging) { 10654 slideMouseDown = null; 10655 isDragging = false; 10656 return; 10657 } 10658 10659 // Check if this was a drag 10660 var moveDistance = Math.sqrt( 10661 Math.pow(e.clientX - slideMouseDown.x, 2) + 10662 Math.pow(e.clientY - slideMouseDown.y, 2) 10663 ); 10664 var timeDiff = Date.now() - slideMouseDown.time; 10665 10666 if (moveDistance > 10 || timeDiff > 500) { 10667 slideMouseDown = null; 10668 isDragging = false; 10669 return; 10670 } 10671 10672 // Handle the slide link - work anywhere on slide 10673 e.preventDefault(); 10674 e.stopPropagation(); 10675 10676 slideMouseDown = null; 10677 isDragging = false; 10678 10679 handleSlideLink(slideLink, linkType); 10680 }); 10681 10682 // Also keep click handler as backup 10683 slide.addEventListener('click', function(e) { 10684 // Only skip Flickity controls 10685 if (e.target.closest('.flickity-button') || e.target.closest('.flickity-page-dots')) { 10686 return; 10687 } 10688 10689 // Handle the slide link - work anywhere on slide 10690 e.preventDefault(); 10691 e.stopPropagation(); 10692 10693 handleSlideLink(slideLink, linkType); 10694 }); 10695 }); 10696 } 10697 10698 if (document.readyState === 'loading') { 10699 document.addEventListener('DOMContentLoaded', function() { 10700 initSlider(); 10701 initPauseButton(); 10702 initSmoothScroll(); 10703 initSlideLinks(); 10704 enforcePrevNextLabels(); 10705 enforceSlideInert(); 10706 }); 10707 } else { 10708 initSlider(); 10709 initPauseButton(); 10710 initSmoothScroll(); 10711 initSlideLinks(); 10712 enforcePrevNextLabels(); 10713 enforceSlideInert(); 10714 } 10715 document.addEventListener('shopify:section:load', function(evt) { 10716 if (evt.detail.sectionId === sectionId) { 10717 var container = document.querySelector('[data-section-id="' + sectionId + '"][data-section-type="snb-hero-native"]'); 10718 if (container) { 10719 section = container; 10720 slideshow = document.getElementById('Slideshow-' + sectionId); 10721 slideLinksInitialized = false; 10722 if (slideshow) { 10723 initSlider(); 10724 initPauseButton(); 10725 initSmoothScroll(); 10726 initSlideLinks(); 10727 enforcePrevNextLabels(); 10728 enforceSlideInert(); 10729 } 10730 } 10731 } 10732 }); 10733 document.addEventListener('shopify:block:select', onBlockSelect); 10734 document.addEventListener('shopify:block:deselect', onBlockDeselect); 10735 document.addEventListener('shopify:section:unload', onSectionUnload); 10736})(); 10737</script>
10737 10738 10739 10740
10741<script> 10742// a11y: standalone hero prev/next + dots labeler. 10743// Runs independently of the main hero script because Flickity may be 10744// initialized by theme.js, not by initSlider(). 10745(function () { 10746 var hero = document.querySelector('.snb-hero-native'); 10747 if (!hero) return; 10748 10749 function applyHeroA11y() { 10750 var prev = hero.querySelector('.flickity-button.flickity-previous'); 10751 var next = hero.querySelector('.flickity-button.flickity-next'); 10752 if (!prev && !next) return false; 10753 10754 var slides = hero.querySelectorAll('.snb-hero-native__slide'); 10755 var currentIndex = 0; 10756 for (var i = 0; i < slides.length; i++) { 10757 if (slides[i].classList.contains('is-selected')) { currentIndex = i; break; } 10758 } 10759 var total = slides.length; 10760 10761 function getTitle(index) { 10762 var slide = slides[index]; 10763 if (!slide) return 'slide ' + (index + 1); 10764 var span = slide.querySelector('[id^="snb-hero-slide-label-"]'); 10765 if (span) return span.textContent.replace(/^Slide \d+ of \d+:\s*/, '').trim(); 10766 var h = slide.querySelector('h1, h2, .hero__title'); 10767 if (h) return h.textContent.trim(); 10768 return 'slide ' + (index + 1); 10769 } 10770 10771 var prevI = (currentIndex - 1 + total) % total; 10772 var nextI = (currentIndex + 1) % total; 10773 var prevLabel = 'Previous: ' + getTitle(prevI); 10774 var nextLabel = 'Next: ' + getTitle(nextI); 10775 10776 // Guard: only set if value differs â prevents MutationObserver infinite loop. 10777 if (prev && prev.getAttribute('aria-label') !== prevLabel) prev.setAttribute('aria-label', prevLabel); 10778 if (next && next.getAttribute('aria-label') !== nextLabel) next.setAttribute('aria-label', nextLabel); 10779 10780 // Hide dots from AT 10781 var dotsContainer = hero.querySelector('.flickity-page-dots'); 10782 if (dotsContainer && dotsContainer.getAttribute('aria-hidden') !== 'true') dotsContainer.setAttribute('aria-hidden', 'true'); 10783 hero.querySelectorAll('.flickity-page-dots .dot').forEach(function (d) { 10784 if (d.getAttribute('tabindex') !== '-1') d.setAttribute('tabindex', '-1'); 10785 if (d.getAttribute('aria-current') === 'step') d.setAttribute('aria-current', 'true'); 10786 }); 10787 10788 return true; 10789 } 10790 10791 // Poll until buttons exist, then observe for slide changes. 10792 var attempts = 0; 10793 var poll = setInterval(function () { 10794 attempts++; 10795 if (applyHeroA11y() || attempts > 25) { 10796 clearInterval(poll); 10797 // Watch for slide changes (class-based) to update labels dynamically. 10798 // ONLY watch 'class' â NOT 'aria-label' or 'aria-current' â to prevent 10799 // infinite observer loops (setting an attribute re-triggers the observer). 10800 if (typeof MutationObserver === 'function') { 10801 new MutationObserver(function () { 10802 // Debounce to avoid rapid-fire during Flickity transitions. 10803 clearTimeout(hero._a11yDebounce); 10804 hero._a11yDebounce = setTimeout(applyHeroA11y, 50); 10805 }).observe(hero, { 10806 subtree: true, 10807 attributes: true, 10808 attributeFilter: ['class'] 10809 }); 10810 } 10811 } 10812 }, 200); 10813})(); 10814</script>
10814 10815 10816</div><div id="shopify-section-template--17749318303830__snb_makers_rFLVy4" class="shopify-section"> 10817<style data-shopify>#shopify-section-template--17749318303830__snb_makers_rFLVy4 { 10818 --snb-makers-bg: #f5f1ec; 10819 --snb-makers-text: #333333; 10820 --snb-makers-subtitle: #1b4b5a; 10821 --snb-makers-heading: #1b3a3a; 10822 --snb-makers-btn-bg: #b74b1a; 10823 --snb-makers-btn-text: #ffffff; 10824 --snb-makers-pt: 60px; 10825 --snb-makers-pb: 60px; 10826 } 10827 10828 .snb-makers { 10829 background-color: var(--snb-makers-bg); 10830 padding-top: var(--snb-makers-pt); 10831 padding-bottom: var(--snb-makers-pb); 10832 overflow: hidden; 10833 } 10834 10835 .snb-makers__grid { 10836 display: grid; 10837 grid-template-columns: 1fr; 10838 gap: 32px; 10839 align-items: center; 10840 } 10841 10842 .snb-makers__image-wrap { 10843 position: relative; 10844 width: 100%; 10845 overflow: hidden; 10846 } 10847 10848 .snb-makers__image-wrap img { 10849 display: block; 10850 width: 100%; 10851 height: auto; 10852 object-fit: cover; 10853 opacity: 0; 10854 transition: opacity 0.4s ease; 10855 } 10856 10857 .snb-makers__image-wrap img.is-loaded { 10858 opacity: 1; 10859 } 10860 10861 .snb-makers__content { 10862 text-align: center; 10863 padding: 0 20px; 10864 } 10865 10866 .snb-makers__subtitle { 10867 font-family: 'Montserrat', sans-serif; 10868 font-size: 14px; 10869 font-weight: 400; 10870 letter-spacing: 3px; 10871 text-transform: uppercase; 10872 color: var(--snb-makers-subtitle); 10873 margin: 0 0 12px; 10874 } 10875 10876 .snb-makers__heading { 10877 font-family: 'Orpheus Pro', serif; 10878 font-size: 32px; 10879 font-weight: 400; 10880 line-height: 1.2; 10881 color: var(--snb-makers-heading); 10882 margin: 0 0 16px; 10883 } 10884 10885 .snb-makers__description { 10886 font-family: 'Lato', sans-serif; 10887 font-size: 15px; 10888 font-weight: 400; 10889 line-height: 1.6; 10890 color: var(--snb-makers-text); 10891 margin: 0 0 24px; 10892 max-width: 480px; 10893 margin-left: auto; 10894 margin-right: auto; 10895 } 10896 10897 .snb-makers__btn { 10898 width: 100%; 10899 text-align: center; 10900 box-sizing: border-box; 10901 } 10902 10903 .snb-makers__btn:focus-visible { 10904 outline: 2px solid currentColor; 10905 outline-offset: 3px; 10906 } 10907 10908 .snb-makers__decorative { 10909 display: none; 10910 } 10911 10912 @media (min-width: 769px) { 10913 .snb-makers__grid { 10914 grid-template-columns: 1fr 1fr; 10915 gap: 60px; 10916 position: relative; 10917 } 10918 10919 10920 10921 .snb-makers__content { 10922 text-align: left; 10923 padding: 40px 0; 10924 10925 padding-right: 60px; 10926 10927 } 10928 10929 .snb-makers__subtitle { 10930 font-size: 14px; 10931 letter-spacing: 4px; 10932 margin-bottom: 16px; 10933 } 10934 10935 .snb-makers__heading { 10936 font-size: 48px; 10937 margin-bottom: 20px; 10938 } 10939 10940 .snb-makers__description { 10941 font-size: 16px; 10942 margin-left: 0; 10943 margin-right: 0; 10944 margin-bottom: 32px; 10945 max-width: 520px; 10946 } 10947 10948 .snb-makers__btn { 10949 width: auto; 10950 } 10951 10952 .snb-makers__decorative { 10953 display: block; 10954 position: absolute; 10955 10956 right: 20px; 10957 10958 top: 50%; 10959 transform: translateY(-50%); 10960 width: auto; 10961 height: 280px; 10962 pointer-events: none; 10963 } 10964 10965 .snb-makers__decorative img { 10966 display: block; 10967 height: 100%; 10968 width: auto; 10969 object-fit: contain; 10970 } 10971 } 10972 10973 @media (min-width: 1200px) { 10974 .snb-makers__heading { 10975 font-size: 54px; 10976 } 10977 10978 .snb-makers__decorative { 10979 10980 right: 40px; 10981 10982 height: 320px; 10983 } 10984 }</style><section class="snb-makers" aria-labelledby="snb-makers-heading-template--17749318303830__snb_makers_rFLVy4"> 10985 <div class="page-width"> 10986 <div class="snb-makers__grid"> 10987 <div class="snb-makers__image-wrap" aria-hidden="true"><img 10988 src="//bokksu.com/cdn/shop/files/our-makers.webp?v=1772818210&width=375" 10989 data-srcset="//bokksu.com/cdn/shop/files/our-makers.webp?v=1772818210&width=375 375w, 10990 //bokksu.com/cdn/shop/files/our-makers.webp?v=1772818210&width=550 550w, 10991 //bokksu.com/cdn/shop/files/our-makers.webp?v=1772818210&width=750 750w, 10992 //bokksu.com/cdn/shop/files/our-makers.webp?v=1772818210&width=1000 1000w, 10993 //bokksu.com/cdn/shop/files/our-makers.webp?v=1772818210&width=1200 1200w" 10994 data-src="//bokksu.com/cdn/shop/files/our-makers.webp?v=1772818210&width=750" 10995 sizes="(min-width: 769px) 50vw, 100vw" 10996 alt="" 10997 loading="lazy" 10998 width="1600" 10999 height="1067" 11000 ></div> 11001 11002 <div class="snb-makers__content"><p class="snb-makers__subtitle" aria-hidden="true">WHAT MAKES US DIFFERENT</p> 11003 <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 11004 href="#snack-box-subscription" 11005 class="btn btn-custom btn-orange-bg snb-makers__btn" 11006 aria-label="Subscribe now â choose your plan" 11007 > 11008 SUBSCRIBE NOW 11009 </a></div><div class="snb-makers__decorative" aria-hidden="true"> 11010 <img 11011 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_532aa0c3cbe24c309cf3ccbcedf56119.webp?v=1772818349&width=200" 11012 alt="" 11013 loading="lazy" 11014 width="60" 11015 height="902" 11016 >
11017 </div></div> 11018 </div> 11019</section> 11020
11021<script> 11022(function() { 11023 var sectionId = 'template--17749318303830__snb_makers_rFLVy4'; 11024 var sectionEl = document.getElementById('shopify-section-' + sectionId); 11025 11026 function loadImages() { 11027 if (!sectionEl) return; 11028 var imgs = sectionEl.querySelectorAll('img[data-src]'); 11029 imgs.forEach(function(img) { 11030 img.onload = function() { 11031 img.classList.add('is-loaded'); 11032 }; 11033 if (img.dataset.srcset) { 11034 img.srcset = img.dataset.srcset; 11035 delete img.dataset.srcset; 11036 } 11037 img.src = img.dataset.src; 11038 delete img.dataset.src; 11039 }); 11040 } 11041 11042 function lazyInit() { 11043 if (!sectionEl) { 11044 sectionEl = document.querySelector('.snb-makers'); 11045 } 11046 if (!sectionEl) return; 11047 11048 if ('IntersectionObserver' in window) { 11049 var observer = new IntersectionObserver(function(entries) { 11050 entries.forEach(function(entry) { 11051 if (entry.isIntersecting) { 11052 observer.unobserve(entry.target); 11053 loadImages(); 11054 } 11055 }); 11056 }, { rootMargin: '200px 0px' }); 11057 observer.observe(sectionEl); 11058 } else { 11059 loadImages(); 11060 } 11061 } 11062 11063 if (document.readyState === 'loading') { 11064 document.addEventListener('DOMContentLoaded', lazyInit); 11065 } else { 11066 lazyInit(); 11067 } 11068 11069 document.addEventListener('shopify:section:load', function(evt) { 11070 if (evt.detail.sectionId === sectionId) loadImages(); 11071 }); 11072})(); 11073</script>
11073 11074 11075 11076</div><div id="shopify-section-template--17749318303830__snb_featured_by_native_JMt4K8" class="shopify-section"> 11077<style data-shopify>#shopify-section-template--17749318303830__snb_featured_by_native_JMt4K8 { 11078 --snb-featured-bg: #5b1a1a; 11079 --snb-featured-heading: #ffffff; 11080 --snb-featured-pt: 32px; 11081 --snb-featured-pb: 28px; 11082 } 11083 11084 .snb-featured { 11085 background-color: var(--snb-featured-bg); 11086 padding-top: var(--snb-featured-pt); 11087 padding-bottom: var(--snb-featured-pb); 11088 } 11089 11090 .snb-featured__heading { 11091 font-family: 'Montserrat',sans-serif; 11092 font-size: 14px !important; 11093 font-weight: 400; 11094 letter-spacing: 4px; 11095 text-transform: uppercase; 11096 text-align: center; 11097 color: var(--snb-featured-heading); 11098 margin: 0 0 40px; 11099 } 11100 11101 .snb-featured__grid { 11102 display: flex; 11103 flex-wrap: nowrap; 11104 align-items: center; 11105 justify-content: flex-start; 11106 gap: 32px; 11107 max-width: 1500px; 11108 margin: 0 auto; 11109 overflow-x: auto; 11110 -webkit-overflow-scrolling: touch; 11111 scroll-snap-type: x proximity; 11112 scrollbar-width: none; 11113 -ms-overflow-style: none; 11114 padding-bottom: 4px; 11115 } 11116 11117 /* Center the row when it fits; scroll-from-start when it overflows. 11118 `safe center` keeps the first items reachable instead of clipping them. */ 11119 @media (min-width: 769px) { 11120 .snb-featured__grid { 11121 justify-content: safe center; 11122 } 11123 } 11124 11125 .snb-featured__grid:focus-visible { 11126 outline: 2px solid var(--snb-featured-heading); 11127 outline-offset: 4px; 11128 } 11129 11130 .snb-featured__grid::-webkit-scrollbar {
11131 display: none; 11132 } 11133 11134 .snb-featured__logo { 11135 display: flex; 11136 align-items: center; 11137 justify-content: center; 11138 flex: 0 0 auto; 11139 width: 140px; 11140 scroll-snap-align: center; 11141 } 11142 11143 .snb-featured__logo img { 11144 display: block; 11145 width: 100%; 11146 height: auto; 11147 object-fit: contain; 11148 } 11149 11150 .snb-featured__logo a { 11151 display: block; 11152 width: 100%; 11153 } 11154 11155 .snb-featured__logo a:focus-visible { 11156 outline: 2px solid currentColor; 11157 outline-offset: 3px; 11158 } 11159 11160 @media (min-width: 769px) { 11161 .snb-featured__heading { 11162 font-size: 14px; 11163 margin-bottom: 48px; 11164 } 11165 11166 .snb-featured__grid { 11167 gap: 48px; 11168 } 11169 11170 .snb-featured__logo { 11171 width: 170px; 11172 } 11173 }</style><section class="snb-featured" aria-labelledby="snb-featured-heading-template--17749318303830__snb_featured_by_native_JMt4K8"> 11174 <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 11175 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_cc41954196424ea7a0b755efa3ed1638.webp?v=1773073930&width=400" 11176 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_cc41954196424ea7a0b755efa3ed1638.webp?v=1773073930&width=200 200w, 11177 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_cc41954196424ea7a0b755efa3ed1638.webp?v=1773073930&width=400 400w" 11178 sizes="(min-width: 769px) 170px, 140px" 11179 alt="Bon Appétit" 11180 loading="lazy" 11181 width="1500" 11182 height="425" 11183 ></div><div class="snb-featured__logo" ><img 11184 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_53252330e59a4d3f8db09a7b287c4d6e.png?v=1773073930&width=400" 11185 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_53252330e59a4d3f8db09a7b287c4d6e.png?v=1773073930&width=200 200w, 11186 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_53252330e59a4d3f8db09a7b287c4d6e.png?v=1773073930&width=400 400w" 11187 sizes="(min-width: 769px) 170px, 140px" 11188 alt="Byrdie" 11189 loading="lazy" 11190 width="500" 11191 height="75" 11192 ></div><div class="snb-featured__logo" ><img 11193 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_dfd1685e1df94afbbfac8b86c0edf4b3.webp?v=1773073930&width=400" 11194 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_dfd1685e1df94afbbfac8b86c0edf4b3.webp?v=1773073930&width=200 200w, 11195 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_dfd1685e1df94afbbfac8b86c0edf4b3.webp?v=1773073930&width=400 400w" 11196 sizes="(min-width: 769px) 170px, 140px" 11197 alt="TechCrunch" 11198 loading="lazy" 11199 width="1500" 11200 height="425" 11201 ></div><div class="snb-featured__logo" ><img 11202 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_63c0288e3b9e46abb7b65d678083f20b.webp?v=1773073930&width=400" 11203 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_63c0288e3b9e46abb7b65d678083f20b.webp?v=1773073930&width=200 200w, 11204 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_63c0288e3b9e46abb7b65d678083f20b.webp?v=1773073930&width=400 400w" 11205 sizes="(min-width: 769px) 170px, 140px" 11206 alt="Fast Company" 11207 loading="lazy" 11208 width="1500" 11209 height="425" 11210 ></div></div></div> 11211</section> 11212 11213 11214</div><div id="shopify-section-template--17749318303830__snb_how_it_works_native_Yx6xra" class="shopify-section"> 11215<style data-shopify>#shopify-section-template--17749318303830__snb_how_it_works_native_Yx6xra { 11216 --snb-hiw-bg: #f0e6d3; 11217 --snb-hiw-heading: #1a1a1a; 11218 --snb-hiw-title: #1a1a1a; 11219 --snb-hiw-text: #4a4a4a; 11220 --snb-hiw-pt: 48px; 11221 --snb-hiw-pb: 48px; 11222 } 11223 11224 .snb-hiw { 11225 background-color: var(--snb-hiw-bg); 11226 padding-top: var(--snb-hiw-pt); 11227 padding-bottom: var(--snb-hiw-pb); 11228 } 11229 11230 .snb-hiw__heading { 11231 font-size: 48px; 11232 font-weight: 400; 11233 text-align: center; 11234 color: var(--snb-hiw-heading); 11235 margin: 0 0 32px; 11236 } 11237 11238 .snb-hiw__grid { 11239 display: grid; 11240 grid-template-columns: 1fr; 11241 gap: 40px; 11242 max-width: 1200px; 11243 margin: 0 auto; 11244 list-style: none; 11245 padding: 0; 11246 } 11247 11248 .snb-hiw__step { 11249 text-align: center; 11250 } 11251 11252 .snb-hiw__image { 11253 position: relative; 11254 width: 100%; 11255 overflow: hidden; 11256 margin-bottom: 20px; 11257 } 11258 11259 .snb-hiw__image img { 11260 display: block; 11261 width: 100%; 11262 height: auto; 11263 object-fit: cover; 11264 } 11265 11266 .snb-hiw__image img { 11267 opacity: 0; 11268 transition: opacity 0.4s ease; 11269 } 11270 11271 .snb-hiw__image img.is-loaded { 11272 opacity: 1; 11273 } 11274 11275 .snb-hiw__title { 11276 font-size:28px; 11277 font-weight: 400; 11278 letter-spacing: 2px; 11279 text-transform: uppercase; 11280 color: var(--snb-hiw-title); 11281 margin: 0 0 12px; 11282 } 11283 11284 .snb-hiw__description { 11285 font-size: 14px; 11286 font-weight: 400; 11287 line-height: 1.6; 11288 color: var(--snb-hiw-text); 11289 margin: 0 auto; 11290 max-width: 360px; 11291 } 11292 11293 @media (min-width: 769px) { 11294 .snb-hiw__heading { 11295 font-size: 36px; 11296 margin-bottom: 40px; 11297 } 11298 11299 .snb-hiw__grid { 11300 grid-template-columns: repeat(3, 1fr); 11301 gap: 32px; 11302 } 11303 11304 .snb-hiw__title { 11305 font-size: 18px; 11306 margin-bottom: 16px; 11307 } 11308 11309 .snb-hiw__description { 11310 font-size: 14px; 11311 max-width: none; 11312 } 11313 } 11314 11315 .snb-hiw__step:focus-visible { 11316 outline: 2px solid currentColor; 11317 outline-offset: 3px; 11318 }</style><section class="snb-hiw" aria-labelledby="snb-hiw-heading-template--17749318303830__snb_how_it_works_native_Yx6xra"> 11319 <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"> 11320 <img 11321 src="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_003_1200x1200_b4714a3e-defc-4b77-99a4-cce78b278ed2.jpg?v=1780894490&width=400" 11322 data-src="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_003_1200x1200_b4714a3e-defc-4b77-99a4-cce78b278ed2.jpg?v=1780894490&width=800" 11323 data-srcset="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_003_1200x1200_b4714a3e-defc-4b77-99a4-cce78b278ed2.jpg?v=1780894490&width=400 400w, 11324 //bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_003_1200x1200_b4714a3e-defc-4b77-99a4-cce78b278ed2.jpg?v=1780894490&width=600 600w, 11325 //bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_003_1200x1200_b4714a3e-defc-4b77-99a4-cce78b278ed2.jpg?v=1780894490&width=800 800w" 11326 sizes="(min-width: 769px) 33vw, 100vw" 11327 alt="" 11328 loading="lazy" 11329 width="1200" 11330 height="1200" 11331 > 11332 </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"> 11333 <img 11334 src="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_002_1200x1200_1.jpg?v=1780894290&width=400" 11335 data-src="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_002_1200x1200_1.jpg?v=1780894290&width=800" 11336 data-srcset="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_002_1200x1200_1.jpg?v=1780894290&width=400 400w, 11337 //bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_002_1200x1200_1.jpg?v=1780894290&width=600 600w, 11338 //bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_002_1200x1200_1.jpg?v=1780894290&width=800 800w" 11339 sizes="(min-width: 769px) 33vw, 100vw" 11340 alt="" 11341 loading="lazy" 11342 width="1200" 11343 height="1200" 11344 > 11345 </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"> 11346 <img 11347 src="//bokksu.com/cdn/shop/files/Bokksu_SnackBox_Box_Hero_012_Square_29da187b-7869-43b6-86af-0918585d9737.jpg?v=1780550901&width=400" 11348 data-src="//bokksu.com/cdn/shop/files/Bokksu_SnackBox_Box_Hero_012_Square_29da187b-7869-43b6-86af-0918585d9737.jpg?v=1780550901&width=800" 11349 data-srcset="//bokksu.com/cdn/shop/files/Bokksu_SnackBox_Box_Hero_012_Square_29da187b-7869-43b6-86af-0918585d9737.jpg?v=1780550901&width=400 400w, 11350 //bokksu.com/cdn/shop/files/Bokksu_SnackBox_Box_Hero_012_Square_29da187b-7869-43b6-86af-0918585d9737.jpg?v=1780550901&width=600 600w, 11351 //bokksu.com/cdn/shop/files/Bokksu_SnackBox_Box_Hero_012_Square_29da187b-7869-43b6-86af-0918585d9737.jpg?v=1780550901&width=800 800w" 11352 sizes="(min-width: 769px) 33vw, 100vw" 11353 alt="" 11354 loading="lazy" 11355 width="1200" 11356 height="1200" 11357 > 11358 </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> 11359</section> 11360
11361<script> 11362(function() { 11363 var sectionId = 'template--17749318303830__snb_how_it_works_native_Yx6xra'; 11364 var sectionEl = document.getElementById('shopify-section-' + sectionId); 11365 11366 function loadImages() { 11367 if (!sectionEl) return; 11368 var imgs = sectionEl.querySelectorAll('img[data-src]'); 11369 imgs.forEach(function(img) { 11370 img.onload = function() { 11371 img.classList.add('is-loaded'); 11372 }; 11373 if (img.dataset.srcset) { 11374 img.srcset = img.dataset.srcset; 11375 delete img.dataset.srcset; 11376 } 11377 img.src = img.dataset.src; 11378 delete img.dataset.src; 11379 }); 11380 } 11381 11382 function lazyInit() { 11383 if (!sectionEl) { 11384 sectionEl = document.querySelector('.snb-hiw'); 11385 } 11386 if (!sectionEl) return; 11387 11388 if ('IntersectionObserver' in window) { 11389 var observer = new IntersectionObserver(function(entries) { 11390 entries.forEach(function(entry) { 11391 if (entry.isIntersecting) { 11392 observer.unobserve(entry.target); 11393 loadImages(); 11394 } 11395 }); 11396 }, { rootMargin: '200px 0px' }); 11397 observer.observe(sectionEl); 11398 } else { 11399 loadImages(); 11400 } 11401 } 11402 11403 if (document.readyState === 'loading') { 11404 document.addEventListener('DOMContentLoaded', lazyInit); 11405 } else { 11406 lazyInit(); 11407 } 11408 11409 document.addEventListener('shopify:section:load', function(evt) { 11410 if (evt.detail.sectionId === sectionId) loadImages(); 11411 }); 11412})(); 11413</script>
11413 11414 11415 11416</div><div id="shopify-section-template--17749318303830__snb_first_box_native_iGia7U" class="shopify-section"> 11417<style data-shopify>#shopify-section-template--17749318303830__snb_first_box_native_iGia7U { 11418 --snb-fb-bg: #faf5ee; 11419 --snb-fb-heading: #1a1a1a; 11420 --snb-fb-subheading: #000000; 11421 --snb-fb-title: #b73d09; 11422 --snb-fb-text: #4a4a4a; 11423 --snb-fb-btn-bg: #b73d09; 11424 --snb-fb-btn-text: #ffffff; 11425 --snb-fb-pt: 48px; 11426 --snb-fb-pb: 48px; 11427 } 11428 11429 .snb-fb { 11430 background-color: var(--snb-fb-bg); 11431 padding-top: var(--snb-fb-pt); 11432 padding-bottom: var(--snb-fb-pb); 11433 } 11434 11435 .snb-fb__layout { 11436 display: grid; 11437 grid-template-columns: 1fr; 11438 gap: 32px; 11439 align-items: center; 11440 margin: 0 auto; 11441 } 11442 11443 /* Carousel */ 11444 .snb-fb__carousel-wrap { 11445 position: relative; 11446 width: 100%; 11447 padding: 0 36px; 11448 box-sizing: border-box; 11449 } 11450 11451 .snb-fb__carousel { 11452 width: 100%; 11453 } 11454 11455 .snb-fb__carousel:not(.flickity-enabled) { 11456 position: relative; 11457 } 11458 11459 .snb-fb__carousel:not(.flickity-enabled) .snb-fb__slide { 11460 display: none; 11461 } 11462 11463 .snb-fb__carousel:not(.flickity-enabled) .snb-fb__slide:first-child { 11464 display: block; 11465 } 11466 11467 .snb-fb__slide { 11468 width: 100%; 11469 } 11470 11471 .snb-fb__slide img { 11472 display: block; 11473 width: 100%; 11474 height: auto; 11475 object-fit: cover; 11476 } 11477 11478 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-button { 11479 background: transparent; 11480 width: 40px; 11481 height: 40px; 11482 color: #1A1A1A; 11483 } 11484 11485 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-button:hover { 11486 background: transparent; 11487 opacity: 0.7; 11488 } 11489 11490 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-previous { 11491 left: -25px; 11492 } 11493 11494 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-next { 11495 right: -32px; 11496 } 11497 11498 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-button svg { 11499 width: 20px; 11500 height: 20px; 11501 } 11502 11503 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-page-dots { 11504 position: relative; 11505 bottom: auto; 11506 margin-top: 16px; 11507 } 11508 11509 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-page-dots .dot { 11510 width: 8px; 11511 height: 8px; 11512 background: rgba(0, 0, 0, 0.2); 11513 } 11514 11515 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-page-dots .dot.is-selected { 11516 background: #1A1A1A; 11517 } 11518 11519 /* Content */ 11520 .snb-fb__content { 11521 text-align: center; 11522 padding: 0 16px; 11523 } 11524 11525 .snb-fb__subheading { 11526 font-family: 'Montserrat', sans-serif; 11527 font-size: 14px; 11528 font-weight: 500; 11529 letter-spacing: 3px; 11530 text-transform: uppercase; 11531 line-height: 18px; 11532 color: var(--snb-fb-subheading); 11533 margin: 0 0 8px; 11534 } 11535 11536 .snb-fb__heading { 11537 font-family: 'Orpheus Pro', sans-serif; 11538 font-size: 32px; 11539 font-weight: 400; 11540 line-height: 36px; 11541 color: var(--snb-fb-heading); 11542 margin: 0 0 28px; 11543 } 11544 11545 /* Features grid */ 11546 .snb-fb__features { 11547 display: grid; 11548 grid-template-columns: repeat(2, 1fr); 11549 gap: 24px 20px; 11550 margin-bottom: 32px; 11551 margin-left: 0px; 11552 list-style: none; 11553 padding: 0; 11554 } 11555 11556 .snb-fb__feature { 11557 display: flex; 11558 align-items: flex-start; 11559 gap: 10px; 11560 text-align: left; 11561 } 11562 11563 .snb-fb__feature-icon { 11564 flex-shrink: 0; 11565 width: 28px; 11566 height: 28px; 11567 } 11568 11569 .snb-fb__feature-icon img { 11570 display: block; 11571 width: 100%; 11572 height: 100%; 11573 object-fit: contain; 11574 } 11575 11576 .snb-fb__feature-icon svg { 11577 display: block; 11578 width: 100%; 11579 height: 100%; 11580 } 11581 11582 .snb-fb__feature-body { 11583 flex: 1; 11584 min-width: 0; 11585 } 11586 11587 .snb-fb__feature-title { 11588 font-family: 'Montserrat', sans-serif; 11589 font-size: 13px !important; 11590 font-weight: 600; 11591 letter-spacing: 1.5px; 11592 text-transform: uppercase; 11593 line-height: 18px; 11594 color: var(--snb-fb-title); 11595 margin: 0 0 4px; 11596 } 11597 11598 .snb-fb__feature-desc { 11599 font-family: 'Lato', sans-serif; 11600 font-size: 16px; 11601 font-weight: 400; 11602 line-height: 24px; 11603 color: var(--snb-fb-text); 11604 margin: 0; 11605 } 11606 11607 /* CTA */ 11608 .snb-fb__btn { 11609 width: 100%; 11610 text-align: center; 11611 box-sizing: border-box; 11612 } 11613 11614 @media (min-width: 769px) { 11615 .snb-fb__layout { 11616 grid-template-columns: 2fr 3fr; 11617 gap: 48px; 11618 } 11619 11620 .snb-fb__carousel-wrap { 11621 padding: 0 48px; 11622 } 11623 11624 .snb-fb__content { 11625 text-align: left; 11626 padding: 0; 11627 } 11628 11629 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-button.previous { 11630 left: -48px; 11631 } 11632 11633 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-button.next { 11634 right: -48px; 11635 } 11636 11637 .snb-fb__heading { 11638 font-size: 44px; 11639 line-height: 50px; 11640 margin-bottom: 32px; 11641 } 11642 11643 .snb-fb__features { 11644 gap: 20px 32px; 11645 margin-bottom: 36px; 11646 } 11647 11648 .snb-fb__feature-icon { 11649 width: 32px; 11650 height: 32px; 11651 } 11652 } 11653 11654 .snb-fb__btn:focus-visible { 11655 outline: 2px solid currentColor; 11656 outline-offset: 3px; 11657 } 11658 11659 #shopify-section-template--17749318303830__snb_first_box_native_iGia7U .flickity-button:focus-visible { 11660 outline: 2px solid #1A1A1A; 11661 outline-offset: 2px; 11662 }</style><section class="snb-fb" aria-labelledby="snb-fb-heading-template--17749318303830__snb_first_box_native_iGia7U"> 11663 <div class="page-width"> 11664 <div class="snb-fb__layout"><div class="snb-fb__carousel-wrap"><div 11665 class="snb-fb__carousel" 11666 id="snb-fb-carousel-template--17749318303830__snb_first_box_native_iGia7U" 11667 data-section-id="template--17749318303830__snb_first_box_native_iGia7U" 11668 role="region" 11669 aria-roledescription="carousel" 11670 aria-label="Product images" 11671 ><div 11672 class="snb-fb__slide" 11673 role="group" 11674 aria-roledescription="slide" 11675 aria-label="Image 1 of 3" 11676 11677 ><img 11678 src="//bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square_46adf27f-3374-4ec8-ab80-da4a31009a43.jpg?v=1777597091&width=900" 11679 srcset="//bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square_46adf27f-3374-4ec8-ab80-da4a31009a43.jpg?v=1777597091&width=450 450w, 11680 //bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square_46adf27f-3374-4ec8-ab80-da4a31009a43.jpg?v=1777597091&width=600 600w, 11681 //bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square_46adf27f-3374-4ec8-ab80-da4a31009a43.jpg?v=1777597091&width=900 900w" 11682 sizes="(min-width: 769px) 50vw, 100vw" 11683 alt="Product image" 11684 loading="lazy" 11685 width="1200" 11686 height="1200" 11687 ></div><div 11688 class="snb-fb__slide" 11689 role="group" 11690 aria-roledescription="slide" 11691 aria-label="Image 2 of 3" 11692 11693 ><img 11694 src="//bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_2_HeroBanner_1200x1200_0c4e23f1-ad8b-4f96-b95f-0c408a416c1d.jpg?v=1777597122&width=900" 11695 srcset="//bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_2_HeroBanner_1200x1200_0c4e23f1-ad8b-4f96-b95f-0c408a416c1d.jpg?v=1777597122&width=450 450w, 11696 //bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_2_HeroBanner_1200x1200_0c4e23f1-ad8b-4f96-b95f-0c408a416c1d.jpg?v=1777597122&width=600 600w, 11697 //bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_2_HeroBanner_1200x1200_0c4e23f1-ad8b-4f96-b95f-0c408a416c1d.jpg?v=1777597122&width=900 900w" 11698 sizes="(min-width: 769px) 50vw, 100vw" 11699 alt="Product image" 11700 loading="lazy" 11701 width="1200" 11702 height="1200" 11703 ></div><div 11704 class="snb-fb__slide" 11705 role="group" 11706 aria-roledescription="slide" 11707 aria-label="Image 3 of 3" 11708 11709 ><img 11710 src="//bokksu.com/cdn/shop/files/SNB2505_SOJ_GuideInHand_Mobile_cropped.jpg?v=1777597395&width=900" 11711 srcset="//bokksu.com/cdn/shop/files/SNB2505_SOJ_GuideInHand_Mobile_cropped.jpg?v=1777597395&width=450 450w, 11712 //bokksu.com/cdn/shop/files/SNB2505_SOJ_GuideInHand_Mobile_cropped.jpg?v=1777597395&width=600 600w, 11713 //bokksu.com/cdn/shop/files/SNB2505_SOJ_GuideInHand_Mobile_cropped.jpg?v=1777597395&width=900 900w" 11714 sizes="(min-width: 769px) 50vw, 100vw" 11715 alt="Product image" 11716 loading="lazy" 11717 width="1080" 11718 height="1080" 11719 ></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"> 11720 <img 11721 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e1542a7512de48219082c79e9f6a71ff.png?v=1773075940&width=64" 11722 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e1542a7512de48219082c79e9f6a71ff.png?v=1773075940&width=64 1x, 11723 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e1542a7512de48219082c79e9f6a71ff.png?v=1773075940&width=128 2x" 11724 alt="" 11725 loading="lazy" 11726 width="32" 11727 height="32" 11728 > 11729 </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> 11730 </li><li class="snb-fb__feature" ><div class="snb-fb__feature-icon" aria-hidden="true"> 11731 <img 11732 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_9e18894930904f09aced5f2e537d2dc1.png?v=1773075939&width=64" 11733 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_9e18894930904f09aced5f2e537d2dc1.png?v=1773075939&width=64 1x, 11734 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_9e18894930904f09aced5f2e537d2dc1.png?v=1773075939&width=128 2x" 11735 alt="" 11736 loading="lazy" 11737 width="32" 11738 height="32" 11739 > 11740 </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> 11741 </li><li class="snb-fb__feature" ><div class="snb-fb__feature-icon" aria-hidden="true"> 11742 <img 11743 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_458ad5c11169402888e82d8013c7321b.webp?v=1773075940&width=64" 11744 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_458ad5c11169402888e82d8013c7321b.webp?v=1773075940&width=64 1x, 11745 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_458ad5c11169402888e82d8013c7321b.webp?v=1773075940&width=128 2x" 11746 alt="" 11747 loading="lazy" 11748 width="32" 11749 height="32" 11750 > 11751 </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> 11752 </li><li class="snb-fb__feature" ><div class="snb-fb__feature-icon" aria-hidden="true"> 11753 <img 11754 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_2259f1e9bf674b948df9dd4471778025.webp?v=1773075940&width=64" 11755 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_2259f1e9bf674b948df9dd4471778025.webp?v=1773075940&width=64 1x, 11756 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_2259f1e9bf674b948df9dd4471778025.webp?v=1773075940&width=128 2x" 11757 alt="" 11758 loading="lazy" 11759 width="32" 11760 height="32" 11761 > 11762 </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> 11763 </li><li class="snb-fb__feature" ><div class="snb-fb__feature-icon" aria-hidden="true"> 11764 <img 11765 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e871adf5b3244294b8d301f3b670a74d.webp?v=1773075939&width=64" 11766 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e871adf5b3244294b8d301f3b670a74d.webp?v=1773075939&width=64 1x, 11767 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e871adf5b3244294b8d301f3b670a74d.webp?v=1773075939&width=128 2x" 11768 alt="" 11769 loading="lazy" 11770 width="32" 11771 height="32" 11772 > 11773 </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> 11774 </li><li class="snb-fb__feature" ><div class="snb-fb__feature-icon" aria-hidden="true"> 11775 <img 11776 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_4cdfb0ebd4894b3e933e63cf122dc91c.webp?v=1773075940&width=64" 11777 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_4cdfb0ebd4894b3e933e63cf122dc91c.webp?v=1773075940&width=64 1x, 11778 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_4cdfb0ebd4894b3e933e63cf122dc91c.webp?v=1773075940&width=128 2x" 11779 alt="" 11780 loading="lazy" 11781 width="32" 11782 height="32" 11783 > 11784 </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> 11785 </li></ul><a 11786 class="btn btn-custom btn-orange-bg snb-fb__btn" 11787 href="#snack-box-subscription" 11788 aria-label="Subscribe now â view subscription plans" 11789 > 11790 SUBSCRIBE NOW 11791 </a></div> 11792 </div> 11793 </div> 11794</section> 11795
11796<script> 11797(function() { 11798 var sectionId = 'template--17749318303830__snb_first_box_native_iGia7U'; 11799 var sectionEl = document.getElementById('shopify-section-' + sectionId); 11800 11801 function initCarousel() { 11802 var carousel = document.getElementById('snb-fb-carousel-' + sectionId); 11803 if (!carousel || carousel.dataset.flickityInit) return; 11804 11805 var slides = carousel.querySelectorAll('.snb-fb__slide'); 11806 if (slides.length <= 1) return; 11807 11808 if (typeof theme !== 'undefined' && theme.Slideshow) { 11809 new theme.Slideshow(carousel, { 11810 prevNextButtons: true, 11811 pageDots: true, 11812 wrapAround: true, 11813 adaptiveHeight: true, 11814 autoPlay: false 11815 }); 11816 carousel.dataset.flickityInit = 'true'; 11817 } else if (typeof Flickity !== 'undefined') { 11818 new Flickity(carousel, { 11819 prevNextButtons: true, 11820 pageDots: true, 11821 wrapAround: true, 11822 adaptiveHeight: true, 11823 autoPlay: false 11824 }); 11825 carousel.dataset.flickityInit = 'true'; 11826 } 11827 11828 // a11y: APG pattern â hide inactive slides from AT so VoiceOver swipe reads only the current one. 11829 function updateActiveSlide() { 11830 var flk = (typeof Flickity !== 'undefined') ? Flickity.data(carousel) : null; 11831 if (!flk) return; 11832 var active = flk.selectedElements || (flk.selectedElement ? [flk.selectedElement] : []); 11833 var cells = carousel.querySelectorAll('.snb-fb__slide'); 11834 for (var i = 0; i < cells.length; i++) { 11835 var isActive = false; 11836 for (var k = 0; k < active.length; k++) { 11837 if (active[k] === cells[i]) { isActive = true; break; } 11838 } 11839 var target = isActive ? 'false' : 'true'; 11840 if (cells[i].getAttribute('aria-hidden') !== target) { 11841 cells[i].setAttribute('aria-hidden', target); 11842 } 11843 } 11844 } 11845 setTimeout(function () { 11846 updateActiveSlide(); 11847 var flk = (typeof Flickity !== 'undefined') ? Flickity.data(carousel) : null; 11848 if (flk && !carousel.dataset.a11ySelectBound) { 11849 carousel.dataset.a11ySelectBound = '1'; 11850 flk.on('select', updateActiveSlide); 11851 } 11852 }, 200); 11853 11854 // a11y: label prev/next buttons and dots. Normalize aria-current on dots. 11855 // Loop-safe: observer watches ONLY aria-current, and only sets when value !== target. 11856 setTimeout(function () { 11857 var prev = carousel.querySelector('.flickity-prev-next-button.flickity-previous, .flickity-prev-next-button.previous, .flickity-button.previous'); 11858 var next = carousel.querySelector('.flickity-prev-next-button.flickity-next, .flickity-prev-next-button.next, .flickity-button.next'); 11859 if (prev) prev.setAttribute('aria-label', 'Previous image'); 11860 if (next) next.setAttribute('aria-label', 'Next image'); 11861 11862 var dotsContainer = carousel.querySelector('.flickity-page-dots'); 11863 if (!dotsContainer) return; 11864 11865 function normalizeDots() { 11866 var ds = dotsContainer.querySelectorAll('.dot'); 11867 for (var i = 0; i < ds.length; i++) { 11868 var label = 'Go to image ' + (i + 1); 11869 if (ds[i].getAttribute('aria-label') !== label) { 11870 ds[i].setAttribute('aria-label', label); 11871 } 11872 if (ds[i].getAttribute('aria-current') === 'step') { 11873 ds[i].setAttribute('aria-current', 'true'); 11874 } 11875 } 11876 } 11877 normalizeDots(); 11878 11879 if (dotsContainer.dataset.a11yObserver) return; 11880 dotsContainer.dataset.a11yObserver = '1'; 11881 11882 // rAF-batched + attributeFilter scoped to aria-current only â no loop. 11883 var scheduled = false; 11884 var obs = new MutationObserver(function () { 11885 if (scheduled) return; 11886 scheduled = true; 11887 requestAnimationFrame(function () { 11888 scheduled = false; 11889 normalizeDots(); 11890 }); 11891 }); 11892 obs.observe(dotsContainer, { attributes: true, subtree: true, attributeFilter: ['aria-current'] }); 11893 }, 200); 11894 } 11895 11896 function lazyInit() { 11897 if (!sectionEl) { 11898 sectionEl = document.querySelector('.snb-fb'); 11899 } 11900 if (!sectionEl) return; 11901 11902 if ('IntersectionObserver' in window) { 11903 var observer = new IntersectionObserver(function(entries) { 11904 entries.forEach(function(entry) { 11905 if (entry.isIntersecting) { 11906 observer.unobserve(entry.target); 11907 initCarousel(); 11908 } 11909 }); 11910 }, { rootMargin: '200px 0px' }); 11911 observer.observe(sectionEl); 11912 } else { 11913 initCarousel(); 11914 } 11915 } 11916 11917 if (document.readyState === 'loading') { 11918 document.addEventListener('DOMContentLoaded', lazyInit); 11919 } else { 11920 lazyInit(); 11921 } 11922 11923 document.addEventListener('shopify:section:load', function(evt) { 11924 if (evt.detail.sectionId === sectionId) initCarousel(); 11925 }); 11926})(); 11927</script>
11927 11928 11929 11930</div><div id="shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn" class="shopify-section index-section"> 11931<style data-shopify>#shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn { 11932 --snb-test-bg: #ffffff; 11933 --snb-test-quote: #3a3a3a; 11934 --snb-test-accent: #d94f00; 11935 --snb-test-name: #d94f00; 11936 --snb-test-star: #d94f00; 11937 --snb-test-pt: 40px; 11938 --snb-test-pb: 48px; 11939 } 11940 11941 .snb-test { 11942 background-color: var(--snb-test-bg); 11943 padding-top: var(--snb-test-pt); 11944 padding-bottom: var(--snb-test-pb); 11945 overflow: hidden; 11946 11947 } 11948 11949 .snb-test__layout { 11950 display: grid; 11951 grid-template-columns: 1fr; 11952 gap: 32px; 11953 align-items: center; 11954 max-width: 1200px; 11955 margin: 0 auto; 11956 } 11957 11958 /* Quote area */ 11959 .snb-test__quote-area { 11960 text-align: center; 11961 padding: 0 16px; 11962 } 11963 11964 .snb-test__quote-icon { 11965 margin-bottom: 16px; 11966 } 11967 11968 .snb-test__quote-icon img { 11969 display: block; 11970 margin: 0 auto; 11971 width: 40px; 11972 height: auto; 11973 } 11974 11975 .snb-test__quote-text { 11976 font-family: 'Orpheus Pro', sans-serif; 11977 font-size: 24px; 11978 font-weight: 200; 11979 line-height: 28px; 11980 color: var(--snb-test-quote); 11981 margin: 0 0 20px; 11982 margin-left: auto; 11983 margin-right: auto; 11984 } 11985 11986 .snb-test__stars { 11987 display: flex; 11988 justify-content: center; 11989 margin-bottom: 16px; 11990 } 11991 11992 .snb-test__stars img { 11993 display: block; 11994 height: 24px; 11995 width: auto; 11996 } 11997 11998 .snb-test__author { 11999 font-family: 'Montserrat', sans-serif; 12000 font-size: 16px; 12001 font-weight: 600; 12002 letter-spacing: 2px; 12003 text-transform: uppercase; 12004 color: var(--snb-test-name); 12005 margin: 0; 12006 } 12007 12008 /* Testimonial carousel (multiple testimonials) */ 12009 .snb-test__quote-carousel { 12010 overflow: hidden; 12011 } 12012 12013 .snb-test__quote-carousel:not(.flickity-enabled) { 12014 position: relative; 12015 } 12016 12017 .snb-test__quote-carousel:not(.flickity-enabled) .snb-test__testimonial-slide { 12018 display: none; 12019 } 12020 12021 .snb-test__quote-carousel:not(.flickity-enabled) .snb-test__testimonial-slide:first-child { 12022 display: block; 12023 } 12024 12025 .snb-test__testimonial-slide { 12026 width: 100%; 12027 text-align: center; 12028 } 12029 12030 /* Photo carousel */ 12031 .snb-test__photos-wrap { 12032 position: relative; 12033 width: 100%; 12034 padding: 0 25px; 12035 box-sizing: border-box; 12036 } 12037 12038 .snb-test__photos { 12039 width: 100%; 12040 /* overflow: hidden; */ 12041 } 12042 12043 .snb-test__photos:not(.flickity-enabled) { 12044 display: flex; 12045 } 12046 12047 .snb-test__photo-slide { 12048 padding: 0 4px; 12049 box-sizing: border-box; 12050 flex-shrink: 0; 12051 width: 100%; 12052 } 12053 12054 .snb-test__photo-slide img { 12055 display: block; 12056 width: 100%; 12057 height: auto; 12058 object-fit: cover; 12059 } 12060 12061 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-button { 12062 background: transparent; 12063 width: 40px; 12064 height: 40px; 12065 color: #1A1A1A; 12066 } 12067 12068 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-button:hover { 12069 background: transparent; 12070 opacity: 0.7; 12071 } 12072 12073 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-previous { 12074 left: -21px; 12075 } 12076 12077 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-next { 12078 right: -30px; 12079 } 12080 12081 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-button svg { 12082 width: 20px; 12083 height: 20px; 12084 } 12085 12086 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-page-dots { 12087 display: none; 12088 } 12089 12090 @media (min-width: 769px) { 12091 .snb-test__layout { 12092 gap: 36px; 12093 } 12094 12095 .snb-test__quote-area { 12096 padding: 0; 12097 } 12098 12099 .snb-test__quote-icon img { 12100 width: 56px; 12101 } 12102 12103 .snb-test__stars img { 12104 height: 28px; 12105 } 12106 12107 .snb-test__quote-text { 12108 font-size: 48px; 12109 line-height: 50px; 12110 } 12111 12112 .snb-test__photos-wrap { 12113 padding: 0 44px; 12114 } 12115 12116 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-prev-next-button.previous { 12117 left: -44px; 12118 } 12119 12120 #shopify-section-template--17749318303830__snb_testimonial_native_G8GWGn .snb-test__photos-wrap .flickity-prev-next-button.next { 12121 right: -44px; 12122 } 12123 12124 .snb-test__photos:not(.flickity-enabled) .snb-test__photo-slide { 12125 width: 20%; 12126 } 12127 12128 .snb-test__photo-slide { 12129 width: 20%; 12130 padding: 0 10px; 12131 } 12132 } 12133
12134 .snb-test__pause-btn { 12135 display: inline-flex; 12136 align-items: center; 12137 justify-content: center; 12138 background: transparent; 12139 border: 1px solid var(--snb-test-name); 12140 border-radius: 50%; 12141 width: 32px; 12142 height: 32px; 12143 cursor: pointer; 12144 color: var(--snb-test-name); 12145 margin-top: 16px; 12146 padding: 0; 12147 } 12148 12149 .snb-test__pause-btn:focus-visible { 12150 outline: 2px solid currentColor; 12151 outline-offset: 3px; 12152 } 12153 12154 .snb-test__quote-text { 12155 margin-block-start: 0; 12156 margin-block-end: 0; 12157 margin-inline-start: 0; 12158 margin-inline-end: 0; 12159 padding: 0; 12160 } 12161 12162 .snb-test__author { 12163 font-style: normal; 12164 }</style><section class="snb-test" aria-label="Customer testimonials"> 12165 <div class="page-width"> 12166 <div class="snb-test__layout"><div class="snb-test__quote-area"><div ><div class="snb-test__quote-icon" aria-hidden="true"> 12167 <img src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_f006b88d6f6d46258077f4c9384b1a04.webp?v=1773121456&width=112" alt="" width="56" height="56" loading="lazy"> 12168 </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"> 12169 <img src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_ff4f6deb95cd4eb290a18a2f3da821ae.webp?v=1773121457&width=300" alt="" loading="lazy" aria-hidden="true"> 12170 </div><cite class="snb-test__author">– Lucy Z</cite></div></div><div class="snb-test__photos-wrap"> 12171 <div 12172 class="snb-test__photos" 12173 id="snb-test-photos-template--17749318303830__snb_testimonial_native_G8GWGn" 12174 data-section-id="template--17749318303830__snb_testimonial_native_G8GWGn" 12175 role="region" 12176 aria-roledescription="carousel" 12177 aria-label="Customer photos" 12178 ><div 12179 class="snb-test__photo-slide" 12180 role="group" 12181 aria-roledescription="slide" 12182 aria-label="Photo 1 of 6" 12183 12184 ><img 12185 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_ffdf56a405d940a480a53eee6941e07c.webp?v=1773077929&width=600" 12186 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_ffdf56a405d940a480a53eee6941e07c.webp?v=1773077929&width=300 300w, 12187 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_ffdf56a405d940a480a53eee6941e07c.webp?v=1773077929&width=450 450w, 12188 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_ffdf56a405d940a480a53eee6941e07c.webp?v=1773077929&width=600 600w" 12189 sizes="(min-width: 769px) 200px, 100vw" 12190 alt="Customer photo" 12191 loading="lazy" 12192 width="450" 12193 height="450" 12194 ></div><div 12195 class="snb-test__photo-slide" 12196 role="group" 12197 aria-roledescription="slide" 12198 aria-label="Photo 2 of 6" 12199 12200 ><img 12201 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_950a18fde08540418bc01b2ebdeb4d12.webp?v=1773077974&width=600" 12202 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_950a18fde08540418bc01b2ebdeb4d12.webp?v=1773077974&width=300 300w, 12203 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_950a18fde08540418bc01b2ebdeb4d12.webp?v=1773077974&width=450 450w, 12204 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_950a18fde08540418bc01b2ebdeb4d12.webp?v=1773077974&width=600 600w" 12205 sizes="(min-width: 769px) 200px, 100vw" 12206 alt="Customer photo" 12207 loading="lazy" 12208 width="450" 12209 height="450" 12210 ></div><div 12211 class="snb-test__photo-slide" 12212 role="group" 12213 aria-roledescription="slide" 12214 aria-label="Photo 3 of 6" 12215 12216 ><img 12217 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_71c99de7222b4ffaa5e7357cc4085931.webp?v=1773078021&width=600" 12218 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_71c99de7222b4ffaa5e7357cc4085931.webp?v=1773078021&width=300 300w, 12219 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_71c99de7222b4ffaa5e7357cc4085931.webp?v=1773078021&width=450 450w, 12220 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_71c99de7222b4ffaa5e7357cc4085931.webp?v=1773078021&width=600 600w" 12221 sizes="(min-width: 769px) 200px, 100vw" 12222 alt="Customer photo" 12223 loading="lazy" 12224 width="1170" 12225 height="1170" 12226 ></div><div 12227 class="snb-test__photo-slide" 12228 role="group" 12229 aria-roledescription="slide" 12230 aria-label="Photo 4 of 6" 12231 12232 ><img 12233 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_a298e43d9bd74a31be815b37a727db0d.webp?v=1773078071&width=600" 12234 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_a298e43d9bd74a31be815b37a727db0d.webp?v=1773078071&width=300 300w, 12235 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_a298e43d9bd74a31be815b37a727db0d.webp?v=1773078071&width=450 450w, 12236 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_a298e43d9bd74a31be815b37a727db0d.webp?v=1773078071&width=600 600w" 12237 sizes="(min-width: 769px) 200px, 100vw" 12238 alt="Customer photo" 12239 loading="lazy" 12240 width="1170" 12241 height="1170" 12242 ></div><div 12243 class="snb-test__photo-slide" 12244 role="group" 12245 aria-roledescription="slide" 12246 aria-label="Photo 5 of 6" 12247 12248 ><img 12249 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_9c37d63dea5e4016bee2c8462c79f2bc.webp?v=1773078122&width=600" 12250 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_9c37d63dea5e4016bee2c8462c79f2bc.webp?v=1773078122&width=300 300w, 12251 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_9c37d63dea5e4016bee2c8462c79f2bc.webp?v=1773078122&width=450 450w, 12252 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_9c37d63dea5e4016bee2c8462c79f2bc.webp?v=1773078122&width=600 600w" 12253 sizes="(min-width: 769px) 200px, 100vw" 12254 alt="Customer photo" 12255 loading="lazy" 12256 width="1170" 12257 height="1170" 12258 ></div><div 12259 class="snb-test__photo-slide" 12260 role="group" 12261 aria-roledescription="slide" 12262 aria-label="Photo 6 of 6" 12263 12264 ><img 12265 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_f7e19e95c1c74179b65a3cdf6814aa13.webp?v=1773078305&width=600" 12266 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_f7e19e95c1c74179b65a3cdf6814aa13.webp?v=1773078305&width=300 300w, 12267 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_f7e19e95c1c74179b65a3cdf6814aa13.webp?v=1773078305&width=450 450w, 12268 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_f7e19e95c1c74179b65a3cdf6814aa13.webp?v=1773078305&width=600 600w" 12269 sizes="(min-width: 769px) 200px, 100vw" 12270 alt="Customer photo" 12271 loading="lazy" 12272 width="1170" 12273 height="1170" 12274 ></div></div>
12275 </div></div> 12276 </div> 12277</section> 12278
12279<script> 12280(function() { 12281 var sectionId = 'template--17749318303830__snb_testimonial_native_G8GWGn'; 12282 var sectionEl = document.getElementById('shopify-section-' + sectionId); 12283 12284 function initPhotoCarousel() { 12285 var photos = document.getElementById('snb-test-photos-' + sectionId); 12286 if (!photos || photos.dataset.flickityInit) return; 12287 12288 var slides = photos.querySelectorAll('.snb-test__photo-slide'); 12289 if (slides.length <= 1) return; 12290 12291 if (typeof theme !== 'undefined' && theme.Slideshow) { 12292 new theme.Slideshow(photos, { 12293 prevNextButtons: true, 12294 pageDots: false, 12295 wrapAround: true, 12296 adaptiveHeight: false, 12297 autoPlay: false, 12298 cellAlign: 'left', 12299 contain: true, 12300 groupCells: true 12301 }); 12302 photos.dataset.flickityInit = 'true'; 12303 } else if (typeof Flickity !== 'undefined') { 12304 new Flickity(photos, { 12305 prevNextButtons: true, 12306 pageDots: false, 12307 wrapAround: true, 12308 adaptiveHeight: false, 12309 autoPlay: false, 12310 cellAlign: 'left', 12311 contain: true, 12312 groupCells: true 12313 }); 12314 photos.dataset.flickityInit = 'true'; 12315 } 12316 12317 // a11y: APG pattern â hide inactive slides, label prev/next. 12318 function updatePhotoSlides() { 12319 var flk = (typeof Flickity !== 'undefined') ? Flickity.data(photos) : null; 12320 if (!flk) return; 12321 var active = flk.selectedElements || (flk.selectedElement ? [flk.selectedElement] : []); 12322 var cells = photos.querySelectorAll('.snb-test__photo-slide'); 12323 for (var i = 0; i < cells.length; i++) { 12324 var isActive = false; 12325 for (var k = 0; k < active.length; k++) { 12326 if (active[k] === cells[i]) { isActive = true; break; } 12327 } 12328 var target = isActive ? 'false' : 'true'; 12329 if (cells[i].getAttribute('aria-hidden') !== target) { 12330 cells[i].setAttribute('aria-hidden', target); 12331 } 12332 } 12333 } 12334 setTimeout(function () { 12335 var prev = photos.querySelector('.flickity-prev-next-button.flickity-previous, .flickity-prev-next-button.previous, .flickity-button.previous'); 12336 var next = photos.querySelector('.flickity-prev-next-button.flickity-next, .flickity-prev-next-button.next, .flickity-button.next'); 12337 if (prev) prev.setAttribute('aria-label', 'Previous photo'); 12338 if (next) next.setAttribute('aria-label', 'Next photo'); 12339 12340 updatePhotoSlides(); 12341 var flk = (typeof Flickity !== 'undefined') ? Flickity.data(photos) : null; 12342 if (flk && !photos.dataset.a11ySelectBound) { 12343 photos.dataset.a11ySelectBound = '1'; 12344 flk.on('select', updatePhotoSlides); 12345 } 12346 }, 200); 12347 } 12348 12349 function initQuoteCarousel() { 12350 var quotes = document.getElementById('snb-test-quotes-' + sectionId); 12351 if (!quotes || quotes.dataset.flickityInit) return; 12352 12353 var slides = quotes.querySelectorAll('.snb-test__testimonial-slide'); 12354 if (slides.length <= 1) return; 12355 12356 if (typeof Flickity !== 'undefined') { 12357 new Flickity(quotes, { 12358 prevNextButtons: false, 12359 pageDots: true, 12360 wrapAround: true, 12361 adaptiveHeight: true, 12362 autoPlay: 6000 12363 }); 12364 quotes.dataset.flickityInit = 'true'; 12365 12366 // a11y: APG â hide inactive quote slides 12367 function updateQuoteSlides() { 12368 var flk = Flickity.data(quotes); 12369 if (!flk) return; 12370 var active = flk.selectedElements || (flk.selectedElement ? [flk.selectedElement] : []); 12371 var cells = quotes.querySelectorAll('.snb-test__testimonial-slide'); 12372 for (var i = 0; i < cells.length; i++) { 12373 var isActive = false; 12374 for (var k = 0; k < active.length; k++) { 12375 if (active[k] === cells[i]) { isActive = true; break; } 12376 } 12377 var target = isActive ? 'false' : 'true'; 12378 if (cells[i].getAttribute('aria-hidden') !== target) { 12379 cells[i].setAttribute('aria-hidden', target); 12380 } 12381 } 12382 } 12383 setTimeout(function () { 12384 updateQuoteSlides(); 12385 var f = Flickity.data(quotes); 12386 if (f && !quotes.dataset.a11ySelectBound) { 12387 quotes.dataset.a11ySelectBound = '1'; 12388 f.on('select', updateQuoteSlides); 12389 } 12390 }, 200); 12391 12392 // a11y: label dots, normalize aria-current. Loop-safe: only watch aria-current, guarded
12392setAttribute, rAF-batched. 12393 setTimeout(function () { 12394 var dotsContainer = quotes.querySelector('.flickity-page-dots'); 12395 if (!dotsContainer) return; 12396 12397 function normalizeDots() { 12398 var ds = dotsContainer.querySelectorAll('.dot'); 12399 for (var i = 0; i < ds.length; i++) { 12400 var label = 'Go to testimonial ' + (i + 1); 12401 if (ds[i].getAttribute('aria-label') !== label) { 12402 ds[i].setAttribute('aria-label', label); 12403 } 12404 if (ds[i].getAttribute('aria-current') === 'step') { 12405 ds[i].setAttribute('aria-current', 'true'); 12406 } 12407 } 12408 } 12409 normalizeDots(); 12410 12411 if (dotsContainer.dataset.a11yObserver) return; 12412 dotsContainer.dataset.a11yObserver = '1'; 12413 12414 var scheduled = false; 12415 var obs = new MutationObserver(function () { 12416 if (scheduled) return; 12417 scheduled = true; 12418 requestAnimationFrame(function () { 12419 scheduled = false; 12420 normalizeDots(); 12421 }); 12422 }); 12423 obs.observe(dotsContainer, { attributes: true, subtree: true, attributeFilter: ['aria-current'] }); 12424 }, 200); 12425 // Add pause/play button for autoplay 12426 var pauseBtn = document.createElement('button'); 12427 pauseBtn.type = 'button'; 12428 pauseBtn.className = 'snb-test__pause-btn'; 12429 pauseBtn.setAttribute('aria-label', 'Pause testimonials'); 12430 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>'; 12431 var quoteArea = quotes.closest('.snb-test__quote-area'); 12432 if (quoteArea) quoteArea.appendChild(pauseBtn); 12433 var isPaused = false; 12434 pauseBtn.addEventListener('click', function() { 12435 var flk = Flickity.data(quotes); 12436 if (flk) { 12437 if (isPaused) { 12438 flk.playPlayer(); 12439 pauseBtn.setAttribute('aria-label', 'Pause testimonials'); 12440 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>'; 12441 } else { 12442 flk.pausePlayer(); 12443 pauseBtn.setAttribute('aria-label', 'Play testimonials'); 12444 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>'; 12445 } 12446 isPaused = !isPaused; 12447 } 12448 }); 12449 } 12450 } 12451 12452 function init() { 12453 initPhotoCarousel(); 12454 initQuoteCarousel(); 12455 } 12456 12457 function lazyInit() { 12458 if (!sectionEl) { 12459 sectionEl = document.querySelector('.snb-test'); 12460 } 12461 if (!sectionEl) return; 12462 12463 if ('IntersectionObserver' in window) { 12464 var observer = new IntersectionObserver(function(entries) { 12465 entries.forEach(function(entry) { 12466 if (entry.isIntersecting) { 12467 observer.unobserve(entry.target); 12468 init(); 12469 } 12470 }); 12471 }, { rootMargin: '200px 0px' }); 12472 observer.observe(sectionEl); 12473 } else { 12474 init(); 12475 } 12476 } 12477 12478 if (document.readyState === 'loading') { 12479 document.addEventListener('DOMContentLoaded', lazyInit); 12480 } else { 12481 lazyInit(); 12482 } 12483 12484 document.addEventListener('shopify:section:load', function(evt) { 12485 if (evt.detail.sectionId === sectionId) init(); 12486 }); 12487})(); 12488</script>
12488 12489 12490 12491</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 { 12492 --snb-pdp-ash: #1a1a1a; 12493 --snb-pdp-lantern: #b73d09; 12494 --snb-pdp-washi: #f6f4f1; 12495 --snb-pdp-persimmon: #b73d09; 12496 --snb-pdp-red-beans: #b73d09; 12497 --snb-pdp-white: #ffffff; 12498 --snb-pdp-border: #e8e8e1; 12499 --snb-pdp-badge: #602012; 12500 --snb-pdp-sale-bg: #b73d09; 12501 --snb-pdp-sale-color: #ffffff; 12502 --snb-pdp-radius: 8px; 12503 } 12504 12505 .snb-pdp { 12506 display: grid; 12507 grid-template-columns: 1fr; 12508 gap: 0; 12509 max-width: 1400px; 12510 margin: 0 auto; 12511 padding: 0; 12512 font-family: "Lato", sans-serif; 12513 color: var(--snb-pdp-ash); 12514 overflow: clip; 12515 box-sizing: border-box; 12516 } 12517 12518 @media (min-width: 769px) { 12519 .snb-pdp { 12520 grid-template-columns: 1fr 1fr; 12521 gap: 60px; 12522 align-items: start; 12523 padding: 0px 30px !importan; 12524 } 12525 } 12526 12527 .snb-pdp *, 12528 .snb-pdp *::before, 12529 .snb-pdp *::after { 12530 box-sizing: border-box; 12531 } 12532 12533 /* ââ Gallery ââ */ 12534 .snb-pdp__gallery { 12535 display: flex; 12536 flex-direction: column; 12537 gap: 0; 12538 min-width: 0; 12539 } 12540 12541 @media (min-width: 769px) { 12542 .snb-pdp__gallery { 12543 flex-direction: row; 12544 gap: 15px; 12545 position: sticky; 12546 top: 20px; 12547 align-self: start; 12548 } 12549 } 12550 12551 /* ââ Mobile Carousel ââ */ 12552 .snb-pdp__carousel { 12553 display: flex; 12554 overflow-x: auto; 12555 scroll-snap-type: x mandatory; 12556 -webkit-overflow-scrolling: touch; 12557 scrollbar-width: none; 12558 } 12559 12560 .snb-pdp__carousel::-webkit-scrollbar {
12561 display: none; 12562 } 12563 12564 @media (min-width: 769px) { 12565 .snb-pdp__carousel { 12566 display: none; 12567 } 12568 } 12569 12570 @keyframes snb-pdp-shimmer { 12571 0% { background-position: -400px 0; } 12572 100% { background-position: 400px 0; } 12573 } 12574 12575 .snb-pdp__carousel-slide { 12576 flex: 0 0 calc(100% / 1.2); 12577 scroll-snap-align: start; 12578 aspect-ratio: 390 / 353; 12579 overflow: hidden; 12580 background: linear-gradient( 12581 90deg, 12582 var(--snb-pdp-border) 0%, 12583 var(--snb-pdp-washi) 40%, 12584 var(--snb-pdp-border) 80% 12585 ); 12586 background-size: 800px 100%; 12587 animation: snb-pdp-shimmer 1.5s infinite linear; 12588 margin-right: 8px; 12589 } 12590 12591 .snb-pdp__carousel-slide:has(img.snb-pdp--loaded) { 12592 animation: none; 12593 background: none; 12594 } 12595 12596 .snb-pdp__carousel-slide img { 12597 width: 100%; 12598 height: 100%; 12599 object-fit: cover; 12600 display: block; 12601 opacity: 0; 12602 transition: opacity 0.3s ease; 12603 } 12604 12605 .snb-pdp__carousel-slide img.snb-pdp--loaded { 12606 opacity: 1; 12607 } 12608 12609 .snb-pdp__dots { 12610 display: flex; 12611 justify-content: center; 12612 gap: 6px; 12613 padding: 12px 0; 12614 } 12615 12616 @media (min-width: 769px) { 12617 .snb-pdp__dots { 12618 display: none; 12619 } 12620 } 12621 12622 .snb-pdp__dot { 12623 width: 27px; 12624 height: 6px; 12625 border-radius: 6px; 12626 background: #fff; 12627 border: 1px solid #A53E23; 12628 padding: 0; 12629 cursor: pointer; 12630 transition: background 0.2s ease; 12631 } 12632 12633 .snb-pdp__dot--active { 12634 background: #A53E23; 12635 } 12636 12637 .snb-pdp__dot:focus-visible { 12638 outline: 2px solid var(--snb-pdp-lantern); 12639 outline-offset: 2px; 12640 } 12641 12642 /* ââ Desktop Gallery (thumbs + main) ââ */ 12643 .snb-pdp__desktop-gallery { 12644 display: none; 12645 } 12646 12647 @media (min-width: 769px) { 12648 .snb-pdp__desktop-gallery { 12649 display: flex; 12650 gap: 15px; 12651 width: 100%; 12652 } 12653 } 12654 12655 .snb-pdp__thumbs { 12656 display: flex; 12657 flex-direction: column; 12658 gap: 12px; 12659 width: 80px; 12660 flex-shrink: 0; 12661 position: relative; 12662 overflow: hidden; 12663 max-height: 500px; 12664 } 12665 12666 .snb-pdp__thumbs-scroller { 12667 display: flex; 12668 flex-direction: column; 12669 gap: 12px; 12670 overflow-y: auto; 12671 scrollbar-width: none; 12672 max-height: 100%; 12673 } 12674 12675 .snb-pdp__thumbs-scroller::-webkit-scrollbar {
12676 display: none; 12677 } 12678 12679 .snb-pdp__thumb { 12680 width: 76px; 12681 height: 76px; 12682 border: 1px solid var(--snb-pdp-border); 12683 border-radius: 4px; 12684 overflow: hidden; 12685 cursor: pointer; 12686 flex-shrink: 0; 12687 background: var(--snb-pdp-white); 12688 padding: 0; 12689 } 12690 12691 .snb-pdp__thumb--active { 12692 border: 2px solid var(--snb-pdp-ash); 12693 } 12694 12695 .snb-pdp__thumb img { 12696 width: 100%; 12697 height: 100%; 12698 object-fit: cover; 12699 display: block; 12700 } 12701 12702 .snb-pdp__thumb-arrow { 12703 display: flex; 12704 align-items: center; 12705 justify-content: center; 12706 background: var(--snb-pdp-white); 12707 border: none; 12708 cursor: pointer; 12709 padding: 8px 0; 12710 width: 100%; 12711 } 12712 12713 .snb-pdp__thumb-arrow svg { 12714 width: 10px; 12715 height: 6px; 12716 } 12717 12718 .snb-pdp__main-image { 12719 flex: 1; 12720 min-width: 0; 12721 overflow: hidden; 12722 background: linear-gradient( 12723 90deg, 12724 var(--snb-pdp-border) 0%, 12725 var(--snb-pdp-washi) 40%, 12726 var(--snb-pdp-border) 80% 12727 ); 12728 background-size: 800px 100%; 12729 animation: snb-pdp-shimmer 1.5s infinite linear; 12730 min-height: 300px; 12731 } 12732 12733 .snb-pdp__main-image:has(img.snb-pdp--loaded) { 12734 animation: none; 12735 background: var(--snb-pdp-washi); 12736 min-height: auto; 12737 } 12738 12739 @media (min-width: 769px) { 12740 .snb-pdp__main-image { 12741 max-height: 500px; 12742 border-radius: 4px; 12743 min-height: 400px; 12744 } 12745 12746 .snb-pdp__main-image:has(img.snb-pdp--loaded) { 12747 min-height: auto; 12748 } 12749 } 12750 12751 .snb-pdp__main-image img { 12752 width: 100%; 12753 height: 100%; 12754 object-fit: cover; 12755 display: block; 12756 opacity: 0; 12757 transition: opacity 0.3s ease; 12758 } 12759 12760 .snb-pdp__main-image img.snb-pdp--loaded { 12761 opacity: 1; 12762 } 12763 12764 /* ââ Info column ââ */ 12765 .snb-pdp__info { 12766 display: flex; 12767 flex-direction: column; 12768 gap: 0; 12769 padding: 20px 20px 40px; 12770 min-width: 0; 12771 } 12772 12773 12774 /* ââ Header ââ */ 12775 .snb-pdp__preheader { 12776 font-family: "Montserrat", sans-serif; 12777 font-weight: 500; 12778 font-size: 14px; 12779 letter-spacing: 5px; 12780 text-transform: uppercase; 12781 line-height: 18px; 12782 margin: 0 0 4px; 12783 } 12784 12785 12786 .snb-pdp__title { 12787 font-family: "Orpheus Pro", serif; 12788 font-weight: 400; 12789 font-size: 48px; 12790 line-height: 52px !important; 12791 margin: 0 0 20px; 12792 text-transform: capitalize; 12793 word-break: break-word; 12794 } 12795 12796 @media (min-width: 769px) { 12797 .snb-pdp__info { 12798 padding: 0; 12799 } 12800 12801 .snb-pdp__title { 12802 font-size: 48px; 12803 line-height: 52px; 12804 } 12805 } 12806 12807 /* ââ Rating ââ */ 12808 .snb-pdp__rating { 12809 display: flex; 12810 align-items: center; 12811 gap: 16px; 12812 margin-bottom: 8px; 12813 } 12814 12815 @media (min-width: 769px) { 12816 .snb-pdp__rating { 12817 margin-bottom: 24px; 12818 } 12819 } 12820 12821 .snb-pdp__stars { 12822 display: flex; 12823 gap: 4px; 12824 } 12825 12826 .snb-pdp__stars svg { 12827 width: 16px; 12828 height: 16px; 12829 fill: var(--snb-pdp-ash); 12830 } 12831 12832 .snb-pdp__rating-number { 12833 font-family: "Orpheus Pro", serif; 12834 font-size: 16px; 12835 line-height: 18px; 12836 } 12837 12838 .snb-pdp__review-count { 12839 font-family: "Orpheus Pro", serif; 12840 font-size: 16px; 12841 line-height: 18px; 12842 color: var(--snb-pdp-ash); 12843 } 12844 12845 12846 /* ââ Sale Banner ââ */ 12847 .snb-pdp__sale-banner { 12848 background: var(--snb-pdp-sale-bg); 12849 color: var(--snb-pdp-sale-color); 12850 border-radius: var(--snb-pdp-radius); 12851 padding: 12px 6px; 12852 text-align: center; 12853 font-family: "Lato", sans-serif; 12854 font-size: 16px; 12855 line-height: 24px; 12856 letter-spacing: 0.5px; 12857 margin-bottom: 8px; 12858 } 12859 .snb-pdp__sale-banner p{ 12860 margin: 0; 12861 } 12862 12863 .snb-pdp__sale-banner strong { 12864 font-family: "Lato", sans-serif; 12865 font-weight: 700; 12866 } 12867 12868 /* ââ Plan Cards ââ */ 12869 .snb-pdp__plans { 12870 display: flex; 12871 flex-direction: column; 12872 gap: 8px; 12873 margin-bottom: 24px; 12874 } 12875 12876 .snb-pdp__plan { 12877 border: 1px solid var(--snb-pdp-ash); 12878 border-radius: var(--snb-pdp-radius); 12879 cursor: pointer; 12880 overflow: hidden; 12881 background: var(--snb-pdp-white); 12882 transition: border-color 0.2s ease; 12883 outline: none; 12884 } 12885 12886 .snb-pdp__plan:focus-visible { 12887 outline: 2px solid var(--snb-pdp-lantern); 12888 outline-offset: 2px; 12889 } 12890 12891 .snb-pdp__plan--active { 12892 border: 2px solid var(--snb-pdp-ash); 12893 } 12894 12895 .snb-pdp__plan-header { 12896 display: flex; 12897 align-items: center; 12898 justify-content: space-between; 12899 padding: 12px 24px; 12900 min-height: 64px; 12901 min-width: 0; 12902 } 12903 12904 .snb-pdp__plan--active .snb-pdp__plan-header { 12905 background: var(--snb-pdp-red-beans); 12906 border-color: var(--snb-pdp-red-beans); 12907 color: var(--snb-pdp-white); 12908 border-radius: 7px 7px 0 0; 12909 } 12910 12911 .snb-pdp__plan-left { 12912 display: flex; 12913 flex-direction: column; 12914 gap: 4px; 12915 } 12916 12917 @media (min-width: 1200px) { 12918 .snb-pdp__plan-left { 12919 flex-direction: row; 12920 align-items: center; 12921 gap: 16px; 12922 } 12923 12924 12925 } 12926 12927 .snb-pdp__plan-badge { 12928 font-family: "Montserrat", sans-serif; 12929 font-weight: 500; 12930 font-size: 10px; 12931 text-transform: uppercase; 12932 line-height: 12px; 12933 order: -1; 12934 } 12935 12936 @media (min-width: 1200px) { 12937 .snb-pdp__plan-badge { 12938 order: 1; 12939 display: inline-flex; 12940 align-items: center; 12941 padding: 6px 12px; 12942 border-radius: 24px; 12943 background: var(--snb-pdp-lantern); 12944 color: var(--snb-pdp-white); 12945 } 12946 } 12947 12948 .snb-pdp__plan--active .snb-pdp__plan-badge { 12949 color: var(--snb-pdp-white); 12950 } 12951 12952 @media (min-width: 1200px) { 12953 .snb-pdp__plan--active .snb-pdp__plan-badge { 12954 background: var(--snb-pdp-badge); 12955 } 12956 } 12957 12958 .snb-pdp__plan:not(.snb-pdp__plan--active) .snb-pdp__plan-badge { 12959 color: var(--snb-pdp-persimmon); 12960 } 12961 12962 @media (min-width: 1200px) { 12963 .snb-pdp__plan:not(.snb-pdp__plan--active) .snb-pdp__plan-badge { 12964 color: var(--snb-pdp-white); 12965 background: var(--snb-pdp-lantern); 12966 } 12967 } 12968 12969 .snb-pdp__plan-name { 12970 font-family: "Orpheus Pro", serif; 12971 font-size: 20px; 12972 line-height: 24px; 12973 word-break: break-word; 12974 } 12975 12976 @media (min-width: 1200px) { 12977 .snb-pdp__plan-name { 12978 font-size: 28px; 12979 line-height: 28px; 12980 } 12981 } 12982 12983 .snb-pdp__plan-right { 12984 display: flex; 12985 flex-direction: column; 12986 align-items: flex-end; 12987 gap: 4px; 12988 } 12989 12990 @media (min-width: 1200px) { 12991 .snb-pdp__plan-right { 12992 flex-direction: row; 12993 align-items: center; 12994 gap: 12px; 12995 } 12996 } 12997 12998 .snb-pdp__plan-save { 12999 font-family: "Montserrat", sans-serif; 13000 font-weight: 500; 13001 font-size: 12px; 13002 text-transform: uppercase; 13003 color: var(--snb-pdp-persimmon); 13004 line-height: 12px; 13005 } 13006 13007 .snb-pdp__plan--active .snb-pdp__plan-save { 13008 color: var(--snb-pdp-white); 13009 } 13010 13011 .snb-pdp__plan-divider { 13012 display: none; 13013 width: 1px; 13014 height: 20px; 13015 background: var(--snb-pdp-border); 13016 } 13017 13018 @media (min-width: 1200px) { 13019 .snb-pdp__plan-divider { 13020 display: block; 13021 } 13022 } 13023 13024 .snb-pdp__plan--active .snb-pdp__plan-divider { 13025 background: rgba(255, 255, 255, 0.3); 13026 } 13027 13028 .snb-pdp__plan-price { 13029 font-family: "Orpheus Pro", serif; 13030 font-size: 20px; 13031 line-height: 24px; 13032 } 13033 13034 @media (min-width: 1200px) { 13035 .snb-pdp__plan-price { 13036 font-size: 28px; 13037 line-height: 28px; 13038 } 13039 } 13040 13041 /* ââ Gift Promo ââ */ 13042 .snb-pdp__promo { 13043 display: none; 13044 } 13045 13046 .snb-pdp__plan--active .snb-pdp__promo { 13047 display: flex; 13048 flex-wrap: wrap; 13049 align-items: center; 13050 gap: 16px; 13051 padding: 16px; 13052 background: var(--snb-pdp-washi); 13053 border-radius: 0 0 7px 7px; 13054 } 13055 13056 @media (min-width: 769px) { 13057 .snb-pdp__promo { 13058 flex-wrap: nowrap; 13059 padding: 16px 24px; 13060 } 13061 } 13062 13063 .snb-pdp__promo-image { 13064 width: 48px; 13065 height: 48px; 13066 border-radius: 4px; 13067 overflow: hidden; 13068 flex-shrink: 0; 13069 } 13070 13071 @media (min-width: 769px) { 13072 .snb-pdp__promo-image { 13073 width: 64px; 13074 height: 64px; 13075 } 13076 } 13077 13078 .snb-pdp__promo-image img { 13079 width: 100%; 13080 height: 100%; 13081 object-fit: cover; 13082 display: block; 13083 } 13084 13085 .snb-pdp__promo-text { 13086 flex: 1; 13087 min-width: 0; 13088 } 13089 13090 .snb-pdp__promo-title { 13091 font-family: "Montserrat", sans-serif; 13092 font-weight: 500; 13093 font-size: 14px; 13094 letter-spacing: 1px; 13095 text-transform: uppercase; 13096 line-height: 16px; 13097 margin: 0 0 4px; 13098 } 13099 13100 @media (min-width: 769px) { 13101 .snb-pdp__promo-title { 13102 font-size: 16px; 13103 } 13104 } 13105 13106 .snb-pdp__promo-desc { 13107 font-size: 12px; 13108 line-height: 16px; 13109 margin: 0; 13110 color: var(--snb-pdp-ash); 13111 } 13112 13113 .snb-pdp__promo-code-btn { 13114 display: inline-flex; 13115 align-items: center; 13116 justify-content: center; 13117 gap: 8px; 13118 padding: 12px 16px; 13119 border: 1px solid var(--snb-pdp-ash); 13120 border-radius: 24px; 13121 background: transparent; 13122 cursor: pointer; 13123 font-family: "Montserrat", sans-serif; 13124 font-weight: 500; 13125 font-size: 12px; 13126 text-transform: uppercase; 13127 color: var(--snb-pdp-ash); 13128 line-height: 16px; 13129 transition: background 0.2s ease; 13130 width: 100%; 13131 } 13132 13133 @media (min-width: 769px) { 13134 .snb-pdp__promo-code-btn { 13135 width: auto; 13136 flex-shrink: 0; 13137 } 13138 } 13139 13140 .snb-pdp__promo-code-btn:hover { 13141 background: var(--snb-pdp-lantern); 13142 color: var(--snb-pdp-white); 13143 } 13144 13145 .snb-pdp__promo-code-btn:hover svg { 13146 stroke: var(--snb-pdp-white); 13147 } 13148 13149 .snb-pdp__promo-code-btn svg { 13150 width: 16px; 13151 height: 16px; 13152 stroke: var(--snb-pdp-ash); 13153 fill: none; 13154 } 13155 13156 /* ââ Pricing + CTA ââ */ 13157 .snb-pdp__checkout { 13158 display: flex; 13159 flex-direction: column; 13160 gap: 8px; 13161 margin-bottom: 24px; 13162 } 13163 13164 @media (min-width: 1200px) { 13165 .snb-pdp__checkout { 13166 flex-direction: row; 13167 align-items: flex-start; 13168 justify-content: space-between; 13169 gap: 24px; 13170 } 13171 } 13172 13173 .snb-pdp__pricing { 13174 display: flex; 13175 flex-direction: row; 13176 align-items: flex-start; 13177 gap: 0; 13178 flex-wrap: wrap; 13179 } 13180 13181 @media (min-width: 1200px) { 13182 .snb-pdp__pricing { 13183 flex-direction: column; 13184 } 13185 } 13186 13187 .snb-pdp__pricing-left { 13188 display: flex; 13189 flex-direction: column; 13190 margin-right: 8px; 13191 } 13192 13193 @media (min-width: 1200px) { 13194 .snb-pdp__pricing-left { 13195 margin-right: 0; 13196 } 13197 } 13198 13199 .snb-pdp__pricing-label { 13200 font-family: "Montserrat", sans-serif; 13201 font-weight: 500; 13202 font-size: 12px; 13203 text-transform: uppercase; 13204 line-height: 12px; 13205 } 13206 13207 .snb-pdp__pricing-save { 13208 font-family: "Montserrat", sans-serif; 13209 font-weight: 500; 13210 font-size: 12px; 13211 text-transform: uppercase; 13212 line-height: 12px; 13213 color: var(--snb-pdp-persimmon); 13214 margin-top: 6px; 13215 } 13216 13217 @media (min-width: 1200px) { 13218 .snb-pdp__pricing-save { 13219 margin-top: 8px; 13220 } 13221 } 13222 13223 .snb-pdp__pricing-right { 13224 display: flex; 13225 flex-direction: column; 13226 } 13227 13228 .snb-pdp__pricing-row { 13229 display: flex; 13230 align-items: baseline; 13231 gap: 16px; 13232 } 13233 13234 .snb-pdp__price { 13235 font-family: "Orpheus Pro", serif; 13236 font-size: 28px; 13237 line-height: 32px; 13238 color: var(--snb-pdp-ash); 13239 } 13240 13241 @media (min-width: 1200px) { 13242 .snb-pdp__price { 13243 font-size: 32px; 13244 } 13245 } 13246 13247 .snb-pdp__compare-price { 13248 font-family: "Orpheus Pro", serif; 13249 font-size: 28px; 13250 line-height: 32px; 13251 color: var(--snb-pdp-persimmon); 13252 text-decoration: line-through; 13253 } 13254 13255 @media (min-width: 1200px) { 13256 .snb-pdp__compare-price { 13257 font-size: 32px; 13258 } 13259 } 13260 13261 .snb-pdp__billing-note { 13262 font-size: 16px; 13263 line-height: 24px; 13264 letter-spacing: 0.5px; 13265 margin-top: 0; 13266 text-align: right; 13267 } 13268 13269 @media (min-width: 1200px) { 13270 .snb-pdp__billing-note { 13271 text-align: left; 13272 margin-top: 0; 13273 } 13274 } 13275 13276 .snb-pdp__form { 13277 width: 100%; 13278 } 13279 13280 @media (min-width: 1200px) { 13281 .snb-pdp__form { 13282 flex: 1; 13283text-align:end; 13284 } 13285 .snb-pdp__cta { 13286 height: 76px; 13287 } 13288 13289 } 13290 13291 .snb-pdp__cta { 13292 text-align: center; 13293 } 13294 13295 .snb-pdp__cta[disabled] { 13296 opacity: 0.5;
13297 cursor: not-allowed; 13298 } 13299 13300 /* ââ Divider ââ */ 13301 .snb-pdp__divider { 13302 border: none; 13303 border-top: 1px solid var(--snb-pdp-border); 13304 margin: 0 0 12px; 13305 } 13306.snb-pdp__disclaimer { 13307 padding-bottom: 12px; 13308 text-align: center; 13309 font-size: 13px 13310} 13311 /* ââ USP List ââ */ 13312 .snb-pdp__usps { 13313 display: flex; 13314 flex-direction: column; 13315 gap: 10px; 13316 margin-bottom: 40px; 13317 content-visibility: auto; 13318 contain-intrinsic-size: auto 200px; 13319 } 13320 13321 .snb-pdp__usp { 13322 display: flex; 13323 align-items: center; 13324 gap: 10px; 13325 } 13326 13327 .snb-pdp__usp-icon { 13328 width: 25px; 13329 height: 25px; 13330 flex-shrink: 0; 13331 } 13332 13333 .snb-pdp__usp-icon img { 13334 width: 100%; 13335 height: 100%; 13336 object-fit: contain; 13337 display: block; 13338 } 13339 13340 .snb-pdp__usp-text { 13341 font-size: 16px; 13342 line-height: 24px; 13343 letter-spacing: 0.5px; 13344 } 13345 13346 /* ââ Description ââ */ 13347 .snb-pdp__description { 13348 display: flex; 13349 flex-direction: column; 13350 gap: 24px; 13351 margin-bottom: 40px; 13352 content-visibility: auto; 13353 contain-intrinsic-size: auto 150px; 13354 } 13355 13356 .snb-pdp__description-heading { 13357 font-family: "Orpheus Pro", serif; 13358 font-weight: 500; 13359 font-size: 24px; 13360 line-height: 30px; 13361 margin: 0; 13362 } 13363 13364 @media (min-width: 769px) { 13365 .snb-pdp__description-heading { 13366 font-size: 28px; 13367 } 13368 } 13369 13370 .snb-pdp__description-text { 13371 font-size: 16px; 13372 line-height: 24px; 13373 letter-spacing: 0.5px; 13374 } 13375 13376 .snb-pdp__description-text p { 13377 margin: 0 0 12px; 13378 } 13379 13380 .snb-pdp__description-text p:last-child { 13381 margin-bottom: 0; 13382 } 13383 13384 /* ââ Collapsible Details ââ */ 13385 .snb-pdp__details-toggle { 13386 display: flex; 13387 align-items: center; 13388 justify-content: space-between; 13389 width: 100%; 13390 padding: 0; 13391 background: none; 13392 border: none; 13393 cursor: pointer; 13394 font-family: "Lato", sans-serif; 13395 font-weight: 600; 13396 font-size: 18px; 13397 letter-spacing: 1px; 13398 line-height: 22px; 13399 color: var(--snb-pdp-ash); 13400 text-align: left; 13401 } 13402 13403 .snb-pdp__details-toggle:focus-visible { 13404 outline: 2px solid var(--snb-pdp-ash); 13405 outline-offset: 4px; 13406 border-radius: 2px; 13407 } 13408 13409 .snb-pdp__details-icon { 13410 width: 12px; 13411 height: 12px; 13412 transition: transform 0.3s ease; 13413 flex-shrink: 0; 13414 } 13415 13416 .snb-pdp__details[open] .snb-pdp__details-icon { 13417 transform: rotate(180deg); 13418 } 13419 13420 .snb-pdp__details-content { 13421 padding-top: 16px; 13422 font-size: 16px; 13423 line-height: 24px; 13424 letter-spacing: 0.5px; 13425 } 13426 13427 .snb-pdp__details-content p { 13428 margin: 0 0 12px; 13429 } 13430 13431 .snb-pdp__details-content p:last-child { 13432 margin-bottom: 0; 13433 }</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 13434 class="snb-pdp__carousel" 13435 data-snb-carousel 13436 role="region" 13437 aria-roledescription="carousel" 13438 aria-label="Product gallery" 13439 ><div 13440 class="snb-pdp__carousel-slide" 13441 role="group" 13442 aria-roledescription="slide" 13443 aria-label="Image 1 of 10" 13444 aria-hidden="false" 13445 13446 > 13447 <img 13448 src="//bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square.jpg?v=1777541638&width=800" 13449 srcset="//bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square.jpg?v=1777541638&width=400 400w, 13450 //bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square.jpg?v=1777541638&width=600 600w, 13451 //bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square.jpg?v=1777541638&width=800 800w" 13452 sizes="(min-width: 769px) 50vw, 85vw" 13453 loading="lazy" 13454 alt="Bokksu Snack Box Subscription" 13455 width="1200" 13456 height="1200" 13457 > 13458 </div><div 13459 class="snb-pdp__carousel-slide" 13460 role="group" 13461 aria-roledescription="slide" 13462 aria-label="Image 2 of 10" 13463 aria-hidden="true" 13464 13465 > 13466 <img 13467 src="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_001_Fullcrop_HiRes.jpg?v=1780550983&width=800" 13468 srcset="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_001_Fullcrop_HiRes.jpg?v=1780550983&width=400 400w, 13469 //bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_001_Fullcrop_HiRes.jpg?v=1780550983&width=600 600w, 13470 //bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_001_Fullcrop_HiRes.jpg?v=1780550983&width=800 800w" 13471 sizes="(min-width: 769px) 50vw, 85vw" 13472 loading="lazy" 13473 alt="Bokksu Snack Box Subscription" 13474 width="3178" 13475 height="2224" 13476 > 13477 </div><div 13478 class="snb-pdp__carousel-slide" 13479 role="group" 13480 aria-roledescription="slide" 13481 aria-label="Image 3 of 10" 13482 aria-hidden="true" 13483 13484 > 13485 <img 13486 src="//bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_HeroBanner_03_1200x1500_2.jpg?v=1780551296&width=800" 13487 srcset="//bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_HeroBanner_03_1200x1500_2.jpg?v=1780551296&width=400 400w, 13488 //bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_HeroBanner_03_1200x1500_2.jpg?v=1780551296&width=600 600w, 13489 //bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_HeroBanner_03_1200x1500_2.jpg?v=1780551296&width=800 800w" 13490 sizes="(min-width: 769px) 50vw, 85vw" 13491 loading="lazy" 13492 alt="Bokksu Snack Box Subscription" 13493 width="1200" 13494 height="1500" 13495 > 13496 </div><div 13497 class="snb-pdp__carousel-slide" 13498 role="group" 13499 aria-roledescription="slide" 13500 aria-label="Image 4 of 10" 13501 aria-hidden="true" 13502 13503 > 13504 <img 13505 src="//bokksu.com/cdn/shop/files/SNB2608_MemoriesofSummer_HeroBanner_780x800_b5940a7b-3814-4069-a6c9-8de5f1104d21.jpg?v=1788502617&width=800" 13506 srcset="//bokksu.com/cdn/shop/files/SNB2608_MemoriesofSummer_HeroBanner_780x800_b5940a7b-3814-4069-a6c9-8de5f1104d21.jpg?v=1788502617&width=400 400w, 13507 //bokksu.com/cdn/shop/files/SNB2608_MemoriesofSummer_HeroBanner_780x800_b5940a7b-3814-4069-a6c9-8de5f1104d21.jpg?v=1788502617&width=600 600w, 13508 //bokksu.com/cdn/shop/files/SNB2608_MemoriesofSummer_HeroBanner_780x800_b5940a7b-3814-4069-a6c9-8de5f1104d21.jpg?v=1788502617&width=800 800w" 13509 sizes="(min-width: 769px) 50vw, 85vw" 13510 loading="lazy" 13511 alt="Bokksu Snack Box Subscription" 13512 width="780" 13513 height="800" 13514 > 13515 </div><div 13516 class="snb-pdp__carousel-slide" 13517 role="group" 13518 aria-roledescription="slide" 13519 aria-label="Image 5 of 10" 13520 aria-hidden="true" 13521 13522 > 13523 <img 13524 src="//bokksu.com/cdn/shop/files/SNB2607_BambooWishesofTanabata_Hero_2000x2000_01.jpg?v=1785902687&width=800" 13525 srcset="//bokksu.com/cdn/shop/files/SNB2607_BambooWishesofTanabata_Hero_2000x2000_01.jpg?v=1785902687&width=400 400w, 13526 //bokksu.com/cdn/shop/files/SNB2607_BambooWishesofTanabata_Hero_2000x2000_01.jpg?v=1785902687&width=600 600w, 13527 //bokksu.com/cdn/shop/files/SNB2607_BambooWishesofTanabata_Hero_2000x2000_01.jpg?v=1785902687&width=800 800w" 13528 sizes="(min-width: 769px) 50vw, 85vw" 13529 loading="lazy" 13530 alt="Bokksu Snack Box Subscription" 13531 width="2000" 13532 height="2000" 13533 > 13534 </div><div 13535 class="snb-pdp__carousel-slide" 13536 role="group" 13537 aria-roledescription="slide" 13538 aria-label="Image 6 of 10" 13539 aria-hidden="true" 13540 13541 > 13542 <img 13543 src="//bokksu.com/cdn/shop/files/Angled-Hero-Mobile_02168747-e2a4-410d-ba69-f4cd66e540bd.png?v=1789715827&width=800" 13544 srcset="//bokksu.com/cdn/shop/files/Angled-Hero-Mobile_02168747-e2a4-410d-ba69-f4cd66e540bd.png?v=1789715827&width=400 400w, 13545 //bokksu.com/cdn/shop/files/Angled-Hero-Mobile_02168747-e2a4-410d-ba69-f4cd66e540bd.png?v=1789715827&width=600 600w, 13546 //bokksu.com/cdn/shop/files/Angled-Hero-Mobile_02168747-e2a4-410d-ba69-f4cd66e540bd.png?v=1789715827&width=800 800w" 13547 sizes="(min-width: 769px) 50vw, 85vw" 13548 loading="lazy" 13549 alt="Bokksu Snack Box Subscription" 13550 width="1080" 13551 height="1080" 13552 > 13553 </div><div 13554 class="snb-pdp__carousel-slide" 13555 role="group" 13556 aria-roledescription="slide" 13557 aria-label="Image 7 of 10" 13558 aria-hidden="true" 13559 13560 > 13561 <img 13562 src="//bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fcd713ce-6049-4f8
135626-9f85-dc3a854162ae.png?v=1778043728&width=800" 13563 srcset="//bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fcd713ce-6049-4f86-9f85-dc3a854162ae.png?v=1778043728&width=400 400w, 13564 //bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fcd713ce-6049-4f86-9f85-dc3a854162ae.png?v=1778043728&width=600 600w, 13565 //bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fcd713ce-6049-4f86-9f85-dc3a854162ae.png?v=1778043728&width=800 800w" 13566 sizes="(min-width: 769px) 50vw, 85vw" 13567 loading="lazy" 13568 alt="Bokksu Snack Box Subscription" 13569 width="1080" 13570 height="1080" 13571 > 13572 </div><div 13573 class="snb-pdp__carousel-slide" 13574 role="group" 13575 aria-roledescription="slide" 13576 aria-label="Image 8 of 10" 13577 aria-hidden="true" 13578 13579 > 13580 <img 13581 src="//bokksu.com/cdn/shop/files/page2.jpg?v=1778043607&width=800" 13582 srcset="//bokksu.com/cdn/shop/files/page2.jpg?v=177804360
135827&width=400 400w, 13583 //bokksu.com/cdn/shop/files/page2.jpg?v=1778043607&width=600 600w, 13584 //bokksu.com/cdn/shop/files/page2.jpg?v=1778043607&width=800 800w" 13585 sizes="(min-width: 769px) 50vw, 85vw" 13586 loading="lazy" 13587 alt="Bokksu Snack Box Subscription" 13588 width="1000" 13589 height="1000" 13590 > 13591 </div><div 13592 class="snb-pdp__carousel-slide" 13593 role="group" 13594 aria-roledescription="slide" 13595 aria-label="Image 9 of 10" 13596 aria-hidden="true" 13597 13598 > 13599 <img 13600 src="//bokksu.com/cdn/shop/files/2603-Sakura-Silk-Lounge-2000x2000-SNB_efd4e2d2-a8d5-416e-aa7f-cf270f76acf6.jpg?v=1777541673&width=800" 13601 srcset="//bokksu.com/cdn/shop/files/2603-Sakura-Silk-Lounge-2000x2000-SNB_efd4e2d2-a8d5-416e-aa7f-cf270f76acf6.jpg?v=1777541673&width=400 400w, 13602 //bokksu.com/cdn/shop/files/2603-Sakura-Silk-Lounge-2000x2000-SNB_efd4e2d2-a8d5-416e-aa7f-cf270f76acf6.jpg?v=1777541673&width=600 600w, 13603 //bokksu.com/cdn/shop/files/2603-Sakura-Silk-Lounge-2000x2000-SNB_efd4e2d2-a8d5-416e-aa7f-cf270f76acf6.jpg?v=1777541673&width=800 800w" 13604 sizes="(min-width: 769px) 50vw, 85vw" 13605 loading="lazy" 13606 alt="Bokksu Snack Box Subscription" 13607 width="2000" 13608 height="2000" 13609 > 13610 </div><div 13611 class="snb-pdp__carousel-slide" 13612 role="group" 13613 aria-roledescription="slide" 13614 aria-label="Image 10 of 10" 13615 aria-hidden="true" 13616 13617 > 13618 <img 13619 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e780380fb0b949f1a5879de775e58643_8b4e7e54-7888-4c42-aa6b-e7246ecf436e.webp?v=1777541706&width=800" 13620 srcset="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e780380fb0b949f1a5879de775e58643_8b4e7e54-7888-4c42-aa6b-e7246ecf436e.webp?v=1777541706&width=400 400w, 13621 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e780380fb0b949f1a5879de775e58643_8b4e7e54-7888-4c42-aa6b-e7246ecf436e.webp?v=1777541706&width=600 600w, 13622 //bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e780380fb0b949f1a5879de775e58643_8b4e7e54-7888-4c42-aa6b-e7246ecf436e.webp?v=1777541706&width=800 800w" 13623 sizes="(min-width: 769px) 50vw, 85vw" 13624 loading="lazy" 13625 alt="Bokksu Snack Box Subscription" 13626 width="1200" 13627 height="1200" 13628 > 13629 </div></div><div class="snb-pdp__dots" data-snb-dots role="group" aria-label="Gallery pagination"><button 13630 type="button" 13631 class="snb-pdp__dot snb-pdp__dot--active" 13632 data-snb-dot="0" 13633 aria-label="Go to image 1" 13634 aria-current="true" 13635 ></button><button 13636 type="button" 13637 class="snb-pdp__dot" 13638 data-snb-dot="1" 13639 aria-label="Go to image 2" 13640 13641 ></button><button 13642 type="button" 13643 class="snb-pdp__dot" 13644 data-snb-dot="2" 13645 aria-label="Go to image 3" 13646 13647 ></button><button 13648 type="button" 13649 class="snb-pdp__dot" 13650 data-snb-dot="3" 13651 aria-label="Go to image 4" 13652 13653 ></button><button 13654 type="button" 13655 class="snb-pdp__dot" 13656 data-snb-dot="4" 13657 aria-label="Go to image 5" 13658 13659 ></button><button 13660 type="button" 13661 class="snb-pdp__dot" 13662 data-snb-dot="5" 13663 aria-label="Go to image 6" 13664 13665 ></button><button 13666 type="button" 13667 class="snb-pdp__dot" 13668 data-snb-dot="6" 13669 aria-label="Go to image 7" 13670 13671 ></button><button 13672 type="button" 13673 class="snb-pdp__dot" 13674 data-snb-dot="7" 13675 aria-label="Go to image 8" 13676 13677 ></button><button 13678 type="button" 13679 class="snb-pdp__dot" 13680 data-snb-dot="8" 13681 aria-label="Go to image 9" 13682 13683 ></button><button 13684 type="button" 13685 class="snb-pdp__dot" 13686 data-snb-dot="9" 13687 aria-label="Go to image 10" 13688 13689 ></button></div><div class="snb-pdp__desktop-gallery"><div class="snb-pdp__thumbs" role="group" aria-label="Image thumbnails"> 13690 <div class="snb-pdp__thumbs-scroller" data-snb-thumbs><button 13691 type="button" 13692 class="snb-pdp__thumb snb-pdp__thumb--active" 13693 data-snb-thumb 13694 data-index="0" 13695 data-img-src="//bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square.jpg?v=1777541638&width=1200" 13696 data-img-alt="Bokksu Snack Box Subscription" 13697 aria-label="View image 1 of 10" 13698 aria-current="true" 13699 13700 > 13701 <img 13702 src="//bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square.jpg?v=1777541638&width=160" 13703 loading="lazy" 13704 alt="" 13705 width="76" 13706 height="76" 13707 > 13708 </button><button 13709 type="button" 13710 class="snb-pdp__thumb" 13711 data-snb-thumb 13712 data-index="1" 13713 data-img-src="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_001_Fullcrop_HiRes.jpg?v=1780550983&width=1200" 13714 data-img-alt="Bokksu Snack Box Subscription" 13715 aria-label="View image 2 of 10" 13716 13717 13718 > 13719 <img 13720 src="//bokksu.com/cdn/shop/files/SeasonsOfJapan_Box_Hero_001_Fullcrop_HiRes.jpg?v=1780550983&width=160" 13721 loading="lazy" 13722 alt="" 13723 width="76" 13724 height="76" 13725 > 13726 </button><button 13727 type="button" 13728 class="snb-pdp__thumb" 13729 data-snb-thumb 13730 data-index="2" 13731 data-img-src="//bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_HeroBanner_03_1200x1500_2.jpg?v=1780551296&width=1200" 13732 data-img-alt="Bokksu Snack Box Subscription" 13733 aria-label="View image 3 of 10" 13734 13735 13736 > 13737 <img 13738 src="//bokksu.com/cdn/shop/files/SNB_2505_SOJ_Revamp_HeroBanner_03_1200x1500_2.jpg?v=1780551296&width=160" 13739 loading="lazy" 13740 alt="" 13741 width="76" 13742 height="76" 13743 > 13744 </button><button 13745 type="button" 13746 class="snb-pdp__thumb" 13747 data-snb-thumb 13748 data-index="3" 13749 data-img-src="//bokksu.com/cdn/shop/files/SNB2608_MemoriesofSummer_HeroBanner_780x800_b5940a7b-3814-4069-a6c9-8de5f1104d21.jpg?v=1788502617&width=1200" 13750 data-img-alt="Bokksu Snack Box Subscription" 13751 aria-label="View image 4 of 10" 13752 13753 13754 > 13755 <img 13756 src="//bokksu.com/cdn/shop/files/SNB2608_MemoriesofSummer_HeroBanner_780x800_b5940a7b-3814-4069-a6c9-8de5f1104d21.jpg?v=1788502617&width=160" 13757 loading="lazy" 13758 alt="" 13759 width="76" 13760 height="76" 13761 > 13762 </button><button 13763 type="button" 13764 class="snb-pdp__thumb" 13765 data-snb-thumb 13766 data-index="4" 13767 data-img-src="//bokksu.com/cdn/shop/files/SNB2607_BambooWishesofTanabata_Hero_2000x2000_01.jpg?v=1785902687&width=1200" 13768 data-img-alt="Bokksu Snack Box Subscription" 13769 aria-label="View image 5 of 10" 13770 13771 13772 > 13773 <img 13774 src="//bokksu.com/cdn/shop/files/SNB2607_BambooWishesofTanabata_Hero_2000x2000_01.jpg?v=1785902687&width=160" 13775 loading="lazy" 13776 alt="" 13777 width="76" 13778 height="76" 13779 > 13780 </button><button 13781 type="button" 13782 class="snb-pdp__thumb" 13783 data-snb-thumb 13784 data-index="5" 13785 data-img-src="//bokksu.com/cdn/shop/files/Angled-Hero-Mobile_02168747-e2a4-410d-ba69-f4cd66e540bd.png?v=1789715827&width=1200" 13786 data-img-alt="Bokksu Snack Box Subscription" 13787 aria-label="View image 6 of 10" 13788 13789 13790 > 13791 <img 13792 src="//bokksu.com/cdn/shop/files/Angled-Hero-Mobile_02168747-e2a4-410d-ba69-f4cd66e540bd.png?v=1789715827&width=160" 13793 loading="lazy" 13794 alt="" 13795 width="76" 13796 height="76" 13797 > 13798 </button><button 13799 type="button" 13800 class="snb-pdp__thumb" 13801 data-snb-thumb 13802 data-index="6" 13803 data-img-src="//bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fcd713ce-6049-4f8
138036-9f85-dc3a854162ae.png?v=1778043728&width=1200" 13804 data-img-alt="Bokksu Snack Box Subscription" 13805 aria-label="View image 7 of 10" 13806 13807 13808 > 13809 <img 13810 src="//bokksu.com/cdn/shop/files/Overhead-Hero-_mobile-Header_fcd713ce-6049-4f86-9f85-dc3a854162ae.png?v=1778043728&width=160" 13811 loading="lazy" 13812 alt="" 13813 width="76" 13814 height="76" 13815 > 13816 </button><button 13817 type="button" 13818 class="snb-pdp__thumb" 13819 data-snb-thumb 13820 data-index="7" 13821 data-img-src="//bokksu.com/cdn/shop/files/page2.jpg?v=1778043607&width=1200" 13822 data-img-alt="Bokksu Snack Box Subscription" 13823 aria-label="View image 8 of 10" 13824 13825 13826 > 13827 <img 13828 src="//bokksu.com/cdn/shop/files/page2.jpg?v=177804360
138287&width=160" 13829 loading="lazy" 13830 alt="" 13831 width="76" 13832 height="76" 13833 > 13834 </button><button 13835 type="button" 13836 class="snb-pdp__thumb" 13837 data-snb-thumb 13838 data-index="8" 13839 data-img-src="//bokksu.com/cdn/shop/files/2603-Sakura-Silk-Lounge-2000x2000-SNB_efd4e2d2-a8d5-416e-aa7f-cf270f76acf6.jpg?v=1777541673&width=1200" 13840 data-img-alt="Bokksu Snack Box Subscription" 13841 aria-label="View image 9 of 10" 13842 13843 13844 > 13845 <img 13846 src="//bokksu.com/cdn/shop/files/2603-Sakura-Silk-Lounge-2000x2000-SNB_efd4e2d2-a8d5-416e-aa7f-cf270f76acf6.jpg?v=1777541673&width=160" 13847 loading="lazy" 13848 alt="" 13849 width="76" 13850 height="76" 13851 > 13852 </button><button 13853 type="button" 13854 class="snb-pdp__thumb" 13855 data-snb-thumb 13856 data-index="9" 13857 data-img-src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e780380fb0b949f1a5879de775e58643_8b4e7e54-7888-4c42-aa6b-e7246ecf436e.webp?v=1777541706&width=1200" 13858 data-img-alt="Bokksu Snack Box Subscription" 13859 aria-label="View image 10 of 10" 13860 13861 13862 > 13863 <img 13864 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_e780380fb0b949f1a5879de775e58643_8b4e7e54-7888-4c42-aa6b-e7246ecf436e.webp?v=1777541706&width=160" 13865 loading="lazy" 13866 alt="" 13867 width="76" 13868 height="76" 13869 > 13870 </button></div><button type="button" class="snb-pdp__thumb-arrow" data-snb-thumb-next aria-label="Scroll thumbnails down"> 13871 <svg viewBox="0 0 10 6" fill="none" aria-hidden="true"> 13872 <path d="M1 1L5 5L9 1" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 13873 </svg> 13874 </button></div><div class="snb-pdp__main-image" data-snb-main-image><img 13875 src="//bokksu.com/cdn/shop/files/SNB_Seasons_Hero_Overhead_Square.jpg?v=1777541638&width=1200" 13876 loading="lazy" 13877 alt="Bokksu Snack Box Subscription" 13878 width="1200" 13879 height="1200" 13880 ></div> 13881 </div></div><div class="snb-pdp__info"> 13882 <p class="snb-pdp__preheader">Choose your plan</p> 13883 13884 13885<h2 class="snb-pdp__title">Snack Box Subscription</h2> 13886<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 13887 class="snb-pdp__plan" 13888 data-snb-plan 13889 role="radio" 13890 tabindex="-1" 13891 aria-checked="false"aria-label="12 Months, Best Value, $32.99 per month, Save $84. Includes gifts with purchase: PLUS 1 Genji Pie (2 pc) and 2 CACAOCAT Chocolate Dark." 13892 data-base-label="12 Months, Best Value, $32.99 per month, Save $84" 13893 data-promo-label="Promotion: gifts with purchase, PLUS 1 Genji Pie (2 pc) and 2 CACAOCAT Chocolate Dark." 13894 data-variant-id="42939935326294" 13895 data-selling-plan-id="2094104662" 13896 data-price="$395.88" 13897 data-compare-price="$479.88" 13898 data-save-text="Save $84" 13899 data-billing-note="Billed annually, cancel anytime." 13900 13901 > 13902 <div class="snb-pdp__plan-header"> 13903 <div class="snb-pdp__plan-left"> 13904 <span class="snb-pdp__plan-name">12 Months</span><span class="snb-pdp__plan-badge">Best Value</span></div> 13905 <div class="snb-pdp__plan-right"><span class="snb-pdp__plan-save">Save $84</span>
13906 <span class="snb-pdp__plan-divider" aria-hidden="true"></span><span class="snb-pdp__plan-price" aria-hidden="true">$32.99/mo</span> 13907 <span class="visually-hidden">$32.99 per month</span> 13908 </div> 13909 </div><div class="snb-pdp__promo" data-snb-promo><div class="snb-pdp__promo-image"> 13910 <img 13911 src="//bokksu.com/cdn/shop/files/bokksu_feb26_16_CACAOCAT_Chocolate_Dark_b.jpg?v=1776857270&width=128" 13912 loading="lazy" 13913 alt="gifts with purchase" 13914 width="64" 13915 height="64" 13916 > 13917 </div><div class="snb-pdp__promo-text"> 13918 <p class="snb-pdp__promo-title">gifts with purchase</p><p class="snb-pdp__promo-desc">PLUS 1 Genji Pie (2 pc) and 2 CACAOCAT Chocolate Dark.</p></div></div></div><div 13919 class="snb-pdp__plan snb-pdp__plan--active" 13920 data-snb-plan 13921 role="radio" 13922 tabindex="0" 13923 aria-checked="true"aria-label="6 Months, POPULAR, $33.99 per month, Save $36. Includes gifts with purchase: PLUS 1 Genji Pie (2 pc) and 2 CACAOCAT Chocolate Dark." 13924 data-base-label="6 Months, POPULAR, $33.99 per month, Save $36" 13925 data-promo-label="Promotion: gifts with purchase, PLUS 1 Genji Pie (2 pc) and 2 CACAOCAT Chocolate Dark." 13926 data-variant-id="42939934900310" 13927 data-selling-plan-id="2093940822" 13928 data-price="$203.94" 13929 data-compare-price="$239.94" 13930 data-save-text="Save $36" 13931 data-billing-note="Billed every 6 months, cancel anytime." 13932 13933 > 13934 <div class="snb-pdp__plan-header"> 13935 <div class="snb-pdp__plan-left"> 13936 <span class="snb-pdp__plan-name">6 Months</span><span class="snb-pdp__plan-badge">POPULAR</span></div> 13937 <div class="snb-pdp__plan-right"><span class="snb-pdp__plan-save">Save $36</span> 13938 <span class="snb-pdp__plan-divider" aria-hidden="true"></span><span class="snb-pdp__plan-price" aria-hidden="true">$33.99/mo</span> 13939 <span class="visually-hidden">$33.99 per month</span> 13940 </div> 13941 </div><div class="snb-pdp__promo" data-snb-promo><div class="snb-pdp__promo-image"> 13942 <img 13943 src="//bokksu.com/cdn/shop/files/bokksu_feb26_12_Genji_Pie_b.jpg?v=1776857036&width=128" 13944 loading="lazy" 13945 alt="gifts with purchase" 13946 width="64" 13947 height="64" 13948 > 13949 </div><div class="snb-pdp__promo-text"> 13950 <p class="snb-pdp__promo-title">gifts with purchase</p><p class="snb-pdp__promo-desc">PLUS 1 Genji Pie (2 pc) and 2 CACAOCAT Chocolate Dark.</p></div></div></div><div 13951 class="snb-pdp__plan" 13952 data-snb-plan 13953 role="radio" 13954 tabindex="-1" 13955 aria-checked="false"aria-label="3 Months, $35.99 per month, Save $12. Includes gifts with purchase: PLUS 1 Genji Pie (2 pc) and 2 CACAOCAT Chocolate Dark." 13956 data-base-label="3 Months, $35.99 per month, Save $12" 13957 data-promo-label="Promotion: gifts with purchase, PLUS 1 Genji Pie (2 pc) and 2 CACAOCAT Chocolate Dark." 13958 data-variant-id="42939930902614" 13959 data-selling-plan-id="2093842518" 13960 data-price="$107.97" 13961 data-compare-price="$119.97" 13962 data-save-text="Save $12" 13963 data-billing-note="Billed every 3 months, cancel anytime." 13964 13965 > 13966 <div class="snb-pdp__plan-header"> 13967 <div class="snb-pdp__plan-left"> 13968 <span class="snb-pdp__plan-name">3 Months</span></div> 13969 <div class="snb-pdp__plan-right"><span class="snb-pdp__plan-save">Save $12</span> 13970 <span class="snb-pdp__plan-divider" aria-hidden="true"></span><span class="snb-pdp__plan-price" aria-hidden="true">$35.99/mo</span>
13971 <span class="visually-hidden">$35.99 per month</span> 13972 </div> 13973 </div><div class="snb-pdp__promo" data-snb-promo><div class="snb-pdp__promo-image"> 13974 <img 13975 src="//bokksu.com/cdn/shop/files/bokksu_feb26_11_Genji_Pie_a.jpg?v=1776857024&width=128" 13976 loading="lazy" 13977 alt="gifts with purchase" 13978 width="64" 13979 height="64" 13980 > 13981 </div><div class="snb-pdp__promo-text"> 13982 <p class="snb-pdp__promo-title">gifts with purchase</p><p class="snb-pdp__promo-desc">PLUS 1 Genji Pie (2 pc) and 2 CACAOCAT Chocolate Dark.</p></div></div></div><div 13983 class="snb-pdp__plan" 13984 data-snb-plan 13985 role="radio" 13986 tabindex="-1" 13987 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." 13988 data-base-label="1 Month, $39.99 per month" 13989 data-promo-label="Promotion: gifts with purchase, Upgrade to a 3, 6, or 12-month plan to receive exclusive gifts." 13990 data-variant-id="42939935850582" 13991 data-selling-plan-id="2093514838" 13992 data-price="$39.99" 13993 data-compare-price="" 13994 data-save-text="" 13995 data-billing-note="Billed monthly, cancel anytime." 13996 13997 > 13998 <div class="snb-pdp__plan-header"> 13999 <div class="snb-pdp__plan-left"> 14000 <span class="snb-pdp__plan-name">1 Month</span></div> 14001 <div class="snb-pdp__plan-right"><span class="snb-pdp__plan-price" aria-hidden="true">$39.99/mo</span> 14002 <span class="visually-hidden">$39.99 per month</span> 14003 </div> 14004 </div><div class="snb-pdp__promo" data-snb-promo><div class="snb-pdp__promo-image"> 14005 <img 14006 src="//bokksu.com/cdn/shop/files/ChatGPT-2511_Xmas_Wrapping_3.png?v=1778486027&width=128" 14007 loading="lazy" 14008 alt="gifts with purchase" 14009 width="64" 14010 height="64" 14011 > 14012 </div><div class="snb-pdp__promo-text"> 14013 <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__checkout"> 14014 <div class="snb-pdp__pricing"> 14015 <div class="snb-pdp__pricing-left"> 14016 <span class="snb-pdp__pricing-label">Total:</span> 14017 <span class="snb-pdp__pricing-save" data-snb-pricing-save> 14018 Save $36 14019 </span> 14020 </div> 14021 <div class="snb-pdp__pricing-right"> 14022 <div class="snb-pdp__pricing-row"> 14023 <span class="snb-pdp__price" data-snb-total-price> 14024 $203.94 14025 </span> 14026 <span class="snb-pdp__compare-price" data-snb-compare-price> 14027 $239.94 14028 </span> 14029 </div> 14030 <span class="snb-pdp__billing-note" data-snb-billing-note> 14031 Billed every 6 months, cancel anytime. 14032 </span> 14033 </div> 14034 </div> 14035 14036 <div class="snb-pdp__form"> 14037 <button 14038 type="button" 14039 class="btn btn-custom btn-orange-bg snb-pdp__cta" 14040 data-snb-add-to-cart 14041 aria-busy="false" 14042 14043 > 14044 Select this Plan 14045 </button> 14046 <div class="visually-hidden" data-snb-status aria-live="polite" aria-atomic="true"></div> 14047 </div> 14048 </div><hr class="snb-pdp__divider"> 14049<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"> 14050 <img 14051 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_ab9fda4723b448e6854df90186c75da0.png?v=1773117736&width=50" 14052 loading="lazy" 14053 alt="" 14054 width="25" 14055 height="25" 14056 > 14057 </div><span class="snb-pdp__usp-text">20+ Japan-exclusive snacks</span> 14058 </div><div class="snb-pdp__usp" ><div class="snb-pdp__usp-icon"> 14059 <img 14060 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_fe8ec12a8ae547f39c71e48c
14060d2191849.png?v=1773117801&width=50" 14061 loading="lazy" 14062 alt="" 14063 width="25" 14064 height="25" 14065 > 14066 </div><span class="snb-pdp__usp-text">20 to 24-page Culture Guide</span> 14067 </div><div class="snb-pdp__usp" ><div class="snb-pdp__usp-icon"> 14068 <img 14069 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_b30ec418f2d3472bb3ad400b0d6b69ad.png?v=1773117735&width=50" 14070 loading="lazy" 14071 alt="" 14072 width="25" 14073 height="25" 14074 > 14075 </div><span class="snb-pdp__usp-text">New themed curation every month</span> 14076 </div><div class="snb-pdp__usp" ><div class="snb-pdp__usp-icon"> 14077 <img 14078 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_d4b28eded79a47828bae28b497f49244.png?v=1773117736&width=50" 14079 loading="lazy" 14080 alt="" 14081 width="25" 14082 height="25" 14083 > 14084 </div><span class="snb-pdp__usp-text">Support Japanese family businesses</span> 14085 </div><div class="snb-pdp__usp" ><div class="snb-pdp__usp-icon"> 14086 <img 14087 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_38de99aead68404aa5c8fc91b1d74d8d.png?v=1773117736&width=50" 14088 loading="lazy" 14089 alt="" 14090 width="25" 14091 height="25" 14092 > 14093 </div><span class="snb-pdp__usp-text">Great balance of sweet & savory flavors</span> 14094 </div><div class="snb-pdp__usp" ><div class="snb-pdp__usp-icon"> 14095 <img 14096 src="//bokksu.com/cdn/shop/files/assets_81be4429d33e40d388a5b4ad887fc3f3_d4b28eded79a47828bae28b497f49244_1.png?v=1773117736&width=50" 14097 loading="lazy" 14098 alt="" 14099 width="25" 14100 height="25" 14101 > 14102 </div><span class="snb-pdp__usp-text">Limited-Time Bonus: Special Gifts added to your new Subscription (3M/6M/12M)</span> 14103 </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 1 Genji Pie (2 pc) and 2 CACAOCAT Chocolate Dark.</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> 14104</section> 14105
14106<script> 14107 (function() { 14108 var section = document.querySelector('[data-section-id="template--17749318303830__snb_subs_panel_3rfYyF"]') 14109 if (!section) return 14110 14111 function initSection() { 14112 var plans = section.querySelectorAll('[data-snb-plan]') 14113 var totalPrice = section.querySelector('[data-snb-total-price]') 14114 var comparePrice = section.querySelector('[data-snb-compare-price]') 14115 var pricingSave = section.querySelector('[data-snb-pricing-save]') 14116 var billingNote = section.querySelector('[data-snb-billing-note]') 14117 var addToCartBtn = section.querySelector('[data-snb-add-to-cart]') 14118 var statusRegion = section.querySelector('[data-snb-status]') 14119 var activePromoWrap = section.querySelector('[data-snb-active-promo]') 14120 var activePromoText = section.querySelector('[data-snb-active-promo-text]') 14121 var activePromoCopy = section.querySelector('[data-snb-active-promo-copy]') 14122 var activePromoCodeText = section.querySelector('[data-snb-active-promo-code-text]') 14123 var thumbs = section.querySelectorAll('[data-snb-thumb]') 14124 var mainImage = section.querySelector('[data-snb-main-image]') 14125 var thumbNextBtn = section.querySelector('[data-snb-thumb-next]') 14126 var thumbScroller = section.querySelector('[data-snb-thumbs]') 14127 14128 // Lazy load fade-in 14129 function handleImageLoad(img) { 14130 if (img.complete && img.naturalWidth > 0) { 14131 img.classList.add('snb-pdp--loaded') 14132 } else { 14133 img.addEventListener('load', function() { 14134 img.classList.add('snb-pdp--loaded') 14135 }) 14136 } 14137 } 14138 14139 section.querySelectorAll('.snb-pdp__carousel-slide img, .snb-pdp__main-image img').forEach(handleImageLoad) 14140 14141 // Track active plan variant + selling plan 14142 var activePlan = { 14143 variantId: '', 14144 sellingPlanId: '' 14145 } 14146 14147 function setActivePlan(planEl) { 14148 activePlan.variantId = planEl.getAttribute('data-variant-id') || '' 14149 activePlan.sellingPlanId = planEl.getAttribute('data-selling-plan-id') || '' 14150 } 14151 14152 function selectPlan(plan) { 14153 plans.forEach(function(p) { 14154 p.classList.remove('snb-pdp__plan--active') 14155 p.setAttribute('aria-checked', 'false') 14156 p.setAttribute('tabindex', '-1') 14157 /* Reset to base label (no promo) for unselected plans */ 14158 var baseLabel = p.getAttribute('data-base-label') 14159 if (baseLabel) p.setAttribute('aria-label', baseLabel) 14160 }) 14161 plan.classList.add('snb-pdp__plan--active') 14162 plan.setAttribute('aria-checked', 'true') 14163 plan.setAttribute('tabindex', '0') 14164 /* Add promo to aria-label only for the selected plan */ 14165 var baseLabel = plan.getAttribute('data-base-label') || '' 14166 var promoLabel = plan.getAttribute('data-promo-label') || '' 14167 plan.setAttribute('aria-label', promoLabel ? baseLabel + ', ' + promoLabel : baseLabel) 14168 plan.focus() 14169 setActivePlan(plan) 14170 14171 var price = plan.getAttribute('data-price') 14172 var compare = plan.getAttribute('data-compare-price') 14173 var save = plan.getAttribute('data-save-text') 14174 var note = plan.getAttribute('data-billing-note') 14175 14176 if (totalPrice && price) totalPrice.textContent = price 14177 if (comparePrice) { 14178 comparePrice.textContent = compare || '' 14179 comparePrice.style.display = compare ? '' : 'none' 14180 } 14181 if (pricingSave) { 14182 pricingSave.textContent = save || '' 14183 pricingSave.style.display = save ? '' : 'none' 14184 } 14185 if (billingNote && note) billingNote.textContent = note 14186 14187 /* Update accessible promo section outside radiogroup */ 14188 var promo = plan.querySelector('[data-snb-promo]') 14189 if (promo && activePromoWrap) { 14190 var promoTitle = promo.querySelector('.snb-pdp__promo-title') 14191 var promoDesc = promo.querySelector('.snb-pdp__promo-desc') 14192 var promoCodeBtn = plan.querySelector('[data-snb-copy-code]') 14193 var promoMsg = '' 14194 if (promoTitle) promoMsg += promoTitle.textContent 14195 if (promoDesc) promoMsg += '. ' + promoDesc.textContent 14196 if (activePromoText) activePromoText.textContent = promoMsg 14197 activePromoWrap.style.display = '' 14198 if (promoCodeBtn && activePromoCopy) { 14199 var code = promoCodeBtn.getAttribute('data-snb-copy-code') 14200 activePromoCopy.setAttribute('aria-label', 'Copy discount code ' + code) 14201 activePromoCopy.setAttribute('data-snb-copy-code', code) 14202 if (activePromoCodeText) activePromoCodeText.textContent = code 14203 activePromoCopy.style.display = '' 14204 } else if (activePromoCopy) { 14205 activePromoCopy.style.display = 'none' 14206 } 14207 } else if (activePromoWrap) { 14208 activePromoWrap.style.display = 'none' 14209 } 14210 } 14211 14212 // Init from first active plan â add promo to its label 14213 var firstActive = section.querySelector('.snb-pdp__plan--active') 14214 if (firstActive) {
14215 setActivePlan(firstActive) 14216 var baseLabel = firstActive.getAttribute('data-base-label') || '' 14217 var promoLabel = firstActive.getAttribute('data-promo-label') || '' 14218 if (promoLabel) firstActive.setAttribute('aria-label', baseLabel + ', ' + promoLabel) 14219 /* Also populate the accessible promo area */ 14220 var promo = firstActive.querySelector('[data-snb-promo]') 14221 if (promo && activePromoWrap) { 14222 var pt = promo.querySelector('.snb-pdp__promo-title') 14223 var pd = promo.querySelector('.snb-pdp__promo-desc') 14224 var pc = firstActive.querySelector('[data-snb-copy-code]') 14225 if (pt && activePromoText) activePromoText.textContent = pt.textContent + (pd ? '. ' + pd.textContent : '') 14226 activePromoWrap.style.display = '' 14227 if (pc && activePromoCopy) { 14228 var code = pc.getAttribute('data-snb-copy-code') 14229 activePromoCopy.setAttribute('aria-label', 'Copy discount code ' + code) 14230 activePromoCopy.setAttribute('data-snb-copy-code', code) 14231 if (activePromoCodeText) activePromoCodeText.textContent = code 14232 activePromoCopy.style.display = '' 14233 } 14234 } 14235 } 14236 14237 // Plan selection â click 14238 plans.forEach(function(plan) { 14239 plan.addEventListener('click', function() { 14240 selectPlan(plan) 14241 }) 14242 }) 14243 14244 // Plan selection â keyboard (arrow keys + space/enter for radiogroup) 14245 var plansContainer = section.querySelector('[data-snb-plans]') 14246 if (plansContainer) { 14247 plansContainer.addEventListener('keydown', function(e) { 14248 var planArray = Array.prototype.slice.call(plans) 14249 var currentIndex = planArray.indexOf(document.activeElement) 14250 if (currentIndex === -1) return 14251 14252 var nextIndex = -1 14253 if (e.key === 'ArrowDown' || e.key === 'ArrowRight') { 14254 e.preventDefault() 14255 nextIndex = (currentIndex + 1) % planArray.length 14256 } else if (e.key === 'ArrowUp' || e.key === 'ArrowLeft') { 14257 e.preventDefault() 14258 nextIndex = (currentIndex - 1 + planArray.length) % planArray.length 14259 } else if (e.key === ' ' || e.key === 'Enter') { 14260 e.preventDefault() 14261 selectPlan(planArray[currentIndex]) 14262 return 14263 } 14264 14265 if (nextIndex !== -1) { 14266 selectPlan(planArray[nextIndex]) 14267 } 14268 }) 14269 } 14270 14271 // Announce status to screen readers 14272 function announceStatus(message) { 14273 if (statusRegion) statusRegion.textContent = message 14274 } 14275 14276 // AJAX Add to Cart 14277 if (addToCartBtn) { 14278 addToCartBtn.addEventListener('click', function() { 14279 if (addToCartBtn.disabled) return 14280 if (!activePlan.variantId) return 14281 14282 var originalText = addToCartBtn.textContent 14283 addToCartBtn.disabled = true 14284 addToCartBtn.setAttribute('aria-busy', 'true') 14285 addToCartBtn.textContent = 'Adding...' 14286 announceStatus('Adding item to cart') 14287 14288 var body = { 14289 items: [{ 14290 id: parseInt(activePlan.variantId, 10), 14291 quantity: 1 14292 }] 14293 } 14294 14295 if (activePlan.sellingPlanId) { 14296 body.items[0].selling_plan = parseInt(activePlan.sellingPlanId, 10) 14297 } 14298 14299 fetch('/cart/add.js', { 14300 method: 'POST', 14301 body: JSON.stringify(body), 14302 credentials: 'same-origin', 14303 headers: { 14304 'Content-Type': 'application/json' 14305 } 14306 }) 14307 .then(function(response) { 14308 return response.json() 14309 }) 14310 .then(function(data) { 14311 if (data.status && data.status === 422) { 14312 var errMsg = data.description || 'Error adding to cart' 14313 addToCartBtn.textContent = errMsg 14314 announceStatus(errMsg) 14315 addToCartBtn.setAttribute('aria-busy', 'false') 14316 setTimeout(function() { 14317 addToCartBtn.textContent = originalText 14318 addToCartBtn.disabled = false 14319 }, 3000) 14320 return 14321 } 14322 14323 addToCartBtn.textContent = 'Added!' 14324 addToCartBtn.setAttribute('aria-busy', 'false') 14325 announceStatus('Item added to cart') 14326 14327 // Dispatch theme event to open cart drawer 14328 document.dispatchEvent( 14329 new CustomEvent('ajaxProduct:added', { 14330 detail: { product: data, addToCartBtn: addToCartBtn } 14331 }) 14332 ) 14333 14334 setTimeout(function() { 14335 addToCartBtn.textContent = originalText 14336 addToCartBtn.disabled = false 14337 }, 2000) 14338 }) 14339 .catch(function() { 14340 addToCartBtn.textContent = 'Error - try again' 14341 addToCartBtn.setAttribute('aria-busy', 'false') 14342 announceStatus('Error adding to cart, please try again') 14343 setTimeout(function() { 14344 addToCartBtn.textContent = originalText 14345 addToCartBtn.disabled = false 14346 }, 3000) 14347 }) 14348 }) 14349 } 14350 14351 // Mobile carousel with dots 14352 var carousel = section.querySelector('[data-snb-carousel]') 14353 var dots = section.querySelectorAll('[data-snb-dot]') 14354 var carouselSlides = carousel ? carousel.querySelectorAll('.snb-pdp__carousel-slide') : [] 14355 var scrollTimer = null 14356 14357 // a11y: APG â sync aria-hidden on slides + aria-current on dots with scroll position. 14358 // Loop-safe: value guards on each setAttribute, so MutationObservers on parents don't thrash. 14359 function syncCarouselA11y(activeIndex) { 14360 for (var i = 0; i < carouselSlides.length; i++) { 14361 var ariaTarget = i === activeIndex ? 'false' : 'true' 14362 if (carouselSlides[i].getAttribute('aria-hidden') !== ariaTarget) { 14363 carouselSlides[i].setAttribute('aria-hidden', ariaTarget) 14364 } 14365 }
14366 dots.forEach(function(d, i) { 14367 var isActive = i === activeIndex 14368 d.classList.toggle('snb-pdp__dot--active', isActive) 14369 if (isActive) { 14370 if (d.getAttribute('aria-current') !== 'true') d.setAttribute('aria-current', 'true') 14371 } else if (d.hasAttribute('aria-current')) { 14372 d.removeAttribute('aria-current') 14373 } 14374 }) 14375 } 14376 14377 if (carousel && dots.length > 0) { 14378 carousel.addEventListener('scroll', function() { 14379 if (scrollTimer) clearTimeout(scrollTimer) 14380 scrollTimer = setTimeout(function() { 14381 var slideWidth = carousel.firstElementChild 14382 ? carousel.firstElementChild.offsetWidth 14383 : 1 14384 var activeIndex = Math.round(carousel.scrollLeft / slideWidth) 14385 syncCarouselA11y(activeIndex) 14386 }, 50) 14387 }) 14388 14389 dots.forEach(function(dot) { 14390 dot.addEventListener('click', function() { 14391 var index = parseInt(dot.getAttribute('data-snb-dot'), 10) 14392 var slideWidth = carousel.firstElementChild 14393 ? carousel.firstElementChild.offsetWidth 14394 : 0 14395 carousel.scrollTo({ left: slideWidth * index, behavior: 'smooth' }) 14396 }) 14397 }) 14398 } 14399 14400 // Desktop thumbnail gallery 14401 var useCustomImages = true 14402 thumbs.forEach(function(thumb) { 14403 thumb.addEventListener('click', function() { 14404 var index = parseInt(thumb.getAttribute('data-index'), 10) 14405 thumbs.forEach(function(t) { 14406 t.classList.remove('snb-pdp__thumb--active') 14407 if (t.hasAttribute('aria-current')) t.removeAttribute('aria-current') 14408 }) 14409 thumb.classList.add('snb-pdp__thumb--active') 14410 thumb.setAttribute('aria-current', 'true') 14411 14412 if (mainImage) { 14413 var img = mainImage.querySelector('img') 14414 if (img) { 14415 img.classList.remove('snb-pdp--loaded') 14416 if (useCustomImages && thumb.hasAttribute('data-img-src')) { 14417 img.src = thumb.getAttribute('data-img-src') 14418 img.alt = thumb.getAttribute('data-img-alt') || '' 14419 } else { 14420 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","width":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}] 14421 if (media[index]) { 14422 var src = media[index].src || media[index].preview_image.src 14423 img.src = src.replace(/(\.[a-z]+)\?/, '$1?width=1200&') 14424 img.alt = media[index].alt || 'Bokksu Snack Box Subscription' 14425 } 14426 } 14427 handleImageLoad(img) 14428 } 14429 } 14430 }) 14431 }) 14432 14433 // Thumb scroll 14434 if (thumbNextBtn && thumbScroller) { 14435 thumbNextBtn.addEventListener('click', function() { 14436 thumbScroller.scrollBy({ top: 95, behavior: 'smooth' }) 14437 }) 14438 } 14439 14440 // Copy promo code (event delegation for dynamic buttons) 14441 section.addEventListener('click', function(e) { 14442 var btn = e.target.closest('[data-snb-copy-code]') 14443 if (!btn) return 14444 e.stopPropagation() 14445 var code = btn.getAttribute('data-snb-copy-code') 14446 if (navigator.clipboard) { 14447 navigator.clipboard.writeText(code) 14448 var span = btn.querySelector('span') 14449 if (span) { 14450 var original = span.textContent 14451 span.textContent = 'Copied!' 14452 announceStatus('Discount code ' + code + ' copied to clipboard') 14453 setTimeout(function() { span.textContent = original }, 2000) 14454 } 14455 } 14456 }) 14457 } // end initSection 14458 14459 initSection() 14460 })() 14461</script>
14461 14462</div> 14463 </main><!-- BEGIN sections: footer-group --> 14464<div id="shopify-section-sections--17749310603350__footer" class="shopify-section shopify-section-group-footer-group"> 14465 14466 14467<div class="footer__section footer__section--border"> 14468 <div class="page-width"> 14469 <div class="footer__newsletter"><div class="footer__subscribe rte rte--nomargin footer-subscribe-text"> 14470 <p>Sign up & get $5 off your first order + exclusive deals!</p> 14471 </div></div> 14472 </div> 14473 </div> 14474<footer class="site-footer bokksu-footer" data-section-id="sections--17749310603350__footer" data-section-type="footer-section" role="contentinfo"> 14475 <div id="FooterMenus" class="footer__section footer__section--menus"> 14476 <div class="page-width"> 14477 <div class="footer__blocks"> 14478 14479 <div 14480 14481 class="footer__block block__contact" 14482 data-type="contact" 14483 > 14484 <div class="footer__mobile-section-without-border SocialAndLogo"> 14485 <div class="footer__blocks--mobile SocialAndLogo"> 14486 <div class="footer__block--mobile "> 14487 <div class="footer__title"> 14488 <img 14489 width="60px" 14490 src="https://cdn.shopify.com/s/files/1/0715/7101/3829/files/BokksuBrand_Logo_LanternMark_Outline_White.png?v=1749809784?format=webp&width=100" 14491 alt="Bokksu Premium Snack Boxes" 14492 > 14493 </div> 14494 14495 <ul class="footer__menu footer__menu--underline"></ul> 14496 </div><div class="footer__block--mobile footer-block-mobile-social"> 14497 14498 <ul class="no-bullets social-icons footer__social" aria-label="Social media links"><li> 14499 <a target="_blank" rel="noopener" href="https://instagram.com/bokksu" title="Bokksu Snack Box on Instagram"> 14500 <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> 14501 <span class="icon__fallback-text">Instagram</span> 14502 </a> 14503 </li><li> 14504 <a target="_blank" rel="noopener" href="https://www.facebook.com/bokksu" title="Bokksu Snack Box on Facebook"> 14505 <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>
14506 <span class="icon__fallback-text">Facebook</span> 14507 </a> 14508 </li><li> 14509 <a target="_blank" rel="noopener" href="https://www.youtube.com/@Bokksu" title="Bokksu Snack Box on YouTube"> 14510 <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> 14511 <span class="icon__fallback-text">YouTube</span> 14512 </a> 14513 </li><li> 14514 <a target="_blank" rel="noopener" href="https://www.tiktok.com/@bokksu" title="Bokksu Snack Box on TikTok"> 14515 <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> 14516 <span class="icon__fallback-text">TikTok</span> 14517 </a> 14518 </li></ul> 14519 14520 14521 14522 </div></div> 14523 </div> 14524 <style> 14525 .SocialAndLogo { 14526 display: flex; 14527 flex-direction: column; 14528 justify-content: space-between; 14529 height: 100%; 14530 } 14531 </style> 14532 14533 14534</div> 14535 14536 <div 14537 14538 class="footer__block block__menu" 14539 data-type="menu" 14540 > 14541<nav aria-label="Brands"> 14542 <div class="footer__title hero__top-subtitle footer-margin-bottom" id="footer-menu-title-footer-0"> 14543 Brands 14544 </div> 14545 14546 <ul role="list" class="footer__menu"><li> 14547 <a href="https://bokksuboutique.com">Bokksu Boutique</a> 14548 </li><li> 14549 <a href="https://bokksumarket.com">Bokksu Market</a> 14550 </li></ul> 14551 </nav> 14552<style> 14553 .footer__menu .pieeye-links { 14554 display: inline-block; 14555 padding: 4px 0; 14556 max-width: 170px; 14557 } 14558 14559 .footer__menu .pieeye-links:hover { 14560 text-decoration: underline; 14561 } 14562 14563 .site-footer .pieeye-links { 14564 color: #ffffff; 14565 color: var(--colorFooterText); 14566 } 14567</style> 14568</div> 14569 14570 <div 14571 14572 class="footer__block block__menu" 14573 data-type="menu" 14574 > 14575<nav aria-label="INFORMATION"> 14576 <div class="footer__title hero__top-subtitle footer-margin-bottom" id="footer-menu-title-8e428145-e5f4-4b31-8787-fb5edbc644fc"> 14577 INFORMATION 14578 </div> 14579 14580 <ul role="list" class="footer__menu"><li> 14581 <a href="/pages/about">About Us</a> 14582 </li><li> 14583 <a href="/pages/bokksu-offers-discounts-coupons">Today's Offers</a> 14584 </li><li> 14585 <a href="/pages/rewards">Refer a Friend</a> 14586 </li><li> 14587 <a href="https://bokksuboutique.com/pages/corporate-gifts">Corporate Gifts</a> 14588 </li><li> 14589 <a href="/pages/rewards">Rewards</a> 14590 </li><li> 14591 <a href="/blogs/news">Blog</a> 14592 </li><li> 14593 <a href="/pages/careers">Careers</a> 14594 </li></ul> 14595 </nav> 14596<style> 14597 .footer__menu .pieeye-links { 14598 display: inline-block; 14599 padding: 4px 0; 14600 max-width: 170px; 14601 } 14602 14603 .footer__menu .pieeye-links:hover { 14604 text-decoration: underline; 14605 } 14606 14607 .site-footer .pieeye-links { 14608 color: #ffffff; 14609 color: var(--colorFooterText); 14610 } 14611</style> 14612</div> 14613 14614 <div 14615 14616 class="footer__block block__menu" 14617 data-type="menu" 14618 > 14619<nav aria-label="Support"> 14620 <div class="footer__title hero__top-subtitle footer-margin-bottom" id="footer-menu-title-05398a65-6873-4bd2-8114-894b394283c4"> 14621 Support 14622 </div> 14623 14624 <ul role="list" class="footer__menu"><li> 14625 <a href="/pages/contact-us">Contact Us</a> 14626 </li><li> 14627 <a href="/pages/community">Community</a> 14628 </li><li> 14629 <a href="/pages/privacy-policy-with-ccpa">Privacy Policy</a> 14630 </li><li> 14631 <a href="/pages/terms-conditions">Terms</a> 14632 </li><li> 14633 <a href="/pages/faq">FAQ</a> 14634 </li><li> 14635 <a href="/pages/accessibility-statement">Accessibility Statement</a> 14636 </li></ul> 14637 </nav><div class="footer__block--mobile footer-block-mobile-support-social"> 14638 14639 <ul class="no-bullets social-icons footer__social" aria-label="Social media links"><li> 14640 <a target="_blank" rel="noopener" href="https://instagram.com/bokksu" title="Bokksu Snack Box on Instagram"> 14641 <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-.
14641075 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> 14642 <span class="icon__fallback-text">Instagram</span> 14643 </a> 14644 </li><li> 14645 <a target="_blank" rel="noopener" href="https://www.facebook.com/bokksu" title="Bokksu Snack Box on Facebook"> 14646 <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> 14647 <span class="icon__fallback-text">Facebook</span> 14648 </a> 14649 </li><li> 14650 <a target="_blank" rel="noopener" href="https://www.youtube.com/@Bokksu" title="Bokksu Snack Box on YouTube"> 14651 <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> 14652 <span class="icon__fallback-text">YouTube</span> 14653 </a> 14654 </li><li> 14655 <a target="_blank" rel="noopener" href="https://www.tiktok.com/@bokksu" title="Bokksu Snack Box on TikTok"> 14656 <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> 14657 <span class="icon__fallback-text">TikTok</span> 14658 </a> 14659 </li></ul> 14660 14661 14662 14663 </div> 14664<style> 14665 .footer__menu .pieeye-links { 14666 display: inline-block; 14667 padding: 4px 0; 14668 max-width: 170px; 14669 } 14670 14671 .footer__menu .pieeye-links:hover { 14672 text-decoration: underline; 14673 } 14674 14675 .site-footer .pieeye-links { 14676 color: #ffffff; 14677 color: var(--colorFooterText); 14678 } 14679</style> 14680</div> 14681 14682 <div 14683 14684 class="footer__block block__payment" 14685 data-type="payment" 14686 > 14687 14688<div class="footer__mobile-section PayementAndKlaviyo"> 14689 <!-- 14690 <div> 14691 <div class="footer__title KlaviyoMailinTitle">join our mailing list</div> 14692 <div class="KlaviyoMailinSubTitle">sign up to get exclusive offers,the latest snack trends, and more!</div> 14693 <div class="klaviyo-form-JZT2sH"></div> 14694 </div> 14695 --> 14696 <div class="footer__blocks--mobile"> 14697 <div class="main_contact_footer"></div><div class="footer__block--mobile"> 14698 <div class="footer__title accept-payments"> 14699 We accept 14700 </div> 14701 <ul class="inline-list payment-icons"><li class="icon--payment"> 14702 <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-.
1470203.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> 14703 14704 </li><li class="icon--payment"> 14705 <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> 14706 14707 </li><li class="icon--payment"> 14708 <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
147081.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> 14709 14710 </li><li class="icon--payment"> 14711 <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> 14712 </li><li class="icon--payment"> 14713 <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> 14714 </li><li class="icon--payment"> 14715 <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.
1471506zM23.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> 14716 14717 </li><li class="icon--payment"> 14718 <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> 14719 14720 </li><li class="icon--payment"> 14721 <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
147210-.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> 14722 </li><li class="icon--payment"> 14723 <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> 14724 14725 </li><li class="icon--payment"> 14726 <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
1472616.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> 14727 14728 </li></ul> 14729 </div></div> 14730 </div> 14731 14732 <div id="main_popup" aria-hidden="true" inert> 14733 <div class="popup_align"> 14734 <div class="popup_close"> 14735 <img src="//bokksu.com/cdn/shop/t/3/assets/close.svg?v=88995623347698921431751964582" class="img-block" alt="close"> 14736 </div> 14737 <div class="popup_header"> 14738 <img src="//bokksu.com/cdn/shop/t/3/assets/logo.svg?v=117790338284208930901751964576" class="img-block" alt="logo"> 14739 </div> 14740 <div class="popup_about"> 14741 <p class="h3">Text us</p> 14742 <p> 14743 By signing up via text, you agree to receive recurring automated promotional and personalized marketing text 14744 messages (e.g. cart reminders) from Bokksu at the cell number used when signing up. Consent is not a condition 14745 of any purchase. Reply HELP for help and STOP to cancel. Msg frequency varies. Msg & data rates may apply. View 14746 <a href="http://attn.tv/bokksu/terms.html" aria-label="SMS terms and conditions">Terms</a> & 14747 <a href="https://attnl.tv/p/pCu" aria-label="SMS privacy policy">Privacy Policy</a>. 14748 </p> 14749 <p> 14750 Our text for support service is available for the US. We are here to assist with general FAQ and questions, but 14751 for any issues related to your account, cancellation, refunds, orders and account updates, please create a 14752 support ticket at https://bokksu.com/pages/contact-us. 14753 </p> 14754 </div> 14755 <div class="contact_popup"> 14756 <a href="sms:20126?&body=Hello" aria-label="Text HELLO to 20126 for support and offers"> 14757 <p class="h4"> 14758 Text HELLO to 20126 for support <br> 14759 & to get offers via text. 14760 </p> 14761 <div class="contact_img"> 14762 <img src="//bokksu.com/cdn/shop/t/3/assets/phone.svg?v=66969348285319116291751964578" class="img-block" alt="phone"> 14763 </div> 14764 </a> 14765 </div> 14766 </div> 14767 </div> 14768 14769 <div class="overlay_popup_custom"></div> 14770 14771 <style> 14772 .PayementAndKlaviyo { 14773 display: flex; 14774 flex-direction: column; 14775 justify-content: space-between; 14776 height: 100%; 14777 } 14778 .shop-address{ 14779 color: #FFF; 14780font-family: Lato; 14781font-size: 12px; 14782font-style: normal; 14783font-weight: 400; 14784line-height: 125%; 14785 } 14786 </style> 14787 14788 14789</div></div> 14790 </div> 14791 </div> 14792 14793 <div class="footer__section"> 14794 <div class="page-width text-center small--text-left"> 14795 <nav class="footer__base-links" aria-label="Legal and policies"><span> 14796 © 2026 14797Bokksu Inc. 14798</span><a href="https://bokksuboutique.com">Bokksu Boutique</a><a href="https://bokksumarket.com">Bokksu Market</a></nav> 14799 </div> 14800 </div> 14801 </footer> 14802 14803 14804 14805 14806 14807 14808
14808<script type="application/ld+json"> 14809 { 14810 "@context": "https://schema.org", 14811 "@type": "Organization", 14812 "name": "Bokksu", 14813 "legalName" : "Bokksu", 14814 "url": "https://www.bokksu.com/", 14815 "logo": "https://cdn.shopify.com/s/files/1/1083/2612/files/BokksuSnackBox_Logo_Horizontal_Filled_Orange_140x.png?v=1665613822", 14816 "sameAs": [ 14817 "https://www.instagram.com/bokksu/", 14818 "https://www.facebook.com/bokksu", 14819 "https://www.youtube.com/@Bokksu", 14820 "https://www.tiktok.com/@bokksu" 14821 ], 14822 "contactPoint": { 14823 "@type": "ContactPoint", 14824 "contactType": "customer support", 14825 "telephone": "Service Phone Number", // Please fill in the service phone number 14826 "email": "[email protected]" // Please confirm your contact email 14827 }, 14828 "potentialAction": { 14829 "@type": "SearchAction", 14830 "target": "https://www.bokksu.com/search/node?keys={search_term_string}", 14831 "query-input": "required name=search_term_string" 14832 } 14833 } 14834 </script>
14834 14835 14836 14837 14838 <style> 14839 14840 14841@media only screen and (max-width:960px) { 14842.footer-promotions .grid__item { 14843 margin-bottom: 32px 14844} 14845 14846.footer-promotions .grid__item:last-child { 14847 margin-bottom: 0; 14848} 14849} 14850 14851.footer-promotion { 14852width: 100%; 14853text-align: center; 14854padding: 22px; 14855border-radius: var(--roundness); 14856overflow: hidden 14857} 14858 14859@media only screen and (min-width:961px) { 14860 14861.footer-promotion { 14862 padding: 30px 14863} 14864} 14865 14866.footer-promotion .scheme-image { 14867border-radius: calc(var(--roundness) + 2px); 14868} 14869 14870.footer-promotion[class*=color-scheme-]:not(.color-scheme-none) .btn { 14871border: 0; 14872} 14873 14874.footer__grid-image { 14875display: block; 14876text-align: center; 14877margin-bottom: 17px 14878} 14879 14880@media only screen and (min-width:961px) { 14881 14882.footer__grid-image { 14883 margin-bottom: 20px 14884} 14885} 14886 14887.footer__grid-image img { 14888display: block; 14889} 14890 14891.site-footer { 14892font-size: var(--typeBaseSize); 14893background-color: #3f1107 14894; 14895background-color: var(--colorFooter); 14896color: #ffffff 14897; 14898color: var(--colorFooterText) 14899} 14900 14901.site-footer a { 14902color: #ffffff 14903; 14904color: var(--colorFooterText); 14905} 14906 14907.site-footer .faux-select { 14908font-size: calc(var(--typeBaseSize) - 1px); 14909min-width: 120px; 14910} 14911 14912.footer__section { 14913padding: 30px 0; 14914border-top: 1px solid; 14915border-top-color: #e8e8e1 14916; 14917border-top-color: var(--colorBorder); 14918background-color: var(--colorFooter); 14919 14920} 14921 14922.bokksu-store .footer__section { 14923 border-top-color: transparent; 14924} 14925 14926.site-footer .footer__section { 14927border-top-color: #f2eee7 14928; 14929border-top-color: var(--colorFooterBorder) 14930} 14931 14932@media only screen and (min-width:961px) { 14933.footer__section--menus { 14934 padding-top: 50px; 14935} 14936} 14937 14938@media only screen and (max-width:960px) { 14939.footer__mobile-section { 14940 margin-top: 20px; 14941 margin-left: -40px; 14942 margin-left: calc(var(--pageWidthPadding)*-1); 14943 margin-right: -40px; 14944 margin-right: calc(var(--pageWidthPadding)*-1); 14945 padding: 20px var(--pageWidthPadding) 0; 14946 border-top: 1px solid; 14947 border-top-color: #f2eee7 14948 ; 14949 border-top-color: var(--colorFooterBorder); 14950} 14951 14952.footer__mobile-section-without-border { 14953 margin-left: -40px; 14954 margin-left: calc(var(--pageWidthPadding)*-1); 14955 margin-right: -40px; 14956 margin-right: calc(var(--pageWidthPadding)*-1); 14957 padding: 0 35px 53px; 14958} 14959} 14960 14961.footer__title { 14962margin-bottom: 15px; 14963font-weight: 700; 14964font-size: var(--typeBaseSize); 14965} 14966 .bokksu-footer .footer__title img { 14967 width: 60px !important; 14968 height: 100% !important; 14969 } 14970 14971@media only screen and (max-width:960px) { 14972 .footer__block--mobile .accept-payments{ 14973 margin-top: 5px; 14974 } 14975 } 14976 14977@media only screen and (min-width:961px) { 14978 .footer__block--mobile .accept-payments{ 14979 margin-top: -5px; 14980 } 14981 } 14982 14983.footer__subscribe { 14984font-weight: 700; 14985font-size: calc(var(--typeBaseSize) + 2px); 14986color: #fff; 14987} 14988 14989.footer__menu { 14990margin: 0 0 20px; 14991padding: 0; 14992list-style: none 14993} 14994 14995/* Footer Desktop */ 14996@media (min-width: 768px) { 14997 .footer_left { 14998 flex: 40%; 14999 } 15000 /* .footer_right { 15001 flex: 60%; 15002 } */ 15003 .footer__menu a { 15004 display: inline-block; 15005 padding: 4px 0; 15006 max-width: 170px; 15007 } 15008 .footer__block.block__contact { 15009 margin-right: 1.5em; 15010 max-width: 160px !important; 15011 } 15012 .footer__block.block__menu { 15013 15014 max-width: 190px !important; 15015 } 15016} 15017 15018/* Footer Mobile */ 15019@media (max-width: 767px) { 15020 .footer_wrapper { 15021 flex-direction: column; 15022 } 15023 15024 .footer_left, .footer_right { 15025 flex: 100%; 15026 } 15027} 15028 15029@media only screen and (max-width:960px) { 15030 15031.footer__menu { 15032 margin-bottom: 0 15033} 15034} 15035 15036.footer__menu li { 15037margin: 0; 15038} 15039 15040.footer__menu a { 15041display: inline-block; 15042padding: 4px 0; 15043max-width: 170px; 15044} 15045.footer__menu a:hover { 15046text-decoration: underline; 15047 15048} 15049 15050.footer__menu .icon { 15051margin-right: 10px 15052} 15053 15054[dir=rtl] .footer__menu .icon { 15055margin-right: 0; 15056margin-left: 10px 15057} 15058 15059.footer__menu--underline a { 15060text-decoration: underline; 15061text-underline-offset: 2px; 15062} 15063 15064.footer__newsletter { 15065display: flex; 15066justify-content: center; 15067align-items: center; 15068padding: 0 20px 15069} 15070 15071.footer__newsletter > * { 15072padding: 0 20px; 15073} 15074 15075.footer__newsletter .newsletter__input-group { 15076margin-bottom: 0; 15077} 15078 15079@media only screen and (max-width:960px) { 15080 15081.footer__newsletter { 15082 flex-wrap: wrap; 15083 text-align: center; 15084 justify-content: center; 15085 padding: 0; 15086} 15087 15088.footer__newsletter > * { 15089 padding: 0; 15090} 15091 15092.footer__newsletter .newsletter__input-group { 15093 max-width: none 15094} 15095 15096.footer__newsletter .newsletter__input-group .btn { 15097 min-width: auto; 15098} 15099 15100.footer__newsletter form { 15101 width: 100%; 15102 margin: 20px auto 0; 15103} 15104} 15105 15106.footer__blocks { 15107display: flex; 15108flex-wrap: wrap;
15109justify-content: center; 15110} 15111 15112.footer__block { 15113flex: 0 1 25%; 15114} 15115.footer__block.block__contact { 15116 margin-right: 1.5em; 15117 max-width: unset; 15118} 15119 .footer__block.block__menu { 15120 15121 max-width: unset ; 15122} 15123 .footer__block.block__payment { 15124 max-width: 420px !important; 15125} 15126 15127 .footer__base-links{ 15128 display:block !important; 15129 } 15130 .weblayer--box-subscription-sms-email-signup { 15131 display: flex; 15132 justify-content: normal !important; 15133} 15134 .input-group .newsletter-subscription-field { 15135 padding-left: 10px !important; 15136 border-radius: 12px !important; 15137 min-width: 379px !important; 15138 background: #fff !important; 15139 } 15140@media only screen and (max-width:960px) { 15141.footer__blocks--mobile { 15142 display: flex; 15143 flex-wrap: wrap; 15144} 15145 15146.footer__block, 15147.footer__block--mobile { 15148 max-width: none; 15149 flex: 1 1 50%; 15150} 15151 15152.footer__block[data-type=contact], 15153.footer__block[data-type=payment] { 15154 flex: 1 0 100%; 15155} 15156} 15157 15158.footer__social { 15159margin: 0 15160} 15161 15162form + .footer__social { 15163margin-top: 30px 15164} 15165 15166.footer__social li { 15167display: inline-block; 15168margin: 0 15px 15px 0; 15169} 15170 15171.footer__social a { 15172display: block; 15173} 15174 15175.footer__social .icon { 15176width: 21px; 15177height: 21px 15178} 15179 15180.footer__social .icon.icon--wide { 15181width: 40px; 15182} 15183 15184.payment-icons { 15185-webkit-user-select: none; 15186user-select: none; 15187cursor: default; 15188margin-bottom: 20px 15189} 15190 15191@media only screen and (max-width:960px) { 15192 15193.payment-icons { 15194 margin-bottom: 0 15195} 15196} 15197 15198.payment-icons li { 15199cursor: default; 15200margin: 0 8px 4px 0; 15201} 15202 15203.footer__base-links { 15204font-size: 13px 15205} 15206 15207.footer__base-links a, 15208.footer__base-links span { 15209display: inline-block; 15210padding: 2px 20px 2px 0; 15211} 15212 15213.footer__base-links a { 15214text-underline-offset: 2px; 15215} 15216.footer__base-links a:hover { 15217text-decoration: underline; 15218} 15219.errors, 15220.note { 15221border-radius: 0; 15222padding: 6px 12px; 15223margin-bottom: 15px; 15224border: 1px solid transparent; 15225text-align: left 15226} 15227 15228.errors ol, 15229.errors ul, 15230.note ol, 15231.note ul { 15232margin-top: 0; 15233margin-bottom: 0; 15234} 15235 15236.errors li:last-child, 15237.note li:last-child { 15238margin-bottom: 0; 15239} 15240 15241.errors p, 15242.note p { 15243margin-bottom: 0; 15244} 15245 15246.note { 15247border-color: #e8e8e1 15248; 15249border-color: var(--colorBorder); 15250} 15251 15252.errors ul { 15253list-style: disc outside; 15254margin-left: 20px; 15255} 15256 15257.note--success { 15258color: #56ad6a; 15259border-width: 0; 15260/* margin-top:15px; */ 15261margin-bottom: 0; 15262} 15263 15264.note-contact { 15265color: #56ad6a !important; 15266padding: 24px 0 !important; 15267} 15268 15269.note--success a { 15270color: #56ad6a; 15271text-decoration: underline 15272} 15273 15274.note--success a:hover { 15275text-decoration: none; 15276} 15277 15278.errors, 15279.form-error { 15280color: #d02e2e; 15281} 15282.errors li::marker { 15283color: #d02e2e; 15284} 15285 15286.errors a, 15287.form-error a { 15288color: #d02e2e; 15289text-decoration: underline 15290} 15291 15292.errors a:hover, 15293.form-error a:hover { 15294text-decoration: none; 15295} 15296 15297.pagination { 15298margin: 60px 0; 15299text-align: center 15300} 15301 15302.pagination > span { 15303display: inline-block; 15304vertical-align: middle; 15305line-height: 1; 15306} 15307 15308.pagination a { 15309display: inline-block; 15310} 15311 15312.pagination .page.current, 15313.pagination a:not(.btn) { 15314padding: 8px 12px; 15315} 15316 15317.pagination .page.current { 15318opacity: 0.3; 15319} 15320 15321.pagination .btn { 15322transition: transform 0.15s ease-out 15323} 15324 15325.pagination .btn:hover { 15326transform: scale(1.08); 15327} 15328 15329.pagination .btn .icon { 15330width: 13px; 15331height: 13px; 15332} 15333 15334.rte:after { 15335content: ""; 15336display: table; 15337clear: both; 15338} 15339 15340.rte { 15341margin-bottom: 7.5px 15342} 15343 15344@media only screen and (min-width:961px) { 15345 15346.rte { 15347 margin-bottom: 15px 15348} 15349} 15350 15351.rte:last-child { 15352margin-bottom: 0; 15353} 15354 15355.rte + .rte { 15356margin-top: 30px; 15357} 15358 15359.rte ol, 15360.rte p, 15361.rte table, 15362.rte ul { 15363margin-bottom: 15px 15364} 15365 </style> 15366 15367 15368</div> 15369<!-- END sections: footer-group --></div> 15370 </div><div id="VideoModal" class="modal"> 15371 <div class="modal__inner"> 15372 <div class="modal__centered page-width text-center"> 15373 <div class="modal__centered-content"> 15374 <div class="video-wrapper video-wrapper--modal"> 15375 <div id="VideoHolder"></div> 15376 </div> 15377 </div> 15378 </div> 15379 15380 <button type="button" class="btn btn--circle btn--icon modal__close js-modal-close"> 15381 <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>
15382 <span class="icon__fallback-text">"Close (esc)"</span> 15383 </button> 15384 </div> 15385</div> 15386<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true"> 15387 <div class="pswp__bg"></div> 15388 <div class="pswp__scroll-wrap"> 15389 <div class="pswp__container"> 15390 <div class="pswp__item"></div> 15391 <div class="pswp__item"></div> 15392 <div class="pswp__item"></div> 15393 </div> 15394 15395 <div class="pswp__ui pswp__ui--hidden"> 15396 <button class="btn btn--secondary btn--circle pswp__button pswp__button--arrow--left" title="Previous"> 15397 <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> 15398 </button> 15399 15400 <button class="btn btn--secondary btn--circle btn--large pswp__button pswp__button--close" title="Close (esc)"> 15401 <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> 15402 </button> 15403 15404 <button class="btn btn--secondary btn--circle pswp__button pswp__button--arrow--right" title="Next"> 15405 <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> 15406 </button> 15407 </div> 15408 </div> 15409</div> 15410<div id="QuickAddModal" class="modal modal--square quick-add-modal quick-shop-modal-focus" tabindex="0"> 15411 <div class="modal__inner product-temp"> 15412 <div class="modal__centered"> 15413 <div class="modal__centered-content"> 15414 <div id="QuickAddHolder"></div> 15415 </div> 15416 15417 <button type="button" class="btn btn--circle btn--icon modal__close js-modal-close"> 15418 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"> 15419 <path d="m19 17.61 27.12 27.13m0-27.13L19 44.74" style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:2px"/> 15420 </svg> 15421 <span class="icon__fallback-text">"Close (esc)"</span> 15422 </button> 15423 </div> 15424 </div> 15425</div> 15426<tool-tip data-tool-tip=""> 15427 <div class="tool-tip__inner" data-tool-tip-inner> 15428 <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> 15429 <div data-tool-tip-title>Bokksu | Authentic Japanese Snack & Candy Subscription Box</div> 15430 <div class="tool-tip__content" data-tool-tip-content> 15431 </div> 15432 </div> 15433</tool-tip> 15434<div id="ProductModals"></div> 15435 15436 15437 15438 15439 15440
15440<script> let showFreeGiftSwiper = true </script>
15440 15441 15442 <!-- Free Gift Customizations --> 15443 <span id="free-gift-1-amount" style="display: none;"> 15444 150 15445 </span> 15446 <span id="free-gift-2-amount" style="display: none;"> 15447 15448 </span> 15449 <span id="selected-gift-1-product" style="display: none;"> free-folder-set-free-gift-with-all-boutique-orders-while-supplies-last </span> 15450 <span id="selected-gift-2-product" style="display: none;"> </span> 15451 15452 15453 15454 <span id="selected-gift-1-product-inventory-quantity" style="display: none;"> </span> 15455 15456 15457 15458 15459 <span id="selected-gift-2-product-inventory-quantity" style="display: none;"> </span> 15460 15461 15462 <div style="display: none;"> 15463 15464 15465 15466 <span class="selected_gift_collection_name" style="display: none;"></span> 15467 15468 </div> 15469 15470 15471 <span id="free-gift-certificate-feature-with-4-tiers" style="display: none;"> Off </span> 15472 <span id="selected-free-gift-certificate-product" style="display: none;"> complimentary-bokksu-snack-box-seasons-of-japan-on-orders-above-200 </span> 15473 <span id="free-gift-certificate-tier-1-amount" style="display: none;"> </span> 15474 <span id="free-gift-certificate-tier-2-amount" style="display: none;"> </span> 15475 <span id="free-gift-certificate-tier-3-amount" style="display: none;"> </span> 15476 <span id="free-gift-certificate-tier-4-amount" style="display: none;"> </span> 15477 <span id="free-gift-certificate-message" style="display: none;"> </span> 15478 <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> 15479 15480 15481 15482
15482<script src="//bokksu.com/cdn/shop/t/3/assets/recently-viewed.js?v=164611006926442500801751964576" defer="defer"></script>
15482 15483
15483<script src="//bokksu.com/cdn/shop/t/3/assets/collection.js?v=61855754316230853941751964575" defer="defer"></script>
15483 15484 15485 15486
15487<script> 15488 var initGorgiasChatPromise = (window.GorgiasChat) ? window.GorgiasChat.init() : new Promise(function (resolve) { window.addEventListener('gorgias-widget-loaded', function () { resolve();})}); 15489 initGorgiasChatPromise.then(async () => { 15490 // SHO-319: privacyPolicyDisclaimer renders HTML; the intro text keys escape it 15491 GorgiasChat.updateTexts({ 15492 "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." 15493 }) 15494 GorgiasChat.hidePoweredBy(true) 15495 }) 15496</script>
15496 15497 15498 15499 15500 15501 15502 15503
15503<script id="sg-js-global-vars"> 15504 sgGlobalVars = 15505 {}; 15506 15507 15508 if(sgGlobalVars) { 15509 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}; 15510 sgGlobalVars.currentProduct = null; 15511 sgGlobalVars.isAdmin = `false`; 15512 } 15513 </script>
15513 15514
15514<script> 15515 // Event to run when size optimization is required 15516 const optimizeSize = () => { 15517 // Push the event to the data layer 15518 dataLayer.push({'event': 'optimize.size'}); 15519 } 15520 15521 // Event listener for window resize 15522 window.addEventListener('resize', () => { 15523 if (window.innerWidth <= 960) { 15524 optimizeSize(); 15525 } 15526 }); 15527 15528 // Also check at least once at the start 15529 if (window.innerWidth <= 960) { 15530 optimizeSize(); 15531 } 15532 </script>
15532 15533 15534
15534<script src="//bokksu.com/cdn/shop/t/3/assets/interact.js?v=176245359230577931561751964578" defer="true"></script>
15534 15535 15536 15537 15538 15539 15540
15540<script async src="https://js.adsrvr.org/up_loader.3.0.0.js"></script>
15540 15541
15541<script> 15542 window.ttdConversionEventsLayer = window.ttdConversionEventsLayer || []; 15543 function ttdConversionEvents() { 15544 window.ttdConversionEventsLayer.push(arguments); 15545 } 15546 15547 ttdConversionEvents("init", { 15548 advertiserId: "4aipb3q", 15549 pixelIds: ["fnzha9m"] 15550 }); 15551 15552 ttdConversionEvents("event", { 15553 advertiserId: "4aipb3q", 15554 pixelIds: ["fnzha9m"] 15555 }); 15556 </script>
15556 15557 15558<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> 15559<div id="shopify-block-AMXlNNXM5SWtGZ0cxR__17151115064775110295" class="shopify-block shopify-app-block"><style data-recharge-theme='{"has_theme_customization": true, "design_mode": false }'> 15560 .recharge-theme { 15561 /* App */ 15562 --recharge-app-background: #FFFFFF; 15563 --recharge-app-container: 1200px; 15564 --recharge-app-vertical-padding: 32px; 15565 15566 /* Brand colors */ 15567 15568--recharge-color-brand: #467C99; 15569 15570 /* Tints */ 15571 --recharge-color-brand-120: #38637a; 15572 --recharge-color-brand-20: #6b96ad; 15573 --recharge-color-brand-40: #90b0c2; 15574 --recharge-color-brand-60: #b5cbd6; 15575 --recharge-color-brand-75: #d1dee6; 15576 --recharge-color-brand-85: #e3ebf0; 15577 15578 /* Neutral */ 15579 --recharge-color-neutral: hsl(201, 35%, 7%); 15580 --recharge-color-neutral-80: hsl(201, 7%, 25%); 15581 --recharge-color-neutral-70: hsl(201, 5%, 35%); 15582 --recharge-color-neutral-40: hsl(201, 3%, 63%); 15583 --recharge-color-neutral-10: hsl(201, 2%, 91%); 15584 15585 15586 /* Links */ 15587 --recharge-button-secondary: #467C99; 15588 --recharge-button-secondary-120: #38637a; 15589 --recharge-button-secondary-60: #90b0c2; 15590 15591 /* Images */ 15592 --recharge-images-ratio: 1; 15593 15594 /* Cards */ 15595 15596 --recharge-cards-background: #F6F4F1; 15597 15598 15599 15600 --recharge-cards-border-color: RGBA(0,0,0,0); 15601 15602 15603 /* Fonts */ 15604 --recharge-typography-scale: 16px; 15605 --recharge-typography-size-1: calc(3 * var(--recharge-typography-scale)); 15606 --recharge-typography-size-2: calc(2.25 * var(--recharge-typography-scale)); 15607 --recharge-typography-size-3: calc(1.625 * var(--recharge-typography-scale)); 15608 --recharge-typography-size-4: calc(1.25 * var(--recharge-typography-scale)); 15609 --recharge-typography-size-5: calc(1 * var(--recharge-typography-scale)); 15610 --recharge-typography-size-6: calc(.875 * var(--recharge-typography-scale)); 15611 15612 /** Text **/ 15613 --recharge-typography-light: #FFFFFF; 15614 --recharge-typography-primary: var(--recharge-color-neutral); 15615 --recharge-typography-secondary: var(--recharge-color-neutral-70); 15616 15617 /* Corners */ 15618 --recharge-corners-radius: 8px; 15619 15620 --recharge-button-border-radius: 8px; 15621 15622 15623 /* Views */ 15624 15625 --recharge-views-background: #FFFFFF; 15626 15627 15628 /* Buttons */ 15629 --recharge-button-font-family: inherit; 15630 --recharge-button-brand: var(--recharge-color-brand); 15631 --recharge-button-color: #FFFFFF; 15632 } 15633</style> 15634 15635</div>
15635<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
15635 15636</body> 15637</html> 15638
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.