1<!doctype html> 2 <html class="no-js" lang="en"> 3 4 <head>
4<script data-source-attribution="shopify.event_observer.bootstrap"> 5(function(){let e=navigator,t=`prototype`,n=`sendBeacon`,r=e[n],i=fetch,a=XMLHttpRequest[t],{open:o,send:s}=a,c=`EventListener`,l=`add${c}`,u=`remove${c}`,d=EventTarget[t],f=d[l],p=d[u],m=e=>Error((e=document.currentScript)&&[e?.src,e?.id||e?.dataset?.sourceAttribution]),h=(e=[],t=0)=>(e.p=n=>e[t++%1e3]=n,[e,t=>(e.forEach(e.p=t),e.length=0)]),[g,_]=h(),[v,y]=h(),b,x=new WeakMap,S=e=>e&&g.p([e,b||[m()]]);d[l]=function(e,t,n){let r=this,i=t?.handleEvent||t,a=x.get(t),o=m();i?.call&&!a&&x.set(t,a=function(e){b=[o,e.type];try{i.call(t==i?this:t,e)}finally{b=null}}),v.p([e,o,a,r?.tagName||r+``,r?.id]),f.call(r,e,a||t,n)},d[u]=function(e,t,n){p.call(this,e,x.get(t)||t,n)},a.open=function(e,t){x.set(this,[t+``,e]),o.apply(this,arguments)},a.send=function(e){S(x.get(this)),s.call(this,e)},fetch=(e,t)=>(S([(e?.url||e)+``,t?.method]),i(e,t)),e[n]=(t,n)=>(S([t+``,``]),r.call(e,t,n)),setTimeout(()=>import("//www.glowrecipe.com/cdn/shopifycloud/storefront/assets/storefront/event_observer_reporter-ed358274.js").then(e=>e.$(_,y,f,i,`5438301`)))})(); 6//# sourceURL=event-observer-collector.js 7</script>
7 8 9 10
10<script type="text/javascript"> 11 var _conv_page_type = "index"; 12 var _conv_category_id = ""; 13 var _conv_category_name = null; 14 var _conv_product_id = null; 15 var _conv_product_sku = null; 16 var _conv_product_variant_id = null; 17 var _conv_product_name = null; 18 var _conv_product_price = ""; 19 var _conv_customer_id = ""; 20 var _conv_custom_v1 = null; 21 var _conv_custom_v2 = null; 22 var _conv_custom_v3 = "1"; 23 var _conv_custom_v4 = "35.00"; 24 25 // Advanced matching: Collections and Tags (for pricing rules) 26 var _conv_product_handle = null; 27 var _conv_product_collections = []; 28 var _conv_product_tags = null; 29 30 // Build product data map for products on this page (for related products, collection pages, etc.) 31 var _conv_products_data = {}; 32 33 34 35 (function () { 36 // ============================================================================ 37 // SHARED LOGGER UTILITY 38 // ============================================================================ 39 /** 40 * Shared Logger Utility for Convert Theme Extension 41 * 42 * Provides consistent logging interface across all Convert Shopify extensions. 43 * Supports badge styling, timestamps, and emoji prefixes - matches backend logger. 44 */ 45 const createLogger = (function() { 46 const LogLevel = {TRACE: 0, DEBUG: 1, INFO: 2, WARN: 3, ERROR: 4, SILENT: 5}; 47 const LogMethod = {LOG: "log", TRACE: "trace", DEBUG: "debug", INFO: "info", WARN: "warn", ERROR: "error"}; 48 const LOG_EMOJIS = {debug: "ðµ", info: "ð¢", warn: "â ï¸", error: "ð´"}; 49 const LOG_LEVEL_METHODS = {}; 50 LOG_LEVEL_METHODS[LogLevel.TRACE] = ["trace", "debug", "info", "warn", "error", "log"]; 51 LOG_LEVEL_METHODS[LogLevel.DEBUG] = ["debug", "info", "warn", "error", "log"]; 52 LOG_LEVEL_METHODS[LogLevel.INFO] = ["info", "warn", "error", "log"]; 53 LOG_LEVEL_METHODS[LogLevel.WARN] = ["warn", "error"]; 54 LOG_LEVEL_METHODS[LogLevel.ERROR] = ["error"]; 55 LOG_LEVEL_METHODS[LogLevel.SILENT] = []; 56 function getLogLevelFromURL() { 57 try { 58 var levelParam = null; 59 // Check localStorage first (persists across pages) 60 if (typeof localStorage !== "undefined") { 61 levelParam = localStorage.getItem("convert_log_level"); 62 } 63 // Check URL hash (not stripped by Shopify) 64 if (window.location.hash && window.location.hash.includes("convert_log_level")) { 65 var hashParams = new URLSearchParams(window.location.hash.substring(1)); 66 var hashLevel = hashParams.get("convert_log_level"); 67 if (hashLevel) { 68 levelParam = hashLevel; 69 // Save to localStorage for persistence 70 if (typeof localStorage !== "undefined") { 71 localStorage.setItem("convert_log_level", hashLevel); 72 } 73 } 74 } 75 if (levelParam) { 76 var lowerLevel = levelParam.toLowerCase(); 77 if (lowerLevel === LogMethod.TRACE) return LogLevel.TRACE; 78 if (lowerLevel === LogMethod.DEBUG) return LogLevel.DEBUG; 79 if (lowerLevel === LogMethod.INFO) return LogLevel.INFO; 80 if (lowerLevel === LogMethod.WARN) return LogLevel.WARN; 81 if (lowerLevel === LogMethod.ERROR) return LogLevel.ERROR; 82 } 83 } catch (e) {} 84 return LogLevel.INFO; 85 } 86 const BADGE_STYLES = ["color: #992ae3", "background: rgba(153,42,227,0.2)", "border: 1px solid #992ae3", "border-radius: 4px", "padding: 2px 4px", "margin-right: 4px"].join(";"); 87 const TIME_STYLES = "color: #788797"; 88 const startTime = performance.now(); 89 return function(prefix) { 90 prefix = prefix || "Convert Theme"; 91 var currentLevel = getLogLevelFromURL(); 92 var allowedMethods = LOG_LEVEL_METHODS[currentLevel] || LOG_LEVEL_METHODS[LogLevel.INFO]; 93 const log = function(level, method, message) { 94 if (allowedMethods.indexOf(method) === -1) return; 95 const emoji = LOG_EMOJIS[level]; 96 const args = Array.prototype.slice.call(arguments, 3); 97 const elapsed = ((performance.now() - startTime) / 1000).toFixed(3); 98 const paddedTime = ("000000" + elapsed).slice(-6); 99 const fullMessage = "%c" + prefix + "%c[" + paddedTime + " sec] " + emoji + " " + message; 100 switch (level) { 101 case "debug": console.debug.apply(console, [fullMessage, BADGE_STYLES, TIME_STYLES].concat(args)); break; 102 case "info": console.log.apply(console, [fullMessage, BADGE_STYLES, TIME_STYLES].concat(args)); break; 103 case "warn": console.warn.apply(console, [fullMessage, BADGE_STYLES, TIME_STYLES].concat(args)); break; 104 case "error": console.error.apply(console, [fullMessage, BADGE_STYLES, TIME_STYLES].concat(args)); break; 105 } 106 }; 107 return { 108 level: currentLevel,
109 setLevel: function(level) { 110 if (typeof level === "string") { 111 var lowerLevel = level.toLowerCase(); 112 if (lowerLevel === LogMethod.TRACE) currentLevel = LogLevel.TRACE; 113 else if (lowerLevel === LogMethod.DEBUG) currentLevel = LogLevel.DEBUG; 114 else if (lowerLevel === LogMethod.INFO) currentLevel = LogLevel.INFO; 115 else if (lowerLevel === LogMethod.WARN) currentLevel = LogLevel.WARN; 116 else if (lowerLevel === LogMethod.ERROR) currentLevel = LogLevel.ERROR; 117 else currentLevel = LogLevel.INFO; 118 } else { currentLevel = level; } 119 allowedMethods = LOG_LEVEL_METHODS[currentLevel] || LOG_LEVEL_METHODS[LogLevel.INFO]; 120 }, 121 debug: function(message) { log.apply(null, ["debug", "debug", message].concat(Array.prototype.slice.call(arguments, 1))); }, 122 info: function(message) { log.apply(null, ["info", "info", message].concat(Array.prototype.slice.call(arguments, 1))); }, 123 warn: function(message) { log.apply(null, ["warn", "warn", message].concat(Array.prototype.slice.call(arguments, 1))); }, 124 error: function(message) { log.apply(null, ["error", "error", message].concat(Array.prototype.slice.call(arguments, 1))); } 125 }; 126 }; 127 })(); 128 129 // Create logger instance for theme extension 130 const logger = createLogger('Convert Theme'); 131 132 // ============================================================================ 133 // CONVERT SHOPIFY INTEGRATION 134 // ============================================================================ 135 136 // Initialize global namespace for Shopify-specific Convert functions 137 // MUST be first before any function tries to use it 138 window.convertShopify = window.convertShopify || {}; 139 140 // Define addPricingRules() to receive pricing rules from Variation JS 141 // This MUST be defined BEFORE tracking script executes (so Variation JS can call it) 142 // Source of truth: Variation JS at Convert side 143 window.convertShopify.addPricingRules = function({experienceId, variationId}, rules) { 144 this.pricingRules = this.pricingRules || {}; 145 this.pricingRules[`${experienceId}-${variationId}`] = rules; 146 logger.info(`Pricing rules added for experience #${experienceId} and variation ${variationId}:`, rules.length, 'rules'); 147 }; 148 149 // Load pricing settings (how to combine multiple matching rules) 150 let shopifyPricingSettings = { 151 multipleRulesStrategy: 'sequential' // default 152 }; 153 154 155 // Debouncing for cart updates (prevent 409 conflicts) 156 let cartUpdateTimeout = null; 157 let isUpdatingCart = false; 158 159 // Variant tracking initialization will be moved to snippet.goals_evaluated 160 // This is defined here but not called yet (waiting for ShopifyAnalytics to be ready) 161 window.convertShopify.initVariantTracking = function() { 162 const pageType = window._conv_page_type; 163 if (pageType !== 'product') { 164 logger.debug('Not a product page, skipping variant tracking'); 165 return; 166 } 167 168 // Wait for ShopifyAnalytics to be ready (with retry logic) 169 const waitForShopifyAnalytics = (callback, maxAttempts = 10, interval = 100) => { 170 let attempts = 0; 171 const checkAnalytics = () => { 172 attempts++; 173 if (window.ShopifyAnalytics?.meta?.product) { 174 logger.info('ShopifyAnalytics ready after', attempts, 'attempts'); 175 callback(); 176 } else if (attempts < maxAttempts) { 177 logger.debug('Waiting for ShopifyAnalytics... attempt', attempts); 178 setTimeout(checkAnalytics, interval); 179 } else { 180 logger.warn('ShopifyAnalytics not available after', maxAttempts, 'attempts, using theme events fallback'); 181 callback(); // Call anyway, will fall back to theme events 182 } 183 }; 184 checkAnalytics(); 185 }; 186 187 // Initialize tracking once ShopifyAnalytics is ready 188 waitForShopifyAnalytics(() => {
189 // Try Proxy approach first (Primary method) 190 if (window.ShopifyAnalytics?.meta && typeof Proxy !== 'undefined') { 191 logger.info('Initializing variant tracking with Proxy API'); 192 193 // Store variant data for quick SKU lookup 194 const variantMap = {}; 195 const variants = window.ShopifyAnalytics.meta.product?.variants; 196 if (variants && Array.isArray(variants)) { 197 variants.forEach(v => { 198 variantMap[v.id] = v; 199 }); 200 logger.debug('Loaded', variants.length, 'variants for tracking'); 201 } else { 202 logger.warn('No variants found in ShopifyAnalytics.meta'); 203 // Fall through to theme events fallback 204 } 205 206 if (Object.keys(variantMap).length > 0) { 207 const originalMeta = window.ShopifyAnalytics.meta; 208 let lastVariantId = originalMeta.selectedVariantId; 209 210 // Create Proxy to intercept property changes 211 window.ShopifyAnalytics.meta = new Proxy(originalMeta, { 212 set(target, property, value) { 213 // Update the actual property 214 target[property] = value; 215 216 // If selectedVariantId changed, trigger our handler (DEBOUNCED) 217 if (property === 'selectedVariantId' && value !== lastVariantId) { 218 lastVariantId = value; 219 logger.debug('Variant changed via Proxy:', value); 220 221 const variant = variantMap[value]; 222 if (variant) { 223 // Update VARIANT-SPECIFIC variables only (cast to strings) 224 window._conv_product_variant_id = String(variant.id) || null; 225 window._conv_product_sku = variant.sku ? String(variant.sku) : null; 226 // NOTE: Do NOT update _conv_product_id - it's the same for ALL variants! 227 // Product ID is set once on page load from Liquid 228 logger.info('Updated variant:', { 229 variantId: window._conv_product_variant_id, 230 sku: window._conv_product_sku, 231 productId: window._conv_product_id // (unchanged - same for all variants) 232 }); 233 234 // Clear pricing attributes immediately on variant change 235 // This ensures price elements will be re-processed with fresh data 236 if (window.convertShopify.clearPricingAttributes) { 237 window.convertShopify.clearPricingAttributes(); 238 } 239 240 // Debounce pricing update to prevent rapid-fire cart updates 241 if (cartUpdateTimeout) { 242 clearTimeout(cartUpdateTimeout); 243 logger.debug('Debouncing cart update...'); 244 } 245 cartUpdateTimeout = setTimeout(() => { 246 // NOTE: Must use window.convertShopify explicitly - `this` inside Proxy handler 247 // refers to the Proxy trap object, not window.convertShopify 248 if (window.convertShopify.updatePricing) { 249 window.convertShopify.updatePricing(); 250 } 251 }, 300); // Wait 300ms after last variant change 252 } 253 } 254 255 return true; // Indicate success 256 }, 257 258 get(target, property) { 259 // Return the actual property value 260 return target[property]; 261 } 262 }); 263 264 logger.info('Variant tracking Proxy installed successfully'); 265 return; // Success, exit 266 } 267 } 268 269 // Fallback: Theme events (Secondary method) 270 logger.warn('ShopifyAnalytics.meta not available or Proxy not supported, using theme events fallback'); 271 const eventNames = ['variant:change', 'variantChange', 'product:variant:change']; 272 eventNames.forEach(eventName => { 273 document.addEventListener(eventName, (event) => { 274 const variant = event.detail?.variant; 275 if (variant) { 276 // Update VARIANT-SPECIFIC variables only (cast to strings) 277 window._conv_product_variant_id = variant.id ? String(variant.id) : null; 278 window._conv_product_sku = variant.sku ? String(variant.sku) : null; 279 // NOTE: Do NOT update _conv_product_id - it's the same for ALL variants! 280 // Product ID is set once on page load from Liquid 281 logger.debug('Variant changed via event "' + eventName + '":', { 282 variantId: window._conv_product_variant_id, 283 sku: window._conv_product_sku, 284 productId: window._conv_product_id // (unchanged - same for all variants) 285 }); 286 287 // Clear pricing attributes immediately on variant change 288 // This ensures price elements will be re-processed with fresh data 289 if (window.convertShopify.clearPricingAttributes) { 290 window.convertShopify.clearPricingAttributes(); 291 } 292 293 // Debounce pricing update 294 if (cartUpdateTimeout) {
295 clearTimeout(cartUpdateTimeout); 296 logger.debug('Debouncing cart update...'); 297 } 298 cartUpdateTimeout = setTimeout(() => { 299 // NOTE: Must use window.convertShopify explicitly - `this` inside event listener 300 // refers to the event target or is undefined, not window.convertShopify 301 if (window.convertShopify.updatePricing) { 302 window.convertShopify.updatePricing(); 303 } 304 }, 300); 305 } 306 }); 307 }); 308 logger.info('Listening to', eventNames.length, 'theme events for variant changes'); 309 }); // End waitForShopifyAnalytics callback 310 }; 311 312 /** 313 * Finds ALL matching pricing rules for a product (returns array, not just first match) 314 * Supports array of match criteria with optional regex patterns 315 * 316 * @param {Array} rulesArray - Array of pricing rules: [{ type, value, match: [{ field, regex }] }] 317 * @param {Object} productData - Current product data with identifiers 318 * @returns {Array} Array of matched pricing rules (empty array if no matches) 319 */ 320 window.convertShopify.findAllMatchingRules = function(rulesArray, productData) { 321 if (!Array.isArray(rulesArray) || rulesArray.length === 0) return []; 322 if (!productData) return []; 323 324 const matchedRules = []; 325 326 // Build array of basic product identifiers (all cast as strings) 327 const productIdentifiers = [ 328 productData.variantId ? String(productData.variantId) : null, 329 productData.productId ? String(productData.productId) : null, 330 productData.sku ? String(productData.sku) : null, 331 productData.handle ? String(productData.handle) : null 332 ].filter(Boolean); // Remove nulls 333 334 // Add collections with 'collection:' prefix 335 if (productData.collections && Array.isArray(productData.collections)) { 336 productData.collections.forEach(collection => { 337 productIdentifiers.push(`collection:${collection}`); 338 }); 339 } 340 341 // Always add 'collection:all' since it's a virtual collection that matches all products 342 productIdentifiers.push('collection:all'); 343 344 // Add tags with 'tag:' prefix 345 if (productData.tags && Array.isArray(productData.tags)) {
346 productData.tags.forEach(tag => { 347 productIdentifiers.push(`tag:${tag}`); 348 }); 349 } 350 351 // Match product identifiers (silent - fires per element) 352 353 // Check ALL rules (not just first match) 354 for (const rule of rulesArray) { 355 if (!rule.match || !Array.isArray(rule.match)) continue; 356 357 let ruleMatches = false; 358 359 // Check each match criterion 360 for (const matchCriterion of rule.match) { 361 const field = String(matchCriterion.field); // Cast to string 362 const regex = matchCriterion.regex; 363 364 if (regex) { 365 // Regex matching 366 // Field can be 'productId', 'handle', or empty (any field) 367 let identifiersToCheck = productIdentifiers; 368 369 if (field === 'productId') { 370 // Only check against productId 371 identifiersToCheck = productData.productId ? [String(productData.productId)] : []; 372 } else if (field === 'handle') { 373 // Only check against handle 374 identifiersToCheck = productData.handle ? [String(productData.handle)] : []; 375 } 376 // else: check against all identifiers (field is empty or 'any') 377 378 for (const productIdentifier of identifiersToCheck) { 379 try { 380 const regexPattern = new RegExp(regex); 381 if (regexPattern.test(productIdentifier)) { 382 ruleMatches = true; 383 break; 384 } 385 } catch (e) { 386 logger.error('Invalid regex pattern:', regex, e); 387 } 388 } 389 } else { 390 // Exact matching 391 for (const productIdentifier of productIdentifiers) { 392 if (field === productIdentifier) { 393 ruleMatches = true; 394 break; 395 } 396 } 397 } 398 399 if (ruleMatches) break; // This rule matched, no need to check other criteria 400 } 401 402 if (ruleMatches) { 403 matchedRules.push(rule); 404 } 405 } 406 407 return matchedRules; 408 }; 409 410 /** 411 * Applies multiple pricing rules to a price based on the configured strategy 412 * 413 * @param {Number} originalPrice - The original price 414 * @param {Array} matchedRules - Array of matched pricing rules 415 * @returns {Number} Final price after applying all rules 416 */ 417 window.convertShopify.applyPricingRules = function(originalPrice, matchedRules) { 418 if (!matchedRules || matchedRules.length === 0) return originalPrice; 419 420 const strategy = shopifyPricingSettings.multipleRulesStrategy || 'sequential'; 421 422 // Apply rules using strategy (silent - fires per element) 423 424 let finalPrice = originalPrice; 425 426 switch (strategy) { 427 case 'sequential': 428 // Apply one after another in order 429 finalPrice = originalPrice; 430 for (const rule of matchedRules) { 431 const previousPrice = finalPrice; 432 if (rule.type === 'percentage') { 433 finalPrice = finalPrice * (1 + rule.value / 100); 434 } else { 435 finalPrice = finalPrice + rule.value; 436 } 437 logger.debug(` â ${rule.type} ${rule.value}: ${previousPrice.toFixed(2)} â ${finalPrice.toFixed(2)}`); 438 } 439 break; 440 441 case 'sum-then-apply': 442 // Sum all percentages, apply together, then apply fixed amounts 443 let totalPercentage = 0; 444 let totalFixed = 0; 445 446 for (const rule of matchedRules) { 447 if (rule.type === 'percentage') { 448 totalPercentage += rule.value; 449 } else { 450 totalFixed += rule.value; 451 } 452 } 453 454 finalPrice = originalPrice * (1 + totalPercentage / 100) + totalFixed; 455 logger.debug(` â Total percentage: ${totalPercentage}%, Total fixed: ${totalFixed}`); 456 logger.debug(` â ${originalPrice.toFixed(2)} Ã (1 + ${totalPercentage}/100) + ${totalFixed} = ${finalPrice.toFixed(2)}`); 457 break; 458 459 case 'best-price': 460 // Calculate all possible combinations and use lowest price 461 const prices = []; 462 463 // Original price (no discount) 464 prices.push(originalPrice); 465 466 // Each rule applied individually 467 for (const rule of matchedRules) { 468 let price = originalPrice; 469 if (rule.type === 'percentage') { 470 price = price * (1 + rule.value / 100); 471 } else { 472 price = price + rule.value; 473 } 474 prices.push(price); 475 } 476 477 // All rules combined sequentially
478 let combinedPrice = originalPrice; 479 for (const rule of matchedRules) { 480 if (rule.type === 'percentage') { 481 combinedPrice = combinedPrice * (1 + rule.value / 100); 482 } else { 483 combinedPrice = combinedPrice + rule.value; 484 } 485 } 486 prices.push(combinedPrice); 487 488 // Use lowest price 489 finalPrice = Math.min(...prices); 490 logger.debug(` â Calculated ${prices.length} price options:`, prices.map(p => p.toFixed(2))); 491 logger.debug(` â Best price: ${finalPrice.toFixed(2)}`); 492 break; 493 } 494 495 // Prevent negative prices (minimum price $0.01 as Shopify doesn't allow $0.00) 496 if (finalPrice < 0.01) { 497 logger.warn(`Price would be negative or zero: ${finalPrice.toFixed(2)} â setting to 0.01`); 498 finalPrice = 0.01; 499 } 500 501 // Final price calculated (silent - fires per element) 502 return finalPrice; 503 }; 504 505 window._conv_q = window._conv_q || []; 506 _conv_q.push({ 507 what: 'addListener', 508 params: { 509 event: 'snippet.goals_evaluated', 510 handler: () => { 511 try { 512 logger.info('Prepare shopify data'); 513 convert.shopifyVersion = 'latest'; 514 515 convert.shopifyPricingTags = convert.shopifyPricingTags || []; 516 const commonPriceTags = [ 517 '.price-item', // Dawn theme 518 '.price', // Generic, many themes 519 '.product__price', // Debut, Brooklyn, many others 520 '.product-single__price', // Product pages (Debut, Brooklyn) 521 '.product-price', // Minimal, Supply 522 '.money', // Generic price wrapper 523 '.price__current', // Some newer themes 524 '.price__regular', // Regular price display 525 '.price__sale', // Sale price display 526 '.price-item--sale', // Dawn theme sale price (for compare-at price products) 527 ]; 528 for (const tag of commonPriceTags) 529 if (!convert.shopifyPricingTags.some(t => t.trim() === tag)) convert.shopifyPricingTags.push(tag); 530 531 convert.shopifyPricingObserverDelay = convert.shopifyPricingObserverDelay || 50; 532 533 // Cart drawer selectors (skip pricing in cart - Cart Transform handles it) 534 convert.shopifyCartDrawerTags = convert.shopifyCartDrawerTags || []; 535 const commonCartDrawerTags = [ 536 'cart-drawer', // Dawn theme (web component) 537 '.cart-drawer', // Class-based 538 '#cart-drawer', // ID-based 539 '.drawer--cart', // Debut theme 540 '.mini-cart', // Brooklyn, Minimal 541 '.ajax-cart', // Venture, Supply 542 '.cart-popup', // Some custom themes 543 '[data-cart-drawer]', // Data attribute pattern 544 '.side-cart', // Custom implementations 545 '#CartDrawer', // Debut/Brooklyn 546 '.cart__sidebar', // Some themes 547 ]; 548 for (const tag of commonCartDrawerTags) 549 if (!convert.shopifyCartDrawerTags.some(t => t.trim() === tag)) convert.shopifyCartDrawerTags.push(tag); 550 551 // window.convertShopify.addPricingRules() is already defined at the top 552 // It will be called by Variation JS to store pricing rules 553 554 // Initialize variant tracking NOW (ShopifyAnalytics is ready at this point) 555 window.convertShopify.initVariantTracking(); 556 557 // Watch for DOM changes and reapply pricing (handles SPA navigation and late-loading elements) 558 window.convertShopify.observeDOMPricing(); 559 560 // Fetch product recommendations for product pages 561 // This populates _conv_products_data with related products (collections, tags, etc.) 562 if (window._conv_page_type === 'product') { 563 window.convertShopify.getRecommendations(); 564 } 565 566 // Apply initial pricing 567 window.convertShopify.updatePricing(); 568 569 const isLegacy = Boolean(convert.data?.u_id && convert.data?.prj?.id); 570 if (isLegacy) logger.warn('Legacy tracking script detected!'); 571 572 const visitorData = convert.getAllVisitorData(); 573 if (isLegacy) visitorData.bucketing = enrichLegacyBucketing(visitorData.bucketing); 574 sendAnalyticsData(visitorData); 575 const experiences = getVerifiedExperiences(visitorData.bucketing, isLegacy); 576 const verifyData = { 577 experiences, 578 domain: getCookieDomain(isLegacy) 579 }; 580 581 if (convert.getCookie('_conv_v')) { 582 let segments = convert.getDefaultSegments(); 583 if (isLegacy) segments = transformLegacySegments(segments); 584 convert.setCookie('_conv_g', JSON.stringify(segments)); 585 convert.setCookie('_conv_d', JSON.stringify(verifyData)); 586 } else { 587 // cookies not writable, falling back to localStorage 588 const {visitorId, bucketing = [], segments} = visitorData; 589 const experiencesData = getExperiencesData(bucketing); 590 if (isLegacy) { 591 logger.info('Unable to remember triggered goals due to blocked cookies while the legacy tracking script is used.'); 592 } 593 const convertStorage = JSON.parse(localStorage.getItem('convert.com') || '{}'); 594 Object.assign(convertStorage, { 595 shopifyData: { 596 visitorId, 597 experiencesData, 598 segments, 599 ...verifyData 600 } 601 }); 602 localStorage.setItem('convert.com', JSON.stringify(convertStorage)); 603 } 604 605 if (window !== window?.parent) return;
605 // skip updating cart notes if this is an iframe 606 607 if ('gid://shopify/WebhookSubscription/1304632164467' === 'null') { 608 logger.info('Skip updating cart attributes since webhook is not enabled'); 609 return; 610 } 611 612 convert.shopifyData = { 613 accountId: '10041832', 614 projectId: '10042217', 615 currency: 'USD', 616 revenueGoalId: '100495242', 617 subscriptionGoalId: 'null', 618 oneTimePaymentGoalId: 'null', 619 visitorData 620 }; 621 const cartAttributes = getCartAttributes(); 622 if (!cartAttributes) return; 623 624 /** 625 * IMPORTANT: 626 * The "Buy Now" button is a form of dynamic checkout buttons 627 * which don't support cart attributes 628 * See: https://help.shopify.com/en/manual/online-store/dynamic-checkout/compatibility 629 */ 630 if (!convert.shopifyCartUpdate) convert.shopifyCartUpdate = {}; 631 if (convert.shopifyCartUpdate?.request) convert.shopifyCartUpdate.request.abort(); 632 if (convert.shopifyCartUpdate?.timeout) clearTimeout(convert.shopifyCartUpdate.timeout); 633 convert.shopifyCartUpdate.request = new AbortController(); 634 convert.shopifyCartUpdate.timeout = setTimeout(() => { 635 logger.info('Updating cart attributes...'); 636 const shopifyRoot = window?.Shopify?.routes ? Shopify.routes.root : '/'; 637 fetch(`${shopifyRoot}cart/update.js`, { 638 method: 'POST', 639 headers: { 640 'Content-Type': 'application/json' 641 }, 642 body: JSON.stringify({ 643 attributes: cartAttributes 644 }), 645 signal: convert.shopifyCartUpdate.request.signal 646 }) 647 .then(() => { 648 logger.info('Cart attributes successfully updated'); 649 }) 650 .catch(({message, stack}) => { 651 clearTimeout(convert.shopifyCartUpdate.timeout); 652 logger.warn(`Cart attributes update error: ${message}`); 653 logger.debug('Error:', stack || message); 654 }); 655 }, 300); 656 } catch (error) { 657 logger.warn('Failed to prepare shopify data'); 658 logger.debug('Error:', error); 659 } 660 } 661 } 662 }); 663 function sendAnalyticsData(visitorData) { 664 if (!window?.Shopify?.analytics) return; 665 const {bucketing = []} = visitorData; 666 for (const {experienceId, variationId} of bucketing) 667 Shopify.analytics.publish('experience_impression', { 668 exp_variant_string: `CONV-${experienceId}:${variationId}` 669 }); 670 } 671 function enrichLegacyBucketing(bucketing) { 672 const enrichedBucketing = []; 673 if (convert.historicalData) { 674 for (const experienceId in convert.historicalData.experiments) { 675 const variationId = convert.historicalData.experiments[experienceId].variation_id; 676 const goals = Object.keys(convert.historicalData.experiments[experienceId].goals || {}).map((goalId) => ({ 677 goalId 678 })); 679 enrichedBucketing.push({ 680 experienceId, 681 variationId, 682 goals 683 }); 684 } 685 } 686 for (const {experienceId, variationId} of bucketing) { 687 const goals = Object.keys(convert.currentData.experiments_goals[experienceId] || {}).map((goalId) => ({ 688 goalId 689 })); 690 enrichedBucketing.push({ 691 experienceId, 692 variationId, 693 goals 694 }); 695 } 696 return enrichedBucketing; 697 } 698 function getVerifiedExperiences(bucketing, isLegacy = false) { 699 if (isLegacy) { 700 return bucketing 701 .filter(({experienceId}) => !!convert.data.experiments[experienceId].tp !== 4) 702 .map(({experienceId}) => String(experienceId)); 703 } else { 704 return bucketing 705 .filter( 706 ({experienceId}) => 707 !!convert.data.experiences.find(({id, type}) => id === experienceId && type !== 'deploy') 708 ) 709 .map(({experienceId}) => String(experienceId)); 710 } 711 } 712 function getExperiencesData(bucketing) { 713 if (!Array.isArray(bucketing)) return {}; 714 return Object.fromEntries( 715 bucketing.map(({experienceId, variationId, goals = []}) => [ 716 experienceId, 717 { 718 v: String(variationId), 719 g: Object.fromEntries(goals.map(({goalId}) => [String(goalId), 1])) 720 } 721 ]) 722 ); 723 } 724 function getCookieDomain(isLegacy = false) { 725 const currentHost = location.hostname.replace(/^www\./, ''); 726 let domains, cookieDomain; 727 if (isLegacy) { 728 domains = convert.data.prj.asoc_domains; 729 if (domains[currentHost]) { 730 return (cookieDomain = `.${currentHost}`); 731 } else { 732 for (host in domains) { 733 if (matchWildcard(currentHost, host)) { 734 cookieDomain = `.${domains[host]}`; 735 } 736 } 737 } 738 } else { 739 domains = convert.data.project.domains; 740 if (domains.find(({tld}) => tld === currentHost)) return (cookieDomain = `.${currentHost}`); 741 for (const {tld, hosts} of domains) { 742 if (hosts.find((host) => host.includes(currentHost) || matchWildcard(currentHost, host))) { 743 cookieDomain = `.${tld}`; 744 break; 745 } 746 } 747 } 748 if (cookieDomain) return cookieDomain; 749 else return false;
750 751 function matchWildcard(toMatch, wildcard) { 752 const regex = new RegExp(`^${wildcard.replace(/\./g, '\\.').replace(/\?/g, '\\?').split('*').join('.*?')}$`); 753 return regex.test(`www.${toMatch}`) || regex.test(toMatch); 754 } 755 } 756 function transformLegacySegments(segments) { 757 const {ctry, new: visitorType, cust, ...transformed} = segments; 758 transformed.visitorType = visitorType ? 'new' : 'returning'; 759 if (ctry) transformed.country = ctry; 760 if (cust) transformed.customSegments = cust; 761 return transformed; 762 } 763 function getCartAttributes() { 764 const {shopifyData} = convert; 765 if (!shopifyData || typeof shopifyData !== 'object') return; 766 const {visitorData} = shopifyData; 767 if (!visitorData || typeof visitorData !== 'object') return; 768 const {bucketing = []} = visitorData; 769 const bucketingData = Object.fromEntries( 770 bucketing.map(({experienceId, variationId}) => [`experience_${experienceId}`, variationId]) 771 ); 772 return Object.assign({}, bucketingData, { 773 __data: btoa(JSON.stringify(shopifyData)) 774 }); 775 } 776 777 /** 778 * Check if element is inside a cart drawer/mini-cart container 779 * Cart Transform handles all cart/checkout pricing, so skip these elements 780 * @param {Element} element - DOM element to check 781 * @returns {boolean} True if inside cart container 782 */ 783 window.convertShopify.isInsideCartContainer = function(element) { 784 if (!element || !convert.shopifyCartDrawerTags || convert.shopifyCartDrawerTags.length === 0) { 785 return false; 786 } 787 788 // Check if element or any ancestor matches cart drawer selectors 789 let currentElement = element; 790 while (currentElement && currentElement !== document.documentElement) { 791 for (const selector of convert.shopifyCartDrawerTags) { 792 try { 793 if (currentElement.matches && currentElement.matches(selector)) { 794 logger.debug('Skipping element inside cart container:', selector, 'Element:', element.className || element.tagName); 795 return true; 796 } 797 } catch (e) { 798 // Invalid selector, skip it 799 logger.warn('Invalid cart drawer selector:', selector, e); 800 } 801 } 802 currentElement = currentElement.parentElement; 803 } 804 805 return false; 806 }; 807 808 /** 809 * Extract product handle from a DOM element by traversing up the tree 810 * Checks for data attributes (data-handle, data-url, data-product-handle) first, 811 * then falls back to finding <a href="/products/..."> links 812 * @param {Element} element - DOM element to start search from 813 * @returns {string|null} Product handle or null if not found 814 */ 815 window.convertShopify.extractProductHandleFromElement = function(element) { 816 let currentElement = element; 817 818 while (currentElement && currentElement !== document.body) { 819 // Priority 1: Check for data-handle attribute (common in Shopify themes) 820 const handleAttr = currentElement.getAttribute && currentElement.getAttribute('data-handle'); 821 if (handleAttr) { 822 logger.debug('Found product handle via data-handle:', handleAttr); 823 return handleAttr; 824 } 825 826 // Priority 2: Check for data-product-handle attribute (another common pattern) 827 const productHandleAttr = currentElement.getAttribute && currentElement.getAttribute('data-product-handle'); 828 if (productHandleAttr) { 829 logger.debug('Found product handle via data-product-handle:', productHandleAttr); 830 return productHandleAttr; 831 } 832 833 // Priority 3: Check for data-url attribute with /products/ path 834 const urlAttr = currentElement.getAttribute && currentElement.getAttribute('data-url'); 835 if (urlAttr) { 836 const urlMatch = urlAttr.match(/\/products\/([^?#\/]+)/); 837 if (urlMatch) { 838 logger.debug('Found product handle via data-url:', urlMatch[1]); 839 return urlMatch[1]; 840 } 841 } 842 843 // Priority 4: Check for <a href="/products/..."> link in this element 844 const productLink = currentElement.querySelector && currentElement.querySelector('a[href*="/products/"]'); 845 if (productLink) { 846 const href = productLink.getAttribute('href'); 847 const linkMatch = href && href.match(/\/products\/([^?#\/]+)/); 848 if (linkMatch) { 849 logger.debug('Found product handle via product link:', linkMatch[1]); 850 return linkMatch[1]; 851 } 852 } 853 854 currentElement = currentElement.parentElement; 855 } 856 857 return null; 858 }; 859 860 window.convertShopify.updateDOMPricing = function(productId, matchedRules, targetElement = document) { 861 // Changed signature: now accepts array of rules instead of single rule 862 if (!matchedRules || matchedRules.length === 0) return; 863 // Skip DOM updates if no pricing tags defined (customer prefers Visual Editor)
864 if (convert.shopifyPricingTags.length === 0) return; 865 866 // Temporarily disconnect MutationObserver to prevent it from detecting our own changes 867 const observer = this.pricingObserver; 868 if (observer) { 869 observer.disconnect(); 870 logger.debug('MutationObserver disconnected for pricing update'); 871 } 872 873 try { 874 // Use predefined selectors to find price elements efficiently 875 const priceElements = targetElement.querySelectorAll(convert.shopifyPricingTags.join(', ')); 876 // Processing price elements (silent - fires frequently) 877 priceElements.forEach(element => { 878 // Skip cart containers (Cart Transform handles those) 879 if (this.isInsideCartContainer(element)) { 880 return; 881 } 882 883 // Skip elements that were already processed OR have a processed ancestor 884 // (prevents re-processing nested elements when parent innerHTML is updated) 885 let checkElement = element; 886 while (checkElement && checkElement !== document.documentElement) { 887 if (checkElement.hasAttribute('data-convert')) { 888 logger.debug('Skipping element (self or ancestor processed):', element.className); 889 return; 890 } 891 checkElement = checkElement.parentElement; 892 } 893 894 // Skip elements if they contain a child that will be/was processed 895 // (prevents parent from overwriting child's update) 896 const childPriceElements = element.querySelectorAll(convert.shopifyPricingTags.join(', ')); 897 if (childPriceElements.length > 0) { 898 logger.debug('Skipping parent element - has', childPriceElements.length, 'child price elements:', element.className); 899 return; 900 } 901 902 // Check if we've already stored the original price 903 let originalPrice; 904 let currencyPrefix = ''; 905 let currencySuffix = ''; 906 let priceValue; 907 908 if (element.hasAttribute('data-convert-original-price')) { 909 // Use stored original price (prevents compounding) 910 originalPrice = parseFloat(element.getAttribute('data-convert-original-price')); 911 currencyPrefix = element.getAttribute('data-convert-currency-prefix') || ''; 912 currencySuffix = element.getAttribute('data-convert-currency-suffix') || ''; 913 // Get current displayed value for replacement 914 const fullText = element.textContent.trim(); 915 const currentMatch = fullText.match(/([^\d]*?)([\d,]+\.?\d+)([^\d]*?)/); 916 priceValue = currentMatch ? currentMatch[2] : null; 917 logger.debug('Using stored original price:', originalPrice, 'for element:', element.className); 918 } else { 919 // First time - extract and store original price 920 const fullText = element.textContent.trim(); 921 // Match any currency format: $20.00, EUR 21.00, 20,00 â¬, Â¥1000, etc. 922 const priceMatch = fullText.match(/([^\d]*?)([\d,]+\.?\d+)([^\d]*?)/); 923 if (!priceMatch) { 924 logger.error('No price match in element:', element, fullText); 925 return; 926 } 927 currencyPrefix = priceMatch[1].trim(); 928 priceValue = priceMatch[2]; 929 currencySuffix = priceMatch[3].trim(); 930 originalPrice = parseFloat(priceValue.replace(',', '')); 931 932 if (isNaN(originalPrice)) { 933 logger.error('Invalid price:', priceValue); 934 return; 935 } 936 937 // Skip placeholder values (like $0 or $0.00) - themes often show these during DOM transitions 938 // before the real price is loaded. We'll catch the real price on the next MutationObserver cycle. 939 if (originalPrice === 0) { 940 logger.debug('Skipping placeholder price ($0) in element:', element.className); 941 return; 942 } 943 944 // Store original price and currency format for future updates 945 element.setAttribute('data-convert-original-price', originalPrice.toString()); 946 element.setAttribute('data-convert-currency-prefix', currencyPrefix); 947 element.setAttribute('data-convert-currency-suffix', currencySuffix); 948 logger.debug('Stored original price:', originalPrice, 'for element:', element.className); 949 } 950 951 if (!priceValue) { 952 logger.error('Could not extract price value'); 953 return; 954 } 955 956 // Use applyPricingRules to combine multiple rules based on strategy 957 const newPrice = this.applyPricingRules(originalPrice, matchedRules); 958 959 // Mark element as modified BEFORE updating innerHTML (prevents MutationObserver from reprocessing) 960 element.setAttribute('data-convert', ''); 961 962 // Preserve original currency format 963 const formattedValue = newPrice.toFixed(2); 964 965 // Debug: Log innerHTML before replacement 966 // const beforeHTML = element.innerHTML; 967 // console.debug('ð Before replacement - innerHTML:', beforeHTML); 968 // console.debug('ð Searching for priceValue:', priceValue, 'to replace with:', formattedValue); 969 970 // Replace the price in innerHTML (works with nested structures) 971 element.innerHTML = element.innerHTML.replace(priceValue, formattedValue); 972 973 // Debug: Verify replacement actually happened 974 // const afterHTML = element.innerHTML; 975 // console.debug('ð After replacement - innerHTML:', afterHTML); 976 977 // if (beforeHTML === afterHTML) { 978 // logger.error('â innerHTML was NOT updated! Replace failed. Element:', element); 979 // logger.error(' priceValue:', priceValue, 'not found in innerHTML:', beforeHTML); 980 // } else { 981 // logger.info('Price updated:', originalPrice, 'â', newPrice, 'in element:', element.className); 982 // } 983 logger.info('Final price:', originalPrice.toFixed(2), 'â', newPrice.toFixed(2)); 984 }); 985 } finally { 986 // Reconnect MutationObserver after all price updates are complete 987 if (observer) { 988 observer.observe(document.documentElement, { childList: true, subtree: true }); 989 logger.debug('MutationObserver reconnected after pricing update'); 990 } 991 } 992 } 993 /** 994 * Get active pricing rules based on current variation assignment 995 * Returns an array of rules for the active variation 996 * 997 * @returns {Array} Array of active pricing rules with match objects 998 */ 999 window.convertShopify.getActivePricingRules = function() { 1000 // Pricing rules are now stored by Variation JS via convert.addShopifyPr
1000icing() 1001 const pricingRulesMap = this.pricingRules || {}; 1002 1003 const firstKey = Object.keys(pricingRulesMap)[0]; 1004 if (!firstKey) { 1005 logger.debug('No pricing rules configured (waiting for Variation JS)'); 1006 return []; 1007 } 1008 1009 const firstValue = pricingRulesMap[firstKey]; 1010 const isArrayBased = Array.isArray(firstValue); 1011 1012 if (!isArrayBased) { 1013 logger.error('Invalid pricing rules format - expected array-based structure'); 1014 return []; 1015 } 1016 1017 // Validate match structure 1018 const hasCorrectMatchStructure = firstValue[0] && Array.isArray(firstValue[0].match); 1019 if (!hasCorrectMatchStructure) { 1020 logger.error('Invalid match structure - expected match to be an array'); 1021 return []; 1022 } 1023 1024 // Array-based format with match array: variation-specific mapping 1025 // Use getAllVisitorData() to get both current and historical bucketing data 1026 const visitorData = convert.getAllVisitorData(); 1027 const bucketing = visitorData.bucketing || []; 1028 1029 // Collect all rules from active variations 1030 let allRules = []; 1031 for (const {experienceId, variationId} of bucketing) { 1032 if (experienceId && variationId) { 1033 const variationKey = `${experienceId}-${variationId}`; 1034 if (pricingRulesMap[variationKey]) { 1035 const rulesForVariation = pricingRulesMap[variationKey]; 1036 // Append rules (later experiences can override via matching logic) 1037 allRules = allRules.concat(rulesForVariation); 1038 } 1039 } 1040 } 1041 1042 return allRules; 1043 }; 1044 // Fetch product recommendations using Shopify Ajax API 1045 // Populates _conv_products_data with recommended products (collections, tags, etc.) 1046 window.convertShopify.getRecommendations = function() { 1047 const productId = window._conv_product_id_for_recommendations; 1048 1049 if (!productId) { 1050 logger.error('No product ID available for recommendations'); 1051 return; 1052 } 1053 1054 const apiUrl = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root) 1055 ? window.Shopify.routes.root + 'recommendations/products.json?product_id=' + productId + '&limit=10&intent=related' 1056 : '/recommendations/products.json?product_id=' + productId + '&limit=10&intent=related'; 1057 1058 logger.debug('Fetching product recommendations for product ID:', productId); 1059 1060 fetch(apiUrl) 1061 .then(response => response.json()) 1062 .then(data => { 1063 if (data.products && data.products.length > 0) { 1064 logger.debug('Fetched ' + data.products.length + ' product recommendations'); 1065 data.products.forEach(function(product) { 1066 if (product.handle && !window._conv_products_data[product.handle]) { 1067 window._conv_products_data[product.handle] = { 1068 handle: product.handle, 1069 collections: product.collections || [], 1070 tags: product.tags || [], 1071 id: product.id, 1072 title: product.title 1073 }; 1074 logger.debug('Added recommended product to map:', product.handle); 1075 } 1076 }); 1077 1078 // Trigger re-application of pricing rules for any price elements that might be visible 1079 // This ensures related product prices get updated after we have their data 1080 if (this.applyPricingToPage) { 1081 logger.debug('Re-applying pricing after recommendations loaded'); 1082 this.applyPricingToPage(); 1083 } 1084 } else { 1085 logger.debug('No product recommendations returned'); 1086 } 1087 }) 1088 .catch(error => { 1089 logger.warn('Failed to fetch product recommendations:', error); 1090 }); 1091 }; 1092 1093 // Helper function to apply pricing to all price elements on the page 1094 // Can be called after recommendations load or on SPA navigation 1095 window.convertShopify.applyPricingToPage = function() { 1096 // applyPricingToPage (silent - fires on DOM settle) 1097 const activePricingRules = this.getActivePricingRules(); 1098 const hasRules = activePricingRules.length > 0; 1099 1100 if (!hasRules) { 1101 logger.debug('No active pricing rules - skipping'); 1102 return; 1103 } 1104 1105 const pageType = window._conv_page_type; 1106 1107 // Skip cart pages 1108 if (pageType === 'cart') { 1109 logger.debug('Cart page - skipping (Cart Transform handles pricing)'); 1110 return; 1111 } 1112 1113 // Find all price elements 1114 const priceElements = document.querySelectorAll(convert.shopifyPr
1114icingTags.join(', ')); 1115 // Found price elements to process (silent) 1116 1117 // For each price element, find its product and apply pricing 1118 priceElements.forEach(priceElement => { 1119 // Skip cart containers (Cart Transform handles those) 1120 if (this.isInsideCartContainer(priceElement)) { 1121 return; 1122 } 1123 1124 // Clear data-convert to allow repricing (for variant changes, SPA navigation, etc.) 1125 if (priceElement.hasAttribute('data-convert')) { 1126 priceElement.removeAttribute('data-convert'); 1127 logger.debug('Cleared data-convert for repricing:', priceElement.className); 1128 } 1129 1130 // Extract product handle from DOM (checks data-handle, data-url, then <a> links) 1131 let productHandle = this.extractProductHandleFromElement(priceElement); 1132 1133 // Fallback to main product handle if on product page 1134 if (!productHandle && pageType === 'product') { 1135 productHandle = window._conv_product_handle; 1136 } 1137 1138 if (!productHandle) return; 1139 1140 // Get product data from map (populated by Liquid or Ajax API) 1141 const productDataFromMap = window._conv_products_data[productHandle]; 1142 1143 // Build product data 1144 const productData = productDataFromMap ? { 1145 variantId: null, 1146 productId: String(productDataFromMap.id), 1147 sku: null, 1148 handle: String(productHandle), 1149 collections: productDataFromMap.collections || [], 1150 tags: productDataFromMap.tags || [] 1151 } : { 1152 variantId: null, 1153 productId: null, 1154 sku: null, 1155 handle: String(productHandle), 1156 collections: [], 1157 tags: [] 1158 }; 1159 1160 // Find ALL matching rules for this product 1161 const matchedRules = this.findAllMatchingRules(activePricingRules, productData); 1162 1163 if (matchedRules.length > 0) { 1164 this.updateDOMPricing(productHandle, matchedRules, priceElement.parentElement || priceElement); 1165 } 1166 }); 1167 }; 1168 1169 // Refresh cart drawer to reflect updated pricing from Cart Transform 1170 // Only works with Dawn theme's cart-drawer element that has renderContents method 1171 window.convertShopify.refreshCartDrawer = function() { 1172 const cartDrawer = document.querySelector('cart-drawer'); 1173 1174 const executeRefresh = (cartDrawer) => { 1175 if (cartDrawer) { 1176 // Only working approach: cart drawer with renderContents method 1177 if (typeof cartDrawer.renderContents === 'function') { 1178 logger.debug('Refreshing cart drawer using renderContents'); 1179 1180 const sectionsToRender = typeof cartDrawer.getSectionsToRender === 'function' 1181 ? cartDrawer.getSectionsToRender().map(section => section.id) 1182 : ['cart-drawer', 'cart-icon-bubble']; 1183 1184 // Convert array to comma-separated string as required by Shopify Cart API 1185 const sectionsString = sectionsToRender.join(','); 1186 1187 fetch('/cart.js') 1188 .then(res => res.json()) 1189 .then(cart => { 1190 if (cart.items && cart.items.length > 0) { 1191 logger.debug(`Updating ${cart.items.length} cart items in a single request to trigger Cart Transform`); 1192 1193 // Build updates object for ALL items at once 1194 // Use variant IDs (not line item keys) for /cart/update.js 1195 const updates = {}; 1196 cart.items.forEach(item => { 1197 // If multiple items have same variant ID, sum their quantities 1198 const variantId = item.variant_id; 1199 if (updates[variantId]) { 1200 updates[variantId] += item.quantity; 1201 } else { 1202 updates[variantId] = item.quantity; 1203 } 1204 }); 1205 1206 logger.debug('Updates payload:', updates); 1207 logger.debug('Sections to render:', sectionsString); 1208 1209 // Update ALL items in a SINGLE request - triggers Cart Transform once for entire cart 1210 return fetch('/cart/update.js', { 1211 method: 'POST', 1212 headers: { 'Content-Type': 'application/json' }, 1213 body: JSON.stringify({ 1214 updates: updates, 1215 sections: sectionsString 1216 }) 1217 }) 1218 .then(res => { 1219 if (!res.ok) { 1220 throw new Error(`HTTP ${res.status}: ${res.statusText}`); 1221 } 1222 return res.json(); 1223 }) 1224 .then((data) => { 1225 logger.info('All cart items updated, Cart Transform applied'); 1226 logger.debug('Full response data:', data); 1227 logger.debug('data.sections:', data.sections); 1228 return data; 1229 }); 1230 } 1231 return null; 1232 }) 1233 .then(data => { 1234 if (data) { 1235 // CRITICAL FIX: Prevent drawer from opening during refresh (flicker-free) 1236 // renderContents() calls this.open() inside a setTimeout 1237 // We temporarily override open() to prevent it from executing 1238 // Standard behavior: cart drawer is ALWAYS closed after page refresh 1239 const originalOpen = cartDrawer.open; 1240 let openCallBlocked = false;
1241 1242 // Temporarily disable open() 1243 cartDrawer.open = function() { 1244 openCallBlocked = true; 1245 logger.debug('Cart drawer open() blocked during refresh (preventing flicker)'); 1246 }; 1247 1248 // Render contents (will try to call open() but it's disabled) 1249 cartDrawer.renderContents(data); 1250 logger.info('Cart drawer refreshed successfully'); 1251 1252 // Restore original open() method after renderContents completes 1253 setTimeout(() => { 1254 cartDrawer.open = originalOpen; 1255 if (openCallBlocked) { 1256 logger.debug('Cart drawer kept closed (preserving default Shopify behavior)'); 1257 } 1258 }, 50); 1259 } 1260 }) 1261 .catch(error => { 1262 logger.warn('Cart drawer refresh error:', error); 1263 }); 1264 1265 return; 1266 } 1267 1268 // Cart drawer found but doesn't have renderContents method 1269 logger.warn('â ï¸ Cart drawer element found but does not have renderContents() method.'); 1270 logger.warn('â ï¸ Cannot reliably refresh cart drawer to show updated prices from Cart Transform.'); 1271 logger.warn('â ï¸ Prices will update correctly after: page reload, manual cart refresh, or at checkout.'); 1272 logger.debug('Dispatching fallback events (may not work on all themes)'); 1273 } else { 1274 // No cart drawer found at all 1275 logger.debug('Cart drawer web component not found, dispatching custom events'); 1276 } 1277 1278 // Fallback: Dispatch custom events (may not work reliably) 1279 document.documentElement.dispatchEvent(new CustomEvent('cart:refresh', {bubbles: true})); 1280 document.documentElement.dispatchEvent(new CustomEvent('cart:updated', {bubbles: true})); 1281 logger.warn('Cart drawer may require page reload to show updated prices'); 1282 }; 1283 1284 // Try to find cart drawer immediately 1285 if (cartDrawer) { 1286 executeRefresh(cartDrawer); 1287 return; 1288 } 1289 1290 // Cart drawer not found yet - use MutationObserver to wait for it 1291 logger.debug('Cart drawer not found, waiting for it to be added to DOM...'); 1292 const observer = new MutationObserver((mutations, obs) => { 1293 const cartDrawer = document.querySelector('cart-drawer'); 1294 if (cartDrawer) { 1295 obs.disconnect(); 1296 logger.debug('Cart drawer element detected'); 1297 executeRefresh(cartDrawer); 1298 } 1299 }); 1300 1301 observer.observe(document.body, { 1302 childList: true, 1303 subtree: true 1304 }); 1305 1306 // Stop observing after 5 seconds and fallback 1307 setTimeout(() => { 1308 observer.disconnect(); 1309 const cartDrawer = document.querySelector('cart-drawer'); 1310 if (!cartDrawer) { 1311 logger.debug('Cart drawer not detected after timeout, using fallback'); 1312 executeRefresh(null); 1313 } 1314 }, 5000); 1315 }; 1316 1317 // Add pricing functions to window.convertShopify namespace 1318 window.convertShopify.updatePricing = function() { 1319 // updatePricing (silent - fires on variant change) 1320 // Get active pricing rules based on variation assignment 1321 const activePricingRules = this.getActivePricingRules(); 1322 const hasRules = activePricingRules.length > 0; 1323 const pageType = window._conv_page_type; 1324 1325 // Cart pages: Skip DOM updates - Cart Transform handles checkout pricing 1326 if (pageType === 'cart') return; 1327 1328 // Product page: use window variables and update cart 1329 if (pageType === 'product') { 1330 // Build product data object with all available identifiers (cast to strings) 1331 const productData = { 1332 variantId: window._conv_product_variant_id ? String(window._conv_product_variant_id) : null, 1333 productId: window._conv_product_id ? String(window._conv_product_id) : null, 1334 sku: window._conv_product_sku ? String(window._conv_product_sku) : null, 1335 handle: window._conv_product_handle ? String(window._conv_product_handle) : null, 1336 collections: window._conv_product_collections || [], 1337 tags: window._conv_product_tags || [] 1338 }; 1339 1340 logger.debug('Product data:', productData); 1341 1342 if (!productData.variantId && !productData.productId && !productData.sku) { 1343 logger.error('No product identifiers found'); 1344 return; 1345 } 1346 1347 // Find ALL matching pricing rules for main product 1348 const matchedRules = this.findAllMatchingRules(activePricingRules, productData); 1349 1350 // Log for troubleshooting (fires once per updatePricing call) 1351 if (matchedRules.length > 0) { 1352 logger.info('Total rules matched:', matchedRules.length); 1353 } 1354 1355 // Use applyPricingToPage() to handle DOM updates 1356 // This ensures each price element (main + related products) is evaluated individually 1357 if (hasRules) { 1358 // Use applyPricingToPage() with retry logic (prices may load late on SPA navigation) 1359 const updateProductPrices = () => { 1360 const priceElements = document.querySelectorAll(convert.shopifyPr
1360icingTags.join(', ')); 1361 if (priceElements.length === 0) { 1362 // Retry in 100ms (silent) 1363 setTimeout(updateProductPrices, 100); 1364 return; 1365 } 1366 // Call applyPricingToPage to handle main + related products individually 1367 this.applyPricingToPage(); 1368 }; 1369 // Start with a brief delay to allow DOM to paint 1370 requestAnimationFrame(() => setTimeout(updateProductPrices, convert.shopifyPricingObserverDelay)); 1371 } else { 1372 logger.debug('Original variation (no rules) - DOM prices unchanged'); 1373 } 1374 // Update cart attributes for the current product only 1375 // NEVER clear rules for other products that were already added to cart 1376 // Use lock to prevent concurrent cart updates (409 Conflict) 1377 if (isUpdatingCart) { 1378 logger.debug('Cart update already in progress, skipping...'); 1379 return; 1380 } 1381 1382 // Skip cart update if no variant ID (can't update without it) 1383 if (!productData.variantId) { 1384 logger.debug('No variant ID, skipping cart update'); 1385 return; 1386 } 1387 1388 isUpdatingCart = true; 1389 logger.debug('Cart update lock acquired'); 1390 1391 // Calculate hash of current active pricing rules to detect when they change 1392 const currentRulesHash = JSON.stringify(activePricingRules); 1393 1394 // Read pricing rules from cookie (NOT from /cart.js - private attributes are hidden!) 1395 // Cookie persists across pages and subdomains 1396 const cookieRules = convert.getCookie('_conv_p'); 1397 let cookieData = {}; 1398 let rules = {}; 1399 1400 try { 1401 cookieData = cookieRules ? JSON.parse(cookieRules) : {}; 1402 1403 // ALWAYS preserve existing rules for products in cart 1404 // Even if hash changed (rules updated), we can't recalculate other products without their data 1405 // Those products will update when user revisits their pages 1406 1407 // Extract existing variant rules (excluding _meta) 1408 rules = {}; 1409 for (const key in cookieData) { 1410 if (cookieData.hasOwnProperty(key) && key !== '_meta') { 1411 rules[key] = cookieData[key]; 1412 } 1413 } 1414 1415 if (!cookieData._meta) { 1416 logger.debug('No _meta in cookie - first time or old format'); 1417 } else if (cookieData._meta.hash === currentRulesHash) { 1418 logger.debug('Existing rules from cookie (rules unchanged):', rules); 1419 } else { 1420 logger.debug('Pricing rules changed - keeping existing rules, will update current product only'); 1421 } 1422 1423 logger.debug('Loaded existing rules from cookie:', rules); 1424 } catch (e) { 1425 logger.error('Failed to parse pricing rules cookie - cookie may be corrupted:', e); 1426 // Do NOT reset rules = {} here - just leave it as initialized empty object 1427 // We cannot recover from corrupted cookie, user will need to re-add products 1428 } 1429 1430 // Update rules for THIS product only 1431 if (hasRules && matchedRules.length > 0) { 1432 // Store ALL matched rules by variantId (array format) 1433 rules[productData.variantId] = matchedRules.map(rule => ({ 1434 type: rule.type, 1435 value: rule.value 1436 })); 1437 logger.debug(`Updating cart with ${matchedRules.length} pricing rules for variantId`, productData.variantId); 1438 } else if (hasRules && matchedRules.length === 0) { 1439 // Remove THIS variant's rules if no rules apply to it 1440 delete rules[productData.variantId]; 1441 logger.debug('Removing pricing rules for variantId', productData.variantId); 1442 } else { 1443 // No active pricing rules at all (getActivePricingRules returned empty) 1444 // This could mean: 1445 // 1. Original variation (no rules configured) 1446 // 2. Timing issue (Variation JS hasn't executed yet) 1447 // 3. Historical bucketing but pricing rules not found 1448 // DECISION: Skip cart update to preserve existing rules for other products 1449 logger.debug('No active pricing rules found - skipping cart update to preserve existing rules'); 1450 isUpdatingCart = false; 1451 return; 1452 } 1453 1454 // Save updated rules to cookie (for next page) with metadata 1455 const cookieDataToStore = { 1456 _meta: { 1457 hash: currentRulesHash 1458 }, 1459 ...rules 1460 }; 1461 const rulesJson = JSON.stringify(cookieDataToStore); 1462 const rulesSize = new Blob([rulesJson]).size; 1463
1464 // Warn if approaching 4KB cookie limit 1465 if (rulesSize > 4096) { // 4KB exceeded 1466 logger.info('Pricing rules cookie EXCEEDS 4KB limit (' + rulesSize + ' bytes)! Cookie may fail to set. Some products in cart will lose pricing rules.'); 1467 } else if (rulesSize > 3072) { // 3KB threshold (warn before hitting limit) 1468 logger.info('Pricing rules cookie is approaching 4KB limit (' + rulesSize + ' bytes). Large carts with many products may lose pricing rules. Consider reducing the number of rules per product.'); 1469 } 1470 1471 convert.setCookie('_conv_p', rulesJson); 1472 logger.info('Updated pricing rules cookie (' + rulesSize + ' bytes)'); 1473 1474 logger.debug('Cart rules to store (excluding metadata):', rules); 1475 logger.debug('Cart rules JSON:', JSON.stringify(rules)); 1476 1477 // Also update cart attribute (for Cart Transform at checkout) 1478 // Note: This is a private attribute (__conv_pricing_rules) so it won't be returned by /cart.js 1479 // but Cart Transform CAN read it at checkout 1480 // Store ONLY variant rules (exclude _meta) in cart attribute 1481 const hasAnyRules = Object.keys(rules).length > 0; 1482 const attributeValue = hasAnyRules ? JSON.stringify(rules) : ''; 1483 1484 logger.debug('Cart attribute value to send:', attributeValue); 1485 1486 if (hasAnyRules) { 1487 logger.debug('Setting cart attribute with rules'); 1488 } else { 1489 logger.debug('Removing cart attribute (no rules)'); 1490 } 1491 1492 // Also store pricing strategy so Cart Transform uses the same strategy 1493 const strategyValue = hasAnyRules ? JSON.stringify(shopifyPricingSettings) : ''; 1494 logger.debug('Cart strategy to send:', strategyValue); 1495 1496 fetch('/cart/update.js', { 1497 method: 'POST', 1498 headers: { 'Content-Type': 'application/json' }, 1499 body: JSON.stringify({ 1500 attributes: { 1501 __conv_pricing_rules: attributeValue, 1502 __conv_pricing_settings: strategyValue 1503 } 1504 }) 1505 }) 1506 .then(response => { 1507 if (!response.ok) { 1508 logger.error('Cart update failed:', response.status, response.statusText); 1509 return response.text().then(text => logger.error('Response:', text)); 1510 } 1511 return response.json(); 1512 }) 1513 .then(cart => { 1514 if (cart) { 1515 logger.info('Cart updated successfully'); 1516 logger.info('Verify:', cart.attributes); 1517 1518 // Refresh cart drawer to reflect updated pricing from Cart Transform 1519 this.refreshCartDrawer(); 1520 } 1521 }) 1522 .catch(error => { 1523 logger.error('Cart update error:', error); 1524 }) 1525 .finally(() => { 1526 isUpdatingCart = false; 1527 logger.debug('Cart update lock released'); 1528 }); 1529 } 1530 // All other pages (including collection, index, etc.): update DOM prices 1531 else { 1532 // Skip if no active pricing rules (original variation) 1533 if (!hasRules) return; 1534 1535 const updatePagePrices = () => { 1536 if (convert.shopifyPricingTags.length === 0) return; 1537 // Find all price elements on the page 1538 const priceElements = document.querySelectorAll(convert.shopifyPricingTags.join(', ')); 1539 if (priceElements.length === 0) { 1540 // Retry in 100ms (silent) 1541 setTimeout(updatePagePrices, 100); 1542 return; 1543 } 1544 // For each price element, find its product and apply pricing 1545 priceElements.forEach(priceElement => { 1546 // Skip cart containers (Cart Transform handles those) 1547 if (this.isInsideCartContainer(priceElement)) { 1548 return; 1549 } 1550 1551 // Skip if already processed 1552 if (priceElement.hasAttribute('data-convert')) return; 1553 1554 // Extract product handle from DOM (checks data-handle, data-url, then <a> links) 1555 const productHandle = this.extractProductHandleFromElement(priceElement); 1556 if (!productHandle) { 1557 logger.error('Could not find product for price element:', priceElement.className); 1558 return; 1559 } 1560 1561 // Get product data from Liquid-generated map (has full collections/tags data) 1562 const productDataFromMap = window._conv_products_data[productHandle]; 1563 1564 // Build product data using map if available 1565 const productData = productDataFromMap ? { 1566 variantId: null, 1567 productId: String(productDataFromMap.id), 1568 sku: null, 1569 handle: String(productHandle), 1570 collections: productDataFromMap.collections || [], 1571 tags: productDataFromMap.tags || [] 1572 } : { 1573 // Fallback: product not in map 1574 variantId: null, 1575 productId: null, 1576 sku: null, 1577 handle: String(productHandle), 1578 collections: [], 1579 tags: [] 1580 }; 1581 1582 // Find ALL matching rules for this product 1583 // This correctly handles multiple rules per product (e.g., product-specific + collection + tag rules) 1584 const matchedRules = this.findAllMatchingRules(activePricingRules, productData); 1585 1586 if (matchedRules.length === 0) return; 1587 1588 // Apply pricing rules to element (silent - fires per element) 1589 // Apply pricing to this specific element 1590 this.updateDOMPricing(productHandle, matchedRules, priceElement.parentElement || priceElement); 1591 }); 1592 }; 1593 // Start with a brief delay to allow DOM to paint 1594 requestAnimationFrame(() =>
1594 setTimeout(updatePagePrices, convert.shopifyPricingObserverDelay)); 1595 } 1596 } 1597 // Store observer globally so we can disconnect/reconnect during updates 1598 window.convertShopify.pricingObserver = null; 1599 1600 // DOM settling detection - debounce timer for re-applying pricing after DOM stops changing 1601 let domSettlingTimeout = null; 1602 const DOM_SETTLING_DELAY = 150; // Wait 150ms after last mutation before re-applying 1603 1604 /** 1605 * Called when DOM has settled (no mutations for DOM_SETTLING_DELAY ms) 1606 * Clears stale attributes and re-applies pricing to all price elements 1607 */ 1608 window.convertShopify.onDOMSettled = function() { 1609 const pageType = window._conv_page_type; 1610 if (pageType === 'cart') return; // Skip cart pages 1611 1612 const activePricingRules = this.getActivePricingRules(); 1613 if (activePricingRules.length === 0) return; 1614 1615 // DOM settled - check for theme overwrites (silent) 1616 1617 // Find all price elements that may have been replaced by theme 1618 const priceElements = document.querySelectorAll(convert.shopifyPricingTags.join(', ')); 1619 1620 // Check each price element - if the displayed price doesn't match our updated price, 1621 // the theme has overwritten it and we need to re-apply 1622 priceElements.forEach(priceElement => { 1623 // Skip cart containers 1624 if (this.isInsideCartContainer(priceElement)) return; 1625 1626 // If element has data-convert, check if theme overwrote our price 1627 if (priceElement.hasAttribute('data-convert')) { 1628 // Extract current displayed price 1629 const fullText = priceElement.textContent.trim(); 1630 const priceMatch = fullText.match(/([^\d]*?)([\d,]+\.?\d*)([^\d]*?)/); 1631 if (!priceMatch) return; 1632 1633 const displayedPrice = parseFloat(priceMatch[2].replace(',', '')); 1634 const originalPrice = parseFloat(priceElement.getAttribute('data-convert-original-price') || '0'); 1635 1636 // Skip $0 placeholder elements 1637 if (displayedPrice === 0) return; 1638 1639 // If displayed price equals original (theme overwrote our update), re-apply 1640 if (displayedPrice === originalPrice || Math.abs(displayedPrice - originalPrice) < 0.01) { 1641 // Theme reset to original price - clear and re-apply 1642 priceElement.removeAttribute('data-convert'); 1643 priceElement.removeAttribute('data-convert-original-price'); 1644 priceElement.removeAttribute('data-convert-currency-prefix'); 1645 priceElement.removeAttribute('data-convert-currency-suffix'); 1646 } 1647 } 1648 }); 1649 1650 // Now apply pricing to all unprocessed elements 1651 this.applyPricingToPage(); 1652 }; 1653 1654 /** 1655 * Clear all data-convert attributes from price elements 1656 * Called on variant change to ensure fresh re-processing 1657 */ 1658 window.convertShopify.clearPricingAttributes = function() { 1659 if (!convert.shopifyPricingTags || convert.shopifyPricingTags.length === 0) return; 1660 1661 const priceElements = document.querySelectorAll(convert.shopifyPricingTags.join(', ')); 1662 let cleared = 0; 1663 1664 priceElements.forEach(priceElement => { 1665 // Skip cart containers 1666 if (this.isInsideCartContainer(priceElement)) return; 1667 1668 if (priceElement.hasAttribute('data-convert')) { 1669 priceElement.removeAttribute('data-convert'); 1670 priceElement.removeAttribute('data-convert-original-price'); 1671 priceElement.removeAttribute('data-convert-currency-prefix'); 1672 priceElement.removeAttribute('data-convert-currency-suffix'); 1673 cleared++; 1674 } 1675 }); 1676 1677 if (cleared > 0) { 1678 logger.debug('Cleared pricing attributes from', cleared, 'elements for variant change'); 1679 } 1680 }; 1681 1682 // Helper function to build productData for rule matching 1683 // Reused by MutationObserver handlers to avoid code duplication 1684 window.convertShopify.buildProductData = function(productHandle, pageType) { 1685 const mainProductHandle = window._conv_product_handle ? String(window._conv_product_handle) : null; 1686 const isMainProduct = pageType === 'product' && (!productHandle || productHandle === mainProductHandle); 1687 const productDataFromMap = window._conv_products_data[productHandle]; 1688 1689 if (isMainProduct) { 1690 // Main product on product page: use full data from global variables 1691 return { 1692 variantId: window._conv_product_variant_id ? String(window._conv_product_variant_id) : null, 1693 productId: window._conv_product_id ? String(window._conv_product_id) : null, 1694 sku: window._conv_product_sku ? String(window._conv_product_sku) : null, 1695 handle: mainProductHandle, 1696 collections: window._conv_product_collections || [], 1697 tags: window._conv_product_tags || [] 1698 }; 1699 } else if (productDataFromMap) { 1700 // Related product or non-product page: use data from map 1701 return { 1702 variantId: null, 1703 productId: String(productDataFromMap.id), 1704 sku: null, 1705 handle: String(productHandle), 1706 collections: productDataFromMap.collections || [], 1707 tags: productDataFromMap.tags || [] 1708 }; 1709 } else { 1710 // Fallback: product not in map 1711 return { 1712 variantId: null, 1713 productId: null, 1714 sku: null, 1715 handle: String(productHandle), 1716 collections: [], 1717 tags: [] 1718 }; 1719 } 1720 }; 1721 1722 window.convertShopify.observeDOMPricing = function() { 1723 const startObserver = () => { 1724 logger.info('MutationObserver starting'); 1725 1726 // Throttle logging to prevent console spam (theme makes constant DOM changes) 1727 let lastLogTime = 0; 1728 const LOG_THROTTLE_MS = 1000; // Only log once per second max 1729 const throttledLog = (msg, ...args) => { 1730 const now = Date.now(); 1731 if (now - lastLogTime > LOG_THROTTLE_MS) {
1732 lastLogTime = now; 1733 logger.debug(msg, ...args); 1734 } 1735 }; 1736 1737 this.pricingObserver = new MutationObserver((mutations) => { 1738 const pageType = window._conv_page_type; 1739 // Skip cart pages 1740 if (pageType === 'cart') return; 1741 1742 const activePricingRules = this.getActivePricingRules(); 1743 if (activePricingRules.length === 0) return; 1744 1745 // For product pages, extract product handle for each price element 1746 // (to avoid applying main product rules to related product thumbnails) 1747 if (pageType === 'product') { 1748 mutations.forEach(mutation => { 1749 mutation.addedNodes.forEach(node => { 1750 if (node.nodeType === Node.ELEMENT_NODE) { 1751 // Skip if the node itself or any ancestor is inside a cart container 1752 const isInCart = this.isInsideCartContainer(node); 1753 if (isInCart) { 1754 return; 1755 } 1756 1757 // Find price elements in the new node 1758 const priceElements = node.querySelectorAll ? 1759 Array.from(node.querySelectorAll(convert.shopifyPricingTags.join(', '))).filter(el => !el.hasAttribute('data-convert')) : 1760 []; 1761 1762 // Also check if the node itself is a price element 1763 if (node.matches && node.matches(convert.shopifyPricingTags.join(', ')) && !node.hasAttribute('data-convert')) { 1764 priceElements.unshift(node); 1765 } 1766 1767 priceElements.forEach(priceElement => { 1768 // Extract product handle from DOM (checks data-handle, data-url, then <a> links) 1769 const extractedHandle = this.extractProductHandleFromElement(priceElement); 1770 1771 // Determine if this is main product or related product 1772 // NOTE: This code ONLY runs on product pages (pageType === 'product') 1773 const mainProductHandle = window._conv_product_handle ? String(window._conv_product_handle) : null; 1774 1775 // On product pages specifically: 1776 // - _conv_products_data contains the main product + related/recommended products (if available) 1777 // - recommendations.products are pre-populated from Shopify recommendations 1778 // - Other related products (custom upsells, etc.) may NOT be in the map 1779 // Therefore: 1780 // - If no handle extracted â main product (use globals) 1781 // - If extracted handle matches main â main product (use globals) 1782 // - If extracted handle is in map â related product with data (use map) 1783 // - If extracted handle NOT in map â related product without data (minimal) 1784 const productDataFromMap = extractedHandle ? window._conv_products_data[extractedHandle] : null; 1785 const isMainProduct = !extractedHandle || extractedHandle === mainProductHandle; 1786 const productHandle = isMainProduct ? mainProductHandle : extractedHandle; 1787 1788 if (!productHandle) return; 1789 1790 // Build product data based on context 1791 const productData = isMainProduct ? { 1792 // Main product: use full data from global variables 1793 variantId: window._conv_product_variant_id ? String(window._conv_product_variant_id) : null, 1794 productId: window._conv_product_id ? String(window._conv_product_id) : null, 1795 sku: window._conv_product_sku ? String(window._conv_product_sku) : null, 1796 handle: String(productHandle), 1797 collections: window._conv_product_collections || [], 1798 tags: window._conv_product_tags || [] 1799 } : productDataFromMap ? { 1800 // Related product: in map (from recommendations), has full data 1801 variantId: null, 1802 productId: String(productDataFromMap.id), 1803 sku: null, 1804 handle: String(productHandle), 1805 collections: productDataFromMap.collections || [], 1806 tags: productDataFromMap.tags || [] 1807 } : { 1808 // Related product: NOT in map (custom section), minimal data only 1809 variantId: null, 1810 productId: null, 1811 sku: null, 1812 handle: String(productHandle), 1813 collections: [], 1814 tags: [] 1815 }; 1816 1817 // Find ALL matching rules for this product 1818 const matchedRules = this.findAllMatchingRules(activePricingRules, productData); 1819 1820 if (matchedRules.length > 0) { 1821 this.updateDOMPricing(productHandle, matchedRules, priceElement.parentElement || priceElement); 1822 } 1823 }); 1824 } 1825 }); 1826 }); 1827 } 1828 // For all other non-cart pages, find product handle for each price element 1829 else { 1830 mutations.forEach(mutation => {
1831 mutation.addedNodes.forEach(node => { 1832 if (node.nodeType === Node.ELEMENT_NODE) { 1833 // Skip if the node itself or any ancestor is inside a cart container 1834 if (this.isInsideCartContainer(node)) return; 1835 1836 // Find price elements in the new node 1837 const priceElements = node.querySelectorAll ? 1838 Array.from(node.querySelectorAll(convert.shopifyPricingTags.join(', '))).filter(el => !el.hasAttribute('data-convert')) : 1839 []; 1840 priceElements.forEach(priceElement => { 1841 // Extract product handle from DOM (checks data-handle, data-url, then <a> links) 1842 const productHandle = this.extractProductHandleFromElement(priceElement); 1843 if (productHandle) { 1844 // Get product data from Liquid-generated map (has full collections/tags data) 1845 const productDataFromMap = window._conv_products_data[productHandle]; 1846 1847 // Build product data using map if available 1848 const productData = productDataFromMap ? { 1849 variantId: null, 1850 productId: String(productDataFromMap.id), 1851 sku: null, 1852 handle: String(productHandle), 1853 collections: productDataFromMap.collections || [], 1854 tags: productDataFromMap.tags || [] 1855 } : { 1856 // Fallback: product not in map 1857 variantId: null, 1858 productId: null, 1859 sku: null, 1860 handle: String(productHandle), 1861 collections: [], 1862 tags: [] 1863 }; 1864 1865 // Find ALL matching rules for this product 1866 const matchedRules = this.findAllMatchingRules(activePricingRules, productData); 1867 1868 if (matchedRules.length > 0) { 1869 this.updateDOMPricing(productHandle, matchedRules, priceElement.parentElement || priceElement); 1870 } 1871 } 1872 }); 1873 } 1874 }); 1875 }); 1876 } 1877 1878 // Handle characterData mutations (text content changes in price elements) 1879 // This catches when themes update price text without replacing the element 1880 mutations.forEach(mutation => { 1881 if (mutation.type === 'characterData' && mutation.target.nodeType === Node.TEXT_NODE) { 1882 const parentElement = mutation.target.parentElement; 1883 if (!parentElement) return; 1884 1885 // Check if parent is a price element 1886 const isPriceElement = convert.shopifyPricingTags.some(tag => 1887 parentElement.matches && parentElement.matches(tag) 1888 ); 1889 1890 if (isPriceElement && !this.isInsideCartContainer(parentElement)) { 1891 // Clear data-convert to allow re-processing (theme overwrote our price) 1892 if (parentElement.hasAttribute('data-convert')) { 1893 parentElement.removeAttribute('data-convert'); 1894 } 1895 1896 // Re-apply pricing 1897 const productHandle = this.extractProductHandleFromElement(parentElement) || 1898 (pageType === 'product' ? window._conv_product_handle : null); 1899 1900 if (productHandle) { 1901 const productData = this.buildProductData(productHandle, pageType); 1902 const matchedRules = this.findAllMatchingRules(activePricingRules, productData); 1903 if (matchedRules.length > 0) { 1904 this.updateDOMPricing(productHandle, matchedRules, parentElement); 1905 } 1906 } 1907 } 1908 } 1909 }); 1910 1911 // DOM settling detection: debounce pricing re-application 1912 // Themes may do multiple rapid DOM updates - wait until DOM stops changing 1913 if (domSettlingTimeout) { 1914 clearTimeout(domSettlingTimeout); 1915 } 1916 domSettlingTimeout = setTimeout(() => { 1917 window.convertShopify.onDOMSettled(); 1918 }, DOM_SETTLING_DELAY); 1919 }); 1920 // Watch for childList (element changes) AND characterData (text content changes) 1921 this.pricingObserver.observe(document.documentElement, { 1922 childList: true, 1923 subtree: true, 1924 characterData: true // Catch when theme updates price text directly 1925 }); 1926 logger.info('MutationObserver started'); 1927 }; 1928 // Start observer immediately (document.documentElement always exists) 1929 startObserver(); 1930 } 1931 })(); 1932 </script>
1932 1933
1933<script async src="https://cdn-4.convertexperiments.com/v1/js/10041832-10042217.js" type="text/javascript"></script>
1933 1934
1934<script> 1935 (function(){ 1936 //disables the automatic body hiding of the convert script 1937 var _conv_prevent_bodyhide = true; 1938 //the duration, in mili seconds, for which the body is kept hidden if Convert tracking code does not load. 1939 var hideTimeout = 500; //modify this to whatever you think it's suitable 1940 1941 var cssToHide = "body {visibility: hidden !important;}", 1942 headElement = document.head || document.getElementsByTagName("headElement")[0], 1943 styleElement = document.createElement("style"); 1944 headElement.appendChild(styleElement); 1945 styleElement.type = "text/css"; 1946 styleElement.id = "convert_hide_body";//do not change this 1947 if (styleElement.styleSheet){ 1948 styleElement.styleSheet.cssText = cssToHide; 1949 } else { 1950 styleElement.appendChild(document.createTextNode(cssToHide)); 1951 } 1952 setTimeout(function() {var c_h = document.getElementById("convert_hide_body"); if(c_h) c_h.outerHTML = "";}, hideTimeout) 1953 })(); 1954 </script>
1954 1955 1956
1956<script id="pandectes-rules">100100 1957 /* PANDECTES-GDPR: DO NOT MODIFY AUTO GENERATED CODE OF THIS SCRIPT */ 1958 1959 window.PandectesSettings = {"store":{"plan":"plus","theme":"Main Theme - Github","primaryLocale":"en","adminMode":false},"tsPublished":1699911528,"declaration":{"showPurpose":false,"showProvider":false,"showDateGenerated":true},"language":{"languageMode":"Single","fallbackLanguage":"en","languageDetection":"browser","languagesSupported":[]},"texts":{"managed":{"headerText":{"en":"We respect your privacy"},"consentText":{"en":"When you visit our website, if you give your consent to the use of all cookies by clicking the âAccept Allâ button, we and our third-party providers will use cookies and other trackers to personalize your experience, to conduct analytics, and to provide targeted online advertising. You can also select the types of cookies that you are willing to allow us to use by clicking the \"Manage Cookie Preferences\" link. If you want to deny the use of optional cookies on this website by clicking the âReject Allâ button, we will only use essential and functional cookies that are necessary for the functioning of the website and to remember your cookie consent choice for future visits. Regardless of what you choose now, you can change your mind at any time by using our cookie tool, which will set a necessary cookie on your device to remember your preferences. For more information about our privacy practices and how our website uses cookies, please see our privacy policy."},"dismissButtonText":{"en":"Ok"},"linkText":{"en":"Privacy Policy"},"imprintText":{"en":"Terms of Service"},"preferencesButtonText":{"en":"Manage Cookie Preferences"},"allowButtonText":{"en":"Accept"},"denyButtonText":{"en":"Decline"},"leaveSiteButtonText":{"en":"Leave this site"},"cookiePolicyText":{"en":"Cookie policy"},"preferencesPopupTitleText":{"en":"Manage consent preferences"},"preferencesPopupIntroText":{"en":"We use cookies to optimize website functionality, analyze the performance, and provide personalized experience to you. Some cookies are essential to make the website operate and function correctly. Those cookies cannot be disabled. In this window you can manage your preference of cookies."},"preferencesPopupCloseButtonText":{"en":"Close"},"preferencesPopupAcceptAllButtonText":{"en":"Accept all"},"preferencesPopupRejectAllButtonText":{"en":"Reject all"},"preferencesPopupSaveButtonText":{"en":"Save preferences"},"accessSectionTitleText":{"en":"Data portability"},"accessSectionParagraphText":{"en":"You have the right to request access to your data at any time."},"rectificationSectionTitleText":{"en":"Data Rectification"},"rectificationSectionParagraphText":{"en":"You have the right to request your data to be updated whenever you think it is appropriate."},"erasureSectionTitleText":{"en":"Right to be forgotten"},"erasureSectionParagraphText":{"en":"You have the right to ask all your data to be erased. After that, you will no longer be able to access your account."},"declIntroText":{"en":"We use cookies to optimize website functionality, analyze the performance, and provide personalized experience to you. Some cookies are essential to make the website operate and function correctly. Those cookies cannot be disabled. In this window you can manage your preference of cookies."}}
1959,"categories":{"strictlyNecessaryCookiesTitleText":{"en":"Strictly necessary cookies"},"functionalityCookiesTitleText":{"en":"Functional cookies"},"performanceCookiesTitleText":{"en":"Performance cookies"},"targetingCookiesTitleText":{"en":"Targeting cookies"},"unclassifiedCookiesTitleText":{"en":"Unclassified cookies"},"strictlyNecessaryCookiesDescriptionText":{"en":"These cookies are essential in order to enable you to move around the website and use its features, such as accessing secure areas of the website. The website cannot function properly without these cookies."},"functionalityCookiesDescriptionText":{"en":"These cookies enable the site to provide enhanced functionality and personalisation. They may be set by us or by third party providers whose services we have added to our pages. If you do not allow these cookies then some or all of these services may not function properly."},"performanceCookiesDescriptionText":{"en":"These cookies enable us to monitor and improve the performance of our website. For example, they allow us to count visits, identify traffic sources and see which parts of the site are most popular."},"targetingCookiesDescriptionText":{"en":"These cookies may be set through our site by our advertising partners. They may be used by those companies to build a profile of your interests and show you relevant adverts on other sites. They do not store directly personal information, but are based on uniquely identifying your browser and internet device. If you do not allow these cookies, you will experience less targeted advertising."},"unclassifiedCookiesDescriptionText":{"en":"Unclassified cookies are cookies that we are in the process of classifying, together with the providers of individual cookies."}},"auto":{"declName":{"en":"Name"},"declPath":{"en":"Path"},"declType":{"en":"Type"},"declDomain":{"en":"Domain"},"declPurpose":{"en":"Purpose"},"declProvider":{"en":"Provider"},"declRetention":{"en":"Retention"},"declFirstParty":{"en":"First-party"},"declThirdParty":{"en":"Third-party"},"declSeconds":{"en":"seconds"},"declMinutes":{"en":"minutes"},"declHours":{"en":"hours"},"declDays":{"en":"days"},"declMonths":{"en":"months"},"declYears":{"en":"years"},"declSession":{"en":"Session"},"cookiesDetailsText":{"en":"Cookies details"},"preferencesPopupAlwaysAllowedText":{"en":"Always allowed"},"submitButton":{"en":"Submit"},"submittingButton":{"en":"Submitting..."},"cancelButton":{"en":"Cancel"},"guestsSupportInfoText":{"en":"Please login with your customer account to further proceed."},"guestsSupportEmailPlaceholder":{"en":"E-mail address"},"guestsSupportEmailValidationError":{"en":"Email is not valid"},"guestsSupportEmailSuccessTitle":{"en":"Thank you for your request"},"guestsSupportEmailFailureTitle":{"en":"A problem occurred"},"guestsSupportEmailSuccessMessage":{"en":"If you are registered as a customer of this store, you will soon receive an email with instructions on how to proceed."},"guestsSupportEmailFailureMessage":{"en":"Your request was not submitted. Please try again and if problem persists, contact store owner for assistance."},"confirmationSuccessTitle":{"en":"Your request is verified"},"confirmationFailureTitle":{"en":"A problem occurred"},"confirmationSuccessMessage":{"en":"We will soon get back to you as to your request."},"confirmationFailureMessage":{"en":"Your request was not verified. Please try again and if problem persists, contact store owner for assistance"},"consentSectionTitleText":{"en":"Your cookie consent"},"consentSectionNoConsentText":{"en":"You have not consented to the cookies policy of this website."},"consentSectionConsentedText":{"en":"You consented to the cookies policy of this website on"},"consentStatus":{"en":"Consent preference"},"consentDate":{"en":"Consent date"},"consentId":{"en":"Consent ID"},"consentSectionChangeConsentActionText":{"en":"Change consent preference"},"accessSectionGDPRRequestsActionText":{"en":"Data subject requests"},"accessSectionAccountInfoActionText":{"en":"Personal data"},"accessSectionOrdersRecordsActionText":{"en":"Orders"},"accessSectionDownloadReportActionText":{"en":"Request export"},"rectificationCommentPlaceholder":{"en":"Describe what you want to be updated"},"rectificationCommentValidationError":{"en":"Comment is required"},"rectificationSectionEditAccountActionText":{"en":"Request an update"}
1959,"erasureSectionRequestDeletionActionText":{"en":"Request personal data deletion"}}},"library":{"previewMode":false,"fadeInTimeout":0,"defaultBlocked":7,"showLink":true,"showImprintLink":true,"enabled":true,"cookie":{"name":"_pandectes_gdpr","expiryDays":365,"secure":true,"domain":""},"dismissOnScroll":false,"dismissOnWindowClick":false,"dismissOnTimeout":false,"palette":{"popup":{"background":"#FFFFFF","backgroundForCalculations":{"a":1,"b":255,"g":255,"r":255},"text":"#000000"},"button":{"background":"transparent","backgroundForCalculations":{"a":1,"b":255,"g":255,"r":255},"text":"#000000","textForCalculation":{"a":1,"b":0,"g":0,"r":0},"border":"#000000"}},"content":{"href":"https://www.glowrecipe.com/pages/privacy-policy","imprintHref":"https://www.glowrecipe.com/pages/terms-of-service","close":"✕","target":"_blank","logo":""},"window":"<div role=\"dialog\" aria-live=\"polite\" aria-label=\"cookieconsent\" aria-describedby=\"cookieconsent:desc\" id=\"pandectes-banner\" class=\"cc-window-wrapper cc-bottom-center-wrapper\"><div class=\"pd-cookie-banner-window cc-window {{classes}}\"><!--googleoff: all-->{{children}}<!--googleon: all--></div></div>","compliance":{"custom":"<div class=\"cc-compliance cc-highlight\">{{preferences}}{{allow}}{{deny}}</div>"},"type":"custom","layouts":{"basic":"{{messagelink}}{{compliance}}"},"position":"bottom-center","theme":"wired","revokable":false,"animateRevokable":false,"revokableReset":false,"revokableLogoUrl":"https://cdn.shopify.com/s/files/1/0543/8301/t/310/assets/pandectes-reopen-logo.png?v=1698765832","revokablePlacement":"bottom-left","revokableMarginHorizontal":15,"revokableMarginVertical":15,"static":false,"autoAttach":true,"hasTransition":false,"blacklistPage":[""]},"geolocation":{"brOnly":false,"caOnly":false,"euOnly":false,"jpOnly":false,"thOnly":false,"canadaOnly":false,"globalVisibility":true},"dsr":{"guestsSupport":true,"accessSectionDownloadReportAuto":false},"banner":{"resetTs":1677265848,"extraCss":" .cc-banner-logo {max-width: 36em!important;} @media(min-width: 768px) {.cc-window.cc-floating{max-width: 36em!important;width: 36em!important;}} .cc-message, .cc-header, .cc-logo {text-align: center} .cc-window-wrapper{z-index: 2147483647;} .cc-window{z-index: 2147483647;font-size: 10px!important;font-family: inherit;} .cc-header{font-size: 10px!important;font-family: inherit;} .pd-cp-ui{font-family: inherit; background-color: #FFFFFF;color:#000000;} button.pd-cp-btn, a.pd-cp-btn{} input + .pd-cp-preferences-slider{background-color: rgba(0, 0, 0, 0.3)} .pd-cp-scrolling-section::-webkit-scrollbar{background-color: rgba(0, 0, 0, 0.3)} input:checked + .pd-cp-preferences-slider{background-color: rgba(0, 0, 0, 1)} .pd-cp-scrolling-section::-webkit-scrollbar-thumb {background-color: rgba(0, 0, 0, 1)} .pd-cp-ui-close{color:#000000;} .pd-cp-preferences-slider:before{background-color: #FFFFFF} .pd-cp-title:before {border-color: #000000!important} .pd-cp-preferences-slider{background-color:#000000} .pd-cp-toggle{color:#000000!important} @media(max-width:699px) {.pd-cp-ui-close-top svg {fill: #000000}} .pd-cp-toggle:hover,.pd-cp-toggle:visited,.pd-cp-toggle:active{color:#000000!important} .pd-cookie-banner-window {box-shadow: 0 0 18px rgb(0 0 0 / 20%);} ","customJavascript":null,"showPoweredBy":false,"hybridStrict":false,"cookiesBlockedByDefault":"7","isActive":true,"implicitSavePreferences":false,"cookieIcon":false,"blockBots":false,"showCookiesDetails":true,"hasTransition":false,"blockingPage":false,"showOnlyLandingPage":false,"leaveSiteUrl":"https://www.google.com","linkRespectStoreLang":false},"cookies":{"0":[{"name":"localization","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":"Shopify store localization"}},{"name":"secure_customer_sig","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":"Used in connection with customer login."}},{"name":"_cmp_a","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"24 hour(s)","expires":24,"unit":"declHours","purpose":{"en":"Used for managing customer privacy settings."}},{"name":"cart_currency","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"15 day(s)","expires":15,"unit":"declSession","purpose":{"en":"Used in connection with shopping cart."}},{"name":"keep_alive","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"30 minute(s)","expires":30,"unit":"declMinutes","purpose":{"en":"Used in connection with buyer localization."}},{"name":"shopify_pay_redirect","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"60 minute(s)","expires":60,"unit":"declMinutes","purpose":{"en":"Used in connection with checkout."}},{"name":"_secure_session_id","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"24 hour(s)","expires":24,"unit":"declHours","purpose":{"en":"Used in connection with navigation through a storefront."}}],"1":[{"name":"PHPSESSID","domain":"tracead.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","expires":-1677265915,"unit":"declSeconds","purpose":{"en":"Cookie is placed by PHP with unknown functionality"}},{"name":"_hjSession_2695336","domain":".glowrecipe.com","path":"/","provider":"Hotjar","firstParty":true,"retention":"30 minute(s)","expires":30,"unit":"declMinutes","purpose":{"en":"Used by Hotjar to provide functions across pages."}},{"name":"_shg_user_id","domain":"www.glowrecipe.com","path":"/","provider":"Shogun","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":"Used by Shogun Application"}},{"name":"_shg_session_id","domain":"www.glowrecipe.com","path":"/","provider":"Shogun","firstParty":true,"retention":"30 minute(s)","expires":30,"unit":"declMinutes","purpose":{"en":"Used by Shogun Application"}},{"name":"_hjSessionUser_2695336","domain":".glowrecipe.com","path":"/","provider":"Hotjar","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":"Used by Hotjar to store a unique user ID."}}],"2":[{"name":"_landing_page","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"14 day(s)","expires":14,"unit":"declSession","purpose":{"en":"Tracks landing pages."}},{"name":"_shopify_y","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":"Shopify analytics."}}
1959,{"name":"_s","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"31 minute(s)","expires":31,"unit":"declMinutes","purpose":{"en":"Shopify analytics."}},{"name":"_y","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":"Shopify analytics."}},{"name":"_orig_referrer","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"14 day(s)","expires":14,"unit":"declSession","purpose":{"en":"Tracks landing pages."}},{"name":"_shopify_s","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"31 minute(s)","expires":31,"unit":"declMinutes","purpose":{"en":"Shopify analytics."}},{"name":"_ga_NF5EKRHSSV","domain":".glowrecipe.com","path":"/","provider":"Google","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":"Cookie is set by Google Analytics with unknown functionality"}},{"name":"_shopify_sa_t","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"30 minute(s)","expires":30,"unit":"declMinutes","purpose":{"en":"Shopify analytics relating to marketing & referrals."}},{"name":"_shopify_sa_p","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"30 minute(s)","expires":30,"unit":"declMinutes","purpose":{"en":"Shopify analytics relating to marketing & referrals."}},{"name":"_ga","domain":".glowrecipe.com","path":"/","provider":"Google","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":"Cookie is set by Google Analytics with unknown functionality"}},{"name":"_gid","domain":".glowrecipe.com","path":"/","provider":"Google","firstParty":true,"retention":"24 hour(s)","expires":24,"unit":"declHours","purpose":{"en":"Cookie is placed by Google Analytics to count and track pageviews."}},{"name":"_gat","domain":".glowrecipe.com","path":"/","provider":"Google","firstParty":true,"retention":"7 second(s)","expires":7,"unit":"declSeconds","purpose":{"en":"Cookie is placed by Google Analytics to filter requests from bots."}}],"4":[{"name":"_gcl_au","domain":".glowrecipe.com","path":"/","provider":"Google","firstParty":true,"retention":"90 day(s)","expires":90,"unit":"declSession","purpose":{"en":"Cookie is placed by Google Tag Manager to track conversions."}},{"name":"_fbp","domain":".glowrecipe.com","path":"/","provider":"Facebook","firstParty":true,"retention":"90 day(s)","expires":90,"unit":"declSession","purpose":{"en":"Cookie is placed by Facebook to track visits across websites."}},{"name":"_pin_unauth","domain":".glowrecipe.com","path":"/","provider":"Pinterest","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":"Used to group actions for users who cannot be identified by Pinterest."}},{"name":"test_cookie","domain":".doubleclick.net","path":"/","provider":"Google","firstParty":true,"retention":"15 minute(s)","expires":15,"unit":"declMinutes","purpose":{"en":"To measure the visitorsâ actions after they click through from an advert. Expires after each visit."}},{"name":"__kla_id","domain":"www.glowrecipe.com","path":"/","provider":"Klaviyo","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":"Tracks when someone clicks through a Klaviyo email to your website"}},{"name":"IDE","domain":".doubleclick.net","path":"/","provider":"Google","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":"To measure the visitorsâ actions after they click through from an advert. Expires after 1 year."}}],"8":[{"name":"tracead_v2","domain":"tracead.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"_ttp","domain":".tiktok.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"__olAlertsForShop","domain":"www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","expires":-1677265915,"unit":"declSeconds","purpose":{"en":""}},{"name":"_ttp","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"_tt_enable_cookie","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"_hjIncludedInSessionSample_2695336","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"2 minute(s)","expires":2,"unit":"declMinutes","purpose":{"en":""}},{"name":"_hjIncludedInPageviewSample","domain":"www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"2 minute(s)","expires":2,"unit":"declMinutes","purpose":{"en":""}},{"name":"_hjAbsoluteSessionInProgress","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"30 minute(s)","expires":30,"unit":"declMinutes","purpose":{"en":""}},{"name":"__idcontext","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"carthash","domain":"www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","expires":-1677265915,"unit":"declSeconds","purpose":{"en":""}},{"name":"__adcontext","domain":".cdnwidget.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"dd9b583d-b899-4ac1-845d-575213087efc","domain":"www.pubxtags.com","path":"/","provider":"Unknown","firstParty":true,"retention":"30 day(s)","expires":30,"unit":"declSession","purpose":{"en":""}},{"name":"__3idcontext","domain":".cdnwidget.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"bounceClientVisit4566v","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"30 minute(s)","expires":30,"unit":"declMinutes","purpose":{"en":""}},{"name":"did","domain":".pippio.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"didts","domain":".pippio.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"bounceClientVisit4566c","domain":".bounceexchange.com","path":"/","provider":"Unknown","firstParty":true,"retention":"30 minute(s)","expires":30,"unit":"declMinutes","purpose":{"en":""}},{"name":"nnls","domain":".pippio.com","path":"/","provider":"Unknown","firstParty":true,"retention":"60 day(s)","expires":60,"unit":"declSession","purpose":{"en":""}},{"name":"pxrc","domain":".pippio.com","path":"/","provider":"Unknown","firstParty":true,"retention":"60 day(s)","expires":60,"unit":"declSession","purpose":{"en":""}}
1959,{"name":"_ps_session","domain":"www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"24 hour(s)","expires":24,"unit":"declHours","purpose":{"en":""}},{"name":"bounceClientVisit4566","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"_hjFirstSeen","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"30 minute(s)","expires":30,"unit":"declMinutes","purpose":{"en":""}}]},"blocker":{"isActive":false,"googleConsentMode":{"id":"","analyticsId":"","isActive":false,"adStorageCategory":4,"analyticsStorageCategory":2,"personalizationStorageCategory":1,"functionalityStorageCategory":1,"customEvent":true,"securityStorageCategory":0,"redactData":true,"urlPassthrough":false},"facebookPixel":{"id":"","isActive":false,"ldu":false},"rakuten":{"isActive":false,"cmp":false,"ccpa":false},"gpcIsActive":false,"defaultBlocked":7,"patterns":{"whiteList":[],"blackList":{"1":[],"2":[],"4":[],"8":[]},"iframesWhiteList":[],"iframesBlackList":{"1":[],"2":[],"4":[],"8":[]},"beaconsWhiteList":[],"beaconsBlackList":{"1":[],"2":[],"4":[],"8":[]}}}} 1960 1961 !function(){"use strict";window.PandectesRules=window.PandectesRules||{},window.PandectesRules.manualBlacklist={1:[],2:[],4:[]},window.PandectesRules.blacklistedIFrames={1:[],2:[],4:[]},window.PandectesRules.blacklistedCss={1:[],2:[],4:[]},window.PandectesRules.blacklistedBeacons={1:[],2:[],4:[]};var e="javascript/blocked",t="_pandectes_gdpr";function n(e){return new RegExp(e.replace(/[/\\.+?$()]/g,"\\$&").replace("*","(.*)"))}
1961var r=function(e){try{return JSON.parse(e)}catch(e){return!1}},a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"log",n=new URLSearchParams(window.location.search);n.get("log")&&console[t]("PandectesRules: ".concat(e))};function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,i=[],s=!0,o=!1;try{for(n=n.call(e);!(s=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);s=!0);}catch(e){o=!0,a=e}finally{try{s||null==n.return||n.return()}finally{if(o)throw a}}return i}(e,t)||u(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e){return function(e){if(Array.isArray(e))return d(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||u(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var f=!(void 0===window.dataLayer||!Array.isArray(window.dataLayer)||!window.dataLayer.some((function(e){return"pandectes_full_scan"===e.event})));a("userAgent ->
1961 ".concat(window.navigator.userAgent.substring(0,50)));var p=function(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t,a="; "+document.cookie,i=a.split("; "+n+"=");if(i.length<2)e={};else{var s=i.pop(),o=s.split(";");e=window.atob(o.shift())}var c=r(e);return!1!==c?c:e}(),g=window.PandectesSettings,y=g.banner.isActive,h=g.blocker.defaultBlocked,m=p&&null!==p.preferences&&void 0!==p.preferences?p.preferences:null,w=f?0:y?null===m?h:m:0,v={1:0==(1&w),2:0==(2&w),4:0==(4&w)},b=window.PandectesSettings.blocker.patterns,k=b.blackList,L=b.whiteList,S=b.iframesBlackList,P=b.iframesWhiteList,A=b.beaconsBlackList,C=b.beaconsWhiteList,_={blackList:[],whiteList:[],iframesBlackList:{1:[],2:[],4:[],8:[]},iframesWhiteList:[],beaconsBlackList:{1:[],2:[],4:[],8:[]},beaconsWhiteList:[]};[1,2,4].map((function(e){var t;v[e]||((t=_.blackList).push.apply(t,l(k[e].length?k[e].map(n):[])),_.iframesBlackList[e]=S[e].length?S[e].map(n):[],_.beaconsBlackList[e]=A[e].length?A[e].map(n):[])})),_.whiteList=L.length?L.map(n):[],_.iframesWhiteList=P.length?P.map(n):[],_.beaconsWhiteList=C.length?C.map(n):[];var B={scripts:[],iframes:{1:[],2:[],4:[]},beacons:{1:[],2:[],4:[]},css:{1:[],2:[],4:[]}},O=function(t,n){return t&&(!n||n!==e)&&(!_.blackList||_.blackList.some((function(e){return e.test(t)})))&&(!_.whiteList||_.whiteList.every((function(e){return!e.test(t)})))},E=function(e){var t=e.getAttribute("src");return _.blackList&&_.blackList.every((function(e){return!e.test(t)}))||_.whiteList&&_.whiteList.some((function(e){return e.test(t)}))},I=function(e,t){var n=_.iframesBlackList[t],r=_.iframesWhiteList;return e&&(!n||n.some((function(t){return t.test(e)})))&&(!r||r.every((function(t){return!t.test(e)})))},j=function(e,t){var n=_.beaconsBlackList[t],r=_.beaconsWhiteList;return e&&(!n||n.some((function(t){return t.test(e)})))&&(!r||r.every((function(t){return!t.test(e)})))},R=new MutationObserver((function(e){for(var t=0;t<e.length;t++)for(var n=e[t].addedNodes,r=0;r<n.length;r++){var a=n[r],i=a.dataset&&a.dataset.cookiecategory;if(1===a.nodeType&&"LINK"===a.tagName){var s=a.dataset&&a.dataset.href;if(s&&i)switch(i){case"functionality":case"C0001":B.css[1].push(s);break;case"performance":case"C0002":B.css[2].push(s);break;case"targeting":case"C0003":B.css[4].push(s)}}}})),T=new MutationObserver((function(t){for(var n=0;n<t.length;n++)for(var r=t[n].addedNodes,a=function(t){var n=r[t],a=n.src||n.dataset&&n.dataset.src,i=n.dataset&&n.dataset.cookiecategory;if(1===n.nodeType&&"IFRAME"===n.tagName){if(a){var s=!1;I(a,1)||"functionality"===i||"C0001"===i?(s=!0,B.iframes[1].push(a)):I(a,2)||"performance"===i||"C0002"===i?(s=!0,B.iframes[2].push(a)):(I(a,4)||"targeting"===i||"C0003"===i)&&(s=!0,B.iframes[4].push(a)),s&&(n.removeAttribute("src"),n.setAttribute("data-src",a))}}else if(1===n.nodeType&&"IMG"===n.tagName){if(a){var o=!1;j(a,1)?(o=!0,B.beacons[1].push(a)):j(a,2)?(o=!0,B.beacons[2].push(a)):j(a,4)&&(o=!0,B.beacons[4].push(a)),o&&(n.removeAttribute("src"),n.setAttribute("data-src",a))}}else if(1===n.nodeType&&"LINK"===n.tagName){var c=n.dataset&&n.dataset.href;if(c&&i)switch(i){case"functionality":case"C0001":B.css[1].push(c);break;case"performance":case"C0002":B.css[2].push(c);break;case"targeting":case"C0003":B.css[4].push(c)}}else if(1===n.nodeType&&"SCRIPT"===n.tagName){var l=n.type,u=!1;if(O(a,l))u=!0;else if(a&&i)switch(i){case"functionality":case"C0001":u=!0,window.PandectesRules.manualBlacklist[1].push(a);break;case"performance":case"C0002":u=!0,window.PandectesRules.manualBlacklist[2].push(a);break;case"targeting":case"C0003":u=!0,window.PandectesRules.manualBlacklist[4].push(a)}if(u){B.scripts.push([n,l]),n.type=e;n.addEventListener("beforescriptexecute",(function t(r){n.getAttribute("type")===e&&r.preventDefault(),n.removeEventListener("beforescriptexecute",t)})),n.parentElement&&n.parentElement.removeChild(n)}}},i=0;i<r.length;i++)a(i)})),x=document.createElement,N={src:Object.getOwnPropertyDescriptor(HTMLScriptElement.prototype,"src"),t
1961ype:Object.getOwnPropertyDescriptor(HTMLScriptElement.prototype,"type")};window.PandectesRules.unblockCss=function(e){var t=B.css[e]||[];t.length&&a("Unblocking CSS for ".concat(e)),t.forEach((function(e){var t=document.querySelector('link[data-href^="'.concat(e,'"]'));t.removeAttribute("data-href"),t.href=e})),B.css[e]=[]},window.PandectesRules.unblockIFrames=function(e){var t=B.iframes[e]||[];t.length&&a("Unblocking IFrames for ".concat(e)),_.iframesBlackList[e]=[],t.forEach((function(e){var t=document.querySelector('iframe[data-src^="'.concat(e,'"]'));t.removeAttribute("data-src"),t.src=e})),B.iframes[e]=[]},window.PandectesRules.unblockBeacons=function(e){var t=B.beacons[e]||[];t.length&&a("Unblocking Beacons for ".concat(e)),_.beaconsBlackList[e]=[],t.forEach((function(e){var t=document.querySelector('img[data-src^="'.concat(e,'"]'));t.removeAttribute("data-src"),t.src=e})),B.beacons[e]=[]},window.PandectesRules.unblockInlineScripts=function(e){var t=1===e?"functionality":2===e?"performance":"targeting";document.querySelectorAll('script[type="javascript/blocked"][data-cookiecategory="'.concat(t,'"]')).forEach((function(e){var t=e.textContent;e.parentNode.removeChild(e);var n=document.createElement("script");n.type="text/javascript",n.textContent=t,document.body.appendChild(n)}))},window.PandectesRules.unblock=function(t){t.length<1?(_.blackList=[],_.whiteList=[],_.iframesBlackList=[],_.iframesWhiteList=[]):(_.blackList&&(_.blackList=_.blackList.filter((function(e){return t.every((function(t){return"string"==typeof t?!e.test(t):t instanceof RegExp?e.toString()!==t.toString():void 0}))}))),_.whiteList&&(_.whiteList=[].concat(l(_.whiteList),l(t.map((function(e){if("string"==typeof e){var t=".*"+n(e)+".*";if(_.whiteList.every((function(e){return e.toString()!==t.toString()})))return new RegExp(t)}else if(e instanceof RegExp&&_.whiteList.every((function(t){return t.toString()!==e.toString()})))return e;return null})).filter(Boolean)))));for(var r=document.querySelectorAll('script[type="'.concat(e,'"]')),i=0;i<r.length;i++){var s=r[i];E(s)&&(B.scripts.push([s,"application/javascript"]),s.parentElement.removeChild(s))}var o=0;l(B.scripts).forEach((function(e,t){var n=c(e,2),r=n[0],a=n[1];if(E(r)){for(var i=document.createElement("script"),s=0;s<r.attributes.length;s++){var l=r.attributes[s];"src"!==l.name&&"type"!==l.name&&i.setAttribute(l.name,r.attributes[s].value)}i.setAttribute("src",r.src),i.setAttribute("type",a||"application/javascript"),document.head.appendChild(i),B.scripts.splice(t-o,1),o++}})),0==_.blackList.length&&0===_.iframesBlackList[1].length&&0===_.iframesBlackList[2].length&&0===_.iframesBlackList[4].length&&0===_.beaconsBlackList[1].length&&0===_.beaconsBlackList[2].length&&0===_.beaconsBlackList[4].length&&(a("Disconnecting observers"),T.disconnect(),R.disconnect())};var M,D,W=window.PandectesSettings.store.adminMode,F=window.PandectesSettings.blocker;M=function(){!function(){var e=window.Shopify.trackingConsent;try{var t=W&&!window.Shopify.AdminBarInjector,n={preferences:0==(1&w)||f||t,analytics:0==(2&w)||f||t,marketing:0==(4&w)||f||t};e.firstPartyMarketingAllowed()===n.marketing&&e.analyticsProcessingAllowed()===n.analytics&&e.preferencesProcessingAllowed()===n.preferences||e.setTrackingConsent(n,(function(e){e&&e.error?a("Shopify.customerPrivacy API - failed to setTrackingConsent"):a("Shopify.customerPrivacy API - setTrackingConsent(".concat(JSON.stringify(n),")"))}))}catch(e){a("Shopify.customerPrivacy API - exception")}}(),function(){var e=window.Shopify.trackingConsent,t=e.currentVisitorConsent();if(F.gpcIsActive&&"CCPA"===e.getRegulation()&&"no"===t.gpc&&"yes"!==t.sale_of_data){var n={sale_of_data:!1};e.setTrackingConsent(n,(function(e){e&&e.error?a("Shopify.customerPrivacy API - failed to setTrackingConsent({".concat(JSON.stringify(n),")")):a("Shopify.customerPrivacy API - setTrackingConsent(".concat(JSON.stringify(n),")"))}))}}()},D=null,window.Shopify&&window.Shopify.loadFeatures&&window.Shopify.trackingConsent?M():D=setInterval((function(){window.Shopify&&window.Shopify.loadFeatures&&(clearInterval(D),window.Shopify.loadFeatures([{name:"consent-tracking-api",version:"0.1"}],(function(e){e?a("Shopify.customerPrivacy API - failed to load"):(a("Shopify.customerPrivacy API - loaded"),M())})))}),10);var z=window.PandectesSettings,U=z.banner.isActive,q=z.blocker.googleConsentMode,J=q.isActive,H=q.customEvent,$=q.redactData,G=q.urlPassthrough,K=q.adStorageCategory,V=q.analyticsStorageCategory,Y=q.functionalityStorageCategory,Q=q.personalizationStorageCategory,X=q.securityStorageCategory;function Z(){window.dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[];var ee,te,ne={hasInitialized:!1,ads_data_redaction:!1,url_passthrough:!1,storage:{ad_storage:"granted",analytics_storage:"granted",functionality_storage:"granted",personalization_storage:"granted",security_storage:"granted",wait_for_update:500}};if(U&&J){var re=0==(w&K)?"granted":"denied",ae=0==(w&V)?"granted":"denied",ie=0==(w&Y)?"granted":"denied",se=0==(w&Q)?"granted":"denied",oe=0==(w&X)?"granted":"denied";ne.hasInitialized=!0,ne.ads_data_redaction="denied"===re&&$,ne.url_passthrough=G,ne.storage.ad_storage=re,ne.storage.analytics_storage=ae,ne.storage.functionality_storage=ie,ne.storage.personalization_storage=se,ne.storage.security_storage=oe,ne.ads_data_redaction&&Z("set","ads_data_redaction",ne.ads_data_redaction),ne.url_passthrough&&Z("set","url_passthrough",ne.url_passthrough),Z("consent","default",ne.storage),H&&(te=7===(ee=w)?"deny":0===ee?"allow":"mixed",window.dataLayer.push({event:"Pandectes_Consent_Update",pandectes_status:te,pandectes_categories:{C0000:"allow",C0001:v[1]?"allow":"deny",C0002:v[2]?"allow":"deny",C0003:v[4]?"allow":"deny"}})),a("Google consent mode initialized")}window.PandectesRules.gcm=ne;var ce=window.PandectesSettings,le=ce.banner.isActive,ue=ce.blocker.isActive;a("Blocker -> "+(ue?"Active":"Inactive")),a("Banner -> "+(le?"Active":"Inactive")),a("ActualPrefs -> "+w);var de=null===m&&/\/checkouts\//.test(window.location.pathname);0!==w&&!1===f&&ue&&!de?(a("Blocker will execute"),document.createElement=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if("script"!==n[0].toLowerCase())return x.bind?x.bind(document).apply(void 0,n):x;var a=x.bind(document).apply(void 0,n);try{Object.defineProperties(a,{src:s(s({},N.src),{},{set:function(t){O(t,a.type)&&N.type.set.call(this,e),N.src.set.call(this,t)}}),type:s(s({},N.type),{},{get:function(){var t=N.type.get.call(this);return t===e||O(this.src,t)?null:t},set:function(t){var n=O(a.src,a.type)?e:t;N.type.set.call(this,n)}})}),a.setAttribute=function(t,n){if("type"===t){var r=O(a.src,a.type)?e:n;N.type.set.call(a,r)}else"src"===t?(O(n,a.type)&&N.type.set.call(a,e),N.src.set.call(a,n)):HTMLScriptElement.prototype.setAttribute.call(a,t,n)}}catch(e){console.warn("Yett: unable to prevent script execution for script src ",a.src,".\n",'A likely cause would be because you are using a third-party browser extension that monkey patches the "document.createElement" function.')}return a},T.observe(document.documentElement,{childList:!0,subtree:!0}),R.observe(document.documentElement,{childList:!0,subtree:!0})):a("Blocker will not execute")}(); 1962 1963</script>
1963 1964
1964<script>!function(s,a,e,v,n,t,z){if(s.saq)return;n=s.saq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!s._saq)s._saq=n;n.push=n;n.loaded=!0;n.version='1.0';n.queue=[];t=a.createElement(e);t.async=!0;t.src=v;z=a.getElementsByTagName(e)[0];z.parentNode.insertBefore(t,z)}(window,document,'script','https://tags.srv.stackadapt.com/events.js');saq('ts', 'RU_0qNxR2hKLD-Z8hsAHDg');</script>
vendor: 69 bytes, lines 1964-1966
1964 1965 1966 <script async src="https://www.googletagmanager.com/gtag/js?id=
1966AW-870520924
vendor: 14 bytes, lines 1966-1967
1966"></script> 1967
1967<script> 1968
vendor: 136 bytes, lines 1968-1971
1968window.dataLayer = window.dataLayer || []; 1969 function gtag(){dataLayer.push(arguments);} 1970 gtag('js', new Date()); 1971 gtag('config', '
1971AW-870520924
vendor: 6 bytes, lines 1971-1972
1971'); 1972
1972</script>
1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 <meta charset="utf-8"> 1982 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 1983 <meta name="viewport" content="width=device-width,initial-scale=1"> 1984 <meta name="theme-color" content=""> 1985 <link rel="canonical" href="https://www.glowrecipe.com/pages/serious-about-serums"> 1986 <link rel="preconnect" href="https://cdn.shopify.com" crossorigin> 1987<link rel="preconnect" href="https://fonts.googleapis.com"> 1988<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 1989<link rel="preload" href="https://fonts.googleapis.com/css2?family=Josefin+Sans:ital,wght@0,400;0,700;1,400&family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,700;1,9..40,400&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'"> 1990<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Josefin+Sans:ital,wght@0,400;0,700;1,400&family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,700;1,9..40,400&display=swap"></noscript> 1991<link rel="preload" href="//www.glowrecipe.com/cdn/shop/t/1677/assets/Alstoria-Regular.woff2?v=114833280941098406201788493385" as="font" type="font/woff2" crossorigin> 1992<link rel="icon" type="image/png" href="//www.glowrecipe.com/cdn/shop/files/glow_1_32x32.svg?v=1788997907"><title>Glow Recipe | Serums Guide 1993</title> 1994 1995 <meta name="description" content="Shop clinically effective serums rooted in Korean skincare & find the best serums for your skin concerns"> 1996 1997 1998 1999 2000<meta property="og:site_name" content="Glow Recipe"> 2001<meta property="og:url" content="https://www.glowrecipe.com/pages/serious-about-serums"> 2002<meta property="og:title" content="Glow Recipe | Serums Guide"> 2003<meta property="og:type" content="website"> 2004<meta property="og:description" content="Shop clinically effective serums rooted in Korean skincare & find the best serums for your skin concerns"><meta name="twitter:site" content="@glowrecipe/"><meta name="twitter:card" content="summary_large_image"> 2005<meta name="twitter:title" content="Glow Recipe | Serums Guide"> 2006<meta name="twitter:description" content="Shop clinically effective serums rooted in Korean skincare & find the best serums for your skin concerns"> 2007 2008 2009 2010
2010<script src="//www.glowrecipe.com/cdn/shop/t/1677/assets/lazysizes.min.js?v=61763048558278217801788493464" async="async"></script>
2010 2011
2011<script src="//www.glowrecipe.com/cdn/shop/t/1677/assets/tingle.js?v=35323701742990420991788493502" defer="defer"></script>
2011 2012
2012<script src="//www.glowrecipe.com/cdn/shop/t/1677/assets/keen_slider.js?v=57617920375592862871788493463" defer="defer"></script>
2012 2013
2013<script src="//www.glowrecipe.com/cdn/shop/t/1677/assets/global.js?v=46847638469416161941788493545" defer="defer"></script>
2013 2014
2014<script> 2015 2016</script>
2016<script type="module"> 2017 window.pageDateTime = new Date('2026/09/24 14:04 EDT'); 2018 window.lngg = window.lngg || {}; 2019 lngg.cart__auto_addons_js__error_clear_cart_message = 'Error updating cart for promotion.\nClearing cart to avoid issues.' 2020 </script>
2020 2021
2021<script src="//www.glowrecipe.com/cdn/shop/t/1677/assets/auto_addons.js?v=175343662548921290861789505676" defer="defer"></script>
2021<script src="//www.glowrecipe.com/cdn/shop/t/1677/assets/bundles.js?v=164888242870124154491788493545" defer="defer"></script>
2021 2022 2023
2023<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
2023<meta name="google-site-verification" content="QTFKN_9p9xCQK_j016rjQTotpB2ZwtEI1KAflYHaFVs"> 2024<meta name="google-site-verification" content="xjjdXf5Xq3CFy5WeFkUKrrjC_pRLZljp6qHOPUaDMNk"> 2025<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/5438301/digital_wallets/dialog"> 2026<meta id="in-context-paypal-metadata" data-shop-id="5438301" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD"> 2027<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
2027<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=3380838515"></script>
2027 2028<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
2029<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=3380838515&shop_id=5438301" crossorigin="anonymous"></script>
vendor: 1 bytes, line 2029
2029
2030<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":5438301,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/5438301","merchantName":"Glow Recipe","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","elo","jcb"],"total":{"type":"pending","label":"Glow Recipe","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 2030
2030
2031<script id="shopify-features" type="application/json">{"accessToken":"4955c45de850795816236e5ac79ff318","betas":["rich-media-storefront-analytics"],"domain":"www.glowrecipe.com","predictiveSearch":true,"shopId":5438301,"locale":"en"}</script>
vendor: 1 bytes, line 2031
2031
2032<script>var Shopify = Shopify || {}; 2033Shopify.shop = "aramara-beauty.myshopify.com"; 2034Shopify.locale = "en"; 2035Shopify.currency = {"active":"USD","rate":"1.0"}; 2036Shopify.country = "US"; 2037Shopify.theme = {"name":"9.3.26 Lip Blur Launch","id":148112244851,"schema_name":"Simplistic","schema_version":"1.0.0","theme_store_id":null,"role":"main"}; 2038Shopify.theme.handle = "null"; 2039Shopify.theme.style = {"id":null,"handle":null}; 2040Shopify.cdnHost = "www.glowrecipe.com/cdn"; 2041Shopify.routes = Shopify.routes || {}; 2042Shopify.routes.root = "/"; 2043Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 2044Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 2045Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 2046Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 2046
2046
2047<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 2047
2047
2048<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 2048
2048
2049<script> 2050 window.ShopifyPay = window.ShopifyPay || {}; 2051 window.ShopifyPay.apiHost = "shop.app\/pay"; 2052 window.ShopifyPay.redirectState = null; 2053</script>
vendor: 1 bytes, line 2053
2053
2054<script> 2055 window.Shopify = window.Shopify || {}; 2056 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 2057 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 2058 window.Shopify.SignInWithShop.eligible = true; 2059</script>
vendor: 1 bytes, line 2059
2059
2060<script id="shop-js-analytics" type="application/json">{"pageType":"page"}</script>
vendor: 1 bytes, line 2060
2060
2061<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 2061
2061
2062<script type="module"> 2063 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 2064 2065 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 2066 2067</script>
vendor: 1 bytes, line 2067
2067
2068<script> 2069 window.Shopify = window.Shopify || {}; 2070 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 2071 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"]}; 2072</script>
vendor: 1 bytes, line 2072
2072
2073<script>(function() { 2074 var isLoaded = false; 2075 function asyncLoad() { 2076 if (isLoaded) return; 2077 isLoaded = true; 2078 var urls = ["https:\/\/static.rechargecdn.com\/assets\/js\/widget.min.js?shop=aramara-beauty.myshopify.com","https:\/\/cdn.kustomerapp.com\/chat-web\/autoload.js?apiKey=eyJhbGciOiJub25lIn0.eyJvcmdOYW1lIjoiZ2xvd3JlY2lwZSIsInJvbGVzIjpbIm9yZy50cmFja2luZyJdfQ.eyJhbGciOiJub25lIn0\u0026brandId=61d461014453739f0b1b31e7\u0026shop=aramara-beauty.myshopify.com","https:\/\/cdn.giftcardpro.app\/build\/storefront\/storefront.js?shop=aramara-beauty.myshopify.com","https:\/\/dr4qe3ddw9y32.cloudfront.net\/awin-shopify-integration-code.js?aid=64616\u0026v=shopifyApp_5.2.3\u0026ts=1756215352160\u0026shop=aramara-beauty.myshopify.com","https:\/\/cdn-bundler.nice-team.net\/app\/js\/bundler.js?shop=aramara-beauty.myshopify.com","https:\/\/sdk.postscript.io\/sdk-script-loader.bundle.js?shopId=25819\u0026shop=aramara-beauty.myshopify.com","\/\/cdn.shopify.com\/proxy\/fe969770ac85a704b67e90ef97869f71cd88bdce2f3eafdcea89b83ddd2f4ea4\/api.kount.com\/shopify\/js?m_id=101068\u0026shop=aramara-beauty.myshopify.com\u0026sp-cache-control=cHVibGljLCBtYXgtYWdlPTkwMA","https:\/\/shopify-extension.getredo.com\/main.js?widget_id=eo0inxh72sp8zrg\u0026shop=aramara-beauty.myshopify.com","\/\/backinstock.useamp.com\/widget\/12571_1783058506.js?category=bis\u0026v=6\u0026shop=aramara-beauty.myshopify.com"]; 2079 for (var i = 0; i < urls.length; i++) { 2080 var s = document.createElement('script'); 2081 s.type = 'text/javascript'; 2082 s.async = true; 2083 s.src = urls[i]; 2084 var x = document.getElementsByTagName('script')[0]; 2085 x.parentNode.insertBefore(s, x); 2086 } 2087 }; 2088 if(window.attachEvent) { 2089 window.attachEvent('onload', asyncLoad); 2090 } else { 2091 window.addEventListener('load', asyncLoad, false); 2092 } 2093})();</script>
vendor: 1 bytes, line 2093
2093
2094<script id="__st">var __st={"a":5438301,"offset":-14400,"reqid":"1d508255-9b60-4c62-b768-243b171d0108-1790273057","pageurl":"www.glowrecipe.com\/pages\/serious-about-serums","s":"pages-80309420147","u":"16bac2d25156","p":"page","rtyp":"page","rid":80309420147};</script>
vendor: 1 bytes, line 2094
2094
2095<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 2095
2095
2096<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,!1)}();</script>
vendor: 1 bytes, line 2096
2096
2097<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//www.glowrecipe.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 2097
2097
2098<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 = "//www.glowrecipe.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>
2098<script crossorigin="anonymous" defer="defer" src="//www.glowrecipe.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 2098
2098
2099<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 2099
2099
2100<script> 2101 window.Shopify = window.Shopify || {}; 2102 window.Shopify.MCP = window.Shopify.MCP || {}; 2103 window.Shopify.MCP.enabled = true; 2104 window.Shopify.MCP.shop = "aramara-beauty.myshopify.com"; 2105 window.Shopify.MCP.mcpEndpoint = "https:\/\/www.glowrecipe.com\/api\/mcp"; 2106 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"]}}]; 2107</script>
vendor: 1 bytes, line 2107
2107
2108<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("\/\/www.glowrecipe.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 2109</script>
vendor: 1 bytes, line 2109
2109
2110<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://www.glowrecipe.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 2111</script>
vendor: 1 bytes, line 2111
2111
2112<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 2113 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); 2114</script>
vendor: 1 bytes, line 2114
2114
2115<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})}})); 2116</script>
vendor: 1 bytes, line 2116
2116
2117<script integrity="sha256-/LA1C2Bx6899fYCos0FS9qLj2opaGFm7AXrTUvBEb4s=" data-source-attribution="shopify.remote_product_tracking" data-shopify-remote-tracking="{"publisher_shop_id":5438301,"theme_id":148112244851,"theme_published":true,"theme_store_id":0,"placement":"collection","event_data":{"handle":"serious-about-serums","page_type":"page"},"recommendations_tracking_enabled":true}" defer="defer" src="//www.glowrecipe.com/cdn/shopifycloud/storefront/assets/storefront/remote_product_tracking-91d95044.js" crossorigin="anonymous"></script>
2117 2118<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://www.glowrecipe.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 2119<style id="shopify-accelerated-checkout-cart"> 2120 #shopify-buyer-consent { 2121 margin-top: 1em; 2122 display: inline-block; 2123 width: 100%; 2124} 2125 2126#shopify-buyer-consent.hidden { 2127 display: none; 2128} 2129 2130#shopify-subscription-policy-button { 2131 background: none; 2132 border: none; 2133 padding: 0; 2134 text-decoration: underline; 2135 font-size: inherit; 2136 cursor: pointer; 2137} 2138 2139#shopify-subscription-policy-button::before { 2140 box-shadow: none; 2141} 2142 2143 </style>
2144<script id="sections-script" data-sections="header" defer="defer" src="//www.glowrecipe.com/cdn/shop/t/1677/compiled_assets/scripts.js?v=89534214636435516571788493546"></script>
vendor: 1 bytes, line 2144
2144
2145<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
2145 <style> 2146 .class-a{display:block !important;} 2147 .class-b{display:none !important;} 2148 </style><link href="//www.glowrecipe.com/cdn/shop/t/1677/assets/base.css?v=79719013990317913971788493545" rel="stylesheet" type="text/css" media="all" /> 2149 <link href="//www.glowrecipe.com/cdn/shop/t/1677/assets/keen_slider.css?v=112929971831483852901788493463" rel="stylesheet" type="text/css" media="all" /> 2150 2151
2151<script>document.documentElement.className = document.documentElement.className.replace('no-js', 'js');</script>
2151 2152 2153 2154
2154<script> 2155 window.addEventListener('load', function() { 2156 var loadHotjar = function() {
vendor: 127 bytes, lines 2156-2159
2156 2157 (function(h,o,t,j,a,r){ 2158 h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; 2159 h._hjSettings={hjid:
21592695336
vendor: 265 bytes, lines 2159-2165
2159,hjsv:6}; 2160 a=o.getElementsByTagName('head')[0]; 2161 r=o.createElement('script');r.async=1; 2162 r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; 2163 a.appendChild(r); 2164 })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); 2165
2165}; 2166 if (window.requestIdleCallback) { 2167 window.requestIdleCallback(loadHotjar, { timeout: 5000 }); 2168 } else { 2169 window.setTimeout(loadHotjar, 2000); 2170 } 2171 }); 2172 </script>
2172 2173 2174
2174<script> 2175 const openQuickShopModal = (product) => { 2176 setTimeout(() => { 2177 window.SideCart.updateSideCart(true); 2178 }, "1000"); 2179 } 2180 window.addEventListener('tolstoyWidgetReady', function() { 2181 window.tolstoyWidget.subscribe('tolstoy_spotlight_carousel_quick_shop_click', openQuickShopModal); 2182 }); 2183 </script>
2183 2184 2185
2186<script type="application/json" id="oke-reviews-settings">{"subscriberId":"41915e47-fb72-4109-81cf-25e1e3b73626","analyticsSettings":{"isWidgetOnScreenTrackingEnabled":true,"provider":"ua"},"locale":"en","localeAndVariant":{"code":"en"},"matchCustomerLocale":false,"widgetSettings":{"global":{"dateSettings":{"format":{"type":"relative"}},"hideOkendoBranding":true,"reviewTranslationsMode":"off","showIncentiveIndicator":false,"searchEnginePaginationEnabled":false,"stars":{"backgroundColor":"#E5E5E5","foregroundColor":"#000000","interspace":2,"shape":{"type":"thin"},"showBorder":false},"font":{"fontType":"inherit-from-page"}},"homepageCarousel":{"slidesPerPage":{"large":3,"medium":2},"totalSlides":12,"scrollBehaviour":"slide","style":{"showDates":true,"border":{"color":"#E5E5EB","width":{"value":1,"unit":"px"}},"bodyFont":{"hasCustomFontSettings":false},"headingFont":{"hasCustomFontSettings":false},"arrows":{"color":"#676986","size":{"value":24,"unit":"px"},"enabled":true},"avatar":{"backgroundColor":"#E5E5EB","placeholderTextColor":"#2C3E50","size":{"value":48,"unit":"px"},"enabled":true},"media":{"size":{"value":80,"unit":"px"},"imageGap":{"value":4,"unit":"px"},"enabled":true},"stars":{"height":{"value":18,"unit":"px"},"globalOverrideSettings":{"backgroundColor":"#E5E5E5","foregroundColor":"#000000"}},"productImageSize":{"value":48,"unit":"px"},"layout":{"name":"default","reviewDetailsPosition":"below","showProductName":false,"showAttributeBars":false,"showProductDetails":"only-when-grouped"},"highlightColor":"#0E7A82","spaceAbove":{"value":20,"unit":"px"},"text":{"primaryColor":"#2C3E50","fontSizeRegular":{"value":14,"unit":"px"},"fontSizeSmall":{"value":12,"unit":"px"},"secondaryColor":"#676986"},"spaceBelow":{"value":20,"unit":"px"}},"defaultSort":"rating desc","autoPlay":false,"truncation":{"bodyMaxLines":4,"truncateAll":false,"enabled":true}},"mediaCarousel":{"minimumImages":1,"linkText":"Read More","stars":{"backgroundColor":"#E5E5E5","foregroundColor":"#FFCF2A","height":{"value":12,"unit":"px"}},"autoPlay":false,"slideSize":"medium","arrowPosition":"outside"},"mediaGrid":{"showMoreArrow":{"arrowColor":"#676986","enabled":true,"backgroundColor":"#f4f4f6"},"infiniteScroll":false,"gridStyleDesktop":{"layout":"default-desktop"},"gridStyleMobile":{"layout":"default-mobile"},"linkText":"Read More","stars":{"backgroundColor":"#E5E5E5","foregroundColor":"#FFCF2A","height":{"value":12,"unit":"px"}},"gapSize":{"value":10,"unit":"px"}},"questions":{"initialPageSize":6,"loadMorePageSize":6},"reviewsBadge":{"layout":"large","colorScheme":"dark"},"reviewsTab":{"enabled":false},"reviewsWidget":{"tabs":{"reviews":true,"questions":false},"header":{"columnDistribution":"space-between","verticalAlignment":"top","blocks":[{"columnWidth":"full","modules":[{"name":"rating-average","layout":"two-line"}],"textAlignment":"left"},{"columnWidth":"two-thirds","modules":[{"name":"reviews-keywords","heading":"Customers Talked About","maxKeywords":5}],"textAlignment":"left"},{"columnWidth":"full","modules":[{"name":"reviews-summary","heading":"Reviews Summary","maxTextLines":5}],"textAlignment":"left"},{"columnWidth":"full","modules":[{"name":"media-carousel","imageGap":{"value":4,"unit":"px"},"imageHeight":{"value":120,"unit":"px"}}],"textAlignment":"center"}]},"style":{"showDates":true,"border":{"color":"#E5E5E5","width":{"value":1,"unit":"px"}},"bodyFont":{"fontSize":{"value":16,"unit":"px"},"fontType":"use-global","fontWeight":400,"hasCustomFontSettings":true},"headingFont":{"fontSize":{"value":18,"unit":"px"},"fontType":"use-global","fontWeight":600,"hasCustomFontSettings":true},"filters":{"backgroundColorActive":"#000000","backgroundColor":"#FFFFFF","borderColor":"#000000","borderRadius":{"value":100,"unit":"px"},"borderColorActive":"#000000","textColorActive":"#FFFFFF","textColor":"#000000","searchHighlightColor":"#B2F9E9"},"avatar":{"backgroundColor":"#E5E5EB","placeholderTextColor":"#000000","size":{"value":48,"unit":"px"},"enabled":true},"stars":{"height":{"value":18,"unit":"px"},"globalOverrideSettings":{"backgroundColor":"#E5E5E5","foregroundColor":"#000000","interspace":2,"showBorder":false}},"shadingColor":"#FFFFFF","productImageSize":{"value":48,"unit":"px"},"button":{"backgroundColorActive":"#000000","borderColorHover":"#000000","backgroundColor":"#000000","borderColor":"#000000","backgroundColorHover":"#000000","textColorHover":"#FFFFFF","borderRadius":{"value":1,"unit":"px"},"borderWidth":{"value":1,"unit":"px"},"borderColorActive":"#000000","textColorActive":"#FFFFFF","textColor":"#FFFFFF","font":{"fontSize":{"value":16,"unit":"px"},"fontType":"custom","fontFamily":"Gotham","fontWeight":700,"hasCu
2186stomFontSettings":true}},"highlightColor":"#000000","spaceAbove":{"value":20,"unit":"px"},"text":{"primaryColor":"#000000","fontSizeRegular":{"value":14,"unit":"px"},"fontSizeLarge":{"value":22,"unit":"px"},"fontSizeSmall":{"value":14,"unit":"px"},"secondaryColor":"#000000"},"spaceBelow":{"value":20,"unit":"px"},"attributeBar":{"style":"default","backgroundColor":"#D3D4DD","shadingColor":"#9A9DB1","markerColor":"#000000"}},"showWhenEmpty":true,"reviews":{"list":{"layout":{"collapseReviewerDetails":false,"columnAmount":4,"name":"default","showAttributeBars":false,"borderStyle":"minimal","showProductVariantName":false,"showProductDetails":"never"},"loyalty":{"maxInitialAchievements":3},"initialPageSize":5,"replyTruncation":{"bodyMaxLines":4,"enabled":true},"media":{"layout":"thumbnail","size":{"value":100,"unit":"px"},"imageGap":{"value":4,"unit":"px"}},"truncation":{"bodyMaxLines":4,"truncateAll":false,"enabled":true},"loadMorePageSize":5},"controls":{"filterMode":"closed","freeTextSearchEnabled":false,"keywordsFilterEnabled":false,"writeReviewButtonEnabled":true,"defaultSort":"has_media desc"}}},"starRatings":{"showWhenEmpty":false,"style":{"globalOverrideSettings":{"backgroundColor":"#C1C0C1","foregroundColor":"#000000","interspace":2,"showBorder":false},"spaceAbove":{"value":0,"unit":"px"},"text":{"content":"review-count","style":"number-and-text","brackets":true},"singleStar":false,"height":{"value":18,"unit":"px"},"spaceBelow":{"value":0,"unit":"px"}},"clickBehavior":"scroll-to-widget"}},"features":{"attributeFiltersEnabled":true,"recorderPlusEnabled":true,"recorderQandaPlusEnabled":true,"reviewsKeywordsEnabled":true,"reviewsSummariesEnabled":true}}</script>
2186 2187 <style id="oke-css-vars">:root{--oke-widget-spaceAbove:20px;--oke-widget-spaceBelow:20px;--oke-starRating-spaceAbove:0;--oke-starRating-spaceBelow:0;--oke-button-backgroundColor:#000;--oke-button-backgroundColorHover:#000;--oke-button-backgroundColorActive:#000;--oke-button-textColor:#fff;--oke-button-textColorHover:#fff;--oke-button-textColorActive:#fff;--oke-button-borderColor:#000;--oke-button-borderColorHover:#000;--oke-button-borderColorActive:#000;--oke-button-borderRadius:1px;--oke-button-borderWidth:1px;--oke-button-fontWeight:700;--oke-button-fontSize:16px;--oke-button-fontFamily:Gotham,sans-serif;--oke-border-color:#e5e5e5;--oke-border-width:1px;--oke-text-primaryColor:#000;--oke-text-secondaryColor:#000;--oke-text-small:14px;--oke-text-regular:14px;--oke-text-large:22px;--oke-text-fontFamily:inherit;--oke-avatar-size:48px;--oke-avatar-backgroundColor:#e5e5eb;--oke-avatar-placeholderTextColor:#000;--oke-highlightColor:#000;--oke-shadingColor:#fff;--oke-productImageSize:48px;--oke-attributeBar-shadingColor:#9a9db1;--oke-attributeBar-borderColor:undefined;--oke-attributeBar-backgroundColor:#d3d4dd;--oke-attributeBar-markerColor:#000;--oke-filter-backgroundColor:#fff;--oke-filter-backgroundColorActive:#000;--oke-filter-borderColor:#000;--oke-filter-borderColorActive:#000;--oke-filter-textColor:#000;--oke-filter-textColorActive:#fff;--oke-filter-borderRadius:100px;--oke-filter-searchHighlightColor:#b2f9e9;--oke-mediaGrid-chevronColor:#676986;--oke-stars-foregroundColor:#000;--oke-stars-backgroundColor:#e5e5e5;--oke-stars-borderWidth:0}.oke-reviewCarousel{--oke-stars-foregroundColor:#000;--oke-stars-backgroundColor:#e5e5e5;--oke-stars-borderWidth:0}.oke-w,.oke-modal{--oke-stars-foregroundColor:#000;--oke-stars-backgroundColor:#e5e5e5;--oke-stars-borderWidth:0}.oke-sr{--oke-stars-foregroundColor:#000;--oke-stars-backgroundColor:#c1c0c1;--oke-stars-borderWidth:0}.oke-w,.oke-modal{--oke-title-fontWeight:600;--oke-title-fontSize:18px;--oke-title-fontFamily:inherit;--oke-bodyText-fontWeight:400;--oke-bodyText-fontSize:16px;--oke-bodyText-fontFamily:inherit}</style> 2188 <style id="oke-reviews-custom-css">.okeReviews.oke-sr{display:block}.title-wrapper .oke-sr-count--brackets:before,.title-wrapper .oke-sr-count--brackets:after,.upsell-container .oke-sr-label-text{display:none}[data-oke-widget] div.okeReviews[data-oke-container].oke-w{max-width:unset}div.oke-modal .okeReviews[data-oke-container].oke-w,div.okeReviews[data-oke-container] .oke-modal,div.okeReviews[data-oke-container] .oke-modal p,div.okeReviews[data-oke-container] .oke-modal .oke-helpful,div.okeReviews[data-oke-container] .oke-modal .oke-helpful-vote-button,div.okeReviews[data-oke-container] .oke-modal .oke-reviewContent-date{color:var(--oke-text-primaryColor)}div.okeReviews[data-oke-container] .oke-reviewContent-title,div.okeReviews .oke-reviewContent-title{font-weight:700;font-size:1.25em}.okeReviews[data-oke-container].oke-w .oke-button,div.okeReviews .oke-button{letter-spacing:.2em;font-family:Josefin Sans,sans-serif;font-weight:700;text-transform:uppercase;font-size:14px;line-height:1.4}div.okeReviews[data-oke-container] .oke-w-writeReview:before,div.okeReviews .oke-w-writeReview:before{display:none}.okeReviews[data-oke-container].oke-w .oke-button:not(.oke-is-loading):not(.oke-is-active):hover,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):hover{box-shadow:initial}.okeReviews.oke-w .oke-is-small .oke-w-reviews-writeReview{width:100%;padding-top:10px}.okeReviews.oke-w .oke-is-small .oke-button,.okeReviews.oke-w .oke-is-small .oke-qw-header-askQuestion{width:100%}div.okeReviews[data-oke-container] .oke-sortSelect-label{margin-right:0}div.okeReviews[data-oke-container] .oke-w-reviews-controls{flex-wrap:wrap}</style> 2189 <template id="oke-reviews-body-template"><svg id="oke-star-symbols" style="display:none!important" data-oke-id="oke-star-symbols"><symbol id="oke-star-empty" style="overflow:visible;"><path id="star-thin--empty" fill="var(--oke-stars-backgroundColor)" stroke="var(--oke-stars-borderColor)" stroke-width="var(--oke-stars-borderWidth)" d="M9.944 6.4L8 0L6.056 6.4H0L4.944 9.928L3.064 16L8 12.248L12.944 16L11.064 9.928L16 6.4H9.944Z"/></symbol><symbol id="oke-star-filled" style="overflow:visible;"><path id="star-thin--filled" fill="var(--oke-stars-foregroundColor)" stroke="var(--oke-stars-borderColor)" stroke-width="var(--oke-stars-borderWidth)" d="M9.944 6.4L8 0L6.056 6.4H0L4.944 9.928L3.064 16L8 12.248L12.944 16L11.064 9.928L16 6.4H9.944Z"/></symbol></svg></template>
2189<script>document.addEventListener('readystatechange',() =>{Array.from(document.getElementById('oke-reviews-body-template')?.content.children)?.forEach(function(child){if(!Array.from(document.body.querySelectorAll('[data-oke-id='.concat(child.getAttribute('data-oke-id'),']'))).length){document.body.prepend(child)}})},{once:true});</script>
2189 2190<style data-oke-reviews-version="0.85.10" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/okendo-reviews-styles.6dbb2446.css"></style><style data-oke-reviews-version="0.85.10" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/modules/okendo-star-rating.4cb378a8.css"></style><style data-oke-reviews-version="0.85.10" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/modules/okendo-reviews-keywords.0942444f.css"></style><style data-oke-reviews-version="0.85.10" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/modules/okendo-reviews-summary.a0c9d7d6.css"></style><style type="text/css">.okeReviews[data-oke-container],div.okeReviews{font-size:14px;font-size:var(--oke-text-regular);font-weight:400;font-family:var(--oke-text-fontFamily);line-height:1.6}.okeReviews[data-oke-container] *,.okeReviews[data-oke-container] :after,.okeReviews[data-oke-container] :before,div.okeReviews *,div.okeReviews :after,div.okeReviews :before{box-sizing:border-box}.okeReviews[data-oke-container] h1,.okeReviews[data-oke-container] h2,.okeReviews[data-oke-container] h3,.okeReviews[data-oke-container] h4,.okeReviews[data-oke-container] h5,.okeReviews[data-oke-container] h6,div.okeReviews h1,div.okeReviews h2,div.okeReviews h3,div.okeReviews h4,div.okeReviews h5,div.okeReviews h6{font-size:1em;font-weight:400;line-height:1.4;margin:0}.okeReviews[data-oke-container] ul,div.okeReviews ul{padding:0;margin:0}.okeReviews[data-oke-container] li,div.okeReviews li{list-style-type:none;padding:0}.okeReviews[data-oke-container] p,div.okeReviews p{line-height:1.8;margin:0 0 4px}.okeReviews[data-oke-container] p:last-child,div.okeReviews p:last-child{margin-bottom:0}.okeReviews[data-oke-container] a,div.okeReviews a{text-decoration:none;color:inherit}.okeReviews[data-oke-container] button,div.okeReviews button{border-radius:0;border:0;box-shadow:none;margin:0;width:auto;min-width:auto;padding:0;background-color:transparent;min-height:auto}.okeReviews[data-oke-container] button,.okeReviews[data-oke-container] input,.okeReviews[data-oke-container] select,.okeReviews[data-oke-container] textarea,div.okeReviews button,div.okeReviews input,div.okeReviews select,div.okeReviews textarea{font-family:inherit;font-size:1em}.okeReviews[data-oke-container] label,.okeReviews[data-oke-container] select,div.okeReviews label,div.okeReviews select{display:inline}.okeReviews[data-oke-container] select,div.okeReviews select{width:auto}.okeReviews[data-oke-container] article,.okeReviews[data-oke-container] aside,div.okeReviews article,div.okeReviews aside{margin:0}.okeReviews[data-oke-container] table,div.okeReviews table{background:transparent;border:0;border-collapse:collapse;border-spacing:0;font-family:inherit;font-size:1em;table-layout:auto}.okeReviews[data-oke-container] table td,.okeReviews[data-oke-container] table th,.okeReviews[data-oke-container] table tr,div.okeReviews table td,div.okeReviews table th,div.okeReviews table tr{border:0;font-family:inherit;font-size:1em}.okeReviews[data-oke-container] table td,.okeReviews[data-oke-container] table th,div.okeReviews table td,div.okeReviews table th{background:transparent;font-weight:400;letter-spacing:normal;padding:0;text-align:left;text-transform:none;vertical-align:middle}.okeReviews[data-oke-container] table tr:hover td,.okeReviews[data-oke-container] table tr:hover th,div.okeReviews table tr:hover td,div.okeReviews table tr:hover th{background:transparent}.okeReviews[data-oke-container] fieldset,div.okeReviews fieldset{border:0;padding:0;margin:0;min-width:0}.okeReviews[data-oke-container] img,.okeReviews[data-oke-container] svg,div.okeReviews img,div.okeReviews svg{max-width:none}.okeReviews[data-oke-container] div:empty,div.okeReviews div:empty{display:block}.okeReviews[data-oke-container] .oke-icon:before,div.okeReviews .oke-icon:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:inherit}.okeReviews[data-oke-container] .oke-icon--select-arrow:before,div.okeReviews .oke-icon--select-arrow:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--loading:before,div.okeReviews .oke-icon--loading:before{content:"î¤"}
2190.okeReviews[data-oke-container] .oke-icon--pencil:before,div.okeReviews .oke-icon--pencil:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--filter:before,div.okeReviews .oke-icon--filter:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--play:before,div.okeReviews .oke-icon--play:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--tick-circle:before,div.okeReviews .oke-icon--tick-circle:before{content:"î¤
"}.okeReviews[data-oke-container] .oke-icon--chevron-left:before,div.okeReviews .oke-icon--chevron-left:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-right:before,div.okeReviews .oke-icon--chevron-right:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--thumbs-down:before,div.okeReviews .oke-icon--thumbs-down:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--thumbs-up:before,div.okeReviews .oke-icon--thumbs-up:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--close:before,div.okeReviews .oke-icon--close:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-up:before,div.okeReviews .oke-icon--chevron-up:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-down:before,div.okeReviews .oke-icon--chevron-down:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--star:before,div.okeReviews .oke-icon--star:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--magnifying-glass:before,div.okeReviews .oke-icon--magnifying-glass:before{content:"î¤"}@font-face{font-family:oke-widget-icons;src:url(https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/fonts/oke-widget-icons.ttf) format("truetype"),url(https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/fonts/oke-widget-icons.woff) format("woff"),url(https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/img/oke-widget-icons.bc0d6b0a.svg) format("svg");font-weight:400;font-style:normal;font-display:swap}.okeReviews[data-oke-container] .oke-button,div.okeReviews .oke-button{display:inline-block;border-style:solid;border-color:var(--oke-button-borderColor);border-width:var(--oke-button-borderWidth);background-color:var(--oke-button-backgroundColor);line-height:1;padding:12px 24px;margin:0;border-radius:var(--oke-button-borderRadius);color:var(--oke-button-textColor);text-align:center;position:relative;font-weight:var(--oke-button-fontWeight);font-size:var(--oke-button-fontSize);font-family:var(--oke-button-fontFamily);outline:0}.okeReviews[data-oke-container] .oke-button-text,.okeReviews[data-oke-container] .oke-button .oke-icon,div.okeReviews .oke-button-text,div.okeReviews .oke-button .oke-icon{line-height:1}.okeReviews[data-oke-container] .oke-button.oke-is-loading,div.okeReviews .oke-button.oke-is-loading{position:relative}.okeReviews[data-oke-container] .oke-button.oke-is-loading:before,div.okeReviews .oke-button.oke-is-loading:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:undefined;font-size:12px;display:inline-block;animation:oke-spin 1s linear infinite;position:absolute;width:12px;height:12px;top:0;left:0;bottom:0;right:0;margin:auto}.okeReviews[data-oke-container] .oke-button.oke-is-loading>*,div.okeReviews .oke-button.oke-is-loading>*{opacity:0}.okeReviews[data-oke-container] .oke-button.oke-is-active,div.okeReviews .oke-button.oke-is-active{background-color:var(--oke-button-backgroundColorActive);color:var(--oke-button-textColorActive);border-color:var(--oke-button-borderColorActive)}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading),div.okeReviews .oke-button:not(.oke-is-loading){cursor:pointer}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):hover,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):hover{background-color:var(--oke-button-backgroundColorHover);color:var(--oke-button-textColorHover);border-color:var(--oke-button-borderColorHover);box-shadow:0 0 0 2px var(--oke-button-backgroundColorHover)}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):active,.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):hover:active,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):active,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):hover:active{background-color:var(--oke-button-backgroundColorActive);color:var(--oke-button-textColorActive);border-color:var(--oke-button-borderColorActive)}.okeReviews[data-oke-container] .oke-title,div.okeReviews .oke-title{font-weight:var(--oke-title-fontWeight);font-size:var(--oke-title-fontSize);font-family:var(--oke-title-fontFamily)}.okeReviews[data-oke-container] .oke-bodyText,div.okeReviews .oke-bodyText{font-weight:var(--oke-bodyText-fontWeight);font-size:var(--oke-bodyText-fontSize);font-family:var(--oke-bodyText-fontFamily)}.okeReviews[data-oke-container] .oke-linkButton,div.okeReviews .oke-linkButton{curs
2190or:pointer;font-weight:700;pointer-events:auto;text-decoration:underline}.okeReviews[data-oke-container] .oke-linkButton:hover,div.okeReviews .oke-linkButton:hover{text-decoration:none}.okeReviews[data-oke-container] .oke-readMore,div.okeReviews .oke-readMore{cursor:pointer;color:inherit;text-decoration:underline}.okeReviews[data-oke-container] .oke-select,div.okeReviews .oke-select{cursor:pointer;background-repeat:no-repeat;background-position-x:100%;background-position-y:50%;border:none;padding:0 24px 0 12px;-moz-appearance:none;appearance:none;color:inherit;-webkit-appearance:none;background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg fill='currentColor' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");outline-offset:4px}.okeReviews[data-oke-container] .oke-select:disabled,div.okeReviews .oke-select:disabled{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg fill='%239a9db1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E")}.okeReviews[data-oke-container] .oke-loader,div.okeReviews .oke-loader{position:relative}.okeReviews[data-oke-container] .oke-loader:before,div.okeReviews .oke-loader:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:var(--oke-text-secondaryColor);font-size:12px;display:inline-block;animation:oke-spin 1s linear infinite;position:absolute;width:12px;height:12px;top:0;left:0;bottom:0;right:0;margin:auto}.okeReviews[data-oke-container] .oke-a11yText,div.okeReviews .oke-a11yText{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.okeReviews[data-oke-container] .oke-hidden,div.okeReviews .oke-hidden{display:none}.okeReviews[data-oke-container] .oke-modal,div.okeReviews .oke-modal{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:2147483647;max-height:100%;background-color:rgba(0,0,0,.5);padding:40px 0 12px}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal,div.okeReviews .oke-modal{display:flex;align-items:center;padding:48px 0}}.okeReviews[data-oke-container] .oke-modal ::-moz-selection,div.okeReviews .oke-modal ::-moz-selection{background-color:rgba(39,45,69,.2)}.okeReviews[data-oke-container] .oke-modal ::selection,div.okeReviews .oke-modal ::selection{background-color:rgba(39,45,69,.2)}.okeReviews[data-oke-container] .oke-modal,.okeReviews[data-oke-container] .oke-modal p,div.okeReviews .oke-modal,div.okeReviews .oke-modal p{color:#272d45}.okeReviews[data-oke-container] .oke-modal-content,div.okeReviews .oke-modal-content{background-color:#fff;margin:auto;position:relative;will-change:transform,opacity;width:calc(100% - 24px)}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal-content,div.okeReviews .oke-modal-content{max-width:1000px}}.okeReviews[data-oke-container] .oke-modal-close,div.okeReviews .oke-modal-close{cursor:pointer;position:absolute;width:32px;height:32px;top:-32px;padding:4px;right:-4px;line-height:1}.okeReviews[data-oke-container] .oke-modal-close:before,div.okeReviews .oke-modal-close:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:#fff;font-size:24px;display:inline-block;width:24px;height:24px}.okeReviews[data-oke-container] .oke-modal-overlay,div.okeReviews .oke-modal-overlay{background-color:rgba(43,46,56,.9)}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal--large .oke-modal-content,div.okeReviews .oke-modal--large .oke-modal-content{max-width:1200px}}.okeReviews[data-oke-container] .oke-modal .oke-helpful,.okeReviews[data-oke-container] .oke-modal .oke-helpful-vote-button,.okeReviews[data-oke-container] .oke-modal .oke-reviewContent-date,div.okeReviews .oke-modal .oke-helpful,div.okeReviews .oke-modal .oke-helpful-vote-button,div.okeReviews .oke-modal .oke-reviewContent-date{color:#676986}.oke-modal .okeReviews[data-oke-container].oke-w,.oke-modal div.okeReviews.oke-w{color:#272d45}.okeReviews[data-oke-container] .oke-tag,div.okeReviews .oke-tag{align-items:center;color:#272d45;display:flex;font-size:var(--oke-text-small);font-weight:600;text-align:left;position:relative;z-index:2;background-color:#f4f4f6;padding:4px 6px;border:none;border-radius:4px;gap:6px;line-height:1}.okeReviews[data-oke-container] .oke-tag svg,div.okeReviews .oke-tag svg{fill:currentColor;height:1rem}.okeReviews[data-oke-container] .hooper,div.okeReviews .hooper{height:auto}.okeReviews--left{text-align:left}.okeReviews--right{text-align:right}.okeReviews--center{text-align:center}.okeReviews :not([tabindex="-1"]):focus-visible{outline:5px auto highlight;outline:5px auto -webkit-focus-ring-color}.is-oke-modalOpen{overflow:hidden!important}img.oke-is-error{background-color:var(--oke-shadingColor);background-size:cover;background-position:50% 50%;box-shadow:inset 0 0 0 1px var(--oke-border-color)}@keyframes oke-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes oke-fade-in{0%{opacity:0}
2190to{opacity:1}}.layout-panel-flex>div:has([data-oke-container]){width:100%} 2191.oke-stars{line-height:1;position:relative;display:inline-block}.oke-stars-background svg{overflow:visible}.oke-stars-foreground{overflow:hidden;position:absolute;top:0;left:0}.oke-sr{display:inline-block;padding-top:var(--oke-starRating-spaceAbove);padding-bottom:var(--oke-starRating-spaceBelow)}.oke-sr .oke-is-clickable{cursor:pointer}.oke-sr--hidden{display:none}.oke-sr-count,.oke-sr-rating,.oke-sr-stars{display:inline-block;vertical-align:middle}.oke-sr-stars{line-height:1;margin-right:8px}.oke-sr-rating{display:none}.oke-sr-count--brackets:before{content:"("}.oke-sr-count--brackets:after{content:")"} 2192.oke-rk{display:block}.okeReviews[data-oke-container] .oke-reviewsKeywords-heading,div.okeReviews .oke-reviewsKeywords-heading{font-weight:700;margin-bottom:8px}.okeReviews[data-oke-container] .oke-reviewsKeywords-heading-skeleton,div.okeReviews .oke-reviewsKeywords-heading-skeleton{height:calc(var(--oke-button-fontSize) + 4px);width:150px}.okeReviews[data-oke-container] .oke-reviewsKeywords-list,div.okeReviews .oke-reviewsKeywords-list{display:inline-flex;align-items:center;flex-wrap:wrap;gap:4px}.okeReviews[data-oke-container] .oke-reviewsKeywords-list-category,div.okeReviews .oke-reviewsKeywords-list-category{background-color:var(--oke-filter-backgroundColor);color:var(--oke-filter-textColor);border:1px solid var(--oke-filter-borderColor);border-radius:var(--oke-filter-borderRadius);padding:6px 16px;transition:background-color .1s ease-out,border-color .1s ease-out;white-space:nowrap}.okeReviews[data-oke-container] .oke-reviewsKeywords-list-category.oke-is-clickable,div.okeReviews .oke-reviewsKeywords-list-category.oke-is-clickable{cursor:pointer}.okeReviews[data-oke-container] .oke-reviewsKeywords-list-category.oke-is-active,div.okeReviews .oke-reviewsKeywords-list-category.oke-is-active{background-color:var(--oke-filter-backgroundColorActive);color:var(--oke-filter-textColorActive);border-color:var(--oke-filter-borderColorActive)}.okeReviews[data-oke-container] .oke-reviewsKeywords .oke-translateButton,div.okeReviews .oke-reviewsKeywords .oke-translateButton{margin-top:12px} 2193.oke-rs{display:block}.oke-rs .oke-reviewsSummary.oke-is-preRender .oke-reviewsSummary-summary{-webkit-mask:linear-gradient(180deg,#000 0,#000 40%,transparent 95%,transparent 0) 100% 50%/100% 100% repeat-x;mask:linear-gradient(180deg,#000 0,#000 40%,transparent 95%,transparent 0) 100% 50%/100% 100% repeat-x;max-height:150px}.okeReviews[data-oke-container] .oke-reviewsSummary .oke-tooltip,div.okeReviews .oke-reviewsSummary .oke-tooltip{display:inline-block;font-weight:400}.okeReviews[data-oke-container] .oke-reviewsSummary .oke-tooltip-trigger,div.okeReviews .oke-reviewsSummary .oke-tooltip-trigger{height:15px;width:15px;overflow:hidden;transform:translateY(-10%)}.okeReviews[data-oke-container] .oke-reviewsSummary-heading,div.okeReviews .oke-reviewsSummary-heading{align-items:center;-moz-column-gap:4px;column-gap:4px;display:inline-flex;font-weight:700;margin-bottom:8px}.okeReviews[data-oke-container] .oke-reviewsSummary-heading-skeleton,div.okeReviews .oke-reviewsSummary-heading-skeleton{height:calc(var(--oke-button-fontSize) + 4px);width:150px}.okeReviews[data-oke-container] .oke-reviewsSummary-icon,div.okeReviews .oke-reviewsSummary-icon{fill:currentColor;font-size:14px}.okeReviews[data-oke-container] .oke-reviewsSummary-icon svg,div.okeReviews .oke-reviewsSummary-icon svg{vertical-align:baseline}.okeReviews[data-oke-container] .oke-reviewsSummary-summary.oke-is-truncated,div.okeReviews .oke-reviewsSummary-summary.oke-is-truncated{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}</style>
2194<script async id="okendo-reviews-script" src="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/js/okendo-reviews.js"></script>
2194 2195 2196
2196<script> 2197 !function(m,l,c,p){if(!m.mlcp){var mlcp=m.mlcp=function(){mlcp.callMethod?mlcp.callMethod.apply(mlcp,arguments):mlcp.queue.push(arguments)};mlcp.version='1.0.0';mlcp.queue=[];var s=l.createElement(c);s.async=!0;s.src=p;var f=l.getElementsByTagName(c)[0];f.parentNode.insertBefore(s,f)}}(window,document,'script','https://cdn.moloco.com/p/moloco-pixel.js'); 2198 mlcp('init', 'pxl-4kS9zozQ'); 2199 mlcp('event', 'PageView'); 2200 </script>
2200 2201 2202
2202<script> 2203 window.oaiq = window.oaiq || function () { 2204 (window.oaiq.q = window.oaiq.q || []).push(arguments); 2205 }; 2206 oaiq("init", { pixelId: "EfmzHrfoEvEx4byhhJgTir" }); 2207 </script>
2207 2208
2208<script async src="https://bzrcdn.openai.com/sdk/oaiq.min.js"></script>
2208 2209 <!-- BEGIN app block: shopify://apps/pandectes-gdpr/blocks/banner/58c0baa2-6cc1-480c-9ea6-38d6d559556a --> 2210 2211 2212 2213 <!-- TCF is active, scripts are loaded above --> 2214 2215
2215<script> 2216 if (!window.PandectesRulesSettings) { 2217 window.PandectesRulesSettings = {"store":{"id":5438301,"adminMode":false,"headless":false,"storefrontRootDomain":"","checkoutRootDomain":"","storefrontAccessToken":""},"banner":{"revokableTrigger":true,"cookiesBlockedByDefault":"7","hybridStrict":false,"isActive":true},"geolocation":{"auOnly":false,"brOnly":false,"caOnly":false,"chOnly":false,"euOnly":false,"jpOnly":false,"nzOnly":false,"thOnly":false,"zaOnly":false,"canadaOnly":false,"canadaLaw25":false,"canadaPipeda":false,"globalVisibility":true},"blocker":{"isActive":true,"googleConsentMode":{"isActive":false,"id":"","analyticsId":"","adwordsId":"","adStorageCategory":4,"analyticsStorageCategory":2,"functionalityStorageCategory":1,"personalizationStorageCategory":1,"securityStorageCategory":0,"customEvent":true,"redactData":true,"urlPassthrough":false,"dataLayerProperty":"dataLayer","waitForUpdate":0,"useNativeChannel":false},"facebookPixel":{"isActive":false,"id":"","ldu":false},"microsoft":{"isActive":false,"uetTags":""},"clarity":{},"rakuten":{"isActive":false,"cmp":false,"ccpa":false},"gpcIsActive":true,"klaviyoIsActive":false,"defaultBlocked":7,"patterns":{"whiteList":["pay.google.com"],"blackList":{"1":["static.hotjar.com/c/hotjar","fwscripts.com","sdk.postscript.io","asset.fwcdn3.com","google-analytics.com|googletagmanager.com/gtag/destination|googletagmanager.com/gtag/js?id=UA|googletagmanager.com/gtag/js?id=G","www.paypal.com"],"2":["gotolstoy.com","https://www.googletagmanager.com/gtm.js?id=GTM"],"4":["tracead.com","s.pinimg.com/ct/core.js|s.pinimg.com/ct/lib","statis.shareasale.com","bat.bing.com","googleads.g.doubleclick.net","connect.facebook.net","static.klaviyo.com|www.klaviyo.com|static-tracking.klaviyo.com|a.klaviyo.com","s.adroll.com/j/","googletagmanager.com/gtag/js\\?id=AW|googleadservices.com","intg.snapchat.com/shopify/shopify-scevent-init.js","analytics.tiktok.com/i18n/pixel","static.ads-twitter.com/uwt.js|static.ads-twitter.com/oct.js"],"8":[]},"iframesWhiteList":[],"iframesBlackList":{"1":["player.vimeo.com","www.youtube.com|www.youtube-nocookie.com"],"2":[],"4":[],"8":[]},"beaconsWhiteList":[],"beaconsBlackList":{"1":[],"2":[],"4":[],"8":[]}}}}; 2218 const rulesScript = document.createElement('script'); 2219 window.PandectesRulesSettings.auto = true; 2220 rulesScript.src = "https://cdn.shopify.com/extensions/01a0d309-5aa0-76cf-9f48-2a42b2760403/gdpr-cookie-consent-411/assets/pandectes-rules.js"; 2221 const firstChild = document.head.firstChild; 2222 document.head.insertBefore(rulesScript, firstChild); 2223 } 2224 </script>
2224 2225 2226
2226<script> 2227 2228 window.PandectesSettings = {"store":{"id":5438301,"plan":"enterprise","theme":"12.08.25 Dew Drops Bday + Holiday Gift Of Glow","primaryLocale":"en","adminMode":false,"headless":false,"storefrontRootDomain":"","checkoutRootDomain":"","storefrontAccessToken":""},"tsPublished":1765204141,"declaration":{"showPurpose":false,"showProvider":false,"showDateGenerated":true},"language":{"unpublished":[],"languageMode":"Single","fallbackLanguage":"en","languageDetection":"browser","languagesSupported":[]},"texts":{"managed":{"headerText":{"en":"We respect your privacy"},"consentText":{"en":"When you visit our website, if you give your consent to the use of all cookies by clicking the âAccept Allâ button, we and our third-party providers will use cookies and other trackers to personalize your experience, to conduct analytics, and to provide targeted online advertising. You can also select the types of cookies that you are willing to allow us to use by clicking the \"Manage Cookie Preferences\" link. If you want to deny the use of optional cookies on this website by clicking the âReject Allâ button, we will only use essential and functional cookies that are necessary for the functioning of the website and to remember your cookie consent choice for future visits. Regardless of what you choose now, you can change your mind at any time by using our cookie tool, which will set a necessary cookie on your device to remember your preferences. For more information about our privacy practices and how our website uses cookies, please see our privacy policy."},"linkText":{"en":"Privacy Policy"},"imprintText":{"en":"Terms of Service"},"googleLinkText":{"en":"Google's Privacy Terms"},"allowButtonText":{"en":"Accept"},"denyButtonText":{"en":"Decline"},"dismissButtonText":{"en":"Ok"},"leaveSiteButtonText":{"en":"Leave this site"},"preferencesButtonText":{"en":"Manage Cookie Preferences"},"cookiePolicyText":{"en":"Cookie policy"},"preferencesPopupTitleText":{"en":"Manage consent preferences"},"preferencesPopupIntroText":{"en":"We use cookies to optimize website functionality, analyze the performance, and provide personalized experience to you. Some cookies are essential to make the website operate and function correctly. Those cookies cannot be disabled. In this window you can manage your preference of cookies."},"preferencesPopupSaveButtonText":{"en":"Save preferences"},"preferencesPopupCloseButtonText":{"en":"Close"},"preferencesPopupAcceptAllButtonText":{"en":"Accept all"},"preferencesPopupRejectAllButtonText":{"en":"Reject all"},"cookiesDetailsText":{"en":"Cookies details"},"preferencesPopupAlwaysAllowedText":{"en":"Always allowed"},"accessSectionParagraphText":{"en":"You have the right to request access to your data at any time."},"accessSectionTitleText":{"en":"Data portability"},"accessSectionAccountInfoActionText":{"en":"Personal data"},"accessSectionDownloadReportActionText":{"en":"Request export"},"accessSectionGDPRRequestsActionText":{"en":"Data subject requests"},"accessSectionOrdersRecordsActionText":{"en":"Orders"},"rectificationSectionParagraphText":{"en":"You have the right to request your data to be updated whenever you think it is appropriate."},"rectificationSectionTitleText":{"en":"Data Rectification"},"rectificationCommentPlaceholder":{"en":"Describe what you want to be updated"},"rectificationCommentValidationError":{"en":"Comment is required"},"rectificationSectionEditAccountActionText":{"en":"Request an update"},"erasureSectionTitleText":{"en":"Right to be forgotten"},"erasureSectionParagraphText":{"en":"You have the right to ask all your data to be erased. After that, you will no longer be able to access your account."},"erasureSectionRequestDeletionActionText":{"en":"Request personal data deletion"},"consentDate":{"en":"Consent date"},"consentId":{"en":"Consent ID"},"consentSectionChangeConsentActionText":{"en":"Change consent preference"},"consentSectionConsentedText":{"en":"You consented to the cookies policy of this website on"},"consentSectionNoConsentText":{"en":"You have not consented to the cookies policy of this website."},"consentSectionTitleText":{"en":"Your cookie consent"},"consentStatus":{"en":"Consent preference"},"confirmationFailureMessage":{"en":"Your request was not verified. Please try again and if problem persists, contact store owner for assistance"},"confirmationFailureTitle":{"en":"A problem occurred"},"confirmationSuccessMessage":{"en":"We will soon get back to you as to your request."},"confirmationSuccessTitle":{"en":"Your request is verified"},"guestsSupportEmailFailureMessage":{"en":"Your request was not submitted. Please try again and if problem persists, contact store owner for assistance."},"guestsSupportEmailFailureTitle":{"en":"A problem occurred"},"guestsSupportEmailPlaceholder":{"en":"E-mail address"},"guestsSupportEmailSuccessMessage":{"en":"If you are registered as a customer of this store, you will soon receive an email with instructions on how to proceed."}
2228,"guestsSupportEmailSuccessTitle":{"en":"Thank you for your request"},"guestsSupportEmailValidationError":{"en":"Email is not valid"},"guestsSupportInfoText":{"en":"Please login with your customer account to further proceed."},"submitButton":{"en":"Submit"},"submittingButton":{"en":"Submitting..."},"cancelButton":{"en":"Cancel"},"declIntroText":{"en":"We use cookies to optimize website functionality, analyze the performance, and provide personalized experience to you. Some cookies are essential to make the website operate and function correctly. Those cookies cannot be disabled. In this window you can manage your preference of cookies."},"declName":{"en":"Name"},"declPurpose":{"en":"Purpose"},"declType":{"en":"Type"},"declRetention":{"en":"Retention"},"declProvider":{"en":"Provider"},"declFirstParty":{"en":"First-party"},"declThirdParty":{"en":"Third-party"},"declSeconds":{"en":"seconds"},"declMinutes":{"en":"minutes"},"declHours":{"en":"hours"},"declDays":{"en":"days"},"declWeeks":{"en":"week(s)"},"declMonths":{"en":"months"},"declYears":{"en":"years"},"declSession":{"en":"Session"},"declDomain":{"en":"Domain"},"declPath":{"en":"Path"}}
2228,"categories":{"strictlyNecessaryCookiesTitleText":{"en":"Strictly necessary cookies"},"strictlyNecessaryCookiesDescriptionText":{"en":"These cookies are essential in order to enable you to move around the website and use its features, such as accessing secure areas of the website. The website cannot function properly without these cookies."},"functionalityCookiesTitleText":{"en":"Functional cookies"},"functionalityCookiesDescriptionText":{"en":"These cookies enable the site to provide enhanced functionality and personalisation. They may be set by us or by third party providers whose services we have added to our pages. If you do not allow these cookies then some or all of these services may not function properly."},"performanceCookiesTitleText":{"en":"Performance cookies"},"performanceCookiesDescriptionText":{"en":"These cookies enable us to monitor and improve the performance of our website. For example, they allow us to count visits, identify traffic sources and see which parts of the site are most popular."},"targetingCookiesTitleText":{"en":"Targeting cookies"},"targetingCookiesDescriptionText":{"en":"These cookies may be set through our site by our advertising partners. They may be used by those companies to build a profile of your interests and show you relevant adverts on other sites. They do not store directly personal information, but are based on uniquely identifying your browser and internet device. If you do not allow these cookies, you will experience less targeted advertising."},"unclassifiedCookiesTitleText":{"en":"Unclassified cookies"},"unclassifiedCookiesDescriptionText":{"en":"Unclassified cookies are cookies that we are in the process of classifying, together with the providers of individual cookies."}},"auto":{}},"library":{"previewMode":false,"fadeInTimeout":0,"defaultBlocked":7,"showLink":true,"showImprintLink":true,"showGoogleLink":false,"enabled":true,"cookie":{"expiryDays":365,"secure":true,"domain":""},"dismissOnScroll":false,"dismissOnWindowClick":false,"dismissOnTimeout":false,"palette":{"popup":{"background":"#FFFFFF","backgroundForCalculations":{"a":1,"b":255,"g":255,"r":255},"text":"#000000"},"button":{"background":"transparent","backgroundForCalculations":{"a":1,"b":255,"g":255,"r":255},"text":"#000000","textForCalculation":{"a":1,"b":0,"g":0,"r":0},"border":"#000000"}},"content":{"href":"https://www.glowrecipe.com/pages/privacy-policy","imprintHref":"https://www.glowrecipe.com/pages/terms-of-service","close":"✕","target":"_blank","logo":""},"window":"<div role=\"dialog\" aria-label=\"{{header}}\" aria-describedby=\"cookieconsent:desc\" id=\"pandectes-banner\" class=\"cc-window-wrapper cc-bottom-center-wrapper\"><div class=\"pd-cookie-banner-window cc-window {{classes}}\">{{children}}</div></div>","compliance":{"opt-both":"<div class=\"cc-compliance cc-highlight\">{{deny}}{{allow}}</div>"},"type":"opt-both","layouts":{"basic":"{{messagelink}}{{compliance}}"},"position":"bottom-center","theme":"wired","revokable":false,"animateRevokable":false,"revokableReset":false,"revokableLogoUrl":"","revokablePlacement":"bottom-left","revokableMarginHorizontal":15,"revokableMarginVertical":15,"static":false,"autoAttach":true,"hasTransition":false,"blacklistPage":[""],"elements":{"close":"<button aria-label=\"Close\" type=\"button\" class=\"cc-close\">{{close}}</button>","dismiss":"<button type=\"button\" class=\"cc-btn cc-btn-decision cc-dismiss\">{{dismiss}}</button>","allow":"<button type=\"button\" class=\"cc-btn cc-btn-decision cc-allow\">{{allow}}</button>","deny":"<button type=\"button\" class=\"cc-btn cc-btn-decision cc-deny\">{{deny}}</button>","preferences":"<button type=\"button\" class=\"cc-btn cc-settings\" aria-controls=\"pd-cp-preferences\" onclick=\"Pandectes.fn.openPreferences()\">{{preferences}}</button>"}},"geolocation":{"auOnly":false,"brOnly":false,"caOnly":false,"chOnly":false,"euOnly":false,"jpOnly":false,"nzOnly":false,"thOnly":false,"zaOnly":false,"canadaOnly":false,"canadaLaw25":false,"canadaPipeda":false,"globalVisibility":true},"dsr":{"guestsSupport":true,"accessSectionDownloadReportAuto":false},"banner":{"resetTs":1677265848,"extraCss":" .cc-banner-logo {max-width: 36em!important;} @media(min-width: 768px) {.cc-window.cc-floating{max-width: 36em!important;width: 36em!important;}} .cc-message, .pd-cookie-banner-window .cc-header, .cc-logo {text-align: center} .cc-window-wrapper{z-index: 2147483647;} .cc-window{z-index: 2147483647;font-size: 12px!important;font-family: inherit;} .pd-cookie-banner-window .cc-header{font-size: 12px!important;font-family: inherit;} .pd-cp-ui{font-family: inherit; background-color: #FFFFFF;color:#000000;} button.pd-cp-btn, a.pd-cp-btn{} input + .pd-cp-preferences-slider{background-color: rgba(0, 0, 0, 0.3)} .pd-cp-scrolling-section::-webkit-scrollbar{background-color: rgba(0, 0, 0, 0.3)} input:checked + .pd-cp-preferences-slider{background-color: rgba(0, 0, 0, 1)} .pd-cp-scrolling-section::-webkit-scrollbar-thumb {background-color: rgba(0, 0, 0, 1)} .pd-cp-ui-close{color:#000000;} .pd-cp-preferences-slider:before{background-color: #FFFFFF} .pd-cp-title:before {border-color: #000000!important} .pd-cp-preferences-slider{background-color:#000000} .pd-cp-toggle{color:#000000!important} @media(max-width:699px) {.pd-cp-ui-close-top svg {fill: #000000}} .pd-cp-toggle:hover,.pd-cp-toggle:visited,.pd-cp-toggle:active{color:#000000!important} .pd-cookie-banner-window {box-shadow: 0 0 18px rgb(0 0 0 / 20%);} @media (max-width: 767px) { .cc-window.cc-floating { max-width: 100vw !important; }}","customJavascript":{},"showPoweredBy":false,"logoHeight":40,"revokableTrigger":true,"hybridStrict":false,"cookiesBlockedByDefault":"7","isActive":true,"implicitSavePreferences":false,"cookieIcon":false,"blockBots":false,"showCookiesDetails":true,"hasTransition":false,"blockingPage":false,"showOnlyLandingPage":false,"leaveSiteUrl":"https://www.google.com","linkRespectStoreLang":false},"cookies":{"0":[{"name":"localization","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Shopify store localization"}},{"name":"secure_customer_sig","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used in connection with customer login."}},{"name":"_cmp_a","type":"http","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"24 hour(s)","session":false,"expires":24,"unit":"declHours","purpose":{"en":"Used for managing customer privacy settings."}},{"name":"cart_currency","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"15 day(s)","session":false,"expires":15,"unit":"declDays","purpose":{"en":"Used in connection with shopping cart."}},{"name":"keep_alive","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Used in connection with buyer localization."}},{"name":"shopify_pay_redirect","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"60 minute(s)","session":false,"expires":60,"unit":"declMinutes","purpose":{"en":"Used in connection with checkout."}},{"name":"_secure_session_id","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"24 hour(s)","session":false,"expires":24,"unit":"declHours","purpose":{"en":"Used in connection with navigation through a storefront."}},{"name":"_tracking_consent","type":"http","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Tracking preferences."}},{"name":"_pandectes_gdpr","type":"http","domain":".www.glowrecipe.com","path":"/","provider":"Pandectes","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used for the functionality of the cookies consent banner."}},{"name":"locale_bar_accepted","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"Session","session":true,"expires":-55,"unit":"declYears","purpose":{"en":"This cookie is provided by the Geolocation app and is used to load the bar."}},{"name":"_shopify_essential","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used on the accounts page."}},{"name":"cart","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 month(s)","session":false,"expires":1,"unit":"declMonths","purpose":{"en":"Necessary for the shopping cart functionality on the website."}},{"name":"cart_sig","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 month(s)","session":false,"expires":1,"unit":"declMonths","purpose":{"en":"Shopify analytics."}}
2228,{"name":"cart_ts","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 month(s)","session":false,"expires":1,"unit":"declMonths","purpose":{"en":"Used in connection with checkout."}},{"name":"wpm-test-cookie","type":"http","domain":"com","path":"/","provider":"Unknown","firstParty":false,"retention":"Session","session":true,"expires":1,"unit":"declSeconds","purpose":{"en":""}}],"1":[{"name":"PHPSESSID","type":"http","domain":"tracead.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":-1677265915,"unit":"declSeconds","purpose":{"en":"Cookie is placed by PHP with unknown functionality"}},{"name":"_hjSession_2695336","type":"http","domain":".glowrecipe.com","path":"/","provider":"Hotjar","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Used by Hotjar to provide functions across pages."}},{"name":"_hjSessionUser_2695336","type":"http","domain":".glowrecipe.com","path":"/","provider":"Hotjar","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used by Hotjar to store a unique user ID."}},{"name":"_pinterest_ct_ua","type":"http","domain":".ct.pinterest.com","path":"/","provider":"Pinterest","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used to group actions across pages."}},{"name":"_hjTLDTest","type":"http","domain":"glowrecipe.com","path":"/","provider":"Hotjar","firstParty":false,"retention":"Session","session":true,"expires":1,"unit":"declSeconds","purpose":{"en":"Used to determine the most generic cookie path to use, instead of page hostname."}}],"2":[{"name":"_landing_page","type":"http","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"14 day(s)","session":false,"expires":14,"unit":"declDays","purpose":{"en":"Tracks landing pages."}},{"name":"_shopify_y","type":"http","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Shopify analytics."}},{"name":"_s","type":"http","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"31 minute(s)","session":false,"expires":31,"unit":"declMinutes","purpose":{"en":"Shopify analytics."}},{"name":"_y","type":"http","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Shopify analytics."}},{"name":"_orig_referrer","type":"http","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"14 day(s)","session":false,"expires":14,"unit":"declDays","purpose":{"en":"Tracks landing pages."}},{"name":"_shopify_s","type":"http","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"31 minute(s)","session":false,"expires":31,"unit":"declMinutes","purpose":{"en":"Shopify analytics."}},{"name":"_ga_NF5EKRHSSV","type":"http","domain":".glowrecipe.com","path":"/","provider":"Google","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Cookie is set by Google Analytics with unknown functionality"}},{"name":"_shopify_sa_t","type":"http","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Shopify analytics relating to marketing & referrals."}},{"name":"_shopify_sa_p","type":"http","domain":".glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Shopify analytics relating to marketing & referrals."}},{"name":"_ga","type":"http","domain":".glowrecipe.com","path":"/","provider":"Google","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Cookie is set by Google Analytics with unknown functionality"}},{"name":"_gid","type":"http","domain":".glowrecipe.com","path":"/","provider":"Google","firstParty":true,"retention":"24 hour(s)","session":false,"expires":24,"unit":"declHours","purpose":{"en":"Cookie is placed by Google Analytics to count and track pageviews."}},{"name":"_gat","type":"http","domain":".glowrecipe.com","path":"/","provider":"Google","firstParty":true,"retention":"7 second(s)","session":false,"expires":7,"unit":"declSeconds","purpose":{"en":"Cookie is placed by Google Analytics to filter requests from bots."}},{"name":"_shopify_y","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Shopify analytics."}}
2228,{"name":"_shopify_s","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Shopify analytics."}},{"name":"_shopify_sa_t","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Shopify analytics relating to marketing & referrals."}},{"name":"_shopify_sa_p","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Shopify","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Shopify analytics relating to marketing & referrals."}},{"name":"__cf_bm","type":"http","domain":".sdk-api.postscript.io","path":"/","provider":"CloudFlare","firstParty":false,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":"Used to manage incoming traffic that matches criteria associated with bots."}},{"name":"_shopify_s","type":"http","domain":"com","path":"/","provider":"Shopify","firstParty":false,"retention":"Session","session":true,"expires":1,"unit":"declSeconds","purpose":{"en":"Shopify analytics."}},{"name":"bugsnag-anonymous-id","type":"html_local","domain":"https://pay.shopify.com","path":"/","provider":"Unknown","firstParty":false,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}}],"4":[{"name":"_ttp","type":"http","domain":".tiktok.com","path":"/","provider":"TikTok","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"To measure and improve the performance of your advertising campaigns and to personalize the user's experience (including ads) on TikTok."}},{"name":"_gcl_au","type":"http","domain":".glowrecipe.com","path":"/","provider":"Google","firstParty":true,"retention":"90 day(s)","session":false,"expires":90,"unit":"declDays","purpose":{"en":"Cookie is placed by Google Tag Manager to track conversions."}},{"name":"_fbp","type":"http","domain":".glowrecipe.com","path":"/","provider":"Facebook","firstParty":true,"retention":"90 day(s)","session":false,"expires":90,"unit":"declDays","purpose":{"en":"Cookie is placed by Facebook to track visits across websites."}},{"name":"_pin_unauth","type":"http","domain":".glowrecipe.com","path":"/","provider":"Pinterest","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used to group actions for users who cannot be identified by Pinterest."}},{"name":"_ttp","type":"http","domain":".glowrecipe.com","path":"/","provider":"TikTok","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"To measure and improve the performance of your advertising campaigns and to personalize the user's experience (including ads) on TikTok."}},{"name":"test_cookie","type":"http","domain":".doubleclick.net","path":"/","provider":"Google","firstParty":true,"retention":"15 minute(s)","session":false,"expires":15,"unit":"declMinutes","purpose":{"en":"To measure the visitorsâ actions after they click through from an advert. Expires after each visit."}},{"name":"_tt_enable_cookie","type":"http","domain":".glowrecipe.com","path":"/","provider":"TikTok","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used to identify a visitor."}},{"name":"__kla_id","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Klaviyo","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Tracks when someone clicks through a Klaviyo email to your website"}},{"name":"IDE","type":"http","domain":".doubleclick.net","path":"/","provider":"Google","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"To measure the visitorsâ actions after they click through from an advert. Expires after 1 year."}},{"name":"ar_debug","type":"http","domain":".pinterest.com","path":"/","provider":"Teads","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Checks whether a technical debugger-cookie is present."}},{"name":"_pin_unauth","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Pinterest","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used to group actions for users who cannot be identified by Pinterest."}},{"name":"_ttp","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"TikTok","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"To measure and improve the performance of your advertising campaigns and to personalize the user's experience (including ads) on TikTok."}},{"name":"_tt_enable_cookie","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"TikTok","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Used to identify a visitor."}}
2228,{"name":"lastExternalReferrer","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Facebook","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Detects how the user reached the website by registering their last URL-address."}},{"name":"lastExternalReferrerTime","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Facebook","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Contains the timestamp of the last update of the lastExternalReferrer cookie."}},{"name":"tt_pixel_session_index","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"TikTok","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":"Used by the social networking service, TikTok, for tracking the use of embedded services."}},{"name":"tt_appInfo","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"TikTok","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":"Used by the social networking service, TikTok, for tracking the use of embedded services."}},{"name":"tt_sessionId","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"TikTok","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":"Used by the social networking service, TikTok, for tracking the use of embedded services."}}],"8":[{"name":"tracead_v2","type":"http","domain":"tracead.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"__olAlertsForShop","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":-1677265915,"unit":"declSeconds","purpose":{"en":""}},{"name":"_hjIncludedInSessionSample_2695336","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"2 minute(s)","session":false,"expires":2,"unit":"declMinutes","purpose":{"en":""}},{"name":"_hjIncludedInPageviewSample","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"2 minute(s)","session":false,"expires":2,"unit":"declMinutes","purpose":{"en":""}},{"name":"_hjAbsoluteSessionInProgress","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":""}},{"name":"__idcontext","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"carthash","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":-1677265915,"unit":"declSeconds","purpose":{"en":""}},{"name":"__adcontext","type":"http","domain":".cdnwidget.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"dd9b583d-b899-4ac1-845d-575213087efc","type":"http","domain":"www.pubxtags.com","path":"/","provider":"Unknown","firstParty":true,"retention":"30 day(s)","session":false,"expires":30,"unit":"declDays","purpose":{"en":""}},{"name":"__3idcontext","type":"http","domain":".cdnwidget.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"bounceClientVisit4566v","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":""}},{"name":"did","type":"http","domain":".pippio.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"didts","type":"http","domain":".pippio.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"bounceClientVisit4566c","type":"http","domain":".bounceexchange.com","path":"/","provider":"Unknown","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":""}},{"name":"nnls","type":"http","domain":".pippio.com","path":"/","provider":"Unknown","firstParty":true,"retention":"60 day(s)","session":false,"expires":60,"unit":"declDays","purpose":{"en":""}},{"name":"pxrc","type":"http","domain":".pippio.com","path":"/","provider":"Unknown","firstParty":true,"retention":"60 day(s)","session":false,"expires":60,"unit":"declDays","purpose":{"en":""}}
2228,{"name":"_ps_session","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"24 hour(s)","session":false,"expires":24,"unit":"declHours","purpose":{"en":""}},{"name":"bounceClientVisit4566","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"_hjFirstSeen","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"30 minute(s)","session":false,"expires":30,"unit":"declMinutes","purpose":{"en":""}},{"name":"_hjLocalStorageTest","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":"Checks if the Tracking Code can use Local Storage. If it can, a value of 1 is set."}},{"name":"_hjSessionStorageTest","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":"Checks if the Tracking Code can use Session Storage. If it can, a value of 1 is set."}},{"name":"pagead/1p-user-list/#","type":"html_session","domain":"https://www.google.com","path":"/","provider":"Unknown","firstParty":false,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"pagead/1p-user-list/#","type":"html_session","domain":"https://www.google.ie","path":"/","provider":"Unknown","firstParty":false,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"_conv_v","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":false,"retention":"6 month(s)","session":false,"expires":6,"unit":"declMonths","purpose":{"en":""}},{"name":"fw_utm","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"fw_uid","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"track.gif/client_gdpr_optout","type":"html_session","domain":"https://events.bouncex.net","path":"/","provider":"Unknown","firstParty":false,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"_conv_s","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":false,"retention":"20 minute(s)","session":false,"expires":20,"unit":"declMinutes","purpose":{"en":""}},{"name":"__utmzz","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":false,"retention":"6 month(s)","session":false,"expires":6,"unit":"declMonths","purpose":{"en":""}},{"name":"fw_se","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"__utmzzses","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":false,"retention":"Session","session":true,"expires":-55,"unit":"declYears","purpose":{"en":""}},{"name":"fw_cchid","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"fw_bid","type":"http","domain":".glowrecipe.com","path":"/","provider":"Unknown","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"kl_csrftoken","type":"http","domain":".klaviyo.com","path":"/","provider":"Unknown","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"ads/ga-audiences","type":"html_session","domain":"https://www.google.ie","path":"/","provider":"Unknown","firstParty":false,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"tolstoy-anonymousId","type":"http","domain":".gotolstoy.com","path":"/","provider":"Unknown","firstParty":false,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
2228+/","type":"http","domain":"glowrecipe.com","path":"/","provider":"Unknown","firstParty":false,"retention":"Session","session":true,"expires":1,"unit":"declSeconds","purpose":{"en":""}},{"name":"wpm-test-cookie","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declSeconds","purpose":{"en":""}},{"name":"wpm-test-cookie","type":"http","domain":"glowrecipe.com","path":"/","provider":"Unknown","firstParty":false,"retention":"Session","session":true,"expires":1,"unit":"declSeconds","purpose":{"en":""}},{"name":"k","type":"http","domain":"ssl.kaptcha.com","path":"/","provider":"Unknown","firstParty":false,"retention":"3 month(s)","session":false,"expires":3,"unit":"declMonths","purpose":{"en":""}},{"name":"AMP_T_FINGERPRINT","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"tolstoy-anonymousId","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"fw_cchid","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"clientside-cookie","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 year(s)","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"fw_utm","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"wknd-session","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"KountCart","type":"http","domain":"www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"1 day(s)","session":false,"expires":1,"unit":"declDays","purpose":{"en":""}},{"name":"fw_otos","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"fw_uid","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"loyaltylion_persistent_data","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"conv_rand","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"tt_appInfo_v2","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"hk-userid","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"fw_bid","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"tolstoyViewers","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"hk-entrypoints-enabled","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"fw_se","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"klaviyoOnsite","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"hk-entrypoint-id","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"widget-status","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"fw_gs","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"loyaltylion_temporary_data","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"tt_pixel_session_index_v2","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"tolstoy-session-unique-id","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"__spdt","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"fw_tab_id","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"tolstoy-not-visible-opened-publish-id","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"__storage_test__","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"klaviyoPagesVisitCount","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"loyaltylion_localstorage_test","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"is_eu","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"bounceClientVisit4566v","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"fw_gs","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"local-storage-test","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"session-storage-test","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"spdt-1728491670.475-669","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"_kla_test","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"bxtest","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"spdt-1728491695.562-662","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"convert_attributes","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"conv_variations","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"spdt-1728491710.515-288","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"tolstoy-activity","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"tolstoy-anonymousId","type":"html_local","domain":"https://play.gotolstoy.com","path":"/","provider":"Unknown","firstParty":false,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"loyaltylion_sessionstorage_test","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"spdt-1728491682.344-958","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"spdt-1728491730.721-870","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"clientside-local","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"kountCookie","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"KountSessionID","type":"html_session","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Session","session":true,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"ss","type":"html_local","domain":"https://ssl.kaptcha.com","path":"/","provider":"Unknown","firstParty":false,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"spdt-1728491744.666-103","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}},{"name":"spdt-1728491724.857-257","type":"html_local","domain":"https://www.glowrecipe.com","path":"/","provider":"Unknown","firstParty":true,"retention":"Local Storage","session":false,"expires":1,"unit":"declYears","purpose":{"en":""}}]},"blocker":{"isActive":true,"googleConsentMode":{"id":"","analyticsId":"","adwordsId":"","isActive":false,"adStorageCategory":4,"analyticsStorageCategory":2,"personalizationStorageCategory":1,"functionalityStorageCategory":1,"customEvent":true,"securityStorageCategory":0,"redactData":true,"urlPassthrough":false,"dataLayerProperty":"dataLayer","waitForUpdate":0,"useNativeChannel":false},"facebookPixel":{"id":"","isActive":false,"ldu":false},"microsoft":{"isActive":false,"uetTags":""},"rakuten":{"isActive":false,"cmp":false,"ccpa":false},"klaviyoIsActive":false,"gpcIsActive":true,"clarity":{},"defaultBlocked":7,"patterns":{"whiteList":["pay.google.com"],"blackList":{"1":["static.hotjar.com/c/hotjar","fwscripts.com","sdk.postscript.io","asset.fwcdn3.com","google-analytics.com|googletagmanager.com/gtag/destination|googletagmanager.com/gtag/js?i
2228d=UA|googletagmanager.com/gtag/js?id=G","www.paypal.com"],"2":["gotolstoy.com","https://www.googletagmanager.com/gtm.js?id=GTM"],"4":["tracead.com","s.pinimg.com/ct/core.js|s.pinimg.com/ct/lib","statis.shareasale.com","bat.bing.com","googleads.g.doubleclick.net","connect.facebook.net","static.klaviyo.com|www.klaviyo.com|static-tracking.klaviyo.com|a.klaviyo.com","s.adroll.com/j/","googletagmanager.com/gtag/js\\?id=AW|googleadservices.com","intg.snapchat.com/shopify/shopify-scevent-init.js","analytics.tiktok.com/i18n/pixel","static.ads-twitter.com/uwt.js|static.ads-twitter.com/oct.js"],"8":[]},"iframesWhiteList":[],"iframesBlackList":{"1":["player.vimeo.com","www.youtube.com|www.youtube-nocookie.com"],"2":[],"4":[],"8":[]},"beaconsWhiteList":[],"beaconsBlackList":{"1":[],"2":[],"4":[],"8":[]}}}}; 2229 2230 window.addEventListener('DOMContentLoaded', function(){ 2231 const script = document.createElement('script'); 2232 2233 script.src = "https://cdn.shopify.com/extensions/01a0d309-5aa0-76cf-9f48-2a42b2760403/gdpr-cookie-consent-411/assets/pandectes-core.js"; 2234 2235 script.defer = true; 2236 document.body.appendChild(script); 2237 }) 2238 </script>
2238 2239 2240 2241 2242 2243 2244 2245 2246<!-- END app block --><!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 --> 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259
2259<script async src="https://static.klaviyo.com/onsite/js/JvQ5im/klaviyo.js?company_id=JvQ5im"></script>
2259 2260
2260<script>!function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}();</script>
2260 2261 2262 2263 2264 2265 2266 2267
2267<script> 2268 window.klaviyoReviewsProductDesignMode = false 2269 </script>
2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279<!-- END app block --><!-- BEGIN app block: shopify://apps/okendo/blocks/theme-settings/bb689e69-ea70-4661-8fb7-ad24a2e23c29 --><!-- BEGIN app snippet: header-metafields --> 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 <style data-oke-reviews-version="0.85.10" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/okendo-reviews-styles.6dbb2446.css"></style><style data-oke-reviews-version="0.85.10" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/modules/okendo-star-rating.4cb378a8.css"></style><style data-oke-reviews-version="0.85.10" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/modules/okendo-reviews-keywords.0942444f.css"></style><style data-oke-reviews-version="0.85.10" type="text/css" data-href="https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/css/modules/okendo-reviews-summary.a0c9d7d6.css"></style><style type="text/css">.okeReviews[data-oke-container],div.okeReviews{font-size:14px;font-size:var(--oke-text-regular);font-weight:400;font-family:var(--oke-text-fontFamily);line-height:1.6}.okeReviews[data-oke-container] *,.okeReviews[data-oke-container] :after,.okeReviews[data-oke-container] :before,div.okeReviews *,div.okeReviews :after,div.okeReviews :before{box-sizing:border-box}.okeReviews[data-oke-container] h1,.okeReviews[data-oke-container] h2,.okeReviews[data-oke-container] h3,.okeReviews[data-oke-container] h4,.okeReviews[data-oke-container] h5,.okeReviews[data-oke-container] h6,div.okeReviews h1,div.okeReviews h2,div.okeReviews h3,div.okeReviews h4,div.okeReviews h5,div.okeReviews h6{font-size:1em;font-weight:400;line-height:1.4;margin:0}.okeReviews[data-oke-container] ul,div.okeReviews ul{padding:0;margin:0}.okeReviews[data-oke-container] li,div.okeReviews li{list-style-type:none;padding:0}.okeReviews[data-oke-container] p,div.okeReviews p{line-height:1.8;margin:0 0 4px}.okeReviews[data-oke-container] p:last-child,div.okeReviews p:last-child{margin-bottom:0}.okeReviews[data-oke-container] a,div.okeReviews a{text-decoration:none;color:inherit}.okeReviews[data-oke-container] button,div.okeReviews button{border-radius:0;border:0;box-shadow:none;margin:0;width:auto;min-width:auto;padding:0;background-color:transparent;min-height:auto}.okeReviews[data-oke-container] button,.okeReviews[data-oke-container] input,.okeReviews[data-oke-container] select,.okeReviews[data-oke-container] textarea,div.okeReviews button,div.okeReviews input,div.okeReviews select,div.okeReviews textarea{font-family:inherit;font-size:1em}.okeReviews[data-oke-container] label,.okeReviews[data-oke-container] select,div.okeReviews label,div.okeReviews select{display:inline}.okeReviews[data-oke-container] select,div.okeReviews select{width:auto}.okeReviews[data-oke-container] article,.okeReviews[data-oke-container] aside,div.okeReviews article,div.okeReviews aside{margin:0}.okeReviews[data-oke-container] table,div.okeReviews table{background:transparent;border:0;border-collapse:collapse;border-spacing:0;font-family:inherit;font-size:1em;table-layout:auto}.okeReviews[data-oke-container] table td,.okeReviews[data-oke-container] table th,.okeReviews[data-oke-container] table tr,div.okeReviews table td,div.okeReviews table th,div.okeReviews table tr{border:0;font-family:inherit;font-size:1em}.okeReviews[data-oke-container] table td,.okeReviews[data-oke-container] table th,div.okeReviews table td,div.okeReviews table th{background:transparent;font-weight:400;letter-spacing:normal;padding:0;text-align:left;text-transform:none;vertical-align:middle}.okeReviews[data-oke-container] table tr:hover td,.okeReviews[data-oke-container] table tr:hover th,div.okeReviews table tr:hover td,div.okeReviews table tr:hover th{background:transparent}.okeReviews[data-oke-container] fieldset,div.okeReviews fieldset{border:0;padding:0;margin:0;min-width:0}.okeReviews[data-oke-container] img,.okeReviews[data-oke-container] svg,div.okeReviews img,div.okeReviews svg{max-width:none}.okeReviews[data-oke-container] div:empty,div.okeReviews div:empty{display:block}.okeReviews[data-oke-container] .oke-icon:before,div.okeReviews .oke-icon:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:inherit}.okeReviews[data-oke-container] .oke-icon--select-arrow:before,div.okeReviews .oke-icon--select-arrow:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--loading:before,div.okeReviews .oke-icon--loading:before{content:"î¤"}
2293.okeReviews[data-oke-container] .oke-icon--pencil:before,div.okeReviews .oke-icon--pencil:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--filter:before,div.okeReviews .oke-icon--filter:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--play:before,div.okeReviews .oke-icon--play:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--tick-circle:before,div.okeReviews .oke-icon--tick-circle:before{content:"î¤
"}.okeReviews[data-oke-container] .oke-icon--chevron-left:before,div.okeReviews .oke-icon--chevron-left:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-right:before,div.okeReviews .oke-icon--chevron-right:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--thumbs-down:before,div.okeReviews .oke-icon--thumbs-down:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--thumbs-up:before,div.okeReviews .oke-icon--thumbs-up:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--close:before,div.okeReviews .oke-icon--close:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-up:before,div.okeReviews .oke-icon--chevron-up:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--chevron-down:before,div.okeReviews .oke-icon--chevron-down:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--star:before,div.okeReviews .oke-icon--star:before{content:"î¤"}.okeReviews[data-oke-container] .oke-icon--magnifying-glass:before,div.okeReviews .oke-icon--magnifying-glass:before{content:"î¤"}@font-face{font-family:oke-widget-icons;src:url(https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/fonts/oke-widget-icons.ttf) format("truetype"),url(https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/fonts/oke-widget-icons.woff) format("woff"),url(https://d3hw6dc1ow8pp2.cloudfront.net/reviews-widget-plus/img/oke-widget-icons.bc0d6b0a.svg) format("svg");font-weight:400;font-style:normal;font-display:swap}.okeReviews[data-oke-container] .oke-button,div.okeReviews .oke-button{display:inline-block;border-style:solid;border-color:var(--oke-button-borderColor);border-width:var(--oke-button-borderWidth);background-color:var(--oke-button-backgroundColor);line-height:1;padding:12px 24px;margin:0;border-radius:var(--oke-button-borderRadius);color:var(--oke-button-textColor);text-align:center;position:relative;font-weight:var(--oke-button-fontWeight);font-size:var(--oke-button-fontSize);font-family:var(--oke-button-fontFamily);outline:0}.okeReviews[data-oke-container] .oke-button-text,.okeReviews[data-oke-container] .oke-button .oke-icon,div.okeReviews .oke-button-text,div.okeReviews .oke-button .oke-icon{line-height:1}.okeReviews[data-oke-container] .oke-button.oke-is-loading,div.okeReviews .oke-button.oke-is-loading{position:relative}.okeReviews[data-oke-container] .oke-button.oke-is-loading:before,div.okeReviews .oke-button.oke-is-loading:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:undefined;font-size:12px;display:inline-block;animation:oke-spin 1s linear infinite;position:absolute;width:12px;height:12px;top:0;left:0;bottom:0;right:0;margin:auto}.okeReviews[data-oke-container] .oke-button.oke-is-loading>*,div.okeReviews .oke-button.oke-is-loading>*{opacity:0}.okeReviews[data-oke-container] .oke-button.oke-is-active,div.okeReviews .oke-button.oke-is-active{background-color:var(--oke-button-backgroundColorActive);color:var(--oke-button-textColorActive);border-color:var(--oke-button-borderColorActive)}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading),div.okeReviews .oke-button:not(.oke-is-loading){cursor:pointer}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):hover,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):hover{background-color:var(--oke-button-backgroundColorHover);color:var(--oke-button-textColorHover);border-color:var(--oke-button-borderColorHover);box-shadow:0 0 0 2px var(--oke-button-backgroundColorHover)}.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):active,.okeReviews[data-oke-container] .oke-button:not(.oke-is-loading):not(.oke-is-active):hover:active,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):active,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):hover:active{background-color:var(--oke-button-backgroundColorActive);color:var(--oke-button-textColorActive);border-color:var(--oke-button-borderColorActive)}.okeReviews[data-oke-container] .oke-title,div.okeReviews .oke-title{font-weight:var(--oke-title-fontWeight);font-size:var(--oke-title-fontSize);font-family:var(--oke-title-fontFamily)}.okeReviews[data-oke-container] .oke-bodyText,div.okeReviews .oke-bodyText{font-weight:var(--oke-bodyText-fontWeight);font-size:var(--oke-bodyText-fontSize);font-family:var(--oke-bodyText-fontFamily)}.okeReviews[data-oke-container] .oke-linkButton,div.okeReviews .oke-linkButton{curs
2293or:pointer;font-weight:700;pointer-events:auto;text-decoration:underline}.okeReviews[data-oke-container] .oke-linkButton:hover,div.okeReviews .oke-linkButton:hover{text-decoration:none}.okeReviews[data-oke-container] .oke-readMore,div.okeReviews .oke-readMore{cursor:pointer;color:inherit;text-decoration:underline}.okeReviews[data-oke-container] .oke-select,div.okeReviews .oke-select{cursor:pointer;background-repeat:no-repeat;background-position-x:100%;background-position-y:50%;border:none;padding:0 24px 0 12px;-moz-appearance:none;appearance:none;color:inherit;-webkit-appearance:none;background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg fill='currentColor' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");outline-offset:4px}.okeReviews[data-oke-container] .oke-select:disabled,div.okeReviews .oke-select:disabled{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg fill='%239a9db1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E")}.okeReviews[data-oke-container] .oke-loader,div.okeReviews .oke-loader{position:relative}.okeReviews[data-oke-container] .oke-loader:before,div.okeReviews .oke-loader:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:var(--oke-text-secondaryColor);font-size:12px;display:inline-block;animation:oke-spin 1s linear infinite;position:absolute;width:12px;height:12px;top:0;left:0;bottom:0;right:0;margin:auto}.okeReviews[data-oke-container] .oke-a11yText,div.okeReviews .oke-a11yText{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.okeReviews[data-oke-container] .oke-hidden,div.okeReviews .oke-hidden{display:none}.okeReviews[data-oke-container] .oke-modal,div.okeReviews .oke-modal{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:2147483647;max-height:100%;background-color:rgba(0,0,0,.5);padding:40px 0 12px}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal,div.okeReviews .oke-modal{display:flex;align-items:center;padding:48px 0}}.okeReviews[data-oke-container] .oke-modal ::-moz-selection,div.okeReviews .oke-modal ::-moz-selection{background-color:rgba(39,45,69,.2)}.okeReviews[data-oke-container] .oke-modal ::selection,div.okeReviews .oke-modal ::selection{background-color:rgba(39,45,69,.2)}.okeReviews[data-oke-container] .oke-modal,.okeReviews[data-oke-container] .oke-modal p,div.okeReviews .oke-modal,div.okeReviews .oke-modal p{color:#272d45}.okeReviews[data-oke-container] .oke-modal-content,div.okeReviews .oke-modal-content{background-color:#fff;margin:auto;position:relative;will-change:transform,opacity;width:calc(100% - 24px)}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal-content,div.okeReviews .oke-modal-content{max-width:1000px}}.okeReviews[data-oke-container] .oke-modal-close,div.okeReviews .oke-modal-close{cursor:pointer;position:absolute;width:32px;height:32px;top:-32px;padding:4px;right:-4px;line-height:1}.okeReviews[data-oke-container] .oke-modal-close:before,div.okeReviews .oke-modal-close:before{font-family:oke-widget-icons!important;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"î¤";color:#fff;font-size:24px;display:inline-block;width:24px;height:24px}.okeReviews[data-oke-container] .oke-modal-overlay,div.okeReviews .oke-modal-overlay{background-color:rgba(43,46,56,.9)}@media only screen and (min-width:1024px){.okeReviews[data-oke-container] .oke-modal--large .oke-modal-content,div.okeReviews .oke-modal--large .oke-modal-content{max-width:1200px}}.okeReviews[data-oke-container] .oke-modal .oke-helpful,.okeReviews[data-oke-container] .oke-modal .oke-helpful-vote-button,.okeReviews[data-oke-container] .oke-modal .oke-reviewContent-date,div.okeReviews .oke-modal .oke-helpful,div.okeReviews .oke-modal .oke-helpful-vote-button,div.okeReviews .oke-modal .oke-reviewContent-date{color:#676986}.oke-modal .okeReviews[data-oke-container].oke-w,.oke-modal div.okeReviews.oke-w{color:#272d45}.okeReviews[data-oke-container] .oke-tag,div.okeReviews .oke-tag{align-items:center;color:#272d45;display:flex;font-size:var(--oke-text-small);font-weight:600;text-align:left;position:relative;z-index:2;background-color:#f4f4f6;padding:4px 6px;border:none;border-radius:4px;gap:6px;line-height:1}.okeReviews[data-oke-container] .oke-tag svg,div.okeReviews .oke-tag svg{fill:currentColor;height:1rem}.okeReviews[data-oke-container] .hooper,div.okeReviews .hooper{height:auto}.okeReviews--left{text-align:left}.okeReviews--right{text-align:right}.okeReviews--center{text-align:center}.okeReviews :not([tabindex="-1"]):focus-visible{outline:5px auto highlight;outline:5px auto -webkit-focus-ring-color}.is-oke-modalOpen{overflow:hidden!important}img.oke-is-error{background-color:var(--oke-shadingColor);background-size:cover;background-position:50% 50%;box-shadow:inset 0 0 0 1px var(--oke-border-color)}@keyframes oke-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes oke-fade-in{0%{opacity:0}
2293to{opacity:1}}.layout-panel-flex>div:has([data-oke-container]){width:100%} 2294.oke-stars{line-height:1;position:relative;display:inline-block}.oke-stars-background svg{overflow:visible}.oke-stars-foreground{overflow:hidden;position:absolute;top:0;left:0}.oke-sr{display:inline-block;padding-top:var(--oke-starRating-spaceAbove);padding-bottom:var(--oke-starRating-spaceBelow)}.oke-sr .oke-is-clickable{cursor:pointer}.oke-sr--hidden{display:none}.oke-sr-count,.oke-sr-rating,.oke-sr-stars{display:inline-block;vertical-align:middle}.oke-sr-stars{line-height:1;margin-right:8px}.oke-sr-rating{display:none}.oke-sr-count--brackets:before{content:"("}.oke-sr-count--brackets:after{content:")"} 2295.oke-rk{display:block}.okeReviews[data-oke-container] .oke-reviewsKeywords-heading,div.okeReviews .oke-reviewsKeywords-heading{font-weight:700;margin-bottom:8px}.okeReviews[data-oke-container] .oke-reviewsKeywords-heading-skeleton,div.okeReviews .oke-reviewsKeywords-heading-skeleton{height:calc(var(--oke-button-fontSize) + 4px);width:150px}.okeReviews[data-oke-container] .oke-reviewsKeywords-list,div.okeReviews .oke-reviewsKeywords-list{display:inline-flex;align-items:center;flex-wrap:wrap;gap:4px}.okeReviews[data-oke-container] .oke-reviewsKeywords-list-category,div.okeReviews .oke-reviewsKeywords-list-category{background-color:var(--oke-filter-backgroundColor);color:var(--oke-filter-textColor);border:1px solid var(--oke-filter-borderColor);border-radius:var(--oke-filter-borderRadius);padding:6px 16px;transition:background-color .1s ease-out,border-color .1s ease-out;white-space:nowrap}.okeReviews[data-oke-container] .oke-reviewsKeywords-list-category.oke-is-clickable,div.okeReviews .oke-reviewsKeywords-list-category.oke-is-clickable{cursor:pointer}.okeReviews[data-oke-container] .oke-reviewsKeywords-list-category.oke-is-active,div.okeReviews .oke-reviewsKeywords-list-category.oke-is-active{background-color:var(--oke-filter-backgroundColorActive);color:var(--oke-filter-textColorActive);border-color:var(--oke-filter-borderColorActive)}.okeReviews[data-oke-container] .oke-reviewsKeywords .oke-translateButton,div.okeReviews .oke-reviewsKeywords .oke-translateButton{margin-top:12px} 2296.oke-rs{display:block}.oke-rs .oke-reviewsSummary.oke-is-preRender .oke-reviewsSummary-summary{-webkit-mask:linear-gradient(180deg,#000 0,#000 40%,transparent 95%,transparent 0) 100% 50%/100% 100% repeat-x;mask:linear-gradient(180deg,#000 0,#000 40%,transparent 95%,transparent 0) 100% 50%/100% 100% repeat-x;max-height:150px}.okeReviews[data-oke-container] .oke-reviewsSummary .oke-tooltip,div.okeReviews .oke-reviewsSummary .oke-tooltip{display:inline-block;font-weight:400}.okeReviews[data-oke-container] .oke-reviewsSummary .oke-tooltip-trigger,div.okeReviews .oke-reviewsSummary .oke-tooltip-trigger{height:15px;width:15px;overflow:hidden;transform:translateY(-10%)}.okeReviews[data-oke-container] .oke-reviewsSummary-heading,div.okeReviews .oke-reviewsSummary-heading{align-items:center;-moz-column-gap:4px;column-gap:4px;display:inline-flex;font-weight:700;margin-bottom:8px}.okeReviews[data-oke-container] .oke-reviewsSummary-heading-skeleton,div.okeReviews .oke-reviewsSummary-heading-skeleton{height:calc(var(--oke-button-fontSize) + 4px);width:150px}.okeReviews[data-oke-container] .oke-reviewsSummary-icon,div.okeReviews .oke-reviewsSummary-icon{fill:currentColor;font-size:14px}.okeReviews[data-oke-container] .oke-reviewsSummary-icon svg,div.okeReviews .oke-reviewsSummary-icon svg{vertical-align:baseline}.okeReviews[data-oke-container] .oke-reviewsSummary-summary.oke-is-truncated,div.okeReviews .oke-reviewsSummary-summary.oke-is-truncated{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}</style> 2297 2298
2298<script type="application/json" id="oke-reviews-settings">{"subscriberId":"41915e47-fb72-4109-81cf-25e1e3b73626","analyticsSettings":{"isWidgetOnScreenTrackingEnabled":true,"provider":"ua"},"locale":"en","localeAndVariant":{"code":"en"},"matchCustomerLocale":false,"widgetSettings":{"global":{"dateSettings":{"format":{"type":"relative"}},"hideOkendoBranding":true,"reviewTranslationsMode":"off","showIncentiveIndicator":false,"searchEnginePaginationEnabled":false,"stars":{"backgroundColor":"#E5E5E5","foregroundColor":"#000000","interspace":2,"shape":{"type":"thin"},"showBorder":false},"font":{"fontType":"inherit-from-page"}},"homepageCarousel":{"slidesPerPage":{"large":3,"medium":2},"totalSlides":12,"scrollBehaviour":"slide","style":{"showDates":true,"border":{"color":"#E5E5EB","width":{"value":1,"unit":"px"}},"bodyFont":{"hasCustomFontSettings":false},"headingFont":{"hasCustomFontSettings":false},"arrows":{"color":"#676986","size":{"value":24,"unit":"px"},"enabled":true},"avatar":{"backgroundColor":"#E5E5EB","placeholderTextColor":"#2C3E50","size":{"value":48,"unit":"px"},"enabled":true},"media":{"size":{"value":80,"unit":"px"},"imageGap":{"value":4,"unit":"px"},"enabled":true},"stars":{"height":{"value":18,"unit":"px"},"globalOverrideSettings":{"backgroundColor":"#E5E5E5","foregroundColor":"#000000"}},"productImageSize":{"value":48,"unit":"px"},"layout":{"name":"default","reviewDetailsPosition":"below","showProductName":false,"showAttributeBars":false,"showProductDetails":"only-when-grouped"},"highlightColor":"#0E7A82","spaceAbove":{"value":20,"unit":"px"},"text":{"primaryColor":"#2C3E50","fontSizeRegular":{"value":14,"unit":"px"},"fontSizeSmall":{"value":12,"unit":"px"},"secondaryColor":"#676986"},"spaceBelow":{"value":20,"unit":"px"}},"defaultSort":"rating desc","autoPlay":false,"truncation":{"bodyMaxLines":4,"truncateAll":false,"enabled":true}},"mediaCarousel":{"minimumImages":1,"linkText":"Read More","stars":{"backgroundColor":"#E5E5E5","foregroundColor":"#FFCF2A","height":{"value":12,"unit":"px"}},"autoPlay":false,"slideSize":"medium","arrowPosition":"outside"},"mediaGrid":{"showMoreArrow":{"arrowColor":"#676986","enabled":true,"backgroundColor":"#f4f4f6"},"infiniteScroll":false,"gridStyleDesktop":{"layout":"default-desktop"},"gridStyleMobile":{"layout":"default-mobile"},"linkText":"Read More","stars":{"backgroundColor":"#E5E5E5","foregroundColor":"#FFCF2A","height":{"value":12,"unit":"px"}},"gapSize":{"value":10,"unit":"px"}},"questions":{"initialPageSize":6,"loadMorePageSize":6},"reviewsBadge":{"layout":"large","colorScheme":"dark"},"reviewsTab":{"enabled":false},"reviewsWidget":{"tabs":{"reviews":true,"questions":false},"header":{"columnDistribution":"space-between","verticalAlignment":"top","blocks":[{"columnWidth":"full","modules":[{"name":"rating-average","layout":"two-line"}],"textAlignment":"left"},{"columnWidth":"two-thirds","modules":[{"name":"reviews-keywords","heading":"Customers Talked About","maxKeywords":5}],"textAlignment":"left"},{"columnWidth":"full","modules":[{"name":"reviews-summary","heading":"Reviews Summary","maxTextLines":5}],"textAlignment":"left"},{"columnWidth":"full","modules":[{"name":"media-carousel","imageGap":{"value":4,"unit":"px"},"imageHeight":{"value":120,"unit":"px"}}],"textAlignment":"center"}]},"style":{"showDates":true,"border":{"color":"#E5E5E5","width":{"value":1,"unit":"px"}},"bodyFont":{"fontSize":{"value":16,"unit":"px"},"fontType":"use-global","fontWeight":400,"hasCustomFontSettings":true},"headingFont":{"fontSize":{"value":18,"unit":"px"},"fontType":"use-global","fontWeight":600,"hasCustomFontSettings":true},"filters":{"backgroundColorActive":"#000000","backgroundColor":"#FFFFFF","borderColor":"#000000","borderRadius":{"value":100,"unit":"px"},"borderColorActive":"#000000","textColorActive":"#FFFFFF","textColor":"#000000","searchHighlightColor":"#B2F9E9"},"avatar":{"backgroundColor":"#E5E5EB","placeholderTextColor":"#000000","size":{"value":48,"unit":"px"},"enabled":true},"stars":{"height":{"value":18,"unit":"px"},"globalOverrideSettings":{"backgroundColor":"#E5E5E5","foregroundColor":"#000000","interspace":2,"showBorder":false}},"shadingColor":"#FFFFFF","productImageSize":{"value":48,"unit":"px"},"button":{"backgroundColorActive":"#000000","borderColorHover":"#000000","backgroundColor":"#000000","borderColor":"#000000","backgroundColorHover":"#000000","textColorHover":"#FFFFFF","borderRadius":{"value":1,"unit":"px"},"borderWidth":{"value":1,"unit":"px"},"borderColorActive":"#000000","textColorActive":"#FFFFFF","textColor":"#FFFFFF","font":{"fontSize":{"value":16,"unit":"px"},"fontType":"custom","fontFamily":"Gotham","fontWeight":700,"hasCu
2298stomFontSettings":true}},"highlightColor":"#000000","spaceAbove":{"value":20,"unit":"px"},"text":{"primaryColor":"#000000","fontSizeRegular":{"value":14,"unit":"px"},"fontSizeLarge":{"value":22,"unit":"px"},"fontSizeSmall":{"value":14,"unit":"px"},"secondaryColor":"#000000"},"spaceBelow":{"value":20,"unit":"px"},"attributeBar":{"style":"default","backgroundColor":"#D3D4DD","shadingColor":"#9A9DB1","markerColor":"#000000"}},"showWhenEmpty":true,"reviews":{"list":{"layout":{"collapseReviewerDetails":false,"columnAmount":4,"name":"default","showAttributeBars":false,"borderStyle":"minimal","showProductVariantName":false,"showProductDetails":"never"},"loyalty":{"maxInitialAchievements":3},"initialPageSize":5,"replyTruncation":{"bodyMaxLines":4,"enabled":true},"media":{"layout":"thumbnail","size":{"value":100,"unit":"px"},"imageGap":{"value":4,"unit":"px"}},"truncation":{"bodyMaxLines":4,"truncateAll":false,"enabled":true},"loadMorePageSize":5},"controls":{"filterMode":"closed","freeTextSearchEnabled":false,"keywordsFilterEnabled":false,"writeReviewButtonEnabled":true,"defaultSort":"has_media desc"}}},"starRatings":{"showWhenEmpty":false,"style":{"globalOverrideSettings":{"backgroundColor":"#C1C0C1","foregroundColor":"#000000","interspace":2,"showBorder":false},"spaceAbove":{"value":0,"unit":"px"},"text":{"content":"review-count","style":"number-and-text","brackets":true},"singleStar":false,"height":{"value":18,"unit":"px"},"spaceBelow":{"value":0,"unit":"px"}},"clickBehavior":"scroll-to-widget"}},"features":{"attributeFiltersEnabled":true,"recorderPlusEnabled":true,"recorderQandaPlusEnabled":true,"reviewsKeywordsEnabled":true,"reviewsSummariesEnabled":true}}</script>
2298 2299 <style id="oke-css-vars">:root{--oke-widget-spaceAbove:20px;--oke-widget-spaceBelow:20px;--oke-starRating-spaceAbove:0;--oke-starRating-spaceBelow:0;--oke-button-backgroundColor:#000;--oke-button-backgroundColorHover:#000;--oke-button-backgroundColorActive:#000;--oke-button-textColor:#fff;--oke-button-textColorHover:#fff;--oke-button-textColorActive:#fff;--oke-button-borderColor:#000;--oke-button-borderColorHover:#000;--oke-button-borderColorActive:#000;--oke-button-borderRadius:1px;--oke-button-borderWidth:1px;--oke-button-fontWeight:700;--oke-button-fontSize:16px;--oke-button-fontFamily:Gotham,sans-serif;--oke-border-color:#e5e5e5;--oke-border-width:1px;--oke-text-primaryColor:#000;--oke-text-secondaryColor:#000;--oke-text-small:14px;--oke-text-regular:14px;--oke-text-large:22px;--oke-text-fontFamily:inherit;--oke-avatar-size:48px;--oke-avatar-backgroundColor:#e5e5eb;--oke-avatar-placeholderTextColor:#000;--oke-highlightColor:#000;--oke-shadingColor:#fff;--oke-productImageSize:48px;--oke-attributeBar-shadingColor:#9a9db1;--oke-attributeBar-borderColor:undefined;--oke-attributeBar-backgroundColor:#d3d4dd;--oke-attributeBar-markerColor:#000;--oke-filter-backgroundColor:#fff;--oke-filter-backgroundColorActive:#000;--oke-filter-borderColor:#000;--oke-filter-borderColorActive:#000;--oke-filter-textColor:#000;--oke-filter-textColorActive:#fff;--oke-filter-borderRadius:100px;--oke-filter-searchHighlightColor:#b2f9e9;--oke-mediaGrid-chevronColor:#676986;--oke-stars-foregroundColor:#000;--oke-stars-backgroundColor:#e5e5e5;--oke-stars-borderWidth:0}.oke-reviewCarousel{--oke-stars-foregroundColor:#000;--oke-stars-backgroundColor:#e5e5e5;--oke-stars-borderWidth:0}.oke-w,.oke-modal{--oke-stars-foregroundColor:#000;--oke-stars-backgroundColor:#e5e5e5;--oke-stars-borderWidth:0}.oke-sr{--oke-stars-foregroundColor:#000;--oke-stars-backgroundColor:#c1c0c1;--oke-stars-borderWidth:0}.oke-w,.oke-modal{--oke-title-fontWeight:600;--oke-title-fontSize:18px;--oke-title-fontFamily:inherit;--oke-bodyText-fontWeight:400;--oke-bodyText-fontSize:16px;--oke-bodyText-fontFamily:inherit}</style> 2300 <style id="oke-reviews-custom-css">.okeReviews.oke-sr{display:block}.title-wrapper .oke-sr-count--brackets:before,.title-wrapper .oke-sr-count--brackets:after,.upsell-container .oke-sr-label-text{display:none}[data-oke-widget] div.okeReviews[data-oke-container].oke-w{max-width:unset}div.oke-modal .okeReviews[data-oke-container].oke-w,div.okeReviews[data-oke-container] .oke-modal,div.okeReviews[data-oke-container] .oke-modal p,div.okeReviews[data-oke-container] .oke-modal .oke-helpful,div.okeReviews[data-oke-container] .oke-modal .oke-helpful-vote-button,div.okeReviews[data-oke-container] .oke-modal .oke-reviewContent-date{color:var(--oke-text-primaryColor)}div.okeReviews[data-oke-container] .oke-reviewContent-title,div.okeReviews .oke-reviewContent-title{font-weight:700;font-size:1.25em}.okeReviews[data-oke-container].oke-w .oke-button,div.okeReviews .oke-button{letter-spacing:.2em;font-family:Josefin Sans,sans-serif;font-weight:700;text-transform:uppercase;font-size:14px;line-height:1.4}div.okeReviews[data-oke-container] .oke-w-writeReview:before,div.okeReviews .oke-w-writeReview:before{display:none}.okeReviews[data-oke-container].oke-w .oke-button:not(.oke-is-loading):not(.oke-is-active):hover,div.okeReviews .oke-button:not(.oke-is-loading):not(.oke-is-active):hover{box-shadow:initial}.okeReviews.oke-w .oke-is-small .oke-w-reviews-writeReview{width:100%;padding-top:10px}.okeReviews.oke-w .oke-is-small .oke-button,.okeReviews.oke-w .oke-is-small .oke-qw-header-askQuestion{width:100%}div.okeReviews[data-oke-container] .oke-sortSelect-label{margin-right:0}div.okeReviews[data-oke-container] .oke-w-reviews-controls{flex-wrap:wrap}</style> 2301 <template id="oke-reviews-body-template"><svg id="oke-star-symbols" style="display:none!important" data-oke-id="oke-star-symbols"><symbol id="oke-star-empty" style="overflow:visible;"><path id="star-thin--empty" fill="var(--oke-stars-backgroundColor)" stroke="var(--oke-stars-borderColor)" stroke-width="var(--oke-stars-borderWidth)" d="M9.944 6.4L8 0L6.056 6.4H0L4.944 9.928L3.064 16L8 12.248L12.944 16L11.064 9.928L16 6.4H9.944Z"/></symbol><symbol id="oke-star-filled" style="overflow:visible;"><path id="star-thin--filled" fill="var(--oke-stars-foregroundColor)" stroke="var(--oke-stars-borderColor)" stroke-width="var(--oke-stars-borderWidth)" d="M9.944 6.4L8 0L6.056 6.4H0L4.944 9.928L3.064 16L8 12.248L12.944 16L11.064 9.928L16 6.4H9.944Z"/></symbol></svg></template>
2301<script>document.addEventListener('readystatechange',() =>{Array.from(document.getElementById('oke-reviews-body-template')?.content.children)?.forEach(function(child){if(!Array.from(document.body.querySelectorAll('[data-oke-id='.concat(child.getAttribute('data-oke-id'),']'))).length){document.body.prepend(child)}})},{once:true});</script>
2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315<!-- END app snippet --> 2316 2317 <!-- BEGIN app snippet: okendo-reviews-json-ld --> 2318<!-- END app snippet --> 2319 2320<!-- BEGIN app snippet: widget-plus-initialisation-script --> 2321 2322 2323 2324 2325
2325<script async id="okendo-reviews-script" src="https://cdn-static.okendo.io/reviews-widget-plus/js/okendo-reviews.js"></script>
2325 2326 2327<!-- END app snippet --> 2328 2329 2330<!-- END app block --><!-- BEGIN app block: shopify://apps/tolstoy-ads-image-video/blocks/widget-block/06fa8282-42ff-403e-b67c-1936776aed11 --> 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351
2352<script 2353 type="module" 2354 async 2355 src="https://widget.gotolstoy.com/we/widget.js" 2356 data-shop=aramara-beauty.myshopify.com 2357 data-app-key=1b7d31c3-efbb-40b3-91ae-c193b43267d7 2358 data-should-use-cache=true 2359 data-cache-version=19f43aca548 2360 data-product-gallery-projects="[]" 2361 data-collection-gallery-projects="[]" 2362 data-product-id="" 2363 data-template-name="page.serum-guide" 2364 data-ot-ignore 2365 data-cookieconsent="ignore" 2366> 2367</script>
vendor: 1 bytes, line 2367
2367
2368<script 2369 type="module" 2370 async 2371 src="https://play.gotolstoy.com/widget-v2/widget.js" 2372 id="tolstoy-widget-script" 2373 data-shop=aramara-beauty.myshopify.com 2374 data-app-key=1b7d31c3-efbb-40b3-91ae-c193b43267d7 2375 data-should-use-cache=true 2376 data-cache-version=19f43aca548 2377 data-product-gallery-projects="[]" 2378 data-collection-gallery-projects="[]" 2379 data-product-id="" 2380 data-collection-id="" 2381 data-shop-assistant-enabled="false" 2382 data-search-bar-widget-enabled="false" 2383 data-template-name="page.serum-guide" 2384 data-customer-id="" 2385 data-ot-ignore 2386 data-cookieconsent="ignore" 2387></script>
vendor: 1 bytes, line 2387
2387
2388<script 2389 type="module" 2390 async 2391 src="https://play.gotolstoy.com/widget-v2/widget.brand-mcp.js" 2392 data-app-key=1b7d31c3-efbb-40b3-91ae-c193b43267d7 2393 data-ot-ignore 2394 data-cookieconsent="ignore" 2395></script>
vendor: 1 bytes, line 2395
2395
2396<script> 2397 window.tolstoyCurrencySymbol = "$"; 2398 window.tolstoyMoneyFormat = "$ {{amount}}"; 2399</script>
vendor: 1 bytes, line 2399
2399
2400<script> 2401 (function(){ 2402 function hideOrphanedTiles(){ 2403 var els = document.querySelectorAll('.tolstoy-collection-page-tile,tolstoy-collection-tile'); 2404 for(var i=0;i<els.length;i++){ 2405 if(els[i].children.length>0) continue; 2406 els[i].style.setProperty('display','none','important'); 2407 var w=els[i].closest('[class*="tolstoy-grid"]')||els[i].closest('.tolstoy-collection-page-tile-wrapper'); 2408 if(w) w.style.setProperty('display','none','important'); 2409 } 2410 } 2411 if(document.readyState==='loading'){ 2412 document.addEventListener('DOMContentLoaded',hideOrphanedTiles); 2413 }else{ 2414 hideOrphanedTiles(); 2415 } 2416 })(); 2417</script>
vendor: 1 bytes, line 2417
2417
2418<script> 2419 window.tolstoyDebug = { 2420 enable: () => { 2421 fetch('/cart/update.js', { 2422 method: 'POST', 2423 headers: { 'Content-Type': 'application/json' }, 2424 body: JSON.stringify({ attributes: { TolstoyDebugEnabled: 'true' } }) 2425 }) 2426 .then(response => response.json()) 2427 .then(() => window.location.reload()); 2428 }, 2429 disable: () => { 2430 fetch('/cart/update.js', { 2431 method: 'POST', 2432 headers: { 'Content-Type': 'application/json' }, 2433 body: JSON.stringify({ attributes: { TolstoyDebugEnabled: null } }) 2434 }) 2435 .then(response => response.json()) 2436 .then(() => window.location.reload()) 2437 }, 2438 status: async () => { 2439 const response = await fetch('/cart.js'); 2440 const json = await response.json(); 2441 console.log(json.attributes); 2442 } 2443 } 2444</script>
2444 2445 2446<!-- END app block --><!-- BEGIN app block: shopify://apps/loyalty-rewards-and-referrals/blocks/embed-sdk/6f172e67-4106-4ac0-89c5-b32a069b3101 --> 2447 2448<style 2449 type='text/css' 2450 data-lion-app-styles='main' 2451 data-lion-app-styles-settings='{"disableBundledCSS":false,"disableBundledFonts":false,"useClassIsolator":false}' 2452></style> 2453 2454<!-- loyaltylion.snippet.version=9283085fd3+12800 --> 2455 2456
2457<script> 2458 2459 !function(t,n){function o(n){var o=t.getElementsByTagName("script")[0],i=t.createElement("script");i.src=n,i.crossOrigin="",o.parentNode.insertBefore(i,o)}if(!n.isLoyaltyLion){window.loyaltylion=n,void 0===window.lion&&(window.lion=n),n.version=2,n.isLoyaltyLion=!0;var i=new Date,e=i.getFullYear().toString()+i.getMonth().toString()+i.getDate().toString();o("https://sdk.loyaltylion.net/static/2/loader.js?t="+e);var r=!1;n.init=function(t){if(r)throw new Error("Cannot call lion.init more than once");r=!0;var a=n._token=t.token;if(!a)throw new Error("Token must be supplied to lion.init");for(var l=[],s="_push configure bootstrap shutdown on removeListener authenticateCustomer".split(" "),c=0;c<s.length;c+=1)!function(t,n){t[n]=function(){l.push([n,Array.prototype.slice.call(arguments,0)])}}(n,s[c]);o("https://sdk.loyaltylion.net/sdk/start/"+a+".js?t="+e+i.getHours().toString()),n._initData=t,n._buffer=l}}}(document,window.loyaltylion||[]); 2460 2461 2462 2463 loyaltylion.init( 2464 { token: "8f2c403c54911354be2539df815774ad" } 2465 ); 2466 2467 2468 2469 loyaltylion.configure({ 2470 disableBundledCSS: false, 2471 disableBundledFonts: false, 2472 useClassIsolator: false, 2473 }) 2474 2475 2476</script>
2476 2477 2478 2479 2480<!-- END app block --><!-- BEGIN app block: shopify://apps/scarcity-ai-visitors-counter/blocks/app-embed-block/4a6bd5a7-c11b-48d0-ad06-ec540fdd25e9 --> 2481<!-- END app block --><!-- BEGIN app block: shopify://apps/loyalty-rewards-and-referrals/blocks/embed-main/6f172e67-4106-4ac0-89c5-b32a069b3101 --> 2482 2483<style 2484 type='text/css' 2485 data-lion-app-styles='main' 2486 data-lion-app-styles-settings='{"primary_color":"#4d384b","secondary_color":"#126bbf","icon_color":"#126bbf","button_size":"medium","button_border_radius":4,"button_primary_background_color":"#4d384b","button_primary_text_color":"#ffffff","button_neutral_background_color":"#757575","button_neutral_text_color":"#ffffff"}' 2487></style> 2488 2489 2490<!-- END app block --><!-- BEGIN app block: shopify://apps/triplewhale/blocks/triple_pixel_snippet/483d496b-3f1a-4609-aea7-8eee3b6b7a2a --><link rel='preconnect dns-prefetch' href='https://api.config-security.com/' crossorigin /> 2491<link rel='preconnect dns-prefetch' href='https://conf.config-security.com/' crossorigin />
2492<script> 2493/* >> TriplePixel :: start*/ 2494window.TriplePixelData={TripleName:"aramara-beauty.myshopify.com",ver:"2.16",plat:"SHOPIFY",isHeadless:false,src:'SHOPIFY_EXT',product:{id:"",name:``,price:"",variant:"",av:{ }},search:"",collection:"",cart:"",template:"page",curr:"USD" || "USD", market:"1913585779"},function(W,H,A,L,E,_,B,N){function O(U,T,P,H,R){void 0===R&&(R=!1),H=new XMLHttpRequest,P?(H.open("POST",U,!0),H.setRequestHeader("Content-Type","text/plain")):H.open("GET",U,!0),H.send(JSON.stringify(P||{})),H.onreadystatechange=function(){4===H.readyState&&200===H.status?(R=H.responseText,U.includes("/first")?eval(R):P||(N[B]=R)):(299<H.status||H.status<200)&&T&&!R&&(R=!0,O(U,T-1,P))}}if(N=window,!N[H+"sn"]){N[H+"sn"]=1,L=function(){return Date.now().toString(36)+"_"+Math.random().toString(36)};try{A.setItem(H,1+(0|A.getItem(H)||0)),(E=JSON.parse(A.getItem(H+"U")||"[]")).push({u:location.href,r:document.referrer,t:Date.now(),id:L()}),A.setItem(H+"U",JSON.stringify(E))}catch(e){}var i,m,p;A.getItem('"!nC`')||(_=A,A=N,A[H]||(E=A[H]=function(t,e,i){return void 0===i&&(i=[]),"State"==t?E.s:(W=L(),(E._q=E._q||[]).push([W,t,e].concat(i)),W)},E.s="Installed",E._q=[],E.ch=W,B="configSecurityConfModel",N[B]=1,O("https://conf.config-security.com/model",5),i=L(),m=A[atob("c2NyZWVu")],_.setItem("di_pmt_wt",i),p={id:i,action:"profile",avatar:_.getItem("auth-security_rand_salt_"),time:m[atob("d2lkdGg=")]+":"+m[atob("aGVpZ2h0")],host:A.TriplePixelData.TripleName,plat:A.TriplePixelData.plat,url:window.location.href.slice(0,500),ref:document.referrer,ver:A.TriplePixelData.ver},O("https://api.config-security.com/event",5,p),O("https://api.config-security.com/first?host=".concat(p.host,"&plat=").concat(p.plat),5)))}}("","TriplePixel",localStorage); 2495/* << TriplePixel :: end*/ 2496</script>
2496 2497 2498 2499 2500<!-- END app block -->
2500<script src="https://cdn.shopify.com/extensions/01a0b7a6-6b2a-7126-be17-93581506982e/applovin-shop-integration-97/assets/app-embed.js" type="text/javascript" defer="defer"></script>
2500 2501<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
2502<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: 5438301,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "page"};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 2502
2502
2503<script> 2504 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 2505</script>
vendor: 1 bytes, line 2505
2505
2506<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}
2506).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: 5438301,storefrontBaseUrl: "https://www.glowrecipe.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://www.glowrecipe.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2193588339","configuration":"{\"pixelCode\":\"BVU8N3L3P14NBSHFQ9EG\"}","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"]}
2506,"dataSharingState":"unrestricted"},{"id":"2065989747","configuration":"{\"swymApiEndpoint\":\"https:\/\/swymstore-v3premium-01.swymrelay.com\",\"swymTier\":\"v3premium-01\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"5b6f6917e306bc7f24523662663331c0","type":"APP","apiClientId":1350849,"privacyPurposes":["ANALYTICS","MARKETING","PREFERENCES"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"1973911667","configuration":"{\"accountID\":\"2638\",\"integrationId\":\"2638\",\"brandId\":\"1284\",\"environment\":\"prod\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"f28c8e4372c74ce89d6ccedbdfdb52da","type":"APP","apiClientId":22258319361,"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"},{"id":"1899593843","configuration":"{\"shopId\":\"aramara-beauty.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7093dff47f098f6de2afb75b62011ebe","type":"APP","apiClientId":2753413,"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":"1497759859","configuration":"{\"debug\":\"false\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"a9a83cf44fb282052ff936f7ab101058","type":"APP","apiClientId":4539653,"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":"1342767219","configuration":"{\"eventKey\":\"7b997fe0-1591-4a9d-adba-111be07e4c2c\",\"name\":\"aramara-beauty - Axon Pixel\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"59063c86dca90ebaa562063a0c13be50","type":"APP","apiClientId":256560922625,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1232666739","configuration":"{\"accountID\":\"JvQ5im\",\"webPixelConfig\":\"eyJlbmFibGVBZGRlZFRvQ2FydEV2ZW50cyI6IHRydWV9\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c63c5b72c8d77be5f2d27d14c081da38","type":"APP","apiClientId":123074,"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":"unrestricted","enabledFlags":["9a3ed68a"]},{"id":"1126039667","configuration":"{\"advertiserId\":\"64616\",\"shopDomain\":\"aramara-beauty.myshopify.com\",\"appVersion\":\"shopifyApp_5.2.3\",\"originalNetwork\":\"sas\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c287d09bac7e7a912a76f3941fab1c2f","type":"APP","apiClientId":2887701,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"783089779","configuration":"{\"shopId\":\"25819\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"2eedfe5ca9c7d4954f200bfa1ffb380d","type":"APP","apiClientId":2328352,"privacyPurposes":["MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
2506,"dataSharingState":"unrestricted","enabledFlags":["9a3ed68a"]},{"id":"747667571","configuration":"{\"accountId\":\"10041832\",\"projectId\":\"10042217\",\"currency\":\"USD\",\"environment\":\"null\",\"customDomain\":\"null\",\"cartViewedGoalId\":\"null\",\"checkoutAddressInfoSubmittedGoalId\":\"null\",\"checkoutCompletedGoalId\":\"100495242\",\"checkoutContactInfoSubmittedGoalId\":\"null\",\"checkoutShippingInfoSubmittedGoalId\":\"null\",\"checkoutStartedGoalId\":\"null\",\"collectionViewedGoalId\":\"null\",\"paymentInfoSubmittedGoalId\":\"null\",\"productAddedToCartGoalId\":\"100495241\",\"productRemovedFromCartGoalId\":\"null\",\"pageViewedGoalId\":\"null\",\"productViewedGoalId\":\"null\",\"searchSubmittedGoalId\":\"null\",\"subscriptionGoalId\":\"null\",\"nonSubscriptionGoalId\":\"null\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"5d7a5c9a39d5284d6dfc099806167db1","type":"APP","apiClientId":125487710209,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"174686323","configuration":"{\"pixel_id\":\"2207408626138134\",\"pixel_type\":\"facebook_pixel\",\"metaapp_system_user_token\":\"-\"}","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":"unrestricted","enabledFlags":["9a3ed68a"]},{"id":"128942195","configuration":"{\"accountID\":\"4566\",\"checkoutExperienceEnabled\":\"true\",\"customDomainName\":\"default\",\"espPerformsOptInCheck\":\"1\",\"fieldMappingCountries\":\"[\\\"US\\\",\\\"CA\\\"]\",\"markets\":\"{}\",\"onsiteExperienceEnabled\":\"false\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"988af92787413cb5760ec003000e5d08","type":"APP","apiClientId":54985097217,"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":"unrestricted"},{"id":"121831539","configuration":"{\"tagID\":\"2613179352395\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7ae565e198624b39e0856d352b9a6b4c","type":"APP","apiClientId":3009811,"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":"unrestricted"},{"id":"21758067","configuration":"{\"measurementIds\":\"G-NF5EKRHSSV,isServerside\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7aaae93c56736e9df275e05ad7cdcadf","type":"APP","apiClientId":3542712321,"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":"unrestricted"},{"id":"36339827","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"5","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Google Tag Manager"},{"id":"119865459","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"28","type":"CUSTOM","privacyPurposes":[],"name":"Order Status \/ Post-Purchase"},{"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":"Glow Recipe","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"aramara-beauty.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/www.glowrecipe.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[{"id":"8053461352563","handle":"prickly-pear-peptide-mucin","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"43757686587507","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"4623447031923","handle":"watermelon-glow-niacinamide-dew-drops","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"32132682743923","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"6796465602675","handle":"strawberry-smooth-bha-aha-salicylic-serum","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"39953007870067","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"4568540315763","handle":"plum-plump-hyaluronic-serum","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"31975760035955","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}
2506,{"id":"7184444424307","handle":"pomegranate-peptide-firming-serum","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"40905910124659","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"6618599686259","handle":"guava-vitamin-c-dark-spot-serum","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"39404211896435","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"6541439533171","handle":"avocado-ceramide-recovery-serum","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"39279411593331","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7713369817203","handle":"blackberry-retinol-blemish-serum","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42192176906355","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7096537383027","handle":"strawberry-bha-pore-smooth-blur-drops","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"40702766579827","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8355003760755","handle":"pdrn-tinted-soft-matte-lip-blur-balm","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45333626060915","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8296572125299","handle":"the-roll-bag","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45115865989235","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8286511628403","handle":"glow-to-go-travel-kit","isCollective":false,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"45143834525811","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}],"purchasingCompany":null},},"https://www.glowrecipe.com/cdn","c8540278we853e1abpb62b2c4amde256306",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"148112244851","themePublished":"true","eventMetadataId":"a8e07701-74e5-4fe3-82b6-c5c5fb3156a8","pageType":"page","resourceId":"80309420147","shopId":"5438301","storefrontBaseUrl":"https:\/\/www.glowrecipe.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"c8540278we853e1abpb62b2c4amde256306","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
2506<script> 2507 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 2508 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 2509 window.ShopifyAnalytics.meta.currency = 'USD'; 2510 var meta = {"page":{"pageType":"page","resourceType":"page","resourceId":80309420147,"requestId":"1d508255-9b60-4c62-b768-243b171d0108-1790273057"}}; 2511 for (var attr in meta) { 2512 window.ShopifyAnalytics.meta[attr] = meta[attr]; 2513 } 2514</script>
vendor: 1 bytes, line 2514
2514
2515<script class="analytics"> 2516 (function () { 2517 var customDocumentWrite = function(content) { 2518 var jquery = null; 2519 2520 if (window.jQuery) { 2521 jquery = window.jQuery; 2522 } else if (window.Checkout && window.Checkout.$) { 2523 jquery = window.Checkout.$; 2524 } 2525 2526 if (jquery) { 2527 jquery('body').append(content); 2528 } 2529 }; 2530 2531 var hasLoggedConversion = function(token) { 2532 if (token) { 2533 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 2534 } 2535 return false; 2536 } 2537 2538 var setCookieIfConversion = function(token) { 2539 if (token) { 2540 var twoMonthsFromNow = new Date(Date.now()); 2541 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 2542 2543 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 2544 } 2545 } 2546 2547 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 2548 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 2549 if (trekkie.integrations) { 2550 return; 2551 } 2552 trekkie.methods = [ 2553 'identify', 2554 'page', 2555 'ready', 2556 'track', 2557 'trackForm', 2558 'trackLink' 2559 ]; 2560 trekkie.factory = function(method) { 2561 return function() { 2562 var args = Array.prototype.slice.call(arguments); 2563 args.unshift(method); 2564 trekkie.push(args); 2565 if (method == 'track' || method == 'page') { 2566 try { 2567 if (window.__TREKKIE_SHIM_QUEUE == null) { 2568 window.__TREKKIE_SHIM_QUEUE = []; 2569 } 2570 window.__TREKKIE_SHIM_QUEUE.push({ 2571 from: 'trekkie-stub', 2572 method: method, 2573 args: args.slice(1) 2574 }); 2575 } catch (e) { 2576 // no-op 2577 } 2578 } 2579 return trekkie; 2580 }; 2581 }; 2582 for (var i = 0; i < trekkie.methods.length; i++) { 2583 var key = trekkie.methods[i]; 2584 trekkie[key] = trekkie.factory(key); 2585 } 2586 trekkie.load = function(config) { 2587 trekkie.config = config || {}; 2588 trekkie.config.initialDocumentCookie = document.cookie; 2589 var first = document.getElementsByTagName('script')[0]; 2590var script = document.createElement('script'); 2591script.type = 'text/javascript'; 2592script.onerror = function(e) { 2593 var scriptFallback = document.createElement('script'); 2594 scriptFallback.type = 'text/javascript'; 2595 scriptFallback.onerror = function(error) { 2596 var Monorail = { 2597 produce: function produce(monorailDomain, schemaId, payload) { 2598 var currentMs = new Date().getTime(); 2599 var event = { 2600 schema_id: schemaId, 2601 payload: payload, 2602 metadata: { 2603 event_created_at_ms: currentMs, 2604 event_sent_at_ms: currentMs 2605 } 2606 }; 2607 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 2608 }, 2609 sendRequest: function sendRequest(endpointUrl, payload) { 2610 // Try the sendBeacon API 2611 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 2612 var blobData = new window.Blob([payload], { 2613 type: 'text/plain' 2614 }); 2615 2616 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 2617 return true; 2618 } // sendBeacon was not successful 2619 2620 } // XHR beacon 2621 2622 var xhr = new XMLHttpRequest(); 2623 2624 try { 2625 xhr.open('POST', endpointUrl); 2626 xhr.setRequestHeader('Content-Type', 'text/plain'); 2627 xhr.send(payload); 2628 } catch (e) { 2629 console.log(e); 2630 } 2631 2632 return false; 2633 }, 2634 isIos12: function isIos12() { 2635 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 2636 } 2637 }; 2638 Monorail.produce('monorail-edge.shopifysvc.com', 2639 'trekkie_storefront_load_errors/1.1', 2640 {shop_id: 5438301, 2641 theme_id: 148112244851, 2642 app_name: "storefront", 2643 context_url: window.location.href, 2644 source_url: "//www.glowrecipe.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js"}); 2645 2646 }; 2647 scriptFallback.async = true; 2648 scriptFallback.src = '//www.glowrecipe.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js'; 2649 first.parentNode.insertBefore(scriptFallback, first); 2650}; 2651script.async = true; 2652script.src = '//www.glowrecipe.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js'; 2653first.parentNode.insertBefore(script, first); 2654 2655 }; 2656 trekkie.load( 2657 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":5438301,"isMerchantRequest":null,"themeId":148112244851,"themeCityHash":"6616272151517298129","contentLanguage":"en","currency":"USD","eventMetadataId":"a8e07701-74e5-4fe3-82b6-c5c5fb3156a8"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 2658 ); 2659 2660 var loaded = false;
2661 trekkie.ready(function() { 2662 if (loaded) return; 2663 loaded = true; 2664 2665 window.ShopifyAnalytics.lib = window.trekkie; 2666 2667 var originalDocumentWrite = document.write; 2668 document.write = customDocumentWrite; 2669 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 2670 document.write = originalDocumentWrite; 2671 2672 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 2673 var token = match? match[1]: undefined; 2674 if (!hasLoggedConversion(token)) { 2675 setCookieIfConversion(token); 2676 2677 } 2678 }); 2679 2680 window.ShopifyAnalytics.lib.page(null,{"pageType":"page","resourceType":"page","resourceId":80309420147,"requestId":"1d508255-9b60-4c62-b768-243b171d0108-1790273057","shopifyEmitted":true}); 2681 2682 var eventsListenerScript = document.createElement('script'); 2683 eventsListenerScript.async = true; 2684 eventsListenerScript.src = "//www.glowrecipe.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 2685 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 2686})();</script>
2686 2687
2687<script> 2688 if (!window.ga || (window.ga && typeof window.ga !== 'function')) { 2689 window.ga = function ga() { 2690 (window.ga.q = window.ga.q || []).push(arguments); 2691 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 2692 window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"}); 2693 } 2694 console.error("Shopify's Google Analytics stub called with:", Array.from(arguments), "\nSee https://help.shopify.com/manual/promoting-marketing/pixels/pixel-migration#google for more information."); 2695 }; 2696 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 2697 window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"}); 2698 } 2699 } 2700</script>
vendor: 1 bytes, line 2700
2700
2701<script 2702 defer 2703 src="https://www.glowrecipe.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 2704 data-application="storefront-renderer" 2705 data-shop-id="5438301" 2706 data-render-region="gcp-us-central1" 2707 data-page-type="page" 2708 data-theme-instance-id="148112244851" 2709 data-theme-name="Simplistic" 2710 data-theme-version="1.0.0" 2711 data-monorail-region="shop_domain" 2712 data-resource-timing-sampling-rate="10" 2713 data-shs="true" 2714 data-shs-beacon="true" 2715 data-shs-export-with-fetch="true" 2716 data-shs-logs-sample-rate="1" 2717 data-shs-beacon-endpoint="https://www.glowrecipe.com/api/collect" 2718></script>
2718 2719<meta name="shopify-y" content="62c83917-f8c7-48d8-b471-2b64d1214c08" data-expiration="1821830657000"><meta name="shopify-s" content="2e144bb8-c646-4dd1-875b-ae6c4af444d2" data-expiration="1790274857000"><meta name="new-cookie-storage-activated" content="t"> 2720</head> 2721 2722 2723 2724
2724<script> 2725 (function(d) { 2726 var e = d.createElement('script'); 2727 e.src = d.location.protocol + '//tag.wknd.ai/4566/i.js'; 2728 e.async = true; 2729 d.getElementsByTagName("head")[0].appendChild(e); 2730 }(document)); 2731 </script>
2731 2732 2733 2734 2735 2736 2737 <body>
2737<script> 2738 (function () { 2739 function fixSwymWishlistProductIds(root) { 2740 (root || document) 2741 .querySelectorAll(".swym-advanced-wishlist-collections-container[data-product-id]") 2742 .forEach(function (container) { 2743 var current = container.getAttribute("data-product-id"); 2744 var fixed = current.replace(/^\/collections\/[^/]+\/products\//, "/products/"); 2745 if (fixed !== current) { 2746 container.setAttribute("data-product-id", fixed); 2747 } 2748 }); 2749 } 2750 2751 function runFix() { 2752 fixSwymWishlistProductIds(); 2753 if (window._swat && window._swat.advancedCollectionsApi) { 2754 window._swat.advancedCollectionsApi.reinitialize(); 2755 } 2756 } 2757 2758 if (!window.SwymCallbacks) { 2759 window.SwymCallbacks = []; 2760 } 2761 window.SwymCallbacks.push(runFix); 2762 runFix(); 2763 2764 var debounceId = null; 2765 new MutationObserver(function () { 2766 clearTimeout(debounceId); 2767 debounceId = setTimeout(runFix, 300); 2768 }).observe(document.body, { childList: true, subtree: true }); 2769 })(); 2770</script>
2770<noscript> 2771 <iframe title="Google Tag Manager" src="https://www.googletagmanager.com/ns.html?id=GTM-KLMDWXZ" 2772 height="0" width="0" style="display:none;visibility:hidden"></iframe> 2773 </noscript> 2774 <a class="skip-to-content-link btn visually-hidden" href="#main-content"> 2775 Skip to Main Content 2776 </a> 2777 2778 2779 <header id="header" class="header-outer" role="banner"><div id="shopify-section-announcement_bar" class="shopify-section"><style> 2780 #shopify-section-announcement_bar { 2781 position: relative; 2782 z-index: 101; 2783 --speed: 120s; 2784 } 2785 .announcement-bar-wrapper { 2786 background-color: #fcf5fa; 2787 overflow: hidden; 2788 } 2789 .announcement-bar { 2790 text-align: center; 2791 max-width: 100%; 2792 color: #272727; 2793 padding-top: .35em; 2794 padding-bottom: .35em; 2795 line-height: 1.2; 2796 } 2797 .announcement-content { 2798 font-weight: bold; 2799 font-size: 0.7125em; 2800 padding: 0 12em; 2801 } 2802 .announcement-bar .link{text-decoration:none !important} 2803 .ab-arrow { padding: 0 .5em; } 2804 .announcement-bar .link:hover { 2805 color: #000; 2806 } 2807 2808 @media all and (max-width: 900px){ 2809 .announcement-content {padding: 0 1em;} 2810 } 2811</style> 2812
2813<sliding-announcement-bar data-slider-arrows="false" data-slider-duration="1500" data-slider-autoplay="false"> 2814<div class="announcement-bar-wrapper flex align-items-center justify-content-between"><div class="sliding-announcement-bar keen-slider flex-grow"><div class="announcement-bar keen-slider-slide medium-down--flex medium-down--justify-content-center medium-down--align-items-center" role="region" aria-label="Announcement" ><a href="/products/pdrn-tinted-soft-matte-lip-blur-balm" class="announcement-bar__link link link--text focus-inset animate-arrow"><span class="announcement-content"> 2815 NEW<span class="separator"> • </span>Vegan PDRN Blur Balm 2816 </span></a></div><div class="announcement-bar keen-slider-slide medium-down--flex medium-down--justify-content-center medium-down--align-items-center" role="region" aria-label="Announcement" ><a href="/collections/bestsellers" class="announcement-bar__link link link--text focus-inset animate-arrow"><span class="announcement-content"> 2817 FREE U.S. SHIPPING<span class="separator"> • </span>With Orders $40+ 2818 </span></a></div><div class="announcement-bar keen-slider-slide medium-down--flex medium-down--justify-content-center medium-down--align-items-center" role="region" aria-label="Announcement" ><a href="/products/the-roll-bag" class="announcement-bar__link link link--text focus-inset animate-arrow"><span class="announcement-content"> 2819 The Pink Roll Bag Is Back<span class="separator"> • </span>Shop Now 2820 </span></a></div><div class="announcement-bar keen-slider-slide medium-down--flex medium-down--justify-content-center medium-down--align-items-center" role="region" aria-label="Announcement" ><a href="/pages/glow-rewards" class="announcement-bar__link link link--text focus-inset animate-arrow"><span class="announcement-content"> 2821 CLUB GLOW REWARDS<span class="separator"> • </span>Get Rewarded For Glowing Skin 2822 </span></a></div></div></div> 2823</sliding-announcement-bar>
2823<script src="//www.glowrecipe.com/cdn/shop/t/1677/assets/component_sliding_announcement_bar.js?v=76320322613864460921788493424 2824" defer="defer"></script>
2824</div><div id="shopify-section-header" class="shopify-section header-inner"><style> 2825 .header-outer { 2826 --header-menu-font-size: 0.9375em; 2827 --header-menu-font-weight: 700; 2828 --header-menu-letter-spacing: inherit; 2829 --header-menu-text-transform: none; 2830 --header-submenu-color: white; 2831 --header-logo-max-width: 12em; 2832 } 2833 .mobile-menu-button { 2834 --mobile-menu-button-bg-color: ; 2835 --mobile-menu-button-icon-color: #000000; 2836 } 2837 .header-inner .item.highlight-menu-item{background-color: #f67599; border: 2px solid transparent;} 2838 .header-inner .item.highlight-menu-item a.nav-1{color: #fcf5fa;} 2839 .header-inner .item.highlight-menu-item a.nav-1 svg path{fill: #fcf5fa;} 2840 2841 @media (min-width: 901px) { 2842 .header-outer { 2843 2844 --header-color: #ffffff; 2845 --header-border: ; 2846 2847 --header-text-color: #000000; 2848 2849 }.header-outer { 2850 position: sticky; 2851 top: 0px; 2852 z-index: 100; 2853 }} 2854 2855 @media (max-width: 900px) { 2856 .header-outer { 2857 --header-color: rgba(0,0,0,0); 2858 --header-border: ; 2859 2860 --header-text-color: #000000; 2861 2862 --header-logo-max-width: 9em; 2863 }.header-outer.scroll { 2864 --header-color: #ffffff; 2865 --header-text-color: #000000; 2866 } 2867.header-outer { 2868 position: fixed; 2869 top: 0px; 2870 z-index: 100; 2871 } 2872 .header-outer.header-sticky { 2873 position: fixed; 2874 top: 0px; 2875 z-index: 100; 2876 } 2877 #main-content{ 2878 margin-top: calc(var(--header-offset) + 1px); 2879 } 2880 .header-inner{position: relative; width: 100%;background: white;} 2881 2882 .header-content.logo_center .logo {margin-left: -2em;} /* Compensate width of mobile-menu-button (hardcoded to 2em) */ 2883 } 2884 </style><header-scroll></header-scroll> 2885 2886 <div class="hide medium-down--show burger-mobile" id="burger_wrapper" style="width: 25%;"> 2887 <button type="button" class="mobile-menu-button" aria-label="Open Menu"><svg aria-hidden="true" tabindex="-1" role="presentation" class="icon icon-hamburger" viewBox="0 0 32 32"><path fill="" d="M4.889 14.958h22.222v2.222H4.889v-2.222zM4.889 8.292h22.222v2.222H4.889V8.292zM4.889 21.625h22.222v2.222H4.889v-2.222z"/></svg></a> 2888 </div><div class="header-content logo_top body_font"><div class="header-top one-whole flex align-items-center justify-content-center"><div class="top-utils top-utils-2 justify-content-start" id="top_utils_wrapper_2"> 2889 <div class="top-utils-wrap"><div class="item nav-1 "> 2890 <span class="nav-1 custom-item"><a href="https://www.glowrecipe.com/pages/glow-101">GLOW 101</a></span> 2891 </div><div class="item nav-1 "> 2892 <span class="nav-1 custom-item"><a href="/pages/glow-rewards-copy">CLUB GLOW REWARDS</a></span> 2893 </div></div> 2894</div><div class="flex-grow logo-container" id="logo_wrapper" style="opacity: 0;"> 2895 <a href="/" class="logo flex justify-content-center ease-animation" ><img src="//www.glowrecipe.com/cdn/shop/files/GLOW_TYPOGRAPHIC_7152e569-f2c6-4c54-933b-679050cbfc81_600x.png?v=1633360446" alt="Glow Recipe" /></a> 2896 </div> <div class="top-utils justify-content-end" id="top_utils_wrapper"> 2897 <div class="top-utils-wrap"><a alt="Wishlist" href="#swym-wishlist" class="item nav-1 "> 2898 <div id="wishlist-header"></div> 2899 </a><button type="button" aria-controls="search-bar" aria-expanded="false" aria-label="Product Search" class="trigger-search item nav-1 "><svg class="icon icon-glow-search" role="presentation" viewBox="0 0 18 17" aria-hidden="true" tabindex="-1" role="presentation" > 2900 <g transform="translate(1 1)" stroke="currentColor" stroke-width="1.4" fill="none" fill-rule="evenodd" stroke-linecap="square"> 2901 <path d="M16 16l-5.0752-5.0752"></path> 2902 <circle cx="6.4" cy="6.4" r="6.4"></circle> 2903 </g> 2904 </svg></button> 2905 <div id="search-bar"> 2906 <div class="container flex align-items-start"><search-form data-autocomplete="true"> 2907 <form action="/search" method="get" class="search-form" role="search"> 2908 <input type="text" class="input-search animation" name="q" value="" autocomplete="off" placeholder="Search" aria-label="Enter search terms" /> 2909 2910 <button aria-label="Submit search" tabindex="-1" focusable="false"><svg aria-hidden="true" tabindex="-1" role="presentation" class="icon icon-search" viewBox="0 0 32 32">
2910<path fill="" d="M31.202,29.293l-8.704-8.703c1.671-2.087,2.677-4.729,2.677-7.604c0-6.721-5.468-12.188-12.189-12.188 S0.798,6.265,0.798,12.986c0,6.722,5.468,12.189,12.189,12.189c2.875,0,5.516-1.007,7.602-2.678l8.704,8.704L31.202,29.293z M12.987,22.475c-5.232,0-9.489-4.257-9.489-9.489s4.256-9.488,9.489-9.488s9.489,4.256,9.489,9.488S18.219,22.475,12.987,22.475z"/></svg></button> 2911 <small class="cera" style="opacity: 0.65">Only alphanumeric characters allowed</small> 2912 </form> 2913 <div class="wrapper tabs-container"> 2914 <div class="tabs justify-content-start"> 2915 <button class="tab-button first active" onclick="openTab(event, 'content1')" aria-label="Open Products tab"><span>Products</span></button> 2916 <button class="tab-button second" onclick="openTab(event, 'content2')" aria-label="Open Articles tab"><span>Articles</span></button> 2917 </div> 2918</div> 2919 <div class="content-wrapper"> 2920 <div id="content1" class="tab-content"> 2921 <div class="search-results"></div> 2922 </div> 2923 <div id="content2" class="tab-content" style="display:none"> 2924 <div class="search-results-articles"></div> 2925 </div> 2926 </div> 2927</search-form> 2928
2929<script> 2930 function openTab(evt, tabName) { 2931 var i, tabContent, tabButtons, currentTab; 2932 2933 // Hide all tab contents 2934 tabContent = document.getElementsByClassName("tab-content"); 2935 for (i = 0; i < tabContent.length; i++) { 2936 tabContent[i].style.display = "none"; 2937 } 2938 2939 // Remove "active" class from tab buttons 2940 tabButtons = document.getElementsByClassName("tab-button"); 2941 for (i = 0; i < tabButtons.length; i++) { 2942 tabButtons[i].classList.remove("active"); 2943 } 2944 2945 // Check if the clicked tab is already active 2946 currentTab = document.getElementById(tabName); 2947 var isActive = currentTab.classList.contains("active"); 2948 2949 2950 if (!isActive) { 2951 // Show the selected tab content and mark the button as active 2952 currentTab.style.display = "block"; 2953 currentTab.classList.add("active"); 2954 evt.currentTarget.classList.add("active"); 2955 } else { 2956 // Hide the clicked tab and remove the active class 2957 currentTab.style.display = "none"; 2958 currentTab.classList.remove("active"); 2959 evt.currentTarget.classList.remove("active"); 2960 } 2961 if(document.getElementById(tabName).style.display == 'none'){ 2962 currentTab.style.display = "block"; 2963 currentTab.classList.add("active"); 2964 evt.currentTarget.classList.add("active"); 2965 } 2966 2967 } 2968</script>
2968<button class="close-search-bar" aria-label="Close search bar"> 2969 <svg aria-hidden="true" tabindex="-1" role="presentation" class="icon icon-close" viewBox="0 0 32 32"><path fill="" d="M17.825,16l10.208,10.207l-1.827,1.826L16,17.824L5.793,28.033l-1.826-1.826L14.174,16L3.967,5.793l1.826-1.826L16,14.174 L26.208,3.967l1.825,1.826L17.825,16z"/></svg> 2970 </button> 2971 </div> 2972 </div><a href="/account/login" target="_blank" aria-label="My Account" alt="My Account"" class="trigger-account item nav-1 small--hide"><svg class="icon icon-glow-account" role="presentation" viewBox="0 0 20 20" aria-hidden="true" tabindex="-1" role="presentation" > 2973 <g transform="translate(1 1)" stroke="currentColor" stroke-width="2" fill="none" fill-rule="evenodd" stroke-linecap="square"> 2974 <path d="M0 18c0-4.5188182 3.663-8.18181818 8.18181818-8.18181818h1.63636364C14.337 9.81818182 18 13.4811818 18 18" style="fill: none !important;"></path> 2975 <circle cx="9" cy="4.90909091" r="4.90909091"></circle> 2976 </g> 2977 </svg></a><a href="/cart" alt="My Shopping Cart" class="ab-trigger-test item nav-1 "><svg class="icon icon-glow-bag" role="presentation" viewBox="0 0 17 20" aria-hidden="true" tabindex="-1" role="presentation" > 2978 <path d="M0 20V4.995l1 .006v.015l4-.002V4c0-2.484 1.274-4 3.5-4C10.518 0 12 1.48 12 4v1.012l5-.003v.985H1V19h15V6.005h1V20H0zM11 4.49C11 2.267 10.507 1 8.5 1 6.5 1 6 2.27 6 4.49V5l5-.002V4.49z" fill="currentColor"></path> 2979 </svg><div class="cart-count">0</div> 2980 </a></div> 2981</div></div> 2982 <div class="header-bottom one-whole flex align-items-center justify-content-center"> 2983 <nav class="header-main-menu"><div class="item main-menu-parent-item" data-parent="shop-all"><a class="nav-1" href="https://www.glowrecipe.com/collections/all" > 2984 SHOP ALL 2985</a></div><div class="item main-menu-parent-item" data-parent="new-arrivals"><a class="nav-1" href="/collections/new-now" > 2986 NEW ARRIVALS 2987</a></div><div class="item main-menu-parent-item" data-parent="best-sellers"><a class="nav-1" href="/collections/bestsellers" > 2988 BEST-SELLERS 2989</a></div><div class="item has-dropdown main-menu-parent-item" aria-haspopup="true" data-parent="shop-by"><a class="nav-1" href="#" onclick="return false;"> 2990 SHOP BY 2991<svg aria-hidden="true" tabindex="-1" role="presentation" class="icon icon-arrow-down" viewBox="0 0 32 32"><path fill="" d="M26.985,8.5l1.516,1.617L16.001,23.5l-12.5-13.383L5.009,8.5l10.992,11.758L26.985,8.5z"/></svg> 2992</a><div class="submenu expandable"> 2993 <div class="submenu-inner"><div class="item has-dropdown" aria-haspopup="true"> 2994 <a class="nav-2" href="/pages/skin-concerns">SKIN CONCERN 2995<svg aria-hidden="true" tabindex="-1" role="presentation" class="icon icon-arrow-right" viewBox="0 0 32 32"><path fill="" d="M8.5,5.015L10.117,3.5L23.5,16L10.117,28.5L8.5,26.991L20.258,16L8.5,5.015z"/></svg> 2996</a><div class="submenu expandable"> 2997 <div class="submenu-inner"><div class="item "> 2998 <a class="nav-3" href="/collections/breakouts-acne">Breakouts & Acne</a> 2999 </div><div class="item "> 3000 <a class="nav-3" href="/collections/hyperpigmentation-dark-spots">Dark Spots</a> 3001 </div><div class="item "> 3002 <a class="nav-3" href="/collections/dryness">Dryness</a> 3003 </div><div class="item "> 3004 <a class="nav-3" href="/collections/dullness-uneven-tone">Dullness</a> 3005 </div><div class="item "> 3006 <a class="nav-3" href="/collections/fine-lines-wrinkles">Fine Lines</a> 3007 </div><div class="item "> 3008 <a class="nav-3" href="/collections/oil-control-acne">Pores & Oil</a> 3009 </div><div class="item "> 3010 <a class="nav-3" href="/collections/sensitivity-redness">Redness & Sensitivity</a> 3011 </div></div> 3012 </div></div><div class="item has-dropdown" aria-haspopup="true"> 3013 <a class="nav-2" href="/pages/routine-101">KOREAN SKINCARE ROUTINE 3014<svg aria-hidden="true" tabindex="-1" role="presentation" class="icon icon-arrow-right" viewBox="0 0 32 32"><path fill="" d="M8.5,5.015L10.117,3.5L23.5,16L10.117,28.5L8.5,26.991L20.258,16L8.5,5.015z"/></svg> 3015</a><div class="submenu expandable"> 3016 <div class="submenu-inner"><div class="item "> 3017 <a class="nav-3" href="/collections/cleansers">Cleanser</a> 3018 </div><div class="item "> 3019 <a class="nav-3" href="/collections/mists">Toner & Mist</a> 3020 </div><div class="item "> 3021 <a class="nav-3" href="https://www.glowrecipe.com/collections/korean-skincare-toner-pads">Toner Pads</a> 3022 </div><div class="item "> 3023 <a class="nav-3" href="/collections/eye-care">Eye </a> 3024 </div><div class="item "> 3025 <a class="nav-3" href="/collections/serums-essences">Serum</a> 3026 </div><div class="item "> 3027 <a class="nav-3" href="/collections/moisturizers">Moisturizer</a> 3028 </div><div class="item "> 3029 <a class="nav-3" href="/collections/spf">Sunscreen</a> 3030 </div><div class="item "> 3031 <a class="nav-3" href="/collections/glow-hues">Glow Hues</a> 3032 </div><div class="item "> 3033 <a class="nav-3" href="/collections/lip">Lip</a> 3034 </div><div class="item "> 3035 <a class="nav-3" href="/collections/body">Body</a> 3036 </div></div> 3037 </div></div><div class="item has-dropdown" aria-haspopup="true"> 3038 <a class="nav-2" href="/pages/ingredients">KOREAN SKINCARE INGREDIENTS 3039<svg aria-hidden="true" tabindex="-1" role="presentation" class="icon icon-arrow-right" viewBox="0 0 32 32">
3039<path fill="" d="M8.5,5.015L10.117,3.5L23.5,16L10.117,28.5L8.5,26.991L20.258,16L8.5,5.015z"/></svg> 3040</a><div class="submenu expandable"> 3041 <div class="submenu-inner"><div class="item "> 3042 <a class="nav-3" href="/collections/acids">Acids</a> 3043 </div><div class="item "> 3044 <a class="nav-3" href="/collections/ceramides">Ceramides</a> 3045 </div><div class="item "> 3046 <a class="nav-3" href="/collections/hyaluronic-acid">Hyaluronic Acid</a> 3047 </div><div class="item "> 3048 <a class="nav-3" href="/collections/mucin">Mucin</a> 3049 </div><div class="item "> 3050 <a class="nav-3" href="/collections/niacinamide">Niacinamide</a> 3051 </div><div class="item "> 3052 <a class="nav-3" href="/collections/peptides">Peptides</a> 3053 </div><div class="item "> 3054 <a class="nav-3" href="/collections/retinol">Retinol</a> 3055 </div><div class="item "> 3056 <a class="nav-3" href="/collections/vitamin-c">Vitamin C</a> 3057 </div></div> 3058 </div></div><div class="item has-dropdown" aria-haspopup="true"> 3059 <a class="nav-2" href="/collections/fruit-friends">FRUIT 3060<svg aria-hidden="true" tabindex="-1" role="presentation" class="icon icon-arrow-right" viewBox="0 0 32 32"><path fill="" d="M8.5,5.015L10.117,3.5L23.5,16L10.117,28.5L8.5,26.991L20.258,16L8.5,5.015z"/></svg> 3061</a><div class="submenu expandable"> 3062 <div class="submenu-inner"><div class="item "> 3063 <a class="nav-3" href="/collections/watermelon">Watermelon</a> 3064 </div><div class="item "> 3065 <a class="nav-3" href="/collections/avocado">Avocado</a> 3066 </div><div class="item "> 3067 <a class="nav-3" href="https://www.glowrecipe.com/collections/banana">Banana</a> 3068 </div><div class="item "> 3069 <a class="nav-3" href="/collections/blackberry">Blackberry</a> 3070 </div><div class="item "> 3071 <a class="nav-3" href="/collections/cloudberry">Cloudberry</a> 3072 </div><div class="item "> 3073 <a class="nav-3" href="/collections/guava">Guava</a> 3074 </div><div class="item "> 3075 <a class="nav-3" href="/collections/papaya">Papaya</a> 3076 </div><div class="item "> 3077 <a class="nav-3" href="/collections/plum">Plum</a> 3078 </div><div class="item "> 3079 <a class="nav-3" href="/collections/prickly-pear">Prickly Pear</a> 3080 </div><div class="item "> 3081 <a class="nav-3" href="/collections/strawberry">Strawberry</a> 3082 </div></div> 3083 </div></div><div class="item "> 3084 <a class="nav-2" href="/collections/minis">KOREAN SKINCARE MINIS 3085</a></div><div class="item "> 3086 <a class="nav-2" href="/collections/merch">MERCH 3087</a></div></div> 3088 </div></div><div class="item has-dropdown main-menu-parent-item" aria-haspopup="true" data-parent="value-sets"><a class="nav-1" href="#" onclick="return false;"> 3089 VALUE SETS 3090<svg aria-hidden="true" tabindex="-1" role="presentation" class="icon icon-arrow-down" viewBox="0 0 32 32"><path fill="" d="M26.985,8.5l1.516,1.617L16.001,23.5l-12.5-13.383L5.009,8.5l10.992,11.758L26.985,8.5z"/></svg> 3091</a><div class="submenu expandable"> 3092 <div class="submenu-inner"><div class="item "> 3093 <a class="nav-2" href="https://www.glowrecipe.com/collections/holiday-kits">Holiday Kits 3094</a></div><div class="item "> 3095 <a class="nav-2" href="/products/banana-moisturizing-cream-shimmer-lip-treatment-duo">Korean Banana Milk Kit 3096</a></div><div class="item "> 3097 <a class="nav-2" href="/products/the-glow-recipe-experience-kit">Glow Recipe Experience Kit 3098</a></div><div class="item "> 3099 <a class="nav-2" href="/products/the-glass-skin-roll-bag-kit">Glass Skin Roll Bag Kit 3100</a></div><div class="item has-dropdown" aria-haspopup="true"> 3101 <a class="nav-2" href="https://www.glowrecipe.com/pages/make-your-own-kit#fullsize_kit">Make Your Own Korean Skincare Kit 3102<svg aria-hidden="true" tabindex="-1" role="presentation" class="icon icon-arrow-right" viewBox="0 0 32 32"><path fill="" d="M8.5,5.015L10.117,3.5L23.5,16L10.117,28.5L8.5,26.991L20.258,16L8.5,5.015z"/></svg> 3103</a><div class="submenu expandable"> 3104 <div class="submenu-inner"><div class="item "> 3105 <a class="nav-3" href="https://www.glowrecipe.com/pages/make-your-own-kit#travel_kit">Trial & Travel Kit</a> 3106 </div><div class="item "> 3107 <a class="nav-3" href="https://www.glowrecipe.com/pages/make-your-own-kit#fullsize_kit">Full-Size Routine Kit</a> 3108 </div><div class="item "> 3109 <a class="nav-3" href="https://www.glowrecipe.com/pages/make-your-own-kit#serum_kit">Serum Kit</a> 3110 </div></div> 3111 </div></div><div class="item "> 3112 <a class="nav-2" href="/collections/kits">Shop All Value Sets 3113</a></div></div> 3114 </div></div><div class="item has-dropdown main-menu-parent-item" aria-haspopup="true" data-parent="guide-me"><a class="nav-1" href="#" onclick="return false;"> 3115 GUIDE ME 3116<svg aria-hidden="true" tabindex="-1" role="presentation" class="icon icon-arrow-down" viewB
3116ox="0 0 32 32"><path fill="" d="M26.985,8.5l1.516,1.617L16.001,23.5l-12.5-13.383L5.009,8.5l10.992,11.758L26.985,8.5z"/></svg> 3117</a><div class="submenu expandable"> 3118 <div class="submenu-inner"><div class="item "> 3119 <a class="nav-2" href="https://www.glowrecipe.com/pages/find-your-glow-recipe">Skin Quiz 3120</a></div><div class="item has-dropdown" aria-haspopup="true"> 3121 <a class="nav-2" href="/pages/glow-101">Glow 101 3122<svg aria-hidden="true" tabindex="-1" role="presentation" class="icon icon-arrow-right" viewBox="0 0 32 32"><path fill="" d="M8.5,5.015L10.117,3.5L23.5,16L10.117,28.5L8.5,26.991L20.258,16L8.5,5.015z"/></svg> 3123</a><div class="submenu expandable"> 3124 <div class="submenu-inner"><div class="item "> 3125 <a class="nav-3" href="/pages/routine-101">Korean Skincare Routine 101</a> 3126 </div><div class="item "> 3127 <a class="nav-3" href="/pages/skin-concerns">Skin Concerns Guide</a> 3128 </div><div class="item active"> 3129 <a class="nav-3" href="/pages/serious-about-serums">Serums Guide</a> 3130 </div><div class="item "> 3131 <a class="nav-3" href="/pages/ingredients">Korean Skincare Ingredients</a> 3132 </div></div> 3133 </div></div></div> 3134 </div></div><div class="item has-dropdown main-menu-parent-item" aria-haspopup="true" data-parent="glow-services"><a class="nav-1" href="#" onclick="return false;"> 3135 GLOW SERVICES 3136<svg aria-hidden="true" tabindex="-1" role="presentation" class="icon icon-arrow-down" viewBox="0 0 32 32"><path fill="" d="M26.985,8.5l1.516,1.617L16.001,23.5l-12.5-13.383L5.009,8.5l10.992,11.758L26.985,8.5z"/></svg> 3137</a><div class="submenu expandable"> 3138 <div class="submenu-inner"><div class="item "> 3139 <a class="nav-2" href="/pages/subscriptions">Subscribe & Save 15% 3140</a></div><div class="item "> 3141 <a class="nav-2" href="https://www.glowrecipe.com/pages/offers">Offers 3142</a></div><div class="item "> 3143 <a class="nav-2" href="https://gifts.glowrecipe.com/">Glow Gifts 3144</a></div><div class="item "> 3145 <a class="nav-2" href="/products/gift-card-2">Gift Cards 3146</a></div></div> 3147 </div></div><div class="item main-menu-parent-item" data-parent="about-glow"><a class="nav-1" href="#" onclick="return false;"> 3148 ABOUT GLOW 3149<svg aria-hidden="true" tabindex="-1" role="presentation" class="icon icon-arrow-down" viewBox="0 0 32 32"><path fill="" d="M26.985,8.5l1.516,1.617L16.001,23.5l-12.5-13.383L5.009,8.5l10.992,11.758L26.985,8.5z"/></svg> 3150</a></div></nav> 3151 </div></div> 3152 3153
3153<script type="module"> 3154 function setVarStyleHeaderOffset() { 3155 var headerOffset; 3156 if($s.media.isLarge){headerOffset = document.getElementById('header').offsetHeight;} 3157 if($s.media.isMediumDown){headerOffset = document.getElementById('header').offsetHeight;} 3158 $s.setCssVariable('header-offset', headerOffset + 'px'); 3159 } 3160 window.addEventListener('mediaChange', setVarStyleHeaderOffset); 3161 setVarStyleHeaderOffset(); 3162 3163 // handling menu line effect 3164 var topItems = document.querySelectorAll('.header-main-menu > .item'); 3165var animatedEl = null; 3166var activeTopItem = null; 3167 3168topItems.forEach(item => { 3169 const link = item.querySelector('.nav-1'); 3170 if (!link) return; // skip if not a top-level item 3171 3172 // Mouse enter top-level item 3173 item.addEventListener('mouseenter', e => { 3174 // If we already have an underline for THIS item, do nothing 3175 if (activeTopItem === item) return; 3176 3177 // If an underline exists from another item, remove it 3178 if (animatedEl) animatedEl.remove(); 3179 3180 activeTopItem = item; 3181 3182 // Create underline only once per top-level hover 3183 animatedEl = createMenuItemAnimatedElement(link); 3184 document.body.appendChild(animatedEl); 3185 3186 setTimeout(() => { 3187 animatedEl.classList.add('active'); 3188 }, 10); 3189 }); 3190 3191 // Mouse leave top-level item 3192 item.addEventListener('mouseleave', e => { 3193 // If moving into submenu, keep underline 3194 if (item.contains(e.relatedTarget)) return; 3195 3196 // Fully left the menu group â remove underline 3197 if (animatedEl) animatedEl.remove(); 3198 animatedEl = null; 3199 activeTopItem = null; 3200 }); 3201}); 3202 3203 var theHeader = document.querySelector('.header-inner') 3204 var burgerWrapper = document.querySelector('#burger_wrapper'); 3205 var topUtilsWrapper = document.querySelector('#top_utils_wrapper'); 3206 var logoWrapper = document.querySelector('#logo_wrapper'); 3207 3208 3209 3210 if(theHeader.clientWidth > 1250){ 3211 adjustMargin(logoWrapper, topUtilsWrapper) 3212 } else { 3213 matchWidth(logoWrapper, topUtilsWrapper) 3214 } 3215 3216 window.addEventListener('resize', (e)=>{ 3217 if(document.body.clientWidth > 1250){ 3218 adjustMargin(logoWrapper,topUtilsWrapper) 3219 } else { 3220 matchWidth(logoWrapper,topUtilsWrapper) 3221 } 3222 }, false) 3223 3224 function matchWidth(logoWrapper,topUtilsWrapper){ 3225 //logoWrapper.style.marginLeft = topUtilsWrapper.clientWidth - 40 +'px'; 3226 logoWrapper.style.opacity = '1'; 3227 } 3228 3229 function adjustMargin(logoWrapper,topUtilsWrapper){ 3230 //logoWrapper.style.marginLeft = topUtilsWrapper.clientWidth + 'px' 3231 logoWrapper.style.opacity = '1'; 3232 } 3233 3234 function createMenuItemAnimatedElement(item) { 3235 var animatedEl = document.createElement('div'); 3236 animatedEl.classList.add('animated-separator'); 3237 animatedEl.innerHTML = '<div class="inner-animated"></div>'; 3238 var itemPos = getMenuItemPos(item); 3239 animatedEl.style.left = itemPos.x + 'px'; 3240 animatedEl.style.top = (itemPos.y + itemPos.height + 0) + 'px'; 3241 animatedEl.style.width = itemPos.width + 'px'; 3242 return animatedEl; 3243 } 3244 3245 function getMenuItemPos(el) { 3246 var viewportOffset = el.getBoundingClientRect(); 3247 var top = viewportOffset.top; 3248 var left = viewportOffset.left; 3249 var width = el.offsetWidth; 3250 var height = el.offsetHeight; 3251 return { x: left, y: top, width: width, height: height }; 3252 } 3253 // handling menu line effect 3254 </script>
3254 3255 3256 </div></header><main id="main-content" class="page.serum-guide" role="main" tabindex="-1"> 3257 <section id="shopify-section-template--20367591211123__image_text_PPxLN8" class="shopify-section"><link href="//www.glowrecipe.com/cdn/shop/t/1677/assets/image_text.css?v=74990641622703261251788493545" rel="stylesheet" type="text/css" media="all" /> 3258 3259<style> 3260 #shopify-section-template--20367591211123__image_text_PPxLN8 { 3261 --section-padding-desktop: 0; 3262 --section-bg-color: #ffffff; 3263 --text-bg-color: #fcdef6; 3264 --title-color: #000000; 3265 --text-color: #000000; 3266 --text-width: 60em; 3267 --text-padding-desktop: 3em; 3268 --eyebrow-image-width: 140px; 3269 3270 --background-image: 'none'; 3271 3272 --button-spacing: 2em; 3273 --title-font-size: 4.26em; 3274 --subtitle-font-size: 1.2em; 3275 --text-font-size: 1em; 3276 --eyebrow-font-size: .9em; 3277 --rounded-corners: none; 3278 } 3279 @media all and (min-width: 901px){ 3280 #shopify-section-template--20367591211123__image_text_PPxLN8 { 3281 --image-width: 50%; 3282 } 3283 } 3284 @media all and (max-width: 900px){ 3285 #shopify-section-template--20367591211123__image_text_PPxLN8 { 3286 --title-font-size: 1.5em; 3287 --section-padding-mobile: 0; 3288 --text-padding-mobile: 3em 20px; 3289 --subtitle-font-size: 1.2em; 3290 --text-font-size: 1em; 3291 } 3292 } 3293 @media all and (max-width: 600px){ 3294 #shopify-section-template--20367591211123__image_text_PPxLN8 { 3295 3296 --background-image: 'none'; 3297 3298 --eyebrow-font-size: .8em; 3299 --section-padding-mobile: 0; 3300 --rounded-corners: none 3301 } 3302 } 3303</style><div class="image-text " id=""> 3304 3305 <div > 3306 <div class="grid-full content normal align-items-center"><div class="grid-item text-column flex-1 medium-down--one-whole flex justify-content-center"> 3307 <div class="wrap text-center medium-down--text-center "><img alt="" class="img eyebrow-image lazyload" src="//www.glowrecipe.com/cdn/shop/t/1677/assets/placeholder_100x17_crop_left.png?v=1593909494867914621788493478 3308" data-srcset="//www.glowrecipe.com/cdn/shop/files/GLOW_101_logo_2_180x.png?v=1722542253 180w 31h,//www.glowrecipe.com/cdn/shop/files/GLOW_101_logo_2_360x.png?v=1722542253 360w 62h,//www.glowrecipe.com/cdn/shop/files/GLOW_101_logo_2_600x.png?v=1722542253 600w 103h,//www.glowrecipe.com/cdn/shop/files/GLOW_101_logo_2_720x.png?v=1722542253 720w 124h,//www.glowrecipe.com/cdn/shop/files/GLOW_101_logo_2_900x.png?v=1722542253 900w 155h,//www.glowrecipe.com/cdn/shop/files/GLOW_101_logo_2_1080x.png?v=1722542253 1080w 186h,//www.glowrecipe.com/cdn/shop/files/GLOW_101_logo_2_1296x.png?v=1722542253 1296w 223h,//www.glowrecipe.com/cdn/shop/files/GLOW_101_logo_2_1512x.png?v=1722542253 1512w 260h,//www.glowrecipe.com/cdn/shop/files/GLOW_101_logo_2_1728x.png?v=1722542253 1728w 297h,//www.glowrecipe.com/cdn/shop/files/GLOW_101_logo_2_1950x.png?v=1722542253 1950w 335h,//www.glowrecipe.com/cdn/shop/files/GLOW_101_logo_2.png?v=1722542253&width=2000 2000w 344h" /><h2 class="title">SERUM GUIDE</h2><div class="text"><p>Our serums are formulated to treat whatever skin concerns come your way with clinically effective ingredients & gentle formulas made to be used daily. Here's our guide to building the serum wardrobe that's right for you. </p><p>Clinically effective & under $50. </p></div><a href="/collections/serums-essences" class="btn v2">SHOP SERUMS</a></div> 3309 </div> 3310 </div> 3311 </div> 3312</div><style> #shopify-section-template--20367591211123__image_text_PPxLN8 .title {font-weight: 700;} #shopify-section-template--20367591211123__image_text_PPxLN8 .text p {font-size: 0.93em; margin-bottom: 0.66em;} #shopify-section-template--20367591211123__image_text_PPxLN8 .btn {width: fit-content;} </style></section><section id="shopify-section-template--20367591211123__information_grid_NgPnmD" class="shopify-section"><link href="//www.glowrecipe.com/cdn/shop/t/1677/assets/information_grid.css?v=148816363775242585521788493545" rel="stylesheet" type="text/css" media="all" /> 3313 3314<style> 3315 #shopify-section-template--20367591211123__information_grid_NgPnmD { 3316 --section-bg: #ffffff; 3317 --section-padding: 70px 0; 3318 --column-bg: #fcdef6; 3319 } 3320 @media (max-width: 900px){ 3321 #shopify-section-template--20367591211123__information_grid_NgPnmD { 3322 --section-padding: 32px 0; 3323 --min-width: 800px; 3324 } 3325 } 3326</style> 3327 3328<div class="information-grid">
3329 <div class="large--container"> 3330 <div class="content"><div class="main-grid flex direction-column"><div class="row flex"><div class="cell text-center flex direction-column align-items-center justify-content-center"></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">BENEFITS</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">TARGETS</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">CLINICALLY EFECTIVE INGREDIENTS</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">CLAIMS</div></div></div><div class="row flex"><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="img-container"> 3331 <img alt="" class="img lazyload" src="//www.glowrecipe.com/cdn/shop/t/1677/assets/placeholder_100x100_crop_left.png?v=1593909494867914621788493478 3332" data-srcset="//www.glowrecipe.com/cdn/shop/files/PRICKLY_PEAR_PDP_1920x1920_71ac2e7d-a5f2-4364-ba6c-008492e4a629_180x.jpg?v=1755786300 180w 180h,//www.glowrecipe.com/cdn/shop/files/PRICKLY_PEAR_PDP_1920x1920_71ac2e7d-a5f2-4364-ba6c-008492e4a629_360x.jpg?v=1755786300 360w 360h,//www.glowrecipe.com/cdn/shop/files/PRICKLY_PEAR_PDP_1920x1920_71ac2e7d-a5f2-4364-ba6c-008492e4a629_600x.jpg?v=1755786300 600w 600h,//www.glowrecipe.com/cdn/shop/files/PRICKLY_PEAR_PDP_1920x1920_71ac2e7d-a5f2-4364-ba6c-008492e4a629_720x.jpg?v=1755786300 720w 720h,//www.glowrecipe.com/cdn/shop/files/PRICKLY_PEAR_PDP_1920x1920_71ac2e7d-a5f2-4364-ba6c-008492e4a629_900x.jpg?v=1755786300 900w 900h,//www.glowrecipe.com/cdn/shop/files/PRICKLY_PEAR_PDP_1920x1920_71ac2e7d-a5f2-4364-ba6c-008492e4a629_1080x.jpg?v=1755786300 1080w 1080h,//www.glowrecipe.com/cdn/shop/files/PRICKLY_PEAR_PDP_1920x1920_71ac2e7d-a5f2-4364-ba6c-008492e4a629_1296x.jpg?v=1755786300 1296w 1296h,//www.glowrecipe.com/cdn/shop/files/PRICKLY_PEAR_PDP_1920x1920_71ac2e7d-a5f2-4364-ba6c-008492e4a629_1512x.jpg?v=1755786300 1512w 1512h,//www.glowrecipe.com/cdn/shop/files/PRICKLY_PEAR_PDP_1920x1920_71ac2e7d-a5f2-4364-ba6c-008492e4a629_1728x.jpg?v=1755786300 1728w 1728h,//www.glowrecipe.com/cdn/shop/files/PRICKLY_PEAR_PDP_1920x1920_71ac2e7d-a5f2-4364-ba6c-008492e4a629.jpg?v=1755786300&width=1920 1920w 1920h" /> 3333 </div><a class="btn v2" href="/products/prickly-pear-peptide-mucin"> 3334 <span class="medium-down--hide">Shop Serum</span><span class="large--hide">Shop</span></a></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Delivers visible bounce</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Dullness & dryness</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Bio-Active Peptides</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">96%Â agree skin looks instantly bouncier and smoother</div></div></div><div class="row flex"><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="img-container"> 3335 <img alt="" class="img lazyload" src="//www.glowrecipe.com/cdn/shop/t/1677/assets/placeholder_100x78_crop_left.png?v=1593909494867914621788493478 3336" data-srcset="//www.glowrecipe.com/cdn/shop/files/TABLE_1_180x.png?v=1733928860 180w 140h,//www.glowrecipe.com/cdn/shop/files/TABLE_1_360x.png?v=1733928860 360w 279h,//www.glowrecipe.com/cdn/shop/files/TABLE_1.png?v=1733928860&width=445 445w 345h" /> 3337 </div><a class="btn v2" href="/products/watermelon-glow-niacinamide-dew-drops"> 3338 <span class="medium-down--hide">Shop Serum</span><span class="large--hide">Shop</span></a></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Glow &</br> even tone</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Dullness &</br>uneven tone</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Niacinamide</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">97% agreed this serum made their skin look more glowy</div></div></div><div class="row flex"><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="img-container"> 3339 <img alt="" class="img lazyload" src="//www.glowrecipe.com/cdn/shop/t/1677/assets/placeholder_100x78_crop_left.png?v=1593909494867914621788493478 3340" data-srcset="//www.glowrecipe.com/cdn/shop/files/TABLE_2_180x.png?v=1733928865 180w 140h,//www.glowrecipe.com/cdn/shop/files/TABLE_2_360x.png?v=1733928865 360w 280h,//www.glowrecipe.com/cdn/shop/files/TABLE_2.png?v=1733928865&width=445 445w 346h" /> 3341 </div><a class="btn v2" href="/products/strawberry-smooth-bha-aha-salicylic-serum">
3342 <span class="medium-down--hide">Shop Serum</span><span class="large--hide">Shop</span></a></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Smooth</br>texture & prevent breakouts</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Blemishes and uneven texture</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">BHA + AHA</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">100% has significant decongestion and visible reduction in pore size</div></div></div><div class="row flex"><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="img-container"> 3343 <img alt="" class="img lazyload" src="//www.glowrecipe.com/cdn/shop/t/1677/assets/placeholder_100x78_crop_left.png?v=1593909494867914621788493478 3344" data-srcset="//www.glowrecipe.com/cdn/shop/files/TABLE_3_180x.png?v=1733928866 180w 140h,//www.glowrecipe.com/cdn/shop/files/TABLE_3_360x.png?v=1733928866 360w 280h,//www.glowrecipe.com/cdn/shop/files/TABLE_3.png?v=1733928866&width=445 445w 346h" /> 3345 </div><a class="btn v2" href="/products/plum-plump-hyaluronic-serum"> 3346 <span class="medium-down--hide">Shop Serum</span><span class="large--hide">Shop</span></a></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Hydate &</br>plum</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Dryness</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">5 unique molecular</br>weights of hyaluronic acid</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">100% agreed their skin felt more hydrated</div></div></div><div class="row flex"><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="img-container"> 3347 <img alt="" class="img lazyload" src="//www.glowrecipe.com/cdn/shop/t/1677/assets/placeholder_100x78_crop_left.png?v=1593909494867914621788493478 3348" data-srcset="//www.glowrecipe.com/cdn/shop/files/TABLE_4_180x.png?v=1733928866 180w 140h,//www.glowrecipe.com/cdn/shop/files/TABLE_4_360x.png?v=1733928866 360w 279h,//www.glowrecipe.com/cdn/shop/files/TABLE_4.png?v=1733928866&width=445 445w 345h" /> 3349 </div><a class="btn v2" href="/products/pomegranate-peptide-firming-serum"> 3350 <span class="medium-down--hide">Shop Serum</span><span class="large--hide">Shop</span></a></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Smooth &</br>firm</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Fine lines</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Polypeptides</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">93% agree skin looks firm, lifted, and smooth</div></div></div><div class="row flex"><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="img-container"> 3351 <img alt="" class="img lazyload" src="//www.glowrecipe.com/cdn/shop/t/1677/assets/placeholder_100x78_crop_left.png?v=1593909494867914621788493478 3352" data-srcset="//www.glowrecipe.com/cdn/shop/files/TABLE_5_180x.png?v=1733928866 180w 140h,//www.glowrecipe.com/cdn/shop/files/TABLE_5_360x.png?v=1733928866 360w 279h,//www.glowrecipe.com/cdn/shop/files/TABLE_5.png?v=1733928866&width=445 445w 345h" /> 3353 </div><a class="btn v2" href="/products/guava-vitamin-c-dark-spot-serum">
3354 <span class="medium-down--hide">Shop Serum</span><span class="large--hide">Shop</span></a></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Brighten & fade dark spots</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Dullness & uneven tone</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Vitamin C (in 5 forms)</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">93% agree skin looks firm, lifted, and smooth</div></div></div><div class="row flex"><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="img-container"> 3355 <img alt="" class="img lazyload" src="//www.glowrecipe.com/cdn/shop/t/1677/assets/placeholder_100x78_crop_left.png?v=1593909494867914621788493478 3356" data-srcset="//www.glowrecipe.com/cdn/shop/files/TABLE_6_180x.png?v=1733928866 180w 140h,//www.glowrecipe.com/cdn/shop/files/TABLE_6_360x.png?v=1733928866 360w 280h,//www.glowrecipe.com/cdn/shop/files/TABLE_6.png?v=1733928866&width=445 445w 346h" /> 3357 </div><a class="btn v2" href="/products/avocado-ceramide-recovery-serum"> 3358 <span class="medium-down--hide">Shop Serum</span><span class="large--hide">Shop</span></a></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Supports skin barrier</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Redness & sensitivity</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Ceramide-5</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">86% agreed this serum lessens visible redness</div></div></div><div class="row flex"><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="img-container"> 3359 <img alt="" class="img lazyload" src="//www.glowrecipe.com/cdn/shop/t/1677/assets/placeholder_100x78_crop_left.png?v=1593909494867914621788493478 3360" data-srcset="//www.glowrecipe.com/cdn/shop/files/TABLE_7_180x.png?v=1733928866 180w 140h,//www.glowrecipe.com/cdn/shop/files/TABLE_7_360x.png?v=1733928866 360w 279h,//www.glowrecipe.com/cdn/shop/files/TABLE_7.png?v=1733928866&width=445 445w 345h" /> 3361 </div><a class="btn v2" href="/products/blackberry-retinol-blemish-serum"> 3362 <span class="medium-down--hide">Shop Serum</span><span class="large--hide">Shop</span></a></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Treat breakout</br>& smooth</br>texture + lines</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Breakouts, texture</br>& fine lines</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Triple-Retinoid Blend, 8% Glycerin, & Blackberry Extract</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">97% agreed skin teture look & feels smotther</div></div></div><div class="row flex"><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="img-container"> 3363 <img alt="" class="img lazyload" src="//www.glowrecipe.com/cdn/shop/t/1677/assets/placeholder_100x78_crop_left.png?v=1593909494867914621788493478 3364" data-srcset="//www.glowrecipe.com/cdn/shop/files/TABLE_8_180x.png?v=1733928866 180w 140h,//www.glowrecipe.com/cdn/shop/files/TABLE_8_360x.png?v=1733928866 360w 280h,//www.glowrecipe.com/cdn/shop/files/TABLE_8.png?v=1733928866&width=445 445w 346h" /> 3365 </div><a class="btn v2" href="/products/strawberry-bha-pore-smooth-blur-drops">
3366 <span class="medium-down--hide">Shop Serum</span><span class="large--hide">Shop</span></a></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Blur pores & balance oil</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Pores & oil control</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">Encapsulated BHA</div></div><div class="cell text-center flex direction-column align-items-center justify-content-center"><div class="cell-text">100% agreed this minimized apparance of pores</div></div></div></div> 3367 </div> 3368 </div> 3369</div> 3370 3371 3372 3373</section><section id="shopify-section-template--20367591211123__hero_carousel_C3tLVD" class="shopify-section"><link href="//www.glowrecipe.com/cdn/shop/t/1677/assets/hero_carousel.css?v=141994445286786779521788493546" rel="stylesheet" type="text/css" media="all" /> 3374 3375<style> 3376 @media all and (min-width: 901px){ 3377 #shopify-section-template--20367591211123__hero_carousel_C3tLVD { 3378 --height-desktop: 45%; 3379 --height-mobile: 680px; 3380 }#shopify-section-template--20367591211123__hero_carousel_C3tLVD .block-slide_NGw8C8 { 3381 --bg-color-desktop: #f197cb; 3382 --text-width-desktop: 44em; 3383 --text-padding-desktop: 0 3em; 3384 --title-color-desktop: #ffffff; 3385 --text-color-desktop: #000000; 3386 --title-font-size: 2.5em; 3387 --text-font-size: 1em; 3388 --captions-bg-color: ; 3389 --title-font-weight: 400; 3390 --text-font-weight: 400; 3391 }} 3392 @media all and (max-width: 900px) { 3393 #shopify-section-template--20367591211123__hero_carousel_C3tLVD { 3394 --height-mobile: 680px; 3395 --container-padding: 1.2rem; 3396 }#shopify-section-template--20367591211123__hero_carousel_C3tLVD .block-slide_NGw8C8 { 3397 --bg-color-mobile: #999999; 3398 --text-padding-mobile: 0.75em 0; 3399 --title-color-mobile: #ffffff; 3400 --text-color-mobile: #000000; 3401 --title-font-size: 2.5em; 3402 --text-font-size: 1em; 3403 --captions-bg-color: ; 3404 --title-font-weight: 400; 3405 --text-font-weight: 400; 3406 }} 3407 3408 @media all and (max-width: 600px) { 3409 #shopify-section-template--20367591211123__hero_carousel_C3tLVD { 3410 -container-padding: 1.2rem; 3411 } 3412 } 3413 3414 .hero-carousel .keen-dots-custom { width: auto; right: 2em; } 3415 .hero-carousel .keen-dots-custom .keen-dots-dot:after { width: 7px; height: 7px; background: none; border: 1px solid #000000; } 3416 .hero-carousel .keen-dots-custom .keen-dots-dot.active:after { background: #000000; } 3417 3418 @media all and (max-width: 600px) { 3419 .hero-carousel .keen-dots-custom { width: auto; right: 2em; } 3420 .hero-carousel .keen-dots-custom .keen-dots-dot:after { width: 7px; height: 7px; background: none; border: 1px solid #000000; } 3421 .hero-carousel .keen-dots-custom .keen-dots-dot.active:after { background: #000000; } 3422 } 3423</style> 3424<hero-carousel id="" class="hero-carousel serum-banner full-width mobile-text-inside " data-effect="slide" data-dots="true" data-arrows="true" data-autoplay="0"> 3425 <div class="keen"> 3426 <div class="keen-slider"><div class="keen-slider-slide "> 3427 <div class="slide block-slide_NGw8C8"><div class="bg-img lazyload medium-down--hide" data-bgset="//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_DESKTOP_2600x1438_b86fde03-b187-40db-bac4-b13408572ef3_180x.jpg?v=1755794909 180w 100h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_DESKTOP_2600x1438_b86fde03-b187-40db-bac4-b13408572ef3_360x.jpg?v=1755794909 360w 199h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_DESKTOP_2600x1438_b86fde03-b187-40db-bac4-b13408572ef3_600x.jpg?v=1755794909 600w 332h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_DESKTOP_2600x1438_b86fde03-b187-40db-bac4-b13408572ef3_720x.jpg?v=1755794909 720w 398h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_DESKTOP_2600x1438_b86fde03-b187-40db-bac4-b13408572ef3_900x.jpg?v=1755794909 900w 498h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_DESKTOP_2600x1438_b86fde03-b187-40db-bac4-b13408572ef3_1080x.jpg?v=1755794909 1080w 597h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_DESKTOP_2600x1438_b86fde03-b187-40db-bac4-b13408572ef3_1296x.jpg?v=1755794909 1296w 717h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_DESKTOP_2600x1438_b86fde03-b187-40db-bac4-b13408572ef3_1512x.jpg?v=1755794909 1512w 836h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_DESKTOP_2600x1438_b86fde03-b187-40db-bac4-b13408572ef3_1728x.jpg?v=1755794909 1728w 956h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_DESKTOP_2600x1438_b86fde03-b187-40db-bac4-b13408572ef3_1950x.jpg?v=1755794909 1950w 1079h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_DESKTOP_2600x1438_b86fde03-b187-40db-bac4-b13408572ef3_2100x.jpg?v=1755794909 2100w 1161h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_DESKTOP_2600x1438_b86fde03-b187-40db-bac4-b13408572ef3_2260x.jpg?v=1755794909 2260w 1250h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_DESKTOP_2600x1438_b86fde03-b187-40db-bac4-b13408572ef3_2450x.jpg?v=1755794909 2450w 1355h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_DESKTOP_2600x1438_b86fde03-b187-40db-bac4-b13408572ef3.jpg?v=1755794909&width=2600 2600w 1438h"></div><div class="bg-img lazyload hide medium-down--show" data-bgset="//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_MOBILE_686x1310_2955f272-f7bb-436e-840d-cd24e2c6200e_180x.jpg?v=1755794910 180w 344h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_MOBILE_686x1310_2955f272-f7bb-436e-840d-cd24e2c6200e_360x.jpg?v=1755794910 360w 687h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_MOBILE_686x1310_2955f272-f7bb-436e-840d-cd24e2c6200e_600x.jpg?v=1755794910 600w 1146h,//www.glowrecipe.com/cdn/shop/files/8_26_SERUM_GUIDE_MOBILE_686x1310_2955f272-f7bb-436e-840d-cd24e2c6200e.jpg?v=1755794910&width=686 686w 1310h"></div><div class="overlay"> 3428 <div class="container-full flex justify-content-start align-items-center medium-down--justify-content-center medium-down--align-items-start"> 3429 <div class="captions text-left medium-down--text-center"><div class="epigraph">Formulas That Deliver<br>All Under $45</div><div class="text"><p>Our serums are formulated with targeted actives to address dryness, dullness, fine lines, and more. Lightweight and layerable, theyâre designed to work seamlessly within any routine while supporting healthy, radiant skin.</p><p>Our newest addition, Prickly Pear Peptide Mucin, is a vegan âsnailâ mucin serum made with 81% cactus-derived mucin and bio-active peptides to help hydrate, smooth, and improve skinâs bounce. 100% snail free, cruelty-free, and suitable for all skin types.</p></div></div> 3430 </div> 3431 <div class="container-full cta-wrapper-hero flex justify-content-center align-items-center medium-down--justify-content-center medium-down--align-items-center"> 3432 <div class="captions text-left medium-down--text-center"></div> 3433 </div> 3434 </div> 3435 </div> 3436 </div></div></div> 3437</hero-carousel> 3438
3439<script src="//www.glowrecipe.com/cdn/shop/t/1677/assets/component_hero_carousel.js?v=109417005168941335531788493416 3440" defer="defer"></script>
3440 3441 3442 3443<style> #shopify-section-template--20367591211123__hero_carousel_C3tLVD {background: white;} </style></section><div id="shopify-section-template--20367591211123__custom_html_BNLnaV" class="shopify-section"><style> 3444.serum-banner.hero-carousel { 3445 max-width: min(1300px, calc(100% - var(--container-padding) * 2)); 3446 margin: auto; 3447 border-radius: 16px; 3448 border: 2px black solid; 3449 } 3450 .serum-banner.hero-carousel .title { 3451 font-weight: 600; 3452 font-size: 45px; 3453 3454 } 3455 .serum-banner.hero-carousel .text { 3456 font-size: 18px; 3457 } 3458 .serum-banner.hero-carousel .text p:not(:last-child) { 3459 margin-bottom: 0.8em; 3460 } 3461 .serum-banner.hero-carousel .epigraph { 3462 font-weight: 400; 3463 font-size: 70px; 3464 font-style: italic; 3465 line-height: 77px; 3466 font-family: "Playfair Display", serif; 3467 margin-bottom: 15px; 3468 color: white; 3469 text-transform: unset; 3470 } 3471 3472 @media all and (min-width: 901px) { 3473 .serum-banner.hero-carousel { 3474 --height-desktop: 720px; 3475 } 3476 } 3477 3478 @media (max-width: 900px){ 3479 .serum-banner { 3480 margin-left: var(--container-padding); 3481 margin-right: var(--container-padding); 3482 } 3483 3484 .serum-banner.hero-carousel .title { 3485 font-size: 15px; 3486 font-weight: 400; 3487 margin-bottom: 15px; 3488 3489 } 3490 3491 .serum-banner.hero-carousel .text { 3492 font-size: 14px; 3493 line-height: 16.8px; 3494 } 3495 3496 .serum-banner.hero-carousel .epigraph { 3497 font-size: 35px; 3498 line-height: 38.5px; 3499 margin-bottom: 18px; 3500 } 3501 3502 .serum-banner.hero-carousel .bg-img.medium-down--show{ 3503 background-position: right 50% bottom 20%; 3504 } 3505 } 3506</style> 3507 3508 3509</div> 3510 3511 </main> 3512 <div id="shopify-section-offers_panel" class="shopify-section offers-panel-section"> 3513 3514 3515 3516<style> #shopify-section-offers_panel { font-size: 16px; } #shopify-section-offers_panel { --header-padding: 0.75em; --panel-padding: 1em; --card-padding: 1em; --header-bg-color: #fcf5fa; --header-border-color: #000000; --header-title-color: #000000; --header-text-color: #000000; --panel-bg-color: #ffffff; --overlay-color: rgba(0, 0, 0, 0.32); }#shopify-section-offers_panel .block-card_fr4xkQ { --card-bg-color: #fcf5fa; --card-title-color: #000000; --card-content-color: #000000; --card-discount-color: #000000; --card-btn-bg-color: #ffffff; --card-btn-text-color: #000000; --card-btn-border-color: #000000; --card-img-border-color: #000000; --card-img-border-radius: 1em; --card-title-font-size: 1.5em; --card-content-font-size: 0.875em; --card-discount-font-size: 2em; }#shopify-section-offers_panel .block-card_nm6y3b { --card-bg-color: #fcf5fa; --card-title-color: #000000; --card-content-color: #000000; --card-discount-color: #000000; --card-btn-bg-color: #ffffff; --card-btn-text-color: #000000; --card-btn-border-color: #000000; --card-img-border-color: #000000; --card-img-border-radius: 1em; --card-title-font-size: 1.5em; --card-content-font-size: 0.875em; --card-discount-font-size: 2em; }#shopify-section-offers_panel .block-card_pnNE97 { --card-bg-color: #fcf5fa; --card-title-color: #000000; --card-content-color: #000000; --card-discount-color: #000000; --card-btn-bg-color: #ffffff; --card-btn-text-color: #000000; --card-btn-border-color: #000000; --card-img-border-color: #000000; --card-img-border-radius: 1em; --card-title-font-size: 1em; --card-content-font-size: 0.875em; --card-discount-font-size: 1em; }#shopify-section-offers_panel .block-card_7CznDa { --card-bg-color: #fcdef6; --card-title-color: #000000; --card-content-color: #000000; --card-discount-color: #000000; --card-btn-bg-color: #ffffff; --card-btn-text-color: #000000; --card-btn-border-color: #000000; --card-img-border-color: #000000; --card-img-border-radius: 1em; --card-title-font-size: 1em; --card-content-font-size: 0.875em; --card-discount-font-size: 1em; }@media all and (max-width: 600px) { #shopify-section-offers_panel { --header-padding: 0.5em; --panel-padding: 1em; --card-padding: 1em; }#shopify-section-offers_panel .block-card_fr4xkQ { --card-title-font-size: 1.125em; --card-content-font-size: 0.75em; --card-discount-font-size: 1.875em; }#shopify-section-offers_panel .block-card_nm6y3b { --card-title-font-size: 1.125em; --card-content-font-size: 0.75em; --card-discount-font-size: 1.875em; }#shopify-section-offers_panel .block-card_pnNE97 { --card-title-font-size: 0.875em; --card-content-font-size: 0.675em; --card-discount-font-size: 0.875em; }#shopify-section-offers_panel .block-card_7CznDa { --card-title-font-size: 0.875em; --card-content-font-size: 0.675em; --card-discount-font-size: 0.875em; }} </style><link href="//www.glowrecipe.com/cdn/shop/t/1677/assets/offers_panel.css?v=77681649111440138591788493545" rel="stylesheet" type="text/css" media="all" />
3517<script src="//www.glowrecipe.com/cdn/shop/t/1677/assets/component_carousel.js?v=161289233769878875961788493545" defer="defer"></script>
3517 3518 3519<div class="offers-panel " data-expand > 3520 3521 <div class="offers-panel-wrapper flex direction-column"> 3522 <div class="header flex justify-content-between" data-expand-trigger> 3523 <div class="text-wrapper flex direction-column flex-1"> 3524 <div class="main-title">Today's Offers</div> 3525 <div class="indicator">4 available</div> 3526 </div> 3527 <button type="button animation" class="expander" aria-label="Toggle offers panel"> 3528 <svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 3529 <path d="M19 9.5L12 16.5L5 9.5" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 3530 </svg> 3531 </button> 3532 </div> 3533 <div class="panel ease-animation" > 3534 <div class="cards-wrapper one-whole expandable" data-expand-content> 3535 <component-carousel data-carousel-mode="free-snap" data-carousel-loop="false" data-carousel-autoplay="false" data-carousel-automove="0" data-carousel-centered-desktop="" data-carousel-spacing-desktop="16" data-slides-per-view-desktop="3" data-carousel-centered-tablet="" data-carousel-spacing-tablet="16" data-slides-per-view-tablet="1.75" data-carousel-centered-mobile="" data-carousel-spacing-mobile="16" data-slides-per-view-mobile="1.1"> 3536 <div class="keen"> 3537 <div class="keen-slider"> 3538 3539 3540 <div class="card keen-slider-slide flex direction-column block-card_fr4xkQ"> 3541 <div class="card-wrapper flex"> 3542 <div class="flex direction-column"> 3543 <div class="card-text-wrapper flex direction-column text-center"> 3544 3545 <div class="card-title"> 3546 3547 Blur The Rules 3548 3549 </div> 3550 3551 3552 <div class="card-content"><p>Meet the new generation of lip care: Vegan PDRN Lip Blur Balm.</p></div> 3553 3554 3555 3556 3557 3558 3559 3560 <a class="btn v2 " href="/products/pdrn-tinted-soft-matte-lip-blur-balm" >Shop Now</a> 3561 <span class="hide">Applied!</span> 3562 3563 3564 </div> 3565 </div> 3566 <div class="card-image-wrapper"><img class="img lazyload" src="//www.glowrecipe.com/cdn/shop/t/1677/assets/placeholder.png?v=1593909494867914621788493478" alt="" data-sizes="auto" data-srcset="//www.glowrecipe.com/cdn/shop/files/8_10_LIP_BLUR_TEASER_OFFERS_180x.jpg?v=1788484636 180w 225h,//www.glowrecipe.com/cdn/shop/files/8_10_LIP_BLUR_TEASER_OFFERS_360x.jpg?v=1788484636 360w 450h,//www.glowrecipe.com/cdn/shop/files/8_10_LIP_BLUR_TEASER_OFFERS_600x.jpg?v=1788484636 600w 750h,//www.glowrecipe.com/cdn/shop/files/8_10_LIP_BLUR_TEASER_OFFERS.jpg?v=1788484636&width=600 600w 750h" /> 3567 </div> 3568 </div> 3569 3570 </div> 3571 3572 3573 <div class="card keen-slider-slide flex direction-column block-card_nm6y3b"> 3574 <div class="card-wrapper flex"> 3575 <div class="flex direction-column"> 3576 <div class="card-text-wrapper flex direction-column text-center"> 3577 3578 <div class="card-title"> 3579 3580 Glow To Go Travel Kit 3581 3582 </div> 3583 3584 3585 <div class="card-content"><p>This 8-piece kit features your daily skin essentials inside our new exclusive pink neoprene pouch. </p></div> 3586 3587 3588 3589 3590 3591 3592 3593 <a class="btn v2 " href="/products/glow-to-go-travel-kit" >Shop The Kit</a>
3594 <span class="hide">Applied!</span> 3595 3596 3597 </div> 3598 </div> 3599 <div class="card-image-wrapper"><img class="img lazyload" src="//www.glowrecipe.com/cdn/shop/t/1677/assets/placeholder.png?v=1593909494867914621788493478" alt="" data-sizes="auto" data-srcset="//www.glowrecipe.com/cdn/shop/files/7_1_SUMMER_TRAVEL_KIT_PDP_2_180x.jpg?v=1782959513 180w 180h,//www.glowrecipe.com/cdn/shop/files/7_1_SUMMER_TRAVEL_KIT_PDP_2_360x.jpg?v=1782959513 360w 360h,//www.glowrecipe.com/cdn/shop/files/7_1_SUMMER_TRAVEL_KIT_PDP_2_600x.jpg?v=1782959513 600w 600h,//www.glowrecipe.com/cdn/shop/files/7_1_SUMMER_TRAVEL_KIT_PDP_2.jpg?v=1782959513&width=600 600w 600h" /> 3600 </div> 3601 </div> 3602 3603 </div> 3604 3605 3606 <div class="card keen-slider-slide flex direction-column block-card_pnNE97"> 3607 <div class="card-wrapper flex"> 3608 <div class="flex direction-column"> 3609 <div class="card-text-wrapper flex direction-column text-center"> 3610 3611 <div class="card-title"> 3612 3613 Free Shipping When You Sign Up For Email 3614 3615 </div> 3616 3617 3618 <div class="card-content"><p>Join the Glow Gang to get free shipping on your first order!</p></div> 3619 3620 3621 3622 3623 3624 3625 3626 <a class="btn v2 " href="https://www.glowrecipe.com/pages/email-formhttps://www.glowrecipe.com/pages/email-form" >Sign Up</a> 3627 <span class="hide">Applied!</span> 3628 3629 3630 </div> 3631 </div> 3632 <div class="card-image-wrapper"><img class="img lazyload" src="//www.glowrecipe.com/cdn/shop/t/1677/assets/placeholder.png?v=1593909494867914621788493478" alt="" data-sizes="auto" data-srcset="//www.glowrecipe.com/cdn/shop/files/BANANAKIT_INFOGRAPHIC_11_2000x2000_f3481849-bc9d-49c4-89e2-db2d8af41839_180x.png?v=1782187508 180w 180h,//www.glowrecipe.com/cdn/shop/files/BANANAKIT_INFOGRAPHIC_11_2000x2000_f3481849-bc9d-49c4-89e2-db2d8af41839_360x.png?v=1782187508 360w 360h,//www.glowrecipe.com/cdn/shop/files/BANANAKIT_INFOGRAPHIC_11_2000x2000_f3481849-bc9d-49c4-89e2-db2d8af41839_600x.png?v=1782187508 600w 600h,//www.glowrecipe.com/cdn/shop/files/BANANAKIT_INFOGRAPHIC_11_2000x2000_f3481849-bc9d-49c4-89e2-db2d8af41839.png?v=1782187508&width=600 600w 600h" /> 3633 </div> 3634 </div> 3635 3636 </div> 3637 3638 3639 <div class="card keen-slider-slide flex direction-column block-card_7CznDa"> 3640 <div class="card-wrapper flex"> 3641 <div class="flex direction-column"> 3642 <div class="card-text-wrapper flex direction-column text-center"> 3643 3644 <div class="card-title"> 3645 3646 Free Shipping When You Sign Up For SMS 3647 3648 </div> 3649 3650 3651 <div class="card-content"><p>Sign up for SMS to get free shipping, early access & exclusive perks!</p></div> 3652 3653 3654 3655 3656 3657 3658 3659 <a class="btn v2 " href="/pages/glowsubscribe-subscribe-page" >Sign Up</a> 3660 <span class="hide">Applied!</span> 3661 3662 3663 <div class="disclaimer"><p><em>*Automatically applied on qualifying orders</em></p></div> 3664 3665 </div> 3666 </div> 3667 <div class="card-image-wrapper"><img class="img lazyload" src="//www.glowrecipe.com/cdn/shop/t/1677/assets/placeholder.png?v=1593909494867914621788493478" alt="" data-sizes="auto" data-srcset="//www.glowrecipe.com/cdn/shop/files/OFFERS_MODULE_SMS_1_882b4bb3-a4e5-4bc1-95fe-a48a1649f34a_180x.png?v=1748574624 180w 225h,//www.glowrecipe.com/cdn/shop/files/OFFERS_MODULE_SMS_1_882b4bb3-a4e5-4bc1-95fe-a48a1649f34a_360x.png?v=1748574624 360w 450h,//www.glowrecipe.com/cdn/shop/files/OFFERS_MODULE_SMS_1_882b4bb3-a4e5-4bc1-95fe-a48a1649f34a_600x.png?v=1748574624 600w 750h,//www.glowrecipe.com/cdn/shop/files/OFFERS_MODULE_SMS_1_882b4bb3-a4e5-4bc1-95fe-a48a1649f34a.png?v=1748574624&width=600 600w 750h" /> 3668 </div> 3669 </div> 3670 3671 </div> 3672 3673 </div> 3674 3675 3676 <div class="keen-arrows medium-down--hide"> 3677 <button class="keen-arrow prev"> 3678 <svg width="19" height="19" viewBox="0 0 19 19" fill="none" xmlns="http://www.w3.org/2000/svg"> 3679 <path d="M11.75 14.5129L6.5 9.26294L11.75 4.01294" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 3680 </svg> 3681 </button> 3682 <button class="keen-arrow next"> 3683 <svg width="19" height="19" viewBox="0 0 19 19" fill="none" xmlns="http://www.w3.org/2000/svg"> 3684 <path d="M7.25 4.01294L12.5 9.26294L7.25 14.5129" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 3685 </svg> 3686 </button> 3687 </div> 3688 3689 </div>
3690 </component-carousel> 3691 </div> 3692 </div> 3693 </div> 3694 <div class="overlay ease-animation" data-expand-trigger></div> 3695</div> 3696 3697 3698
3699<script type="application/json"> 3700 3701["\/","\/collections\/all","\/collections\/bestsellers","\/pages\/offers","\/collections\/kits","pages\/glow-rewards","\/collections\/minis","\/collections\/moisturizers","\/collections\/serums-essences","\/collections\/mists","\/collections\/niacinamide","\/collections\/watermelon","\/collections\/breakouts-acne","\/collections\/oil-control-acne","\/collections\/fine-lines-wrinkles","\/collections\/dryness","\/collections\/korean-skincare-uneven-skintone-dark-spots","\/collections\/dullness-uneven-tone","\/collections\/korean-skincare-sensitive","\/collections\/cleansers","\/collections\/eye-care","\/pages\/glow-hues","\/collections\/k-beauty-routine-masks-and-sheet-masks","\/collections\/acids","\/collections\/ceramides","\/collections\/enzymes","\/collections\/hyaluronic-acid","\/collections\/niacinamide","\/collections\/retinol","\/collections\/vitamin-c","\/collections\/avocado","\/collections\/blackberry","\/collections\/cloudberry","\/collections\/strawberry"]</script>
3701 3702 3703
3703<script type="module"> 3704 var section = document.querySelector('#shopify-section-offers_panel'); 3705 var wrapper = section.querySelector('.offers-panel'); 3706 var availableUrls = Array.from(JSON.parse(section.querySelector('[type="application/json"]').textContent)); 3707 if(availableUrls.includes(location.pathname)){ 3708 wrapper.style.display = 'block' 3709 } 3710 </script>
3710 3711
3712<script src="//www.glowrecipe.com/cdn/shop/t/1677/assets/offers_panel_main.js?v=36478793919901467671788493545" defer="defer"></script>
3712 3713 3714 3715 3716<style> #shopify-section-offers_panel .card:nth-child(2) .card-content, #shopify-section-offers_panel .card:nth-child(2) .card-title {max-width: 150px; margin-left: auto; margin-right: auto; width: 100%;} </style></div> 3717 <footer role="contentinfo"> 3718
3718<script type="text/javascript"> 3719 // This line is a workaround to fix an issue with the order tracking app 3720 // this app creates a window.fetch function that overrides the native browser fetch() function, 3721 // which creates issues on all the base theme calls to fetch 3722 // This also corresponds to a change in the $s library call to fetch() which now calls window.fetchNaative 3723 window.fetchNative = fetch; 3724 3725 </script>
3725 3726 3727
3727<script>
vendor: 392 bytes, lines 3727-3729
3727 !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','//connect.facebook.net/en_US/fbevents.js'); 3728 3729 fbq('init', '
37292207408626138134
vendor: 34 bytes, lines 3729-3732
3729'); 3730 fbq('track', 'PageView'); 3731 3732
3732</script>
3732 3733 <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=2207408626138134&ev=PageView&noscript=1" /></noscript> 3734
3734<script type="text/javascript"> 3735 3736 </script>
3736 3737 3738 3739
3739<script type="text/javascript"> !function(e){if(!window.pintrk){window.pintrk=function(){window.pintrk.queue.push(Array.prototype.slice.call(arguments))};var n=window.pintrk;n.queue=[],n.version="3.0";var t=document.createElement("script");t.async=!0,t.src=e;var r=document.getElementsByTagName("script")[0];r.parentNode.insertBefore(t,r)}}("https://s.pinimg.com/ct/core.js"); 3740 pintrk('load','2613179352395', { em: ' d41d8cd98f00b204e9800998ecf8427e', }); 3741 pintrk('page'); 3742 </script>
3742 3743 <noscript><img height="1" width="1" style="display:none;" alt="" src="https://ct.pinterest.com/v3/?tid=2613179352395&noscript=1" /></noscript> 3744 3745 3746
3747<script type="text/javascript"> 3748 3749</script>
3749 3750 3751 3752
3752<script type="text/javascript"> 3753 /* TraceAd SiteTag (https://tracead.com) */ 3754 (function() { 3755 var tracead = document.createElement('script'); 3756 tracead.src = 'https://tracead.com/sT3o' + (typeof jQuery==='undefined'?'':'?ljq=1'); 3757 tracead.setAttribute('async', 'true'); 3758 var p = document.getElementsByTagName('script')[0]; 3759 p.parentNode.insertBefore(tracead, p); 3760 })(); 3761 </script>
3761 3762 3763 3764
3764<script> 3765DEBUG_KEY = "__olDebug"; 3766 3767if (typeof olCreateCookie == 'undefined') { 3768 var olCreateCookie = function (name, value, days) { 3769 if (days) { 3770 var date = new Date(); 3771 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 3772 var expires = "; expires=" + date.toGMTString(); 3773 } 3774 else var expires = ""; 3775 document.cookie = name + "=" + JSON.stringify(value) + expires + "; path=/; SameSite=None; Secure"; 3776 }; 3777} 3778 3779if (typeof olReadCookie == 'undefined') { 3780 var olReadCookie = function (name) { 3781 var nameEQ = name + "="; 3782 var ca = document.cookie.split(';'); 3783 // the cookie is being created, there is a problem with the following logic matching the name 3784 for (var i = 0; i < ca.length; i++) { 3785 var c = ca[i]; 3786 while (c.charAt(0) == ' ') c = c.substring(1, c.length); 3787 if (c.indexOf(nameEQ) == 0) return JSON.parse(c.substring(nameEQ.length, c.length)); 3788 } 3789 return; 3790 }; 3791} 3792 3793if (typeof getOlCacheBuster == 'undefined') { 3794 var getOlCacheBuster = function() { 3795 if ( typeof getOlCacheBuster.olCacheBuster == 'undefined') { 3796 scriptsArray = Array.prototype.slice.call(document.getElementsByTagName("script")); 3797 scriptsArray = scriptsArray.concat(Array.prototype.slice.call(document.getElementsByTagName("noscript"))); 3798 for (var i=0; i
3798<scriptsArray.length; i++) { 3799 cacheBusterArray = scriptsArray[i].innerHTML.match(/orderlogicapp.com\\\/embedded_js\\\/production_base.js\?(\d+)/); 3800 if (cacheBusterArray == null) { 3801 cacheBusterString = scriptsArray[i].getAttribute('src'); 3802 if (cacheBusterString != null) { 3803 cacheBusterArray = cacheBusterString.match(/orderlogicapp.com\/embedded_js\/production_base.js\?(\d+)/); 3804 } 3805 } 3806 if (cacheBusterArray != null) { 3807 getOlCacheBuster.olCacheBuster = cacheBusterArray[1]; 3808 break; 3809 } 3810 } 3811 } 3812 return getOlCacheBuster.olCacheBuster; 3813 } 3814} 3815 3816if (typeof ol_hostname == 'undefined') { 3817 var ol_hostname = 'www.orderlogicapp.com'; 3818 var ol_debug = olReadCookie(DEBUG_KEY); 3819 if (window.location.search.replace("?", "").substring(0, 7) == 'olDebug') { 3820 ol_debug = window.location.search.replace("?olDebug=", ""); 3821 if (ol_debug == 'false') ol_debug = false; 3822 olCreateCookie(DEBUG_KEY, ol_debug, null); 3823 } 3824} 3825 3826var ol_cachebuster = getOlCacheBuster(); 3827if (( typeof ol_cachebuster != 'undefined') || (ol_debug)) { 3828 if (typeof ol_script == 'undefined') { 3829 var ol_script = document.createElement('script'); 3830 ol_script.type = 'text/javascript'; 3831 ol_script.async = true; 3832 ol_script.src = "https://" + (ol_debug ? 'dev.orderlogicapp.com' : ol_hostname) + "/embedded_js/store.js?" + ol_cachebuster; 3833 document.head.appendChild(ol_script); 3834 } 3835} 3836 3837 3838 3839olProductData = { 3840} 3841 3842 3843</script>
3843 3844
3845<script type="module"> 3846 var elTriggerTest = document.querySelector('.ab-trigger-test'); 3847 if (elTriggerTest) { 3848 elTriggerTest.classList.add('trigger-cart'); 3849 document.querySelectorAll('.trigger-cart').forEach((element)=>{ 3850 element.addEventListener('click', function(e){ 3851 e.preventDefault(); 3852 window.SideCart ? window.SideCart.showSideCart(true): false; 3853 }) 3854 }); 3855 } 3856 </script>
3856 3857 3858
3858<script>
vendor: 343 bytes, lines 3858-3863
3858 3859 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 3860 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 3861 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 3862 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 3863 })(window,document,'script','dataLayer','
3863GTM-KLMDWXZ
vendor: 7 bytes, lines 3863-3864
3863'); 3864
3864</script>
3864 3865 3866 3867<div id="shopify-section-footer" class="shopify-section"><style> 3868 #footer { 3869 --footer-top-padding-desktop: 4em 0; 3870 --footer-top-padding-mobile: 3em 0; 3871 --footer-top-bg-color: rgba(0,0,0,0); 3872 --footer-top-text-color: #000000; 3873 --footer-top-border-color: #c7c7c7; 3874 --footer-top-linklist-columns-desktop: 1; 3875 --footer-top-linklist-columns-mobile: 1; 3876 --footer-logo-max-width-desktop: 12em; 3877 --footer-logo-max-width-mobile: 10em; 3878 --footer-bottom-padding-desktop: 1em 0; 3879 --footer-bottom-padding-mobile: 1em 0; 3880 --footer-bottom-bg-color: rgba(0,0,0,0); 3881 --footer-bottom-text-color: #000000; 3882 --footer-bottom-border-color: transparent; 3883 } 3884</style> 3885 3886<div id="footer"> 3887 <div class="top"> 3888 <div class="wrapper"> 3889 <div class="grid"><div class="grid-item one-fifth medium--one-half small--one-whole"> 3890 <div class="links"> 3891 <h4>ABOUT</h4><a href="/pages/about-us" >About Us</a><a href="/pages/careers" >Careers</a><a href="/pages/formulations" >Formulation Standards</a><a href="#" class="Link Link--primary"><span data-acsb="trigger">Accessibility</span></a></div> 3892 </div> 3893 <div class="grid-item one-fifth medium--one-half small--one-whole"> 3894 <div class="links"> 3895 <h4>MY GLOW</h4><a href="/account" >My Account</a><a href="/pages/glow-rewards" >Club Glow Rewards</a><a href="https://www.glowrecipe.com/a/gc/gift-card/" >Gift Cards</a><a href="/pages/glow-rewards#scroller-give15get15" >Give $15, Get $15</a></div> 3896 </div> 3897 <div class="grid-item one-fifth medium-down--one-half small--one-whole"> 3898 <div class="links"> 3899 <h4>GLOW SERVICES</h4><a href="https://www.glowrecipe.com/pages/find-your-glow-recipe" >Skin Quiz</a><a href="/pages/glow-101" >Glow 101</a></div> 3900 </div> 3901 <div class="grid-item one-fifth medium-down--one-half small--one-whole"> 3902 <div class="links"> 3903 <h4>SUPPORT</h4><a href="/pages/contact-us" >Contact Us</a><a href="/pages/return-policy" >Returns & Exchanges</a><a href="/pages/shipping" >Shipping</a><a href="https://aramara-beauty.myshopify.com/apps/redo/returns-portal/login?withdraw=true" >EU Withdrawal</a><a href="https://help.glowrecipe.com/" >FAQs</a><a href="https://cdn.shopify.com/s/files/1/0543/8301/files/Italian_Recycling_Page.pdf?v=1707160812" target="_blank">Environmental Labeling</a></div> 3904 </div> 3905 <div class="grid-item one-fifth medium--one-half small--one-whole"> 3906 <div class="mailing-list"> 3907 <div id="footer-new-copy"><div class="title heading-font">Unlock Your Welcome Offer</div><div class="mailing-text"><p>Sign up for email to unlock a surprise welcome offer</p></div><div class="klaviyo-form-WAWQr4"></div> 3908 </div><div class="title heading-font">Connect With Us</div><div class="social-links flex align-items-center justify-content-center"><a target="_blank" href="https://www.instagram.com/glowrecipe/" aria-label="Follow us on Instagram" title="Opens new window" rel="noopener"> 3909 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 3910 viewBox="0 0 32 30.5" style="enable-background:new 0 0 32 30.5;" xml:space="preserve"> 3911<path id="Page-1" d="M22.6,30.5H9.4c-5.2,0-9.4-4.2-9.4-9.4V9.4C0,4.2,4.2,0,9.4,0h13.2C27.8,0,32,4.2,32,9.4v11.7 3912 C32,26.3,27.8,30.5,22.6,30.5z M9.4,2.2c-4,0-7.3,3.3-7.3,7.3v11.7c0,4,3.3,7.3,7.3,7.3h13.2c4,0,7.3-3.3,7.3-7.3V9.4 3913 c0-4-3.3-7.3-7.3-7.3H9.4z M16.1,23.8c-4.3,0-7.8-3.5-7.8-7.8c0-4.3,3.5-7.8,7.8-7.8c4.3,0,7.8,3.5,7.8,7.8 3914 C23.8,20.4,20.4,23.8,16.1,23.8z M16.1,10.5c-3.1,0-5.6,2.5-5.6,5.6c0,3.1,2.5,5.6,5.6,5.6c3.1,0,5.6-2.5,5.6-5.6 3915 C21.7,13,19.2,10.5,16.1,10.5z M25.1,9.7c-1.4,0-2.5-1.1-2.5-2.5s1.1-2.5,2.5-2.5c1.4,0,2.5,1.1,2.5,2.5S26.5,9.7,25.1,9.7z 3916 M25.1,6.4c-0.5,0-0.8,0.4-0.8,0.8s0.4,0.8,0.8,0.8S26,7.7,26,7.2S25.6,6.4,25.1,6.4z"/> 3917</svg> 3918 </a><a target="_blank" href="https://www.facebook.com/glowrecipe/" aria-label="Follow us on Facebook" title="Opens new window" rel="noopener"> 3919 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 3920 viewBox="0 0 15.8 32" style="enable-background:new 0 0 15.8 32;" xml:space="preserve"> 3921<path id="Page-1" d="M9.3,32c0.6,0,1-0.2,1.5-0.6c0.4-0.4,0.6-0.9,0.6-1.5V16.5h2.4c0.5,0,0.9-0.1,1.3-0.4c0.4-0.3,0.6-0.6,0.7-1.1 3922 l0.7-3.1c0.1-0.3,0.1-0.6,0.1-1c-0.1-0.3-0.2-0.6-0.4-0.9c-0.2-0.3-0.4-0.5-0.7-0.6c-0.3-0.1-0.6-0.2-0.9-0.2h-3.2v-2h2.1 3923 c0.6,0,1-0.2,1.5-0.6c0.4-0.4,0.6-0.9,0.6-1.5V2.1l0,0c0-0.6-0.2-1.1-0.6-1.5C14.5,0.2,14,0,13.5,0h-2.6c0,0-0.1,0-0.1,0l
3923-0.1,0l0,0 3924 l-0.1,0C10.2,0,9.7,0.1,9,0.2S7.7,0.6,7,1C6.3,1.4,5.7,2,5.1,2.9S4.1,5,4.1,6.6v2.7H2.1c-0.3,0-0.5,0.1-0.8,0.2S0.8,9.7,0.6,9.9 3925 c-0.2,0.2-0.3,0.4-0.5,0.7C0.1,10.8,0,11.1,0,11.4v3.1c0,0.6,0.2,1,0.6,1.5c0.4,0.4,0.9,0.6,1.5,0.6h2.1v13.4c0,0.6,0.2,1.1,0.6,1.5 3926 C5.1,31.8,5.6,32,6.2,32H9.3z M9.3,30H6.2V14.5H2.1v-3.1h4.1V6.6l0,0c0-2.1,0.6-3.4,1.9-3.8s2.1-0.7,2.5-0.7c0.1,0,0.1,0,0.1,0l0,0 3927 l0,0h2.7v3.1h-2.7c-0.7,0-1.2,0.2-1.3,0.6C9.4,6.2,9.3,6.5,9.3,6.5v4.9h5.2l-0.7,3.1H9.3V30z"/> 3928</svg> 3929 </a><a target="_blank" href="https://twitter.com/glowrecipe/" aria-label="Follow us on Twitter" title="Opens new window" rel="noopener"> 3930 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 3931 viewBox="0 0 32 26.1" style="enable-background:new 0 0 32 26.1;" xml:space="preserve"> 3932<path id="Page-1" d="M19.4,13.8L30.1,1.5h-4.9l-8.1,9.3L10.1,1.5H0l12.1,15.9L.6,30.5h4.9l8.8-10.1,7.7,10.1h9.9l-12.6-16.7ZM5.7,4.3h2.9l17.6,23.3h-2.7L5.7,4.3Z" 3933</svg> 3934 </a><a target="_blank" href="https://ar.pinterest.com/glowrecipe/_created/" aria-label="Follow us on Pinterest" title="Opens new window" rel="noopener"> 3935 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 3936 viewBox="0 0 26 31.6" style="enable-background:new 0 0 26 31.6;" xml:space="preserve"> 3937<path id="Page-1" d="M5.3,32l0.9-0.4c0.5-0.2,0.8-0.5,1.1-0.9c0.3-0.4,0.5-0.7,0.7-1.1l0.1-0.1l0,0l0.1-0.1c0-0.1,0.1-0.1,0.1-0.2 3938 C9,28.2,9.5,27,9.9,25.8c0.4-1.2,0.8-2.5,1.1-3.7c0.7,0.6,1.5,0.9,2.3,1.1c0.8,0.2,1.7,0.2,2.8,0.1c1.5-0.2,2.8-0.6,3.9-1.4 3939 c1.1-0.8,2.1-1.8,2.8-3c0.7-1.2,1.3-2.5,1.7-3.9s0.5-2.8,0.5-4.3c0-1.5-0.4-3-1-4.3S22.6,4,21.5,3c-1.1-1-2.3-1.7-3.8-2.2 3940 c-1.5-0.5-3-0.8-4.8-0.8c-0.4,0-0.7,0-1.1,0S11,0.1,10.6,0.2C9.3,0.4,8,0.7,6.8,1.3S4.6,2.6,3.6,3.5s-1.7,1.9-2.3,3s-1,2.3-1.2,3.6 3941 C0,10.9,0,11.9,0.1,12.8s0.3,1.9,0.7,2.7s0.9,1.6,1.5,2.2c0.6,0.6,1.5,1.1,2.4,1.3l0.6,0.1l0.3-0.5c0-0.1,0.2-0.4,0.6-1 3942 s0.5-1.2,0.4-1.8c0-0.3-0.1-0.6-0.3-0.7s-0.3-0.3-0.4-0.4c0,0,0,0-0.1-0.1c0,0,0,0,0,0c-0.3-0.5-0.5-1.1-0.6-1.8 3943 C5,12,5,11.3,5.1,10.6C5.4,9,6.2,7.6,7.5,6.5s2.8-1.7,4.6-1.9c0.1,0,0.3,0,0.4,0h0.3l0,0c1.8,0,3.3,0.5,4.5,1.5c1.1,1,1.8,2.4,1.8,4 3944 c0.1,1.6-0.1,3.1-0.6,4.5c-0.5,1.4-1.1,2.5-2,3.2L16.4,18c-0.2,0.2-0.4,0.3-0.6,0.5c-0.2,0.1-0.4,0.2-0.8,0.3c-0.1,0-0.2,0-0.3,0 3945 c-0.1,0-0.2,0-0.3,0c-0.7,0-1.2-0.2-1.5-0.5c-0.4-0.4-0.5-0.8-0.6-1.2c0-0.5,0.1-1,0.2-1.5c0.2-0.5,0.3-1.1,0.6-1.7 3946 c0.2-0.7,0.5-1.4,0.7-2.1c0.2-0.7,0.3-1.5,0.2-2.2c-0.1-0.8-0.5-1.4-1.1-2c-0.6-0.5-1.3-0.8-2.1-0.8c-0.2,0-0.4,0-0.6,0.1 3947 c-0.2,0-0.4,0.1-0.6,0.2C8.1,7.5,7.3,8.6,7,10.2c-0.3,1.6-0.2,3.2,0.3,4.7c-0.1,0.6-0.3,1.2-0.4,1.8c-0.2,0.6-0.3,1.2-0.5,1.8 3948 c-0.3,1-0.5,1.9-0.8,2.9c-0.2,1-0.4,2-0.6,3c-0.1,1-0.2,2.1-0.2,3.1c0,1.1,0.1,2.2,0.3,3.3L5.3,32z M6.5,29c-0.1-1.8,0-3.5,0.3-5.2 3949 C7.2,22.2,7.6,20.6,8,19c0.2-0.6,0.4-1.3,0.5-2c0.2-0.7,0.3-1.3,0.5-2l0-0.2l-0.1-0.2c-0.4-1.2-0.6-2.4-0.4-3.6 3950 c0.2-1.2,0.7-2,1.7-2.4c0.1,0,0.2-0.1,0.3-0.1s0.2,0,0.3,0c0.4,0,0.7,0.1,1,0.4c0.3,0.2,0.5,0.6,0.5,0.9c0.1,0.6,0,1.1-0.1,1.7 3951 c-0.2,0.6-0.4,1.2-0.6,1.8c-0.2,0.6-0.4,1.2-0.6,1.9s-0.3,1.3-0.2,1.9c0,0.8,0.4,1.6,1,2.3c0.7,0.7,1.6,1.1,2.7,1.1 3952 c0.1,0,0.3,0,0.4,0c0.1,0,0.2,0,0.4,0c0.6-0.1,1-0.2,1.4-0.5c0.4-0.2,0.6-0.5,0.9-0.7l0.1-0.1c1.1-0.9,1.9-2.2,2.4-3.8 3953 s0.8-3.4,0.7-5.3c-0.1-1.1-0.3-2.2-0.8-3.1c-0.5-0.9-1.1-1.7-1.8-2.3c-0.8-0.6-1.7-1.1-2.7-1.4s-2.2-0.4-3.5-0.3 3954 c-1.1,0.1-2.1,0.3-3,0.7S7.1,4.6,6.4,5.2S5,6.6,4.5,7.5c-0.5,0.9-0.8,1.8-1,2.8c-0.2,0.9-0.2,1.8,0,2.7c0.2,0.9,0.4,1.7,0.9,2.4 3955 c0,0.1,0.1,0.2,0.1,0.2c0.1,0.1,0.1,0.1,0.1,0.2L4.7,16l0,0c0,0,0.1,0.1,0.1,0.1c0,0.1,0,0.3-0.1,0.5c-0.1,0.2-0.2,0.4-0.3,0.7 3956 c-1.2-0.5-2-1.5-2.4-2.9s-0.5-2.8-0.3-4.1c0.2-1.1,0.5-2.1,1-3.1s1.2-1.8,2-2.5s1.7-1.4,2.8-1.8s2.2-0.8,3.3-1c0.4,0,0.7-0.1,1-0.1 3957 c0.3,0,0.7,0,1,0c1.5,0,2.9,0.2,4.1,0.7s2.3,1.1,3.3,1.9S22,6,22.5,7.1s0.8,2.3,0.8,3.6c0,1.2-0.1,2.5-0.4,3.7 3958 c-0.3,1.2-0.8,2.4-1.4,3.4s-1.4,1.9-2.3,2.6c-0.9,0.7-2,1.1-3.2,1.2c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0c-0.9,0-1.6-0.2-2.2-0.5 3959 c-0.6-0.3-1.1-0.7-1.7-1.3L10,18.9l-0.3,1.5c-0.3,1.4-0.7,2.8-1.1,4.2c-0.4,1.4-1,2.7-1.7,3.8c0,0.1-0.1,0.2-0.1,0.2 3960 c-0.1,0.1-0.1,0.2-0.1,0.2C6.6,28.9,6.6,28.9,6.5,29C6.6,29,6.5,29,6.5,29z"/> 3961</svg> 3962 </a><a target="_blank" href="https://www.tiktok.com/@glowrecipe?" aria-label="Follow us on Ticktok" title="Opens new window" rel="noopener"> 3963 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 3964 viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
3965<path id="Group" transform="translate(1.000000, 1.000000)" d="M12.6,24.8c-3.5,0-6.4-2.9-6.4-6.4S9.1,12,12.6,12c0.1,0,0.2,0,0.3,0 3966 l0.7,0.1l0.1,0.8v3.7l-1.1-0.1c-1.1,0-2.1,0.9-2.1,2.1s0.9,2.1,2.1,2.1c1.2,0,2.2-0.9,2.2-2l0-13.6H19l0.1,0.7 3967 c0.2,2,1.8,3.5,3.8,3.7l0.7,0.1V13h-0.8l0.1,0.8c-1.4,0.1-2.8-0.2-3.8-1v5.6C19,21.9,16.2,24.8,12.6,24.8z M12.2,13.6 3968 c-2.4,0.2-4.3,2.3-4.3,4.8c0,2.6,2.2,4.8,4.8,4.8c2.6,0,4.8-2.1,4.8-4.8V8.2l1.5,2.2c0.7,1.1,1.8,1.7,3.1,1.8v-1.6 3969 c-2.2-0.4-3.9-2.1-4.4-4.3h-1.2l0,12.1c0,2-1.7,3.6-3.8,3.6c-2,0-3.7-1.6-3.7-3.7c0-1.9,1.4-3.4,3.2-3.6V13.6z M15,31 3970 C6.2,31-1,23.8-1,15C-1,6.2,6.2-1,15-1c8.8,0,16,7.2,16,16C31,23.8,23.8,31,15,31z M15,0.6C7.1,0.6,0.6,7.1,0.6,15 3971 c0,7.9,6.5,14.4,14.4,14.4c7.9,0,14.4-6.5,14.4-14.4C29.4,7.1,22.9,0.6,15,0.6z"/> 3972</svg> 3973 </a><a target="_blank" href="https://www.youtube.com/glowrecipe" aria-label="Follow us on Youtube" title="Opens new window" rel="noopener"> 3974 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 3975 viewBox="0 0 32 23" style="enable-background:new 0 0 32 23;" xml:space="preserve"> 3976<g> 3977 <path id="Page-1" d="M16,23c2.5,0,4.6,0,6.2-0.1c1.6-0.1,2.9-0.2,3.9-0.4c1-0.1,1.7-0.3,2.2-0.5c0.5-0.2,0.8-0.3,1-0.5 3978 c0.6-0.4,1-1.1,1.4-1.9c0.3-0.9,0.6-1.8,0.8-2.7s0.3-1.9,0.3-2.9c0.1-1,0.1-1.7,0.1-2.3c0-0.5-0.1-1.2-0.1-2.2s-0.2-2-0.3-3 3979 c-0.2-1.1-0.4-2-0.8-3s-0.8-1.6-1.4-2c-0.2-0.2-0.6-0.3-1-0.5s-1.2-0.3-2.2-0.5c-1-0.1-2.3-0.3-3.9-0.4C20.6,0,18.5,0,16,0 3980 C10.6,0,7.1,0.2,5.6,0.5S3.3,1.1,3.1,1.3C2.4,1.7,1.8,2.4,1.4,3.4S0.7,5.4,0.5,6.5S0.2,8.7,0.1,9.7S0,11.3,0,11.7 3981 c0,0.5,0.1,1.2,0.1,2.2s0.2,2,0.4,3s0.5,2,0.9,2.9c0.4,0.9,0.9,1.6,1.6,2c0.3,0.1,1.1,0.4,2.6,0.7C7.1,22.8,10.6,23,16,23z 3982 M16.8,21.1l-0.8,0c-4.9,0-8.1-0.1-9.6-0.4S4,20.2,3.8,20.1c-0.5-0.3-0.9-1.2-1.4-2.7C2,16,1.8,14,1.7,11.6c0-2.4,0.3-4.4,0.7-6 3983 S3.4,3,3.9,2.7c0.2-0.1,1-0.3,2.6-0.6c1.4-0.3,4.4-0.4,8.8-0.4l0.8,0c5,0,8.3,0.2,9.8,0.5c1.5,0.3,2.4,0.5,2.6,0.7 3984 c0.4,0.3,0.9,1.2,1.2,2.8c0.4,1.6,0.6,3.5,0.6,6c0,2.5-0.2,4.4-0.6,5.8c-0.4,1.4-0.8,2.3-1.2,2.6c-0.2,0.1-1,0.3-2.6,0.6 3985 C24.4,20.9,21.4,21.1,16.8,21.1z M12.7,17.1c0.1,0,0.1,0,0.2,0s0.1-0.1,0.2-0.1l7.8-4.8c0.1-0.1,0.3-0.2,0.3-0.3 3986 c0.1-0.1,0.1-0.3,0.1-0.4c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3l-7.8-4.8c-0.1-0.1-0.3-0.1-0.4-0.1s-0.3,0-0.4,0.1 3987 C12.1,6,12,6.1,12,6.2s-0.1,0.3-0.1,0.4v9.6c0,0.2,0,0.3,0.1,0.4c0.1,0.1,0.2,0.2,0.3,0.3c0.1,0,0.1,0.1,0.2,0.1 3988 C12.6,17.1,12.6,17.1,12.7,17.1z M13.6,14.7V8.2l5.3,3.3L13.6,14.7z"/> 3989</g> 3990</svg> 3991 </a></div></div> 3992 </div> 3993 </div> 3994 </div> 3995 <div class="center"> 3996 <div class="wrapper small--text-center"> 3997 <h5>Clinically Effective. Fruit-Powered. Glowing Skin.</h5> 3998 <div class="logo-wrapper flex align-items-center small--justify-content-center"><svg width="108" height="40" viewbox="0 0 108 79" fill="none" xmlns="http://www.w3.org/2000/svg"> 3999<g clip-path="url(#clip0)"> 4000<path d="M96.2999 28.0998L102.8 27.9998C99.4999 22.1998 94.9999 16.8998 89.4999 12.3998C76.5999 1.99979 60.4999 -1.70021 45.3999 0.699788C58.5999 -0.000212252 72.1999 3.99979 83.2999 12.9998C88.5999 17.3998 92.9999 22.4998 96.2999 28.0998Z" fill="black"></path> 4001<path d="M29.1 61.6992L23 63.7992C27.9 68.2992 33.8 72.0992 40.4 74.5992C55.8 80.5992 72.3 79.2992 86 72.3992C73.6 76.9992 59.5 77.2992 46.1 72.0992C39.7 69.6992 34 66.0992 29.1 61.6992Z" fill="black"></path> 4002<path d="M54.0002 18.5989C55.7002 18.4989 56.6002 17.6989 61.0002 18.5989C61.0002 18.5989 67.1002 18.2989 78.3002 28.8989C81.6002 32.0989 83.5002 37.2989 85.3002 37.7989C86.8002 38.1989 94.0002 38.5989 94.4002 41.4989C94.7002 43.8989 89.8002 48.5989 83.9002 48.2989C85.0002 46.6989 88.4002 46.2989 90.0002 42.0989C88.1002 40.9989 85.2002 40.8989 82.5002 41.5989C77.3002 29.5989 62.2002 21.2989 56.9002 20.5989C52.6002 19.9989 51.0002 20.6989 48.2002 20.5989C50.2002 19.9989 53.0002 18.5989 54.0002 18.5989Z" fill="black"></path> 4003<path d="M35.0001 3.99961C37.1001 3.99961 37.8001 3.89961 39.9001 5.29961L35.0001 5.69961C34.8001 5.69961 29.3001 7.09961 26.9001 11.7996C27.9001 12.5996 27.9001 12.7996 28.9001 12.8996C30.6001 12.8996 34.6001 7.49961 41.8001 7.49961C43.1001 7.49961 44.3001 7.99961 44.3001 7.99961C45.0001 8.39961 44.8001 9.19961 44.8001 10.1996C44.8001 10.1996 40.3001 20.6996 32.3001 20.6996H30.6001C35.7001 19.4996 39.3001 14.7996 41.9001 10.2996L36.6001 11.7996C33.0001 12.8996 28.9001 16.1996 27.5001 16.1996C25.9001 16.1996 24.9001 14.8996 20.7001 14.8996C17.4001 14.8996 13.7001 16.6996 12.0001 17.8996C12.8001 19.5996 14.4001 18.7996 15.8001 18.6996C15.7001 18.7996 15.4001 20.2996 11.4001 20.5996C11.4001 20.7996 12.2001 23.9996 14.3001 26.0996C16.7001 28.5996 20.5001 29.8996 21.8001 29.9996C21.8001 30.4996 22.0001 32.5996 23.5001 35.3996C29.7001 47.4996 33.1001 37.4996 40.6001 49.5996V50.9996C36.6001 47.5996 30.2001 46.3996 26.8001 45.8996C21.9001 45.0996 16.9001 45.8996 16.7001 45.8996C14.9001 46.2996 10.2001 47.1996 10.2001 47.2996C13.9001 42.7996 22.9001 42.5996 24.6001 41.8996C18.7001 35.9996 19.4001 33.9996 18.7001 33.1996C18.1001 32.4996 9.6001 31.4996 9.6001 19.6996C9.6001 15.3996 17.7001 12.2996 20.4001 12.2996C25.4001 12.0996 27.0001 3.99961 35.0001 3.99961Z" fill="black"></path> 4004<path d="M22.1998 16.4994C23.2998 16.3994 23.1998 16.2994 24.5998 16.8994L24.6998 18.3994C23.0998 18.0994 20.9998 18.2994 18.7998 18.1994C19.9998 17.1994 20.3998 16.6994 22.1998 16.4994Z" fill="black"></path> 4005<path d="M7.3 32.5003C10.7 32.5003 14.9 35.3003 15.4 35.7003C13.1 35.9003 12.8 35.5003 7.7 35.9003C7.7 35.9003 3.4 36.2003 0 36.9003C2.3 33.5003 1.9 32.4003 7.3 32.5003Z" fill="black"></path> 4006<path d="M72.5999 55.8996L78.1999 58.5996C84.7999 61.7996 91.0999 53.3996 93.3999 51.8996C94.4999 57.1996 99.6999 67.9996 107.3 69.9996C106.2 71.1996 105 71.0996 103.5 71.0996C99.7999 71.0996 92.8999 65.0996 92.8999 60.4996C92.8999 60.4996 92.6999 57.0996 92.6999 56.2996C90.5999 60.2996 86.2999 62.9996 82.6999 62.8996C79.8999 62.8996 79.2999 62.6996 76.8999 61.5996C76.3999 61.3996 63.0999 53.2996 62.3999 47.5996C62.9999 47.9996 69.6999 54.7996 72.5999 55.8996Z" fill="black"></path> 4007<path d="M96.0001 74.4992L93.8001 74.7992C88.5001 73.8992 87.5001 66.1992 89.0001 63.9992C89.0001 63.9992 89.9001 62.3992 90.7001 61.6992C90.8001 65.5992 91.3001 68.4992 91.6001 69.3992C92.6001 71.5992 91.0001 70.6992 96.0001 74.4992Z" fill="black"></path> 4008<path d="M23.7999 61.7996L20.6999 58.2996L16.2999 59.9996C16.9999 58.5996 17.9999 57.3996 18.7999 55.9996C17.7999 54.7996 16.8999 53.5996 15.8999 52.3996C17.3999 52.6996 19.0999 53.0996 20.5999 53.4996L23.0999 49.5996C23.2999 51.0996 23.3999 52.6996 23.4999 54.1996L28.0999 55.3996L23.5999 57.1996L23.7999 61.7996Z" fill="black"></path> 4009<path d="M106 41.4L102 39.1L98.4001 42C98.6001 40.5 99.2001 39 99.5001 37.4C98.2001 36.5 96.9001 35.7 95.6001 34.9C97.1001 34.7 98.8001 34.6 100.4 34.5L101.5 30C102.1 31.3 102.7 32.8 103.3 34.2L108 34L104.3 37.1L106 41.4Z" fill="black"></path>
4010<path d="M86.7002 77.4V74.5H87.8002C88.5002 74.5 88.7002 74.9 88.7002 75.4C88.7002 75.8 88.5002 76 88.2002 76.1L88.8002 77.4H88.2002L87.7002 76.2H87.2002V77.4H86.7002ZM87.3002 75.8H87.7002C88.1002 75.8 88.3002 75.7 88.3002 75.4C88.3002 75.1 88.1002 75 87.8002 75H87.3002V75.8Z" fill="black"></path> 4011<path d="M87.7 73.6992C88.9 73.6992 89.9 74.6992 89.9 75.8992C89.9 77.0992 88.9 78.0992 87.7 78.0992C86.5 78.0992 85.5 77.0992 85.5 75.8992C85.5 74.6992 86.5 73.6992 87.7 73.6992ZM87.7 73.1992C86.2 73.1992 85 74.3992 85 75.8992C85 77.3992 86.2 78.5992 87.7 78.5992C89.2 78.5992 90.4 77.3992 90.4 75.8992C90.4 74.4992 89.2 73.1992 87.7 73.1992Z" fill="black"></path> 4012</g> 4013<defs> 4014<clippath id="clip0"> 4015<rect width="108" height="78.6" fill="white"></rect> 4016</clippath> 4017</defs> 4018</svg> 4019<p>Cruelty Free</p> 4020 </div> 4021 </div> 4022 </div> 4023 <div class="bottom"> 4024 <div class="wrapper small--text-center"> 4025 <div class="wrap"> 4026 <div class="copy">Copyright © 2026. All rights Reserved</div> 4027 <div class="links"> 4028 4029 <a href="/pages/privacy-policy">Privacy Policy</a> | 4030 4031 <a href="/pages/terms-of-service">Terms Of Service</a> | 4032 4033 <a href="https://www.glowrecipe.com/pages/patents">Patents</a> 4034 4035 </div> 4036 </div> 4037 </div> 4038 </div> 4039</div> 4040
4041<script src="//www.glowrecipe.com/cdn/shop/t/1677/assets/form_main.js?v=105462477796433466931788493545" defer="defer"></script>
4041 4042 4043<style> #shopify-section-footer .needsclick.kl-private-reset-css-Xuajs1 button {height: auto !important; padding-top: 0.9em;} </style></div></footer> 4044 <div id="overlay" class="animation"></div> 4045 <div id="loading-overlay"><div class="loader"></div></div> 4046 4047
4047<script> 4048 window.pageDateTime = new Date('2026/09/24 14:04 EDT'); 4049 window.breakpoints = { 4050 small: '600px', 4051 medium: '900px' 4052 }; 4053 window.money_format ="${{amount}}"; 4054 </script>
4054<link rel="stylesheet" href="//www.glowrecipe.com/cdn/shop/t/1677/assets/side_cart.css?v=181389447441192469181788493546" media="print" onload="this.media='all'"><link rel="stylesheet" href="//www.glowrecipe.com/cdn/shop/t/1677/assets/component_search.css?v=62930292410177033571788493545" media="print" onload="this.media='all'"> 4055 <link rel="stylesheet" href="//www.glowrecipe.com/cdn/shop/t/1677/assets/tingle.css?v=76606170059366269291788493502" media="print" onload="this.media='all'"> 4056
4056<script src="//www.glowrecipe.com/cdn/shop/t/1677/assets/component_search.js?v=172449282945771807801788493545 4057" defer="defer"></script>
4057 4058
4058<script src="//www.glowrecipe.com/cdn/shop/t/1677/assets/component_product_card.js?v=180161386761733765211788493418 4059" defer="defer"></script>
4059 4060 4061
4061<script type="application/ld+json" id="eci-faq"></script>
4061 4062 4063
4063<script src="//www.glowrecipe.com/cdn/shop/t/1677/assets/eci_faq.js?v=136889778540061817891788493545" defer="defer"></script>
4063 4064 4065 4066 4067 <!-- "snippets/smile-initializer.liquid" was not rendered, the associated app was uninstalled --> 4068 4069 4070
4070<script>(function(){ var s = document.createElement('script'), e = ! document.body ? document.querySelector('head') : document.body; s.src = 'https://acsbapp.com/apps/app/dist/js/app.js'; s.async = true; s.onload = function(){ acsbJS.init({ statementLink : '', footerHtml : '', hideMobile : false, hideTrigger : false, language : 'en', position : 'left', leadColor : '#817e80', triggerColor : '#fdedf7', triggerRadius : '50%', triggerPositionX : 'left', triggerPositionY : 'bottom', triggerIcon : 'people', triggerSize : 'small', triggerOffsetX : 10, triggerOffsetY : 80, mobile : { triggerSize : 'small', triggerPositionX : 'left', triggerPositionY : 'bottom', triggerOffsetX : 10, triggerOffsetY : 80, triggerRadius : '50%' } }); }; e.appendChild(s);}());</script>
4070 4071 4072 <style id="cartItemsBorder"></style> 4073 4074
4074<script> 4075 // Installation script generated by Ad Analytics 4076 (function(w, d){ 4077 var id='spdt-capture', n='script'; 4078 if (!d.getElementById(id)) { 4079 w.spdt = 4080 w.spdt || 4081 function() { 4082 (w.spdt.q = w.spdt.q || []).push(arguments); 4083 }; 4084 var e = d.createElement(n); e.id = id; e.async=1; 4085 e.src = 'https://pixel.byspotify.com/ping.min.js'; 4086 var s = d.getElementsByTagName(n)[0]; 4087 s.parentNode.insertBefore(e, s); 4088 } 4089 w.spdt('conf', { key: '2a247d889806466998e44eab17186eac' }); 4090 w.spdt('view'); 4091 })(window, document); 4092 </script>
4092 4093 4094
4094<script src="https://cdn.kustomerapp.com/chat-web/widget.js" data-kustomer-api-key="eyJhbGciOiJub25lIn0.eyJvcmciOiI2MWQ0NjBmZWRjM2QxMTg1MmY3NTQzZDQiLCJvcmdOYW1lIjoiZ2xvd3JlY2lwZSIsInBvZCI6InByb2QxIiwicm9sZXMiOlsib3JnLnRyYWNraW5nIl19."></script>
4094<script>Kustomer.start({brandId:'61d461014453739f0b1b31e7'})</script>
4094<script src="https://js.getcatch.com/catchjs/v1/catch.js"></script>
4094 4095
4095<script> 4096 catchjs.init("SGG4z5dy6Y819DpJMhCDTnx4", { 4097 4098 }); 4099 </script>
4099 4100
4100<script defer src="https://static.shopmy.us/Affiliates/sms_aff_clicktrack.js"></script>
4100 4101 4102 <div id="shopify-block-ASXJCWWEvMUE5L1VWd__5946647744298494267" class="shopify-block shopify-app-block"> 4103 4104 4105<!-- BEGIN app snippet: swymVersion -->
4105<script>var __SWYM__VERSION__ = '7.0.7';</script>
4105<!-- END app snippet --> 4106<!-- BEGIN app snippet: swymCustomCss --> 4107 4108 4109 4110 4111<style id="swym-custom-css"> 4112 4113</style> 4114 4115<!-- END app snippet --> 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127
4128<script> 4129 (function () { 4130 // Get CompanyLocation Metadata for B2B customer scenerios (SFS) 4131 4132 4133 // Put metafields in window variable 4134 const commonCustomizationSettings = '{"global-settings":{"icon":"heart","primaryColor":"#000","secondaryColor":"#fff","storefrontLayoutType":"as-drawer","buttonType":{"displayIcon":true,"displayText":true,"style":"solid"},"collectionsButtonPosition":{"position":"top-right","verticalOffset":0,"horizontalOffset":0},"pdpButtonPosition":{"position":"default","verticalOffset":0,"horizontalOffset":0},"enableStorefrontLayoutNotification":true,"storefrontLayoutDrawerWidth":400,"launchType":"header","showItemsCount":true,"launchPointPosition":"bottom-right"}}'; 4135 try { 4136 const parsedSettings = JSON.parse(commonCustomizationSettings); 4137 if (parsedSettings) { 4138 window.SwymWishlistCommonCustomizationSettings = parsedSettings[window.Shopify.theme.schema_name] || parsedSettings['global-settings']; 4139 } else { 4140 window.SwymWishlistCommonCustomizationSettings = {}; 4141 } 4142 } catch (e) { 4143 window.SwymWishlistCommonCustomizationSettings = {}; 4144 } 4145 4146 let enabledCommonFeatures = '{"add-to-wishlist-collections-button":false,"add-to-wishlist-pdp-button":true,"auto-add-to-wishlist-from-pdp":{"pdpViewCount":"3","notificationTimeoutDuration":"5","selectedPosition":"TopLeft","enabled":false},"sfl-popup-v2":true,"control-centre":true,"multiple-wishlist":false,"social-count":{"enabledOnCollections":false},"education-layer":true,"advanced-collections-circular-bg":true}'; 4147 try { 4148 enabledCommonFeatures = JSON.parse(enabledCommonFeatures) || {}; 4149 } catch (e) { 4150 enabledCommonFeatures = {}; 4151 } 4152 // Storing COMMON FEATURES data in the window object for potential use in the storefront JS code. 4153 window.SwymEnabledCommonFeatures = enabledCommonFeatures; 4154 4155 // Ghost-Intent Configuration 4156 // Defaults to disabled (false). Only enabled when metafields explicitly set to "true". 4157 try { 4158 let ghostIntentConfig = { 4159 isExplicitConsentNeeded: false, 4160 isExplicitConsentNeededEvenForLocalStorage: false, 4161 askForPermissionOnFirstClick: true 4162 }; 4163 4164 4165 4166 ghostIntentConfig.askForPermissionOnFirstClick = false; 4167 4168 window.SwymGhostIntentConfig = ghostIntentConfig; 4169 } catch(e) { 4170 window.SwymGhostIntentConfig = { 4171 isExplicitConsentNeeded: false, 4172 isExplicitConsentNeededEvenForLocalStorage: false, 4173 askForPermissionOnFirstClick: true 4174 }; 4175 } 4176 4177 // Education Layer Configuration 4178 // Reads from common enabled-features metafield first. Falls back to old standalone metafield for backward compatibility. 4179 4180 4181 window.SwymEducationLayerEnabled = enabledCommonFeatures?.["education-layer"] ?? true; 4182 4183 // Login Nudge Configuration 4184 // Reads from common enabled-features metafield first. Falls back to old standalone metafield for backward compatibility. 4185 4186 4187 window.SwymLoginNudgeEnabled = enabledCommonFeatures?.["login-nudge"] ?? true; 4188 4189 // Initialize or ensure SwymViewProducts exists 4190 if (!window.SwymViewProducts) { 4191 window.SwymViewProducts = {}; 4192 } 4193 4194 })(); 4195</script>
4195 4196 4197<!-- BEGIN app snippet: swymLoadConsentManager -->
4198<script> 4199 (function () { 4200 if (document.querySelector("script[data-swym-consent-manager]")) return; 4201 var swymConsentManagerScript = document.createElement("script"); 4202 swymConsentManagerScript.src = "https:\/\/cdn.shopify.com\/extensions\/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8\/swym-relay-839\/assets\/swym-consent-manager.js"; 4203 swymConsentManagerScript.async = false; // run in insertion order once fetched, instead of whenever fetch resolves 4204 swymConsentManagerScript.setAttribute("data-swym-consent-manager", "true"); 4205 document.head.appendChild(swymConsentManagerScript); 4206 })(); 4207</script>
4207 4208<!-- END app snippet --> 4209
4210<script 4211 4212 id="wishlist-embed-init" 4213 defer 4214 async 4215> 4216 (function () { 4217 window.swymWishlistEmbedLoaded = true; 4218 var fullAssetUrl = "https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/apps.bundle.js"; 4219 var assetBaseUrl = fullAssetUrl?.substring(0, fullAssetUrl.lastIndexOf('/') + 1); 4220 var swymJsPath = '//premcdn.swymrelay.com/code/swym-shopify.js'; 4221 var baseJsPath = swymJsPath?.substring(0, swymJsPath.lastIndexOf('/') + 1); 4222 window.SwymCurrentJSPath = baseJsPath; 4223 window.SwymAssetBaseUrl = assetBaseUrl; 4224 4225 window.SwymCurrentStorePath = "//swymstore-v3premium-01.swymrelay.com"; 4226 4227 function loadSwymShopifyScript() { 4228 var element = ""; 4229 var scriptSrc = ""; 4230 4231 4232 element = "swym-ext-shopify-script"; 4233 window.SwymShopifyCdnInUse = true; 4234 scriptSrc = "https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/swym-ext-shopify.js"; 4235 4236 4237 if (document.getElementById(element)) { 4238 return; 4239 } 4240 4241 var s = document.createElement("script"); 4242 s.id = element; 4243 s.type = "text/javascript"; 4244 s.async = true; 4245 s.defer = true; 4246 s.src = scriptSrc; 4247 4248 s.onerror = function() { 4249 console.warn("Failed to load Swym Shopify script: ", scriptSrc, " Continuing with default"); 4250 // Fallback logic here 4251 element = `swym-ext-shopify-script-${__SWYM__VERSION__}`; 4252 var fallbackJsPathVal = "\/\/premcdn.swymrelay.com\/code\/swym-shopify.js"; 4253 var fallbackJsPathWithExt = fallbackJsPathVal.replace("swym-shopify", "swym-ext-shopify"); 4254 scriptSrc = fallbackJsPathWithExt + '?shop=' + encodeURIComponent(window.Shopify.shop) + '&v=' + __SWYM__VERSION__; 4255 4256 var fallbackScript = document.createElement("script"); 4257 fallbackScript.id = element; 4258 fallbackScript.type = "text/javascript"; 4259 fallbackScript.async = true; 4260 fallbackScript.defer = true; 4261 fallbackScript.src = scriptSrc; 4262 var y = document.getElementsByTagName("script")[0]; 4263 y.parentNode.insertBefore(fallbackScript, y); 4264 }; 4265 4266 var x = document.getElementsByTagName("script")[0]; 4267 x.parentNode.insertBefore(s, x); 4268 } 4269 4270 var consentAPICallbackInvoked = false; 4271 function checkConsentAndLoad() { 4272 // Allow app to load in design mode (theme editor) regardless of consent 4273 if (window.Shopify?.designMode) { 4274 loadSwymShopifyScript(); 4275 return; 4276 } 4277 4278 // Ghost-Intent: If merchant enabled explicit consent, block SDK until 4279 // consent is given through our Ghost-Intent flow (sync nudge accept). 4280 // This works on any store regardless of region (EU or non-EU). 4281 var ghostConfig = window.SwymGhostIntentConfig || {}; 4282 if (ghostConfig.isExplicitConsentNeeded || ghostConfig.isExplicitConsentNeededEvenForLocalStorage) { 4283 try { 4284 var consentKey = 'swym-ghost-consent-' + (window.Shopify && window.Shopify.shop || ''); 4285 if (localStorage.getItem(consentKey) === 'true') { 4286 // Consent was given through our flow â load SDK 4287 loadSwymShopifyScript(); 4288 return; 4289 } 4290 } catch(e) {} 4291 4292 // Check if Shopify native cookie consent was given via the cookie banner. 4293 // If user accepted cookies through Shopify's banner, load SDK normally 4294 // (Ghost-Intent is only needed when NO consent mechanism has been used). 4295 var shopifyConsentGiven = window.Shopify?.customerPrivacy?.preferencesProcessingAllowed?.(); 4296 if (shopifyConsentGiven) { 4297 loadSwymShopifyScript(); 4298 return; 4299 } 4300 4301 console.warn("[Swym Ghost-Intent] SDK blocked until explicit consent is given"); 4302 return; 4303 } 4304 4305 var isCookieBannerVisible = window.Shopify?.customerPrivacy?.shouldShowBanner?.(); 4306 if(!isCookieBannerVisible) { 4307 loadSwymShopifyScript(); 4308 return; 4309 } 4310 var shouldLoadSwymScript = window.Shopify?.customerPrivacy?.preferencesProcessingAllowed?.(); 4311 if (shouldLoadSwymScript) { 4312 loadSwymShopifyScript(); 4313 } else { 4314 console.warn("No customer consent to load Swym Wishlist Plus"); 4315 } 4316 } 4317 function initialiseConsentCheck() { 4318 document.addEventListener("visitorConsentCollected", (event) => { checkConsentAndLoad(); }); 4319 window.Shopify?.loadFeatures?.( 4320 [{name: 'consent-tracking-api', version: '0.1'}], 4321 error => { 4322 consentAPICallbackInvoked = true; 4323 if (error) { 4324 if(!window.Shopify?.customerPrivacy) { 4325 loadSwymShopifyScript(); 4326 return; 4327 } 4328 } 4329 checkConsentAndLoad(); 4330 } 4331 ); 4332 } 4333 function consentCheckFallback(retryCount) { 4334 if(!consentAPICallbackInvoked) { 4335 if (window.Shopify?.customerPrivacy) { 4336 checkConsentAndLoad(); 4337 } else if (retryCount >= 1) { 4338 console.warn("Shopify.loadFeatures unsuccessful on site, refer - https://shopify.dev/docs/api/customer-privacy#loading-the-customer-privacy-api. Proceeding with normal Swym Wishlist Plus load"); 4339 // Ghost-Intent: route through checkConsentAndLoad so SDK block is respected 4340 checkConsentAndLoad(); 4341 } else { 4342 setTimeout(() => consentCheckFallback(retryCount + 1), 1000); 4343 } 4344 } 4345 } 4346 if (document.readyState === "loading") { 4347 document.addEventListener("DOMContentLoaded", initialiseConsentCheck); 4348 window.addEventListener("load", () => consentCheckFallback(0)); 4349 } else { 4350 initialiseConsentCheck(); 4351 } 4352 4353 })(); 4354</script>
4354 4355 4356<!-- BEGIN app snippet: swymSnippet -->
4356<script defer> 4357 (function () { 4358 const currentSwymJSPath = '//premcdn.swymrelay.com/code/swym-shopify.js'; 4359 const currentSwymStorePath = 'https://swymstore-v3premium-01.swymrelay.com'; 4360 const dnsPrefetchLink = `<link rel="dns-prefetch" href="${currentSwymStorePath}" crossorigin>`; 4361 const dnsPrefetchLink2 = `<link rel="dns-prefetch" href="${currentSwymJSPath}">`; 4362 const preConnectLink = `<link rel="preconnect" href="${currentSwymJSPath}">`; 4363 const swymSnippet = document.getElementById('wishlist-embed-init'); 4364 if(dnsPrefetchLink) {swymSnippet.insertAdjacentHTML('afterend', dnsPrefetchLink);} 4365 if(dnsPrefetchLink2) {swymSnippet.insertAdjacentHTML('afterend', dnsPrefetchLink2);} 4366 if(preConnectLink) {swymSnippet.insertAdjacentHTML('afterend', preConnectLink);} 4367 })() 4368</script>
vendor: 1 bytes, line 4368
4368
4369<script id="swym-snippet" type="text"> 4370 window.swymLandingURL = document.URL; 4371 window.swymCart = {"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}; 4372 window.swymPageLoad = function() { 4373 window.SwymProductVariants = window.SwymProductVariants || {}; 4374 window.SwymHasCartItems = 0 > 0; 4375 window.SwymPageData = {}, window.SwymProductInfo = {}; 4376 var unknown = {et: 0}; 4377 window.SwymPageData = unknown; 4378 4379 window.SwymPageData.uri = window.swymLandingURL; 4380 }; 4381 if(window.selectCallback){ 4382 (function(){ 4383 var originalSelectCallback = window.selectCallback; 4384 window.selectCallback = function(variant){ 4385 originalSelectCallback.apply(this, arguments); 4386 try{ 4387 if(window.triggerSwymVariantEvent){ 4388 window.triggerSwymVariantEvent(variant.id); 4389 } 4390 }catch(err){ 4391 console.warn("Swym selectCallback", err); 4392 } 4393 };})();} 4394 window.swymCustomerId =null; 4395 window.swymCustomerExtraCheck = 4396 null; 4397 var swappName = ("Wishlist" || "Wishlist"); 4398 var swymJSObject = { 4399 pid: "Co0aSWS0sb\/cOL5+hA7UW8EldaPaDSE2LbYtJuax010=", 4400 interface: "/apps/swym" + swappName + "/interfaces/interfaceStore.php?appname=" + swappName 4401 }; 4402 window.swymJSShopifyLoad = function(){ 4403 if(window.swymPageLoad) swymPageLoad(); 4404 if(!window._swat) { 4405 (function (s, w, r, e, l, a, y) { 4406 r['SwymRetailerConfig'] = s; 4407 r[s] = r[s] || function (k, v) { 4408 r[s][k] = v; 4409 }; 4410 })('_swrc', '', window); 4411 _swrc('RetailerId', swymJSObject.pid); 4412 _swrc('Callback', function(){initSwymShopify();}); 4413 }else if(window._swat.postLoader){ 4414 _swrc = window._swat.postLoader; 4415 _swrc('RetailerId', swymJSObject.pid); 4416 _swrc('Callback', function(){initSwymShopify();}); 4417 }else{ 4418 initSwymShopify();} 4419 } 4420 if(!window._SwymPreventAutoLoad) { 4421 swymJSShopifyLoad(); 4422 } 4423</script>
4423 4424 4425<style id="safari-flasher-pre"></style>
4426<script> 4427 if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) { 4428 document.getElementById("safari-flasher-pre").innerHTML = '' + '#swym-plugin,#swym-hosted-plugin{display: none;}' + '.swym-button.swym-add-to-wishlist{display: none;}' + '.swym-button.swym-add-to-watchlist{display: none;}' + '#swym-plugin #swym-notepad, #swym-hosted-plugin #swym-notepad{opacity: 0; visibility: hidden;}' + '#swym-plugin #swym-notepad, #swym-plugin #swym-overlay, #swym-plugin #swym-notification,' + '#swym-hosted-plugin #swym-notepad, #swym-hosted-plugin #swym-overlay, #swym-hosted-plugin #swym-notification' + '{-webkit-transition: none; transition: none;}' + ''; 4429 window.SwymCallbacks = window.SwymCallbacks || []; 4430 window.SwymCallbacks.push(function(tracker) { 4431 tracker.evtLayer.addEventListener(tracker.JSEvents.configLoaded, function() { 4432 var x = function() { 4433 SwymUtils.onDOMReady(function() { 4434 var d = document.createElement("div"); 4435 d.innerHTML = "<style id='safari-flasher-post'>" + "#swym-plugin:not(.swym-ready),#swym-hosted-plugin:not(.swym-ready){display: none;}" + ".swym-button.swym-add-to-wishlist:not(.swym-loaded){display: none;}" + ".swym-button.swym-add-to-watchlist:not(.swym-loaded){display: none;}" + "#swym-plugin.swym-ready #swym-notepad, #swym-plugin.swym-ready #swym-overlay, #swym-plugin.swym-ready #swym-notification," + "#swym-hosted-plugin.swym-ready #swym-notepad, #swym-hosted-plugin.swym-ready #swym-overlay, #swym-hosted-plugin.swym-ready #swym-notification" + "{-webkit-transition: opacity 0.3s, visibility 0.3ms, -webkit-transform 0.3ms !important;-moz-transition: opacity 0.3s, visibility 0.3ms, -moz-transform 0.3ms !important;-ms-transition: opacity 0.3s, visibility 0.3ms, -ms-transform 0.3ms !important;-o-transition: opacity 0.3s, visibility 0.3ms, -o-transform 0.3ms !important;transition: opacity 0.3s, visibility 0.3ms, transform 0.3ms !important;}" + "</style>"; 4436 document.head.appendChild(d); 4437 });}; 4438 setTimeout(x, 10); 4439 });});} 4440 window.SwymOverrideMoneyFormat = "$ {{amount}}"; 4441</script>
4441 4442<style id="swym-product-view-defaults"> .swym-button.swym-add-to-wishlist-view-product:not(.swym-loaded) { display: none; } </style><!-- END app snippet --> 4443
4444<script 4445 4446 id="swymSnippetCheckAndActivate" 4447> 4448 (function () { 4449 var duplicateProneIds = ['safari-flasher-pre', 'swym-product-view-defaults', 'swym-wrap-login-handler']; 4450 4451 function removeDuplicateIdNodes(id) { 4452 var nodes = document.querySelectorAll('#' + id); 4453 nodes.forEach(function (node, index) { 4454 if (index > 0) { 4455 node.remove(); 4456 } 4457 }); 4458 } 4459 4460 function cleanupDuplicateSnippetNodes(activeScript) { 4461 if (!activeScript) { 4462 return; 4463 } 4464 var allSwymSnippets = document.querySelectorAll('script#swym-snippet'); 4465 allSwymSnippets.forEach(function (scriptNode) { 4466 if (scriptNode !== activeScript) { 4467 scriptNode.remove(); 4468 } 4469 }); 4470 } 4471 4472 function cleanupDuplicateActivationGuards() { 4473 var guardScripts = document.querySelectorAll('script#swymSnippetCheckAndActivate'); 4474 guardScripts.forEach(function (scriptNode, index) { 4475 if (index > 0) { 4476 scriptNode.removeAttribute('id'); 4477 } 4478 }); 4479 } 4480 4481 function postDomLoad() { 4482 var activeScript = document.querySelector('script#swym-snippet:not([type="text"])'); 4483 if (!activeScript) { 4484 var inactiveScript = document.querySelector('script#swym-snippet[type="text"]'); 4485 if (inactiveScript) { 4486 inactiveScript.type = 'text/javascript'; 4487 new Function(inactiveScript.textContent)(); 4488 activeScript = inactiveScript; 4489 } 4490 } 4491 4492 cleanupDuplicateSnippetNodes(activeScript); 4493 cleanupDuplicateActivationGuards(); 4494 duplicateProneIds.forEach(removeDuplicateIdNodes); 4495 } 4496 4497 if (document.readyState === 'loading') { 4498 document.addEventListener('DOMContentLoaded', postDomLoad); 4499 } else { 4500 postDomLoad(); 4501 } 4502 })(); 4503</script>
4503 4504 4505 4506
4507<script> 4508 (function () { 4509 const themeSchemaName = window.Shopify.theme.schema_name; 4510 4511 if (!window.SwymCallbacks) { 4512 window.SwymCallbacks = []; 4513 } 4514 window.SwymCallbacks.push(swat => { 4515 if (!swat) { 4516 return; 4517 } 4518 4519 // Ghost-Intent: Sync local wishlist items to cloud when SDK loads after consent 4520 if (window.SwymLocalWishlist && window.SwymLocalWishlist.getSyncableItems().length > 0) { 4521 window.SwymLocalWishlist.syncToCloud(swat); 4522 } 4523 4524 if (window._SwymSDKOnlyMode) { 4525 return; 4526 } 4527 4528 // ENABLE COMMON FEATURES 4529 let swymEnabledCommonFeatures = window.SwymEnabledCommonFeatures; 4530 Object.keys(swymEnabledCommonFeatures).forEach(key => { 4531 if (!swymEnabledCommonFeatures[key]) return; 4532 4533 switch (key) { 4534 case 'add-to-wishlist-collections-button': 4535 // Check if app block is already handling the collections button 4536 if (window.SwymCollectionsConfig) { 4537 return; 4538 } 4539 4540 // Check if v2 default collections is handling it 4541 if (window.SwymAdvancedCollectionsWishlistConfig) { 4542 return; 4543 } 4544 4545 // Fallback to old v1 behavior if v2 config is not present 4546 swat?.collectionsApi?.setDefaultCustomizationOptions(); 4547 swat?.collectionsApi?.initializeCollections(swat, false, themeSchemaName); 4548 4549 break; 4550 case 'add-to-wishlist-pdp-button': 4551 // Check if app block is already handling the PDP button 4552 if (window.swymATWButtonConfig?.shopifyExtensionType === 'appblock') { 4553 return; 4554 } 4555 4556 if (!(window.SwymPageData && window.SwymPageData.et === 1)) { 4557 // Not initiating pdp button as it is not a product page 4558 return; 4559 } 4560 4561 // Inject addtowishlist.css into the document's <head> 4562 var head = document.head; 4563 var pdpButtonStylesheet = "https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/addtowishlistbutton.css"; 4564 var pdpButtonStylesheetTag = document.createElement('link'); 4565 pdpButtonStylesheetTag.id = `swym-pdp-button-stylesheet`; 4566 pdpButtonStylesheetTag.rel = 'stylesheet'; 4567 pdpButtonStylesheetTag.href = pdpButtonStylesheet; 4568 4569 if (!document.getElementById('swym-pdp-button-stylesheet')) { 4570 head.appendChild(pdpButtonStylesheetTag); 4571 } 4572 4573 var x = document.getElementsByTagName('script')[0]; 4574 function createAndInsertScript(id, src, onLoadCallback) { 4575 var scriptTag = document.createElement('script'); 4576 scriptTag.id = id; 4577 scriptTag.type = 'text/javascript'; 4578 scriptTag.src = src; 4579 scriptTag.onload = onLoadCallback; 4580 x.parentNode.insertBefore(scriptTag, x); 4581 } 4582 4583 var pdpButtonScript = "https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/addtowishlistbutton.js"; 4584 createAndInsertScript(`swym-pdp-button-script`, pdpButtonScript, function () { 4585 const pdpBtnApi = window.WishlistPlusPDPButtonAPI; 4586 if (pdpBtnApi) { 4587 pdpBtnApi.setDefaultCustomizationOptions(swat); 4588 pdpBtnApi.initializePDPButton(swat, true); 4589 } 4590 }); 4591 break; 4592 default: 4593 return; 4594 } 4595 }); 4596 }); 4597 })(); // IIFE to prevent polluting global scope 4598</script>
4598 4599 4600 4601
4602<script> 4603 (function () { 4604 // Get the settings from Shopify's Liquid variables and create the styles 4605 const isControlCentreEnabledFromMetafield = window?.SwymEnabledCommonFeatures?.["control-centre"]; 4606 const isCommonCustomizationEnabledFromMetafield = window?.SwymWishlistCommonCustomizationSettings && 4607 Object.keys(window.SwymWishlistCommonCustomizationSettings).length > 0; 4608 const isControlCentreEnabledFromBlockSettings = true; 4609 4610 if (!(isControlCentreEnabledFromMetafield && isCommonCustomizationEnabledFromMetafield) && !isControlCentreEnabledFromBlockSettings) { 4611 // Don't enable control centre if this is disabled and block settings are not enabled 4612 return; 4613 } 4614 4615 let borderRadius = 6; 4616 let drawerWidth = window?.SwymWishlistCommonCustomizationSettings?.storefrontLayoutDrawerWidth || 400; 4617 4618 // Check if block settings exist, use them, otherwise fall back to common settings 4619 let primaryBgColor = isControlCentreEnabledFromBlockSettings ? 4620 "#000000" : 4621 window.SwymWishlistCommonCustomizationSettings.primaryColor; 4622 4623 let primaryTextColor = isControlCentreEnabledFromBlockSettings ? 4624 "#ffffff" : 4625 window.SwymWishlistCommonCustomizationSettings.secondaryColor; 4626 4627 let secondaryBgColor = isControlCentreEnabledFromBlockSettings ? 4628 "#f4f8fe" : null; 4629 let secondaryTextColor = isControlCentreEnabledFromBlockSettings ? 4630 "#333333" : null; 4631 4632 // Only use color adjustment functions if we're using common settings 4633 if (!secondaryBgColor || !secondaryTextColor) { 4634 function adjustOpacity(color, opacity) { 4635 if (color[0] === '#') { 4636 color = color.slice(1); 4637 } 4638 4639 if (color.length === 3) { 4640 color = color.split('').map(char => char + char).join(''); 4641 } 4642 4643 const r = parseInt(color.slice(0, 2), 16); 4644 const g = parseInt(color.slice(2, 4), 16); 4645 const b = parseInt(color.slice(4, 6), 16); 4646 4647 return `rgba(${r}, ${g}, ${b}, ${opacity})`; 4648 } 4649 4650 function hexToRgb(color) { 4651 if (color[0] === '#') { 4652 color = color.slice(1); 4653 } 4654 if (color.length === 3) { 4655 color = color.split('').map(c => c + c).join(''); 4656 } 4657 4658 return { 4659 r: parseInt(color.slice(0, 2), 16), 4660 g: parseInt(color.slice(2, 4), 16), 4661 b: parseInt(color.slice(4, 6), 16) 4662 }; 4663 } 4664 4665 function getLuminance({ r, g, b }) { 4666 return 0.299 * r + 0.587 * g + 0.114 * b; 4667 } 4668 4669 function generateSecondaryColors(primaryBgColor, primaryTextColor) { 4670 const secondaryBgOpacity = 0.2; 4671 const secondaryTextOpacity = 0.8; 4672 4673 const secondaryBgColor = adjustOpacity(primaryBgColor, secondaryBgOpacity); 4674 4675 const bgRgb = hexToRgb(primaryBgColor); 4676 const bgLuminance = getLuminance(bgRgb); 4677 4678 // Determine whether to use dark or light text for contrast 4679 const lightText = adjustOpacity(primaryTextColor, secondaryTextOpacity); 4680 const darkText = adjustOpacity(primaryBgColor, secondaryTextOpacity); 4681 4682 const secondaryTextColor = bgLuminance > 186 ? darkText : lightText; 4683 4684 return { 4685 secondaryBgColor, 4686 secondaryTextColor 4687 }; 4688 } 4689 4690 const generatedColors = generateSecondaryColors(primaryBgColor, primaryTextColor); 4691 secondaryBgColor = secondaryBgColor || generatedColors.secondaryBgColor; 4692 secondaryTextColor = secondaryTextColor || generatedColors.secondaryTextColor; 4693 } 4694 4695 // Create the CSS rule 4696 let styles = ` 4697 .swym-storefront-layout-root-component { 4698 --swym-storefront-layout-ui-border-radius: ${borderRadius}px; 4699 --swym-storefront-layout-button-border-radius: ${borderRadius}px; 4700 --swym-storefront-layout-side-drawer-width: ${drawerWidth}px; 4701 --swym-storefront-layout-button-color-bg-primary: ${primaryBgColor}; 4702 --swym-storefront-layout-button-color-text-primary: ${primaryTextColor}; 4703 --swym-storefront-layout-button-color-bg-secondary: ${secondaryBgColor}; 4704 --swym-storefront-layout-button-color-text-secondary: ${secondaryTextColor}; 4705 } 4706 `; 4707 4708 // Create a <style> element and append the styles 4709 let styleSheet = document.createElement("style"); 4710 styleSheet.type = "text/css"; 4711 styleSheet.innerText = styles; 4712 document.head.appendChild(styleSheet); 4713 4714 if (typeof window.SwymStorefrontLayoutContext === 'undefined') { 4715 window.SwymStorefrontLayoutContext = {}; 4716 } 4717 if (typeof window.SwymStorefrontLayoutExtensions === 'undefined'){ 4718 window.SwymStorefrontLayoutExtensions = {}; 4719 } 4720 4721 // Expose block settings toggle state so ThemeCSSMapping can respect it. 4722 // When true, theme editor color pickers take priority over inherited theme CSS variables. 4723 SwymStorefrontLayoutContext.BlockSettingsEnabled = isControlCentreEnabledFromBlockSettings; 4724 4725 if (isControlCentreEnabledFromBlockSettings) { 4726 // If block settings are enabled, use them 4727 SwymStorefrontLayoutContext.Settings = { 4728 EnableStorefrontLayoutOnLauncher: true, 4729 EnableStorefrontLayoutNotification: window?.SwymWishlistCommonCustomizationSettings?.enableStorefrontLayoutNotification ?? true, 4730 StorefrontLayoutType: window?.SwymWishlistCommonCustomizationSettings?.storefrontLayoutType || "as-drawer", 4731 StorefrontLayoutDrawerPosition: "left", 4732 StorefrontLayoutAsSectionContainerId: "swym-wishlist-render-container", 4733 StorefrontLayoutAsSectionPageURL: "/pages/wishlist", 4734 EnableStorefrontLayoutVariantSelector: true, 4735 StorefrontLayoutNotificationPosition: "left", 4736 StorefrontLayoutActionPopupPosition: "left", 4737 StorefrontLayoutNotificationDuration: 5000 4738 }; 4739 } else { 4740 // If only metafield is enabled but no block settings, use common settings 4741 SwymStorefrontLayoutContext.Settings = { 4742 EnableStorefrontLayoutOnLauncher: true, 4743 EnableStorefrontLayoutNotification: window?.SwymWishlistCommonCustomizationSettings?.enableStorefrontLayoutNotification ?? true, 4744 StorefrontLayoutType: window?.SwymWishlistCommonCustomizationSettings?.storefrontLayoutType || "as-drawer", 4745 StorefrontLayoutDrawerPosition: "left", 4746 StorefrontLayoutAsSectionContainerId: "swym-wishlist-render-container", 4747 StorefrontLayoutAsSectionPageURL: "/pages/wishlist", 4748 EnableStorefrontLayoutVariantSelector: true, 4749 StorefrontLayoutNotificationPosition: "left", 4750 StorefrontLayoutActionPopupPosition: "left", 4751 StorefrontLayoutNotificationDuration: 5000 4752 }; 4753 } 4754 const storefrontLayoutCallback = (swat) =>{ 4755 SwymStorefrontLayoutContext.swat = swat; 4756 let isStoreOnPaidPlan = swat.getApp('Wishlist')?.['is-paid']; 4757 let isWishlistEnabled = swat.getApp('Wishlist')?.['enabled']; 4758 SwymStorefrontLayoutContext.Settings = { 4759 ...SwymStorefrontLayoutContext?.Settings, 4760 EnableStorefrontLayoutCollection: window?.SwymEnabledCommonFeatures?.["multiple-wishlist"] ?? false, 4761 EnableStorefrontLayout: isWishlistEnabled && (isControlCentreEnabledFromBlockSettings || isControlCentreEnabledFromMetafield), 4762 } 4763 4764 if(SwymStorefrontLayoutContext?.Settings?.EnableStorefrontLayout){ 4765 if(SwymStorefrontLayoutContext?.CustomEvents?.LayoutInitialized){ 4766 var event = new CustomEvent(SwymStorefrontLayoutContext.CustomEvents.LayoutInitialized, { 4767 detail: { settings: SwymStorefrontLayoutContext?.Settings } 4768 }); 4769 document.dispatchEvent(event); 4770 }else{ 4771 swat.utils.warn(`LayoutInitialized event is not defined.`); 4772 } 4773 }else{ 4774 swat.utils.warn(`Storefront Layout is disabled.`); 4775 document.getElementById("swym-storefront-layout-container")?.remove(); 4776 document.getElementById("swym-storefront-extention-render-container")?.remove(); 4777 } 4778 } 4779 4780 if (!window.SwymCallbacks) { 4781 window.SwymCallbacks = []; 4782 } 4783 window.SwymCallbacks.push(storefrontLayoutCallback); 4784 4785 SwymStorefrontLayoutContext.SwymCustomerData = { 4786 4787 name: null, 4788 email: null 4789 4790 };
4791 SwymStorefrontLayoutContext.isShopperLoggedIn = !!SwymStorefrontLayoutContext?.SwymCustomerData?.email; 4792 })(); 4793</script>
4793 4794 4795 4796 4797 4798 4799 <div id="swym-storefront-extention-render-container"> 4800 <!-- BEGIN app snippet: swymStorefrontLayout -->
4800<script> 4801 (function () { 4802 const isControlCentreEnabledFromMetafield = window?.SwymEnabledCommonFeatures?.["control-centre"]; 4803 const isControlCentreEnabledFromBlockSettings = true; 4804 const isCommonCustomizationEnabledFromMetafield = window?.SwymWishlistCommonCustomizationSettings && 4805 Object.keys(window.SwymWishlistCommonCustomizationSettings).length > 0; 4806 4807 if (!(isControlCentreEnabledFromMetafield && isCommonCustomizationEnabledFromMetafield) && !isControlCentreEnabledFromBlockSettings) { 4808 return; 4809 } 4810 if (typeof window.SwymStorefrontLayoutContext === 'undefined') { 4811 window.SwymStorefrontLayoutContext = {}; 4812 } 4813 4814 // Initialize strings with empty values first to prevent string changes after loadStrings() 4815 SwymStorefrontLayoutContext.Strings = { 4816 title: "", 4817 addToCart: "", 4818 addedToCart: "", 4819 addAllToCartCta: "", 4820 addAllToCartSuccessText: "", 4821 addAllToCartEmptyText: "", 4822 addAllToCartErrorText: "", 4823 soldOut: "", 4824 addingToCart: "", 4825 viewCartCta: "", 4826 moveToCartCta: "", 4827 movingToCartCta: "", 4828 removeSflItemCta: "", 4829 4830 loginHeading: "", 4831 loginText: "", 4832 loginButtonText: "", 4833 loggedUserWelcomeMessage: "", 4834 VariantSelectorBtnText: "", 4835 wishlistTitle: "", 4836 wishlistInfo: "", 4837 emptyWishlistTitle: "", 4838 emptyWishlistDescription: "", 4839 4840 collectionTitle: "", 4841 emptyCarouselCollectionText: "", 4842 emptyCollectionText: "", 4843 emptyCollectionDescription: "", 4844 4845 addToCollectionTitle: "", 4846 removeItemCta: "", 4847 addToCollectionCta: "", 4848 createCollectionCta: "", 4849 saveNewCollectionCta: "", 4850 renameCollectionCta: "", 4851 deleteCollectionCta: "", 4852 shareCollectionCta: "", 4853 saveCollectionCta: "", 4854 editCollectionCta: "", 4855 shareCollectionTitle: "", 4856 shareCollectionMessage: "", 4857 sharedCollectionMessage: "", 4858 updateCollectionTitle: "", 4859 4860 errorMessageListNameRequired: "", 4861 errorMessageListNameRequire3Char: "", 4862 errorMessageListNameAlreadyExist: "", 4863 4864 notificationMessageItemSaved: "", 4865 notificationMessageItemRemoved: "", 4866 notificationMessageAddedToCart: "", 4867 notificationMessageAddedToCollection: "", 4868 notificationMessageCollectionSaved: "", 4869 notificationMessageCollectionDeleted: "", 4870 notificationMessageCollectionUpdated: "", 4871 notificationMessageCollectionUnavailable: "", 4872 notificationMessageSFLItemSaved: "", 4873 notificationMessageSFLItemRemoved: "", 4874 notificationMessageMovedToCart: "", 4875 4876 notificationActionAddToCollection: "", 4877 notificationActionView: "", 4878 notificationActionViewCollection: "", 4879 notificationActionGoToCart: "", 4880 4881 item: "", 4882 items: "", 4883 4884 tabWishlist: "", 4885 tabSavedForLater: "", 4886 tabSavedForYou: "", 4887 4888 savedForLaterTitle: "", 4889 emptySavedForLaterTitle: "", 4890 emptySavedForLaterDescription: "", 4891 4892 awNudgeMessage: "", 4893 awNudgeMessageSub: "", 4894 awNudgeLoginCTA: "", 4895 awNudgeDismiss: "", 4896 4897 emptySingleLoggedInTitle: "", 4898 emptySingleLoggedInDescription: "", 4899 emptySingleLoggedInBullet1: "", 4900 emptySingleLoggedInBullet2: "", 4901 emptySingleLoggedInBullet3: "", 4902 emptySingleLoggedInCTA: "", 4903 4904 emptyMultiLoggedInTitle: "", 4905 emptyMultiLoggedInDescription: "", 4906 emptyMultiLoggedInCreateTitle: "", 4907 emptyMultiLoggedInCreateDescription: "", 4908 emptyMultiLoggedInBrowseLabel: "", 4909 emptyMultiLoggedInCTA: "", 4910 emptyMultiLoggedInTag1: "", 4911 emptyMultiLoggedInTag2: "", 4912 emptyMultiLoggedInTag3: "", 4913 emptyMultiLoggedInTag4: "", 4914 emptyMultiLoggedInTag5: "", 4915 4916 emptyGuestTitle: "", 4917 emptyGuestDescription: "", 4918 emptyGuestSingleNotice: "", 4919 emptyGuestMultiNotice: "", 4920 emptyGuestLoginCTA: "", 4921 emptyGuestBrowseCTA: "", 4922 emptyGuestSignupText: "", 4923 emptyGuestSignupCTA: "", 4924 4925 emptySflTitle: "", 4926 emptySflDescription: "", 4927 emptySflStep1Title: "", 4928 emptySflStep1Description: "", 4929 emptySflStep2Title: "", 4930 emptySflStep2Description: "", 4931 emptySflLoggedInNotice: "", 4932 emptySflGuestNotice: "", 4933 emptySflGoToCartCTA: "", 4934 emptySflLoginCTA: "", 4935 emptySflSignupText: "", 4936 emptySflSignupCTA: "" 4937 }; 4938 4939 SwymStorefrontLayoutContext.stringsLoaded = false;
4940 SwymStorefrontLayoutContext.StorefrontLayoutUrls = SwymStorefrontLayoutContext.StorefrontLayoutUrls || {}; 4941 SwymStorefrontLayoutContext.StorefrontLayoutUrls.Login = "\/customer_authentication\/login?return_to=%2Fpages%2Fserious-about-serums\u0026locale=en\u0026ui_hint=full\u0026region_country=US"; 4942 4943 /** 4944 * Function to override Swym's default UI behavior. 4945 **/ 4946 const overrideSwymDefaultUI = (swat) => { 4947 try{ 4948 swat.ui.open = function(){ 4949 window.location.hash = SwymStorefrontLayoutContext?.StorefrontLayoutUrls?.List; 4950 } 4951 4952 if (swat.ui?.uiRef?.settings?.UI) { 4953 swat.ui.uiRef.settings.UI.NotificationDisabled = true; 4954 } 4955 }catch(e){ 4956 swat.utils?.warn('Error overriding Swym default UI:', e); 4957 } 4958 } 4959 4960 /** 4961 * Callback function to override Swym's default UI behavior based on Storefront Layout settings. 4962 * 4963 * - Overrides `swat.ui.open` to redirect to a custom Storefront Layout URL if enabled. 4964 * - Overrides Swym's default notifications to log notifications instead of displaying them. 4965 * - Ensures the callback is pushed to `window.SwymCallbacks` for execution when Swym is initialized. 4966 * 4967 * @param {Object} swat - Swym's UI object used for overriding UI behaviors. 4968 */ 4969 const swymStorefrontLayoutCallback = (swat) =>{ 4970 SwymStorefrontLayoutContext.swat = swat; 4971 4972 overrideSwymDefaultUI(swat); 4973 4974 4975 let triggerHeartbeat = swat?.ExtensionHealth?.triggerExtensionHeartbeat; 4976 if (typeof triggerHeartbeat !== "function") return; 4977 4978 let wishlistNewUiHeartbeatData = ''; 4979 try { 4980 wishlistNewUiHeartbeatData = JSON.parse(wishlistNewUiHeartbeatData) || {}; 4981 } catch (e) { 4982 wishlistNewUiHeartbeatData = {}; 4983 } 4984 4985 let themeId = window.Shopify.theme.id; 4986 let isDesignMode = !!window.swymDesignMode; 4987 let lastHeartbeat = isDesignMode ? wishlistNewUiHeartbeatData?.editor : wishlistNewUiHeartbeatData?.[themeId]; 4988 let themeContext = isDesignMode ? 'editor' : themeId; 4989 let extensionData = { 4990 extensionName: "wishlist-new-ui", 4991 extensionType: "app-embed", 4992 metadata: {}, 4993 themeId: themeContext, 4994 extensionSource: "default" 4995 }; 4996 /** Stop heartbeat 4997 triggerHeartbeat(extensionData, lastHeartbeat); 4998 */ 4999 } 5000 5001 if (!window.SwymCallbacks) { 5002 window.SwymCallbacks = []; 5003 } 5004 window.SwymCallbacks.push(swymStorefrontLayoutCallback); 5005 })(); 5006</script>
5006 5007<link rel="stylesheet" href="https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/storefront-layout.css">
5008<script src="https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/async-wishlist-apis.js" defer="defer"></script>
vendor: 1 bytes, line 5008
5008
5009<script src="https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/storefront-layout.js" defer="defer"></script>
vendor: 1 bytes, line 5009
5009
5010<script src="https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/storefront-layout-components.js" defer="defer"></script>
5010 5011 5012<swym-storefront-layout class="swym-storefront-layout-root-component"></swym-storefront-layout> 5013<!-- END app snippet --> 5014 </div> 5015 <!-- BEGIN app snippet: swymEducationTooltip --> 5016 5017 5018 5019 5020 <div id="swym-education-tooltip" aria-hidden="true" 5021 data-toast-desktop-message="Interesting? Click '{{wishlistIcon}}' to save it to your {{wishlistName}}." 5022 data-toast-mobile-message="Interesting? Tap '{{wishlistIcon}}' to add to your {{wishlistName}}." 5023 data-toast-cta="Wishlist Now" 5024 data-tooltip-desktop-message="Interesting? Click '{{wishlistIcon}}' to save it to your {{wishlistName}}." 5025 data-tooltip-mobile-message="Interesting? Tap '{{wishlistIcon}}' to add to your {{wishlistName}}." 5026 data-button-transition-text-1="Price drops? Know first." 5027 data-button-transition-text-2="Almost gone. Just saying." 5028 data-button-transition-text-3="Yours when ready."> 5029 </div> 5030 5031 <div id="swym-education-tooltip-bubble" class="swym-education-tooltip swym-education-tooltip-above" aria-hidden="true" role="tooltip"> 5032 <div class="swym-education-tooltip-content"> 5033 <span class="swym-education-tooltip-message"></span> 5034 <button class="swym-education-tooltip-close" data-swym-education-tooltip-close aria-label="Close consent dialog"> 5035 <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 5036 <path d="M18 6L6 18M6 6l12 12"></path> 5037 </svg> 5038 </button> 5039 </div> 5040 <div class="swym-education-tooltip-arrow"></div> 5041 </div> 5042 5043 <style> 5044 /* Education tooltip â positioned fixed, managed by JS */ 5045 .swym-education-tooltip { 5046 position: fixed; 5047 z-index: 500; 5048 visibility: hidden; 5049 opacity: 0; 5050 transition: opacity 0.2s ease, visibility 0.2s ease; 5051 pointer-events: none; 5052 } 5053 .swym-education-tooltip.swym-education-tooltip-visible { 5054 visibility: visible; 5055 opacity: 1; 5056 pointer-events: auto; 5057 } 5058 .swym-education-tooltip-content { 5059 background: var(--swym-storefront-layout-notification-neutral-bg-color, #FFFFFF); 5060 color: var(--swym-storefront-layout-notification-neutral-text-color, #383d41); 5061 border: 1px solid var(--swym-storefront-layout-notification-neutral-border-color, #d6d8db); 5062 padding: 10px 14px; 5063 border-radius: var(--swym-storefront-layout-ui-border-radius, 10px); 5064 font-size: 13px; 5065 line-height: 1.4; 5066 display: flex; 5067 align-items: center; 5068 gap: 8px; 5069 max-width: 320px; 5070 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); 5071 } 5072 .swym-education-tooltip-message { 5073 flex: 1; 5074 } 5075 .swym-education-tooltip-close { 5076 background: none; 5077 border: none; 5078 color: inherit; 5079 cursor: pointer; 5080 padding: 2px; 5081 line-height: 1; 5082 flex-shrink: 0; 5083 opacity: 0.7; 5084 } 5085 .swym-education-tooltip-close:hover { 5086 opacity: 1; 5087 } 5088 5089 /* Button text fade transition for education nudge */ 5090 .swym-btn-text-fade-out { 5091 opacity: 0; 5092 transition: opacity 0.2s ease; 5093 } 5094 .swym-btn-text-fade-in { 5095 opacity: 1; 5096 transition: opacity 0.3s ease; 5097 } 5098 5099 /* Arrow â points down when tooltip is above, up when below */ 5100 .swym-education-tooltip-arrow { 5101 width: 0; 5102 height: 0; 5103 position: absolute; 5104 left: 50%; 5105 transform: translateX(-50%); 5106 } 5107 .swym-education-tooltip-above .swym-education-tooltip-arrow { 5108 bottom: -6px; 5109 border-left: 6px solid transparent; 5110 border-right: 6px solid transparent; 5111 border-top: 6px solid var(--swym-storefront-layout-notification-neutral-bg-color, #FFFFFF); 5112 } 5113 .swym-education-tooltip-below .swym-education-tooltip-arrow { 5114 top: -6px; 5115 border-left: 6px solid transparent; 5116 border-right: 6px solid transparent; 5117 border-bottom: 6px solid var(--swym-storefront-layout-notification-neutral-bg-color, #FFFFFF); 5118 } 5119 5120 /* Hidden data element */ 5121 #swym-education-tooltip { 5122 display: none; 5123 } 5124 5125 @media (max-width: 480px) { 5126 .swym-education-tooltip-content { 5127 max-width: 90vw; 5128 font-size: 12px; 5129 } 5130 } 5131 </style> 5132 5133
5133<script src="https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/swym-education-tooltip.js" defer="defer"></script>
5133 5134
5134<script src="https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/swym-education.js" defer="defer"></script>
5134 5135 5136<!-- END app snippet --> 5137 5138 5139</div><div id="shopify-block-AMXlNNXM5SWtGZ0cxR__17151115064775110295" class="shopify-block shopify-app-block"><style data-recharge-theme='{"has_theme_customization": true, "design_mode": false }'> 5140 .recharge-theme { 5141 /* App */ 5142 --recharge-app-background: #F9F8F4; 5143 --recharge-app-container: 1200px; 5144 --recharge-app-vertical-padding: 32px; 5145 5146 /* Brand colors */ 5147 5148--recharge-color-brand: #F197CB; 5149 5150 /* Tints */ 5151 --recharge-color-brand-120: #ec6fb7; 5152 --recharge-color-brand-20: #f4acd5; 5153 --recharge-color-brand-40: #f7c1e0; 5154 --recharge-color-brand-60: #f9d5ea; 5155 --recharge-color-brand-75: #fce5f2; 5156 --recharge-color-brand-85: #fdeff7; 5157 5158 /* Neutral */ 5159 --recharge-color-neutral: hsl(325, 35%, 7%); 5160 --recharge-color-neutral-80: hsl(325, 7%, 25%); 5161 --recharge-color-neutral-70: hsl(325, 5%, 35%); 5162 --recharge-color-neutral-40: hsl(325, 3%, 63%); 5163 --recharge-color-neutral-10: hsl(325, 2%, 91%); 5164 5165 5166 /* Links */ 5167 --recharge-button-secondary: #FD5B97; 5168 --recharge-button-secondary-120: #fc2e7b; 5169 --recharge-button-secondary-60: #fe9dc1; 5170 5171 /* Images */ 5172 --recharge-images-ratio: 1; 5173 5174 /* Cards */ 5175 5176 --recharge-cards-background: #FFFFFF; 5177 5178 5179 5180 --recharge-cards-border-color: RGBA(0,0,0,0); 5181 5182 5183 /* Fonts */ 5184 --recharge-typography-scale: 16px; 5185 --recharge-typography-size-1: calc(3 * var(--recharge-typography-scale)); 5186 --recharge-typography-size-2: calc(2.25 * var(--recharge-typography-scale)); 5187 --recharge-typography-size-3: calc(1.625 * var(--recharge-typography-scale)); 5188 --recharge-typography-size-4: calc(1.25 * var(--recharge-typography-scale)); 5189 --recharge-typography-size-5: calc(1 * var(--recharge-typography-scale)); 5190 --recharge-typography-size-6: calc(.875 * var(--recharge-typography-scale)); 5191 5192 /** Text **/ 5193 --recharge-typography-light: #FFFFFF; 5194 --recharge-typography-primary: var(--recharge-color-neutral); 5195 --recharge-typography-secondary: var(--recharge-color-neutral-70); 5196 5197 /* Corners */ 5198 --recharge-corners-radius: 8px; 5199 5200 --recharge-button-border-radius: 8px; 5201 5202 5203 /* Views */ 5204 5205 --recharge-views-background: #F9F8F4; 5206 5207 5208 /* Buttons */ 5209 --recharge-button-font-family: inherit; 5210 --recharge-button-brand: var(--recharge-color-brand); 5211 --recharge-button-color: #FFFFFF; 5212 } 5213</style> 5214 5215</div><div id="shopify-block-AbmR4ZVhWZXJvS2NJQ__2786716548061469553" class="shopify-block shopify-app-block"> 5216
5217<script> 5218</script>
5218 5219 5220 </div><div id="shopify-block-Abm0rUlNXcDY5T3ZuN__2734250573734242505" class="shopify-block shopify-app-block">
5221<script src="https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/swym-local-wishlist.js" defer></script>
5221 5222 5223<!-- BEGIN app snippet: swymConsentPopup --> 5224 5225 5226 5227 5228 5229 <style id="swym-consent-popup-styles"> 5230 /* Consent popup styles */ 5231 .swym-consent-popup { 5232 position: fixed; 5233 top: 0; 5234 left: 0; 5235 width: 100%; 5236 height: 100%; 5237 z-index: 999999; 5238 display: flex; 5239 align-items: center; 5240 justify-content: center; 5241 opacity: 0; 5242 visibility: hidden; 5243 transition: opacity 0.2s ease, visibility 0.2s ease; 5244 } 5245 .swym-consent-popup[aria-hidden="false"] { 5246 opacity: 1; 5247 visibility: visible; 5248 } 5249 .swym-consent-popup-overlay { 5250 position: absolute; 5251 top: 0; 5252 left: 0; 5253 width: 100%; 5254 height: 100%; 5255 background: rgba(0, 0, 0, 0.5); 5256 cursor: pointer; 5257 } 5258 .swym-consent-popup-content { 5259 position: relative; 5260 background: #fff; 5261 padding: 32px; 5262 border-radius: 12px; 5263 max-width: 440px; 5264 width: 90%; 5265 box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15); 5266 z-index: 1; 5267 text-align: left; 5268 } 5269 .swym-consent-popup[aria-hidden="false"] .swym-consent-popup-content { 5270 animation: swymPopupSlideIn 0.25s ease; 5271 } 5272 @keyframes swymPopupSlideIn { 5273 from { 5274 opacity: 0; 5275 transform: translateY(-20px) scale(0.95); 5276 } 5277 to { 5278 opacity: 1; 5279 transform: translateY(0) scale(1); 5280 } 5281 } 5282 .swym-consent-popup-close { 5283 position: absolute; 5284 top: 12px; 5285 right: 12px; 5286 background: none; 5287 border: none; 5288 cursor: pointer; 5289 padding: 4px; 5290 color: #666; 5291 transition: color 0.15s ease; 5292 } 5293 .swym-consent-popup-close:hover { 5294 color: #000; 5295 } 5296 .swym-consent-popup-title { 5297 margin: 0 0 12px 0; 5298 font-size: 20px; 5299 font-weight: 600; 5300 color: #111; 5301 text-align: center; 5302 } 5303 .swym-consent-popup-message { 5304 margin: 0 0 24px 0; 5305 font-size: 14px; 5306 line-height: 1.6; 5307 color: #555; 5308 text-align: left; 5309 } 5310 .swym-consent-popup-actions { 5311 display: flex; 5312 gap: 12px; 5313 justify-content: center; 5314 } 5315 /* Secondary buttons â all CTAs have equal weight, outlined style */ 5316 .swym-consent-btn { 5317 flex: 1; 5318 padding: 12px 24px; 5319 font-size: 14px; 5320 font-weight: 500; 5321 border-radius: 6px; 5322 cursor: pointer; 5323 transition: all 0.15s ease; 5324 min-width: 100px; 5325 min-height: 44px; 5326 background: #fff; 5327 color: #111; 5328 border: 1px solid #ccc; 5329 position: relative; 5330 text-align: center; 5331 } 5332 .swym-consent-btn:hover { 5333 background: #f5f5f5; 5334 border-color: #999; 5335 } 5336 /* Disclaimer text under popup actions */ 5337 .swym-consent-popup-disclaimer { 5338 margin: 16px 0 0 0; 5339 font-size: 12px; 5340 line-height: 1.5; 5341 color: #888; 5342 font-style: italic; 5343 text-align: left; 5344 } 5345 /* First CTA (accept button) has bolder font weight */ 5346 .swym-consent-btn[data-swym-consent-accept] { 5347 font-weight: 600; 5348 } 5349 /* Spinner for accept button */ 5350 .swym-consent-btn .swym-consent-spinner { 5351 display: none; 5352 width: 16px; 5353 height: 16px; 5354 border: 2px solid #111; 5355 border-top-color: transparent; 5356 border-radius: 50%; 5357 animation: swymConsentSpin 0.7s linear infinite; 5358 } 5359 .swym-consent-btn.swym-loading { 5360 pointer-events: none; 5361 } 5362 .swym-consent-btn.swym-loading .swym-consent-btn-text { 5363 visibility: hidden; 5364 } 5365 .swym-consent-btn.swym-loading .swym-consent-spinner { 5366 display: block; 5367 position: absolute; 5368 top: 50%; 5369 left: 50%; 5370 transform: translate(-50%, -50%); 5371 } 5372 @keyframes swymConsentSpin { 5373 to { transform: translate(-50%, -50%) rotate(360deg); } 5374 } 5375 .swym-consent-popup-note { 5376 display: none; 5377 } 5378 @media (max-width: 480px) { 5379 .swym-consent-popup-content { 5380 padding: 24px 20px; 5381 margin: 16px; 5382 } 5383 .swym-consent-popup-actions { 5384 flex-direction: column; 5385 } 5386 .swym-consent-btn { 5387 width: 100%; 5388 } 5389 } 5390 /* Ghost-Intent login toast */ 5391 .swym-ghost-toast { 5392 position: fixed; 5393 bottom: 20px; 5394 left: 50%; 5395 transform: translateX(-50%) translateY(100px); 5396 background: #111; 5397 color: #fff; 5398 padding: 14px 20px; 5399 border-radius: 8px; 5400 display: flex; 5401 align-items: center; 5402 gap: 12px; 5403 z-index: 999999; 5404 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 5405 opacity: 0; 5406 transition: opacity 0.3s ease, transform 0.3s ease; 5407 max-width: 90%; 5408 } 5409 .swym-ghost-toast-visible { 5410 opacity: 1; 5411 transform: translateX(-50%) translateY(0); 5412 } 5413 .swym-ghost-toast-message { 5414 font-size: 14px; 5415 } 5416 .swym-ghost-toast-cta { 5417 color: #fff; 5418 text-decoration: underline; 5419 font-weight: 600; 5420 font-size: 14px; 5421 white-space: nowrap; 5422 } 5423 .swym-ghost-toast-close { 5424 background: none; 5425 border: none; 5426 color: #999; 5427 font-size: 18px; 5428 cursor: pointer; 5429 padding: 0 0 0 4px; 5430 line-height: 1; 5431 } 5432 .swym-ghost-toast-close:hover { 5433 color: #fff; 5434 } 5435 /* Confirmation alert (shown after second consent decline) */ 5436 .swym-consent-confirm-alert { 5437 position: fixed; 5438 top: 0; 5439 left: 0; 5440 width: 100%; 5441 height: 100%; 5442 z-index: 9999999; 5443 display: flex; 5444 align-items: center; 5445 justify-content: center; 5446 opacity: 0; 5447 visibility: hidden; 5448 transition: opacity 0.2s ease, visibility 0.2s ease; 5449 } 5450 .swym-consent-confirm-alert[aria-hidden="false"] { 5451 opacity: 1; 5452 visibility: visible; 5453 } 5454 .swym-consent-confirm-overlay { 5455 position: absolute; 5456 top: 0; 5457 left: 0; 5458 width: 100%; 5459 height: 100%; 5460 background: rgba(0, 0, 0, 0.6); 5461 cursor: pointer; 5462 } 5463 .swym-consent-confirm-content { 5464 position: relative; 5465 background: #fff; 5466 padding: 32px; 5467 border-radius: 12px; 5468 max-width: 480px; 5469 width: 90%; 5470 box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2); 5471 z-index: 1; 5472 text-align: left; 5473 } 5474 .swym-consent-confirm-alert[aria-hidden="false"] .swym-consent-confirm-content {
5475 animation: swymPopupSlideIn 0.25s ease; 5476 } 5477 .swym-consent-confirm-icon { 5478 margin-right: 8px; 5479 } 5480 .swym-consent-confirm-title { 5481 margin: 0 0 12px 0; 5482 font-size: 18px; 5483 font-weight: 600; 5484 color: #111; 5485 text-align: center; 5486 display: flex; 5487 align-items: center; 5488 justify-content: center; 5489 } 5490 .swym-consent-confirm-message { 5491 margin: 0 0 24px 0; 5492 font-size: 14px; 5493 line-height: 1.6; 5494 color: #555; 5495 text-align: left; 5496 } 5497 .swym-consent-confirm-actions { 5498 display: flex; 5499 gap: 12px; 5500 justify-content: center; 5501 } 5502 /* Secondary buttons for confirmation alert â equal weight, outlined */ 5503 .swym-consent-confirm-btn { 5504 flex: 1; 5505 padding: 12px 24px; 5506 font-size: 14px; 5507 font-weight: 500; 5508 border-radius: 6px; 5509 cursor: pointer; 5510 transition: all 0.15s ease; 5511 min-width: 120px; 5512 background: #fff; 5513 color: #111; 5514 border: 1px solid #ccc; 5515 } 5516 .swym-consent-confirm-btn:hover { 5517 background: #f5f5f5; 5518 border-color: #999; 5519 } 5520 .swym-consent-confirm-disclaimer { 5521 margin: 16px 0 0 0; 5522 font-size: 12px; 5523 line-height: 1.5; 5524 color: #888; 5525 font-style: italic; 5526 text-align: left; 5527 } 5528 /* First CTA (accept button) in confirmation alert has bolder font weight */ 5529 .swym-consent-confirm-btn[data-swym-confirm-accept] { 5530 font-weight: 600; 5531 } 5532 @media (max-width: 480px) { 5533 .swym-consent-confirm-content { 5534 padding: 24px 20px; 5535 margin: 16px; 5536 } 5537 .swym-consent-confirm-actions { 5538 flex-direction: column; 5539 } 5540 .swym-consent-confirm-btn { 5541 width: 100%; 5542 } 5543 } 5544 </style> 5545 5546 <div id="swym-consent-popup" class="swym-consent-popup" aria-hidden="true" role="dialog" aria-modal="true" aria-labelledby="swym-consent-title" 5547 data-login-url="/customer_authentication/login?return_to=%2Fpages%2Fserious-about-serums&locale=en&ui_hint=full®ion_country=US" 5548 data-local-only-title="Save your wishlist to this device?" 5549 data-local-only-message="To start your favorites list, we need to save your items to this device." 5550 data-local-only-accept="OK, Save to Device" 5551 data-local-only-decline="No, do not save" 5552 data-local-only-note="If you decline, you won't be able to add items to your wishlist." 5553 data-ghost-title="Saving more? sync your list" 5554 data-ghost-message="You have already saved {{itemCount}} of 5 items you can store on this device. For unlimited saves and accessing across devices please Log in." 5555 data-ghost-message-full="You have already saved {{itemCount}} of 5 items on this device, to save more and sync it across devices please Log in." 5556 data-ghost-disclaimer="Disclaimer: By logging in you are providing your consent to save the wishlist data." 5557 data-ghost-accept="Log in to sync" 5558 data-ghost-decline="Keep on this device" 5559 data-toast-message="Item saved! Log in to sync across all your devices." 5560 data-toast-cta="Log in to sync"> 5561 <div class="swym-consent-popup-overlay" data-swym-consent-close></div> 5562 <div class="swym-consent-popup-content"> 5563 <button type="button" class="swym-consent-popup-close" data-swym-consent-close aria-label="Close consent dialog"> 5564 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true" focusable="false"> 5565 <path d="M18 6L6 18M6 6l12 12"></path> 5566 </svg> 5567 </button> 5568 <h3 id="swym-consent-title" class="swym-consent-popup-title">Your Consent Matters</h3> 5569 <p class="swym-consent-popup-message">To save items to your wishlist and provide a personalized experience, we need your consent to store your preferences.</p> 5570 <div class="swym-consent-popup-actions"> 5571 <button type="button" class="swym-consent-btn" data-swym-consent-accept> 5572 <span class="swym-consent-btn-text">Accept</span> 5573 <span class="swym-consent-spinner" aria-hidden="true"></span> 5574 </button> 5575 <button type="button" class="swym-consent-btn" data-swym-consent-decline>Decline</button> 5576 </div> 5577 <p class="swym-consent-popup-note swym-consent-popup-disclaimer"></p> 5578 </div> 5579 </div> 5580 5581 <div id="swym-consent-confirm-alert" class="swym-consent-confirm-alert" aria-hidden="true" role="alertdialog" aria-modal="true" aria-labelledby="swym-confirm-title"> 5582 <div class="swym-consent-confirm-overlay" data-swym-confirm-close></div> 5583 <div class="swym-consent-confirm-content"> 5584 <h3 id="swym-confirm-title" class="swym-consent-confirm-title"> 5585 <svg class="swym-consent-confirm-icon" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="#d97706" stroke-width="2" aria-hidden="true" focusable="false"> 5586 <path d="M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z"></path> 5587 <line x1="12" y1="9" x2="12" y2="13"></line>
5588 <line x1="12" y1="17" x2="12.01" y2="17"></line> 5589 </svg> 5590 Are you sure? keep only on this device 5591 </h3> 5592 <p class="swym-consent-confirm-message" data-confirm-message-template="You have already saved {{itemCount}} of 5 items so you won't be able to save more on this device">You have already saved {{itemCount}} of 5 items so you won't be able to save more on this device</p> 5593 <div class="swym-consent-confirm-actions"> 5594 <button type="button" class="swym-consent-confirm-btn" data-swym-confirm-accept>Login and sync</button> 5595 <button type="button" class="swym-consent-confirm-btn" data-swym-confirm-decline>Yes, only on this device</button> 5596 </div> 5597 <p class="swym-consent-confirm-disclaimer">Disclaimer: By logging in you are providing your consent to save the wishlist data.</p> 5598 </div> 5599 </div> 5600 5601 <!-- BEGIN app snippet: swymLoadConsentManager -->
5602<script> 5603 (function () { 5604 if (document.querySelector("script[data-swym-consent-manager]")) return; 5605 var swymConsentManagerScript = document.createElement("script"); 5606 swymConsentManagerScript.src = "https:\/\/cdn.shopify.com\/extensions\/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8\/swym-relay-839\/assets\/swym-consent-manager.js"; 5607 swymConsentManagerScript.async = false; // run in insertion order once fetched, instead of whenever fetch resolves 5608 swymConsentManagerScript.setAttribute("data-swym-consent-manager", "true"); 5609 document.head.appendChild(swymConsentManagerScript); 5610 })(); 5611</script>
5611 5612<!-- END app snippet --> 5613 5614<!-- END app snippet --> 5615<!-- BEGIN app snippet: swymGhostWishlistDrawer --> 5616 5617 5618<div id="swym-ghost-wishlist-data" style="display:none" 5619 data-title="My Wishlist" 5620 data-empty-title="Your wishlist is empty" 5621 data-empty-description="Add items to your wishlist and see them here" 5622 data-add-to-cart="Add to Cart" 5623 data-added-to-cart="Added to Cart" 5624 data-remove="Remove" 5625 data-view-product="View Product" 5626 data-consent-cta="Sync across devices" 5627 data-items-count="{{count}} items" 5628 data-close="Close" 5629></div> 5630 5631<style id="swym-ghost-wishlist-drawer-styles"> 5632 /* Ghost Wishlist Drawer â overlay */ 5633 .swym-ghost-wl-overlay { 5634 position: fixed; 5635 top: 0; 5636 left: 0; 5637 width: 100%; 5638 height: 100%; 5639 background: rgba(0, 0, 0, 0.4); 5640 z-index: 999998; 5641 opacity: 0; 5642 visibility: hidden; 5643 transition: opacity 0.3s ease, visibility 0.3s ease; 5644 } 5645 .swym-ghost-wl-overlay-visible { 5646 opacity: 1; 5647 visibility: visible; 5648 } 5649 5650 /* Ghost Wishlist Drawer â drawer panel */ 5651 .swym-ghost-wl-drawer { 5652 position: fixed; 5653 top: 0; 5654 right: 0; 5655 width: 400px; 5656 max-width: 90vw; 5657 height: 100%; 5658 background: #fff; 5659 z-index: 999999; 5660 display: flex; 5661 flex-direction: column; 5662 box-shadow: -4px 0 20px rgba(0, 0, 0, 0.1); 5663 transform: translateX(100%); 5664 transition: transform 0.3s ease; 5665 } 5666 .swym-ghost-wl-drawer-open { 5667 transform: translateX(0); 5668 } 5669 5670 /* Drawer header */ 5671 .swym-ghost-wl-header { 5672 display: flex; 5673 align-items: center; 5674 justify-content: space-between; 5675 padding: 20px 24px; 5676 border-bottom: 1px solid #eee; 5677 flex-shrink: 0; 5678 } 5679 .swym-ghost-wl-header-left { 5680 display: flex; 5681 align-items: baseline; 5682 gap: 8px; 5683 } 5684 .swym-ghost-wl-title { 5685 margin: 0; 5686 font-size: 18px; 5687 font-weight: 600; 5688 color: #111; 5689 line-height: 1.2; 5690 } 5691 .swym-ghost-wl-count { 5692 font-size: 13px; 5693 color: #888; 5694 font-weight: 400; 5695 } 5696 .swym-ghost-wl-close { 5697 background: none; 5698 border: none; 5699 cursor: pointer; 5700 padding: 4px; 5701 color: #666; 5702 transition: color 0.15s ease; 5703 display: flex; 5704 align-items: center; 5705 justify-content: center; 5706 } 5707 .swym-ghost-wl-close:hover { 5708 color: #000; 5709 } 5710 5711 /* Items list (scrollable) */ 5712 .swym-ghost-wl-items { 5713 flex: 1; 5714 overflow-y: auto; 5715 padding: 16px 24px; 5716 } 5717 5718 /* Empty state */ 5719 .swym-ghost-wl-empty { 5720 display: flex; 5721 flex-direction: column; 5722 align-items: center; 5723 justify-content: center; 5724 text-align: center; 5725 padding: 60px 20px; 5726 color: #999; 5727 } 5728 .swym-ghost-wl-empty svg { 5729 margin-bottom: 16px; 5730 opacity: 0.5; 5731 } 5732 .swym-ghost-wl-empty-title { 5733 margin: 0 0 8px; 5734 font-size: 16px; 5735 font-weight: 600; 5736 color: #555; 5737 } 5738 .swym-ghost-wl-empty-desc { 5739 margin: 0; 5740 font-size: 14px; 5741 color: #888; 5742 line-height: 1.5; 5743 } 5744 5745 /* Product tile */ 5746 .swym-ghost-wl-item { 5747 display: flex; 5748 gap: 16px; 5749 padding: 16px 0; 5750 border-bottom: 1px solid #f0f0f0; 5751 } 5752 .swym-ghost-wl-item:last-child { 5753 border-bottom: none; 5754 } 5755 5756 /* Product image */ 5757 .swym-ghost-wl-item-image-link { 5758 flex-shrink: 0; 5759 width: 90px; 5760 height: 90px; 5761 display: block; 5762 text-decoration: none; 5763 } 5764 .swym-ghost-wl-item-image { 5765 width: 90px; 5766 height: 90px; 5767 object-fit: cover; 5768 border-radius: 8px; 5769 background: #f5f5f5; 5770 display: block; 5771 } 5772 .swym-ghost-wl-item-image-placeholder { 5773 width: 90px; 5774 height: 90px; 5775 border-radius: 8px; 5776 background: #f5f5f5; 5777 display: flex; 5778 align-items: center; 5779 justify-content: center; 5780 } 5781 5782 /* Product info */ 5783 .swym-ghost-wl-item-info { 5784 flex: 1; 5785 display: flex; 5786 flex-direction: column; 5787 justify-content: center; 5788 min-width: 0; 5789 } 5790 .swym-ghost-wl-item-title { 5791 font-size: 14px; 5792 font-weight: 500; 5793 color: #111; 5794 text-decoration: none; 5795 line-height: 1.4; 5796 margin-bottom: 4px; 5797 display: -webkit-box; 5798 -webkit-line-clamp: 2; 5799 -webkit-box-orient: vertical; 5800 overflow: hidden; 5801 } 5802 .swym-ghost-wl-item-title:hover { 5803 text-decoration: underline; 5804 } 5805 .swym-ghost-wl-item-price { 5806 font-size: 14px; 5807 font-weight: 600; 5808 color: #111; 5809 margin-bottom: 10px; 5810 } 5811 5812 /* Action buttons row */ 5813 .swym-ghost-wl-item-actions { 5814 display: flex; 5815 align-items: center; 5816 gap: 10px; 5817 } 5818 .swym-ghost-wl-item-atc { 5819 display: inline-flex; 5820 align-items: center; 5821 justify-content: center; 5822 padding: 6px 14px; 5823 font-size: 12px; 5824 font-weight: 500; 5825 color: #fff; 5826 background: #111; 5827 border: 1px solid #111; 5828 border-radius: 4px; 5829 cursor: pointer; 5830 text-decoration: none; 5831 transition: background 0.15s ease; 5832 white-space: nowrap; 5833 } 5834 .swym-ghost-wl-item-atc:hover { 5835 background: #333; 5836 color: #fff; 5837 text-decoration: none; 5838 } 5839 /* Add to Cart â loading spinner */ 5840 .swym-ghost-wl-atc-spinner { 5841 display: none; 5842 width: 12px; 5843 height: 12px; 5844 border: 2px solid rgba(255,255,255,0.3); 5845 border-top-color: #fff; 5846 border-radius: 50%; 5847 animation: swym-ghost-wl-spin 0.6s linear infinite; 5848 margin-left: 6px; 5849 } 5850 .swym-ghost-wl-atc-loading .swym-ghost-wl-atc-spinner { 5851 display: inline-block; 5852 } 5853 .swym-ghost-wl-atc-loading { 5854 opacity: 0.7; 5855 pointer-events: none; 5856 } 5857 /* Add to Cart â added state (keeps same style, just disabled) */ 5858 .swym-ghost-wl-atc-added { 5859 pointer-events: none; 5860 opacity: 0.8; 5861 } 5862 @keyframes swym-ghost-wl-spin { 5863 to { transform: rotate(360deg); } 5864 } 5865 .swym-ghost-wl-item-soldout { 5866 font-size: 12px; 5867 color: #999; 5868 font-weight: 500; 5869 } 5870 .swym-ghost-wl-item-remove { 5871 background: none; 5872 border: none; 5873 cursor: pointer; 5874 padding: 4px; 5875 color: #999; 5876 transition: color 0.15s ease; 5877 display: flex; 5878 align-items: center; 5879 justify-content: center; 5880 } 5881 .swym-ghost-wl-item-remove:hover { 5882 color: #e53e3e; 5883 } 5884 5885 /* Footer with consent CTA */ 5886 .swym-ghost-wl-footer { 5887 padding: 16px 24px; 5888 border-top: 1px solid #eee; 5889 flex-shrink: 0; 5890 } 5891 .swym-ghost-wl-consent-btn { 5892 width: 100%; 5893 padding: 12px 20px; 5894 font-size: 14px; 5895 font-weight: 500; 5896 color: #111; 5897 background: #fff; 5898 border: 1px solid #ddd; 5899 border-radius: 6px; 5900 cursor: pointer; 5901 transition: all 0.15s ease; 5902 text-align: center; 5903 } 5904 .swym-ghost-wl-consent-btn:hover { 5905 background: #f5f5f5; 5906 border-color: #ccc; 5907 } 5908 5909 /* Responsive */ 5910 @media (max-width: 480px) { 5911 .swym-ghost-wl-drawer { 5912 width: 100%; 5913 max-width: 100vw; 5914 } 5915 .swym-ghost-wl-header { 5916 padding: 16px 16px; 5917 } 5918 .swym-ghost-wl-items { 5919 padding: 12px 16px; 5920 } 5921 .swym-ghost-wl-item-image-link, 5922 .swym-ghost-wl-item-image, 5923 .swym-ghost-wl-item-image-placeholder { 5924 width: 72px; 5925 height: 72px; 5926 } 5927 .swym-ghost-wl-footer { 5928 padding: 12px 16px; 5929 } 5930 } 5931</style> 5932
5933<script src="https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/swym-ghost-wishlist-drawer.js" defer></script>
5933 5934<!-- END app snippet --> 5935 5936 5937 5938 5939 <!-- BEGIN app snippet: swymHeaderIcon --> 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 <a id="swym-advanced-header-icon" 5951 class="swym-advanced-header-icon swym-header-icon-wrapper" 5952 href="#" 5953 aria-label="Wishlist" 5954 aria-haspopup="dialog" 5955 aria-expanded="false" 5956 > 5957 <span class="swym-header-icon-html"> 5958 5959<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="none" aria-hidden="true" focusable="false"><path d="M19.6706 5.4736C17.6806 3.8336 14.7206 4.1236 12.8906 5.9536L12.0006 6.8436L11.1106 5.9536C9.29063 4.1336 6.32064 3.8336 4.33064 5.4736C2.05064 7.3536 1.93063 10.7436 3.97063 12.7836L11.6406 20.4536C11.8406 20.6536 12.1506 20.6536 12.3506 20.4536L20.0206 12.7836C22.0706 10.7436 21.9506 7.3636 19.6706 5.4736Z" stroke="currentColor" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"></path></svg> 5960 5961 <span class="swym-header-icon-count-bubble" aria-live="polite" aria-atomic="true" style="display: none;"> 5962 <span class="swym-header-icon-count" data-swym-count>0</span> 5963 </span> 5964 </span> 5965 </a> 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995
5996<script> 5997 // Initialize configuration object immediately 5998 window.swymAdvancedHeaderIconConfig = window.swymAdvancedHeaderIconConfig || {}; 5999 window.swymAdvancedHeaderIconConfig.iconHtml = "\n\u003csvg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath d=\"M19.6706 5.4736C17.6806 3.8336 14.7206 4.1236 12.8906 5.9536L12.0006 6.8436L11.1106 5.9536C9.29063 4.1336 6.32064 3.8336 4.33064 5.4736C2.05064 7.3536 1.93063 10.7436 3.97063 12.7836L11.6406 20.4536C11.8406 20.6536 12.1506 20.6536 12.3506 20.4536L20.0206 12.7836C22.0706 10.7436 21.9506 7.3636 19.6706 5.4736Z\" stroke=\"currentColor\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n"; 6000 window.swymAdvancedHeaderIconConfig.countBubbleHtml = "\n\u003cspan class=\"swym-header-icon-count\" data-swym-count\u003e{{WISHLIST_COUNT}}\u003c\/span\u003e\n"; 6001 window.swymAdvancedHeaderIconConfig.attachSelectorDesktop = "#wishlist-header"; 6002 window.swymAdvancedHeaderIconConfig.attachSelectorMobile = "#wishlist-header"; 6003 window.swymAdvancedHeaderIconConfig.hasCustomIconHtml = 1; 6004 window.swymAdvancedHeaderIconConfig.hasCustomCountBubbleHtml = 1; 6005 window.swymAdvancedHeaderIconConfig.ariaLabel = "Wishlist"; 6006 6007 window.swymAdvancedHeaderIconConfig.showWishlistCount = true; 6008 6009</script>
6009 6010 6011<style id="swym-advanced-header-icon-styles"> 6012 6013/* Header Icon Container (anchor tag with both classes) */ 6014.swym-advanced-header-icon { 6015 position: relative; 6016 display: inline-flex; 6017 align-items: center; 6018 justify-content: center; 6019 text-decoration: none; 6020 color: inherit; 6021 cursor: pointer; 6022 transition: opacity 0.2s ease; 6023} 6024 6025.swym-advanced-header-icon:hover { 6026 opacity: 0.7; 6027} 6028 6029/* Focus visibility (WCAG 2.4.7) â use currentColor so the ring inherits the 6030 merchant's own link/icon colour and remains visible across all themes */ 6031.swym-advanced-header-icon:focus-visible { 6032 outline: 2px solid currentColor; 6033 outline-offset: 2px; 6034} 6035 6036/* Header Icon HTML Container - positioning context for count bubble */ 6037.swym-header-icon-html { 6038 position: relative; 6039 display: inline-flex; 6040 align-items: center; 6041 justify-content: center; 6042} 6043 6044/* Header Icon SVG */ 6045.swym-header-icon-svg { 6046 width: 24px; 6047 height: 24px; 6048 display: block; 6049} 6050 6051/* Header Icon Count Bubble Container */ 6052.swym-header-icon-count-bubble { 6053 position: absolute; 6054 top: -7px; 6055 right: -7px; 6056 display: flex; 6057 align-items: center; 6058 justify-content: center; 6059} 6060 6061/* Header Icon Count Badge */ 6062.swym-header-icon-count { 6063 min-width: 18px; 6064 height: 18px; 6065 padding: 0 5px; 6066 font-size: 11px; 6067 font-weight: 600; 6068 line-height: 18px; 6069 text-align: center; 6070 color: #fff; 6071 background-color: #000; 6072 border-radius: 50%; 6073} 6074 6075/* Hide count when zero */ 6076.swym-header-icon-count:empty, 6077.swym-header-icon-count[data-count="0"] { 6078 display: none; 6079} 6080 6081/* Loading state */ 6082.swym-advanced-header-icon.swym-loading { 6083 opacity: 0.5; 6084 pointer-events: none; 6085} 6086 6087/* ACCESSIBILITY IMPROVEMENTS */ 6088@media (prefers-reduced-motion: reduce) { 6089 .swym-advanced-header-icon { 6090 transition: none; 6091 } 6092} 6093 6094 6095/* Ensure icon is always visible regardless of consent state */ 6096.swym-advanced-header-icon, 6097#swym-advanced-header-icon, 6098#swym-advanced-header-icon-mobile { 6099 display: inline-flex !important; 6100 visibility: visible !important; 6101 opacity: 1 !important; 6102} 6103 6104/* Loading state overrides the above */ 6105.swym-advanced-header-icon.swym-loading { 6106 opacity: 0.5 !important; 6107} 6108 6109/* Hide old SDK header launcher if advanced header icon is enabled */ 6110.swym-header-launcher, 6111#swym-header-launcher { 6112 display: none !important; 6113} 6114</style> 6115 6116
6117<script src="https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/advanced-header-icon.js" defer></script>
6117 6118<!-- END app snippet --> 6119 6120 6121 6122 <!-- BEGIN app snippet: advancedCollectionsWishlist --> 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157
6158<script 6159 id="swym-advanced-wishlist-collections-config" 6160> 6161 window.SwymAdvancedCollectionsWishlistConfig = { 6162 beforeHtml: "\u003cbutton type=\"button\" class=\"swym-advanced-wishlist-collections\" aria-label=\"{{ADD_TO_WISHLIST}}\" aria-pressed=\"false\" style=\"color:{{ICON_COLOR}}; transform:{{ICON_POSITION}};\"\u003e\n \u003cdiv class=\"swym-advanced-wishlist-collections-social-count\"\u003e\n {{SOCIAL_COUNT}}\n \u003c\/div\u003e\n \u003cdiv class=\"swym-icon-bg\"\u003e\n \u003csvg width=\"24\" height=\"24\" viewbox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n \u003cpath d=\"M19.6706 5.4736C17.6806 3.8336 14.7206 4.1236 12.8906 5.9536L12.0006 6.8436L11.1106 5.9536C9.29063 4.1336 6.32064 3.8336 4.33064 5.4736C2.05064 7.3536 1.93063 10.7436 3.97063 12.7836L11.6406 20.4536C11.8406 20.6536 12.1506 20.6536 12.3506 20.4536L20.0206 12.7836C22.0706 10.7436 21.9506 7.3636 19.6706 5.4736Z\" stroke=\"{{ICON_COLOR}}\" stroke-width=\"{{ICON_WIDTH}}\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n \u003c\/svg\u003e\n \u003c\/div\u003e\n\u003c\/button\u003e", 6163 afterHtml: "\u003cbutton type=\"button\" class=\"swym-advanced-wishlist-collections\" aria-label=\"{{ADDED_TO_WISHLIST}}\" aria-pressed=\"true\" style=\"color:{{ICON_COLOR}}; transform:{{ICON_POSITION}};\"\u003e\n \u003cdiv class=\"swym-advanced-wishlist-collections-social-count\"\u003e\n {{SOCIAL_COUNT}}\n \u003c\/div\u003e\n \u003cdiv class=\"swym-icon-bg\"\u003e\n \u003csvg width=\"24\" height=\"24\" viewbox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n \u003cpath d=\"M19.6706 5.4736C17.6806 3.8336 14.7206 4.1236 12.8906 5.9536L12.0006 6.8436L11.1106 5.9536C9.29063 4.1336 6.32064 3.8336 4.33064 5.4736C2.05064 7.3536 1.93063 10.7436 3.97063 12.7836L11.6406 20.4536C11.8406 20.6536 12.1506 20.6536 12.3506 20.4536L20.0206 12.7836C22.0706 10.7436 21.9506 7.3636 19.6706 5.4736Z\" stroke=\"{{ICON_COLOR}}\" stroke-width=\"{{ICON_WIDTH}}\" fill=\"{{ICON_COLOR}}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n \u003c\/svg\u003e\n \u003c\/div\u003e\n\u003c\/button\u003e", 6164 ariaLabels: { 6165 viewWishlist: "Item Added. View Wishlist", 6166 addToWishlist: "Add to Wishlist", 6167 removeFromWishlist: "Remove from Wishlist", 6168 wishlistAddedAnnouncement: " people wishlisted this" 6169 }, 6170 socialCountEnabled: false, 6171 iconColor: "#000000", 6172 iconWidth: "1.7", 6173 iconPosition: "top-left", 6174 buttonWidth: 60, 6175 buttonHeight: 40, 6176 shouldCalculatePosition: false, 6177 socialCountCharWidth: 8, 6178 socialCountPadding: 5, 6179 variantSelectorEnabled: true, 6180 variantSelectorChooseCreateText: "Choose or Create new wishlist", 6181 variantSelectorCreateListPlaceholder: "Enter wish list name", 6182 variantSelectorCreateListTitle: "Name Your Wishlist", 6183 ProductUrlSelector: "div.wrapper-title-type \u003e div.title \u003e a", 6184 AttachButtonSelector: ".product-card-redesign \u003e *", 6185 isCollectionPage: false, 6186 disabledProductPaths: [] 6187 }; 6188 6189 // Theme selectors for automated button injection 6190 6191 6192 // Overwrite variant selector text strings with retailer settings once _swat is ready 6193 window.SwymCallbacks = window.SwymCallbacks || []; 6194 window.SwymCallbacks.push(function() { 6195 var s = (window._swat && window._swat.retailerSettings && window._swat.retailerSettings.Strings) || {}; 6196 var c = window.SwymAdvancedCollectionsWishlistConfig; 6197 if (s.CollectionsVariantSelectorChooseActionText) c.variantSelectorChooseCreateText = s.CollectionsVariantSelectorChooseActionText; 6198 if (s.CollectionsCreateListPlaceholder) c.variantSelectorCreateListPlaceholder = s.CollectionsCreateListPlaceholder; 6199 if (s.CollectionsCreateListTitle) c.variantSelectorCreateListTitle = s.CollectionsCreateListTitle; 6200 }); 6201</script>
6201 6202
6203<script src="https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/advanced-collections-wishlist.js" defer></script>
6203 6204 6205<style id="swym-advanced-wishlist-collections-styles"> 6206 .swym-advanced-wishlist-collections-container { 6207 position: absolute; 6208 top: 0; 6209 left: 0; 6210 padding: 10px; 6211 z-index: 5; 6212 cursor: pointer; 6213 width: 60px; 6214 height: 40px; 6215} 6216 6217.swym-advanced-wishlist-collections, 6218.swym-advanced-wishlist-collections svg { 6219 cursor: pointer; 6220 background: unset; 6221 border: none; 6222 box-shadow: none; 6223 display: flex; 6224 align-items: center; 6225 flex-direction: row-reverse; 6226 gap: 5px; 6227 color: currentColor; 6228 min-width: 24px; 6229 min-height: 24px; 6230} 6231 6232button.swym-advanced-wishlist-collections:hover { 6233 background: none; 6234 border: none; 6235 box-shadow: none; 6236} 6237 6238.swym-advanced-wishlist-collections svg path { 6239 stroke: currentColor; 6240} 6241 6242.swym-advanced-wishlist-collections .swym-advanced-wishlist-collections-social-count { 6243 font-size: 14px; 6244 font-weight: 500; 6245 color: currentColor; 6246} 6247 6248.swym-sr-only { 6249 clip: rect(0 0 0 0); 6250 clip-path: inset(50%); 6251 height: 1px; 6252 width: 1px; 6253 overflow: hidden; 6254 white-space: nowrap; 6255 position: absolute; 6256} 6257 6258/* Circular background for icon */ 6259.swym-circular-bg button.swym-advanced-wishlist-collections { 6260 position: relative; 6261 flex-direction: unset; 6262 padding: 0; 6263 background: none; 6264 border: none; 6265 box-shadow: none; 6266} 6267 6268.swym-circular-bg .swym-icon-bg { 6269 display: inline-flex; 6270 align-items: center; 6271 justify-content: center; 6272 width: 36px; 6273 height: 36px; 6274 border-radius: 50%; 6275 background: #fff; 6276 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); 6277} 6278 6279/*for active*/ 6280/* Make button position: relative so badge positions correctly */ 6281.swym-circular-bg .swym-advanced-wishlist-collections { 6282 position: relative; 6283} 6284 6285/* Badge styling when social count is active */ 6286.swym-circular-bg .swym-social-count-active { 6287 position: absolute; 6288 top: -6px; 6289 right: -6px; 6290 background: #000000; 6291 color: #FFFFFF; 6292 border-radius: 50%; 6293 width: 16px; 6294 height: 16px; 6295 font-size: 10px; 6296 font-weight: 600; 6297 line-height: 16px; 6298 text-align: center; 6299 z-index: 1; 6300} 6301</style> 6302<!-- END app snippet --> 6303 6304 6305 6306 6307 <!-- BEGIN app snippet: swymVariantSelector --><div class="swym-variant-selector-modal-background swym-hide-container"> 6308 <div class="swym-collections-variant-popup-parent"></div> 6309</div>
6310<script src="https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/variantSelector.js" defer></script>
6310 6311<link rel="stylesheet" href="https://cdn.shopify.com/extensions/01a0d2a3-23d4-7eab-8707-4bef87dc5dd8/swym-relay-839/assets/variantSelector.css"> 6312<style data-shopify> 6313.swym-collections-variant-popup-header { 6314 display: flex; 6315 justify-content: space-between; 6316 align-items: center; 6317 border-bottom: 1px solid #EBEBEB; 6318 padding: 8px 16px; 6319} 6320div.swym-collections-variant-popup-content { 6321 background: #fff; 6322 padding-top: 1rem; 6323 padding-left: 16px; 6324 padding-right: 16px; 6325 padding-bottom: 16px; 6326} 6327.swym-variant-selector-modal-background .swym-collections-variant-popup-parent.swym-variant-selector-lists-view { 6328 background: #fff; 6329} 6330div.swym-collections-variant-popup-header { 6331 background: #fff; 6332} 6333.swym-hidden { 6334 display: none !important; 6335} 6336#swym-custom-variant-selector-parent #swym-custom-variant-selector-container .swym-filter-option-name, 6337.swym-collections-variant-popup-content #swym-vs-actions-container #swym-custom-wishlist-actions-title { 6338 color: #000; 6339} 6340div.swym-collections-variant-popup-parent div.swym-collections-variant-popup-header h1.swym-collections-variant-popup-header-title, 6341.swym-collections-variant-popup-content .swym-collection-title-detail h2#swym-custom-product-title { 6342 color: #333; 6343} 6344#swym-custom-variant-selector-parent #swym-custom-variant-selector-container label.swym-filter-labels.selected { 6345 color: #fff; 6346 background: #292929; 6347} 6348.swym-font-size-14 { 6349 font-size: 14 6350} 6351.swym-font-size-12 { 6352 font-size: 6353} 6354.swym-font-size-16 { 6355 font-size: 6356} 6357.swym-collections-variant-popup-content-container .swym-collections-variant-popup-content .swym-add-to-wishlist-1, 6358div.swym-variant-selector-lists-btn-container button:nth-child(2), 6359#swym-create-list-button-wrapper button#swym-custom-confirm-list-button { 6360 background: #292929; 6361 color: #fff; 6362} 6363#swym-custom-wishlist-container 6364 .swym-variant-selector-wishlist-item 6365 .swym-variant-selector-list-name 6366 .swym-variant-selector-status { 6367 background: #292929; 6368 color: #fff; 6369} 6370div.swym-vs-spinner { 6371 color: #fff 6372} 6373</style><!-- END app snippet --> 6374 6375 6376</div>
6376<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
6376 6377</body> 6378</html> 6379
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.