1<!doctype html> 2<html class="no-js" lang="en" dir="ltr"> 3<head> 4 5 <!-- Google Tag Manager -->
5<script> !function(){"use strict";function l(e){for(var t=e,r=0,n=document.cookie.split(";");r<n.length;r++){var o=n[r].split("=");if(o[0].trim()===t)return o[1]}}function s(e){return localStorage.getItem(e)}function u(e){return window[e]}function A(e,t){e=document.querySelector(e);return t?null==e?void 0:e.getAttribute(t):null==e?void 0:e.textContent}var e=window,t=document,r="script",n="dataLayer",o="https://ct.joyearbuds.com",a="https://load.ct.joyearbuds.com",i="4a7swiosqoimr",c="3azg=GwlUKCU%2BQj0xWyUrSUBJH09fR15XFwFUGAIQChABDRwWHkcMHh4%3D",g="jsVariable",v="_sbp",E="",d=!1;try{var d=!!g&&(m=navigator.userAgent,!!(m=new RegExp("Version/([0-9._]+)(.*Mobile)?.*Safari.*").exec(m)))&&16.4<=parseFloat(m[1]),f="stapeUserId"===g,I=d&&!f?function(e,t,r){void 0===t&&(t="");var n={cookie:l,localStorage:s,jsVariable:u,cssSelector:A},t=Array.isArray(t)?t:[t];if(e&&n[e])for(var o=n[e],a=0,i=t;a<i.length;a++){var c=i[a],c=r?o(c,r):o(c);if(c)return c}else console.warn("invalid uid source",e)}(g,v,E):void 0;d=d&&(!!I||f)}catch(e){console.error(e)}var m=e,g=(m[n]=m[n]||[],m[n].push({"gtm.start":(new Date).getTime(),event:"gtm.js"}),t.getElementsByTagName(r)[0]),v=I?"&bi="+encodeURIComponent(I):"",E=t.createElement(r),f=(d&&(i=8<i.length?i.replace(/([a-z]{8}$)/,"kp$1"):"kp"+i),!d&&a?a:o);E.async=!0,E.src=f+"/"+i+".js?"+c+v,null!=(e=g.parentNode)&&e.insertBefore(E,g)}(); </script>
5 <!-- End Google Tag Manager --> 6 7 8 <!-- Google Consent Mode V2 Consentmo -->
9<script> 10 window.consentmo_gcm_initial_state = "7"; 11 window.consentmo_gcm_state = "1"; 12 window.consentmo_gcm_security_storage = "strict"; 13 window.consentmo_gcm_ad_storage = "marketing"; 14 window.consentmo_gcm_analytics_storage = "analytics"; 15 window.consentmo_gcm_functionality_storage = "functionality"; 16 window.consentmo_gcm_personalization_storage = "functionality"; 17 window.consentmo_gcm_ads_data_redaction = "true"; 18 window.consentmo_gcm_url_passthrough = "false"; 19 window.consentmo_gcm_data_layer_name = "dataLayer"; 20 21 // Google Consent Mode V2 integration script from Consentmo GDPR 22 window.isenseRules = {}; 23 window.isenseRules.gcm = { 24 gcmVersion: 2, 25 integrationVersion: 3, 26 customChanges: false, 27 consentUpdated: false, 28 initialState: 7, 29 isCustomizationEnabled: false, 30 adsDataRedaction: true, 31 urlPassthrough: false, 32 dataLayer: 'dataLayer', 33 categories: { ad_personalization: "marketing", ad_storage: "marketing", ad_user_data: "marketing", analytics_storage: "analytics", functionality_storage: "functionality", personalization_storage: "functionality", security_storage: "strict"}, 34 storage: { ad_personalization: "false", ad_storage: "false", ad_user_data: "false", analytics_storage: "false", functionality_storage: "false", personalization_storage: "false", security_storage: "false", wait_for_update: 2000 } 35 }; 36 if(window.consentmo_gcm_state !== null && window.consentmo_gcm_state !== "" && window.consentmo_gcm_state !== "0") { 37 window.isenseRules.gcm.isCustomizationEnabled = true; 38 window.isenseRules.gcm.initialState = window.consentmo_gcm_initial_state === null || window.consentmo_gcm_initial_state.trim() === "" ? window.isenseRules.gcm.initialState : window.consentmo_gcm_initial_state; 39 window.isenseRules.gcm.categories.ad_storage = window.consentmo_gcm_ad_storage === null || window.consentmo_gcm_ad_storage.trim() === "" ? window.isenseRules.gcm.categories.ad_storage : window.consentmo_gcm_ad_storage; 40 window.isenseRules.gcm.categories.ad_user_data = window.consentmo_gcm_ad_storage === null || window.consentmo_gcm_ad_storage.trim() === "" ? window.isenseRules.gcm.categories.ad_user_data : window.consentmo_gcm_ad_storage; 41 window.isenseRules.gcm.categories.ad_personalization = window.consentmo_gcm_ad_storage === null || window.consentmo_gcm_ad_storage.trim() === "" ? window.isenseRules.gcm.categories.ad_personalization : window.consentmo_gcm_ad_storage; 42 window.isenseRules.gcm.categories.analytics_storage = window.consentmo_gcm_analytics_storage === null || window.consentmo_gcm_analytics_storage.trim() === "" ? window.isenseRules.gcm.categories.analytics_storage : window.consentmo_gcm_analytics_storage; 43 window.isenseRules.gcm.categories.functionality_storage = window.consentmo_gcm_functionality_storage === null || window.consentmo_gcm_functionality_storage.trim() === "" ? window.isenseRules.gcm.categories.functionality_storage : window.consentmo_gcm_functionality_storage; 44 window.isenseRules.gcm.categories.personalization_storage = window.consentmo_gcm_personalization_storage === null || window.consentmo_gcm_personalization_storage.trim() === "" ? window.isenseRules.gcm.categories.personalization_storage : window.consentmo_gcm_personalization_storage; 45 window.isenseRules.gcm.categories.security_storage = window.consentmo_gcm_security_storage === null || window.consentmo_gcm_security_storage.trim() === "" ? window.isenseRules.gcm.categories.security_storage : window.consentmo_gcm_security_storage; 46 window.isenseRules.gcm.urlPassthrough = window.consentmo_gcm_url_passthrough === null || window.consentmo_gcm_url_passthrough.trim() === "" ? window.isenseRules.gcm.urlPassthrough : window.consentmo_gcm_url_passthrough; 47 window.isenseRules.gcm.adsDataRedaction = window.consentmo_gcm_ads_data_redaction === null || window.consentmo_gcm_ads_data_redaction.trim() === "" ? window.isenseRules.gcm.adsDataRedaction : window.consentmo_gcm_ads_data_redaction; 48 window.isenseRules.gcm.dataLayer = window.consentmo_gcm_data_layer_name === null || window.consentmo_gcm_data_layer_name.trim() === "" ? window.isenseRules.gcm.dataLayer : window.consentmo_gcm_data_layer_name; 49 } 50 window.isenseRules.initializeGcm = function (rules) { 51 if(window.isenseRules.gcm.isCustomizationEnabled) { 52 rules.initialState = window.isenseRules.gcm.initialState; 53 rules.urlPassthrough = window.isenseRules.gcm.urlPassthrough === true || window.isenseRules.gcm.urlPassthrough === 'true'; 54 rules.adsDataRedaction = window.isenseRules.gcm.adsDataRedaction === true || window.isenseRules.gcm.adsDataRedaction === 'true'; 55 } 56 57 let initialState = parseInt(rules.initialState); 58 let marketingBlocked = initialState === 0 || initialState === 2 || initialState === 5 || initialState === 7; 59 let analyticsBlocked = initialState === 0 || initialState === 3 || initialState === 6 || initialState === 7; 60 let functionalityBlocked = initialState === 4 || initialState === 5 || initialState === 6 || initialState === 7; 61 62 let gdprCache = localStorage.getItem('gdprCache') ? JSON.parse(localStorage.getItem('gdprCache')) : null; 63 if (gdprCache && typeof gdprCache.updatedPreferences !== "undefined") { 64 let updatedPreferences = gdprCache.updatedPreferences; 65 marketingBlocked = parseInt(updatedPreferences.indexOf('marketing')) > -1; 66 analyticsBlocked = parseInt(updatedPreferences.indexOf('analytics')) > -1; 67 functionalityBlocked = parseInt(updatedPreferences.indexOf('functionality')) > -1; 68 } 69
70 Object.entries(rules.categories).forEach(category => { 71 if(rules.storage.hasOwnProperty(category[0])) { 72 switch(category[1]) { 73 case 'strict': 74 rules.storage[category[0]] = "granted"; 75 break; 76 case 'marketing': 77 rules.storage[category[0]] = marketingBlocked ? "denied" : "granted"; 78 break; 79 case 'analytics': 80 rules.storage[category[0]] = analyticsBlocked ? "denied" : "granted"; 81 break; 82 case 'functionality': 83 rules.storage[category[0]] = functionalityBlocked ? "denied" : "granted"; 84 break; 85 } 86 } 87 }); 88 rules.consentUpdated = true; 89 isenseRules.gcm = rules; 90 } 91 92 window[window.isenseRules.gcm.dataLayer] = window[window.isenseRules.gcm.dataLayer] || []; 93 function gtag() { window[window.isenseRules.gcm.dataLayer].push(arguments); } 94 95 function initialConsentUpdate() { 96 // Google Consent Mode - initialization start 97 window.isenseRules.initializeGcm({ 98 ...window.isenseRules.gcm, 99 adsDataRedaction: true, 100 urlPassthrough: false, 101 initialState: 7 102 }); 103 104 /* 105 * initialState acceptable values: 106 * 0 - Set both ad_storage and analytics_storage to denied 107 * 1 - Set all categories to granted 108 * 2 - Set only ad_storage to denied 109 * 3 - Set only analytics_storage to denied 110 * 4 - Set only functionality_storage to denied 111 * 5 - Set both ad_storage and functionality_storage to denied 112 * 6 - Set both analytics_storage and functionality_storage to denied 113 * 7 - Set all categories to denied 114 */ 115 116 gtag("consent", "default", isenseRules.gcm.storage); 117 isenseRules.gcm.adsDataRedaction && gtag("set", "ads_data_redaction", isenseRules.gcm.adsDataRedaction); 118 isenseRules.gcm.urlPassthrough && gtag("set", "url_passthrough", isenseRules.gcm.urlPassthrough); 119 } 120 121 let isInitConsentmoSignal = true; 122 document.addEventListener("consentmoSignal", function(e) { 123 if (isInitConsentmoSignal) { 124 initialConsentUpdate(); 125 isInitConsentmoSignal = false; 126 } 127 }); 128</script>
128 129<!--LOOMI SDK--> 130<!--DO NOT EDIT--> 131<link rel="preconnect" href="https://live.visually-io.com" crossorigin data-em-disable> 132<link rel="dns-prefetch" href="https://live.visually-io.com" data-em-disable>
133<script type="text/javascript" data-em-disable data-vsly> 134 (()=> { 135 const env = 2; 136 var store = "joy-planet-finland.myshopify.com"; 137 var alias = store.replace(".myshopify.com", "").replaceAll("-", "_").toUpperCase(); 138 var jitsuKey = "js.65680310506"; 139 var themeId = 162073870678; 140 var role = "main"; 141 window.loomi_ctx = {...(window.loomi_ctx || {}),storeAlias:alias,jitsuKey,env,themeId,role}; 142 143 144 145 146 var product = {}; 147 var variants = []; 148 149 variants.push({id:54276348870998,policy:"continue",price:15900,iq:-6}); 150 151 variants.push({id:54276348936534,policy:"continue",price:15900,iq:-18}); 152 153 variants.push({id:55061249950038,policy:"continue",price:15900,iq:-7}); 154 155 product.variants = variants; 156 product.oos = !true; 157 product.price = 15900 ; 158 window.loomi_ctx.current_product=product; 159 window.loomi_ctx.productId=10882379907414; 160 window.loomi_ctx.variantId = 54276348870998; 161 162 163 window.loomi_ctx.blockingConcent = false; 164 loomi_ctx.ttl=1793729266; 165 166 })() 167</script>
vendor: 1 bytes, line 167
167
168<script type="text/javascript" data-em-disable> 169 !function(){var e,t,n;!function(e){e.JSCondition="jsCondition",e.JSFunction="jsFunction",e.JSEvent="jsEvent",e.Selector="selector",e.ElementEvent="elementEvent",e.PageLoad="pageLoad",e.Timeout="timeout",e.Inactivity="inactivity",e.ExitIntent="exitIntent",e.Conjunction="conjunction"}(e||(e={})),function(e){e[e.PAUSED=4]="PAUSED"}(t||(t={})),function(e){e[e.LOCAL=0]="LOCAL",e[e.STAGE=1]="STAGE",e[e.PROD=2]="PROD",e[e.TEST=3]="TEST"}(n||(n={}));const r="lmi_preview";var o;!function(e){e.USE_CASE="USE_CASE",e.ADD_TO_CART="ADD_TO_CART"}(o||(o={}));const i=function(e){void 0===e&&(e=()=>window);try{return Promise.resolve(v(()=>void 0!==_(()=>e().removeEventListener),100,100)).then(function(){return Promise.resolve()})}catch(e){return Promise.reject(e)}},s=function(e,t){void 0===e&&(e=()=>window),void 0===t&&(t=!1);try{function n(){return Promise.resolve()}const r=t&&a()?Promise.resolve(v(()=>c,1e3,10)).then(function(){}):Promise.resolve(v(()=>void 0!==_(()=>e().addEventListener),10,1e3)).then(function(){});return Promise.resolve(r&&r.then?r.then(n):n())}catch(o){return Promise.reject(o)}};let c=!1;function a(){return!0===_(()=>window.vslyDeferResources)}function u(e,t){void 0===t&&(t=20);let n=0;return function(){clearTimeout(n),n=setTimeout(()=>e(...[].slice.call(arguments)),t)}}window.addEventListener("load",()=>{setTimeout(()=>{c=!0},2e3)});const l="vsly-hide-theme-preview",d="vslyCtags",m=()=>{_(()=>{const e=window.loomi_ctx.ctags||[];0===e.length?window.loomi_ctx.ctags=JSON.parse(localStorage.getItem(d)||"[]"):localStorage.setItem(d,JSON.stringify(e)),_(()=>{const e=JSON.parse(localStorage.getItem("vslyCustomCtags")||"[]");e&&e.length>0&&(window.loomi_ctx.ctags=[...window.loomi_ctx.ctags||[],...e])})})},f=()=>new Date(1e3*Math.floor(Date.now()/1e3));function h(e,t){void 0===t&&(t={async:!1,defer:!1});const n=_(()=>window.visually.flags["bunny-cdn"]),r=A();return p(`vsly-lib-${e}`,`https://${n?"assets.visually.io":r}/vsly/lib/${e}.js`,t)}function p(e,t,n){return void 0===n&&(n={async:!1,defer:!1}),new Promise((r,o)=>{let i=document.getElementById(e);i?r(document.getElementById(e)):(i=document.createElement("script"),i.id=e,i.src=t,i.async=n.async||!1,i.defer=n.defer||!1,i.setAttribute("data-em-disable",""),i.onload=()=>r(i),i.onerror=()=>o(new Error(`Failed to load ${t}`)),document.head.appendChild(i))})}function v(e,t,n,r){return void 0===t&&(t=500),void 0===n&&(n=4),new Promise((o,i)=>{e()?o(0):0!==n?setTimeout(()=>{r&&r()&&i(`condition rejected ${_(()=>e.toString())}`),v(e,t,n-1).then(o).catch(i)},t):i(`condition rejected ${_(()=>e.toString())}`)})}function w(e,t){void 0===t&&(t=500);const n=_(()=>window.visually_io_editor)?Date.now()+1e4:Infinity;function r(o){try{const i=e();i?o(i):Date.now()>=n?o(void 0):setTimeout(()=>r(o),t)}catch(e){console.error("vsly-when",e),Date.now()>=n?o(void 0):setTimeout(()=>r(o),t)}}return new Promise(e=>{r(e)})}function y(e){return!Array.isArray(e)||0===e.length}function g(e){return btoa(unescape(encodeURIComponent(JSON.stringify(e))))}function _(e,t){void 0===t&&(t=void 0);try{return e()}catch{return t}}const S=e=>e&&decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*"+encodeURIComponent(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"))||null;function E(){const e=window.loomi_ctx?.clientId;return e?(window.localStorage.setItem("vsly__st",String(e)),String(e)):window.localStorage.getItem("vsly__st")}function P(e,t,n){void 0===t&&(t=5),void 0===n&&(n=500),t>=0&&!_(e)&&setTimeout(()=>{_(e)||P(e,t-1)},n)}const A=function(e){return void 0===e&&(e=window.loomi_ctx.env),e===n.STAGE?"sdk.loomi-stg.xyz":"live.visually-io.com"};function I(e){return e.replace(/[^a-z_A-Z0-9]/gi,"_")}const b=()=>!!_(()=>x()()),x=()=>_(()=>window.Shopify.customerPrivacy.analyticsProcessingAllowed)||_(()=>window.Shopify.customerPrivacy.userCanBeTracked)||_(()=>window.visually.analyticsProcessingAllowed);function C(){const e=function(){try{return Promise.resolve(v(()=>!!_(()=>window.loomi.jitsu),a()?1e3:500,120)).then(function(){return _(()=>window.loomi.jitsu)})}catch(e){return Promise.reject(e)}}();return{register(t,n,r,o){e.then(e=>_(()=>e.register(t,n,r,o)))},track:function(t,n,r){return Promise.resolve(e).then(function(e){return Promise.resolve(_(()=>e.track(t,n,r))).then(function(){})})},trackExt:function(t,n){return Promise.resolve(e).then(function(e){return Promise.resolve(_(()=>e.trackExt(t,n))).then(function(){})})}}}let k=!1,T=!1;function N(e,t,n){return{id:T?"lmi-000":"lmi-"+ ++j,isApplied:!1,kind:e,selector:t,value:n}}function O(e,t){let n,r=!1;return null!==e.previousElementSibling?n=e.previousElementSibling:(n=e.parentElement,r=!0),n?(e.outerHTML=t,r?n.firstElementChild:n.nextElementSibling):e}let j=Math.round(1e4*Math.random()),L=[],$=new Map;const R="lmid",D="lmwv";function U(){return!!_(()=>window.vsly_fbs)}function M(){return window.location.search.includes("lmi_debug")||U()}function q(){M()&&console.debug("loomi-editor",...[].slice.call(arguments))}function F(){M()&&console.error("loomi-editor",...[].slice.call(arguments))}let B=!0,J={};class V{constructor(e,t){this._value=void 0,this._addedAt=void 0,this._value=e,this._addedAt=t||(new Date).getTime()}value(){return this._value}addedAt(){return this._addedAt}}class H{constructor(e,t){this.backend=void 0,this.ttlMillis=void 0,this.backend=e,this.ttlMillis=t}isValid(e){return!!e&&(new Date).getTime()-e.addedAt()<=this.ttlMillis}get(e){const t=this.backend.get(e),n=this.isValid(t);if(t&&n)return t.value();n||this.backend.remove(e)}set(e,t,n){const r=new V(t,n);this.backend.set(e,r)}}class G{constructor(e){this.namespace=void 0,this.namespace=`vsly_cache_${e}`,window[this.namespace]={}}get(e){return _(()=>window[this.namespace][e])}remove(e){_(()=>delete window[this.namespace][e])}set(e,t){window[this.namespace][e]=t}}class z{constructor(e){this.namespace=void 0,this.namespace=`vsly_cache_${e}`}get(e){return _(()=>{const t=sessionStorage.getItem(`${this.namespace}_${e}`);if(!t)return;const n=JSON.parse(t);return new V(n._value,n._addedAt)})}remove(e){sessionStorage.removeItem(`${this.namespace}_${e}`)}set(e,t){sessionStorage.setItem(`${this.namespace}_${e}`,JSON.stringify(t))}}class K extends H{constructor(e,t){super(new G(e),t)}}const W=function(e,t){void 0===t&&(t=8397271938200529);let n=3735928559^t,r=1103547991^t;for(let t,o=0;o<e.length;
169o++)t=e.charCodeAt(o),n=Math.imul(n^t,2654435761),r=Math.imul(r^t,1597334677);return n=Math.imul(n^n>>>16,2246822507)^Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507)^Math.imul(n^n>>>13,3266489909),`${4294967296*(2097151&r)+(n>>>0)}`},Q="targeting-changed",Y="vslyThemeTest",Z="0891c521a9aa47c6a9fd965198b7ed44",X="_203";function ee(e,t,n,r,o){void 0===n&&(n=10),void 0===r&&(r=!1),void 0===o&&(o="none");const{_USE_CASE:i,_USE_CASE_VARIANT:s,_USE_CASE_AUDIENCES:c,_USE_CASE_VERSION:a,_USE_CASE_GA_VARIANT:u,_USE_CASE_GA:l}=e;if(U()||ie())return;if(!function(e){try{const t=location.pathname,n=new URL(e);if(location.search.includes("vsly-redirected-from"))return!1;if(!0===_(()=>window.visually.flags["sdk-kill-advanced-redirect-checks"]))return!0;{let e=!1;const r=decodeURIComponent(location.search);return n.searchParams.forEach((t,n)=>{const o=decodeURIComponent(`${n}=${t}`);r.includes(o)||(e=!0)}),!!((_(()=>Array.from(n.searchParams.values()).length)||0)>0&&e)||t!==n.pathname}}catch(e){return!1}}(t))return;if(!function(e,t,n){const r=`vsly-redirect-${W(`${n._USE_CASE}-${n._USE_CASE_VARIANT}-${n._USE_CASE_VERSION}-${e}`)}`;return"session"===t?"true"!==sessionStorage.getItem(r)&&(sessionStorage.setItem(r,"true"),!0):"user"!==t||"true"!==localStorage.getItem(r)&&(localStorage.setItem(r,"true"),!0)}(t,o,e))return;h();const d=`${i}-${s}`,m={type:"USE_CASE",ts:f().valueOf(),payload:{sid:_(()=>window.loomi_ctx.session.id),user:{anonymous_id:_(()=>window.loomi_ctx.userId)},use_case:i,use_case_variant:s,...a?{version:a}:{},...c?{audiences:c}:{}},options:{gaName:_(()=>I(l)),gaVariant:_(()=>I(u))}};function h(){document.body&&(document.body.style.opacity=0)}_(()=>{ce(i)&&(m.payload.clickId="redirect",m.options.isRedirect=!0)}),window.vsly_redirecting=!0,setTimeout(function(){try{h();const e=JSON.stringify(m),n=g(m),o=!d.includes(re);let i=t;try{new URLSearchParams(location.search).forEach((e,t)=>{(r||oe(t))&&(i=te(i,t,e))})}catch(t){q("e87",{redirectUrl:i,key:d,event:e,ex:t})}return i=te(i,"vsly-redirected-from",d),o&&(i=te(i,"vsly-redirected-event",n)),location.replace&&location.replace(i),Promise.resolve()}catch(e){return Promise.reject(e)}},n)}function te(e,t,n){try{const r=new URL(e);return r.searchParams.append(t,n),r.href}catch(t){return`${e}${e.includes("?")?"&":"?"}key=${n}`}}function ne(e){return{_USE_CASE:e.experienceId,_USE_CASE_VARIANT:e.variantId,_USE_CASE_VERSION:e.version,_USE_CASE_AUDIENCES:_(()=>window.loomi_ctx.audiences.join("|"),""),_USE_CASE_GA:e.gaExperienceName,_USE_CASE_GA_VARIANT:e.gaVariantName}}const re="theme_test_redirect_back_to_main",oe=e=>e.toLowerCase().startsWith("utm");function ie(){return _(()=>window.Shopify.designMode,!1)}function se(){return _(()=>window.Shopify.country)||_(()=>window.visually.country)}const ce=e=>window.loomi.conf.experiments.find(t=>t.name===e).isRedirect,ae=(e,t)=>{_(()=>!0===window.visually.flags["sdk-disable-dynamic-height-strategy"],!1)||e&&function(e,t,n){let r=e,o=0;for(;r.parentElement&&o<10;)n(r.parentElement),r=r.parentElement,o+=1}(e,0,e=>{const t=e.style.height;var n;(n=t)&&""!==n&&(e.style.removeProperty("height"),e.style.minHeight=t)})};function ue(e,t,n,r){if(!document.body.contains(r)){const r=document.querySelector(n);return r?(t(),e(),{element:r,isDetached:!0}):{isDetached:!1}}return{isDetached:!1}}function le(e){if(!_(()=>window.visually.flags["visibility-redo"]))return document.querySelector(e);const t=document.querySelectorAll(e);for(let e=0;e<t.length;e++){const n=t.item(e);if(de(n))return n}return _(()=>t[0])}function de(e){try{if(!_(()=>window.visually.flags["visibility-redo"]))return!0;if(!e)return!1;const t=e.getBoundingClientRect(),n=getComputedStyle(e);return!_(()=>"none"==n.display||"0"==n.opacity||"hidden"==n.visibility||t.width<=5&&t.height<=5||"none"==e.style.display||"0"==e.style.opacity||"hidden"==e.style.visibility)}catch(e){return!0}}function me(e){return _(()=>window.visually.flags[e],!1)}function fe(){return _(()=>!0===window.vslyDeferWidgets||me("sdk-defer-widgets"),!1)}const he="visually",pe="widgets";let ve;function we(e,t){const n=e+t,r=`vslyw-${n}`;if(!document.getElementById(r)){const e=document.createElement("script");e.id=r,e.type="text/javascript";
169const t=_(()=>window.visually.flags["bunny-cdn"]),o=A();e.src=`https://${t?"assets.visually.io":o}/widgets/${n}.js`,document.head.appendChild(e)}}window.IntersectionObserver&&(ve=new IntersectionObserver((e,t)=>{e.forEach(e=>{if(e.isIntersecting){const n=e.target;(function(e){const t=e.getAttribute("lmw"),n=e.getAttribute(D);if(t&&n){const r=t+n;return v(()=>_(()=>!!window[he][pe][r])&&_(()=>!!window.preact),50,500).then(()=>{_(()=>window[he][pe][r](`#${e.id}`))}),!0}return!1})(n)&&t.unobserve(n)}})},{root:null,rootMargin:window.vslyDeferWidgetsMargin||"100px",threshold:.1}));const ye="vsly-orig-sel";function ge(e,t){try{var n=e()}catch(e){return t(e)}return n&&n.then?n.then(void 0,t):n}const _e=function(e){try{return Promise.resolve(ge(function(){return Promise.resolve(v(()=>!!_(()=>document.querySelector(e)),250,100)).then(function(){return Promise.resolve(document.querySelector(e))})},function(e){return Promise.reject(e)}))}catch(e){return Promise.reject(e)}};function Se(e,t,n){const r=t.extra;return n&&n>=3?void 0!==r&&!!_(()=>e.childNodes[r]):!!r&&!!_(()=>e.childNodes[r])}function Ee(e,t,n){void 0===n&&(n=10),me("kill-theme-testing")||Pe(t)||(Ae(e,t),ee(e,Ie(t).href,n,!0,"session"))}const Pe=e=>{if(xe())return!0;_(function(){try{return Promise.resolve(v(()=>!!document&&!!document.head,10,2e3)).then(function(){const e=document.head||document.getElementsByTagName("head")[0];if(!e.querySelector(`#${l}`)){const t=document.createElement("style");t.id=l,t.appendChild(document.createTextNode("#preview-bar-iframe,#PBarNextFrameWrapper,#PBarNextFrame { display: none !important;}")),e.appendChild(t)}})}catch(e){return Promise.reject(e)}});const t=window.loomi_ctx.themeId||_(()=>window.Shopify.theme.id),n=window.loomi_ctx.role||_(()=>window.Shopify.theme.role),r=!Ne({id:t,role:n}),o=_(()=>!window.loomi_ctx.testedThemes.includes(t));return!(!r||!o)||Te({id:t,role:n},e)},Ae=(e,t)=>{const n=e._USE_CASE!==re;Le(t)&&n&&[sessionStorage,localStorage].forEach(e=>Oe(e))},Ie=e=>{let t=Re();return _(()=>!!window.loomi_api.vslyResolveThemeTestUrl)&&(t=_(()=>window.loomi_api.vslyResolveThemeTestUrl(t),t)),t.searchParams.append("preview_theme_id",`${e||""}`),t},be=()=>{const e="vsly-tts";if($e(e)||De(e))return;ke();const t=Ie("");t.searchParams.append(e,"1"),sessionStorage.setItem(e,`${f().valueOf()}`),document.body.style.opacity=0,location.replace(t.href)},xe=()=>
169{const e="vsly_disableThemeTest",t=$e("disableThemeTest")||!!sessionStorage.getItem(e);return t&&sessionStorage.setItem(e,"1"),ie()||t},Ce=()=>0===(window.loomi_ctx.embeddedTests||[]).filter(e=>e.experiment.isThemeTest).length,ke=()=>[sessionStorage,localStorage].forEach(e=>e.removeItem(Y)),Te=(e,t)=>e.id===t||Ne(e)&&!t,Ne=e=>"main"===e.role,Oe=e=>e.setItem(Y,"1"),je=e=>e.getItem(Y),Le=e=>!!e,$e=e=>_(()=>Re().searchParams.has(e)),Re=()=>_(()=>new URL(window.location.href)),De=e=>{const t=sessionStorage.getItem(e);if(t){const e=f().valueOf()-Number(t);return Number.isFinite(e)&&e<864e5}return t},Ue="data-rid",Me="data-alchemy-element-root";let qe,Fe=0;function Be(e){return e.hasAttribute(Ue)||e.hasAttribute(Me)}const Je=function(e,t){try{return Promise.resolve(v(()=>!!document&&!!document.body&&!!document.querySelector,50,200)).then(function(){!function(){if("undefined"==typeof document)return;Ve||(Ve=new MutationObserver(He)),He();const e="spa"===_(()=>window.vslyIntegrationType,"static")?document:document.body;Ve.observe(e,{childList:!0,subtree:!0,characterData:!0,attributes:!1})}(),e&&(k=e),t&&(T=t)})}catch(e){return Promise.reject(e)}};let Ve;function He(){L.filter(e=>!e.isApplied).forEach(e=>{try{const t=_(()=>document.body.querySelector(e.selector));if(!t)return void function(e,t,n,r,o){void 0===r&&(r=100),void 0===o&&(o=10);const i=!!t,s=_(()=>J[e])||0;!i&&B&&s<o&&(B=!1,J[e]=(_(()=>J[e])||0)+1,setTimeout(()=>{try{n()}catch(t){F("failed to run setTimeout on refreshAllElementsSets",e,t)}B=!0},r+50*s))}(e.selector,t,He,100,10);if($.has(e.id))return;if(function(e,t){if(e&&(void 0===qe&&(qe=!!document.querySelector(`[${Me}],[${Ue}]`)),qe)&&function(e){return["replace","appendBefore","appendAfter","compound","widget","moveElem"].includes(e.kind)}(t))for(let t=e;t;t=t.parentElement)if(Be(t))return!0;return!1}(t,e)&&!function(){if(U())return!0;const e=window.vslyHydrationSize||1,t=!!window.elementIdToRuntimeInitialized&&Object.values(window.elementIdToRuntimeInitialized).length>=e;t&&0===Fe&&(Fe=Date.now());const n=Date.now()-Fe,r=window.vslyHydrationGrace||500;return t&&n>r}())return;const n=Ge(e,t);n&&($.set(e.id,n),e.isApplied=!0)}catch(t){!function(){M()&&console.warn("loomi-editor",...[].slice.call(arguments))}("failed to resolve command from mutation request with exception.",t,e)}}),Ke()}function Ge(e,t){if("replace"===e.kind)return function(e,t,n,r,o){let i=o||e,s=!1;const c=n.outerHTML;return{id:e,isApplied:()=>s,kind:"replace",do:()=>{s||(k&&n.setAttribute(R,i),n.outerHTML!==r&&(n=O(n,r),ae(n),k&&n.setAttribute(R,i),s=!0))},undo:()=>{s&&n.outerHTML!==c&&(n=O(n,c),s=!1)},redoIfNeeded:()=>!1,setDebugId:e=>i=e}}(e.id,0,t,e.value,e.id);if("appendBefore"===e.kind||"appendAfter"===e.kind)return function(e,t,n,r,o){let i=o||e,s=!1,c=document.querySelector(t),a=document.createElement("div");const u=()=>{s||("appendBefore"===r&&(c=document.querySelector(t),_(()=>c.parentNode.insertBefore(a,c)),ae(c),a=O(a,n),k&&a.setAttribute(R,i),s=!0),"appendAfter"===r&&(s||(c=document.querySelector(t),c.nextSibling?(_(()=>c.parentNode.insertBefore(a,c.nextSibling)),ae(c)):(_(()=>c.parentNode.appendChild(a)),ae(c)),a=O(a,n),k&&a.setAttribute(R,i),s=!0)),s=!0)},l=()=>{s&&(a.remove(),s=!1)};return{id:e,isApplied:()=>s,kind:r,do:u,undo:l,redoIfNeeded:()=>{const e=ue(u,l,t,c);return e.element&&(c=e.element),e.isDetached},setDebugId:e=>i=e}}(e.id,e.selector,e.value,e.kind,e.id);if("appendCss"===e.kind)return function(e,t,n,r){let o=r||e,i=!1,s=document.querySelector(t);const c=document.createElement("style"),a=()=>{i||(c.innerHTML=n,k&&c.setAttribute(R,o),document.head.appendChild(c),i=!0)},u=()=>{i&&(c.remove(),i=!1)};return{id:e,kind:"appendCss",isApplied:()=>i,do:a,undo:u,redoIfNeeded:()=>{const e=ue(a,u,t,s);return e.element&&(s=e.element),e.isDetached},setDebugId:e=>o=e}}(e.id,e.selector,e.value,e.id);if("appendJs"===e.kind)return function(e,t,n,r,o){let i=r||e,s=!1,c=document.querySelector(t),a=null;const u=()=>{s||(a||(a=document.createElement("script")),a.setAttribute("type","application/javascript"),a.innerHTML=function(e,t){return e&&t?`(async () => {\n const _USE_CASE = "${t.experienceId}";
169\n const _USE_CASE_VARIANT = "${t.variantId}";\n const _USE_CASE_VERSION = ${_(()=>t.version||0,0)};\n const _USE_CASE_AUDIENCES = "${_(()=>window.loomi_ctx.audiences.join("|"),"")}";\n const _USE_CASE_GA = "${_(()=>t.gaExperienceName.replace(/"/g,'\\"'),t.gaExperienceName)}";\n const _USE_CASE_GA_VARIANT = "${_(()=>t.gaVariantName.replace(/"/g,'\\"'),t.gaVariantName)}";\n const _USE_CASE_CTX = {_USE_CASE,_USE_CASE_VARIANT,_USE_CASE_VERSION,_USE_CASE_AUDIENCES,_USE_CASE_GA,_USE_CASE_GA_VARIANT};\n const __currentScriptElement = document.currentScript;\n ${e}\n if (typeof vslyCleanup !== 'undefined') { \n if (__currentScriptElement) {\n __currentScriptElement.__vslyCleanup = vslyCleanup;\n }\n }\n })()`:!t&&e?`\n(async () => {\n const __currentScriptElement = document.currentScript;\n ${e}\n if (typeof vslyCleanup !== 'undefined') { \n if (__currentScriptElement) {\n __currentScriptElement.__vslyCleanup = vslyCleanup;\n }\n }\n})();\n`:e}(n,o),k&&(a.id=i),document.body.appendChild(a),s=!0)},l=()=>{if(!s)return;const e=(()=>{try{const e=a.__vslyCleanup;if(e)return e(),!0}catch(e){k&&console.error("vslyCleanup error:",e)}return!1})();a&&a.remove(),e&&(a=null),s=!1};return{id:e,kind:"appendJs",isApplied:()=>s,do:u,undo:l,redoIfNeeded:()=>{const e=ue(u,l,t,c);return e.element&&(c=e.element),e.isDetached},setDebugId:e=>i=e}}(e.id,e.selector,e.value,e.id,e.options);if("appendFont"===e.kind){const t=JSON.parse(e.value);if(t&&t.family&&t.weights)return function(e,t,n){n=n||e;let r=!1;const o=document.createElement("link"),i=(c=t.weights,(s=t.family).toLowerCase().includes("jetbrains")&&(s="JetBrains Mono"),`https://fonts.googleapis.com/css2?family=${encodeURIComponent(s)}:wght@${_(()=>c.join(";"))}&display=block`);var s,c;return o.setAttribute("href",i),o.setAttribute("rel","stylesheet"),{id:e,isApplied:()=>r,kind:"appendFont",do:()=>{r||(k&&o.setAttribute(R,n),document.head.appendChild(o),r=!0)},undo:()=>{r&&(o.remove(),r=!1)},redoIfNeeded:()=>!1}}(e.id,t,e.id)}else{if("compound"===e.kind){const n=e.value.map(n=>(n.options=e.options,Ge(n,t))).filter(e=>e);return function(e,t,n){let r=!1;return{id:e,isApplied:()=>r,kind:"compound",do:()=>{r||(t.filter(e=>!e.isApplied()).forEach(e=>{e.setDebugId&&e.setDebugId(n),e.do()}),r=!0)},undo:()=>{r&&(t.filter(e=>e.isApplied()).reverse().forEach(e=>e.undo()),r=!1)},redoIfNeeded:()=>t.map(e=>e.redoIfNeeded()).filter(e=>e).length>0}}(e.id,n,e.id)}if("widget"===e.kind){const t=_(()=>e.block.value),n=_(()=>t.env.sectionId.substring(1),e.id);return function(e,t,n,r,o,i,s){void 0===s&&(s="");const c=i||t;let a=!1;const u=`vslyp-${t}`;let l=null,d=null,m=[];const f=()=>{a||(we(r,s),"replace"===e?w():y(),fe()&&ve||h(),a=!0)},h=()=>{const e=r+s;v(()=>_(()=>!!window[he][pe][e])&&_(()=>!!window.preact),50,500).then(()=>{ae(l),_(()=>window[he][pe][e](`#${t}`))})},p=()=>{if(!a)return;d&&d.remove();const t=document.getElementById(u);if(t&&t.remove(),"replace"===e&&l&&l.children&&l.children.length>0){let e=0;for(const t of l.children)t.style.display=m[e],e+=1}a=!1},w=()=>
169{if(l=le(n),l){if(m=[],l.children&&l.children.length>0)for(const e of l.children){const t=e;t&&!t.getAttribute("preact")&&(m.push(t.style.display),t.style.display="none")}g(),l.appendChild(d),fe()&&ve&&ve.observe(d)}else F("vsly",`failed to find element with selector: ${n} when trying to replace with widget`)},y=()=>{l=le(n),l?(g(),l.insertAdjacentElement("appendBefore"===e?"beforebegin":"afterend",d),fe()&&ve&&ve.observe(d)):F("vsly",`failed to find element with selector: ${n} when trying to append widget`)},g=()=>{if(d=document.getElementById(t),!d){d=document.createElement("section"),d.style.all="unset",d.style.width="100%",d.setAttribute("preact","1"),k&&d.setAttribute(R,c),d.setAttribute("lmw",r),d.setAttribute(D,s),d.id=t;const e=document.createElement("script");e.id=u,e.setAttribute("type","text/props"),e.innerHTML=JSON.stringify(o),_(()=>document.body.appendChild(e))}};return{id:t,isApplied:()=>a,kind:"widget",do:f,undo:p,redoIfNeeded:()=>{const e=ue(f,p,n,l);return e.element&&(l=e.element),e.isDetached}}}(t.htmlKind,n,e.selector,t.widgetId,t.env,n,t.version)}if("moveElem"===e.kind){const t=_(()=>e.block.value);return function(e,t,n,r){let o=!1,i={display:""},s=null,c=null;const a=()=>{o||v(()=>(s=document.querySelector(t),c=document.querySelector(n),!!s&&!!c),50,500).then(()=>{s=document.querySelector(t),c=document.querySelector(n),u()})},u=()=>{c&&s&&(i={display:c.style.display,parentNode:s.parentElement,nextSib:s.nextElementSibling,prevSib:s.previousElementSibling},"appendBefore"===r?c.insertAdjacentElement("beforebegin",s):"appendAfter"===r?c.insertAdjacentElement("afterend",s):"replace"===r&&(c.style.display="none!important",c.insertAdjacentElement("afterend",s)),s.setAttribute(ye,t),o=!0)};return{id:e,isApplied:()=>o,kind:"moveElem",do:a,undo:()=>{o&&c&&s&&(i&&i.prevSib?i.prevSib.insertAdjacentElement("afterend",s):i&&i.nextSib?i.nextSib.insertAdjacentElement("beforebegin",s):i&&i.parentNode&&i.parentNode.appendChild(s),"replace"===r&&(c.style.display=i.display),s.removeAttribute(ye),o=!1)},redoIfNeeded:()=>!(_(()=>s.hasAttribute(ye))&&document.body.contains(s)||(o=!1,a(),0))}}(e.id,e.selector,t.destSelector,_(()=>t.htmlKind))}if("automation"===e.kind)return function(e){let t=!1;return{id:`automation-${(new Date).getDate()}`,kind:"automation",isApplied:()=>t,do:()=>{if(!t){t=!0;try{e.sort((e,t)=>e.order-t.order).map(e=>{switch(e.kind){case"click":return()=>function(e){try{return Promise.resolve(ge(function(){return q("fake-click","about to click on:",e.selector),Promise.resolve(_e(e.selector)).then(function(e){return e&&e.click(),Promise.resolve()})},function(e){return Promise.reject(e)}))}catch(e){return Promise.reject(e)}}(e);case"type":return()=>function(e){try{return Promise.resolve(ge(function(){return q("fake-click","about to type on:",e.selector,"with text: ",e.data),Promise.resolve(_e(e.selector)).then(function(t){const n=_(()=>Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value").set);_(()=>n.call(t,e.data||""));const r=new Event("input",{bubbles:!0});return t.dispatchEvent(r),Promise.resolve()})},function(e){return Promise.reject(e)}))}catch(e){return Promise.reject(e)}}(e);case"scroll":return()=>function(e){try{return Promise.resolve(ge(function(){return q("fake-click","about to scroll to:",e.selector),Promise.resolve(_e(e.selector)).then(function(e){return e.scrollIntoView(!0),Promise.resolve()})},function(e){return Promise.reject(e)}))}catch(e){return Promise.reject(e)}}(e);case"wait":return()=>function(e){try{try{return q("fake-click",`about to wait for: ${e.data}ms`),Promise.resolve(new Promise(t=>{setTimeout(()=>t(),_(()=>e.data)||1e3)}))}catch(e){return Promise.reject(e)}}catch(e){return Promise.reject(e)}}(e);default:return()=>Promise.resolve()}}).reduce((e,t)=>e.then(e=>t()),Promise.resolve()).then()}catch(e){F("failed to run automation with exception:",e)}}},undo:()=>{},redoIfNeeded:()=>!1}}(_(()=>e.block.value).steps);if("visualEdit"===e.kind){const t=_(()=>e.block.value);return function(e,t){let n=!1,r={};const o=function(e,t,n){void 0===n&&(n=!0);const o=t.subChanges.map(n=>{switch(n.kind){case"text":return((e,t,n)=>{if(!e)return()=>{};const r=t.extra;if(Se(e,t,n)){const n=e.childNodes[r].textContent;return e.childNodes[r].textContent=t.value,()=>e.childNodes[r].textContent=n}{const n=e.textContent;return e.textContent=t.value,()=>e.textContent=n}})(e,n,t.version);case"style":return((e,t)=>{if(!e)return()=>{};const n=_(()=>e.style[t.key],null);return e.style.setProperty(t.key,t.value,"important"),()=>e.style.setProperty(t.key,n)})(e,n);case"image":return((e,t)=>{if(!e||!e.removeAttribute||!e.getAttribute)return()=>{};const n=e.getAttribute("srcset")||"";e.removeAttribute("srcset");const r=_(()=>e.src,void 0);e.src=t.value;const o=e.parentElement,i=o&&"PICTURE"===o.nodeName,s=[];
169return i&&o.querySelectorAll("source").forEach(e=>{s.push(e.getAttribute("srcset")||""),e.removeAttribute("srcset")}),()=>{e.setAttribute("srcset",n),e.src=r,i&&o.querySelectorAll("source").forEach((e,t)=>{e.setAttribute("srcset",s[t])})}})(e,n);case"video":return((e,t)=>{if(!e||!e.setAttribute)return()=>{};const n=e.innerHTML;e.innerHTML="";const r=e.getAttribute("src")||"";return e.setAttribute("src",t.value),()=>{e.innerHTML=n,e.setAttribute("src",r)}})(e,n);case"attr":return((e,t)=>{if(!e||!e.setAttribute||!e.getAttribute)return()=>{};const n=e.getAttribute(t.key);return e.setAttribute(t.key,t.value),()=>n?e.setAttribute(t.key,n):e.removeAttribute(t.key)})(e,n)}});n&&(r[t.selector]={ve:t,elem:e,reverts:o})};return{id:e,kind:"visualEdit",isApplied:()=>n,do:()=>{n||(n=!0,t.forEach(e=>{v(()=>!!document.querySelector(e.selector),250,300).then(()=>{const t=document.querySelector(e.selector);o(t,e)})}))},undo:()=>{n&&(n=!1,Object.values(r).forEach(e=>e.reverts.forEach(e=>e())),r={})},redoIfNeeded:()=>{if(!n)return!1;let e=!1;return Object.values(r).forEach(t=>{e=document.body.contains(t.elem)?function(e,t){return e.ve.subChanges.forEac
169h((n,r)=>{n.value!==((e,t,n)=>{switch(t.kind){case"text":return((e,t,n)=>{const r=t.extra;return Se(e,t,n)?e.childNodes[r].textContent:e.textContent})(e,t,n);case"attr":return((e,t)=>e.getAttribute(t.key))(e,t);case"style":return((e,t)=>_(()=>e.style[t.key],null))(e,t);case"image":case"video":return(e=>e.src)(e)}})(e.elem,n,e.ve.version)&&(_(()=>e.reverts[r]()),o(e.elem,{selector:e.ve.selector,subChanges:[n]},!1),t=!0)}),t}(t,e):function(e){e.reverts.forEach(e=>e());const t=document.querySelector(e.ve.selector);return t&&o(t,e.ve),!0}(t)}),e}}}(e.id,t.changes)}if("pageRedirect"===e.kind){const t=_(()=>e.block.value);if(t)return n=t,r=e.options,{id:e.id,kind:"pageRedirect",isApplied:()=>!1,do:()=>{ee(ne(r),n.destUrl,n.redirectAfter,!0===n.retainQueryParams,n.stickinessMode)},undo:()=>{},redoIfNeeded:()=>!1,setDebugId:e=>""}}else if("themeTest"===e.kind){const t=_(()=>e.block.value);if(t)return function(e,t,n){const r=()=>!1;return{id:e,kind:"themeTest",isApplied:r,do:()=>Ee(ne(n),t.targetThemeId),undo:r,redoIfNeeded:r,setDebugId:r}}(e.id,t,e.options)}}var n,r}let ze=!1;function Ke(){ze||(ze=!0,requestAnimationFrame(We))}function We(){$.forEach(e=>{try{e.isApplied()?e.redoIfNeeded():e.do()}catch(t){F("failed to apply mutation command with exception:",t,e)}}),ze=!1}function Qe(e){try{const n=$.get(e),r=n&&n.undo();$.delete(e);const o=L.findIndex(t=>t.id==e);return(t=_(()=>L[o].selector))&&_(()=>J[t])&&delete J[t],L.splice(o,1),Ke(),r}catch(e){return}var t}function Ye(e){return"div"===e.selector&&(e.selector="body div"),L.push(e),He(),{revert:()=>Qe(e.id),mutationId:e.id}}function Ze(){const e=_(()=>window.loomi_ctx.cart);if(e)return e;const t=localStorage.getItem("loomi-cart");if(t)try{return JSON.parse(t)}catch(e){}}var Xe;!function(e){e.CART_CHANGE="CART_CHANGE",e.LOYALTY_CHANGE="LOYALTY_CHANGE"}(Xe||(Xe={}));const et=u((e,t)=>{const n=function(e,t){const n=new Event(Q);return n.key=e,n.value=t,n}(e,t);document.dispatchEvent(n),console.debug("Targeting has changed:",n)},80),tt=()=>window.loomi_ctx.session.id;function nt(e){return _(()=>e.items.map(e=>_(()=>e.selling_plan_allocation.selling_plan.name.toLowerCase())).filter(e=>!!e),[])}function rt(){return JSON.parse(localStorage.getItem("loomi-cart-history")||"[]")}function ot(){const e=_(()=>window.loomi_ctx.sessionProducts);if(e)return e;const t=localStorage.getItem("loomi_session_products"),n=t?JSON.parse(t):[];return _(()=>n.filter(e=>""!=e.handle).reverse().slice(0,20))}function it(e){return JSON.parse(localStorage.getItem(e)||"[]")}function st(e,t,n,r){e=e||[],t=t||[];const o=_(()=>t.filter(t=>!e.find(n(t))))||[],i=[...e,...o].slice(0,25);return i.length>0&&localStorage.setItem(r,JSON.stringify(i)),i}function ct(){return JSON.parse(localStorage.getItem("loomi_purchased_products")||"[]")}const at="vsly_params_history",ut="vsly_visited_pages",lt=function(e){try{const t=e.matches?ht.MOBILE:ht.DESKTOP,n=function(){if(dt!=t){q("device-listener",`device changed to ${t} from ${dt}`),window.loomi_ctx.deviceOverride=t===ht.MOBILE?"m":"d",dt=t;const e=_(()=>window.visually.reload),n=function(){if(e)return Promise.resolve(e()).then(function(){});F("device-listener","can't find reload function")}();if(n&&n.then)return n.then(function(){})}}();return Promise.resolve(n&&n.then?n.then(function(){}):void 0)}catch(e){return Promise.reject(e)}};let dt;function mt(){a()?function(){try{return Promise.resolve(v(()=>c,1e3,10)).then(function(){return ft(),Promise.resolve()})}catch(e){return Promise.reject(e)}}().catch(console.error):ft()}function ft(){let e=_(()=>window.vslyDesktopBreakpoint)||960;e<=0&&(e=960);const t=window.matchMedia(`(max-width: ${e}px)`);t.removeEventListener("change",lt),t.addEventListener("change",lt)}var ht;!function(e){e.MOBILE="MOBILE",e.DESKTOP="DESKTOP"}(ht||(ht={}));const pt=()=>edgetag("getUserId");function vt(){const e="vsly_edgetag";return P(()=>(pt()&&localStorage.setItem(e,pt()),!0)),_(pt)||localStorage.getItem(e)}const wt="lmi_type",yt="lmi_from",gt="lmi_class",_t="lmi_utm_data",St={utm_source:"source",utm_medium:"medium",utm_campaign:"campaign",utm_term:"term",utm_content:"content"},Et=function(e,t){void 0===t&&(t=3);let n=e;for(let e=0;e<t;e++)try{const e=decodeURIComponent(n);if(e===n)break;n=e}catch{break}return n},Pt=function(e){void 0===e&&(e=window.location.search);const t={utm:{},lmi_params:{}};return _(()=>
169new URLSearchParams(e)).forEach((e,n)=>{if(e){const r=St[n],o=Et(e);r?t.utm[r]=o:function(e){return _(()=>[gt,yt,wt].includes(e))}(n)&&(t.lmi_params[n]=o)}}),t};function At(){const e=function(e){let t=[];const n=localStorage.getItem(_t);return null!=n&&(t=[...JSON.parse(n)].slice(0,20)),e&&(e.ts=f(),t=[e,...t]),t}(function(e){if(function(e){return!e||"{}"===JSON.stringify(e)}(e))return null;const t={};return e.campaign&&(t.campaign=e.campaign),e.medium&&(t.medium=e.medium),e.source&&(t.source=e.source),e.term&&(t.term=e.term),e.content&&(t.content=e.content),t}(_(()=>Pt().utm)));return localStorage.setItem(_t,JSON.stringify(e)),e}function It(){const e=_(()=>At(),[]);if(!Array.isArray(e)||0===e.length)return"";const t=e.filter(e=>e.campaign);return 0===t.length?"":_(()=>t.reduce((e,t)=>t.ts>e.ts?t:e,t[0]).campaign,"")||""}const bt=function(e){return Promise.resolve(xt()).then(function(t){return new Promise((n,r)=>{const o=t.transaction([kt],"readonly").objectStore(kt).get(e);o.onerror=e=>{r("IDB e:r"+e.target.error)},o.onsuccess=e=>{n(e.target.result)}})})},xt=function(){try{const e=function(){if(!Tt)return Promise.resolve(new Promise((e,t)=>{const n=indexedDB.open(Ct,1);n.onerror=e=>{t("IDB e:o"+e.target.error)},n.onsuccess=t=>{Tt=t.target.result,e(Tt)},n.onupgradeneeded=e=>{e.target.result.createObjectStore(kt,{keyPath:"id"}).createIndex("id","id",{unique:!0})}})).then(function(){})}();return Promise.resolve(e&&e.then?e.then(function(){return Tt}):Tt)}catch(e){return Promise.reject(e)}},Ct="VISUALLY_IO",kt=Ct;let Tt=null;function Nt(){const e={},t=window.loomi_ctx||{};t.productId&&(e.productId=t.productId);const n=_(()=>{const e=new URL(location.href).searchParams,t="variant";return e.has(t)&&function(e){const t=Number(e),n=isNaN(t)?Number(`${e}`.replace(/[^\d.]+/g,""))||void 0:t;if(void 0!==n&&0!==n)return`${n}`}(e.get(t))})||t.variantId;return n&&(e.variantId=n),e}function Ot(){return _(()=>Ze().items.map(e=>({variantId:e.variant_id||0,quantity:e.quantity||0,productId:e.product_id||0,price:e.price||0})))||[]}const jt=function(e){return void 0===e&&(e=Ze()),_(()=>(("spa"==window.vslyIntegrationType?_(()=>e.attributes.map(e=>e.key)):_(()=>Object.keys(e.attributes)))||[]).filter(e=>!e.startsWith("vsly")&&e.length<20).slice(0,50))||[]};function Lt(){const e=new URL(window.location.href);return e.protocol+"//"+e.hostname+e.pathname}const $t=function(e,t){try{let n;const r=this.cart;if(!r)return Promise.resolve(0);const o=function(){try{var o=r.currency===e?(n=1,r.total_price/100):function(){if(t)return Promise.resolve(v(()=>!!window.loomi_ctx.Currency,100,10)).then(function(){const t=(window.loomi_ctx.Currency.convert(r.total_price,r.currency,e)||0)/100;return n=1,t})}()}catch(e){return}return o&&o.then?o.then(void 0,function(){}):o}();return Promise.resolve(o&&o.then?o.then(function(e){return n?e:0}):n?o:0)}catch(e){return Promise.reject(e)}};function Rt(){const e=_(()=>this.cart.items);if(e&&e.length>0){const t=tt(),n=localStorage.getItem("vsly-last-atc-sid");if(!n)return!1;if(n!==t)return!0;const r=e.map(e=>`${e.variant_id}`);return!!_(()=>rt().find(e=>!!e.sid&&r.includes(`${e.variant_id}`)&&`${e.sid}`!=t))}return!1}function Dt(e){return jt(this.cart).includes(e)}function Ut(e,t){function n(e){return e.toLowerCase()}const r={"==":t=>n(t)==n(e),"!=":t=>n(t)!=n(e),contains:t=>n(t).includes(n(e)),matches:t=>new RegExp(e).test(t)};return!!this.CartSubs().find(e=>r[t](e))}function Mt(){return nt(this.cart)}function qt(e){const t=this.cart;return!!_(()=>t.items.find(t=>t.handle===e))}function Ft(e,t){return"contains"!==t?qt.call(this,e):this.cart?.items?.some(t=>t.handle?.includes(e))??!1}function Bt(e){const t=this.cart;return!!_(()=>t.items.find(t=>!!t.tags&&t.tags.includes(e)))}function Jt(e,t){return"contains"!==t?Bt.call(this,e):this.cart?.items?.some(t=>t.tags?.some(t=>t.includes(e)))??!1}function Vt(e){const t=this.cart;if(t.items.length<=0)return!1;const n=_(()=>t.items.filter(t=>!!t.tags&&t.tags.includes(e)));return _(()=>n.length===t.items.length,!1)}function Ht(e,t){const n=this.cart?.items;return!!n?.length&&n.every(n=>(n.tags||[]).some(n=>"contains"===t?n.includes(e):n===e))}function Gt(e){const t=this.cart;return!!_(()=>t.items.find(t=>!!t.collections&&t.collections.includes(e)))}function zt(){return!0===_(()=>window.loomi_ctx.loyalty.isMember,!1)}function Kt(){return _(()=>
169window.loomi_ctx.loyalty.pointsBalance,0)}function Wt(){return _(()=>window.loomi_ctx.loyalty.earnedPoints,0)}const Qt="__eventn_id";function Yt(){const{id:e,firstSeen:t}=function(e){const t=function(e){try{const t=S(e),{firstSeen:n,id:r}=en(t);if(t)return{id:r,firstSeen:n||nn()}}catch(e){}}(e),n=function(e){const t=window.localStorage.getItem(e),{id:n,firstSeen:r}=en(t);if(t)return{id:n,firstSeen:r||nn()}}(e);if(!t&&!n){const{newId:t,newEpoch:n}=function(){const e=Math.random().toString(36).substring(2,12),t=nn();return{newId:e,newEpoch:t,value:tn(e,t)}}();return Zt(t,n,e),{id:t,firstSeen:n}}if(!n&&t)return Zt(t.id,t.firstSeen,e),t;if(!t&&n)return Zt(n.id,n.firstSeen,e),n;const r=Math.min(t.firstSeen,n.firstSeen);let o=t.firstSeen<=n.firstSeen?t.id:n.id;return Xt(t,n)&&(o=t.id<=n.id?t.id:n.id),n.id==t.id&&n.firstSeen==t.firstSeen||Zt(o,r,e),{id:o,firstSeen:r}}(Qt);return{id:e,firstSession:rn(t),firstSeen:t}}function Zt(e,t,n){void 0===n&&(n=Qt);const r=tn(e,t);_(()=>localStorage.setItem(n,r)),((e,t,n,r)=>{_(()=>window.loomi_ctx.cc)&&!b()||(document.cookie=encodeURIComponent(e)+"="+t+"; path=/; expires=Fri, 31 Dec 9999 23:59:59 GMT"+(n?"; domain="+n:"")+(r?"; secure":""))})(n,r,document.location.hostname.replace("www.","").replace("checkout.",""),"http:"!==document.location.protocol)}const Xt=(e,t)=>e.firstSeen===t.firstSeen&&e.id!==t.id;function en(e){return{firstSeen:_(()=>parseInt(e.split(".")[1]),null),id:_(()=>e.split(".")[0])}}function tn(e,t){return`${e}.${t}`}function nn(){return Math.trunc((new Date).getTime()/1e3)}const rn=e=>(new Date).getTime()/1e3-e<=7200,on="vsly_vid",sn="lmi_debug";function cn(e){return _(()=>new URL(window.location.href).searchParams.get(e)||void 0)}const an=["Roboto","Open Sans","Fredoka","Fredoka","Smooch Sans","Rubik","Lato","Poppins","Oswald","League Spartan","Noto Sans","Raleway","Merriweather","Playfair Display","Inter","JetBrains Mono","Jetbrains Mono"];function un(e){try{(function(e){const t=e.flatMap(e=>_(()=>e.code)).filter(e=>!!e).filter(e=>"widget"===e.kind).map(e=>ln(e.value.env)),n=new Map;return function(e,t){e.forEach(e=>{!function(e,t){const n=new Map;e.forEach(e=>{let[t,r]=e;const o=".font.";if(t.includes(o)){const e=t.split(o)[0]+o;n.has(e)||n.set(e,{families:new Set,weights:new Set});const i=n.get(e);if(t.endsWith(".fontFamily"))i.families.add(r);else if(t.endsWith(".fontWeight")){const e=parseInt(r,10)||500;i.weights.add(e)}}}),function(e,t){e.forEach(e=>{if(e.families.size>0){const n=e.weights.size>0?e.weights:new Set([500]);e.families.forEach(e=>{dn(t,e,n)})}})}(n,t)}(Object.entries(e),t),function(e,t){const n=function(e){const t=".text.isRichText",n=new Set;return e.forEach(e=>{let[r,o]=e;if(r.endsWith(t)&&!0===o){const e=`${r.split(t)[0]}.text.value`;n.add(e)}}),n}(e);0!==n.size&&e.filter(e=>{let[t]=e;return n.has(t)}).forEach(e=>{let[n,r]=e;return function(e,t){var n;if(e)try{!function(e,t){e.querySelectorAll("[style]").forEach(e=>{const n=e.style;if(n.fontFamily){const e=n.fontFamily,r=parseInt(n.fontWeight,10)||500;dn(t,e,new Set([r]))}})}((n=decodeURIComponent(e),(new DOMParser).parseFromString(n,"text/html")),t)}catch(e){console.error("Failed to parse rich text HTML",e)}}(r,t)})}(Object.entries(e),t)})}(t,n),function(e){return Array.from(e.entries()).map(e=>{let[t,n]=e;return{family:t,weights:Array.from(n).sort()}})}(n)})(e).forEach(e=>{let{family:t,weights:n}=e;return function(e,t){return Ye(N("appendFont","div",JSON.stringify({family:e,weights:t})))}(t,n)})}catch(e){F("failed to install custom fonts",e)}}function ln(e){const t={};for(const n in e)if("object"!=typeof e[n]||Array.isArray(e[n]))t[n]=e[n];else{const r=ln(e[n]);for(const e in r)t[`${n}.${e}`]=r[e]}return t}function dn(e,t,n){if(!t)return;const r=t.replaceAll("'","").replaceAll('"',"");if(!function(e){return an.includes(e)}(r))return;e.has(r)||e.set(r,new Set);const o=e.get(r);
169o.add(400),n.forEach(e=>{o.add(e)})}const mn=function(e,t,n,r){void 0===n&&(n=!0),void 0===r&&(r=void 0);try{const o=_(()=>window.loomi_api.addToCart),i=function(){if(o)return Promise.resolve(window.loomi_api.addToCart(e,t,n,r)).then(function(){})}();return Promise.resolve(i&&i.then?i.then(function(){}):void 0)}catch(e){return Promise.reject(e)}},fn=function(e){try{let n;function t(t){return n?t:e.map(e=>{const t=String(e.id),n=pn.get(gn(e.id))||r[t];return n?{...e,variants:Array.isArray(e.variants)?e.variants.map(e=>{const t=_n(e,n);return t?{...e,fixed_price_currency:t.price.currencyCode,price:parseFloat(t.price.amount),compare_at_price:t.compareAtPrice?parseFloat(t.compareAtPrice.amount):e.compare_at_price}:e}):e.variants}:e})}if(!e||0===e.length)return Promise.resolve(e);let r={};const{productIdsToFetch:o}=Sn(e),i=function(){if(o.length>0)return function(t,n){try{var o=Promise.resolve(hn(e)).then(function(e){r=e,Object.entries(r).forEach(e=>{let[t,n]=e;return pn.set(gn(t),n)})})}catch(e){return n(e)}return o&&o.then?o.then(void 0,n):o}(0,function(t){return console.error("vsly",t),n=1,e})}();return Promise.resolve(i&&i.then?i.then(t):t(i))}catch(s){return Promise.reject(s)}},hn=function(e){try{return Promise.resolve(fetch(`https://${wn()}/api/2025-10/graphql.json`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:vn(e)})})).then(function(e){if(!e.ok)throw new Error(`Shopify API error: ${e.status}`);return Promise.resolve(e.json()).then(function(e){if(e.errors)throw new Error(`GraphQL errors: ${JSON.stringify(e.errors)}`);const t={};for(const n in e.data){const r=e.data[n];if(!r)continue;const o=yn(r.id);t[o]={variants:{}}
169,r.variants.edges.forEach(e=>{const n=yn(e.node.id);t[o].variants[n]={price:e.node.price,compareAtPrice:e.node.compareAtPrice}})}return t})})}catch(e){return Promise.reject(e)}},pn=new class extends H{constructor(e,t){super(new z(e),t)}}("p",18e5);function vn(e){const{productIdsToFetch:t,maxVariantsPerProduct:n}=Sn(e),r=se();return`\n query GetProductPrices ${r?`@inContext(country: ${r})`:""} {\n ${t.map(e=>`\n product_${e}: product(id: "gid://shopify/Product/${e}") {\n id\n variants(first: ${n}) {\n edges {\n node {\n id\n price {\n amount\n currencyCode\n }\n compareAtPrice {\n amount\n currencyCode\n }\n }\n }\n }\n }\n `).join("\n")}\n }\n `}const wn=()=>window.loomi_ctx.storeAlias.toLowerCase().replaceAll("_","-")+".myshopify.com";function yn(e){const t=e.match(/\/(\d+)$/);return t?t[1]:e}const gn=e=>String(e)+se(),_n=(e,t)=>{let n=String(e.variant_id);const r=Object.keys(t.variants);return 1==r.length&&(n=r[0]),t.variants[n]},Sn=e=>{let t=1,n=!0;return{productIdsToFetch:e.map(e=>{if(!Array.isArray(e.variants))return{id:String(e.id),needsFetch:!1};const r=new Set(e.variants.map(e=>e.price)).size>1;r&&(n=!1),e.variants.length>t&&(t=e.variants.length);const o=((e,t,n)=>{if(!e)return!0;if(!n)return!1;const r=e.variants||{};return t.some(e=>void 0===r[e])})(pn.get(gn(e.id)),e.variants.map(e=>String(e.variant_id)),r);return{id:String(e.id),needsFetch:o}}).filter(e=>e.needsFetch).map(e=>e.id),maxVariantsPerProduct:n?1:t}},En=new K("recs_cache",300001),Pn=function(e,t){try{const n=Promise.resolve([]);return Promise.resolve(function(r,o){try{var i=function(){if(!e)return n;let r=_(()=>e.recommendationOptions);if(!r)return n;var o;!function(e){const{productId:t,variantId:n}=Nt();(t||n)&&(e.productId={productId:t,variantId:n})}(r),r.cartItems=(o=Ot(),_(()=>o.filter(e=>!!e.productId).map(e=>({productId:`${e.productId}`,variantId:`${e.variantId}`,quantity:e.quantity||1})))),r.currency=_(()=>Ze().currency||"USD","USD"),r.cart_total=_(()=>Ze().total_price,0),_(()=>+Date.now()-window.loomi_ctx.last_vid_atc.ts<5e3)&&(r.last_vid_atc=window.loomi_ctx.last_vid_atc),r.respSize=_(()=>window.visually.recsPerVariant[t.variantId]),["RECENTLY_VIEWED","VIEWED_WITH_RECENTLY_VIEWED"].find(e=>An(r,e))&&(r.recentlyViewed=ot().filter(e=>!!e.productId).map(e=>({productId:`${e.productId}`,variantId:`${e.variantId||""}`,...e.ts?{ts:e.ts}:{}})));const i=ct();return i.length>0&&(r.pastPurchases=i),(An(r,"CART_ITEMS")||function(e){return _(()=>!!e.layeredRuling.find(e=>"latest_added"==e.ruleCond.itemSelection))}(r))&&(r.cartHistory=kn()),r.userId=_(()=>window.loomi_ctx.userId,""),t&&(r.widgetContext=t),_(()=>!!window.loomi_ctx.storeAlias)&&(r.storeAlias=window.loomi_ctx.storeAlias),r.locale=_(()=>window.Shopify.locale)||_(()=>window.visually.locale),E()&&(r.clientId=E()),r.country=se(),Promise.resolve(function(e,t){const n=_(()=>window.loomi_api.updateRecsOpts),r=_(()=>n.get(function(e){return e.widgetId+e.experienceId+e.variantId+e.sectionId}(e))(t),t);return _(()=>n.get(window.loomi_ctx.storeAlias)(r),r)}(t,r)).then(function(e){return r=e,Promise.resolve(Cn(r))})}()}catch(e){return o(e)}return i&&i.then?i.then(void 0,o):i}(0,function(e){return F("loomi-widget,recProducts failed:",e),n}))}catch(e){return Promise.reject(e)}};function An(e,t){return e.type===t||_(()=>e.strategyPerSlot.find(e=>e.strategy===t))||_(()=>!!Object.values(e.conditions).find(e=>e.qbProps.envKey===t))||_(()=>!!e.layeredRuling.find(e=>e.strategy===t||!!_(()=>e.strategyPerSlot.slots.find(e=>e.strategy===t))))}function In(e){const t=function(){const e=window.innerWidth;return e<=360?200:e<=480?360:e<=640?480:e<=768?640:e<=960?768:1024}();e.products.forEach(e=>{const n=new URL(e.image.src);n.searchParams.set("width",`${Math.min(t,e.image.width||1280)}`),e.image.src=n.href})}function bn(){return`https://${A(window.loomi_ctx.env)}/api/recommendations/web/public/v2/recommend`}const xn=new Map,Cn=function(e){try{function t(){return _(()=>o.products)}const n=g(e),r=W(n);let o=En.get(r);const i=function(){if(!o){let e=!0;return me("kill-locale-currency")&&(e=!1),Promise.resolve(((e,t,n)=>{if(xn.has(e))return xn.get(e);const r=window.vslyNativeFetch||window.fetch,o=function(){try{return Promise.resolve(function(e,o){try{var i=function(){function e(){return Promise.resolve(o.json()).then(function(e){const t=function(){if(e.fetchPrices&&n)return Promise.resolve(fn(e.products)).then(function(t){e.products=t})}();return t&&t.then?t.then(function(){return e}):e})}let o;const i=t.length>1e4&&!me("disable-recs-post")?Promise.resolve(r(bn(),{method:"POST",headers:{"Content-Type":"text/plain"},body:t})).then(function(e){o=e}):Promise.resolve(r(`${bn()}?q=${t}`)).then(function(e){o=e});return i&&i.then?i.then(e):e()}()}catch(e){return o(!0,e)}return i&&i.then?i.then(o.bind(null,!1),o.bind(null,!0)):o(!1,i)}(0,function(t,n){if(xn.delete(e),t)throw n;return n}))}catch(e){return Promise.reject(e)}}();return xn.set(e,o),o})(r,n,e)).then(function(e){o=e,_(()=>
169[In,window.loomi_api.onRecsResp].forEach(e=>e&&e(o))),En.set(r,o)})}}();return Promise.resolve(i&&i.then?i.then(t):t())}catch(s){return Promise.reject(s)}},kn=()=>rt().map(e=>{const t={...e};return delete t.sid,t});function Tn(e){return`vsly_pi_${e}`}function Nn(e){return`vsly_hbt_${e}`}function On(e){return`vsly_hbc_${e}`}function jn(e){return Array(e).fill(0).map(()=>Math.floor(10*Math.random())).join("")}function Ln(){try{const e=_(()=>window.vslyAntiFlickerReveal,void 0);e&&e()}catch(e){}}const $n=function(e,t){try{if(y(e)||y(t))return Promise.resolve({products:[]});const n=function(e,t){const n=window.loomi_ctx.storeAlias||"",r=new URLSearchParams({byHandle:g({handles:e}),al:n,slimResp:"1"});return t&&t.length>0&&r.set("metafields",g({fields:t})),`${bn()}?${r.toString()}`}(e,t);return Promise.resolve(fetch(n)).then(function(e){if(!e.ok)throw new Error(`vsly 400 ${e.statusText}`);return e.json()})}catch(e){return Promise.reject(e)}},Rn=function(e){try{try{const t=g(e),n=window.loomi_ctx.storeAlias,r=W(`${n}_${t}_${se()}`),o=Un.get(r);if(o)return Promise.resolve(o);if(Mn.has(r))return Promise.resolve(Mn.get(r));const i=function(){try{return Promise.resolve(function(e,o){try{var i=function(e,o){try{var i=function(){const e=new URL(bn());e.searchParams.set("al",n),e.searchParams.set("productQuery",t);const o=window.vslyNativeFetch||window.fetch;return Promise.resolve(o(e.toString(),{method:"GET",headers:{Accept:"application/json"}})).then(function(e){return e.ok?Promise.resolve(e.json()).then(function(e){return Promise.resolve(function(e){try{if(!e||!e.results||"object"!=typeof e.results)return Promise.resolve({results:{}});const t=e.results,n=function(e){return Object.keys(e).map(t=>{const n=e[t];return n&&n.id?{key:t,product:n}:null}).filter(e=>!!e)}(t);if(0===n.length)return Promise.resolve({...e,results:t});let r=n.map(e=>e.product);return r=function(e){const t={products:e};return In(t),t.products}(r),Promise.resolve(Dn(r)).then(function(o){return r=o,r=function(e){const t=window.loomi_api;if(!t||!t.onRecsResp)return e;try{const n={products:e};return t.onRecsResp(n),n.products}catch(t){return F("onRecsResp hook failed",t),e}}(r),function(e,t,n){t.forEach((t,r)=>{const o=n[r];o&&o.id&&(e[t.key]=o)})}(t,n,r),{...e,results:t}})}catch(e){return Promise.reject(e)}}(e)).then(function(e){return Un.set(r,e),e})}):{results:{}}})}()}catch(e){return o(e)}return i&&i.then?i.then(void 0,o):i}(0,function(e){return F("queryProducts failed:",e),{results:{}}})}catch(e){return o(!0,e)}return i&&i.then?i.then(o.bind(null,!1),o.bind(null,!0)):o(!1,i)}(0,function(e,t){if(Mn.delete(r),e)throw t;return t}))}catch(e){return Promise.reject(e)}}();return Mn.set(r,i),Promise.resolve(i)}catch(e){return F("queryProducts setup failed:",e),Promise.resolve({results:{}})}}catch(e){return Promise.reject(e)}},Dn=function(e){try{return me("kill-locale-currency")||_(()=>!Array.isArray(e[0].variants))?Promise.resolve(e):Promise.resolve(fn(e))}catch(e){return Promise.reject(e)}},Un=new K("ai_recs_cache",300001),Mn=new Map,qn=function(e,t,n){try{const o=Yt(),i=function(e,t,n){const r=function(){const e=Ot(),t={path:window.location.pathname,host:window.location.hostname};_(()=>e.length)>0&&(t.cartItems=e);const n=_(()=>Ze().token);n&&(t.cartToken=n);const r=At();r&&(t.trafficSources=r),t.productsSeenInSession=ot(),t.isCustomer=!!E(),t.query=window.location.search||"",t.hash=window.location.hash||"";const o=jt();return o&&(t.cartAttributes=o),t}();r.storeAlias=e;const o=E();o&&(r.clientId=o),r.anonymousId=t.id,r.firstSeen=t.firstSeen,r.firstSession=t.firstSession,r.gaId=_(()=>document.cookie.split(";").map(e=>e.split("=")).find(e=>{let[t,n]=e;return"_ga"==t.trim()})[1],"");const i=window.loomi_ctx;r.customerTags=_(()=>i.ctags.slice(0,20)),r.landingPage=_(()=>i.session.landing_page),r.hasSubs=!!_(()=>nt(Ze()).length>0);const s=vt();s&&(r.edgetag=s);const c=function(){try{const e=_(()=>new URL(window.location.href));if(_(()=>e.searchParams.get("forceOverride"))){const t=_(()=>e.searchParams.get("targeting"));if(t)return JSON.parse(decodeURIComponent(escape(atob(t))))}}catch(e){F("preview overrides",e)}return{}}(),a=it(at),u=function(){const e=it(ut);function t(e){return new Date(e.ts).valueOf()}function n(){const e=new URL(location.href);return["vslyvid","vslywgid","vslysid","lmi_preview","targeting","vsly_vid"].forEach(t=>e.searchParams.delete(t)),e.search||""}return bt(ut).then(r=>{const o={ts:new Date,name:Lt(),search:_(n,"")},i=!!o.search,s=(_(()=>r.visits)||e||[]).filter(e=>!i||!(e.name===o.name&&!e.search)).filter(e=>
169!(e.name===o.name&&(o.search===e.search||i&&!e.search))).sort((e,n)=>t(n)-t(e)).slice(0,500);var c;s.unshift(o),(c={id:ut,visits:s},Promise.resolve(xt()).then(function(e){return new Promise((t,n)=>{const r=e.transaction([kt],"readwrite").objectStore(kt).put(c);r.onerror=e=>{n("IDB e:w"+e.target.error)},r.onsuccess=()=>{t("")}})})).catch()}).catch(),st([{ts:f(),name:Lt()}],e,e=>t=>e.name===t.name,ut)}(),l=ct(),d={deviceKind:_(()=>window.loomi_ctx.deviceOverride,void 0),...n||{}},m=!!_(()=>navigator.userAgent.includes("Macintosh")&&"ontouchend"in document),h=_(()=>window.innerWidth,0),p=_(()=>window.vslyDesktopBreakpoint)||960,v=_(()=>S("cart_currency"))||_(()=>Ze().currency)||"",w=_(()=>i.current_product);if(w){r.oos=_(()=>w.oos),r.price=_(()=>w.price),r.iq=_(()=>w.variants.reduce((e,t)=>t.iq+e,0)),r.productId=_(()=>{const e=Nt().productId;return Number.isFinite(Number(e))?e.toString():""},"");const e=1*i.variantId;Number.isFinite(e)&&(r.vid=e)}const y=_(tt);"spa"==window.vslyIntegrationType&&(r.spa=!0);const g=_(()=>i.ttl);return{cartCurrency:v,...r,queryHistory:a,isIPadPro:m,windowInnerWidth:h,desktopBreakpoint:p,visitedPages:u,ttl:Number.isFinite(g)?g:0,purchasedLineItems:l,sid:y,...d||{},...c||{}}}(e,o,n);return Promise.resolve(function(e,t){try{const n=g(t),o=function(e){const{previewKey:t,debugAllocator:n,previewVariantId:o}=function(){[r,on].map(e=>{const t=cn(e);t&&sessionStorage.setItem(e,t)});const e=sessionStorage.getItem(r),t=sessionStorage.getItem(on);return{previewKey:e,debugAllocator:cn(sn),previewVariantId:t}}();let i=new URL(e);return t&&i.searchParams.append(r,t),n&&i.searchParams.append(sn,"true"),o&&i.searchParams.append(on,o),i}(Vn(e).cfgUrl);o.searchParams.append("q",n);const i=W(o.href),s=window.vslyNativeFetch||window.fetch,c=Bn.has(i)?Bn.get(i):s(o.href,{priority:"high"}).finally(()=>Bn.delete(i));return Bn.set(i,c),Promise.resolve(c).then(function(e){if(e.ok)return Promise.resolve(e.json());throw new Error(`failed to load config: ${e.statusText}`)})}catch(e){return Promise.reject(e)}}(t,i)).then(function(e){return _(()=>{window.loomi_ctx.audiences=e.audiences,_(()=>e.audiences&&localStorage.setItem("vsly_audiences",JSON.stringify(e.audiences))),window.loomi_ctx.testedThemes=e.testedThemes||[]}),function(e){const t=e.currentVariant;window.loomi_ctx={...window.loomi_ctx||{}};const n=_(()=>t.pid);n&&(window.loomi_ctx.productId=`${n}`);const r=_(()=>t.vid);r&&(window.loomi_ctx.variantId=`${r}`);const o=_(()=>t.price);o&&(window.loomi_ctx.variantPrice=o);const i=_(()=>t.meta);i&&(window.loomi_ctx.productMeta=`${i}`)}(e),st(e.queryHistory,i.queryHistory,e=>t=>t.v===e.v&&t.k===e.k,at),function(e){var t;(t=e.experiments)&&t.findIndex(e=>{const t=_(()=>e.clientTargetingFormula.toString(),"")||"";return t.includes("CartItemHasTag")||t.includes("CartItemHasCollection")||t.includes("AllCartItemsHasTag")})>-1||!0===_(()=>e.flags["sdk-enable-cart-enrichment"],!1)&&(e.flags["sdk-enable-cart-enrichment"]=!1)}(e),{configuration:e,tracking:o}})}catch(e){return Promise.reject(e)}},Fn="vslyb",Bn=new Map;function Jn(e){if("number"==typeof e.chance&&e.chance<100){const t={experienceId:e.name,variantId:e.variant,storeAlias:_(()=>window.loomi_ctx.storeAlias),anonymousId:_(()=>window.loomi_ctx.userId)};e.version&&(t.version=e.version);const r=g(t),o=_(()=>window.loomi_ctx.env,n.PROD),i=new URL(Vn(o).cfgUrl.replace("/allocate","/match"));i.searchParams.append("q",r),fetch(i)}}function Vn(e){let t="/api/allocator/web/public/v2/allocate";return Gn(e)&&(t="/allocate"),{cfgUrl:`${Hn(e)}${t}`}}function Hn(e){return Gn(e)?"http://localhost:8080":`https://${A()}`}function Gn(e){return[n.TEST,n.LOCAL].includes(e)}function zn(e){window.visually={..._(()=>window.visually)||{},flags:e},localStorage.setItem("loomi-flags",JSON.stringify(e))}function Kn(e,t,n){const r=function(r){_(()=>!!r.persisted)&&(window.loomi_ctx.cart=void 0,n(e,t,500).catch(e=>{F("failed reloading sdk",e)}))};_(()=>!window.loomi_ctx.pageshow)&&(q("pageshow initialized"),s().then(()=>{window.addEventListener("pageshow",r),window.loomi_ctx.pageshow=!0}))}function Wn(e){return`${e.name}-${e.variant}`}function Qn(e){return`${e.name}-${e.variant}-${e.version||0}`}function Yn(e){$.forEach(t=>{e&&!e(t)||(t.undo(),t.do())})}const Zn=(e,t)=>!!_(()=>e.audiences.includes(t)),Xn=e=>{const t={},n=Zn(e,"d"),r=Zn(e,"m");return n||r?(_(()=>e.experiments.filter(e=>
169!!e.code).forEach(e=>e.code.forEach(r=>{const o=_(()=>r.value.env.general.recsCount),i=_(()=>n?o.desktop.value:o.value);i>(t[e.variant]||0)&&"number"==typeof i&&(t[e.variant]=i)}))),t):t},er=function(e){void 0===e&&(e={});try{const t=Z+X;return we(Z,X),Promise.resolve(v(()=>_(()=>window.visually.widgets[t]),100,50)).then(function(){const n="#vsly-overlay",r="#vslyp-vsly-overlay";if(!document.querySelector(r)){const e=document.createElement("div");e.id=n.replace("#",""),e.textContent=".",e.style.opacity="0",e.style.display="none",document.body.appendChild(e);const t=document.createElement("script");t.id=r.replace("#",""),t.type="text/props",t.textContent="{}",document.body.appendChild(t)}return window.visually.widgets[t](n),Promise.resolve(v(()=>!!window.loomi_api._openProductOverlay,100,50)).then(function(){window.loomi_api._openProductOverlay((e=>{const t=_(()=>e.widgetContext)||_(()=>e.mpCtx)||_(()=>e.overlay.mpCtx);return t?{...e,overlay:{...e.overlay||{},mpCtx:t}}:e})(e))})})}catch(e){return Promise.reject(e)}};function tr(e,t,n,r){const[o,i]=t.split(",");return new Promise(t=>{bt(ut).then(n=>{for(const s of function(e,t,n){const r=(new Date).valueOf();return(_(()=>e.visits,[])||[]).filter(e=>{const o=new Date(e.ts).valueOf(),i=36e5,s=parseInt(t);switch(n.replaceAll('"',"")){case"hours":return o>r-s*i;case"weeks":return o>r-s*i*24*7;case"days":return o>r-s*i*24;default:return!1}})}(n,o,i))if(r||cr(e)){if(rr(s,e))return void t(!0)}else if(nr(s,e))return void t(!0);t(!1)})})}function nr(e,t){return!![or(e),sr(or(e))].find(e=>e.includes(t))}function rr(e,t){const n=e.search||"",r=or(e)+n;return!![r,sr(r)].find(e=>e.includes(ir(t)))}function or(e){return ir(function(e){const t=_(()=>new URL(e));if(!t)return e;const n=t.pathname.split("/");return/^[a-z]{2}-[a-z]{2}$/.test(n[1])&&(t.pathname=n.slice(2).join("/")),ir(t.href)}(e.name))}function ir(e){const t=_(()=>new URL(e));return t&&t.pathname.endsWith("/")?"/"===t.pathname?t.href.slice(0,-1):(t.pathname=t.pathname.slice(0,-1),t.href):e}function sr(e){return e.includes("/products/")&&e.includes("/collections/")?e.replace(/\/collections\/[^/]+/,""):e}function cr(e){return _(()=>!!new URL(e).search)}const ar=function(e){try{return Er(),yr(e.clientTargetingFormula)&&(mr[hr(e)]=e),Promise.resolve(Sr(e)).then(function(t){return t?(vr(e),!0):(q(`exp: ${e.gaName} not run client targeting: ${e.clientTargetingFormula} => false`),!1)})}catch(e){return Promise.reject(e)}},ur=function(e){try{const t=Object.entries(mr).map(t=>{let[n,r]=t;return yr(r.clientTargetingFormula)&&(mr[hr(r)]=r),{exp:r,shouldBeApplied:lr(r.clientTargetingFormula,e,r.name),hasBeenApplied:()=>!!fr[hr(r)]}});return Promise.resolve(gr(t)).then(function(e){!function(e){e.filter(e=>e.hasBeenApplied()&&!e.shouldBeApplied).flatMap(e=>{const t=_(()=>fr[hr(e.exp)]);return t&&delete fr[hr(e.exp)],t}).forEach(e=>{_(e.revert)})}(e),function(e){e.filter(e=>e.shouldBeApplied&&!e.hasBeenApplied()).forEach(e=>{var t,n,r;vr(e.exp),t=e.exp,n=wr,void 0===r&&(r=C()),n.has(t.variant)||(xr(r,t),n.add(t.variant),Jn(t))})}(e)})}catch(e){return Promise.reject(e)}},lr=function(e,t,n){void 0===n&&(n="");try{if(void 0===t&&(t=pr()),yr(e)){t.Total=$t,t.CartHasSubs=Ut,t.CartSubs=Mt,t.CartHasItem=qt,t.CartHasItemMatching=Ft,t.CartItemHasTagMatching=Jt,t.CartItemHasTag=Bt,t.AllCartItemsHasTag=Vt,t.AllCartItemsHasTagMatching=Ht,t.CartItemHasCollection=Gt,t.IsLoyaltyCustomer=zt,t.LoyaltyPointsBalance=Kt,t.LoyaltyPointsEarned=Wt,t.PageVisit=tr,t.CustomerTag=Pr,t.IsGuest=Ar,t.AbandonedCart=Rt,t.CartAttrName=Dt,t.UseCaseId=n;const r=()=>new Function(`\n const c = arguments[0];\n return ${function(e){const t=t=>_(()=>e.includes(t));for(const n of["PageVisit","Total"])t(`c.${n}`)&&!t(`await c.${n}`)&&(e=`( ${e.replaceAll(`c.${n}`,`await c.${n}`)} )`);return!t("(async ()")&&t("await")?`(async () => (${e}))()`:e}(e)}`)(t);return Promise.resolve(new Promise(e=>e(r())).catch(e=>(F("client side formula err",e),!1)))}return Promise.resolve(!0)}catch(e){return Promise.reject(e)}};let dr=!1;const mr={},fr={},hr=e=>`${e.name}-${e.variant}`;function pr(){return{cart:Ze(),Total:$t,CartHasSubs:Ut,CartSubs:Mt,CartHasItem:qt,CartHasItemMatching:Ft,CartItemHasTagMatching:Jt,CartItemHasTag:Bt,AllCartItemsHasTag:Vt,AllCartItemsHasTagMatching:Ht,CartItemHasCollection:Gt,IsLoyaltyCustomer:zt,LoyaltyPointsBalance:Kt,LoyaltyPointsEarned:Wt,PageVisit:tr,CustomerTag:Pr,IsGuest:Ar,AbandonedCart:Rt,CartAttrName:Dt}}function vr(e){const t={experienceId:e.name,variantId:e.variant,gaExperienceName:e.gaName,gaVariantName:e.gaVariant,reportGa:e.ga,publishedAt:e.publishedAt,version:e.version};var n;n=_(()=>e.code.map(e=>{try{return function(e,t){if("compound"===e.kind){const n=e.value,r=function(e,t,n,r,o){const i=[];return n&&""!==n&&i.push(N(e,t,n)),r&&""!==r&&i.push(N("appendCss",t,r)),o&&""!==o&&i.push(N("appendJs",t,o)),i}(n.htmlKind,e.selector,n.html,n.css,n.js),o=N(e.kind,e.selector,r);o.options=t;const i=Ye(o);return i.htmlId=r[0].id,r[1]&&(i.cssId=r[1].id),r[2]&&(i.jsId=r[2].id),i}if("widget"===e.kind){const n=N(e.kind,e.selector,"");n.options=t,n.block=e;const r=function(e,t){const n=_(()=>e.block.value);return{...t,sectionId:_(()=>n.env.sectionId),widgetId:_(()=>n.widgetId),widgetVersion:_(()=>n.version)}}(n,t);!function(e,t){const n=_(()=>e.block.value.env);
169n&&Object.entries(t).forEach(e=>{let[t,r]=e;return n[t]=r})}(n,r);const o=Ye(n);return o.htmlId=n.id,o}if(["pageRedirect","themeTest"].includes(e.kind)){const n=N(e.kind,e.selector,"");return n.options=t,n.block=e,Ye(n)}if(["moveElem","automation","visualEdit"].includes(e.kind)){const n=N(e.kind,e.selector,"");n.options=t,n.block=e;const r=Ye(n);return r.htmlId=n.id,r}const n=N(e.kind,e.selector,e.value);return n.options=t,Ye(n)}(e,t)}catch(e){}}).filter(e=>!!e),[]),fr[hr(e)]=n,function(e){if(!0!==window.visually?.flags?.["experience-applied-callback"])return;const t=window.vslyOnExperienceApplied;if("function"!=typeof t)return;const n={experienceId:e.name,variantId:e.variant,experienceName:e.gaName,variantName:e.gaVariant,version:e.version??0};try{Promise.resolve(t(n)).catch(e=>F("vslyOnExperienceApplied callback failed",e))}catch(e){F("vslyOnExperienceApplied callback failed",e)}}(e)}const wr=new Set;function yr(e){return!!e&&""!==e}const gr=function(e){try{return Promise.resolve(Promise.all(e.map(function(e){try{return Promise.resolve(e.shouldBeApplied).then(function(t){return{...e,shouldBeApplied:t}})}catch(e){return Promise.reject(e)}})))}catch(e){return Promise.reject(e)}},_r=e=>{const t=_(()=>e.key),n=_(()=>e.value),r=pr();t===Xe.CART_CHANGE?(ur({...r,cart:n}),_(()=>window.loomi_ctx.maintainCartAttributes(n))):t===Xe.LOYALTY_CHANGE&&ur(r)};function Sr(e){return lr(e.clientTargetingFormula,void 0,e.name)}function Er(){dr||s(()=>document).then(()=>{document.addEventListener(Q,_r),dr=!0})}function Pr(e,t){if(void 0===t&&(t=""),"contains"===t)return _(()=>window.loomi_ctx.ctags?.some(t=>t.includes(e)))||!1;const n=["!","not in"].some(e=>t.includes(e)),r=_(()=>window.loomi_ctx.ctags.includes(e))||!1;return n?!r:r}function Ar(){return Promise.resolve(_(()=>!window.loomi_ctx.clientId))}function Ir(e){const t=hr(e),n=fr[t];n&&(n.forEach(e=>_(e.revert)),delete fr[t]),delete mr[t]}const br=function(e,t,n){try{let r;return Promise.resolve(n()).then(function(n){n?(xr(t,e),(yr(e.clientTargetingFormula)||function(e){return!!me("trigger-delayed-allocation")&&_(()=>["jsFunction","jsCondition"].includes(e.trigger.type))}(e))&&Jn(e)):r=1})}catch(e){return Promise.reject(e)}};function xr(e,t){return _(()=>{e.register(t.name,t.variant,t.gaVariant,t.gaName);const n=t.ga;return e.track(o.USE_CASE,{use_case:t.name,use_case_variant:t.variant,...t.version?{version:t.version}:{}},{isAudience:t.isAudience,isRedirect:t.isRedirect,immediate:t.immediate,gaName:t.gaName,gaVariant:t.gaVariant,...n?{reportGa:n}:{}})})}const Cr=new Set,kr=new Set,Tr=new Set,Nr=new Set;let Or;function jr(e){void 0===Or&&(Or=new MutationObserver(Lr(e)),Or.observe(document.body,{childList:!0,subtree:!0,attributes:!1,characterData:!1}))}function Lr(e){return()=>{$r(Cr,Tr,(t,n)=>{br(n,e,()=>(t.add(Rr(n.trigger.selector,n)),ar(n)))}),$r(kr,Nr,(t,n,r)=>{const o=n.trigger;t.add(Rr(o.selector,n)),r.addEventListener(o.name,()=>br(n,e,()=>ar(n)),{once:void 0!==o.once&&o.once})})}}function $r(e,t,n){e.forEach(e=>{_(()=>{const r=e.trigger.selector;document.body.querySelectorAll(r).forEach(o=>{t.has(Rr(r,e))||n(t,e,o)})})})}function Rr(e,t){return`${e}-${t.name}`}function Dr(e){const t=JSON.stringify({ts:(new Date).getTime(),...e});let n,r,o=0;if(0===t.length)return o;for(n=0;n<t.length;n++)r=t.charCodeAt(n),o=(o<<5)-o+r,o|=0;return o}function Ur(e){const t=Dr(e);return Br(t),v(()=>new Function(e.code)(window),e.timeoutMillis,e.retries,()=>void 0===Jr(t))}function Mr(e){return JSON.parse(localStorage.getItem(e)||"[]")}let qr=[];const Fr=function(e,t,n){_(()=>t.experiments.forEach(t=>{n&&n.matches(t)?n.onSubscribeCall(t):Gr(t,e)}))},Br=(e,t)=>{qr.push({handler:e,experienceKey:t})},Jr=e=>qr.find(t=>t.handler===e),Vr=function(e){qr.filter(t=>t.experienceKey===e).forEach(e=>{try{"number"!=typeof e.handler&&e.handler()}catch(e){}}),qr=qr.filter(t=>t.experienceKey!==e)};function Hr(e,t){Gr(e,t)}function Gr(t,n){switch(_(()=>t.trigger.type)){case e.PageLoad:!function(e,t){br(e,t,()=>ar(e))}(t,n);break;case e.Timeout:!function(e,t){const n=setTimeout(()=>{br(e,t,()=>ar(e))},e.trigger.timeoutMillis);Br(()=>{n&&clearTimeout(n)})}
169(t,n);break;case e.Inactivity:!function(e,t){const n=e.trigger.timeoutMillis;let r;function o(){clearTimeout(r),r=setTimeout(()=>{br(e,t,function(){try{return Promise.resolve(Sr(e)).then(function(t){return t&&ar(e),t})}catch(e){return Promise.reject(e)}})},n)}o();const c=["mousemove","keypress","scroll","touchstart","touchmove"];Br(()=>{clearTimeout(r),i(()=>document).then(()=>c.forEach(e=>document.removeEventListener(e,o)))}),s(()=>document,!0).then(()=>{c.forEach(e=>document.addEventListener(e,o,{passive:!0}))})}(t,n);break;case e.Selector:!function(e,t){jr(e),Cr.add(t),Lr(e)()}(n,t);break;case e.ExitIntent:!function(e,t){const n=r=>{_(()=>!r.toElement&&!r.relatedTarget)&&br(e,t,()=>{const t=ar(e);return i(()=>document).then(()=>{document.removeEventListener("mouseout",n)}),t})};s(()=>document,!0).then(()=>{document.addEventListener("mouseout",n,{passive:!0})}),Br(()=>{i(()=>document).then(()=>{document.removeEventListener("mouseout",n)})})}(t,n);break;case e.JSCondition:!function(e,t){Ur(e.trigger).then(()=>{br(e,t,()=>ar(e))}).catch(()=>{})}(t,n);break;case e.JSFunction:!function(e,t){!function(n){try{const r=new Function(`return async function() { ${n.code} }`)()(),o=Dr(n);Br(o),r.then(()=>void 0!==Jr(o)&&void br(e,t,()=>ar(e)))}catch(e){}}(e.trigger)}(t,n);break;case e.JSEvent:!function(e,t){const n=e.trigger,r="vsly-js-events";function o(n){n&&br(e,t,()=>ar(e))}const c=e=>{let t;try{t=new Function(n.jsEvent.matchCode)(e),localStorage.setItem(r,JSON.stringify([...Mr(r),{event:{detail:e.detail},ts:(new Date).valueOf()/1e3}].splice(0,25)))}catch(e){F("handleJsEvent",e),t=!1}o(t)};o(function(e,t){return _(()=>!!Mr(e).find(e=>{const n=e.ts;return(new Date).valueOf()/1e3-n<2628e3&&new Function(t)(e.event)}))}(r,n.jsEvent.matchCode)),s(()=>window).then(()=>{window.addEventListener(n.jsEvent.name,c)}),Br(()=>{i().then(()=>{window.removeEventListener(n.jsEvent.name,c)})})}(t,n);break;case e.Conjunction:!function(t,n){if(function(t){return[e.ExitIntent,e.Selector,e.Timeout].includes(t.trigger.condition.type)}(t)){const e=t.trigger;Ur(e.jsCond).then(()=>{Gr({...t,trigger:e.condition},n)}).catch(()=>{})}}(t,n);break;case e.ElementEvent:!function(e,t){jr(t),kr.add(e),Lr(t)()}(t,n)}}const zr=["vsly-backdrop-container","__loomi_crosshair_container"];function Kr(e){let t=_(()=>e.target),n=!1;for(;t;){if(zr.includes(_(()=>t.id))){n=!0;break}t=_(()=>t.parentElement)}n&&(q("vsly","about to stop propagation of event",e),_(()=>e.stopImmediatePropagation()),_(()=>e.stopPropagation()))}function Wr(e,t){const n=_(()=>window.Shopify.currency.active,"USD"),r=_(()=>window.Shopify.locale,"en-US"),o=new Intl.NumberFormat(r,{style:"currency",currency:n,minimumFractionDigits:!0===_(()=>window.visually.flags["op-locale-currency-always-show-decimals"],!1)?2:0,maximumFractionDigits:2});if(t){if(Zr()){const t=_(()=>window.visually.priceRound)||Math.round;return o.format(t(e,n))}return o.format(e)}const i=_(()=>window.Shopify.currency.rate,"1");let s=Number.parseFloat(i);s=Number.isNaN(s)?1:s;let c=e*s;return 1!=s&&me("exchange-fee")&&(c*=1.02),c=Qr(s,c,n),o.format(c)}const Qr=(e,t,n)=>1!==e&&me("exchange-round")||Zr()?(_(()=>window.visually.priceRound)||Math.round)(t,n):t;function Yr(){const e=_(()=>!0===window.visually.flags["kill-locale-currency"]),t=_(()=>window.Shopify.currency,{}),n=!!_(()=>t.active),r=_(()=>t.rate),o=!!r&&!Number.isNaN(Number.parseFloat(r));return!e&&n&&o}const Zr=()=>!me("op-locale-currency-no-round");let Xr=window.location.href;const eo=()=>{requestAnimationFrame(()=>{Xr!==window.location.href&&(Xr=window.location.href,window.dispatchEvent(new CustomEvent("vslyUrlChanged",{detail:{prev:Xr,curr:window.location.href}})))})};var to;!function(e){e.NONE="none",e.YOTPO="yotpo"}(to||(to={}));const no={isMember:!1,provider:to.NONE};function ro(e,t){try{var n=e()}catch(e){return t(e)}return n&&n.then?n.then(void 0,t):n}const oo="vsly-loyalty-ctx",io=(()=>{const e=["swell:customer:updated","swell:redemption","swell:initialized","swell:setup","vsly:loyalty-changed"];let t;const n=()=>{const e=_(()=>window.swellConfig.customer);return e?{id:e.local_customer_id,providerId:e.id,email:e.email,earnedPoints:e.points_earned,isMember:!0===e.is_member,pointsBalance:e.points_balance,adjustedPointsBalance:_(()=>e.adjusted_points_balance,0),provider:to.YOTPO}:no},r=e=>{_(()=>"vsly:loyalty-changed"===e.type)&&_(()=>window.swellAPI.refreshCustomerDetails()),t(n())};return{provide:n,onChange:function(n){try{t=n;const o=ro(function(){return Promise.resolve(v(()=>
169!!window.jQuery,50,200)).then(function(){e.forEach(e=>{window.jQuery(document).on(e,r)})})},function(){e.forEach(e=>{document.addEventListener(e,r)})});return Promise.resolve(o&&o.then?o.then(function(){}):void 0)}catch(e){return Promise.reject(e)}},connect:()=>v(()=>!!_(()=>window.swellConfig.customer.local_customer_id),400,20),disconnect:function(){try{const t=ro(function(){return Promise.resolve(v(()=>!!window.jQuery,50,200)).then(function(){e.forEach(e=>{window.jQuery(document).off(e,r)})})},function(){e.forEach(e=>{document.removeEventListener(e,r)})});return Promise.resolve(t&&t.then?t.then(function(){}):void 0)}catch(e){return Promise.reject(e)}}}})();function so(e){et(Xe.LOYALTY_CHANGE,e),sessionStorage.setItem(oo,JSON.stringify({ts:(new Date).getTime(),ctx:e})),window.loomi_ctx={...window.loomi_ctx||{},loyalty:e}}const co="vsly_session";function ao(e){return Et((e||"").replace("+"," "))}function uo(){const e=window.loomi_ctx.storeAlias,t={id:W(e+window.loomi_ctx.userId+f()+It()+fo()),utm_campaign:It(),last_interaction:new Date,landing_page:_(()=>location.href,""),start_at:new Date};return lo(t),t}function lo(e){const t=JSON.stringify(e);localStorage.setItem(co,t),window.loomi_ctx.session=e}function mo(){const e=function(){window.loomi_ctx=window.loomi_ctx||{};let e=window.loomi_ctx.session||_(()=>{const e=JSON.parse(localStorage.getItem(co));return e.last_interaction=new Date(e.last_interaction),e.start_at=new Date(e.start_at),e})||uo();return function(e){const t=new Date,n=e.last_interaction;return(t.valueOf()-n.valueOf())/6e4>30||ao(It())!==ao(e.utm_campaign)||e.last_interaction.getDate()!==t.getDate()}(e)&&(e=uo()),window.loomi_ctx.session=e,e}();e.last_interaction=new Date,lo(e)}const fo=()=>Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15);function ho(e,t){try{var n=e()}catch(e){return t(!0,e)}return n&&n.then?n.then(t.bind(null,!1),t.bind(null,!0)):t(!1,n)}const po=function(e,t,r){void 0===r&&(r=1e3);try{return vo?(console.debug("vsly-sdk","cannot reload since another reload is in progress"),Promise.resolve()):(vo=!0,Promise.resolve(ho(function(){console.debug("vsly-sdk","about to reload sdk");const o=me("sdk-reconcile")?Promise.resolve(function(e,t,n){try{return Promise.resolve(n(t,e)).then(function(e){let{configuration:t}=e;const n=_(()=>window.loomi.conf.experiments)||[],r=new Map,o=t.experiments||[],i=new Map,s=new Set(Object.keys(fr)),c=C();n.forEach(e=>r.set(Wn(e),e)),o.forEach(e=>i.set(Wn(e),e)),(e=>{window.loomi={..._(()=>window.loomi)||{},conf:e},window.visually={..._(()=>window.visually)||{},flags:e.flags,recsPerVariant:Xn(e)},zn(e.flags)})(t),((e,t,n)=>{e.forEach((e,r)=>{t.has(r)||(n.has(r)&&Ir(e),Vr(r))})})(r,i,s),document.dispatchEvent(Object.assign(new Event("reset-widget"),{value:"reload"})),document.dispatchEvent(Object.assign(new Event("targeting-changed"),{value:"#reload",key:"CART_CHANGE"})),((e,t,n,r)=>{e.forEach((e,o)=>{const i=t.get(o);i?Qn(i)!==Qn(e)&&(r.has(o)&&Ir(i),Vr(o),un([e]),Hr(e,n)):(un([e]),Hr(e,n))})})(i,r,c,s)})}catch(e){return Promise.reject(e)}}(e,t,wo)).then(function(){}):Promise.resolve(function(){try{return dr&&i(()=>document).then(()=>{document.removeEventListener(Q,_r),dr=!1}),qr.forEach(e=>{try{"number"!=typeof e.handler&&e.handler()}catch(e){}}),qr=[],Array.from($.keys()).forEach(e=>{Qe(e)}),Ve&&Ve.disconnect(),Promise.resolve()}catch(e){return Promise.reject(e)}}()).then(function(){return Promise.resolve((o=r,void 0===o&&(o=40),new Promise(e=>setTimeout(e,o)))).then(function(){return Promise.resolve(function(e,t){try{return void 0===e&&(e=n.PROD),Promise.resolve(ho(function(){return function(r,o){try{var i=(function(){if(window.vsly_blocked)throw Ln(),new Error(Fn)}(),function(e,t){window.loomi_ctx=window.loomi_ctx||{},window.loomi_ctx.env=window.loomi_ctx.env||e,window.loomi_ctx.storeAlias=window.loomi_ctx.storeAlias||t}(e,t),Promise.resolve(function(e,t){try{return void 0===e&&(e=n.PROD),Promise.resolve(yo(t,e,void 0)).then(function(n){let{configuration:r,tracking:o}=n;return go(r,t,e,o)})}catch(e){return Promise.reject(e)}}(e,t)).then(function(n){let{jitsu:r,configuration:o}=n;if(!_(()=>o.flags["kill-switch"]))return Promise.resolve(Je()).then(function(){un(o.experiments),Fr(r,o),Kn(e,t,po),mt()})}))}catch(e){return o(e)}return i&&i.then?i.then(void 0,o):i}(0,function(e){_(()=>e.message)!==Fn&&F("failed initialising sdk",e)})},function(e,t){if(Ln(),e)throw t;return t}))}catch(e){return Promise.reject(e)}}(e,t)).then(function(){})});var o});if(o&&o.then)return o.then(function(){})},function(e,t){if(vo=!1,e)throw t;return t})))}catch(e){return Promise.reject(e)}};let vo=!1;const wo=function(e,t,n){try{return m(),Promise.resolve(qn(e,t,n))}catch(e){return Promise.reject(e)}},yo=function(e,t,n){try{return _(mo),m(),Promise.resolve(qn(e,t,n))}catch(e){return Promise.reject(e)}},go=function(e,t,n,r){try{return zn(e.flags),function(e,t,n,r,o,i){Er(),window.loomi_ctx={..._(()=>window.loomi_ctx)||{},env:t,storeAlias:e,apply:e=>{un([e]),ar(e)},shouldApply:lr};const s=_(()=>
169o.productId),c=window.loomi_ctx;s&&!c.productId&&(c.productId=s);const a=_(()=>o.variantId);a&&!c.variantId&&(c.variantId=a),window.loomi={..._(()=>window.loomi)||{},conf:n},window.visually={..._(()=>window.visually)||{},flags:n.flags,enabledIntegrations:n.integrations,recsPerVariant:Xn(n),sdk_api:{addToCart:mn,recommendProducts:Pn,getProductsMetafields:$n,fetchRecs:Cn},reAllocate:i,rerender:Yn,reload:function(){try{return Promise.resolve(r(t,e,1e3)).then(function(){})}catch(e){return Promise.reject(e)}}}}(t,n,e,po,Nt(),wo),function(e){try{if(e.noActiveThemeTests&&Ce()){if(Pe(0))return;be()}else(e=>!(e.experiments||[]).find(e=>e.isThemeTest)&&_(Ce)&&!![localStorage,sessionStorage].find(je))(e)&&be()}catch(e){}}(e),Promise.resolve(Eo()).then(function(){var o,c,a,l;(function(e,t,n){window.loomi_api||(window.loomi_api={}),window.loomi_api.when=w,window.loomi_api.awaitCondition=v,window.loomi_api.loadVisuallyLib=h,window.loomi_api.queryProducts=Rn,window.loomi_api.debounce=u,window.loomi_api.allocatorQuery=e=>function(e,t){try{function n(){return Promise.resolve(r)}const r={results:{}},o={...e};o.queries=function(e,t){return e.queries.filter(e=>{const n=_(()=>e.oneOf.productInfo);if(n){const r=Tn(n.handle),o=sessionStorage.getItem(r);if(!o)return!0;const i=JSON.parse(o);return!!function(e,t){return!((!e.includeCollections||t.collections)&&(!e.includeTags||t.tags)&&(!e.includeSales||t.sales)&&(!e.includeVariants||t.variants))}(n,i)||(i.cached=!0,t.results[e.name]=i,!1)}const r=_(()=>e.oneOf.handlesByTag);if(r){const n=Nn(r),o=sessionStorage.getItem(n);if(!o)return!0;const i=JSON.parse(o);return i.cached=!0,t.results[e.name]=i,!1}const o=_(()=>e.oneOf.handlesByCollection);if(o){const n=On(o),r=sessionStorage.getItem(n);if(!r)return!0;const i=JSON.parse(r);return i.cached=!0,t.results[e.name]=i,!1}return!0})}(e,r);const i=function(){if(o.queries.length>0){const{query:e,hashedQuery:n}=function(e,t){e.timestamp=`${jn(4)}${t}${jn(5)}`,e.alias=window.loomi_ctx.storeAlias||"",e.userId=window.loomi_ctx.userId||"";const n=g(e);return{query:n,hashedQuery:(n+window.loomi_ctx.userId+window.loomi_ctx.storeAlias+t).split("").reduce((e,t)=>(e=(e<<5)-e+t.charCodeAt(0))&e,0)}}(o,t),i=Vn(window.loomi_ctx.env).cfgUrl.replace("/allocate",`/query?q=${e}&h=${n}`);return Promise.resolve(fetch(i)).then(function(e){const t=function(){if(e.ok)return Promise.resolve(e.json()).then(function(e){e.results&&Object.entries(e.results).forEach(e=>{let[t,n]=e;!function(e,t,n){if(t)if("ProductInfo"===t.kind){const r=n.queries.find(t=>t.name===e);r&&(_(()=>r.oneOf.productInfo.includeTags,!1)&&!t.tags&&(t.tags=[]),_(()=>r.oneOf.productInfo.includeCollections,!1)&&!t.collections&&(t.collections=[]),_(()=>r.oneOf.productInfo.includeSales,!1)&&!t.sales&&(t.sales=""),_(()=>r.oneOf.productInfo.includeVariants,!1)&&!t.variants&&(t.variants=[]),sessionStorage.setItem(Tn(t.handle),JSON.stringify(t)))}else if("HandlesByCollection"===t.kind){const r=n.queries.find(t=>t.name===e);if(r){const e=_(()=>r.oneOf.handlesByCollection,"")||"";sessionStorage.setItem(On(e),JSON.stringify(t))}}else if("HandlesByTag"===t.kind){const r=n.queries.find(t=>t.name===e);if(r){const e=_(()=>r.oneOf.handlesByTag,"")||"";sessionStorage.setItem(Nn(e),JSON.stringify(t))}}}(t,n,o),r.results[t]=n})})}();if(t&&t.then)return t.then(function(){})})}}();return Promise.resolve(i&&i.then?i.then(n):n())}catch(s){return Promise.reject(s)}}(e,`${(new Date).getTime()+Math.round(1e6*Math.random())}`),window.loomi_api.openProductOverlay=er,_(()=>e.shopApi.forEach(e=>{let{js:t,windowKey:n}=e;try{window.loomi_api[n]=new Function(t)}catch(e){}})),window.loomi_api.formatLocaleMoney=function(){var e=[].slice.call(arguments);return n()?t(...e):(_(()=>window.loomi_api.formatMoney)||(()=>`${_(()=>e[0],"")}`))(...e)},window.loomi_api.redirectTest=ee})(e,Wr,Yr),a=e.first_seen,(c=e.uid)!==(l=r.id)&&c&&a>0?(window.loomi_ctx.userId=c,Zt(c,a)):window.loomi_ctx.userId=l,function(e,t){try{return _(()=>window.loomi_ctx.cc)&&v(b,1e3,120).then(()=>Zt(e,t||(new Date).getTime()/1e3)),Promise.resolve()}catch(e){return Promise.reject(e)}}(window.loomi_ctx.userId,a),(o=e.flags)["sdk-auto-clean"]&&!o["sdk-kill-auto-clean"]&&h("price_test_cleanup_v2",{async:!1,defer:!0}).then(),_(()=>!0===window.visually.flags["op-focus-trap-removal"])&&s(()=>document,!0).then(()=>{document.addEventListener("focusin",Kr,{capture:!0,passive:!0}),document.addEventListener("mousedown",Kr,{capture:!0,passive:!0}),document.addEventListener("touchstart",Kr,{capture:!0,passive:!0}),document.addEventListener("touchend",Kr,{capture:!0,passive:!0})}),function(e,t){if(me("kill-sdk-reload-url-detection")||!me("sdk-reload")&&!["/products/","/collections/"].find(e=>window.location.href.includes(e)))return;const n=function(){const r=(()=>{requestAnimationFrame(()=>{(me("sdk-reload-url-detection-href")?So!==window.location.href:new URL(So).pathname!==new URL(window.location.href).pathname)&&(So=window.location.href,n(),_o(e,t,10))})})||eo,o=["click","touchend","pdpresp"];return s(()=>document.body,!0).then(()=>
169{o.forEach(e=>document.body.addEventListener(e,r,!0))}),()=>{i(()=>document.body).then(()=>{o.forEach(e=>{document.body.removeEventListener(e,r,!0)})})}}()}(n,t),function(){try{return Promise.resolve(function(e,t){try{var n=function(){so(function(){const e=sessionStorage.getItem(oo);if(e){const t=_(()=>JSON.parse(e));if(t&&t.ts>(new Date).getTime()-3e5)return t.ctx}}()||no);const e=_(()=>!0===window.visually.flags["loyalty-targeting"]),t=function(){if(e)return Promise.resolve(function(e){try{return e.onChange(e=>{so(e)}),Promise.resolve(e.connect()).then(function(){const t=e.provide();return so(t),{ctx:t,disconnect:e.disconnect}})}catch(e){return Promise.reject(e)}}(io)).then(function(){const e=document.querySelectorAll('[href*="/account/logout"]');e&&Array.from(e).forEach(e=>{e.addEventListener("click",()=>(sessionStorage.removeItem(oo),!0))})})}();if(t&&t.then)return t.then(function(){})}()}catch(e){return t(e)}return n&&n.then?n.then(void 0,t):n}(0,function(e){console.debug("vsly-loyalty","unable to find loyalty provider",e)}))}catch(e){return Promise.reject(e)}}();const d=C();return{configuration:e,jitsu:d}})}catch(e){return Promise.reject(e)}},_o=u(po,10);let So=window.location.href;const Eo=function(){try{return Promise.resolve(function(){if(me("block-do-not-track"))return Promise.resolve(x()).then(function(e){if(!e)throw new Error(Fn)})}())}catch(e){return Promise.reject(e)}};function Po(e){return e.startsWith("https://")?e.substring(8):e}function Ao(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return""}}var Io;!function(e){e.SIGNUP="SIGNUP",e.ADD_TO_CART="ADD_TO_CART",e.CHANGE_QTY="CHANGE_QTY",e.REMOVE_FROM_CART="REMOVE_FROM_CART",e.PAGE_LOAD="PAGE_LOAD",e.CLICK="CLICK",e.LOGIN="LOGIN",e.LOGOUT="LOGOUT",e.TIME_SPENT="TIME_SPENT",e.USE_CASE="USE_CASE",e.LEAD_SUBMISSION_EMAIL="LEAD_SUBMISSION_EMAIL",e.LEAD_SUBMISSION_PHONE="LEAD_SUBMISSION_PHONE"}(Io||(Io={}));let bo=[];const xo=function(e,t){if(void 0===t&&(t=0),0===bo.length)return;const n=bo;bo=[];const r=ko(n),o=Co(n);e({bulk:o,shared:r},!0).catch(()=>{const r=n.concat(bo);r.length<100&&(bo=r,t<2&&setTimeout(()=>xo(e,t+1),500*Math.pow(2,t)))})};u(xo,100);const Co=e=>e.map(e=>{const t=JSON.parse(JSON.stringify(e));return delete t.user,delete t.event_id,delete t.user_agent,delete t.utc_time,delete t.local_tz_offset,delete t.doc_host,delete t.ids_ga,delete t.alias,delete t.userCanBeTracked,delete t.userDataCanBeSold,delete t.edgetag,delete t.api_key,delete t.src,t}),ko=e=>{const t=_(()=>String(e[0].user.anonymous_id),""),n=_(()=>String(e[0].user_agent),""),r=_(()=>String(e[0].event_id),""),o=_(()=>String(e[0].utc_time),""),i=_(()=>Number(e[0].local_tz_offset)||0),s=_(()=>String(e[0].doc_host),""),c=_(()=>String(e[0].ids_ga),""),a=_(()=>String(e[0].alias),""),u=_(()=>Boolean(e[0].userCanBeTracked),!0),l=_(()=>Boolean(e[0].userDataCanBeSold),!0),d=_(()=>String(e[0].edgetag),""),m=_(()=>String(e[0].api_key),""),f=_(()=>String(e[0].src),"");return Object.entries({anonymous_id:t,event_id:r,user_agent:n,utc_time:o,local_tz_offset:i,doc_host:s,ids_ga:c,alias:a,userCanBeTracked:u,userDataCanBeSold:l,edgetag:d,api_key:m,src:f}).reduce((e,t)=>{let[n,r]=t;if(r){if("undefined"===r)return e;e[n]=r}return e},{})},To=function(e){try{let r;function t(e){return r?e:Promise.resolve(!1)}const o=function(){if(_(()=>e.eventPayload.bulk.length>0,!1)){const t=_(()=>JSON.parse(JSON.stringify(e.eventPayload.bulk[0])),void 0);if(!t){const e=Promise.resolve(!1);return r=1,e}const o=_(()=>JSON.parse(JSON.stringify(t.ga)),void 0);return delete t.ga,Promise.resolve(function(e){try{return Promise.resolve(function(t,r){try{var o=function(){const t=window.loomi_ctx.jitsuKey,r=function(e){const t={trackingHost:"https://live.visually-io.com"};return e===n.TEST&&(t.trackingHost="http://localhost:8088"),e===n.STAGE&&(t.trackingHost="https://sdk.loomi-stg.xyz"),t}(window.loomi_ctx.env).trackingHost;return Promise.resolve(fetch(`${r}/api/s?token=${t}&bulk=1`,{headers:{"content-type":"text/plain"},body:JSON.stringify(e.eventPayload),method:"POST",mode:"cors",credentials:"omit",keepalive:!0})).then(function(e){return e.ok})}()}catch(e){return r(e)}return o&&o.then?o.then(void 0,r):o}(0,function(e){return console.error("vsly: Failed to send event",e),!1}))}catch(e){return Promise.reject(e)}}(e)).then(function(n){return Promise.resolve(function(e){try{try{const t=e.eventPayload,n=t.bulk[0],r=window.loomi_ctx.env,o=t.shared,i=g({experienceId:n.use_case,variantId:n.use_case_variant,storeAlias:o.alias,anonymousId:o.anonymous_id,version:n.version}),s=new URL(Vn(r).cfgUrl.replace("/allocate","/match"));s.searchParams.append("q",i),fetch(s.toString())}catch(e){console.error("vsly: Failed to persist allocation",e)}return Promise.resolve()}catch(e){return Promise.reject(e)}}(e)).then(function(){return o&&C().trackExt(t,o).then().catch(e=>{console.error("vsly: Failed track ext event",e,t,o)}),r=1,n})})}}();return Promise.resolve(o&&o.then?o.then(t):t(o))}catch(i){return Promise.reject(i)}},No="vsly_analytics_queue";function Oo(e,t,n){void 0===n&&(n=!1);try{const r=window.loomi_ctx,o=r.storeAlias,i=r.jitsuKey,s=Pt(),c={id:`${Date.now()}-${Math.random().toString(36).substring(2,9)}`,timestamp:Date.now(),eventPayload:{bulk:[{url:location.href,doc_path:location.pathname,doc_search:location.search,sid:r.session.id,sid_start:r.session.start_at,utm:s.utm,lmi_params:s.lmi_params,event_type:"USE_CASE",use_case:e._USE_CASE,use_case_variant:e._USE_CASE_VARIANT,version:e._USE_CASE_VERSION||1,ga:{isAudience:!1,gaName:e._USE_CASE_GA||e._USE_CASE,gaVariant:e._USE_CASE_GA_VARIANT||e._USE_CASE_VARIANT,reportGa:n}}],shared:{anonymous_id:t.id,user_agent:navigator.userAgent,utc_time:(new Date).toISOString(),local_tz_offset:(new Date).getTimezoneOffset(),doc_host:location.host,alias:o,api_key:i}},retries:0},a=jo();a.push(c),Lo(a)}catch(e){console.error("vsly: Failed to queue analytics event",e)}}function jo(){try{const e=localStorage.getItem(No);if(!e)return[];const t=JSON.parse(e);return Array.isArray(t)?t:[]}catch(e){return console.error("vsly: Failed to read analytics queue",e),[]}}function Lo(e){try{localStorage.setItem(No,JSON.stringify(e))}catch(e){console.error("vsly: Failed to save analytics queue",e)}}const $o=(e,t)=>{try{localStorage.setItem(e,JSON.stringify({variant:t.experiment.variant,version:t.experiment.version||0}))}catch(e){}},Ro=(e,t)=>{let n=null;try{const r=localStorage.getItem(e);if(r){let e;const o=JSON.parse(r);if(o&&"object"==typeof o&&"variant"in o){e=o;const r=t.find(t=>t.experiment.variant===e.variant);r&&(r.experiment.version||0)===(e.version||0)&&(n=r)}}}catch(e){}return n},Do=e=>`vsly_redirect_test_${e[0].experiment.name}`,Uo=(e,t)=>{if(e){const n=e.experiment;t.some(e=>{const t=e.experiment;return t.variant===n.variant&&t.version===n.version})||(e=!1)}if(!e){const n=100*Math.random();let r=0;for(const o of t)if(r+=o.targeting.chance,n<=r){e=o;break}}return e},Mo=function(e){void 0===e&&(e=!0);const t=window.loomi_ctx.consent;t.allowed=e,t.fin||(t.fin=qo())},qo=()=>(new Date).getTime(),Fo=()=>window.Shopify.customerPrivacy,Bo=["AT","BE","BG","HR","CY","CZ","DK","EE","FI","FR","DE","GR","HU","IE","IT","LV","LT","LU","MT","NL","PL","PT","RO","SK","SI","ES","SE","NO","IS","LI"],Jo=function(e){void 0===e&&(e=!0);const t=window.loomi_ctx.consent;t.allowed=e,t.fin||(t.fin=Vo())},Vo=()=>(new Date).getTime(),Ho=()=>window.Shopify.customerPrivacy,Go=()=>Promise.resolve(),zo=()=>(window.loomi_ctx=window.loomi_ctx||{},window.loomi_ctx.performanceMetrics=window.loomi_ctx.performanceMetrics||{},window.loomi_ctx.performanceMetrics);function Ko(){try{const e=zo().as;
169if(void 0===e)return;const t=performance.now();Object.assign(zo(),{ae:t,ad:t-e}),(e=>{try{if("function"!=typeof performance.getEntriesByType)return;const t=performance.getEntriesByType("resource").filter(t=>t.startTime>=e&&(e=>{try{return new URL(e.name).pathname.endsWith("/allocate")}catch{return!1}})(t)).pop();if(!t)return;Object.assign(zo(),{ars:t.startTime,afs:t.fetchStart,aqs:t.requestStart,aps:t.responseStart,ape:t.responseEnd,ard:t.duration,ardl:t.startTime-e,aprd:t.requestStart-t.startTime,arwd:t.responseStart-t.requestStart,ardd:t.responseEnd-t.responseStart})}catch{}})(e)}catch(e){}}function Wo(e,t){try{var n=e()}catch(e){return t(e)}return n&&n.then?n.then(void 0,t):n}function Qo(){return _(mo),Yt(),function(e){void 0===e&&(e=window.loomi_ctx.embeddedTests);try{if(!e)return;if(0===e.length)return;const t=e.filter(e=>e.experiment.isThemeTest);t.length>0&&function(e){const t=Do(e);let n=Ro(t,e);if(n=Uo(n,e),!n)return;if(!n.experiment)return;$o(t,n);const r=n.experiment,o=_(()=>r.code.find(e=>"themeTest"===e.kind).value.targetThemeId)||0,i=ne({experienceId:r.name,variantId:r.variant,version:r.version,gaExperienceName:r.gaName,gaVariantName:r.gaVariant});Oo(i,Yt(),_(()=>!!r.ga)||!1),Ee(i,o)}(t);const n=e.filter(e=>!e.experiment.isThemeTest);n.length>0&&function(e){const t=e.filter(e=>function(e){if(!e)return!0;try{const t=e.match(/UrlTarget\(([^)]+)\)/);if(!t)return!1;const n=function(e){try{const t=e.match(/^"([^"]*)",\s*"([^"]*)",\s*(true|false)$/);return t?{value:t[1],op:t[2],includeQueryParam:"true"===t[3]}:null}catch{return null}}(t[1]);return!!n&&function(e,t,n){const r=window.location.search||"",o=window.location.href||"",i=(s=function(e){const t=e.startsWith("/")?e:"/"+e,n=t.split("/");if(n.length<2)return t;const r=n[1];let o=!1;return r.length>0&&r.length<=7&&(2===r.length||r.length>2&&"-"===r[2])&&(o=!0),o?"/"+n.slice(2).join("/"):t}(window.location.pathname),["STORY_IL","MAYVEN_GLOBAL","JDSPORT_IL"].includes(window.loomi_ctx.storeAlias)?s.toLowerCase():s);var s;const{hostPath:c,rawQuery:a}=function(e){const t=Po(e),n=t.indexOf("?");return-1!==n?{hostPath:t.substring(0,n),rawQuery:t.substring(n+1)}:{hostPath:t,rawQuery:""}}(e),u=c.toLowerCase();let l=Po(o.split("?")[0]).toLowerCase(),d="",m=u;if(d=(new URL(o).host+i).toLowerCase(),n){const e=r?Ao(r.substring(1)):"";if(e&&(l+="?"+e,d+="?"+e),a){const e=Ao(a);e&&(m+="?"+e)}}return function(e,t,n,r){switch(r){case"contains":return e.includes(n)||t.includes(n);case"matches":try{const r=new RegExp(n);return r.test(e)||r.test(t)}catch{return!1}case"==":return e===n||t===n;case"!=":return e===t?e!==n:t!==n;default:return!1}}(l,d,m,t)}(n.value,n.op,n.includeQueryParam)}catch(e){return console.error("vsly: Failed to evaluate targeting formula",e),!1}}(e.targeting.formula));if(0===t.length)return;const n=Do(t);let r=Ro(n,t);if(r=Uo(r,t),!r)return;if(!r.experiment)return;$o(n,r);const o=r.experiment,i=ne({experienceId:o.name,variantId:o.variant,version:o.version,gaExperienceName:o.gaName,gaVariantName:o.gaVariant});Oo(i,Yt(),_(()=>!!o.ga)||!1);const s=_(()=>o.code.find(e=>"pageRedirect"===e.kind).value);s&&ee(i,s.destUrl,s.redirectAfter||1,s.retainQueryParams,s.stickinessMode)}(n)}catch(e){console.error("vsly ETT",e)}}(),window.vsly_redirecting}const Yo=()=>window.loomi_ctx.blockingConcent;(function(){try{let t;function e(e){if(t)return e;(function(){const e=jo();e.length>0&&Promise.allSettled(e.map(To)).then(t=>{Lo(e.filter((e,n)=>{const r=t[n];return("fulfilled"!==r.status||!r.value)&&(e.retries++,(e=>!(Date.now()-e.timestamp>18e5||e.retries>3))(e))}))}).catch(e=>{console.error("vsly: Failed to process analytics queue",e)})})(),(()=>{const e=()=>{const e=se();return!!e&&!Bo.includes(e)};return new Promise((t,n)=>{const r=window.loomi_ctx.consent||={};r.init=Vo(),(se()?Go():v(se,50,200)).then(()=>{e()&&(Jo(),t())}),(_(()=>Ho().analyticsProcessingAllowed)?Go():v(()=>_(()=>Ho().analyticsProcessingAllowed),50,200)).then(()=>{const r=Ho().analyticsProcessingAllowed()||e();Jo(r),r?t():n()}),r.ccListener||(document.addEventListener("visitorConsentCollected",r=>{const o=r.detail.analyticsAllowed||e();Jo(o),o?t():n()}),r.ccListener=!0)})})().catch(),function(){try{zo().as=performance.now()}catch(e){}}();const s=yo(o,i);return s.then(Ko),s.then(e=>{let{configuration:t,tracking:r}=e;return(e=>{p("vsly-a",`${(e=>e==n.STAGE?"https://sdk.loomi-stg.xyz/":"https://assets.visually.io/")(e)}v/visually-a.js?cb=${window.loomi_ctx.sdk_version}`,{defer:!0}).catch()}
169)(i),function(e){let{configuration:t,tracking:n}=e;try{return Promise.resolve(function(e,t){try{const{storeAlias:n,env:r}=window.loomi_ctx;return Promise.resolve(Wo(function(){return Promise.resolve(go(e,n,r,t)).then(function(e){let{jitsu:t,configuration:o}=e;if(!_(()=>o.flags["kill-switch"]))return Promise.resolve(Je()).then(function(){un(o.experiments),Fr(t,o),Kn(r,n,po),mt()})})},function(e){_(()=>e.message)!==Fn&&F("fail initialising sdk",e)}))}catch(e){return Promise.reject(e)}}(t,n)).then(function(){window.dispatchEvent(new Event("visually_loaded"))})}catch(e){return Promise.reject(e)}}({configuration:t,tracking:r})}).catch(r).finally(Ln)}const r=e=>console.error(e);if(window.fetch&&(window.vslyNativeFetch=window.fetch),window.vsly_init=!0,window.vslyIntegrationType="static",(()=>{if(_(()=>window.visually_io_editor))return!0;const e=_(()=>window.loomi_ctx.ttl);return!("number"!=typeof e||!Number.isFinite(e)||e<=0)&&e<Math.floor(Date.now()/1e3)})())return console.log("sdk blocked"),Promise.resolve();window.loomi_ctx.sdk_version="0.12.169";const{storeAlias:o,env:i}=window.loomi_ctx;if(!Yo()&&Qo())return Promise.resolve();const s=function(){if(Yo()){function e(e){return t?e:window.loomi_ctx.consent.allowed?void(Qo()&&(t=1)):(Ln(),void(t=1))}const n=Wo(function(){return Promise.resolve((console.log("consent api init"),new Promise((e,t)=>{const n=window.loomi_ctx.consent||={};n.init=qo(),(_(()=>Fo().analyticsProcessingAllowed)?Promise.resolve():v(()=>_(()=>Fo().analyticsProcessingAllowed),50,200)).then(()=>{const n=window.Shopify.customerPrivacy.analyticsProcessingAllowed();console.log("consent api",n),Mo(n),n?e():t()}),n.ccListener||(document.addEventListener("visitorConsentCollected",()=>{const n=window.Shopify.customerPrivacy.analyticsProcessingAllowed();console.log("visitorConsentCollected",n),Mo(n),n?e():t()}),n.ccListener=!0)}))).then(function(){})},function(){Ln(),t=1});return n&&n.then?n.then(e):e(n)}}();return Promise.resolve(s&&s.then?s.then(e):e(s))}catch(c){return Promise.reject(c)}})().then(()=>console.log("vsly sdk with embed init"))}(); 170 171</script>
vendor: 1 bytes, line 171
171
172<script data-vsly="preact2" type="text/javascript" data-em-disable> 173 // Preact 174!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):n(e.preact={})}(this,function(e){var b,n,t,_,o,r,l,x={},C=[],u=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function w(e,n){for(var t in n)e[t]=n[t];return e}function g(e){var n=e.parentNode;n&&n.removeChild(e)}function i(e,n,t){var _,o=arguments,l={};for(_ in n)"key"!==_&&"ref"!==_&&(l[_]=n[_]);if(3<arguments.length)for(t=[t],_=3;_<arguments.length;_++)t.push(o[_]);if(null!=t&&(l.children=t),"function"==typeof e&&null!=e.defaultProps)for(_ in e.defaultProps)void 0===l[_]&&(l[_]=e.defaultProps[_]);return k(e,l,n&&n.key,n&&n.ref,null)}function k(e,n,t,_,o){var l={type:e,props:n,key:t,ref:_,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:o};return null==o&&(l.__v=l),b.vnode&&b.vnode(l),l}function S(e){return e.children}function P(e,n){this.props=e,this.context=n}function N(e,n){if(null==n)return e.__?N(e.__,e.__.__k.indexOf(e)+1):null;for(var t;n<e.__k.length;n++)if(null!=(t=e.__k[n])&&null!=t.__e)return t.__e;return"function"==typeof e.type?N(e):null}function c(e){var n,t;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,n=0;n<e.__k.length;n++)if(null!=(t=e.__k[n])&&null!=t.__e){e.__e=e.__c.base=t.__e;break}return c(e)}}function s(e){(!e.__d&&(e.__d=!0)&&t.push(e)&&!p.__r++||o!==b.debounceRendering)&&((o=b.debounceRendering)||_)(p)}function p(){for(var e;p.__r=t.length;)e=t.sort(function(e,n){return e.__v.__b-n.__v.__b}),t=[],e.some(function(e){var n,t,_,o,l,r,u;e.__d&&(r=(l=(n=e).__v).__e,(u=n.__P)&&(t=[],o=D(u,l,(_=w({},l)).__v=_,n.__n,void 0!==u.ownerSVGElement,null,t,null==r?N(l):r),d(t,l),o!=r&&c(l)))})}function E(e,n,t,_,o,l,r,u,i,c){var s,p,f,a,d,h,y,v=_&&_.__k||C,m=v.length;for(i==x&&(i=null!=r?r[0]:m?N(_,0):null),t.__k=[],s=0;s<n.length;s++)if(null!=(a=t.__k[s]=null==(a=n[s])||"boolean"==typeof a?null:"string"==typeof a||"number"==typeof a?k(null,a,null,null,a):Array.isArray(a)?k(S,{children:a},null,null,null):null!=a.__e||null!=a.__c?k(a.type,a.props,a.key,null,a.__v):a)){if(a.__=t,a.__b=t.__b+1,null===(f=v[s])||f&&a.key==f.key&&a.type===f.type)v[s]=void 0;else for(p=0;p<m;p++){if((f=v[p])&&a.key==f.key&&a.type===f.type){v[p]=void 0;break}f=null}d=D(e,a,f=f||x,o,l,r,u,i,c),(p=a.ref)&&f.ref!=p&&(y=y||[],f.ref&&y.push(f.ref,null,a),y.push(p,a.__c||d,a)),null!=d?(null==h&&(h=d),i=U(e,a,f,v,r,d,i),"option"==t.type?e.value="":"function"==typeof t.type&&(t.__d=i)):i&&f.__e==i&&i.parentNode!=e&&(i=N(f))}if(t.__e=h,null!=r&&"function"!=typeof t.type)for(s=r.length;s--;)null!=r[s]&&g(r[s]);for(s=m;s--;)null!=v[s]&&W(v[s],v[s]);if(y)for(s=0;s<y.length;s++)T(y[s],y[++s],y[++s])}function U(e,n,t,_,o,l,r){var u,i,c;if(void 0!==n.__d)u=n.__d,n.__d=void 0;else if(o==t||l!=r||null==l.parentNode)e:if(null==r||r.parentNode!==e)e.appendChild(l),u=null;else{for(i=r,c=0;(i=i.nextSibling)&&c<_.length;c+=2)if(i==l)break e;e.insertBefore(l,r),u=r}return void 0!==u?u:l.nextSibling}function f(e,n,t){"-"===n[0]?e.setProperty(n,t):e[n]="number"==typeof t&&!1===u.test(n)?t+"px":null==t?"":t}function A(e,n,t,_,o){var l,r,u,i,c;if(o?"className"===n&&(n="class"):"class"===n&&(n="className"),"style"===n)if(l=e.style,"string"==typeof t)l.cssText=t;else{if("string"==typeof _&&(l.cssText="",_=null),_)for(i in _)t&&i in t||f(l,i,"");if(t)for(c in t)_&&t[c]===_[c]||f(l,c,t[c])}else"o"===n[0]&&"n"===n[1]?(r=n!==(n=n.replace(/Capture$/,"")),n=((u=n.toLowerCase())in e?u:n).slice(2),t?(_||e.addEventListener(n,a,r),(e.l||(e.l={}))[n]=t):e.removeEventListener(n,a,r)):"list"!==n&&"tagName"!==n&&"form"!==n&&"type"!==n&&"size"!==n&&!o&&n in e?e[n]=null==t?"":t:"function"!=typeof t&&"dangerouslySetInnerHTML"!==n&&(n!==(n=n.replace(/^xlink:?/,""))?null==t||!1===t?e.removeAttributeNS("http://www.w3.org/1999/xlink",n.toLowerCase()):e.setAttributeNS("http://www.w3.org/1999/xlink",n.toLowerCase(),t):null==t||!1===t&&!/^ar/.test(n)?e.removeAttribute(n):e.setAttribute(n,t))}function a(e){this.l[e.type](b.event?b.event(e):e)}function D(e,n,t,_,o,l,r,u,i){var c,s,p,f,a,d,h,y,v,m,g,k=n.type;if(void 0!==n.constructor)return null;(c=b.__b)&&c(n);try{e:if("function"==typeof k){if(y=n.props,v=(c=k.contextType)&&_[c.__c],m=c?v?v.props.value:c.__:_,t.__c?h=(s=n.__c=t.__c).__=s.__E:("prototype"in k&&k.prototype.render?n.__c=s=new k(y,m):(n.__c=s=new P(y,m),s.constructor=k,s.render=L),v&&v.sub(s),s.props=y,s.state||(s.state={}),s.context=m,s.__n=_,p=s.__d=!0,s.__h=[]),null==s.__s&&(s.__s=s.state),null!=k.getDerivedStateFromProps&&(s.__s==s.state&&(s.__s=w({},s.__s)),w(s.__s,k.getDerivedStateFromProps(y,s.__s))),f=s.props,a=s.state,p)null==k.getDerivedStateFromProps&&null!=s.componentWillMount&&s.componentWillMount(),null!=s.componentDidMount&&s.__h.push(s.componentDidMount);else{if(null==k.getDerivedStateFromProps&&y!==f&&null!=s.componentWillReceiveProps&&s.componentWillReceiveProps(y,m),!s.__e&&null!=s.shouldComponentUpdate&&!1===s.shouldComponentUpdate(y,s.__s,m)||n.__v===t.__v){s.props=y,s.state=s.__s,n.__v!==t.__v&&(s.__d=!1),(s.__v=n).__e=t.__e,n.__k=t.__k,s.__h.length&&r.push(s),function e(n,t,_){for(var o,l=0;l<n.__k.length;l++)(o=n.__k[l])&&(o.__=n,o.__e&&("function"==typeof o.type&&1<o.__k.length&&e(o,t,_),t=U(_,o,o,n.__k,null,o.__e,t),"function"==typeof n.type&&(n.__d=t)))}(n,u,e);break e}null!=s.componentWillUpdate&&s.componentWillUpdate(y,s.__s,m),null!=s.componentDidUpdate&&s.__h.push(function(){s.componentDidUpdate(f,a,d)})}s.context=m,s.props=y,s.state=s.__s,(c=b.__r)&&c(n),s.__d=!1,s.__v=n,s.__P=e,c=s.render(s.props,s.state,s.context),s.state=s.__s,null!=s.getChildContext&&(_=w(w({},_),s.getChildContext())),p||null==s.getSnapshotBeforeUpdate||(d=s.getSnapshotBeforeUpdate(f,a)),g=null!=c&&c.type==S&&null==c.key?c.props.children:c,E(e,Array.isArray(g)?g:[g],n,t,_,o,l,r,u,i),s.base=n.__e,s.__h.length&&r.push(s),h&&(s.__E=s.__=null),s.__e=!1}else null==l&&n.__v===t.__v?(n.__k=t.__k,n.__e=t.__e):n.__e=function(e,n,t,_,o,l,r,u){var i,c,s,p,f,a=t.props,d=n.props;if(o="svg"===n.type||o,null!=l)for(i=0;i<l.length;i++)if(null!=(c=l[i])&&((null===n.type?3===c.nodeType:c.localName===n.type)||e==c)){e=c,l[i]=null;break}
174if(null==e){if(null===n.type)return document.createTextNode(d);e=o?document.createElementNS("http://www.w3.org/2000/svg",n.type):document.createElement(n.type,d.is&&{is:d.is}),l=null,u=!1}if(null===n.type)a!==d&&e.data!=d&&(e.data=d);else{if(null!=l&&(l=C.slice.call(e.childNodes)),s=(a=t.props||x).dangerouslySetInnerHTML,p=d.dangerouslySetInnerHTML,!u){if(null!=l)for(a={},f=0;f<e.attributes.length;f++)a[e.attributes[f].name]=e.attributes[f].value;(p||s)&&(p&&s&&p.__html==s.__html||(e.innerHTML=p&&p.__html||""))}(function(e,n,t,_,o){var l;for(l in t)"children"===l||"key"===l||l in n||A(e,l,null,t[l],_);for(l in n)o&&"function"!=typeof n[l]||"children"===l||"key"===l||"value"===l||"checked"===l||t[l]===n[l]||A(e,l,n[l],t[l],_)})(e,d,a,o,u),p?n.__k=[]:(i=n.props.children,E(e,Array.isArray(i)?i:[i],n,t,_,"foreignObject"!==n.type&&o,l,r,x,u)),u||("value"in d&&void 0!==(i=d.value)&&i!==e.value&&A(e,"value",i,a.value,!1),"checked"in d&&void 0!==(i=d.checked)&&i!==e.checked&&A(e,"checked",i,a.checked,!1))}return e}(t.__e,n,t,_,o,l,r,i);(c=b.diffed)&&c(n)}catch(e){n.__v=null,b.__e(e,n,t)}return n.__e}function d(e,n){b.__c&&b.__c(n,e),e.some(function(n){try{e=n.__h,n.__h=[],e.some(function(e){e.call(n)})}catch(e){b.__e(e,n.__v)}})}function T(e,n,t){try{"function"==typeof e?e(n):e.current=n}catch(e){b.__e(e,t)}}function W(e,n,t){var _,o,l;if(b.unmount&&b.unmount(e),(_=e.ref)&&(_.current&&_.current!==e.__e||T(_,null,n)),t||"function"==typeof e.type||(t=null!=(o=e.__e)),e.__e=e.__d=void 0,null!=(_=e.__c)){if(_.componentWillUnmount)try{_.componentWillUnmount()}catch(e){b.__e(e,n)}
174_.base=_.__P=null}if(_=e.__k)for(l=0;l<_.length;l++)_[l]&&W(_[l],n,t);null!=o&&g(o)}function L(e,n,t){return this.constructor(e,t)}function h(e,n,t){var _,o,l;b.__&&b.__(e,n),o=(_=t===r)?null:t&&t.__k||n.__k,e=i(S,null,[e]),l=[],D(n,(!_&&t||n).__k=e,o||x,x,void 0!==n.ownerSVGElement,t&&!_?[t]:!o&&n.childNodes.length?C.slice.call(n.childNodes):null,l,t||x,_),d(l,e)}b={__e:function(e,n){for(var t,_;n=n.__;)if((t=n.__c)&&!t.__)try{if(t.constructor&&null!=t.constructor.getDerivedStateFromError&&(_=!0,t.setState(t.constructor.getDerivedStateFromError(e))),null!=t.componentDidCatch&&(_=!0,t.componentDidCatch(e)),_)return s(t.__E=t)}catch(n){e=n}throw e}},n=function(e){return null!=e&&void 0===e.constructor},P.prototype.setState=function(e,n){var t=this.__s!==this.state?this.__s:this.__s=w({},this.state);"function"==typeof e&&(e=e(t,this.props)),e&&w(t,e),null!=e&&this.__v&&(n&&this.__h.push(n),s(this))},P.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),s(this))},P.prototype.render=S,t=[],_="function"==typeof Promise?Promise.prototype.then.bind(Prom
174ise.resolve()):setTimeout,p.__r=0,r=x,l=0,e.render=h,e.hydrate=function(e,n){h(e,n,r)},e.createElement=i,e.h=i,e.Fragment=S,e.createRef=function(){return{current:null}},e.isValidElement=n,e.Component=P,e.cloneElement=function(e,n){var t,_;for(_ in n=w(w({},e.props),n),2<arguments.length&&(n.children=C.slice.call(arguments,2)),t={},n)"key"!==_&&"ref"!==_&&(t[_]=n[_]);return k(e.type,t,n.key||e.key,n.ref||e.ref,null)},e.createContext=function(e){var n={},o={__c:"__cC"+l++,__:e,Consumer:function(e,n){return e.children(n)},Provider:function(e){var t,_=this;return this.getChildContext||(t=[],this.getChildContext=function(){return n[o.__c]=_,n},this.shouldComponentUpdate=function(n){_.props.value!==n.value&&t.some(function(e){e.context=n.value,s(e)})},this.sub=function(e){t.push(e);var n=e.componentWillUnmount;e.componentWillUnmount=function(){t.splice(t.indexOf(e),1),n&&n.call(e)}}),e.children}};return(o.Consumer.contextType=o).Provider.__=o},e.toChildArray=function e(n){return null==n||"boolean"==typeof n?[]:Array.isArray(n)?C.concat.apply([],n.map(e)):[n]},e.__u=W,e.options=b}); 175// Preact Hooks 176!function(_,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("preact")):n(_.preactHooks={},_.preact)}(this,function(_,o){var e,u,t,i=0,r=[],c=o.options.__r,f=o.options.diffed,n=o.options.__c,s=o.options.unmount;function a(_,n){o.options.__h&&o.options.__h(u,_,i||n),i=0;var t=u.__H||(u.__H={__:[],__h:[]});return _>=t.__.length&&t.__.push({}),t.__[_]}function p(_){return i=1,h(b,_)}function h(_,n,t){var o=a(e++,2);return o.t=_,o.__c||(o.__c=u,o.__=[t?t(n):b(void 0,n),function(_){var n=o.t(o.__[0],_);o.__[0]!==n&&(o.__=[n,o.__[1]],o.__c.setState({}))}]),o.__}function m(_,n){var t=a(e++,4);!o.options.__s&&E(t.__H,n)&&(t.__=_,t.__H=n,u.__h.push(t))}function v(_,n){var t=a(e++,7);return E(t.__H,n)?(t.__H=n,t.__h=_,t.__=_()):t.__}function H(){r.some(function(n){if(n.__P)try{n.__H.__h.forEach(l),n.__H.__h.forEach(y),n.__H.__h=[]}catch(_){return n.__H.__h=[],o.options.__e(_,n.__v),!0}}),r=[]}o.options.__r=function(_){c&&c(_),e=0;var n=(u=_.__c).__H;n&&(n.__h.forEach(l),n.__h.forEach(y),n.__h=[])},o.options.diffed=function(_){f&&f(_);var n=_.__c;n&&n.__H&&n.__H.__h.length&&(1!==r.push(n)&&t===o.options.requestAnimationFrame||((t=o.options.requestAnimationFrame)||function(_){function n(){clearTimeout(o),d&&cancelAnimationFrame(t),setTimeout(_)}var t,o=setTimeout(n,100);d&&(t=requestAnimationFrame(n))})(H))},o.options.__c=function(_,t){t.some(function(n){try{n.__h.forEach(l),n.__h=n.__h.filter(function(_){return!_.__||y(_)})}catch(_){t.some(function(_){_.__h&&(_.__h=[])}),t=[],o.options.__e(_,n.__v)}}),n&&n(_,t)},o.options.unmount=function(_){s&&s(_);var n=_.__c;if(n&&n.__H)try{n.__H.__.forEach(l)}catch(_){o.options.__e(_,n.__v)}};var d="function"==typeof requestAnimationFrame;function l(_){"function"==typeof _.u&&_.u()}function y(_){_.u=_.__()}function E(t,_){return!t||_.some(function(_,n){return _!==t[n]})}function b(_,n){return"function"==typeof n?n(_):n}_.useState=p,_.useReducer=h,_.useEffect=function(_,n){var t=a(e++,3);!o.options.__s&&E(t.__H,n)&&(t.__=_,t.__H=n,u.__H.__h.push(t))},_.useLayoutEffect=m,_.useRef=function(_){return i=5,v(function(){return{current:_}},[])},_.useImperativeHandle=function(_,n,t){i=6,m(function(){"function"==typeof _?_(n()):_&&(_.current=n())},null==t?t:t.concat(_))},_.useMemo=v,_.useCallback=function(_,n){return i=8,v(function(){return _},n)},_.useContext=function(_){var n=u.context[_.__c],t=a(e++,9);return t.__c=_,n?(null==t.__&&(t.__=!0,n.sub(u)),n.props.value):_.__},_.useDebugValue=function(_,n){o.options.useDebugValue&&o.options.useDebugValue(n?n(_):_)},_.useErrorBoundary=function(_){var n=a(e++,10),t=p();return n.__=_,u.componentDidCatch||(u.componentDidCatch=function(_){n.__&&n.__(_),t[1](_)}),[t[0],function(){t[1](void 0)}]}}); 177// Preact Compat 178!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("preact/hooks"),require("preact")):t(e.compat={},e.preactHooks,e.preact)}(this,function(t,n,u){function r(e,t){for(var n in t)e[n]=t[n];return e}function i(e,t){for(var n in e)if("__source"!==n&&!(n in t))return!0;for(var o in t)if("__source"!==o&&e[o]!==t[o])return!0;return!1}var o,e,a,l=(o=u.Component,a=o,(e=c).prototype=Object.create(a.prototype),(e.prototype.constructor=e).__proto__=a,c.prototype.shouldComponentUpdate=function(e,t){return i(this.props,e)||i(this.state,t)},c);function c(e){var t;return(t=o.call(this,e)||this).isPureReactComponent=!0,t}function p(t,o){function n(e){var t=this.props.ref,n=t==e.ref;return!n&&t&&(t.call?t(null):t.current=null),o?!o(this.props,e)||!n:i(this.props,e)}function e(e){return this.shouldComponentUpdate=n,u.createElement(t,e)}return e.prototype.isReactComponent=!0,e.displayName="Memo("+(t.displayName||t.name)+")",e.t=!0,e}var f=u.options.__b;u.options.__b=function(e){e.type&&e.type.t&&e.ref&&(e.props.ref=e.ref,e.ref=null),f&&f(e)};var s="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function d(o){function e(e,t){var n=r({},e);return delete n.ref,o(n,(t=e.ref||t)&&("object"!=typeof t||"current"in t)?t:null)}return e.$$typeof=s,(e.render=e).prototype.isReactComponent=e.t=!0,e.displayName="ForwardRef("+(o.displayName||o.name)+")",e}function _(e,o){return e?u.toChildArray(e).reduce(function(e,t,n){return e.concat(o(t,n))},[]):null}var h={map:_,forEach:_,count:function(e){return e?u.toChildArray(e).length:0},only:function(e){if(1!==(e=u.toChildArray(e)).length)throw new Error("Children.only() expects only one child.");return e[0]},toArray:u.toChildArray},m=u.options.__e;function v(e){return e&&((e=r({},e)).__c=null,e.__k=e.__k&&e.__k.map(v)),e}function y(){this.__u=0,this.u=null,this.__b=null}function C(e){var t=e.__.__c;return t&&t.o&&t.o(e)}function b(t){var n,o,r;function e(e){if(n||(n=t()).then(function(e){o=e.default||e},function(e){r=e}),r)throw r;if(!o)throw n;return u.createElement(o,e)}return e.displayName="Lazy",e.t=!0,e}function k(){this.i=null,this.l=null}u.options.__e=function(e,t,n){if(e.then)for(var o,r=t;r=r.__;)if((o=r.__c)&&o.__c)return o.__c(e,t.__c);m(e,t,n)},(y.prototype=new u.Component).__c=function(e,t){var n=this;null==n.u&&(n.u=[]),n.u.push(t);function o(){i||(i=!0,r?r(u):u())}var r=C(n.__v),i=!1;t.__c=t.componentWillUnmount,t.componentWillUnmount=function(){o(),t.__c&&t.__c()};var u=function(){var e;if(!--n.__u)for(n.__v.__k[0]=n.state.o,n.setState({o:n.__b=null});e=n.u.pop();)e.forceUpdate()};n.__u++||n.setState({o:n.__b=n.__v.__k[0]}),e.then(o,o)},y.prototype.render=function(e,t){return this.__b&&(this.__v.__k&&
178(this.__v.__k[0]=v(this.__b)),this.__b=null),[u.createElement(u.Fragment,null,t.o?null:e.children),t.o&&e.fallback]};function g(e,t,n){if(++n[1]===n[0]&&e.l.delete(t),e.props.revealOrder&&("t"!==e.props.revealOrder[0]||!e.l.size))for(n=e.i;n;){for(;3<n.length;)n.pop()();if(n[1]<n[0])break;e.i=n=n[2]}}(k.prototype=new u.Component).o=function(n){var o=this,r=C(o.__v),i=o.l.get(n);return i[0]++,function(e){function t(){o.props.revealOrder?(i.push(e),g(o,n,i)):e()}r?r(t):t()}},k.prototype.render=function(e){this.i=null,this.l=new Map;var t=u.toChildArray(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var n=t.length;n--;)this.l.set(t[n],this.i=[1,0,this.i]);return e.children},k.prototype.componentDidUpdate=k.prototype.componentDidMount=function(){var n=this;n.l.forEach(function(e,t){g(n,t,e)})};var E,N=((E=S.prototype).getChildContext=function(){return this.props.context},E.render=function(e){return e.children},S);function S(){}function x(e){var t=this,n=e.container,o=u.createElement(N,{context:t.context},e.vnode);return t.s&&t.s!==n&&(t.h.parentNode&&t.s.removeChild(t.h),u.__u(t.v),t.p=!1),e.vnode?t.p?(n.__k=t.__k,u.render(o,n),t.__k=n.__k):(t.h=document.createTextNode(""),u.hydrate("",n),n.appendChild(t.h),t.p=!0,t.s=n,u.render(o,n,t.h),t.__k=t.h.__k):t.p&&(t.h.parentNode&&t.s.removeChild(t.h),u.__u(t.v)),t.v=o,t.componentWillUnmount=function(){t.h.parentNode&&t.s.removeChild(t.h),u.__u(t.v)},null}function w(e,t){return u.createElement(x,{vnode:e,container:t})}var A=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;u.Component.prototype.isReactComponent={};var R="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103;function U(e,t,n){if(null==t.__k)for(;t.firstChild;)t.removeChild(t.firstChild);return u.render(e,t),"function"==typeof n&&n(),e?e.__c:null}function P(e,t,n){return u.hydrate(e,t),"function"==typeof n&&n(),e?e.__c:null}var F=u.options.event;function O(e,t){e["UNSAFE_"+t]&&!e[t]&&Object.defineProperty(e,t,{configurable:!1,get:function(){return this["UNSAFE_"+t]}
178,set:function(e){this["UNSAFE_"+t]=e}})}u.options.event=function(e){F&&(e=F(e));var t=!(e.persist=function(){}),n=!1,o=e.stopPropagation;e.stopPropagation=function(){o.call(e),t=!0};var r=e.preventDefault;return e.preventDefault=function(){r.call(e),n=!0},e.isPropagationStopped=function(){return t},e.isDefaultPrevented=function(){return n},e.nativeEvent=e};var L={configurable:!0,get:function(){return this.class}},M=u.options.vnode;function D(e){return u.createElement.bind(null,e)}function V(e){return!!e&&e.$$typeof===R}function W(e){return V(e)?u.cloneElement.apply(null,arguments):e}function $(e){return!!e.__k&&(u.render(null,e),!0)}function j(e){return e&&(e.base||1===e.nodeType&&e)||null}u.options.vnode=function(i){i.$$typeof=R;var e,t,n,o=i.type,r=i.props;if(o){if(r.class!=r.className&&(L.enumerable="className"in r,null!=r.className&&(r.class=r.className),Object.defineProperty(r,"className",L)),"function"!=typeof o){for(n in r.defaultValue&&void 0!==r.value&&(r.value||0===r.value||(r.value=r.defaultValue),delete r.defaultValue),Array.isArray(r.value)&&r.multiple&&"select"===o&&(u.toChildArray(r.children).forEach(function(e){-1!=r.value.indexOf(e.props.value)&&(e.props.selected=!0)}),delete r.value),r)if(e=A.test(n))break;if(e)for(n in t=i.props={},r)t[A.test(n)?n.replace(/[A-Z0-9]/,"-$&").toLowerCase():n]=r[n]}!function(){var e=i.type,t=i.props;if(t&&"string"==typeof e){var n,o={};for(var r in t)/^on(Ani|Tra|Tou)/.test(r)&&(t[r.toLowerCase()]=t[r],delete t[r]),o[r.toLowerCase()]=r;o.ondoubleclick&&(t.ondblclick=t[o.ondoubleclick],delete t[o.ondoubleclick]),o.onbeforeinput&&(t.onbeforeinput=t[o.onbeforeinput],delete t[o.onbeforeinput]),o.onchange&&("textarea"===e||"input"===e.toLowerCase()&&!/^fil|che|ra/i.test(t.type))&&(t[n=o.oninput||"oninput"]||(t[n]=t[o.onchange],delete t[o.onchange]))}}(),"function"==typeof o&&!o.m&&o.prototype&&(O(o.prototype,"componentWillMount"),O(o.prototype,"componentWillReceiveProps"),O(o.prototype,"componentWillUpdate"),o.m=!0)}M&&M(i)};function z(e,t){return e(t)}var H=u.Fragment,T={useState:n.useState,useReducer:n.useReducer,useEffect:n.useEffect,useLayoutEffect:n.useLayoutEffect,useRef:n.useRef,useImperativeHandle:n.useImperativeHandle,useMemo:n.useMemo,useCallback:n.useCallback,useContext:n.useContext,useDebugValue:n.useDebugValue,version:"16.8.0",Children:h,render:U,hydrate:P,unmountComponentAtNode:$,createPortal:w,createElement:u.createElement,createContext:u.createContext,createFactory:D,cloneElement:W,createRef:u.createRef,Fragment:u.Fragment,isValidElement:V,findDOMNode:j,Component:u.Component,PureComponent:l,memo:p,forwardRef:d,unstable_batchedUpdates:z,StrictMode:H,Suspense:y,SuspenseList:k,lazy:b};Object.keys(n).forEach(function(e){t[e]=n[e]}),t.createElement=u.createElement,t.createContext=u.createContext,t.createRef=u.createRef,t.Fragment=u.Fragment,t.Component=u.Component,t.version="16.8.0",t.Children=h,t.render=U,t.hydrate=P,t.unmountComponentAtNode=$,t.createPortal=w,t.createFactory=D,t.cloneElement=W,t.isValidElement=V,t.findDOMNode=j,t.PureComponent=l,t.memo=p,t.forwardRef=d,t.unstable_batchedUpdates=z,t.StrictMode=H,t.Suspense=y,t.SuspenseList=k,t.lazy=b,t.default=T}); 179// Goober 180!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):t((e||self).goober={})}(this,function(e){let t={data:""},r=e=>"object"==typeof window?((e?e.querySelector("#_goober"):window._goober)||Object.assign((e||document.head).appendChild(document.createElement("style")),{innerHTML:" ",id:"_goober"})).firstChild:e||t,l=/(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g,n=/\/\*[^]*?\*\/| +/g,o=/\n+/g,a=(e,t)=>{let r="",l="",n="";for(let o in e){let s=e[o];"@"==o[0]?"i"==o[1]?r=o+" "+s+";":l+="f"==o[1]?a(s,o):o+"{"+a(s,"k"==o[1]?"":t)+"}":"object"==typeof s?l+=a(s,t?t.replace(/([^,])+/g,e=>o.replace(/(^:.*)|([^,])+/g,t=>/&/.test(t)?t.replace(/&/g,e):e?e+" "+t:t)):o):null!=s&&(o=/^--/.test(o)?o:o.replace(/[A-Z]/g,"-$&").toLowerCase(),n+=a.p?a.p(o,s):o+":"+s+";")}return r+(t&&n?t+"{"+n+"}":n)+l},s={},i=e=>{if("object"==typeof e){let t="";for(let r in e)t+=r+i(e[r]);return t}return e},c=(e,t,r,c,f)=>{let p=i(e),u=s[p]||(s[p]=(e=>{let t=0,r=11;for(;t<e.length;)r=101*r+e.charCodeAt(t++)>>>0;return"go"+r})(p));if(!s[u]){let t=p!==e?e:(e=>{let t,r,a=[{}];for(;t=l.exec(e.replace(n,""));)t[4]?a.shift():t[3]?(r=t[3].replace(o," ").trim(),a.unshift(a[0][r]=a[0][r]||{})):a[0][t[1]]=t[2].replace(o," ").trim();return a[0]})(e);
180s[u]=a(f?{["@keyframes "+u]:t}:t,r?"":"."+u)}return((e,t,r)=>{-1==t.data.indexOf(e)&&(t.data=r?e+t.data:t.data+e)})(s[u],t,c),u},f=(e,t,r)=>e.reduce((e,l,n)=>{let o=t[n];if(o&&o.call){let e=o(r),t=e&&e.props&&e.props.className||/^go/.test(e)&&e;o=t?"."+t:e&&"object"==typeof e?e.props?"":a(e,""):!1===e?"":e}return e+l+(null==o?"":o)},"");function p(e){let t=this||{},l=e.call?e(t.p):e;return c(l.unshift?l.raw?f(l,[].slice.call(arguments,1),t.p):l.reduce((e,r)=>Object.assign(e,r&&r.call?r(t.p):r),{}):l,r(t.target),t.g,t.o,t.k)}let u,d,g,b=p.bind({g:1}),h=p.bind({k:1});e.css=p,e.extractCss=e=>{let t=r(e),l=t.data;return t.data="",l},e.glob=b,e.keyframes=h,e.setup=function(e,t,r,l){a.p=t,u=e,d=r,g=l},e.styled=function(e,t){let r=this||{};return function(){let l=arguments;function n(o,a){let s=Object.assign({},o),i=s.className||n.className;r.p=Object.assign({theme:d&&d()},s),r.o=/ *go\d+/.test(i),s.className=p.apply(r,l)+(i?" "+i:""),t&&(s.ref=a);let c=e;return e[0]&&(c=s.as||e,delete s.as),g&&c[0]&&g(s),u(c,s)}return t?t(n):n}}}); 181 182</script>
182 183<!--LOOMI SDK--> 184 185 186<!-- Start of Shoplift scripts --> 187<!-- 2024-10-18T14:58:49.7413776Z --> 188<style>.shoplift-hide { opacity: 0 !important; }</style>
189<script type="text/javascript">(function(rootPath, template, themeRole, themeId, isThemePreview){ /* Generated on 2025-01-02T06:15:26.0070562Z */var C=Object.defineProperty;var I=(g,u,d)=>u in g?C(g,u,{enumerable:!0,configurable:!0,writable:!0,value:d}):g[u]=d;var c=(g,u,d)=>I(g,typeof u!="symbol"?u+"":u,d);(function(){"use strict";var g=" daum[ /]| deusu/| yadirectfetcher|(?:^|[^g])news(?!sapphire)|(?<! (?:channel/|google/))google(?!(app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!(?: ya| yandex|^job|inapp;) ?)search|(?<!(?:lib))http|(?<![hg]m)score|@[a-z][\\w-]+\\.|\\(\\)|\\.com|\\b\\d{13}\\b|^<|^[\\w \\.\\-\\(?:\\):]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[^ ]{50,}$|^\\d+\\b|^\\w+/[\\w\\(\\)]*$|^active|^ad muncher|^amaya|^avsdevicesdk/|^biglotron|^bot|^bw/|^clamav[ /]|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d \\(compatible;?\\)$|^mozilla/\\d\\.\\d \\w*$|^navermailapp|^netsurf|^offline|^owler|^postman|^python|^rank|^read|^reed|^rest|^rss|^snapchat|^space bison|^svn|^swcd |^taringa|^thumbor/|^track|^valid|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|^{{.*}}$|admin|analyzer|archive|ask jeeves/teoma|bit\\.ly/|bluecoat drtr|browsex|burpcollaborator|capture|catch|check|chrome-lighthouse|chromeframe|classifier|clean|cloud|crawl|cypress/|dareboost|datanyze|dejaclick|detect|dmbrowser|download|evc-batch/|feed|firephp|gomezagent|headless|httrack|hubspot marketing grader|hydra|ibisbrowser|images|insight|inspect|iplabel|ips-agent|java(?!;)|library|mail\\.ru/|manager|measure|neustar wpm|node|nutch|offbyone|optimize|pageburst|pagespeed|parser|perl|phantomjs|pingdom|powermarks|preview|proxy|ptst[ /]\\d|reputation|resolver|retriever|rexx;|rigor|rss\\b|scan|scrape|server|sogou|sparkler/|speedcurve|spider|splash|statuscake|synapse|synthetic|tools|torrent|trace|transcoder|url|virtuoso|wappalyzer|watch|webglance|webkit2png|whatcms/|zgrab",u=/bot|spider|crawl|http|lighthouse/i,d;function w(){if(d instanceof RegExp)return d;try{d=new RegExp(g,"i")}catch{d=u}return d}function v(p){return!!p&&w().test(p)}class m{constructor(){c(this,"timestamp");this.timestamp=new Date}}class S extends m{constructor(e,s,i){super();c(this,"type");c(this,"testId");c(this,"hypothesisId");this.type=3,this.testId=e,this.hypothesisId=s,this.timestamp=i}}class b extends m{constructor(e){super();c(this,"type");c(this,"path");this.type=4,this.path=e}}class k extends m{constructor(e){super();c(this,"type");c(this,"cart");this.type=5,this.cart=e}}class f extends Error{constructor(){super();c(this,"isBot");this.isBot=!0}}class T{constructor(t,e,s,i,o,a,n,r,l){c(this,"shop");c(this,"essentialSessionKey","Shoplift_Essential");c(this,"analyticsSessionKey","Shoplift_Analytics");c(this,"legacySessionKey");c(this,"host");c(this,"eventHost");c(this,"cssHideClass");c(this,"testConfigs");c(this,"sendPageView",!1);c(this,"shopliftDebug",!1);c(this,"useGtag",!1);c(this,"getCountryTimeout");c(this,"state");c(this,"shopifyAnalyticsId");c(this,"baseVisitor");c(this,"cookie",document.cookie);c(this,"isSyncing",!1);c(this,"fetch");c(this,"localStorageSet");c(this,"localStorageGet");c(this,"urlParams",new URLSearchParams(window.location.search));this.shop=t,this.legacySessionKey=`SHOPLIFT_SESSION_${this.shop}`,this.host=e,this.eventHost=s,this.cssHideClass=i?"shoplift-hide":"",this.testConfigs=l,this.sendPageView=!!o,this.shopliftDebug=a===!0,this.useGtag=n===!0,this.fetch=window.fetch.bind(window),this.localStorageSet=window.localStorage.setItem.bind(window.localStorage),this.localStorageGet=window.localStorage.getItem.bind(window.localStorage),this.state=this.loadState(),this.shopifyAnalyticsId=this.getShopifyAnalyticsId(),this.baseVisitor=this.buildBaseVisitor(),this.testConfigs=l,this.getCountryTimeout=r===1000?1e3:r,this.log("State Loaded",JSON.stringify(this.state))}
189async init(){try{if(this.log("Shoplift script initializing"),window.Shopify&&window.Shopify.designMode){this.log("Skipping script for design mode");return}if(window.location.href.includes("slScreenshot=true")){this.log("Skipping script for screenshot"),this.setShoplift();return}if(window.location.hostname.endsWith(".shopifypreview.com")||window.location.hostname.endsWith(".edgemesh.com")){this.log("Skipping script for preview");return}if(window.location.href.includes("isShopliftMerchant")){const e=this.urlParams.get("isShopliftMerchant")==="true";this.log("Setting merchant session to %s",e),this.state.essential.isMerchant=e,this.persistEssentialState()}if(v(navigator.userAgent)||(this.shopifyAnalyticsId=this.getShopifyAnalyticsId(),this.monitorConsentChange(),this.checkForThemePreview()))return;if(await this.handleVisitorTest()){this.log("Redirecting for visitor test");return}this.setShoplift(),this.showPage(),await this.finalize(),console.log("SHOPLIFT SCRIPT INITIALIZED!")}catch(t){if(t instanceof f)return;throw t}finally{typeof window.shoplift!="object"&&(window.shoplift={isHypothesisActive:async t=>!1,setAnalyticsConsent:t=>{throw"Shoplift not initialized"},getVisitorData:()=>{throw"Shoplift not initialized"}})}}async finalize(){const t=await this.getCartState();t!==null&&this.queueCartUpdate(t),this.saveState(),await this.syncAllEvents()}setShoplift(){this.log("Setting up public API");const e=this.urlParams.get("slVariant")==="true",s=e?null:this.urlParams.get("slVariant");window.shoplift={isHypothesisActive:async i=>{if(this.log("Script checking variant for hypothesis '%s'",i),e)return this.log("Forcing variant for hypothesis '%s'",i),!0;if(s!==null)return this.log("Forcing hypothesis '%s'",s),i===s;const o=this.testConfigs.find(n=>n.hypotheses.some(r=>r.id===i));if(!o)return this.log("No test found for hypothesis '%s'",i),!1;const a=this.state.essential.visitorTests.find(n=>n.testId===o.id);return a?(this.log("Active visitor test found",i),a.hypothesisId===i):(await this.manuallySplitVisitor(o),this.testConfigs.some(n=>n.hypotheses.some(r=>r.id===i&&this.state.essential.visitorTests.some(l=>l.hypothesisId===r.id))))},setAnalyticsConsent:async i=>{await this.onConsentChange(i,!0)},getVisitorData:()=>({visitor:this.state.analytics.visitor,visitorTests:this.state.essential.visitorTests.filter(i=>!i.isInvalid).map(i=>{const{shouldSendToGa:o,...a}=i;return a})})}}async manuallySplitVisitor(t){this.log("Starting manual split for test '%s'",t.id),await this.handleVisitorTest([t]),this.saveState(),this.syncAllEvents()}async handleVisitorTest(t){const e=await this.filterTestsByAudience(this.testConfigs,this.state.analytics.visitor||this.baseVisitor,this.state.essential.visitorTests);let s=(t==null?void 0:t.filter(o=>e.some(a=>a.id===o.id)))??this.testsForUrl(e);if(s.length>0){this.log("Is on test page");const o=this.getVisitorHypothesis(s);if(o){this.log("Found current visitor test");const r=this.considerRedirect(o);return r&&(this.log("Redirecting for current visitor test"),this.redirect(o)),r}if(this.log("No existing relation for test page"),this.hasThemeAndOtherTestTypes(e)){const r=this.visitorActiveTestType();this.log("Current visitor test type is '%s'",r);let l;switch(r){case"templateOrUrlRedirect":l=h=>h!=="theme";break;case"theme":l=h=>h==="theme";break;case null:l=Math.random()>.5?h=>h==="theme":h=>h!=="theme";break}s=s.filter(h=>h.hypotheses.some(y=>y.isControl&&l(y.type)))}if(s.length===0)return this.log("No tests found"),!1;const a=s[Math.floor(Math.random()*s.length)],n=this.pickHypothesis(a);if(n){this.log("Adding local visitor to test '%s', hypothesis '%s'",a.id,n.id),this.queueAddVisitorToTest(a,n);const r=this.considerRedirect(n);return r&&(this.log("Redirecting for new test"),this.redirect(n)),r}this.log("No hypothesis found")}return!1}considerRedirect(t){if(this.log("Considering redirect for hypothesis '%s'",t.id),t.isControl)return this.log("Skipping redirect for control"),!1;if(t.type==="basicScript"||t.type==="manualScript")return this.log("Skipping redirect for script test"),!1;const e=this.state.essential.visitorTests.find(a=>a.hypothesisId===t.id),s=new URL(window.location.toString()),o=new URLSearchParams(window.location.search).get("view");if(t.type==="theme"){if(!(t.themeId===themeId)){if(this.log("Theme id '%s' is not hypothesis theme ID '%s'",t.themeId,themeId),e&&e.themeId!==t.themeId&&(e.themeId===themeId||!this.isThemePreview()))this.log("On old theme, redirecting and updating local visitor"),e.themeId=t.themeId;else if(this.isThemePreview())return this.log("On non-test theme, skipping redirect"),!1;return this.log("Hiding page to redirect for theme test"),this.hidePage(),!0}return!1}else if(t.affix!==template.suffix&&t.affix!==o||t.redirectPath&&!s.pathname.endsWith(t.redirectPath))return this.log("Hiding page to redirect for template test"),this.hidePage(),!0;return this.log("Not redirecting"),!1}redirect(t){if(this.log("Redirecting to hypothesis '%s'",t.id),t.isControl)return;const e=new URL(window.location.toString());if(t.redirectPath){const s=RegExp("^(/w{2}-w{2})/").exec(e.pathname);if(s&&s.length>1){const i=s[1];e.pathname=`${i}${t.redirectPath}`}else e.pathname=t.redirectPath}else t.type==="theme"?(e.searchParams.set("_ab","0"),e.searchParams.set("_fd","0"),e.searchParams.set("_sc","1"),e.searchParams.set("preview_theme_id",t.themeId.toString())):t.type!=="urlRedirect"&&e.searchParams.set("view",t.affix);this.queueRedirect(e)}buildBaseVisitor(){const t=this.getDeviceType();return{shopifyAnalyticsId:this.shopifyAnalyticsId,device:t!=="tablet"?t:"mobile",...this.getInitialState()}}getInitialState(){const t=this.getUTMValue("utm_source")??"",e=this.getUTMValue("utm_medium")??"",s=this.getUTMValue("utm_campaign")??"",i=this.getUTMValue("utm_content")??"",o=window.document.referrer;return{createdAt:new Date,utmSource:t,utmMedium:e,utmCampaign:s,utmContent:i,referrer:o}}checkForThemePreview(){if(this.log("Checking for theme preview"),!this.isThemePreview())return this.log("Not on theme preview"),!1;if(this.state.essential.isMerchant)return this.log("Merchant previewing theme"),!0;if(this.state.essential.visitorTests.some(t=>{var e;return t.isThemeTest&&((e=this.getHypothesis(t.hypothesisId))==null?void 0:e.themeId)===themeId}))return this.log("On active theme test"),this.clearThemeBar(),!1;if(this.state.essential.isFirstLoad||this.state.essential.visitorTests.some(t=>t.isThemeTest&&!this.getHypothesis(t.hypothesisId)&&(t.themeId==null||t.themeId===themeId))){this.log("Missing visitor or hypothesis, redirecting to main theme"),this.hidePage();const t=new URL(window.location.toString());return t.searchParams.set("preview_theme_id",""),this.queueRedirect(t),!0}return this.state.essential.visitorTests.some(t=>t.themeId===themeId)?(this.log("Falling back to clearing theme bar"),this.clearThemeBar(),!1):(this.log("No tests on current theme, skipping script"),!0)}testsForUrl(t){const e=new URL(window.location.href),s=this.typeFromTemplate();return t.filter(i=>i.hypotheses.some(o=>o.isControl&&o.type===s&&o.affix===template.suffix||o.type==="theme"||o.isControl&&o.type==="urlRedirect"&&o.redirectPath&&e.pathname.endsWith(o.redirectPath)||o.type==="basicScript")&&(!e.searchParams.has("view")||i.hypotheses.filter(o=>!o.isControl).map(o=>o.affix).includes(e.searchParams.get("view")??"")))}async filterTestsByAudience(t,e,s){const i=[];for(const o of t){this.log("Checking audience for test '%s'",o.id);const a=this.visitorCreatedDuringTestActive(o.statusHistory);(s.some(r=>r.testId===o.id)||await this.isTargetAudience(o,e,a))&&(this.log("Visitor is in audience for test '%s'",o.id),i.push(o))}return i}async isTargetAudience(t,e,s){let i=null;t.requiresCountry&&(this.log("Hiding page to check geoip"),this.hidePage(),i=await this.makeJsonRequest({method:"get",url:`${this.host}/api/v0/visitors/get-country`,signal:AbortSignal.timeout(this.getCountryTimeout)}).catch(a=>(this.log("Error getting country",a),null)));const o=this.getChannel(e);return(t.device==="all"||t.device===e.device)&&(t.visitorOption==="all"||t.visitorOption==="new"&&s||t.visitorOption==="returning"&&!s)&&(t.targetAudiences.length===0||t.targetAudiences.reduce((a,n)=>a||n.reduce((r,l)=>r&&l(e,s,o,i),!0),!1))}visitorCreatedDuringTestActive(t){let e="";for(const s of t){if(this.state.analytics.visitor!==null&&this.state.analytics.visitor.createdAt<s.createdAt||this.state.essential.initialState.createdAt<s.createdAt)break;e=s.status}return e==="active"}getVisitorHypothesis(t){return t.reduce((e,s)=>e.concat(s.hypotheses),[]).find(e=>this.state.essential.visitorTests.some(s=>s.hypothesisId===e.id))}getHypothesis(t){return this.testConfigs.filter(e=>e.hypotheses.some(s=>s.id===t)).map(e=>e.hypotheses.find(s=>s.id===t))[0]}hasThemeTest(t){return t.some(e=>e.hypotheses.some(s=>s.type==="theme"))}hasTestThatIsNotThemeTest(t){return t.some(e=>e.hypotheses.some(s=>s.type!=="theme"))}hasThemeAndOtherTestTypes(t){return this.hasThemeTest(t)&&this.hasTestThatIsNotThemeTest(t)}visitorActiveTestType(){const t=this.state.essential.visitorTests.filter(e=>this.testConfigs.some(s=>s.hypotheses.some(i=>i.id==e.hypothesisId)));return t.length===0?null:t.some(e=>e.isThemeTest)?"theme":"templateOrUrlRedirect"}pickHypothesis(t){let e=Math.random();const s=t.hypotheses.reduce((o,a)=>o+a.visitorCount,0);return t.hypotheses.sort((o,a)=>o.isControl?a.isControl?0:-1:a.isControl?1:0).reduce((o,a)=>
189{if(o!==null)return o;const r=t.hypotheses.reduce((l,h)=>l&&h.visitorCount>20,!0)?a.visitorCount/s-a.trafficPercentage:0;return e<=a.trafficPercentage-r?a:(e-=a.trafficPercentage,null)},null)}typeFromTemplate(){switch(template.type){case"collection-list":return"collectionList";case"page":return"landing";case"article":case"blog":case"cart":case"collection":case"index":case"product":case"search":return template.type;default:return null}}queueRedirect(t){this.saveState(),window.setTimeout(()=>window.location.assign(t),0)}async syncAllEvents(){const t=async()=>{if(this.isSyncing){window.setTimeout(()=>void(async()=>await t())(),500);return}try{this.isSyncing=!0,await this.syncEvents(),this.syncGAEvents()}finally{this.isSyncing=!1}};await t()}async syncEvents(){if(!this.state.essential.consentApproved||!this.shopifyAnalyticsId||this.state.analytics.queue.length===0)return;const t=this.state.analytics.queue.length,e=this.state.analytics.queue.splice(0,t);this.log("Syncing %s events",t);try{const s=this.getDeviceType(),i={shop:this.shop,visitorDetails:{shopifyAnalyticsId:this.shopifyAnalyticsId,device:s!=="tablet"?s:"mobile",...this.state.essential.initialState},events:this.state.essential.visitorTests.filter(n=>!n.isInvalid&&!n.isSaved).map(n=>new S(n.testId,n.hypothesisId,n.createdAt)).concat(e)},o=await this.sendEvents(i);let a;({visitorTests:a,...this.state.analytics.visitor}=o);for(const n of this.state.essential.visitorTests.filter(r=>!a.some(l=>l.testId===r.testId)))n.isSaved=!0,n.isInvalid=!0;for(const n of a)this.state.essential.visitorTests.some(l=>l.testId===n.testId)||this.state.essential.visitorTests.push(n);this.state.analytics.visitor.storedAt=new Date}catch{this.state.analytics.queue.splice(0,0,...e)}finally{this.saveState()}}syncGAEvents(){if(!this.useGtag||!this.state.essential.consentApproved)return;const t=this.state.essential.visitorTests.filter(e=>e.shouldSendToGa);this.log("Syncing %s ga events",length);try{for(const e of t)this.sendGtagEvent(e.testId,e.hypothesisId),e.shouldSendToGa=!1}catch(e){this.log("Failed sending event to gtag",e)}finally{this.persistEssentialState()}}sendGtagEvent(t,e){this.log("Sending gtag event for",t,e);const s={exp_variant_string:`SL-${t}-${e}`};
189this.shopliftDebug&&Object.assign(s,{debug_mode:!0}),typeof window.gtag=="function"?gtag("event","experience_impression",s):(this.log("gtag not found, pushing to dataLayer"),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"experience_impression",...s}))}async sendEvents(t){return await this.makeJsonRequest({method:"post",url:`${this.host}/api/v0/events`,data:JSON.stringify(t)})}async getRemoteVisitor(t){return await this.makeJsonRequest({method:"get",url:`${this.host}/api/v0/visitors/${t}`})}async updateShopifyAnalyticsId(t,e){return await this.makeJsonRequest({method:"put",url:`${this.host}/api/v0/visitors/${t}`,data:JSON.stringify({shop:this.shop,shopifyAnalyticsId:e})})}getUTMValue(t){const s=decodeURIComponent(window.location.search.substring(1)).split("&");for(let i=0;i<s.length;i++){const o=s[i].split("=");if(o[0]===t)return o[1]||null}return null}hidePage(){this.log("Hiding page"),this.cssHideClass&&!window.document.documentElement.classList.contains(this.cssHideClass)&&(window.document.documentElement.classList.add(this.cssHideClass),setTimeout(this.removeAsyncHide(this.cssHideClass),2e3))}showPage(){this.cssHideClass&&this.removeAsyncHide(this.cssHideClass)()}getDeviceType(){function t(){let s=!1;return function(i){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(i)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(i.substr(0,4)))&&(s=!0)}(navigator.userAgent||navigator.vendor),s}function e(){let s=!1;return function(i){(/android|ipad|playbook|silk/i.test(i)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|
189sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(i.substr(0,4)))&&(s=!0)}(navigator.userAgent||navigator.vendor),s}return t()?"mobile":e()?"tablet":"desktop"}removeAsyncHide(t){return()=>{t&&window.document.documentElement.classList.remove(t)}}async getCartState(){try{let t=await this.makeJsonRequest({method:"get",url:`${window.location.origin}/cart.js`});return t.note===null&&(t=await this.makeJsonRequest({method:"post",url:`${window.location.origin}/cart/update.js`,data:JSON.stringify({note:""})})),t}catch(t){return this.log("Error sending cart info",t),null}}async makeJsonRequest(t){return(await this.makeRequest(t)).json()}async makeRequest(t){const{url:e,method:s,headers:i,data:o,signal:a}=t,n=new Headers;if(i)for(const l in i)n.append(l,i[l]);(!i||!i.Accept)&&n.append("Accept","application/json"),(!i||!i["Content-Type"])&&n.append("Content-Type","application/json"),(this.host.includes("ngrok.io")||this.host.includes("ngrok-free.app"))&&n.append("ngrok-skip-browser-warning","1234");const r=await this.fetch(e,{method:s,headers:n,body:o,signal:a});if(!r.ok){if(r.status==422){const l=await r.json();if(typeof l<"u"&&l.isBot)throw new f}throw new Error(`Error sending shoplift request ${r.status}`)}return r}queueAddVisitorToTest(t,e){this.state.essential.visitorTests.some(s=>s.testId===t.id)||this.state.essential.visitorTests.push({createdAt:new Date,testId:t.id,hypothesisId:e.id,isThemeTest:e.type==="theme",themeId:e.themeId,isSaved:!1,isInvalid:!1,shouldSendToGa:!0})}queueCartUpdate(t){this.queueEvent(new k(t))}queuePageView(t){this.queueEvent(new b(t))}queueEvent(t){!this.state.essential.consentApproved&&this.state.essential.hasConsentInteraction||this.state.analytics.queue.length>30||this.state.analytics.queue.push(t)}legacyGetLocalStorageVisitor(){const t=this.localStorageGet(this.legacySessionKey);if(t)try{return JSON.parse(t)}catch{}return null}saveState(){this.persistEssentialState(),this.persistAnalyticsState()}loadState(){const t=this.loadAnalyticsState(),e={analytics:t,essential:this.loadEssentialState(t)},s=this.legacyGetLocalStorageVisitor(),i=this.legacyGetCookieVisitor(),o=[s,i].filter(a=>a!==null).sort((a,n)=>+n.storedAt-+a.storedAt)[0];return e.analytics.visitor===null&&o&&({visitorTests:e.essential.visitorTests,...e.analytics.visitor}=o,this.deleteCookie("SHOPLIFT"),this.deleteLocalStorage(this.legacySessionKey)),!e.essential.consentApproved&&e.essential.hasConsentInteraction&&this.deleteLocalStorage(this.analyticsSessionKey),e}loadEssentialState(t){const e=this.loadLocalStorage(this.essentialSessionKey),s=this.loadCookie(this.essentialSessionKey),i=this.getInitialState(),o={timestamp:new Date,consentApproved:!1,hasConsentInteraction:!1,debugMode:!1,initialState:i,visitorTests:[],isMerchant:!1,isFirstLoad:!0},a=[e,s].filter(n=>n!==null).sort((n,r)=>+r.timestamp-+n.timestamp)[0]??o;return a.initialState||(t.visitor!==null?a.initialState=t.visitor:(a.initialState=this.getInitialState(),a.initialState.createdAt=a.timestamp)),a}loadAnalyticsState(){const t=this.loadLocalStorage(this.analyticsSessionKey),e=this.loadCookie(this.analyticsSessionKey),s={timestamp:new Date,visitor:null,queue:[]};return[t,e].filter(i=>i!==null).sort((i,o)=>+o.timestamp-+i.timestamp)[0]??s}persistEssentialState(){this.log("Persisting essential state"),this.state.essential.isFirstLoad=!1,this.persistLocalStorageState(this.essentialSessionKey,this.state.essential),this.persistCookieState(this.essentialSessionKey,this.state.essential)}persistAnalyticsState(){this.log("Persisting analytics state"),this.state.essential.consentApproved&&(this.persistLocalStorageState(this.analyticsSessionKey,this.state.analytics),this.persistCookieState(this.analyticsSessionKey,this.state.analytics))}loadLocalStorage(t){const e=this.localStorageGet(t);return e===null?null:JSON.parse(e)}loadCookie(t){const e=this.getCookie(t);return e===null?null:JSON.parse(e)}persistLocalStorageState(t,e){e.timestamp=new Date,this.localStorageSet(t,JSON.stringify(e))}persistCookieState(t,e){e.timestamp=new Date;const s=JSON.stringify(e),i=new Date(new Date().getTime()+864e5*365).toUTCString();document.cookie=`${t}=${s};domain=.${window.location.hostname};path=/;expires=${i};SameSite=Strict;`}deleteCookie(t){const e=new Date(0).toUTCString();document.cookie=`${t}=;domain=.${window.location.hostname};path=/;expires=${e};`}deleteLocalStorage(t){window.localStorage.removeItem(t)}getChannel(t){var s;return((s=[{"name":"cross-network","test":(v) => new RegExp(".*cross-network.*", "i").test(v.utmCampaign)}
189,{"name":"direct","test":(v) => v.utmSource === "" && v.utmMedium === ""},{"name":"paid-shopping","test":(v) => (new RegExp("^(?:Google|IGShopping|aax-us-east\.amazon-adsystem\.com|aax\.amazon-adsystem\.com|alibaba|alibaba\.com|amazon|amazon\.co\.uk|amazon\.com|apps\.shopify\.com|checkout\.shopify\.com|checkout\.stripe\.com|cr\.shopping\.naver\.com|cr2\.shopping\.naver\.com|ebay|ebay\.co\.uk|ebay\.com|ebay\.com\.au|ebay\.de|etsy|etsy\.com|m\.alibaba\.com|m\.shopping\.naver\.com|mercadolibre|mercadolibre\.com|mercadolibre\.com\.ar|mercadolibre\.com\.mx|message\.alibaba\.com|msearch\.shopping\.naver\.com|nl\.shopping\.net|no\.shopping\.net|offer\.alibaba\.com|one\.walmart\.com|order\.shopping\.yahoo\.co\.jp|partners\.shopify\.com|s3\.amazonaws\.com|se\.shopping\.net|shop\.app|shopify|shopify\.com|shopping\.naver\.com|shopping\.yahoo\.co\.jp|shopping\.yahoo\.com|shopzilla|shopzilla\.com|simplycodes\.com|store\.shopping\.yahoo\.co\.jp|stripe|stripe\.com|uk\.shopping\.net|walmart|walmart\.com)$", "i").test(v.utmSource) || new RegExp("^(.*(([^a-df-z]|^)shop|shopping).*)$", "i").test(v.utmCampaign)) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-search","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|yandex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-social","test":(v) => new RegExp("^(?:43things|43things\.com|51\.com|5ch\.net|Hatena|ImageShack|academia\.edu|activerain|activerain\.com|activeworlds|activeworlds\.com|addthis|addthis\.com|airg\.ca|allnurses\.com|allrecipes\.com|alumniclass|alumniclass\.com|ameba\.jp|ameblo\.jp|americantowns|americantowns\.com|amp\.reddit\.com|ancestry\.com|anobii|anobii\.com|answerbag|answerbag\.com|answers\.yahoo\.com|aolanswers|aolanswers\.com|apps\.facebook\.com|ar\.pinterest\.com|artstation\.com|askubuntu|askubuntu\.com|asmallworld\.com|athlinks|athlinks\.com|away\.vk\.com|awe\.sm|b\.hatena\.ne\.jp|baby-gaga|baby-gaga\.com|babyblog\.ru|badoo|badoo\.com|bebo|bebo\.com|beforeitsnews|beforeitsnews\.com|bharatstudent|bharatstudent\.com|biip\.no|biswap\.org|bit\.ly|blackcareernetwork\.com|blackplanet|blackplanet\.com|blip\.fm|blog\.com|blog\.feedspot\.com|blog\.goo\.ne\.jp|blog\.naver\.com|blog\.yahoo\.co\.jp|blogg\.no|bloggang\.com|blogger|blogger\.com|blogher|blogher\.com|bloglines|bloglines\.com|blogs\.com|blogsome|blogsome\.com|blogspot|blogspot\.com|blogster|blogster\.com|blurtit|blurtit\.com|bookmarks\.yahoo\.co\.jp|bookmarks\.yahoo\.com|br\.pinterest\.com|brightkite|brightkite\.com|brizzly|brizzly\.com|business\.facebook\.com|buzzfeed|buzzfeed\.com|buzznet|buzznet\.com|cafe\.naver\.com|cafemom|cafemom\.com|camospace|camospace\.com|canalblog\.com|care\.com|care2|care2\.com|caringbridge\.org|catster|catster\.com|cbnt\.io|cellufun|cellufun\.com|centerblog\.net|chat\.zalo\.me|chegg\.com|chicagonow|chicagonow\.com|chiebukuro\.yahoo\.co\.jp|classmates|classmates\.com|classquest|classquest\.com|co\.pinterest\.com|cocolog-nifty|cocolog-nifty\.com|copainsdavant\.linternaute\.com|couchsurfing\.org|cozycot|cozycot\.com|cross\.tv|crunchyroll|crunchyroll\.com|cyworld|cyworld\.com|cz\.pinterest\.com|d\.hatena\.ne\.jp|dailystrength\.org|deluxe\.com|deviantart|deviantart\.com|dianping|dianping\.com|digg|digg\.com|diigo|diigo\.com|discover\.hubpages\.com|disqus|disqus\.com|dogster|dogster\.com|dol2day|dol2day\.com|doostang|doostang\.com|dopplr|dopplr\.com|douban|douban\.com|draft\.blogger\.com|draugiem\.lv|drugs-forum|drugs-forum\.com|dzone|dzone\.com|edublogs\.org|elftown|elftown\.com|epicurious\.com|everforo\.com|exblog\.jp|extole|extole\.com|facebook|facebook\.com|faceparty|faceparty\.com|fandom\.com|fanpop|fanpop\.com|fark|fark\.com|fb|fb\.me|fc2|fc2\.com|feedspot|feministing|feministing\.com|filmaffinity|filmaffinity\.com|flickr|flickr\.com|flipboard|flipboard\.com|folkdirect|folkdirect\.com|foodservice|foodservice\.com|forums\.androidcentral\.com|forums\.crackberry\.com|forums\.imore\.com|forums\.nexopia\.com|forums\.webosnation\.com|forums\.wpcentral\.com|fotki|fotki\.com|fotolog|fotolog\.com|foursquare|foursquare\.com|free\.facebook\.com|friendfeed|friendfeed\.com|fruehstueckstreff\.org|fubar|fubar\.com|gaiaonline|gaiaonline\.com|gamerdna|gamerdna\.com|gather\.com|geni\.com|getpocket\.com|glassboard|glassboard\.com|glassdoor|glassdoor\.com|godtube|godtube\.com|goldenline\.pl|goldstar|goldstar\.com|goo\.gl|gooblog|goodreads|goodreads\.com|google\+|googlegroups\.com|googleplus|govloop|govloop\.com|gowalla|gowalla\.com|gree\.jp|groups\.google\.com|gulli\.com|gutefrage\.net|habbo|habbo\.com|hi5|hi5\.com|hootsuite|hootsuite\.com|houzz|houzz\.com|hoverspot|hoverspot\.com|hr\.com|hu\.pinterest\.com|hubculture|hubculture\.com|hubpages\.com|hyves\.net|hyves\.nl|ibibo|ibibo\.com|id\.pinterest\.com|identi\.ca|ig|imageshack\.com|imageshack\.us|imvu|imvu\.com|in\.pinterest\.com|insanejournal|insanejournal\.com|instagram|instagram\.com|instapaper|instapaper\.com|internations\.org|interpals\.net|intherooms|intherooms\.com|irc-galleria\.net|is\.gd|italki|italki\.com|jammerdirect|jammerdirect\.com|jappy\.com|jappy\.de|kaboodle\.com|k
189akao|kakao\.com|kakaocorp\.com|kaneva|kaneva\.com|kin\.naver\.com|l\.facebook\.com|l\.instagram\.com|l\.messenger\.com|last\.fm|librarything|librarything\.com|lifestream\.aol\.com|line|line\.me|linkedin|linkedin\.com|listal|listal\.com|listography|listography\.com|livedoor\.com|livedoorblog|livejournal|livejournal\.com|lm\.facebook\.com|lnkd\.in|m\.blog\.naver\.com|m\.cafe\.naver\.com|m\.facebook\.com|m\.kin\.naver\.com|m\.vk\.com|m\.yelp\.com|mbga\.jp|medium\.com|meetin\.org|meetup|meetup\.com|meinvz\.net|meneame\.net|menuism\.com|messages\.google\.com|messages\.yahoo\.co\.jp|messenger|messenger\.com|mix\.com|mixi\.jp|mobile\.facebook\.com|mocospace|mocospace\.com|mouthshut|mouthshut\.com|movabletype|movabletype\.com|mubi|mubi\.com|my\.opera\.com|myanimelist\.net|myheritage|myheritage\.com|mylife|mylife\.com|mymodernmet|mymodernmet\.com|myspace|myspace\.com|netvibes|netvibes\.com|news\.ycombinator\.com|newsshowcase|nexopia|ngopost\.org|niconico|nicovideo\.jp|nightlifelink|nightlifelink\.com|ning|ning\.com|nl\.pinterest\.com|odnoklassniki\.ru|odnoklassniki\.ua|okwave\.jp|old\.reddit\.com|oneworldgroup\.org|onstartups|onstartups\.com|opendiary|opendiary\.com|oshiete\.goo\.ne\.jp|out\.reddit\.com|over-blog\.com|overblog\.com|paper\.li|partyflock\.nl|photobucket|photobucket\.com|pinboard|pinboard\.in|pingsta|pingsta\.com|pinterest|pinterest\.at|pinterest\.ca|pinterest\.ch|pinterest\.cl|pinterest\.co\.kr|pinterest\.co\.uk|pinterest\.com|pinterest\.com\.au|pinterest\.com\.mx|pinterest\.de|pinterest\.es|pinterest\.fr|pinterest\.it|pinterest\.jp|pinterest\.nz|pinterest\.ph|pinterest\.pt|pinterest\.ru|pinterest\.se|pixiv\.net|pl\.pinterest\.com|playahead\.se|plurk|plurk\.com|plus\.google\.com|plus\.url\.google\.com|pocket\.co|posterous|posterous\.com|pro\.homeadvisor\.com|pulse\.yahoo\.com|qapacity|qapacity\.com|quechup|quechup\.com|quora|quora\.com|qzone\.qq\.com|ravelry|ravelry\.com|reddit|reddit\.com|redux|redux\.com|renren|renren\.com|researchgate\.net|reunion|reunion\.com|reverbnation|reverbnation\.com|rtl\.de|ryze|ryze\.com|salespider|salespider\.com|scoop\.it|screenrant|screenrant\.com|scribd|scribd\.com|scvngr|scvngr\.com|secondlife|secondlife\.com|serverfault|serverfault\.com|shareit|sharethis|sharethis\.com|shvoong\.com|sites\.google\.com|skype|skyrock|skyrock\.com|slashdot\.org|slideshare\.net|smartnews\.com|snapchat|snapchat\.com|social|sociallife\.com\.br|socialvibe|socialvibe\.com|spaces\.live\.com|spoke|spoke\.com|spruz|spruz\.com|ssense\.com|stackapps|stackapps\.com|stackexchange|stackexchange\.com|stackoverflow|stackoverflow\.com|stardoll\.com|stickam|stickam\.com|studivz\.net|suomi24\.fi|superuser|superuser\.com|sweeva|sweeva\.com|t\.co|t\.me|tagged|tagged\.com|taggedmail|taggedmail\.com|talkbiznow|talkbiznow\.com|taringa\.net|techmeme|techmeme\.com|tencent|tencent\.com|tiktok|tiktok\.com|tinyurl|tinyurl\.com|toolbox|toolbox\.com|touch\.facebook\.com|tr\.pinterest\.com|travellerspoint|travellerspoint\.com|tripadvisor|tripadvisor\.com|trombi|trombi\.com|trustpilot|tudou|tudou\.com|tuenti|tuenti\.com|tumblr|tumblr\.com|tweetdeck|tweetdeck\.com|twitter|twitter\.com|twoo\.com|typepad|typepad\.com|unblog\.fr|urbanspoon\.com|ushareit\.com|ushi\.cn|vampirefreaks|vampirefreaks\.com|vampirerave|vampirerave\.com|vg\.no|video\.ibm\.com|vk\.com|vkontakte\.ru|wakoopa|wakoopa\.com|wattpad|wattpad\.com|web\.facebook\.com|web\.skype\.com|webshots|webshots\.com|wechat|wechat\.com|weebly|weebly\.com|weibo|weibo\.com|wer-weiss-was\.de|weread|weread\.com|whatsapp|whatsapp\.com|wiki\.answers\.com|wikihow\.com|wikitravel\.org|woot\.com|wordpress|wordpress\.com|wordpress\.org|xanga|xanga\.com|xing|xing\.com|yahoo-mbga\.jp|yammer|yammer\.com|yelp|yelp\.co\.uk|yelp\.com|youroom\.in|za\.pinterest\.com|zalo|zoo\.gr|zooppa|zooppa\.com)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"paid-video","test":(v) => new RegExp("^(?:blog\.twitch\.tv|crackle|crackle\.com|curiositystream|curiositystream\.com|d\.tube|dailymotion|dailymotion\.com|dashboard\.twitch\.tv|disneyplus|disneyplus\.com|fast\.wistia\.net|help\.hulu\.com|help\.netflix\.com|hulu|hulu\.com|id\.twitch\.tv|iq\.com|iqiyi|iqiyi\.com|jobs\.netflix\.com|justin\.tv|m\.twitch\.tv|m\.youtube\.com|music\.youtube\.com|netflix|netflix\.com|player\.twitch\.tv|player\.vimeo\.com|ted|ted\.com|twitch|twitch\.tv|utreon|utreon\.com|veoh|veoh\.com|viadeo\.journaldunet\.com|vimeo|vimeo\.com|wistia|wistia\.com|youku|youku\.com|youtube|youtube\.com)$", "i").test(v.utmSource) && new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"display","test":(v) =>
189 new RegExp("^(?:display|banner|expandable|interstitial|cpm)$", "i").test(v.utmMedium)},{"name":"paid-other","test":(v) => new RegExp("^(.*cp.*|ppc|retargeting|paid.*)$", "i").test(v.utmMedium)},{"name":"organic-shopping","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|yandex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) || new RegExp("^(.*(([^a-df-z]|^)shop|shopping).*)$", "i").test(v.utmCampaign)},{"name":"organic-social","test":(v) => new RegExp("^(?:43things|43things\.com|51\.com|5ch\.net|Hatena|ImageShack|academia\.edu|activerain|activerain\.com|activeworlds|activeworlds\.com|addthis|addthis\.com|airg\.ca|allnurses\.com|allrecipes\.com|alumniclass|alumniclass\.com|ameba\.jp|ameblo\.jp|americantowns|americantowns\.com|amp\.reddit\.com|ancestry\.com|anobii|anobii\.com|answerbag|answerbag\.com|answers\.yahoo\.com|aolanswers|aolanswers\.com|apps\.facebook\.com|ar\.pinterest\.com|artstation\.com|askubuntu|askubuntu\.com|asmallworld\.com|athlinks|athlinks\.com|away\.vk\.com|awe\.sm|b\.hatena\.ne\.jp|baby-gaga|baby-gaga\.com|babyblog\.ru|badoo|badoo\.com|bebo|bebo\.com|beforeitsnews|beforeitsnews\.com|bharatstudent|bharatstudent\.com|biip\.no|biswap\.org|bit\.ly|blackcareernetwork\.com|blackplanet|blackplanet\.com|blip\.fm|blog\.com|blog\.feedspot\.com|blog\.goo\.ne\.jp|blog\.naver\.com|blog\.yahoo\.co\.jp|blogg\.no|bloggang\.com|blogger|blogger\.com|blogher|blogher\.com|bloglines|bloglines\.com|blogs\.com|blogsome|blogsome\.com|blogspot|blogspot\.com|blogster|blogster\.com|blurtit|blurtit\.com|bookmarks\.yahoo\.co\.jp|bookmarks\.yahoo\.com|br\.pinterest\.com|brightkite|brightkite\.com|brizzly|brizzly\.com|business\.facebook\.com|buzzfeed|buzzfeed\.com|buzznet|buzznet\.com|cafe\.naver\.com|cafemom|cafemom\.com|camospace|camospace\.com|canalblog\.com|care\.com|care2|care2\.com|caringbridge\.org|catster|catster\.com|cbnt\.io|cellufun|cellufun\.com|centerblog\.net|chat\.zalo\.me|chegg\.com|chicagonow|chicagonow\.com|chiebukuro\.yahoo\.co\.jp|classmates|classmates\.com|classquest|classquest\.com|co\.pinterest\.com|cocolog-nifty|cocolog-nifty\.com|copainsdavant\.linternaute\.com|couchsurfing\.org|cozycot|cozycot\.com|cross\.tv|crunchyroll|crunchyroll\.com|cyworld|cyworld\.com|cz\.pinterest\.com|d\.hatena\.ne\.jp|dailystrength\.org|deluxe\.com|deviantart|deviantart\.com|dianping|dianping\.com|digg|digg\.com|diigo|diigo\.com|discover\.hubpages\.com|disqus|disqus\.com|dogster|dogster\.com|dol2day|dol2day\.com|doostang|doostang\.com|dopplr|dopplr\.com|douban|douban\.com|draft\.blogger\.com|draugiem\.lv|drugs-forum|drugs-forum\.com|dzone|dzone\.com|edublogs\.org|elftown|elftown\.com|epicurious\.com|everforo\.com|exblog\.jp|extole|extole\.com|facebook|facebook\.com|faceparty|faceparty\.com|fandom\.com|fanpop|fanpop\.com|fark|fark\.com|fb|fb\.me|fc2|fc2\.com|feedspot|feministing|feministing\.com|filmaffinity|filmaffinity\.com|flickr|flickr\.com|flipboard|flipboard\.com|folkdirect|folkdirect\.com|foodservice|foodservice\.com|forums\.androidcentral\.com|forums\.crackberry\.com|forums\.imore\.com|forums\.nexopia\.com|forums\.webosnation\.com|forums\.wpcentral\.com|fotki|fotki\.com|fotolog|fotolog\.com|foursquare|foursquare\.com|free\.facebook\.com|friendfeed|friendfeed\.com|fruehstueckstreff\.org|fubar|fubar\.com|gaiaonline|gaiaonline\.com|gamerdna|gamerdna\.com|gather\.com|geni\.com|getpocket\.com|glassboard|glassboard\.com|glassdoor|glassdoor\.com|godtube|godtube\.com|goldenline\.pl|goldstar|goldstar\.com|goo\.gl|gooblog|goodreads|goodreads\.com|google\+|googlegroups\.com|googleplus|govloop|govloop\.com|gowalla|gowalla\.com|gree\.jp|groups\.google\.com|gulli\.com|gutefrage\.net|habbo|habbo\.com|hi5|hi5\.com|hootsuite|hootsuite\.com|houzz|houzz\.com|hoverspot|hoverspot\.com|hr\.com|hu\.pinterest\.com|hubculture|hubculture\.com|hubpages\.com|hyves\.net|hyves\.nl|ibibo|ibibo\.com|id\.pinterest\.com|identi\.ca|ig|imageshack\.com|imageshack\.us|imvu|imvu\.com|in\.pinterest\.com|insanejournal|insanejournal\.com|instagram|instagram\.com|instapaper|instapaper\.com|internations\.org|interpals\.net|intherooms|intherooms\.com|irc-galleria\.net|is\.gd|italki|italki\.com|jammerdirect|jammerdirect\.com|jappy\.com|jappy\.de|kaboodle\.com|k
189akao|kakao\.com|kakaocorp\.com|kaneva|kaneva\.com|kin\.naver\.com|l\.facebook\.com|l\.instagram\.com|l\.messenger\.com|last\.fm|librarything|librarything\.com|lifestream\.aol\.com|line|line\.me|linkedin|linkedin\.com|listal|listal\.com|listography|listography\.com|livedoor\.com|livedoorblog|livejournal|livejournal\.com|lm\.facebook\.com|lnkd\.in|m\.blog\.naver\.com|m\.cafe\.naver\.com|m\.facebook\.com|m\.kin\.naver\.com|m\.vk\.com|m\.yelp\.com|mbga\.jp|medium\.com|meetin\.org|meetup|meetup\.com|meinvz\.net|meneame\.net|menuism\.com|messages\.google\.com|messages\.yahoo\.co\.jp|messenger|messenger\.com|mix\.com|mixi\.jp|mobile\.facebook\.com|mocospace|mocospace\.com|mouthshut|mouthshut\.com|movabletype|movabletype\.com|mubi|mubi\.com|my\.opera\.com|myanimelist\.net|myheritage|myheritage\.com|mylife|mylife\.com|mymodernmet|mymodernmet\.com|myspace|myspace\.com|netvibes|netvibes\.com|news\.ycombinator\.com|newsshowcase|nexopia|ngopost\.org|niconico|nicovideo\.jp|nightlifelink|nightlifelink\.com|ning|ning\.com|nl\.pinterest\.com|odnoklassniki\.ru|odnoklassniki\.ua|okwave\.jp|old\.reddit\.com|oneworldgroup\.org|onstartups|onstartups\.com|opendiary|opendiary\.com|oshiete\.goo\.ne\.jp|out\.reddit\.com|over-blog\.com|overblog\.com|paper\.li|partyflock\.nl|photobucket|photobucket\.com|pinboard|pinboard\.in|pingsta|pingsta\.com|pinterest|pinterest\.at|pinterest\.ca|pinterest\.ch|pinterest\.cl|pinterest\.co\.kr|pinterest\.co\.uk|pinterest\.com|pinterest\.com\.au|pinterest\.com\.mx|pinterest\.de|pinterest\.es|pinterest\.fr|pinterest\.it|pinterest\.jp|pinterest\.nz|pinterest\.ph|pinterest\.pt|pinterest\.ru|pinterest\.se|pixiv\.net|pl\.pinterest\.com|playahead\.se|plurk|plurk\.com|plus\.google\.com|plus\.url\.google\.com|pocket\.co|posterous|posterous\.com|pro\.homeadvisor\.com|pulse\.yahoo\.com|qapacity|qapacity\.com|quechup|quechup\.com|quora|quora\.com|qzone\.qq\.com|ravelry|ravelry\.com|reddit|reddit\.com|redux|redux\.com|renren|renren\.com|researchgate\.net|reunion|reunion\.com|reverbnation|reverbnation\.com|rtl\.de|ryze|ryze\.com|salespider|salespider\.com|scoop\.it|screenrant|screenrant\.com|scribd|scribd\.com|scvngr|scvngr\.com|secondlife|secondlife\.com|serverfault|serverfault\.com|shareit|sharethis|sharethis\.com|shvoong\.com|sites\.google\.com|skype|skyrock|skyrock\.com|slashdot\.org|slideshare\.net|smartnews\.com|snapchat|snapchat\.com|social|sociallife\.com\.br|socialvibe|socialvibe\.com|spaces\.live\.com|spoke|spoke\.com|spruz|spruz\.com|ssense\.com|stackapps|stackapps\.com|stackexchange|stackexchange\.com|stackoverflow|stackoverflow\.com|stardoll\.com|stickam|stickam\.com|studivz\.net|suomi24\.fi|superuser|superuser\.com|sweeva|sweeva\.com|t\.co|t\.me|tagged|tagged\.com|taggedmail|taggedmail\.com|talkbiznow|talkbiznow\.com|taringa\.net|techmeme|techmeme\.com|tencent|tencent\.com|tiktok|tiktok\.com|tinyurl|tinyurl\.com|toolbox|toolbox\.com|touch\.facebook\.com|tr\.pinterest\.com|travellerspoint|travellerspoint\.com|tripadvisor|tripadvisor\.com|trombi|trombi\.com|trustpilot|tudou|tudou\.com|tuenti|tuenti\.com|tumblr|tumblr\.com|tweetdeck|tweetdeck\.com|twitter|twitter\.com|twoo\.com|typepad|typepad\.com|unblog\.fr|urbanspoon\.com|ushareit\.com|ushi\.cn|vampirefreaks|vampirefreaks\.com|vampirerave|vampirerave\.com|vg\.no|video\.ibm\.com|vk\.com|vkontakte\.ru|wakoopa|wakoopa\.com|wattpad|wattpad\.com|web\.facebook\.com|web\.skype\.com|webshots|webshots\.com|wechat|wechat\.com|weebly|weebly\.com|weibo|weibo\.com|wer-weiss-was\.de|weread|weread\.com|whatsapp|whatsapp\.com|wiki\.answers\.com|wikihow\.com|wikitravel\.org|woot\.com|wordpress|wordpress\.com|wordpress\.org|xanga|xanga\.com|xing|xing\.com|yahoo-mbga\.jp|yammer|yammer\.com|yelp|yelp\.co\.uk|yelp\.com|youroom\.in|za\.pinterest\.com|zalo|zoo\.gr|zooppa|zooppa\.com)$", "i").test(v.utmSource) || new RegExp("^(?:social|social-network|social-media|sm|social network|social media)$", "i").test(v.utmMedium)},{"name":"organic-video","test":(v) => new RegExp("^(?:blog\.twitch\.tv|crackle|crackle\.com|curiositystream|curiositystream\.com|d\.tube|dailymotion|dailymotion\.com|dashboard\.twitch\.tv|disneyplus|disneyplus\.com|fast\.wistia\.net|help\.hulu\.com|help\.netflix\.com|hulu|hulu\.com|id\.twitch\.tv|iq\.com|iqiyi|iqiyi\.com|jobs\.netflix\.com|justin\.tv|m\.twitch\.tv|m\.youtube\.com|music\.youtube\.com|netflix|netflix\.com|player\.twitch\.tv|player\.vimeo\.com|ted|ted\.com|twitch|twitch\.tv|utreon|utreon\.com|veoh|veoh\.com|viadeo\.journaldunet\.com|vimeo|vimeo\.com|wistia|wistia\.com|youku|youku\.com|youtube|youtube\.com)$", "i").test(v.utmSource) || new RegExp("^(.*video.*)$", "i").test(v.utmMedium)},{"name":"organic-search","test":(v) => new RegExp("^(?:360\.cn|alice|aol|ar\.search\.yahoo\.com|ask|at\.search\.yahoo\.com|au\.search\.yahoo\.com|auone|avg|babylon|baidu|biglobe|biglobe\.co\.jp|biglobe\.ne\.jp|bing|br\.search\.yahoo\.com|ca\.search\.yahoo\.com|centrum\.cz|ch\.search\.yahoo\.com|cl\.search\.yahoo\.com|cn\.bing\.com|cnn|co\.search\.yahoo\.com|comcast|conduit|daum|daum\.net|de\.search\.yahoo\.com|dk\.search\.yahoo\.com|dogpile|dogpile\.com|duckduckgo|ecosia\.org|email\.seznam\.cz|eniro|es\.search\.yahoo\.com|espanol\.search\.yahoo\.com|exalead\.com|excite\.com|fi\.search\.yahoo\.com|firmy\.cz|fr\.search\.yahoo\.com|globo|go\.mail\.ru|google|google-play|hk\.search\.yahoo\.com|id\.search\.yahoo\.com|in\.search\.yahoo\.com|incredimail|it\.search\.yahoo\.com|kvasir|lens\.google\.com|lite\.qwant\.com|lycos|m\.baidu\.com|m\.naver\.com|m\.search\.naver\.com|m\.sogou\.com|mail\.rambler\.ru|mail\.yandex\.ru|malaysia\.search\.yahoo\.com|msn|msn\.com|mx\.search\.yahoo\.com|najdi|naver|naver\.com|news\.google\.com|nl\.search\.yahoo\.com|no\.search\.yahoo\.com|ntp\.msn\.com|nz\.search\.yahoo\.com|onet|onet\.pl|pe\.search\.yahoo\.com|ph\.search\.yahoo\.com|pl\.search\.yahoo\.com|play\.google\.com|qwant|qwant\.com|rakuten|rakuten\.co\.jp|rambler|rambler\.ru|se\.search\.yahoo\.com|search-results|search\.aol\.co\.uk|search\.aol\.com|search\.google\.com|search\.smt\.docomo\.ne\.jp|search\.ukr\.net|secureurl\.ukr\.net|seznam|seznam\.cz|sg\.search\.yahoo\.com|so\.com|sogou|sogou\.com|sp-web\.search\.auone\.jp|startsiden|startsiden\.no|suche\.aol\.de|terra|th\.search\.yahoo\.com|tr\.search\.yahoo\.com|tut\.by|tw\.search\.yahoo\.com|uk\.search\.yahoo\.com|ukr|us\.search\.yahoo\.com|virgilio|vn\.search\.yahoo\.com|wap\.sogou\.com|webmaster\.yandex\.ru|websearch\.rakuten\.co\.jp|yahoo|yahoo\.co\.jp|yahoo\.com|yandex|yandex\.by|yandex\.com|yandex\.com\.tr|yandex\.fr|yandex\.kz|yandex\.ru|yandex\.ua|y
189andex\.uz|zen\.yandex\.ru)$", "i").test(v.utmSource) || v.utmMedium.toLowerCase() === "organic"},{"name":"referral","test":(v) => new RegExp("^(?:referral|app|link)$", "i").test(v.utmMedium)},{"name":"email","test":(v) => new RegExp("^(?:email|e-mail|e_mail|e mail)$", "i").test(v.utmMedium) || new RegExp("^(?:email|e-mail|e_mail|e mail)$", "i").test(v.utmSource)},{"name":"affiliate","test":(v) => v.utmMedium.toLowerCase() === "affiliate"},{"name":"audio","test":(v) => v.utmMedium.toLowerCase() === "audio"},{"name":"sms","test":(v) => v.utmSource.toLowerCase() === "sms" || v.utmMedium.toLowerCase() === "sms"},{"name":"mobile-push-notification","test":(v) => v.utmSource.toLowerCase() === "firebase" || new RegExp("(?:.*mobile.*|.*notification.*|push$)", "i").test(v.utmMedium)}].find(i=>i.test(t)))==null?void 0:s.name)??"other"}getShopifyAnalyticsId(){return this.getCookie("_shopify_y")}legacyGetCookieVisitor(){const t=this.getCookie("SHOPLIFT");return t===null?null:JSON.parse(t)}getCookie(t){const e=this.cookie.split("; ").filter(s=>s.split("=").at(0)===t).at(0);return e===void 0?null:e.split("=").slice(1).join("=")}monitorConsentChange(){document.addEventListener("visitorConsentCollected",t=>void(async()=>await this.onConsentChange(t.detail.analyticsAllowed,!0))()),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>this.loadShopifyConsentApiWithRetry()):this.loadShopifyConsentApiWithRetry()}loadShopifyConsentApiWithRetry(){let t=0;const e=()=>{this.loadShopifyConsentApi()||t++<10&&window.setTimeout(e,100)};e()}loadShopifyConsentApi(){if(window.Shopify){this.log("Loading Shopify features");const t=async()=>{if(!window.Shopify){this.log("Shopify object missing... suddenly?");return}if(window.Shopify.customerPrivacy===void 0){this.log("Shopify CustomerPrivacy api still missing, trying again in 1000ms"),e=window.setTimeout(()=>void(async()=>await t())(),1e3);return}const s=window.Shopify.customerPrivacy.getTrackingConsent();await this.onConsentChange(window.Shopify.customerPrivacy.analyticsProcessingAllowed(),s!=="no_interaction")};let e=window.setTimeout(()=>void(async()=>await t())(),5e3);return window.Shopify.loadFeatures([{name:"consent-tracking-api",version:"0.1"}],s=>{(async()=>{if(window.clearTimeout(e),s){this.log("Error loading consent tracking",s);return}await t()})()}),!0}return!1}async onConsentChange(t,e){try{if(this.log("Consent change detected"),this.state.essential.consentApproved=t,this.state.essential.hasConsentInteraction=e,!this.state.essential.consentApproved){this.state.essential.hasConsentInteraction&&(this.state.analytics.queue.length=0),this.saveState();return}this.cookie=document.cookie,this.shopifyAnalyticsId=this.getShopifyAnalyticsId();for(const s of this.state.analytics.queue.filter(i=>i.type===1||i.type===2)){const i=s;i.shopifyAnalyticsId=this.shopifyAnalyticsId}this.saveState(),await this.syncAllEvents()}catch(s){this.log("Error syncing on consent change",s)}}isThemePreview(){try{return isThemePreview}catch(t){if(t instanceof ReferenceError)try{return themeRole!=="main"}catch(e){if(e instanceof ReferenceError)return window.document.cookie.includes("preview_theme=1");throw e}else throw t}}clearThemeBar(){this.log("Setting theme bar to be cleared"),this.waitForElement("#preview-bar-iframe").then(t=>{this.log("Clearing theme bar"),t.remove()}).catch(t=>console.error(t))}waitForElement(t){return new Promise(e=>{const s=document.querySelector(t);if(s){e(s);return}const i=new MutationObserver(o=>{const a=document.querySelector(t);if(a){i.disconnect(),e(a);return}});i.observe(document.documentElement,{childList:!0,subtree:!0})})}setDebug(t){this.state.essential.debugMode=t,this.saveState()}log(t,...e){!this.state.essential.debugMode&&!this.shopliftDebug||console.debug(`[SL] ${t}`,...e)}debug(){const t={state:this.state,storage:{essential:this.loadLocalStorage(this.essentialSessionKey),analytics:this.loadLocalStorage(this.analyticsSessionKey)},params:{shop:this.shop,host:this.host,eventHost:this.eventHost,cssHideClass:this.cssHideClass,testConfigs:this.testConfigs,sendPageView:this.sendPageView}};console.log(JSON.stringify(t))}}(async function(){window.shopliftInstance||(window.shopliftInstance=new T("joy-planet-finland.myshopify.com","https://app.shoplift.ai","https://events.shoplift.ai",false,false,false,false,1000,[]),await window.shopliftInstance.init())})()})(); })("/", { suffix: "tinys-paasivu", type: "product" }, "main", 162073870678, false)</script>
189 190<!-- End of Shoplift scripts --> 191 192 193<meta name="google-site-verification" content="v4fNW4P80oysfe8cyZ6Rp6X_TriC84z95DSlRxzibN8" /> 194 195 <meta charset="utf-8"> 196 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 197 <meta name="viewport" content="width=device-width,initial-scale=1"> 198 <meta name="theme-color" content="#111111"> 199 <link rel="canonical" href="https://joyearbuds.com/products/tinys-earbuds-desinged-for-women-joy-friends-club"> 200 <link rel="preconnect" href="https://cdn.shopify.com" crossorigin> 201 <link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin> 202 <link rel="dns-prefetch" href="https://productreviews.shopifycdn.com"> 203 <link rel="dns-prefetch" href="https://ajax.googleapis.com"> 204 <link rel="dns-prefetch" href="https://maps.googleapis.com"> 205 <link rel="dns-prefetch" href="https://maps.gstatic.com"> 206 207 208<link rel="shortcut icon" href="//joyearbuds.com/cdn/shop/files/favicon_3d919db1-a75f-42c0-8a40-83ce60f20e3e_32x32.png?v=1715578740" type="image/png" /><title>Premium Nappikuulokkeet - Sopii jokaiseen korvaan 209– Joy Planet Finland 210</title> 211<meta name="description" content="TinyS Premium Nappikuulokkeet jotka on suunniteltu sopimaan jokaiseen korvaan."><meta property="og:site_name" content="Joy Planet Finland"> 212 <meta property="og:url" content="https://joyearbuds.com/products/tinys-earbuds-desinged-for-women-joy-friends-club"> 213 <meta property="og:title" content="TinyS"> 214 <meta property="og:type" content="product"> 215 <meta property="og:description" content="TinyS Premium Nappikuulokkeet jotka on suunniteltu sopimaan jokaiseen korvaan."><meta property="og:image" content="http://joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5.png?v=1779964205"> 216 <meta property="og:image:secure_url" content="https://joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5.png?v=1779964205"> 217 <meta property="og:image:width" content="1254"> 218 <meta property="og:image:height" content="1254"><meta name="twitter:site" content="@"> 219 <meta name="twitter:card" content="summary_large_image"> 220 <meta name="twitter:title" content="TinyS"> 221 <meta name="twitter:description" content="TinyS Premium Nappikuulokkeet jotka on suunniteltu sopimaan jokaiseen korvaan."> 222<style data-shopify>@font-face { 223 font-family: Inter; 224 font-weight: 700; 225 font-style: normal; 226 font-display: swap; 227 src: url("//joyearbuds.com/cdn/fonts/inter/inter_n7.02711e6b374660cfc7915d1afc1c204e633421e4.woff2") format("woff2"), 228 url("//joyearbuds.com/cdn/fonts/inter/inter_n7.6dab87426f6b8813070abd79972ceaf2f8d3b012.woff") format("woff"); 229} 230 231 @font-face { 232 font-family: Inter; 233 font-weight: 400; 234 font-style: normal; 235 font-display: swap; 236 src: url("//joyearbuds.com/cdn/fonts/inter/inter_n4.b2a3f24c19b4de56e8871f609e73ca7f6d2e2bb9.woff2") format("woff2"), 237 url("//joyearbuds.com/cdn/fonts/inter/inter_n4.af8052d517e0c9ffac7b814872cecc27ae1fa132.woff") format("woff"); 238} 239 240 241 @font-face { 242 font-family: Inter; 243 font-weight: 600; 244 font-style: normal; 245 font-display: swap; 246 src: url("//joyearbuds.com/cdn/fonts/inter/inter_n6.771af0474a71b3797eb38f3487d6fb79d43b6877.woff2") format("woff2"), 247 url("//joyearbuds.com/cdn/fonts/inter/inter_n6.88c903d8f9e157d48b73b7777d0642925bcecde7.woff") format("woff"); 248} 249 250 @font-face { 251 font-family: Inter; 252 font-weight: 400; 253 font-style: italic; 254 font-display: swap; 255 src: url("//joyearbuds.com/cdn/fonts/inter/inter_i4.feae1981dda792ab80d117249d9c7e0f1017e5b3.woff2") format("woff2"), 256 url("//joyearbuds.com/cdn/fonts/inter/inter_i4.62773b7113d5e5f02c71486623cf828884c85c6e.woff") format("woff"); 257} 258 259 @font-face { 260 font-family: Inter; 261 font-weight: 600; 262 font-style: italic; 263 font-display: swap; 264 src: url("//joyearbuds.com/cdn/fonts/inter/inter_i6.3bbe0fe1c7ee4f282f9c2e296f3e4401a48cbe19.woff2") format("woff2"), 265 url("//joyearbuds.com/cdn/fonts/inter/inter_i6.8bea21f57a10d5416ddf685e2c91682ec237876d.woff") format("woff"); 266} 267 268</style><link href="//joyearbuds.com/cdn/shop/t/54/assets/theme.css?v=84240404310353492641789032338" rel="stylesheet" type="text/css" media="all" /> 269 <link href="//joyearbuds.com/cdn/shop/t/54/assets/custom.css?v=7548050675163428991789036848" rel="stylesheet" type="text/css" media="all" /> 270<style data-shopify>:root { 271 --typeHeaderPrimary: Inter; 272 --typeHeaderFallback: sans-serif; 273 --typeHeaderSize: 36px; 274 --typeHeaderWeight: 700; 275 --typeHeaderLineHeight: 1.2; 276 --typeHeaderSpacing: 0.0em; 277 278 --typeBasePrimary:Inter; 279 --typeBaseFallback:sans-serif; 280 --typeBaseSize: 16px; 281 --typeBaseWeight: 400; 282 --typeBaseLineHeight: 1.6; 283 --typeBaseSpacing: 0.0em; 284 285 286 --iconWeight: 3px; 287 --iconLinecaps: miter; 288 } 289 290 291.collection-hero__content:before, 292 .hero__image-wrapper:before, 293 .hero__media:before { 294 background-image: linear-gradient(to bottom, rgba(28, 28, 28, 0.0) 0%, rgba(28, 28, 28, 0.0) 40%, rgba(0, 0, 0, 0.62) 100%); 295 } 296 297 .skrim__item-content .skrim__overlay:after { 298 background-image: linear-gradient(to bottom, rgba(28, 28, 28, 0.0) 30%, rgba(0, 0, 0, 0.62) 100%); 299 } 300 301 .placeholder-content { 302 background-image: linear-gradient(100deg, #ffffff 40%, #f7f7f7 63%, #ffffff 79%); 303 }</style>
303<script> 304 document.documentElement.className = document.documentElement.className.replace('no-js', 'js'); 305 306 window.theme = window.theme || {}; 307 theme.routes = { 308 home: "/", 309 cart: "/cart.js", 310 cartPage: "/cart", 311 cartAdd: "/cart/add.js", 312 cartChange: "/cart/change.js", 313 search: "/search", 314 predictiveSearch: "/search/suggest" 315 }; 316 theme.strings = { 317 soldOut: "Sold Out", 318 unavailable: "Unavailable", 319 inStockLabel: "Available for order â Delivery time 2-3 weeks.", 320 oneStockLabel: "Low stock - [count] item left", 321 otherStockLabel: "Low stock - [count] items left", 322 willNotShipUntil: "Ready to ship [date]", 323 willBeInStockAfter: "Back in stock [date]", 324 waitingForStock: "Available for order â Delivery time 2-3 weeks.", 325 cartSavings: "You're saving [savings]", 326 cartEmpty: "Your cart is currently empty.", 327 cartTermsConfirmation: "You must agree with the terms and conditions of sales to check out", 328 searchCollections: "Collections", 329 searchPages: "Pages", 330 searchArticles: "Articles", 331 maxQuantity: "You can only have [quantity] of [title] in your cart." 332 }; 333 theme.settings = { 334 cartType: "drawer", 335 isCustomerTemplate: false, 336 moneyFormat: "{{amount_with_comma_separator}} â¬", 337 predictiveSearch: true, 338 predictiveSearchType: null, 339 quickView: true, 340 themeName: 'Motion', 341 themeVersion: "10.4.0" 342 }; 343 </script>
343 344 345
345<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
345<meta name="facebook-domain-verification" content="kebxxkfnjthmtqfgjjyrhqzs5z24cs"> 346<meta name="google-site-verification" content="J45FGc70g9uamErQqnu166gLIa0E_hzLiTO8UCFTLL8"> 347<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/65680310506/digital_wallets/dialog"> 348<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="buy" href="/cart/54276348870998:1?ucp/version=2026-08-25&context/payment/0/handler=dev.shopify.shop_pay" payment="dev.shopify.shop_pay com.google.pay dev.shopify.card"><link rel="alternate" hreflang="x-default" href="https://joyearbuds.com/products/tinys-earbuds-desinged-for-women-joy-friends-club"> 349<link rel="alternate" hreflang="en" href="https://joyearbuds.com/products/tinys-earbuds-desinged-for-women-joy-friends-club"> 350<link rel="alternate" hreflang="fi" href="https://joyearbuds.com/fi/products/tinys-earbuds-desinged-for-women-joy-friends-club"> 351<link rel="alternate" hreflang="de" href="https://joyearbuds.com/de/products/tinys-earbuds-desinged-for-women-joy-friends-club"> 352<link rel="alternate" hreflang="fi-FI" href="https://joyearbuds.com/fi-fi/products/tinys-earbuds-desinged-for-women-joy-friends-club"> 353<link rel="alternate" hreflang="en-FI" href="https://joyearbuds.com/en-fi/products/tinys-earbuds-desinged-for-women-joy-friends-club"> 354<link rel="alternate" hreflang="en-DE" href="https://joyearbuds.com/en-de/products/tinys-earbuds-desinged-for-women-joy-friends-club"> 355<link rel="alternate" hreflang="de-DE" href="https://joyearbuds.com/de-de/products/tinys-earbuds-desinged-for-women-joy-friends-club"> 356<link rel="alternate" type="application/json+oembed" href="https://joyearbuds.com/products/tinys-earbuds-desinged-for-women-joy-friends-club.oembed">
357<script async="async" src="/checkouts/internal/preloads.js?locale=en-US"></script>
357 358<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
359<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&shop_id=65680310506" crossorigin="anonymous"></script>
vendor: 1 bytes, line 359
359
360<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":65680310506,"countryCode":"FI","currencyCode":"EUR","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/65680310506","merchantName":"Joy Planet Finland","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","maestro","masterCard","amex"],"total":{"type":"pending","label":"Joy Planet Finland","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 360
360
361<script id="shopify-features" type="application/json">{"accessToken":"f604ba8429a1e1b5e31b0cacaa8d55e9","betas":["rich-media-storefront-analytics"],"domain":"joyearbuds.com","predictiveSearch":true,"shopId":65680310506,"locale":"en"}</script>
vendor: 1 bytes, line 361
361
362<script>var Shopify = Shopify || {}; 363Shopify.shop = "joy-planet-finland.myshopify.com"; 364Shopify.locale = "en"; 365Shopify.currency = {"active":"EUR","rate":"1.0"}; 366Shopify.country = "US"; 367Shopify.theme = {"name":"JOY Earbuds New v1.0 (05.2024)","id":162073870678,"schema_name":"Motion","schema_version":"10.4.0","theme_store_id":847,"role":"main"}; 368Shopify.theme.handle = "null"; 369Shopify.theme.style = {"id":null,"handle":null}; 370Shopify.cdnHost = "joyearbuds.com/cdn"; 371Shopify.routes = Shopify.routes || {}; 372Shopify.routes.root = "/"; 373Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 374Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 375Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 376Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 376
376
377<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 377
377
378<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 378
378
379<script> 380 window.ShopifyPay = window.ShopifyPay || {}; 381 window.ShopifyPay.apiHost = "shop.app\/pay"; 382 window.ShopifyPay.redirectState = null; 383</script>
vendor: 1 bytes, line 383
383
384<script> 385 window.Shopify = window.Shopify || {}; 386 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 387 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 388 window.Shopify.SignInWithShop.eligible = true; 389</script>
vendor: 1 bytes, line 389
389
390<script id="shop-js-analytics" type="application/json">{"pageType":"product"}</script>
vendor: 1 bytes, line 390
390
391<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 391
391
392<script type="module"> 393 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 394 395 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 396 397</script>
vendor: 1 bytes, line 397
397
398<script> 399 window.Shopify = window.Shopify || {}; 400 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 401 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"]}; 402</script>
vendor: 1 bytes, line 402
402
403<script>(function() { 404 var isLoaded = false; 405 function asyncLoad() { 406 if (isLoaded) return; 407 isLoaded = true; 408 var urls = ["https:\/\/loox.io\/widget\/V1b_4RDNrT\/loox.1667989271762.js?shop=joy-planet-finland.myshopify.com","https:\/\/cdn.weglot.com\/weglot_script_tag.js?shop=joy-planet-finland.myshopify.com","https:\/\/static.klaviyo.com\/onsite\/js\/klaviyo.js?company_id=Ru4nY2\u0026shop=joy-planet-finland.myshopify.com","https:\/\/widgetic.com\/sdk\/sdk.js?shop=joy-planet-finland.myshopify.com","https:\/\/config.gorgias.chat\/bundle-loader\/01J158RGPVVQWF61M6B9SDBD2V?source=shopify1click\u0026shop=joy-planet-finland.myshopify.com","https:\/\/rapid-cdn.yottaa.com\/rapid\/lib\/5vmlSIt_hzLbCA.js?shop=joy-planet-finland.myshopify.com","https:\/\/media.9gtb.com\/loader.js?g_cvt_id=5b466dcf-27cb-4f2b-9631-ff635a9b7128\u0026shop=joy-planet-finland.myshopify.com","https:\/\/cdn-bundler.nice-team.net\/app\/js\/bundler.js?shop=joy-planet-finland.myshopify.com","\/\/cdn.shopify.com\/proxy\/ed1ff838acb2e66564e219901f6ae989514710b813918f744de0672be31b5674\/pixel.wetracked.io\/joy-planet-finland.myshopify.com\/events.js?shop=joy-planet-finland.myshopify.com\u0026sp-cache-control=cHVibGljLCBtYXgtYWdlPTkwMA"]; 409 for (var i = 0; i < urls.length; i++) { 410 var s = document.createElement('script'); 411 s.type = 'text/javascript'; 412 s.async = true; 413 s.src = urls[i]; 414 var x = document.getElementsByTagName('script')[0]; 415 x.parentNode.insertBefore(s, x); 416 } 417 }; 418 if(window.attachEvent) { 419 window.attachEvent('onload', asyncLoad); 420 } else { 421 window.addEventListener('load', asyncLoad, false); 422 } 423})();</script>
vendor: 1 bytes, line 423
423
424<script id="__st">var __st={"a":65680310506,"offset":10800,"reqid":"910fffe3-095c-4fca-84bc-c5f7a384d934-1791140730","pageurl":"joyearbuds.com\/products\/tinys-earbuds-desinged-for-women-joy-friends-club","u":"8d072e1a18a3","p":"product","rtyp":"product","rid":10882379907414};</script>
vendor: 1 bytes, line 424
424
425<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 425
425
426<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 426
426
427<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//joyearbuds.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 427
427
428<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 = "//joyearbuds.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>
428<script crossorigin="anonymous" defer="defer" src="//joyearbuds.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 428
428
429<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 429
429
430<script> 431 window.Shopify = window.Shopify || {}; 432 window.Shopify.MCP = window.Shopify.MCP || {}; 433 window.Shopify.MCP.enabled = true; 434 window.Shopify.MCP.shop = "joy-planet-finland.myshopify.com"; 435 window.Shopify.MCP.mcpEndpoint = "https:\/\/joyearbuds.com\/api\/mcp"; 436 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"]}}]; 437</script>
vendor: 1 bytes, line 437
437
438<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("\/\/joyearbuds.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 439</script>
vendor: 1 bytes, line 439
439
440<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://joyearbuds.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 441</script>
vendor: 1 bytes, line 441
441
442<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 443 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); 444</script>
vendor: 1 bytes, line 444
444
445<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})}})); 446</script>
446 447<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://joyearbuds.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 448<style id="shopify-accelerated-checkout-cart"> 449 #shopify-buyer-consent { 450 margin-top: 1em; 451 display: inline-block; 452 width: 100%; 453} 454 455#shopify-buyer-consent.hidden { 456 display: none; 457} 458 459#shopify-subscription-policy-button { 460 background: none; 461 border: none; 462 padding: 0; 463 text-decoration: underline; 464 font-size: inherit; 465 cursor: pointer; 466} 467 468#shopify-subscription-policy-button::before { 469 box-shadow: none; 470} 471 472 </style> 473
474<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
474 475 476
476<script src="//joyearbuds.com/cdn/shop/t/54/assets/vendor-scripts-v14.js" defer="defer"></script>
476 477
477<script src="//joyearbuds.com/cdn/shop/t/54/assets/jquery.js?v=184217876181003224711715577105"></script>
477 478
478<script src="//joyearbuds.com/cdn/shop/t/54/assets/custom.js?v=156544722039075780811786637498" defer="defer"></script>
478<script src="//joyearbuds.com/cdn/shop/t/54/assets/theme.js?v=100599903906535249751751976538" defer="defer"></script>
478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 <meta name="google-site-verification" content="LcBkUhf9QYEkYHDIxrU56q9VDsEIF03-RwqZc_bogoI" /> 494 495 496 497 498 499 500 <!-- slick slider --> 501<link rel="stylesheet" href="//joyearbuds.com/cdn/shop/t/54/assets/slick.min.css?v=105347522073496785561745997777"> 502<link rel="stylesheet" href="//joyearbuds.com/cdn/shop/t/54/assets/slick-theme.min.css?v=10541884051976483521745997785"> 503<!-- custom css --> 504<link rel="stylesheet" href="//joyearbuds.com/cdn/shop/t/54/assets/landing.css?v=130597943354725318571776247560"> 505 506 <link rel="preconnect" href="https://app.wayby.io/scripts/wayby.js" /> 507<style>html.prehide {visibility: hidden}</style>
508<script>document.documentElement.classList.add("prehide")</script>
vendor: 1 bytes, line 508
508
509<script src="https://app.wayby.io/scripts/wayby.js" data-website-id="2ba683d0-6f9c-4f93-9d2f-137534699e12"></script>
vendor: 1 bytes, line 509
509
510<script>setTimeout(() => {document.documentElement.classList.remove("prehide")},2000)</script>
510 511 512<!-- BEGIN app block: shopify://apps/consentmo-gdpr/blocks/gdpr_cookie_consent/4fbe573f-a377-4fea-9801-3ee0858cae41 --> 513<link rel="preconnect" href="https://app.consentmo.com" crossorigin data-csm-preconnect="app"> 514<link rel="dns-prefetch" href="https://workers.consentmo.com" data-csm-preconnect="workers"> 515<link rel="dns-prefetch" href="https://storage.consentmo.com" data-csm-preconnect="storage"> 516<link rel="preconnect" href="https://cdn.consentmo.com" crossorigin data-csm-preconnect="cdn"><link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="banner"> 517 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-cookie-dialog.consentmo.js" crossorigin data-csm-layout-prefetch="dialog"> 518 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-cookie-box.consentmo.js" crossorigin data-csm-layout-prefetch="box"> 519 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-cookie-smart-banner.consentmo.js" crossorigin data-csm-layout-prefetch="smart"> 520 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/layout-mobile-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="mobile">
520<script> 521(function () { 522 try { 523 document.documentElement.classList.add('csm-cookie-embed'); 524 } catch (e) {} 525})(); 526</script>
526<script data-consentmo-data-src-bootstrap> 527(function () { 528 'use strict'; 529 if (window.__consentmoDataSrcBootstrapInit) return; 530 window.__consentmoDataSrcBootstrapInit = true; 531 532 var DATA_SRC_SELECTOR = [ 533 'script[data-src*="consentmo_cookie_consent"]', 534 'script[data-src*="gdpr_cookie_consent.min"]', 535 'script[data-src*="gdrp_cookie_consent_unlimited"]' 536 ].join(','); 537 538 function activateConsentmoDataSrcScripts() { 539 if (!window.Shopify || !window.Shopify.shop) return; 540 document.querySelectorAll(DATA_SRC_SELECTOR).forEach(function (scriptEl) { 541 // getAttribute: src="" must not count as "already has src" (.src === page URL). 542 if (scriptEl.getAttribute('src')) return; 543 var url = scriptEl.getAttribute('data-src'); 544 if (!url) return; 545 if (scriptEl.getAttribute('type') === 'text/plain') { 546 scriptEl.removeAttribute('type'); 547 } 548 scriptEl.src = url; 549 }); 550 } 551 function scheduleActivation() { 552 activateConsentmoDataSrcScripts(); 553 // Retry on next task so other DCL handlers (lazy-loaders) can finish setting Shopify.shop / data-src first. 554 setTimeout(activateConsentmoDataSrcScripts, 0); 555 } 556 if (document.readyState === 'loading') { 557 document.addEventListener('DOMContentLoaded', scheduleActivation, { once: true }); 558 } else { 559 scheduleActivation(); 560 } 561})(); 562</script>
562 563 564 565<!-- END app block --><!-- BEGIN app block: shopify://apps/bundler/blocks/bundler-script-append/7a6ae1b8-3b16-449b-8429-8bb89a62c664 -->
565<script defer="defer"> 566 /** Bundler script loader, version number: 2.0 */ 567 (function(){ 568 var loadScript=function(a,b){var c=document.createElement("script");c.type="text/javascript",c.readyState?c.onreadystatechange=function(){("loaded"==c.readyState||"complete"==c.readyState)&&(c.onreadystatechange=null,b())}:c.onload=function(){b()},c.src=a,document.getElementsByTagName("head")[0].appendChild(c)}; 569 appendScriptUrl('joy-planet-finland.myshopify.com'); 570 571 // get script url and append timestamp of last change 572 function appendScriptUrl(shop) { 573 574 var timeStamp = Math.floor(Date.now() / (1000*1*1)); 575 var timestampUrl = 'https://bundler.nice-team.net/app/shop/status/'+shop+'.js?'+timeStamp; 576 577 loadScript(timestampUrl, function() { 578 // append app script 579 if (typeof bundler_settings_updated == 'undefined') { 580 console.log('settings are undefined'); 581 bundler_settings_updated = 'default-by-script'; 582 } 583 var scriptUrl = "https://cdn-bundler.nice-team.net/app/js/bundler-script.js?shop="+shop+"&"+bundler_settings_updated; 584 loadScript(scriptUrl, function(){}); 585 }); 586 } 587 })(); 588 589 var BndlrScriptAppended = true; 590 591 592 593 var BndlrMarketId = 10944577770; 594 595</script>
595 596 597<!-- END app block --><!-- BEGIN app block: shopify://apps/kaching-bundles/blocks/app-embed-block-v2/6c637362-a106-4a32-94ac-94dcfd68cdb8 --><!-- Kaching Bundles App Embed V2 --> 598 599<!-- BEGIN app snippet: app-embed-content --> 600 601 602 603 604 605 606 607
608<script> 609 // Prevent duplicate initialization if both app embeds are enabled 610 if (window.kachingBundlesAppEmbedLoaded) { 611 console.warn('[Kaching Bundles] Multiple app embed blocks detected. Please disable one of them. Skipping duplicate initialization.'); 612 } else { 613 window.kachingBundlesAppEmbedLoaded = true; 614 window.kachingBundlesEnabled = true; 615 window.kachingBundlesInitialized = false; 616 617 // Allow calling kachingBundlesInitialize before the script is loaded 618 (() => { 619 let shouldInitialize = false; 620 let realInitialize = null; 621 622 window.kachingBundlesInitialize = () => { 623 if (realInitialize) { 624 realInitialize(); 625 } else { 626 shouldInitialize = true; 627 } 628 }; 629 630 Object.defineProperty(window, '__kachingBundlesInitializeInternal', { 631 set(fn) { 632 realInitialize = fn; 633 if (shouldInitialize) { 634 shouldInitialize = false; 635 fn(); 636 } 637 }, 638 get() { 639 return realInitialize; 640 } 641 }); 642 })(); 643 } 644</script>
644 645 646 647
648<script id="kaching-bundles-config" type="application/json"> 649 { 650 "shopifyDomain": "joy-planet-finland.myshopify.com", 651 "moneyFormat": "{{amount_with_comma_separator}} â¬", 652 "locale": "en", 653 "liquidLocale": "en", 654 "country": "US", 655 "currencyRate": 1, 656 "marketCurrencyCode": "EUR", 657 "marketId": 10944577770, 658 "productId": 10882379907414, 659 "storefrontAccessToken": "f6905fb95d3c93ead34c8e3df741713a", 660 "includeSellingPlans": true, 661 "includeAvailableQuantity": true, 662 "customApiHost": null, 663 "keepQuantityInput": false, 664 "ignoreDeselect": false, 665 "ignoreUnitPrice": false, 666 "requireCustomerLogin": false, 667 "abTestsRunning": false, 668 "webPixel": true, 669 "b2bCustomer": false, 670 "isLoggedIn": false, 671 "isDeprecatedAppEmbed": true, 672 "preview": false, 673 "defaultTranslations": { 674 "system.out_of_stock": "There\u0026#39;s not enough items in our stock, please select smaller bundle.", 675 "system.invalid_variant": "Sorry, this is not currently available.", 676 "system.unavailable_option_value": "Unavailable", 677 "system.confirm": "Confirm", 678 "system.cancel": "Cancel", 679 "system.free": "FREE", 680 "system.search": "Search", 681 "system.sort_by": "Sort by", 682 "system.sort_relevance": "Relevance", 683 "system.sort_newest_first": "Newest first", 684 "system.sort_price_low_to_high": "Price: Low â High", 685 "system.sort_price_high_to_low": "Price: High â Low", 686 "system.no_results_found": "No results found", 687 "system.no_results_description": "We canât find any item matching your search.", 688 "system.clear_search": "Clear search", 689 "system.no_products_available": "No products available", 690 "system.letters_only": "Only letters are allowed.", 691 "system.numbers_only": "Only numbers are allowed.", 692 "system.select_variant_alert": "Please select a variant.", 693 "system.select_variant_placeholder": "Select", 694 "system.personalisation_required_alert": "Please add personalisation for every item to continue.", 695 "system.quantity": "Quantity", 696 "system.subscription_plan": "Subscription plan", 697 "system.remove": "Remove", 698 "system.original_price": "Original price:", 699 "system.price": "Price:" 700 }, 701 "customSelectors": { 702 "quantity": null, 703 "addToCartButton": null, 704 "variantPicker": null, 705 "price": null, 706 "priceCompare": null, 707 "label": null 708 }, 709 "shopCustomStyles": "", 710 "brandColors": {"error":"#D72C2C","border":"#12D8FA4D","overlay":"#000000","badgeText":"#000000","primaryText":"#000000","primaryAccent":"#12D8FA","secondaryText":"#555555","badgeBackgroun
710d":"#12D8FA","primaryAccentText":"#000000","primaryBackground":"#FFFFFF","secondaryBackground":"#F0F0F0"}, 711 "featureFlags": {"atc_total_price":false,"cart_change_response_rewrite":false,"cart_interceptor_dedupe_disabled":false,"cart_interceptor_json_encoding":false,"debug_cart_add":false,"disable_nested_cart_lines":false,"early_fetch_override":false,"hide_missing_variants":true,"initialize_with_form_variant":true,"intercept_cart_request":true,"legacy_saved_percentage":false,"native_swatches_disabled":false,"observe_external_selling_plan":false,"observe_form_selling_plan":true,"percentage_cents_rounding_workaround":false,"pos_extension":false,"preserve_variant_selections":false,"price_rounding_v2":true,"propagate_line_properties":false,"propagate_picker_option_changes":false,"reinitialize_morphed_placeholders":true,"remove_variant_change_delay":false,"rever_non_returnable":false,"split_bxgy_items":false,"storefront_metaobjects":false,"variant_images":true} 712 713 } 714</script>
714 715 716<!-- BEGIN app snippet: translations --> 717 718 719 720
720<script id="kaching-bundles-translations" type="application/json"> 721 [{"locale":"fi","translations":{"system":{"system.unavailable_option_value":"Ei saatavilla: Tilapäisesti loppuunmyyty."},"dealBlocks":{"2d788284-7a4e-4374-b330-28d37abbe9ea":{"SAVE 50,00 â¬":"Säästät 50,00 â¬","SAVE {{saved_total}}":"Kokonaisalennus {{saved_total}}"}}}}] 722 </script>
722 723 724 725<!-- END app snippet --> 726 727 728 729 <!-- BEGIN app snippet: product --> 730
730<script class="kaching-bundles-product" data-product-id="10882379907414" data-main="true" type="application/json"> 731 { 732 "id": 10882379907414, 733 "handle": "tinys-earbuds-desinged-for-women-joy-friends-club", 734 "url": "\/products\/tinys-earbuds-desinged-for-women-joy-friends-club", 735 "availableForSale": true, 736 "title": "TinyS", 737 "image": "\/\/joyearbuds.com\/cdn\/shop\/files\/ChatGPT_Image_May_28_2026_5.png?height=200\u0026v=1779964205", 738 "collectionIds": [639365841238,660933574998,707928949078,702182555990,707229352278,617235186006,668751593814], 739 "options": [ 740 741 { 742 "defaultName": "Color", 743 "name": "Color", 744 "position": 1, 745 "optionValues": [ 746 747 { 748 "id": 11274523574614, 749 "defaultName": "Black", 750 "name": "Black", 751 "swatch": { 752 "color": null, 753 "image": null 754 } 755 }, 756 757 { 758 "id": 11274524557654, 759 "defaultName": "Pink", 760 "name": "Pink", 761 "swatch": { 762 "color": null, 763 "image": null 764 } 765 }, 766 767 { 768 "id": 11274526097750, 769 "defaultName": "Gold", 770 "name": "Gold", 771 "swatch": { 772 "color": null, 773 "image": null 774 } 775 } 776 777 ] 778 } 779 780 ], 781 "selectedVariantId": 54276348870998, 782 "variants": [ 783 784 { 785 "id": 54276348870998, 786 "availableForSale": true, 787 "price": 15900, 788 "compareAtPrice": null, 789 "options": ["Black"], 790 "imageId": 72008685551958, 791 "image": "\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?height=200\u0026v=1776769855", 792 "inventoryManagement": "shopify", 793 "inventoryPolicy": "continue", 794 "inventoryQuantity": -6, 795 "unitPriceMeasurement": null, 796 "sellingPlans": [ 797 798 ] 799 }, 800 801 { 802 "id": 54276348936534, 803 "availableForSale": true, 804 "price": 15900, 805 "compareAtPrice": null, 806 "options": ["Pink"], 807 "imageId": 72008741683542, 808 "image": "\/\/joyearbuds.com\/cdn\/shop\/files\/pink_buds_transparent_1_1.png?height=200\u0026v=1776769855", 809 "inventoryManagement": "shopify", 810 "inventoryPolicy": "continue", 811 "inventoryQuantity": -18, 812 "unitPriceMeasurement": null, 813 "sellingPlans": [ 814 815 ] 816 }, 817 818 { 819 "id": 55061249950038, 820 "availableForSale": true, 821 "price": 15900, 822 "compareAtPrice": null, 823 "options": ["Gold"], 824 "imageId": 72936309490006, 825 "image": "\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_28.png?height=200\u0026v=1773758930", 826 "inventoryManagement": "shopify", 827 "inventoryPolicy": "continue", 828 "inventoryQuantity": -7, 829 "unitPriceMeasurement": null, 830 "sellingPlans": [ 831 832 ] 833 } 834 835 ], 836 "requiresSellingPlan": false, 837 "sellingPlans": [ 838 839 ], 840 "isNativeBundle": null, 841 "metafields": { 842 "text": null, 843 "text2": null, 844 "text3": null, 845 "text4": null 846 } 847 } 848 </script>
848 849 850<!-- END app snippet --> 851 852 <!-- BEGIN app snippet: deal_blocks --> 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871
871<script class="kaching-bundles-deal-block-settings" data-product-id="10882379907414" type="application/json"></script>
871 872 873 874 875 876<!-- END app snippet --> 877 878 879 880 881 882 883 884 885 <link rel="modulepreload" href="https://cdn.shopify.com/extensions/01a1008a-386d-7582-96f4-b3f382a090cd/kaching-bundles-2026/assets/kaching-bundles.js" crossorigin="anonymous" fetchpriority="high"> 886 887
887<script type="module" src="https://cdn.shopify.com/extensions/01a1008a-386d-7582-96f4-b3f382a090cd/kaching-bundles-2026/assets/loader.js" crossorigin="anonymous" fetchpriority="high"></script>
887 888 <link rel="stylesheet" href="https://cdn.shopify.com/extensions/01a1008a-386d-7582-96f4-b3f382a090cd/kaching-bundles-2026/assets/kaching-bundles.css" media="print" onload="this.media='all'" fetchpriority="high"> 889 890 <style> 891 .kaching-bundles__block { 892 display: none; 893 } 894 895 .kaching-bundles-sticky-atc { 896 display: none; 897 } 898 </style> 899 900 901 902<!-- END app snippet --> 903 904<!-- Kaching Bundles App Embed V2 End --> 905 906 907<!-- END app block --><!-- BEGIN app block: shopify://apps/gift-box/blocks/head/f53ea332-e066-453a-9116-800349284dfb -->
907<script> 908const isProductPage = window.location.pathname.includes("/products/"); 909 910// Allow redirect only on product pages. 911if (isProductPage) { 912 const GHOST_PRODUCT_TYPE = "giftbox_ghost_product"; 913 // Use product handle to check the type of the product. 914 const product_type = ""; 915 if (product_type == GHOST_PRODUCT_TYPE) { 916 // Redirect to the GP parent URL stored in the GP's metafields. 917 const parent_product_url = ''; 918 if (parent_product_url === null || parent_product_url === '') { 919 window.location.replace("/"); 920 } else { 921 window.location.replace(parent_product_url); 922 } 923 } 924} 925</script>
925 926
927<script 928 src="https://giftbox.ds-cdn.com/static/main.js?shop=joy-planet-finland.myshopify.com" 929 930 async 931 932></script>
932 933 934 935<!-- END app block --><!-- BEGIN app block: shopify://apps/zoorix-sticky-atc/blocks/zoorix-head/16cf6adc-8b22-4e73-be2b-b93c1acde1da -->
935<script> 936 window.zoorix_sticky_atc_template = "product.tinys-paasivu"; 937 window.zoorix_sticky_atc_money_format = "{{amount_with_comma_separator}} â¬"; 938 window.zoorix_sticky_atc_money_format_with_currency = "â¬{{amount_with_comma_separator}} EUR"; 939 window.zoorix_shop_name = "joy-planet-finland.myshopify.com"; 940 941 942 943 window.zoorix_sticky_atc_config = null; 944 945 946 window.zoorix_sticky_collection_handle = null; 947 948 949 950 window.zoorix_sticky_page_handle = null; 951 952 953 954 window.zoorix_sticky_blog_handle = null; 955 956 957 958 window.zoorix_sticky_article_handle = null; 959 960</script>
960 961 962 963 964 965 966 967 968 969 970 971 972 973
973<script> 974 window.zoorix_sticky_atc_product_load_handle = "tinys-earbuds-desinged-for-women-joy-friends-club"; 975 </script>
975 976 977 978 979
980<script> 981 var zrxLoadStickyAtc = false; 982 var zrxLoadQuickAtc = false; 983 984 if (window.zoorix_sticky_atc_config) { 985 // there is a config in the metafield. Load accordingly 986 if (window.zoorix_sticky_atc_config.enabled) { 987 zrxLoadStickyAtc = true; 988 if ( 989 window.zoorix_sticky_atc_config.quickAddToCart && 990 (window.zoorix_sticky_atc_template === 'index' || 991 window.zoorix_sticky_collection_handle || 992 window.zoorix_sticky_atc_template.includes('product')) 993 ) { 994 zrxLoadQuickAtc = true; 995 } 996 } 997 } else { 998 // there is mo metafield, load the old way 999 var script = document.createElement('script'); 1000 script.src = 'https://public.zoorix.com/sticky-atc/domains/' + window.zoorix_shop_name + '/sticky-atc-core.js'; 1001 script.async = true; 1002 document.head.appendChild(script); 1003 } 1004 1005 if (zrxLoadQuickAtc || zrxLoadStickyAtc) { 1006 window.zoorixFrontendUtils = window.zoorixFrontendUtils || []; 1007 var widget_dev = window.zoorix_sticky_atc_config.widget_dev; 1008 // Points at satc-storefront's Worker + R2-backed /dev/<n>/ route now 1009 // (see satc-storefront/plans/REPO_CONSOLIDATION.md, "Cloudflare for 1010 // dev") instead of the old AWS S3/CloudFront path. widget_dev itself 1011 // is unchanged â still the same per-shop integer set on the Settings 1012 // page. Every prod URL below (fe-utils.zoorix-satc.com, 1013 // satc-display-cloudflare.zoorix.com, 1014 // quick-atc-widget-cloudflare.zoorix.com, and the sticky-atc-core.js 1015 // no-metafield fallback above) is untouched â this only changes what 1016 // shops with widget_dev already set resolve to. 1017 var widget_dev_path = 'https://storefront.zoorix-satc.com/dev/' + widget_dev; 1018 // Opened to every shop. Was staged early access 1019 // (/^zrx-fe-.+\.myshopify\.com$/.test(window.zoorix_shop_name)) â kept 1020 // as `true` rather than removed so a rollback is a one-line revert of 1021 // this file, not a Cloudflare domain change: the old infra 1022 // (fe-utils.zoorix-satc.com, satc-display-cloudflare.zoorix.com, 1023 // quick-atc-widget-cloudflare.zoorix.com) is intentionally still live 1024 // and untouched, just unused, as a fallback. 1025 var isEarlyAccessShop = true; 1026 1027 document.addEventListener('zrxRequestLoadJsCss', function() { 1028 document.removeEventListener('zrxRequestLoadJsCss', arguments.callee); 1029 if (window.zoorix_sticky_atc_config.custom_css) { 1030 const styleTag = document.createElement('style'); 1031 styleTag.type = 'text/css';
1032 const cssChild = document.createTextNode(window.zoorix_sticky_atc_config.custom_css); 1033 styleTag.appendChild(cssChild); 1034 document.head.appendChild(styleTag); 1035 } 1036 1037 if (window.zoorix_sticky_atc_config.custom_js) { 1038 const scriptTag = document.createElement('script'); 1039 scriptTag.setAttribute('type', 'text/javascript'); 1040 const scriptChild = document.createTextNode(window.zoorix_sticky_atc_config.custom_js); 1041 scriptTag.appendChild(scriptChild); 1042 document.head.appendChild(scriptTag); 1043 } 1044 }); 1045 1046 if (zrxLoadQuickAtc) { 1047 var script = document.createElement('script'); 1048 script.src = widget_dev 1049 ? widget_dev_path + '/core-utils.js' 1050 : (isEarlyAccessShop ? 'https://storefront.zoorix-satc.com/core-utils.js' : 'https://fe-utils.zoorix-satc.com/core-utils.js'); 1051 script.async = true; 1052 script.setAttribute('type', 'module'); 1053 document.head.appendChild(script); 1054 1055 var script = document.createElement('script'); 1056 script.src = widget_dev 1057 ? widget_dev_path + '/quick-add.js' 1058 : (isEarlyAccessShop ? 'https://storefront.zoorix-satc.com/quick-add.js' : 'https://quick-atc-widget-cloudflare.zoorix.com/quick-add.js'); 1059 script.async = true; 1060 script.setAttribute('type', 'module'); 1061 document.head.appendChild(script); 1062 } 1063 1064 if (zrxLoadStickyAtc) { 1065 var script = document.createElement('script'); 1066 script.src = widget_dev 1067 ? widget_dev_path + '/core-bar.js' 1068 : (isEarlyAccessShop ? 'https://storefront.zoorix-satc.com/core-bar.js' : 'https://satc-display-cloudflare.zoorix.com/core-bar.js'); 1069 script.async = true; 1070 script.setAttribute('type', 'module'); 1071 document.head.appendChild(script); 1072 } 1073 } 1074</script>
1074 1075 1076 1077<!-- END app block --><!-- BEGIN app block: shopify://apps/weglot-translate-your-store/blocks/weglot/3097482a-fafe-42ff-bc33-ea19e35c4a20 --> 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089<!--Start Weglot Script-->
1090<script src="https://cdn.weglot.com/weglot.min.js?api_key=" async></script>
1090 1091<!--End Weglot Script--> 1092 1093<!-- END app block --><!-- BEGIN app block: shopify://apps/kaching-bundles/blocks/app-embed-block/6c637362-a106-4a32-94ac-94dcfd68cdb8 --> 1094<!-- Kaching Bundles App Embed --> 1095 1096<!-- BEGIN app snippet: app-embed-content --> 1097 1098 1099 1100 1101 1102 1103 1104
1105<script> 1106 // Prevent duplicate initialization if both app embeds are enabled 1107 if (window.kachingBundlesAppEmbedLoaded) { 1108 console.warn('[Kaching Bundles] Multiple app embed blocks detected. Please disable one of them. Skipping duplicate initialization.'); 1109 } else { 1110 window.kachingBundlesAppEmbedLoaded = true; 1111 window.kachingBundlesEnabled = true; 1112 window.kachingBundlesInitialized = false; 1113 1114 // Allow calling kachingBundlesInitialize before the script is loaded 1115 (() => { 1116 let shouldInitialize = false; 1117 let realInitialize = null; 1118 1119 window.kachingBundlesInitialize = () => { 1120 if (realInitialize) { 1121 realInitialize(); 1122 } else { 1123 shouldInitialize = true; 1124 } 1125 }; 1126 1127 Object.defineProperty(window, '__kachingBundlesInitializeInternal', { 1128 set(fn) { 1129 realInitialize = fn; 1130 if (shouldInitialize) { 1131 shouldInitialize = false; 1132 fn(); 1133 } 1134 }, 1135 get() { 1136 return realInitialize; 1137 } 1138 }); 1139 })(); 1140 } 1141</script>
1141 1142 1143 1144
1145<script id="kaching-bundles-config" type="application/json"> 1146 { 1147 "shopifyDomain": "joy-planet-finland.myshopify.com", 1148 "moneyFormat": "{{amount_with_comma_separator}} â¬", 1149 "locale": "en", 1150 "liquidLocale": "en", 1151 "country": "US", 1152 "currencyRate": 1, 1153 "marketCurrencyCode": "EUR", 1154 "marketId": 10944577770, 1155 "productId": 10882379907414, 1156 "storefrontAccessToken": "f6905fb95d3c93ead34c8e3df741713a", 1157 "includeSellingPlans": true, 1158 "includeAvailableQuantity": true, 1159 "customApiHost": null, 1160 "keepQuantityInput": false, 1161 "ignoreDeselect": false, 1162 "ignoreUnitPrice": false, 1163 "requireCustomerLogin": false, 1164 "abTestsRunning": false, 1165 "webPixel": true, 1166 "b2bCustomer": false, 1167 "isLoggedIn": false, 1168 "isDeprecatedAppEmbed": false, 1169 "preview": false, 1170 "defaultTranslations": { 1171 "system.out_of_stock": "There\u0026#39;s not enough items in our stock, please select smaller bundle.", 1172 "system.invalid_variant": "Sorry, this is not currently available.", 1173 "system.unavailable_option_value": "Unavailable", 1174 "system.confirm": "Confirm", 1175 "system.cancel": "Cancel", 1176 "system.free": "FREE", 1177 "system.search": "Search", 1178 "system.sort_by": "Sort by", 1179 "system.sort_relevance": "Relevance", 1180 "system.sort_newest_first": "Newest first", 1181 "system.sort_price_low_to_high": "Price: Low â High", 1182 "system.sort_price_high_to_low": "Price: High â Low", 1183 "system.no_results_found": "No results found", 1184 "system.no_results_description": "We canât find any item matching your search.", 1185 "system.clear_search": "Clear search", 1186 "system.no_products_available": "No products available", 1187 "system.letters_only": "Only letters are allowed.", 1188 "system.numbers_only": "Only numbers are allowed.", 1189 "system.select_variant_alert": "Please select a variant.", 1190 "system.select_variant_placeholder": "Select", 1191 "system.personalisation_required_alert": "Please add personalisation for every item to continue.", 1192 "system.quantity": "Quantity", 1193 "system.subscription_plan": "Subscription plan", 1194 "system.remove": "Remove", 1195 "system.original_price": "Original price:", 1196 "system.price": "Price:" 1197 }, 1198 "customSelectors": { 1199 "quantity": null, 1200 "addToCartButton": null, 1201 "variantPicker": null, 1202 "price": null, 1203 "priceCompare": null, 1204 "label": null 1205 }, 1206 "shopCustomStyles": "", 1207 "brandColors": {"error":"#D72C2C","border":"#12D8FA4D","overlay":"#000000","badgeText":"#000000","primaryText":"#000000","primaryAccent":"#12D8FA","secondaryText":"#555555","badgeBackgroun
1207d":"#12D8FA","primaryAccentText":"#000000","primaryBackground":"#FFFFFF","secondaryBackground":"#F0F0F0"}, 1208 "featureFlags": {"atc_total_price":false,"cart_change_response_rewrite":false,"cart_interceptor_dedupe_disabled":false,"cart_interceptor_json_encoding":false,"debug_cart_add":false,"disable_nested_cart_lines":false,"early_fetch_override":false,"hide_missing_variants":true,"initialize_with_form_variant":true,"intercept_cart_request":true,"legacy_saved_percentage":false,"native_swatches_disabled":false,"observe_external_selling_plan":false,"observe_form_selling_plan":true,"percentage_cents_rounding_workaround":false,"pos_extension":false,"preserve_variant_selections":false,"price_rounding_v2":true,"propagate_line_properties":false,"propagate_picker_option_changes":false,"reinitialize_morphed_placeholders":true,"remove_variant_change_delay":false,"rever_non_returnable":false,"split_bxgy_items":false,"storefront_metaobjects":false,"variant_images":true} 1209 1210 } 1211</script>
1211 1212 1213<!-- BEGIN app snippet: translations --> 1214 1215 1216 1217
1217<script id="kaching-bundles-translations" type="application/json"> 1218 [{"locale":"fi","translations":{"system":{"system.unavailable_option_value":"Ei saatavilla: Tilapäisesti loppuunmyyty."},"dealBlocks":{"2d788284-7a4e-4374-b330-28d37abbe9ea":{"SAVE 50,00 â¬":"Säästät 50,00 â¬","SAVE {{saved_total}}":"Kokonaisalennus {{saved_total}}"}}}}] 1219 </script>
1219 1220 1221 1222<!-- END app snippet --> 1223 1224 1225 1226 <!-- BEGIN app snippet: product --> 1227
1227<script class="kaching-bundles-product" data-product-id="10882379907414" data-main="true" type="application/json"> 1228 { 1229 "id": 10882379907414, 1230 "handle": "tinys-earbuds-desinged-for-women-joy-friends-club", 1231 "url": "\/products\/tinys-earbuds-desinged-for-women-joy-friends-club", 1232 "availableForSale": true, 1233 "title": "TinyS", 1234 "image": "\/\/joyearbuds.com\/cdn\/shop\/files\/ChatGPT_Image_May_28_2026_5.png?height=200\u0026v=1779964205", 1235 "collectionIds": [639365841238,660933574998,707928949078,702182555990,707229352278,617235186006,668751593814], 1236 "options": [ 1237 1238 { 1239 "defaultName": "Color", 1240 "name": "Color", 1241 "position": 1, 1242 "optionValues": [ 1243 1244 { 1245 "id": 11274523574614, 1246 "defaultName": "Black", 1247 "name": "Black", 1248 "swatch": { 1249 "color": null, 1250 "image": null 1251 } 1252 }, 1253 1254 { 1255 "id": 11274524557654, 1256 "defaultName": "Pink", 1257 "name": "Pink", 1258 "swatch": { 1259 "color": null, 1260 "image": null 1261 } 1262 }, 1263 1264 { 1265 "id": 11274526097750, 1266 "defaultName": "Gold", 1267 "name": "Gold", 1268 "swatch": { 1269 "color": null, 1270 "image": null 1271 } 1272 } 1273 1274 ] 1275 } 1276 1277 ], 1278 "selectedVariantId": 54276348870998, 1279 "variants": [ 1280 1281 { 1282 "id": 54276348870998, 1283 "availableForSale": true, 1284 "price": 15900, 1285 "compareAtPrice": null, 1286 "options": ["Black"], 1287 "imageId": 72008685551958, 1288 "image": "\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?height=200\u0026v=1776769855", 1289 "inventoryManagement": "shopify", 1290 "inventoryPolicy": "continue", 1291 "inventoryQuantity": -6, 1292 "unitPriceMeasurement": null, 1293 "sellingPlans": [ 1294 1295 ] 1296 }, 1297 1298 { 1299 "id": 54276348936534, 1300 "availableForSale": true, 1301 "price": 15900, 1302 "compareAtPrice": null, 1303 "options": ["Pink"], 1304 "imageId": 72008741683542, 1305 "image": "\/\/joyearbuds.com\/cdn\/shop\/files\/pink_buds_transparent_1_1.png?height=200\u0026v=1776769855", 1306 "inventoryManagement": "shopify", 1307 "inventoryPolicy": "continue", 1308 "inventoryQuantity": -18, 1309 "unitPriceMeasurement": null, 1310 "sellingPlans": [ 1311 1312 ] 1313 }, 1314 1315 { 1316 "id": 55061249950038, 1317 "availableForSale": true, 1318 "price": 15900, 1319 "compareAtPrice": null, 1320 "options": ["Gold"], 1321 "imageId": 72936309490006, 1322 "image": "\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_28.png?height=200\u0026v=1773758930", 1323 "inventoryManagement": "shopify", 1324 "inventoryPolicy": "continue", 1325 "inventoryQuantity": -7, 1326 "unitPriceMeasurement": null, 1327 "sellingPlans": [ 1328 1329 ] 1330 } 1331 1332 ], 1333 "requiresSellingPlan": false, 1334 "sellingPlans": [ 1335 1336 ], 1337 "isNativeBundle": null, 1338 "metafields": { 1339 "text": null, 1340 "text2": null, 1341 "text3": null, 1342 "text4": null 1343 } 1344 } 1345 </script>
1345 1346 1347<!-- END app snippet --> 1348 1349 <!-- BEGIN app snippet: deal_blocks --> 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368
1368<script class="kaching-bundles-deal-block-settings" data-product-id="10882379907414" type="application/json"></script>
1368 1369 1370 1371 1372 1373<!-- END app snippet --> 1374 1375 1376 1377 1378 1379 1380 1381 1382 <link rel="modulepreload" href="https://cdn.shopify.com/extensions/01a1008a-386d-7582-96f4-b3f382a090cd/kaching-bundles-2026/assets/kaching-bundles.js" crossorigin="anonymous" fetchpriority="high"> 1383 1384
1384<script type="module" src="https://cdn.shopify.com/extensions/01a1008a-386d-7582-96f4-b3f382a090cd/kaching-bundles-2026/assets/loader.js" crossorigin="anonymous" fetchpriority="high"></script>
1384 1385 <link rel="stylesheet" href="https://cdn.shopify.com/extensions/01a1008a-386d-7582-96f4-b3f382a090cd/kaching-bundles-2026/assets/kaching-bundles.css" media="print" onload="this.media='all'" fetchpriority="high"> 1386 1387 <style> 1388 .kaching-bundles__block { 1389 display: none; 1390 } 1391 1392 .kaching-bundles-sticky-atc { 1393 display: none; 1394 } 1395 </style> 1396 1397 1398 1399<!-- END app snippet --> 1400 1401<!-- Kaching Bundles App Embed End --> 1402 1403 1404<!-- END app block --><!-- BEGIN app block: shopify://apps/image-translate-easy/blocks/image-swapper/019b1a70-a299-727e-9cf1-0670c9110ad1 --> 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442
1443<script> 1444document.querySelectorAll('img').forEach(function(img) { img.classList.add('it-ready'); }); 1445</script>
1445 1446 1447 1448 1449 1450<!-- END app block --><!-- BEGIN app block: shopify://apps/microsoft-clarity/blocks/clarity_js/31c3d126-8116-4b4a-8ba1-baeda7c4aeea -->
1451<script type="text/javascript"> 1452 (function (c, l, a, r, i, t, y) { 1453 c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments); }; 1454 t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i + "?ref=shopify"; 1455 y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y); 1456 1457 c.Shopify.loadFeatures([{ name: "consent-tracking-api", version: "0.1" }], error => { 1458 if (error) { 1459 console.error("Error loading Shopify features:", error); 1460 return; 1461 } 1462 1463 c[a]('consentv2', { 1464 ad_Storage: c.Shopify.customerPrivacy.marketingAllowed() ? "granted" : "denied", 1465 analytics_Storage: c.Shopify.customerPrivacy.analyticsProcessingAllowed() ? "granted" : "denied", 1466 source: 101, 1467 }); 1468 }); 1469 1470 l.addEventListener("visitorConsentCollected", function (e) { 1471 c[a]('consentv2', { 1472 ad_Storage: e.detail.marketingAllowed ? "granted" : "denied", 1473 analytics_Storage: e.detail.analyticsAllowed ? "granted" : "denied", 1474 source: 101, 1475 }); 1476 }); 1477 })(window, document, "clarity", "script", "wip0bsx81c"); 1478</script>
1478 1479 1480 1481 1482<!-- END app block --><!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 --> 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495
1495<script async src="https://static.klaviyo.com/onsite/js/Ru4nY2/klaviyo.js?company_id=Ru4nY2"></script>
1495 1496
1496<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>
1496 1497 1498 1499
1499<script id="viewed_product"> 1500 if (item == null) { 1501 var _learnq = _learnq || []; 1502 1503 var MetafieldReviews = null 1504 var MetafieldYotpoRating = null 1505 var MetafieldYotpoCount = null 1506 var MetafieldLooxRating = null 1507 var MetafieldLooxCount = null 1508 var okendoProduct = null 1509 var okendoProductReviewCount = null 1510 var okendoProductReviewAverageValue = null 1511 try { 1512 // The following fields are used for Customer Hub recently viewed in order to add reviews. 1513 // This information is not part of __kla_viewed. Instead, it is part of __kla_viewed_reviewed_items 1514 MetafieldReviews = {"rating":{"scale_min":"1.0","scale_max":"5.0","value":"4.7"},"rating_count":481}; 1515 MetafieldYotpoRating = null 1516 MetafieldYotpoCount = null 1517 MetafieldLooxRating = "4.7" 1518 MetafieldLooxCount = 481 1519 1520 okendoProduct = null 1521 // If the okendo metafield is not legacy, it will error, which then requires the new json formatted data 1522 if (okendoProduct && 'error' in okendoProduct) { 1523 okendoProduct = null 1524 } 1525 okendoProductReviewCount = okendoProduct ? okendoProduct.reviewCount : null 1526 okendoProductReviewAverageValue = okendoProduct ? okendoProduct.reviewAverageValue : null 1527 } catch (error) { 1528 console.error('Error in Klaviyo onsite reviews tracking:', error); 1529 } 1530 1531 var item = { 1532 Name: "TinyS", 1533 ProductID: 10882379907414, 1534 Categories: ["All products excluding Varaosat","Gift-card ENABLED","JOY4v alet","Loox alet","Main products","No-Discounts","XMAS 2025 META"], 1535 ImageURL: "https://joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5_grande.png?v=1779964205", 1536 URL: "https://joyearbuds.com/products/tinys-earbuds-desinged-for-women-joy-friends-club", 1537 Brand: "Joy Planet Finland", 1538 Price: "159,00 â¬", 1539 Value: "159,00", 1540 CompareAtPrice: "0,00 â¬" 1541 }; 1542 _learnq.push(['track', 'Viewed Product', item]); 1543 _learnq.push(['trackViewedItem', { 1544 Title: item.Name, 1545 ItemId: item.ProductID, 1546 Categories: item.Categories, 1547 ImageUrl: item.ImageURL, 1548 Url: item.URL, 1549 Metadata: { 1550 Brand: item.Brand, 1551 Price: item.Price, 1552 Value: item.Value, 1553 CompareAtPrice: item.CompareAtPrice 1554 }, 1555 metafields:{ 1556 reviews: MetafieldReviews, 1557 yotpo:{ 1558 rating: MetafieldYotpoRating, 1559 count: MetafieldYotpoCount, 1560 }, 1561 loox:{ 1562 rating: MetafieldLooxRating, 1563 count: MetafieldLooxCount, 1564 }, 1565 okendo: { 1566 rating: okendoProductReviewAverageValue, 1567 count: okendoProductReviewCount, 1568 } 1569 } 1570 }]); 1571 } 1572 </script>
1572 1573 1574 1575 1576 1577 1578
1578<script> 1579 window.klaviyoReviewsProductDesignMode = false 1580 </script>
1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590<!-- END app block --><!-- BEGIN app block: shopify://apps/gorgias-live-chat-helpdesk/blocks/gorgias/a66db725-7b96-4e3f-916e-6c8e6f87aaaa -->
1591<script defer data-gorgias-loader-chat src="https://config.gorgias.chat/bundle-loader/shopify/joy-planet-finland.myshopify.com"></script>
1591 1592 1593
1594<script defer data-gorgias-loader-convert src="https://content.9gtb.com/loader.js"></script>
1594 1595 1596
1597<script defer data-gorgias-loader-mailto-replace src="https://config.gorgias.help/api/contact-forms/replace-mailto-script.js?shopName=joy-planet-finland"></script>
1597 1598 1599 1600<!-- END app block -->
1600<script src="https://cdn.shopify.com/extensions/01a0f7c3-dc79-7a84-bbec-a0894fd9ef1e/discounty-3.4.5/assets/sdk.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1600
1600
1601<script src="https://cdn.shopify.com/extensions/019feb7b-2b89-71ba-a248-f1c8ef9b3368/stape-remix-56/assets/widget.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1601
1601
1602<script src="https://cdn.shopify.com/extensions/01a0fcf5-9827-75b1-9d7e-ea3a10d70819/gdpr-backpack-903/assets/consentmo_cookie_consent.js" type="text/javascript" defer="defer"></script>
1602 1603<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
1604<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: 65680310506,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "product"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 1604
1604
1605<script> 1606 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 1607</script>
vendor: 1 bytes, line 1607
1607
1608<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}
1608).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: 65680310506,storefrontBaseUrl: "https://joyearbuds.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://joyearbuds.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"5586682198","configuration":"{\"myshopifyDomain\":\"joy-planet-finland.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"23b97d18e2aa74363140dc29c9284e87","type":"APP","apiClientId":2775569,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_phone","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"5579833686","configuration":"{\"pixel_id\":\"176786487088598\",\"pixel_type\":\"facebook_pixel\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"5090017622","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-QRKGD2WTE9\\\",\\\"GT-KFT5S977\\\",\\\"G-MHQB6278VB\\\"],\\\"target_country\\\":\\\"FI\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":\\\"G-MHQB6278VB\\\"},{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"AW-11093337982\\\/azL9CIjE1b0cEP7O26kp\\\",\\\"AW-11093337982\\\/URAaCICmyu8bEP7O26kp\\\",\\\"G-MHQB6278VB\\\"]},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"MC-HKNCPDNC2Z\\\",\\\"G-MHQB6278VB\\\"]},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"AW-11093337982\\\/P_LNCOe91b0cEP7O26kp\\\",\\\"MC-HKNCPDNC2Z\\\",\\\"AW-11093337982\\\/E3FgCJn9ye8bEP7O26kp\\\",\\\"G-MHQB6278VB\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"MC-HKNCPDNC2Z\\\",\\\"G-MHQB6278VB\\\"]},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"AW-11093337982\\\/vtXuCIvE1b0cEP7O26kp\\\",\\\"G-MHQB6278VB\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"AW-11093337982\\\/OmaFCPrcu-8bEP7O26kp\\\",\\\"G-MHQB6278VB\\\"]}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"4759552342","configuration":"{\"projectId\":\"wip0bsx81c\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"d8a2bb2ccbb513dc8e8b6937f4b8033e","type":"APP","apiClientId":240074326017,"privacyPurposes":[],"capabilities":["advanced_dom_events"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]}
1608,"dataSharingState":"unrestricted"},{"id":"4671996246","configuration":"{\"shopifyDomain\":\"joy-planet-finland.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"14b26290829f755f27eefbf196eb8024","type":"APP","apiClientId":2935586817,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"4110156118","configuration":"{\"accountID\":\"65680310506\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"9cf281f576a3744d05c8685f9f7f3f72","type":"APP","apiClientId":10250649601,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"3911614806","configuration":"{\"accountID\":\"wp_2430576\", \"storeID\":\"65680310506\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"709656c015f722c724bbecad2c42bc3e","type":"APP","apiClientId":6762325,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"3807183190","configuration":"{\"accountID\":\"Ru4nY2\",\"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":"optimized","enabledFlags":["9a3ed68a"]},{"id":"2734358870","configuration":"{\"pixelCode\":\"D2DL5SJC77U4VAMQSV6G\"}","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":[]},"dataSharingState":"optimized"},{"id":"1715110230","configuration":"{ \"alias\": \"JOY_PLANET_FINLAND\", \"apiKey\": \"ux4ung2maf2gh5lxklpkp.fc64n2iubntb63ae5o2db\" }","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"089c563d4539df58b1e71259ac47d388","type":"APP","apiClientId":6779637,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"564068694","configuration":"{\"shopDomain\":\"joy-planet-finland.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"1cc50c06a2fd060c142979e7a3df92db","type":"APP","apiClientId":2436932,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"297730390","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"3","type":"CUSTOM","privacyPurposes":[],"name":"DataLayer"},{"id":"342131030","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["SALE_OF_DATA"],"name":"stape events"},{"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":"Joy Planet Finland","paymentSettings":{"currencyCode":"EUR"},"myshopifyDomain":"joy-planet-finland.myshopify.com","countryCode":"FI","storefrontUrl":"https:\/\/joyearbuds.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[{"price":{"amount":159.0,"currencyCode":"EUR"},"product":{"title":"TinyS","vendor":"Joy Planet Finland","id":"10882379907414","untranslatedTitle":"TinyS","url":"\/products\/tinys-earbuds-desinged-for-women-joy-friends-club","type":""},"id":"54276348870998","image":{"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855"},"sku":"H-PRM-N-BL-TinyS","title":"Black","untranslatedTitle":"Black"},{"price":{"amount":159.0,"currencyCode":"EUR"},"product":{"title":"TinyS","vendor":"Joy Planet Finland","id":"10882379907414","untranslatedTitle":"TinyS","url":"\/products\/tinys-earbuds-desinged-for-women-joy-friends-club","type":""},"id":"54276348936534","image":{"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/pink_buds_transparent_1_1.png?v=1776769855"},"sku":"H-PRM-N-PI-TinyS","title":"Pink","untranslatedTitle":"Pink"},{"price":{"amount":159.0,"currencyCode":"EUR"},"product":{"title":"TinyS","vendor":"Joy Planet Finland","id":"10882379907414","untranslatedTitle":"TinyS","url":"\/products\/tinys-earbuds-desinged-for-women-joy-friends-club","type":""},"id":"55061249950038","image":{"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_28.png?v=1773758930"},"sku":null,"title":"Gold","untranslatedTitle":"Gold"}
1608],"products":[{"id":"10882379907414","handle":"tinys-earbuds-desinged-for-women-joy-friends-club","isCollective":null,"title":"TinyS","type":null,"untranslatedTitle":"TinyS","url":"\/products\/tinys-earbuds-desinged-for-women-joy-friends-club","vendor":"Joy Planet Finland","remoteShopId":null,"variants":[{"id":"54276348870998","image":{"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855"},"price":{"amount":159.0,"currencyCode":"EUR"},"sku":"H-PRM-N-BL-TinyS","title":"Black","untranslatedTitle":"Black"},{"id":"54276348936534","image":{"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/pink_buds_transparent_1_1.png?v=1776769855"},"price":{"amount":159.0,"currencyCode":"EUR"},"sku":"H-PRM-N-PI-TinyS","title":"Pink","untranslatedTitle":"Pink"},{"id":"55061249950038","image":{"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_28.png?v=1773758930"},"price":{"amount":159.0,"currencyCode":"EUR"},"sku":null,"title":"Gold","untranslatedTitle":"Gold"}]},{"id":"8033926512874","handle":"tinys®","isCollective":null,"title":"TinyS®","type":"GIFT_CARD_ENABLED","untranslatedTitle":"TinyS®","url":"\/products\/tinys%C2%AE","vendor":"Joy Planet Finland","remoteShopId":null,"variants":[{"id":"43801205014762","image":{"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/pink_3f59b54d-59e0-4972-bef4-45616984d816.png?v=1776769855"},"price":{"amount":159.0,"currencyCode":"EUR"},"sku":"H-PRM-N-PI-TinyS","title":"Pink","untranslatedTitle":"Pink"}]},{"id":"10259673448790","handle":"tinys®-earbudsforwomen","isCollective":null,"title":"JOY TinyS","type":null,"untranslatedTitle":"JOY TinyS","url":"\/products\/tinys%C2%AE-earbudsforwomen","vendor":"Joy Planet Finland","remoteShopId":null,"variants":[{"id":"52813102088534","image":{"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/pink_buds_transparent_1_1.png?v=1776769855"},"price":{"amount":109.0,"currencyCode":"EUR"},"sku":"H-PRM-N-PI-TinyS","title":"Pink","untranslatedTitle":"Pink"}]},{"id":"9486202765654","handle":"c2c-kangaskaapeli","isCollective":null,"title":"C2C fast fabric cable","type":"Varaosat","untranslatedTitle":"C2C fast fabric cable","url":"\/products\/c2c-kangaskaapeli","vendor":"Joy Planet Finland","remoteShopId":null,"variants":[{"id":"49936931684694","image":{"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/ctoc.png?v=1758873157"},"price":{"amount":17.9,"currencyCode":"EUR"},"sku":"X-GEN-N-BL-CTOC","title":"Default Title","untranslatedTitle":"Default Title"}]}],"purchasingCompany":null},},"https://joyearbuds.com/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"162073870678","themeStoreId":"847","themePublished":"true","eventMetadataId":"4b9302f3-9c45-44fa-b85b-fcc52e9724f8","pageType":"product","resourceId":"10882379907414","shopId":"65680310506","storefrontBaseUrl":"https:\/\/joyearbuds.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}],[\"product_viewed\",{\"productVariant\":{\"price\":{\"amount\":159.0,\"currencyCode\":\"EUR\"},\"product\":{\"title\":\"TinyS\",\"vendor\":\"Joy Planet Finland\",\"id\":\"10882379907414\",\"untranslatedTitle\":\"TinyS\",\"url\":\"\/products\/tinys-earbuds-desinged-for-women-joy-friends-club\",\"type\":\"\"},\"id\":\"54276348870998\",\"image\":{\"src\":\"\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855\"},\"sku\":\"H-PRM-N-BL-TinyS\",\"title\":\"Black\",\"untranslatedTitle\":\"Black\"}}]]"});})();</script>
1608<script> 1609 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 1610 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 1611 window.ShopifyAnalytics.meta.currency = 'EUR'; 1612 var meta = {"product":{"id":10882379907414,"gid":"gid:\/\/shopify\/Product\/10882379907414","vendor":"Joy Planet Finland","type":"","handle":"tinys-earbuds-desinged-for-women-joy-friends-club","variants":[{"id":54276348870998,"price":15900,"name":"TinyS - Black","public_title":"Black","sku":"H-PRM-N-BL-TinyS"},{"id":54276348936534,"price":15900,"name":"TinyS - Pink","public_title":"Pink","sku":"H-PRM-N-PI-TinyS"},{"id":55061249950038,"price":15900,"name":"TinyS - Gold","public_title":"Gold","sku":null}],"remote":false},"page":{"pageType":"product","resourceType":"product","resourceId":10882379907414,"requestId":"910fffe3-095c-4fca-84bc-c5f7a384d934-1791140730"}}; 1613 for (var attr in meta) { 1614 window.ShopifyAnalytics.meta[attr] = meta[attr]; 1615 } 1616</script>
vendor: 1 bytes, line 1616
1616
1617<script class="analytics"> 1618 (function () { 1619 var customDocumentWrite = function(content) { 1620 var jquery = null; 1621 1622 if (window.jQuery) { 1623 jquery = window.jQuery; 1624 } else if (window.Checkout && window.Checkout.$) { 1625 jquery = window.Checkout.$; 1626 } 1627 1628 if (jquery) { 1629 jquery('body').append(content); 1630 } 1631 }; 1632 1633 var hasLoggedConversion = function(token) { 1634 if (token) { 1635 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 1636 } 1637 return false; 1638 } 1639 1640 var setCookieIfConversion = function(token) { 1641 if (token) { 1642 var twoMonthsFromNow = new Date(Date.now()); 1643 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 1644 1645 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 1646 } 1647 } 1648 1649 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 1650 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 1651 if (trekkie.integrations) { 1652 return; 1653 } 1654 trekkie.methods = [ 1655 'identify', 1656 'page', 1657 'ready', 1658 'track', 1659 'trackForm', 1660 'trackLink' 1661 ]; 1662 trekkie.factory = function(method) { 1663 return function() { 1664 var args = Array.prototype.slice.call(arguments); 1665 args.unshift(method); 1666 trekkie.push(args); 1667 if (method == 'track' || method == 'page') { 1668 var pageUrl; 1669 try { 1670 pageUrl = window.location.href; 1671 } catch (e) {} 1672 var pageReferrer; 1673 try { 1674 pageReferrer = document.referrer; 1675 } catch (e) {} 1676 try { 1677 if (window.__TREKKIE_SHIM_QUEUE == null) { 1678 window.__TREKKIE_SHIM_QUEUE = []; 1679 } 1680 window.__TREKKIE_SHIM_QUEUE.push({ 1681 from: 'trekkie-stub', 1682 method: method, 1683 args: args.slice(1), 1684 pageContext: { 1685 url: pageUrl, 1686 referrer: pageReferrer 1687 } 1688 }); 1689 } catch (e) { 1690 // no-op 1691 } 1692 } 1693 return trekkie; 1694 }; 1695 }; 1696 for (var i = 0; i < trekkie.methods.length; i++) { 1697 var key = trekkie.methods[i]; 1698 trekkie[key] = trekkie.factory(key); 1699 } 1700 trekkie.load = function(config) { 1701 trekkie.config = config || {}; 1702 trekkie.config.initialDocumentCookie = document.cookie; 1703 var first = document.getElementsByTagName('script')[0]; 1704var script = document.createElement('script'); 1705script.type = 'text/javascript'; 1706script.onerror = function(e) { 1707 var scriptFallback = document.createElement('script'); 1708 scriptFallback.type = 'text/javascript'; 1709 scriptFallback.onerror = function(error) { 1710 var Monorail = { 1711 produce: function produce(monorailDomain, schemaId, payload) { 1712 var currentMs = new Date().getTime(); 1713 var event = { 1714 schema_id: schemaId, 1715 payload: payload, 1716 metadata: { 1717 event_created_at_ms: currentMs, 1718 event_sent_at_ms: currentMs 1719 } 1720 }; 1721 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 1722 }, 1723 sendRequest: function sendRequest(endpointUrl, payload) { 1724 // Try the sendBeacon API 1725 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 1726 var blobData = new window.Blob([payload], { 1727 type: 'text/plain' 1728 }); 1729 1730 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 1731 return true; 1732 } // sendBeacon was not successful 1733 1734 } // XHR beacon 1735 1736 var xhr = new XMLHttpRequest(); 1737 1738 try { 1739 xhr.open('POST', endpointUrl); 1740 xhr.setRequestHeader('Content-Type', 'text/plain'); 1741 xhr.send(payload); 1742 } catch (e) { 1743 console.log(e); 1744 } 1745 1746 return false; 1747 }, 1748 isIos12: function isIos12() { 1749 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 1750 } 1751 }; 1752 Monorail.produce('monorail-edge.shopifysvc.com', 1753 'trekkie_storefront_load_errors/1.1', 1754 {shop_id: 65680310506,
1755 theme_id: 162073870678, 1756 app_name: "storefront", 1757 context_url: window.location.href, 1758 source_url: "//joyearbuds.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 1759 1760 }; 1761 scriptFallback.async = true; 1762 scriptFallback.src = '//joyearbuds.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1763 first.parentNode.insertBefore(scriptFallback, first); 1764}; 1765script.async = true; 1766script.src = '//joyearbuds.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1767first.parentNode.insertBefore(script, first); 1768 1769 }; 1770 trekkie.load( 1771 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":65680310506,"isMerchantRequest":null,"themeId":162073870678,"themeCityHash":"9710838500565601613","contentLanguage":"en","currency":"EUR","eventMetadataId":"4b9302f3-9c45-44fa-b85b-fcc52e9724f8"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 1772 ); 1773 1774 var loaded = false; 1775 trekkie.ready(function() { 1776 if (loaded) return; 1777 loaded = true; 1778 1779 window.ShopifyAnalytics.lib = window.trekkie; 1780 1781 var originalDocumentWrite = document.write; 1782 document.write = customDocumentWrite; 1783 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 1784 document.write = originalDocumentWrite; 1785 1786 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 1787 var token = match? match[1]: undefined; 1788 if (!hasLoggedConversion(token)) { 1789 setCookieIfConversion(token); 1790 window.ShopifyAnalytics.lib.track("Viewed Product",{"currency":"EUR","variantId":54276348870998,"productId":10882379907414,"productGid":"gid:\/\/shopify\/Product\/10882379907414","name":"TinyS - Black","price":"159.00","sku":"H-PRM-N-BL-TinyS","brand":"Joy Planet Finland","variant":"Black","category":"","nonInteraction":true,"remote":false,"available":true},undefined,undefined,{"shopifyEmitted":true}); 1791 } 1792 }); 1793 1794 window.ShopifyAnalytics.lib.page(null,{"pageType":"product","resourceType":"product","resourceId":10882379907414,"requestId":"910fffe3-095c-4fca-84bc-c5f7a384d934-1791140730","shopifyEmitted":true}); 1795 1796 var eventsListenerScript = document.createElement('script'); 1797 eventsListenerScript.async = true; 1798 eventsListenerScript.src = "//joyearbuds.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 1799 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 1800})();</script>
vendor: 1 bytes, line 1800
1800
1801<script 1802 defer 1803 src="https://joyearbuds.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 1804 data-application="storefront-renderer" 1805 data-shop-id="65680310506" 1806 data-render-region="gcp-us-west1" 1807 data-page-type="product" 1808 data-theme-instance-id="162073870678" 1809 data-theme-name="Motion" 1810 data-theme-version="10.4.0" 1811 data-monorail-region="shop_domain" 1812 data-resource-timing-sampling-rate="10" 1813 data-shs="true" 1814 data-shs-beacon="true" 1815 data-shs-export-with-fetch="true" 1816 data-shs-logs-sample-rate="1" 1817 data-shs-beacon-endpoint="https://joyearbuds.com/api/collect" 1818></script>
1818 1819<meta name="shopify-y" content="fe8ad3cc-d992-4b10-82f5-71e44d910358" data-expiration="1822698330000"><meta name="shopify-s" content="4f85cbae-3d99-466a-992f-a376d634612c" data-expiration="1791142530000"><meta name="new-cookie-storage-activated" content="t"> 1820</head> 1821 1822<body class="tinys-paasivu template-product tinys-earbuds-desinged-for-women-joy-friends-club " data-transitions="true" data-type_header_capitalize="true" data-type_base_accent_transform="false" data-type_header_accent_transform="true" data-animate_sections="true" data-animate_underlines="true" data-animate_buttons="true" data-animate_images="true" data-animate_page_transition_style="page-fade-in-up" data-type_header_text_alignment="true" data-animate_images_style="fade-in"> 1823 1824 1825
1825<script type="text/javascript">window.setTimeout(function() { document.body.className += " loaded"; }, 25);</script>
1825 1826 1827 1828 <a class="in-page-link visually-hidden skip-link" href="#MainContent">Skip to content</a> 1829 1830 <div id="PageContainer" class="page-container"> 1831 <div class="transition-body"><!-- BEGIN sections: header-group --> 1832<div id="shopify-section-sections--21527965565270__header" class="shopify-section shopify-section-group-header-group"><div id="NavDrawer" class="drawer drawer--left"> 1833 <div class="drawer__contents"> 1834 <div class="drawer__fixed-header"> 1835 <div class="drawer__header appear-animation appear-delay-2"> 1836 <div class="drawer__title"></div> 1837 <div class="drawer__close"> 1838 <button type="button" class="drawer__close-button js-drawer-close"> 1839 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><title>icon-X</title><path d="m19 17.61 27.12 27.13m0-27.12L19 44.74"/></svg> 1840 <span class="icon__fallback-text">Close menu</span> 1841 </button> 1842 </div> 1843 </div> 1844 </div> 1845 <div class="drawer__scrollable"> 1846 <ul class="mobile-nav" role="navigation" aria-label="Primary"><li class="mobile-nav__item appear-animation appear-delay-3 products"><div class="mobile-nav__has-sublist products"><button type="button" class="mobile-nav__link--button collapsible-trigger collapsible--auto-height is-open " aria-controls="Linklist-1" aria-expanded="true" > 1847 <span class="mobile-nav__faux-link">Products</span> 1848 <div class="mobile-nav__toggle"> 1849 <span><span class="collapsible-trigger__icon collapsible-trigger__icon--open" role="presentation"> 1850 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 1851</span> 1852</span> 1853 </div> 1854 </button></div><div id="Linklist-1" class="mobile-nav__sublist collapsible-content collapsible-content--all is-open " style="height: 200px;" > 1855 <div class="collapsible-content__inner"> 1856 <ul class="mobile-nav__sublist"><li class="mobile-nav__item"> 1857 <div class="mobile-nav__child-item"><button type="button" class="mobile-nav__link--button mobile-nav__link--button-small collapsible-trigger" aria-controls="Sublinklist-1-1"> 1858 <span class="mobile-nav__faux-link">Headphones</span> 1859 <div class="mobile-nav__toggle"> 1860 <span><span class="collapsible-trigger__icon collapsible-trigger__icon--open collapsible-trigger__icon--circle" role="presentation"> 1861 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus" viewBox="0 0 20 20"><path fill="#444" d="M17.409 8.929h-6.695V2.258c0-.566-.506-1.029-1.071-1.029s-1.071.463-1.071 1.029v6.671H1.967C1.401 8.929.938 9.435.938 10s.463 1.071 1.029 1.071h6.605V17.7c0 .566.506 1.029 1.071 1.029s1.071-.463 1.071-1.029v-6.629h6.695c.566 0 1.029-.506 1.029-1.071s-.463-1.071-1.029-1.071z"/></svg> 1862 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-minus" viewBox="0 0 20 20"><path fill="#444" d="M17.543 11.029H2.1A1.032 1.032 0 0 1 1.071 10c0-.566.463-1.029 1.029-1.029h15.443c.566 0 1.029.463 1.029 1.029 0 .566-.463 1.029-1.029 1.029z"/></svg> 1863</span> 1864</span> 1865 </div> 1866 </button></div><div id="Sublinklist-1-1" class="mobile-nav__sublist collapsible-content collapsible-content--all" aria-labelledby="Sublabel-1"> 1867 <div class="collapsible-content__inner"> 1868 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item mobile-nav__item--active"> 1869 <a href="/products/tinys-earbuds-desinged-for-women-joy-friends-club" class="mobile-nav__link"> 1870 TinyS® 1871 </a> 1872 </li><li class="mobile-nav__item"> 1873 <a href="/products/tinys-pro-main" class="mobile-nav__link"> 1874 TinyS Pro 1875 </a> 1876 </li><li class="mobile-nav__item"> 1877 <a href="/products/joybuds" class="mobile-nav__link"> 1878 JoyBuds 1879 </a> 1880 </li><li class="mobile-nav__item"> 1881 <a href="/products/joytiny-wireless%C2%AE" class="mobile-nav__link"> 1882 Tiny® 1883 </a> 1884 </li><li class="mobile-nav__item"> 1885 <a href="/products/tinysport%C2%AE" class="mobile-nav__link"> 1886 SportBud® 1887 </a> 1888 </li><li class="mobile-nav__item"> 1889 <a href="https://fi.joyearbuds.com/products/joy-soundmate-3-over-ear-kuulokkeet-1" class="mobile-nav__link"> 1890 SoundMate 3 1891 </a> 1892 </li><li class="mobile-nav__item"> 1893 <a href="/products/koru-earbuds-2026" class="mobile-nav__link"> 1894 Koru 1895 </a> 1896 </li><li class="mobile-nav__item"> 1897 <a href="/collections/varaosat" class="mobile-nav__link"> 1898 Spare parts 1899 </a> 1900 </li></ul> 1901 </div> 1902 </div></li><li class="mobile-nav__item"> 1903 <div class="mobile-nav__child-item"><button type="button" class="mobile-nav__link--button mobile-nav__link--button-small collapsible-trigger" aria-controls="Sublinklist-1-2">
1904 <span class="mobile-nav__faux-link">Powerbanks</span> 1905 <div class="mobile-nav__toggle"> 1906 <span><span class="collapsible-trigger__icon collapsible-trigger__icon--open collapsible-trigger__icon--circle" role="presentation"> 1907 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus" viewBox="0 0 20 20"><path fill="#444" d="M17.409 8.929h-6.695V2.258c0-.566-.506-1.029-1.071-1.029s-1.071.463-1.071 1.029v6.671H1.967C1.401 8.929.938 9.435.938 10s.463 1.071 1.029 1.071h6.605V17.7c0 .566.506 1.029 1.071 1.029s1.071-.463 1.071-1.029v-6.629h6.695c.566 0 1.029-.506 1.029-1.071s-.463-1.071-1.029-1.071z"/></svg> 1908 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-minus" viewBox="0 0 20 20"><path fill="#444" d="M17.543 11.029H2.1A1.032 1.032 0 0 1 1.071 10c0-.566.463-1.029 1.029-1.029h15.443c.566 0 1.029.463 1.029 1.029 0 .566-.463 1.029-1.029 1.029z"/></svg> 1909</span> 1910</span> 1911 </div> 1912 </button></div><div id="Sublinklist-1-2" class="mobile-nav__sublist collapsible-content collapsible-content--all" aria-labelledby="Sublabel-2"> 1913 <div class="collapsible-content__inner"> 1914 <ul class="mobile-nav__grandchildlist"><li class="mobile-nav__item"> 1915 <a href="/products/tenpower" class="mobile-nav__link"> 1916 TenPower 1917 </a> 1918 </li><li class="mobile-nav__item"> 1919 <a href="https://fi.joyearbuds.com/products/goldpower%C2%AE" class="mobile-nav__link"> 1920 GoldPower® 1921 </a> 1922 </li><li class="mobile-nav__item"> 1923 <a href="/products/tinypower%C2%AE" class="mobile-nav__link"> 1924 TinyPower® 1925 </a> 1926 </li></ul> 1927 </div> 1928 </div></li></ul></div> 1929 </div></li><li class="mobile-nav__item appear-animation appear-delay-4 instructions-support"><a href="https://fi.joyearbuds.com/pages/help?hcUrl=%2Ffi-FI" class="mobile-nav__link">Instructions & Support</a></li><li class="mobile-nav__item appear-animation appear-delay-5 joy-with-own-logo"><a href="/pages/b2b" class="mobile-nav__link">JOY with own logo</a></li><li class="mobile-nav__item appear-animation appear-delay-6 brand"><a href="/pages/the-brand" class="mobile-nav__link">Brand</a></li><li class="mobile-nav__item appear-animation appear-delay-7 sustainability"><a href="/pages/sustainability" class="mobile-nav__link">Sustainability</a></li><li class="mobile-nav__item appear-animation appear-delay-8 newsletter"><a href="https://joyearbuds.com/pages/subscribe" class="mobile-nav__link">Newsletter</a></li><li class="mobile-nav__item appear-animation appear-delay-9"> 1930 <a href="https://joyearbuds.com/customer_authentication/redirect?locale=en®ion_country=US" class="mobile-nav__link">Log in</a> 1931 </li><li class="mobile-nav__spacer"></li> 1932 </ul> 1933 1934 <ul class="no-bullets social-icons mobile-nav__social"><li> 1935 <a target="_blank" rel="noopener" href="https://www.instagram.com/joyearbuds/" title="Joy Planet Finland on Instagram"> 1936 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-instagram" viewBox="0 0 32 32"><title>instagram</title><path fill="#444" d="M16 3.094c4.206 0 4.7.019 6.363.094 1.538.069 2.369.325 2.925.544.738.287 1.262.625 1.813 1.175s.894 1.075 1.175 1.813c.212.556.475 1.387.544 2.925.075 1.662.094 2.156.094 6.363s-.019 4.7-.094 6.363c-.069 1.538-.325 2.369-.544 2.925-.288.738-.625 1.262-1.175 1.813s-1.075.894-1.813 1.175c-.556.212-1.387.475-2.925.544-1.663.075-2.156.094-6.363.094s-4.7-.019-6.363-.094c-1.537-.069-2.369-.325-2.925-.544-.737-.288-1.263-.625-1.813-1.175s-.894-1.075-1.175-1.813c-.212-.556-.475-1.387-.544-2.925-.075-1.663-.094-2.156-.094-6.363s.019-4.7.094-6.363c.069-1.537.325-2.369.544-2.925.287-.737.625-1.263 1.175-1.813s1.075-.894 1.813-1.175c.556-.212 1.388-.475 2.925-.544 1.662-.081 2.156-.094 6.363-.094zm0-2.838c-4.275 0-4.813.019-6.494.094-1.675.075-2.819.344-3.819.731-1.037.4-1.913.944-2.788 1.819S1.486 4.656 1.08 5.688c-.387 1-.656 2.144-.731 3.825-.
1936075 1.675-.094 2.213-.094 6.488s.019 4.813.094 6.494c.075 1.675.344 2.819.731 3.825.4 1.038.944 1.913 1.819 2.788s1.756 1.413 2.788 1.819c1 .387 2.144.656 3.825.731s2.213.094 6.494.094 4.813-.019 6.494-.094c1.675-.075 2.819-.344 3.825-.731 1.038-.4 1.913-.944 2.788-1.819s1.413-1.756 1.819-2.788c.387-1 .656-2.144.731-3.825s.094-2.212.094-6.494-.019-4.813-.094-6.494c-.075-1.675-.344-2.819-.731-3.825-.4-1.038-.944-1.913-1.819-2.788s-1.756-1.413-2.788-1.819c-1-.387-2.144-.656-3.825-.731C20.812.275 20.275.256 16 .256z"/><path fill="#444" d="M16 7.912a8.088 8.088 0 0 0 0 16.175c4.463 0 8.087-3.625 8.087-8.088s-3.625-8.088-8.088-8.088zm0 13.338a5.25 5.25 0 1 1 0-10.5 5.25 5.25 0 1 1 0 10.5zM26.294 7.594a1.887 1.887 0 1 1-3.774.002 1.887 1.887 0 0 1 3.774-.003z"/></svg> 1937 <span class="icon__fallback-text">Instagram</span> 1938 </a> 1939 </li><li> 1940 <a target="_blank" rel="noopener" href="https://www.facebook.com/JOYearbuds" title="Joy Planet Finland on Facebook"> 1941 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-facebook" viewBox="0 0 14222 14222"><path d="M14222 7112c0 3549.352-2600.418 6491.344-6000 7024.72V9168h1657l315-2056H8222V5778c0-562 275-1111 1159-1111h897V2917s-814-139-1592-139c-1624 0-2686 984-2686 2767v1567H4194v2056h1806v4968.72C2600.418 13603.344 0 10661.352 0 7112 0 3184.703 3183.703 1 7111 1s7111 3183.703 7111 7111Zm-8222 7025c362 57 733 86 1111 86-377.945 0-749.003-29.485-1111-86.28Zm2222 0v-.28a7107.458 7107.458 0 0 1-167.717 24.267A7407.158 7407.158 0 0 0 8222 14137Zm-167.717 23.987C7745.664 14201.89 7430.797 14223 7111 14223c319.843 0 634.675-21.479 943.283-62.013Z"/></svg> 1942 <span class="icon__fallback-text">Facebook</span> 1943 </a> 1944 </li></ul> 1945 1946 </div> 1947 </div> 1948</div> 1949 <div id="CartDrawer" class="drawer drawer--right"> 1950 1951 <form id="CartDrawerForm" action="/checkout?locale=en" method="post" novalidate class="drawer__contents" data-location="cart-drawer"> 1952 <div class="drawer__fixed-header"> 1953 <div class="drawer__header appear-animation appear-delay-1"> 1954 <div class="drawer__title">Cart</div> 1955 <div class="drawer__close"> 1956 <button type="button" class="drawer__close-button js-drawer-close"> 1957 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><title>icon-X</title><path d="m19 17.61 27.12 27.13m0-27.12L19 44.74"/></svg> 1958 <span class="icon__fallback-text">Close cart</span> 1959 </button> 1960 </div> 1961 </div> 1962 </div> 1963 1964 <div class="drawer__inner"> 1965 <div class="drawer__scrollable"> 1966 <div data-products class="appear-animation appear-delay-2"></div> 1967 1968 1969 </div> 1970 1971 <div id="upsell-slider" class="upsell-slider appear-animation appear-delay-2"> 1972 <h5>We also recommend</h5> 1973 <div class="upsell-products"></div> 1974 </div> 1975 1976 <div class="drawer__footer appear-animation appear-delay-4"> 1977 <div data-discounts> 1978 1979 </div> 1980 1981 1982 1983 <div class="cart__item-sub cart__item-row"> 1984 <div class="cart__subtotal">Subtotal</div> 1985 <div data-subtotal>0,00 â¬</div> 1986 </div> 1987 1988 <div class="cart__item-row cart__savings text-center hide" data-savings></div> 1989 1990 <div class="cart__item-row text-center ajaxcart__note"> 1991 <small> 1992 Shipping, taxes, and discount codes calculated at checkout.<br /> 1993 </small> 1994 </div> 1995 1996 1997 1998 <div class="cart__checkout-wrapper"> 1999 <button type="submit" name="checkout" data-terms-required="false" class="btn cart__checkout"> 2000 Check out 2001 </button> 2002 2003 2004 </div> 2005 </div> 2006 </div> 2007 2008 <div class="drawer__cart-empty appear-animation appear-delay-2"> 2009 <div class="drawer__scrollable"> 2010 Your cart is currently empty. 2011 </div> 2012 </div> 2013 </form> 2014 2015 2016 </div> 2017 2018<style data-shopify>.site-nav__link, 2019 .site-nav__dropdown-link { 2020 font-size: 18px; 2021 }.site-header { 2022 border-bottom: 1px solid; 2023 border-bottom-color: #e8e8e1; 2024 }</style><div data-section-id="sections--21527965565270__header" data-section-type="header"> 2025 <div id="HeaderWrapper" class="header-wrapper"> 2026 <header 2027 id="SiteHeader" 2028 class="site-header" 2029 data-sticky="true" 2030 data-overlay="false"> 2031 <div class="page-width"> 2032 <div 2033 class="header-layout header-layout--center-drawer" 2034 data-logo-align="center"><div class="header-item header-item--left header-item--navigation" role="navigation" aria-label="Primary"><div class="site-nav"> 2035 <button 2036 type="button" 2037 class="site-nav__link site-nav__link--icon js-drawer-open-nav" 2038 aria-controls="NavDrawer"> 2039 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-hamburger" viewBox="0 0 64 64"><title>icon-hamburger</title><path d="M7 15h51M7 32h43M7 49h51"/></svg>
2040 <span class="icon__fallback-text">Site navigation</span> 2041 </button> 2042 </div><style data-shopify>.lang-pill { position: relative; display: inline-flex; } 2043 .lang-pill__form { margin: 0; display: inline-flex; } 2044 2045 .lang-pill__toggle { 2046 display: inline-flex; 2047 align-items: center; 2048 gap: 7px; 2049 padding: 6px 10px 6px 9px; 2050 margin: 0; 2051 border: 1px solid rgba(0, 0, 0, 0.14); 2052 border-radius: 999px; 2053 background: transparent; 2054 color: inherit; 2055 font: inherit; 2056 font-size: 12px; 2057 font-weight: 600; 2058 letter-spacing: 0.04em; 2059 line-height: 1; 2060 cursor: pointer; 2061 transition: border-color 0.18s ease, background-color 0.18s ease; 2062 } 2063 .lang-pill__toggle:hover { border-color: rgba(0, 0, 0, 0.34); background: rgba(0, 0, 0, 0.03); } 2064 .lang-pill__toggle:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; } 2065 2066 .lang-pill__chev { 2067 width: 9px; height: 9px; 2068 flex-shrink: 0; 2069 opacity: 0.55; 2070 transition: transform 0.2s ease; 2071 } 2072 .lang-pill__toggle[aria-expanded="true"] .lang-pill__chev { transform: rotate(180deg); } 2073 2074 .lang-flag { 2075 display: block; 2076 width: 18px; height: 12px; 2077 flex-shrink: 0; 2078 border-radius: 2px; 2079 overflow: hidden; 2080 box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.09); 2081 } 2082 .lang-flag svg { display: block; width: 100%; height: 100%; } 2083 2084 .lang-pill__list { 2085 position: absolute; 2086 top: calc(100% + 8px); 2087 z-index: 60; 2088 min-width: 172px; 2089 margin: 0; 2090 padding: 6px; 2091 list-style: none; 2092 background: #fff; 2093 color: #111; 2094 border-radius: 14px; 2095 box-shadow: 0 10px 30px rgba(0, 0, 0, 0.14), 0 1px 3px rgba(0, 0, 0, 0.08); 2096 opacity: 0; 2097 visibility: hidden; 2098 transform: translateY(-4px); 2099 transition: opacity 0.16s ease, transform 0.16s ease, visibility 0.16s; 2100 } 2101 .lang-pill__list--right { right: 0; } 2102 .lang-pill__list--left { left: 0; } 2103 .lang-pill.is-open .lang-pill__list { opacity: 1; visibility: visible; transform: translateY(0); } 2104 2105 .lang-pill__option { 2106 display: flex; 2107 align-items: center; 2108 gap: 9px; 2109 width: 100%; 2110 padding: 8px 10px; 2111 border: 0; 2112 border-radius: 9px; 2113 background: transparent; 2114 color: inherit; 2115 font: inherit; 2116 font-size: 13px; 2117 line-height: 1.2; 2118 text-align: left; 2119 cursor: pointer; 2120 } 2121 .lang-pill__option:hover { background: rgba(0, 0, 0, 0.05); } 2122 .lang-pill__option.is-current { font-weight: 700; } 2123 .lang-pill__check { width: 12px; height: 12px; margin-left: auto; opacity: 0; flex-shrink: 0; } 2124 .lang-pill__option.is-current .lang-pill__check { opacity: 1; } 2125 2126 /* Vaalea teksti läpinäkyvän/overlay-headerin päällä */ 2127 .header-wrapper--overlay.is-light .lang-pill__toggle { border-color: rgba(255, 255, 255, 0.4); } 2128 .header-wrapper--overlay.is-light .lang-pill__toggle:hover { border-color: rgba(255, 255, 255, 0.75); background: rgba(255, 255, 255, 0.1); } 2129 2130 /* --- Mobiili: kompakti pelkkä lippu + chevron, dropdown säilyy --- */ 2131 @media screen and (max-width: 768px) { 2132 .lang-pill__toggle { gap: 4px; padding: 5px 7px; } 2133 .lang-pill__code { display: none; } 2134 .lang-pill__list { min-width: 168px; top: calc(100% + 10px); } 2135 .lang-pill__option { padding: 11px 10px; font-size: 14px; } 2136 } 2137 2138 /* Header ei saa leikata pudotusvalikkoa */ 2139 .header-wrapper, 2140 .site-header, 2141 .header-layout, 2142 .header-item--icons, 2143 .site-nav--icons, 2144 .site-nav__icons { overflow: visible; } 2145 2146 /* Valitsin headerin ikonirivissä */ 2147 .site-nav__icons .lang-pill-wrap { display: inline-flex; align-items: center; padding: 0 6px; } 2148 2149 @media (prefers-reduced-motion: reduce) { 2150 .lang-pill__list, .lang-pill__chev { transition: none; } 2151 }</style><div class="lang-pill" data-lang-pill><form method="post" action="/localization" id="localization_form" accept-charset="UTF-8" class="lang-pill__form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/products/tinys-earbuds-desinged-for-women-joy-friends-club" /><button 2152 type="button" 2153 class="lang-pill__toggle" 2154 aria-expanded="false" 2155 aria-haspopup="listbox"
2156 aria-controls="LangPill-sections--21527965565270__header-list" 2157 aria-label="Language" 2158 data-lang-toggle><span class="lang-flag" aria-hidden="true"><svg viewBox="0 0 18 12" xmlns="http://www.w3.org/2000/svg"><rect width="18" height="12" fill="#012169"/><path d="M0 0l18 12M18 0L0 12" stroke="#fff" stroke-width="2.4"/><path d="M0 0l18 12M18 0L0 12" stroke="#C8102E" stroke-width="1.1"/><path d="M9 0v12M0 6h18" stroke="#fff" stroke-width="4"/><path d="M9 0v12M0 6h18" stroke="#C8102E" stroke-width="2.2"/></svg></span><span class="lang-pill__code">EN</span><svg class="lang-pill__chev" viewBox="0 0 10 6" fill="none" aria-hidden="true"> 2159 <path d="M1 1l4 4 4-4" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/> 2160 </svg> 2161 </button> 2162 2163 <ul id="LangPill-sections--21527965565270__header-list" class="lang-pill__list lang-pill__list--right" role="listbox" data-lang-list><li role="none"> 2164 <button 2165 type="submit" 2166 name="locale_code" 2167 value="en" 2168 role="option" 2169 lang="en" 2170 aria-selected="true" 2171 class="lang-pill__option is-current"><span class="lang-flag" aria-hidden="true"><svg viewBox="0 0 18 12" xmlns="http://www.w3.org/2000/svg"><rect width="18" height="12" fill="#012169"/><path d="M0 0l18 12M18 0L0 12" stroke="#fff" stroke-width="2.4"/><path d="M0 0l18 12M18 0L0 12" stroke="#C8102E" stroke-width="1.1"/><path d="M9 0v12M0 6h18" stroke="#fff" stroke-width="4"/><path d="M9 0v12M0 6h18" stroke="#C8102E" stroke-width="2.2"/></svg></span><span>English</span>
2172 <svg class="lang-pill__check" viewBox="0 0 12 12" fill="none" aria-hidden="true"> 2173 <path d="M1.5 6.2l3 3 6-6.4" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/> 2174 </svg> 2175 </button> 2176 </li><li role="none"> 2177 <button 2178 type="submit" 2179 name="locale_code" 2180 value="fi" 2181 role="option" 2182 lang="fi" 2183 2184 class="lang-pill__option"><span class="lang-flag" aria-hidden="true"><svg viewBox="0 0 18 12" xmlns="http://www.w3.org/2000/svg"><rect width="18" height="12" fill="#fff"/><rect x="5" width="3.6" height="12" fill="#003580"/><rect y="4.2" width="18" height="3.6" fill="#003580"/></svg></span><span>Suomi</span> 2185 <svg class="lang-pill__check" viewBox="0 0 12 12" fill="none" aria-hidden="true"> 2186 <path d="M1.5 6.2l3 3 6-6.4" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/> 2187 </svg> 2188 </button> 2189 </li><li role="none"> 2190 <button 2191 type="submit" 2192 name="locale_code" 2193 value="de" 2194 role="option" 2195 lang="de" 2196 2197 class="lang-pill__option"><span class="lang-flag" aria-hidden="true"><svg viewBox="0 0 18 12" xmlns="http://www.w3.org/2000/svg"><rect width="18" height="4" fill="#000"/><rect y="4" width="18" height="4" fill="#DD0000"/><rect y="8" width="18" height="4" fill="#FFCE00"/></svg></span><span>Deutsch</span>
2198 <svg class="lang-pill__check" viewBox="0 0 12 12" fill="none" aria-hidden="true"> 2199 <path d="M1.5 6.2l3 3 6-6.4" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/> 2200 </svg> 2201 </button> 2202 </li></ul></form></div> 2203 2204
2204<script> 2205 (function () { 2206 if (window.__langPillInit) return; 2207 window.__langPillInit = true; 2208 2209 function closeAll(except) { 2210 document.querySelectorAll('[data-lang-pill].is-open').forEach(function (el) { 2211 if (el === except) return; 2212 el.classList.remove('is-open'); 2213 var t = el.querySelector('[data-lang-toggle]'); 2214 if (t) t.setAttribute('aria-expanded', 'false'); 2215 }); 2216 } 2217 2218 document.addEventListener('click', function (e) { 2219 var toggle = e.target.closest('[data-lang-toggle]'); 2220 if (toggle) { 2221 var pill = toggle.closest('[data-lang-pill]'); 2222 var open = pill.classList.toggle('is-open'); 2223 toggle.setAttribute('aria-expanded', open ? 'true' : 'false'); 2224 closeAll(pill); 2225 return; 2226 } 2227 if (!e.target.closest('[data-lang-pill]')) closeAll(); 2228 }); 2229 2230 document.addEventListener('keydown', function (e) { 2231 if (e.key === 'Escape') closeAll(); 2232 }); 2233 })(); 2234 </script>
2234</div><div class="header-item header-item--logo"><style data-shopify>.header-item--logo, 2235 .header-layout--left-center .header-item--logo, 2236 .header-layout--left-center .header-item--icons { 2237 -webkit-box-flex: 0 1 100px; 2238 -ms-flex: 0 1 100px; 2239 flex: 0 1 100px; 2240 } 2241 2242 @media only screen and (min-width: 769px) { 2243 .header-item--logo, 2244 .header-layout--left-center .header-item--logo, 2245 .header-layout--left-center .header-item--icons { 2246 -webkit-box-flex: 0 0 100px; 2247 -ms-flex: 0 0 100px; 2248 flex: 0 0 100px; 2249 } 2250 } 2251 2252 .site-header__logo a { 2253 max-width: 100px; 2254 } 2255 .is-light .site-header__logo .logo--inverted { 2256 max-width: 100px; 2257 } 2258 @media only screen and (min-width: 769px) { 2259 .site-header__logo a { 2260 max-width: 100px; 2261 } 2262 2263 .is-light .site-header__logo .logo--inverted { 2264 max-width: 100px; 2265 } 2266 }</style><div id="LogoContainer" class="h1 site-header__logo" itemscope itemtype="http://schema.org/Organization"> 2267 <a 2268 href="/" 2269 itemprop="url" 2270 class="site-header__logo-link logo--has-inverted" 2271 style="padding-top: 38.80597014925373%"> 2272 2273 2274 2275 2276 2277 2278 2279<image-element data-aos="image-fade-in" data-aos-offset="150"> 2280 2281 2282 2283 2284 <img src="//joyearbuds.com/cdn/shop/files/logo-black.svg?v=1742390067&width=200" alt="" srcset="//joyearbuds.com/cdn/shop/files/logo-black.svg?v=1742390067&width=100 100w, //joyearbuds.com/cdn/shop/files/logo-black.svg?v=1742390067&width=200 200w" width="100" height="38.80597014925373" loading="eager" class="small--hide image-element" sizes="100px" itemprop="logo" style="max-height: 38.80597014925373px;max-width: 100px;"> 2285 2286 2287 2288</image-element> 2289 2290 2291 2292 2293 2294 2295<image-element data-aos="image-fade-in" data-aos-offset="150"> 2296 2297 2298 2299 2300 <img src="//joyearbuds.com/cdn/shop/files/logo-black.svg?v=1742390067&width=200" alt="" srcset="//joyearbuds.com/cdn/shop/files/logo-black.svg?v=1742390067&width=100 100w, //joyearbuds.com/cdn/shop/files/logo-black.svg?v=1742390067&width=200 200w" width="100" height="38.80597014925373" loading="eager" class="medium-up--hide image-element" sizes="100px" style="max-height: 38.80597014925373px;max-width: 100px;"> 2301 2302 2303 2304</image-element> 2305 2306 2307</a><a 2308 href="/" 2309 itemprop="url" 2310 class="site-header__logo-link logo--inverted" 2311 style="padding-top: 38.80597014925373%"> 2312 2313 2314 2315 2316 2317 2318 2319<image-element data-aos="image-fade-in" data-aos-offset="150"> 2320 2321 2322 2323 2324 <img src="//joyearbuds.com/cdn/shop/files/logo-white.svg?v=1742390039&width=200" alt="" srcset="//joyearbuds.com/cdn/shop/files/logo-white.svg?v=1742390039&width=100 100w, //joyearbuds.com/cdn/shop/files/logo-white.svg?v=1742390039&width=200 200w" width="100" height="38.80597014925373" loading="eager" class="small--hide image-element" sizes="100px" itemprop="logo" style="max-height: 38.80597014925373px;max-width: 100px;"> 2325 2326 2327 2328</image-element> 2329 2330 2331 2332 2333 2334 2335<image-element data-aos="image-fade-in" data-aos-offset="150"> 2336 2337 2338 2339 2340 <img src="//joyearbuds.com/cdn/shop/files/logo-white.svg?v=1742390039&width=200" alt="" srcset="//joyearbuds.com/cdn/shop/files/logo-white.svg?v=1742390039&width=100 100w, //joyearbuds.com/cdn/shop/files/logo-white.svg?v=1742390039&width=200 200w" width="100" height="38.80597014925373" loading="eager" class="medium-up--hide image-element" sizes="100px" style="max-height: 38.80597014925373px;max-width: 100px;"> 2341 2342 2343 2344</image-element> 2345 2346 2347</a></div></div><div class="header-item header-item--icons"><div class="site-nav site-nav--icons"> 2348 <div class="site-nav__link site-nav__link--icon"> 2349 2350 <div class="site-nav__icons"> 2351 2352 <a class="site-nav__link site-nav__link--icon medium-down--hide" href="/account"> 2353 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-user" viewBox="0 0 64 64"><title>account</title><path d="M35 39.84v-2.53c3.3-1.91 6-6.66 6-11.41 0-7.63 0-13.82-9-13.82s-9 6.19-9 13.82c0 4.75 2.7 9.51 6 11.41v2.53c-10.18.85-18 6-18 12.16h42c0-6.19-7.82-11.31-18-12.16Z"/></svg> 2354 <span class="icon__fallback-text"> 2355 2356 Log in 2357 2358 </span> 2359 </a> 2360 2361 2362 2363 <a href="/search" class="site-nav__link site-nav__link--icon js-search-header js-no-transition"> 2364 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-search" viewBox="0 0 64 64"><title>icon-search</title><path d="M47.16 28.58A18.58 18.58 0 1 1 28.58 10a18.58 18.58 0 0 1 18.58 18.58ZM54 54 41.94 42"/></svg>
2365 <span class="icon__fallback-text">Search</span> 2366 </a> 2367 2368 2369 2370 2371 <a href="/cart" class="site-nav__link site-nav__link--icon js-drawer-open-cart js-no-transition" aria-controls="CartDrawer" data-icon="cart"> 2372 <span class="cart-link"><svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-cart" viewBox="0 0 64 64"><title>icon-cart</title><path d="M14 17.44h46.79l-7.94 25.61H20.96l-9.65-35.1H3"/><circle cx="27" cy="53" r="2"/><circle cx="47" cy="53" r="2"/></svg><span class="icon__fallback-text">Cart</span> 2373 <span class="cart-link__bubble"></span> 2374 </span> 2375 </a> 2376 </div> 2377</div> 2378</div> 2379 </div></div> 2380 <div class="site-header__search-container"> 2381 <div class="site-header__search"> 2382 <div class="page-width"> 2383 <predictive-search data-context="header" data-enabled="true" data-dark="false"> 2384 <div class="predictive__screen" data-screen></div> 2385 <form action="/search" method="get" role="search"> 2386 <label for="Search" class="hidden-label">Search</label> 2387 <div class="search__input-wrap"> 2388 <input 2389 class="search__input" 2390 id="Search" 2391 type="search" 2392 name="q" 2393 value="" 2394 role="combobox" 2395 aria-expanded="false" 2396 aria-owns="predictive-search-results" 2397 aria-controls="predictive-search-results" 2398 aria-haspopup="listbox" 2399 aria-autocomplete="list" 2400 autocorrect="off" 2401 autocomplete="off" 2402 autocapitalize="off" 2403 spellcheck="false" 2404 placeholder="Search" 2405 tabindex="0" 2406 > 2407 <input name="options[prefix]" type="hidden" value="last"> 2408 <button class="btn--search" type="submit"> 2409 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-search" viewBox="0 0 64 64"><defs><style>.cls-1{fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:2px}</style></defs><path class="cls-1" d="M47.16 28.58A18.58 18.58 0 1 1 28.58 10a18.58 18.58 0 0 1 18.58 18.58zM54 54L41.94 42"/></svg> 2410 <span class="icon__fallback-text">Search</span> 2411 </button> 2412 </div> 2413 2414 <button class="btn--close-search"> 2415 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><defs><style>.cls-1{fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:2px}</style></defs><path class="cls-1" d="M19 17.61l27.12 27.13m0-27.13L19 44.74"/></svg> 2416 </button> 2417 <div id="predictive-search" class="search__results" tabindex="-1"></div> 2418 </form> 2419</predictive-search> 2420 2421 </div> 2422 </div> 2423 </div> 2424 </header> 2425 </div> 2426</div> 2427<style> #shopify-section-sections--21527965565270__header ul.mobile-nav > li.mobile-nav__item.appear-animation.appear-delay-9.joy-omalla-logolla > a {font-size: 16px;} </style></div><div id="shopify-section-sections--21527965565270__announcement-bar" class="shopify-section shopify-section-group-header-group"><div class="announcement"> 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437</div> 2438 2439 2440 2441<style data-shopify> 2442.announcement { 2443 padding-top: 0px; 2444} 2445</style></div> 2446<!-- END sections: header-group --><!-- BEGIN sections: popup-group --> 2447 2448<!-- END sections: popup-group --><main class="main-content" id="MainContent"> 2449 <div class="lp-2026"><div id="shopify-section-template--31561534275926__product_new_RapwTf" class="shopify-section cpc-wrapper"><div id="cpc-template--31561534275926__product_new_RapwTf" class="cpc" data-section-id="template--31561534275926__product_new_RapwTf" data-discount="" 2450 data-soldout-text="SOLD OUT" data-soldout-cta="Loppuunmyyty" 2451 data-low-threshold="10" data-low-text="Vain [n] jäljellä" 2452 data-presale-cta="Pre-order" data-combo-text="Tätä yhdistelmää ei ole"><div class="cpc__visual"> 2453 <div class="cpc__product-wrap"><div class="cpc__soldout-flag" id="cpc-soldout-template--31561534275926__product_new_RapwTf" hidden>SOLD OUT</div><img src="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5.png?v=1779964205&width=900" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5.png?v=1779964205&width=480 480w, //joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5.png?v=1779964205&width=600 600w, //joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5.png?v=1779964205&width=900 900w" width="900" height="900" loading="eager" class="cpc__main-img" id="cpc-main-img-template--31561534275926__product_new_RapwTf" fetchpriority="high" sizes="(max-width: 960px) 90vw, 50vw"> 2454<div class="cpc__carousel" id="cpc-carousel-template--31561534275926__product_new_RapwTf"> 2455 <button class="cpc__carousel-arrow cpc__carousel-arrow--prev" id="cpc-prev-template--31561534275926__product_new_RapwTf" type="button" aria-label="Edellinen kuva">
2456 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"/></svg> 2457 </button> 2458 <div class="cpc__thumbs" id="cpc-thumbs-template--31561534275926__product_new_RapwTf" role="list" aria-label="Tuotekuvat"><button 2459 class="cpc__thumb cpc__thumb--active" 2460 type="button" 2461 role="listitem" 2462 aria-label="Kuva 1" 2463 data-full="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5.png?v=1779964205&width=900" 2464 data-srcset="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5.png?v=1779964205&width=480 480w, //joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5.png?v=1779964205&width=900 900w" 2465 data-index="0" 2466 > 2467 <img src="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5.png?v=1779964205&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5.png?v=1779964205&width=160 160w" width="160" height="160" class="cpc__thumb-img"> 2468 </button><button 2469 class="cpc__thumb" 2470 type="button" 2471 role="listitem" 2472 aria-label="Kuva 2" 2473 data-full="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_27_2026_Delete_all_text.png?v=1779962850&width=900" 2474 data-srcset="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_27_2026_Delete_all_text.png?v=1779962850&width=480 480w, //joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_27_2026_Delete_all_text.png?v=1779962850&width=900 900w" 2475 data-index="1" 2476 > 2477 <img src="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_27_2026_Delete_all_text.png?v=1779962850&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_27_2026_Delete_all_text.png?v=1779962850&width=160 160w" width="160" height="156" class="cpc__thumb-img"> 2478 </button><button 2479 class="cpc__thumb" 2480 type="button" 2481 role="listitem" 2482 aria-label="Kuva 3" 2483 data-full="//joyearbuds.com/cdn/shop/files/1_50a6ac3e-56e8-43e3-b4bd-cfe325f8be6f.png?v=1779962834&width=900" 2484 data-srcset="//joyearbuds.com/cdn/shop/files/1_50a6ac3e-56e8-43e3-b4bd-cfe325f8be6f.png?v=1779962834&width=480 480w, //joyearbuds.com/cdn/shop/files/1_50a6ac3e-56e8-43e3-b4bd-cfe325f8be6f.png?v=1779962834&width=900 900w" 2485 data-index="2" 2486 > 2487 <img src="//joyearbuds.com/cdn/shop/files/1_50a6ac3e-56e8-43e3-b4bd-cfe325f8be6f.png?v=1779962834&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/1_50a6ac3e-56e8-43e3-b4bd-cfe325f8be6f.png?v=1779962834&width=160 160w" width="160" height="160" class="cpc__thumb-img"> 2488 </button><button 2489 class="cpc__thumb" 2490 type="button" 2491 role="listitem" 2492 aria-label="Kuva 4" 2493 data-full="//joyearbuds.com/cdn/shop/files/2_5d3c594c-47d4-445e-9b74-80ead40f1514.png?v=1779962942&width=900" 2494 data-srcset="//joyearbuds.com/cdn/shop/files/2_5d3c594c-47d4-445e-9b74-80ead40f1514.png?v=1779962942&width=480 480w, //joyearbuds.com/cdn/shop/files/2_5d3c594c-47d4-445e-9b74-80ead40f1514.png?v=1779962942&width=900 900w" 2495 data-index="3" 2496 > 2497 <img src="//joyearbuds.com/cdn/shop/files/2_5d3c594c-47d4-445e-9b74-80ead40f1514.png?v=1779962942&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/2_5d3c594c-47d4-445e-9b74-80ead40f1514.png?v=1779962942&width=160 160w" width="160" height="160" class="cpc__thumb-img"> 2498 </button><button 2499 class="cpc__thumb" 2500 type="button" 2501 role="listitem" 2502 aria-label="Kuva 5" 2503 data-full="//joyearbuds.com/cdn/shop/files/black_buds_transparent_1.png?v=1776769855&width=900" 2504 data-srcset="//joyearbuds.com/cdn/shop/files/black_buds_transparent_1.png?v=1776769855&width=480 480w, //joyearbuds.com/cdn/shop/files/black_buds_transparent_1.png?v=1776769855&width=900 900w" 2505 data-index="4" 2506 > 2507 <img src="//joyearbuds.com/cdn/shop/files/black_buds_transparent_1.png?v=1776769855&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/black_buds_transparent_1.png?v=1776769855&width=160 160w" width="160" height="159" class="cpc__thumb-img"> 2508 </button><button 2509 class="cpc__thumb" 2510 type="button" 2511 role="listitem" 2512 aria-label="Kuva 6" 2513 data-full="//joyearbuds.com/cdn/shop/files/3_654fec4f-4a97-402e-b
2513c52-b36b89ed0da2.png?v=1779962833&width=900" 2514 data-srcset="//joyearbuds.com/cdn/shop/files/3_654fec4f-4a97-402e-bc52-b36b89ed0da2.png?v=1779962833&width=480 480w, //joyearbuds.com/cdn/shop/files/3_654fec4f-4a97-402e-bc52-b36b89ed0da2.png?v=1779962833&width=900 900w" 2515 data-index="5" 2516 > 2517 <img src="//joyearbuds.com/cdn/shop/files/3_654fec4f-4a97-402e-bc52-b36b89ed0da2.png?v=1779962833&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/3_654fec4f-4a97-402e-bc52-b36b89ed0da2.png?v=1779962833&width=160 160w" width="160" height="160" class="cpc__thumb-img"> 2518 </button><button 2519 class="cpc__thumb" 2520 type="button" 2521 role="listitem" 2522 aria-label="Kuva 7" 2523 data-full="//joyearbuds.com/cdn/shop/products/PhotoRoom-20220726_171617_fe67b567-4b9e-48b7-b85c-e1b289a252e0.png?v=1776769855&width=900" 2524 data-srcset="//joyearbuds.com/cdn/shop/products/PhotoRoom-20220726_171617_fe67b567-4b9e-48b7-b85c-e1b289a252e0.png?v=1776769855&width=480 480w, //joyearbuds.com/cdn/shop/products/PhotoRoom-20220726_171617_fe67b567-4b9e-48b7-b85c-e1b289a252e0.png?v=1776769855&width=900 900w" 2525 data-index="6" 2526 > 2527 <img src="//joyearbuds.com/cdn/shop/products/PhotoRoom-20220726_171617_fe67b567-4b9e-48b7-b85c-e1b289a252e0.png?v=1776769855&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/products/PhotoRoom-20220726_171617_fe67b567-4b9e-48b7-b85c-e1b289a252e0.png?v=1776769855&width=160 160w" width="160" height="160" class="cpc__thumb-img"> 2528 </button><button 2529 class="cpc__thumb" 2530 type="button" 2531 role="listitem" 2532 aria-label="Kuva 8" 2533 data-full="//joyearbuds.com/cdn/shop/files/PinkkiKotelo.png?v=1776769855&width=900" 2534 data-srcset="//joyearbuds.com/cdn/shop/files/PinkkiKotelo.png?v=1776769855&width=480 480w, //joyearbuds.com/cdn/shop/files/PinkkiKotelo.png?v=1776769855&width=900 900w" 2535 data-index="7" 2536 > 2537 <img src="//joyearbuds.com/cdn/shop/files/PinkkiKotelo.png?v=1776769855&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/PinkkiKotelo.png?v=1776769855&width=160 160w" width="160" height="160" class="cpc__thumb-img"> 2538 </button><button 2539 class="cpc__thumb" 2540 type="button" 2541 role="listitem" 2542 aria-label="Kuva 9" 2543 data-full="//joyearbuds.com/cdn/shop/files/pink_3f59b54d-59e0-4972-bef4-45616984d816.png?v=1776769855&width=900" 2544 data-srcset="//joyearbuds.com/cdn/shop/files/pink_3f59b54d-59e0-4972-bef4-45616984d816.png?v=1776769855&width=480 480w, //joyearbuds.com/cdn/shop/files/pink_3f59b54d-59e0-4972-bef4-45616984d816.png?v=1776769855&width=900 900w" 2545 data-index="8" 2546 > 2547 <img src="//joyearbuds.com/cdn/shop/files/pink_3f59b54d-59e0-4972-bef4-45616984d816.png?v=1776769855&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/pink_3f59b54d-59e0-4972-bef4-45616984d816.png?v=1776769855&width=160 160w" width="160" height="160" class="cpc__thumb-img"> 2548 </button><button 2549 class="cpc__thumb" 2550 type="button" 2551 role="listitem" 2552 aria-label="Kuva 10" 2553 data-full="//joyearbuds.com/cdn/shop/files/4_3c6a5910-dfa3-4a19-8d54-61d6db19a4c5.png?v=1779962833&width=900" 2554 data-srcset="//joyearbuds.com/cdn/shop/files/4_3c6a5910-dfa3-4a19-8d54-61d6db19a4c5.png?v=1779962833&width=480 480w, //joyearbuds.com/cdn/shop/files/4_3c6a5910-dfa3-4a19-8d54-61d6db19a4c5.png?v=1779962833&width=900 900w" 2555 data-index="9" 2556 > 2557 <img src="//joyearbuds.com/cdn/shop/files/4_3c6a5910-dfa3-4a19-8d54-61d6db19a4c5.png?v=1779962833&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/4_3c6a5910-dfa3-4a19-8d54-61d6db19a4c5.png?v=1779962833&width=160 160w" width="160" height="160" class="cpc__thumb-img"> 2558 </button><button 2559 class="cpc__thumb" 2560 type="button" 2561 role="listitem" 2562 aria-label="Kuva 11" 2563 data-full="//joyearbuds.com/cdn/shop/files/black_1_b576a09d-169e-4603-b
25636ad-98353c1a5fea.png?v=1776769855&width=900" 2564 data-srcset="//joyearbuds.com/cdn/shop/files/black_1_b576a09d-169e-4603-b6ad-98353c1a5fea.png?v=1776769855&width=480 480w, //joyearbuds.com/cdn/shop/files/black_1_b576a09d-169e-4603-b6ad-98353c1a5fea.png?v=1776769855&width=900 900w" 2565 data-index="10" 2566 > 2567 <img src="//joyearbuds.com/cdn/shop/files/black_1_b576a09d-169e-4603-b6ad-98353c1a5fea.png?v=1776769855&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/black_1_b576a09d-169e-4603-b6ad-98353c1a5fea.png?v=1776769855&width=160 160w" width="160" height="160" class="cpc__thumb-img"> 2568 </button><button 2569 class="cpc__thumb" 2570 type="button" 2571 role="listitem" 2572 aria-label="Kuva 12" 2573 data-full="//joyearbuds.com/cdn/shop/files/WhatsApp_Image_2025-05-07_at_12.48.32_1.jpg?v=1776769855&width=900" 2574 data-srcset="//joyearbuds.com/cdn/shop/files/WhatsApp_Image_2025-05-07_at_12.48.32_1.jpg?v=1776769855&width=480 480w, //joyearbuds.com/cdn/shop/files/WhatsApp_Image_2025-05-07_at_12.48.32_1.jpg?v=1776769855&width=900 900w" 2575 data-index="11" 2576 > 2577 <img src="//joyearbuds.com/cdn/shop/files/WhatsApp_Image_2025-05-07_at_12.48.32_1.jpg?v=1776769855&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/WhatsApp_Image_2025-05-07_at_12.48.32_1.jpg?v=1776769855&width=160 160w" width="160" height="160" class="cpc__thumb-img"> 2578 </button><button 2579 class="cpc__thumb" 2580 type="button" 2581 role="listitem" 2582 aria-label="Kuva 13" 2583 data-full="//joyearbuds.com/cdn/shop/files/white_buds_transparent.png?v=1776769855&width=900" 2584 data-srcset="//joyearbuds.com/cdn/shop/files/white_buds_transparent.png?v=1776769855&width=480 480w, //joyearbuds.com/cdn/shop/files/white_buds_transparent.png?v=1776769855&width=900 900w" 2585 data-index="12" 2586 > 2587 <img src="//joyearbuds.com/cdn/shop/files/white_buds_transparent.png?v=1776769855&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/white_buds_transparent.png?v=1776769855&width=160 160w" width="160" height="154" class="cpc__thumb-img"> 2588 </button><button 2589 class="cpc__thumb" 2590 type="button" 2591 role="listitem" 2592 aria-label="Kuva 14" 2593 data-full="//joyearbuds.com/cdn/shop/files/42_615c91ae-ee7c-453f-b77a-75ecd556c676.png?v=1776769855&width=900" 2594 data-srcset="//joyearbuds.com/cdn/shop/files/42_615c91ae-ee7c-453f-b77a-75ecd556c676.png?v=1776769855&width=480 480w, //joyearbuds.com/cdn/shop/files/42_615c91ae-ee7c-453f-b77a-75ecd556c676.png?v=1776769855&width=900 900w" 2595 data-index="13" 2596 > 2597 <img src="//joyearbuds.com/cdn/shop/files/42_615c91ae-ee7c-453f-b77a-75ecd556c676.png?v=1776769855&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/42_615c91ae-ee7c-453f-b77a-75ecd556c676.png?v=1776769855&width=160 160w" width="160" height="160" class="cpc__thumb-img"> 2598 </button><button 2599 class="cpc__thumb" 2600 type="button" 2601 role="listitem" 2602 aria-label="Kuva 15" 2603 data-full="//joyearbuds.com/cdn/shop/files/pink_buds_transparent_1_1.png?v=1776769855&width=900" 2604 data-srcset="//joyearbuds.com/cdn/shop/files/pink_buds_transparent_1_1.png?v=1776769855&width=480 480w, //joyearbuds.com/cdn/shop/files/pink_buds_transparent_1_1.png?v=1776769855&width=900 900w" 2605 data-index="14" 2606 > 2607 <img src="//joyearbuds.com/cdn/shop/files/pink_buds_transparent_1_1.png?v=1776769855&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/pink_buds_transparent_1_1.png?v=1776769855&width=160 160w" width="160" height="174" class="cpc__thumb-img"> 2608 </button><button 2609 class="cpc__thumb" 2610 type="button" 2611 role="listitem" 2612 aria-label="Kuva 16" 2613 data-full="//joyearbuds.com/cdn/shop/files/43_5766c3bd-ab34-43e3-80d0-690c6aaa3912.png?v=1776769855&width=900" 2614 data-srcset="//joyearbuds.com/cdn/shop/files/43_5766c3bd-ab34-43e3-80d0-690c6aaa3912.png?v=1776769855&width=480 480w, //joyearbuds.com/cdn/shop/files/43_5766c3bd-ab34-43e3-80d0-690c6aaa3912.png?v=1776769855&width=900 900w" 2615 data-index="15" 2616 > 2617 <img src="//joyearbuds.com/cdn/shop/files/43_5766c3bd-ab34-43e3-80d0-690c6aaa3912.png?v=1776769855&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/43_5766c3bd-ab34-43e3-80d0-690c6aaa3912.png?v=1776769855&width=160 160w" width="160" height="160" class="cpc__thumb-img"> 2618 </button><button 2619 class="cpc__thumb" 2620 type="button" 2621 role="listitem" 2622 aria-label="Kuva 17" 2623 data-full="//joyearbuds.com/cdn/shop/files/TINYS_28.png?v=1773758930&width=900" 2624 data-srcset="//joyearbuds.com/cdn/shop/files/TINYS_28.png?v=1773758930&width=480 480w, //joyearbuds.com/cdn/shop/files/TINYS_28.png?v=1773758930&width=900 900w" 2625 data-index="16" 2626 > 2627 <img src="//joyearbuds.com/cdn/shop/files/TINYS_28.png?v=1773758930&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/TINYS_28.png?v=1773758930&width=160 160w" width="160" height="160" class="cpc__thumb-img"> 2628 </button><button 2629 class="cpc__thumb" 2630 type="button" 2631 role="listitem" 2632 aria-label="Kuva 18" 2633 data-full="//joyearbuds.com/cdn/shop/files/TINYS_9.png?v=1766923740&width=900" 2634 data-srcset="//joyearbuds.com/cdn/shop/files/TINYS_9.png?v=1766923740&width=480 480w, //joyearbuds.com/cdn/shop/files/TINYS_9.png?v=1766923740&width=900 900w" 2635 data-index="17" 2636 > 2637 <img src="//joyearbuds.com/cdn/shop/files/TINYS_9.png?v=1766923740&width=160" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/TINYS_9.png?v=1766923740&width=160 160w" width="160" height="160" class="cpc__thumb-img"> 2638 </button></div> 2639 <button class="cpc__carousel-arrow cpc__carousel-arrow--next" id="cpc-next-template--31561534275926__product_new_RapwTf" type="button" aria-label="Seuraava kuva">
2640 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg> 2641 </button> 2642 </div></div> 2643 </div><div class="cpc__offer"> 2644 2645 <input type="hidden" id="cpc-main-template--31561534275926__product_new_RapwTf" value="54276348870998"><div class="cpc__camp-tag" >Earbuds designes for small ears</div><div id="shopify-block-AemNaV2MxQ2VGc3Bne__loox_reviews_loox_rating_Dz7qna" class="shopify-block shopify-app-block"> 2646 2647 <a href="#looxReviewsFrame" aria-label="Scroll to reviews"> 2648 <div class="loox-rating loox-widget" 2649 data-content-size="16" 2650 2651 2652 2653 2654 2655 2656 2657 data-loox-block-id="AemNaV2MxQ2VGc3Bne__loox_reviews_loox_rating_Dz7qna" 2658 2659 2660 2661 2662 data-color-text="" 2663 2664 2665 data-color-star="" 2666 2667 2668 data-id="10882379907414" 2669 data-rating="4.7" 2670 data-raters="481" 2671 2672 data-testid="loox-rating-widget" 2673 ></div> 2674 </a> 2675 2676 2677 2678</div> 2679<h1 class="cpc__h1" > 2680 TinyS® 2681</h1><p class="cpc__sub">Smallest earbuds on the market, made for a woman's ear. They stay put â on a run, at work, all day. Premium HiFi sound and 7 tip sizes for the perfect fit.</p><div class="cpc__price" data-badge-tpl="Save [pct] %"> 2682 <span class="cpc__price-now" data-wg-notranslate>159,00 â¬</span> 2683 <s class="cpc__price-was" data-wg-notranslate hidden></s><span class="cpc__price-badge" data-wg-notranslate hidden>Save 0 %</span><span class="cpc__price-soldout" hidden>SOLD OUT</span> 2684 </div><div class="cpc__presale" > 2685 <span class="cpc__presale-icon" aria-hidden="true"> 2686 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg> 2687 </span> 2688 <div class="cpc__presale-body"><div class="cpc__presale-title">The color is sold out- choose another color or pre-order the new batch!</div><div class="cpc__presale-text">Reserve yours in advance. We ship orders in order of arrival.</div></div> 2689 </div><div class="cpc__html-block" > 2690 <div class="golden-tinys-banner"> 2691 <div class="gt-photo"> 2692 <img src="https://cdn.shopify.com/s/files/1/0656/8031/0506/files/ChatGPT_Image_Aug_18_2026_from_New_Chat.png?v=1787048955"> 2693 </div> 2694</div> 2695 </div><div class="cpc__bundle-wrap" style="--bimg: 120px;" data-main-variant="54276348870998" ><div class="color_title"><h6>Choose your colors:</h6></div><div class="bundle-products"><div class="bundle-item"> 2696 <img src="//joyearbuds.com/cdn/shop/files/black_buds_transparent_1.png?v=1776769855&width=600" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/black_buds_transparent_1.png?v=1776769855&width=352 352w, //joyearbuds.com/cdn/shop/files/black_buds_transparent_1.png?v=1776769855&width=600 600w" width="600" height="597" loading="eager" id="main-bundle-img-template--31561534275926__product_new_RapwTf" class="bundle-img"> 2697 <div class="bundle-info"> 2698 <div class="bundle-title">Joy TinyS - Small premium earbuds</div> 2699 <div class="bundle-color"> 2700 <span class="bundle-sel">Valittu: <span id="main-selected-template--31561534275926__product_new_RapwTf">Black</span></span> 2701 <span class="bundle-soldout-tag" id="main-soldout-tag-template--31561534275926__product_new_RapwTf" hidden>SOLD OUT</span> 2702 <span class="bundle-presale-tag" id="main-presale-tag-template--31561534275926__product_new_RapwTf">Pre sale</span> 2703 </div><div class="cpc__opts" id="cpc-opts-template--31561534275926__product_new_RapwTf"><div class="cpc__opt-row" data-opt="1"> 2704 <div class="cpc__opt-head"><span class="cpc__opt-name">Väri</span> 2705 <span class="cpc__opt-val" data-opt-val="1">Black</span> 2706 </div> 2707 <div class="color-swatches"><button 2708 type="button" 2709 class="main-opt swatch active" 2710 data-opt="1" 2711 data-value="Black" 2712 style="background: #222222;" 2713 2714 aria-label="Color: Black" 2715 ></button><button 2716 type="button" 2717 class="main-opt swatch" 2718 data-opt="1" 2719 data-value="Pink" 2720 style="background: #FFB3CF;" 2721 2722 aria-label="Color: Pink" 2723 ></button><button 2724 type="button" 2725 class="main-opt swatch" 2726 data-opt="1" 2727 data-value="Gold" 2728 style="background: #d1b255;" 2729 2730 aria-label="Color: Gold" 2731 ></button></div> 2732 </div></div>
2732<script type="application/json" id="cpc-variants-template--31561534275926__product_new_RapwTf">[{"id":54276348870998,"o":["Black",null,null],"title":"Black","available":true,"img":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855\u0026width=600","full":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855\u0026width=900","srcset":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855\u0026width=480 480w, \/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855\u0026width=900 900w","delivery":"Delivery time: 1-3 days","presale":true,"presaleDelivery":"Delivery time ~ 3 weeks"},{"id":54276348936534,"o":["Pink",null,null],"title":"Pink","available":true,"img":"\/\/joyearbuds.com\/cdn\/shop\/files\/pink_buds_transparent_1_1.png?v=1776769855\u0026width=600","full":"\/\/joyearbuds.com\/cdn\/shop\/files\/pink_buds_transparent_1_1.png?v=1776769855\u0026width=900","srcset":"\/\/joyearbuds.com\/cdn\/shop\/files\/pink_buds_transparent_1_1.png?v=1776769855\u0026width=480 480w, \/\/joyearbuds.com\/cdn\/shop\/files\/pink_buds_transparent_1_1.png?v=1776769855\u0026width=900 900w","delivery":"Delivery time: 1-3 days","presale":false,"presaleDelivery":""},{"id":55061249950038,"o":["Gold",null,null],"title":"Gold","available":true,"img":"\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_28.png?v=1773758930\u0026width=600","full":"\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_28.png?v=1773758930\u0026width=900","srcset":"\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_28.png?v=1773758930\u0026width=480 480w, \/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_28.png?v=1773758930\u0026width=900 900w","delivery":"Delivery time: 1-3 days","presale":true,"presaleDelivery":"Delivery time ~ 4 weeks"}]</script>
2732<div class="bundle-low-stock" id="main-lowstock-template--31561534275926__product_new_RapwTf" hidden></div><div class="bundle-delivery bundle-delivery--presale" id="main-delivery-template--31561534275926__product_new_RapwTf"> 2733 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="1" y="3" width="15" height="13" rx="1"/><path d="M16 8h4l3 5v4h-7V8z"/><circle cx="5.5" cy="18.5" r="2.5"/><circle cx="18.5" cy="18.5" r="2.5"/></svg> 2734 <span id="main-delivery-text-template--31561534275926__product_new_RapwTf">Delivery time ~ 3 weeks</span> 2735 </div> 2736 </div> 2737 </div></div> 2738 </div><div id="shopify-block-AV01tN2N3c1FiS2QyQ__loox_reviews_loox_snippets_widget_3tTrgW" class="shopify-block shopify-app-block"><loox-snippets-widget 2739 2740 reviews-type='product-reviews' 2741 product-id='8033926512874' 2742 review-count='481' 2743 show-border='false' 2744 show-rating='true' 2745 color-scheme='default' 2746 shadow='' 2747 font-size='14px' 2748 background-color='' 2749 text-color='' 2750 name-color='' 2751 border-color='' 2752 rating-icon-color='' 2753 border-radius='16px' 2754 show-image='true' 2755 hide-arrows-mobile='false' 2756 reviews-limit='10' 2757 shadow-color='' 2758 alignment='left' 2759 max-width='' 2760 class="loox-widget" 2761> 2762</loox-snippets-widget> 2763 2764 2765</div> 2766<div class="cpc__spacer" style="height: 16px;" ></div><button 2767 class="cpc__cta" 2768 id="cpc-btn-template--31561534275926__product_new_RapwTf" 2769 type="button" 2770 aria-busy="false" 2771 data-text="Order Now" 2772 2773 2774 > 2775 <span class="cpc__cta-txt">Order Now</span> 2776 <span class="cpc__spinner" aria-hidden="true"></span> 2777 </button> 2778 <div class="cpc__error" id="cpc-err-template--31561534275926__product_new_RapwTf" role="alert" hidden></div><div class="cpc__trust" ><div class="cpc__t-badge"> 2779 <span class="cpc__t-icon" aria-hidden="true"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"/><path d="M3 3v5h5"/></svg></span> 2780 <span class="cpc__t-text">FREE DELIVERY</span> 2781 </div><div class="cpc__t-badge"> 2782 <span class="cpc__t-icon" aria-hidden="true"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><rect x="1" y="3" width="15" height="13" rx="1"/><path d="M16 8h4l3 5v4h-7V8z"/><circle cx="5.5" cy="18.5" r="2.5"/><circle cx="18.5" cy="18.5" r="2.5"/></svg></span> 2783 <span class="cpc__t-text">60-DAY RETURNS</span> 2784 </div><div class="cpc__t-badge"> 2785 <span class="cpc__t-icon" aria-hidden="true"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="6"/><path d="M8.21 13.89 7 23l5-3 5 3-1.21-9.12"/></svg></span> 2786 <span class="cpc__t-text">3 YEARS WARRANTY</span> 2787 </div></div><div class="cpc__html-block" > 2788 <div class="hexu-guarantee" style="margin-top: 30px;"> 2789<div class="g-text"> 2790<b>60-DAY SATISFACTION GUARANTEE</b> 2791<br>CEO Hexu guarantees your satisfaction.<br> 2792</div> 2793<div class="g-sign"> 2794<img src="https://cdn.shopify.com/s/files/1/0656/8031/0506/files/signature.png?v=1732541846"> 2795</div> 2796<div class="g-photo"> 2797<img src="https://cdn.shopify.com/s/files/1/0656/8031/0506/files/hexu.png?v=1732541846"> 2798</div> 2799</div> 2800 </div><div class="cpc__delivery" id="cpc-delivery-template--31561534275926__product_new_RapwTf-14" 2801 data-label-order="Ordered" 2802 data-label-ship="Dispatch" 2803 data-label-delivered="Delivered" 2804 data-order-text="" 2805 data-ship-offset="0" 2806 data-min-days="2" 2807 data-max-days="4" 2808 data-cutoff-hour="15" 2809 ><div class="cpc__delivery-title">ESTIMATED DELIVERY <br>(CHECK PRODUCT AVAILABILITY)</div><div class="cpc__delivery-steps"> 2810 <div class="cpc__delivery-step cpc__delivery-step--active"> 2811 <div class="cpc__delivery-dot"> 2812 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="20 6 9 17 4 12"/></svg> 2813 </div> 2814 <div class="cpc__delivery-label">Ordered</div> 2815 <div class="cpc__delivery-date" data-step="order">â</div> 2816 </div> 2817 <div class="cpc__delivery-step"> 2818 <div class="cpc__delivery-dot"> 2819 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="1" y="3" width="15" height="13"/><polygon points="16 8 20 8 23 11 23 16 16 16 16 8"/><circle cx="5.5" cy="18.5" r="2.5"/><circle cx="18.5" cy="18.5" r="2.5"/></svg> 2820 </div> 2821 <div class="cpc__delivery-label">Dispatch</div> 2822 <div class="cpc__delivery-date" data-step="ship">â</div> 2823 </div> 2824 <div class="cpc__delivery-step"> 2825 <div class="cpc__delivery-dot"> 2826 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg> 2827 </div> 2828 <div class="cpc__delivery-label">Delivered</div> 2829 <div class="cpc__delivery-date" data-step="delivered">â</div> 2830 </div> 2831 </div> 2832 </div><div class="cpc-icon-grid" style="--icon-size: 40px; --icon-font: 19px; --icon-text: 13px;" ><div class="cpc-icon-grid__items"><div class="cpc-icon-item"> 2833 <div class="cpc-icon-circle"><img src="//joyearbuds.com/cdn/shop/files/002-human.png?v=1745998846&width=240" alt="" srcset="//joyearbuds.com/cdn/shop/files/002-human.png?v=1745998846&width=80 80w" width="80" height="80" style="object-fit:contain;"> 2834</div> 2835 <div class="cpc-icon-text">Fits even the smallest ears</div> 2836 </div><div class="cpc-icon-item"> 2837 <div class="cpc-icon-circle"><img src="//joyearbuds.com/cdn/shop/files/001-musical-note.png?v=1745998847&width=240" alt="" srcset="//joyearbuds.com/cdn/shop/files/001-musical-note.png?v=1745998847&width=80 80w" width="80" height="80" style="object-fit:contain;"> 2838</div> 2839 <div class="cpc-icon-text">Premium HiFi sound quality</div> 2840 </div><div class="cpc-icon-item"> 2841 <div class="cpc-icon-circle"><img src="//joyearbuds.com/cdn/shop/files/003-battery-1.png?v=1745998848&width=240" alt="" srcset="//joyearbuds.com/cdn/shop/files/003-battery-1.png?v=1745998848&width=80 80w" width="80" height="80" style="object-fit:contain;"> 2842</div> 2843 <div class="cpc-icon-text">20h with charging case</div> 2844 </div><div class="cpc-icon-item"> 2845 <div class="cpc-icon-circle"><img src="//joyearbuds.com/cdn/shop/files/001-rewind.png?v=1745998846&width=240" alt="" srcset="//joyearbuds.com/cdn/shop/files/001-rewind.png?v=1745998846&width=80 80w" width="80" height="80" style="object-fit:contain;"> 2846</div> 2847 <div class="cpc-icon-text">6h continuous playback</div> 2848 </div><div class="cpc-icon-item"> 2849 <div class="cpc-icon-circle"><img src="//joyearbuds.com/cdn/shop/files/003-mic.png?v=1745998847&width=240" alt="" srcset="//joyearbuds.com/cdn/shop/files/003-mic.png?v=1745998847&width=80 80w" width="80" height="80" style="object-fit:contain;"> 2850</div> 2851 <div class="cpc-icon-text">Crystal-clear microphone</div> 2852 </div><div class="cpc-icon-item"> 2853 <div class="cpc-icon-circle"><img src="//joyearbuds.com/cdn/shop/files/002-battery.png?v=1745998846&width=240" alt="" srcset="//joyearbuds.com/cdn/shop/files/002-battery.png?v=1745998846&width=80 80w" width="80" height="80" style="object-fit:contain;"> 2854</div> 2855 <div class="cpc-icon-text">Full charge in just 1.5 hours</div> 2856 </div></div> 2857 </div><div id="shopify-block-AaGM3eTd3QzNvaW94a__loox_reviews_loox_video_slider_HCeLA6" class="shopify-block shopify-app-block"><loox-video-slider-widget 2858 2859 class="loox-widget" 2860 2861 2862 show-by-tag 2863 2864 2865 2866 layout='spotlight' 2867 2868 2869 2870 shadow='' 2871 2872 2873 2874 show-rating 2875 2876 2877 2878 show-reviewer-name 2879 2880 2881 2882 hide-arrows-mobile 2883 2884 2885 2886 auto-play 2887 2888 2889 2890 2891 2892 border-width='1' 2893 2894 2895 2896 border-radius='16' 2897 2898 2899 2900 text-color='' 2901 2902 2903 2904 rating-icon-color='' 2905 2906 2907 2908 border-color='' 2909 2910 2911 2912 play-button-color='' 2913 2914 2915 2916 shadow-color='' 2917 2918 2919 2920 product-id='' 2921 2922> 2923</loox-video-slider-widget> 2924 2925 2926</div> 2927</div></div><div class="cpc-sticky" id="cpc-sticky-template--31561534275926__product_new_RapwTf" aria-hidden="true" 2928 style="--grad: linear-gradient(135deg,#ff3d85 0%,#ff8042 100%); --pink: #ff3d85; --orange: #ff8042;"> 2929 <div class="cpc-sticky__inner"> 2930 <div class="cpc-sticky__info"><img src="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5.png?v=1779964205&width=120" alt="TinyS" srcset="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5.png?v=1779964205&width=48 48w" width="48" height="48" class="cpc-sticky__img"> 2931<div> 2932 <div class="cpc-sticky__title">TinyS</div> 2933 <div class="cpc-sticky__price"><s class="cpc-sticky__compare" hidden></s>
2934 <span class="cpc-sticky__current">159,00 â¬</span> 2935 </div> 2936 </div> 2937 </div> 2938 <button class="cpc-sticky__btn" id="cpc-sticky-btn-template--31561534275926__product_new_RapwTf" type="button" aria-busy="false" data-text="Tilaa nyt" > 2939 <span class="cpc-sticky__btn-txt">Tilaa nyt</span> 2940 <span class="cpc-sticky__spinner" aria-hidden="true"></span> 2941 </button> 2942 </div> 2943</div><style> 2944 #cpc-template--31561534275926__product_new_RapwTf { 2945 --pink:#ff3d85;--orange:#ff8042; 2946 --grad:linear-gradient(135deg,#ff3d85 0%,#ff8042 100%); 2947 --ink:#0D0D0D;--ink2:#555;--ink3:#888;--bg:#FFF;--bg2:#F6F6F6;--bg3:#EFEFEF;--border:#E4E4E4;--gold:#FFB800;--green:#00A87A;--red:#C8102E;--glow:rgba(255, 255, 255, 0); 2948 display:grid;grid-template-columns:1fr 1fr;align-items:start;background:var(--bg);font-family:'Inter',-apple-system,BlinkMacSystemFont,sans-serif;color:var(--ink);max-width:1400px;margin:0 auto; 2949 } 2950 #cpc-template--31561534275926__product_new_RapwTf .cpc__visual{display:flex;align-items:flex-start;justify-content:center;padding:40px 24px 32px 0;position:sticky;top:80px;} 2951 #cpc-template--31561534275926__product_new_RapwTf .cpc__product-wrap{position:relative;width:100%;max-width:480px;} 2952 #cpc-template--31561534275926__product_new_RapwTf .cpc__main-img{width:100%;height:auto;display:block;border-radius:16px;background:var(--bg2);transition:opacity .2s;} 2953 #cpc-template--31561534275926__product_new_RapwTf .cpc__img-placeholder{width:100%;min-height:380px;border-radius:16px;background:var(--bg2);display:flex;align-items:center;justify-content:center;color:var(--ink3);font-size:14px;font-weight:600;padding:24px;text-align:center;}#cpc-template--31561534275926__product_new_RapwTf .cpc__soldout-flag{position:absolute;top:14px;left:14px;z-index:5;background:#0D0D0D;color:#fff;font-size:12px;font-weight:900;letter-spacing:2px;text-transform:uppercase;padding:8px 14px;border-radius:6px;box-shadow:0 4px 16px rgba(0,0,0,.25);} 2954 #cpc-template--31561534275926__product_new_RapwTf .cpc__soldout-flag[hidden]{display:none;} 2955 #cpc-template--31561534275926__product_new_RapwTf .cpc__price-soldout{background:#0D0D0D;color:#fff;font-size:12px;font-weight:900;letter-spacing:1.5px;padding:5px 10px;border-radius:6px;text-transform:uppercase;} 2956 #cpc-template--31561534275926__product_new_RapwTf .cpc__price-soldout[hidden]{display:none;} 2957 #cpc-template--31561534275926__product_new_RapwTf .cpc__price--soldout .cpc__price-now{color:var(--ink3);text-decoration:line-through;} 2958 #cpc-template--31561534275926__product_new_RapwTf .bundle-soldout-tag{display:inline-block;margin-left:6px;background:#0D0D0D;color:#fff;font-size:9.5px;font-weight:900;letter-spacing:1.2px;text-transform:uppercase;padding:2.5px 7px;border-radius:4px;vertical-align:middle;} 2959 #cpc-template--31561534275926__product_new_RapwTf .bundle-soldout-tag[hidden]{display:none;}#cpc-template--31561534275926__product_new_RapwTf .bundle-presale-tag{display:inline-block;margin-left:6px;background:#534AB7;color:#fff;font-size:9.5px;font-weight:900;letter-spacing:1.2px;text-transform:uppercase;padding:2.5px 7px;border-radius:4px;vertical-align:middle;} 2960 #cpc-template--31561534275926__product_new_RapwTf .bundle-presale-tag[hidden]{display:none;} 2961 #cpc-template--31561534275926__product_new_RapwTf .bundle-delivery--presale{color:#534AB7;} 2962 #cpc-template--31561534275926__product_new_RapwTf .bundle-delivery--presale svg{color:#534AB7;} 2963 2964 #cpc-template--31561534275926__product_new_RapwTf .bundle-low-stock{display:flex;align-items:center;gap:6px;margin-top:8px;font-size:12.5px;font-weight:700;color:#D9541E;} 2965 #cpc-template--31561534275926__product_new_RapwTf .bundle-low-stock[hidden]{display:none;} 2966 #cpc-template--31561534275926__product_new_RapwTf .bundle-low-stock::before{content:'';width:7px;height:7px;border-radius:50%;background:#f07d3f;flex-shrink:0;animation:cpc-blink-template--31561534275926__product_new_RapwTf 1.6s ease-in-out infinite;} 2967 #cpc-template--31561534275926__product_new_RapwTf .bundle-low-stock--out{color:var(--red);} 2968 #cpc-template--31561534275926__product_new_RapwTf .bundle-low-stock--out::before{background:var(--red);animation:none;}#cpc-template--31561534275926__product_new_RapwTf .cpc__opts{display:flex;flex-direction:column;gap:18px;margin-top:14px;} 2969 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:9px;} 2970 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-name{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:1.2px;color:var(--ink3);} 2971 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-val{font-size:13px;font-weight:700;color:var(--ink);} 2972 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-row .color-swatches{margin-top:0;} 2973 #cpc-template--31561534275926__product_new_RapwTf .bundle-sel[hidden]{display:none;} 2974 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-pills{display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:8px;} 2975 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-pill{display:flex;align-items:center;justify-content:center;text-align:center;min-height:46px;padding:8px 12px;border:1.5px solid var(--border);border-radius:10px;background:#fff;color:var(--ink);font-size:14px;font-weight:700;line-height:1.25;cursor:pointer;transition:border-color .15s,background .15s,color .15s;} 2976 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-pill[data-wide]{grid-column:1 / -1;} 2977 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-pill-label{display:block;} 2978 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-pill:hover{border-color:var(--ink);} 2979 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-pill.active{border-color:var(--ink);background:var(--ink);color:#fff;} 2980 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-pill--soldout{color:var(--ink3);border-style:dashed;background:var(--bg2);} 2981 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-pill--soldout .cpc__opt-pill-label{text-decoration:line-through;text-decoration-color:var(--red);text-decoration-thickness:1.5px;} 2982 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-pill--soldout.active{background:var(--ink);color:#fff;border-style:solid;border-color:var(--red);} 2983 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-pill:focus-visible,#cpc-template--31561534275926__product_new_RapwTf .swatch:focus-visible{outline:2.5px solid var(--pink);outline-offset:3px;} 2984 2985 #cpc-template--31561534275926__product_new_RapwTf .cpc__carousel{display:flex;align-items:center;gap:6px;margin-top:12px;position:relative;} 2986 #cpc-template--31561534275926__product_new_RapwTf .cpc__thumbs{display:flex;gap:8px;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none;flex:1;padding:4px 2px;} 2987 #cpc-template--31561534275926__product_new_RapwTf .cpc__thumbs::-webkit-scrollbar{display:none;} 2988 #cpc-template--31561534275926__product_new_RapwTf .cpc__thumb{width:68px;height:68px;border:2px solid var(--border);border-radius:10px;padding:4px;background:var(--bg2);cursor:pointer;overflow:hidden;flex-shrink:0;transition:border-color .15s,box-shadow .15s;display:flex;align-items:center;justify-content:center;} 2989 #cpc-template--31561534275926__product_new_RapwTf .cpc__thumb:hover{border-color:var(--pink);} 2990 #cpc-template--31561534275926__product_new_RapwTf .cpc__thumb--active{border-color:var(--pink);box-shadow:0 0 0 2px var(--glow);} 2991 #cpc-template--31561534275926__product_new_RapwTf .cpc__thumb-img{width:100%;height:100%;object-fit:contain;display:block;} 2992 #cpc-template--31561534275926__product_new_RapwTf .cpc__carousel-arrow{width:32px;height:32px;border-radius:50%;border:1.5px solid var(--border);background:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0;color:var(--ink);transition:border-color .15s,background .15s,opacity .15s;padding:0;} 2993 #cpc-template--31561534275926__product_new_RapwTf .cpc__carousel-arrow:hover{border-color:var(--pink);color:var(--pink);} 2994 #cpc-template--31561534275926__product_new_RapwTf .cpc__carousel-arrow[disabled]{opacity:.3;cursor:default;} 2995 #cpc-template--31561534275926__product_new_RapwTf .cpc__offer{padding:40px 40px 32px 40px;border-left:1px solid var(--border);} 2996 #cpc-template--31561534275926__product_new_RapwTf .cpc__camp-tag{display:inline-block;background:var(--grad);color:#fff;font-size:10px;font-weight:900;letter-spacing:2px;text-transform:uppercase;padding:5px 13px;border-radius:5px;margin-bottom:14px;} 2997 #cpc-template--31561534275926__product_new_RapwTf .cpc__h1{font-size:clamp(24px,2.8vw,42px);font-weight:900;color:var(--ink);line-height:1.08;letter-spacing:-1.5px;margin-bottom:10px;margin-top:8px;} 2998 #cpc-template--31561534275926__product_new_RapwTf .cpc__hl{background:var(--grad);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;} 2999 #cpc-template--31561534275926__product_new_RapwTf .cpc__sub{font-size:14px;color:var(--ink2);line-height:1.6;margin-bottom:20px;} 3000 #cpc-template--31561534275926__product_new_RapwTf .cpc__text-block,#cpc-template--31561534275926__product_new_RapwTf .cpc__html-block{margin-bottom:14px;} 3001 #cpc-template--31561534275926__product_new_RapwTf .cpc__countdown{display:inline-flex;flex-direction:column;gap:10px;background:#fff;border:1px solid var(--border);border-radius:14px;padding:14px 18px;margin-bottom:14px;width:100%;box-sizing:border-box;} 3002 #cpc-template--31561534275926__product_new_RapwTf .cpc__countdown-label{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:2px;color:var(--pink);} 3003 #cpc-template--31561534275926__product_new_RapwTf .cpc__countdown-digits{display:flex;align-items:stretch;gap:0;} 3004 #cpc-template--31561534275926__product_new_RapwTf .cpc__digit-box{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;flex:1;padding:10px 4px 8px;border-radius:10px;background:var(--bg2);position:relative;overflow:hidden;} 3005 #cpc-template--31561534275926__product_new_RapwTf .cpc__digit-box::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:var(--grad);border-radius:2px 2px 0 0;} 3006 #cpc-template--31561534275926__product_new_RapwTf .cpc__digit{font-size:28px;font-weight:900;font-variant-numeric:tabular-nums;color:var(--ink);line-height:1;letter-spacing:-1px;} 3007 #cpc-template--31561534275926__product_new_RapwTf .cpc__digit-lbl{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:1.2px;color:var(--ink3);} 3008 #cpc-template--31561534275926__product_new_RapwTf .cpc__digit-sep{dis
3008play:flex;align-items:center;justify-content:center;padding:0 6px 16px;font-size:20px;font-weight:900;color:var(--pink);flex-shrink:0;align-self:center;} 3009 #cpc-template--31561534275926__product_new_RapwTf .cpc__price{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:4px 0 18px;} 3010 #cpc-template--31561534275926__product_new_RapwTf .cpc__price-now{font-size:28px;font-weight:900;color:#C8102E;letter-spacing:-0.5px;line-height:1;} 3011 #cpc-template--31561534275926__product_new_RapwTf .cpc__price-was{font-size:17px;color:var(--ink3);font-weight:500;} 3012 #cpc-template--31561534275926__product_new_RapwTf .cpc__price-badge{background:#C8102E;color:#fff;font-size:12px;font-weight:800;padding:5px 10px;border-radius:6px;letter-spacing:.3px;} 3013 #cpc-template--31561534275926__product_new_RapwTf .cpc__price-was[hidden],#cpc-template--31561534275926__product_new_RapwTf .cpc__price-badge[hidden],#cpc-template--31561534275926__product_new_RapwTf .cpc__compare-price[hidden],#cpc-template--31561534275926__product_new_RapwTf .cpc__val-saving[hidden]{display:none;} 3014 #cpc-template--31561534275926__product_new_RapwTf .cpc__val-box{background:var(--bg2);border:1px solid var(--border);border-radius:12px;padding:13px 16px;margin-bottom:14px;} 3015 #cpc-template--31561534275926__product_new_RapwTf .cpc__val-row{display:flex;justify-content:space-between;align-items:center;font-size:13px;color:var(--ink2);padding:4px 0;} 3016 #cpc-template--31561534275926__product_new_RapwTf .cpc__val-row--total{border-top:1px solid var(--border);margin-top:6px;padding-top:10px;color:var(--ink);font-weight:700;font-size:14px;} 3017 #cpc-template--31561534275926__product_new_RapwTf .cpc__main-price{display:flex;align-items:center;gap:6px;} 3018 #cpc-template--31561534275926__product_new_RapwTf .cpc__compare-price{color:var(--ink3);font-weight:400;font-size:12px;} 3019 #cpc-template--31561534275926__product_new_RapwTf .cpc__free-lbl{color:var(--green);font-weight:700;} 3020 #cpc-template--31561534275926__product_new_RapwTf .cpc__free-lbl s{color:var(--ink3);font-weight:400;margin-left:5px;} 3021 #cpc-template--31561534275926__product_new_RapwTf .cpc__big-price{font-size:22px;font-weight:900;letter-spacing:-0.5px;} 3022 #cpc-template--31561534275926__product_new_RapwTf .cpc__val-hero{text-align:center;padding-bottom:12px;margin-bottom:10px;border-bottom:1px solid var(--border);} 3023 #cpc-template--31561534275926__product_new_RapwTf .cpc__val-hero-num{display:block;font-size:44px;font-weight:900;letter-spacing:-1.5px;line-height:1;background:var(--grad);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;padding:4px 0;} 3024 #cpc-template--31561534275926__product_new_RapwTf .cpc__val-hero-lbl{display:block;font-size:13px;font-weight:700;color:var(--ink2);margin-top:4px;} 3025 #cpc-template--31561534275926__product_new_RapwTf .cpc__val-saving{margin-top:10px;text-align:center;font-size:13px;font-weight:800;color:var(--green);} 3026 .bundle-products{display:flex;flex-direction:column;gap:0;margin-bottom:14px;} 3027 .color_title{margin-bottom:12px;} 3028 .color_title h6{font-size:13px;font-weight:700;color:var(--ink);margin:0;letter-spacing:-0.1px;} 3029 .bundle-item{display:flex;gap:16px;align-items:flex-start;padding:14px 0;} 3030 .bundle-item + .bundle-item{border-top:1px solid var(--border);} 3031 .bundle-img{width:var(--bimg,120px);height:var(--bimg,120px);background:#f4f4f4;border-radius:14px;object-fit:contain;padding:10px;flex-shrink:0;} 3032 .bundle-info{flex:1;min-width:0;} 3033 .bundle-title{font-size:15px;font-weight:700;color:var(--ink);line-height:1.3;letter-spacing:-0.2px;} 3034 .bundle-color{font-size:13px;color:var(--ink3);margin-top:4px;} 3035 .color-swatches{display:flex;gap:10px;margin-top:12px;flex-wrap:wrap;} 3036 .swatch{width:28px;height:28px;border-radius:50%;border:2px solid transparent;cursor:pointer;flex-shrink:0;font-size:0;transition:transform .15s;outline:2px solid rgba(0,0,0,0.12);outline-offset:1px;position:relative;} 3037 .swatch:hover{transform:scale(1.1);} 3038 .swatch.active{outline:2.5px solid #111;outline-offset:2px;}.swatch--soldout{opacity:.45;filter:grayscale(.35);} 3039 .swatch--soldout::after{ 3040 content:'';position:absolute;
3040left:-3px;right:-3px;top:50%;height:2px; 3041 background:#C8102E;transform:rotate(-45deg);transform-origin:center;border-radius:2px; 3042 box-shadow:0 0 0 1px rgba(255,255,255,.75); 3043 } 3044 .swatch--soldout:hover{transform:none;} 3045 .swatch--soldout.active{outline-color:#C8102E;} 3046 3047 .bundle-img-link{display:block;flex-shrink:0;} 3048 .bundle-free{display:flex;align-items:center;gap:8px;margin-top:6px;} 3049 .bundle-free-badge{display:inline-block;background:#E6F7F1;color:#00A87A;font-size:11px;font-weight:900;letter-spacing:1px;text-transform:uppercase;padding:3px 8px;border-radius:5px;line-height:1.3;} 3050 .bundle-free-was{font-size:13px;color:#888;font-weight:500;}#cpc-template--31561534275926__product_new_RapwTf .cpc__offer-box{background:var(--bg2);border:1px solid var(--border);border-radius:14px;padding:18px 20px 16px;margin:4px 0 18px;} 3051 #cpc-template--31561534275926__product_new_RapwTf .cpc__ob-price{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding-bottom:14px;border-bottom:1px solid var(--border);} 3052 #cpc-template--31561534275926__product_new_RapwTf .cpc__ob-now{font-size:clamp(30px,3vw,38px);font-weight:900;color:var(--ink);letter-spacing:-1px;line-height:1;} 3053 #cpc-template--31561534275926__product_new_RapwTf .cpc__ob-was{font-size:16px;color:var(--ink3);font-weight:500;} 3054 #cpc-template--31561534275926__product_new_RapwTf .cpc__ob-badge{background:var(--grad);color:#fff;font-size:12px;font-weight:800;padding:4px 10px;border-radius:999px;letter-spacing:.2px;} 3055 #cpc-template--31561534275926__product_new_RapwTf .cpc__ob-was[hidden],#cpc-template--31561534275926__product_new_RapwTf .cpc__ob-badge[hidden],#cpc-template--31561534275926__product_new_RapwTf .cpc__ob-row[hidden],#cpc-template--31561534275926__product_new_RapwTf .cpc__offer-box .cpc__price-soldout[hidden]{display:none;} 3056 #cpc-template--31561534275926__product_new_RapwTf .cpc__offer-box--soldout .cpc__ob-now{color:var(--ink3);text-decoration:line-through;} 3057 #cpc-template--31561534275926__product_new_RapwTf .cpc__ob-rows{display:flex;flex-direction:column;gap:9px;padding-top:14px;} 3058 #cpc-template--31561534275926__product_new_RapwTf .cpc__ob-row{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--ink2);line-height:1.4;} 3059 #cpc-template--31561534275926__product_new_RapwTf .cpc__ob-row strong{color:var(--ink);font-weight:800;} 3060 #cpc-template--31561534275926__product_new_RapwTf .cpc__ob-row svg{flex-shrink:0;color:var(--green);} 3061 #cpc-template--31561534275926__product_new_RapwTf .cpc__ob-green,#cpc-template--31561534275926__product_new_RapwTf .cpc__ob-row strong.cpc__ob-green{color:var(--green);font-weight:700;} 3062 #cpc-template--31561534275926__product_new_RapwTf .cpc__ob-row--delivery{font-size:13px;font-weight:600;} 3063 @media (max-width:480px){#cpc-template--31561534275926__product_new_RapwTf .cpc__offer-box{padding:16px 14px 14px;}#cpc-template--31561534275926__product_new_RapwTf .cpc__ob-row{font-size:13px;}} 3064 .bundle-title--link{display:block;color:var(--ink);text-decoration:none;font-size:15px;font-weight:700;line-height:1.3;letter-spacing:-0.2px;} 3065 .bundle-title--link:hover{text-decoration:underline;} 3066 .bundle-delivery{display:flex;align-items:center;gap:5px;margin-top:8px;font-size:12px;font-weight:600;color:var(--green);} 3067 .bundle-delivery svg{flex-shrink:0;color:var(--green);} 3068 #cpc-template--31561534275926__product_new_RapwTf .cpc__qty-wrap{display:flex;align-items:center;gap:16px;margin-bottom:14px;} 3069 #cpc-template--31561534275926__product_new_RapwTf .cpc__qty-label{font-size:13px;font-weight:700;color:var(--ink);white-space:nowrap;} 3070 #cpc-template--31561534275926__product_new_RapwTf .cpc__qty-ctrl{display:flex;align-items:center;border:1.5px solid var(--border);border-radius:10px;overflow:hidden;background:var(--bg);} 3071 #cpc-template--31561534275926__product_new_RapwTf .cpc__qty-btn{width:42px;height:42px;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ink);transition:background .15s,color .15s;flex-shrink:0;padding:0;} 3072 #cpc-template--31561534275926__product_new_RapwTf .cpc__qty-btn:hover:not([disabled]){background:var(--bg2);color:var(--pink);} 3073 #cpc-template--31561534275926__product_new_RapwTf .cpc__qty-btn[disabled]{opacity:.3;cursor:not-allowed;} 3074 #cpc-template--31561534275926__product_new_RapwTf .cpc__qty-input{width:52px;text-align:center;border:none;border-left:1.5px solid var(--border);border-right:1.5px solid var(--border);font-size:17px;font-weight:800;font-variant-numeric:tabular-nums;color:var(--ink);background:transparent;-moz-appearance:textfield;padding:0;height:42px;outline:none;cursor:default;} 3075 #cpc-template--31561534275926__product_new_RapwTf .cpc__qty-input::-webkit-outer-spin-button,#cpc-template--31561534275926__product_new_RapwTf .cpc__qty-input::-webkit-inner-spin-button{-webkit-appearance:none;} 3076 #cpc-template--31561534275926__product_new_RapwTf .cpc__stock{display:flex;align-items:center;gap:7px;font-size:13px;color:#000;margin-bottom:14px;} 3077 #cpc-template--31561534275926__product_new_RapwTf .cpc__stock strong{color:var(--ink);} 3078 #cpc-template--31561534275926__product_new_RapwTf .cpc__stock-dot{width:8px;height:8px;background:#f07d3f;border-radius:50%;flex-shrink:0;animation:cpc-blink-template--31561534275926__product_new_RapwTf 1.6s ease-in-out infinite;} 3079 @keyframes cpc-blink-template--31561534275926__product_new_RapwTf{0%,100%{opacity:1}50%{opacity:.2}} 3080 #cpc-template--31561534275926__product_new_RapwTf .cpc__presale{display:flex;gap:12px;align-items:flex-start;background:#EEEDFE;border:1px solid #CECBF6;border-radius:12px;padding:13px 16px;margin-bottom:14px;} 3081 #cpc-template--31561534275926__product_new_RapwTf .cpc__presale-icon{color:#534AB7;flex-shrink:0;margin-top:1px;} 3082 #cpc-template--31561534275926__product_new_RapwTf .cpc__presale-title{font-size:14px;font-weight:800;color:#3C3489;line-height:1.4;} 3083 #cpc-template--31561534275926__product_new_RapwTf .cpc__presale-text{font-size:13px;color:#534AB7;line-height:1.5;margin-top:2px;} 3084 #cpc-template--31561534275926__product_new_RapwTf .cpc__gift-offer{display:flex;gap:12px;align-items:center;background:#FFF0F6;border:1.5px dashed var(--pink);border-radius:12px;padding:13px 16px;margin-bottom:14px;} 3085 #cpc-template--31561534275926__product_new_RapwTf .cpc__gift-icon{color:var(--pink);flex-shrink:0;} 3086 #cpc-template--31561534275926__product_new_RapwTf .cpc__gift-body{flex:1;min-width:0;} 3087 #cpc-template--31561534275926__product_new_RapwTf .cpc__gift-title{font-size:14px;font-weight:800;color:var(--ink);line-height:1.35;} 3088 #cpc-template--31561534275926__product_new_RapwTf .cpc__gift-text{font-size:12.5px;color:var(--ink2);margin-top:2px;line-height:1.45;} 3089 #cpc-template--31561534275926__product_new_RapwTf .cpc__gift-price{text-align:right;flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;
3089gap:2px;} 3090 #cpc-template--31561534275926__product_new_RapwTf .cpc__gift-price s{font-size:12px;color:var(--ink3);font-weight:400;} 3091 #cpc-template--31561534275926__product_new_RapwTf .cpc__gift-price span{font-size:15px;font-weight:900;color:var(--green);} 3092 #cpc-template--31561534275926__product_new_RapwTf .cpc__reserve{margin-bottom:14px;} 3093 #cpc-template--31561534275926__product_new_RapwTf .cpc__reserve-row{display:flex;justify-content:space-between;align-items:baseline;font-size:13px;color:var(--ink2);margin-bottom:6px;} 3094 #cpc-template--31561534275926__product_new_RapwTf .cpc__reserve-row strong{color:var(--ink);font-weight:800;font-variant-numeric:tabular-nums;} 3095 #cpc-template--31561534275926__product_new_RapwTf .cpc__reserve-bar{height:8px;background:var(--bg3);border-radius:4px;overflow:hidden;} 3096 #cpc-template--31561534275926__product_new_RapwTf .cpc__reserve-fill{height:100%;background:var(--grad);border-radius:4px;} 3097 #cpc-template--31561534275926__product_new_RapwTf .cpc__reserve-note{font-size:11.5px;color:var(--ink3);margin-top:6px;} 3098 #cpc-template--31561534275926__product_new_RapwTf .cpc__delivery{border:1px solid var(--border);border-radius:14px;padding:16px 14px 14px;margin-bottom:14px;background:var(--bg);} 3099 #cpc-template--31561534275926__product_new_RapwTf .cpc__delivery-title{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:2px;color:var(--ink3);margin-bottom:14px;text-align:center;} 3100 #cpc-template--31561534275926__product_new_RapwTf .cpc__delivery-steps{display:flex;align-items:flex-start;} 3101 #cpc-template--31561534275926__product_new_RapwTf .cpc__delivery-step{flex:1;display:flex;flex-direction:column;align-items:center;text-align:center;position:relative;} 3102 #cpc-template--31561534275926__product_new_RapwTf .cpc__delivery-dot{width:30px;height:30px;border-radius:50%;background:var(--bg2);border:2px solid var(--border);display:flex;align-items:center;justify-content:center;z-index:2;position:relative;} 3103 #cpc-template--31561534275926__product_new_RapwTf .cpc__delivery-dot svg{width:14px;height:14px;stroke:var(--ink3);} 3104 #cpc-template--31561534275926__product_new_RapwTf .cpc__delivery-step--active .cpc__delivery-dot{background:#EAF9F3;border-color:var(--green);} 3105 #cpc-template--31561534275926__product_new_RapwTf .cpc__delivery-step--active .cpc__delivery-dot svg{stroke:var(--green);} 3106 #cpc-template--31561534275926__product_new_RapwTf .cpc__delivery-step::after{content:'';position:absolute;top:14px;left:50%;width:100%;height:2px;background:var(--border);z-index:1;} 3107 #cpc-template--31561534275926__product_new_RapwTf .cpc__delivery-step:last-child::after{display:none;} 3108 #cpc-template--31561534275926__product_new_RapwTf .cpc__delivery-step--active::after{background:linear-gradient(90deg,var(--green),var(--border));} 3109 #cpc-template--31561534275926__product_new_RapwTf .cpc__delivery-label{font-size:11px;font-weight:800;color:var(--ink);margin-top:8px;} 3110 #cpc-template--31561534275926__product_new_RapwTf .cpc__delivery-date{font-size:11px;font-weight:600;color:var(--ink2);margin-top:2px;} 3111 #cpc-template--31561534275926__product_new_RapwTf .cpc__delivery-step--active .cpc__delivery-date{color:var(--green);} 3112 #cpc-template--31561534275926__product_new_RapwTf .cpc__cta{width:100%;background:var(--grad);color:#fff;border:none;border-radius:12px;padding:18px 22px;font-size:16px;font-weight:900;cursor:pointer;transition:transform .15s,box-shadow .15s;box-shadow:0 6px 24px rgba(255, 61, 132, 0);margin-bottom:14px;display:flex;align-items:center;justify-content:center;gap:10px;letter-spacing:0.2px;position:relative;min-height:56px;} 3113 #cpc-template--31561534275926__product_new_RapwTf .cpc__cta:hover:not([disabled]):not([aria-busy="true"]){transform:translateY(-2px);box-shadow:0 12px 36px rgba(255, 61, 132, 0);} 3114 #cpc-template--31561534275926__product_new_RapwTf .cpc__cta:active:not([disabled]){transform:none;} 3115 #cpc-template--31561534275926__product_new_RapwTf .cpc__cta[disabled]{background:var(--bg3);color:var(--ink3);box-shadow:none;cursor:not-allowed;letter-spacing:2px;text-transform:uppercase;font-size:14px;} 3116 #cpc-template--31561534275926__product_new_RapwTf .cpc__cta[aria-busy="true"]{opacity:.75;cursor:wait;} 3117 #cpc-template--31561534275926__product_new_RapwTf .cpc__cta[aria-busy="true"] .cpc__cta-txt{opacity:0;} 3118 #cpc-template--31561534275926__product_new_RapwTf .cpc__spinner{display:none;width:20px;height:20px;border:2.5px solid rgba(255,255,255,0.35);border-top-color:#fff;border-radius:50%;animation:cpc-spin-template--31561534275926__product_new_RapwTf .7s linear infinite;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);} 3119 #cpc-template--31561534275926__product_new_RapwTf .cpc__cta[aria-busy="true"] .cpc__spinner{display:block;} 3120 @keyframes cpc-spin-template--31561534275926__product_new_RapwTf{to{transform:translate(-50%,-50%) rotate(360deg);}} 3121 #cpc-template--31561534275926__product_new_RapwTf .cpc__error{background:#FFF2F2;border:1px solid #FFCCCC;border-radius:8px;padding:10px 14px;font-size:13px;color:#CC2222;margin-bottom:12px;} 3122 #cpc-template--31561534275926__product_new_RapwTf .cpc__error[hidden]{display:none;} 3123 #cpc-template--31561534275926__product_new_RapwTf .cpc__cta-secondary{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;margin:0 0 14px;background:transparent;color:var(--ink);border:1.5px solid var(--border);border-radius:12px;padding:15px 22px;font-size:15px;font-weight:700;text-decoration:none;transition:border-color .15s,background .15s;} 3124 #cpc-template--31561534275926__product_new_RapwTf .cpc__cta-secondary:hover{border-color:var(--ink);background:var(--bg2);color:var(--ink);} 3125 #cpc-template--31561534275926__product_new_RapwTf .cpc__cta-secondary svg{flex-shrink:0;transition:transform .15s;} 3126 #cpc-template--31561534275926__product_new_RapwTf .cpc__cta-secondary:hover svg{transform:translateX(3px);} 3127 #cpc-template--31561534275926__product_new_RapwTf .cpc__cta-secondary--link{border:none;padding:4px 0;font-size:14px;font-weight:600;color:var(--ink2);text-decoration:underline;text-underline-offset:3px;} 3128 #cpc-template--31561534275926__product_new_RapwTf .cpc__cta-secondary--link:hover{background:transparent;color:var(--ink);} 3129 #cpc-template--31561534275926__product_new_RapwTf .cpc__payment{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap;} 3130 #cpc-template--31561534275926__product_new_RapwTf .cpc__payment-lbl{font-size:11px;color:var(--ink3);white-space:nowrap;} 3131 #cpc-template--31561534275926__product_new_RapwTf .cpc__payment-icons{display:flex;gap:5px;align-items:center;flex-wrap:wrap;} 3132 #cpc-template--31561534275926__product_new_RapwTf .cpc__pay-icon{height:22px;width:auto;border-radius:3px;opacity:.7;transition:opacity .15s;} 3133 #cpc-template--31561534275926__product_new_RapwTf .cpc__pay-icon:hover{opacity:1;} 3134 #cpc-template--31561534275926__product_new_RapwTf .cpc__trust{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin:20px 0;} 3135 #cpc-template--31561534275926__product_new_RapwTf .cpc__t-badge{display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;border-radius:12px;padding:16px 10px;} 3136 #cpc-template--31561534275926__product_new_RapwTf .cpc__t-icon{display:flex;align-items:center;justify-content:center;color:var(--ink);} 3137 #cpc-template--31561534275926__product_new_RapwTf .cpc__t-text{font-size:10px;font-weight:600;color:var(--ink);line-height:1.35;letter-spacing:-0.1px;} 3138 #cpc-template--31561534275926__product_new_RapwTf .cpc-icon-grid{margin-bottom:14px;border-top:1px solid var(--border);padding-top:16px;} 3139 #cpc-template--31561534275926__product_new_RapwTf .cpc-icon-grid__label{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:1.5px;color:var(--ink3);margin-bottom:12px;} 3140 #cpc-template--31561534275926__product_new_RapwTf .cpc-icon-grid__items{display:grid;grid-template-columns:1fr 1fr;gap:32px 16px;} 3141 #cpc-template--31561534275926__product_new_RapwTf .cpc-icon-item{display:flex;flex-direction:column;align-items:center;text-align:center;gap:12px;} 3142 #cpc-template--31561534275926__product_new_RapwTf .cpc-icon-circle{width:var(--icon-size,40px);height:var(--icon-size,40px);background:transparent;border-radius:0;display:flex;align-items:center;justify-content:center;font-size:var(--icon-font,28px);flex-shrink:0;color:var(--ink);} 3143 #cpc-template--31561534275926__product_new_RapwTf .cpc-icon-circle img{width:100%;height:100%;object-fit:contain;} 3144 #cpc-template--31561534275926__product_new_RapwTf .cpc-icon-text{font-size:13px;font-weight:700;color:var(--ink);line-height:1.3;} 3145 #cpc-template--31561534275926__product_new_RapwTf .cpc__spacer{display:block;} 3146 .cpc-sticky{position:fixed;bottom:0;left:0;right:0;z-index:999;background:#fff;border-top:1px solid #E4E4E4;box-shadow:0 -4px 24px rgba(0,0,0,0.10);transform:translateY(100%);transition:transform .35s cubic-bezier(.4,0,.2,1);pointer-events:none;} 3147 .cpc-sticky[aria-hidden="false"]{transform:translateY(0);pointer-events:auto;} 3148 .cpc-sticky__inner{max-width:1200px;margin:0 auto;padding:12px 24px;display:flex;align-items:center;justify-content:space-between;gap:16px;} 3149 .cpc-sticky__info{display:flex;align-items:center;gap:12px;flex:1;min-width:0;} 3150 .cpc-sticky__img{width:48px;height:48px;object-fit:contain;border-radius:8px;background:#F6F6F6;flex-shrink:0;} 3151 .cpc-sticky__title{font-size:14px;font-weight:700;color:#0D0D0D;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;} 3152 .cpc-sticky__price{font-size:13px;color:#888;margin-top:2px;} 3153 .cpc-sticky__compare{color:#bbb;margin-right:6px;} 3154 .cpc-sticky__compare[hidden]{display:none;} 3155 .cpc-sticky__btn{flex-shrink:0;background:var(--grad);color:#fff;border:none;border-radius:100px;padding:14px 32px;font-size:15px;font-weight:900;cursor:pointer;box-shadow:0 4px 20px rgba(255,61,133,0.35);transition:transform .15s,box-shadow .15s,opacity .2s;display:flex;align-items:center;justify-content:center;min-height:50px;min-width:180px;position:relative;white-space:nowrap;} 3156 .cpc-sticky__btn:hover:not([disabled]):not([aria-busy="true"]){transform:translateY(-2px);box-shadow:0 8px 32px rgba(255,61,133,0.5);} 3157 .cpc-sticky__btn[disabled]{background:#e5e5e5;color:#999;box-shadow:none;cursor:not-allowed;letter-spacing:1.5px;text-transform:uppercase;font-size:13px;} 3158 .cpc-sticky__btn[aria-busy="true"]{opacity:.75;cursor:wait;} 3159 .cpc-sticky__btn[aria-busy="true"] .cpc-sticky__btn-txt{opacity:0;} 3160 .cpc-sticky__spinner{display:none;width:18px;height:18px;border:2px solid rgba(255,255,255,0.35);border-top-color:#fff;border-radius:50%;animation:cpc-sticky-spin .7s linear infinite;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);} 3161 .cpc-sticky__btn[aria-busy="true"] .cpc-sticky__spinner{display:block;} 3162 @keyframes cpc-sticky-spin{to{transform:translate(-50%,-50%) rotate(360deg);}} 3163 @media (max-width:600px){.cpc-sticky__info{display:none;}.cpc-sticky__btn{width:100%;min-width:0;}.cpc-sticky__inner{padding:10px 16px;}} 3164 @media (max-width:960px){ 3165 #cpc-template--31561534275926__product_new_RapwTf{grid-template-columns:1fr;} 3166 #cpc-template--31561534275926__product_new_RapwTf .cpc__visual{padding:16px 16px 0 16px;position:static;} 3167 #cpc-template--31561534275926__product_new_RapwTf .cpc__product-wrap{max-width:100%;margin:0 auto;} 3168 #cpc-template--31561534275926__product_new_RapwTf .cpc__offer{padding:20px 16px 40px 16px;border-left:none;border-top:1px solid var(--border);margin-top:0;} 3169 } 3170 @media (max-width:480px){ 3171 #cpc-template--31561534275926__product_new_RapwTf .cpc__thumb{width:56px;height:56px;} 3172 #cpc-template--31561534275926__product_new_RapwTf .cpc__carousel-arrow{width:28px;height:28px;} 3173 #cpc-template--31561534275926__product_new_RapwTf .cpc__h1{font-size:28px;letter-spacing:-1px;} 3174 .bundle-img{width:min(var(--bimg,120px),120px);height:min(var(--bimg,120px),120px);} 3175 .bundle-title{font-size:14px;} 3176 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-pills{grid-template-columns:repeat(auto-fit,minmax(96px,1fr));gap:7px;} 3177 #cpc-template--31561534275926__product_new_RapwTf .cpc__opt-pill{min-height:44px;font-size:13px;padding:8px 10px;} 3178 .bundle-item{gap:12px;} 3179 } 3180 @media (prefers-reduced-motion:reduce){ 3181 #cpc-template--31561534275926__product_new_RapwTf *,#cpc-template--31561534275926__product_new_RapwTf *::before,#cpc-template--31561534275926__product_new_RapwTf *::after,.cpc-sticky,.cpc-sticky *{transition:none!important;animation:none!important;} 3182 } 3183</style> 3184
3185<script> 3186(function () { 3187 'use strict'; 3188 var SID = "template--31561534275926__product_new_RapwTf"; 3189 var DISCOUNT = ""; 3190 var selectedGiftId = null; 3191 var MONEY_FMT = "{{amount_with_comma_separator}} â¬"; 3192 function formatCents(cents) { 3193 cents = Math.round(Number(cents) || 0); 3194 function fmt(n, dec, thou, decSep) { 3195 var s = (n / 100).toFixed(dec).split('.'); 3196 s[0] = s[0].replace(/\B(?=(\d{3})+(?!\d))/g, thou); 3197 return s.join(decSep); 3198 } 3199 return (MONEY_FMT || '[amount] â¬').replace('[amount]', fmt(cents, 2, ' ', ',')).replace(/\{\{\s*(\w+)\s*\}\}/, function (m, k) { 3200 if (k === 'amount_no_decimals') return fmt(cents, 0, ',', '.'); 3201 if (k === 'amount_with_comma_separator') return fmt(cents, 2, '.', ','); 3202 if (k === 'amount_no_decimals_with_comma_separator') return fmt(cents, 0, '.', ','); 3203 if (k === 'amount_with_space_separator') return fmt(cents, 2, ' ', ','); 3204 if (k === 'amount_no_decimals_with_space_separator') return fmt(cents, 0, ' ', ','); 3205 if (k === 'amount_with_apostrophe_separator') return fmt(cents, 2, "'", '.'); 3206 return fmt(cents, 2, ',', '.'); 3207 }).replace(/<[^>]*>/g, ''); 3208 }var PRICES = {"54276348870998": { 3209 price: 15900, 3210 compare: 0, 3211 priceMoney: "159,00 â¬", 3212 compareMoney:"", 3213 savingMoney:"", 3214 available: true, 3215 inventory: -1 3216 },"54276348936534": { 3217 price: 15900, 3218 compare: 0, 3219 priceMoney: "159,00 â¬", 3220 compareMoney:"", 3221 savingMoney:"", 3222 available: true, 3223 inventory: -1 3224 },"55061249950038": { 3225 price: 15900, 3226 compare: 0, 3227 priceMoney: "159,00 â¬", 3228 compareMoney:"", 3229 savingMoney:"", 3230 available: true, 3231 inventory: -1 3232 }};function initDeliveryTimelines(root) { 3233 var boxes = root.querySelectorAll('.cpc__delivery'); 3234 if (!boxes.length) return; 3235 3236 function addBusinessDays(date, days) { 3237 var d = new Date(date); 3238 while (days > 0) { 3239 d.setDate(d.getDate() + 1); 3240 if (d.getDay() !== 0 && d.getDay() !== 6) days--; 3241 } 3242 return d; 3243 } 3244 function fmt(d) { 3245 var wd = ['su', 'ma', 'ti', 'ke', 'to', 'pe', 'la'][d.getDay()]; 3246 return wd + ' ' + d.getDate() + '.' + (d.getMonth() + 1) + '.'; 3247 } 3248 3249 boxes.forEach(function (box) { 3250 var shipOffset = parseInt(box.dataset.shipOffset, 10) || 0; 3251 var minDays = parseInt(box.dataset.minDays, 10) || 1; 3252 var maxDays = parseInt(box.dataset.maxDays, 10) || 3; 3253 var orderText = box.dataset.orderText || ''; 3254 3255 var now = new Date(); 3256 var shipDate = addBusinessDays(now, shipOffset); 3257 var shipDate2 = addBusinessDays(shipDate, 1); 3258 var minDate = addBusinessDays(shipDate, minDays - 1 < 0 ? 0 : minDays - 1); 3259 var maxDate = addBusinessDays(shipDate, maxDays - 1 < 0 ? 0 : maxDays - 1); 3260 3261 var shipTxt = fmt(shipDate) + ' â ' + fmt(shipDate2); 3262 var deliveryTxt = (minDays === maxDays) ? fmt(minDate) : fmt(minDate) + ' â ' + fmt(maxDate); 3263 var orderTxt = orderText || ('Tänään ' + fmt(now)); 3264 3265 var orderEl = box.querySelector('[data-step="order"]'); 3266 var shipEl = box.querySelector('[data-step="ship"]'); 3267 var deliveredEl = box.querySelector('[data-step="delivered"]'); 3268 if (orderEl) orderEl.textContent = orderTxt; 3269 if (shipEl) shipEl.textContent = shipTxt; 3270 if (deliveredEl) deliveredEl.textContent = deliveryTxt; 3271 }); 3272 } 3273 3274 function init() { 3275 var root = document.getElementById('cpc-' + SID); 3276 var btn = document.getElementById('cpc-btn-' + SID); 3277 var errorEl = document.getElementById('cpc-err-' + SID); 3278 var mainVarEl = document.getElementById('cpc-main-' + SID); 3279 if (!root) return; 3280 3281 var SOLDOUT_TEXT = root.dataset.soldoutText || 'SOLD OUT'; 3282 var SOLDOUT_CTA = root.dataset.soldoutCta || 'Loppuunmyyty'; 3283 var LOW_THRESHOLD = parseInt(root.dataset.lowThreshold, 10) || 0; 3284 var LOW_TEXT = root.dataset.lowText || 'Vain [n] jäljellä'; 3285 var PRESALE_CTA = root.dataset.presaleCta || 'Ennakkotilaa nyt'; 3286 var COMBO_TEXT = root.dataset.comboText || 'Tämä yhdistelmä ei ole saatavilla'; 3287 3288 initDeliveryTimelines(root);function readVariants(id) { 3289 var el = document.getElementById(id); 3290 if (!el) return [];
3291 try { return JSON.parse(el.textContent) || []; } catch (e) { return []; } 3292 }function createSelector(variants, optRoot, buttonClass, onApply) { 3293 var buttons = optRoot ? Array.prototype.slice.call(optRoot.querySelectorAll('.' + buttonClass)) : []; 3294 var selected = [null, null, null]; 3295 3296 function matches(v, opts) { 3297 for (var i = 0; i < 3; i++) { 3298 if (opts[i] !== null && opts[i] !== undefined && v.o[i] !== opts[i]) return false; 3299 } 3300 return true; 3301 } 3302 function find(opts, onlyAvailable) { 3303 for (var i = 0; i < variants.length; i++) { 3304 var v = variants[i]; 3305 if (onlyAvailable && !v.available) continue; 3306 if (matches(v, opts)) return v; 3307 } 3308 return null; 3309 } 3310 function byId(id) { 3311 for (var i = 0; i < variants.length; i++) { if (String(variants[i].id) === String(id)) return variants[i]; } 3312 return null; 3313 } 3314 function probeWith(idx, value) { var p = selected.slice(); p[idx] = value; return p; } 3315 3316 function paint() { 3317 buttons.forEach(function (b) { 3318 var idx = parseInt(b.dataset.opt, 10) - 1; 3319 var val = b.dataset.value; 3320 var isActive = selected[idx] === val; 3321 b.classList.toggle('active', isActive); 3322 b.setAttribute('aria-pressed', String(isActive)); 3323 var isSwatch = b.classList.contains('swatch');var probe = isSwatch ? (function () { var q = [null, null, null]; q[idx] = val; return q; })() : probeWith(idx, val); 3324 var ok = !!find(probe, true); 3325 var exists = !!find(probe, false); 3326 b.classList.toggle(isSwatch ? 'swatch--soldout' : 'cpc__opt-pill--soldout', !ok);var hint = ok ? '' : (exists ? SOLDOUT_TEXT : COMBO_TEXT); 3327 var label = b.dataset.baseLabel || (b.dataset.baseLabel = b.getAttribute('aria-label') || val); 3328 b.setAttribute('aria-label', hint ? label + ' â ' + hint : label); 3329 }); 3330 if (optRoot) { 3331 optRoot.querySelectorAll('[data-opt-val]').forEach(function (el) { 3332 var idx = parseInt(el.dataset.optVal, 10) - 1; 3333 if (selected[idx]) el.textContent = selected[idx]; 3334 }); 3335 } 3336 } 3337 3338 function apply(v, animate) { 3339 if (!v) return null; 3340 selected = [v.o[0] || null, v.o[1] || null, v.o[2] || null]; 3341 paint(); 3342 if (onApply) onApply(v, animate); 3343 return v; 3344 } 3345 3346 function pick(idx, value) { 3347 var trial = probeWith(idx, value); 3348 var v = find(trial, true) || find(trial, false); 3349 if (!v) {var relaxed = [null, null, null]; 3350 relaxed[idx] = value; 3351 v = find(relaxed, true) || find(relaxed, false); 3352 } 3353 return apply(v, true); 3354 } 3355 3356 buttons.forEach(function (b) { 3357 b.addEventListener('click', function () { 3358 pick(parseInt(b.dataset.opt, 10) - 1, b.dataset.value); 3359 }); 3360 });if (buttons.length) { 3361 var info = optRoot.closest('.bundle-info'); 3362 var sel = info ? info.querySelector('.bundle-sel') : null; 3363 if (sel) sel.hidden = true; 3364 } 3365 3366 return { 3367 variants: variants, 3368 byId: byId, 3369 apply: apply, 3370 firstAvailable: function () { return find([null, null, null], true) || find([null, null, null], false); } 3371 }; 3372 } 3373 3374 var VARIANTS = readVariants('cpc-variants-' + SID); 3375 var presaleConfigured = VARIANTS.some(function (v) { return v.presale === true; }); 3376 var mainImg = document.getElementById('cpc-main-img-' + SID); 3377 3378 function variantById(id) { 3379 for (var i = 0; i < VARIANTS.length;
3379 i++) { if (String(VARIANTS[i].id) === String(id)) return VARIANTS[i]; } 3380 return null; 3381 } 3382 3383 var mainSelector = createSelector( 3384 VARIANTS, 3385 document.getElementById('cpc-opts-' + SID), 3386 'main-opt', 3387 function (v, animate) { 3388 if (mainVarEl) mainVarEl.value = v.id; 3389 var titleEl = document.getElementById('main-selected-' + SID); 3390 if (titleEl) titleEl.textContent = v.title || ''; 3391 var bundleImg = document.getElementById('main-bundle-img-' + SID); 3392 if (bundleImg && v.img) { bundleImg.srcset = ''; bundleImg.src = v.img; } 3393 if (animate && mainImg && (v.full || v.img)) { 3394 mainImg.style.opacity = '0'; 3395 setTimeout(function () { 3396 mainImg.src = v.full || v.img; 3397 mainImg.srcset = v.srcset || ''; 3398 mainImg.style.opacity = '1'; 3399 }, 100); 3400 } 3401 updatePrices(v.id); 3402 } 3403 );var GIFT_VARIANTS = readVariants('cpc-gift-variants-' + SID); 3404 var giftSelector = null; 3405 var giftVariant = null; 3406 if (GIFT_VARIANTS.length) { 3407 giftSelector = createSelector( 3408 GIFT_VARIANTS, 3409 document.getElementById('cpc-gift-opts-' + SID), 3410 'gift-opt', 3411 function (v) { 3412 giftVariant = v; 3413 selectedGiftId = v.id; 3414 var gTitle = document.getElementById('gift-selected-' + SID); 3415 if (gTitle) gTitle.textContent = v.title || ''; 3416 var gTag = document.getElementById('gift-soldout-tag-' + SID); 3417 if (gTag) gTag.hidden = v.available !== false; 3418 var giftImg = document.getElementById('gift-img'); 3419 if (giftImg && v.img) { giftImg.srcset = ''; giftImg.src = v.img; } 3420 } 3421 ); 3422 }function applyAvailability(variantId) { 3423 var p = PRICES[String(variantId)]; 3424 var isAvailable = p ? p.available !== false : true; 3425 var inv = p ? p.inventory : -1; 3426 3427 var vObj = variantById(variantId); 3428 var isPresale = !!(vObj && vObj.presale);var anyAvailable = VARIANTS.some(function (x) { return x.available !== false; }); 3429 var showSoldOut = !isAvailable && !anyAvailable; 3430 var comboCta = SOLDOUT_CTA; 3431 var comboHint = SOLDOUT_TEXT; 3432 if (!isAvailable && anyAvailable && vObj) { 3433 var sameFirst = VARIANTS.some(function (x) { return x.available !== false && x.o[0] === vObj.o[0]; }); 3434 var fixIdx = sameFirst ? 2 : 1; 3435 var nameEl = root.querySelector('#cpc-opts-' + SID + ' .cpc__opt-row[data-opt="' + fixIdx + '"] .cpc__opt-name'); 3436 var nm = nameEl ? (nameEl.textContent || '').trim().toLowerCase() : ''; 3437 if (!nm || nm.length > 12) nm = 'vaihtoehto'; 3438 comboCta = 'Valitse toinen ' + nm; 3439 comboHint = sameFirst 3440 ? 'Tämä ' + (nm === 'vaihtoehto' ? 'vaihtoehto' : nm) + ' on loppu valitusta väristä â valitse toinen ' + nm + ' tai väri' 3441 : 'Tämä väri on loppu â valitse toinen väri'; 3442 } 3443 3444 var flag = document.getElementById('cpc-soldout-' + SID); 3445 if (flag) flag.hidden = !showSoldOut; 3446 3447 var priceBox = root.querySelector('.cpc__price'); 3448 if (priceBox) { 3449 priceBox.classList.toggle('cpc__price--soldout', showSoldOut); 3450 var soEl = priceBox.querySelector('.cpc__price-soldout'); 3451 if (soEl) soEl.hidden = !showSoldOut; 3452 } 3453 root.querySelectorAll('.cpc__offer-box').forEach(function (ob) { 3454 ob.classList.toggle('cpc__offer-box--soldout', showSoldOut); 3455 var obSold = ob.querySelector('.cpc__price-soldout'); 3456 if (obSold) obSold.hidden = !showSoldOut; 3457 }); 3458 3459 var tag = document.getElementById('main-soldout-tag-' + SID); 3460 if (tag) tag.hidden = !showSoldOut; 3461 3462 var pTag = document.getElementById('main-presale-tag-' + SID); 3463 if (pTag) pTag.hidden = !isPresale || !isAvailable; 3464 3465 if (presaleConfigured) { 3466 root.querySelectorAll('.cpc__presale').forEach(function (b) { 3467 b.style.display = (isPresale && isAvailable) ? '' : 'none'; 3468 }); 3469 } 3470 3471 var lowEl = document.getElementById('main-lowstock-' + SID); 3472 if (lowEl) { 3473 if (!isAvailable) { 3474 lowEl.textContent = showSoldOut ? (SOLDOUT_TEXT + ' â tuote on loppuunmyyty') : comboHint; 3475 lowEl.classList.add('bundle-low-stock--out'); 3476 lowEl.hidden = false;
3477 } else if (LOW_THRESHOLD > 0 && inv > 0 && inv <= LOW_THRESHOLD) { 3478 lowEl.textContent = LOW_TEXT.replace('[n]', inv); 3479 lowEl.classList.remove('bundle-low-stock--out'); 3480 lowEl.hidden = false; 3481 } else { 3482 lowEl.hidden = true; 3483 } 3484 } 3485 3486 root.querySelectorAll('.cpc__delivery').forEach(function (d) { 3487 d.style.display = isAvailable ? '' : 'none'; 3488 }); 3489 3490 var rowDelivery = document.getElementById('main-delivery-' + SID); 3491 var rowDeliveryTxt = document.getElementById('main-delivery-text-' + SID); 3492 if (rowDelivery) { 3493 if (vObj && rowDeliveryTxt) { 3494 var delTxt = (isPresale && vObj.presaleDelivery) ? vObj.presaleDelivery : (vObj.delivery || ''); 3495 rowDeliveryTxt.textContent = delTxt; 3496 rowDelivery.classList.toggle('bundle-delivery--presale', isPresale && !!vObj.presaleDelivery); 3497 } 3498 var hasTxt = rowDeliveryTxt ? !!(rowDeliveryTxt.textContent || '').trim() : false; 3499 rowDelivery.hidden = !isAvailable || !hasTxt; 3500 } 3501 3502 if (btn) { 3503 btn.disabled = !isAvailable; 3504 btn.setAttribute('aria-disabled', String(!isAvailable)); 3505 var t = btn.querySelector('.cpc__cta-txt'); 3506 if (t) t.textContent = !isAvailable ? (showSoldOut ? SOLDOUT_CTA : comboCta) : (isPresale ? PRESALE_CTA : (btn.dataset.text || t.textContent)); 3507 } 3508 var sBtn = document.getElementById('cpc-sticky-btn-' + SID); 3509 if (sBtn) { 3510 sBtn.disabled = !isAvailable; 3511 sBtn.setAttribute('aria-disabled', String(!isAvailable)); 3512 var st = sBtn.querySelector('.cpc-sticky__btn-txt'); 3513 if (st) st.textContent = !isAvailable ? (showSoldOut ? SOLDOUT_CTA : comboCta) : (isPresale ? PRESALE_CTA : (sBtn.dataset.text || st.textContent)); 3514 } 3515 }function updatePrices(variantId) { 3516 var p = PRICES[String(variantId)]; 3517 if (!p) { applyAvailability(variantId); return; } 3518 var onSale = p.compare > p.price; 3519 3520 var priceBox = root.querySelector('.cpc__price'); 3521 if (priceBox) { 3522 var nowEl = priceBox.querySelector('.cpc__price-now'); 3523 var wasEl = priceBox.querySelector('.cpc__price-was'); 3524 var badgeEl = priceBox.querySelector('.cpc__price-badge'); 3525 if (nowEl) nowEl.textContent = p.priceMoney; 3526 if (wasEl) { wasEl.textContent = p.compareMoney; wasEl.hidden = !onSale; } 3527 if (badgeEl) { 3528 var pct = onSale ? Math.round((p.compare - p.price) * 100 / p.compare) : 0; 3529 badgeEl.textContent = (priceBox.dataset.badgeTpl || '').replace(/\[pct\]/g, pct).replace(/\[saving\]/g, p.savingMoney); 3530 badgeEl.hidden = !onSale; 3531 } 3532 } 3533 3534 var rowPrice = root.querySelector('.cpc__row-price'); 3535 if (rowPrice) rowPrice.textContent = p.priceMoney; 3536 var rowCompare = root.querySelector('.cpc__compare-price'); 3537 if (rowCompare) { rowCompare.textContent = p.compareMoney; rowCompare.hidden = !onSale; } 3538 var bigPrice = root.querySelector('.cpc__big-price'); 3539 if (bigPrice) bigPrice.textContent = p.priceMoney; 3540 var savingRow = root.querySelector('.cpc__val-saving'); 3541 if (savingRow) { 3542 var savingAmt = savingRow.querySelector('.cpc__saving-amt'); 3543 if (savingAmt) savingAmt.textContent = p.savingMoney; 3544 savingRow.hidden = !onSale; 3545 } 3546 3547 var stickyEl = document.getElementById('cpc-sticky-' + SID); 3548 if (stickyEl) { 3549 var sCur = stickyEl.querySelector('.cpc-sticky__current'); 3550 var sCmp = stickyEl.querySelector('.cpc-sticky__compare'); 3551 if (sCur) sCur.textContent = p.priceMoney; 3552 if (sCmp) { sCmp.textContent = p.compareMoney; sCmp.hidden = !onSale; } 3553 } 3554 3555 root.querySelectorAll('.cpc__offer-box').forEach(function (ob) { 3556 var obNow = ob.querySelector('.cpc__ob-now'); 3557 var obWas = ob.querySelector('.cpc__ob-was'); 3558 var obBadge = ob.querySelector('.cpc__ob-badge'); 3559 var obTotal = ob.querySelector('.cpc__ob-total'); 3560 var obPct = onSale ? Math.round((p.compare - p.price) * 100 / p.compare) : 0; 3561 if (obNow) obNow.textContent = p.priceMoney; 3562 if (obWas) { obWas.textContent = p.compareMoney; obWas.hidden = !onSale; } 3563 if (obBadge) { 3564 obBadge.textContent = (ob.dataset.badgeTpl || '').replace(/\[pct\]/g, obPct).replace(/\[saving\]/g, p.savingMoney); 3565 obBadge.hidden = !onSale; 3566 } 3567 if (obTotal) { 3568 var totalCents = (onSale ? (p.compare - p.price) : 0) + (parseInt(ob.dataset.giftCents, 10) || 0); 3569 obTotal.textContent = formatCents(totalCents); 3570 var totalRow = obTotal.closest('.cpc__ob-row'); 3571 if (totalRow) totalRow.hidden = totalCents <= 0; 3572 } 3573 var obSold = ob.querySelector('.cpc__price-soldout'); 3574 ob.classList.toggle('cpc__offer-box--soldout', p.available === false); 3575 if (obSold) obSold.hidden = p.available !== false; 3576 }); 3577 3578 applyAvailability(variantId); 3579 }var thumbsEl = document.getElementById('cpc-thumbs-' + SID);
3580 var prevBtn = document.getElementById('cpc-prev-' + SID); 3581 var nextBtn = document.getElementById('cpc-next-' + SID); 3582 var thumbs = root.querySelectorAll('.cpc__thumb'); 3583 var currentIdx = 0; 3584 3585 function activateThumb(idx) { 3586 currentIdx = idx; 3587 thumbs.forEach(function (t, i) { t.classList.toggle('cpc__thumb--active', i === idx); }); 3588 if (thumbsEl && thumbs[idx]) { 3589 var thumb = thumbs[idx]; 3590 thumbsEl.scrollTo({ left: thumb.offsetLeft - thumbsEl.offsetWidth / 2 + thumb.offsetWidth / 2, behavior: 'smooth' }); 3591 } 3592 if (prevBtn) prevBtn.disabled = idx === 0; 3593 if (nextBtn) nextBtn.disabled = idx === thumbs.length - 1; 3594 } 3595 3596 if (mainImg && thumbs.length) { 3597 thumbs.forEach(function (thumb, i) { 3598 thumb.addEventListener('click', function () { 3599 mainImg.style.opacity = '0'; 3600 setTimeout(function () { 3601 mainImg.src = thumb.dataset.full; 3602 if (thumb.dataset.srcset) mainImg.srcset = thumb.dataset.srcset; 3603 mainImg.style.opacity = '1'; 3604 }, 100); 3605 activateThumb(i); 3606 }); 3607 }); 3608 if (prevBtn) { prevBtn.disabled = true; prevBtn.addEventListener('click', function () { if (currentIdx > 0) thumbs[currentIdx - 1].click(); }); } 3609 if (nextBtn) { nextBtn.addEventListener('click', function () { if (currentIdx < thumbs.length - 1) thumbs[currentIdx + 1].click(); }); } 3610 activateThumb(0); 3611 }var bundleWrap = root.querySelector('.cpc__bundle-wrap'); 3612 var initId = (bundleWrap && bundleWrap.dataset.mainVariant) ? bundleWrap.dataset.mainVariant : (mainVarEl ? mainVarEl.value : null); 3613 var initVariant = variantById(initId); 3614 if (initVariant) { 3615 mainSelector.apply(initVariant, false); 3616 } else if (initId) { 3617 if (mainVarEl) mainVarEl.value = initId; 3618 updatePrices(initId); 3619 } 3620 3621 if (giftSelector) { 3622 var giftInit = giftSelector.byId(selectedGiftId) || giftSelector.firstAvailable(); 3623 if (giftInit) giftSelector.apply(giftInit, false); 3624 }var qty = 1; 3625 var qtyWrap = root.querySelector('.cpc__qty-wrap'); 3626 var qtyInput = document.getElementById('cpc-qty-' + SID); 3627 var qtyMinus = document.getElementById('cpc-qty-minus-' + SID); 3628 var qtyPlus = document.getElementById('cpc-qty-plus-' + SID); 3629 var maxQty = qtyWrap ? (parseInt(qtyWrap.dataset.max, 10) || 10) : 10; 3630 function updateQtyUI() { if (qtyInput) qtyInput.value = qty; if (qtyMinus) qtyMinus.disabled = qty <= 1; if (qtyPlus) qtyPlus.disabled = qty >= maxQty; } 3631 if (qtyMinus) qtyMinus.addEventListener('click', function () { if (qty > 1) { qty--; updateQtyUI(); } }); 3632 if (qtyPlus) qtyPlus.addEventListener('click', function () { if (qty < maxQty) { qty++; updateQtyUI(); } }); 3633 updateQtyUI(); 3634 3635 function setError(msg) { if (!errorEl) return; errorEl.hidden = !msg; if (msg) errorEl.textContent = msg; } 3636 function setBusy(on) { if (!btn) return; btn.setAttribute('aria-busy', on ? 'true' : 'false'); btn.disabled = on; } 3637 3638 function giftPayload() { 3639 if (!selectedGiftId) return null;if (giftVariant && giftVariant.available === false) return null; 3640 return { id: selectedGiftId, quantity: 1, properties: { '_free_gift': 'true', '_free_gift_campaign': 'cpc-bundle' } }; 3641 } 3642 3643 if (btn) { 3644 btn.addEventListener('click', function () { 3645 var mainId = mainVarEl ? parseInt(mainVarEl.value, 10) : null; 3646 if (!mainId) { setError('Tuotteen variantti puuttuu.'); return; } 3647 var pInfo = PRICES[String(mainId)]; 3648 if (pInfo && pInfo.available === false) { setError(SOLDOUT_TEXT + ' â valitse toinen vaihtoehto.'); return; } 3649 setError(null); setBusy(true); 3650 var items = [{ id: mainId, quantity: qty }]; 3651 var gp = giftPayload(); if (gp) items.push(gp); 3652 var cartRoot = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root) || '/'; 3653 fetch(cartRoot + 'cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify({ items: items }) }) 3654 .then(function (res) { if (!res.ok) return res.json().then(function (d) { throw new Error(d.description || d.message || 'Virhe'); }); return res.json(); }) 3655 .then(function (data) { 3656 setBusy(false); 3657 if (DISCOUNT) { fetch(cartRoot + 'discount/' + encodeURIComponent(DISCOUNT)); } 3658 root.dispatchEvent(new CustomEvent('ajaxProduct:added', { bubbles: true, detail: { product: data, addToCartBtn: btn } })); 3659 }) 3660 .catch(function (err) { setError('Virhe: ' + (err.message || 'Yritä uudelleen.')); setBusy(false); }); 3661 }); 3662 } 3663 3664 var stickyBar = document.getElementById('cpc-sticky-' + SID); 3665 var stickyBtn = document.getElementById('cpc-sticky-btn-' + SID); 3666 if (stickyBar && btn) { 3667 var ctaSeen = false;
3668 var observer = new IntersectionObserver(function (entries) { 3669 entries.forEach(function (entry) { 3670 if (entry.isIntersecting) { ctaSeen = true; stickyBar.setAttribute('aria-hidden', 'true'); } 3671 else if (ctaSeen) { stickyBar.setAttribute('aria-hidden', 'false'); } 3672 }); 3673 }, { threshold: 0.1 }); 3674 observer.observe(btn); 3675 } 3676 if (stickyBtn) { 3677 stickyBtn.addEventListener('click', function () { 3678 var mainId = mainVarEl ? parseInt(mainVarEl.value, 10) : null; 3679 if (!mainId) return; 3680 var pInfo = PRICES[String(mainId)]; 3681 if (pInfo && pInfo.available === false) return; 3682 stickyBtn.setAttribute('aria-busy', 'true'); stickyBtn.disabled = true; 3683 var items = [{ id: mainId, quantity: qty }]; 3684 var gp2 = giftPayload(); if (gp2) items.push(gp2); 3685 var cartRoot = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root) || '/'; 3686 fetch(cartRoot + 'cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify({ items: items }) }) 3687 .then(function (res) { if (!res.ok) return res.json().then(function (d) { throw new Error(d.description || d.message || 'Virhe'); }); return res.json(); }) 3688 .then(function (data) { 3689 stickyBtn.setAttribute('aria-busy', 'false'); stickyBtn.disabled = false; 3690 if (DISCOUNT) { fetch(cartRoot + 'discount/' + encodeURIComponent(DISCOUNT)); } 3691 document.body.dispatchEvent(new CustomEvent('ajaxProduct:added', { bubbles: true, detail: { product: data, addToCartBtn: stickyBtn } })); 3692 }) 3693 .catch(function (err) { 3694 stickyBtn.setAttribute('aria-busy', 'false'); stickyBtn.disabled = false; 3695 if (errorEl) { errorEl.hidden = false; errorEl.textContent = 'Virhe: ' + (err.message || 'Yritä uudelleen.'); } 3696 }); 3697 }); 3698 } 3699 3700 var countdownEl = root.querySelector('.cpc__countdown'); 3701 var hEl = document.getElementById('cpc-h-' + SID); 3702 var mEl = document.getElementById('cpc-m-' + SID); 3703 var sEl = document.getElementById('cpc-s-' + SID); 3704 if (hEl && mEl && sEl && countdownEl) { 3705 var pad = function (n) { return String(n).padStart(2, '0'); }; 3706 var endTime = null; 3707 var endAttr = countdownEl.dataset.end; 3708 var hoursAttr = parseInt(countdownEl.dataset.hours, 10); 3709 var storageKey = 'cpc_end_' + SID; 3710 if (endAttr) { endTime = new Date(endAttr).getTime(); } 3711 else if (hoursAttr > 0) { 3712 var stored = sessionStorage.getItem(storageKey); 3713 if (stored) { endTime = parseInt(stored, 10); } 3714 else { endTime = Date.now() + hoursAttr * 3600000; try { sessionStorage.setItem(storageKey, endTime); } catch (e) {} } 3715 } else { var eod = new Date(); eod.setHours(23, 59, 59, 999); endTime = eod.getTime(); } 3716 var iv = null; 3717 var tick = function () { 3718 var diff = endTime - Date.now(); 3719 if (diff <= 0) { hEl.textContent = '00'; mEl.textContent = '00'; sEl.textContent = '00'; if (iv) clearInterval(iv); return; } 3720 hEl.textContent = pad(Math.floor(diff / 3600000)); 3721 mEl.textContent = pad(Math.floor(diff % 3600000 / 60000)); 3722 sEl.textContent = pad(Math.floor(diff % 60000 / 1000)); 3723 }; 3724 tick(); 3725 iv = setInterval(tick, 1000); 3726 document.addEventListener('shopify:section:unload', function (e) { if (e.detail && e.detail.sectionId === SID) clearInterval(iv); }); 3727 } 3728 } 3729 3730 document.readyState === 'loading' ? document.addEventListener('DOMContentLoaded', init) : init(); 3731 document.addEventListener('shopify:section:load', function (e) { if (e.detail && e.detail.sectionId === SID) init(); }); 3732})(); 3733</script>
3733 3734 3735</div><div id="shopify-section-template--31561534275926__sn_settings_6dTndp" class="shopify-section"><style data-shopify> 3736 .light-theme { 3737 --primary: #ff4caf; 3738 --btn-text: #fff; 3739 --btn-bg: #242833; 3740 --secondary: #000; 3741 --heading: #000; 3742 --text: #444; 3743 --stars: #ff4caf; 3744 --accent: #000000; 3745 --background1: ; 3746 --background2: ; 3747 --gradient-bg: rgb(255,76,175); 3748 --gradient: linear-gradient(90deg, rgba(255,76,175,1) 0%, rgba(255,207,67,1) 100%); 3749 } 3750 3751 .dark-theme { 3752 --primary: #ff4caf; 3753 --btn-bg: #242833; 3754 --btn-text: #fff; 3755 --secondary: #000; 3756 --stars: #ff4caf; 3757 --accent: #000000; 3758 --heading: #fff; 3759 --text: #f9f9f9; 3760 --background1: ; 3761 --background2: ; 3762 } 3763</style> 3764 3765 3766 3767 3768 3769 3770</div><div id="shopify-section-template--31561534275926__sn_more_info_wpmcLR" class="shopify-section"><style data-shopify> 3771 #sn-more { 3772 padding: 0 20px 80px; 3773 } 3774 #sn-more .collapsible{ 3775 display: flex; 3776 justify-content: space-between; 3777 align-items: center; 3778 gap: 10px; 3779 } 3780 #sn-more .collapsible .collapse-title{ 3781 display: flex; 3782 align-items: center; 3783 gap: 10px; 3784 } 3785 #sn-more .collapsible .collapse-title .collapse-icon{ 3786 width: 30px; 3787 display: block; 3788 } 3789 @media screen and (max-width: 767px) { 3790 #sn-more { 3791 padding: 20px 10px; 3792 } 3793 #sn-more .collapsible .collapse-title .collapse-icon{ 3794 width: 25px; 3795 display: block; 3796 } 3797 } 3798 3799</style> 3800 3801<section 3802 id="sn-more" 3803 class="landing light-theme" 3804> 3805 <div class="sn-container"> 3806 <div class="sn-more-info-wrap sn-col-1"> 3807 3808 3809 <div class="collapsible " > 3810 <div class="collapse-title"><span class="collapse-icon"><img src="//joyearbuds.com/cdn/shop/files/document.svg?v=1745998079&width=120" class="sn-img"></span><p>Product details</p></div> 3811 </div> 3812 <div class="content"> 3813 <p><strong>Design & Fit</strong><br/> 2.8 grams per earbud<br/> Sleek, minimalistic design tailored for smaller ears<br/> Includes 7 sizes of antibacterial, interchangeable ear tips for a secure and comfortable fit <br/></p><p><strong>Audio & Features</strong><br/> Studio-grade HiFi audio with clear highs and deep bass <br/> Built-in microphone with quick mute functionality for calls<br/>Optimized mode for audiobooks and voice recordings<br/></p><p><strong>Battery & Charging</strong><br/>Up to 6 hours on a single charge<br/>Provides additional charges, extending total usage time<br/>USB-C for fast and convenient charging</p><p><strong>Connectivity</strong><br/> Bluetooth 5.4 for faster, more stable connections and improved battery efficiency <br/>Seamless pairing with a wide range of devices<br/></p><p><strong>Durability & Warranty</strong><br/>3-year product warranty, 1-year loss warranty, and 60-day satisfaction guarantee <br/>Designed to withstand daily use and workouts</p><p>If you lose your product, we offer replacement parts at a discount. You may purchase up to two replacement parts (such as a left or right earbud or charging case) with a 20% discount.<br/></p><p><strong>Sustainability</strong><br/>Developed with ecological sustainability in mind without compromising performance </p> 3814 </div> 3815 3816 3817 3818 <div class="collapsible " > 3819 <div class="collapse-title"><span class="collapse-icon"><img src="//joyearbuds.com/cdn/shop/files/box.svg?v=1745998095&width=120" class="sn-img"></span><p>Shipping & Returns</p></div> 3820 </div> 3821 <div class="content"> 3822 <p>We deliver to all countries to which UPS offers delivery service. At the moment, we do not deliver to Russia.</p><p>For Finland, we use Finnish Posti and provide free shipping on all purchases over 40â¬. Please allow 2-7 business days for delivery.</p><p>On orders to all other EU countries, we charge 9.90⬠per order. For EU countries please allow 2-10 business days for delivery.</p><p><strong>For countries outside EU, we charge 15 ⬠per order. Delivery times depend on the country. You will get the tracking code from DHL to follow the estimated delivery time. </strong>Please note, that Joy Planet Finland will not cover any customs or duties on your order.</p><p>If your order does not arrive in time or is held in the possession of the courier, please email us here with your order number - <a href="mailto:[email protected]" title="mailto:[email protected]">[email protected]</a>. If your order is lost or damaged in transit, we will replace the order for free. Simply contact us at <a href="mailto:[email protected]" title="mailto:[email protected]">[email protected]</a></p> 3823 </div> 3824 3825 3826 </div> 3827 </div> 3828 3829 3830</section> 3831 3832 3833 3834 3835 3836 3837</div><div id="shopify-section-template--31561534275926__sn_settings_HW3TiW" class="shopify-section"><style data-shopify> 3838 .light-theme { 3839 --primary: ; 3840 --btn-text: #fff; 3841 --btn-bg: ; 3842 --secondary: #000; 3843 --heading: #000; 3844 --text: #444; 3845 --stars: ; 3846 --accent: ; 3847 --background1: ; 3848 --background2: ; 3849 --gradient-bg: rgb(255,76,175); 3850 --gradient: linear-gradient(90deg, rgba(255,76,175,1) 0%, rgba(255,207,67,1) 100%); 3851 } 3852 3853 .dark-theme { 3854 --primary: ; 3855 --btn-bg: ; 3856 --btn-text: #fff; 3857 --secondary: #000; 3858 --stars: ; 3859 --accent: ; 3860 --heading: #fff; 3861 --text: #f9f9f9; 3862 --background1: ; 3863 --background2: ; 3864 } 3865</style> 3866 3867 3868 3869 3870 3871 3872</div><section id="shopify-section-template--31561534275926__177105543566597311" class="shopify-section"><div class="page-width"></div> 3873</section><div id="shopify-section-template--31561534275926__sn_marquee_4GzL4n" class="shopify-section"><style data-shopify> 3874 #sn-marquee { 3875 padding: 20px 0; 3876 background: #f9f9f9; 3877 } 3878 .marquee-slider{ 3879 display: flex; 3880 gap: 50px; 3881 overflow-x: auto; 3882 flex-wrap: nowrap; 3883 } 3884 .marquee-wrap{ 3885 margin: 0 50px; 3886 display: flex !important; 3887 flex-shrink: 0; 3888 gap: 20px; 3889 } 3890 .marquee-wrap img{ 3891 flex-basis: 40px !important; 3892 width: 40px !important; 3893 } 3894 .marquee-wrap h4, .marquee-wrap h3, .marquee-wrap p{ 3895 background: var(--gradient-bg); 3896 background: var(--gradient); 3897 -webkit-background-clip: text; 3898 -webkit-text-fill-color: transparent; 3899 } 3900 @media screen and (max-width: 767px) { 3901 #sn-marquee { 3902 padding: 20px 10px; 3903 } 3904 } 3905 3906</style> 3907 3908<section 3909 id="sn-marquee" 3910 class="landing light-theme" 3911> 3912 <div class="sn-container text-center full"> 3913 <div class="marquee-slider"> 3914 3915 3916 <div class="marquee-wrap" > 3917
3918 <span class="marquee-icon"> 3919 <img src="//joyearbuds.com/cdn/shop/files/warranty_85019d69-827a-4609-88dd-1c3bb0fc865b_80x.png?v=1745997954" alt="" class="sn-img"> 3920 </span> 3921 3922 3923 <span class="marquee-text"> 3924 <h3><strong>Free Shipping Available on Domestic Orders over 40â¬</strong></h3> 3925 </span> 3926 3927 </div> 3928 3929 3930 3931 <div class="marquee-wrap" > 3932 3933 <span class="marquee-icon"> 3934 <img src="//joyearbuds.com/cdn/shop/files/guarantee_80x.png?v=1745997953" alt="" class="sn-img"> 3935 </span> 3936 3937 3938 <span class="marquee-text"> 3939 <h3><strong>Designed in Finland</strong></h3> 3940 </span> 3941 3942 </div> 3943 3944 3945 3946 <div class="marquee-wrap" > 3947 3948 <span class="marquee-icon"> 3949 <img src="//joyearbuds.com/cdn/shop/files/global-shipping_1_80x.png?v=1745997930" alt="" class="sn-img"> 3950 </span> 3951 3952 3953 <span class="marquee-text"> 3954 <h3><strong>60-Day Returns</strong></h3> 3955 </span> 3956 3957 </div> 3958 3959 3960 3961 <div class="marquee-wrap" > 3962 3963 <span class="marquee-icon"> 3964 <img src="//joyearbuds.com/cdn/shop/files/finland_80x.png?v=1745997953" alt="" class="sn-img"> 3965 </span> 3966 3967 3968 <span class="marquee-text"> 3969 <h3><strong>3-Year Product Warranty</strong></h3> 3970 </span> 3971 3972 </div> 3973 3974 3975 3976 <div class="marquee-wrap" > 3977 3978 <span class="marquee-icon"> 3979 <img src="//joyearbuds.com/cdn/shop/files/return-box_80x.png?v=1745997953" alt="" class="sn-img"> 3980 </span> 3981 3982 3983 <span class="marquee-text"> 3984 <h3><strong>Professional Customer Support</strong></h3> 3985 </span> 3986 3987 </div> 3988 3989 3990 3991 <div class="marquee-wrap" > 3992 3993 <span class="marquee-icon"> 3994 <img src="//joyearbuds.com/cdn/shop/files/duration_80x.png?v=1745997953" alt="" class="sn-img"> 3995 </span> 3996 3997 3998 <span class="marquee-text"> 3999 <h3><strong>100% Secure Payment</strong></h3> 4000 </span> 4001 4002 </div> 4003 4004 4005 </div> 4006 </div> 4007 4008 4009</section> 4010 4011 4012 4013 4014 4015 4016 4017</div><div id="shopify-section-template--31561534275926__urgency_banner_KeBa9r" class="shopify-section index-section"><style> 4018 #oab-bar-template--31561534275926__urgency_banner_KeBa9r { 4019 position: fixed; 4020 top: 0; 4021 left: 0; 4022 right: 0; 4023 z-index: 99999; 4024 background: #edb35a; 4025 border-bottom: 1px solid #1f1f1f; 4026 transform: translateY(0); 4027 } 4028 .shopify-design-mode #oab-bar-template--31561534275926__urgency_banner_KeBa9r { 4029 position: relative; 4030 top: auto; left: auto; right: auto; 4031 z-index: 1; 4032 } 4033 #oab-bar-template--31561534275926__urgency_banner_KeBa9r .oab-inner { 4034 display: flex; 4035 align-items: center; 4036 justify-content: center; 4037 padding: 0 48px; 4038 min-height: 42px; 4039 position: relative; 4040 gap: 16px; 4041 flex-wrap: nowrap; 4042 overflow: hidden; 4043 } 4044 #oab-bar-template--31561534275926__urgency_banner_KeBa9r .oab-message { 4045 font-size: 13px; 4046 font-weight: 700; 4047 color: #ffffff; 4048 text-transform: uppercase; 4049 letter-spacing: 0.06em; 4050 white-space: nowrap; 4051 } 4052 #oab-bar-template--31561534275926__urgency_banner_KeBa9r .oab-message a { 4053 color: #39ff6a; 4054 text-decoration: underline; 4055 text-underline-offset: 3px; 4056 } 4057 #oab-bar-template--31561534275926__urgency_banner_KeBa9r .oab-sep { 4058 width: 1px; 4059 height: 13px; 4060 background: #ffffff; 4061 opacity: 0.25; 4062 flex-shrink: 0; 4063 } 4064 #oab-bar-template--31561534275926__urgency_banner_KeBa9r .oab-stock { 4065 display: flex; 4066 align-items: center; 4067 gap: 6px; 4068 font-size: 12px; 4069 font-weight: 700; 4070 color: #ffffff; 4071 text-transform: uppercase; 4072 letter-spacing: 0.05em; 4073 white-space: nowrap; 4074 } 4075 #oab-bar-template--31561534275926__urgency_banner_KeBa9r .oab-stock-dot { 4076 width: 7px; 4077 height: 7px; 4078 border-radius: 50%; 4079 flex-shrink: 0; 4080 animation: oab-pulse-template--31561534275926__urgency_banner_KeBa9r 1.5s ease-in-out infinite; 4081 } 4082 @keyframes oab-pulse-template--31561534275926__urgency_banner_KeBa9r { 4083 0%, 100% { opacity: 1; transform: scale(1); } 4084 50% { opacity: 0.4; transform: scale(0.65); } 4085 } 4086 #oab-bar-template--31561534275926__urgency_banner_KeBa9r .oab-close { 4087 position: absolute; 4088 right: 12px; 4089 top: 50%; 4090 transform: translateY(-50%); 4091 background: none; 4092 border: none; 4093 cursor: pointer; 4094 color: #ffffff; 4095 opacity: 0.5; 4096 font-size: 18px; 4097 line-height: 1; 4098 padding: 4px 6px; 4099 transition: opacity 0.15s; 4100 } 4101 #oab-bar-template--31561534275926__urgency_banner_KeBa9r .oab-close:hover { opacity: 1; } 4102 4103 @media screen and (max-width: 600px) { 4104 #oab-bar-template--31561534275926__urgency_banner_KeBa9r .oab-inner { 4105 flex-direction: column; 4106 gap: 4px; 4107 padding: 8px 48px; 4108 align-items: center; 4109 justify-content: center; 4110 } 4111 #oab-bar-template--31561534275926__urgency_banner_KeBa9r .oab-sep { display: none; } 4112 #oab-bar-template--31561534275926__urgency_banner_KeBa9r .oab-message { 4113 font-size: 11px; 4114 letter-spacing: 0.04em; 4115 white-space: normal; 4116 text-align: center; 4117 } 4118 #oab-bar-template--31561534275926__urgency_banner_KeBa9r .oab-stock { font-size: 10px; } 4119 } 4120</style> 4121 4122<div id="oab-bar-template--31561534275926__urgency_banner_KeBa9r" role="banner" aria-label="Ilmoituspalkki"> 4123 <div class="oab-inner"><span class="oab-message">Golden TinyS now in presale! 4124</span></div> 4125</div> 4126
4127<script> 4128(function() { 4129 var bar = document.getElementById('oab-bar-template--31561534275926__urgency_banner_KeBa9r'); 4130 if (!bar) return; 4131 4132 var inEditor = window.Shopify && window.Shopify.designMode; 4133 4134 if (!inEditor && sessionStorage.getItem('oab_dismissed_template--31561534275926__urgency_banner_KeBa9r')) { 4135 bar.style.display = 'none'; 4136 return; 4137 } 4138 4139 var barHeight = bar.offsetHeight; 4140 document.body.style.paddingTop = barHeight + 'px'; 4141 4142 var dismissed = false; 4143 4144 window.addEventListener('scroll', function () { 4145 if (dismissed) return; 4146 var scrollY = window.scrollY || window.pageYOffset; 4147 var offset = Math.min(scrollY, barHeight); 4148 bar.style.transform = 'translateY(-' + offset + 'px)'; 4149 }, { passive: true }); 4150 4151 var closeBtn = document.getElementById('oab-close-template--31561534275926__urgency_banner_KeBa9r'); 4152 if (closeBtn) { 4153 closeBtn.addEventListener('click', function() { 4154 dismissed = true; 4155 bar.style.transition = 'transform 0.2s ease'; 4156 bar.style.transform = 'translateY(-' + barHeight + 'px)'; 4157 document.body.style.paddingTop = '0'; 4158 if (!inEditor) sessionStorage.setItem('oab_dismissed_template--31561534275926__urgency_banner_KeBa9r', '1'); 4159 }); 4160 } 4161})(); 4162</script>
4162 4163 4164</div><div id="shopify-section-template--31561534275926__textimage_pHPVkK" class="shopify-section"><style> 4165 #cc-template--31561534275926__textimage_pHPVkK { 4166 background: #ffffff; 4167 padding: 80px 0 80px; 4168 font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; 4169 box-sizing: border-box; 4170 } 4171 #cc-template--31561534275926__textimage_pHPVkK *, #cc-template--31561534275926__textimage_pHPVkK *::before, #cc-template--31561534275926__textimage_pHPVkK *::after { 4172 box-sizing: border-box; margin: 0; padding: 0; 4173 } 4174 4175 /* ââ GRID ââ */ 4176 #cc-template--31561534275926__textimage_pHPVkK .cc-grid { 4177 max-width: 1080px; margin: 0 auto; padding: 0 48px; 4178 display: grid; grid-template-columns: 1fr 1fr; 4179 gap: 80px; align-items: center; 4180 } 4181 4182 /* ââ TEXT SIDE ââ */ 4183 #cc-template--31561534275926__textimage_pHPVkK .cc-text { display: flex; flex-direction: column; gap: 28px; } 4184 #cc-template--31561534275926__textimage_pHPVkK .cc-eyebrow { 4185 font-size: 11px; font-weight: 700; 4186 letter-spacing: 2.5px; text-transform: uppercase; 4187 color: #111111; 4188 } 4189 #cc-template--31561534275926__textimage_pHPVkK .cc-title { 4190 font-size: clamp(32px, 4.5vw, 56px); 4191 font-weight: 900; letter-spacing: -2px; line-height: 1.0; 4192 color: #111111; 4193 } 4194 #cc-template--31561534275926__textimage_pHPVkK .cc-body { 4195 font-size: 16px; line-height: 1.7; 4196 color: #111111; 4197 max-width: 420px; 4198 } 4199 4200 /* ââ DEMO BUTTON ââ */ 4201 #cc-template--31561534275926__textimage_pHPVkK .cc-demo-btn { 4202 display: inline-flex; align-items: center; gap: 10px; 4203 border: 1.5px solid rgba(17, 17, 17, 0.18); 4204 background: transparent; 4205 color: #111111; 4206 border-radius: 100px; padding: 12px 22px; 4207 font-size: 14px; font-weight: 700; font-family: inherit; 4208 cursor: pointer; width: fit-content; 4209 transition: border-color .2s, background .2s; 4210 -webkit-tap-highlight-color: transparent; 4211 touch-action: manipulation; 4212 } 4213 #cc-template--31561534275926__textimage_pHPVkK .cc-demo-btn:hover { 4214 border-color: #111111; 4215 background: rgba(17, 17, 17, 0.06); 4216 } 4217 #cc-template--31561534275926__textimage_pHPVkK .cc-demo-btn-dot { 4218 width: 8px; height: 8px; border-radius: 50%; 4219 background: #111111; 4220 animation: cc-blink-template--31561534275926__textimage_pHPVkK 1.4s ease-in-out infinite; 4221 flex-shrink: 0; 4222 } 4223 @keyframes cc-blink-template--31561534275926__textimage_pHPVkK { 4224 0%,100% { opacity:1; } 50% { opacity:0.3; } 4225 } 4226 4227 /* ââ IMAGE SIDE ââ */ 4228 #cc-template--31561534275926__textimage_pHPVkK .cc-image { 4229 position: relative; border-radius: 24px; overflow: hidden; 4230 aspect-ratio: 4/5; background: #e8e4de; 4231 } 4232 #cc-template--31561534275926__textimage_pHPVkK .cc-image img { width:100%; height:100%; object-fit:cover; display:block; } 4233 #cc-template--31561534275926__textimage_pHPVkK .cc-image img.cc-img-mobile { display: none; } 4234 #cc-template--31561534275926__textimage_pHPVkK .cc-image img.cc-img-desktop { display: block; } 4235 @media (max-width: 720px) { 4236 #cc-template--31561534275926__textimage_pHPVkK .cc-image img.cc-img-desktop { display: none; } 4237 #cc-template--31561534275926__textimage_pHPVkK .cc-image img.cc-img-mobile { display: block; } 4238 } 4239 #cc-template--31561534275926__textimage_pHPVkK .cc-badge { 4240 position: absolute; bottom: 24px; left: 50%; 4241 transform: translateX(-50%); 4242 background: rgba(0,0,0,0.72); 4243 backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); 4244 border: 1px solid rgba(255,255,255,0.1); 4245 border-radius: 100px; padding: 10px 20px; 4246 display: flex; align-items: center; gap: 10px; white-space: nowrap; 4247 } 4248 #cc-template--31561534275926__textimage_pHPVkK .cc-badge-dot { 4249 width: 8px; height: 8px; border-radius: 50%; 4250 background: #4ade80; 4251 box-shadow: 0 0 8px #4ade80; 4252 animation: cc-pulse-template--31561534275926__textimage_pHPVkK 2s ease-in-out infinite; 4253 } 4254 @keyframes cc-pulse-template--31561534275926__textimage_pHPVkK { 4255 0%,100% { opacity:1; transform:scale(1); } 50% { opacity:0.6; transform:scale(1.4); } 4256 } 4257 #cc-template--31561534275926__textimage_pHPVkK .cc-badge-txt { font-size:12px; font-weight:700; color:#fff; letter-spacing:0.5px; } 4258 #cc-template--31561534275926__textimage_pHPVkK .cc-image-ph { 4259 width:100%; height:100%; display:flex; align-items:center; justify-content:center; 4260 font-size:13px; color:rgba(0,0,0,0.2); 4261 } 4262 4263 /* ââ MODAL OVERLAY ââ */ 4264 #cc-modal-template--31561534275926__textimage_pHPVkK { 4265 display: none; 4266 position: fixed; inset: 0; z-index: 9999;
4267 align-items: flex-end; 4268 justify-content: center; 4269 background: rgba(0,0,0,0.55); 4270 backdrop-filter: blur(4px); 4271 -webkit-backdrop-filter: blur(4px); 4272 -webkit-tap-highlight-color: transparent; 4273 } 4274 #cc-modal-template--31561534275926__textimage_pHPVkK.open { display: flex; } 4275 4276 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-sheet { 4277 background: #fff; 4278 border-radius: 24px 24px 0 0; 4279 padding: 28px 28px 40px; 4280 width: 100%; max-width: 560px; 4281 display: flex; flex-direction: column; gap: 24px; 4282 font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; 4283 animation: cc-slideup-template--31561534275926__textimage_pHPVkK 0.32s cubic-bezier(0.16,1,0.3,1) both; 4284 } 4285 @keyframes cc-slideup-template--31561534275926__textimage_pHPVkK { 4286 from { transform: translateY(100%); } 4287 to { transform: translateY(0); } 4288 } 4289 4290 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-sheet-top { 4291 display: flex; align-items: center; justify-content: space-between; 4292 } 4293 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-sheet-title { 4294 font-size: 17px; font-weight: 800; color: #111; letter-spacing: -0.4px; 4295 } 4296 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-close { 4297 width: 32px; height: 32px; border-radius: 50%; 4298 background: #f2f2f2; border: none; cursor: pointer; 4299 display: flex; align-items: center; justify-content: center; 4300 font-size: 16px; color: #555; font-family: inherit; 4301 touch-action: manipulation; -webkit-tap-highlight-color: transparent; 4302 } 4303 4304 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-btns { 4305 display: grid; grid-template-columns: 1fr 1fr; gap: 10px; 4306 } 4307 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-btn { 4308 border: 2px solid rgba(0,0,0,0.1); 4309 background: transparent; border-radius: 14px; 4310 padding: 14px 12px; cursor: pointer; 4311 font-family: inherit; text-align: left; 4312 touch-action: manipulation; -webkit-tap-highlight-color: transparent; 4313 transition: border-color .2s, background .2s; 4314 } 4315 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-btn .mb-tag { 4316 display: block; font-size: 9px; font-weight: 800; 4317 letter-spacing: 1.5px; text-transform: uppercase; margin-bottom: 4px; 4318 } 4319 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-btn .mb-name { 4320 display: block; font-size: 14px; font-weight: 800; color: #111; 4321 } 4322 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-btn .mb-sub { 4323 display: block; font-size: 11px; color: rgba(0,0,0,0.38); 4324 margin-top: 3px; line-height: 1.4; 4325 } 4326 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-btn.basic .mb-tag { color: #999; } 4327 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-btn.basic.sel { 4328 border-color: rgba(0,0,0,0.3); background: rgba(0,0,0,0.04); 4329 } 4330 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-btn.pro .mb-tag { color: #111111; } 4331 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-btn.pro.sel { 4332 border-color: #111111; 4333 background: rgba(17, 17, 17, 0.07); 4334 } 4335 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-btn.pro.sel .mb-name { color: #111111; } 4336 4337 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-cv-wrap { 4338 height: 120px; border-radius: 14px; overflow: hidden; position: relative; 4339 background: #f8f8f5; 4340 } 4341 #cc-modal-template--31561534275926__textimage_pHPVkK canvas { 4342 position: absolute; inset: 0; width: 100%; height: 100%; display: block; 4343 } 4344 4345 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-status { text-align: center; } 4346 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-lbl { 4347 font-size: 14px; font-weight: 600; color: #111; min-height: 20px; 4348 transition: color .3s; 4349 } 4350 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-lbl.pro { color: #111111; } 4351 #cc-modal-template--31561534275926__textimage_pHPVkK .cc-m-sub { 4352 font-size: 12px; color: rgba(0,0,0,0.32); margin-top: 4px; 4353 } 4354 4355 /* ââ MOBILE ââ */ 4356 @media (max-width: 720px) { 4357 #cc-template--31561534275926__textimage_pHPVkK .cc-grid { grid-template-columns: 1fr; padding: 0 24px; gap: 40px; } 4358 #cc-template--31561534275926__textimage_pHPVkK .cc-image { aspect-ratio: 4/3; order: -1; } 4359 #cc-template--31561534275926__textimage_pHPVkK .cc-title { letter-spacing: -1px; } 4360 } 4361</style> 4362 4363<section id="cc-template--31561534275926__textimage_pHPVkK"> 4364 <div class="cc-grid"> 4365 4366 <!-- TEXT --> 4367 <div class="cc-text"><div class="cc-eyebrow">The first earbuds designed for small ears</div><h2 class="cc-title">EARBUDS THAT STAY PUT AND DONâT HURT</h2><p class="cc-body">Womenâs ears are on average 20% smaller than menâs. Yet most earbuds are designed in the same size for everyone. 4368<br> 4369TinyS was developed to solve this problem with its unique design.</p><!-- Demo trigger button --></div> 4370 4371 <!-- IMAGE --> 4372 <div class="cc-image"><img class="" src="//joyearbuds.com/cdn/shop/files/DSC0624_large_11adc014-db7e-43b4-bf95-84d878cdfd33.jpg?v=1779798547&width=900" alt="EARBUDS THAT STAY PUT AND DONâT HURT" loading="lazy" 4373 width="1920" height="2400"></div> 4374 4375 </div> 4376</section></div><section id="shopify-section-template--31561534275926__1779789053b109bb79" class="shopify-section"><div class="index-section"><div class="page-width"></div></div> 4377</section><section id="shopify-section-template--31561534275926__1779802571ee39fb0c" class="shopify-section"><div class="index-section"><div class="page-width"><div id="shopify-block-AVFh3KytkclQwZnJwK__loox_reviews_loox_testimonial_carousel_section_wL7t6Q" class="shopify-block shopify-app-block"> 4378 <div class="loox-v2-carousel-container loox-widget" 4379 id="LOOX-V2_CAROUSEL-AVFh3KytkclQwZnJwK__loox_reviews_loox_testimonial_carousel_section_wL7t6Q" 4380 data-widget="carousel"
4381 data-slide-type="testimonial" 4382 data-max-width="1100" 4383 data-desktop-font-size="25" 4384 data-mobile-font-size="20" 4385 data-max-number-of-characters="100" 4386 data-quote-mark-icon="style-1" 4387 data-reviewer-name-color="000000" 4388 data-text-color="000000" 4389 data-stars-color="" 4390 data-quotes-icon-color="eaeaea" 4391 data-arrows_icon-color="000000" 4392 data-arrows_hide-on-mobile="yes" 4393 data-pagination_active="yes" 4394 data-pagination_selected-dot-color="000000" 4395 data-pagination_dot-color="000000" 4396 data-autoplay_active="yes" 4397 data-autoplay_duration="2" 4398 data-product-ids="10259673448790" 4399 4400 data-customer-locale="en" 4401 4402 > 4403 </div> 4404 4405 4406 </div> 4407</div></div> 4408</section><div id="shopify-section-template--31561534275926__video_BBjtzP" class="shopify-section"><style> 4409 #vh-template--31561534275926__video_BBjtzP { 4410 position: relative; 4411 width: 100%; 4412 background: #111111; 4413 overflow: hidden; 4414 font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; 4415 /* Osion ulkoreunat â mobiili */ 4416 padding: 0px 0px 0px; 4417 } 4418 4419 /* ââ VIDEO WRAPPER ââ */ 4420 #vh-template--31561534275926__video_BBjtzP .vh-video-wrap { 4421 position: relative; 4422 width: 100%; 4423 max-width: 100%; 4424 margin: 0 auto; 4425 aspect-ratio: 9 / 16; 4426 overflow: hidden; 4427 border-radius: 0px; 4428 } 4429 4430 #vh-template--31561534275926__video_BBjtzP .vh-video-wrap video, 4431 #vh-template--31561534275926__video_BBjtzP .vh-video-wrap iframe { 4432 position: absolute; 4433 inset: 0; 4434 width: 100%; 4435 height: 100%; 4436 object-fit: cover; 4437 display: block; 4438 } 4439 4440 /* ââ OVERLAY ââ */ 4441 #vh-template--31561534275926__video_BBjtzP .vh-overlay { 4442 position: absolute; 4443 inset: 0; 4444 background: #000000; 4445 opacity: 0.05; 4446 pointer-events: none; 4447 } 4448 4449 /* ââ TEXT CONTENT ââ */ 4450 #vh-template--31561534275926__video_BBjtzP .vh-content { 4451 position: absolute; 4452 inset: 0; 4453 display: flex; 4454 flex-direction: column; 4455 align-items: center; 4456 justify-content: center; 4457 /* Sisällön välistykset â mobiili */ 4458 padding: 32px 24px; 4459 text-align: center; 4460 pointer-events: none; 4461 } 4462 #vh-template--31561534275926__video_BBjtzP .vh-eyebrow { 4463 font-size: 11px; 4464 font-weight: 700; 4465 letter-spacing: 2.5px; 4466 text-transform: uppercase; 4467 color: #ffffff; 4468 opacity: 0.7; 4469 margin-bottom: 10px; 4470 } 4471 #vh-template--31561534275926__video_BBjtzP .vh-heading { 4472 font-size: 30px; 4473 font-weight: 800; 4474 letter-spacing: -1.5px; 4475 line-height: 1.05; 4476 color: #ffffff; 4477 margin: 0 0 16px; 4478 } 4479 #vh-template--31561534275926__video_BBjtzP .vh-heading .vh-highlight, 4480 #vh-template--31561534275926__video_BBjtzP .vh-sub .vh-highlight { 4481 color: #e3557b; 4482 font-style: normal; 4483 } 4484 #vh-template--31561534275926__video_BBjtzP .vh-sub { 4485 font-size: clamp(14px, 1.8vw, 18px); 4486 line-height: 1.55; 4487 color: #ffffff; 4488 opacity: 0.8; 4489 max-width: 540px; 4490 margin: 0 0 28px; 4491 } 4492 #vh-template--31561534275926__video_BBjtzP .vh-btn { 4493 display: inline-block; 4494 padding: 14px 32px; 4495 background: #ffffff; 4496 color: #111111; 4497 font-size: 14px; 4498 font-weight: 700; 4499 letter-spacing: 0.2px; 4500 border-radius: 12px; 4501 text-decoration: none; 4502 pointer-events: auto; 4503 transition: opacity 0.15s, transform 0.15s; 4504 border: none; 4505 cursor: pointer; 4506 } 4507 #vh-template--31561534275926__video_BBjtzP .vh-btn:hover { opacity: 0.88; transform: translateY(-1px); } 4508 4509 /* ââ STAT BOXES ââ */ 4510 #vh-template--31561534275926__video_BBjtzP .vh-stats { 4511 display: flex; 4512 flex-wrap: wrap; 4513 gap: 10px; 4514 margin: 0 0 28px; 4515 justify-content: center; 4516 pointer-events: none; 4517 } 4518 #vh-template--31561534275926__video_BBjtzP .vh-stat { 4519 display: inline-flex; 4520 align-items: center; 4521 gap: 8px; 4522 padding: 9px 15px; 4523 border-radius: 14px; 4524 background: #ffffff1f; 4525 border: 1px solid #ffffff2e; 4526 color: #ffffff; 4527 font-size: 13px; 4528 font-weight: 600; 4529 letter-spacing: 0.1px; 4530 line-height: 1.2; 4531 -webkit-backdrop-filter: blur(6px); 4532 backdrop-filter: blur(6px); 4533 } 4534 #vh-template--31561534275926__video_BBjtzP .vh-stat svg { 4535 width: 16px; 4536 height: 16px; 4537 flex-shrink: 0; 4538 stroke: #ff803a; 4539 } 4540 4541 /* ââ DESKTOP ââ */ 4542 @media (min-width: 768px) { 4543 #vh-template--31561534275926__video_BBjtzP { 4544 /* Osion ulkoreunat â desktop */ 4545 padding: 0px 0px 0px; 4546 } 4547 #vh-template--31561534275926__video_BBjtzP .vh-video-wrap { 4548 aspect-ratio: 16 / 9; 4549 border-radius: 0px; 4550 } 4551 #vh-template--31561534275926__video_BBjtzP .vh-content { 4552 /* Sisällön välistykset â desktop */ 4553 padding: 56px 64px; 4554 } 4555 } 4556
4557 /* ââ MOBILE/DESKTOP VIDEO TOGGLE ââ */ 4558 #vh-template--31561534275926__video_BBjtzP .vh-desktop-video { display: none; } 4559 #vh-template--31561534275926__video_BBjtzP .vh-mobile-video { display: block; } 4560 4561 @media (min-width: 768px) { 4562 #vh-template--31561534275926__video_BBjtzP .vh-desktop-video { display: block; } 4563 #vh-template--31561534275926__video_BBjtzP .vh-mobile-video { display: none; } 4564 } 4565 4566 @media (prefers-reduced-motion: reduce) { 4567 #vh-template--31561534275926__video_BBjtzP .vh-btn { transition: none; } 4568 #vh-template--31561534275926__video_BBjtzP .vh-btn:hover { transform: none; } 4569 } 4570</style> 4571 4572<div id="vh-template--31561534275926__video_BBjtzP"> 4573 <div class="vh-video-wrap"><div class="vh-desktop-video"><video 4574 src="https://cdn.shopify.com/videos/c/o/v/970d4b2085224d9fb04733a83fbc7833.mp4" 4575 autoplay muted loop playsinline 4576 poster="Liquid error (sections/video line 210): invalid url input" 4577 ></video></div><div class="vh-mobile-video"><video 4578 src="https://cdn.shopify.com/videos/c/o/v/970d4b2085224d9fb04733a83fbc7833.mp4" 4579 autoplay muted loop playsinline 4580 poster="Liquid error (sections/video line 259): invalid url input" 4581 ></video></div><div class="vh-overlay"></div><div class="vh-content"><h2 class="vh-heading">GUARANTEED TO <span class="vh-highlight">STAY PUT</span></h2><p class="vh-sub">No more earbuds falling out.</p></div></div> 4582</div> 4583 4584</div><div id="shopify-section-template--31561534275926__joybudsfeature_LnVeR9" class="shopify-section"><style> 4585 #jfs-template--31561534275926__joybudsfeature_LnVeR9 { 4586 display: grid; 4587 grid-template-columns: 1fr 1fr; 4588 min-height: 300px; 4589 direction: ltr; 4590 margin-bottom: 0px; 4591 } 4592 #jfs-template--31561534275926__joybudsfeature_LnVeR9 > * { direction: ltr; } 4593 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-img { overflow: hidden; background: #ffffff; } 4594 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-img img { 4595 width: 100%; height: 100%; 4596 object-fit: cover; 4597 display: block; 4598 } 4599 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-img-placeholder { 4600 width: 100%; height: 100%; min-height: 300px; 4601 background: #fce7f3; 4602 display: flex; align-items: center; justify-content: center; font-size: 100px; 4603 } 4604 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-text { 4605 background: #fffffd; 4606 padding: 64px 72px; 4607 display: flex; flex-direction: column; justify-content: center; 4608 min-width: 0; 4609 } 4610 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-eyebrow { 4611 font-size: 11px; font-weight: 800; text-transform: uppercase; 4612 letter-spacing: .12em; color: #9ca3af; 4613 margin-bottom: 14px; 4614 } 4615 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-title { 4616 font-size: clamp(24px, 7vw, 34px); 4617 font-weight: 900; letter-spacing: -.02em; line-height: 1.05; 4618 4619 color: #111111; margin-bottom: 28px; 4620 overflow-wrap: break-word; 4621 } 4622 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-title .jfs-highlight { 4623 color: #ff4caf; 4624 } 4625 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-desc { 4626 font-size: 15px; line-height: 1.65; 4627 color: #374151; 4628 max-width: 56ch; 4629 margin: -10px 0 28px; 4630 } 4631 /* ââ ISO NUMERO + ÃÃNIAALTO ââ */ 4632 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-bignum { 4633 margin: -4px 0 28px; 4634 } 4635 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-bignum__num { 4636 font-size: clamp(96px, 14vw, 150px); 4637 font-weight: 900; line-height: .85; letter-spacing: -.03em; 4638 color: #111111; 4639 display: block; 4640 } 4641 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-bignum__label { 4642 display: block; margin-top: 6px; 4643 font-size: clamp(20px, 3vw, 28px); font-weight: 500; 4644 color: #111111; 4645 } 4646 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-wave { 4647 display: flex; align-items: center; gap: 3px; 4648 height: 44px; margin: 16px 0 14px; 4649 } 4650 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-wave i { 4651 width: 4px; border-radius: 2px; display: block; 4652 background: #ff4caf; 4653 animation: jfs-wv-template--31561534275926__joybudsfeature_LnVeR9 1.1s ease-in-out infinite; 4654 } 4655 @keyframes jfs-wv-template--31561534275926__joybudsfeature_LnVeR9 { 0%,100%{transform:scaleY(.35)} 50%{transform:scaleY(1)} } 4656 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-bignum__note { 4657 font-size: 15px; line-height: 1.6; 4658 color: #374151; 4659 max-width: 40ch; 4660 } 4661 @media (prefers-reduced-motion: reduce) { 4662 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-wave i { animation: none; transform: scaleY(.7); } 4663 } 4664 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-bullets { display: flex; flex-direction: column; gap: 16px; } 4665 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-bullet { display: flex; align-items: center; gap: 14px; } 4666 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-b-icon { 4667 flex-shrink: 0; 4668 display: flex; align-items: center; justify-content: center; 4669 font-size: 16px; color: #374151;
4670 min-width: 20px; 4671 } 4672 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-b-icon--img { 4673 width: 52px; 4674 height: 52px; 4675 border-radius: 50%; 4676 background: #fff3e8; 4677 overflow: hidden; 4678 font-size: 26px; 4679 } 4680 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-b-icon--img img { 4681 width: 55%; height: 55%; object-fit: contain; display: block; 4682 } 4683 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-b-text { font-size: 14px; color: #374151; line-height: 1.5; min-width: 0; } 4684 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-b-text strong { color: #111111; font-weight: 800; } 4685 4686 /* ââ ATC-NAPPI ââ */ 4687 #jf-atc-template--31561534275926__joybudsfeature_LnVeR9 { 4688 display: inline-flex; align-items: center; gap: 8px; position: relative; 4689 margin-top: 28px; 4690 background: #111111; 4691 color: #ffffff; 4692 padding: 14px 28px; border-radius: 100px; 4693 font-size: 15px; font-weight: 700; font-family: inherit; 4694 border: none; cursor: pointer; 4695 text-decoration: none; width: fit-content; 4696 transition: opacity .2s, transform .15s; 4697 -webkit-tap-highlight-color: transparent; 4698 } 4699 #jf-atc-template--31561534275926__joybudsfeature_LnVeR9:hover:not([disabled]):not([aria-busy="true"]) { opacity: 0.88; transform: scale(1.02); } 4700 #jf-atc-template--31561534275926__joybudsfeature_LnVeR9[disabled] { opacity: 0.6; cursor: not-allowed; } 4701 #jf-atc-template--31561534275926__joybudsfeature_LnVeR9[aria-busy="true"] { opacity: 0.75; cursor: wait; } 4702 #jf-atc-template--31561534275926__joybudsfeature_LnVeR9[aria-busy="true"] .jf-btn-txt { opacity: 0; } 4703 .jf-btn-spinner-template--31561534275926__joybudsfeature_LnVeR9 { 4704 display: none; width: 18px; height: 18px; 4705 border: 2px solid rgba(255,255,255,0.35); border-top-color: #fff; 4706 border-radius: 50%; 4707 animation: jf-spin-template--31561534275926__joybudsfeature_LnVeR9 .7s linear infinite; 4708 position: absolute; top: 50%; left: 50%; 4709 transform: translate(-50%,-50%); 4710 } 4711 #jf-atc-template--31561534275926__joybudsfeature_LnVeR9[aria-busy="true"] .jf-btn-spinner-template--31561534275926__joybudsfeature_LnVeR9 { display: block; } 4712 @keyframes jf-spin-template--31561534275926__joybudsfeature_LnVeR9 { to { transform: translate(-50%,-50%) rotate(360deg); } } 4713 4714 @media (max-width: 768px) { 4715 #jfs-template--31561534275926__joybudsfeature_LnVeR9 { grid-template-columns: 1fr; direction: ltr; } 4716 #jfs-template--31561534275926__joybudsfeature_LnVeR9 .jfs-text { padding: 40px 32px; } 4717 } 4718</style> 4719 4720<div id="jfs-template--31561534275926__joybudsfeature_LnVeR9"> 4721 <div class="jfs-img"><img src="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_26_2026_from_1-1_Version_1.png?v=1779803163&width=1400" 4722 alt="*SMALLER* SIZE. *LIGHTER* DESIGN." 4723 width="1254" 4724 height="1254" 4725 loading="lazy"></div> 4726 4727 <div class="jfs-text"><p class="jfs-eyebrow">Markkinoiden pienin kuuloke</p><h2 class="jfs-title"><span class="jfs-highlight">SMALLER</span> SIZE. <span class="jfs-highlight">LIGHTER</span> DESIGN.</h2><div class="jfs-bullets"><div class="jfs-bullet" ><div class="jfs-b-text">A small, lightweight earbud moves less, feels more comfortable and stays more securely in place. That is why TinyS was designed from the ground up to be the smallest earbud on the market.</div> 4728 </div><div class="jfs-bullet" ><div class="jfs-b-icon">â</div><div class="jfs-b-text">Fits even small ears</div> 4729 </div><div class="jfs-bullet" ><div class="jfs-b-icon">â</div><div class="jfs-b-text">Stays more stable during everyday activities and workouts</div> 4730 </div><div class="jfs-bullet" ><div class="jfs-b-icon">â</div><div class="jfs-b-text">Feels lightweight even after hours of use</div> 4731 </div></div><button id="jf-atc-template--31561534275926__joybudsfeature_LnVeR9" type="button" aria-busy="false" 4732 data-variant="52813102088534" 4733 data-gift=""> 4734 <span class="jf-btn-txt">Add To Cart</span> 4735 <span class="jf-btn-spinner-template--31561534275926__joybudsfeature_LnVeR9" aria-hidden="true"></span> 4736 </button></div> 4737</div>
4737<script> 4738(function () { 4739 var btn = document.getElementById('jf-atc-template--31561534275926__joybudsfeature_LnVeR9'); 4740 if (!btn) return; 4741 4742 function setBusy(on) { 4743 btn.setAttribute('aria-busy', on ? 'true' : 'false'); 4744 btn.disabled = on; 4745 } 4746 4747 btn.addEventListener('click', function () { 4748 setBusy(true); 4749 var variantId = parseInt(btn.dataset.variant, 10); 4750 var giftId = parseInt(btn.dataset.gift, 10) || null; 4751 var cartRoot = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root) || '/'; 4752 4753 var items = [{ id: variantId, quantity: 1 }]; 4754 4755 if (giftId) { 4756 items.push({ 4757 id: giftId, 4758 quantity: 1, 4759 properties: { '_free_gift': 'true', '_free_gift_campaign': 'jfs-bundle' } 4760 }); 4761 } 4762 4763 fetch(cartRoot + 'cart/add.js', { 4764 method: 'POST', 4765 headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, 4766 body: JSON.stringify({ items: items }) 4767 }) 4768 .then(function (res) { 4769 if (!res.ok) return res.json().then(function (d) { throw new Error(d.description || d.message || 'Virhe'); }); 4770 return res.json(); 4771 }) 4772 .then(function (data) { 4773 setBusy(false); 4774 btn.dispatchEvent(new CustomEvent('ajaxProduct:added', { 4775 bubbles: true, 4776 detail: { product: data, addToCartBtn: btn } 4777 })); 4778 }) 4779 .catch(function (err) { 4780 setBusy(false); 4781 alert('Virhe: ' + (err.message || 'Yritä uudelleen.')); 4782 }); 4783 }); 4784}()); 4785</script>
4785</div><div id="shopify-section-template--31561534275926__cards_3Fm4E6" class="shopify-section"><style> 4786 #lc-template--31561534275926__cards_3Fm4E6 { 4787 padding: 48px 0 64px; 4788 background: #ffffff; 4789 font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; 4790 box-sizing: border-box; 4791 } 4792 #lc-template--31561534275926__cards_3Fm4E6 *, #lc-template--31561534275926__cards_3Fm4E6 *::before, #lc-template--31561534275926__cards_3Fm4E6 *::after { box-sizing: border-box; } 4793 4794 /* ââ SECTION HEADING ââ */ 4795 #lc-template--31561534275926__cards_3Fm4E6 .lc-header { 4796 text-align: center; 4797 padding: 0 24px; 4798 margin-bottom: 36px; 4799 } 4800 #lc-template--31561534275926__cards_3Fm4E6 .lc-eyebrow { 4801 font-size: 10px; font-weight: 700; 4802 letter-spacing: 2px; text-transform: uppercase; 4803 color: rgba(0,0,0,0.35); 4804 margin-bottom: 10px; 4805 } 4806 #lc-template--31561534275926__cards_3Fm4E6 .lc-title { 4807 font-size: clamp(26px, 4vw, 44px); 4808 font-weight: 900; 4809 letter-spacing: -1.5px; 4810 color: #111; 4811 line-height: 1.05; 4812 margin: 0; 4813 } 4814 #lc-template--31561534275926__cards_3Fm4E6 .lc-title .lc-highlight { 4815 color: #ff4caf; 4816 } 4817 4818 /* ââ TRACK WRAPPER (for edge fade on desktop many) ââ */ 4819 #lc-template--31561534275926__cards_3Fm4E6 .lc-track-wrap { 4820 position: relative; 4821 } 4822 4823 /* ââ TRACK (scroll container) ââ */ 4824 #lc-template--31561534275926__cards_3Fm4E6 .lc-track { 4825 display: flex; 4826 gap: 16px; 4827 padding: 0 24px 24px; 4828 4829 /* Mobile: horizontal scroll snap */ 4830 overflow-x: auto; 4831 scroll-snap-type: x mandatory; 4832 -webkit-overflow-scrolling: touch; 4833 scrollbar-width: none; 4834 } 4835 #lc-template--31561534275926__cards_3Fm4E6 .lc-track::-webkit-scrollbar { display: none; } 4836 4837 /* ââ CARD ââ */ 4838 #lc-template--31561534275926__cards_3Fm4E6 .lc-card { 4839 flex: 0 0 calc(85vw - 32px); /* mobile: almost full width */ 4840 scroll-snap-align: center; 4841 display: flex; 4842 flex-direction: column; 4843 gap: 16px; 4844 } 4845 4846 /* ââ IMAGE ââ */ 4847 #lc-template--31561534275926__cards_3Fm4E6 .lc-img-wrap { 4848 border-radius: 20px; 4849 overflow: hidden; 4850 aspect-ratio: 3 / 4; 4851 background: #e8e8e4; 4852 position: relative; 4853 } 4854 #lc-template--31561534275926__cards_3Fm4E6 .lc-img-wrap img { 4855 width: 100%; 4856 height: 100%; 4857 object-fit: cover; 4858 display: block; 4859 transition: transform .5s ease; 4860 } 4861 #lc-template--31561534275926__cards_3Fm4E6 .lc-img-wrap:hover img { transform: scale(1.04); } 4862 4863 /* ââ TEXT ââ */ 4864 #lc-template--31561534275926__cards_3Fm4E6 .lc-text { 4865 display: flex; 4866 flex-direction: column; 4867 gap: 6px; 4868 padding: 0 4px; 4869 } 4870 #lc-template--31561534275926__cards_3Fm4E6 .lc-icon-row { 4871 display: flex; 4872 align-items: center; 4873 gap: 8px; 4874 } 4875 #lc-template--31561534275926__cards_3Fm4E6 .lc-icon { 4876 font-size: 18px; 4877 line-height: 1; 4878 flex-shrink: 0; 4879 } 4880 #lc-template--31561534275926__cards_3Fm4E6 .lc-card-title { 4881 font-size: 17px; 4882 font-weight: 800; 4883 letter-spacing: -0.4px; 4884 color: #111; 4885 margin: 0; 4886 } 4887 #lc-template--31561534275926__cards_3Fm4E6 .lc-card-body { 4888 font-size: 14px; 4889 line-height: 1.6; 4890 color: rgba(0,0,0,0.5); 4891 margin: 0; 4892 } 4893 4894 /* ââ DOTS ââ */ 4895 #lc-template--31561534275926__cards_3Fm4E6 .lc-dots { 4896 display: flex; 4897 justify-content: center; 4898 gap: 6px; 4899 padding-top: 4px; 4900 } 4901 #lc-template--31561534275926__cards_3Fm4E6 .lc-dot { 4902 width: 6px; height: 6px; 4903 border-radius: 50%; 4904 background: rgba(0,0,0,0.15); 4905 transition: background .3s, width .3s; 4906 cursor: pointer; 4907 border: none; 4908 padding: 0; 4909 } 4910 #lc-template--31561534275926__cards_3Fm4E6 .lc-dot.active { 4911 background: #111; 4912 width: 20px; 4913 border-radius: 100px; 4914 } 4915 4916 /* ââ ARROW BUTTONS (desktop many) ââ */ 4917 #lc-template--31561534275926__cards_3Fm4E6 .lc-arrows { 4918 display: none; 4919 } 4920 #lc-template--31561534275926__cards_3Fm4E6 .lc-arrow-btn { 4921 width: 44px; height: 44px; 4922 border-radius: 50%; 4923 border: 1.5px solid rgba(0,0,0,0.12); 4924 background: #fff; 4925 cursor: pointer; 4926 display: flex; 4927 align-items: center; 4928 justify-content: center; 4929 font-size: 18px; 4930 color: #111; 4931 transition: background 0.15s, border-color 0.15s, opacity 0.15s; 4932 box-shadow: 0 2px 8px rgba(0,0,0,0.06); 4933 flex-shrink: 0; 4934 } 4935 #lc-template--31561534275926__cards_3Fm4E6 .lc-arrow-btn:hover { background: #f5f5f5; border-color: rgba(0,0,0,0.22); } 4936 #lc-template--31561534275926__cards_3Fm4E6 .lc-arrow-btn:disabled { opacity: 0.3; cursor: default; } 4937 4938 /* ââ DESKTOP ââ */
4939 @media (min-width: 768px) {/* â¤3 cards: static grid */ 4940 #lc-template--31561534275926__cards_3Fm4E6 .lc-track { 4941 display: grid; 4942 grid-template-columns: repeat(3, 1fr); 4943 overflow-x: visible; 4944 padding: 0 40px 0; 4945 gap: 20px; 4946 } 4947 #lc-template--31561534275926__cards_3Fm4E6 .lc-card { 4948 flex: unset; 4949 scroll-snap-align: unset; 4950 } 4951 #lc-template--31561534275926__cards_3Fm4E6 .lc-dots { display: none; }} 4952 4953 @media (min-width: 1100px) {#lc-template--31561534275926__cards_3Fm4E6 .lc-track { padding: 0 64px 0; gap: 24px; }} 4954 4955</style> 4956 4957<div id="lc-template--31561534275926__cards_3Fm4E6"><div class="lc-header"><div class="lc-eyebrow">-</div><h2 class="lc-title">DESIGNED TO <span class="lc-highlight">STAY PUT</span></h2> 4958 </div><div class="lc-track-wrap"> 4959 <div class="lc-track" id="lcTrack-template--31561534275926__cards_3Fm4E6"><div class="lc-card" > 4960 4961 <div class="lc-img-wrap"><img src="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_26_2026_from_JOY_6.png?v=1779798278&width=800" alt="Designed around the ear" srcset="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_26_2026_from_JOY_6.png?v=1779798278&width=400 400w, //joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_26_2026_from_JOY_6.png?v=1779798278&width=600 600w, //joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_26_2026_from_JOY_6.png?v=1779798278&width=800 800w" width="800" height="800" loading="lazy"> 4962</div> 4963 4964 <div class="lc-text"> 4965 <div class="lc-icon-row"><p class="lc-card-title">Designed around the ear</p> 4966 </div><p class="lc-card-body">TinySâs ergonomic design follows the natural shape of the ear, with its centre of gravity positioned closer to the ear canal. This makes the earbud feel more natural, stay securely in place and remain comfortable even during longer listening sessions.</p></div> 4967 4968 </div><div class="lc-card" > 4969 4970 <div class="lc-img-wrap"><img src="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_from_JOY.png?v=1781352365&width=800" alt="Multiple points of support" srcset="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_from_JOY.png?v=1781352365&width=400 400w, //joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_from_JOY.png?v=1781352365&width=600 600w, //joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_from_JOY.png?v=1781352365&width=800 800w" width="800" height="860" loading="lazy"> 4971</div> 4972 4973 <div class="lc-text"> 4974 <div class="lc-icon-row"><p class="lc-card-title">Multiple points of support</p> 4975 </div><p class="lc-card-body">Despite its small size, TinyS rests against the ear at several points. This distributes pressure more evenly and keeps the earbud securely in place, even when youâre moving.</p></div> 4976 4977 </div><div class="lc-card" > 4978 4979 <div class="lc-img-wrap"><img src="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026.png?v=1779960003&width=800" alt="Find your perfect fit" srcset="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026.png?v=1779960003&width=400 400w, //joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026.png?v=1779960003&width=600 600w, //joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026.png?v=1779960003&width=800 800w" width="800" height="800" loading="lazy"> 4980</div> 4981 4982 <div class="lc-text"> 4983 <div class="lc-icon-row"><p class="lc-card-title">Find your perfect fit</p> 4984 </div><p class="lc-card-body">Every ear is unique. That is why TinyS comes with seven different ear tip sizes, helping you find the fit that is just right for you.</p></div> 4985 4986 </div></div> 4987 </div> 4988 4989 <!-- Dots --> 4990 <div class="lc-dots" id="lcDots-template--31561534275926__cards_3Fm4E6"><button class="lc-dot active" data-index="0" aria-label="Kortti 1"></button><button class="lc-dot" data-index="1" aria-label="Kortti 2"></button><button class="lc-dot" data-index="2" aria-label="Kortti 3"></button></div></div> 4991
4992<script> 4993(function () { 4994 var track = document.getElementById('lcTrack-template--31561534275926__cards_3Fm4E6'); 4995 var dots = document.querySelectorAll('#lcDots-template--31561534275926__cards_3Fm4E6 .lc-dot'); 4996 var lc_many = false; 4997 4998 if (!track) return; 4999 5000 /* ââ DOTS UPDATE ââ */ 5001 function updateDots() { 5002 if (!dots.length) return; 5003 var cards = track.querySelectorAll('.lc-card'); 5004 var scrollLeft = track.scrollLeft; 5005 var trackWidth = track.offsetWidth; 5006 var closest = 0, minDist = Infinity; 5007 5008 cards.forEach(function (card, i) { 5009 var cardCenter = card.offsetLeft + card.offsetWidth / 2; 5010 var dist = Math.abs(cardCenter - scrollLeft - trackWidth / 2); 5011 if (dist < minDist) { minDist = dist; closest = i; } 5012 }); 5013 5014 dots.forEach(function (d, i) { 5015 d.classList.toggle('active', i === closest); 5016 }); 5017 } 5018 5019 /* ââ DOTS VISIBILITY (hide on desktop grid) ââ */ 5020 function checkDotsVisibility() { 5021 var dotsEl = document.getElementById('lcDots-template--31561534275926__cards_3Fm4E6'); 5022 if (!dotsEl) return; 5023 var isDesktop = window.innerWidth >= 768; 5024 if (isDesktop && (!lc_many || false)) { 5025 dotsEl.style.display = 'none'; 5026 } else { 5027 dotsEl.style.display = ''; 5028 } 5029 } 5030 5031 track.addEventListener('scroll', updateDots, { passive: true }); 5032 5033 /* Dot click â scroll to card */ 5034 dots.forEach(function (dot) { 5035 dot.addEventListener('click', function () { 5036 var idx = parseInt(dot.getAttribute('data-index'), 10); 5037 var cards = track.querySelectorAll('.lc-card'); 5038 if (!cards[idx]) return; 5039 var card = cards[idx]; 5040 var target = card.offsetLeft - (track.offsetWidth - card.offsetWidth) / 2; 5041 track.scrollTo({ left: target, behavior: 'smooth' }); 5042 }); 5043 }); 5044 5045 /* ââ ARROW BUTTONS (desktop many) ââ */ 5046 if (lc_many) { 5047 var prevBtn = document.getElementById('lcPrev-template--31561534275926__cards_3Fm4E6'); 5048 var nextBtn = document.getElementById('lcNext-template--31561534275926__cards_3Fm4E6'); 5049 5050 function updateArrows() { 5051 if (!prevBtn || !nextBtn) return; 5052 prevBtn.disabled = track.scrollLeft <= 4; 5053 nextBtn.disabled = track.scrollLeft >= track.scrollWidth - track.offsetWidth - 4; 5054 } 5055 5056 if (prevBtn) { 5057 prevBtn.addEventListener('click', function () { 5058 var cards = track.querySelectorAll('.lc-card'); 5059 var cardWidth = cards.length ? cards[0].offsetWidth : 300; 5060 var gap = 20; 5061 track.scrollBy({ left: -(cardWidth + gap), behavior: 'smooth' }); 5062 }); 5063 } 5064 5065 if (nextBtn) { 5066 nextBtn.addEventListener('click', function () { 5067 var cards = track.querySelectorAll('.lc-card'); 5068 var cardWidth = cards.length ? cards[0].offsetWidth : 300; 5069 var gap = 20; 5070 track.scrollBy({ left: cardWidth + gap, behavior: 'smooth' }); 5071 }); 5072 } 5073 5074 track.addEventListener('scroll', updateArrows, { passive: true }); 5075 updateArrows(); 5076 } 5077 5078 /* Initial state */ 5079 checkDotsVisibility(); 5080 window.addEventListener('resize', checkDotsVisibility); 5081 updateDots(); 5082}()); 5083</script>
5083 5084 5085</div><div id="shopify-section-template--31561534275926__joybudsfeature_PPgYtd" class="shopify-section"><style> 5086 #jfs-template--31561534275926__joybudsfeature_PPgYtd { 5087 display: grid; 5088 grid-template-columns: 1fr 1fr; 5089 min-height: 300px; 5090 direction: ltr; 5091 margin-bottom: 0px; 5092 } 5093 #jfs-template--31561534275926__joybudsfeature_PPgYtd > * { direction: ltr; } 5094 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-img { overflow: hidden; background: #ffffff; } 5095 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-img img { 5096 width: 100%; height: 100%; 5097 object-fit: cover; 5098 display: block; 5099 } 5100 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-img-placeholder { 5101 width: 100%; height: 100%; min-height: 300px; 5102 background: #fce7f3; 5103 display: flex; align-items: center; justify-content: center; font-size: 100px; 5104 } 5105 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-text { 5106 background: #fffffd; 5107 padding: 64px 72px; 5108 display: flex; flex-direction: column; justify-content: center; 5109 min-width: 0; 5110 } 5111 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-eyebrow { 5112 font-size: 11px; font-weight: 800; text-transform: uppercase; 5113 letter-spacing: .12em; color: #9ca3af; 5114 margin-bottom: 14px; 5115 } 5116 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-title { 5117 font-size: clamp(24px, 7vw, 34px); 5118 font-weight: 900; letter-spacing: -.02em; line-height: 1.05; 5119 5120 color: #111111; margin-bottom: 28px; 5121 overflow-wrap: break-word; 5122 } 5123 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-title .jfs-highlight { 5124 color: #ff4caf; 5125 } 5126 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-desc { 5127 font-size: 15px; line-height: 1.65; 5128 color: #374151; 5129 max-width: 56ch; 5130 margin: -10px 0 28px; 5131 } 5132 /* ââ ISO NUMERO + ÃÃNIAALTO ââ */ 5133 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-bignum { 5134 margin: -4px 0 28px; 5135 } 5136 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-bignum__num { 5137 font-size: clamp(96px, 14vw, 150px); 5138 font-weight: 900; line-height: .85; letter-spacing: -.03em; 5139 color: #111111; 5140 display: block; 5141 } 5142 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-bignum__label { 5143 display: block; margin-top: 6px; 5144 font-size: clamp(20px, 3vw, 28px); font-weight: 500; 5145 color: #111111; 5146 } 5147 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-wave { 5148 display: flex; align-items: center; gap: 3px; 5149 height: 44px; margin: 16px 0 14px; 5150 } 5151 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-wave i { 5152 width: 4px; border-radius: 2px; display: block; 5153 background: #ff4caf; 5154 animation: jfs-wv-template--31561534275926__joybudsfeature_PPgYtd 1.1s ease-in-out infinite; 5155 } 5156 @keyframes jfs-wv-template--31561534275926__joybudsfeature_PPgYtd { 0%,100%{transform:scaleY(.35)} 50%{transform:scaleY(1)} } 5157 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-bignum__note { 5158 font-size: 15px; line-height: 1.6; 5159 color: #374151; 5160 max-width: 40ch; 5161 } 5162 @media (prefers-reduced-motion: reduce) { 5163 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-wave i { animation: none; transform: scaleY(.7); } 5164 } 5165 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-bullets { display: flex; flex-direction: column; gap: 16px; } 5166 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-bullet { display: flex; align-items: center; gap: 14px; } 5167 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-b-icon { 5168 flex-shrink: 0; 5169 display: flex; align-items: center; justify-content: center; 5170 font-size: 16px; color: #374151; 5171 min-width: 20px; 5172 } 5173 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-b-icon--img { 5174 width: 68px; 5175 height: 68px; 5176 border-radius: 50%; 5177 background: #f9f9f9; 5178 overflow: hidden; 5179 font-size: 34px; 5180 } 5181 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-b-icon--img img { 5182 width: 55%; height: 55%; object-fit: contain; display: block; 5183 } 5184 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-b-text { font-size: 14px; color: #374151; line-height: 1.5; min-width: 0; } 5185 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-b-text strong { color: #111111; font-weight: 800; } 5186 5187 /* ââ ATC-NAPPI ââ */ 5188 #jf-atc-template--31561534275926__joybudsfeature_PPgYtd { 5189 display: inline-flex; align-items: center; gap: 8px; position: relative; 5190 margin-top: 28px; 5191 background: #111111; 5192 color: #ffffff; 5193 padding: 14px 28px; border-radius: 100px; 5194 font-size: 15px; font-weight: 700; font-family: inherit; 5195 border: none; cursor: pointer; 5196 text-decoration: none; width: fit-content; 5197 transition: opacity .2s, transform .15s; 5198 -webkit-tap-highlight-color: transparent; 5199 } 5200 #jf-atc-template--31561534275926__joybudsfeature_PPgYtd:hover:not([disabled]):not([aria-busy="true"]) { opacity: 0.88; transform: scale(1.02); } 5201 #jf-atc-template--31561534275926__joybudsfeature_PPgYtd[disabled] { opacity: 0.6;
5201 cursor: not-allowed; } 5202 #jf-atc-template--31561534275926__joybudsfeature_PPgYtd[aria-busy="true"] { opacity: 0.75; cursor: wait; } 5203 #jf-atc-template--31561534275926__joybudsfeature_PPgYtd[aria-busy="true"] .jf-btn-txt { opacity: 0; } 5204 .jf-btn-spinner-template--31561534275926__joybudsfeature_PPgYtd { 5205 display: none; width: 18px; height: 18px; 5206 border: 2px solid rgba(255,255,255,0.35); border-top-color: #fff; 5207 border-radius: 50%; 5208 animation: jf-spin-template--31561534275926__joybudsfeature_PPgYtd .7s linear infinite; 5209 position: absolute; top: 50%; left: 50%; 5210 transform: translate(-50%,-50%); 5211 } 5212 #jf-atc-template--31561534275926__joybudsfeature_PPgYtd[aria-busy="true"] .jf-btn-spinner-template--31561534275926__joybudsfeature_PPgYtd { display: block; } 5213 @keyframes jf-spin-template--31561534275926__joybudsfeature_PPgYtd { to { transform: translate(-50%,-50%) rotate(360deg); } } 5214 5215 @media (max-width: 768px) { 5216 #jfs-template--31561534275926__joybudsfeature_PPgYtd { grid-template-columns: 1fr; direction: ltr; } 5217 #jfs-template--31561534275926__joybudsfeature_PPgYtd .jfs-text { padding: 40px 32px; } 5218 } 5219</style> 5220 5221<div id="jfs-template--31561534275926__joybudsfeature_PPgYtd"> 5222 <div class="jfs-img"><img src="//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_27_2026_from_JOY_1.png?v=1779887040&width=1400" 5223 alt="SMALL IN YOUR EAR. *BIG IN EVERY OTHER WAY.*" 5224 width="1254" 5225 height="1254" 5226 loading="lazy"></div> 5227 5228 <div class="jfs-text"><p class="jfs-eyebrow">The smallest earbud on the market</p><h2 class="jfs-title">SMALL IN YOUR EAR. <span class="jfs-highlight">BIG IN EVERY OTHER WAY.</span></h2><div class="jfs-bullets"><div class="jfs-bullet" ><div class="jfs-b-text">TinyS is designed to be small and lightweight without compromising on sound quality. Enjoy rich sound, clear calls and long battery life in an exceptionally compact design.</div> 5229 </div><div class="jfs-bullet" ><div class="jfs-b-icon jfs-b-icon--img"> 5230 <img src="//joyearbuds.com/cdn/shop/files/001-musical-note.png?v=1745998847&width=80" 5231 alt="" 5232 width="80" height="80" loading="lazy"> 5233 </div><div class="jfs-b-text">Premium Hi-Fi sound in a pocket-sized design</div> 5234 </div><div class="jfs-bullet" ><div class="jfs-b-icon jfs-b-icon--img"> 5235 <img src="//joyearbuds.com/cdn/shop/files/003-mic.png?v=1745998847&width=80" 5236 alt="" 5237 width="80" height="80" loading="lazy"> 5238 </div><div class="jfs-b-text">Clear calls, even on the go</div> 5239 </div><div class="jfs-bullet" ><div class="jfs-b-icon jfs-b-icon--img"> 5240 <img src="//joyearbuds.com/cdn/shop/files/003-battery-1.png?v=1745998848&width=80" 5241 alt="" 5242 width="80" height="80" loading="lazy"> 5243 </div><div class="jfs-b-text">6 hours of uninterrupted playback and up to 20 hours with the charging case</div> 5244 </div></div></div> 5245</div></div><section id="shopify-section-template--31561534275926__1779803510f079de07" class="shopify-section"><div class="index-section"><div class="page-width"></div></div> 5246</section><div id="shopify-section-template--31561534275926__bundleloppu_eeWQPn" class="shopify-section"><section id="ccb-template--31561534275926__bundleloppu_eeWQPn" class="ccb"><h2 class="ccb__heading">GET EARBUDS THAT</h2><h2 class="ccb__heading ccb__heading--highlight">FIT AND STAY PUT</h2><p class="ccb__sub">Offer available for a limited time only.</p><input type="hidden" id="ccb-main-template--31561534275926__bundleloppu_eeWQPn" value="52813102088534"><button 5247 class="ccb__btn" 5248 id="ccb-btn-template--31561534275926__bundleloppu_eeWQPn" 5249 type="button" 5250 aria-busy="false" 5251 5252 > 5253 <span class="ccb__btn-txt">TRY THEM RISK-FREE FOR 60 DAYS</span> 5254 <span class="ccb__spinner" aria-hidden="true"></span> 5255 </button> 5256 5257 <div class="ccb__error" id="ccb-err-template--31561534275926__bundleloppu_eeWQPn" role="alert" hidden></div><div class="ccb__trust"><span class="ccb__badge"> 5258 <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#00C896" stroke-width="2.5"><polyline points="20 6 9 17 4 12"/></svg> 5259 Free delivery 5260 </span><span class="ccb__badge"> 5261 <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#00C896" stroke-width="2.5"><polyline points="20 6 9 17 4 12"/></svg> 5262 60 days returns 5263 </span><span class="ccb__badge"> 5264 <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="#00C896" stroke-width="2.5"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg> 5265 3 year warranty 5266 </span></div></section> 5267 5268<style> 5269 #ccb-template--31561534275926__bundleloppu_eeWQPn { 5270 --pink: #ff3d85; 5271 --orange: #ff8042; 5272 --grad: linear-gradient(135deg, #ff3d85 0%, #ff8042 100%); 5273 --ink: #0D0D0D; 5274 --ink2: #555555; 5275 --ink3: #888888; 5276 --green: #00C896; 5277 --border: #E8E8E8; 5278 5279 background: #ffffff; 5280 text-align: center; 5281 padding: 72px 40px 72px; 5282 font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; 5283 position: relative; 5284 overflow: hidden; 5285 border-top: 0px solid var(--border); 5286 border-bottom: 1px solid var(--border); 5287 } 5288 5289 /* ââ Label ââ */ 5290 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__label { 5291 font-size: 11px; 5292 font-weight: 800; 5293 letter-spacing: 3px; 5294 text-transform: uppercase; 5295 color: var(--pink); 5296 margin-bottom: 16px; 5297 } 5298 5299 /* ââ Heading ââ */ 5300 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__heading { 5301 font-size: clamp(28px, 4vw, 56px); 5302 font-weight: 900; 5303 color: #0d0d0d; 5304 letter-spacing: -1px; 5305 line-height: 1.05; 5306 margin-bottom: 4px; 5307 } 5308 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__heading--highlight { 5309 background: var(--grad); 5310 -webkit-background-clip: text; 5311 -webkit-text-fill-color: transparent; 5312 background-clip: text; 5313 margin-bottom: 20px; 5314 padding: 8px 4px 4px; 5315 margin-top: -8px; 5316 display: inline-block; 5317 } 5318 5319 /* ââ Subtext ââ */ 5320 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__sub { 5321 font-size: clamp(14px, 1.4vw, 17px); 5322 color: #555555; 5323 line-height: 1.6; 5324 max-width: 600px; 5325 margin: 0 auto 36px; 5326 } 5327 5328 /* ââ Button ââ */ 5329 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__btn { 5330 display: inline-flex; 5331 align-items: center; 5332 justify-content: center; 5333 background: var(--grad); 5334 color: #fff; 5335 font-size: clamp(15px, 1.6vw, 19px); 5336 font-weight: 900; 5337 letter-spacing: 0.2px; 5338 border: none; 5339 border-radius: 100px; 5340 padding: 20px 52px; 5341 box-shadow: 0 6px 32px rgba(255, 61, 133, 0.35); 5342 transition: transform .2s, box-shadow .2s, opacity .2s; 5343 margin-bottom: 28px; 5344 min-width: 300px; 5345 cursor: pointer; 5346 position: relative; 5347 min-height: 60px; 5348 } 5349 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__btn:hover:not([disabled]):not([aria-busy="true"]) { 5350 transform: translateY(-3px) scale(1.02); 5351 box-shadow: 0 14px 48px rgba(255, 61, 133, 0.5); 5352 } 5353 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__btn:active:not([disabled]) { transform: none; } 5354 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__btn[disabled] { background: #e5e5e5; color: #999; box-shadow: none;
5354 cursor: not-allowed; } 5355 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__btn[aria-busy="true"] { opacity: 0.75; cursor: wait; } 5356 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__btn[aria-busy="true"] .ccb__btn-txt { opacity: 0; } 5357 5358 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__spinner { 5359 display: none; 5360 width: 22px; height: 22px; 5361 border: 2.5px solid rgba(255,255,255,0.35); 5362 border-top-color: #fff; 5363 border-radius: 50%; 5364 animation: ccb-spin-template--31561534275926__bundleloppu_eeWQPn .7s linear infinite; 5365 position: absolute; 5366 top: 50%; left: 50%; 5367 transform: translate(-50%,-50%); 5368 } 5369 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__btn[aria-busy="true"] .ccb__spinner { display: block; } 5370 @keyframes ccb-spin-template--31561534275926__bundleloppu_eeWQPn { to { transform: translate(-50%,-50%) rotate(360deg); } } 5371 5372 /* ââ Error ââ */ 5373 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__error { 5374 background: #FFF2F2; 5375 border: 1px solid #FFCCCC; 5376 border-radius: 8px; 5377 padding: 10px 16px; 5378 font-size: 13px; 5379 color: #CC2222; 5380 margin-bottom: 16px; 5381 display: inline-block; 5382 } 5383 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__error[hidden] { display: none; } 5384 5385 /* ââ Trust ââ */ 5386 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__trust { 5387 display: flex; 5388 align-items: center; 5389 justify-content: center; 5390 gap: 24px; 5391 flex-wrap: wrap; 5392 } 5393 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__badge { 5394 display: flex; 5395 align-items: center; 5396 gap: 6px; 5397 font-size: 13px; 5398 color: #888888; 5399 } 5400 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__badge svg { flex-shrink: 0; } 5401 5402 /* ââ Responsive ââ */ 5403 @media (max-width: 600px) { 5404 #ccb-template--31561534275926__bundleloppu_eeWQPn { padding: 48px 20px; } 5405 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__btn { min-width: 0; width: 100%; padding: 18px 24px; } 5406 #ccb-template--31561534275926__bundleloppu_eeWQPn .ccb__trust { gap: 14px; } 5407 } 5408</style> 5409
5410<script> 5411(function () { 5412 'use strict'; 5413 5414 var SID = "template--31561534275926__bundleloppu_eeWQPn"; 5415 5416 var btn = document.getElementById('ccb-btn-' + SID); 5417 var errorEl = document.getElementById('ccb-err-' + SID); 5418 5419 if (!btn) return; 5420 5421 function setError(msg) { 5422 if (!errorEl) return; 5423 errorEl.hidden = !msg; 5424 if (msg) errorEl.textContent = msg; 5425 } 5426 5427 function setBusy(on) { 5428 btn.setAttribute('aria-busy', on ? 'true' : 'false'); 5429 btn.disabled = on; 5430 } 5431 5432 btn.addEventListener('click', function () { 5433 setError(null); 5434 setBusy(true); 5435 5436 var mainId = null; 5437 5438 var cpcInput = document.querySelector('[id^="cpc-main-"]'); 5439 if (cpcInput && cpcInput.value) { 5440 mainId = parseInt(cpcInput.value, 10) || null; 5441 } 5442 5443 if (!mainId) { 5444 var ccbInput = document.getElementById('ccb-main-' + SID); 5445 if (ccbInput && ccbInput.value) { 5446 mainId = parseInt(ccbInput.value, 10) || null; 5447 } 5448 } 5449 5450 if (!mainId) { 5451 setError('Valitse päätuote Theme Editorissa (Campaign CTA Banner â Päätuote).'); 5452 setBusy(false); 5453 return; 5454 } 5455 5456 var items = [{ id: mainId, quantity: 1 }]; 5457 5458 var giftId = null; 5459 var defaultGift = document.getElementById('ccb-gift-default-' + SID); 5460 if (defaultGift && defaultGift.value) { 5461 giftId = parseInt(defaultGift.value, 10) || null; 5462 } 5463 5464 if (giftId) { 5465 items.push({ 5466 id: giftId, 5467 quantity: 1, 5468 properties: { '_free_gift': 'true', '_free_gift_campaign': 'cpc-bundle' } 5469 }); 5470 } 5471 5472 var cartRoot = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root) || '/'; 5473 5474 fetch(cartRoot + 'cart/add.js', { 5475 method: 'POST', 5476 headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, 5477 body: JSON.stringify({ items: items }) 5478 }) 5479 .then(function (res) { 5480 if (!res.ok) return res.json().then(function (d) { 5481 throw new Error(d.description || d.message || 'Virhe'); 5482 }); 5483 return res.json(); 5484 }) 5485 .then(function (data) { 5486 setBusy(false); 5487 btn.dispatchEvent(new CustomEvent('ajaxProduct:added', { 5488 bubbles: true, 5489 detail: { product: data, addToCartBtn: btn } 5490 })); 5491 }) 5492 .catch(function (err) { 5493 setError('Virhe: ' + (err.message || 'Yritä uudelleen.')); 5494 setBusy(false); 5495 }); 5496 }); 5497 5498})(); 5499</script>
5499 5500 5501</div><section id="shopify-section-template--31561534275926__1779803948613b464d" class="shopify-section"><div class="index-section"><div class="page-width"><div id="shopify-block-AdngzZFJxSUdGM1hoM__loox_reviews_loox_dynamic_section_qBKCFL" class="shopify-block shopify-app-block"> 5502 5503 5504 5505 5506 5507<div 5508 id="looxReviews" 5509 class="loox-widget" 5510 data-limit="20" 5511 5512 5513 5514 5515 data-product-id="10882379907414" 5516 � 5517 5518 data-reviews-to-display="" 5519 data-default-tab="automatic" 5520 style="margin:0 auto;max-width:1080px;" 5521> 5522 <!-- BEGIN app snippet: loox-ssr-reviews-feed --> 5523 <div id="loox-reviews-feed"> 5524 <style class="loox-temp-hiding-style"> 5525 #loox-reviews-feed { 5526 display: none; 5527 } 5528 </style> 5529 5530 <section aria-label="Customer reviews"> 5531 <h3>Customer Reviews</h3> 5532 5533 5534 <p class="loox-ssr-review-summary"> 5535 Overall rating: 4.7 / 5 from 481 reviews. 5536 </p> 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 <article 5553 class="loox-review" 5554 data-review-id="4mq_9-k8-" 5555 data-product-id="9877107966294" 5556 > 5557 5558 5559 5560 <p class="loox-review-body">Olen käyttänyt jo 3vuotta Joy TinyS kuulokkeita ja olen ollut todella tyytyväinen. Pysyvät hyvin korvissa ja ovat mukavat. Kuulikkeet kestävät pitkään! ð</p> 5561 5562 5563 <p class="loox-review-metadata"> 5564 <span class="loox-reviewer-name">Heidi M.</span> 5565 <span class="loox-review-rating">5/5</span> 5566 5567 <span class="loox-review-verified">Verified</span> 5568 5569 5570 <time datetime="2026-10-04T07:08:10.120Z" class="loox-review-date"> 5571 October 4, 2026 5572 </time> 5573 5574 </p> 5575 5576 5577 <p class="loox-review-product"> 5578 5579 <a class="loox-review-product-link" href="/products/tinys-moominâ¢">TinyS Moominâ¢</a> 5580 5581 </p> 5582 5583 5584 5585 </article> 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 <article 5600 class="loox-review" 5601 data-review-id="WGrGMfcel" 5602 data-product-id="10259673448790" 5603 > 5604 5605 5606 5607 <p class="loox-review-body">Ainoat kuulokkeet jotka mahtuvat minulle. Nämä ovat jo toiset, ekat hukkuivat valitettavasti välimeren rantahiekkaan ð¬</p> 5608 5609 5610 <p class="loox-review-metadata"> 5611 <span class="loox-reviewer-name">Johanna S.</span> 5612 <span class="loox-review-rating">5/5</span> 5613 5614 <span class="loox-review-verified">Verified</span> 5615 5616 5617 <time datetime="2026-09-30T04:25:57.518Z" class="loox-review-date"> 5618 September 30, 2026 5619 </time> 5620 5621 </p> 5622 5623 5624 <p class="loox-review-product"> 5625 5626 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">JOY TinyS</a> 5627 5628 </p> 5629 5630 5631 5632 </article> 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 <article 5647 class="loox-review" 5648 data-review-id="2cPl3t45G" 5649 data-product-id="10259673448790" 5650 > 5651 5652 5653 5654 <p class="loox-review-body">Hyvänkokoiset kuulokkeet. Hiukan vaikeat käyttää, eivätkä kuulokkeet mene pois päältä kun ne laitetaan latauskoteloon.</p> 5655 5656 5657 <p class="loox-review-metadata"> 5658 <span class="loox-reviewer-name">Anne H.</span> 5659 <span class="loox-review-rating">4/5</span> 5660 5661 <span class="loox-review-verified">Verified</span> 5662 5663 5664 <time datetime="2026-09-29T20:23:53.675Z" class="loox-review-date"> 5665 September 29, 2026 5666 </time> 5667 5668 </p> 5669 5670 5671 <p class="loox-review-product"> 5672 5673 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">JOY TinyS</a> 5674 5675 </p> 5676 5677 5678 5679 </article> 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 <article 5694 class="loox-review" 5695 data-review-id="DtZloFhAa" 5696 data-product-id="10259673448790" 5697 > 5698 5699 5700 5701 <p class="loox-review-body">Minulla on pienet korvat ja kaikki tähänastiset kuulokkeet ovat olleet liian isoja ja saaneet korvani särkemään. TinyS on niin pieni ja kevyt, etten edes huomaa kuulokkeita korvissani. Ja ne pysyy paikallaan urheillessakin erinomaisesti. Loistava ostos!</p> 5702 5703 5704 <p class="loox-review-metadata"> 5705 <span class="loox-reviewer-name">Selina H.</span> 5706 <span class="loox-review-rating">5/5</span> 5707 5708 <span class="loox-review-verified">Verified</span> 5709 5710 5711 <time datetime="2026-09-29T15:13:33.433Z" class="loox-review-date"> 5712 September 29, 2026 5713 </time> 5714 5715 </p> 5716 5717 5718 <p class="loox-review-product"> 5719 5720 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">JOY TinyS</a> 5721 5722 </p> 5723 5724 5725 5726 </article> 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 <article 5741 class="loox-review" 5742 data-review-id="_yxVfgPMm" 5743 data-product-id="10259673448790" 5744 > 5745 5746 5747 5748 <p class="loox-review-body">:)</p> 5749 5750 5751 <p class="loox-review-metadata"> 5752 <span class="loox-reviewer-name">Päivi S.</span> 5753 <span class="loox-review-rating">5/5</span> 5754 5755 <span class="loox-review-verified">Verified</span> 5756 5757 5758 <time datetime="2026-09-29T11:01:16.419Z" class="loox-review-date"> 5759 September 29, 2026 5760 </time> 5761 5762 </p> 5763 5764 5765 <p class="loox-review-product"> 5766 5767 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">JOY TinyS</a> 5768 5769 </p> 5770 5771 5772 5773 </article> 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 <article 5788 class="loox-review" 5789 data-review-id="gR-TbOxp5" 5790 data-product-id="10259673448790" 5791 > 5792 5793 5794 5795 <p class="loox-review-body">Pysyy hyvin pienissä korvissa. Ãänen toisto laadukas!</p> 5796 5797 5798 <p class="loox-review-metadata"> 5799 <span class="loox-reviewer-name">Johanna H.</span> 5800 <span class="loox-review-rating">5/5</span> 5801 5802 <span class="loox-review-verified">Verified</span> 5803 5804 5805 <time datetime="2026-09-26T19:13:48.543Z" class="loox-review-date"> 5806 September 26, 2026 5807 </time> 5808 5809 </p> 5810 5811 5812 <p class="loox-review-product"> 5813 5814 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">JOY TinyS</a> 5815 5816 </p> 5817 5818 5819 5820 </article> 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 <article 5835 class="loox-review" 5836 data-review-id="x-TdOS1u-" 5837 data-product-id="10882379907414" 5838 > 5839 5840 5841 5842 <p class="loox-review-body">Todella hyvät äänikirjan kuunteluun, hyvä kokoiset ei paina eikä tunnu pahalta kylkiasennossakaan nukkuessa. Pitkään mietin kuulokkeiden ostoa, mutta ei kaduta ollenkaan ostos, ennemminkin harmittelen miksi en aikaisemminntilannut.</p> 5843 5844 5845 <p class="loox-review-metadata"> 5846 <span class="loox-reviewer-name">Piritta T.</span> 5847 <span class="loox-review-rating">5/5</span> 5848 5849 <span class="loox-review-verified">Verified</span> 5850 5851 5852 <time datetime="2026-09-22T15:21:53.187Z" class="loox-review-date"> 5853 September 22, 2026 5854 </time> 5855 5856 </p> 5857 5858 5859 <p class="loox-review-product"> 5860 5861 <a class="loox-review-product-link" href="/products/tinys-earbuds-desinged-for-women-joy-friends-club">TinyS</a> 5862 5863 </p> 5864 5865 5866 5867 </article> 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 <article 5882 class="loox-review" 5883 data-review-id="JMso4Tj3t" 5884 data-product-id="10259673448790" 5885 > 5886 5887 5888 5889 <p class="loox-review-body">Hyvät ja sopivat korvaanð</p> 5890 5891 5892 <p class="loox-review-metadata"> 5893 <span class="loox-reviewer-name">Eija H.</span> 5894 <span class="loox-review-rating">5/5</span> 5895 5896 <span class="loox-review-verified">Verified</span> 5897 5898 5899 <time datetime="2026-09-16T10:47:02.701Z" class="loox-review-date"> 5900 September 16, 2026 5901 </time> 5902 5903 </p> 5904 5905 5906 <p class="loox-review-product"> 5907 5908 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">JOY TinyS</a> 5909 5910 </p> 5911 5912 5913 5914 </article> 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 <article 5929 class="loox-review" 5930 data-review-id="fRJ_qB9PA" 5931 data-product-id="10259673448790" 5932 > 5933 5934 5935 5936 <p class="loox-review-body">Hyvä ääni. Hyvä koko. Bassot ok.</p> 5937 5938 5939 <p class="loox-review-metadata"> 5940 <span class="loox-reviewer-name">Ari T.</span> 5941 <span class="loox-review-rating">3/5</span> 5942 5943 <span class="loox-review-verified">Verified</span> 5944 5945 5946 <time datetime="2026-09-15T07:00:04.292Z" class="loox-review-date"> 5947 September 15, 2026 5948 </time> 5949 5950 </p> 5951 5952 5953 <p class="loox-review-product"> 5954 5955 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">JOY TinyS</a> 5956 5957 </p> 5958 5959 5960 5961 </article> 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 <article 5976 class="loox-review" 5977 data-review-id="AVT1fiFxb" 5978 data-product-id="8033926512874" 5979 > 5980 5981 5982 5983 <p class="loox-review-body">Istuvuus ja äänenlaatu hyvät.</p> 5984 5985 5986 <p class="loox-review-metadata"> 5987 <span class="loox-reviewer-name">Kirsi P.</span> 5988 <span class="loox-review-rating">5/5</span> 5989 5990 <span class="loox-review-verified">Verified</span> 5991 5992 5993 <time datetime="2026-09-14T18:10:30.899Z" class="loox-review-date"> 5994 September 14, 2026 5995 </time> 5996 5997 </p> 5998 5999 6000 <p class="loox-review-product"> 6001 6002 <a class="loox-review-product-link" href="/products/tinys®">TinyS®</a> 6003 6004 </p> 6005 6006 6007 6008 </article> 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 <article 6023 class="loox-review" 6024 data-review-id="ZfsN9in_A" 6025 data-product-id="10259673448790" 6026 > 6027 6028 6029 6030 <p class="loox-review-body">Jää kuva kuin kuulokkeissa olisi äänenvaimennus, mutta sitä ei ole. Pettymys</p> 6031 6032 6033 <p class="loox-review-metadata"> 6034 <span class="loox-reviewer-name">Anneli R.</span> 6035 <span class="loox-review-rating">2/5</span> 6036 6037 <span class="loox-review-verified">Verified</span> 6038 6039 6040 <time datetime="2026-09-12T12:08:53.113Z" class="loox-review-date"> 6041 September 12, 2026 6042 </time> 6043 6044 </p> 6045 6046 6047 <p class="loox-review-product"> 6048 6049 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6050 6051 </p> 6052 6053 6054 6055 </article> 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 <article 6070 class="loox-review" 6071 data-review-id="WEsGPpYkr" 6072 data-product-id="10259673448790" 6073 > 6074 6075 6076 6077 <p class="loox-review-body">Ihan parhaat kuulokkeet. Pysyy hyvin korvissa myös urheillessa. Eikä paina korvia vaikka sattuisi kuulokkeiden kanssa nukahtamaan.</p> 6078 6079 6080 <p class="loox-review-metadata"> 6081 <span class="loox-reviewer-name">Maiju K.</span> 6082 <span class="loox-review-rating">5/5</span> 6083 6084 <span class="loox-review-verified">Verified</span> 6085 6086 6087 <time datetime="2026-09-09T18:47:23.916Z" class="loox-review-date"> 6088 September 9, 2026 6089 </time> 6090 6091 </p> 6092 6093 6094 <p class="loox-review-product"> 6095 6096 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6097 6098 </p> 6099 6100 6101 6102 </article> 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 <article 6117 class="loox-review" 6118 data-review-id="KuFIv4DnD" 6119 data-product-id="10259673448790" 6120 > 6121 6122 6123 6124 <p class="loox-review-body">Mulla on jo kahdet Joy tinyâs ja ne ovat ainoat kuulokkeet, mitkä ihan oikeasti pysyy korvissa välittämättä siitä, mitä teen. Ãänenlaatu on myös ihan ok. Ratkaisevampi asia mulla on pysyvyys. Ainoa miinus on se, että rasia on vähän liian pieni ja kevyt ja asentaminen korvaan ilman turhia âpainalluksiaâ ei onnistu, mutta ne on pieniä asioita.</p> 6125 6126 6127 <p class="loox-review-metadata"> 6128 <span class="loox-reviewer-name">
6128Leeni M.</span> 6129 <span class="loox-review-rating">5/5</span> 6130 6131 <span class="loox-review-verified">Verified</span> 6132 6133 6134 <time datetime="2026-09-07T12:35:20.093Z" class="loox-review-date"> 6135 September 7, 2026 6136 </time> 6137 6138 </p> 6139 6140 6141 <p class="loox-review-product"> 6142 6143 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6144 6145 </p> 6146 6147 6148 6149 </article> 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 <article 6164 class="loox-review" 6165 data-review-id="NHMxcgzVl" 6166 data-product-id="8538104267094" 6167 > 6168 6169 6170 6171 <p class="loox-review-body">Kaksi kertaa olen yrittänyt tilata varaosana TinyS nappia. Molemmilla kerroilla tuotetta on ollut varastossa kun olen tilausta tehnyt, mutta sitten se onkin ilmeisesti loppunut samantien. Ensimmäisellä kerralla odotin yli kaksi kuukautta. En saanut mitään väliaikatietoja tilauksesta ennen kuin itse kysyin perään. Kerran se luvattiin lähettää seuraavalla viikolla... ei tullut vielä kuukaudenkaan päästä ja lopulta peruutin tilaukseni. Kolme viikkoa sitten laitoin uuden tilauksen vetämään kun näin, että tuotetta oli (eri värisenä) varastossa. Epäilen vaan, että liekö saan sitä ikinä.</p> 6172 6173 6174 <p class="loox-review-metadata"> 6175 <span class="loox-reviewer-name">Outi L.</span> 6176 <span class="loox-review-rating">1/5</span> 6177 6178 6179 <time datetime="2026-09-07T06:15:07.072Z" class="loox-review-date"> 6180 September 7, 2026 6181 </time> 6182 6183 </p> 6184 6185 6186 <p class="loox-review-product"> 6187 6188 <a class="loox-review-product-link" href="/products/tinys®-oikea-kuuloke">TinyS - Right Earbud</a> 6189 6190 </p> 6191 6192 6193 6194 </article> 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 <article 6209 class="loox-review" 6210 data-review-id="QHBZqYIur" 6211 data-product-id="10259673448790" 6212 > 6213 6214 6215 6216 <p class="loox-review-body">Hyvät on pieniin korviin</p> 6217 6218 6219 <p class="loox-review-metadata"> 6220 <span class="loox-reviewer-name">Sari K.</span> 6221 <span class="loox-review-rating">5/5</span> 6222 6223 <span class="loox-review-verified">Verified</span> 6224 6225 6226 <time datetime="2026-09-03T08:59:22.955Z" class="loox-review-date"> 6227 September 3, 2026 6228 </time> 6229 6230 </p> 6231 6232 6233 <p class="loox-review-product"> 6234 6235 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6236 6237 </p> 6238 6239 6240 6241 </article> 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 <article 6256 class="loox-review" 6257 data-review-id="-Rih4Uvmb" 6258 data-product-id="8033926512874" 6259 > 6260 6261 6262 6263 6264 <a class="loox-review-media-link" href="/products/tinys®?qv=-Rih4Uvmb" rel="nofollow"> 6265 6266 <img 6267 class="loox-review-image" 6268 src="//images.loox.io/uploads/2026/9/2/-Rih4Uvmb_l-pRCThMd_orig_mid.jpg" 6269 alt="Customer video review of TinyS®" 6270 6271 width="1440" 6272 height="2560" 6273 loading="lazy" 6274 decoding="async" 6275 > 6276 6277 </a> 6278 6279 6280 6281 <p class="loox-review-body">Miulla on ollut haaste löytää hyviä nappikuulokkeita pieniin korviin, mutta nämä ovat loistavat. Pysyy päässä ilman jatkuvaa korjailua ja äänenlaatu todella hyvä! â¤ï¸</p> 6282 6283 6284 <p class="loox-review-metadata"> 6285 <span class="loox-reviewer-name">Jonna W.</span> 6286 <span class="loox-review-rating">5/5</span> 6287 6288 6289 <time datetime="2026-09-02T15:46:32.815Z" class="loox-review-date"> 6290 September 2, 2026 6291 </time> 6292 6293 </p> 6294 6295 6296 <p class="loox-review-product"> 6297 6298 <a class="loox-review-product-link" href="/products/tinys®">TinyS®</a> 6299 6300 </p> 6301 6302 6303 6304 </article> 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 <article 6319 class="loox-review" 6320 data-review-id="6K8gRc5nL" 6321 data-product-id="10259673448790" 6322 > 6323 6324 6325 6326 6327 <a class="loox-review-media-link" href="/products/tinys®-earbudsforwomen?qv=6K8gRc5nL" rel="nofollow"> 6328 6329 <img 6330 class="loox-review-image" 6331 src="//images.loox.io/uploads/2026/9/2/nzwQVnbZ6_mid.jpg" 6332 alt="Customer photo review of TinyS - Pienikorvaisille suunnitellut kuulokkeet" 6333 6334 width="2316" 6335 height="3088" 6336 loading="lazy" 6337 decoding="async" 6338 > 6339 6340 </a> 6341 6342 6343 6344 <p class="loox-review-body">Istuu hyvin ja pysyy urheillessakin. Akun kesto voisi olla parempi mutta muuten ei valittamista.</p> 6345 6346 6347 <p class="loox-review-metadata"> 6348 <span class="loox-reviewer-name">Emilia K.</span> 6349 <span class="loox-review-rating">4/5</span> 6350 6351 <span class="loox-review-verified">Verified</span> 6352 6353 6354 <time datetime="2026-09-02T05:40:28.732Z" class="loox-review-date"> 6355 September 2, 2026 6356 </time> 6357 6358 </p> 6359 6360 6361 <p class="loox-review-product"> 6362 6363 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6364 6365 </p> 6366 6367 6368 6369 </article> 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 <article 6384 class="loox-review" 6385 data-review-id="K2D5Whx7h" 6386 data-product-id="10259673448790" 6387 > 6388 6389 6390 6391 <p class="loox-review-body">Kappaleen vaihto hankalaa. Ei onnistu ohjeiden mukaisesti.</p> 6392 6393 6394 <p class="loox-review-metadata"> 6395 <span class="loox-reviewer-name">Mia N.</span> 6396 <span class="loox-review-rating">4/5</span> 6397 6398 <span class="loox-review-verified">Verified</span> 6399 6400 6401 <time datetime="2026-09-01T12:20:43.592Z" class="loox-review-date"> 6402 September 1, 2026 6403 </time> 6404 6405 </p> 6406 6407 6408 <p class="loox-review-product"> 6409 6410 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6411 6412 </p> 6413 6414 6415 6416 </article> 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 <article 6431 class="loox-review" 6432 data-review-id="_WYyfqygS" 6433 data-product-id="10259673448790" 6434 > 6435 6436 6437 6438 <p class="loox-review-body">Kaunis väri, pieni kotelo ja hyvät korvassa:)</p> 6439 6440 6441 <p class="loox-review-metadata"> 6442 <span class="loox-reviewer-name">
6442Maaret K.</span> 6443 <span class="loox-review-rating">5/5</span> 6444 6445 <span class="loox-review-verified">Verified</span> 6446 6447 6448 <time datetime="2026-08-30T08:37:38.595Z" class="loox-review-date"> 6449 August 30, 2026 6450 </time> 6451 6452 </p> 6453 6454 6455 <p class="loox-review-product"> 6456 6457 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6458 6459 </p> 6460 6461 6462 6463 </article> 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 <article 6478 class="loox-review" 6479 data-review-id="7EGefARqc" 6480 data-product-id="8033926512874" 6481 > 6482 6483 6484 6485 6486 <a class="loox-review-media-link" href="/products/tinys®?qv=7EGefARqc" rel="nofollow"> 6487 6488 <img 6489 class="loox-review-image" 6490 src="//images.loox.io/uploads/2026/8/26/7EGefARqc_MhlMeAZZF_orig_mid.jpg" 6491 alt="Customer video review of TinyS®" 6492 6493 width="1440" 6494 height="2560" 6495 loading="lazy" 6496 decoding="async" 6497 > 6498 6499 </a> 6500 6501 6502 6503 <p class="loox-review-body">TinyS-kuulokkeet on ensimmäiset silikonipäiset nappikuulokkeet, jotka on jäänyt mulle käyttöön! Ne sujahtaa korvaan näppärästi ja pysyy paikallaan kovemmassakin liikkeessä. Ãänenlaatu on hyvä ja taustamelunvaimennus ominaisuus toimii niin kuin pitääkin ð Mulle myös aina iso plussa on se, jos tuote on esteettisesti miellyttävä ja TinyS-kuulokkeet ovat kyllä kokonsa puolesta super söpöt kun ovat niin pienet ja vaalenapunainen värivaihtoehto on aivan ihana ð¤©ð</p> 6504 6505 6506 <p class="loox-review-metadata"> 6507 <span class="loox-reviewer-name">Mari H.</span> 6508 <span class="loox-review-rating">5/5</span> 6509 6510 6511 <time datetime="2026-08-26T23:10:18.802Z" class="loox-review-date"> 6512 August 27, 2026 6513 </time> 6514 6515 </p> 6516 6517 6518 <p class="loox-review-product"> 6519 6520 <a class="loox-review-product-link" href="/products/tinys®">TinyS®</a> 6521 6522 </p> 6523 6524 6525 6526 </article> 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 <article 6541 class="loox-review" 6542 data-review-id="tu6P-2vgG" 6543 data-product-id="10259673448790" 6544 > 6545 6546 6547 6548 <p class="loox-review-body">Hyvät kuulokkeet, pysyvät korvissa hyvin.</p> 6549 6550 6551 <p class="loox-review-metadata"> 6552 <span class="loox-reviewer-name">Satu S.</span> 6553 <span class="loox-review-rating">4/5</span> 6554 6555 <span class="loox-review-verified">Verified</span> 6556 6557 6558 <time datetime="2026-08-26T09:09:43.448Z" class="loox-review-date"> 6559 August 26, 2026 6560 </time> 6561 6562 </p> 6563 6564 6565 <p class="loox-review-product"> 6566 6567 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6568 6569 </p> 6570 6571 6572 6573 </article> 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 <article 6588 class="loox-review" 6589 data-review-id="VXA0t3p8n" 6590 data-product-id="10259673448790" 6591 > 6592 6593 6594 6595 <p class="loox-review-body">Edellist tulivat puolet nopeammin.</p> 6596 6597 6598 <p class="loox-review-metadata"> 6599 <span class="loox-reviewer-name">Salla R.</span> 6600 <span class="loox-review-rating">4/5</span> 6601 6602 <span class="loox-review-verified">Verified</span> 6603 6604 6605 <time datetime="2026-08-25T15:47:00.682Z" class="loox-review-date"> 6606 August 25, 2026 6607 </time> 6608 6609 </p> 6610 6611 6612 <p class="loox-review-product"> 6613 6614 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6615 6616 </p> 6617 6618 6619 6620 </article> 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 <article 6635 class="loox-review" 6636 data-review-id="Siey6PSMD" 6637 data-product-id="10259673448790" 6638 > 6639 6640 6641 6642 6643 <a class="loox-review-media-link" href="/products/tinys®-earbudsforwomen?qv=Siey6PSMD" rel="nofollow"> 6644 6645 <img 6646 class="loox-review-image" 6647 src="//images.loox.io/uploads/2026/8/25/P9fTZskre_mid.jpg" 6648 alt="Customer photo review of TinyS - Pienikorvaisille suunnitellut kuulokkeet" 6649 6650 width="2316" 6651 height="3088" 6652 loading="lazy" 6653 decoding="async" 6654 > 6655 6656 </a> 6657 6658 6659 6660 <p class="loox-review-body">Ihan mun lempparit. Hyvä äänenlaatu, pysyy korvissa kovissakin treeneissä. Just täydellisen kokoiset korviini.</p> 6661 6662 6663 <p class="loox-review-metadata"> 6664 <span class="loox-reviewer-name">Iida H.</span> 6665 <span class="loox-review-rating">5/5</span> 6666 6667 <span class="loox-review-verified">Verified</span> 6668 6669 6670 <time datetime="2026-08-25T06:46:57.946Z" class="loox-review-date"> 6671 August 25, 2026 6672 </time> 6673 6674 </p> 6675 6676 6677 <p class="loox-review-product"> 6678 6679 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6680 6681 </p> 6682 6683 6684 6685 </article> 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 <article 6700 class="loox-review" 6701 data-review-id="3C-CdHiJ4" 6702 data-product-id="10259673448790" 6703 > 6704 6705 6706 6707 <p class="loox-review-body">Ensimmäiset nappikuulokkeet, jotka istuvat hyvin korviin ja pysyvät paikallaan treenatessa ja lenkkeillessä. ð¤©</p> 6708 6709 6710 <p class="loox-review-metadata"> 6711 <span class="loox-reviewer-name">Mari H.</span> 6712 <span class="loox-review-rating">5/5</span> 6713 6714 <span class="loox-review-verified">Verified</span> 6715 6716 6717 <time datetime="2026-08-24T15:40:54.154Z" class="loox-review-date"> 6718 August 24, 2026 6719 </time> 6720 6721 </p> 6722 6723 6724 <p class="loox-review-product"> 6725 6726 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6727 6728 </p> 6729 6730 6731 6732 </article> 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 <article 6747 class="loox-review" 6748 data-review-id="6Jbhf-HoX" 6749 data-product-id="10259673448790" 6750 > 6751 6752 6753 6754 <p class="loox-review-body">Laatu ei vastaa hintaa.</p> 6755 6756 6757 <p class="loox-review-metadata"> 6758 <span class="loox-reviewer-name">Leena T.</span> 6759 <span class="loox-review-rating">3/5</span> 6760 6761 <span class="loox-review-verified">Verified</span> 6762 6763 6764 <time datetime="2026-08-21T15:52:13.389Z" class="loox-review-date"> 6765 August 21, 2026 6766 </time> 6767 6768 </p> 6769 6770 6771 <p class="loox-review-product"> 6772 6773 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6774 6775 </p> 6776 6777 6778 6779 </article> 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 <article 6794 class="loox-review" 6795 data-review-id="227NbYbJd" 6796 data-product-id="8539527774550" 6797 > 6798 6799 6800 6801 <p class="loox-review-body">
6801Ensimmäinen kotelo ei toiminut, niin uusi toimitettiin heti postiinðð».</p> 6802 6803 6804 <p class="loox-review-metadata"> 6805 <span class="loox-reviewer-name">Tuula A.</span> 6806 <span class="loox-review-rating">5/5</span> 6807 6808 <span class="loox-review-verified">Verified</span> 6809 6810 6811 <time datetime="2026-08-21T14:16:34.132Z" class="loox-review-date"> 6812 August 21, 2026 6813 </time> 6814 6815 </p> 6816 6817 6818 <p class="loox-review-product"> 6819 6820 <a class="loox-review-product-link" href="/products/tinys®-lataus-kotelo">TinyS® - Charging Box</a> 6821 6822 </p> 6823 6824 6825 6826 </article> 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 <article 6841 class="loox-review" 6842 data-review-id="vkkWXdSw8" 6843 data-product-id="10259673448790" 6844 > 6845 6846 6847 6848 <p class="loox-review-body">Ainoat nappikuulokkeet,jotka pysyvät korvissani. Miellyttävä, häiriötön kuuntelukokemus esim. työmatkaa pyöräillessä, siivotessa,tuulessa kävellessä jne.</p> 6849 6850 6851 <p class="loox-review-metadata"> 6852 <span class="loox-reviewer-name">Satu K.</span> 6853 <span class="loox-review-rating">5/5</span> 6854 6855 <span class="loox-review-verified">Verified</span> 6856 6857 6858 <time datetime="2026-08-21T12:33:39.902Z" class="loox-review-date"> 6859 August 21, 2026 6860 </time> 6861 6862 </p> 6863 6864 6865 <p class="loox-review-product"> 6866 6867 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6868 6869 </p> 6870 6871 6872 6873 </article> 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 <article 6888 class="loox-review" 6889 data-review-id="G9xV1LnLm" 6890 data-product-id="10259673448790" 6891 > 6892 6893 6894 6895 <p class="loox-review-body">Yhden käyttökerran perusteella kuulokkeet vaikuttaa hyvältä, pysyivät hyvin korvissa kuntosalitreenin ajan. Miinusta siitä, että sähköpostikyselyjä ja mainoksia tulee liian tiuhaan.</p> 6896 6897 6898 <p class="loox-review-metadata"> 6899 <span class="loox-reviewer-name">Marjo-riikka K.</span> 6900 <span class="loox-review-rating">4/5</span> 6901 6902 <span class="loox-review-verified">Verified</span> 6903 6904 6905 <time datetime="2026-08-20T11:15:31.833Z" class="loox-review-date"> 6906 August 20, 2026 6907 </time> 6908 6909 </p> 6910 6911 6912 <p class="loox-review-product"> 6913 6914 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6915 6916 </p> 6917 6918 6919 6920 </article> 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 <article 6935 class="loox-review" 6936 data-review-id="Sd1X4AqVNR" 6937 data-product-id="10259673448790" 6938 > 6939 6940 6941 6942 <p class="loox-review-body">Nämä on ollut parhaat, ostin jo toiset kuulokkeetð</p> 6943 6944 6945 <p class="loox-review-metadata"> 6946 <span class="loox-reviewer-name">Jaana V.</span> 6947 <span class="loox-review-rating">5/5</span> 6948 6949 <span class="loox-review-verified">Verified</span> 6950 6951 6952 <time datetime="2026-08-18T09:29:14.260Z" class="loox-review-date"> 6953 August 18, 2026 6954 </time> 6955 6956 </p> 6957 6958 6959 <p class="loox-review-product"> 6960 6961 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 6962 6963 </p> 6964 6965 6966 6967 </article> 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 <article 6982 class="loox-review" 6983 data-review-id="vt8uOCkTU" 6984 data-product-id="8033926512874" 6985 > 6986 6987 6988 6989 6990 <a class="loox-review-media-link" href="/products/tinys®?qv=vt8uOCkTU" rel="nofollow"> 6991 6992 <img 6993 class="loox-review-image" 6994 src="//images.loox.io/uploads/2026/8/18/vt8uOCkTU_U5-_Afpsm_orig_mid.jpg" 6995 alt="Customer video review of TinyS®" 6996 6997 width="1440" 6998 height="2560" 6999 loading="lazy" 7000 decoding="async" 7001 > 7002 7003 </a> 7004 7005 7006 7007 <p class="loox-review-body">Kuulokkeet oli tosi positiivinen yllätys äänenlaadultaan ja käyttömukavuudeltaan. Ehdottomasti paras ominaisuus on se, että ne pysyy hyvin korvissa liikkuessa, eikä esim. tuuli vaikuta kuuntelukokemukseen. Tykkään!!</p> 7008 7009 7010 <p class="loox-review-metadata"> 7011 <span class="loox-reviewer-name">Anniina P.</span> 7012 <span class="loox-review-rating">5/5</span> 7013 7014 7015 <time datetime="2026-08-18T05:52:03.413Z" class="loox-review-date"> 7016 August 18, 2026 7017 </time> 7018 7019 </p> 7020 7021 7022 <p class="loox-review-product"> 7023 7024 <a class="loox-review-product-link" href="/products/tinys®">TinyS®</a> 7025 7026 </p> 7027 7028 7029 7030 </article> 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 <article 7045 class="loox-review" 7046 data-review-id="O3wlvVXJwq" 7047 data-product-id="8033926512874" 7048 > 7049 7050 7051 7052 7053 <a class="loox-review-media-link" href="/products/tinys®?qv=O3wlvVXJwq" rel="nofollow"> 7054 7055 <img 7056 class="loox-review-image" 7057 src="//images.loox.io/uploads/2026/8/17/O3wlvVXJwq_xbtoJKBxq_orig_mid.jpg" 7058 alt="Customer video review of TinyS®" 7059 7060 width="1440" 7061 height="2560" 7062 loading="lazy" 7063 decoding="async" 7064 > 7065 7066 </a> 7067 7068 7069 7070 <p class="loox-review-body">Todella hyvät kuulokkeet! Pysyy pienemmissäkin korvissa ja vaikka minkälaisessa menossa. Ei tarvitse pelätä, että tippuu ja menee hukkaan. Mukavat käyttää. Ei paina korvia kipeästi useammankaan käyttötunnin jälkeen. Huippuluokan äänet.</p> 7071 7072 7073 <p class="loox-review-metadata"> 7074 <span class="loox-reviewer-name">Katja U.</span> 7075 <span class="loox-review-rating">5/5</span> 7076 7077 7078 <time datetime="2026-08-17T14:15:19.517Z" class="loox-review-date"> 7079 August 17, 2026 7080 </time> 7081 7082 </p> 7083 7084 7085 <p class="loox-review-product"> 7086 7087 <a class="loox-review-product-link" href="/products/tinys®">TinyS®</a> 7088 7089 </p> 7090 7091 7092 7093 </article> 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 <article 7108 class="loox-review" 7109 data-review-id="AN9z6NtVh" 7110 data-product-id="10259673448790" 7111 > 7112 7113 7114 7115 <p class="loox-review-body">Vielä ei ole löytynyt sitä optimaalista kumia, mutta vaihtoehtoja on, niin uskon että löytyy kyllä. 7116Ãänen laatu on super :)</p> 7117 7118 7119 <p class="loox-review-metadata"> 7120 <span class="loox-reviewer-name">Inka H.</span> 7121 <span class="loox-review-rating">4/5</span> 7122 7123 <span class="loox-review-verified">Verified</span> 7124 7125 7126 <time datetime="2026-08-17T09:43:11.106Z" class="loox-review-date"> 7127 August 17, 2026 7128 </time> 7129 7130 </p> 7131 7132 7133 <p class="loox-review-product"> 7134 7135 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 7136 7137 </p> 7138 7139 7140 7141 </article> 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 <article 7156 class="loox-review" 7157 data-review-id="UH8pgPJb8" 7158 data-product-id="10259673448790" 7159 > 7160 7161 7162 7163 <p class="loox-review-body">Kuulokkeiden näppäilytoiminnot eivät toimi. Etenkin oikean kuulokkeen toiminnot kuten äänenvoimakkuus ja kappaleen vaihto ei onnistu.</p> 7164 7165 7166 <p class="loox-review-metadata"> 7167 <span class="loox-reviewer-name">Tuija P.</span> 7168 <span class="loox-review-rating">2/5</span> 7169 7170 <span class="loox-review-verified">Verified</span> 7171 7172 7173 <time datetime="2026-08-17T09:22:28.015Z" class="loox-review-date"> 7174 August 17, 2026 7175 </time> 7176 7177 </p> 7178 7179 7180 <p class="loox-review-product"> 7181 7182 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Earbuds desinged for women</a> 7183 7184 </p> 7185 7186 7187 7188 </article> 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 <article 7203 class="loox-review" 7204 data-review-id="4A9BFMqPq" 7205 data-product-id="10259673448790" 7206 > 7207 7208 7209 7210 <p class="loox-review-body">Mahtava tuote pienille korville. Mieletön äänen laatu.</p> 7211 7212 7213 <p class="loox-review-metadata"> 7214 <span class="loox-reviewer-name">Marja R.</span> 7215 <span class="loox-review-rating">5/5</span> 7216 7217 <span class="loox-review-verified">Verified</span> 7218 7219 7220 <time datetime="2026-08-17T07:33:46.118Z" class="loox-review-date"> 7221 August 17, 2026 7222 </time> 7223 7224 </p> 7225 7226 7227 <p class="loox-review-product"> 7228 7229 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 7230 7231 </p> 7232 7233 7234 7235 </article> 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 <article 7250 class="loox-review" 7251 data-review-id="C0U0QRJRg" 7252 data-product-id="10259673448790" 7253 > 7254 7255 7256 7257 <p class="loox-review-body">Tiny S -kuulokkeet pysyvät korvissa paremmin kuin muut kokeilemani kuulokkeet. Ãänentoisto on melko hyvä. Sen sijaan vastamelua ne eivät estä. Minulla on toiset Tiny S kuulokkeet. Ensimmäisistä toisen korvan kuuloke meni mykäksi alle vuoden käytön jÃ
7257¤lkeen. Asiakaspalvelu on Joy Planetilla ollut nopeaa, joustavaa ja ystävällistä. Esimerkiksi tuotteen vaihto sujui täysin ongelmitta. Kiitos siitä!</p> 7258 7259 7260 <p class="loox-review-metadata"> 7261 <span class="loox-reviewer-name">Laura W.</span> 7262 <span class="loox-review-rating">4/5</span> 7263 7264 <span class="loox-review-verified">Verified</span> 7265 7266 7267 <time datetime="2026-08-16T05:15:29.708Z" class="loox-review-date"> 7268 August 16, 2026 7269 </time> 7270 7271 </p> 7272 7273 7274 <p class="loox-review-product"> 7275 7276 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 7277 7278 </p> 7279 7280 7281 7282 </article> 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 <article 7297 class="loox-review" 7298 data-review-id="CZiJMKJPET" 7299 data-product-id="10259673448790" 7300 > 7301 7302 7303 7304 <p class="loox-review-body">Kuulokkeiden kans voi maata sängyssä kyljellään. Ei paina korvia, jos asento on hyvä.</p> 7305 7306 7307 <p class="loox-review-metadata"> 7308 <span class="loox-reviewer-name">Ella V.</span> 7309 <span class="loox-review-rating">5/5</span> 7310 7311 <span class="loox-review-verified">Verified</span> 7312 7313 7314 <time datetime="2026-08-15T08:11:46.180Z" class="loox-review-date"> 7315 August 15, 2026 7316 </time> 7317 7318 </p> 7319 7320 7321 <p class="loox-review-product"> 7322 7323 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 7324 7325 </p> 7326 7327 7328 7329 </article> 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 <article 7344 class="loox-review" 7345 data-review-id="9MUAOIe9V" 7346 data-product-id="10259673448790" 7347 > 7348 7349 7350 7351 <p class="loox-review-body">Sanottiin että mahtuu kypärän sisään eikä paina korvia. No, painoi korvia. Tute palautettu, mutta rahoja ei ole tullut takaisin. Teillä on todella hidas ja kankea palautusjärjestelmä. Ehkä tarkoituksella. Näillä spekseillä en uskalla tilailla mitään muuta.</p> 7352 7353 7354 <p class="loox-review-metadata"> 7355 <span class="loox-reviewer-name">Risto K.</span> 7356 <span class="loox-review-rating">2/5</span> 7357 7358 <span class="loox-review-verified">Verified</span> 7359 7360 7361 <time datetime="2026-08-15T06:59:47.470Z" class="loox-review-date"> 7362 August 15, 2026 7363 </time> 7364 7365 </p> 7366 7367 7368 <p class="loox-review-product"> 7369 7370 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 7371 7372 </p> 7373 7374 7375 7376 </article> 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 <article 7391 class="loox-review" 7392 data-review-id="B0AsnrgD4" 7393 data-product-id="10259673448790" 7394 > 7395 7396 7397 7398 <p class="loox-review-body">Ãänenlaatu huono ja kaikki äänet ulkoa kuuluu nappien läpi.Sopii lähinnä äänikirjojen kuunteluun eikä ollenkaan musiikkiin. 7399Lisäksi olen jättänyt 2 sähköpostia jotta voin palauttaa tuotteen ja minulle ei vastata.Ei kannata ostaa,hämärää toimintaa.</p> 7400 7401 7402 <p class="loox-review-metadata"> 7403 <span class="loox-reviewer-name">Essi H.</span> 7404 <span class="loox-review-rating">1/5</span> 7405 7406 <span class="loox-review-verified">Verified</span> 7407 7408 7409 <time datetime="2026-08-14T21:14:29.418Z" class="loox-review-date"> 7410 August 15, 2026 7411 </time> 7412 7413 </p> 7414 7415 7416 <p class="loox-review-product"> 7417 7418 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 7419 7420 </p> 7421 7422 7423 7424 </article> 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 <article 7439 class="loox-review" 7440 data-review-id="UzpmwI68E" 7441 data-product-id="10259673448790" 7442 > 7443 7444 7445 7446 <p class="loox-review-body">En ollut uskoa, mutta nämä tosiaan pysyvät korvissani, olin jo luovuttanut nappikuulokkeiden suhteen. Olen tosi tyytyväinen myös äänen laatuun.</p> 7447 7448 7449 <p class="loox-review-metadata"> 7450 <span class="loox-reviewer-name">Riitta M.</span> 7451 <span class="loox-review-rating">5/5</span> 7452 7453 <span class="loox-review-verified">Verified</span> 7454 7455 7456 <time datetime="2026-08-14T20:02:52.959Z" class="loox-review-date"> 7457 August 14, 2026 7458 </time> 7459 7460 </p> 7461 7462 7463 <p class="loox-review-product"> 7464 7465 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 7466 7467 </p> 7468 7469 7470 7471 </article> 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 <article 7486 class="loox-review" 7487 data-review-id="4vIogpgHm" 7488 data-product-id="10259673448790" 7489 > 7490 7491 7492 7493 7494 <a class="loox-review-media-link" href="/products/tinys®-earbudsforwomen?qv=4vIogpgHm" rel="nofollow"> 7495 7496 <img 7497 class="loox-review-image" 7498 src="//images.loox.io/uploads/2026/8/14/Fj9lO28Ze_mid.jpg" 7499 alt="Customer photo review of TinyS - Pienikorvaisille suunnitellut kuulokkeet" 7500 7501 width="3000" 7502 height="4000" 7503 loading="lazy" 7504 decoding="async" 7505 > 7506 7507 </a> 7508 7509 7510 7511 <p class="loox-review-body">Pysyy tosi hyvin korvassa hikiselläkin lenkillä ja sekä kuulokkeet että latauskotelo on superkompaktit ja siistin näköiset! Vähän jäin kaipaamaan vastameluominaisuutta ja pidempää akun kestoa mutta ymmärrän että pieni koko tuo näihin haasteensa.</p> 7512 7513 7514 <p class="loox-review-metadata"> 7515 <span class="loox-reviewer-name">Hilja K.</span> 7516 <span class="loox-review-rating">4/5</span> 7517 7518 <span class="loox-review-verified">Verified</span> 7519 7520 7521 <time datetime="2026-08-14T13:24:57.661Z" class="loox-review-date"> 7522 August 14, 2026 7523 </time> 7524 7525 </p> 7526 7527 7528 <p class="loox-review-product"> 7529 7530 <a class="loox-review-product-link" href="/products/tinys®-earbudsforwomen">TinyS - Pienikorvaisille suunnitellut kuulokkeet</a> 7531 7532 </p> 7533 7534 7535 7536 </article> 7537 7538 </section> 7539 </div> 7540 7541<!-- END app snippet --> 7542</div> 7543 7544</div> 7545</div></div> 7546</section></div> 7547 </main> 7548 7549 7550<!-- BEGIN sections: footer-group --> 7551<div id="shopify-section-sections--21527965434198__1773676614ebef9720" class="shopify-section shopify-section-group-footer-group"> 7552 7553</div><div id="shopify-section-sections--21527965434198__footer" class="shopify-section shopify-section-group-footer-group"><footer class="site-footer" data-section-id="sections--21527965434198__footer" data-section-type="footer"> 7554 <div class="page-width"> 7555 7556 <div class="grid"><style data-shopify>@media only screen and (min-width: 769px) { 7557 .footer__item--custom_KKURBa { 7558 width: 20%; 7559 } 7560 }</style><div class="grid__item footer__item--custom_KKURBa"> 7561<div 7562 > 7563 <div class="collapsible-content__inner">
7564 <div class="footer__collapsible footer_collapsible--disabled"> 7565 <p><strong>Joy Planet Finland Oy</strong><br/>Valo Hotel & Work<br/>Mannerheimintie 109<br/>00280 Helsinki<br/>Finland</p><p>Email: <a href="mailto:[email protected]" title="mailto:[email protected]">[email protected]</a><br/></p> 7566 </div> 7567 </div> 7568</div> 7569</div><style data-shopify>@media only screen and (min-width: 769px) { 7570 .footer__item--menu_GrHye7 { 7571 width: 20%; 7572 } 7573 }</style><div class="grid__item footer__item--menu_GrHye7"> 7574 7575 <div 7576 > 7577 <div class="collapsible-content__inner"> 7578 <div class="footer__collapsible footer_collapsible--disabled"> 7579 <ul class="no-bullets site-footer__linklist"><li><a href="/pages/the-brand">Our Brand</a></li><li><a href="https://fi.joyearbuds.com/pages/help?hcUrl=%2Ffi-FI%2Farticles%2Fkayttoohjeet-159353">User Instructions</a></li><li><a href="/pages/sustainability">Sustainability</a></li><li><a href="/pages/team">Team JOY</a></li></ul> 7580 </div> 7581 </div> 7582 </div> 7583 7584</div><style data-shopify>@media only screen and (min-width: 769px) { 7585 .footer__item--footer-1 { 7586 width: 20%; 7587 } 7588 }</style><div class="grid__item footer__item--footer-1"> 7589 7590 <div 7591 > 7592 <div class="collapsible-content__inner"> 7593 <div class="footer__collapsible footer_collapsible--disabled"> 7594 <ul class="no-bullets site-footer__linklist"><li><a href="/policies/shipping-policy">Shipping</a></li><li><a href="/pages/satisfaction-guarantee">Satisfaction guarantee</a></li><li><a href="/policies/refund-policy">Returns</a></li><li><a href="/policies/privacy-policy">Privacy Policy</a></li></ul> 7595 </div> 7596 </div> 7597 </div> 7598 7599</div><style data-shopify>@media only screen and (min-width: 769px) { 7600 .footer__item--menu_PDDwFd { 7601 width: 20%; 7602 } 7603 }</style><div class="grid__item footer__item--menu_PDDwFd"> 7604 7605 <div 7606 > 7607 <div class="collapsible-content__inner"> 7608 <div class="footer__collapsible footer_collapsible--disabled"> 7609 <ul class="no-bullets site-footer__linklist"><li><a href="/pages/payment-conditions">Payment Conditions</a></li><li><a href="/policies/terms-of-service">Terms of Service</a></li><li><a href="/pages/cookies-policy">Cookies Policy</a></li><li><a href="/pages/privacy-policy-joyr-1">Privacy Policy JoyR+</a></li></ul> 7610 </div> 7611 </div> 7612 </div> 7613 7614</div><style data-shopify>@media only screen and (min-width: 769px) { 7615 .footer__item--footer-0 { 7616 width: 30%; 7617 } 7618 }</style><div class="footer__clear small--hide"></div><div class="grid__item footer__item--footer-0"><div class="footer__logo-social"><ul class="no-bullets social-icons footer__social"><li> 7619 <a target="_blank" rel="noopener" href="https://www.instagram.com/joyearbuds/" title="Joy Planet Finland on Instagram"> 7620 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-instagram" viewBox="0 0 32 32"><title>instagram</title><path fill="#444" d="M16 3.094c4.206 0 4.7.019 6.363.094 1.538.069 2.369.325 2.925.544.738.287 1.262.625 1.813 1.175s.894 1.075 1.175 1.813c.212.556.475 1.387.544 2.925.075 1.662.094 2.156.094 6.363s-.019 4.7-.094 6.363c-.069 1.538-.325 2.369-.544 2.925-.288.738-.625 1.262-1.175 1.813s-1.075.894-1.813 1.175c-.556.212-1.387.475-2.925.544-1.663.075-2.156.094-6.363.094s-4.7-.019-6.363-.094c-1.537-.069-2.369-.325-2.925-.544-.737-.288-1.263-.625-1.813-1.175s-.894-1.075-1.175-1.813c-.212-.556-.475-1.387-.544-2.925-.075-1.663-.094-2.156-.094-6.363s.019-4.7.094-6.363c.069-1.537.325-2.369.544-2.925.287-.737.625-1.263 1.175-1.813s1.075-.894 1.813-1.175c.556-.212 1.388-.475 2.925-.544 1.662-.081 2.156-.094 6.363-.094zm0-2.838c-4.275 0-4.813.019-6.494.094-1.675.075-2.819.344-3.819.731-1.037.4-1.913.944-2.788 1.819S1.486 4.656 1.08 5.688c-.387 1-.656 2.144-.731 3.825-.075 1.675-.094 2.213-.094 6.488s.019 4.813.094 6.494c.075 1.675.344 2.819.731 3.825.4 1.038.944 1.913 1.819 2.788s1.756 1.413 2.788 1.819c1 .387 2.144.656 3.825.731s2.213.094 6.494.094 4.813-.019 6.494-.094c1.675-.075 2.819-.344 3.825-.731 1.038-.4 1.913-.944 2.788-1.819s1.413-1.756 1.819-2.788c.387-1 .656-2.144.731-3.825s.094-2.212.094-6.494-.019-4.813-.094-6.494c-.075-1.675-.344-2.819-.731-3.825-.4-1.
7620038-.944-1.913-1.819-2.788s-1.756-1.413-2.788-1.819c-1-.387-2.144-.656-3.825-.731C20.812.275 20.275.256 16 .256z"/><path fill="#444" d="M16 7.912a8.088 8.088 0 0 0 0 16.175c4.463 0 8.087-3.625 8.087-8.088s-3.625-8.088-8.088-8.088zm0 13.338a5.25 5.25 0 1 1 0-10.5 5.25 5.25 0 1 1 0 10.5zM26.294 7.594a1.887 1.887 0 1 1-3.774.002 1.887 1.887 0 0 1 3.774-.003z"/></svg> 7621 <span class="icon__fallback-text">Instagram</span> 7622 </a> 7623 </li><li> 7624 <a target="_blank" rel="noopener" href="https://www.facebook.com/JOYearbuds" title="Joy Planet Finland on Facebook"> 7625 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-facebook" viewBox="0 0 14222 14222"><path d="M14222 7112c0 3549.352-2600.418 6491.344-6000 7024.72V9168h1657l315-2056H8222V5778c0-562 275-1111 1159-1111h897V2917s-814-139-1592-139c-1624 0-2686 984-2686 2767v1567H4194v2056h1806v4968.72C2600.418 13603.344 0 10661.352 0 7112 0 3184.703 3183.703 1 7111 1s7111 3183.703 7111 7111Zm-8222 7025c362 57 733 86 1111 86-377.945 0-749.003-29.485-1111-86.28Zm2222 0v-.28a7107.458 7107.458 0 0 1-167.717 24.267A7407.158 7407.158 0 0 0 8222 14137Zm-167.717 23.987C7745.664 14201.89 7430.797 14223 7111 14223c319.843 0 634.675-21.479 943.283-62.013Z"/></svg> 7626 <span class="icon__fallback-text">Facebook</span> 7627 </a> 7628 </li></ul> 7629 7630 7631</div> 7632</div></div> 7633 7634 <div class="site-footer__bottom"><form method="post" action="/localization" id="localization_form" accept-charset="UTF-8" class="multi-selectors site-footer__bottom-block" enctype="multipart/form-data" data-disclosure-form=""><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/products/tinys-earbuds-desinged-for-women-joy-friends-club" /><div class="multi-selectors__item"> 7635 <h2 class="visually-hidden" id="LangHeading"> 7636 Language 7637 </h2> 7638 7639 <div id="FooterLocale" class="disclosure"> 7640 <button type="button" class="faux-select disclosure__toggle" aria-expanded="false" aria-controls="LangList" aria-describedby="LangHeading" data-disclosure-toggle> 7641 English 7642 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-chevron-down" viewBox="0 0 28 16"><path d="m1.57 1.59 12.76 12.77L27.1 1.59" stroke-width="2" stroke="#000" fill="none"/></svg> 7643 </button> 7644 <ul id="LangList" class="disclosure-list" data-disclosure-list><li class="disclosure-list__item disclosure-list__item--current"> 7645 <a class="disclosure-list__option" href="#" lang="en" aria-current="true" data-value="en" data-disclosure-option> 7646 English 7647 </a> 7648 </li><li class="disclosure-list__item "> 7649 <a class="disclosure-list__option" href="#" lang="fi" data-value="fi" data-disclosure-option> 7650 Suomi 7651 </a> 7652 </li><li class="disclosure-list__item "> 7653 <a class="disclosure-list__option" href="#" lang="de" data-value="de" data-disclosure-option> 7654 Deutsch 7655 </a> 7656 </li></ul> 7657 <input type="hidden" name="locale_code" id="LocaleSelector" value="en" data-disclosure-input/> 7658 </div> 7659 </div></form><ul class="inline-list payment-icons site-footer__bottom-block payment-icons--greyscale text-center"><li class="icon--payment"> 7660 <svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-american_express"><title id="pi-american_express">American Express</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#0071CE" style="fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;"/>
7660<path d="M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z" stroke="black" stroke-opacity="0.07" style="stroke:black;stroke-opacity:0.07;"/><path d="M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z" fill="white" style="fill:white;fill-opacity:1;"/></svg> 7661 7662 </li><li class="icon--payment"> 7663 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" role="img" x="0" y="0" width="38" height="24" viewBox="0 0 165.521 105.965" xml:space="preserve" aria-labelledby="pi-apple_pay"><title id="pi-apple_pay">Apple Pay</title><path fill="#000" d="M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z" /><path fill="#FFF" d="M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875" /><g><g><path fill="#000" d="M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858" /><path fill="#000" d="M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048" /></g><g><path fill="#000" d="M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z" />
7663<path fill="#000" d="M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z" /><path fill="#000" d="M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z" /></g></g></svg> 7664 7665 </li><li class="icon--payment"> 7666 <svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-google_pay"><title id="pi-google_pay">Google Pay</title><path d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000" opacity=".07"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32" fill="#FFF"/><path d="M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.
766606zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z" fill="#5F6368"/><path d="M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z" fill="#4285F4"/><path d="M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z" fill="#34A853"/><path d="M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z" fill="#FBBC04"/><path d="M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z" fill="#EA4335"/></svg> 7667 7668 </li><li class="icon--payment"> 7669 <svg viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" width="38" height="24" role="img" aria-labelledby="pi-maestro"><title id="pi-maestro">Maestro</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"/><circle fill="#EB001B" cx="15" cy="12" r="7"/><circle fill="#00A2E5" cx="23" cy="12" r="7"/><path fill="#7375CF" d="M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z"/></svg> 7670 </li><li class="icon--payment"> 7671 <svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-master"><title id="pi-master">Mastercard</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#1C1C1C" style="fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;"/><path d="M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z" fill="#232323" style="fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;"/><path d="M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z" fill="#EB001B" style="fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;"/><path d="M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z" fill="#F79E1B" style="fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;"/><path d="M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z" fill="#FF5F00" style="fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;"/></svg> 7672 7673 </li><li class="icon--payment"> 7674 <svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-shopify_pay"><title id="pi-shopify_pay">Shop Pay</title><path opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000"/><path d="M35.889 0C37.05 0 38 .982 38 2.182v19.636c0 1.2-.95 2.182-2.111 2.182H2.11C.95 24 0 23.018 0 21.818V2.182C0 .982.95 0 2.111 0H35.89z" fill="#5A31F4"/><path d="M9.35 11.368c-1.017-.223-1.47-.31-1.47-.705 0-.372.306-.558.92-.558.54 0 .934.238 1.225.704a.079.079 0 00.104.03l1.146-.584a.082.082 0 00.032-.114c-.475-.831-1.353-1.286-2.51-1.286-1.52 0-2.464.755-2.464 1.956 0 1.275 1.15 1.597 2.17 1.82 1.02.222 1.474.31 1.474.705 0 .396-.332.582-.993.582-.612 0-1.065-.282-1.34-.83a.08.08 0 00-.107-.035l-1.143.57a.083.083 0 00-.036.111c.454.92 1.384 1.437 2.627 1.437 1.583 0 2.539-.742 2.539-1.98s-1.155-1.598-2.173-1.82v-.003zM15.49 8.855c-.65 0-1.224.232-1.636.646a.04.04 0 01-.069-.03v-2.64a.08.08 0 00-.08-.081H12.27a.08.08 0 00-.08.082v8.194a.08.08 0 00.08.082h1.433a.08.08 0 00.081-.082v-3.594c0-.695.528-1.227 1.239-1.227.71 0 1.226.521 1.226 1.227v3.594a.08.08 0 00.081.082h1.433a.08.08 0 00.081-.082v-3.594c0-1.51-.981-2.577-2.355-2.577zM20.753 8.62c-.778 0-1.507.24-2.03.588a.082.082 0 00-.027.109l.632 1.088a.08.08 0 00.
767411.03 2.5 2.5 0 011.318-.366c1.25 0 2.17.891 2.17 2.068 0 1.003-.736 1.745-1.669 1.745-.76 0-1.288-.446-1.288-1.077 0-.361.152-.657.548-.866a.08.08 0 00.032-.113l-.596-1.018a.08.08 0 00-.098-.035c-.799.299-1.359 1.018-1.359 1.984 0 1.46 1.152 2.55 2.76 2.55 1.877 0 3.227-1.313 3.227-3.195 0-2.018-1.57-3.492-3.73-3.492zM28.675 8.843c-.724 0-1.373.27-1.845.746-.026.027-.069.007-.069-.029v-.572a.08.08 0 00-.08-.082h-1.397a.08.08 0 00-.08.082v8.182a.08.08 0 00.08.081h1.433a.08.08 0 00.081-.081v-2.683c0-.036.043-.054.069-.03a2.6 2.6 0 001.808.7c1.682 0 2.993-1.373 2.993-3.157s-1.313-3.157-2.993-3.157zm-.271 4.929c-.956 0-1.681-.768-1.681-1.783s.723-1.783 1.681-1.783c.958 0 1.68.755 1.68 1.783 0 1.027-.713 1.783-1.681 1.783h.001z" fill="#fff"/></svg> 7675 7676 </li><li class="icon--payment"> 7677 <svg viewBox="-36 25 38 24" xmlns="http://www.w3.org/2000/svg" width="38" height="24" role="img" aria-labelledby="pi-unionpay"><title id="pi-unionpay">Union Pay</title><path fill="#005B9A" d="M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z"/><path fill="#E9292D" d="M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z"/><path fill="#0E73B9" d="M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z"/><path fill="#059DA4" d="M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z"/><path fill="#fff" d="M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28
7677c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19"/></svg> 7678 </li><li class="icon--payment"> 7679 <svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-visa"><title id="pi-visa">Visa</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#142FBD" style="fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;"/><path d="M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z" fill="#1532CB" style="fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;"/><path d="M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778
767916.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z" fill="white" style="fill:white;fill-opacity:1;"/></svg> 7680 7681 </li></ul><div class="footer__copyright site-footer__bottom-block"><span> 7682 © 2026 Joy Planet Finland 7683</span><span class="footer__powered_by"><a href="https://www.saleslion.fi/" target="_blank">Shopify Store by Saleslion</a></span> 7684 </div> 7685 </div> 7686 7687 </div> 7688</footer> 7689 7690 7691</div><div id="shopify-section-sections--21527965434198__footer-promotions" class="shopify-section shopify-section-group-footer-group index-section--footer"> 7692</div> 7693<!-- END sections: footer-group --></div> 7694 </div><div id="VideoModal" class="modal modal--solid"> 7695 <div class="modal__inner"> 7696 <div class="modal__centered page-width text-center"> 7697 <div class="modal__centered-content"> 7698 <div class="video-wrapper video-wrapper--modal"> 7699 <div id="VideoHolder"></div> 7700 </div> 7701 </div> 7702 </div> 7703 </div> 7704 7705 <button type="button" class="modal__close js-modal-close text-link"> 7706 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><title>icon-X</title><path d="m19 17.61 27.12 27.13m0-27.12L19 44.74"/></svg> 7707 <span class="icon__fallback-text">"Close (esc)"</span> 7708 </button> 7709</div> 7710<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true"> 7711 <div class="pswp__bg"></div> 7712 <div class="pswp__scroll-wrap"> 7713 <div class="pswp__container"> 7714 <div class="pswp__item"></div> 7715 <div class="pswp__item"></div> 7716 <div class="pswp__item"></div> 7717 </div> 7718 7719 <div class="pswp__ui pswp__ui--hidden"> 7720 <button class="btn btn--no-animate btn--body btn--circle pswp__button pswp__button--arrow--left" title="Previous"> 7721 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-left" viewBox="0 0 284.49 498.98"><title>icon-chevron-left</title><path d="M249.49 0a35 35 0 0 1 24.75 59.75L84.49 249.49l189.75 189.74a35.002 35.002 0 1 1-49.5 49.5L10.25 274.24a35 35 0 0 1 0-49.5L224.74 10.25A34.89 34.89 0 0 1 249.49 0Z"/></svg> 7722 </button> 7723 7724 <button class="btn btn--no-animate btn--body btn--circle btn--large pswp__button pswp__button--close" title="Close (esc)"> 7725 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><title>icon-X</title><path d="m19 17.61 27.12 27.13m0-27.12L19 44.74"/></svg> 7726 </button> 7727 7728 <button class="btn btn--no-animate btn--body btn--circle pswp__button pswp__button--arrow--right" title="Next"> 7729 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-right" viewBox="0 0 284.49 498.98"><title>icon-chevron</title><path d="M35 498.98a35 35 0 0 1-24.75-59.75l189.74-189.74L10.25 59.75a35.002 35.002 0 0 1 49.5-49.5l214.49 214.49a35 35 0 0 1 0 49.5L59.75 488.73A34.89 34.89 0 0 1 35 498.98Z"/></svg> 7730 </button> 7731 </div> 7732 </div> 7733</div> 7734<tool-tip data-tool-tip=""> 7735 <div class="tool-tip__inner" data-tool-tip-inner> 7736 <button class="tool-tip__close" data-tool-tip-close=""><svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 64 64"><title>icon-X</title><path d="m19 17.61 27.12 27.13m0-27.12L19 44.74"/></svg></button> 7737 <div data-tool-tip-title>Premium Nappikuulokkeet - Sopii jokaiseen korvaan</div> 7738 <div class="tool-tip__content" data-tool-tip-content> 7739 </div> 7740 </div> 7741</tool-tip> 7742 7743 <template id="predictiveImageMarkup"> 7744 <image-element> 7745 <img width height src loading="lazy" sizes="(min-width: 769px) 100px, 60px"> 7746 </image-element> 7747 </template> 7748 7749 7750 7751 <!-- jquery -->
7752<script src="//joyearbuds.com/cdn/shop/t/54/assets/jquery.min.js?v=18371384823053301681745997770"></script>
7752 7753
7754<script src="//joyearbuds.com/cdn/shop/t/54/assets/jquery-migrate.min.js?v=12320733872480360301745997761"></script>
7754 7755<!-- jquery --> 7756 7757<!-- slick slider -->
7758<script src="//joyearbuds.com/cdn/shop/t/54/assets/slick.min.js?v=71779134894361685811745997752"></script>
7758 7759
7760<script> 7761 7762 7763 $(document).ready(function() { 7764 $('.sn-big-slider').slick({ 7765 slidesToShow: 1, 7766 slidesToScroll: 1, 7767 arrows: false, 7768 infinite: false, 7769 autoplay: false, 7770 adaptiveHeight: true, 7771 asNavFor: '.sn-thumb-slider' 7772 }); 7773 $('.sn-thumb-slider').slick({ 7774 slidesToShow: 5, 7775 slidesToScroll: 1, 7776 arrows: false, 7777 infinite: false, 7778 autoplay: false, 7779 focusOnSelect: true, 7780 asNavFor: '.sn-big-slider', 7781 responsive: [{ 7782 breakpoint: 600, 7783 settings: { 7784 slidesToShow: 4, 7785 slidesToScroll: 1 7786 } 7787 }, { 7788 breakpoint: 480, 7789 settings: { 7790 slidesToShow: 4, 7791 slidesToScroll: 1 7792 } 7793 }] 7794 }); 7795 $('.marquee-slider').slick({ 7796 speed: 5000, 7797 autoplay: true, 7798 autoplaySpeed: 0, 7799 centerMode: true, 7800 cssEase: 'linear', 7801 slidesToShow: 1, 7802 slidesToScroll: 1, 7803 variableWidth: true, 7804 infinite: true, 7805 initialSlide: 1, 7806 arrows: false,
7807 buttons: false, 7808 draggable: false, 7809 pauseOnHover: false, 7810 }); 7811 $('.sn-reviews-slider').slick({ 7812 slidesToShow: 5, 7813 slidesToScroll: 5, 7814 arrows: true, 7815 autoplay: true, 7816 responsive: [{ 7817 breakpoint: 600, 7818 settings: { 7819 slidesToShow: 2, 7820 slidesToScroll: 1 7821 } 7822 }, { 7823 breakpoint: 480, 7824 settings: { 7825 slidesToShow: 1, 7826 slidesToScroll: 1 7827 } 7828 }] 7829 }); 7830 }); 7831</script>
7831 7832<!-- slick slider --> 7833 7834<!-- collapse js -->
7835<script> 7836 var coll = document.getElementsByClassName("collapsible"); 7837 var i; 7838 7839 for (i = 0; i < coll.length; i++) { 7840 coll[i].addEventListener("click", function() { 7841 this.classList.toggle("active"); 7842 var content = this.nextElementSibling; 7843 if (content.style.maxHeight) { 7844 content.style.maxHeight = null; 7845 content.style.padding = "0 10px"; 7846 } else { 7847 content.style.maxHeight = content.scrollHeight + 20 + "px"; 7848 content.style.padding = "10px"; 7849 } 7850 }); 7851 } 7852</script>
7852 7853<!-- collapse js -->
7854<script> 7855 document.querySelectorAll('a[href^="#"]').forEach(anchor => { 7856 anchor.addEventListener('click', function (e) { 7857 e.preventDefault(); 7858 7859 document.querySelector(this.getAttribute('href')).scrollIntoView({ 7860 behavior: 'smooth' 7861 }); 7862 }); 7863 }); 7864</script>
7864 7865 7866 7867 7868 7869 <style> </style> 7870<div id="shopify-block-AYVRjem9WQzYvSFEya__14826766009936288847" class="shopify-block shopify-app-block">
7871<script id="Discounty-config"> 7872 function discountyExtractTextFromHtml(htmlString) { 7873 if (!htmlString) return ''; 7874 return new DOMParser().parseFromString(htmlString, 'text/html').body.textContent || ''; 7875 } 7876 7877 var $Discounty = {shopData: {"shopConfig":{"shopId":108321,"cart":{"isActive":true,"styles":"{}","config":{},"injectionInfo":[],"contents":[{"locale":"","totalText":"Total","savingText":"Saving"}]},"globalConfig":{"appEnabled":true,"considerCurrencyExchangeRate":true,"customVariantListener":{"element":"","isDatasetProperty":false,"property":""},"developerModeVariantListener":false,"globalCss":"","setTemplateCurrencyFormatAsDefault":false},"volumeDiscount":{"config":{"tierDisplayFormat":"RANGE"},"injectionInfo":[],"isActive":true,"styles":"{}","contents":[{"locale":"","title":"Buy more, Save more","buyColumnLabel":"Buy","getColumnLabel":"Get","discountText":"{{Discount}} Off","eachItemText":"on each","newPriceText":"each item {{new-price}}"}]},"miniVolumeDiscount":{"config":{"displayMode":"MAX_DISCOUNT"},"injectionInfo":[],"isActive":false,"styles":"{}","contents":[{"locale":"","maxDiscountText":"Up to {discount}% off","lowestPriceText":"From {price}"}]},"startCountDown":{"config":{"ctaLink":null},"productPageInjectionInfo":[],"homepageInjectionInfo":[],"isActive":true,"styles":"{}","contents":[{"locale":"","title":"Sale starts in","daysLabel":"Day","hoursLabel":"Hr","minutesLabel":"Min","secondsLabel":"Sec","ctaText":"Click here"}]},"endCountDown":{"config":{"ctaLink":null},"productPageInjectionInfo":[],"homepageInjectionInfo":[],"isActive":true,"styles":"{}","contents":[{"locale":"","title":"Sale ends in","daysLabel":"Day","hoursLabel":"Hr","minutesLabel":"Min","secondsLabel":"Sec","ctaText":"Click here"}]}
7877,"bxgyPopup":{"config":{"hideContinueBtn":false,"badgeShowFreeGift":false,"badgeType":"PERCENTAGE","dismissType":"TRIGGER","autoOpenDrawerEnabled":true},"injectionInfo":[],"isActive":true,"styles":"{}","contents":[{"locale":"","title":"Your current cart qualifies for these rewards","subtitle":"Now you are able to choose between them. Add before checking out!","availableRewardsLabel":"You can add {{count}} product(s)","btnSelectLabel":"Select","btnAddLabel":"Add to Cart","btnContinueLabel":"Continue Shopping"}]},"bxgyFab":{"config":{"hideCloseBtn":false,"isFabLeft":true},"injectionInfo":[],"isActive":false,"styles":"{}"},"shipping":{"progressbar":{"config":{"activeOnProductPage":true,"activeOnCartPage":true},"productPageInjectionInfo":[],"cartPageInjectionInfo":[],"cartDrawerInjectionInfo":[],"isActive":true,"styles":"{}","contents":[{"locale":"","thresholdInitialText":"Add {{amount}} more to unlock {{discount}} off shipping","thresholdProgressText":"You're {{amount}} away from {{discount}} off shipping","thresholdReachedText":"You've unlocked {{discount}} off shipping!"}]},"progressBarDiscount":null}},"expiresAt":"2026-10-05T18:43:14.112259+00:00"},shopDomain: "joy-planet-finland.myshopify.com", 7878 customerId: null, 7879 isHomePage: false, 7880 isProductPage: true, 7881 currencyFormat: discountyExtractTextFromHtml(`0,00 â¬`) 7882 .replace( 7883 discountyExtractTextFromHtml(`0,00`),"{{money}}"), 7884 initialSelectedVariant: {"id":54276348870998,"title":"Black","option1":"Black","option2":null,"option3":null,"sku":"H-PRM-N-BL-TinyS","requires_shipping":true,"taxable":true,"featured_image":{"id":72008685551958,"product_id":10882379907414,"position":5,"created_at":"2026-02-24T12:08:42+02:00","updated_at":"2026-04-21T14:10:55+03:00","alt":null,"width":1080,"height":1074,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855","variant_ids":[54276348870998]},"available":true,"name":"TinyS - Black","public_title":"Black","options":["Black"],"price":15900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":null,"id":57682814402902,"position":5,"preview_image":{"aspect_ratio":1.006,"height":1074,"width":1080,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}, 7885 initialCart: [] || [], 7886 preloadedProducts: [ 7887 7888 ], 7889 products: [{ 7890 id: 10882379907414, 7891 handle: "tinys-earbuds-desinged-for-women-joy-friends-club", 7892 requires_selling_plan: false, 7893 selling_plan_groups: [], 7894 variants: [{ 7895 id: 54276348870998, 7896 price: 15900, 7897 compare_at_price: null, 7898 discounts: [],},{ 7899 id: 54276348936534, 7900 price: 15900, 7901 compare_at_price: null, 7902 discounts: [],},{ 7903 id: 55061249950038, 7904 price: 15900, 7905 compare_at_price: null, 7906 discounts: [],},], 7907 }, 7908 ], 7909 }; 7910</script>
7910 7911 7912<div id="discounty-bxgy-discount-widgets-container"></div> 7913 7914 7915</div><div id="shopify-block-ARExFU25Wa0dyOGZGU__6251270934270006384" class="shopify-block shopify-app-block">
7915<script> 7916 console.log("Stape gtm: 1.0.4"); 7917 window.lsData = {}; 7918 window.dataLayer = window.dataLayer || []; 7919 window.addEventListener("message", (event) => { 7920 if (event.data?.event) { 7921 window.dataLayer.push(event.data); 7922 } 7923 }); 7924 window.dataShopStape = { 7925 shop: "joyearbuds.com", 7926 shopId: "65680310506", 7927 } 7928</script>
7928 7929 7930
7931<script type="application/json" id="stape-product-data">{"id":10882379907414,"title":"TinyS","handle":"tinys-earbuds-desinged-for-women-joy-friends-club","vendor":"Joy Planet Finland","type":"","url":"\/products\/tinys-earbuds-desinged-for-women-joy-friends-club","available":true,"price":15900,"compare_at_price":null,"tags":["ads","landing page"],"category":"In-Ear Headphones","collections":[{"id":639365841238,"title":"All products excluding Varaosat","handle":"test"},{"id":660933574998,"title":"Gift-card ENABLED","handle":"gift-card-enabled"},{"id":707928949078,"title":"JOY4v alet","handle":"joy4v-alet"},{"id":702182555990,"title":"Loox alet","handle":"loox-alet"},{"id":707229352278,"title":"Main products","handle":"main-products"},{"id":617235186006,"title":"No-Discounts","handle":"discounts"},{"id":668751593814,"title":"XMAS 2025 META","handle":"xmas-2025-meta"}],"metafields":{"custom":{"short_description":" World best small headphones designed for women.","show_swatch_images":false,"upsell_products":[{"id":9486202765654,"title":"C2C fast fabric cable","handle":"c2c-kangaskaapeli"}]}},"variants":[]}</script>
vendor: 1 bytes, line 7931
7931
7932<script> 7933 (function () { 7934 try { 7935 window.productShopStape = JSON.parse(document.getElementById('stape-product-data').textContent); 7936 } catch (error) { 7937 console.warn('[ShopStape] productShopStape error', error); 7938 } 7939 })(); 7940</script>
7940 7941 7942 7943 7944 7945 7946
7946<script> 7947 console.log("â ï¸ User not logged in"); 7948 window.localStorage.removeItem('customerShopStape'); 7949 </script>
7949 7950 7951 7952 7953
7954<script> 7955 window.currentShopifyMarketStapeId = null; 7956 window.currentShopifyMarketStapeCode = null; 7957 try { 7958 window.currentShopifyMarketStapeId = "10944577770"; 7959 window.currentShopifyMarketStapeCode = "US"; 7960 // Checkout doesn't render theme app extension blocks, so this is the 7961 // only place the market/country code is ever set. Persisting it here 7962 // lets checkout-side field mapping (country_market_code) fall back to 7963 // the last known value instead of coming up empty. 7964 localStorage.setItem('marketShopStape', JSON.stringify({ 7965 id: window.currentShopifyMarketStapeId, 7966 code: window.currentShopifyMarketStapeCode 7967 })); 7968 } catch (error) { 7969 console.error("â Stape Error:", error); 7970 } 7971</script>
7971 7972 7973 7974 7975 7976 7977</div><div id="shopify-block-AMmJvYjFrS1RySEVuM__585288358657334602" class="shopify-block shopify-app-block"><!-- BEGIN app snippet: app-occ-snippet --> 7978 7979
7980<script> 7981 if(typeof(Spurit) === 'undefined'){ 7982 var Spurit = {}; 7983 } 7984 if(!Spurit.OneClickCheckout3){ 7985 Spurit.OneClickCheckout3 = {}; 7986 } 7987 if(!Spurit.OneClickCheckout3.snippet){ 7988 Spurit.OneClickCheckout3.snippet = {}; 7989 } 7990 Spurit.OneClickCheckout3.snippet.shopHash = 'b8336f1b3c6ad365bf01af3cd7d724a0'; 7991 Spurit.OneClickCheckout3.snippet.pageType = 'product'; 7992 Spurit.OneClickCheckout3.snippet.analyticsEnabled = '1'; 7993 Spurit.OneClickCheckout3.snippet.settingsVersion = '1790357710018'; 7994 Spurit.OneClickCheckout3.snippet.cdnStoreUrl = ''; 7995 7996 7997 Spurit.OneClickCheckout3.snippet.product = {"id":10882379907414,"title":"TinyS","handle":"tinys-earbuds-desinged-for-women-joy-friends-club","description":"\u003cdiv style=\"text-align: center;\"\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\n\u003cstrong style=\"font-size: 0.875rem;\"\u003eIntroducing New TinyS 2026: Unmatched Sound, Unbeatable size!\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cp style=\"text-align: left;\"\u003eOur new TinyS 2026 offers more than just incredible Hifi sound in the tiniest design. Our commitment extends to your peace of mind with a 3-year product warranty, a 1-year loss warranty, and a 30-day no-questions-asked satisfaction guarantee.\u003c\/p\u003e\n\u003cp style=\"text-align: left;\"\u003eDiscover unparalleled audio quality with TinyS, the smallest earbuds delivering world-class sound. Designed for ecological sustainability without compromising performance, TinyS boasts an extended battery life and effortless usability.\u003c\/p\u003e\n\u003cp style=\"text-align: left;\"\u003eCustomers can't stop raving about TinySâthe most surprisingly exceptional earbuds they've ever experienced. The moment you try them, expect a smile-inducing \"WOW\" effectâwe've crafted this reaction throughout our development journey.\u003c\/p\u003e\n\u003cp style=\"text-align: left;\"\u003eDespite their size, TinyS earbuds deliver outstanding performance. Try them out and share your feedbackâwe'd love to hear your thoughts.\u003cbr\u003e\u003cbr\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0656\/8031\/0506\/files\/5787836b437ad77dfa387f7e224402ee_045839c1-eff7-4d2f-9a84-cfa03acb0de1_600x600.png?v=1696596047\" alt=\"\" data-mce-fragment=\"1\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cdiv style=\"text-align: left;\" data-mce-fragment=\"1\"\u003e\n\u003ch2\u003eKey Features of TinyS Wireless Earbuds:\u003c\/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHiFi Sound \u0026amp; Bass (20-20,000 Hz)\u003c\/li\u003e\n\u003cli\u003eClear Calls in Wind \u0026amp; Noise with Noise-Canceling Chip \u0026amp; Nano Fabric Layers\u003c\/li\u003e\n\u003cli\u003e7 Ear Tips ensures the correct fit for every ear.\u003c\/li\u003e\n\u003cli\u003eCompatible with Helmets, Hats \u0026amp; Designed for Sleep\u003c\/li\u003e\n\u003cli\u003eUltralightweight Design: Earbuds (2.8g) \u0026amp; Charging Case (17g)\u003c\/li\u003e\n\u003cli\u003ePower \u0026amp; Game Modes for Enhanced Performance\u003c\/li\u003e\n\u003cli\u003eFast, Wide, and Strong Bluetooth 5.3 Connection\u003c\/li\u003e\n\u003cli\u003eIdeal for Music, Gaming, Audiobooks, and Podcasts\u003c\/li\u003e\n\u003cli\u003eSimultaneously Connects to Two Devices\u003c\/li\u003e\n\u003cli\u003e5.5 Hours of Playback Time, 16 Hours with Charging Case\u003c\/li\u003e\n\u003cli\u003eRapid 1.5-Hour Charging via USB-C \u003c\/li\u003e\n\u003cli\u003eFully CO2-Compensated Manufacturing \u0026amp; Logistics\u003c\/li\u003e\n\u003cli\u003eMinimal Packaging for Zero Plastic Waste\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003ca href=\"https:\/\/admin.shopify.com\/pages\/tinys-instructions\" target=\"_blank\"\u003eTinyS instructions ð\u003c\/a\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"text-align: left;\" data-mce-fragment=\"1\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv data-mce-fragment=\"1\"\u003e\u003cbr\u003e\u003c\/div\u003e","published_at":"2026-06-22T12:58:27+03:00","created_at":"2026-06-22T12:58:27+03:00","vendor":"Joy Planet Finland","type":"","tags":["ads","landing page"],"price":15900,"price_min":15900,"price_max":15900,"available":true,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":54276348870998,"title":"Black","option1":"Black","option2":null,"option3":null,"sku":"H-PRM-N-BL-TinyS","requires_shipping":true,"taxable":true,"featured_image":{"id":72008685551958,"product_id":10882379907414,"position":5,"created_at":"2026-02-24T12:08:42+02:00","updated_at":"2026-04-21T14:10:55+03:00","alt":null,"width":1080,"height":1074,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855","variant_ids":[54276348870998]},"available":true,"name":"TinyS - Black","public_title":"Black","options":["Black"],"price":15900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":null,"id":57682814402902,"position":5,"preview_image":{"aspect_ratio":1.006,"height":1074,"width":1080,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":54276348936534,"title":"Pink","option1":"Pink","option2":null,"option3":null,"sku":"H-PRM-N-PI-TinyS","requires_shipping":true,"taxable":true,"featured_image":{"id":72008741683542,"product_id":10882379907414,"position":15,"created_at":"2026-02-24T12:11:54+02:00","updated_at":"2026-04-21T14:10:55+03:00","alt":null,"width":995,"height":1080,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/pink_buds_transparent_1_1.png?v=1776769855","variant_ids":[54276348936534]},"available":true,"name":"TinyS - Pink","public_title":"Pink","options":["Pink"],"price":15900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":null,"id":57682870206806,"position":15,"preview_image":{"aspect_ratio":0.921,"height":1080,"width":995,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/pink_buds_transparent_1_1.png?v=1776769855"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":55061249950038,"title":"Gold","option1":"Gold","option2":null,"option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":{"id":72936309490006,"product_id":10882379907414,"position":17,"created_at":"2026-03-17T16:48:47+02:00","updated_at":"2026-03-17T16:48:50+02:00","alt":null,"width":1080,"height":1080,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_28.png?v=1773758930","variant_ids":[55061249950038]},"available":true,"name":"TinyS - Gold","public_title":"Gold","options":["Gold"],"price":15900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":null,"id":58100868972886,"position":17,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_28.png?v=1773758930"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}],"images":["\/\/joyearbuds.com\/cdn\/shop\/files\/ChatGPT_Image_May_28_2026_5.png?v=1779964205","\/\/joyearbuds.com\/cdn\/shop\/files\/ChatGPT_Image_May_27_2026_Delete_all_text.png?v=1779962850","\/\/joyearbuds.com\/cdn\/shop\/files\/1_50a6ac3e-56e8-43e3-b4bd-cfe325f8be6f.png?v=1779962834","\/\/joyearbuds.com\/cdn\/shop\/files\/2_5d3c594c-47d4-445e-9b74-80ead40f1514.png?v=1779962942","\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855","\/\/joyearbuds.com\/cdn\/shop\/files\/3_654fec4f-4a97-402e-b
7997c52-b36b89ed0da2.png?v=1779962833","\/\/joyearbuds.com\/cdn\/shop\/products\/PhotoRoom-20220726_171617_fe67b567-4b9e-48b7-b85c-e1b289a252e0.png?v=1776769855","\/\/joyearbuds.com\/cdn\/shop\/files\/PinkkiKotelo.png?v=1776769855","\/\/joyearbuds.com\/cdn\/shop\/files\/pink_3f59b54d-59e0-4972-bef4-45616984d816.png?v=1776769855","\/\/joyearbuds.com\/cdn\/shop\/files\/4_3c6a5910-dfa3-4a19-8d54-61d6db19a4c5.png?v=1779962833","\/\/joyearbuds.com\/cdn\/shop\/files\/black_1_b576a09d-169e-4603-b6ad-98353c1a5fea.png?v=1776769855","\/\/joyearbuds.com\/cdn\/shop\/files\/WhatsApp_Image_2025-05-07_at_12.48.32_1.jpg?v=1776769855","\/\/joyearbuds.com\/cdn\/shop\/files\/white_buds_transparent.png?v=1776769855","\/\/joyearbuds.com\/cdn\/shop\/files\/42_615c91ae-ee7c-453f-b77a-75ecd556c676.png?v=1776769855","\/\/joyearbuds.com\/cdn\/shop\/files\/pink_buds_transparent_1_1.png?v=1776769855","\/\/joyearbuds.com\/cdn\/shop\/files\/43_5766c3bd-ab34-43e3-80d0-690c6aaa3912.png?v=1776769855","\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_28.png?v=1773758930","\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_9.png?v=1766923740"],"featured_image":"\/\/joyearbuds.com\/cdn\/shop\/files\/ChatGPT_Image_May_28_2026_5.png?v=1779964205","options":["Color"],"media":[{"alt":null,"id":61026212086102,"position":1,"preview_image":{"aspect_ratio":1.0,"height":1254,"width":1254,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/ChatGPT_Image_May_28_2026_5.png?v=1779964205"},"aspect_ratio":1.0,"height":1254,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/ChatGPT_Image_May_28_2026_5.png?v=1779964205","width":1254},{"alt":null,"id":61026010792278,"position":2,"preview_image":{"aspect_ratio":1.023,"height":1240,"width":1268,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/ChatGPT_Image_May_27_2026_Delete_all_text.png?v=1779962850"},"aspect_ratio":1.023,"height":1240,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/ChatGPT_Image_May_27_2026_Delete_all_text.png?v=1779962850","width":1268},{"alt":null,"id":61026008465750,"position":3,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/1_50a6ac3e-56e8-43e3-b4bd-cfe325f8be6f.png?v=1779962834"},"aspect_ratio":1.0,"height":1080,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/1_50a6ac3e-56e8-43e3-b4bd-cfe325f8be6f.png?v=1779962834","width":1080},{"alt":null,"id":61026026717526,"position":4,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/2_5d3c594c-47d4-445e-9b74-80ead40f1514.png?v=1779962942"},"aspect_ratio":1.0,"height":1080,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/2_5d3c594c-47d4-445e-9b74-80ead40f1514.png?v=1779962942","width":1080},{"alt":null,"id":57682814402902,"position":5,"preview_image":{"aspect_ratio":1.006,"height":1074,"width":1080,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855"},"aspect_ratio":1.006,"height":1074,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855","width":1080},{"alt":null,"id":61026008432982,"position":6,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/3_654fec4f-4a97-402e-bc52-b36b89ed0da2.png?v=1779962833"},"aspect_ratio":1.0,"height":1080,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/3_654fec4f-4a97-402e-bc52-b36b89ed0da2.png?v=1779962833","width":1080},{"alt":null,"id":31695132819690,"position":7,"preview_image":{"aspect_ratio":1.0,"height":786,"width":786,"src":"\/\/joyearbuds.com\/cdn\/shop\/products\/PhotoRoom-20220726_171617_fe67b567-4b9e-48b7-b85c-e1b289a252e0.png?v=1776769855"},"aspect_ratio":1.0,"height":786,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/products\/PhotoRoom-20220726_171617_fe67b567-4b9e-48b7-b85c-e1b289a252e0.png?v=1776769855","width":786},{"alt":null,"id":44669860741462,"position":8,"preview_image":{"aspect_ratio":1.0,"height":2409,"width":2409,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/PinkkiKotelo.png?v=1776769855"},"aspect_ratio":1.0,"height":2409,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/PinkkiKotelo.png?v=1776769855","width":2409},{"alt":null,"id":47748942725462,"position":9,"preview_image":{"aspect_ratio":1.0,"height":800,"width":800,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/pink_3f59b54d-59e0-4972-bef4-45616984d816.png?v=1776769855"},"aspect_ratio":1.0,"height":800,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/pink_3f59b54d-59e0-4972-bef4-45616984d816.png?v=1776769855","width":800},{"alt":null,"id":61026008367446,"position":10,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/4_3c6a5910-dfa3-4a19-8d54-61d6db19a4c5.png?v=1779962833"},"aspect_ratio":1.0,"height":1080,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/4_3c6a5910-dfa3-4a19-8d54-61d6db19a4c5.png?v=1779962833","width":1080},{"alt":null,"id":50640482238806,"position":11,"preview_image":{"aspect_ratio":1.0,"height":800,"width":800,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_1_b576a09d-169e-4603-b
79976ad-98353c1a5fea.png?v=1776769855"},"aspect_ratio":1.0,"height":800,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_1_b576a09d-169e-4603-b6ad-98353c1a5fea.png?v=1776769855","width":800},{"alt":null,"id":52539146436950,"position":12,"preview_image":{"aspect_ratio":1.0,"height":1600,"width":1600,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/WhatsApp_Image_2025-05-07_at_12.48.32_1.jpg?v=1776769855"},"aspect_ratio":1.0,"height":1600,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/WhatsApp_Image_2025-05-07_at_12.48.32_1.jpg?v=1776769855","width":1600},{"alt":null,"id":57682785665366,"position":13,"preview_image":{"aspect_ratio":1.04,"height":1080,"width":1123,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/white_buds_transparent.png?v=1776769855"},"aspect_ratio":1.04,"height":1080,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/white_buds_transparent.png?v=1776769855","width":1123},{"alt":null,"id":57111160193366,"position":14,"preview_image":{"aspect_ratio":1.0,"height":2295,"width":2295,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/42_615c91ae-ee7c-453f-b77a-75ecd556c676.png?v=1776769855"},"aspect_ratio":1.0,"height":2295,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/42_615c91ae-ee7c-453f-b77a-75ecd556c676.png?v=1776769855","width":2295},{"alt":null,"id":57682870206806,"position":15,"preview_image":{"aspect_ratio":0.921,"height":1080,"width":995,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/pink_buds_transparent_1_1.png?v=1776769855"},"aspect_ratio":0.921,"height":1080,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/pink_buds_transparent_1_1.png?v=1776769855","width":995},{"alt":null,"id":57111174873430,"position":16,"preview_image":{"aspect_ratio":1.0,"height":2295,"width":2295,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/43_5766c3bd-ab34-43e3-80d0-690c6aaa3912.png?v=1776769855"},"aspect_ratio":1.0,"height":2295,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/43_5766c3bd-ab34-43e3-80d0-690c6aaa3912.png?v=1776769855","width":2295},{"alt":null,"id":58100868972886,"position":17,"preview_image":{"aspect_ratio":1.0,"height":1080,"width":1080,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_28.png?v=1773758930"},"aspect_ratio":1.0,"height":1080,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_28.png?v=1773758930","width":1080},{"alt":null,"id":56623538241878,"position":18,"preview_image":{"aspect_ratio":1.0,"height":2025,"width":2025,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_9.png?v=1766923740"},"aspect_ratio":1.0,"height":2025,"media_type":"image","src":"\/\/joyearbuds.com\/cdn\/shop\/files\/TINYS_9.png?v=1766923740","width":2025}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cdiv style=\"text-align: center;\"\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\n\u003cstrong style=\"font-size: 0.875rem;\"\u003eIntroducing New TinyS 2026: Unmatched Sound, Unbeatable size!\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cp style=\"text-align: left;\"\u003eOur new TinyS 2026 offers more than just incredible Hifi sound in the tiniest design. Our commitment extends to your peace of mind with a 3-year product warranty, a 1-year loss warranty, and a 30-day no-questions-asked satisfaction guarantee.\u003c\/p\u003e\n\u003cp style=\"text-align: left;\"\u003eDiscover unparalleled audio quality with TinyS, the smallest earbuds delivering world-class sound. Designed for ecological sustainability without compromising performance, TinyS boasts an extended battery life and effortless usability.\u003c\/p\u003e\n\u003cp style=\"text-align: left;\"\u003eCustomers can't stop raving about TinySâthe most surprisingly exceptional earbuds they've ever experienced. The moment you try them, expect a smile-inducing \"WOW\" effectâwe've crafted this reaction throughout our development journey.\u003c\/p\u003e\n\u003cp style=\"text-align: left;\"\u003eDespite their size, TinyS earbuds deliver outstanding performance. Try them out and share your feedbackâwe'd love to hear your thoughts.\u003cbr\u003e\u003cbr\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0656\/8031\/0506\/files\/5787836b437ad77dfa387f7e224402ee_045839c1-eff7-4d2f-9a84-cfa03acb0de1_600x600.png?v=1696596047\" alt=\"\" data-mce-fragment=\"1\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cdiv style=\"text-align: left;
7997\" data-mce-fragment=\"1\"\u003e\n\u003ch2\u003eKey Features of TinyS Wireless Earbuds:\u003c\/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHiFi Sound \u0026amp; Bass (20-20,000 Hz)\u003c\/li\u003e\n\u003cli\u003eClear Calls in Wind \u0026amp; Noise with Noise-Canceling Chip \u0026amp; Nano Fabric Layers\u003c\/li\u003e\n\u003cli\u003e7 Ear Tips ensures the correct fit for every ear.\u003c\/li\u003e\n\u003cli\u003eCompatible with Helmets, Hats \u0026amp; Designed for Sleep\u003c\/li\u003e\n\u003cli\u003eUltralightweight Design: Earbuds (2.8g) \u0026amp; Charging Case (17g)\u003c\/li\u003e\n\u003cli\u003ePower \u0026amp; Game Modes for Enhanced Performance\u003c\/li\u003e\n\u003cli\u003eFast, Wide, and Strong Bluetooth 5.3 Connection\u003c\/li\u003e\n\u003cli\u003eIdeal for Music, Gaming, Audiobooks, and Podcasts\u003c\/li\u003e\n\u003cli\u003eSimultaneously Connects to Two Devices\u003c\/li\u003e\n\u003cli\u003e5.5 Hours of Playback Time, 16 Hours with Charging Case\u003c\/li\u003e\n\u003cli\u003eRapid 1.5-Hour Charging via USB-C \u003c\/li\u003e\n\u003cli\u003eFully CO2-Compensated Manufacturing \u0026amp; Logistics\u003c\/li\u003e\n\u003cli\u003eMinimal Packaging for Zero Plastic Waste\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003ca href=\"https:\/\/admin.shopify.com\/pages\/tinys-instructions\" target=\"_blank\"\u003eTinyS instructions ð\u003c\/a\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"text-align: left;\" data-mce-fragment=\"1\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv data-mce-fragment=\"1\"\u003e\u003cbr\u003e\u003c\/div\u003e"}; 7998 Spurit.OneClickCheckout3.snippet.product.selected_or_first_available_variant = {"id":54276348870998,"title":"Black","option1":"Black","option2":null,"option3":null,"sku":"H-PRM-N-BL-TinyS","requires_shipping":true,"taxable":true,"featured_image":{"id":72008685551958,"product_id":10882379907414,"position":5,"created_at":"2026-02-24T12:08:42+02:00","updated_at":"2026-04-21T14:10:55+03:00","alt":null,"width":1080,"height":1074,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855","variant_ids":[54276348870998]},"available":true,"name":"TinyS - Black","public_title":"Black","options":["Black"],"price":15900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":null,"id":57682814402902,"position":5,"preview_image":{"aspect_ratio":1.006,"height":1074,"width":1080,"src":"\/\/joyearbuds.com\/cdn\/shop\/files\/black_buds_transparent_1.png?v=1776769855"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}; 7999 Spurit.OneClickCheckout3.snippet.product.options = [{"name":"Color","position":1,"values":["Black","Pink","Gold"]}]; 8000 8001 Spurit.OneClickCheckout3.snippet.product.featured_image = '//joyearbuds.com/cdn/shop/files/ChatGPT_Image_May_28_2026_5.png?crop=center&height=100&v=1779964205&width=100'; 8002 8003 Spurit.OneClickCheckout3.snippet.collections = [{"id":639365841238,"handle":"test","title":"All products excluding Varaosat","updated_at":"2026-10-04T14:13:20+03:00","body_html":"","published_at":"2024-12-20T11:47:22+02:00","sort_order":"created-desc","template_suffix":"","disjunctive":false,"rules":[{"column":"type","relation":"not_contains","condition":"Varaosat"},{"column":"title","relation":"not_contains","condition":"Tinys Pro"},{"column":"type","relation":"not_equals","condition":"giftbox_ghost_product"}],"published_scope":"web"},{"id":660933574998,"handle":"gift-card-enabled","title":"Gift-card ENABLED","updated_at":"2026-10-04T14:13:20+03:00","body_html":"","published_at":"2025-10-09T09:11:53+03:00","sort_order":"manual","template_suffix":"","disjunctive":false,"rules":[{"column":"type","relation":"not_equals","condition":"giftbox_ghost_product"},{"column":"type","relation":"not_equals","condition":"GIFT_CARD_DISABLED"}],"published_scope":"web"},{"id":707928949078,"handle":"joy4v-alet","updated_at":"2026-10-04T14:13:20+03:00","published_at":"2026-09-07T18:24:42+03:00","sort_order":"most-relevant","template_suffix":null,"published_scope":"web","title":"JOY4v alet","body_html":null},{"id":702182555990,"handle":"loox-alet","updated_at":"2026-10-04T14:13:20+03:00","published_at":"2026-07-08T15:30:08+03:00","sort_order":"most-relevant","template_suffix":"","published_scope":"web","title":"Loox alet","body_html":""},{"id":707229352278,"handle":"main-products","updated_at":"2026-10-04T14:13:20+03:00","published_at":"2026-08-31T19:09:07+03:00","sort_order":"most-relevant","template_suffix":null,"published_scope":"web","title":"Main products","body_html":null},{"id":617235186006,"handle":"discounts","title":"No-Discounts","updated_at":"2026-10-04T12:04:06+03:00","body_html":"","published_at":"2024-02-06T12:18:32+02:00","sort_order":"best-selling","template_suffix":"","disjunctive":false,"rules":[{"column":"is_price_reduced","relation":"is_not_set","condition":""},{"column":"type","relation":"not_equals","condition":"Varaosat"},{"column":"type","relation":"not_equals","condition":"giftbox_ghost_product"}],"published_scope":"web"},{"id":668751593814,"handle":"xmas-2025-meta","updated_at":"2026-10-04T14:13:20+03:00","published_at":"2025-12-08T17:09:55+02:00","sort_order":"best-selling","template_suffix":"","published_scope":"web","title":"XMAS 2025 META","body_html":""}]; 8004 8005 8006 8007 8008 if (typeof(Spurit.globalSnippet) === 'undefined') { 8009 Spurit.globalSnippet = { 8010 shop_currency: 'EUR', 8011 money_format: '{{amount_with_comma_separator}} â¬', 8012 cart: {"note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"EUR","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0}, 8013 customer_id: '', 8014 routes_root: '/', 8015 timezone: 'Europe/Helsinki', 8016 }; 8017 } 8018 8019 Spurit.globalSnippet.shop_timezone = 'Europe/Helsinki'; 8020</script>
8020 8021
8022<script src="https://cdn.occ-app.com/all-apps/spurit.global-2.x.min.js" async></script>
8022 8023 8024
8025<script src="https://cdn.occ-app.com/shopify-apps/one-click-checkout/common.js" async></script>
8025 8026<link href="https://cdn.occ-app.com/shopify-apps/one-click-checkout/common.css" rel="stylesheet" type="text/css" media="all"> 8027<!-- END app snippet --> 8028 8029</div><div id="shopify-block-AakNoTzR0N0NkN3Z2W__11532412952436166569" class="shopify-block shopify-app-block">
8029<script async src="https://loox.io/widget/V1b_4RDNrT/loox.1667989271762.js?shop=joy-planet-finland.myshopify.com"></script>
8029 8030 8031 8032 <!-- __LXV: 1791097950421;__LXR: https://loox.io;__LXC: V1b_4RDNrT; -->
8032<script>var loox_global_hash = '1791097950421'; 8033var loox_bundle_reviews_enabled = false;</script>
8033<style>.loox-reviews-default { max-width: 1200px; margin: 0 auto; }.loox-rating .loox-icon { color:#EBBF20; } 8034:root { --lxs-rating-icon-color: #EBBF20; }</style> 8035 8036 8037 8038 8039 8040
8040<script> 8041 const productLdJsonSchema = { 8042 "@context": "http://schema.org", 8043 "@type": "Product", 8044 "name": "TinyS", 8045 "aggregateRating": { 8046 "@type": "AggregateRating", 8047 "ratingValue": "4.7", 8048 "reviewCount": 481 8049 } 8050 } 8051 8052 const looxAddProductLdJsonSchema = () => { 8053 const scriptEl = document.createElement('script'); 8054 scriptEl.type = 'application/ld+json'; 8055 8056 const stringifyProductLdJsonSchema = JSON.stringify(productLdJsonSchema); 8057 8058 try { 8059 scriptEl.appendChild(document.createTextNode(stringifyProductLdJsonSchema)); 8060 document.body.appendChild(scriptEl); 8061 } catch (e) { 8062 scriptEl.textContent = stringifyProductLdJsonSchema; 8063 document.body.appendChild(scriptEl); 8064 } 8065 }; 8066 8067 let productSchemaHandled = false; 8068 8069 window.addEventListener('DOMContentLoaded', () => { 8070 try { 8071 const ldJsonScripts = document.querySelectorAll("[type='application/ld+json']"); 8072 const microdataElements = document.querySelectorAll("[itemtype='https://schema.org/Product'], [itemprop='aggregateRating']"); 8073 8074 if (microdataElements.length) return; 8075 if ([...ldJsonScripts].some(({ textContent }) => JSON.parse(textContent).hasOwnProperty('aggregateRating'))) return; 8076 8077 ldJsonScripts.forEach(script => { 8078 const json = JSON.parse(script.textContent); 8079 8080 if (productSchemaHandled) return; 8081 if (json['@type'] !== 'Product' && json['@type'] !== 'ProductGroup') return; 8082 8083 json.aggregateRating = productLdJsonSchema.aggregateRating; 8084 script.textContent = JSON.stringify(json); 8085 productSchemaHandled = true; 8086 }); 8087 8088 if (!productSchemaHandled) looxAddProductLdJsonSchema(); 8089 } catch (error) { 8090 // swallow error 8091 } 8092 }); 8093 </script>
8093 8094 8095 8096 8097</div>
8097<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
8097 8098</body> 8099</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.