1<!-- 2 Developed By: MalterTech LLC 3 Website: https://maltertech.com 4--> 5 6<!doctype html> 7 8<html lang="is"> 9 10 11<head>
11<script data-source-attribution="shopify.event_observer.bootstrap"> 12(function(){let e=navigator,t=`prototype`,n=`sendBeacon`,r=e[n],i=fetch,a=XMLHttpRequest[t],{open:o,send:s}=a,c=`EventListener`,l=`add${c}`,u=`remove${c}`,d=EventTarget[t],f=d[l],p=d[u],m=e=>Error((e=document.currentScript)&&[e?.src,e?.id||e?.dataset?.sourceAttribution]),h=(e=[],t=0)=>(e.p=n=>e[t++%1e3]=n,[e,t=>(e.forEach(e.p=t),e.length=0)]),[g,_]=h(),[v,y]=h(),b,x=new WeakMap,S=e=>e&&g.p([e,b||[m()]]);d[l]=function(e,t,n){let r=this,i=t?.handleEvent||t,a=x.get(t),o=m();i?.call&&!a&&x.set(t,a=function(e){b=[o,e.type];try{i.call(t==i?this:t,e)}finally{b=null}}),v.p([e,o,a,r?.tagName||r+``,r?.id]),f.call(r,e,a||t,n)},d[u]=function(e,t,n){p.call(this,e,x.get(t)||t,n)},a.open=function(e,t){x.set(this,[t+``,e]),o.apply(this,arguments)},a.send=function(e){S(x.get(this)),s.call(this,e)},fetch=(e,t)=>(S([(e?.url||e)+``,t?.method]),i(e,t)),e[n]=(t,n)=>(S([t+``,``]),r.call(e,t,n)),setTimeout(()=>import("//happyhydrate.is/cdn/shopifycloud/storefront/assets/storefront/event_observer_reporter-ed358274.js").then(e=>e.$(_,y,f,i,`60930031754`)))})(); 13//# sourceURL=event-observer-collector.js 14</script>
vendor: 69 bytes, lines 14-16
14 15 16 <script async src="https://www.googletagmanager.com/gtag/js?id=
16AW-11191271653
vendor: 16 bytes, lines 16-17
16"></script> 17
17<script> 18
vendor: 177 bytes, lines 18-26
18window.dataLayer = window.dataLayer || []; 19 20 function gtag() { 21 dataLayer.push(arguments); 22 } 23 24 gtag('js', new Date()); 25 26 gtag('config', '
26AW-11191271653
vendor: 8 bytes, lines 26-27
26'); 27
27</script>
27 28 29 30 <!-- Redirect --> 31
31<script> 32 if (window.location.pathname === '/products/hydration-e' || window.location.pathname === '/en/products/hydration-xpress-xx') { 33 window.location.href = '/products/hydration-xpress'; 34 } 35 </script>
35 36 37 <!--Title & Meta--> 38 <title> 39 Hydration Xpress – Happy Hydrate IS</title> 40 41 <link rel="canonical" href="https://happyhydrate.is/products/hydration-xpress"/> 42 <meta charset="UTF-8"> 43 <meta name="viewport" content="initial-scale=1, width=device-width, height=device-height, viewport-fit=cover"> 44 45 <!-- Social --> 46 <meta property="og:site_name" content="Happy Hydrate IS"> 47 <meta property="og:url" content="https://happyhydrate.is/products/hydration-xpress"> 48 <meta property="og:title" content="Hydration Xpress"> 49 <meta property="og:type" content="product"> 50 <meta property="og:description" content="Happy Hydrate IS"><meta property="og:image" content="http://happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"> 51 <meta property="og:image:secure_url" content="https://happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"> 52 <meta property="og:image:width" content="1240"> 53 <meta property="og:image:height" content="1240"><meta property="og:price:amount" 54 content="5,985"> 55 <meta property="og:price:currency" content="ISK"><meta name="twitter:card" content="summary_large_image"> 56 <meta name="twitter:title" content="Hydration Xpress"> 57 <meta name="twitter:description" content="Happy Hydrate IS"> 58 59 <!-- Favicon --> 60 <link rel="icon" href="//happyhydrate.is/cdn/shop/files/output-onlinepngtools-4_1.png?v=1682280342" type="image/png"> 61 62 <!--Fonts â consolidated into single request --> 63 <link rel="preconnect" href="https://fonts.googleapis.com"> 64 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 65 <link href="https://fonts.googleapis.com/css2?family=Dela+Gothic+One&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet"> 66 67 <!-- Preconnect to third-party origins used later in the page --> 68 <link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin> 69 <link rel="preconnect" href="https://cdn.shopify.com" crossorigin> 70 <link rel="preconnect" href="https://tracking.happyhydrate.is" crossorigin> 71 <link rel="preconnect" href="https://static.klaviyo.com" crossorigin><link rel="preload" as="image" 72 href="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=1200" 73 imagesrcset="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=600 600w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=900 900w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=1200 1200w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=1600 1600w" 74 imagesizes="(max-width: 768px) 100vw, 50vw" 75 fetchpriority="high"><!-- Swiper JS (deferred; section IIFEs wait for DOMContentLoaded before calling new Swiper) --> 76 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/11.0.4/swiper-bundle.min.css" 77 integrity="sha512-1CRCT9P70z3SktzqL7P8o8YvlmT1nXwFeXLBuVBa4mzQJ4fsvpmsObWooerRi4WzQT8QFrBVz/36mt/XGPYVzw==" 78 crossorigin="anonymous" referrerpolicy="no-referrer"/> 79
79<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/11.0.4/swiper-bundle.min.js" 80 integrity="sha512-/LKHQ9K9yatyOfEKXiysc9SPCpF6xkvfHQxtPkhdKS83GvfyIWDwKaOr3/LqVxbEX89Bqz+SbMHEPWm0AeRWnA==" 81 crossorigin="anonymous" referrerpolicy="no-referrer" defer></script>
81 82 83 <!-- Global CSS --> 84 <link href="//happyhydrate.is/cdn/shop/t/80/assets/theme-global.css?v=168208496876251550691788984151" rel="stylesheet"> 85 <link href="//happyhydrate.is/cdn/shop/t/80/assets/theme-header.css?v=75343060394666661351788984151" rel="stylesheet"> 86 <link href="//happyhydrate.is/cdn/shop/t/80/assets/theme-mini-cart.css?v=168934013703213604681788984151" rel="stylesheet"> 87 <link href="//happyhydrate.is/cdn/shop/t/80/assets/theme-footer.css?v=105633225076094538711788984151" rel="stylesheet"> 88 89 <!-- Global JS --> 90
90<script defer src="//happyhydrate.is/cdn/shop/t/80/assets/theme-polyfill-dialog.js?v=58480766684483630301788984151"></script>
90 91
91<script defer src="//happyhydrate.is/cdn/shop/t/80/assets/theme-global.js?v=116967996199473262951788984151"></script>
91 92
92<script defer src="//happyhydrate.is/cdn/shop/t/80/assets/theme-header.js?v=157719865413041685121788984151"></script>
92 93
93<script defer src="//happyhydrate.is/cdn/shop/t/80/assets/theme-mini-cart.js?v=85363150543070642981789043792"></script>
93 94 95 <!-- Global Cart --> 96
96<script> 97 let 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":"ISK","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0}; 98 const currency = "kr"; 99 </script>
99 100 101 <!-- Shop Variables --> 102
102<script> 103 let shopDomain = "happyhydrate.is"; 104 let shopCurrency = "ISK"; 105 </script>
105 106 107 <!-- Page Specific CSS/JS --> 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 <!-- JSON LD --> 125 126
126<script type="application/ld+json"> 127 { 128 "@context": "https://schema.org", 129 "@type": "BreadcrumbList", 130 "itemListElement": [ 131 { 132 "@type": "ListItem", 133 "position": 1, 134 "item": { 135 "@type": "Website", 136 "@id": "https://happyhydrate.is", 137 "name": "Home" 138 } 139 }, 140 { 141 "@type": "ListItem", 142 "position": 2, 143 "item": { 144 "@type": "WebPage", 145 "@id": "https://happyhydrate.is/products/hydration-xpress", 146 "name": "Hydration Xpress" 147 } 148 } 149] 150} 151 </script>
151 152 153
154<script type="application/ld+json"> 155 { 156 "@context": "https://schema.org", 157 "@type": "Organization", 158 "url": "https://happyhydrate.is", 159 "name": "Happy Hydrate IS", 160 "description": "" 161 } 162</script>
162 163 164 165
165<script type="application/ld+json"> 166 { 167 "@context": "https://schema.org/", 168 "@type": "Product", 169 "name": "Hydration Xpress", 170 "image": "https://happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496", 171 "offers": { 172 "@type": "Offer", 173 "url": "https://happyhydrate.is/products/hydration-xpress", 174 "priceCurrency": "ISK", 175 "price": "1995", 176 "availability": "https://schema.org/InStock", 177 "itemCondition": "https://schema.org/NewCondition" 178 }, 179 "description": "", 180 "brand": { 181 "@type": "Brand", 182 "name": "Happy Hydrate IS" 183 } 184 } 185 </script>
185 186 187 188 189 190 191 <!-- Signals Gateway Pixel Code -->
192<script> 193!function(a,h,e,v,n,t,s) 194 {if(a.cbq)return;n=a.cbq=function(){n.callMethod? 195 n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 196 if(!a._cbq)a._cbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 197 n.queue=[];t=h.createElement(e);t.async=!0; 198 t.src=v;s=h.getElementsByTagName(e)[0]; 199 s.parentNode.insertBefore(t,s)}(window, document,'script', 200 'https://tracking.happyhydrate.is/sdk/5892240884230489993/events.js'); 201 cbq('setHost', 'https://tracking.happyhydrate.is'); 202 cbq('init', '5892240884230489993'); 203 cbq('track', 'PageView'); 204</script>
204 205<!-- End Signals Gateway Pixel Code --> 206 <!-- Shopify --> 207
207<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
207<meta name="google-site-verification" content="eAbgHsspIO2HeCa-joR1vkK1Ib5pw7P_JP-FHK0aBMU"> 208<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/60930031754/digital_wallets/dialog"> 209<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="buy" href="/cart/50050860744842:1?ucp/version=2026-08-25" payment="com.google.pay dev.shopify.card dev.shopify.shop_pay"><link rel="alternate" hreflang="x-default" href="https://happyhydrate.is/products/hydration-xpress"> 210<link rel="alternate" hreflang="is" href="https://happyhydrate.is/products/hydration-xpress"> 211<link rel="alternate" hreflang="en" href="https://happyhydrate.is/en/products/hydration-xpress"> 212<link rel="alternate" type="application/json+oembed" href="https://happyhydrate.is/products/hydration-xpress.oembed">
213<script async="async" src="/checkouts/internal/preloads.js?locale=is-IS"></script>
vendor: 1 bytes, line 213
213
214<script id="shopify-features" type="application/json">{"accessToken":"b92c36cd3b53acdd838b31b5103aafb8","betas":["rich-media-storefront-analytics"],"domain":"happyhydrate.is","predictiveSearch":true,"shopId":60930031754,"locale":"en"}</script>
vendor: 1 bytes, line 214
214
215<script>var Shopify = Shopify || {}; 216Shopify.shop = "happyhydrate-1068.myshopify.com"; 217Shopify.locale = "is"; 218Shopify.currency = {"active":"ISK","rate":"1.0"}; 219Shopify.country = "IS"; 220Shopify.theme = {"name":"happy-hydrate-jonny-v6","id":158213013642,"schema_name":"MalterTech","schema_version":"1.0","theme_store_id":null,"role":"main"}; 221Shopify.theme.handle = "null"; 222Shopify.theme.style = {"id":null,"handle":null}; 223Shopify.cdnHost = "happyhydrate.is/cdn"; 224Shopify.routes = Shopify.routes || {}; 225Shopify.routes.root = "/"; 226Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 227Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 228Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 229Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 229
229
230<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 230
230
231<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 231
231
232<script> 233 window.Shopify = window.Shopify || {}; 234 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 235 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 236 window.Shopify.SignInWithShop.eligible = true; 237</script>
vendor: 1 bytes, line 237
237
238<script id="shop-js-analytics" type="application/json">{"pageType":"product"}</script>
vendor: 1 bytes, line 238
238
239<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 239
239
240<script type="module"> 241 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 242 243 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 244 245</script>
vendor: 1 bytes, line 245
245
246<script> 247 window.Shopify = window.Shopify || {}; 248 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 249 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"]}; 250</script>
vendor: 1 bytes, line 250
250
251<script>(function() { 252 var isLoaded = false; 253 function asyncLoad() { 254 if (isLoaded) return; 255 isLoaded = true; 256 var urls = ["https:\/\/gdprcdn.b-cdn.net\/js\/gdpr_cookie_consent.min.js?shop=happyhydrate-1068.myshopify.com","https:\/\/cdn.tmnls.reputon.com\/assets\/widget.js?shop=happyhydrate-1068.myshopify.com","https:\/\/config.gorgias.chat\/bundle-loader\/01HQ4FXPQK3YCX7JRZN2B4PF5T?source=shopify1click\u0026shop=happyhydrate-1068.myshopify.com","https:\/\/static.klaviyo.com\/onsite\/js\/klaviyo.js?company_id=XBXeNE\u0026shop=happyhydrate-1068.myshopify.com","https:\/\/cdn.pushowl.com\/latest\/sdks\/pushowl-shopify.js?subdomain=happyhydrate-1068\u0026environment=production\u0026guid=1aba2137-42fe-4dc3-a772-bcc9b4903940\u0026shop=happyhydrate-1068.myshopify.com"]; 257 for (var i = 0; i < urls.length; i++) { 258 var s = document.createElement('script'); 259 s.type = 'text/javascript'; 260 s.async = true; 261 s.src = urls[i]; 262 var x = document.getElementsByTagName('script')[0]; 263 x.parentNode.insertBefore(s, x); 264 } 265 }; 266 if(window.attachEvent) { 267 window.attachEvent('onload', asyncLoad); 268 } else { 269 window.addEventListener('load', asyncLoad, false); 270 } 271})();</script>
vendor: 1 bytes, line 271
271
272<script id="__st">var __st={"a":60930031754,"offset":0,"reqid":"1a47e688-6e82-4f3a-8711-34e2413eed44-1791095772","pageurl":"happyhydrate.is\/products\/hydration-xpress?variant=50050860744842","u":"822d697c4da0","p":"product","rtyp":"product","rid":8033136181386};</script>
vendor: 1 bytes, line 272
272
273<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 273
273
274<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 274
274
275<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//happyhydrate.is/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 275
275
276<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 = "//happyhydrate.is/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>
276<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 276
276
277<script> 278 window.Shopify = window.Shopify || {}; 279 window.Shopify.MCP = window.Shopify.MCP || {}; 280 window.Shopify.MCP.enabled = true; 281 window.Shopify.MCP.shop = "happyhydrate-1068.myshopify.com"; 282 window.Shopify.MCP.mcpEndpoint = "https:\/\/happyhydrate.is\/api\/mcp"; 283 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"]}}]; 284</script>
vendor: 1 bytes, line 284
284
285<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("\/\/happyhydrate.is\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 286</script>
vendor: 1 bytes, line 286
286
287<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://happyhydrate.is/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 288</script>
vendor: 1 bytes, line 288
288
289<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 290 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); 291</script>
vendor: 1 bytes, line 291
291
292<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})}})); 293</script>
293 294
295<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
295 296 297<!-- BEGIN app block: shopify://apps/consentmo-gdpr/blocks/gdpr_cookie_consent/4fbe573f-a377-4fea-9801-3ee0858cae41 --> 298<link rel="preconnect" href="https://app.consentmo.com" crossorigin data-csm-preconnect="app"> 299<link rel="dns-prefetch" href="https://workers.consentmo.com" data-csm-preconnect="workers"> 300<link rel="dns-prefetch" href="https://storage.consentmo.com" data-csm-preconnect="storage"> 301<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"> 302 <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"> 303 <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"> 304 <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"> 305 <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">
305<script> 306(function () { 307 try { 308 document.documentElement.classList.add('csm-cookie-embed'); 309 } catch (e) {} 310})(); 311</script>
311<script data-consentmo-data-src-bootstrap> 312(function () { 313 'use strict'; 314 if (window.__consentmoDataSrcBootstrapInit) return; 315 window.__consentmoDataSrcBootstrapInit = true; 316 317 var DATA_SRC_SELECTOR = [ 318 'script[data-src*="consentmo_cookie_consent"]', 319 'script[data-src*="gdpr_cookie_consent.min"]', 320 'script[data-src*="gdrp_cookie_consent_unlimited"]' 321 ].join(','); 322 323 function activateConsentmoDataSrcScripts() { 324 if (!window.Shopify || !window.Shopify.shop) return; 325 document.querySelectorAll(DATA_SRC_SELECTOR).forEach(function (scriptEl) { 326 // getAttribute: src="" must not count as "already has src" (.src === page URL). 327 if (scriptEl.getAttribute('src')) return; 328 var url = scriptEl.getAttribute('data-src'); 329 if (!url) return; 330 if (scriptEl.getAttribute('type') === 'text/plain') { 331 scriptEl.removeAttribute('type'); 332 } 333 scriptEl.src = url; 334 }); 335 } 336 function scheduleActivation() { 337 activateConsentmoDataSrcScripts(); 338 // Retry on next task so other DCL handlers (lazy-loaders) can finish setting Shopify.shop / data-src first. 339 setTimeout(activateConsentmoDataSrcScripts, 0); 340 } 341 if (document.readyState === 'loading') { 342 document.addEventListener('DOMContentLoaded', scheduleActivation, { once: true }); 343 } else { 344 scheduleActivation(); 345 } 346})(); 347</script>
347 348 349 350<!-- END app block --><!-- BEGIN app block: shopify://apps/microsoft-clarity/blocks/clarity_js/31c3d126-8116-4b4a-8ba1-baeda7c4aeea -->
351<script type="text/javascript"> 352 (function (c, l, a, r, i, t, y) { 353 c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments); }; 354 t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i + "?ref=shopify"; 355 y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y); 356 357 c.Shopify.loadFeatures([{ name: "consent-tracking-api", version: "0.1" }], error => { 358 if (error) { 359 console.error("Error loading Shopify features:", error); 360 return; 361 } 362 363 c[a]('consentv2', { 364 ad_Storage: c.Shopify.customerPrivacy.marketingAllowed() ? "granted" : "denied", 365 analytics_Storage: c.Shopify.customerPrivacy.analyticsProcessingAllowed() ? "granted" : "denied", 366 source: 101, 367 }); 368 }); 369 370 l.addEventListener("visitorConsentCollected", function (e) { 371 c[a]('consentv2', { 372 ad_Storage: e.detail.marketingAllowed ? "granted" : "denied", 373 analytics_Storage: e.detail.analyticsAllowed ? "granted" : "denied", 374 source: 101, 375 }); 376 }); 377 })(window, document, "clarity", "script", "y8lbbd4w00"); 378</script>
378 379 380 381 382<!-- END app block --><!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 --> 383 384 385 386 387 388 389 390 391 392 393 394 395
395<script async src="https://static.klaviyo.com/onsite/js/XBXeNE/klaviyo.js?company_id=XBXeNE"></script>
395 396
396<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>
396 397 398 399
399<script id="viewed_product"> 400 if (item == null) { 401 var _learnq = _learnq || []; 402 403 var MetafieldReviews = null 404 var MetafieldYotpoRating = null 405 var MetafieldYotpoCount = null 406 var MetafieldLooxRating = null 407 var MetafieldLooxCount = null 408 var okendoProduct = null 409 var okendoProductReviewCount = null 410 var okendoProductReviewAverageValue = null 411 try { 412 // The following fields are used for Customer Hub recently viewed in order to add reviews. 413 // This information is not part of __kla_viewed. Instead, it is part of __kla_viewed_reviewed_items 414 MetafieldReviews = {"rating_count":0}; 415 MetafieldYotpoRating = null 416 MetafieldYotpoCount = null 417 MetafieldLooxRating = null 418 MetafieldLooxCount = null 419 420 okendoProduct = null 421 // If the okendo metafield is not legacy, it will error, which then requires the new json formatted data 422 if (okendoProduct && 'error' in okendoProduct) { 423 okendoProduct = null 424 } 425 okendoProductReviewCount = okendoProduct ? okendoProduct.reviewCount : null 426 okendoProductReviewAverageValue = okendoProduct ? okendoProduct.reviewAverageValue : null 427 } catch (error) { 428 console.error('Error in Klaviyo onsite reviews tracking:', error); 429 } 430 431 var item = { 432 Name: "Hydration Xpress", 433 ProductID: 8033136181386, 434 Categories: ["Allar vörur","Home page","Hydration"], 435 ImageURL: "https://happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade_grande.png?v=1788381496", 436 URL: "https://happyhydrate.is/products/hydration-xpress", 437 Brand: "happyhydrate", 438 Price: "1,995 kr", 439 Value: "1,995", 440 CompareAtPrice: "17,955 kr" 441 }; 442 _learnq.push(['track', 'Viewed Product', item]); 443 _learnq.push(['trackViewedItem', { 444 Title: item.Name, 445 ItemId: item.ProductID, 446 Categories: item.Categories, 447 ImageUrl: item.ImageURL, 448 Url: item.URL, 449 Metadata: { 450 Brand: item.Brand, 451 Price: item.Price, 452 Value: item.Value, 453 CompareAtPrice: item.CompareAtPrice 454 }, 455 metafields:{ 456 reviews: MetafieldReviews, 457 yotpo:{ 458 rating: MetafieldYotpoRating, 459 count: MetafieldYotpoCount, 460 }, 461 loox:{ 462 rating: MetafieldLooxRating, 463 count: MetafieldLooxCount, 464 }, 465 okendo: { 466 rating: okendoProductReviewAverageValue, 467 count: okendoProductReviewCount, 468 } 469 } 470 }]); 471 } 472 </script>
472 473 474 475 476 477 478
478<script> 479 window.klaviyoReviewsProductDesignMode = false 480 </script>
480 481 482 483 484 485 486 487 488 489 490<!-- END app block -->
490<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>
vendor: 1 bytes, line 490
490
491<script src="https://cdn.shopify.com/extensions/01a0ec21-7369-78a6-b9c0-c07227d664ec/lb-upsell-451/assets/lb-selleasy.js" type="text/javascript" defer="defer"></script>
491 492<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
493<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: 60930031754,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 493
493
494<script> 495 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 496</script>
vendor: 1 bytes, line 496
496
497<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}
497).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: 60930031754,storefrontBaseUrl: "https://happyhydrate.is",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://happyhydrate.is/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2626191498","configuration":"{\"projectId\":\"y8lbbd4w00\"}","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"]}
497,"dataSharingState":"unrestricted"},{"id":"2584641674","configuration":"{\"storeID\":\"happyhydrate-1068\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"1a4d90df85706164d4aa645b3700640b","type":"APP","apiClientId":408972623873,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_phone","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1660158090","configuration":"{\"accountID\":\"happyhydrate-1068\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"4f82d0323b06a4642fbff9b42c9979eb","type":"APP","apiClientId":12388204545,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"472744074","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-7Q4SDLLGW9\\\",\\\"AW-11191271653\\\",\\\"GT-PZXWN79\\\"],\\\"target_country\\\":\\\"ZZ\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-7Q4SDLLGW9\\\",\\\"AW-11191271653\\\/vBuYCJWltL0bEOWBtdgp\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-7Q4SDLLGW9\\\",\\\"AW-11191271653\\\/Hv2pCKGltL0bEOWBtdgp\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-7Q4SDLLGW9\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-7Q4SDLLGW9\\\",\\\"AW-11191271653\\\/pvI9CJ6ltL0bEOWBtdgp\\\",\\\"MC-X6BDS21HV1\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-7Q4SDLLGW9\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-7Q4SDLLGW9\\\",\\\"AW-11191271653\\\/-o7gCJ-osr0bEOWBtdgp\\\",\\\"MC-X6BDS21HV1\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-7Q4SDLLGW9\\\",\\\"AW-11191271653\\\/JZsQCJultL0bEOWBtdgp\\\",\\\"MC-X6BDS21HV1\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-7Q4SDLLGW9\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-7Q4SDLLGW9\\\",\\\"AW-11191271653\\\/phWeCKSltL0bEOWBtdgp\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-7Q4SDLLGW9\\\",\\\"AW-11191271653\\\/gyqRCJiltL0bEOWBtdgp\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-7Q4SDLLGW9\\\"}],\\\"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":"250740874","configuration":"{\"subdomain\":\"happyhydrate-1068\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"42cd9b1f0fb7c1cae5cd21175cef6782","type":"APP","apiClientId":1615517,"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":"217874570","configuration":"{\"pixel_id\":\"893231098646527\",\"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":"86507658","configuration":"{\"accountID\":\"selleasy-metrics-track\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"50acfdcd7b118f50e52df83f64624d06","type":"APP","apiClientId":5519923,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]}
497,"dataSharingState":"unrestricted"},{"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":"Happy Hydrate IS","paymentSettings":{"currencyCode":"ISK"},"myshopifyDomain":"happyhydrate-1068.myshopify.com","countryCode":"IS","storefrontUrl":"https:\/\/happyhydrate.is"},"customer":null,"cart":null,"checkout":null,"productVariants":[{"price":{"amount":1995.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"50050860712074","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"},"sku":null,"title":"Strawberry Lemonade \/ 10 stikur","untranslatedTitle":"Strawberry Lemonade \/ 10 stikur"},{"price":{"amount":5985.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"50050860744842","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"},"sku":null,"title":"Strawberry Lemonade \/ 30 stikur","untranslatedTitle":"Strawberry Lemonade \/ 30 stikur"},{"price":{"amount":11970.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"50050860777610","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"},"sku":null,"title":"Strawberry Lemonade \/ 60 stikur (FRÃ SENDING)","untranslatedTitle":"Strawberry Lemonade \/ 60 stikur (FRÃ SENDING)"},{"price":{"amount":15290.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"50050860810378","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"},"sku":null,"title":"Strawberry Lemonade \/ 90 stikur (FRÃ SENDING)","untranslatedTitle":"Strawberry Lemonade \/ 90 stikur (FRÃ SENDING)"},{"price":{"amount":1995.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"44751436906634","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496"},"sku":"","title":"Pina Colada \/ 10 stikur","untranslatedTitle":"Pina Colada \/ 10 stikur"},{"price":{"amount":5985.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"44751436939402","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496"},"sku":"","title":"Pina Colada \/ 30 stikur","untranslatedTitle":"Pina Colada \/ 30 stikur"},{"price":{"amount":11970.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"44751436972170","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496"},"sku":"","title":"Pina Colada \/ 60 stikur (FRÃ SENDING)","untranslatedTitle":"Pina Colada \/ 60 stikur (FRÃ SENDING)"},{"price":{"amount":15290.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"44751437004938","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496"},"sku":"","title":"Pina Colada \/ 90 stikur (FRÃ SENDING)","untranslatedTitle":"Pina Colada \/ 90 stikur (FRÃ SENDING)"},{"price":{"amount":1995.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"44751437037706","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496"},"sku":"","title":"Mixed Berries \/ 10 stikur","untranslatedTitle":"Mixed Berries \/ 10 stikur"},{"price":{"amount":5985.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""}
497,"id":"44751437070474","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496"},"sku":"","title":"Mixed Berries \/ 30 stikur","untranslatedTitle":"Mixed Berries \/ 30 stikur"},{"price":{"amount":11970.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"44751437103242","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496"},"sku":"","title":"Mixed Berries \/ 60 stikur (FRÃ SENDING)","untranslatedTitle":"Mixed Berries \/ 60 stikur (FRÃ SENDING)"},{"price":{"amount":15290.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"44751437136010","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496"},"sku":"","title":"Mixed Berries \/ 90 stikur (FRÃ SENDING)","untranslatedTitle":"Mixed Berries \/ 90 stikur (FRÃ SENDING)"},{"price":{"amount":1995.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"44751437168778","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496"},"sku":"","title":"Lemon\/Lime \/ 10 stikur","untranslatedTitle":"Lemon\/Lime \/ 10 stikur"},{"price":{"amount":5985.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"44751437201546","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496"},"sku":"","title":"Lemon\/Lime \/ 30 stikur","untranslatedTitle":"Lemon\/Lime \/ 30 stikur"},{"price":{"amount":11970.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"44751437234314","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496"},"sku":"","title":"Lemon\/Lime \/ 60 stikur (FRÃ SENDING)","untranslatedTitle":"Lemon\/Lime \/ 60 stikur (FRÃ SENDING)"},{"price":{"amount":15290.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"44751437267082","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496"},"sku":"","title":"Lemon\/Lime \/ 90 stikur (FRÃ SENDING)","untranslatedTitle":"Lemon\/Lime \/ 90 stikur (FRÃ SENDING)"},{"price":{"amount":1995.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"45773488324746","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496"},"sku":"","title":"Peach Crush \/ 10 stikur","untranslatedTitle":"Peach Crush \/ 10 stikur"},{"price":{"amount":5985.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"45773488357514","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496"},"sku":"","title":"Peach Crush \/ 30 stikur","untranslatedTitle":"Peach Crush \/ 30 stikur"},{"price":{"amount":11970.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"45773488390282","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496"},"sku":"","title":"Peach Crush \/ 60 stikur (FRÃ SENDING)","untranslatedTitle":"Peach Crush \/ 60 stikur (FRÃ SENDING)"},{"price":{"amount":15290.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"45773488423050","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496"},"sku":"","title":"Peach Crush \/ 90 stikur (FRÃ SENDING)","untranslatedTitle":"Peach Crush \/ 90 stikur (FRÃ SENDING)"},{"price":{"amount":1995.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""}
497,"id":"47230751473802","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496"},"sku":null,"title":"Peru \/ 10 stikur","untranslatedTitle":"Peru \/ 10 stikur"},{"price":{"amount":5985.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"47230751506570","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496"},"sku":null,"title":"Peru \/ 30 stikur","untranslatedTitle":"Peru \/ 30 stikur"},{"price":{"amount":11970.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"47230751539338","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496"},"sku":null,"title":"Peru \/ 60 stikur (FRÃ SENDING)","untranslatedTitle":"Peru \/ 60 stikur (FRÃ SENDING)"},{"price":{"amount":15290.0,"currencyCode":"ISK"},"product":{"title":"Hydration Xpress","vendor":"happyhydrate","id":"8033136181386","untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","type":""},"id":"47230751572106","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496"},"sku":null,"title":"Peru \/ 90 stikur (FRÃ SENDING)","untranslatedTitle":"Peru \/ 90 stikur (FRÃ SENDING)"}],"products":[{"id":"8033136181386","handle":"hydration-xpress","isCollective":null,"title":"Hydration Xpress","type":null,"untranslatedTitle":"Hydration Xpress","url":"\/products\/hydration-xpress","vendor":"happyhydrate","remoteShopId":null,"variants":[{"id":"50050860712074","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"},"price":{"amount":1995.0,"currencyCode":"ISK"},"sku":null,"title":"Strawberry Lemonade \/ 10 stikur","untranslatedTitle":"Strawberry Lemonade \/ 10 stikur"},{"id":"50050860744842","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"},"price":{"amount":5985.0,"currencyCode":"ISK"},"sku":null,"title":"Strawberry Lemonade \/ 30 stikur","untranslatedTitle":"Strawberry Lemonade \/ 30 stikur"},{"id":"50050860777610","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"},"price":{"amount":11970.0,"currencyCode":"ISK"},"sku":null,"title":"Strawberry Lemonade \/ 60 stikur (FRÃ SENDING)","untranslatedTitle":"Strawberry Lemonade \/ 60 stikur (FRÃ SENDING)"},{"id":"50050860810378","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"},"price":{"amount":15290.0,"currencyCode":"ISK"},"sku":null,"title":"Strawberry Lemonade \/ 90 stikur (FRÃ SENDING)","untranslatedTitle":"Strawberry Lemonade \/ 90 stikur (FRÃ SENDING)"},{"id":"44751436906634","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496"},"price":{"amount":1995.0,"currencyCode":"ISK"},"sku":"","title":"Pina Colada \/ 10 stikur","untranslatedTitle":"Pina Colada \/ 10 stikur"},{"id":"44751436939402","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496"},"price":{"amount":5985.0,"currencyCode":"ISK"},"sku":"","title":"Pina Colada \/ 30 stikur","untranslatedTitle":"Pina Colada \/ 30 stikur"},{"id":"44751436972170","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496"},"price":{"amount":11970.0,"currencyCode":"ISK"},"sku":"","title":"Pina Colada \/ 60 stikur (FRÃ SENDING)","untranslatedTitle":"Pina Colada \/ 60 stikur (FRÃ SENDING)"},{"id":"44751437004938","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496"},"price":{"amount":15290.0,"currencyCode":"ISK"},"sku":"","title":"Pina Colada \/ 90 stikur (FRÃ SENDING)","untranslatedTitle":"Pina Colada \/ 90 stikur (FRÃ SENDING)"},{"id":"44751437037706","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496"},"price":{"amount":1995.0,"currencyCode":"ISK"},"sku":"","title":"Mixed Berries \/ 10 stikur","untranslatedTitle":"Mixed Berries \/ 10 stikur"}
497,{"id":"44751437070474","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496"},"price":{"amount":5985.0,"currencyCode":"ISK"},"sku":"","title":"Mixed Berries \/ 30 stikur","untranslatedTitle":"Mixed Berries \/ 30 stikur"},{"id":"44751437103242","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496"},"price":{"amount":11970.0,"currencyCode":"ISK"},"sku":"","title":"Mixed Berries \/ 60 stikur (FRà SENDING)","untranslatedTitle":"Mixed Berries \/ 60 stikur (FRà SENDING)"},{"id":"44751437136010","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496"},"price":{"amount":15290.0,"currencyCode":"ISK"},"sku":"","title":"Mixed Berries \/ 90 stikur (FRà SENDING)","untranslatedTitle":"Mixed Berries \/ 90 stikur (FRà SENDING)"},{"id":"44751437168778","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496"},"price":{"amount":1995.0,"currencyCode":"ISK"},"sku":"","title":"Lemon\/Lime \/ 10 stikur","untranslatedTitle":"Lemon\/Lime \/ 10 stikur"},{"id":"44751437201546","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496"},"price":{"amount":5985.0,"currencyCode":"ISK"},"sku":"","title":"Lemon\/Lime \/ 30 stikur","untranslatedTitle":"Lemon\/Lime \/ 30 stikur"},{"id":"44751437234314","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496"},"price":{"amount":11970.0,"currencyCode":"ISK"},"sku":"","title":"Lemon\/Lime \/ 60 stikur (FRà SENDING)","untranslatedTitle":"Lemon\/Lime \/ 60 stikur (FRà SENDING)"},{"id":"44751437267082","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496"},"price":{"amount":15290.0,"currencyCode":"ISK"},"sku":"","title":"Lemon\/Lime \/ 90 stikur (FRà SENDING)","untranslatedTitle":"Lemon\/Lime \/ 90 stikur (FRà SENDING)"},{"id":"45773488324746","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496"},"price":{"amount":1995.0,"currencyCode":"ISK"},"sku":"","title":"Peach Crush \/ 10 stikur","untranslatedTitle":"Peach Crush \/ 10 stikur"},{"id":"45773488357514","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496"},"price":{"amount":5985.0,"currencyCode":"ISK"},"sku":"","title":"Peach Crush \/ 30 stikur","untranslatedTitle":"Peach Crush \/ 30 stikur"},{"id":"45773488390282","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496"},"price":{"amount":11970.0,"currencyCode":"ISK"},"sku":"","title":"Peach Crush \/ 60 stikur (FRà SENDING)","untranslatedTitle":"Peach Crush \/ 60 stikur (FRà SENDING)"},{"id":"45773488423050","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496"},"price":{"amount":15290.0,"currencyCode":"ISK"},"sku":"","title":"Peach Crush \/ 90 stikur (FRà SENDING)","untranslatedTitle":"Peach Crush \/ 90 stikur (FRà SENDING)"},{"id":"47230751473802","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496"},"price":{"amount":1995.0,"currencyCode":"ISK"},"sku":null,"title":"Peru \/ 10 stikur","untranslatedTitle":"Peru \/ 10 stikur"},{"id":"47230751506570","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496"},"price":{"amount":5985.0,"currencyCode":"ISK"},"sku":null,"title":"Peru \/ 30 stikur","untranslatedTitle":"Peru \/ 30 stikur"},{"id":"47230751539338","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496"},"price":{"amount":11970.0,"currencyCode":"ISK"},"sku":null,"title":"Peru \/ 60 stikur (FRà SENDING)","untranslatedTitle":"Peru \/ 60 stikur (FRà SENDING)"},{"id":"47230751572106","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496"},"price":{"amount":15290.0,"currencyCode":"ISK"},"sku":null,"title":"Peru \/ 90 stikur (FRà SENDING)","untranslatedTitle":"Peru \/ 90 stikur (FRà SENDING)"}]},{"id":"7907478503562","handle":"hydration-e","isCollective":null,"title":"Hydration Xpress (grunnvara)","type":null,"untranslatedTitle":"Hydration Xpress (grunnvara)","url":"\/products\/hydration-e","vendor":"happyhydrate","remoteShopId":null,"variants":[{"id":"44310716579978","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/Vorumyndir_Kronan_d38815b2-9ae3-4e0f-b97b-3ab37d230d4e.png?v=1770144338"},"price":{"amount":1995.0,"currencyCode":"ISK"},"sku":"HAP-1001","title":"Lemon\/Lime","untranslatedTitle":"Lemon\/Lime"}]},{"id":"8569638617226","handle":"creatine-xpress-bundle","isCollective":null,"title":"KreatÃn Bundle","type":null,"untranslatedTitle":"KreatÃn Bundle","url":"\/products\/creatine-xpress-bundle","vendor":"Happy Hydrate IS","remoteShopId":null,"variants":[{"id":"46311578140810","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/creating_lemonlime_1_1_b6a8a999-694c-4855-9c9f-4786764acf7f.png?v=1747412308"},"price":{"amount":2890.0,"currencyCode":"ISK"},"sku":"","title":"Lemon Lime \/ 20 stikur","untranslatedTitle":"Lemon Lime \/ 20 stikur"}]},{"id":"8685285671050","handle":"hydration-kids-1","isCollective":null,"title":"Hydration KIDS Bundle","type":null,"untranslatedTitle":"Hydration KIDS Bundle","url":"\/products\/hydration-kids-1","vendor":"Happy Hydrate IS","remoteShopId":null,"variants":[{"id":"47133961388170","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/Comp_-_Kids_-_kiwiapple_2.1.png?v=1758891053"},"price":{"amount":1595.0,"currencyCode":"ISK"},"sku":null,"title":"Green Apple \u0026 Kiwi \/ 8 stikur","untranslatedTitle":"Green Apple \u0026 Kiwi \/ 8 stikur"}]},{"id":"8569636520074","handle":"creatine-xpress","isCollective":null,"title":"KreatÃn","type":null,"untranslatedTitle":"KreatÃn","url":"\/products\/creatine-xpress","vendor":"Happy Hydrate IS","remoteShopId":null,"variants":[{"id":"46311574896778","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/7_0ce026d0-cfc0-4f98-8695-68ee02fdf875.png?v=1770218931"},"price":{"amount":2890.0,"currencyCode":"ISK"},"sku":"HAP-2002","title":"Lemon Lime","untranslatedTitle":"Lemon Lime"}]},{"id":"8636619554954","handle":"energy-xpress","isCollective":null,"title":"Energy Xpress","type":null,"untranslatedTitle":"Energy Xpress","url":"\/products\/energy-xpress","vendor":"Happy Hydrate IS","remoteShopId":null,"variants":[{"id":"46556624093322","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/5_5b6d012c-dd20-4ca5-8049-043c7722a016.png?v=1770225383"},"price":{"amount":1995.0,"currencyCode":"ISK"},"sku":"HAP-3001","title":"Epli \u0026 Kiwi","untranslatedTitle":"Epli \u0026 Kiwi"}]},{"id":"8685285179530","handle":"hydration-kids-halli","isCollective":null,"title":"Hydration KIDS","type":null,"untranslatedTitle":"Hydration KIDS","url":"\/products\/hydration-kids-halli","vendor":"Happy Hydrate IS","remoteShopId":null,"variants":[{"id":"47133950771338","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/8.png?v=1770224985"},"price":{"amount":1595.0,"currencyCode":"ISK"},"sku":"HAP-4001","title":"Green Apple \u0026 Kiwi","untranslatedTitle":"Green Apple \u0026 Kiwi"}]},{"id":"8636625027210","handle":"energy-xpress-bundle","isCollective":null,"title":"Energy Xpress Bundle","type":null,"untranslatedTitle":"Energy Xpress Bundle","url":"\/products\/energy-xpress-bundle","vendor":"Happy Hydrate IS","remoteShopId":null,"variants":[{"id":"46556640444554","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/energy-xpress-cropped-final.png?v=1755698272"},"price":{"amount":1995.0,"currencyCode":"ISK"},"sku":null,"title":"10 stikur","untranslatedTitle":"10 stikur"}]},{"id":"8700106866826","handle":"fritt-stoff","isCollective":null,"title":"FrÃtt Stöff Bundle","type":null,"untranslatedTitle":"FrÃtt Stöff Bundle","url":"\/products\/fritt-stoff","vendor":"Happy Hydrate IS","remoteShopId":null,"variants":[{"id":"47189689401482","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/Brusiogwhisker-2.png?v=1760711356"},"price":{"amount":4970.0,"currencyCode":"ISK"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8236183552138","handle":"happy-ken","isCollective":null,"title":"Happy Bandana","type":null,"untranslatedTitle":"Happy Bandana","url":"\/products\/happy-ken","vendor":"happyhydrate","remoteShopId":null,"variants":[{"id":"45252494262410","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/1_ec53c4cd-d3d0-4547-82fa-d0740b564cc6.png?v=1754419381"},"price":{"amount":3490.0,"currencyCode":"ISK"},"sku":"HBNDGB","title":"Grænn Bleikur","untranslatedTitle":"Grænn Bleikur"}]},{"id":"8236184240266","handle":"happy-ring","isCollective":null,"title":"Happy Buxur","type":null,"untranslatedTitle":"Happy Buxur","url":"\/products\/happy-ring","vendor":"happyhydrate","remoteShopId":null,"variants":[{"id":"46569397518474","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/10.png?v=1762261640"},"price":{"amount":12990.0,"currencyCode":"ISK"},"sku":"HBSXS","title":"Svartur \/ XS","untranslatedTitle":"Svartur \/ XS"}]},{"id":"7727088271498","handle":"happy-hydrate-brusi","isCollective":null,"title":"Happy Hydrate Brúsi","type":null,"untranslatedTitle":"Happy Hydrate Brúsi","url":"\/products\/happy-hydrate-brusi","vendor":"happyhydrate","remoteShopId":null,"variants":[{"id":"44095624052874","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/IMG_1323.jpg?v=1702330254"},"price":{"amount":1995.0,"currencyCode":"ISK"},"sku":"HAP-9003","title":"Grænn","untranslatedTitle":"Grænn"}]},{"id":"8470537994378","handle":"happy-hydrate-glerbrusi","isCollective":null,"title":"Happy Hydrate Glerbrúsi","type":null,"untranslatedTitle":"Happy Hydrate Glerbrúsi","url":"\/products\/happy-hydrate-glerbrusi","vendor":"happyhydrate","remoteShopId":null,"variants":[{"id":"4602348
4971819274","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/Add_a_heading-3.png?v=1762188102"},"price":{"amount":2995.0,"currencyCode":"ISK"},"sku":"HAP-9005","title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"8236185092234","handle":"happy-peysa","isCollective":null,"title":"Happy Peysa","type":null,"untranslatedTitle":"Happy Peysa","url":"\/products\/happy-peysa","vendor":"happyhydrate","remoteShopId":null,"variants":[{"id":"46569346957450","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/1_e57cf309-6a93-4163-ba25-f174798d6ec4.png?v=1760714294"},"price":{"amount":12990.0,"currencyCode":"ISK"},"sku":"HPBXXS","title":"Bleik \/ XXS","untranslatedTitle":"Bleik \/ XXS"}]},{"id":"8472789024906","handle":"happy-whisker-1","isCollective":null,"title":"Happy Whisker (10% OFF)","type":"upsell","untranslatedTitle":"Happy Whisker (10% OFF)","url":"\/products\/happy-whisker-1","vendor":"happyhydrate","remoteShopId":null,"variants":[{"id":"46027651055754","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/Untitled_design_-_2024-11-21T202016.788.png?v=1732220567"},"price":{"amount":1775.0,"currencyCode":"ISK"},"sku":"HHWP1","title":"Bleikur","untranslatedTitle":"Bleikur"}]},{"id":"8715739889802","handle":"hydration-kids-green-apple-kiwi-bundle","isCollective":null,"title":"Hydration KIDS Green Apple \u0026 Kiwi Bundle","type":null,"untranslatedTitle":"Hydration KIDS Green Apple \u0026 Kiwi Bundle","url":"\/products\/hydration-kids-green-apple-kiwi-bundle","vendor":"Happy Hydrate IS","remoteShopId":null,"variants":[{"id":"47249238917258","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/Box_Epla_Kivi_Kids.png?v=1758885406"},"price":{"amount":1595.0,"currencyCode":"ISK"},"sku":null,"title":"10 stikur","untranslatedTitle":"10 stikur"}]},{"id":"8715730878602","handle":"hydration-kids-mixed-berries-bundle","isCollective":null,"title":"Hydration KIDS Mixed Berries Bundle","type":null,"untranslatedTitle":"Hydration KIDS Mixed Berries Bundle","url":"\/products\/hydration-kids-mixed-berries-bundle","vendor":"Happy Hydrate IS","remoteShopId":null,"variants":[{"id":"47249167646858","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/Box_Mixed_Berries_Kids.png?v=1758885598"},"price":{"amount":1595.0,"currencyCode":"ISK"},"sku":null,"title":"10 stikur","untranslatedTitle":"10 stikur"}]},{"id":"8715729961098","handle":"creatine-xpress-lemon-lime-bundle","isCollective":null,"title":"KreatÃn Lemon Lime Bundle","type":null,"untranslatedTitle":"KreatÃn Lemon Lime Bundle","url":"\/products\/creatine-xpress-lemon-lime-bundle","vendor":"Happy Hydrate IS","remoteShopId":null,"variants":[{"id":"47249165811850","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/Box_Lemon_Lime_Creatine.png?v=1758881177"},"price":{"amount":2890.0,"currencyCode":"ISK"},"sku":null,"title":"10 stikur","untranslatedTitle":"10 stikur"}]},{"id":"8715718197386","handle":"creatine-xpress-mixed-berries","isCollective":null,"title":"KreatÃn Mixed Berries Bundle","type":null,"untranslatedTitle":"KreatÃn Mixed Berries Bundle","url":"\/products\/creatine-xpress-mixed-berries","vendor":"Happy Hydrate IS","remoteShopId":null,"variants":[{"id":"47249122754698","image":{"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/Box_Mixed_Berries_Creatine.png?v=1758881439"},"price":{"amount":2890.0,"currencyCode":"ISK"},"sku":null,"title":"10 stikur","untranslatedTitle":"10 stikur"}]}],"purchasingCompany":null},},"https://happyhydrate.is/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"158213013642","themePublished":"true","eventMetadataId":"fac14267-9a01-47a6-ba3d-1e2b39583102","pageType":"product","resourceId":"8033136181386","shopId":"60930031754","storefrontBaseUrl":"https:\/\/happyhydrate.is","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\":5985.0,\"currencyCode\":\"ISK\"},\"product\":{\"title\":\"Hydration Xpress\",\"vendor\":\"happyhydrate\",\"id\":\"8033136181386\",\"untranslatedTitle\":\"Hydration Xpress\",\"url\":\"\/products\/hydration-xpress\",\"type\":\"\"},\"id\":\"50050860744842\",\"image\":{\"src\":\"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496\"},\"sku\":null,\"title\":\"Strawberry Lemonade \/ 30 stikur\",\"untranslatedTitle\":\"Strawberry Lemonade \/ 30 stikur\"}}]]"});})();</script>
497<script> 498 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 499 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 500 window.ShopifyAnalytics.meta.currency = 'ISK'; 501 var meta = {"product":{"id":8033136181386,"gid":"gid:\/\/shopify\/Product\/8033136181386","vendor":"happyhydrate","type":"","handle":"hydration-xpress","variants":[{"id":50050860712074,"price":199500,"name":"Hydration Xpress - Strawberry Lemonade \/ 10 stikur","public_title":"Strawberry Lemonade \/ 10 stikur","sku":null},{"id":50050860744842,"price":598500,"name":"Hydration Xpress - Strawberry Lemonade \/ 30 stikur","public_title":"Strawberry Lemonade \/ 30 stikur","sku":null},{"id":50050860777610,"price":1197000,"name":"Hydration Xpress - Strawberry Lemonade \/ 60 stikur (FRÃ SENDING)","public_title":"Strawberry Lemonade \/ 60 stikur (FRÃ SENDING)","sku":null},{"id":50050860810378,"price":1529000,"name":"Hydration Xpress - Strawberry Lemonade \/ 90 stikur (FRÃ SENDING)","public_title":"Strawberry Lemonade \/ 90 stikur (FRÃ SENDING)","sku":null},{"id":44751436906634,"price":199500,"name":"Hydration Xpress - Pina Colada \/ 10 stikur","public_title":"Pina Colada \/ 10 stikur","sku":""},{"id":44751436939402,"price":598500,"name":"Hydration Xpress - Pina Colada \/ 30 stikur","public_title":"Pina Colada \/ 30 stikur","sku":""},{"id":44751436972170,"price":1197000,"name":"Hydration Xpress - Pina Colada \/ 60 stikur (FRÃ SENDING)","public_title":"Pina Colada \/ 60 stikur (FRÃ SENDING)","sku":""},{"id":44751437004938,"price":1529000,"name":"Hydration Xpress - Pina Colada \/ 90 stikur (FRÃ SENDING)","public_title":"Pina Colada \/ 90 stikur (FRÃ SENDING)","sku":""},{"id":44751437037706,"price":199500,"name":"Hydration Xpress - Mixed Berries \/ 10 stikur","public_title":"Mixed Berries \/ 10 stikur","sku":""},{"id":44751437070474,"price":598500,"name":"Hydration Xpress - Mixed Berries \/ 30 stikur","public_title":"Mixed Berries \/ 30 stikur","sku":""},{"id":44751437103242,"price":1197000,"name":"Hydration Xpress - Mixed Berries \/ 60 stikur (FRÃ SENDING)","public_title":"Mixed Berries \/ 60 stikur (FRÃ SENDING)","sku":""},{"id":44751437136010,"price":1529000,"name":"Hydration Xpress - Mixed Berries \/ 90 stikur (FRÃ SENDING)","public_title":"Mixed Berries \/ 90 stikur (FRÃ SENDING)","sku":""},{"id":44751437168778,"price":199500,"name":"Hydration Xpress - Lemon\/Lime \/ 10 stikur","public_title":"Lemon\/Lime \/ 10 stikur","sku":""},{"id":44751437201546,"price":598500,"name":"Hydration Xpress - Lemon\/Lime \/ 30 stikur","public_title":"Lemon\/Lime \/ 30 stikur","sku":""},{"id":44751437234314,"price":1197000,"name":"Hydration Xpress - Lemon\/Lime \/ 60 stikur (FRÃ SENDING)","public_title":"Lemon\/Lime \/ 60 stikur (FRÃ SENDING)","sku":""},{"id":44751437267082,"price":1529000,"name":"Hydration Xpress - Lemon\/Lime \/ 90 stikur (FRÃ SENDING)","public_title":"Lemon\/Lime \/ 90 stikur (FRÃ SENDING)","sku":""},{"id":45773488324746,"price":199500,"name":"Hydration Xpress - Peach Crush \/ 10 stikur","public_title":"Peach Crush \/ 10 stikur","sku":""},{"id":45773488357514,"price":598500,"name":"Hydration Xpress - Peach Crush \/ 30 stikur","public_title":"Peach Crush \/ 30 stikur","sku":""},{"id":45773488390282,"price":1197000,"name":"Hydration Xpress - Peach Crush \/ 60 stikur (FRÃ SENDING)","public_title":"Peach Crush \/ 60 stikur (FRÃ SENDING)","sku":""},{"id":45773488423050,"price":1529000,"name":"Hydration Xpress - Peach Crush \/ 90 stikur (FRÃ SENDING)","public_title":"Peach Crush \/ 90 stikur (FRÃ SENDING)","sku":""},{"id":47230751473802,"price":199500,"name":"Hydration Xpress - Peru \/ 10 stikur","public_title":"Peru \/ 10 stikur","sku":null},{"id":47230751506570,"price":598500,"name":"Hydration Xpress - Peru \/ 30 stikur","public_title":"Peru \/ 30 stikur","sku":null},{"id":47230751539338,"price":1197000,"name":"Hydration Xpress - Peru \/ 60 stikur (FRÃ SENDING)","public_title":"Peru \/ 60 stikur (FRÃ SENDING)","sku":null},{"id":47230751572106,"price":1529000,"name":"Hydration Xpress - Peru \/ 90 stikur (FRÃ SENDING)","public_title":"Peru \/ 90 stikur (FRÃ SENDING)","sku":null}],"remote":false},"page":{"pageType":"product","resourceType":"product","resourceId":8033136181386,"requestId":"1a47e688-6e82-4f3a-8711-34e2413eed44-1791095772"}}; 502 for (var attr in meta) { 503 window.ShopifyAnalytics.meta[attr] = meta[attr]; 504 } 505</script>
vendor: 1 bytes, line 505
505
506<script class="analytics"> 507 (function () { 508 var customDocumentWrite = function(content) { 509 var jquery = null; 510 511 if (window.jQuery) { 512 jquery = window.jQuery; 513 } else if (window.Checkout && window.Checkout.$) { 514 jquery = window.Checkout.$; 515 } 516 517 if (jquery) { 518 jquery('body').append(content); 519 } 520 }; 521 522 var hasLoggedConversion = function(token) { 523 if (token) { 524 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 525 } 526 return false; 527 } 528 529 var setCookieIfConversion = function(token) { 530 if (token) { 531 var twoMonthsFromNow = new Date(Date.now()); 532 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 533 534 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 535 } 536 } 537 538 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 539 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 540 if (trekkie.integrations) { 541 return; 542 } 543 trekkie.methods = [ 544 'identify', 545 'page', 546 'ready', 547 'track', 548 'trackForm', 549 'trackLink' 550 ]; 551 trekkie.factory = function(method) { 552 return function() { 553 var args = Array.prototype.slice.call(arguments); 554 args.unshift(method); 555 trekkie.push(args); 556 if (method == 'track' || method == 'page') { 557 var pageUrl; 558 try { 559 pageUrl = window.location.href; 560 } catch (e) {} 561 var pageReferrer; 562 try { 563 pageReferrer = document.referrer; 564 } catch (e) {} 565 try { 566 if (window.__TREKKIE_SHIM_QUEUE == null) { 567 window.__TREKKIE_SHIM_QUEUE = []; 568 } 569 window.__TREKKIE_SHIM_QUEUE.push({ 570 from: 'trekkie-stub', 571 method: method, 572 args: args.slice(1), 573 pageContext: { 574 url: pageUrl, 575 referrer: pageReferrer 576 } 577 }); 578 } catch (e) { 579 // no-op 580 } 581 } 582 return trekkie; 583 }; 584 }; 585 for (var i = 0; i < trekkie.methods.length; i++) { 586 var key = trekkie.methods[i]; 587 trekkie[key] = trekkie.factory(key); 588 } 589 trekkie.load = function(config) { 590 trekkie.config = config || {}; 591 trekkie.config.initialDocumentCookie = document.cookie; 592 var first = document.getElementsByTagName('script')[0]; 593var script = document.createElement('script'); 594script.type = 'text/javascript'; 595script.onerror = function(e) { 596 var scriptFallback = document.createElement('script'); 597 scriptFallback.type = 'text/javascript'; 598 scriptFallback.onerror = function(error) { 599 var Monorail = { 600 produce: function produce(monorailDomain, schemaId, payload) { 601 var currentMs = new Date().getTime(); 602 var event = { 603 schema_id: schemaId, 604 payload: payload, 605 metadata: { 606 event_created_at_ms: currentMs, 607 event_sent_at_ms: currentMs 608 } 609 }; 610 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 611 }, 612 sendRequest: function sendRequest(endpointUrl, payload) { 613 // Try the sendBeacon API 614 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 615 var blobData = new window.Blob([payload], { 616 type: 'text/plain' 617 }); 618 619 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 620 return true; 621 } // sendBeacon was not successful 622 623 } // XHR beacon 624 625 var xhr = new XMLHttpRequest(); 626 627 try { 628 xhr.open('POST', endpointUrl); 629 xhr.setRequestHeader('Content-Type', 'text/plain'); 630 xhr.send(payload); 631 } catch (e) { 632 console.log(e); 633 } 634 635 return false; 636 }, 637 isIos12: function isIos12() { 638 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 639 } 640 }; 641 Monorail.produce('monorail-edge.shopifysvc.com', 642 'trekkie_storefront_load_errors/1.1', 643 {shop_id: 60930031754, 644 theme_id: 158213013642, 645 app_name: "storefront", 646 context_url: window.location.href, 647 source_url: "//happyhydrate.is/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 648 649 }; 650 scriptFallback.async = true; 651 scriptFallback.src = '//happyhydrate.is/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 652 first.parentNode.insertBefore(scriptFallback, first); 653}; 654script.async = true; 655script.src = '//happyhydrate.is/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 656first.parentNode.insertBefore(script, first); 657 658 }; 659 trekkie.load( 660 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":60930031754,"isMerchantRequest":null,"themeId":158213013642,"themeCityHash":"17119591427388462464","contentLanguage":"is","currency":"ISK","eventMetadataId":"fac14267-9a01-47a6-ba3d-1e2b39583102"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 661 ); 662 663 var loaded = false;
664 trekkie.ready(function() { 665 if (loaded) return; 666 loaded = true; 667 668 window.ShopifyAnalytics.lib = window.trekkie; 669 670 var originalDocumentWrite = document.write; 671 document.write = customDocumentWrite; 672 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 673 document.write = originalDocumentWrite; 674 675 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 676 var token = match? match[1]: undefined; 677 if (!hasLoggedConversion(token)) { 678 setCookieIfConversion(token); 679 window.ShopifyAnalytics.lib.track("Viewed Product",{"currency":"ISK","variantId":50050860744842,"productId":8033136181386,"productGid":"gid:\/\/shopify\/Product\/8033136181386","name":"Hydration Xpress - Strawberry Lemonade \/ 30 stikur","price":"5985","sku":null,"brand":"happyhydrate","variant":"Strawberry Lemonade \/ 30 stikur","category":"","nonInteraction":true,"remote":false,"available":true},undefined,undefined,{"shopifyEmitted":true}); 680 } 681 }); 682 683 window.ShopifyAnalytics.lib.page(null,{"pageType":"product","resourceType":"product","resourceId":8033136181386,"requestId":"1a47e688-6e82-4f3a-8711-34e2413eed44-1791095772","shopifyEmitted":true}); 684 685 var eventsListenerScript = document.createElement('script'); 686 eventsListenerScript.async = true; 687 eventsListenerScript.src = "//happyhydrate.is/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 688 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 689})();</script>
vendor: 1 bytes, line 689
689
690<script 691 defer 692 src="https://happyhydrate.is/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 693 data-application="storefront-renderer" 694 data-shop-id="60930031754" 695 data-render-region="gcp-us-central1" 696 data-page-type="product" 697 data-theme-instance-id="158213013642" 698 data-theme-name="MalterTech" 699 data-theme-version="1.0" 700 data-monorail-region="shop_domain" 701 data-resource-timing-sampling-rate="10" 702 data-shs="true" 703 data-shs-beacon="true" 704 data-shs-export-with-fetch="true" 705 data-shs-logs-sample-rate="1" 706 data-shs-beacon-endpoint="https://happyhydrate.is/api/collect" 707></script>
707 708<meta name="shopify-y" content="7141c8a1-d905-4878-b12f-232f1b6d4dc5" data-expiration="1822653372000"><meta name="shopify-s" content="60a8f491-d013-47fe-b3a6-d4b7dee471b8" data-expiration="1791097572000"><meta name="new-cookie-storage-activated" content="t"> 709</head> 710 711<body> 712 713 714 715<!-- Header --> 716<div id="shopify-section-theme-announcement" class="shopify-section"><style> 717 #announcement { 718 color: #000000; 719 text-align: center; 720 padding: 9px 5px; 721 font-size: 16px; 722 font-weight: 400; 723 display: flex; 724 justify-content: center; 725 align-items: center; 726 background-color: #def7c8; 727 font-family: "DM Sans", sans-serif; 728 } 729 730 #announcement span { 731 margin-left: 4px; 732 font-weight: 600; 733 } 734 735 @media (max-width: 1024px) { 736 #announcement { 737 font-size: 14px; 738 } 739 } 740 741</style> 742 743 744 <div id="announcement">Verslaðu yfir 11.900 kr og þú færð - 745 <span>FRÃA SENDINGU</span> 746 </div> 747 748 749</div> 750<div id="shopify-section-theme-header" class="shopify-section"> 751 752 753 754 755 756 757 758<style> 759 #headerPanel .vmedia.is-render > img { padding: 12%; box-sizing: border-box; object-fit: contain; } 760 #headerPanel .vbadge-soldout{ z-index:3; position:absolute; top:12px; left:12px; padding:6px 10px; border-radius:4px; font-size:12px; background-color:#FDE2E2; color:#B02D28; font-family:"DM Sans", system-ui, sans-serif; font-weight:600; width:max-content; } 761 #headerPanel .sliderNav--simple{ background:transparent; padding:4px 0 24px; margin:0; } 762 #headerPanel .sliderNav--simple .sliderNavLink{ font-size:22px; padding:18px 0; margin:0; border-bottom:1px solid #EAEAEA; } 763 #headerPanel .sliderNav--simple .sliderNavDropdown{ padding:18px 0; width:100%; border-bottom:1px solid #EAEAEA; } 764 #headerPanel .sliderNav--simple .sliderNavDropdownToggle{ width:100%; font-size:22px; font-weight:600; font-family:"Inter", sans-serif; color:#1F1F1F; background:none; border:0; padding:0; cursor:pointer; -webkit-appearance:none; appearance:none; } 765 #headerPanel .sliderNav--simple .sliderNavDropdownLinksWrapContent{ padding:16px 0 4px 16px; row-gap:14px; } 766 #headerPanel .sliderNav--simple .sliderNavDropdownLinksWrapContentLink{ font-size:17px; font-weight:500; color:#1F1F1F; } 767</style><header id="header" 768 > 769 <a id="headerLogo" href="/" title="homepage"> 770 <svg width="150" height="76" viewBox="0 0 150 76" fill="none" xmlns="http://www.w3.org/2000/svg"> 771 <path d="M41.4184 8.22781C41.977 8.22781 42.5195 8.3663 43.0295 8.65142C43.5476 8.93655 43.9524 9.33572 44.2439 9.86523C44.5353 10.3947 44.6892 10.9405 44.6892 11.5189C44.6892 12.0973 44.5434 12.635 44.252 13.1564C43.9605 13.6777 43.5638 14.085 43.0457 14.3702C42.5276 14.6634 41.9851 14.8101 41.4184 14.8101C40.8517 14.8101 40.3093 14.6634 39.7912 14.3702C39.273 14.0769 38.8682 13.6777 38.5849 13.1564C38.2934 12.635 38.1477 12.0892 38.1477 11.5189C38.1477 10.9487 38.2934 10.3947 38.593 9.86523C38.8925 9.33572 39.2892 8.93655 39.8074 8.65142C40.3255 8.3663 40.8598 8.22781 41.4184 8.22781ZM41.4265 8.87138C40.9732 8.87138 40.5441 8.98542 40.1312 9.21352C39.7183 9.44162 39.3945 9.76747 39.1516 10.1911C38.9168 10.6147 38.7954 11.0627 38.7954 11.5271C38.7954 11.9914 38.9087 12.4313 39.1435 12.8468C39.3783 13.2623 39.7021 13.5881 40.115 13.8244C40.5279 14.0606 40.9651 14.1747 41.4184 14.1747C41.8718 14.1747 42.309 14.0606 42.73 13.8244C43.1428 13.5881 43.4667 13.2623 43.7015 12.8468C43.9362 12.4313 44.0496 11.9914 44.0496 11.5271C44.0496 11.0627 43.9281 10.6228 43.6934 10.1911C43.4586 9.76747 43.1267 9.44162 42.7138 9.21352C42.3009 8.98542 41.8637 8.87138 41.4184 8.87138H41.4265ZM39.945 13.2786V9.78377H40.6493C41.3132 9.78377 41.6775 9.78377 41.7585 9.79191C41.9932 9.80821 42.1713 9.85708 42.3009 9.9304C42.4304 10.0037 42.5357 10.1178 42.6247 10.2644C42.7138 10.411 42.7542 10.5821 42.7542 10.7613C42.7542 10.9405 42.6733 11.2257 42.5114 11.4049C42.3495 11.5841 42.1147 11.6982 41.8232 11.7389C41.9285 11.7796 42.0094 11.8204 42.0661 11.8692C42.1228 11.9181 42.2037 12.0077 42.3009 12.1381C42.3252 12.1706 42.4142 12.3173 42.5599 12.5617L42.9728 13.2704H42.0985L41.807 12.7002C41.6127 12.3173 41.4508 12.081 41.3213 11.9833C41.1917 11.8855 41.0298 11.8366 40.8355 11.8366H40.6493V13.2704H39.945V13.2786ZM40.6493 11.2908H40.9327C41.3375 11.2908 41.5884 11.2745 41.6937 11.242C41.7908 11.2094 41.8718 11.1524 41.9285 11.079C41.9851 10.9976 42.0175 10.9
77108 42.0175 10.8102C42.0175 10.7125 41.9932 10.6228 41.9366 10.5495C41.8799 10.4762 41.7989 10.4192 41.7018 10.3866C41.5965 10.354 41.3456 10.3377 40.9489 10.3377H40.6655V11.2908H40.6493Z" fill="white"/> 772 <path d="M130.683 21.5308V19.0706H129.769V18.5574H132.165V19.0706H131.274V21.5308H130.675H130.683ZM132.529 21.5308V18.5574H133.46L133.995 20.6021L134.537 18.5574H135.468V21.5308H134.901V19.1602L134.262 21.5308H133.719L133.088 19.1602V21.5308H132.529Z" fill="white"/> 773 <path d="M4.28258 42.638C5.18122 42.638 5.95033 41.9944 6.12844 41.0983C6.5899 38.7115 7.32662 36.2187 8.33861 33.6281C9.86063 29.7586 11.9898 25.7017 14.6696 21.5634C16.8312 18.2397 19.0008 15.3885 20.7253 13.2948C21.0815 12.8631 21.7372 12.8631 22.0935 13.2948C23.8098 15.3966 25.9876 18.2397 28.1492 21.5634C30.837 25.7017 32.9662 29.7586 34.4801 33.6281C35.4921 36.2105 36.2288 38.7115 36.6903 41.0983C36.8603 41.9944 37.6294 42.638 38.5361 42.638C39.7019 42.638 40.6006 41.5708 40.382 40.4222C37.5889 25.7913 26.1252 12.0322 22.5063 7.99156C21.9154 7.33171 20.8953 7.33171 20.3124 7.99156C16.7016 12.0322 5.2298 25.7913 2.43673 40.4222C2.21814 41.579 3.11678 42.638 4.28258 42.638Z" fill="white"/> 774 <path d="M37.0061 49.4321C36.4313 52.7639 34.8203 55.8269 32.3267 58.2138C29.3717 61.0488 25.4695 62.6129 21.3892 62.6129C17.1632 62.6129 13.1881 60.951 10.2008 57.945C7.86916 55.5988 6.36333 52.658 5.80472 49.4646C5.65089 48.5604 4.88179 47.9005 3.97505 47.9005H3.94267C2.79306 47.9005 1.91061 48.9433 2.11301 50.0838C3.71599 59.3462 11.7471 66.3846 21.4054 66.3846C31.0638 66.3846 39.0949 59.338 40.6978 50.0756C40.8922 48.9351 40.0178 47.8924 38.8682 47.8924H38.8358C37.9372 47.8924 37.16 48.536 37.0061 49.4239V49.4321Z" fill="white"/> 775 <path d="M73.0164 18.924C72.9274 21.1072 72.8788 23.4534 72.8788 25.9624C72.8788 28.4715 72.9193 30.8177 73.0164 33.0009H68.4908V27.7302H61.3989V33.0009H56.8733C56.9785 30.4918 57.0271 28.1457 57.0271 25.9624C57.0271 23.7792 56.9785 21.4331 56.8733 18.924H61.3989V24.1947H68.4908V18.924H73.0164Z" fill="white"/> 776 <path d="M86.9008 29.7831C86.9008 30.223 86.9494 30.5325 87.0547 30.7118C87.1599 30.891 87.3623 31.0213 87.6699 31.1028L87.5971 32.9276C87.1842 32.9927 86.828 33.0416 86.5284 33.0661C86.2289 33.0905 85.8241 33.1068 85.3221 33.1068C84.213 33.1068 83.4844 32.8624 83.1282 32.3573C82.7719 31.8604 82.5857 31.225 82.5857 30.4511V29.9623C82.2133 31.0213 81.6709 31.8115 80.9585 32.3247C80.246 32.8461 79.3393 33.0986 78.2302 33.0986C77.121 33.0986 75.9795 32.838 75.3319 32.3247C74.6842 31.8115 74.3604 31.0376 74.3604 30.0193C74.3604 29.001 74.6356 28.5204 75.1861 28.0398C75.7366 27.5591 76.5948 27.2333 77.7525 27.0541C76.7729 26.3535 75.8014 25.7506 74.8218 25.2293C75.5909 24.2517 76.4734 23.5022 77.4611 22.989C78.4488 22.4758 79.6469 22.2233 81.0637 22.2233C82.4805 22.2233 84.5125 22.655 85.4679 23.5104C86.4232 24.3658 86.9008 25.6936 86.9008 27.4777V29.7831ZM79.736 25.9624C79.2341 26.1824 78.7888 26.5164 78.384 26.9482C79.1531 26.8585 80.1165 26.8097 81.2742 26.8097C82.4319 26.8097 82.0838 26.7526 82.2781 26.6386C82.4724 26.5245 82.5695 26.3779 82.5695 26.1905C82.5695 26.0032 82.4724 25.9054 82.2781 25.7914C82.0838 25.6773 81.8166 25.
7766284 81.4685 25.6284C80.8127 25.6284 80.2379 25.7425 79.736 25.9543V25.9624ZM81.3957 29.5224C82.5938 28.9766 82.5938 27.9257 82.5938 27.9257C82.2862 28.0805 81.9462 28.2027 81.5738 28.2842C81.2013 28.3656 80.748 28.4471 80.2218 28.5285L79.5255 28.6426C78.805 28.7892 78.4488 29.0336 78.4488 29.3758C78.4488 29.7179 78.7807 29.9379 79.4526 29.9379C80.1246 29.9379 80.8127 29.7831 81.3957 29.5224Z" fill="white"/> 777 <path d="M99.5061 22.9401C100.17 23.4208 100.696 24.0643 101.069 24.8871C101.441 25.7099 101.627 26.606 101.627 27.5917C101.627 28.5774 101.441 29.4735 101.069 30.337C100.696 31.2005 100.17 31.8848 99.498 32.4144C98.826 32.9357 98.0569 33.1964 97.1988 33.1964C96.3406 33.1964 95.3367 32.9846 94.6243 32.5691C93.9118 32.1537 93.3856 31.502 93.0375 30.6222C93.0375 31.3553 93.0618 32.5447 93.1103 34.1658C93.1589 35.7462 93.1832 36.8541 93.1832 37.4977H88.8276C88.9005 35.0945 88.941 32.5773 88.941 29.9542C88.941 27.331 88.9005 24.8138 88.8276 22.4106H92.5274L93.0861 24.8301C93.4423 23.9259 93.9847 23.266 94.7052 22.8424C95.4258 22.4269 96.2677 22.2151 97.2473 22.2151C98.2269 22.2151 98.8341 22.4514 99.498 22.932L99.5061 22.9401ZM96.6401 29.1477C97.0287 28.7811 97.2311 28.3004 97.2311 27.7058C97.2311 27.1111 97.053 26.5082 96.6887 26.0928C96.3325 25.6773 95.8386 25.4737 95.2234 25.4737C94.6081 25.4737 93.9847 25.6447 93.6204 25.9869C93.2642 26.329 93.078 26.8993 93.078 27.7058C93.078 28.5122 93.1913 28.5367 93.4261 28.8381C93.6609 29.1395 93.9361 29.3595 94.2519 29.498C94.5757 29.6364 94.8833 29.7016 95.1748 29.7016C95.7496 29.7016 96.2353 29.5142 96.632 29.1477H96.6401Z" fill="white"/> 778 <path d="M113.641 22.9401C114.305 23.4208 114.831 24.0643 115.204 24.8871C115.576 25.7099 115.762 26.606 115.762 27.5917C115.762 28.5774 115.576 29.4735 115.204 30.337C114.831 31.2005 114.305 31.8848 113.633 32.4144C112.961 32.9357 112.192 33.1964 111.334 33.1964C110.476 33.1964 109.472 32.9846 108.76 32.5691C108.047 32.1537 107.521 31.502 107.173 30.6222C107.173 31.3553 107.197 32.5447 107.246 34.1658C107.294 35.7462 107.318 36.8541 107.318 37.4977H102.963C103.036 35.0945 103.076 32.5773 103.076 29.9542C103.076 27.331 103.036 24.8138 102.963 22.4106H106.663L107.221 24.8301C107.578 23.9259 108.12 23.266 108.84 22.8424C109.561 22.4269 110.403 22.2151 111.383 22.2151C112.362 22.2151 112.969 22.4514 113.633 22.932L113.641 22.9401ZM110.783 29.1477C111.172 28.7811 111.374 28.3004 111.374 27.7058C111.374 27.1111 111.196 26.5082 110.832 26.0928C110.476 25.6773 109.982 25.4737 109.367 25.4737C108.751 25.4737 108.128 25.6447 107.764 25.9869C107.408 26.329 107.221 26.8993 107.221 27.7058C107.221 28.5122 107.335 28.5367 107.569 28.8381C107.804 29.1395 108.079 29.3595 108.395 29.498C108.719 29.6364 109.027 29.7016 109.318 29.7016C109.893 29.7016 110.379 29.5142 110.775 29.1477H110.783Z" fill="white"/> 779 <path d="M128.635 22.4188L128.19 23.543C126.967 26.8096 125.688 29.9704 124.36 33.0009C123.664 34.5487 122.668 35.7951 121.357 36.7319C120.045 37.6687 118.402 38.1168 116.426 38.0761C116.183 37.0007 115.981 36.1698 115.819 35.567C115.657 34.9641 115.447 34.3613 115.196 33.7585C115.9 33.9296 116.564 34.011 117.179 34.011C118.183 34.011 118.97
7797 33.7992 119.568 33.3675C119.106 31.9826 118.564 30.4999 117.932 28.9114C117.301 27.3229 116.394 25.1559 115.196 22.4188H119.762C119.916 23.0623 120.126 23.8118 120.393 24.6672C120.66 25.5225 120.936 26.3372 121.203 27.1274C121.276 27.3717 121.405 27.7465 121.575 28.2434C121.745 28.7403 121.883 29.1558 121.988 29.4979L122.49 27.9664C123.454 25.1641 124.02 23.3149 124.206 22.4188H128.635Z" fill="white"/> 780 <path d="M73.0164 37.7421C72.9274 39.9253 72.8788 42.2714 72.8788 44.7805C72.8788 47.2896 72.9193 49.6357 73.0164 51.819H68.4908V46.5483H61.3989V51.819H56.8733C56.9785 49.3099 57.0271 46.9637 57.0271 44.7805C57.0271 42.5973 56.9785 40.2511 56.8733 37.7421H61.3989V43.0128H68.4908V37.7421H73.0164Z" fill="white"/> 781 <path d="M87.2328 41.2287L86.7875 42.3529C85.5651 45.6196 84.2859 48.7722 82.9582 51.8108C82.262 53.3586 81.2662 54.605 79.9546 55.5418C78.6431 56.4787 76.9997 56.9267 75.0243 56.886C74.7814 55.8107 74.579 54.9797 74.4171 54.3769C74.2552 53.7741 74.0447 53.1712 73.7937 52.5684C74.498 52.7395 75.1619 52.821 75.7772 52.821C76.7811 52.821 77.5745 52.6091 78.1655 52.1855C77.704 50.8007 77.1535 49.318 76.5301 47.7295C75.8986 46.141 74.9919 43.974 73.7937 41.2368H78.3598C78.5136 41.8804 78.7241 42.6299 78.9912 43.4852C79.2584 44.3406 79.5337 45.1552 79.8008 45.9454C79.8818 46.1898 80.0032 46.5646 80.1732 47.0615C80.3432 47.5584 80.4809 47.9739 80.5861 48.3079L81.0881 46.7764C82.0515 43.974 82.6263 42.1248 82.8044 41.2287H87.2328Z" fill="white"/> 782 <path d="M99.5224 44.2754C99.5224 46.8741 99.5628 49.3913 99.6357 51.8189H95.2801L95.3368 49.4972C94.9644 50.3608 94.422 50.9962 93.7176 51.4035C93.0133 51.8108 92.1794 52.0145 91.216 52.0145C90.2526 52.0145 89.6292 51.7782 88.9654 51.2976C88.3015 50.8169 87.7753 50.1734 87.4029 49.3506C87.0304 48.5278 86.8442 47.6317 86.8442 46.646C86.8442 45.6603 87.0304 44.7642 87.4029 43.9007C87.7753 43.0372 88.3015 42.3529 88.9735 41.8234C89.6454 41.302 90.4145 41.0413 91.2727 41.0413C92.1308 41.0413 93.1347 41.2531 93.8472 41.6686C94.5596 42.0922 95.0858 42.7358 95.4339 43.6156C95.4339 42.8824 95.4097 41.693 95.3611 40.0719C95.3125 38.4915 95.2882 37.3836 95.2882 36.7401H99.6438C99.5709 39.1432 99.5304 41.6604 99.5304 44.2836L99.5224 44.2754ZM94.7863 48.2183C95.183 47.8598 95.3854 47.2977 95.3854 46.5238C95.3854 45.7499 95.183 45.3345 94.7863 45.0086C94.3896 44.6827 93.8876 44.5198 93.2804 44.5198C92.6733 44.5198 92.2199 44.7072 91.8232 45.0738C91.4265 45.4404 91.2322 45.921 91.2322 46.5157C91.2322 47.1104 91.4103 47.7132 91.7746 48.1287C92.1308 48.5441 92.6247 48.7478 93.24 48.7478C93.8552 48.7478 94.3815 48.5686 94.7782 48.2183H94.7863Z" fill="white"/> 783 <path d="M105.651 44.0962C106.193 42.1411 107.529 41.1717 109.674 41.1717C111.82 41.1717 110.403 41.1961 110.751 41.2531L110.136 45.5951C109.213 45.2448 108.452 45.0738 107.861 45.0738C107.27 45.0738 106.59 45.2937 106.242 45.7336C105.894 46.1735 105.724 46.7601 105.724 47.5014V47.4851L105.708 48.7641C105.708 49.6846 105.732 50.7029 105.78 51.8271H101.174C101.279 49.9697 101.328 48.2101 101.328 46.5564C101.328 44.9027 101.279 43.1349 101.174 41.245C102.024 41.2857 102.672 41.302 103.117 41.302C103.562 41.302 104.242 41.2857 105.06 41.245L105.635 44.1125L105.651 44.0962Z" fill="white"/> 784 <path d="M123.486 48.593C123.486 49.0329 123.535 49.3425 123.64 49.5217C123.745 49.7009 123.948 49.8312 124.255 49.9127L124.182 51.7375C123.769 51.8027 123.413 51.8434 123.114 51.876C122.814 51.9004 122.409 51.9167 121.907 51.9167C120.798 51.9167 120.07 51.6723 119.713 51.1672C119.357 50.6703 119.171 50.0349 119.171 49.261V48.7722C118.799 49.8312 118.256 50.6214 117.544 51.1347C116.831 51.6479 115.925 51.9086 114.815 51.9086C113.706 51.9086 112.565 51.6479 111.917 51.1347C111.269 50.6214 110.946 49.8475 110.946 48.8292C110.946 47.8109 111.221 47.3303 111.771 46.8497C112.322 46.369 113.18 46.0432 114.338 45.864C113.358 45.1634 112.387 44.5605 111.407 44.0392C112.176 43.0616 113.059 42.3121 114.046 41.7989C115.034 41.2857 116.24 41.0332 117.649 41.0332C119.058 41.0332 121.098 41.4649 122.053 42.3203C123.008 43.1757 123.486 44.5035 123.486 46.2876V48.593ZM116.321 44.7805C115.819 45.0004 115.374 45.3344 114.969 45.7662C115.738 45.6766 116.702 45.6277 117.859 45.6277C119.017 45.6277 118.669 45.5707 118.8
78463 45.4566C119.058 45.3426 119.155 45.196 119.155 45.0086C119.155 44.8212 119.058 44.7235 118.863 44.6094C118.669 44.4954 118.402 44.4465 118.054 44.4465C117.398 44.4465 116.823 44.5524 116.321 44.7723V44.7805ZM117.981 48.3323C119.074 47.8109 119.179 46.7356 119.179 46.7356C118.871 46.8904 118.531 47.0126 118.159 47.0941C117.787 47.1755 117.333 47.257 116.807 47.3384L116.111 47.4525C115.39 47.5991 115.034 47.8435 115.034 48.1857C115.034 48.5278 115.366 48.7478 116.038 48.7478C116.71 48.7478 117.406 48.6093 117.981 48.3323Z" fill="white"/> 785 <path d="M134.14 44.6991C132.958 44.6176 131.881 44.5606 130.902 44.528L130.886 46.5809C130.886 47.2814 131.04 47.8273 131.339 48.2183C131.639 48.6093 132.173 48.813 132.95 48.813C133.727 48.813 133.525 48.7885 133.8 48.7315C133.752 49.2121 133.727 49.6928 133.727 50.1815C133.727 50.6703 133.744 50.9473 133.768 51.7701C133.201 51.876 132.732 51.9412 132.343 51.9656C131.954 51.99 131.461 52.0063 130.837 52.0063C129.331 52.0063 128.271 51.6397 127.647 50.9066C127.024 50.1734 126.716 49.1551 126.716 47.8517L126.733 44.5769C126.125 44.6013 125.502 44.642 124.846 44.6909V41.2613C125.51 41.2613 126.077 41.0495 126.538 40.6177C127 40.1941 127.275 39.6809 127.364 39.0862H132.602C131.946 39.9905 131.218 40.7155 130.424 41.2531H134.14V44.6828V44.6991Z" fill="white"/> 786 <path d="M145.49 46.9719H139.208C139.313 47.5421 139.564 48.0064 139.969 48.3567C140.374 48.707 140.949 48.8863 141.694 48.8863C142.438 48.8863 142.738 48.7804 143.216 48.5686C143.693 48.3567 144.074 48.0553 144.349 47.6643C145.207 48.0879 146.357 48.5523 147.782 49.041C147.385 49.9453 146.664 50.6703 145.612 51.1998C144.568 51.7375 143.199 52.0063 141.515 52.0063C139.831 52.0063 137.718 51.5012 136.674 50.4829C135.63 49.4646 135.104 48.1368 135.104 46.4831C135.104 44.8294 135.622 43.5585 136.666 42.5484C137.702 41.5382 139.321 41.0332 141.524 41.0332C143.726 41.0332 143.968 41.2531 144.932 41.693C145.895 42.1329 146.632 42.7439 147.15 43.526C147.66 44.308 147.919 45.2041 147.919 46.2143C147.919 47.2244 147.903 46.8008 147.879 46.9719H145.49ZM140.406 44.1695C139.208 44.9027 139.208 45.7662 139.208 45.7662C139.516 45.6114 139.856 45.4892 140.228 45.4078C140.601 45.3263 141.054 45.2448 141.58 45.1634L142.276 45.0493C142.997 44.9027 143.353 44.6583 143.353 44.3162C143.353 43.974 143.021 43.7541 142.349 43.7541C141.677 43.7541 140.949 43.8355 140.406 44.1695Z" fill="white"/> 787</svg> 788 789 </a> 790 791 <nav id="headerNav"> 792 793 <div class="headerNavLink"> 794 <div class="headerNavLinkContent"> 795 <a class="headerNavLinkContentTitle " 796 href="/collections/shop-all"> 797 Versla 798 </a> 799 800 801 <img class="headerNavLinkContentArrow" src="//happyhydrate.is/cdn/shop/t/80/assets/icon-down-arrow.svg?v=20821147324244546361788984151" 802 alt="" width="12" height="12" loading="lazy" decoding="async" aria-hidden="true"> 803 <div class="headerNavLinkContentExpanded"> 804 <div class="headerNavLinkContentExpandedBody"> 805 <div class="headerNavLinkContentExpandedBodyLinks"> 806 807 <a class="headerNavLinkContentExpandedBodyLinksItem" href="/collections/shop-all"> 808 Allt 809 </a> 810 811 <a class="headerNavLinkContentExpandedBodyLinksItem" href="/products/hydration-xpress?variant=50050860744842"> 812 Hydrate 813 </a> 814 815 <a class="headerNavLinkContentExpandedBodyLinksItem" href="/products/creatine-xpress-bundle"> 816 KreatÃn 817 </a> 818 819 <a class="headerNavLinkContentExpandedBodyLinksItem" href="/products/energy-xpress-bundle"> 820 Energy 821 </a> 822 823 <a class="headerNavLinkContentExpandedBodyLinksItem" href="/products/hydration-kids-1"> 824 Kids 825 </a> 826 827 <a class="headerNavLinkContentExpandedBodyLinksItem" href="/collections/fatnadur"> 828 Fatnaður 829 </a> 830 831 <a class="headerNavLinkContentExpandedBodyLinksItem" href="/collections/brusar"> 832 Brúsar 833 </a> 834 835 </div> 836 </div> 837 </div> 838 839 </div> 840 </div> 841 842 <div class="headerNavLink"> 843 <div class="headerNavLinkContent"> 844 <a class="headerNavLinkContentTitle soloLink" 845 href="/pages/askrift-box"> 846 Ãskrift 847 </a> 848 849 850 </div> 851 </div> 852 853 </nav> 854 855 856 857 <div id="headerIcons"> 858 859 860 <a id="headerIconsAccount" title="Ãskriftin mÃn" href="/pages/askriftin-min"> 861 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> 862 <g clip-path="url(#clip0_701_2720)"> 863 <path d="M12.0033 13.5848C14.1928 13.5848 15.9676 11.8099 15.9676 9.62054C15.9676 7.43112 14.1928 5.65625 12.0033 5.65625C9.81394 5.65625 8.03906 7.43112 8.03906 9.62054C8.03906 11.8099 9.81394 13.5848 12.0033 13.5848Z" stroke="#1F1F1F" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 864 <path d="M5.23438 19.7645C5.94198 18.603 6.9365 17.643 8.12229 16.977C9.30809 16.3108 10.6453 15.9609 12.0054 15.9609C13.3655 15.9
864609 14.7027 16.3108 15.8885 16.977C17.0743 17.643 18.0687 18.603 18.7764 19.7645" stroke="#1F1F1F" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 865 <path d="M12.0025 22.3018C17.695 22.3018 22.3096 17.6872 22.3096 11.9946C22.3096 6.30217 17.695 1.6875 12.0025 1.6875C6.30998 1.6875 1.69531 6.30217 1.69531 11.9946C1.69531 17.6872 6.30998 22.3018 12.0025 22.3018Z" stroke="#1F1F1F" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 866 </g> 867 <defs> 868 <clipPath id="clip0_701_2720"> 869 <rect width="24" height="24" fill="white"/> 870 </clipPath> 871 </defs> 872 </svg> 873 </a> 874 875 <button id="headerIconsCart" class="openCart" data-count="0" title="cart"> 876 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> 877 <path d="M20.2131 12.7879H7.24196L5.65625 4.85938H21.5133C21.6294 4.8598 21.7438 4.88565 21.8487 4.93512C21.9535 4.98458 22.0463 5.05646 22.1204 5.14568C22.1946 5.23487 22.2482 5.33926 22.2775 5.45143C22.3068 5.56362 22.3113 5.68087 22.2903 5.79495L20.9901 12.1378C20.9598 12.3212 20.8646 12.4876 20.7221 12.6069C20.5795 12.7262 20.3989 12.7904 20.2131 12.7879Z" stroke="#1F1F1F" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 878 <path d="M5.65959 4.85893L4.99359 2.32179C4.95704 2.1427 4.85973 1.98175 4.71814 1.86616C4.57655 1.75058 4.39938 1.68746 4.21659 1.6875H1.69531" stroke="#1F1F1F" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 879 <path d="M7.25 12.7891L7.916 16.1191C7.95257 16.2982 8.04987 16.4591 8.19145 16.5747C8.33304 16.6903 8.51023 16.7533 8.693 16.7533H18.3501" stroke="#1F1F1F" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 880 <path d="M17.5585 22.3045C17.1205 22.3045 16.7656 21.9494 16.7656 21.5116C16.7656 21.0738 17.1205 20.7188 17.5585 20.7188C17.9963 20.7188 18.3513 21.0738 18.3513 21.5116C18.3513 21.9494 17.9963 22.3045 17.5585 22.3045Z" stroke="#1F1F1F" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 881 <path d="M9.62098 22.3045C9.1831 22.3045 8.82812 21.9494 8.82812 21.5116C8.82812 21.0738 9.1831 20.7188 9.62098 20.7188C10.0589 20.7188 10.4138 21.0738 10.4138 21.5116C10.4138 21.9494 10.0589 22.3045 9.62098 22.3045Z" stroke="#1F1F1F" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 882 </svg> 883 </button> 884 885 <div id="headerMenu" class="openNav" aria-expanded="false"> 886 <svg class="burger" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"> 887 <!-- both bars are the same line at y=12; we offset with CSS --> 888 <g class="line line--1"><line x1="2" y1="12" x2="22" y2="12"/></g> 889 <g class="line line--2"><line x1="2" y1="12" x2="22" y2="12"/></g> 890 </svg> 891 </div> 892 893 </div> 894 895 896 <div id="headerPanel" aria-hidden="true"><nav id="sliderNav" class="sliderNav--simple"> 897 898 899 <div class="sliderNavDropdown"> 900 <button class="sliderNavDropdownToggle active" type="button" aria-expanded="true">Versla</button> 901 <div class="sliderNavDropdownLinks"> 902 <div class="sliderNavDropdownLinksWrap"> 903 <div class="sliderNavDropdownLinksWrapContent"> 904 905 <a class="sliderNavDropdownLinksWrapContentLink" href="/collections/shop-all">Allt</a> 906 907 <a class="sliderNavDropdownLinksWrapContentLink" href="/products/hydration-xpress?variant=50050860744842">Hydrate</a> 908 909 <a class="sliderNavDropdownLinksWrapContentLink" href="/products/creatine-xpress-bundle">KreatÃn</a> 910 911 <a class="sliderNavDropdownLinksWrapContentLink" href="/products/energy-xpress-bundle">Energy</a> 912 913 <a class="sliderNavDropdownLinksWrapContentLink" href="/products/hydration-kids-1">Kids</a> 914 915 <a class="sliderNavDropdownLinksWrapContentLink" href="/collections/fatnadur">Fatnaður</a> 916 917 <a class="sliderNavDropdownLinksWrapContentLink" href="/collections/brusar">Brúsar</a> 918 919 </div> 920 </div> 921 </div> 922 </div> 923 924 925 926 <a class="sliderNavLink" href="/pages/askrift-box">Ãskrift</a> 927 928 929 930 <a class="sliderNavLink" href="/pages/contact">Hafa samband</a> 931 932 933 </nav></div> 934 935 936</header> 937 938 939 940
941<script> 942(() => { 943 const header = document.getElementById('header'); 944 const trigger = document.getElementById('headerMenu'); 945 const panel = document.getElementById('headerPanel'); 946 const body = document.body; 947 948 // header height -> CSS var (used to size panel) 949 function syncHeaderH() { 950 const h = header ? header.offsetHeight : 0; 951 document.documentElement.style.setProperty('--header-h', h + 'px'); 952 } 953 syncHeaderH(); 954 window.addEventListener('resize', syncHeaderH); 955 956 // open / close + scroll lock 957 function openPanel(){ 958 const y = window.scrollY || window.pageYOffset; 959 body.dataset.scrollY = y; 960 body.style.top = `-${y}px`; 961 body.classList.add('scroll-lock'); 962 963 header.classList.add('is-open'); 964 trigger?.setAttribute('aria-expanded','true'); 965 panel?.setAttribute('aria-hidden','false'); 966 } 967 968 function closePanel(){ 969 header.classList.remove('is-open'); 970 trigger?.setAttribute('aria-expanded','false'); 971 panel?.setAttribute('aria-hidden','true'); 972 973 const y = parseInt(body.dataset.scrollY || '0', 10); 974 body.classList.remove('scroll-lock'); 975 body.style.top = ''; 976 window.scrollTo(0, y); 977 } 978 979 trigger?.addEventListener('click', () => { 980 header.classList.contains('is-open') ? closePanel() : openPanel(); 981 }); 982 983 // close when clicking any link inside the panel 984 panel?.addEventListener('click', (e) => { 985 if (e.target.closest('a')) closePanel(); 986 }); 987 988 // ===== Tabs: switch panels ===== 989 const panelRoot = panel; 990 if (panelRoot) { 991 panelRoot.addEventListener('click', (e) => { 992 const btn = e.target.closest('button.mp-tab'); 993 if (!btn || !panelRoot.contains(btn)) return; 994 995 e.preventDefault(); 996 997 const key = btn.dataset.tab; // "menu" or "c-<id>" 998 const targetId = 'panel-' + key; // "panel-menu" or "panel-c-<id>" 999 1000 // activate button 1001 panelRoot.querySelectorAll('.mp-tab') 1002 .forEach(b => b.classList.toggle('is-active', b === btn)); 1003 1004 // show corresponding panel 1005 panelRoot.querySelectorAll('.mp-panel') 1006 .forEach(p => p.classList.toggle('is-active', p.id === targetId)); 1007 }); 1008 } 1009 1010 1011 1012(function () { 1013 const links = document.querySelectorAll('#headerNav a.soloLink'); 1014 1015 const normalizePath = (p) => 1016 p 1017 .replace(/^\/[a-z]{2}(?:-[A-Z]{2})?\//, "/") // drop /en/, /is/, /en-GB/, ... 1018 .replace(/\/$/, ""); // drop trailing slash 1019 1020 // current page (pathname only) 1021 const current = normalizePath(location.pathname); 1022 1023 links.forEach((a) => { 1024 const href = a.getAttribute("href"); 1025 if (!href) return; 1026 1027 // Parse href and take ONLY pathname (ignores ?variant=...) 1028 const targetPathname = new URL(href, location.origin).pathname; 1029 const target = normalizePath(targetPathname); 1030 1031 if (current === target || current.startsWith(target)) { 1032 const item = a.closest(".headerNavLink"); 1033 if (item) item.classList.add("is-active"); 1034 a.classList.remove("is-active"); // if you were using the anchor class before 1035 } 1036 }); 1037})(); 1038 1039})(); 1040</script>
1040 1041 1042 1043 1044 1045 1046</div> 1047<div id="shopify-section-theme-mini-cart" class="shopify-section"><dialog id="miniCart"> 1048 <div id="miniCartExit" class="closeCart"> 1049 </div> 1050 <div id="miniCartContent"> 1051 1052 1053 <div id="miniCartEmpty"> 1054 <div id="miniCartEmptyClose" class="closeCart"> 1055 <svg width="91" height="91" viewBox="0 0 91 91" fill="none" xmlns="http://www.w3.org/2000/svg"> 1056 <line x1="4.45275" y1="86.4889" x2="86.4771" y2="4.4645" stroke="#212121" stroke-width="10"/> 1057 <line y1="-5" x2="116" y2="-5" 1058 transform="matrix(-0.707107 -0.707107 -0.707107 0.707107 82.0234 90.0366)" 1059 stroke="#212121" stroke-width="10"/> 1060 </svg> 1061 </div> 1062 1063 <div id="miniCartEmptyTitle"> 1064 Karfan þÃn er tóm 1065 </div> 1066 1067 <button id="miniCartFooterClose" class="button closeCart custom-mb-12"> 1068 Halda áfram að versla 1069 </button> 1070 </div> 1071 1072 1073 <div id="miniCartHeader"> 1074 <div id="miniCartHeaderTitleWrapper"> 1075 <div style="display: flex; gap: 16px;"> 1076 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> 1077 <path d="M20.2131 12.7879H7.24196L5.65625 4.85938H21.5133C21.6294 4.8598 21.7438 4.88565 21.8487 4.93512C21.9535 4.98458 22.0463 5.05646 22.1204 5.14568C22.1946 5.23487 22.2482 5.33926 22.2775 5.45143C22.3068 5.56362 22.3113 5.68087 22.2903 5.79495L20.9901 12.1378C20.9598 12.3212 20.8646 12.4876 20.7221 12.6069C20.5795 12.7262 20.3989 12.7904 20.2131 12.7879Z" stroke="#1F1F1F" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1078 <path d="M5.65959 4.85893L4.99359 2.32179C4.95704 2.1427 4.85973 1.98175 4.71814 1.86616C4.57655 1.75058 4.39938 1.68746 4.21659 1.6875H1.69531" stroke="#1F1F1F" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1079 <path d="M7.25 12.7891L7.916 16.1191C7.95257 16.2982 8.04987 16.4591 8.19145 16.5747C8.33304 16.6903 8.51023 16.7533 8.693 16.7533H18.3501" stroke="#1F1F1F" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1080 <path d="M17.5585 22.3045C17.1205 22.3045 16.7656 21.9494 16.7656 21.5116C16.7656 21.0738 17.1205 20.7188 17.5585 20.7188C17.9963 20.7188 18.3513 21.0738 18.3513 21.5116C18.3513 21.9494 17.9963 22.3045 17.5585 22.3045Z" stroke="#1F1F1F" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1081 <path d="M9.62098 22.3045C9.1831 22.3045 8.82812 21.9494 8.82812 21.5116C8.82812 21.0738 9.1831 20.7188 9.62098 20.7188C10.0589 20.7188 10.4138 21.0738 10.4138 21.5116C10.4138 21.9494 10.0589 22.3045 9.62098 22.3045Z" stroke="#1F1F1F" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1082 </svg> 1083 <div id="miniCartHeaderTitle">Karfan þÃn <span 1084 id="miniCartHeaderTitleCount">(0)</span></div> 1085 </div> 1086 <div id="miniCartContentExit" class="closeCart"> 1087 <svg width="91" height="91" viewBox="0 0 91 91" fill="none" xmlns="http://www.w3.org/2000/svg"> 1088 <line x1="4.45275" y1="86.4889" x2="86.4771" y2="4.4645" stroke="#212121" stroke-width="10"/> 1089 <line y1="-5" x2="116" y2="-5" 1090 transform="matrix(-0.707107 -0.707107 -0.707107 0.707107 82.0234 90.0366)" 1091 stroke="#212121" stroke-width="10"/> 1092 </svg> 1093 </div> 1094 </div> 1095 </div> 1096 1097 <div id="miniCartProgressBody"> 1098 1099 <div style="display: flex; gap: 12px; margin-bottom: 24px; align-items: center;"> 1100 <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28" fill="none"> 1101 <path d="M15.1699 2.37012L13.4717 6.61567V13.6917H24.7183V6.61567L23.0201 2.37012H15.1699Z" stroke="black" stroke-width="1.5"/> 1102 <path d="M13.4717 6.61572H24.7183" stroke="black" stroke-width="1.5"/> 1103 <path d="M19.0947 2.37012V6.61567" stroke="black" stroke-width="1.5"/> 1104 <path d="M2.37012 25.6304H13.4717L23.516 22.4585V22.0439C23.516 20.5211 22.2815 19.2866 20.7586 19.2866C20.4838 19.2866 20.2105 19.3278 19.9478 19.4085L13.6541 21.3451C13.5331 21.3823 13.4074 21.4012 13.2809 21.4012H8.18522" stroke="black" stroke-width="1.5"/> 1105 <path d="M13.4717 21.4012V18.2293L6.82058 17.206C4.89745 16.9102 3.16309 18.3981 3.16309 20.3439" stroke="black" stroke-width="1.5"/> 1106 </svg> 1107 1108 <div id="miniCartHeaderBarText"> 1109 Ãig vantar 1110 <div id="miniCartHeaderBarTextAmount"></div> 1111 fyrir frÃa heimsendingu 1112 </div> 1113 </div> 1114 <div id="miniCartHeaderBar"> 1115 <div id="miniCartHeaderBarInner"></div> 1116 </div> 1117 1118 1119 </div> 1120 1121 1122 <div id="miniCartBody" class="active"></div> 1123 1124 1125 <div id="miniCartUpsell"> 1126 <h2 id="miniCartUpsellTitle"></h2> 1127 <div id="miniCartUpsellSwiper" class="swiper"> 1128 <div class="swiper-wrapper"> 1129 1130 </div> 1131 <div id="miniCartUpsellSwiperActions"> 1132 <div class="swiper-button-prev"></div> 1133 <div class="swiper-button-next"></div> 1134 </div> 1135 </div> 1136 </div> 1137 1138 1139 <div id="miniCartFooter"> 1140 1141 1142 <div id="miniCartFooterTotal">
1143 Heildarverð <span 1144 id="miniCartFooterTotalPrice">0 kr</span> 1145 </div> 1146 1147 <div class="footerButtonDiv"> 1148 <button id="miniCartFooterClose" class="button closeCart"> 1149 Halda áfram að versla 1150 </button> 1151 1152 <button id="miniCartFooterCheckout" class="button"> 1153 Klára kaup 1154 </button> 1155 </div> 1156 1157 <div id="miniCartFooterText">Sending er reiknuð við greiðslu</div> 1158 </div> 1159 1160 </div> 1161</dialog>
1161<script> 1162 // Ãvinguð "uppselt"-staða, tilbúin fyrir mini-cart JS-ið. 1163 // Snið: kommu-vafðir listar á lágstöfum, t.d. ",mixed berries," (tómt = ekkert þvingað) 1164 window.HH_FORCED_SOLD_OUT = { 1165 "hydration": ",mixed berries,", 1166 "creatine": "", 1167 "energy": "", 1168 "kids": "", 1169 "skus": ",HAP-1002," 1170 }; 1171</script>
1171 1172 1173<!-- Extra Product Data For Cart -->
1174<script> 1175 // general product data 1176 const variantIDToSellingPlanID = {}; 1177 const variantIDToSellingPlanName = {}; 1178 const variantIDToCompareAtPrice = {}; 1179 1180 1181 variantIDToSellingPlanID[`46556624093322`] = null; 1182 variantIDToSellingPlanName[`46556624093322`] = null; 1183 variantIDToCompareAtPrice[`46556624093322`] = null; 1184 1185 1186 1187 variantIDToSellingPlanID[`46556640444554`] = null; 1188 variantIDToSellingPlanName[`46556640444554`] = null; 1189 variantIDToCompareAtPrice[`46556640444554`] = null; 1190 1191 variantIDToSellingPlanID[`46556640477322`] = null; 1192 variantIDToSellingPlanName[`46556640477322`] = null; 1193 variantIDToCompareAtPrice[`46556640477322`] = null; 1194 1195 variantIDToSellingPlanID[`46556640510090`] = null; 1196 variantIDToSellingPlanName[`46556640510090`] = null; 1197 variantIDToCompareAtPrice[`46556640510090`] = null; 1198 1199 variantIDToSellingPlanID[`46556640542858`] = null; 1200 variantIDToSellingPlanName[`46556640542858`] = null; 1201 variantIDToCompareAtPrice[`46556640542858`] = null; 1202 1203 1204 1205 variantIDToSellingPlanID[`47189689401482`] = null; 1206 variantIDToSellingPlanName[`47189689401482`] = null; 1207 variantIDToCompareAtPrice[`47189689401482`] = null; 1208 1209 1210 1211 variantIDToSellingPlanID[`45252494262410`] = null; 1212 variantIDToSellingPlanName[`45252494262410`] = null; 1213 variantIDToCompareAtPrice[`45252494262410`] = null; 1214 1215 variantIDToSellingPlanID[`46570914316426`] = null; 1216 variantIDToSellingPlanName[`46570914316426`] = null; 1217 variantIDToCompareAtPrice[`46570914316426`] = null; 1218 1219 variantIDToSellingPlanID[`46570914349194`] = null; 1220 variantIDToSellingPlanName[`46570914349194`] = null; 1221 variantIDToCompareAtPrice[`46570914349194`] = null; 1222 1223 variantIDToSellingPlanID[`46570914381962`] = null; 1224 variantIDToSellingPlanName[`46570914381962`] = null; 1225 variantIDToCompareAtPrice[`46570914381962`] = null; 1226 1227 variantIDToSellingPlanID[`46570914414730`] = null; 1228 variantIDToSellingPlanName[`46570914414730`] = null; 1229 variantIDToCompareAtPrice[`46570914414730`] = null; 1230 1231 1232 1233 variantIDToSellingPlanID[`46569397518474`] = null; 1234 variantIDToSellingPlanName[`46569397518474`] = null; 1235 variantIDToCompareAtPrice[`46569397518474`] = null; 1236 1237 variantIDToSellingPlanID[`46569835757706`] = null; 1238 variantIDToSellingPlanName[`46569835757706`] = null; 1239 variantIDToCompareAtPrice[`46569835757706`] = null; 1240 1241 variantIDToSellingPlanID[`46569835790474`] = null; 1242 variantIDToSellingPlanName[`46569835790474`] = null; 1243 variantIDToCompareAtPrice[`46569835790474`] = null; 1244 1245 variantIDToSellingPlanID[`46569835823242`] = null; 1246 variantIDToSellingPlanName[`46569835823242`] = null; 1247 variantIDToCompareAtPrice[`46569835823242`] = null; 1248 1249 variantIDToSellingPlanID[`46569397551242`] = null; 1250 variantIDToSellingPlanName[`46569397551242`] = null; 1251 variantIDToCompareAtPrice[`46569397551242`] = null; 1252 1253 variantIDToSellingPlanID[`46569835856010`] = null; 1254 variantIDToSellingPlanName[`46569835856010`] = null; 1255 variantIDToCompareAtPrice[`46569835856010`] = null; 1256 1257 variantIDToSellingPlanID[`46569835888778`] = null; 1258 variantIDToSellingPlanName[`46569835888778`] = null; 1259 variantIDToCompareAtPrice[`46569835888778`] = null; 1260 1261 variantIDToSellingPlanID[`46569835921546`] = null; 1262 variantIDToSellingPlanName[`46569835921546`] = null; 1263 variantIDToCompareAtPrice[`46569835921546`] = null; 1264 1265 1266 1267 variantIDToSellingPlanID[`44095624052874`] = null; 1268 variantIDToSellingPlanName[`44095624052874`] = null; 1269 variantIDToCompareAtPrice[`44095624052874`] = null; 1270 1271 variantIDToSellingPlanID[`44095624085642`] = null; 1272 variantIDToSellingPlanName[`44095624085642`] = null; 1273 variantIDToCompareAtPrice[`44095624085642`] = null; 1274 1275 variantIDToSellingPlanID[`45194891559050`] = null; 1276 variantIDToSellingPlanName[`45194891559050`] = null; 1277 variantIDToCompareAtPrice[`45194891559050`] = null; 1278 1279 variantIDToSellingPlanID[`46577607639178`] = null; 1280 variantIDToSellingPlanName[`46577607639178`] = null; 1281 variantIDToCompareAtPrice[`46577607639178`] = null; 1282 1283 1284
1285 variantIDToSellingPlanID[`46023481819274`] = null; 1286 variantIDToSellingPlanName[`46023481819274`] = null; 1287 variantIDToCompareAtPrice[`46023481819274`] = 299500; 1288 1289 1290 1291 variantIDToSellingPlanID[`46569346957450`] = null; 1292 variantIDToSellingPlanName[`46569346957450`] = null; 1293 variantIDToCompareAtPrice[`46569346957450`] = null; 1294 1295 variantIDToSellingPlanID[`46569405055114`] = null; 1296 variantIDToSellingPlanName[`46569405055114`] = null; 1297 variantIDToCompareAtPrice[`46569405055114`] = null; 1298 1299 variantIDToSellingPlanID[`46569405087882`] = null; 1300 variantIDToSellingPlanName[`46569405087882`] = null; 1301 variantIDToCompareAtPrice[`46569405087882`] = null; 1302 1303 variantIDToSellingPlanID[`46569405120650`] = null; 1304 variantIDToSellingPlanName[`46569405120650`] = null; 1305 variantIDToCompareAtPrice[`46569405120650`] = null; 1306 1307 variantIDToSellingPlanID[`46569405153418`] = null; 1308 variantIDToSellingPlanName[`46569405153418`] = null; 1309 variantIDToCompareAtPrice[`46569405153418`] = null; 1310 1311 variantIDToSellingPlanID[`46569346990218`] = null; 1312 variantIDToSellingPlanName[`46569346990218`] = null; 1313 variantIDToCompareAtPrice[`46569346990218`] = null; 1314 1315 variantIDToSellingPlanID[`46569405186186`] = null; 1316 variantIDToSellingPlanName[`46569405186186`] = null; 1317 variantIDToCompareAtPrice[`46569405186186`] = null; 1318 1319 variantIDToSellingPlanID[`46569405218954`] = null; 1320 variantIDToSellingPlanName[`46569405218954`] = null; 1321 variantIDToCompareAtPrice[`46569405218954`] = null; 1322 1323 variantIDToSellingPlanID[`46569405251722`] = null; 1324 variantIDToSellingPlanName[`46569405251722`] = null; 1325 variantIDToCompareAtPrice[`46569405251722`] = null; 1326 1327 variantIDToSellingPlanID[`46569405284490`] = null; 1328 variantIDToSellingPlanName[`46569405284490`] = null; 1329 variantIDToCompareAtPrice[`46569405284490`] = null; 1330 1331 variantIDToSellingPlanID[`46569347022986`] = null; 1332 variantIDToSellingPlanName[`46569347022986`] = null; 1333 variantIDToCompareAtPrice[`46569347022986`] = null; 1334 1335 variantIDToSellingPlanID[`46569405317258`] = null; 1336 variantIDToSellingPlanName[`46569405317258`] = null; 1337 variantIDToCompareAtPrice[`46569405317258`] = null; 1338 1339 variantIDToSellingPlanID[`46569405350026`] = null; 1340 variantIDToSellingPlanName[`46569405350026`] = null; 1341 variantIDToCompareAtPrice[`46569405350026`] = null; 1342 1343 variantIDToSellingPlanID[`46569405382794`] = null; 1344 variantIDToSellingPlanName[`46569405382794`] = null; 1345 variantIDToCompareAtPrice[`46569405382794`] = null; 1346 1347 variantIDToSellingPlanID[`46569405415562`] = null; 1348 variantIDToSellingPlanName[`46569405415562`] = null; 1349 variantIDToCompareAtPrice[`46569405415562`] = null; 1350 1351 variantIDToSellingPlanID[`46569393324170`] = null; 1352 variantIDToSellingPlanName[`46569393324170`] = null; 1353 variantIDToCompareAtPrice[`46569393324170`] = null; 1354 1355 variantIDToSellingPlanID[`46569405448330`] = null; 1356 variantIDToSellingPlanName[`46569405448330`] = null; 1357 variantIDToCompareAtPrice[`46569405448330`] = null; 1358 1359 variantIDToSellingPlanID[`46569405481098`] = null; 1360 variantIDToSellingPlanName[`46569405481098`] = null; 1361 variantIDToCompareAtPrice[`46569405481098`] = null; 1362 1363 variantIDToSellingPlanID[`46569405513866`] = null; 1364 variantIDToSellingPlanName[`46569405513866`] = null; 1365 variantIDToCompareAtPrice[`46569405513866`] = null; 1366 1367 variantIDToSellingPlanID[`46569405546634`] = null; 1368 variantIDToSellingPlanName[`46569405546634`] = null; 1369 variantIDToCompareAtPrice[`46569405546634`] = null; 1370 1371 1372 1373 variantIDToSellingPlanID[`46027651055754`] = null; 1374 variantIDToSellingPlanName[`46027651055754`] = null; 1375 variantIDToCompareAtPrice[`46027651055754`] = 197500; 1376 1377 1378 1379 variantIDToSellingPlanID[`47133950771338`] = null; 1380 variantIDToSellingPlanName[`47133950771338`] = null; 1381 variantIDToCompareAtPrice[`47133950771338`] = null; 1382 1383 variantIDToSellingPlanID[`47133950804106`] = null; 1384 variantIDToSellingPlanName[`47133950804106`] = null; 1385 variantIDToCompareAtPrice[`47133950804106`] = null; 1386 1387 1388 1389 variantIDToSellingPlanID[`47133961388170`] = null; 1390 variantIDToSellingPlanName[`47133961388170`] = null; 1391 variantIDToCompareAtPrice[`47133961388170`] = null; 1392 1393 variantIDToSellingPlanID[`47133961420938`] = null; 1394 variantIDToSellingPlanName[`47133961420938`] = null; 1395 variantIDToCompareAtPrice[`47133961420938`] = null; 1396 1397 variantIDToSellingPlanID[`47133961453706`] = null; 1398 variantIDToSellingPlanName[`47133961453706`] = null; 1399 variantIDToCompareAtPrice[`47133961453706`] = null; 1400 1401 variantIDToSellingPlanID[`47133961486474`] = null; 1402 variantIDToSellingPlanName[`47133961486474`] = null; 1403 variantIDToCompareAtPrice[`47133961486474`] = null; 1404 1405 variantIDToSellingPlanID[`47133961519242`] = null; 1406 variantIDToSellingPlanName[`47133961519242`] = null; 1407 variantIDToCompareAtPrice[`47133961519242`] = null; 1408 1409 variantIDToSellingPlanID[`47133961552010`] = null; 1410 variantIDToSellingPlanName[`47133961552010`] = null; 1411 variantIDToCompareAtPrice[`47133961552010`] = null; 1412 1413 variantIDToSellingPlanID[`47133961584778`] = null; 1414 variantIDToSellingPlanName[`47133961584778`] = null; 1415 variantIDToCompareAtPrice[`47133961584778`] = null; 1416 1417 variantIDToSellingPlanID[`47133961617546`] = null; 1418 variantIDToSellingPlanName[`47133961617546`] = null; 1419 variantIDToCompareAtPrice[`47133961617546`] = null; 1420 1421 1422 1423 variantIDToSellingPlanID[`47249238917258`] = null; 1424 variantIDToSellingPlanName[`47249238917258`] = null; 1425 variantIDToCompareAtPrice[`47249238917258`] = 159500; 1426 1427 variantIDToSellingPlanID[`47249239179402`] = null; 1428 variantIDToSellingPlanName[`47249239179402`] = null; 1429 variantIDToCompareAtPrice[`47249239179402`] = 478500; 1430 1431 variantIDToSellingPlanID[`47249239212170`] = null; 1432 variantIDToSellingPlanName[`47249239212170`] = null; 1433 variantIDToCompareAtPrice[`47249239212170`] = 957000; 1434 1435 variantIDToSellingPlanID[`47249239244938`] = null; 1436 variantIDToSellingPlanName[`47249239244938`] = null; 1437 variantIDToCompareAtPrice[`47249239244938`] = 1435500; 1438 1439 1440 1441 variantIDToSellingPlanID[`47249167646858`] = null; 1442 variantIDToSellingPlanName[`47249167646858`] = null; 1443 variantIDToCompareAtPrice[`47249167646858`] = 159500; 1444 1445 variantIDToSellingPlanID[`47249238720650`] = null; 1446 variantIDToSellingPlanName[`47249238720650`] = null; 1447 variantIDToCompareAtPrice[`47249238720650`] = 478500; 1448 1449 variantIDToSellingPlanID[`47249238753418`] = null; 1450 variantIDToSellingPlanName[`47249238753418`] = null; 1451 variantIDToCompareAtPrice[`47249238753418`] = 957000; 1452 1453 variantIDToSellingPlanID[`47249238786186`] = null; 1454 variantIDToSellingPlanName[`47249238786186`] = null; 1455 variantIDToCompareAtPrice[`47249238786186`] = 1435500; 1456 1457 1458 1459 variantIDToSellingPlanID[`50050860712074`] = null; 1460 variantIDToSellingPlanName[`50050860712074`] = null; 1461 variantIDToCompareAtPrice[`50050860712074`] = null; 1462 1463 variantIDToSellingPlanID[`50050860744842`] = null; 1464 variantIDToSellingPlanName[`50050860744842`] = null; 1465 variantIDToCompareAtPrice[`50050860744842`] = null; 1466 1467 variantIDToSellingPlanID[`50050860777610`] = null; 1468 variantIDToSellingPlanName[`50050860777610`] = null; 1469 variantIDToCompareAtPrice[`50050860777610`] = null; 1470 1471 variantIDToSellingPlanID[`50050860810378`] = null; 1472 variantIDToSellingPlanName[`50050860810378`] = null; 1473 variantIDToCompareAtPrice[`50050860810378`] = null; 1474 1475 variantIDToSellingPlanID[`44751436906634`] = null; 1476 variantIDToSellingPlanName[`44751436906634`] = null; 1477 variantIDToCompareAtPrice[`44751436906634`] = null; 1478 1479 variantIDToSellingPlanID[`44751436939402`] = null; 1480 variantIDToSellingPlanName[`44751436939402`] = null; 1481 variantIDToCompareAtPrice[`44751436939402`] = 598500; 1482 1483 variantIDToSellingPlanID[`44751436972170`] = null; 1484 variantIDToSellingPlanName[`44751436972170`] = null; 1485 variantIDToCompareAtPrice[`44751436972170`] = null; 1486 1487 variantIDToSellingPlanID[`44751437004938`] = null; 1488 variantIDToSellingPlanName[`44751437004938`] = null; 1489 variantIDToCompareAtPrice[`44751437004938`] = null; 1490 1491 variantIDToSellingPlanID[`44751437037706`] = null; 1492 variantIDToSellingPlanName[`44751437037706`] = null; 1493 variantIDToCompareAtPrice[`44751437037706`] = null; 1494 1495 variantIDToSellingPlanID[`44751437070474`] = null; 1496 variantIDToSellingPlanName[`44751437070474`] = null; 1497 variantIDToCompareAtPrice[`44751437070474`] = null; 1498 1499 variantIDToSellingPlanID[`44751437103242`] = null; 1500 variantIDToSellingPlanName[`44751437103242`] = null; 1501 variantIDToCompareAtPrice[`44751437103242`] = null; 1502 1503 variantIDToSellingPlanID[`44751437136010`] = null; 1504 variantIDToSellingPlanName[`44751437136010`] = null; 1505 variantIDToCompareAtPrice[`44751437136010`] = 1795500; 1506 1507 variantIDToSellingPlanID[`44751437168778`] = null; 1508 variantIDToSellingPlanName[`44751437168778`] = null; 1509 variantIDToCompareAtPrice[`44751437168778`] = null; 1510 1511 variantIDToSellingPlanID[`44751437201546`] = null; 1512 variantIDToSellingPlanName[`44751437201546`] = null; 1513 variantIDToCompareAtPrice[`44751437201546`] = null; 1514 1515 variantIDToSellingPlanID[`44751437234314`] = null; 1516 variantIDToSellingPlanName[`44751437234314`] = null; 1517 variantIDToCompareAtPrice[`44751437234314`] = null; 1518 1519 variantIDToSellingPlanID[`44751437267082`] = null; 1520 variantIDToSellingPlanName[`44751437267082`] = null; 1521 variantIDToCompareAtPrice[`44751437267082`] = null; 1522 1523 variantIDToSellingPlanID[`45773488324746`] = null; 1524 variantIDToSellingPlanName[`45773488324746`] = null; 1525 variantIDToCompareAtPrice[`45773488324746`] = null; 1526 1527 variantIDToSellingPlanID[`45773488357514`] = null; 1528 variantIDToSellingPlanName[`45773488357514`] = null; 1529 variantIDToCompareAtPrice[`45773488357514`] = null; 1530 1531 variantIDToSellingPlanID[`45773488390282`] = null; 1532 variantIDToSellingPlanName[`45773488390282`] = null; 1533 variantIDToCompareAtPrice[`45773488390282`] = null; 1534 1535 variantIDToSellingPlanID[`45773488423050`] = null; 1536 variantIDToSellingPlanName[`45773488423050`] = null; 1537 variantIDToCompareAtPrice[`45773488423050`] = null; 1538
1539 variantIDToSellingPlanID[`47230751473802`] = null; 1540 variantIDToSellingPlanName[`47230751473802`] = null; 1541 variantIDToCompareAtPrice[`47230751473802`] = null; 1542 1543 variantIDToSellingPlanID[`47230751506570`] = null; 1544 variantIDToSellingPlanName[`47230751506570`] = null; 1545 variantIDToCompareAtPrice[`47230751506570`] = null; 1546 1547 variantIDToSellingPlanID[`47230751539338`] = null; 1548 variantIDToSellingPlanName[`47230751539338`] = null; 1549 variantIDToCompareAtPrice[`47230751539338`] = null; 1550 1551 variantIDToSellingPlanID[`47230751572106`] = null; 1552 variantIDToSellingPlanName[`47230751572106`] = null; 1553 variantIDToCompareAtPrice[`47230751572106`] = null; 1554 1555 1556 1557 variantIDToSellingPlanID[`44310716579978`] = null; 1558 variantIDToSellingPlanName[`44310716579978`] = null; 1559 variantIDToCompareAtPrice[`44310716579978`] = null; 1560 1561 variantIDToSellingPlanID[`44310716612746`] = null; 1562 variantIDToSellingPlanName[`44310716612746`] = null; 1563 variantIDToCompareAtPrice[`44310716612746`] = null; 1564 1565 variantIDToSellingPlanID[`44740682743946`] = null; 1566 variantIDToSellingPlanName[`44740682743946`] = null; 1567 variantIDToCompareAtPrice[`44740682743946`] = null; 1568 1569 variantIDToSellingPlanID[`45773486915722`] = null; 1570 variantIDToSellingPlanName[`45773486915722`] = null; 1571 variantIDToCompareAtPrice[`45773486915722`] = null; 1572 1573 variantIDToSellingPlanID[`46431195070602`] = null; 1574 variantIDToSellingPlanName[`46431195070602`] = null; 1575 variantIDToCompareAtPrice[`46431195070602`] = null; 1576 1577 variantIDToSellingPlanID[`50007879516298`] = null; 1578 variantIDToSellingPlanName[`50007879516298`] = null; 1579 variantIDToCompareAtPrice[`50007879516298`] = null; 1580 1581 1582 1583 variantIDToSellingPlanID[`46311574896778`] = null; 1584 variantIDToSellingPlanName[`46311574896778`] = null; 1585 variantIDToCompareAtPrice[`46311574896778`] = null; 1586 1587 variantIDToSellingPlanID[`46311574929546`] = null; 1588 variantIDToSellingPlanName[`46311574929546`] = null; 1589 variantIDToCompareAtPrice[`46311574929546`] = null; 1590 1591 variantIDToSellingPlanID[`47698783469706`] = null; 1592 variantIDToSellingPlanName[`47698783469706`] = null; 1593 variantIDToCompareAtPrice[`47698783469706`] = null; 1594 1595 1596 1597 variantIDToSellingPlanID[`46311578140810`] = null; 1598 variantIDToSellingPlanName[`46311578140810`] = null; 1599 variantIDToCompareAtPrice[`46311578140810`] = null; 1600 1601 variantIDToSellingPlanID[`46322328043658`] = null; 1602 variantIDToSellingPlanName[`46322328043658`] = null; 1603 variantIDToCompareAtPrice[`46322328043658`] = null; 1604 1605 variantIDToSellingPlanID[`46322328076426`] = null; 1606 variantIDToSellingPlanName[`46322328076426`] = null; 1607 variantIDToCompareAtPrice[`46322328076426`] = null; 1608 1609 variantIDToSellingPlanID[`46322328109194`] = null; 1610 variantIDToSellingPlanName[`46322328109194`] = null; 1611 variantIDToCompareAtPrice[`46322328109194`] = null; 1612 1613 variantIDToSellingPlanID[`46311578271882`] = null; 1614 variantIDToSellingPlanName[`46311578271882`] = null; 1615 variantIDToCompareAtPrice[`46311578271882`] = null; 1616 1617 variantIDToSellingPlanID[`46322328141962`] = null; 1618 variantIDToSellingPlanName[`46322328141962`] = null; 1619 variantIDToCompareAtPrice[`46322328141962`] = null; 1620 1621 variantIDToSellingPlanID[`46322328174730`] = null; 1622 variantIDToSellingPlanName[`46322328174730`] = null; 1623 variantIDToCompareAtPrice[`46322328174730`] = null; 1624 1625 variantIDToSellingPlanID[`46322328207498`] = null; 1626 variantIDToSellingPlanName[`46322328207498`] = null; 1627 variantIDToCompareAtPrice[`46322328207498`] = null; 1628 1629 variantIDToSellingPlanID[`47698783699082`] = null; 1630 variantIDToSellingPlanName[`47698783699082`] = null; 1631 variantIDToCompareAtPrice[`47698783699082`] = null; 1632 1633 variantIDToSellingPlanID[`47698783731850`] = null; 1634 variantIDToSellingPlanName[`47698783731850`] = null; 1635 variantIDToCompareAtPrice[`47698783731850`] = null; 1636 1637 variantIDToSellingPlanID[`47698783764618`] = null; 1638 variantIDToSellingPlanName[`47698783764618`] = null; 1639 variantIDToCompareAtPrice[`47698783764618`] = null; 1640 1641 variantIDToSellingPlanID[`47698783797386`] = null; 1642 variantIDToSellingPlanName[`47698783797386`] = null; 1643 variantIDToCompareAtPrice[`47698783797386`] = null; 1644 1645 1646 1647 variantIDToSellingPlanID[`47249165811850`] = null; 1648 variantIDToSellingPlanName[`47249165811850`] = null; 1649 variantIDToCompareAtPrice[`47249165811850`] = 289000; 1650 1651 variantIDToSellingPlanID[`47249165877386`] = null; 1652 variantIDToSellingPlanName[`47249165877386`] = null; 1653 variantIDToCompareAtPrice[`47249165877386`] = 867000; 1654
1655 variantIDToSellingPlanID[`47249165910154`] = null; 1656 variantIDToSellingPlanName[`47249165910154`] = null; 1657 variantIDToCompareAtPrice[`47249165910154`] = 1734000; 1658 1659 variantIDToSellingPlanID[`47249165942922`] = null; 1660 variantIDToSellingPlanName[`47249165942922`] = null; 1661 variantIDToCompareAtPrice[`47249165942922`] = 2601000; 1662 1663 1664 1665 variantIDToSellingPlanID[`47249122754698`] = null; 1666 variantIDToSellingPlanName[`47249122754698`] = null; 1667 variantIDToCompareAtPrice[`47249122754698`] = 289000; 1668 1669 variantIDToSellingPlanID[`47249122787466`] = null; 1670 variantIDToSellingPlanName[`47249122787466`] = null; 1671 variantIDToCompareAtPrice[`47249122787466`] = 867000; 1672 1673 variantIDToSellingPlanID[`47249122820234`] = null; 1674 variantIDToSellingPlanName[`47249122820234`] = null; 1675 variantIDToCompareAtPrice[`47249122820234`] = 1734000; 1676 1677 variantIDToSellingPlanID[`47249122853002`] = null; 1678 variantIDToSellingPlanName[`47249122853002`] = null; 1679 variantIDToCompareAtPrice[`47249122853002`] = 2601000; 1680 1681 1682 1683 // cart settings 1684 const cartSettings = {"enable_free_shipping_bar":true,"free_shipping_threshold":1340000,"upsells_title":"","upsells_description":"","upsells":[],"protection_upsell":""}; 1685 cartSettings.protection_upsell = null; 1686 1687 const cartTranslations = { 1688 "until_free_shipping": "Verslaðu fyrir aðeins {amount} til að fá", 1689 "free_shipping": "FRÃA SENDINGU", 1690 "free_shipping_unlocked": "Til hamingju! Ãú færð" 1691 }; 1692</script>
1692 1693 1694 1695</div> 1696<div id="shopify-section-heilsudagar-popup" class="shopify-section"> 1697</div> 1698 1699<main> 1700 <div id="shopify-section-template--22413711704202__section_product_v2_R9fnpP" class="shopify-section"> 1701 1702 1703 1704 1705 1706<style> 1707 :root { 1708 --pdp-v2-background: #FFFFFF; 1709 --pdp-v2-text-color: #000000; 1710 --pdp-v2-quantity-icon-filter: invert(0); 1711 --pdp-v2-atc-button-background-color: #240605; 1712 --pdp-v2-atc-button-text-color: #f6b9d2; 1713 --pdp-v2-atc-button-icon-fill: #FFFFFF; 1714 --pdp-v2-free-shipping-color: #240605; 1715 1716 --pdp-v2-junip-review-count-color: #240605; 1717 } 1718 1719 @media (max-width: 1000px) { 1720 1721 } 1722 1723 [id="template--22413711704202__section_product_v2_R9fnpP"].productV2 { 1724 padding: 16px 24px 64px 24px; 1725 background: "#FFFFFF"; 1726 align-items: start; 1727 } 1728 1729 [id="template--22413711704202__section_product_v2_R9fnpP"].productV2.creatine { 1730 grid-template-columns: minmax(0, 1200px) minmax(0, 750px); 1731 } 1732 1733 .productV2Visual { 1734 background-color: #EFEFF1; 1735 min-width: 0; 1736 align-self: start; 1737 } 1738 1739 .productV2Content { 1740 position: sticky; 1741 padding-bottom: 24px; 1742 } 1743 1744 .productV2Layout { 1745 display: grid; 1746 grid-template-columns: minmax(0, 1200px) minmax(0, 638px); 1747 gap: 32px; 1748 align-items: start; 1749 } 1750 1751 .productV2VisualSwiper { 1752 height: auto; 1753 position: relative; 1754 } 1755 1756 .productV2VisualSwiperSlide { 1757 object-fit: contain; 1758 object-position: left; 1759 } 1760 1761 .productV2VisualSwiperNewTag { 1762 z-index: 9999; 1763 position: absolute; 1764 top: 16px; 1765 right: 16px; 1766 padding: 8px 12px; 1767 border-radius: 4px; 1768 font-size: 14px; 1769 background-color: #FFFA66; 1770 font-family: "DM Sans", sans-serif; 1771 font-weight: 600; 1772 color: #000000; 1773 margin-left: 8px; 1774 width: max-content; 1775 } 1776 1777 .productV2VisualSwiperLimitedTag { 1778 z-index: 9999; 1779 position: absolute; 1780 top: 16px; 1781 right: 16px; 1782 padding: 8px 12px; 1783 border-radius: 4px; 1784 font-size: 14px; 1785 background-color: #c92a3e; 1786 font-family: "DM Sans", sans-serif; 1787 font-weight: 600; 1788 color: #FFFFFF; 1789 margin-left: 8px; 1790 width: max-content; 1791 } 1792 1793 .productV2VisualSwiperDiscountTag { 1794 z-index: 9999; 1795 position: absolute; 1796 top: 16px; 1797 right: 16px; 1798 padding: 8px 12px; 1799 border-radius: 4px; 1800 font-size: 14px; 1801 background-color: #FFFA66; 1802 font-family: "DM Sans", sans-serif; 1803 font-weight: 600; 1804 color: #000000; 1805 margin-left: 8px; 1806 width: max-content; 1807 } 1808 1809 .productV2VisualNutritionLabelButton { 1810 display: flex; 1811 align-items: center; 1812 gap: 7px; 1813 color: var(--pdp-v2-text-color); 1814 font-size: 21px; 1815 line-height: 28px; 1816 text-decoration: underline; 1817 justify-content: center; 1818 width: fit-content; 1819 margin: 0 auto; 1820 } 1821 1822 .productV2ContentNutritionLabelButtonMobile { 1823 display: none; 1824 align-items: center; 1825 gap: 7px; 1826 color: var(--pdp-v2-text-color); 1827 font-size: 21px; 1828 line-height: 28px; 1829 text-decoration: underline; 1830 justify-content: center; 1831 width: fit-content; 1832 margin: 0 auto; 1833 } 1834 1835 .productV2VisualNutritionLabelDialog[open] { 1836 justify-content: center; 1837 padding: 20px; 1838 z-index: 9999; 1839 } 1840 1841 .productVisualV2NutritionLabelDialogWrapper { 1842 display: flex; 1843 flex-direction: column; 1844 position: relative; 1845 background: white; 1846 padding: 20px 30px 36px 30px; 1847 gap: 15px; 1848 height: fit-content; 1849 box-shadow: 0 4px 4px 0 #00000040; 1850 } 1851 1852 .productV2VisualNutritionLabelDialogCloseButton { 1853 font-size: 21px; 1854 line-height: 28px; 1855 color: black; 1856 text-align: right; 1857 width: 100%; 1858 cursor: pointer; 1859 } 1860 1861 .productV2Content { 1862 top: 0px; 1863 } 1864 1865 .productV2ContentTitle { 1866 font-size: 44px; 1867 margin: 0 0 6px; 1868 font-family: Dela Gothic One, sans-serif; 1869 font-weight: 400; 1870 } 1871 1872 .productV2ContentReviews { 1873 } 1874 1875 .productV2ContentReviews .junip-product-summary-review-count { 1876 color: "#27D808"; 1877 transform: translateY(2px); 1878 } 1879 1880 .productV2ReviewsMobile { 1881 display: none; 1882 } 1883 1884 .productV2ReviewsMobile .junip-product-summary-review-count { 1885 color: var(--pdp-v2-junip-review-count-color); 1886 transform: translateY(2px); 1887 } 1888 1889 .productV2TitleMobile { 1890 display: none; 1891 font-size: 28px; 1892 margin: 0 0 6px; 1893 font-family: Dela Gothic One, sans-serif; 1894 font-weight: 400; 1895 color: #262626; 1896 padding-left: 16px; 1897 } 1898 1899 .productV2ContentDescription { 1900 margin-bottom: 21px; 1901 font-size: 18px; 1902 line-height: 28px; 1903 color: var(--pdp-v2-text-color); 1904 } 1905 1906 1907 .productV2ContentDescriptionMobile { 1908 display: none; 1909 margin-bottom: 24px; 1910 font-size: 18px; 1911 line-height: 28px; 1912 color: var(--pdp-v2-text-color); 1913 } 1914 1915 .productV2ContentShortDesc { 1916 font-family: "Inter", sans-serif; 1917 font-size: 14px; 1918 line-height: 1.5; 1919 color: #6B7280; 1920 margin: 12px 0 16px 0; 1921 } 1922 1923 .productV2ShortDescMobile { 1924 display: none; 1925 } 1926 1927 .productV2ContentOptions { 1928 1929 } 1930 1931 1932 .productV2ContentPurchaseOptions { 1933 display: flex; 1934 flex-direction: column; 1935 gap: 8px; 1936 margin-bottom: 16px; 1937 } 1938 1939 .productV2ContentPurchaseOptionInput { 1940 display: none; 1941 } 1942 1943 .productV2ContentPurchaseOptionInput:checked + .productV2ContentPurchaseOptionLabel { 1944 border: 1px solid black; 1945 background-color: #FFFFFF; 1946 } 1947 1948 .productV2ContentPurchaseOptionLabel { 1949 padding: 16px 20px; 1950 border-radius: 8px; 1951 background-color: #F5F5F5; 1952 display: grid; 1953 grid-template-columns: 1fr max-content; 1954 align-items: center; 1955 cursor: pointer; 1956 flex-wrap: wrap; 1957 font-family: "Inter", sans-serif; 1958 } 1959 1960 .productV2ContentPurchaseOptionLabelName { 1961 font-size: 16px; 1962 font-weight: 500; 1963 color: #333333; 1964 display: flex; 1965 } 1966 1967 .productV2ContentPurchaseOptionLabelPrices { 1968 display: grid; 1969 grid-template-columns: max-content 1fr; 1970 align-items: center; 1971 column-gap: 10px; 1972 } 1973 1974 .productV2ContentPurchaseOptionLabelPricesCompare { 1975 font-size: 16px; 1976 font-weight: 600; 1977 color: #6E6E6E; 1978 text-decoration: line-through; 1979 grid-column: 1; 1980 } 1981 1982 .productV2ContentPurchaseOptionLabelPricesReal { 1983 font-size: 16px; 1984 font-weight: 600; 1985 grid-column: 2; 1986 text-align: right; 1987 } 1988 1989 .productV2ContentPurchaseOptionLabelPricesPerStick { 1990 font-size: 12px; 1991 grid-column: 2; 1992 } 1993 1994 .productV2ContentAtcButton { 1995 position: sticky; 1996 bottom: 12px; 1997 z-index: 10; 1998 border-radius: 100vh; 1999 border: 1px solid #000; 2000 color: #FFFFFF; 2001 background-color: #1F1F1F; 2002 font-size: 16px; 2003 font-weight: 400; 2004 display: flex; 2005 justify-content: space-between; 2006 align-items: center; 2007 width: 100%; 2008 max-width: 100%; 2009 padding: 26px 32px; 2010 font-family: "Inter", sans-serif; 2011 } 2012 2013 .productV2ContentAtcButton:disabled { 2014 opacity: 0.6;
2015 cursor: not-allowed; 2016 } 2017 2018 .productV2ContentAtcButton.loading::after { 2019 border-top-color: #FFFFFF; 2020 } 2021 2022 .productV2VisualVariantGallery { 2023 display: grid; 2024 grid-template-columns: repeat(2, minmax(0, 1fr)); 2025 gap: 32px; 2026 padding-top: 32px; 2027 background-color: #FFFFFF; 2028 } 2029 2030 2031/*TODO*/ 2032.productV2VisualSwiper { height: auto; } 2033.productV2VisualSwiper .swiper-wrapper { height: auto; } 2034.productV2VisualSwiper .swiper-wrapper img { height: 80%; } 2035.productV2VisualSwiper .swiper-slide { height: auto; } /* overrides Swiperâs height:100% */ 2036.productV2VisualSwiper img { width: 100%; height: auto; display: block; } 2037 2038.productV2VisualDescriptionMobile { 2039 display: none; 2040 padding-top: 48px; 2041 background-color: white; 2042 color: #3A3A3A; 2043 font-family: "DM Sans", sans-serif; 2044 font-size: 18px; 2045 font-weight: 300; 2046 padding: 16px; 2047} 2048 2049 2050.productV2VisualDescriptionDesktop { 2051 padding-top: 48px; 2052 background-color: white; 2053 color: #3A3A3A; 2054 font-family: "DM Sans", sans-serif; 2055 font-size: 18px; 2056 font-weight: 300; 2057} 2058 2059/* Each row */ 2060.pdp-acc{ 2061 border-top: 1px solid #E6E6E6; 2062 padding: 14px 0; 2063} 2064.pdp-acc:first-child { border-top: none; } 2065.pdp-acc:last-child { border-bottom: none; } 2066 2067/* Hide default disclosure arrow */ 2068.pdp-acc summary { 2069 list-style: none; 2070 cursor: pointer; 2071 font-weight: 300; 2072 font-size: 24px; 2073 line-height: 1.4; 2074 display: flex; 2075 align-items: center; 2076 position: relative; 2077 padding-right: 28px; 2078 color: #1f1f1f; 2079 font-family: "DM Sans", sans-serif; 2080} 2081.pdp-acc summary::-webkit-details-marker { display: none; } 2082 2083/* The + icon on the right */ 2084.pdp-acc summary::after, 2085.pdp-acc summary::before { 2086 content: ""; 2087 position: absolute; 2088 right: 2px; 2089 top: 50%; 2090 width: 22px; 2091 height: 2px; 2092 background: #1f1f1f; 2093 transform: translateY(-50%); 2094 transition: transform 180ms ease, opacity 180ms ease; 2095} 2096.pdp-acc summary::before { transform: translateY(-50%) rotate(90deg); } /* vertical bar */ 2097 2098.pdp-acc[open] summary::before { transform: translateY(-50%) rotate(45deg); } 2099.pdp-acc[open] summary::after { transform: translateY(-50%) rotate(-45deg); } 2100 2101/* Panel content */ 2102.pdp-acc__panel { 2103 margin-top: 10px; 2104 color: #1f1f1f; 2105 font-size: 16px; 2106} 2107 2108.pdp-acc__panel b, 2109.pdp-acc__panel strong { 2110 color:#1f1f1f; 2111 font-weight:700; 2112} 2113 2114/* (Nice-to-have) respect reduced motion */ 2115@media (prefers-reduced-motion: reduce) { 2116 .pdp-acc summary::after { transition: none; } 2117} 2118 2119.pdp-acc[data-open="true"] summary::after { 2120 content: "Ã"; 2121 transform: translateY(-50%); /* no rotation = consistent size */ 2122} 2123 2124 2125 2126.sticky-cart-footer { 2127 z-index: 9999; 2128 position: fixed; 2129 width: 100%; 2130 height: 90px; 2131 background-color: white; 2132 bottom: 0px; 2133 right: 0px; 2134 left: 0px; 2135 display: flex; 2136 align-items: center; 2137 justify-content: space-between; 2138 padding: 12px; 2139} 2140 2141.productV2ContentAtcButtonStickyCart { 2142 border-radius: 100vh; 2143 border: 1px solid #000; 2144 color: #FFFFFF; 2145 background-color: #1F1F1F; 2146 font-size: 14px; 2147 font-weight: 600; 2148 display: flex; 2149 justify-content: space-between; 2150 align-items: center; 2151 max-width: 100%; 2152 padding: 16px 24px; 2153 width: 260px; 2154 font-family: "DM Sans", sans-serif; 2155} 2156 2157.productV2ContentAtcButtonStickyCart:disabled { 2158 opacity: 0.6; 2159 cursor: not-allowed; 2160} 2161 2162.productV2ContentAtcButtonStickyCart.loading::after { 2163 border-top-color: #FFFFFF; 2164} 2165 2166.mobile-sticky-checkout-button:disabled { 2167 opacity: 0.6; 2168 cursor: not-allowed; 2169} 2170 2171.mobile-sticky-checkout-button.loading::after { 2172 border-top-color: #FFFFFF; 2173} 2174 2175 2176 2177.sticky-cart-wrapper { 2178 width: 90px; 2179} 2180 2181.sticky-cart-footer-product { 2182 display: flex; 2183 align-items: center; 2184} 2185 2186.sticky-cart-footer-product-name { 2187 margin-left: 16px; 2188 display: flex; 2189 font-size: 16px; 2190 color: #0F0F0F; 2191 font-family: "Inter", sans-serif; 2192 font-weight: 600; 2193} 2194 2195.sticky-cart-footer-product-quantity { 2196 margin-left: 16px; 2197 display: flex; 2198 font-size: 16px; 2199 color: #929292; 2200 font-family: "Inter", sans-serif; 2201 font-weight: 600; 2202} 2203 2204.sticky-cart-footer { 2205 position: fixed; 2206 left: 0; 2207 right: 0; 2208 bottom: env(safe-area-inset-bottom, 0); 2209 transform: translateY(100%); 2210 transition: transform 200ms ease; 2211 z-index: 1000; /* above content */ 2212 pointer-events: none; /* avoid intercepting clicks while hidden */ 2213} 2214 2215/* Visible state */ 2216.sticky-cart-footer.is-visible { 2217 transform: translateY(0); 2218 pointer-events: auto; 2219} 2220 2221#sticky-atc-price { 2222 margin-left: 3px; 2223} 2224 2225#mobile-sticky-checkout-container { 2226 display: none; 2227} 2228 2229.mobile-sticky-checkout-button { 2230 border-radius: 100vh; 2231 border: 1px solid #000; 2232 color: #FFFFFF; 2233 background-color: #1F1F1F; 2234 font-size: 14px; 2235 font-weight: 400; 2236 2237 display: flex; 2238 align-items: center; 2239 justify-content: space-between; 2240 2241 width: 100%; 2242 max-width: 100%; 2243 padding: 24px 32px; 2244 font-family: "Inter", sans-serif; 2245} 2246 2247.mobile-sticky-checkout-button { 2248 transition: transform 180ms ease, opacity 180ms ease; 2249} 2250.mobile-sticky-checkout-button.is-hidden { 2251 transform: translateY(120%); 2252 opacity: 0; 2253 pointer-events: none; 2254} 2255 2256 2257/* hide the native radio (keep it focusable) */ 2258.productV2ContentPurchaseOptionInput{ 2259 position:absolute; /* or visually-hidden pattern */ 2260 opacity:0; 2261} 2262 2263/* position the icon container on the right */ 2264.productV2ContentPurchaseOptionLabel{ 2265 position:relative; 2266 cursor:pointer; 2267} 2268.radioIcon{ 2269 right:16px; 2270 width:24px; height:24px; 2271 display:inline-block; 2272} 2273 2274/* default: show OFF, hide ON */ 2275.radioIcon__off{ display:block; } 2276.radioIcon__on{ display:none; } 2277 2278/* when checked, flip them */ 2279.productV2ContentPurchaseOptionInput:checked 2280 + .productV2ContentPurchaseOptionLabel .radioIcon__off{ display:none; } 2281.productV2ContentPurchaseOptionInput:checked 2282 + .productV2ContentPurchaseOptionLabel .radioIcon__on{ display:block; } 2283 2284 2285 2286/* Sub card layout (Liquid IV style) */ 2287.sub-card { 2288 display: flex !important; 2289 flex-direction: column; 2290 padding-top: 28px !important; 2291 position: relative; 2292} 2293.sub-card__top { 2294 display: grid; 2295 grid-template-columns: 1fr max-content;
2296 align-items: center; 2297 width: 100%; 2298} 2299.sub-card__perks { 2300 display: flex; 2301 flex-direction: column; 2302 gap: 6px; 2303 margin-top: 12px; 2304 font-size: 13px; 2305 font-family: "Inter", sans-serif; 2306 color: #333; 2307 align-items: flex-start; 2308 width: 100%; 2309} 2310.sub-card__perk { 2311 display: flex; 2312 align-items: center; 2313 gap: 6px; 2314} 2315.sub-card__perk[hidden] { 2316 display: none !important; 2317} 2318 2319.popular-tag-red { 2320 position: absolute; 2321 top: 0px; 2322 right: 0px; 2323 font-size: 13px; 2324 font-weight: 500; 2325 padding: 2px 4px; 2326 border-bottom-left-radius: 4px; 2327 background-color: #FFCAC2; 2328 border-top-right-radius: 8px; 2329} 2330 2331.tag-15-green-desktop { 2332 background-color: #DCF9B8; 2333 font-size: 13px; 2334 padding: 2px 4px; 2335 border-radius: 4px; 2336 margin-left: 6px;" 2337} 2338 2339.tag-15-green-mobile { 2340 display: none; 2341} 2342 2343 2344.productV2ContentPurchaseOptionLabelPricesAndRadio { 2345 display: flex; 2346 font-size: 12px; 2347 gap: 16px; 2348} 2349.productV2ContentPurchaseOptionLabelPricesAndRadioSub { 2350 display: flex; 2351 font-size: 12px; 2352 gap: 16px; 2353} 2354 2355 2356/* Optional: keep content from being covered while visible (only on larger screens) */ 2357@media (min-width: 768px) { 2358 body.has-sticky-cart-space { 2359 padding-bottom: 88px; /* height of sticky footer; adjust to your exact height */ 2360 } 2361} 2362 2363 2364 2365 2366 2367 2368 @media (max-width: 1000px) { 2369 [id="template--22413711704202__section_product_v2_R9fnpP"].productV2 { 2370 padding: 0px 0px 56px; 2371 grid-template-columns: 1fr; 2372 gap: 0; 2373 } 2374 2375 .productV2Layout { 2376 grid-template-columns: 1fr; 2377 gap: 0px; 2378 } 2379 2380 .productV2Visual { 2381 padding: 16px; 2382 background-color: #FFFFFF; 2383 } 2384 2385 .productV2VisualVariantGallery { 2386 display: grid; 2387 grid-template-columns: repeat(4, minmax(0, 1fr)); 2388 gap: 8px; 2389 background-color: #FFFFFF; 2390 padding-top: 12px; 2391 } 2392 2393 img.productV2VisualSwiperSlide { 2394 background-color: #EFEFF1; 2395 } 2396 2397 [id="template--22413711704202__section_product_v2_R9fnpP"].productV2.creatine { 2398 grid-template-columns: 1fr; 2399 } 2400 2401 .productV2VisualNutritionLabelButton { 2402 display: none; 2403 } 2404 2405 .productV2VisualSwiper { 2406 } 2407 2408 .productV2Content { 2409 padding: 0 16px; 2410 } 2411 2412 .productV2ContentTitle { 2413 display: none; 2414 } 2415 2416 .productV2ContentReviews { 2417 display: none; 2418 } 2419 2420 .productV2ReviewsMobile { 2421 display: block; 2422 padding-left: 16px; 2423 } 2424 2425 .productV2TitleMobile { 2426 display: block; 2427 } 2428 2429 .productV2ContentDescription { 2430 display: none; 2431 } 2432 2433 .productV2ContentShortDesc { 2434 display: none; 2435 } 2436 2437 .productV2ShortDescMobile { 2438 display: block; 2439 font-family: "Inter", sans-serif; 2440 font-size: 14px; 2441 line-height: 1.5; 2442 color: #6B7280; 2443 margin: 8px 16px 12px; 2444 } 2445 2446 .productV2ContentOptions { 2447 margin-bottom: 24px; 2448 2449 } 2450 2451 .productV2ContentPurchaseOptions { 2452 margin-bottom: 24px; 2453 } 2454 2455 .productV2ContentPurchaseOptionLabel { 2456 column-gap: 10px; 2457 flex-wrap: nowrap; 2458 } 2459 2460 .productV2ContentPurchaseOptionLabelName { 2461 font-size: 16px; 2462 display: flex; 2463 } 2464 2465 .productV2ContentAtcButton { 2466 /* visible on mobile as fallback â sticky bar is primary */ 2467 } 2468 2469 .productV2ContentDescriptionMobile { 2470 2471 } 2472 2473 .productV2ContentNutritionLabelButtonMobile { 2474 2475 } 2476 2477 .productV2.energy .productV2Visual { 2478 order: 1; 2479 } 2480 2481 .productV2.energy .productV2TitleMobile { 2482 order: 2; 2483 } 2484 2485 .productV2.energy .productV2ReviewsMobile { 2486 order: 3; 2487 } 2488 2489 .productV2.energy .productV2ShortDescMobile { 2490 order: 4; 2491 } 2492 2493 .productV2.energy .productV2Content { 2494 order: 5; 2495 } 2496 2497 .productV2VisualDescriptionDesktop { 2498 display: none; 2499 } 2500 2501 .productV2VisualDescriptionMobile { 2502 display: block; 2503 } 2504 2505 .sticky-cart-footer { 2506 display: none; 2507 } 2508 2509 #mobile-sticky-checkout-container { 2510 display: block; 2511 position: fixed; 2512 bottom: 0px; 2513 z-index: 64; 2514 padding: 8px; 2515 width: 100%; 2516 } 2517 2518 .popular-tag-red { 2519 position: absolute; 2520 top: 0px; 2521 left: 0px; 2522 font-size: 13px; 2523 font-weight: 500; 2524 padding: 2px 4px; 2525 border-bottom-right-radius: 4px; 2526 background-color: #FFCAC2; 2527 border-top-left-radius: 8px; 2528 width: max-content; 2529 border-top-right-radius: 0px; 2530 } 2531 2532 .tag-15-green-desktop { 2533 display: none; 2534 } 2535 .tag-15-green-mobile { 2536 display: block; 2537 background-color: #DCF9B8; 2538 font-size: 13px; 2539 padding: 2px 4px; 2540 border-radius: 4px; 2541 margin-left: 6px;" 2542 width: max-content; 2543 } 2544 2545 .productV2ContentPurchaseOptionLabel { 2546 padding-right: 0px; 2547 padding: 32px 18px 32px 18px; 2548 font-size: 16px; 2549 } 2550 2551 .productV2ContentPurchaseOptionLabelPricesPerStick { 2552 font-size: 11px; 2553 grid-column: 1 / -1; 2554 text-align: right; 2555 } 2556 .productV2ContentPurchaseOptionLabelPricesReal { 2557 font-size: 14px; 2558 } 2559 .productV2ContentPurchaseOptionLabelPricesCompare { 2560 font-size: 14px; 2561 } 2562 .productV2ContentPurchaseOptionLabelName { 2563 font-size: 14px; 2564 } 2565 .productV2ContentPurchaseOptionLabelPrices { 2566 column-gap: 6px; 2567 } 2568 2569 .productV2ContentPurchaseOptionLabelPricesAndRadio { 2570 display: flex; 2571 font-size: 12px; 2572 gap: 8px; 2573 } 2574 .productV2ContentPurchaseOptionLabelPricesAndRadioSub { 2575 display: flex; 2576 font-size: 12px; 2577 gap: 8px; 2578 } 2579 2580 .productV2VisualSwiper .swiper-wrapper img { height: 398px; } 2581 } 2582 2583 2584 2585 2586 2587/* --- Mobile 3-up thumbnail carousel --- */ 2588.pdpv2-mobile-thumb-carousel { 2589 display: none; /* default hidden on desktop */ 2590 align-items: center; 2591 gap: 8px; 2592 padding-top: 12px; 2593 background: #fff; 2594} 2595.pdpv2-thumb-btn { 2596 border: 0; 2597 background: #EFEFF1; 2598 width: 42px; height: 42px; 2599 border-radius: 999px; 2600 display: inline-flex; align-items: center; justify-content: center; 2601} 2602.pdpv2-thumb-viewport { 2603 display: grid; 2604 grid-template-columns: repeat(3, 1fr); 2605 gap: 8px; 2606 list-style: none; padding: 0; margin: 0; width: 80%; 2607} 2608.pdpv2-thumb-viewport li { 2609 position: relative; 2610 background-color: #EFEFF1; 2611 align-content: center; 2612} 2613.pdpv2-thumb-viewport img { 2614 display: block; width: 100%; height: auto; border-radius: 6px; background:#EFEFF1; 2615} 2616.pdpv2-thumb-viewport li.is-selected::after {
2617 content: ""; position: absolute; inset: 0; 2618 border: 2px solid #6C6C6C; border-radius: 6px; pointer-events: none; 2619} 2620 2621/* Show our mobile carousel and hide the old grid only on mobile */ 2622@media (max-width: 1000px) { 2623 .productV2VisualVariantGallery { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; padding-top: 12px; } /* 4-up grid on mobile */ 2624 .pdpv2-mobile-thumb-carousel { display: none !important; } /* carousel off on mobile */ 2625} 2626 2627 2628/* Trust strip */ 2629.pdp-trust-strip { 2630 display: flex; 2631 align-items: center; 2632 justify-content: center; 2633 gap: 16px; 2634 padding: 16px 0 8px; 2635 font-family: "DM Sans", sans-serif; 2636 font-size: 13px; 2637 font-weight: 500; 2638 color: #6E6E6E; 2639 flex-wrap: wrap; 2640} 2641 2642.pdp-trust-strip__item { 2643 display: flex; 2644 align-items: center; 2645 gap: 5px; 2646 white-space: nowrap; 2647} 2648 2649.pdp-trust-strip__sep { 2650 color: #D0D0D0; 2651 font-size: 10px; 2652} 2653 2654.pdp-trust-strip__cancel { 2655 display: none; 2656 text-align: center; 2657 font-family: "DM Sans", sans-serif; 2658 font-size: 13px; 2659 color: #6E6E6E; 2660 padding-top: 8px; 2661} 2662 2663@media (max-width: 1000px) { 2664 .pdp-trust-strip { 2665 gap: 12px; 2666 font-size: 12px; 2667 justify-content: center; 2668 } 2669 .pdp-trust-strip__sep { 2670 display: none; 2671 } 2672} 2673 2674 2675/* âââââââââââ PDP ÃSKRIFT PANEL (pdp-sub) âââââââââââ */ 2676.productV2ContentPurchaseOption.subscription { position: relative; } /* re-added (old .subscription opacity/pointer-events rule deleted) */ 2677 2678/* Collapse primitive: grid-template-rows 0fr â 1fr animates to the intrinsic height without 2679 measuring. The inner element MUST be min-height:0 + overflow:hidden. visibility is delayed on 2680 close so nothing inside is tabbable/tappable while collapsed. Safari <16 / Chrome <107 snap. */ 2681.pdp-sub__collapse { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 320ms cubic-bezier(.2,.7,.2,1); } 2682.pdp-sub__collapse > .pdp-sub__inner { 2683 min-height: 0; overflow: hidden; visibility: hidden; opacity: 0; transform: translateY(-6px); 2684 transition: visibility 0s linear 320ms, opacity 200ms ease, transform 320ms cubic-bezier(.2,.7,.2,1); 2685} 2686.pdp-sub__collapse.is-open { grid-template-rows: 1fr; } 2687.pdp-sub__collapse.is-open > .pdp-sub__inner { visibility: visible; opacity: 1; transform: none; transition-delay: 0s, 40ms, 0s; } 2688 2689/* Magn wrapper: open by default, collapses in Ãskrift mode (JS removes .is-open) */ 2690.pdp-sub__magn > .pdp-sub__inner { transform: none; } 2691/* The wrapper is a grid box + BFC, so the fieldset's own 12px margins no longer collapse with its 2692 neighbours. TOP: the Bragð fieldset's 12px bottom margin already supplies the gap â 0. BOTTOM: live 2693 collapsed the fieldset's 12px through .productV2ContentOptions (no desktop margin) to reach the "Kaupa" 2694 legend, so keep 12px INSIDE the collapsing box â restored in Stök mode, gone with Magn in Ãskrift mode. 2695 â¤1000px: .productV2ContentOptions { margin-bottom: 24px } supplies the bottom gap exactly as live 2696 (max(12,24) = 24) â bottom 0 there; the 4px top keeps the snippet's :not(:last-of-type) 16-vs-12 spacing. */ 2697.pdp-sub__magn .productV2ContentOption.size { margin-top: 0; margin-bottom: 12px; } 2698 2699/* Card â panel attachment. The card keeps its 1px black frame; its bottom edge turns grey and 2700 square while open so card + body read as one box with a thin divider (r8iant). */ 2701.sub-card { transition: border-radius 200ms ease, border-color 200ms ease; } 2702.productV2.pdp-sub--open .productV2ContentPurchaseOptionInput[value="subscription"]:checked + .sub-card { 2703 border-bottom-left-radius: 0; border-bottom-right-radius: 0; border-bottom-color: #E6E6E6; 2704} 2705.pdp-sub__body { 2706 border: 1px solid #000; border-top: 0; border-radius: 0 0 8px 8px; background: #FFF; 2707 padding: 16px 20px 18px; display: flex; flex-direction: column; gap: 14px; 2708 font-family: "Inter", sans-serif; color: #1F1F1F; 2709} 2710.pdp-sub__head { display: flex; flex-direction: column; gap: 2px; min-width: 0; } 2711.pdp-sub__hint { font-size: 12px; color: #6E6E6E; font-family: "Inter", sans-serif; } 2712 2713/* Headings / note / counter / status */ 2714.pdp-sub__heading { font-family: "DM Sans", sans-serif; font-weight: 600; font-size: 15px; color: #333; margin: 0; } 2715.pdp-sub__note { font-size: 12px; color: #6B7280; margin: -6px 0 0; } 2716.pdp-sub__rows-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; } 2717.pdp-sub__counter { font-size: 12px; color: #6E6E6E; white-space: nowrap; } 2718.pdp-sub__counter.is-short { color: #A02100; font-weight: 600; } 2719.pdp-sub__status { font-size: 12px; color: #333; min-height: 16px; margin: -8px 0 0; transition: opacity 200ms ease; } 2720.pdp-sub__status:empty { opacity: 0; } 2721.pdp-sub__status.is-warn { color: #A02100; } 2722.pdp-sub__status button { all: unset; text-decoration: underline; text-underline-offset: 2px; cursor: pointer; color: #1F1F1F; margin-left: 6px; font: inherit; } 2723 2724/* Tier chips */ 2725.pdp-sub__tiers { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; padding-top: 8px; } 2726.pdp-sub__tiers[data-count="4"] { grid-template-columns: repeat(4, 1fr); } /* creatine 1/2/3/4 */ 2727.pdp-sub__tier { 2728 position: relative; background: #F5F5F5; border: 1px solid transparent; border-radius: 8px; 2729 padding: 14px 8px 12px; text-align: center; cursor: pointer; font-family: "Inter", sans-serif; 2730 display: flex; flex-direction: column; align-items: center; gap: 2px; color: #1F1F1F; 2731 transition: background 150ms ease, border-color 150ms ease; 2732} 2733.pdp-sub__tier.is-selected { background: #FFF; border-color: #000; } 2734.pdp-sub__tier-n { font-size: 22px; font-weight: 700; line-height: 1; } 2735.pdp-sub__tier-unit { font-size: 12px; color: #333; } 2736.pdp-sub__tier-sticks { font-size: 11px; color: #6E6E6E; } 2737.pdp-sub__tier-pill { margin-top: 6px; font-size: 12px; font-weight: 500; background: #DCF9B8; border-radius: 4px; padding: 2px 6px; } 2738.pdp-sub__tier-gift { font-size: 11px; color: #333; } 2739.pdp-sub__tier-badge { 2740 position: absolute; top: -9px; left: 50%; transform: translateX(-50%); white-space: nowrap; 2741 font-size: 11px; font-weight: 500; background: #FFCAC2; padding: 1px 6px; border-radius: 4px; 2742} 2743.pdp-sub__tier-badge.is-best { background: #D4EDFF; } /* Magn snippet's .best-deal blue (JS toggles per schedule, not per index) */ 2744@keyframes pdp-sub-pop { 0% { transform: scale(1); } 45% { transform: scale(1.06); } 100% { transform: scale(1); } } 2745.pdp-sub__tier--pop { animation: pdp-sub-pop 360ms ease; } 2746 2747/* Savings hero */ 2748.pdp-sub__hero { display: flex; flex-direction: column; gap: 6px; padding: 12px 14px; background: #F5F5F5; border-radius: 8px; } 2749.pdp-sub__hero-row { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; } 2750.pdp-sub__hero-label { font-size: 14px; color: #333; } 2751.pdp-sub__hero-amount b { font-size: 22px; font-weight: 700; letter-spacing: -.3px; } 2752.pdp-sub__hero-amount small, .pdp-sub__hero-prices small { font-size: 13px; color: #6E6E6E; margin-left: 2px; } 2753.pdp-sub__pct { margin-left: auto; font-size: 13px; font-weight: 600; background: #DCF9B8; border-radius: 4px; padding: 2px 6px; transition: background 300ms ease; } 2754.pdp-sub__pct.is-flash { background: #B9F27E; } 2755.pdp-sub__hero-prices { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; font-size: 15px; } 2756.pdp-sub__hero-prices s { color: #6E6E6E; } 2757.pdp-sub__hero-prices strong { font-weight: 600; } 2758.pdp-sub__hero-stick { font-size: 12px; color: #6E6E6E; } 2759.pdp-sub__meter { display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px; margin-top: 4px; } 2760.pdp-sub__seg { height: 6px; border-radius: 999px; background: #E6E6E6; position: relative; overflow: hidden; } 2761.pdp-sub__seg::after { content: ""; position: absolute; inset: 0; background: #44d62c; transform: scaleX(0); transform-origin: left; transition: transform 320ms cubic-bezier(.2,.7,.2,1); } 2762.pdp-sub__seg.is-on::after { transform: scaleX(1); } 2763.pdp-sub__meter-labels { display: grid; grid-template-columns: repeat(3, 1fr); font-size: 11px; color: #6E6E6E; text-align: center; } 2764.pdp-sub__meter-labels span.is-on { color: #1F1F1F; font-weight: 600; } 2765.pdp-sub__meter-labels i { font-style: normal; } 2766.pdp-sub__meter[hidden], .pdp-sub__meter-labels[hidden] { display: none; } /* flat schedule (creatine): the class display:grid would beat the UA [hidden] rule */ 2767.pdp-sub__nudge { all: unset; align-self: flex-start; cursor: pointer; font-size: 13px; color: #1F1F1F; text-decoration: underline; text-underline-offset: 2px; margin-top: 2px; font-family: "Inter", sans-serif; } 2768.pdp-sub__nudge:disabled { text-decoration: none; color: #087045; cursor: default; } 2769 2770/* Flavour rows + steppers */ 2771.pdp-sub__rows { display: flex; flex-direction: column; border-top: 1px solid #E6E6E6; } 2772.pdp-sub__row { display: grid; grid-template-columns: 44px minmax(0, 1fr) auto; gap: 12px; align-items: center; padding: 10px 0; border-bottom: 1px solid #E6E6E6; } 2773.pdp-sub__thumb { width: 44px; height: 44px; border-radius: 6px; background: #F5F5F5; box-shadow: inset 3px 0 0 var(--accent, #E6E6E6); overflow: hidden; } 2774.pdp-sub__thumb img { width: 100%; height: 100%; object-fit: contain; display: block; } 2775.pdp-sub__row-main { min-width: 0; } 2776.pdp-sub__row-name { font-size: 14px; font-weight: 500; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } 2777.pdp-sub__row.is-active .pdp-sub__row-name::after { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--accent, #1F1F1F); } 2778.pdp-sub__row-meta { font-size: 12px; color: #6E6E6E; display: flex; gap: 8px; flex-wrap: wrap; } 2779.pdp-sub__row-price { color: #1F1F1F; font-weight: 600; } 2780.pdp-sub__row-price s { color: #6E6E6E; font-weight: 400; margin-right: 4px; } 2781.pdp-sub__stepper { display: inline-flex; align-items: center; gap: 6px; } 2782.pdp-sub__step { 2783 width: 40px; height: 40px; border-radius: 999px; border: 1px solid #D0D0D0; background: #FFF; 2784 font-size: 18px; line-height: 1; cursor: pointer; font-family: "Inter", sans-serif; color: #1F1F1F; 2785 display: inline-flex; align-items: center; justify-content: center; padding: 0; 2786 transition: background 120ms ease, border-color 120ms ease, color 120ms ease; 2787} 2788.pdp-sub__step:hover:not(:disabled):not([aria-disabled="true"]) { background: #1F1F1F; color: #FFF; border-color: #1F1F1F; } 2789.pdp-sub__step:disabled, .pdp-sub__step[aria-disabled="true"] { opacity: .35;
2789 cursor: not-allowed; } 2790.pdp-sub__count { min-width: 22px; text-align: center; font-size: 16px; font-weight: 700; font-variant-numeric: tabular-nums; color: #6E6E6E; } /* 5.1:1 on white */ 2791.pdp-sub__row.has-qty .pdp-sub__count { color: #1F1F1F; } 2792.pdp-sub__row.is-soldout .pdp-sub__thumb, .pdp-sub__row.is-soldout .pdp-sub__row-meta { opacity: .45; } 2793.pdp-sub__soldout { font-size: 11px; font-weight: 600; background: #FFD6CC; color: #A02100; border-radius: 12px; padding: 2px 6px; font-family: "DM Sans", sans-serif; } 2794.pdp-sub__soldout[hidden] { display: none; } 2795.pdp-sub--single .pdp-sub__step { display: none; } 2796.pdp-sub--single .pdp-sub__count { font-size: 14px; color: #1F1F1F; } 2797 2798/* Gift row (6/9) */ 2799.pdp-sub__gift-wrap > .pdp-sub__inner { transform: none; } 2800/* Collapsed, the wrapper is a zero-height flex item that would still consume BOTH body gaps (a 28px void 2801 between the status line and "Sent" at tier 3). Cancel one gap while closed; animate it with the collapse. */ 2802.pdp-sub__gift-wrap { margin-top: -14px; transition: grid-template-rows 320ms cubic-bezier(.2,.7,.2,1), margin-top 320ms cubic-bezier(.2,.7,.2,1); } 2803.pdp-sub__gift-wrap.is-open { margin-top: 0; } 2804.pdp-sub__gift { display: grid; grid-template-columns: 48px 1fr auto; gap: 12px; align-items: center; background: #F5F5F5; border-radius: 8px; padding: 10px 12px; } 2805.pdp-sub__gift-img { width: 48px; height: 48px; object-fit: contain; } 2806.pdp-sub__gift-kicker { font-size: 11px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: #087045; } /* 5.6:1 on #F5F5F5 */ 2807.pdp-sub__gift-name { font-size: 14px; font-weight: 600; } 2808.pdp-sub__gift-sub { font-size: 12px; color: #6E6E6E; } 2809.pdp-sub__gift-price { text-align: right; font-size: 13px; } 2810.pdp-sub__gift-price s { display: block; color: #6E6E6E; } 2811.pdp-sub__gift-price strong { color: #087045; } 2812 2813/* Frequency + builder link */ 2814.pdp-sub__freq-wrap { display: flex; align-items: center; gap: 10px; font-size: 13px; color: #333; } 2815.pdp-sub__freq { 2816 appearance: none; -webkit-appearance: none; border: 1px solid #D0D0D0; border-radius: 999px; 2817 background: #FFF url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'><path d='M1 1.5L6 6.5L11 1.5' stroke='%23333' stroke-width='2' stroke-linecap='round'/></svg>") no-repeat right 12px center; 2818 padding: 8px 32px 8px 14px; font: 500 13px "Inter", sans-serif; color: #333; cursor: pointer; 2819} 2820.pdp-sub__more { font-size: 12px; color: #6E6E6E; text-decoration: underline; text-underline-offset: 2px; align-self: flex-start; } 2821 2822/* CTA area */ 2823.pdp-sub__trust { display: flex; align-items: flex-start; justify-content: center; gap: 6px; font-family: "Inter", sans-serif; font-size: 12px; line-height: 1.4; color: #6E6E6E; margin: 10px 0 0; } 2824.pdp-sub__trust svg { flex: none; margin-top: 3px; } /* the icon never wraps onto its own line (390px); the text wraps beside it */ 2825.pdp-sub__trust span { min-width: 0; } 2826.pdp-sub__trust[hidden] { display: none; } 2827/* Inline <svg> is not an HTMLElement: the UA [hidden] rule is HTML-namespaced, so pin it here. */ 2828[data-pdp-sub="cart-icon"][hidden] { display: none !important; } 2829.productV2.pdp-sub--open .productV2ContentAtcButtonStickyCart { width: auto; min-width: 260px; } 2830 2831/* Focus */ 2832.pdp-sub__tier:focus-visible, .pdp-sub__step:focus-visible, .pdp-sub__nudge:focus-visible, 2833.pdp-sub__freq:focus-visible, .pdp-sub__more:focus-visible, .pdp-sub__status button:focus-visible { outline: 2px solid #1F1F1F; outline-offset: 2px; } 2834 2835/* 4-chip schedule (creatine): a one-line "20% afsláttur" pill (Inter 500 12px â 90px + 16px chip padding) needs 2836 chips ⥠~108px, i.e. a content column ⥠~500px. The column is min(638, (vw - 80) / 2), so 4-up only fits from 2837 ~1080px (measured headless, Inter loaded) â 2Ã2 up to 1100px, which also covers mobile (four pills never fit at 390px). */ 2838@media (max-width: 1100px) { 2839 .pdp-sub__tiers[data-count="4"] { grid-template-columns: repeat(2, 1fr); } 2840} 2841/* Mobile (the section's breakpoint) */ 2842@media (max-width: 1000px) { 2843 .pdp-sub__magn .productV2ContentOption.size { margin-top: 4px; margin-bottom: 0; } 2844 .pdp-sub__body { padding: 14px 14px 16px; gap: 12px; } 2845 .pdp-sub__tier { padding: 12px 4px 10px; } 2846 .pdp-sub__tier-n { font-size: 20px; } 2847 .pdp-sub__tier-badge { font-size: 10px; } 2848 .pdp-sub__hero { padding: 10px 12px; } 2849 .pdp-sub__hero-amount b { font-size: 20px; } 2850 .pdp-sub__row { grid-template-columns: 40px minmax(0, 1fr) auto; gap: 10px; } 2851 .pdp-sub__thumb { width: 40px; height: 40px; } 2852 .pdp-sub__step { width: 44px; height: 44px; } 2853 .pdp-sub__meter-labels { font-size: 10px; } 2854 .pdp-sub__gift { grid-template-columns: 44px 1fr; } 2855 .pdp-sub__gift-img { width: 44px; height: 44px; } 2856 .pdp-sub__gift-price { grid-column: 2; text-align: left; } 2857 .pdp-sub__gift-price s { display: inline; margin-right: 6px; } 2858 .pdp-sub__gift-wrap { margin-top: -12px; } 2859 .pdp-sub__gift-wrap.is-open { margin-top: 0; } 2860 .pdp-sub__hint { font-size: 11px; } 2861 .pdp-sub__freq { font-size: 16px; padding: 7px 30px 7px 12px; } /* < 16px makes iOS Safari zoom the page on focus */ 2862} 2863@media (max-width: 390px) { 2864 .pdp-sub__tier-sticks { display: none; } 2865 .pdp-sub__tier-pill { font-size: 11px; } 2866 .pdp-sub__step { width: 42px; height: 42px; } 2867} 2868@media (prefers-reduced-motion: reduce) { 2869 .pdp-sub__collapse, .pdp-sub__collapse > .pdp-sub__inner, .sub-card, .pdp-sub__seg::after, .pdp-sub__pct, .pdp-sub__tier { transition: none !important; } 2870 .pdp-sub__tier--pop { animation: none !important; } 2871} 2872 2873</style> 2874 2875
2876<script type="application/json" id="pdp-sub-stock-template--22413711704202__section_product_v2_R9fnpP">{"HAP-1001":true,"HAP-1002":false,"HAP-1003":false,"HAP-1004":true,"HAP-1005":true,"HAP-1011":true}</script>
vendor: 1 bytes, line 2876
2876
2877<script type="application/json" id="pdp-forced-soldout-template--22413711704202__section_product_v2_R9fnpP">{"skus":["HAP-1002"],"names":["Mixed Berries"]}</script>
2877 2878 2879<section id="template--22413711704202__section_product_v2_R9fnpP" class="productV2 " data-pdp-sub-category="hydration" data-initial-variant-id="50050860744842"> 2880 2881 <div class="sticky-cart-sentinel" aria-hidden="true"></div> 2882 2883 <div class="sticky-cart-footer"> 2884 2885 <div class="sticky-cart-footer-product"> 2886 <div class="sticky-cart-wrapper"> 2887 2888<img 2889 id="sticky-variant-image" 2890 class="productV2VisualStickyCart" 2891 src="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=200" 2892 alt="Hydration Xpress" 2893 width="1240" 2894 height="1240" 2895 loading="eager" 2896 decoding="async"></div> 2897 2898 2899 <div class="sticky-cart-footer-product-name"> 2900 <div>Hydration Xpress</div> 2901 2902 2903 2904 2905 2906 2907 2908<span class="sep"> - </span> 2909 <div id="sticky-variant-flavour" data-flavour-index="0"> 2910 Strawberry Lemonade 2911 </div></div> 2912 2913<div class="sticky-cart-footer-product-quantity" data-quantity-index="1"> 2914 2915 30 stikur 2916 2917 </div> 2918 2919 2920 </div> 2921 2922 <button class="productV2ContentAtcButtonStickyCart" data-pdp-sub="cta"> 2923 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="25" viewBox="0 0 24 25" fill="none" data-pdp-sub="cart-icon"> 2924 <path d="M20.2131 13.0482H7.24196L5.65625 5.11963H21.5133C21.6294 5.12006 21.7438 5.1459 21.8487 5.19538C21.9535 5.24484 22.0463 5.31672 22.1204 5.40593C22.1946 5.49513 22.2482 5.59951 22.2775 5.71169C22.3068 5.82388 22.3113 5.94112 22.2903 6.0552L20.9901 12.3981C20.9598 12.5814 20.8646 12.7479 20.7221 12.8672C20.5795 12.9865 20.3989 13.0507 20.2131 13.0482Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2925 <path d="M5.65959 5.11918L4.99359 2.58204C4.95704 2.40296 4.85973 2.242 4.71814 2.12641C4.57655 2.01083 4.39938 1.94772 4.21659 1.94775H1.69531" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2926 <path d="M7.25 13.0493L7.916 16.3793C7.95257 16.5584 8.04987 16.7194 8.19145 16.8349C8.33304 16.9505 8.51023 17.0136 8.693 17.0136H18.3501" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2927 <path d="M17.5585 22.5647C17.1205 22.5647 16.7656 22.2097 16.7656 21.7719C16.7656 21.334 17.1205 20.979 17.5585 20.979C17.9963 20.979 18.3513 21.334 18.3513 21.7719C18.3513 22.2097 17.9963 22.5647 17.5585 22.5647Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2928 <path d="M9.62098 22.5647C9.1831 22.5647 8.82812 22.2097 8.82812 21.7719C8.82812 21.334 9.1831 20.979 9.62098 20.979C10.0589 20.979 10.4138 21.334 10.4138 21.7719C10.4138 22.2097 10.0589 22.5647 9.62098 22.5647Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2929 </svg> 2930 <span> 2931 <span class="productV2ContentAtcButtonLabel"> 2932 Bæta við körfu 2933 </span> 2934 <span class="sep" data-pdp-sub="sep"> · </span><span id="sticky-atc-price" 2935 data-otp="5,985 kr"> 2936 5,985 kr 2937 </span> 2938 </span> 2939 2940 </button> 2941 2942 </div> 2943 2944 2945 <div class="productV2Layout"> 2946 2947 <div class="productV2Visual"> 2948 <div class="productV2VisualSwiper swiper"><div class="productV2VisualSwiperNewTag" 2949 > 2950 Nýtt 2951 </div> 2952 <div class="productV2VisualSwiperLimitedTag" 2953 hidden> 2954 Limited 2955 </div> 2956 2957 2958 2959 <div class="productV2VisualSwiperDiscountTag" hidden> 2960 0% afsláttur 2961 </div> 2962 <div class="swiper-wrapper" style="align-items: center; background-color: #EFEFF1"> 2963 2964 2965 <img 2966 id="42378071343242" 2967 class="productV2VisualSwiperSlide swiper-slide" 2968 src="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=1200" 2969 srcset="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=600 600w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=900 900w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=1200 1200w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=1600 1600w" 2970 sizes="(max-width: 768px) 100vw, 50vw" 2971 alt="Hydration Xpress" 2972 width="1240" 2973 height="1240" 2974 decoding="async" 2975 2976 loading="eager" fetchpriority="high" 2977 2978 > 2979 2980 2981 2982 2983 2984 <img 2985 id="42378071376010" 2986 class="productV2VisualSwiperSlide swiper-slide" 2987 src="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496&width=1200" 2988 srcset="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496&width=600 600w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496&width=900 900w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496&width=1200 1200w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496&width=1600 1600w" 2989 sizes="(max-width: 768px) 100vw, 50vw" 2990 alt="Hydration Xpress" 2991 width="1240" 2992 height="1240" 2993 decoding="async" 2994 2995 loading="lazy" 2996 2997 > 2998 2999 3000 3001 <img 3002 id="42378071408778" 3003 class="productV2VisualSwiperSlide swiper-slide" 3004 src="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496&width=1200" 3005 srcset="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496&width=600 600w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496&width=900 900w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496&width=1200 1200w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496&width=1600 1600w" 3006 sizes="(max-width: 768px) 100vw, 50vw" 3007 alt="Hydration Xpress" 3008 width="1240" 3009 height="1240" 3010 decoding="async" 3011 3012 loading="lazy" 3013 3014 > 3015 3016 3017 3018 <img 3019 id="42378071441546" 3020 class="productV2VisualSwiperSlide swiper-slide" 3021 src="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496&width=1200" 3022 srcset="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496&width=600 600w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496&width=900 900w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496&width=1200 1200w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496&width=1600 1600w" 3023 sizes="(max-width: 768px) 100vw, 50vw" 3024 alt="Hydration Xpress" 3025 width="1240" 3026 height="1240" 3027 decoding="async" 3028 3029 loading="lazy" 3030 3031 > 3032 3033 3034 3035 <img 3036 id="42378071474314" 3037 class="productV2VisualSwiperSlide swiper-slide" 3038 src="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496&width=1200" 3039 srcset="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496&width=600 600w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496&width=900 900w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496&width=1200 1200w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496&width=1600 1600w" 3040 sizes="(max-width: 768px) 100vw, 50vw" 3041 alt="Hydration Xpress" 3042 width="1240" 3043 height="1240" 3044 decoding="async" 3045 3046 loading="lazy" 3047 3048 > 3049 3050 3051 3052 <img 3053 id="42378071507082" 3054 class="productV2VisualSwiperSlide swiper-slide" 3055 src="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496&width=1200" 3056 srcset="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496&width=600 600w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496&width=900 900w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496&width=1200 1200w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496&width=1600 1600w" 3057 sizes="(max-width: 768px) 100vw, 50vw" 3058 alt="Hydration Xpress" 3059 width="1240" 3060 height="1240" 3061 decoding="async" 3062 3063 loading="lazy" 3064 3065 > 3066 3067 3068 </div> 3069 </div> 3070 3071 <div class="productV2VisualVariantGallery"> 3072 3073 3074<img 3075 src="//happyhydrate.is/cdn/shop/files/StrawberryNewPhoto.jpg?v=3654342356135137426" 3076 alt="" 3077 loading="lazy" 3078 style="display:block;max-width:100%;height:auto;" 3079 ></div> 3080 3081 <!-- MOBILE: 3-up thumbnail carousel with chevrons --> 3082 <div class="pdpv2-mobile-thumb-carousel" aria-label="Product images" hidden> 3083 <button class="pdpv2-thumb-btn pdpv2-thumb-btn--prev" t
3083ype="button" aria-label="Previous image" tabindex="0"> 3084 <!-- left chevron --> 3085 <svg xmlns="http://www.w3.org/2000/svg" width="7" height="10" viewBox="0 0 7 10" fill="none"> 3086 <path d="M5.78918 0.707031L1.41418 5.08203L5.78918 9.45703" stroke="#262626" stroke-width="2"/> 3087 </svg> 3088 </button> 3089 3090 <ul class="pdpv2-thumb-viewport" role="list"> 3091 <!-- JS will inject exactly 3 <li> at a time --> 3092 </ul> 3093 3094 <button class="pdpv2-thumb-btn pdpv2-thumb-btn--next" type="button" aria-label="Next image" tabindex="0"> 3095 <!-- right chevron --> 3096 <svg xmlns="http://www.w3.org/2000/svg" width="7" height="10" viewBox="0 0 7 10" fill="none"> 3097 <path d="M0.707153 0.707031L5.08215 5.08203L0.707153 9.45703" stroke="#262626" stroke-width="2"/> 3098 </svg> 3099 </button> 3100 </div> 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111
3111<script type="application/json" id="variant-flags-template--22413711704202__section_product_v2_R9fnpP"> 3112 { 3113 3114 "50050860712074": { 3115 "freeShipping": false, 3116 "isNew": true, 3117 "isLimited": false, 3118 "discountPercentage": false, 3119 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/Box_StrawberryLemonade.jpg?v=1787073402\u0026width=1600", 3120 "perStickCents": 199.0 3121 }, 3122 3123 "50050860744842": { 3124 "freeShipping": false, 3125 "isNew": true, 3126 "isLimited": false, 3127 "discountPercentage": false, 3128 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/Box_StrawberryLemonade.jpg?v=1787073402\u0026width=1600", 3129 "perStickCents": 199.0 3130 }, 3131 3132 "50050860777610": { 3133 "freeShipping": true, 3134 "isNew": true, 3135 "isLimited": false, 3136 "discountPercentage": false, 3137 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/Box_StrawberryLemonade.jpg?v=1787073402\u0026width=1600", 3138 "perStickCents": 199.0 3139 }, 3140 3141 "50050860810378": { 3142 "freeShipping": true, 3143 "isNew": true, 3144 "isLimited": false, 3145 "discountPercentage": false, 3146 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/Box_StrawberryLemonade.jpg?v=1787073402\u0026width=1600", 3147 "perStickCents": 170.0 3148 }, 3149 3150 "44751436906634": { 3151 "freeShipping": false, 3152 "isNew": false, 3153 "isLimited": false, 3154 "discountPercentage": false, 3155 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/Hydration_Pina_Colada_innihaldslysing.png?v=1759347931\u0026width=1600", 3156 "perStickCents": 199.0 3157 }, 3158 3159 "44751436939402": { 3160 "freeShipping": false, 3161 "isNew": false, 3162 "isLimited": false, 3163 "discountPercentage": false, 3164 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/Hydration_Pina_Colada_innihaldslysing.png?v=1759347931\u0026width=1600", 3165 "perStickCents": 199.0 3166 }, 3167 3168 "44751436972170": { 3169 "freeShipping": true, 3170 "isNew": false, 3171 "isLimited": false, 3172 "discountPercentage": false, 3173 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/Hydration_Pina_Colada_innihaldslysing.png?v=1759347931\u0026width=1600", 3174 "perStickCents": 199.0 3175 }, 3176 3177 "44751437004938": { 3178 "freeShipping": false, 3179 "isNew": false, 3180 "isLimited": false, 3181 "discountPercentage": false, 3182 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/Hydration_Pina_Colada_innihaldslysing.png?v=1759347931\u0026width=1600", 3183 "perStickCents": 170.0 3184 }, 3185 3186 "44751437037706": { 3187 "freeShipping": false, 3188 "isNew": false, 3189 "isLimited": false, 3190 "discountPercentage": false, 3191 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/MB_INNIHALD.png?v=1776255722\u0026width=1600", 3192 "perStickCents": 199.0 3193 }, 3194 3195 "44751437070474": { 3196 "freeShipping": false, 3197 "isNew": false, 3198 "isLimited": false, 3199 "discountPercentage": false, 3200 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/MB_INNIHALD.png?v=1776255722\u0026width=1600", 3201 "perStickCents": 199.0 3202 }, 3203 3204 "44751437103242": { 3205 "freeShipping": true, 3206 "isNew": false, 3207 "isLimited": false, 3208 "discountPercentage": false, 3209 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/MB_INNIHALD.png?v=1776255722\u0026width=1600", 3210 "perStickCents": 199.0 3211 }, 3212 3213 "44751437136010": { 3214 "freeShipping": true, 3215 "isNew": false, 3216 "isLimited": false, 3217 "discountPercentage": false, 3218 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/Hydration_mixed_berries_inni
3218haldslysing.png?v=1759347931\u0026width=1600", 3219 "perStickCents": 170.0 3220 }, 3221 3222 "44751437168778": { 3223 "freeShipping": false, 3224 "isNew": false, 3225 "isLimited": false, 3226 "discountPercentage": false, 3227 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/LL_INNIHALD.png?v=1776255645\u0026width=1600", 3228 "perStickCents": 199.0 3229 }, 3230 3231 "44751437201546": { 3232 "freeShipping": false, 3233 "isNew": false, 3234 "isLimited": false, 3235 "discountPercentage": false, 3236 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/LL_INNIHALD.png?v=1776255645\u0026width=1600", 3237 "perStickCents": 199.0 3238 }, 3239 3240 "44751437234314": { 3241 "freeShipping": true, 3242 "isNew": false, 3243 "isLimited": false, 3244 "discountPercentage": false, 3245 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/LL_INNIHALD.png?v=1776255645\u0026width=1600", 3246 "perStickCents": 199.0 3247 }, 3248 3249 "44751437267082": { 3250 "freeShipping": true, 3251 "isNew": false, 3252 "isLimited": false, 3253 "discountPercentage": false, 3254 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/lemonlime_innihald.jpg?v=1765379317\u0026width=1600", 3255 "perStickCents": 170.0 3256 }, 3257 3258 "45773488324746": { 3259 "freeShipping": false, 3260 "isNew": false, 3261 "isLimited": false, 3262 "discountPercentage": false, 3263 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/PH_INNIHALD.png?v=1776255757\u0026width=1600", 3264 "perStickCents": 199.0 3265 }, 3266 3267 "45773488357514": { 3268 "freeShipping": false, 3269 "isNew": false, 3270 "isLimited": false, 3271 "discountPercentage": false, 3272 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/PH_INNIHALD.png?v=1776255757\u0026width=1600", 3273 "perStickCents": 199.0 3274 }, 3275 3276 "45773488390282": { 3277 "freeShipping": true, 3278 "isNew": false, 3279 "isLimited": false, 3280 "discountPercentage": false, 3281 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/PH_INNIHALD.png?v=1776255757\u0026width=1600", 3282 "perStickCents": 199.0 3283 }, 3284 3285 "45773488423050": { 3286 "freeShipping": true, 3287 "isNew": false, 3288 "isLimited": false, 3289 "discountPercentage": false, 3290 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/Hydration_Peach_Crush_innihaldslysing.png?v=1759347931\u0026width=1600", 3291 "perStickCents": 170.0 3292 }, 3293 3294 "47230751473802": { 3295 "freeShipping": false, 3296 "isNew": false, 3297 "isLimited": false, 3298 "discountPercentage": false, 3299 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/PE_INNIHALD.png?v=1776255780\u0026width=1600", 3300 "perStickCents": 199.0 3301 }, 3302 3303 "47230751506570": { 3304 "freeShipping": false, 3305 "isNew": false, 3306 "isLimited": false, 3307 "discountPercentage": false, 3308 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/PE_INNIHALD.png?v=1776255780\u0026width=1600", 3309 "perStickCents": 199.0 3310 }, 3311 3312 "47230751539338": { 3313 "freeShipping": true, 3314 "isNew": false, 3315 "isLimited": false, 3316 "discountPercentage": false, 3317 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/PE_INNIHALD.png?v=1776255780\u0026width=1600", 3318 "perStickCents": 199.0 3319 }, 3320 3321 "47230751572106": { 3322 "freeShipping": true, 3323 "isNew": false, 3324 "isLimited": false, 3325 "discountPercentage": false, 3326 "ingredientsImage": "\/\/happyhydrate.is\/cdn\/shop\/files\/Hydration_Peru_Innihaldslysing.png?v=1759347931\u0026width=1600", 3327 "perStickCents": 170.0 3328 } 3329 3330 } 3331 </script>
3331 3332 3333
3333<script type="application/json" id="variant-gallery-template--22413711704202__section_product_v2_R9fnpP"> 3334 { 3335 3336 "50050860712074": ["//happyhydrate.is/cdn/shop/files/StrawberryNewPhoto.jpg?v=3654342356135137426" 3337], 3338 3339 "50050860744842": ["//happyhydrate.is/cdn/shop/files/StrawberryNewPhoto.jpg?v=3654342356135137426" 3340], 3341 3342 "50050860777610": ["//happyhydrate.is/cdn/shop/files/StrawberryNewPhoto.jpg?v=3654342356135137426" 3343], 3344 3345 "50050860810378": ["//happyhydrate.is/cdn/shop/files/StrawberryNewPhoto.jpg?v=3654342356135137426" 3346], 3347 3348 "44751436906634": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Pina_colada.png?v=10080655477521466929", 3349"//happyhydrate.is/cdn/shop/files/Box_Pina_colada.png?v=145695560218513528", 3350"//happyhydrate.is/cdn/shop/files/Stick_Pina_colada.png?v=18008800997009111848", 3351"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Pina_colada.png?v=13526741417219158388" 3352], 3353 3354 "44751436939402": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Pina_colada.png?v=10080655477521466929", 3355"//happyhydrate.is/cdn/shop/files/Box_Pina_colada.png?v=145695560218513528", 3356"//happyhydrate.is/cdn/shop/files/Stick_Pina_colada.png?v=18008800997009111848", 3357"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Pina_colada.png?v=13526741417219158388" 3358], 3359 3360 "44751436972170": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Pina_colada.png?v=10080655477521466929", 3361"//happyhydrate.is/cdn/shop/files/Box_Pina_colada.png?v=145695560218513528", 3362"//happyhydrate.is/cdn/shop/files/Stick_Pina_colada.png?v=18008800997009111848", 3363"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Pina_colada.png?v=13526741417219158388" 3364], 3365 3366 "44751437004938": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Pina_colada.png?v=10080655477521466929", 3367"//happyhydrate.is/cdn/shop/files/Box_Pina_colada.png?v=145695560218513528", 3368"//happyhydrate.is/cdn/shop/files/Stick_Pina_colada.png?v=18008800997009111848", 3369"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Pina_colada.png?v=13526741417219158388" 3370], 3371 3372 "44751437037706": ["//happyhydrate.is/cdn/shop/files/Ad_Image_MIxed_Berries.png?v=2793166020059645671", 3373"//happyhydrate.is/cdn/shop/files/Box_Mixed_berries.png?v=14889008070699529462", 3374"//happyhydrate.is/cdn/shop/files/Stick_Mixed_berries.png?v=13034072605397170011", 3375"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Mixed_berries.png?v=4047872841426993341" 3376], 3377 3378 "44751437070474": ["//happyhydrate.is/cdn/shop/files/Ad_Image_MIxed_Berries.png?v=2793166020059645671", 3379"//happyhydrate.is/cdn/shop/files/Box_Mixed_berries.png?v=14889008070699529462", 3380"//happyhydrate.is/cdn/shop/files/Stick_Mixed_berries.png?v=13034072605397170011", 3381"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Mixed_berries.png?v=4047872841426993341" 3382], 3383 3384 "44751437103242": ["//happyhydrate.is/cdn/shop/files/Ad_Image_MIxed_Berries.png?v=2793166020059645671", 3385"//happyhydrate.is/cdn/shop/files/Box_Mixed_berries.png?v=14889008070699529462", 3386"//happyhydrate.is/cdn/shop/files/Stick_Mixed_berries.png?v=13034072605397170011", 3387"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Mixed_berries.png?v=4047872841426993341" 3388], 3389 3390 "44751437136010": ["//happyhydrate.is/cdn/shop/files/Ad_Image_MIxed_Berries.png?v=2793166020059645671", 3391"//happyhydrate.is/cdn/shop/files/Box_Mixed_berries.png?v=14889008070699529462", 3392"//happyhydrate.is/cdn/shop/files/Stick_Mixed_berries.png?v=13034072605397170011", 3393"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Mixed_berries.png?v=4047872841426993341" 3394], 3395 3396 "44751437168778": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Lemon_Lime.png?v=13996877905846669919", 3397"//happyhydrate.is/cdn/shop/files/Box_Lemon_lime.png?v=962053310672404054", 3398"//happyhydrate.is/cdn/shop/files/Stick_Lemon_Lime.png?v=4097045385878305331", 3399"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Lemon_Lime.png?v=16709592387243239154" 3400], 3401 3402 "44751437201546": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Lemon_Lime.png?v=13996877905846669919", 3403"//happyhydrate.is/cdn/shop/files/Box_Lemon_lime.png?v=962053310672404054", 3404"//happyhydrate.is/cdn/shop/files/Stick_Lemon_Lime.png?v=4097045385878305331", 3405"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Lemon_Lime.png?v=16709592387243239154" 3406], 3407 3408 "44751437234314": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Lemon_Lime.png?v=13996877905846669919", 3409"//happyhydrate.is/cdn/shop/files/Box_Lemon_lime.png?v=962053310672404054", 3410"//happyhydrate.is/cdn/shop/files/Stick_Lemon_Lime.png?v=4097045385878305331", 3411"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Lemon_Lime.png?v=16709592387243239154" 3412], 3413 3414 "44751437267082": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Lemon_Lime.png?v=13996877905846669919", 3415"//happyhydrate.is/cdn/shop/files/Box_Lemon_lime.png?v=962053310672404054", 3416"//happyhydrate.is/cdn/shop/files/Stick_Lemon_Lime.png?v=4097045385878305331", 3417"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Lemon_Lime.png?v=16709592387243239154" 3418], 3419 3420 "45773488324746": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Peach_crush.png?v=4113032794673977349", 3421"//happyhydrate.is/cdn/shop/files/Box_Peach_crush.png?v=3652435682352019707", 3422"//happyhydrate.is/cdn/shop/files/Stick_Peach_crush.png?v=6808548533713963419", 3423"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Peach_crush.png?v=16322717436308673715" 3424], 3425 3426 "45773488357514": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Peach_crush.png?v=4113032794673977349", 3427"//happyhydrate.is/cdn/shop/files/Box_Peach_crush.png?v=3652435682352019707", 3428"//happyhydrate.is/cdn/shop/files/Stick_Peach_crush.png?v=6808548533713963419", 3429"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Peach_crush.png?v=16322717436308673715" 3430], 3431 3432 "45773488390282": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Peach_crush.png?v=4113032794673977349", 3433"//happyhydrate.is/cdn/shop/files/Box_Peach_crush.png?v=3652435682352019707", 3434"//happyhydrate.is/cdn/shop/files/Stick_Peach_crush.png?v=6808548533713963419", 3435"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Peach_crush.png?v=16322717436308673715" 3436], 3437 3438 "45773488423050": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Peach_crush.png?v=4113032794673977349", 3439"//happyhydrate.is/cdn/shop/files/Box_Peach_crush.png?v=3652435682352019707", 3440"//happyhydrate.is/cdn/shop/files/Stick_Peach_crush.png?v=6808548533713963419", 3441"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Peach_crush.png?v=16322717436308673715" 3442], 3443
3444 "47230751473802": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Pear.png?v=10237143675757999332", 3445"//happyhydrate.is/cdn/shop/files/Box_Pear.png?v=13374194927515835710", 3446"//happyhydrate.is/cdn/shop/files/Stick_Pear.png?v=12223815111786935164", 3447"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Pear.png?v=16196830923234054106" 3448], 3449 3450 "47230751506570": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Pear.png?v=10237143675757999332", 3451"//happyhydrate.is/cdn/shop/files/Box_Pear.png?v=13374194927515835710", 3452"//happyhydrate.is/cdn/shop/files/Stick_Pear.png?v=12223815111786935164", 3453"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Pear.png?v=16196830923234054106" 3454], 3455 3456 "47230751539338": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Pear.png?v=10237143675757999332", 3457"//happyhydrate.is/cdn/shop/files/Box_Pear.png?v=13374194927515835710", 3458"//happyhydrate.is/cdn/shop/files/Stick_Pear.png?v=12223815111786935164", 3459"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Pear.png?v=16196830923234054106" 3460], 3461 3462 "47230751572106": ["//happyhydrate.is/cdn/shop/files/Ad_Image_Pear.png?v=10237143675757999332", 3463"//happyhydrate.is/cdn/shop/files/Box_Pear.png?v=13374194927515835710", 3464"//happyhydrate.is/cdn/shop/files/Stick_Pear.png?v=12223815111786935164", 3465"//happyhydrate.is/cdn/shop/files/Hella_Hrista_Pear.png?v=16196830923234054106" 3466] 3467 3468 } 3469 </script>
3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 </div> 3480 3481 <h2 class="productV2TitleMobile">Hydration Xpress</h2> 3482 <div class="productV2ReviewsMobile"> 3483 3484 3485<div class="junip-product-summary" data-product-id="7907478503562"></div> 3486 3487 3488 </div> 3489 3490 <p class="productV2ShortDescMobile">Fylltu á söltin sem þú tapar! NatrÃum, kalÃum og magnesÃum stuðla að eðlilegri vöðvastarfsemi og vökvajafnvægi. Vertu HAPPY.</p> 3491 3492 3493 <aside class="productV2Content"> 3494 <h2 class="productV2ContentTitle" style="color: #262626">Hydration Xpress</h2> 3495 <div class="productV2ContentReviews"> 3496 3497 3498<div class="junip-product-summary" data-product-id="7907478503562"></div> 3499 3500 3501 </div> 3502 3503 3504 <p class="productV2ContentShortDesc">Fylltu á söltin sem þú tapar! NatrÃum, kalÃum og magnesÃum stuðla að eðlilegri vöðvastarfsemi og vökvajafnvægi. Vertu HAPPY.</p> 3505 3506 3507 <div class="productV2ContentOptions"> 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 <style> 3524 .productV2ContentOption { 3525 border: none; 3526 margin: 16px 0px; 3527 padding: 0; 3528 position: relative; 3529 } 3530 3531 .productV2ContentOptionLegend { 3532 font-size: 18px; 3533 line-height: 24px; 3534 margin-bottom: 15px; 3535 color: #333333; 3536 font-family: "DM Sans", sans-serif; 3537 font-weight: 600; 3538 } 3539 3540 .productV2ContentOptionValues { 3541 display: flex; 3542 align-items: center; 3543 column-gap: 16px; 3544 row-gap: 8px; 3545 } 3546 3547 .productV2ContentOptionValue { 3548 position: relative; 3549 } 3550 3551 .productV2ContentOption.flavor .productV2ContentOptionValues { 3552 display: flex; 3553 flex-wrap: wrap; 3554 } 3555 3556 .productV2ContentOptionValue[data-flavor="Lemon/Lime"] { 3557 order: 1; 3558 } 3559 3560 .productV2ContentOptionValue[data-flavor="Mixed Berries"] { 3561 order: 2; 3562 } 3563 3564 .productV2ContentOptionValue[data-flavor="Pina Colada"] { 3565 order: 3; 3566 } 3567 3568 .productV2ContentOptionValue[data-flavor="Peach Crush"] { 3569 order: 4; 3570 } 3571 3572 .productV2ContentOptionValue[data-flavor="Peru"] { 3573 order: 5; 3574 } 3575 3576 .productV2ContentOptionValueLabel { 3577 display: block; 3578 cursor: pointer; 3579 color: var(--pdp-v2-text-color); 3580 } 3581 3582 .productV2ContentOptionValueInput { 3583 display: none; 3584 } 3585 3586 .productV2ContentOptionValue.flavor .productV2ContentOptionValueLabelValue { 3587 font-size: 14px; 3588 display: block; 3589 text-align: center; 3590 font-family: "Inter", sans-serif; 3591 font-weight: 500; 3592 } 3593 3594 .productV2ContentOptionValueLabelFlavorIconWrapper { 3595 display: flex; 3596 flex-direction: row; 3597 padding: 6px 14px;; 3598 border-radius: 32px; 3599 background-color: #FFF; 3600 justify-content: center; 3601 align-items: center; 3602 margin-bottom: 4px; 3603 background-color: #F5F5F5; 3604 width: max-content; 3605 } 3606 3607 .productV2ContentOptionValueLabelFlavorIcon { 3608 margin-right: 8px; 3609 width: 34px; 3610 height: 34px; 3611 object-fit: contain; 3612 } 3613 3614 .productV2ContentOptionValueInput:checked + .productV2ContentOptionValueLabel .productV2ContentOptionValueLabelFlavorIconWrapper { 3615 border: 1px solid black; 3616 background-color: #FFFFFF; 3617 } 3618 3619 .productV2ContentOptionValueLabelNewTag { 3620 padding: 4px 6px; 3621 border-radius: 12px; 3622 font-size: 12px; 3623 background-color: #FFFA66; 3624 font-family: "DM Sans", sans-serif; 3625 font-weight: 600; 3626 color: #000000; 3627 margin-left: 8px; 3628 } 3629 3630 .productV2ContentOptionValueLabelLimitedTag { 3631 padding: 4px 6px; 3632 border-radius: 12px; 3633 font-size: 12px; 3634 background-color: #c92a3e; 3635 font-family: "DM Sans", sans-serif; 3636 font-weight: 600; 3637 color: #FFFFFF; 3638 margin-left: 8px; 3639 } 3640 3641 .productV2ContentOptionValueLabelDiscountTag { 3642 padding: 4px 6px; 3643 border-radius: 12px; 3644 font-size: 12px; 3645 background-color: #FFFA66; 3646 font-family: "DM Sans", sans-serif; 3647 font-weight: 600; 3648 color: #000000; 3649 margin-left: 8px; 3650 } 3651 3652 3653 .productV2ContentOptionValueLabelSoldOutTag { 3654 padding: 4px 6px; 3655 border-radius: 12px; 3656 font-size: 12px; 3657 background-color: #FFD6CC; 3658 font-family: "DM Sans", sans-serif; 3659 font-weight: 600; 3660 color: #A02100; 3661 margin-left: 8px; 3662 } 3663 3664 /* Mobile flavor dropdown (custom) */ 3665 .flavor-dd { display: none; position: relative; font-family: "Inter", sans-serif; } 3666 .flavor-dd__trigger { 3667 display: flex; align-items: center; gap: 10px; 3668 width: 100%; padding: 10px 16px; 3669 border-radius: 999px; border: 1px solid #E0E0E0; 3670 background: #F5F5F5; cursor: pointer; 3671 font-size: 15px; font-weight: 500; color: #333; 3672 } 3673 .flavor-dd__trigger-icon { width: 30px; height: 30px; object-fit: contain; } 3674 .flavor-dd__trigger-name { flex: 1; } 3675 .flavor-dd__trigger-chevron { transition: transform 200ms ease; } 3676 .flavor-dd.is-open .flavor-dd__trigger-chevron { transform: rotate(180deg); } 3677 3678 .flavor-dd__list { 3679 display: none; position: absolute; top: calc(100% + 4px); 3680 left: 0; right: 0; z-index: 100; 3681 background: #fff; border: 1px solid #E0E0E0; border-radius: 10px; 3682 box-shadow: 0 4px 12px rgba(0,0,0,.08); 3683 overflow: hidden; 3684 } 3685 .flavor-dd.is-open .flavor-dd__list { display: block; } 3686 3687 .flavor-dd__item { 3688 display: flex; align-items: center; gap: 10px; 3689 padding: 10px 16px; cursor: pointer; 3690 font-size: 15px; font-weight: 500; color: #333; 3691 transition: background 120ms ease; 3692 } 3693 .flavor-dd__item:hover { background: #F5F5F5; } 3694 .flavor-dd__item.is-selected { background: #F0F0F0; } 3695 .flavor-dd__item.is-sold-out { opacity: .55;
3695 cursor: not-allowed; } 3696 .flavor-dd__item.is-sold-out:hover { background: transparent; } 3697 .flavor-dd__item-sold { 3698 margin-left: auto; padding: 2px 8px; border-radius: 4px; 3699 background: #FDE2E2; color: #B02D28; font-size: 12px; font-weight: 600; white-space: nowrap; 3700 } 3701 .flavor-dd__item-icon { width: 28px; height: 28px; object-fit: contain; } 3702 .flavor-dd__item-dot { 3703 display: none; 3704 } 3705 3706 @media (max-width: 1000px) { 3707 .productV2ContentOption { margin: 16px 0px; } 3708 .productV2ContentOption.flavor .productV2ContentOptionValues { display: none; } 3709 .flavor-dd { display: block; } 3710 } 3711</style><fieldset class="productV2ContentOption flavor" name="Bragð"> 3712 <div class="productV2ContentOptionLegend">Bragð</div> 3713 <div class="productV2ContentOptionValues"> 3714 3715 3716 3717<div 3718 class="productV2ContentOptionValue flavor " 3719 data-flavor="Strawberry Lemonade" 3720 > 3721 <input 3722 id="Strawberry Lemonade" 3723 class="productV2ContentOptionValueInput" 3724 value="Strawberry Lemonade" 3725 type="radio" 3726 name="Bragð" 3727 checked 3728 3729 > 3730 <label for="Strawberry Lemonade" class="productV2ContentOptionValueLabel"> 3731 <span class="productV2ContentOptionValueLabelFlavorIconWrapper"><img 3732 class="productV2ContentOptionValueLabelFlavorIcon" 3733 src="//happyhydrate.is/cdn/shop/files/StrawberryLemonade_icon_7cb3db60-9ff0-4f24-b37d-2b10985879ea.png?v=1787073402&width=100" 3734 alt="" 3735 ><span class="productV2ContentOptionValueLabelValue"> 3736 Strawberry Lemonade 3737 </span> 3738 3739 3740<span class="productV2ContentOptionValueLabelNewTag">Nýtt</span><!-- Discount badge (only when discount > 0) --> 3741 <span class="productV2ContentOptionValueLabelDiscountTag" hidden> 3742 0% 3743 </span> 3744 </span> 3745 </label> 3746 </div> 3747 3748 3749 3750<div 3751 class="productV2ContentOptionValue flavor is-sold-out" 3752 data-flavor="Pina Colada" 3753 > 3754 <input 3755 id="Pina Colada" 3756 class="productV2ContentOptionValueInput" 3757 value="Pina Colada" 3758 type="radio" 3759 name="Bragð" 3760 3761 3762 > 3763 <label for="Pina Colada" class="productV2ContentOptionValueLabel"> 3764 <span class="productV2ContentOptionValueLabelFlavorIconWrapper"><img 3765 class="productV2ContentOptionValueLabelFlavorIcon" 3766 src="//happyhydrate.is/cdn/shop/files/Pina_Colada_22_09_25.png?v=1758564999&width=100" 3767 alt="" 3768 ><span class="productV2ContentOptionValueLabelValue"> 3769 Pina Colada 3770 </span> 3771 3772 3773 <span class="productV2ContentOptionValueLabelSoldOutTag">Uppselt</span> 3774 3775<!-- Discount badge (only when discount > 0) --> 3776 <span class="productV2ContentOptionValueLabelDiscountTag" hidden> 3777 0% 3778 </span> 3779 </span> 3780 </label> 3781 </div> 3782 3783 3784 3785<div 3786 class="productV2ContentOptionValue flavor is-sold-out" 3787 data-flavor="Mixed Berries" 3788 > 3789 <input 3790 id="Mixed Berries" 3791 class="productV2ContentOptionValueInput" 3792 value="Mixed Berries" 3793 type="radio" 3794 name="Bragð" 3795 3796 3797 > 3798 <label for="Mixed Berries" class="productV2ContentOptionValueLabel"> 3799 <span class="productV2ContentOptionValueLabelFlavorIconWrapper"><img 3800 class="productV2ContentOptionValueLabelFlavorIcon" 3801 src="//happyhydrate.is/cdn/shop/files/Mixed_berries_09_25.png?v=1758565442&width=100" 3802 alt="" 3803 ><span class="productV2ContentOptionValueLabelValue"> 3804 Mixed Berries 3805 </span> 3806 3807 3808 <span class="productV2ContentOptionValueLabelSoldOutTag">Uppselt</span> 3809 3810<!-- Discount badge (only when discount > 0) --> 3811 <span class="productV2ContentOptionValueLabelDiscountTag" hidden> 3812 0% 3813 </span> 3814 </span> 3815 </label> 3816 </div> 3817 3818 3819 3820<div 3821 class="productV2ContentOptionValue flavor " 3822 data-flavor="Lemon/Lime" 3823 > 3824 <input 3825 id="Lemon/Lime" 3826 class="productV2ContentOptionValueInput" 3827 value="Lemon/Lime" 3828 type="radio" 3829 name="Bragð" 3830 3831 3832 > 3833 <label for="Lemon/Lime" class="productV2ContentOptionValueLabel">
3834 <span class="productV2ContentOptionValueLabelFlavorIconWrapper"><img 3835 class="productV2ContentOptionValueLabelFlavorIcon" 3836 src="//happyhydrate.is/cdn/shop/files/Lemon_Lime.png?v=1757622519&width=100" 3837 alt="" 3838 ><span class="productV2ContentOptionValueLabelValue"> 3839 Lemon/Lime 3840 </span> 3841 3842 3843<!-- Discount badge (only when discount > 0) --> 3844 <span class="productV2ContentOptionValueLabelDiscountTag" hidden> 3845 0% 3846 </span> 3847 </span> 3848 </label> 3849 </div> 3850 3851 3852 3853<div 3854 class="productV2ContentOptionValue flavor " 3855 data-flavor="Peach Crush" 3856 > 3857 <input 3858 id="Peach Crush" 3859 class="productV2ContentOptionValueInput" 3860 value="Peach Crush" 3861 type="radio" 3862 name="Bragð" 3863 3864 3865 > 3866 <label for="Peach Crush" class="productV2ContentOptionValueLabel"> 3867 <span class="productV2ContentOptionValueLabelFlavorIconWrapper"><img 3868 class="productV2ContentOptionValueLabelFlavorIcon" 3869 src="//happyhydrate.is/cdn/shop/files/Peach_09_25.png?v=1758565399&width=100" 3870 alt="" 3871 ><span class="productV2ContentOptionValueLabelValue"> 3872 Peach Crush 3873 </span> 3874 3875 3876<!-- Discount badge (only when discount > 0) --> 3877 <span class="productV2ContentOptionValueLabelDiscountTag" hidden> 3878 0% 3879 </span> 3880 </span> 3881 </label> 3882 </div> 3883 3884 3885 3886<div 3887 class="productV2ContentOptionValue flavor " 3888 data-flavor="Peru" 3889 > 3890 <input 3891 id="Peru" 3892 class="productV2ContentOptionValueInput" 3893 value="Peru" 3894 type="radio" 3895 name="Bragð" 3896 3897 3898 > 3899 <label for="Peru" class="productV2ContentOptionValueLabel"> 3900 <span class="productV2ContentOptionValueLabelFlavorIconWrapper"><img 3901 class="productV2ContentOptionValueLabelFlavorIcon" 3902 src="//happyhydrate.is/cdn/shop/files/Pear_09_25.png?v=1758565346&width=100" 3903 alt="" 3904 ><span class="productV2ContentOptionValueLabelValue"> 3905 Peru 3906 </span> 3907 3908 3909<!-- Discount badge (only when discount > 0) --> 3910 <span class="productV2ContentOptionValueLabelDiscountTag" hidden> 3911 0% 3912 </span> 3913 </span> 3914 </label> 3915 </div> 3916 3917 </div><div class="flavor-dd" id="flavor-dd"><button type="button" class="flavor-dd__trigger" aria-expanded="false"><img class="flavor-dd__trigger-icon" src="//happyhydrate.is/cdn/shop/files/StrawberryLemonade_icon_7cb3db60-9ff0-4f24-b37d-2b10985879ea.png?v=1787073402&width=100" alt="" data-flavor-icon> 3918 <span class="flavor-dd__trigger-name" data-flavor-name>Strawberry Lemonade</span> 3919 <svg class="flavor-dd__trigger-chevron" width="12" height="8" viewBox="0 0 12 8" fill="none"><path d="M1 1.5L6 6.5L11 1.5" stroke="#333" stroke-width="2" stroke-linecap="round"/></svg> 3920 </button> 3921 <div class="flavor-dd__list"> 3922 3923<div class="flavor-dd__item is-selected" 3924 data-value="Strawberry Lemonade" 3925 data-color="#999" 3926 3927 data-icon="//happyhydrate.is/cdn/shop/files/StrawberryLemonade_icon_7cb3db60-9ff0-4f24-b37d-2b10985879ea.png?v=1787073402&width=100"> 3928 <span class="flavor-dd__item-dot" style="background:#999"></span><img class="flavor-dd__item-icon" src="//happyhydrate.is/cdn/shop/files/StrawberryLemonade_icon_7cb3db60-9ff0-4f24-b37d-2b10985879ea.png?v=1787073402&width=100" alt=""><span>Strawberry Lemonade</span></div> 3929 3930<div class="flavor-dd__item is-sold-out" 3931 data-value="Pina Colada" 3932 data-color="#ffea00" 3933 data-sold-out="true" aria-disabled="true" 3934 data-icon="//happyhydrate.is/cdn/shop/files/Pina_Colada_22_09_25.png?v=1758564999&width=100"> 3935 <span class="flavor-dd__item-dot" style="background:#ffea00"></span><img class="flavor-dd__item-icon" src="//happyhydrate.is/cdn/shop/files/Pina_Colada_22_09_25.png?v=1758564999&width=100" alt=""><span>Pina Colada</span><span class="flavor-dd__item-sold">Uppselt</span></div> 3936 3937<div class="flavor-dd__item is-sold-out" 3938 data-value="Mixed Berries" 3939 data-color="#ff40b6" 3940 data-sold-out="true" aria-disabled="true" 3941 data-icon="//happyhydrate.is/cdn/shop/files/Mixed_berries_09_25.png?v=1758565442&width=100">
3942 <span class="flavor-dd__item-dot" style="background:#ff40b6"></span><img class="flavor-dd__item-icon" src="//happyhydrate.is/cdn/shop/files/Mixed_berries_09_25.png?v=1758565442&width=100" alt=""><span>Mixed Berries</span><span class="flavor-dd__item-sold">Uppselt</span></div> 3943 3944<div class="flavor-dd__item" 3945 data-value="Lemon/Lime" 3946 data-color="#44d62c" 3947 3948 data-icon="//happyhydrate.is/cdn/shop/files/Lemon_Lime.png?v=1757622519&width=100"> 3949 <span class="flavor-dd__item-dot" style="background:#44d62c"></span><img class="flavor-dd__item-icon" src="//happyhydrate.is/cdn/shop/files/Lemon_Lime.png?v=1757622519&width=100" alt=""><span>Lemon/Lime</span></div> 3950 3951<div class="flavor-dd__item" 3952 data-value="Peach Crush" 3953 data-color="#ff5338" 3954 3955 data-icon="//happyhydrate.is/cdn/shop/files/Peach_09_25.png?v=1758565399&width=100"> 3956 <span class="flavor-dd__item-dot" style="background:#ff5338"></span><img class="flavor-dd__item-icon" src="//happyhydrate.is/cdn/shop/files/Peach_09_25.png?v=1758565399&width=100" alt=""><span>Peach Crush</span></div> 3957 3958<div class="flavor-dd__item" 3959 data-value="Peru" 3960 data-color="#e0e01b" 3961 3962 data-icon="//happyhydrate.is/cdn/shop/files/Pear_09_25.png?v=1758565346&width=100"> 3963 <span class="flavor-dd__item-dot" style="background:#e0e01b"></span><img class="flavor-dd__item-icon" src="//happyhydrate.is/cdn/shop/files/Pear_09_25.png?v=1758565346&width=100" alt=""><span>Peru</span></div> 3964 3965 </div> 3966 </div> 3967 3968
3968<script> 3969 (function(){ 3970 const dd = document.getElementById('flavor-dd'); 3971 if (!dd) return; 3972 const trigger = dd.querySelector('.flavor-dd__trigger'); 3973 const list = dd.querySelector('.flavor-dd__list'); 3974 const items = dd.querySelectorAll('.flavor-dd__item'); 3975 const triggerName = dd.querySelector('[data-flavor-name]'); 3976 const triggerIcon = dd.querySelector('[data-flavor-icon]'); 3977 // No color needed on trigger 3978 3979 trigger.addEventListener('click', () => { 3980 const open = dd.classList.toggle('is-open'); 3981 trigger.setAttribute('aria-expanded', open); 3982 }); 3983 3984 items.forEach(item => { 3985 item.addEventListener('click', () => { 3986 if (item.dataset.soldOut === 'true') return; // uppselt bragd er ekki valanlegt 3987 // Update trigger 3988 triggerName.textContent = item.querySelector('span:last-child').textContent; 3989 if (item.dataset.icon) { triggerIcon.src = item.dataset.icon; triggerIcon.hidden = false; } 3990 else { triggerIcon.removeAttribute('src'); triggerIcon.hidden = true; } 3991 // color removed 3992 3993 // Update selected state 3994 items.forEach(i => i.classList.remove('is-selected')); 3995 item.classList.add('is-selected'); 3996 3997 // Close dropdown 3998 dd.classList.remove('is-open'); 3999 trigger.setAttribute('aria-expanded', 'false'); 4000 4001 // Sync with hidden radio 4002 const radio = document.querySelector(`.productV2ContentOptionValueInput[value="${item.dataset.value}"]`); 4003 if (radio) { 4004 radio.checked = true; 4005 radio.dispatchEvent(new Event('change', { bubbles: true })); 4006 } 4007 }); 4008 }); 4009 4010 // Close on outside click 4011 document.addEventListener('click', (e) => { 4012 if (!dd.contains(e.target)) { 4013 dd.classList.remove('is-open'); 4014 trigger.setAttribute('aria-expanded', 'false'); 4015 } 4016 }); 4017 4018 // Sync when desktop pills change 4019 document.querySelectorAll('.productV2ContentOption.flavor .productV2ContentOptionValueInput').forEach(radio => { 4020 radio.addEventListener('change', function() { 4021 if (!this.checked) return; 4022 const item = dd.querySelector(`.flavor-dd__item[data-value="${this.value}"]`); 4023 if (!item) return; 4024 triggerName.textContent = item.querySelector('span:last-child').textContent; 4025 if (item.dataset.icon) { triggerIcon.src = item.dataset.icon; triggerIcon.hidden = false; } 4026 else { triggerIcon.removeAttribute('src'); triggerIcon.hidden = true; } 4027 // color removed 4028 items.forEach(i => i.classList.remove('is-selected')); 4029 item.classList.add('is-selected'); 4030 }); 4031 }); 4032 })(); 4033 </script>
4033 4034</fieldset> 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 <div class="pdp-sub__collapse pdp-sub__magn is-open" data-pdp-sub="magn"> 4047 <div class="pdp-sub__inner"> 4048 <style> 4049 .productV2ContentOption { 4050 border: none; 4051 margin: 12px 0px; 4052 padding: 0; 4053 position: relative; 4054 } 4055 4056 .productV2ContentOptionLegend { 4057 font-size: 16px; 4058 line-height: 24px; 4059 margin-bottom: 4px; 4060 color: #333333; 4061 font-family: "DM Sans", sans-serif; 4062 font-weight: 600; 4063 } 4064 4065 .productV2ContentOptionFreeShipping { 4066 width: 197px; 4067 color: var(--pdp-v2-free-shipping-color); 4068 font-size: 18px; 4069 font-weight: 600; 4070 line-height: 24px; 4071 position: absolute; 4072 right: 29px; 4073 top: 0; 4074 text-align: center; 4075 display: flex; 4076 gap: 6px; 4077 } 4078 4079 .productV2.creatine .productV2ContentOptionFreeShipping { 4080 display: none; 4081 } 4082 4083 .productV2ContentOptionFreeShipping:before { 4084 content: ""; 4085 width: 10%; 4086 height: 10px; 4087 display: block; 4088 border-left: 3px solid; 4089 border-top: 3px solid; 4090 margin-top: 10px; 4091 border-color: var(--pdp-v2-free-shipping-color); 4092 } 4093 4094 .productV2ContentOptionFreeShipping:after { 4095 content: ""; 4096 width: 10%; 4097 height: 10px; 4098 display: block; 4099 border-right: 3px solid; 4100 border-top: 3px solid; 4101 margin-top: 10px; 4102 border-color: var(--pdp-v2-free-shipping-color); 4103 } 4104 4105 .productV2ContentOptionValues { 4106 display: flex; 4107 align-items: center; 4108 column-gap: 16px; 4109 } 4110 4111 .productV2ContentOptionValue { 4112 position: relative; 4113 } 4114 4115 .productV2ContentOptionValue.size { 4116 flex: 1; 4117 } 4118 4119 .productV2ContentOptionValueLabel { 4120 display: block; 4121 cursor: pointer; 4122 color: var(--pdp-v2-text-color); 4123 } 4124 4125 .productV2ContentOptionValueLabelPackCount { 4126 display: block; 4127 font-size: 12px; 4128 font-family: "DM Sans", sans-serif; 4129 } 4130 4131 .productV2ContentOptionValueInput { 4132 display: none; 4133 } 4134 4135 4136 .productV2ContentOptionValueLabelSizeIcon { 4137 width: 47px; 4138 height: 47px; 4139 object-fit: contain; 4140 margin-bottom: 4px; 4141 color: #F5F5F5; 4142 } 4143 4144 .productV2ContentOptionValue.size { 4145 flex-basis: 115px; 4146 flex-shrink: 0; 4147 } 4148 4149 4150 .productV2ContentOptionValue.size .productV2ContentOptionValueInput:checked + .productV2ContentOptionValueLabel { 4151 border: 1px solid black; 4152 background-color: #FFFFFF; 4153 } 4154 4155 .productV2ContentOptionValue.size .productV2ContentOptionValueInput:checked + .productV2ContentOptionValueLabel .productV2ContentOptionValueLabelSizeIcon { 4156 filter: invert(1); 4157 } 4158 4159 .productV2ContentOptionValue.size .productV2ContentOptionValueLabel { 4160 background-color: #F5F5F5; 4161 padding: 12px; 4162 border-radius: 10px; 4163 } 4164 4165 .productV2ContentOptionValue.size .productV2ContentOptionValueLabelValue { 4166 font-size: 16px; 4167 font-weight: 500; 4168 line-height: 16px; 4169 color: #1F1F1F; 4170 font-family: "Inter", sans-serif; 4171 } 4172 4173 .free-ship-slot{ 4174 min-height: 28px; 4175 display: flex; 4176 align-items: center; 4177 margin-bottom: 24px; 4178 } 4179 4180 .free-ship{ 4181 font-size: 12px; 4182 display: inline-flex; 4183 align-items: center; 4184 gap: 3px; 4185 font-family: "DM Sans", sans-serif; 4186 font-weight: 500; 4187 background-color: #E6E6E6; 4188 border-radius: 6px; 4189 padding: 4px 4px; 4190 } 4191 4192 .best-deal{ 4193 font-size: 12px; 4194 display: inline-flex; 4195 align-items: center; 4196 gap: 3px; 4197 font-family: "DM Sans", sans-serif; 4198 font-weight: 500; 4199 background-color: #D4EDFF; 4200 border-radius: 6px; 4201 padding: 4px 6px; 4202 } 4203 4204 .free-ship__icon{ 4205 width: 18px; 4206 height: auto; 4207 display: block; 4208 } 4209 4210 4211 @media (max-width: 1200px) { 4212 .productV2ContentOptionValue.size { 4213 flex-shrink: 1; 4214 } 4215 4216 .productV2ContentOptionFreeShipping { 4217 right: 0; 4218 } 4219 } 4220 4221 @media (max-width: 1000px) { 4222 4223 .productV2ContentOptionValues { 4224 gap: 12px; 4225 display: grid; 4226 grid-template-columns: repeat(3, 1fr); 4227 } 4228 4229 .productV2ContentOptions { 4230 margin-bottom: 24px; 4231 } 4232 4233 .productV2ContentOption:not(:last-of-type) { 4234 margin-bottom: 16px; 4235 } 4236 4237 .productV2ContentOptionFreeShipping { 4238 gap: 4px; 4239 justify-content: end; 4240 right: 5px; 4241 } 4242 4243 .productV2ContentOptionValue.size .productV2ContentOptionValueLabel { 4244 4245 } 4246 4247 .productV2ContentOptionValue.size .productV2ContentOptionValueLabelValue { 4248 font-size: 16px; 4249 letter-spacing: -.5px; 4250 } 4251 } 4252 4253 @media (max-width: 600px) { 4254 4255 .productV2ContentOptionValues { 4256 gap: 8px; 4257 display: grid; 4258 grid-template-columns: repeat(3, 1fr); 4259 } 4260 4261 .productV2ContentOptions { 4262 margin-bottom: 16px; 4263 } 4264 } 4265 4266 @media (max-width: 390px) { 4267 .productV2ContentOptionValues { 4268 gap: 6px; 4269 display: grid; 4270 grid-template-columns: repeat(3, 1fr); 4271 } 4272 4273 .productV2ContentOptionValue.size .productV2ContentOptionValueLabelValue { 4274 font-size: 14px; 4275 } 4276 4277 .productV2ContentOptions { 4278 margin-bottom: 16px; 4279 } 4280 } 4281</style> 4282<fieldset class="productV2ContentOption size" name="Magn"> 4283 <div class="productV2ContentOptionLegend">Magn</div> 4284 <div class="productV2ContentOptionValues size"> 4285 4286 4287 <div class="productV2ContentOptionValue size" data-size="10 stikur" data-variant-id="50050860712074"> 4288 <input 4289 id="10 stikur" 4290 class="productV2ContentOptionValueInput" 4291 value="10 stikur" 4292 type="radio" 4293 name="Magn" 4294 4295 > 4296 <label for="10 stikur" class="productV2ContentOptionValueLabel"> 4297 <div class="free-ship-slot" aria-live="polite"></div> 4298 4299
4300 <span class="productV2ContentOptionValueLabelValue"> 4301 1 kassi 4302 </span> 4303 4304 4305 <span class="productV2ContentOptionValueLabelPackCount"> 4306 10 stikur 4307 </span> 4308 </label> 4309 </div> 4310 4311 4312 <div class="productV2ContentOptionValue size" data-size="30 stikur" data-variant-id="50050860744842"> 4313 <input 4314 id="30 stikur" 4315 class="productV2ContentOptionValueInput" 4316 value="30 stikur" 4317 type="radio" 4318 name="Magn" 4319 checked 4320 > 4321 <label for="30 stikur" class="productV2ContentOptionValueLabel"> 4322 <div class="free-ship-slot" aria-live="polite"></div> 4323 4324 4325 <span class="productV2ContentOptionValueLabelValue"> 4326 3 kassar 4327 </span> 4328 4329 4330 <span class="productV2ContentOptionValueLabelPackCount"> 4331 30 stikur 4332 </span> 4333 </label> 4334 </div> 4335 4336 4337 <div class="productV2ContentOptionValue size" data-size="60 stikur (FRà SENDING)" data-variant-id="50050860777610"> 4338 <input 4339 id="60 stikur (FRà SENDING)" 4340 class="productV2ContentOptionValueInput" 4341 value="60 stikur (FRà SENDING)" 4342 type="radio" 4343 name="Magn" 4344 4345 > 4346 <label for="60 stikur (FRà SENDING)" class="productV2ContentOptionValueLabel"> 4347 <div class="free-ship-slot" aria-live="polite"><div class="free-ship"> 4348 <img src="https://photatoe.com/media/cache/53/d9/53d9fb797841a63b904cca962d273ad5.png" alt="" class="free-ship__icon"><span>Frà sending</span> 4349 </div></div> 4350 4351 4352 <span class="productV2ContentOptionValueLabelValue"> 4353 6 kassar 4354 </span> 4355 4356 4357 <span class="productV2ContentOptionValueLabelPackCount"> 4358 60 stikur 4359 </span> 4360 </label> 4361 </div> 4362 4363 4364 </div> 4365</fieldset> 4366 4367 </div> 4368 </div> 4369 4370 4371 </div> 4372 4373 <div class="productV2ContentOptionLegend">Kaupa</div> 4374 <div class="productV2ContentPurchaseOptions"> 4375 <div class="productV2ContentPurchaseOption oneTime"> 4376 <input 4377 id="productV2ContentPurchaseOptionOnce" 4378 name="purchase_type" 4379 type="radio" 4380 class="productV2ContentPurchaseOptionInput" 4381 value="otp" 4382 checked 4383 > 4384 <label 4385 aria-label="Stök kaup" 4386 for="productV2ContentPurchaseOptionOnce" 4387 class="productV2ContentPurchaseOptionLabel" 4388 ><span class="productV2ContentPurchaseOptionLabelName"> 4389 Stök kaup 4390 <div class="custom-discount-tag" hidden aria-hidden="true"> 4391 <span class="tag-15-green-desktop">0% afsláttur</span> 4392 <span class="tag-15-green-mobile">0%</span> 4393 </div> 4394 </span> 4395 4396 <div class="productV2ContentPurchaseOptionLabelPricesAndRadio"> 4397 <span class="productV2ContentPurchaseOptionLabelPrices"> 4398 <span class="productV2ContentPurchaseOptionLabelPricesCompare">5,985 kr</span> 4399 <span class="productV2ContentPurchaseOptionLabelPricesReal">5,985 kr</span> 4400 <span 4401 class="productV2ContentPurchaseOptionLabelPricesPerStick" 4402 data-stick-label="stikan" 4403 > 4404 (2 kr/ stikan) 4405 </span> 4406 </span> 4407 4408 <span class="radioIcon" aria-hidden="true"> 4409 <!-- unchecked icon --> 4410 <svg class="radioIcon__off" viewBox="0 0 24 24"> 4411 <circle cx="12" cy="12" r="10" stroke="#B3B3B3" fill="#FFFFFF" stroke-width="1"/> 4412 </svg> 4413 <!-- checked icon --> 4414 <div class="radioIcon__on" > 4415 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="21" viewBox="0 0 20 21" fill="none"> 4416 <rect y="0.5" width="20" height="20" rx="10" fill="#333333"/> 4417 <path d="M5.83203 10.8171L9.06851 13.4257L14.6168 7.83594" stroke="white" stroke-width="2"/> 4418 </svg> 4419 </div> 4420 </span> 4421 </div> 4422 </label> 4423 </div> 4424 <div class="productV2ContentPurchaseOption subscription"> 4425 <input 4426 id="productV2ContentPurchaseOptionSubscribe" 4427 name="purchase_type" 4428 type="radio" 4429 value="subscription" 4430 class="productV2ContentPurchaseOptionInput" 4431 > 4432 <label 4433 aria-label="Komdu à áskrift" 4434 for="productV2ContentPurchaseOptionSubscribe" 4435 class="productV2ContentPurchaseOptionLabel sub-card" 4436 >
4437 <span class="popular-tag-red">ð¥ Vinsælast</span> 4438 4439 <div class="sub-card__top"> 4440 <div class="pdp-sub__head"> 4441 <span class="productV2ContentPurchaseOptionLabelName"> 4442 Komdu à áskrift 4443 <span class="tag-15-green-desktop" data-pdp-sub="hdr-pill">20% afsláttur</span> 4444 <span class="tag-15-green-mobile" data-pdp-sub="hdr-pill-m">20%</span> 4445 </span> 4446 <span class="pdp-sub__hint" data-pdp-sub="hdr-hint">3 kassar · 30 stikur · mánaðarlega</span> 4447 </div> 4448 <div class="productV2ContentPurchaseOptionLabelPricesAndRadioSub"> 4449 <span class="productV2ContentPurchaseOptionLabelPrices"> 4450 <span class="productV2ContentPurchaseOptionLabelPricesCompare" data-pdp-sub="hdr-full">5.985 kr</span> 4451 <span class="productV2ContentPurchaseOptionLabelPricesReal" data-pdp-sub="hdr-total">4.788 kr</span> 4452 <span class="productV2ContentPurchaseOptionLabelPricesPerStick" data-pdp-sub="hdr-stick">(160 kr / stikan)</span> 4453 </span> 4454 <span class="radioIcon" aria-hidden="true"> 4455 <svg class="radioIcon__off" viewBox="0 0 24 24"> 4456 <circle cx="12" cy="12" r="10" stroke="#B3B3B3" fill="#FFFFFF" stroke-width="1"/> 4457 </svg> 4458 <div class="radioIcon__on"> 4459 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="21" viewBox="0 0 20 21" fill="none"> 4460 <rect y="0.5" width="20" height="20" rx="10" fill="#333333"/> 4461 <path d="M5.83203 10.8171L9.06851 13.4257L14.6168 7.83594" stroke="white" stroke-width="2"/> 4462 </svg> 4463 </div> 4464 </span> 4465 </div> 4466 </div> 4467 4468 <div class="sub-card__perks"> 4469 <div class="sub-card__perk sub-perk-brusi" hidden data-pdp-sub="perk-bottle"> 4470 <svg xmlns="http://www.w3.org/2000/svg" width="13" height="11" viewB
4470ox="0 0 13 11" fill="none"> 4471 <path d="M0.998047 5.3964L4.88182 8.65709L11.5397 1.66992" stroke="#44d62c" stroke-width="2"/> 4472 </svg> 4473 <span>FrÃr glerbrúsi</span> 4474 </div> 4475 <div class="sub-card__perk" data-pdp-sub="perk-ship" hidden> 4476 <svg xmlns="http://www.w3.org/2000/svg" width="13" height="11" viewBox="0 0 13 11" fill="none"> 4477 <path d="M0.998047 5.3964L4.88182 8.65709L11.5397 1.66992" stroke="#44d62c" stroke-width="2"/> 4478 </svg> 4479 <span>Frà sending</span> 4480 </div> 4481 <div class="sub-card__perk"> 4482 <svg xmlns="http://www.w3.org/2000/svg" width="13" height="11" viewBox="0 0 13 11" fill="none"> 4483 <path d="M0.998047 5.3964L4.88182 8.65709L11.5397 1.66992" stroke="#44d62c" stroke-width="2"/> 4484 </svg> 4485 <span class="sub-savings-text">Sparaðu <span class="sub-savings-amount" data-pdp-sub="perk-saving">1.197 kr</span><span data-pdp-sub="perk-saving-suffix">/mán</span></span> 4486 </div> 4487 <div class="sub-card__perk"> 4488 <svg xmlns="http://www.w3.org/2000/svg" width="13" height="11" viewB
4488ox="0 0 13 11" fill="none"> 4489 <path d="M0.998047 5.3964L4.88182 8.65709L11.5397 1.66992" stroke="#44d62c" stroke-width="2"/> 4490 </svg> 4491 <span>Hættu hvenær sem er</span> 4492 </div> 4493 </div> 4494 </label><div class="pdp-sub__panel pdp-sub__collapse" id="pdp-sub-panel-template--22413711704202__section_product_v2_R9fnpP" data-pdp-sub="panel"> 4495 <div class="pdp-sub__inner" role="region" aria-label="Ãskriftarval"> 4496 <div class="pdp-sub__body"> 4497 4498 <p class="pdp-sub__heading">Hversu margir kassar?</p> 4499 <div class="pdp-sub__tiers" role="radiogroup" aria-label="Fjöldi kassa" data-pdp-sub="tiers"></div> 4500 <p class="pdp-sub__note" data-pdp-sub="note">Lágmark 3 kassar · 1 kassi = 10 stikur</p> 4501 4502 <div class="pdp-sub__hero"> 4503 <div class="pdp-sub__hero-row"> 4504 <span class="pdp-sub__hero-label">Ãú sparar</span> 4505 <span class="pdp-sub__hero-amount"><b data-pdp-sub="hero-saving">1.197 kr</b><small data-pdp-sub="hero-suffix">/mán</small></span> 4506 <span class="pdp-sub__pct" data-pdp-sub="hero-pill">20% afsláttur</span> 4507 </div> 4508 <div class="pdp-sub__hero-prices"> 4509 <s data-pdp-sub="hero-full">5.985 kr</s> 4510 <strong><span data-pdp-sub="hero-total">4.788 kr</span><small data-pdp-sub="hero-suffix-2">/mán</small></strong> 4511 <span class="pdp-sub__hero-stick" data-pdp-sub="hero-stick">(160 kr / stikan)</span> 4512 </div> 4513 <div class="pdp-sub__meter" aria-hidden="true" data-pdp-sub="meter"> 4514 <span class="pdp-sub__seg is-on"></span><span class="pdp-sub__seg"></span><span class="pdp-sub__seg"></span> 4515 </div> 4516 <div class="pdp-sub__meter-labels" aria-hidden="true" data-pdp-sub="meter-labels"> 4517 <span class="is-on">20%</span><span>20% <i>+ brúsi</i></span><span>25% <i>+ brúsi</i></span> 4518 </div> 4519 <button type="button" class="pdp-sub__nudge" data-pdp-sub="nudge">Farðu à 6 kassa â frÃr glerbrúsi og frà sending</button> 4520 </div> 4521 4522 <div class="pdp-sub__rows-head"> 4523 <p class="pdp-sub__heading">Veldu bragðtegundir</p> 4524 <span class="pdp-sub__counter" data-pdp-sub="counter" aria-live="polite">3 af 3 kössum</span> 4525 </div> 4526 <div class="pdp-sub__rows" data-pdp-sub="rows"></div> 4527 <p class="pdp-sub__status" data-pdp-sub="status" role="status" aria-live="polite"></p> 4528 4529 <div class="pdp-sub__collapse pdp-sub__gift-wrap" data-pdp-sub="gift"> 4530 <div class="pdp-sub__inner"> 4531 <div class="pdp-sub__gift"> 4532 <img class="pdp-sub__gift-img" src="https://cdn.shopify.com/s/files/1/0609/3003/1754/files/Add_a_heading-3.png?width=200" alt="" loading="lazy" onerror="this.hidden=true"> 4533 <div class="pdp-sub__gift-text"> 4534 <div class="pdp-sub__gift-kicker">Gjöf fylgir áskrift</div> 4535 <div class="pdp-sub__gift-name">Happy Hydrate glerbrúsi</div> 4536 <div class="pdp-sub__gift-sub">Fylgir fyrstu sendingu</div> 4537 </div> 4538 <div class="pdp-sub__gift-price"><s>2.995 kr</s><strong>FRÃTT</strong></div> 4539 </div> 4540 </div> 4541 </div> 4542 4543 <label class="pdp-sub__freq-wrap"> 4544 <span class="pdp-sub__freq-label">Sent</span> 4545 <select class="pdp-sub__freq" data-pdp-sub="freq" aria-label="Hversu oft"> 4546 <option value="0">à 2 vikna fresti</option> 4547 <option value="1" selected>Mánaðarlega</option> 4548 <option value="2">à 2 mánaða fresti</option> 4549 </select> 4550 </label> 4551 4552 <a class="pdp-sub__more" href="/pages/askrift-box">Vilt þú blanda saman vörum? Opna áskriftarsmiðinn â</a> 4553 </div> 4554 </div> 4555 </div> 4556 </div> 4557 </div> 4558 <button class="productV2ContentAtcButton button" id="primary-atc" data-pdp-sub="cta"> 4559 <div style="display: flex; gap: 12px;"> 4560 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="25" viewB
4560ox="0 0 24 25" fill="none" data-pdp-sub="cart-icon"> 4561 <path d="M20.2131 13.0482H7.24196L5.65625 5.11963H21.5133C21.6294 5.12006 21.7438 5.1459 21.8487 5.19538C21.9535 5.24484 22.0463 5.31672 22.1204 5.40593C22.1946 5.49513 22.2482 5.59951 22.2775 5.71169C22.3068 5.82388 22.3113 5.94112 22.2903 6.0552L20.9901 12.3981C20.9598 12.5814 20.8646 12.7479 20.7221 12.8672C20.5795 12.9865 20.3989 13.0507 20.2131 13.0482Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 4562 <path d="M5.65959 5.11918L4.99359 2.58204C4.95704 2.40296 4.85973 2.242 4.71814 2.12641C4.57655 2.01083 4.39938 1.94772 4.21659 1.94775H1.69531" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 4563 <path d="M7.25 13.0493L7.916 16.3793C7.95257 16.5584 8.04987 16.7194 8.19145 16.8349C8.33304 16.9505 8.51023 17.0136 8.693 17.0136H18.3501" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 4564 <path d="M17.5585 22.5647C17.1205 22.5647 16.7656 22.2097 16.7656 21.7719C16.7656 21.334 17.1205 20.979 17.5585 20.979C17.9963 20.979 18.3513 21.334 18.3513 21.7719C18.3513 22.2097 17.9963 22.5647 17.5585 22.5647Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 4565 <path d="M9.62098 22.5647C9.1831 22.5647 8.82812 22.2097 8.82812 21.7719C8.82812 21.334 9.1831 20.979 9.62098 20.979C10.0589 20.979 10.4138 21.334 10.4138 21.7719C10.4138 22.2097 10.0589 22.5647 9.62098 22.5647Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 4566 </svg> 4567 <span class="productV2ContentAtcButtonLabel"> 4568 Bæta við körfu 4569 </span> 4570 </div> 4571 <svg width="30" height="22" viewBox="0 0 30 22" fill="none" xmlns="http://www.w3.org/2000/svg"> 4572 <path d="M18.3955 0.634178C18.762 0.255744 19.3689 0.255744 19.7354 0.634178L28.9854 10.185V10.1859L28.9873 10.1869C28.9883 10.1879 28.9897 10.1892 28.9912 10.1908C28.9947 10.1944 28.9993 10.1997 29.0039 10.2045L29.0625 10.2729C29.1155 10.3432 29.1524 10.4184 29.1797 10.4936H29.1787C29.2269 10.6106 29.25 10.7356 29.25 10.8656C29.25 10.999 29.2256 11.1269 29.1748 11.2465L29.1758 11.2475C29.136 11.3434 29.0726 11.4333 29.0303 11.4945L29.0186 11.5121L29.0039 11.5268H29.0029L29.002 11.5277C29.0009 11.5288 28.9998 11.5308 28.998 11.5326L28.9854 11.5453L19.7354 21.0971C19.5479 21.2907 19.3065 21.3832 19.0654 21.3832C18.8547 21.3832 18.6437 21.3126 18.4688 21.1654L18.3955 21.0971C18.0335 20.7231 18.0335 20.1106 18.3955 19.7367L26.0518 11.8314H1.69336C1.16873 11.8313 0.750082 11.3875 0.75 10.8656C0.75 10.3437 1.16868 9.899 1.69336 9.89883H26.0518L18.3955 1.99453C18.0335 1.62069 18.0337 1.00814 18.3955 0.634178Z" 4573 fill="#FFFFFF" stroke="var(--pdp-v2-atc-button-icon-fill)" 4574 stroke-width="0.5"/> 4575 </svg> 4576 </button> 4577 <p class="pdp-sub__trust" data-pdp-sub="trust" hidden>
4578 <svg width="13" height="11" viewBox="0 0 13 11" fill="none" aria-hidden="true"><path d="M0.998047 5.3964L4.88182 8.65709L11.5397 1.66992" stroke="#44d62c" stroke-width="2"/></svg> 4579 <span>Hættu hvenær sem er · Engin binding · Ãú klárar kaupin á öruggri greiðslusÃðu</span> 4580 </p> 4581 4582 4583 <div class="productV2ContentDescriptionMobile">Fylltu á söltin sem þú tapar! NatrÃum, kalÃum og magnesÃum stuðla að eðlilegri vöðvastarfsemi og vökvajafnvægi. Vertu HAPPY.</div> 4584 <button class="productV2ContentNutritionLabelButtonMobile"> 4585 <svg 4586 class="productV2VisualNutritionLabelButtonSvg" 4587 width="44" 4588 height="44" 4589 viewBox="0 0 44 44" 4590 fill="none" 4591 xmlns="http://www.w3.org/2000/svg" 4592 > 4593 <path d="M32.0811 16.6875C33.9951 15.2025 36.168 14.7342 38.082 15.4492C40.3422 16.2908 41.7059 19.3433 41.7061 21.4717C41.7061 23.6 40.4246 25.5802 39.0771 27.1201C37.6913 28.704 36.003 30.074 34.749 30.998C34.0285 31.526 33.2251 32.1865 32.0811 32.1865C30.9371 32.1865 30.1336 31.526 29.4131 30.998C28.1646 30.074 26.4763 28.704 25.085 27.1201C23.7376 25.5858 22.4561 24.348 22.4561 21.4717C22.4562 18.5955 23.8144 16.2963 26.0801 15.4492C27.9941 14.7342 30.1671 15.2025 32.0811 16.6875ZM18.3311 27.957C19.0899 27.957 19.7058 28.5723 19.7061 29.3311C19.7061 30.0901 19.0901 30.7061 18.3311 30.7061H5.5C4.741 30.7061 4.125 30.0901 4.125 29.3311C4.12526 28.5723 4.74116 27.957 5.5 27.957H18.3311ZM37.1084 18.0293C36.1635 17.6777 34.6526 17.8633 33.0596 19.4863L33.0654 19.4922C32.8069 19.7561 32.455 19.9043 32.0811 19.9043C31.7071 19.9043 31.3551 19.7561 31.0967 19.4922L32.0752 18.5342L32.0703 18.5293L31.0859 19.4922C29.491 17.8642 27.9782 17.6773 27.0322 18.0293C26.1027 18.3758 25.1953 19.4481 25.1953 21.4775C25.1953 22.561 25.8988 23.8975 27.1416 25.3164C28.3461 26.6859 29.8536 27.924 31.0361 28.793C31.4815 29.1228 31.7072 29.2819 31.8887 29.3809C32.0146 29.4466 32.0478 29.4473 32.0752 29.4473C32.1027 29.4473 32.1362 29.4469 32.2627 29.3809C32.4442 29.2819 32.6699 29.1228 33.1152 28.793C34.2977 27.924 35.8043 26.6914 37.0088 25.3164H36.998C38.241 23.892 38.9453 23.507 38.9453 21.4775C38.9453 19.4483 38.0433 18.3759 37.1084 18.0293ZM16.5 18.7939C17.2588 18.7939 17.8747 19.4092 17.875 20.168C17.875 20.927 17.259 21.543 16.5 21.543H5.5C4.741 21.543 4.125 20.927 4.125 20.168C4.12526 19.4092 4.74116 18.7939 5.5 18.7939H16.5ZM36.6689 9.625C37.4277 9.62524 38.0439 10.2411 38.0439 11C38.0439 11.7589 37.4277 12.3748 36.6689 12.375H5.5C4.741 12.375 4.125 11.759 4.125 11C4.125 10.241 4.741 9.625 5.5 9.625H36.6689Z" 4594 fill="var(--pdp-v2-text-color)"/> 4595 </svg> 4596 Innihaldslýsing 4597 </button> 4598 </aside> 4599 4600 4601 </div> 4602 4603 4604 4605 4606</section> 4607<div class="sticky-cart-bottom-sentinel" aria-hidden="true"></div> 4608 4609<div id="mobile-sticky-checkout-container"> 4610 <button class="mobile-sticky-checkout-button button" data-pdp-sub="cta"> 4611 4612 <span style="display: flex; align-items: center;"> 4613 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="25" viewBox="0 0 24 25" fill="none" data-pdp-sub="cart-icon"> 4614 <path d="M20.2131 13.0482H7.24196L5.65625 5.11963H21.5133C21.6294 5.12006 21.7438 5.1459 21.8487 5.19538C21.9535 5.24484 22.0463 5.31672 22.1204 5.40593C22.1946 5.49513 22.2482 5.59951 22.2775 5.71169C22.3068 5.82388 22.3113 5.94112 22.2903 6.0552L20.9901 12.3981C20.9598 12.5814 20.8646 12.7479 20.7221 12.8672C20.5795 12.9865 20.3989 13.0507 20.2131 13.0482Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 4615 <path d="M5.65959 5.11918L4.99359 2.58204C4.95704 2.40296 4.85973 2.242 4.71814 2.12641C4.57655 2.01083 4.39938 1.94772 4.21659 1.94775H1.69531" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 4616 <path d="M7.25 13.0493L7.916 16.3793C7.95257 16.5584 8.04987 16.7194 8.19145 16.8349C8.33304 16.9505 8.51023 17.0136 8.693 17.0136H18.3501" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 4617 <path d="M17.5585 22.5647C17.1205 22.5647 16.7656 22.2097 16.7656 21.7719C16.7656 21.334 17.1205 20.979 17.5585 20.979C17.9963 20.979 18.3513 21.334 18.3513 21.7719C18.3513 22.2097 17.9963 22.5647 17.5585 22.5647Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 4618 <path d="M9.62098 22.5647C9.1831 22.5647 8.82812 22.2097 8.82812 21.7719C8.82812 21.334 9.1831 20.979 9.62098 20.979C10.0589 20.979 10.4138 21.334 10.4138 21.7719C10.4138 22.2097 10.0589 22.5647 9.62098 22.5647Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 4619 </svg> 4620
4621 <span class="productV2ContentAtcButtonLabel" style="margin-left: 12px;"> 4622 Bæta við körfu 4623 </span> 4624 4625 </span><span id="mobile-sticky-atc-price" 4626 data-otp="5,985 kr"> 4627 5,985 kr 4628 </span> 4629 4630 4631 </button> 4632</div> 4633 4634 4635
4636<script> 4637 document.addEventListener("DOMContentLoaded", async function () { 4638 const product = {"id":8033136181386,"title":"Hydration Xpress","handle":"hydration-xpress","description":null,"published_at":"2026-02-03T18:39:18Z","created_at":"2024-04-18T15:01:33Z","vendor":"happyhydrate","type":"","tags":[],"price":199500,"price_min":199500,"price_max":1529000,"available":true,"price_varies":true,"compare_at_price":598500,"compare_at_price_min":598500,"compare_at_price_max":1795500,"compare_at_price_varies":true,"variants":[{"id":50050860712074,"title":"Strawberry Lemonade \/ 10 stikur","option1":"Strawberry Lemonade","option2":"10 stikur","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":{"id":42378071343242,"product_id":8033136181386,"position":1,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Strawberry Lemonade","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496","variant_ids":[50050860712074,50050860744842,50050860777610,50050860810378]},"available":true,"name":"Hydration Xpress - Strawberry Lemonade \/ 10 stikur","public_title":"Strawberry Lemonade \/ 10 stikur","options":["Strawberry Lemonade","10 stikur"],"price":199500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Strawberry Lemonade","id":33624854691978,"position":1,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":50050860744842,"title":"Strawberry Lemonade \/ 30 stikur","option1":"Strawberry Lemonade","option2":"30 stikur","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":{"id":42378071343242,"product_id":8033136181386,"position":1,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Strawberry Lemonade","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496","variant_ids":[50050860712074,50050860744842,50050860777610,50050860810378]},"available":true,"name":"Hydration Xpress - Strawberry Lemonade \/ 30 stikur","public_title":"Strawberry Lemonade \/ 30 stikur","options":["Strawberry Lemonade","30 stikur"],"price":598500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Strawberry Lemonade","id":33624854691978,"position":1,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":50050860777610,"title":"Strawberry Lemonade \/ 60 stikur (FRÃ SENDING)","option1":"Strawberry Lemonade","option2":"60 stikur (FRÃ SENDING)","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":{"id":42378071343242,"product_id":8033136181386,"position":1,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Strawberry Lemonade","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496","variant_ids":[50050860712074,50050860744842,50050860777610,50050860810378]},"available":true,"name":"Hydration Xpress - Strawberry Lemonade \/ 60 stikur (FRÃ SENDING)","public_title":"Strawberry Lemonade \/ 60 stikur (FRÃ SENDING)","options":["Strawberry Lemonade","60 stikur (FRÃ SENDING)"],"price":1197000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Strawberry Lemonade","id":33624854691978,"position":1,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":50050860810378,"title":"Strawberry Lemonade \/ 90 stikur (FRÃ SENDING)","option1":"Strawberry Lemonade","option2":"90 stikur (FRÃ SENDING)","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":{"id":42378071343242,"product_id":8033136181386,"position":1,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Strawberry Lemonade","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496","variant_ids":[50050860712074,50050860744842,50050860777610,50050860810378]},"available":true,"name":"Hydration Xpress - Strawberry Lemonade \/ 90 stikur (FRÃ SENDING)","public_title":"Strawberry Lemonade \/ 90 stikur (FRÃ SENDING)","options":["Strawberry Lemonade","90 stikur (FRÃ SENDING)"],"price":1529000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Strawberry Lemonade","id":33624854691978,"position":1,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44751436906634,"title":"Pina Colada \/ 10 stikur","option1":"Pina Colada","option2":"10 stikur","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071376010,"product_id":8033136181386,"position":3,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Pina Colada","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496","variant_ids":[44751436906634,44751436939402,44751436972170,44751437004938]},"available":false,"name":"Hydration Xpress - Pina Colada \/ 10 stikur","public_title":"Pina Colada \/ 10 stikur","options":["Pina Colada","10 stikur"],"price":199500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Pina Colada","id":33624854724746,"position":3,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44751436939402,"title":"Pina Colada \/ 30 stikur","option1":"Pina Colada","option2":"30 stikur","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071376010,"product_id":8033136181386,"position":3,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Pina Colada","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496","variant_ids":[44751436906634,44751436939402,44751436972170,44751437004938]},"available":false,"name":"Hydration Xpress - Pina Colada \/ 30 stikur","public_title":"Pina Colada \/ 30 stikur","options":["Pina Colada","30 stikur"],"price":598500,"weight":0,"compare_at_price":598500,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Pina Colada","id":33624854724746,"position":3,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44751436972170,"title":"Pina Colada \/ 60 stikur (FRÃ SENDING)","option1":"Pina Colada","option2":"60 stikur (FRÃ SENDING)","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071376010,"product_id":8033136181386,"position":3,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Pina Colada","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496","variant_ids":[44751436906634,44751436939402,44751436972170,44751437004938]},"available":false,"name":"Hydration Xpress - Pina Colada \/ 60 stikur (FRÃ SENDING)","public_title":"Pina Colada \/ 60 stikur (FRÃ SENDING)","options":["Pina Colada","60 stikur (FRÃ SENDING)"],"price":1197000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Pina Colada","id":33624854724746,"position":3,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44751437004938,"title":"Pina Colada \/ 90 stikur (FRÃ SENDING)","option1":"Pina Colada","option2":"90 stikur (FRÃ SENDING)","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071376010,"product_id":8033136181386,"position":3,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Pina Colada","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496","variant_ids":[44751436906634,44751436939402,44751436972170,44751437004938]},"available":false,"name":"Hydration Xpress - Pina Colada \/ 90 stikur (FRÃ SENDING)","public_title":"Pina Colada \/ 90 stikur (FRÃ SENDING)","options":["Pina Colada","90 stikur (FRÃ SENDING)"],"price":1529000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Pina Colada","id":33624854724746,"position":3,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44751437037706,"title":"Mixed Berries \/ 10 stikur","option1":"Mixed Berries","option2":"10 stikur","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071408778,"product_id":8033136181386,"position":4,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Mixed Berries","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496","variant_ids":[44751437037706,44751437070474,44751437103242,44751437136010]},"available":true,"name":"Hydration Xpress - Mixed Berries \/ 10 stikur","public_title":"Mixed Berries \/ 10 stikur","options":["Mixed Berries","10 stikur"],"price":199500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Mixed Berries","id":33624854757514,"position":4,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44751437070474,"title":"Mixed Berries \/ 30 stikur","option1":"Mixed Berries","option2":"30 stikur","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071408778,"product_id":8033136181386,"position":4,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Mixed Berries","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496","variant_ids":[44751437037706,44751437070474,44751437103242,44751437136010]},"available":true,"name":"Hydration Xpress - Mixed Berries \/ 30 stikur","public_title":"Mixed Berries \/ 30 stikur","options":["Mixed Berries","30 stikur"],"price":598500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Mixed Berries","id":33624854757514,"position":4,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44751437103242,"title":"Mixed Berries \/ 60 stikur (FRÃ SENDING)","option1":"Mixed Berries","option2":"60 stikur (FRÃ SENDING)","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071408778,"product_id":8033136181386,"position":4,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Mixed Berries","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496","variant_ids":[44751437037706,44751437070474,44751437103242,44751437136010]},"available":true,"name":"Hydration Xpress - Mixed Berries \/ 60 stikur (FRÃ SENDING)","public_title":"Mixed Berries \/ 60 stikur (FRÃ SENDING)","options":["Mixed Berries","60 stikur (FRÃ SENDING)"],"price":1197000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Mixed Berries","id":33624854757514,"position":4,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44751437136010,"title":"Mixed Berries \/ 90 stikur (FRÃ SENDING)","option1":"Mixed Berries","option2":"90 stikur (FRÃ SENDING)","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071408778,"product_id":8033136181386,"position":4,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Mixed Berries","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496","variant_ids":[44751437037706,44751437070474,44751437103242,44751437136010]},"available":true,"name":"Hydration Xpress - Mixed Berries \/ 90 stikur (FRÃ SENDING)","public_title":"Mixed Berries \/ 90 stikur (FRÃ SENDING)","options":["Mixed Berries","90 stikur (FRÃ SENDING)"],"price":1529000,"weight":0,"compare_at_price":1795500,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Mixed Berries","id":33624854757514,"position":4,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44751437168778,"title":"Lemon\/Lime \/ 10 stikur","option1":"Lemon\/Lime","option2":"10 stikur","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071441546,"product_id":8033136181386,"position":5,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Lemon Lime","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496","variant_ids":[44751437168778,44751437201546,44751437234314,44751437267082]},"available":true,"name":"Hydration Xpress - Lemon\/Lime \/ 10 stikur","public_title":"Lemon\/Lime \/ 10 stikur","options":["Lemon\/Lime","10 stikur"],"price":199500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Lemon Lime","id":33624854790282,"position":5,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"s
4638rc":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44751437201546,"title":"Lemon\/Lime \/ 30 stikur","option1":"Lemon\/Lime","option2":"30 stikur","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071441546,"product_id":8033136181386,"position":5,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Lemon Lime","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496","variant_ids":[44751437168778,44751437201546,44751437234314,44751437267082]},"available":true,"name":"Hydration Xpress - Lemon\/Lime \/ 30 stikur","public_title":"Lemon\/Lime \/ 30 stikur","options":["Lemon\/Lime","30 stikur"],"price":598500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Lemon Lime","id":33624854790282,"position":5,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44751437234314,"title":"Lemon\/Lime \/ 60 stikur (FRÃ SENDING)","option1":"Lemon\/Lime","option2":"60 stikur (FRÃ SENDING)","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071441546,"product_id":8033136181386,"position":5,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Lemon Lime","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496","variant_ids":[44751437168778,44751437201546,44751437234314,44751437267082]},"available":true,"name":"Hydration Xpress - Lemon\/Lime \/ 60 stikur (FRÃ SENDING)","public_title":"Lemon\/Lime \/ 60 stikur (FRÃ SENDING)","options":["Lemon\/Lime","60 stikur (FRÃ SENDING)"],"price":1197000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Lemon Lime","id":33624854790282,"position":5,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44751437267082,"title":"Lemon\/Lime \/ 90 stikur (FRÃ SENDING)","option1":"Lemon\/Lime","option2":"90 stikur (FRÃ SENDING)","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071441546,"product_id":8033136181386,"position":5,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Lemon Lime","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496","variant_ids":[44751437168778,44751437201546,44751437234314,44751437267082]},"available":true,"name":"Hydration Xpress - Lemon\/Lime \/ 90 stikur (FRÃ SENDING)","public_title":"Lemon\/Lime \/ 90 stikur (FRÃ SENDING)","options":["Lemon\/Lime","90 stikur (FRÃ SENDING)"],"price":1529000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Lemon Lime","id":33624854790282,"position":5,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":45773488324746,"title":"Peach Crush \/ 10 stikur","option1":"Peach Crush","option2":"10 stikur","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071474314,"product_id":8033136181386,"position":6,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Peach Crush","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496","variant_ids":[45773488324746,45773488357514,45773488390282,45773488423050]},"available":true,"name":"Hydration Xpress - Peach Crush \/ 10 stikur","public_title":"Peach Crush \/ 10 stikur","options":["Peach Crush","10 stikur"],"price":199500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Peach Crush","id":33624854823050,"position":6,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":45773488357514,"title":"Peach Crush \/ 30 stikur","option1":"Peach Crush","option2":"30 stikur","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071474314,"product_id":8033136181386,"position":6,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Peach Crush","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496","variant_ids":[45773488324746,45773488357514,45773488390282,45773488423050]},"available":true,"name":"Hydration Xpress - Peach Crush \/ 30 stikur","public_title":"Peach Crush \/ 30 stikur","options":["Peach Crush","30 stikur"],"price":598500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Peach Crush","id":33624854823050,"position":6,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":45773488390282,"title":"Peach Crush \/ 60 stikur (FRÃ SENDING)","option1":"Peach Crush","option2":"60 stikur (FRÃ SENDING)","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071474314,"product_id":8033136181386,"position":6,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Peach Crush","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496","variant_ids":[45773488324746,45773488357514,45773488390282,45773488423050]},"available":true,"name":"Hydration Xpress - Peach Crush \/ 60 stikur (FRÃ SENDING)","public_title":"Peach Crush \/ 60 stikur (FRÃ SENDING)","options":["Peach Crush","60 stikur (FRÃ SENDING)"],"price":1197000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Peach Crush","id":33624854823050,"position":6,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":45773488423050,"title":"Peach Crush \/ 90 stikur (FRÃ SENDING)","option1":"Peach Crush","option2":"90 stikur (FRÃ SENDING)","option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":{"id":42378071474314,"product_id":8033136181386,"position":6,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Peach Crush","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496","variant_ids":[45773488324746,45773488357514,45773488390282,45773488423050]},"available":true,"name":"Hydration Xpress - Peach Crush \/ 90 stikur (FRÃ SENDING)","public_title":"Peach Crush \/ 90 stikur (FRÃ SENDING)","options":["Peach Crush","90 stikur (FRÃ SENDING)"],"price":1529000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Peach Crush","id":33624854823050,"position":6,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}
4638,{"id":47230751473802,"title":"Peru \/ 10 stikur","option1":"Peru","option2":"10 stikur","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":{"id":42378071507082,"product_id":8033136181386,"position":7,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Peru","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496","variant_ids":[47230751473802,47230751506570,47230751539338,47230751572106]},"available":true,"name":"Hydration Xpress - Peru \/ 10 stikur","public_title":"Peru \/ 10 stikur","options":["Peru","10 stikur"],"price":199500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Peru","id":33624854855818,"position":7,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":47230751506570,"title":"Peru \/ 30 stikur","option1":"Peru","option2":"30 stikur","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":{"id":42378071507082,"product_id":8033136181386,"position":7,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Peru","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496","variant_ids":[47230751473802,47230751506570,47230751539338,47230751572106]},"available":true,"name":"Hydration Xpress - Peru \/ 30 stikur","public_title":"Peru \/ 30 stikur","options":["Peru","30 stikur"],"price":598500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Peru","id":33624854855818,"position":7,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":47230751539338,"title":"Peru \/ 60 stikur (FRÃ SENDING)","option1":"Peru","option2":"60 stikur (FRÃ SENDING)","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":{"id":42378071507082,"product_id":8033136181386,"position":7,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Peru","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496","variant_ids":[47230751473802,47230751506570,47230751539338,47230751572106]},"available":true,"name":"Hydration Xpress - Peru \/ 60 stikur (FRÃ SENDING)","public_title":"Peru \/ 60 stikur (FRÃ SENDING)","options":["Peru","60 stikur (FRÃ SENDING)"],"price":1197000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Peru","id":33624854855818,"position":7,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":47230751572106,"title":"Peru \/ 90 stikur (FRÃ SENDING)","option1":"Peru","option2":"90 stikur (FRÃ SENDING)","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":{"id":42378071507082,"product_id":8033136181386,"position":7,"created_at":"2026-09-02T20:38:14Z","updated_at":"2026-09-02T20:38:16Z","alt":"Hydration Xpress Peru","width":1240,"height":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496","variant_ids":[47230751473802,47230751506570,47230751539338,47230751572106]},"available":true,"name":"Hydration Xpress - Peru \/ 90 stikur (FRÃ SENDING)","public_title":"Peru \/ 90 stikur (FRÃ SENDING)","options":["Peru","90 stikur (FRÃ SENDING)"],"price":1529000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Hydration Xpress Peru","
4638id":33624854855818,"position":7,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}],"images":["\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496","\/\/happyhydrate.is\/cdn\/shop\/files\/Comp_Christmas_transparent_e3b1eb67-6ecf-40bf-9b69-c83038d425ae.png?v=1770219035","\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496","\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496","\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496","\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496","\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496"],"featured_image":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496","options":["Bragð","Magn"],"media":[{"alt":"Hydration Xpress Strawberry Lemonade","id":33624854691978,"position":1,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496"},"aspect_ratio":1.0,"height":1240,"media_type":"image","src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496","width":1240},{"alt":null,"id":30888208531594,"position":2,"preview_image":{"aspect_ratio":1.0,"height":3000,"width":3000,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/Comp_Christmas_transparent_e3b1eb67-6ecf-40bf-9b69-c83038d425ae.png?v=1770219035"},"aspect_ratio":1.0,"height":3000,"media_type":"image","src":"\/\/happyhydrate.is\/cdn\/shop\/files\/Comp_Christmas_transparent_e3b1eb67-6ecf-40bf-9b69-c83038d425ae.png?v=1770219035","width":3000},{"alt":"Hydration Xpress Pina Colada","id":33624854724746,"position":3,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496"},"aspect_ratio":1.0,"height":1240,"media_type":"image","src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496","width":1240},{"alt":"Hydration Xpress Mixed Berries","id":33624854757514,"position":4,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496"},"aspect_ratio":1.0,"height":1240,"media_type":"image","src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-MixedBerries.png?v=1788381496","width":1240},{"alt":"Hydration Xpress Lemon Lime","id":33624854790282,"position":5,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496"},"aspect_ratio":1.0,"height":1240,"media_type":"image","src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Lime.png?v=1788381496","width":1240},{"alt":"Hydration Xpress Peach Crush","id":33624854823050,"position":6,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496"},"aspect_ratio":1.0,"height":1240,"media_type":"image","src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496","width":1240},{"alt":"Hydration Xpress Peru","id":33624854855818,"position":7,"preview_image":{"aspect_ratio":1.0,"height":1240,"width":1240,"src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496"},"aspect_ratio":1.0,"height":1240,"media_type":"image","src":"\/\/happyhydrate.is\/cdn\/shop\/files\/HappyHydrate-Vorumynd-vef-Pear.png?v=1788381496","width":1240}],"requires_selling_plan":false,"selling_plan_groups":[],"content":null}; 4639 const section = document.querySelector('[id="template--22413711704202__section_product_v2_R9fnpP"]'); 4640 const settings = {"product":"","title":"Hydration Xpress","short_description":"Fylltu á söltin sem þú ta
4640par! NatrÃum, kalÃum og magnesÃum stuðla að eðlilegri vöðvastarfsemi og vökvajafnvægi. Vertu HAPPY.","description":"Fylltu á söltin sem þú tapar! NatrÃum, kalÃum og magnesÃum stuðla að eðlilegri vöðvastarfsemi og vökvajafnvægi. Vertu HAPPY.","nutrition_label":"\/\/happyhydrate.is\/cdn\/shop\/files\/LL_INNIHALD.png?v=1776255645","how_to_enjoy_text":"\u003cp\u003e\u003cstrong\u003eSkref 1: Hella\u003c\/strong\u003e\u003cbr\/\u003eRÃfðu stikuna og bættu ofan à 300 - 500 ml af vatni\u003cbr\/\u003e\u003cbr\/\u003e\u003cstrong\u003eSkref 2: Hrista\u003cbr\/\u003e\u003c\/strong\u003eHristu eða hrærðu þangað til duftið blandast við vatnið\u003cbr\/\u003e\u003cbr\/\u003e\u003cstrong\u003eSkref 3: Njóta\u003c\/strong\u003e\u003cbr\/\u003eVelkomin\/n à vökvajafnvægi\u003c\/p\u003e","hide_accordions":true}; 4641 4642 // Listen for history change 4643 window.addEventListener("popstate", function () { 4644 const url = new URL(window.location.href); 4645 const elementClass = url.hash.replace("#", ""); 4646 const element = document.querySelector(elementClass); 4647 if (element) { 4648 window.scrollTo({ 4649 behavior: 'smooth', 4650 top: element.offsetTop - 161, 4651 }); 4652 } 4653 }); 4654 4655 4656 const productSwiper = new Swiper(section.querySelector(".productV2VisualSwiper"), { 4657 slidesPerView: 1, 4658 allowTouchMove: false, 4659 effect: 'flip' 4660 }); 4661 4662 4663 4664 // === MOBILE THUMBNAIL CAROUSEL (3-up with chevrons) === 4665 (function () { 4666 const sectionEl = document.querySelector('[id="template--22413711704202__section_product_v2_R9fnpP"]'); 4667 if (!sectionEl) return; 4668 4669 // Containers 4670 const mobileCarousel = sectionEl.querySelector('.pdpv2-mobile-thumb-carousel'); 4671 const viewport = sectionEl.querySelector('.pdpv2-thumb-viewport'); 4672 const prevBtn = sectionEl.querySelector('.pdpv2-thumb-btn--prev'); 4673 const nextBtn = sectionEl.querySelector('.pdpv2-thumb-btn--next'); 4674 4675 4676 if (!mobileCarousel || !viewport || !prevBtn || !nextBtn) return; 4677 4678 // Only run on mobile 4679 const isMobile = () => window.matchMedia('(max-width: 1000px)').matches; 4680 4681 // Variant gallery JSON rendered in Liquid 4682 const galleryJSON = document.getElementById('variant-gallery-template--22413711704202__section_product_v2_R9fnpP'); 4683 const variantGalleries = galleryJSON ? JSON.parse(galleryJSON.textContent || '{}') : {}; 4684 4685 // Helper: get active variant id from data attr (set in the <section>) 4686 const initialVariantId = sectionEl.getAttribute('data-initial-variant-id'); 4687 4688 // Given a variant id, build an array of image URLs: 4689 // [ mainImage (prepended) , ...variant_gallery_metafield ] 4690 function buildImageList(variantId) { 4691 // 1) Main image for variant (featured media or image) 4692 const v = product.variants.find(x => String(x.id) === String(variantId)) || product.variants[0]; 4693 const mainSrc = 4694 (v && v.featured_media && v.featured_media.preview_image && v.featured_media.preview_image.src) || 4695 (v && v.featured_image && v.featured_image.src) || 4696 mainImg.getAttribute('src'); 4697 4698 // 2) Extra gallery from metafield (Liquid JSON already normalized to absolute URLs) 4699 const extras = variantGalleries[String(variantId)] || []; 4700 4701 // Deduplicate while keeping main first 4702 const set = new Set(); 4703 const list = []; 4704 function push(u){ if (u && !set.has(u)) { set.add(u); list.push(u); } } 4705 push(mainSrc); 4706 extras.forEach(push); 4707 return list; 4708 } 4709 4710 // State 4711 let images = buildImageList(initialVariantId); 4712 let center = 0; // index of the "middle" item (selected) 4713 4714 // Render exactly 3 thumbnails around `center` (circular) 4715 function renderThumbs() { 4716 viewport.innerHTML = ''; 4717 if (!images.length) return; 4718 4719 const indices = []; 4720 if (images.length === 1) { 4721 indices.push(0, 0, 0); 4722 } else if (images.length === 2) { 4723 indices.push((center - 1 + images.length) % images.length, center, (center + 1) % images.length); 4724 } else { 4725 indices.push((center - 1 + images.length) % images.length, center, (center + 1) % images.length); 4726 } 4727
4728 indices.forEach((idx, slot) => { 4729 const li = document.createElement('li'); 4730 if (slot === 1) li.classList.add('is-selected'); // middle = selected 4731 const img = document.createElement('img'); 4732 img.alt = "Hydration Xpress"; 4733 img.loading = 'lazy'; 4734 img.src = images[idx]; 4735 img.decoding = 'async'; 4736 li.appendChild(img); 4737 viewport.appendChild(li); 4738 }); 4739 4740 // Swap the main image to the selected (center) URL 4741 // We update the active slide if present, otherwise all slides (safe fallback) 4742 const activeSlideImg = 4743 sectionEl.querySelector('.productV2VisualSwiper .swiper-slide-active') || 4744 sectionEl.querySelector('.productV2VisualSwiper .swiper-slide'); 4745 4746 if (images[center]) { 4747 if (activeSlideImg) { 4748 activeSlideImg.setAttribute('src', images[center]); 4749 activeSlideImg.setAttribute('loading', 'eager'); 4750 } else { 4751 // fallback: update every slide's src 4752 sectionEl.querySelectorAll('.productV2VisualSwiper .swiper-slide') 4753 .forEach(imgEl => { 4754 imgEl.setAttribute('src', images[center]); 4755 imgEl.setAttribute('loading', 'eager'); 4756 }); 4757 } 4758 } 4759 } 4760 4761 function goPrev() { 4762 if (!images.length) return; 4763 center = (center - 1 + images.length) % images.length; 4764 renderThumbs(); 4765 } 4766 function goNext() { 4767 if (!images.length) return; 4768 center = (center + 1) % images.length; 4769 renderThumbs(); 4770 } 4771 4772 prevBtn.addEventListener('click', goPrev); 4773 nextBtn.addEventListener('click', goNext); 4774 4775 // Re-build when screen switches between breakpoints 4776 const mql = window.matchMedia('(max-width: 1000px)'); 4777 function handleMQ(e){ 4778 if (e.matches) { 4779 mobileCarousel.hidden = false; 4780 renderThumbs(); 4781 } else { 4782 mobileCarousel.hidden = true; 4783 } 4784 } 4785 handleMQ(mql); 4786 mql.addEventListener('change', handleMQ); 4787 4788 // Optional: if your product JS fires a custom event when variant changes, 4789 // listen and rebuild images so the carousel follows the selected variant. 4790 document.addEventListener('pdp:variant-change', (ev) => { 4791 const newId = ev.detail && ev.detail.id; 4792 if (!newId) return; 4793 images = buildImageList(newId); 4794 center = 0; 4795 if (isMobile()) renderThumbs(); 4796 }); 4797 4798 // First paint (mobile only) 4799 if (isMobile()) renderThumbs(); 4800 })(); 4801 4802 4803 4804 4805 4806 4807 // Nutritional Facts 4808 function wireNutritionSection(section) { 4809 const nutritionDetails = section.querySelector("details.nutrition-tab"); 4810 if (!nutritionDetails) return; 4811 4812 const dialog = section.querySelector(".productV2VisualNutritionLabelDialog"); 4813 const closeBtn = section.querySelector(".productV2VisualDescriptionDesktop .productV2VisualNutritionLabelDialogCloseButton, .productV2VisualDescriptionMobile .productV2VisualNutritionLabelDialogCloseButton") || section.querySelector(".productV2VisualNutritionLabelDialogCloseButton"); 4814 const dialogInner = dialog?.querySelector(".productVisualV2NutritionLabelDialogWrapper"); 4815 4816 let isOpen = false; 4817 4818 function openDialog(e) { 4819 if (isOpen || !dialog) return; 4820 if (e) e.stopPropagation(); 4821 dialog.showModal(); 4822 isOpen = true; 4823 document.body.classList.add("noScroll"); 4824 } 4825 4826 function closeDialog(e) { 4827 if (e) { 4828 e.preventDefault(); 4829 e.stopPropagation(); // avoid click-through onto <summary> 4830 } 4831 if (dialog?.open) dialog.close(); 4832 isOpen = false; 4833 document.body.classList.remove("noScroll"); 4834 if (nutritionDetails?.open) nutritionDetails.open = false; // collapse the accordion 4835 } 4836 4837 // Open when the <details> summary is clicked (or anything that bubbles from it) 4838 nutritionDetails.addEventListener("click", (e) => { 4839 // only react when the summary itself (or its desce
4839ndants) is clicked 4840 const isOnSummary = e.target.tagName === "SUMMARY" || e.target.closest("summary"); 4841 if (isOnSummary) openDialog(e); 4842 }); 4843 4844 // Also handle the âzoom-inâ button inside the panel, if used 4845 const zoomBtn = section.querySelector(".nutrition-open"); 4846 if (zoomBtn) zoomBtn.addEventListener("click", openDialog); 4847 4848 // Close via the X button 4849 if (closeBtn) closeBtn.addEventListener("click", closeDialog); 4850 4851 // Close via ESC (dialog âcancelâ event) 4852 if (dialog) { 4853 dialog.addEventListener("cancel", (e) => { 4854 e.preventDefault(); // run our cleanup 4855 closeDialog(e); 4856 }); 4857 4858 // Close by clicking the backdrop (outside the inner wrapper) 4859 dialog.addEventListener("click", (e) => { 4860 if (e.target === dialog && !dialogInner?.contains(e.target)) { 4861 closeDialog(e); 4862 } 4863 }); 4864 } 4865 } 4866
4867 // Wire up BOTH desktop and mobile sections (coexist safely) 4868 document.querySelectorAll(".productV2VisualDescriptionDesktop, .productV2VisualDescriptionMobile") 4869 .forEach(wireNutritionSection); 4870 4871 4872 const flagsEl = document.getElementById("variant-flags-template--22413711704202__section_product_v2_R9fnpP"); 4873 const variantFlags = flagsEl ? JSON.parse(flagsEl.textContent || "{}") : {}; 4874 4875 function renderIngredientsImage(variant) { 4876 const entry = variantFlags?.[String(variant.id)]; 4877 const url = entry?.ingredientsImage || ""; // may be "" 4878 4879 const imgs = document.querySelectorAll(".productNutritionFactsLabel"); 4880 const zoomBtns = document.querySelectorAll(".nutrition-open"); 4881 4882 imgs.forEach(img => { 4883 if (url) { 4884 img.src = url; // swap image 4885 img.hidden = false; 4886 } else { 4887 img.hidden = true; // or set a fallback src 4888 } 4889 }); 4890 4891 zoomBtns.forEach(btn => { 4892 if (url) { 4893 btn.style.backgroundImage = `url("${url}")`; 4894 btn.style.backgroundSize = "cover"; 4895 btn.style.backgroundPosition = "center"; 4896 } else { 4897 btn.style.backgroundImage = "none"; 4898 } 4899 }); 4900 } 4901 4902 4903 4904 4905 4906 function getActiveVariant() { 4907 // collect options from inputs 4908 const options = []; 4909 section.querySelectorAll(".productV2ContentOption").forEach((group) => { 4910 if (group.querySelector("input:checked")) { 4911 options.push(group.querySelector("input:checked").value); 4912 } 4913 }); 4914 4915 // find new variant based on the options 4916 return product.variants.find((variant) => { 4917 return JSON.stringify(variant.options) === JSON.stringify(options); 4918 }); 4919 } 4920 4921 // âââââââââââ PDP ÃSKRIFT PANEL (pdp-sub) âââââââââââ 4922 // Data tables copied from sections/sub-builder.liquid (CDN, PRODUCTS, TIERS, FREQUENCIES). 4923 // Prices are krónur (ISK, exponent 0). The server re-prices every plan at /checkout/session, 4924 // so a mismatch here is a display bug, never a money bug. 4925 const PDP_SUB = { 4926 CDN: 'https://cdn.shopify.com/s/files/1/0609/3003/1754/files/', 4927 CHECKOUT_URL: 'https://askrift.happyhydrate.is/checkout', 4928 BUILDER_URL: '/pages/askrift-box', 4929 FREE_SHIP_MIN: 8500, // src/subscriptions/shipping.ts freeThreshold (item total) 4930 HEADER_OFFSET: 161, // same offset the popstate handler uses 4931 STATUS_MS: 2500, 4932 // DEFAULT tier schedule (hydration / energy / kids). A category may carry its own tiers array 4933 // (creatine below); every reader goes through the module's TIERS = the ACTIVE schedule. 4934 TIERS: [ 4935 { units: 3, discount: 20, freeBottle: false }, 4936 { units: 6, discount: 20, freeBottle: true, popular: true }, 4937 { units: 9, discount: 25, freeBottle: true, bestDeal: true } 4938 ], 4939 FREQUENCIES: [ 4940 { count: 2, type: 'WEEK', label: 'à 2 vikna fresti', suffix: ' á sendingu', phrase: 'á 2 vikna fresti' }, 4941 { count: 1, type: 'MONTH', label: 'Mánaðarlega', suffix: '/mán', phrase: 'mánaðarlega' }, 4942 { count: 2, type: 'MONTH', label: 'à 2 mánaða fresti', suffix: ' á sendingu', phrase: 'á 2 mánaða fresti' } 4943 ], 4944 FREE_BOTTLE: { name: 'Happy Hydrate glerbrúsi', price: 2995, img: 'https://cdn.shopify.com/s/files/1/0609/3003/1754/files/Add_a_heading-3.png?width=200' }, 4945 PRODUCTS: { 4946 hydration: { name: 'Hydration Xpress', sticksPerBox: 10, flavors: [ 4947 { id: 'hyd-lemon', name: 'Lemon Lime', aliases: ['Lemon/Lime'], sku: 'HAP-1001', price10: 1995, accent: '#44d62c', img: 'Box_Lemon_lime.png' }, 4948 { id: 'hyd-berry', name: 'Mixed Berries', aliases: [], sku: 'HAP-1002', price10: 1995, accent: '#ff40b6', img: 'Box_Mixed_berries.png' }, 4949 { id: 'hyd-strawberry', name: 'Strawberry Lemonade', aliases: [], sku: 'HAP-1011', price10: 1995, accent: '#ff2d55', img: 'Box_StrawberryLemonade.jpg' }, 4950 { id: 'hyd-pina', name: 'Piña Colada', aliases: ['Pina Colada'], sku: 'HAP-1003', price10: 1995, accent: '#ffea00', img: 'Box_Pina_colada.png' }, 4951 { id: 'hyd-peach', name: 'Peach Crush', aliases: [], sku: 'HAP-1004', price10: 1995, accent: '#ff5338', img: 'Box_Peach_crush.png' }, 4952 { id: 'hyd-pear', name: 'Peru', aliases: [], sku: 'HAP-1005', price10: 1995, accent: '#e0e01b', img: 'Box_Pear.png' } 4953 ] }, 4954 creatine: { name: 'Creatine Xpress', sticksPerBox: 20, tiers: [ 4955 // Owner decision 2026-09-08: flat 20% from ONE box (what most creatine subscribers buy), glerbrúsi at 4. 4956 // Magn 20/40/60/80 stikur â tier 0/1/2/3; sticks per chip = units à sticksPerBox (20/40/60/80). 4957 { units: 1, discount: 20, freeBottle: false, popular: true }, 4958 { units: 2, discount: 20, freeBottle: false }, 4959 { units: 3, discount: 20, freeBottle: false }, 4960 { units: 4, discount: 20, freeBottle: true } 4961 ], flavors: [ 4962 { id: 'cre-lemon', name: 'Lemon Lime', aliases: ['Lemon/Lime'], sku: 'HAP-2002', price10: 2890, accent: '#44d62c', img: 'Box_Lemon_Lime_Creatine.png' }, 4963 { id: 'cre-berry', name: 'Mixed Berries', aliases: [], sku: 'HAP-2001', price10: 2890, accent: '#ff40b6', img: 'Box_Mixed_Berries_Creatine.png' }, 4964 { id: 'cre-peach', name: 'Peach Crush', aliases: [], sku: 'HAP-2003', price10: 2890, accent: '#ff5338', img: '1_544a6bca-20c1-4d68-a331-eeb0b2928098.png' } 4965 ] }, 4966 energy: { name: 'Energy Xpress', sticksPerBox: 10, flavors: [ 4967 { id: 'ene-apple', name: 'Epli & KÃvÃ', aliases: ['Epli & Kiwi'], sku: 'HAP-3001', price10: 1995, accent: '#ffe900', img: 'Box_Epla_Kivi_Energy.png' } 4968 ] }, 4969 kids: { name: 'Hydration Kids', sticksPerBox: 8, flavors: [ 4970 { id: 'kid-berry', name: 'Mixed Berries', aliases: [], sku: 'HAP-4002', price10: 1595, accent: '#ff40b6', img: 'Box_Mixed_Berries_Kids.png' },
4971 { id: 'kid-apple', name: 'Epli & KÃvÃ', aliases: ['Green Apple & Kiwi', 'Epli & Kiwi'], sku: 'HAP-4001', price10: 1595, accent: '#7ed957', img: 'Box_Epla_Kivi_Kids.png' } 4972 ] } 4973 } 4974 }; 4975 4976 // âââââââââââ HANDVIRKT UPPSELT â Stök kaup (pdp-forced) âââââââââââ 4977 // shop.metafields.custom.sold_out_skus lists grunnvara SKUs the owners want shown as Uppselt 4978 // regardless of inventory. The subscription panel gets that through its stock blob (isSoldOut); 4979 // this product's own Bragð à Magn variants carry NO SKU, so the Liquid above emits the forced 4980 // flavours' NAMES (#pdp-forced-soldout) and this block (a) marks the Bragð pill exactly like 4981 // snippets/product-v2-flavor-option.liquid does for a real stock-out and (b) flips `available` 4982 // to false on every product variant of that flavour â the ONE fact pickDefaultSelection() and 4983 // renderCtaOtp() read, so a cold visit never lands on the flavour and Stök kaup with it selected 4984 // shows the sold-out button on all three CTAs (primary, desktop sticky, mobile sticky). 4985 // Fail-open: a missing / malformed blob forces nothing. Runs BEFORE the panel module so its 4986 // first sync() already sees the mutated variants. 4987 // pdp-forced:logic-begin (pure helpers; unit-tested in scratchpad/theme-work/pdp-forced.test.mjs) 4988 // Diacritics class written as the ESCAPED \u0300-\u036f range (see norm() in the panel â literal combining chars do not survive upload). 4989 function pdpForcedNorm(s) { return (s || '').toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '').replace(/[^a-z0-9]/g, ''); } 4990 // Blob text â { skus: Set<UPPER>, names: Set<norm> }. Anything odd â empty sets (= nothing forced). 4991 function pdpForcedParse(text) { 4992 const out = { skus: new Set(), names: new Set() }; 4993 let d; try { d = JSON.parse(text || ''); } catch (e) { return out; } 4994 if (!d || typeof d !== 'object') return out; 4995 (Array.isArray(d.skus) ? d.skus : []).forEach(s => { s = String(s == null ? '' : s).trim().toUpperCase(); if (s) out.skus.add(s); }); 4996 (Array.isArray(d.names) ? d.names : []).forEach(n => { n = pdpForcedNorm(typeof n === 'string' ? n : ''); if (n) out.names.add(n); }); 4997 return out; 4998 } 4999 // A Bragð option value is forced when it matches a forced grunnvara name, or when the panel's flavour 5000 // table maps it (name / alias) to a forced SKU â covers spelling drift such as "Lemon Lime" vs "Lemon/Lime". 5001 function pdpForcedMatches(value, forced, flavors) { 5002 const k = pdpForcedNorm((value || '').replace('(FRà SENDING)', '')); 5003 if (!k) return false; 5004 if (forced.names.has(k)) return true; 5005 return (flavors || []).some(f => forced.skus.has(String(f.sku || '').toUpperCase()) && (pdpForcedNorm(f.name) === k || (f.aliases || []).some(a => pdpForcedNorm(a) === k))); 5006 } 5007 // Index of the Bragð option in product.options (same name list as the Liquid Bragð loop); -1 = none. 5008 function pdpForcedFlavourIndex(optionNames) { 5009 const names = ['Bragð', 'Flavor', 'Energy Xpress (Bragð)']; 5010 return (optionNames || []).findIndex(o => names.indexOf(o && typeof o === 'object' ? o.name : o) >= 0); 5011 } 5012 // pdp-forced:logic-end 5013 (function applyForcedSoldOut() { 5014 try { 5015 const blob = document.getElementById('pdp-forced-soldout-template--22413711704202__section_product_v2_R9fnpP'); 5016 const forced = pdpForcedParse(blob ? blob.textContent : ''); 5017 if (!forced.skus.size && !forced.names.size) return; 5018 const catKey = section.dataset.pdpSubCategory || 'hydration'; 5019 const flavors = (PDP_SUB.PRODUCTS[catKey] || PDP_SUB.PRODUCTS.hydration).flavors; 5020 const isForced = v => pdpForcedMatches(v, forced, flavors); 5021 // (a) pills â the markup the snippet renders when value.variant.available is false 5022 section.querySelectorAll('.productV2ContentOption.flavor .productV2ContentOptionValue.flavor').forEach(pill => { 5023 const input = pill.querySelector('input'); 5024 if (!input || !isForced(input.value)) return; 5025 pill.classList.add('is-sold-out'); 5026 if (!pill.querySelector('.productV2ContentOptionValueLabelSoldOutTag')) { 5027 const tag = document.createElement('span'); tag.className = 'productV2ContentOptionValueLabelSoldOutTag'; tag.textContent = 'Uppselt'; 5028 const val = pill.querySelector('.productV2ContentOptionValueLabelValue'); 5029 if (val && val.parentNode) val.parentNode.insertBefore(tag, val.nextSibling); 5030 else { const lab = pill.querySelector('label'); if (lab) lab.appendChild(tag); } 5031 } 5032 }); 5033 // (b) variants â every availability decision on this page reads product.variants[].available 5034 const fi = pdpForcedFlavourIndex(product.options);
5035 (product.variants || []).forEach(v => { 5036 const opts = Array.isArray(v.options) ? v.options : []; 5037 if (fi >= 0 ? isForced(opts[fi]) : opts.some(isForced)) v.available = false; 5038 }); 5039 } catch (e) { console.error('[pdp-forced]', e); } 5040 })(); 5041 5042 // HARD STOP fyrir Stök kaup. applyForcedSoldOut() setur v.available=false, en vid treystum 5043 // ekki a ad thad hafi tekist: hér er sjálfstæð athugun sem les blobbina upp a nytt. Skilar 5044 // ALLTAF false ef eitthvad bregst (fail-open) â uppselt-rofinn ma aldrei stoppa alla solu. 5045 function variantIsForcedSoldOut(v) { 5046 try { 5047 if (!v) return false; 5048 const blob = document.getElementById('pdp-forced-soldout-template--22413711704202__section_product_v2_R9fnpP'); 5049 const forced = pdpForcedParse(blob ? blob.textContent : ''); 5050 if (!forced.skus.size && !forced.names.size) return false; 5051 const catKey = section.dataset.pdpSubCategory || 'hydration'; 5052 const flavors = (PDP_SUB.PRODUCTS[catKey] || PDP_SUB.PRODUCTS.hydration).flavors; 5053 const fi = pdpForcedFlavourIndex(product.options); 5054 const opts = Array.isArray(v.options) ? v.options : []; 5055 return fi >= 0 5056 ? pdpForcedMatches(opts[fi], forced, flavors) 5057 : opts.some(o => pdpForcedMatches(o, forced, flavors)); 5058 } catch (e) { console.error('[pdp-forced] guard', e); return false; } 5059 } 5060 5061 // The panel module. JS is the SOLE authority over open/closed (.pdp-sub--open / .is-open); 5062 // mode is read from the purchase_type radio on demand, never stored. Every public method is 5063 // no-op safe: a panel exception can never break Stök kaup (see sync()). 5064 const pdpSub = (function createPdpSub() { 5065 const CAT_KEY = section.dataset.pdpSubCategory || 'hydration'; 5066 const CAT = PDP_SUB.PRODUCTS[CAT_KEY] || PDP_SUB.PRODUCTS.hydration; 5067 const TIERS = CAT.tiers || PDP_SUB.TIERS, FREQ = PDP_SUB.FREQUENCIES; // the ACTIVE category's schedule 5068 const I18N = { // Liquid-interpolated once, used in one place 5069 addToCart: "Bæta við körfu", 5070 soldOut: "Uppselt" 5071 }; 5072 const $ = (hook, root) => (root || section).querySelector('[data-pdp-sub="' + hook + '"]'); 5073 const panel = $('panel'), magnWrap = $('magn'); 5074 const el = { tiers: $('tiers'), rows: $('rows'), status: $('status'), counter: $('counter'), gift: $('gift'), nudge: $('nudge'), freq: $('freq') }; 5075 5076 // Stock = the GRUNNVARA's variant availability by SKU (Liquid blob). Fail-open: a missing 5077 // or malformed blob makes every flavour sellable, exactly like the builder. 5078 let HH_STOCK = {}; 5079 try { const s = document.getElementById('pdp-sub-stock-template--22413711704202__section_product_v2_R9fnpP'); if (s) HH_STOCK = JSON.parse(s.textContent) || {}; } catch (e) { HH_STOCK = {}; } 5080 const isSoldOut = f => HH_STOCK[f.sku] === false; // strictly false; anything else = sellable 5081 5082 const state = { tierIdx: 0, freqIdx: 1, qty: {}, seeded: false, statusTimer: 0 }; 5083 let renderedMode = null; // last mode sync() rendered: true = subscription, false = otp 5084 const initAt = Date.now(); 5085 let tierEls = [], rowEls = {}; 5086 5087 // pdp-sub:logic-begin (pure helpers + state logic + mutators + plan encoding; unit-tested in 5088 // scratchpad/theme-work/pdp-sub.test.mjs by extracting this block â keep it DOM-light) 5089 // ---- helpers (pure) ---- 5090 function fmtISK(n) { return String(Math.round(n)).replace(/\B(?=(\d{3})+(?!\d))/g, '.') + ' kr'; } 5091 // Diacritics class written as the ESCAPED \u0300-\u036f range â literal combining chars do not 5092 // survive editors/upload reliably. norm('Lemon/Lime') === norm('Lemon Lime'); norm('Pina Colada') === norm('Piña Colada'). 5093 function norm(s) { return (s || '').toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '').replace(/[^a-z0-9]/g, ''); } 5094 function resolveFlavour(value) { 5095 if (CAT.flavors.length === 1) return CAT.flavors[0];
5096 const k = norm((value || '').replace('(FRà SENDING)', '')); 5097 return CAT.flavors.find(f => norm(f.name) === k || f.aliases.some(a => norm(a) === k)) || null; 5098 } 5099 function activeFlavour() { const r = section.querySelector('.productV2ContentOption.flavor input:checked'); return r ? resolveFlavour(r.value) : (CAT.flavors.length === 1 ? CAT.flavors[0] : null); } 5100 function isSub() { return section.querySelector('input[name="purchase_type"]:checked')?.value === 'subscription'; } 5101 function tier() { return TIERS[state.tierIdx]; } 5102 function units() { return tier().units; } 5103 // The Magn radio VALUE is "10 stikur" / "60 stikur (FRà SENDING)" â parseInt ignores the suffix. 5104 function boxesFromValue(v) { const n = parseInt(v, 10); return isNaN(n) ? 1 : Math.max(1, Math.round(n / CAT.sticksPerBox)); } 5105 function boxesFromMagn() { const r = section.querySelector('.productV2ContentOption.size input:checked'); return r ? boxesFromValue(r.value) : 1; } 5106 // Highest tier whose units fit in b (standard 1/3â0, 6â1, 9â2; creatine 1/2/3/4â0/1/2/3); below the minimum â 0. 5107 function tierFromBoxes(b) { let i = 0; for (let k = 0; k < TIERS.length; k++) if (b >= TIERS[k].units) i = k; return i; } 5108 function minUnits() { return TIERS[0].units; } 5109 function isFlat() { return TIERS.every(T => T.discount === TIERS[0].discount); } // no savings steps â no meter, bottle-only nudge 5110 function previewTierIdx() { return tierFromBoxes(boxesFromMagn()); } 5111 function displayTierIdx() { return isSub() ? state.tierIdx : previewTierIdx(); } 5112 function perBox(f, t) { return Math.round(f.price10 * (100 - TIERS[t == null ? state.tierIdx : t].discount) / 100); } 5113 function perStick(f, t) { return Math.round(perBox(f, t) / CAT.sticksPerBox); } 5114 function sum() { return Object.keys(state.qty).reduce((a, k) => a + state.qty[k], 0); } 5115 function filled() { return CAT.flavors.filter(f => (state.qty[f.id] || 0) > 0); } 5116 function isMixed() { return filled().length >= 2; } 5117 function sellable() { return CAT.flavors.filter(f => !isSoldOut(f)); } 5118 function total() { return CAT.flavors.reduce((a, f) => a + perBox(f) * (state.qty[f.id] || 0), 0); } 5119 function full() { return CAT.flavors.reduce((a, f) => a + f.price10 * (state.qty[f.id] || 0), 0); } 5120 function canCheckout() { return sum() === units() && sum() > 0 && filled().every(f => !isSoldOut(f)); } 5121 function headerNumbers() { // the card always shows a number (preview tier in Stök mode) 5122 const t = displayTierIdx(); 5123 if (isSub() && sum() > 0) return { full: full(), total: total(), t, units: units() }; 5124 const f0 = activeFlavour() || CAT.flavors[0], n = TIERS[t].units; 5125 return { full: f0.price10 * n, total: perBox(f0, t) * n, t, units: n }; 5126 } 5127 // Nudge: stepped schedule â the next tier; flat schedule â the first free-bottle tier. null â nothing left to gain. 5128 function nudgeTarget() { 5129 const i = state.tierIdx; 5130 if (isFlat()) { const b = TIERS.findIndex(T => T.freeBottle); return b > i ? b : null; } 5131 return i + 1 < TIERS.length ? i + 1 : null; 5132 } 5133 function nudgeText(t, f0) { 5134 if (t == null) return 'Ãú ert á bestu kjörum'; 5135 const cur = tier(), T = TIERS[t], head = 'Farðu à ' + T.units + ' kassa â '; 5136 if (T.discount > cur.discount) return head + T.discount + '% afsláttur'; 5137 // "og frà sending" only when the DISCOUNTED target total clears the threshold (kids 6 à 1 276 = 7 656 â no; creatine 4 à 2 312 = 9 248 â yes). 5138 if (T.freeBottle && !cur.freeBottle) return head + 'frÃr glerbrúsi' + (perBox(f0, t) * T.units >= PDP_SUB.FREE_SHIP_MIN ? ' og frà sending' : ''); 5139 return head.slice(0, -3); 5140 } 5141 // Row names show the PRODUCT's option value when it resolves to the flavour ("Lemon/Lime", "Epli & Kiwi", 5142 // "Green Apple & Kiwi"); a flavour absent from the PDP's Bragð values keeps the table name. Plan labels keep the table name. 5143 function optionValues() { 5144 const seen = [], add = v => { v = (v || '').trim(); if (v && seen.indexOf(v) < 0) seen.push(v); }; 5145 section.querySelectorAll('.productV2ContentOption.flavor input').forEach(i => add(i.value)); 5146 section.querySelectorAll('.productV2ContentOption.flavor [data-flavor]').forEach(d => add(d.getAttribute('data-flavor'))); 5147 return seen; 5148 } 5149 // Requires a genuine name/alias match (resolveFlavour() maps ANY value to the single flavour of a one-flavour 5150 // category, so an unexpected option value such as "Default Title" must not become the row name). 5151 function displayName(f) { 5152 for (const raw of optionValues()) { 5153 const v = raw.replace('(FRà SENDING)', '').trim(), k = norm(v); 5154 if (k && (norm(f.name) === k || f.aliases.some(a => norm(a) === k))) return v; 5155 } 5156 return f.name; 5157 } 5158 function largestRow(excludeId) { let best = null; for (const f of CAT.flavors) { if (f.id === excludeId || isSoldOut(f)) continue; if (!best || (state.qty[f.id] || 0) > (state.qty[best.id] || 0)) best = f; } return best; } 5159 function plural(n, one, many) { return n === 1 ? one : many; } 5160 5161 // ---- mutators ---- 5162 // Returns the sold-out swap message ('' when none) so onEnter can fold it into ONE status line â 5163 // a second status() call would overwrite it. The all-sold-out status is set here and stays persistent. 5164 function seedQty() { 5165 const pdp = activeFlavour(); 5166 const f = pdp && !isSoldOut(pdp) ? pdp : (sellable()[0] || null); 5167 state.qty = {}; if (f) state.qty[f.id] = units(); 5168 if (!f) status('Allar bragðtegundir eru uppseldar à áskrift à augnablikinu.', { persist: true, warn: true }); 5169 return pdp && f && f.id !== pdp.id ? pdp.name + ' er uppselt à áskrift â ' + f.name + ' valið à staðinn.' : ''; 5170 } 5171 function onEnter() { 5172 // "við stilltum á 3 kassa" is only true when the seed path ran: re-entry with a retained MIXED mix keeps its tier. 5173 const boxes = boxesFromMagn(), reseed = !isMixed(), min = minUnits(), bump = reseed && boxes < min; // creatine (min 1) never bumps 5174 let swap = ''; 5175 if (reseed) { state.tierIdx = tierFromBoxes(boxes); swap = seedQty(); } else { reconcile(); }
5176 state.seeded = true; 5177 if (bump) { 5178 if (sellable().length) status('Ãskrift er frá ' + min + ' kössum â við stilltum á ' + min + ' kassa.' + (swap ? ' ' + swap : '')); // never overwrite the persistent all-sold-out status 5179 pop(tierEls[0]); 5180 } else if (swap) status(swap); 5181 if (Date.now() - initAt > 1000) scrollCardIntoView(); 5182 } 5183 function onLeave() { clearStatus(); } 5184 function reconcile() { // after tier change / entry: Σ == units if possible 5185 for (const f of CAT.flavors) if (isSoldOut(f) && state.qty[f.id]) delete state.qty[f.id]; 5186 let s = sum(), u = units(); 5187 if (s > u) { // trim from the LAST row (panel order), one box at a time 5188 for (let i = CAT.flavors.length - 1; i >= 0 && s > u; i--) { 5189 const id = CAT.flavors[i].id; 5190 while ((state.qty[id] || 0) > 0 && s > u) { state.qty[id]--; s--; if (!state.qty[id]) delete state.qty[id]; } 5191 } 5192 return {}; 5193 } 5194 if (s < u) { // fill: active PDP flavour â largest row â first sellable 5195 const a = activeFlavour(); const f = a && !isSoldOut(a) ? a : (largestRow() || sellable()[0] || null); 5196 if (f) state.qty[f.id] = (state.qty[f.id] || 0) + (u - s); 5197 return { filled: f ? u - s : 0, fillName: f ? f.name : '' }; 5198 } 5199 return {}; 5200 } 5201 function setTier(idx) { 5202 idx = Math.max(0, Math.min(TIERS.length - 1, idx)); if (idx === state.tierIdx) return; 5203 const before = sum(), prevPct = tier().discount; 5204 state.tierIdx = idx; 5205 const r = reconcile(); const after = sum(); 5206 if (before > after) { const n = before - after; status(n === 1 ? '1 kassi fjarlægður' : n + ' kassar fjarlægðir'); } 5207 else if (r.filled) status(r.filled === 1 ? '1 kassa bætt við ' + r.fillName : r.filled + ' kössum bætt við ' + r.fillName); 5208 if (tier().discount !== prevPct) flash($('hero-pill')); 5209 renderAll(getActiveVariant()); 5210 } 5211 function setQty(fid, delta) { 5212 const f = CAT.flavors.find(x => x.id === fid); if (!f) return; 5213 if (delta > 0) { 5214 if (isSoldOut(f)) return; 5215 if (sum() >= units()) { fullHint(); return; } // no swap â feedback only 5216 state.qty[fid] = (state.qty[fid] || 0) + 1; 5217 } else { 5218 if (!(state.qty[fid] > 0)) return; 5219 state.qty[fid]--; if (!state.qty[fid]) delete state.qty[fid]; 5220 } 5221 renderAll(getActiveVariant()); 5222 } 5223 function fullHint() { 5224 const next = state.tierIdx + 1 < TIERS.length ? TIERS[state.tierIdx + 1].units : null; 5225 status('Pakkinn er fullur â fækkaðu annað bragð til að skipta', { link: next ? { text: 'Viltu ' + next + ' k
5225assa?', onClick: () => setTier(state.tierIdx + 1) } : null }); 5226 } 5227 function onFlavourChange() { 5228 if (!isSub()) return; 5229 const f = activeFlavour(); if (!f) return; 5230 if (isSoldOut(f)) { status(f.name + ' er uppselt à áskrift'); return; } 5231 if (!isMixed()) { state.qty = {}; state.qty[f.id] = units(); } // "follow" â mixed boxes stay put 5232 renderAll(getActiveVariant()); // updateProduct's sync() already ran; this applies the follow 5233 } 5234 function setFreq(idx) { state.freqIdx = Math.max(0, Math.min(FREQ.length - 1, idx | 0)); renderAll(getActiveVariant()); } 5235 function status(text, o) { // inline, aria-live, transient unless persist 5236 o = o || {}; clearTimeout(state.statusTimer); 5237 if (!el.status) return; 5238 el.status.textContent = text; el.status.classList.toggle('is-warn', !!o.warn); 5239 if (o.link) { const b = document.createElement('button'); b.type = 'button'; b.textContent = o.link.text; b.addEventListener('click', o.link.onClick); el.status.appendChild(b); } 5240 if (!o.persist) state.statusTimer = setTimeout(clearStatus, PDP_SUB.STATUS_MS); 5241 } 5242 function clearStatus() { if (!el.status) return; el.status.textContent = ''; el.status.classList.remove('is-warn'); } 5243 function pop(node) { if (!node) return; node.classList.remove('pdp-sub__tier--pop'); void node.offsetWidth; node.classList.add('pdp-sub__tier--pop'); } 5244 function flash(node) { if (!node) return; node.classList.add('is-flash'); setTimeout(() => node.classList.remove('is-flash'), 300); } 5245 5246 // ---- plan encoding (builder-identical; the checkout decodes with plain atob) ---- 5247 function buildPlan() { 5248 const f = FREQ[state.freqIdx]; 5249 const items = CAT.flavors.filter(x => (state.qty[x.id] || 0) > 0) 5250 .map(x => ({ flavourId: x.id, quantity: state.qty[x.id], label: CAT.name + ' ' + x.name })); 5251 return { tierBoxes: units(), intervalType: f.type, intervalCount: f.count, items }; 5252 } 5253 function encodePlan(plan) { return btoa(JSON.stringify(plan)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); } 5254 // btoa THROWS above U+00FF: strip such a label (display-only) to ASCII so no flavour name can strand a customer. 5255 function asciiLabels(plan) { return Object.assign({}, plan, { items: plan.items.map(i => Object.assign({}, i, { label: i.label.normalize('NFD').replace(/[\u0300-\u036f]/g, '').replace(/[^\x20-\x7E]/g, '') })) }); } 5256 // pdp-sub:logic-end 5257 5258 function goToCheckout(btn) { 5259 if (!canCheckout()) { status(sellable().length ? 'Veldu ' + (units() - sum()) + ' kassa til viðbótar' : 'Uppselt à áskrift', { warn: true }); return; } // no .loading left behind 5260 const plan = buildPlan(); 5261 let url; try { url = PDP_SUB.CHECKOUT_URL + '#plan=' + encodePlan(plan); } catch (e) { url = PDP_SUB.CHECKOUT_URL + '#plan=' + encodePlan(asciiLabels(plan)); } 5262 try { if (typeof fbq === 'function') fbq('track', 'InitiateCheckout', { value: total(), currency: 'ISK', content_type: 'product', num_items: plan.items.length, order_type: 'subscription' }); } catch (e) { console.warn('[pdp-sub] fbq', e); } 5263 ctaButtons().forEach(b => b.classList.add('loading')); 5264 window.location.href = url; 5265 } 5266 5267 // ---- mobile scroll: wait for the Magn collapse to finish (the card moves UP by the Magn height) ---- 5268 function scrollCardIntoView() { 5269 if (!window.matchMedia('(max-width: 1000px)').matches) return; 5270 const card = section.querySelector('.productV2ContentPurchaseOption.subscription'); if (!card) return; 5271 const reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches; 5272 const go = () => { 5273 const r = card.getBoundingClientRect(); 5274 if (r.top >= 0 && r.top <= window.innerHeight * 0.45) return; // already comfortably in view 5275 window.scrollTo({ top: window.scrollY + r.top - PDP_SUB.HEADER_OFFSET, behavior: reduce ? 'auto' : 'smooth' }); 5276 }; 5277 // Measure AFTER renderMode() has toggled the classes (same task): with reduced motion the Magn 5278 // collapse is instant, so a synchronous measurement here would be off by the full Magn he
5278ight. 5279 if (reduce || !magnWrap) { requestAnimationFrame(go); return; } 5280 let done = false; 5281 const once = () => { if (done) return; done = true; magnWrap.removeEventListener('transitionend', onEnd); go(); }; 5282 const onEnd = e => { if (e.propertyName === 'grid-template-rows') once(); }; 5283 magnWrap.addEventListener('transitionend', onEnd); setTimeout(once, 420); 5284 } 5285 5286 // ---- renderers (idempotent) ---- 5287 function setHook(hook, text) { const n = $(hook); if (n) n.textContent = text; } 5288 function renderMode(sub) { 5289 section.classList.toggle('pdp-sub--open', sub); 5290 if (panel) panel.classList.toggle('is-open', sub); 5291 if (magnWrap) { magnWrap.classList.toggle('is-open', !sub); magnWrap.toggleAttribute('inert', sub); magnWrap.setAttribute('aria-hidden', String(sub)); } 5292 const trust = $('trust'); if (trust) trust.hidden = !sub; 5293 document.querySelectorAll('[data-pdp-sub="cart-icon"]').forEach(i => { if (sub) i.setAttribute('hidden', ''); else i.removeAttribute('hidden'); }); 5294 } 5295 function renderTiers() { 5296 tierEls.forEach((b, i) => { 5297 const T = TIERS[i], sel = i === state.tierIdx; 5298 b.setAttribute('aria-checked', String(sel)); b.classList.toggle('is-selected', sel); b.tabIndex = sel ? 0 : -1; 5299 b.querySelector('.pdp-sub__tier-n').textContent = String(T.units); 5300 b.querySelector('.pdp-sub__tier-sticks').textContent = (T.units * CAT.sticksPerBox) + ' stikur'; 5301 b.querySelector('.pdp-sub__tier-pill').textContent = T.discount + '% afsláttur'; 5302 b.querySelector('.pdp-sub__tier-gift').hidden = !T.freeBottle; 5303 const badge = b.querySelector('.pdp-sub__tier-badge'); 5304 badge.textContent = T.popular ? 'ð¥ Vinsælast' : (T.bestDeal ? 'Best kjör' : ''); badge.hidden = !(T.popular || T.bestDeal); 5305 badge.classList.toggle('is-best', !!T.bestDeal); 5306 }); 5307 const min = minUnits(); // "Lágmark" only when the schedule starts above one box 5308 setHook('note', (min > 1 ? 'Lágmark ' + min + ' kassar · ' : '') + '1 kassi = ' + CAT.sticksPerBox + ' stikur'); 5309 } 5310 function renderHero() { 5311 const H = headerNumbers(), sfx = FREQ[state.freqIdx].suffix, f0 = activeFlavour() || CAT.flavors[0]; 5312 setHook('hero-saving', fmtISK(H.full - H.total)); setHook('hero-suffix', sfx); setHook('hero-suffix-2', sfx); 5313 setHook('hero-pill', TIERS[H.t].discount + '% afsláttur'); 5314 setHook('hero-full', fmtISK(H.full)); setHook('hero-total', fmtISK(H.total)); 5315 setHook('hero-stick', '(' + fmtISK(perStick(f0, H.t)) + ' / stikan)'); 5316 // The meter shows the SAVINGS steps (20 â 20+brúsi â 25); a flat schedule (creatine) has none â hidden. 5317 const flat = isFlat(); 5318 const meter = $('meter'); if (meter) { meter.hidden = flat; Array.from(meter.children).forEach((s, i) => s.classList.toggle('is-on', i <= state.tierIdx)); } 5319 const labels = $('meter-labels'); if (labels) { labels.hidden = flat; Array.from(labels.children).forEach((s, i) => s.classList.toggle('is-on', i <= state.tierIdx)); } 5320 if (el.nudge) { 5321 const t = nudgeTarget(); 5322 el.nudge.textContent = nudgeText(t, f0); 5323 const nudgeOff = t == null; 5324 if (nudgeOff && document.activeElement === el.nudge) { const c = tierEls[state.tierIdx]; if (c) c.focus(); } // no focus drop at the top tier 5325 el.nudge.disabled = nudgeOff; 5326 } 5327 } 5328 function renderRows() { 5329 const af = activeFlavour(), boxFull = sum() >= units(), single = CAT.flavors.length === 1; 5330 CAT.flavors.forEach(f => { 5331 const r = rowEls[f.id]; if (!r) return; 5332 const q = state.qty[f.id] || 0, so = isSoldOut(f); 5333 r.row.classList.toggle('has-qty', q > 0); r.row.classList.toggle('is-soldout', so); r.row.classList.toggle('is-active', !!af && af.id === f.id); 5334 r.so.hidden = !so; 5335 r.s.textContent = fmtISK(f.price10); r.now.data = ' ' + fmtISK(perBox(f)); 5336 r.count.textContent = single ? q + ' ' + plural(q, 'kassi', 'kassar') : String(q); 5337 // Names carry the live count so a screen reader hears "which flavour, how many" after each press. 5338 const qTxt = ', ' + q + ' ' + plural(q, 'kassi valinn', 'kassar valdir'); 5339 r.minus.setAttribute('aria-label', 'Fækka ' + r.label + qTxt); 5340 r.plus.setAttribute('aria-label', 'Fjölga ' + r.label + qTxt); 5341 // Disabling the focused â at 0 would drop focu
5341s to <body>: hand it to the row's + first. 5342 const minusOff = so || q === 0; 5343 if (minusOff && !so && document.activeElement === r.minus) r.plus.focus(); 5344 r.minus.disabled = minusOff; 5345 r.plus.disabled = so; // sold out: never fires 5346 r.plus.setAttribute('aria-disabled', String(so || boxFull)); // full: fires, shows the hint 5347 }); 5348 } 5349 function renderCounter() { 5350 if (!el.counter) return; 5351 const s = sum(), u = units(), short = s < u; 5352 el.counter.textContent = short ? 'Vantar ' + (u - s) + ' kassa' : s + ' af ' + u + ' ' + plural(u, 'kassa', 'kössum'); 5353 el.counter.classList.toggle('is-short', short); 5354 } 5355 function renderGift() { if (el.gift) el.gift.classList.toggle('is-open', !!tier().freeBottle); } 5356 function renderHeader() { // the sub card, BOTH modes (preview tier in Stök mode) 5357 const H = headerNumbers(), pct = TIERS[H.t].discount, F = FREQ[state.freqIdx], f0 = activeFlavour() || CAT.flavors[0]; 5358 setHook('hdr-pill', pct + '% afsláttur'); setHook('hdr-pill-m', pct + '%'); 5359 setHook('hdr-full', fmtISK(H.full)); setHook('hdr-total', fmtISK(H.total)); 5360 setHook('hdr-stick', '(' + fmtISK(perStick(f0, H.t)) + ' / stikan)'); 5361 setHook('hdr-hint', H.units + ' ' + plural(H.units, 'kassi', 'kassar') + ' · ' + (H.units * CAT.sticksPerBox) + ' stikur · ' + F.phrase); 5362 setHook('perk-saving', fmtISK(H.full - H.total)); setHook('perk-saving-suffix', F.suffix); 5363 const pb = $('perk-bottle'); if (pb) pb.hidden = !TIERS[H.t].freeBottle; 5364 const ps = $('perk-ship'); if (ps) ps.hidden = H.total < PDP_SUB.FREE_SHIP_MIN; 5365 } 5366 // The ONE writer of the three CTA buttons + sticky prices/quantity text. 5367 function ctaButtons() { return Array.from(document.querySelectorAll('[data-pdp-sub="cta"]')); } 5368 function setLabel(b, t) { const l = b.querySelector('.productV2ContentAtcButtonLabel'); if (l) l.textContent = t; } 5369 function setText(sel, t) { const n = document.querySelector(sel); if (n) n.textContent = t; } 5370 function renderCtaOtp(v) { 5371 const ok = !!(v && v.available); 5372 ctaButtons().forEach(b => { b.toggleAttribute('disabled', !ok); setLabel(b, ok ? I18N.addToCart : I18N.soldOut); const sep = b.querySelector('[data-pdp-sub="sep"]'); if (sep) sep.hidden = false; }); 5373 const str = v && typeof price === 'function' ? price(v.price, { removeTrailingZeros: true }) : ''; // theme helper, CENTS â Stök only 5374 setText('#sticky-atc-price', str); setText('#mobile-sticky-atc-price', str); 5375 } 5376 function renderCtaSub() { 5377 const ok = canCheckout(), short = units() - sum(); 5378 const label = ok ? 'Ganga frá áskrift' : (sellable().length ? 'Veldu ' + short + ' kassa til viðbótar' : 'Uppselt à áskrift'); 5379 const tot = ok ? fmtISK(total()) : ''; 5380 ctaButtons().forEach(b => { b.toggleAttribute('disabled', !ok); setLabel(b, b.id === 'primary-atc' && ok ? label + ' · ' + tot : label); const sep = b.querySelector('[data-pdp-sub="sep"]'); if (sep) sep.hidden = !ok; }); 5381 setText('#sticky-atc-price', tot); setText('#mobile-sticky-atc-price', tot); 5382 setText('.sticky-cart-footer-product-quantity', 'Ãskrift · ' + units() + ' ' + plural(units(), 'kassi', 'kassar')); 5383 } 5384 function renderCta(v) { if (isSub()) renderCtaSub(); else renderCtaOtp(v); } 5385 function assertInvariants() { // warn, never throw 5386 const s = sum(), u = units(); 5387 if (s < 0 || s > u) console.warn('[pdp-sub] invariant', 'sum out of range', s, u); 5388 Object.keys(state.qty).forEach(k => { 5389 const f = CAT.flavors.find(x => x.id === k); 5390 if (!f) console.warn('[pdp-sub] invariant', 'foreign flavour id', k); 5391 else if (isSoldOut(f) && state.qty[k] > 0) console.warn('[pdp-sub] invariant', 'sold-out flavour has qty', k); 5392 }); 5393 if (isSub()) { const b = document.getElementById('primary-atc'); if (b && b.hasAttribute('disabled') === canCheckout()) console.warn('[pdp-sub] invariant', 'CTA gate mismatch', canCheckout()); } 5394 } 5395 function renderAll(v) { renderTiers(); renderHero(); renderRows(); renderCounter(); renderGift(); renderHeader(); renderCta(v); assertInvariants(); } 5396 5397 function sync() { 5398 const v = getActiveVariant(); 5399 try { 5400 const sub = isSub(); 5401 if (sub !== renderedMode) { renderedMode = sub; if (sub) onEnter(); else onLeave(); } 5402 renderMode(sub); renderAll(v); 5403 } catch (e) { 5404 console.error('[pdp-sub] sync', e); 5405 try { renderCtaOtp(v); } catch (e2) { console.error('[pdp-sub] cta fallback', e2); } // Stök labels/prices always land 5406 } 5407 } 5408 5409 // ---- builders (init, once; names come from our table only) ---- 5410 function mk(tag, cls, text) { const n = document.createElement(tag); if (cls) n.className = cls; if (text != null) n.textContent = text; return n; } 5411 function buildTiers() { 5412 if (!el.tiers) return; 5413 const frag = document.createDocumentFragment(); tierEls = []; 5414 TIERS.forEach((T, i) => { 5415 const unit = plural(T.units, 'kassi', 'kassar'); 5416 const b = mk('button', 'pdp-sub__tier'); b.type = 'button'; b.setAttribute('role', 'radio'); b.setAttribute('aria-checked', 'false'); b.dataset.tierIdx = String(i); b.setAttribute('aria-label', T.units + ' ' + unit); 5417 const badge = mk('span', 'pdp-sub__tier-badge'); badge.hidden = true; 5418 const gift = mk('span', 'pdp-sub__tier-gift', '+ gjöf'); gift.hidden = true; 5419 b.append(badge, mk('span', 'pdp-sub__tier-n'), mk('span', 'pdp-sub__tier-unit', unit), mk('span', 'pdp-sub__tier-sticks'), mk('span', 'pdp-sub__tier-pill'), gift); 5420 frag.appendChild(b); tierEls.push(b); 5421 });
5422 el.tiers.dataset.count = String(TIERS.length); // CSS: 4 chips â 4 columns (2Ã2 ⤠1000px) 5423 el.tiers.textContent = ''; el.tiers.appendChild(frag); 5424 el.tiers.addEventListener('keydown', e => { // radiogroup semantics: arrows move the selection 5425 let d = 0; if (e.key === 'ArrowRight' || e.key === 'ArrowDown') d = 1; else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') d = -1; else return; 5426 e.preventDefault(); setTier(state.tierIdx + d); const c = tierEls[state.tierIdx]; if (c) c.focus(); 5427 }); 5428 } 5429 function buildRows() { 5430 if (!el.rows) return; 5431 const frag = document.createDocumentFragment(); rowEls = {}; 5432 CAT.flavors.forEach(f => { 5433 const row = mk('div', 'pdp-sub__row'); row.dataset.fid = f.id; row.style.setProperty('--accent', f.accent); 5434 const thumb = mk('div', 'pdp-sub__thumb'); 5435 const img = document.createElement('img'); img.src = PDP_SUB.CDN + f.img + '?width=160'; img.alt = ''; img.loading = 'lazy'; img.addEventListener('error', () => { img.hidden = true; }); 5436 thumb.appendChild(img); 5437 const main = mk('div', 'pdp-sub__row-main'); 5438 const label = displayName(f); // the PDP's own option value when it resolves to this flavour 5439 const name = mk('div', 'pdp-sub__row-name', label); const so = mk('span', 'pdp-sub__soldout', 'Uppselt'); so.hidden = true; name.appendChild(so); 5440 const meta = mk('div', 'pdp-sub__row-meta'); meta.appendChild(mk('span', null, CAT.sticksPerBox + ' stikur')); 5441 const priceEl = mk('span', 'pdp-sub__row-price'); const s = mk('s'); const now = document.createTextNode(''); priceEl.append(s, now); meta.appendChild(priceEl); 5442 main.append(name, meta); 5443 const stepper = mk('div', 'pdp-sub__stepper'); 5444 const minus = mk('button', 'pdp-sub__step', 'â'); minus.type = 'button'; minus.dataset.step = '-1'; minus.setAttribute('aria-label', 'Fækka ' + label); 5445 const count = mk('span', 'pdp-sub__count', '0'); count.dataset.pdpSub = 'count'; 5446 const plus = mk('button', 'pdp-sub__step', '+'); plus.type = 'button'; plus.dataset.step = '1'; plus.setAttribute('aria-label', 'Fjölga ' + label); 5447 stepper.append(minus, count, plus); 5448 row.append(thumb, main, stepper); frag.appendChild(row); 5449 rowEls[f.id] = { row, s, now, count, minus, plus, so, label }; 5450 }); 5451 el.rows.textContent = ''; el.rows.appendChild(frag); 5452 if (panel) panel.classList.toggle('pdp-sub--single', CAT.flavors.length === 1); 5453 } 5454 5455 // ---- event wiring ---- 5456 function wire() { 5457 section.addEventListener('change', e => { 5458 const t = e.target; 5459 if (t.name === 'purchase_type') return sync(); // idempotent; updateProduct already ran (target phase) 5460 if (t.closest && t.closest('.productV2ContentOption.flavor')) return onFlavourChange(); // also fired by the mobile #flavor-dd 5461 if (t === el.freq) return setFreq(Number(t.value)); 5462 // Magn changes only happen in Stök mode (wrapper is inert in Ãskrift); updateProduct â sync() re-renders the preview header. 5463 }); 5464 if (panel) panel.addEventListener('click', e => { 5465 const step = e.target.closest('.pdp-sub__step'); 5466 if (step) { const row = step.closest('.pdp-sub__row'); if (row && !step.disabled) setQty(row.dataset.fid, Number(step.dataset.step)); return; } 5467 const chip = e.target.closest('.pdp-sub__tier'); if (chip) return setTier(Number(chip.dataset.tierIdx)); 5468 if (e.target.closest('[data-pdp-sub="nudge"]')) { const t = nudgeTarget(); if (t != null) setTier(t); return; } 5469 }); 5470 window.addEventListener('pageshow', e =>
5470 { if (e.persisted) { ctaButtons().forEach(b => b.classList.remove('loading')); sync(); } }); 5471 } 5472 5473 function init() { try { buildTiers(); buildRows(); wire(); } catch (e) { console.error('[pdp-sub] init', e); } sync(); } 5474 init(); 5475 return { sync, isSub, goToCheckout, onFlavourChange, setFreq, buildPlan }; 5476 })(); 5477 5478 5479 5480 5481 // ---- Variant gallery updater (no network) ---- 5482 const galleryEl = section.querySelector(".productV2VisualVariantGallery"); 5483 const galleryJSONEl = document.getElementById("variant-gallery-template--22413711704202__section_product_v2_R9fnpP"); 5484 const variantGalleryMap = galleryJSONEl ? JSON.parse(galleryJSONEl.textContent || "{}") : {}; 5485 5486 function renderVariantGallery(variant) { 5487 if (!galleryEl) return; 5488 const urls = variantGalleryMap[String(variant.id)] || []; 5489 5490 // Clear existing images 5491 galleryEl.innerHTML = ""; 5492 5493 if (!urls.length) { 5494 galleryEl.hidden = true; // hide when no images 5495 return; 5496 } 5497 5498 galleryEl.hidden = false; 5499 5500 const frag = document.createDocumentFragment(); 5501 urls.forEach((u) => { 5502 const img = document.createElement("img"); 5503 img.src = u; 5504 img.alt = variant.title || "Hydration Xpress"; 5505 img.loading = "lazy"; 5506 // you said don't worry about styles; keeping minimal attrs 5507 img.style.display = "block"; 5508 img.style.maxWidth = "100%"; 5509 img.style.height = "auto"; 5510 img.style.backgroundColor = "#EFEFF1"; 5511 frag.appendChild(img); 5512 }); 5513 galleryEl.appendChild(frag); 5514 } 5515 5516 5517 5518 function renderFreeShippingBadges() { 5519 // Grab all size option nodes inside this section 5520 const sizeNodes = section.querySelectorAll('.productV2ContentOptionValue.size'); 5521 5522 if (!sizeNodes.length) return; 5523 5524 5525 5526 console.log("NEW------------------------------------") 5527 5528 sizeNodes.forEach(node => { 5529 5530 console.log(node); 5531 const slot = node.querySelector('.free-ship-slot'); 5532 if (!slot) return; 5533 5534 console.log("slot", slot); 5535 5536 const variantId = String(node.dataset.variantId); 5537 5538 5539 //nothing logs after this what is this breaking down below, the line baove works fine 5540 5541 const hasFree = variantFlags?.[variantId]?.freeShipping; 5542 5543 console.log("hasFree", hasFree); 5544 5545 5546 if (!hasFree) { 5547 slot.innerHTML = ''; 5548 return; 5549 } 5550 5551 slot.innerHTML = ` 5552 <div class="free-ship" role="status" aria-live="polite"> 5553 <img src="https://photatoe.com/media/cache/53/d9/53d9fb797841a63b904cca962d273ad5.png" alt="" class="free-ship__icon"><span>Frà sending</span> 5554 </div> 5555 `; 5556 5557 }); 5558 5559 } 5560 5561 5562 function renderNewBadge(variant) { 5563 const badge = section.querySelector(".productV2VisualSwiperNewTag"); 5564 if (!badge) return; 5565 const isNew = !!(variantFlags?.[String(variant.id)]?.isNew); 5566 badge.hidden = !isNew; // show when true, hide when false 5567 } 5568 5569 function renderLimitedBadge(variant) { 5570 const badge = section.querySelector(".productV2VisualSwiperLimitedTag"); 5571 if (!badge) return; 5572 const isLimited = !!(variantFlags?.[String(variant.id)]?.isLimited); 5573 badge.hidden = !isLimited; // show when true, hide when false 5574 } 5575 5576 function renderDiscountBadge(variant) { 5577 const badge = section.querySelector(".productV2VisualSwiperDiscountTag"); 5578 if (!badge) return; 5579 5580 const id = String(variant.id); 5581 const discount = Number(variantFlags?.[id]?.discountPercentage ?? 0); 5582 5583 // show only when discount > 0 5584 badge.hidden = !(discount > 0); 5585 5586 // update text when shown 5587 if (!badge.hidden) { 5588 badge.textContent = `${discount}% afsláttur`; 5589 } 5590 } 5591 5592 function renderPurchaseOptionDiscount(variant) { 5593 const id = String(variant.id); 5594 const option = section.querySelector(".productV2ContentPurchaseOption.oneTime"); 5595 if (!option) return; 5596 5597 const tagWrap = section.querySelector(".custom-discount-tag"); 5598 const stickPriceEl = option.querySelector(".productV2ContentPurchaseOptionLabelPricesPerStick"); 5599 const discount = Number(variantFlags?.[id]?.discountPercentage ?? 0); 5600 const perStickCents = Number(variantFlags?.[id]?.perStickCents ?? 0); 5601 5602 // ---- Badge (desktop + mobile) 5603 if (tagWrap) { 5604 const shouldShow = discount > 0; 5605 tagWrap.hidden = !shouldShow; 5606 tagWrap.setAttribute("aria-hidden", String(!shouldShow)); 5607 5608 if (shouldShow) { 5609 const desktop = tagWrap.querySelector(".tag-15-green-desktop"); 5610 const mobile = tagWrap.querySelector(".tag-15-green-mobile"); 5611 if (desktop) desktop.textContent = `${discount}% afsláttur`; 5612 if (mobile) mobile.textContent = `${discount}%`; 5613 } 5614 } 5615 5616 // ---- Per-stick price: discounted = base * (100 - discount) / 100 5617 if (stickPriceEl) { 5618 const pct = Math.max(0, Math.min(100, 100 - discount)); // clamp 0..100 5619 const discountedCents = Math.round(perStickCents * pct); 5620 5621 // Reuse your existing price() formatter 5622 const unit = stickPriceEl.getAttribute("data-stick-label") || "stick"; 5623 stickPriceEl.textContent = `(${price(discountedCents, { removeTrailingZeros: true, roundDown: true })} / ${unit})`; 5624 } 5625 } 5626 5627 5628 function cleanLabel(s) { 5629 return (s || '').replace('(FRà SENDING)', '').trim(); 5630 } 5631 5632 function bestImageUrlFromVariant(v) { 5633 var src = v?.featured_media?.preview_image?.src || v?.featured_image?.src || ''; 5634 // request 2000px variant if your CDN supports the _{width}x convention 5635 return src ? src.replace(/(\.(jpg|jpeg|png|webp))(?:\?.*)?$/i, '_2000x$1') : ''; 5636 } 5637 5638 function updateStickyCart(variant) { 5639 if (!variant) return; 5640 5641 // --- image --- 5642 var stickyImg = section.querySelector('#sticky-variant-image'); 5643 if (stickyImg) { 5644 var newSrc = bestImageUrlFromVariant(variant); 5645 if (newSrc) stickyImg.src = newSrc; 5646 stickyImg.alt = variant.title || stickyImg.alt || ''; 5647 } 5648 5649 // --- flavour text (uses index emitted by Liquid) --- 5650 var flavEl = section.querySelector('#sticky-variant-flavour'); 5651 if (flavEl) { 5652 var fIdx = parseInt(flavEl.dataset.flavourIndex || '
5652-1', 10); 5653 if (!isNaN(fIdx) && Array.isArray(variant.options)) { 5654 flavEl.textContent = cleanLabel(variant.options[fIdx]); 5655 } 5656 } 5657 5658 // --- stikur label (uses index emitted by Liquid) --- 5659 var qtyEl = section.querySelector('.sticky-cart-footer-product-quantity'); 5660 if (qtyEl) { 5661 var qIdx = parseInt(qtyEl.dataset.quantityIndex || '-1', 10); 5662 if (!isNaN(qIdx) && Array.isArray(variant.options)) { 5663 qtyEl.textContent = cleanLabel(variant.options[qIdx]); 5664 } 5665 } 5666 } 5667 5668(function () { 5669 const section = document.querySelector('section.productV2'); 5670 const bar = document.querySelector('.sticky-cart-footer'); 5671 const pageFooter = document.getElementById('footer'); 5672 if (!section || !bar) return; 5673 5674 // Ensure a bottom sentinel exists right AFTER the section (optional) 5675 let bottomSentinel = document.querySelector('.sticky-cart-bottom-sentinel'); 5676 if (!bottomSentinel) { 5677 bottomSentinel = document.createElement('div'); 5678 bottomSentinel.className = 'sticky-cart-bottom-sentinel'; 5679 section.insertAdjacentElement('afterend', bottomSentinel); 5680 } 5681 5682 function viewportHasSpace() { 5683 const h = bar.getBoundingClientRect().height || 80; 5684 return window.innerHeight > h + 100; 5685 } 5686 5687 function evaluate() { 5688 const barH = bar.getBoundingClientRect().height || 80; 5689 const primaryAtc = document.getElementById('primary-atc'); 5690 5691 // Show as soon as the primary ATC button scrolls above the viewport 5692 let atcHidden = false; 5693 if (primaryAtc) { 5694 atcHidden = primaryAtc.getBoundingClientRect().bottom < 0; 5695 } else { 5696 // Fallback: show when section end reached 5697 atcHidden = section.getBoundingClientRect().bottom <= window.innerHeight; 5698 } 5699 5700 // Hide ONLY when the footer would overlap the bar 5701 let footerWouldOverlap = false; 5702 if (pageFooter) { 5703 const footerTop = pageFooter.getBoundingClientRect().top; 5704 footerWouldOverlap = footerTop <= (window.innerHeight - barH); 5705 } 5706 5707 const shouldShow = atcHidden && !footerWouldOverlap && viewportHasSpace(); 5708 5709 bar.classList.toggle('is-visible', shouldShow); 5710 document.body.classList.toggle('has-sticky-cart-space', shouldShow); 5711 } 5712 5713 // rAF-throttled scroll + resize 5714 let ticking = false; 5715 function onScrollOrResize() { 5716 if (ticking) return; 5717 ticking = true; 5718 requestAnimationFrame(() => { 5719 evaluate(); 5720 ticking = false; 5721 }); 5722 } 5723 5724 window.addEventListener('scroll', onScrollOrResize, { passive: true }); 5725 window.addEventListener('resize', onScrollOrResize); 5726 5727 // Initial state 5728 evaluate(); 5729})(); 5730 5731 5732 // updateProduct is bound per-input (target phase). It ends with pdpSub.sync(); the section-level 5733 // change listener in pdpSub.init() runs AFTER it (bubble) and is idempotent â keep it that way. 5734 section.querySelectorAll("input").forEach(input => input.addEventListener("change", updateProduct)); 5735 5736 function updateProduct() { 5737 const activeVariant = getActiveVariant(); 5738 if (!activeVariant) return; 5739 5740 // Slide to variant image 5741 if (activeVariant.featured_image) { 5742 const productSwiperSlideIndex = productSwiper.slides.findIndex(slide => parseInt(slide.id) === activeVariant.featured_image.id); 5743 productSwiper.slideTo(productSwiperSlideIndex); 5744 } 5745 5746 // updateCSSVariables(activeVariant); 5747 renderVariantGallery(activeVariant); 5748 renderNewBadge(activeVariant); 5749 renderLimitedBadge(activeVariant); 5750 renderDiscountBadge(activeVariant); 5751 renderPurchaseOptionDiscount(activeVariant); 5752 5753 updateStickyCart(activeVariant); 5754 renderIngredientsImage(activeVariant); 5755 5756 document.dispatchEvent(new CustomEvent('pdp:variant-change', { 5757 detail: { id: activeVariant.id } 5758 })); 5759 5760 // Update Nutrition Label 5761 5762 5763 // Update purchase option prices 5764 const oneTimePurchaseOption = section.querySelector(".productV2ContentPurchaseOption.oneTime"); 5765 const subscriptionPurchaseOption = section.querySelector(".productV2ContentPurchaseOption.subscription"); 5766 5767 const priceCents = Number(activeVariant?.price ?? 0); 5768 const compareAtCents = Number(activeVariant?.compare_at_price ?? 0); 5769 5770 const hasCompare = compareAtCents > 0 && compareAtCents > priceCents; 5771 const realPriceCents = hasCompare ? compareAtCents : priceCents; 5772 5773 5774 oneTimePurchaseOption.querySelector(".productV2ContentPurchaseOptionLabelPricesReal").textContent = price(priceCents, { 5775 removeTrailingZeros: true 5776 }); 5777 5778 const compareEl = oneTimePurchaseOption?.querySelector(".productV2ContentPurchaseOptionLabelPricesCompare"); 5779 5780 if (compareEl) { 5781 if (hasCompare) { 5782 // show compare-at price (original price) 5783 compareEl.textContent = price(compareAtCents, { removeTrailingZeros: true }); 5784 compareEl.hidden = false; // or: compareEl.classList.remove('hidden') 5785 compareEl.setAttribute('aria-hidden', 'false'); 5786 } else { 5787 // hide when no compare-at price 5788 compareEl.textContent = ""; 5789 compareEl.hidden = true; // or: compareEl.classList.add('hidden') 5790 compareEl.setAttribute('aria-hidden', 'true'); 5791 } 5792 } 5793 5794 // Ãskrift panel + ALL three CTA buttons + sticky prices/quantity text. MUST stay the last 5795 // call after updateStickyCart(): in Ãskrift mode it over
5795writes the sticky quantity text 5796 // ("Ãskrift · 3 kassar") that updateStickyCart just wrote from the variant option. 5797 pdpSub.sync(); 5798 5799 5800 5801 // update url with variant id so the selected options are maintained on refresh 5802 const url = new URL(window.location.href); 5803 url.searchParams.set("variant", activeVariant.id); 5804 window.history.replaceState({}, "", url); 5805 } 5806 5807 5808 5809 (function () { 5810 const btn = document.querySelector('.mobile-sticky-checkout-button'); 5811 const footer = document.getElementById('footer'); 5812 const primaryAtc = document.getElementById('primary-atc'); 5813 if (!btn) return; 5814 5815 // Start hidden until primary ATC scrolls out of view 5816 btn.classList.add('is-hidden'); 5817 5818 function evaluate() { 5819 const btnH = btn.getBoundingClientRect().height || 64; 5820 5821 // Show when primary ATC button is above viewport (scrolled past) 5822 let primaryAtcHidden = false; 5823 if (primaryAtc) { 5824 primaryAtcHidden = primaryAtc.getBoundingClientRect().bottom < 0; 5825 } 5826 5827 // Hide when footer would overlap 5828 let footerWouldOverlap = false; 5829 if (footer) { 5830 const footerTop = footer.getBoundingClientRect().top; 5831 footerWouldOverlap = footerTop <= (window.innerHeight - btnH); 5832 } 5833 5834 const shouldShow = primaryAtcHidden && !footerWouldOverlap; 5835 btn.classList.toggle('is-hidden', !shouldShow); 5836 } 5837 5838 // rAF-throttled scroll/resize 5839 let ticking = false; 5840 function onScrollOrResize() { 5841 if (ticking) return; 5842 ticking = true; 5843 requestAnimationFrame(() => { 5844 evaluate(); 5845 ticking = false; 5846 }); 5847 } 5848 5849 window.addEventListener('scroll', onScrollOrResize, { passive: true }); 5850 window.addEventListener('resize', onScrollOrResize); 5851 5852 // Initial pass 5853 evaluate(); 5854})(); 5855 5856 5857 function setLabelSafe(b, t) { 5858 try { const l = b.querySelector('.productV2ContentAtcButtonLabel'); if (l) l.textContent = t; } catch (e) {} 5859 } 5860 5861 async function addProductToCart(payload) { 5862 const req = await fetch(`${Shopify.routes.root}cart/add.js`, { 5863 method: "POST", 5864 headers: { 5865 "Content-Type": "application/json", 5866 }, 5867 body: JSON.stringify(payload), 5868 }); 5869 5870 if (!req.ok) { 5871 throw Error("Request not OK"); 5872 } 5873 5874 return await req.json(); 5875 } 5876 5877 // ONE handler for all three CTA buttons (primary, desktop sticky, mobile sticky). 5878 // Stök kaup â the existing /cart/add.js + openCart() path. Ãskrift â our checkout via the 5879 // URL-fragment plan (pdpSub.goToCheckout); nothing touches the Shopify cart in that mode. 5880 async function handleCta(ev) { 5881 const btn = ev.currentTarget; 5882 if (btn.hasAttribute('disabled') || btn.classList.contains('loading')) return; 5883 if (pdpSub.isSub()) { pdpSub.goToCheckout(btn); return; } 5884 btn.classList.add('loading'); 5885 const activeVariant = getActiveVariant(); 5886 // Uppselt bragd fer ALDREI i korfuna, sama hvad hnappurinn segir. Ver okkur gegn 5887 // (a) smelli adur en JS naer ad slokkva a hnappnum, (b) villu i applyForcedSoldOut. 5888 if (!activeVariant || activeVariant.available === false || variantIsForcedSoldOut(activeVariant)) { 5889 btn.classList.remove('loading'); 5890 btn.setAttribute('disabled', ''); 5891 setLabelSafe(btn, "Uppselt"); 5892 return; 5893 } 5894 try { 5895 const requestPayload = { items: [{ id: activeVariant.id, quantity: 1 }] }; 5896 5897 await addProductToCart(requestPayload); 5898 try { await openCart(); } catch (err) { console.error(err); } 5899 } catch (e) { 5900 console.error(e); 5901 alert("Ãað kom upp villa við að bæta vörunni à körfuna. Reyndu aftur."); 5902 } finally { btn.classList.remove('loading'); } 5903 } 5904 document.querySelectorAll('[data-pdp-sub="cta"]').forEach(b => b.addEventListener('click', handleCta)); 5905
5906 const urlParams = new URLSearchParams(window.location.search); 5907 5908 // Default to the FIRST AVAILABLE flavour, in the order the pills are rendered 5909 // (= the Shopify product option order), whenever the page is opened without a 5910 // ?variant= deep link. No flavour name is hardcoded: reorder the option values 5911 // in the Shopify admin to change which flavour a cold visit lands on. 5912 function pickDefaultSelection() { 5913 // Mirror getActiveVariant(): only option groups that have a checked input take 5914 // part, and their order is the order of variant.options. 5915 const groups = Array.from(section.querySelectorAll(".productV2ContentOption")) 5916 .filter(group => group.querySelector("input:checked")); 5917 const flavorIndex = groups.findIndex(group => group.classList.contains("flavor")); 5918 if (flavorIndex === -1) return null; 5919 5920 const selected = groups.map(group => group.querySelector("input:checked").value); 5921 5922 function isAvailable(options) { 5923 const variant = product.variants.find(v => JSON.stringify(v.options) === JSON.stringify(options)); 5924 return !!(variant && variant.available); 5925 } 5926 5927 const flavorInputs = Array.from(groups[flavorIndex].querySelectorAll(".productV2ContentOptionValueInput")); 5928 5929 // Pass 1 - every other option stays exactly as rendered. Clicking a flavour pill 5930 // does not move the size radio, so availability must be judged at THAT size. 5931 for (let i = 0; i < flavorInputs.length; i++) { 5932 const options = selected.slice(); 5933 options[flavorIndex] = flavorInputs[i].value; 5934 if (isAvailable(options)) return [flavorInputs[i]]; 5935 } 5936 5937 // Pass 2 - nothing is in stock at the rendered size: let one other option move 5938 // too, flavour order still deciding. Only values that actually have a rendered 5939 // radio are considered (some sizes are deliberately skipped). 5940 for (let i = 0; i < flavorInputs.length; i++) { 5941 for (let g = 0; g < groups.length; g++) { 5942 if (g === flavorIndex) continue; 5943 const alternatives = Array.from(groups[g].querySelectorAll(".productV2ContentOptionValueInput")); 5944 for (let a = 0; a < alternatives.length; a++) { 5945 const options = selected.slice(); 5946 options[flavorIndex] = flavorInputs[i].value; 5947 options[g] = alternatives[a].value; 5948 if (isAvailable(options)) return [flavorInputs[i], alternatives[a]]; 5949 } 5950 } 5951 } 5952 5953 return null; // everything sold out - keep whatever the server rendered 5954 } 5955 5956 if (!urlParams.get("variant")) { 5957 let defaultSelection = null; 5958 try { 5959 defaultSelection = pickDefaultSelection(); 5960 } catch (err) { 5961 console.error(err); 5962 } 5963 5964 if (defaultSelection && defaultSelection.length) { 5965 defaultSelection.forEach(input => { input.checked = true; }); 5966 defaultSelection.forEach(input => input.dispatchEvent(new Event("change", { bubbles: true }))); 5967 } else { 5968 updateProduct(); 5969 } 5970 } else { 5971 updateProduct(); 5972 } 5973 }) 5974 ; 5975</script>
5975 5976 5977</div><div id="shopify-section-template--22413711704202__product_info_jonny" class="shopify-section"><style> 5978 [id="template--22413711704202__product_info_jonny"]{ 5979 padding: 8px 32px 48px; 5980 font-family: "DM Sans", system-ui, sans-serif; 5981 } 5982 .pi-wrap{ max-width: 1200px; margin: 0 auto; } 5983 5984 /* info cards ("what it does") */ 5985 .pi-cards{ 5986 display: grid; 5987 grid-template-columns: repeat(3, minmax(0, 1fr)); 5988 gap: 16px; 5989 } 5990 .pi-cards.pi-cards-1{ grid-template-columns: 1fr; } 5991 .pi-cards.pi-cards-2{ grid-template-columns: repeat(2, minmax(0, 1fr)); } 5992 .pi-card{ 5993 border: 1px solid #E7E7E7; border-radius: 10px; background: #fff; 5994 padding: 22px 24px; 5995 display: flex; flex-direction: column; gap: 10px; 5996 } 5997 .pi-card-name{ 5998 margin: 0; 5999 font: 400 22px/1.15 'Dela Gothic One', system-ui, sans-serif; 6000 color: #1F1F1F; 6001 } 6002 .pi-card-name span{ 6003 margin-left: 6px; 6004 font: 400 14px/1 "Inter", system-ui, sans-serif; 6005 color: #717171; 6006 } 6007 .pi-tags{ display: flex; flex-wrap: wrap; gap: 6px; } 6008 .pi-tag{ 6009 font: 700 11px/1 "DM Sans", system-ui, sans-serif; 6010 background: #EFEFEF; color: #1F1F1F; 6011 padding: 6px 10px; border-radius: 9999px; 6012 text-transform: uppercase; letter-spacing: .02em; 6013 } 6014 .pi-card-text{ 6015 margin: 0; 6016 font: 400 15px/1.6 "Inter", system-ui, sans-serif; 6017 color: #3A3A3A; 6018 } 6019 6020 /* legacy stats row (kept for older templates) */ 6021 .pi-stats{ 6022 display: flex; flex-wrap: wrap; 6023 border: 1px solid #E7E7E7; border-radius: 10px; 6024 overflow: hidden; 6025 background: #fff; 6026 } 6027 .pi-stat{ 6028 flex: 1 1 0; min-width: 140px; 6029 padding: 20px 16px; 6030 text-align: center; 6031 } 6032 .pi-stat + .pi-stat{ border-left: 1px solid #E7E7E7; } 6033 .pi-stat-value{ 6034 font: 400 28px/1.1 'Dela Gothic One', system-ui, sans-serif; 6035 color: #1F1F1F; 6036 } 6037 .pi-stat-label{ 6038 margin-top: 6px; 6039 font: 700 12px/1.2 "DM Sans", system-ui, sans-serif; 6040 color: #717171; 6041 text-transform: uppercase; letter-spacing: .04em; 6042 } 6043 .pi-stats-note{ 6044 margin: 8px 4px 0; 6045 font: 400 12px/1.4 "Inter", system-ui, sans-serif; 6046 color: #9A9A9A; 6047 text-align: right; 6048 } 6049 6050 /* tabs */ 6051 .pi-tabs{ 6052 margin-top: 28px; 6053 display: flex; gap: 24px; 6054 border-bottom: 1px solid #E0E0E0; 6055 overflow-x: auto; 6056 } 6057 .pi-tab{ 6058 background: none; border: 0; cursor: pointer; 6059 padding: 12px 2px; 6060 font: 700 15px/1 "DM Sans", system-ui, sans-serif; 6061 color: #717171; 6062 border-bottom: 2px solid transparent; 6063 white-space: nowrap; 6064 } 6065 .pi-tab[aria-selected="true"]{ color: #1F1F1F; border-bottom-color: #1F1F1F; } 6066 .pi-tab[hidden]{ display: none; } 6067 .pi-panel{ display: none; padding: 24px 0 0; } 6068 .pi-panel.is-active{ display: block; } 6069 .pi-panel, .pi-panel p, .pi-panel li{ 6070 font: 400 16px/1.7 "Inter", system-ui, sans-serif; 6071 color: #3A3A3A; 6072 } 6073 .pi-panel ul{ padding-left: 20px; margin: 0; } 6074 .pi-panel li{ margin-bottom: 8px; } 6075 .pi-label-img{ max-width: 480px; width: 100%; height: auto; border-radius: 8px; display: block; } 6076 .pi-cards-below{ margin-top: 32px; } 6077 [data-pi-innihald][hidden]{ display: none; } 6078 6079 @media (max-width: 1000px){ 6080 [id="template--22413711704202__product_info_jonny"]{ padding: 0 16px 32px; } 6081 .pi-cards, .pi-cards.pi-cards-2{ grid-template-columns: 1fr; gap: 12px; } 6082 .pi-card{ padding: 16px 18px; } 6083 .pi-card-name{ font-size: 18px; } 6084 .pi-card-text{ font-size: 14px; } 6085 .pi-stat{ min-width: 33%; padding: 14px 8px; } 6086 .pi-stat-value{ font-size: 20px; } 6087 .pi-stat-label{ font-size: 10px; } 6088 .pi-panel, .pi-panel p, .pi-panel li{ font-size: 14px; } 6089 } 6090</style><section id="template--22413711704202__product_info_jonny" data-pi-variant="50050860744842"> 6091 <div class="pi-wrap"><div class="pi-tabs" role="tablist"> 6092 <button class="pi-tab" type="button" role="tab" aria-selected="true" data-pi-tab="lysing">Lýsing</button><button class="pi-tab" type="button" role="tab" aria-selected="false" data-pi-tab="innihald">Innihaldsefni</button><button class="pi-tab" type="button" role="tab" aria-selected="false" data-pi-tab="naering" data-pi-naering-tab hidden>Næringargildi</button><button class="pi-tab" type="button" role="tab" aria-selected="false" data-pi-tab="njota">Hvernig er best að njóta?</button></div> 6093 6094 <div class="pi-panel is-active" data-pi-panel="lysing"><p>
6094Fylltu á söltin sem þú tapar! Happy Hydrate Formúlan inniheldur natrÃum, kalÃum og magnesÃum ásamt sex mikilvægum vÃtamÃnum. Steinefnin stuðla að eðlilegri vöðvastarfsemi og vökvajafnvægi â og ein stika inniheldur um fjórfalt meira af söltum og steinefnum en hefðbundinn Ãþróttadrykkur.</p> 6095</div><div class="pi-panel" data-pi-panel="innihald"> 6096 <div data-pi-innihald="main" hidden><ul><li>NatrÃum â 250 mg à hverri stiku</li><li>KalÃum â 380 mg à hverri stiku</li><li>MagnesÃum â 200 mg à hverri stiku</li><li>C-vÃtamÃn og B-vÃtamÃn (B2, B3, B5, B12)</li><li>Dextrósi fyrir hraðari upptöku</li><li>Enginn gervisykur â vegan og glútenlaust</li></ul></div><div data-pi-innihald="alt"><ul><li>NatrÃum â 250 mg à hverri stiku</li><li>KalÃum â 380 mg à hverri stiku</li><li>MagnesÃum â 100 mg à hverri stiku</li><li>C-vÃtamÃn og B-vÃtamÃn (B2, B3, B5, B12)</li><li>Dextrósi fyrir hraðari upptöku</li><li>Enginn gervisykur â vegan og glútenlaust</li></ul></div></div><div class="pi-panel" data-pi-panel="naering"> 6097 <img class="pi-label-img" data-pi-label alt="Næringargildi â Hydration Xpress" loading="lazy" decoding="async"> 6098 </div><div class="pi-panel" data-pi-panel="njota"><p><strong>Skref 1: Hella</strong><br/>RÃfðu stikuna og bættu ofan à 300 - 500 ml af vatni<br/><br/><strong>Skref 2: Hrista<br/></strong>Hristu eða hrærðu þangað til duftið blandast við vatnið<br/><br/><strong>Skref 3: Njóta</strong><br/>Velkomin/n à vökvajafnvægi</p></div><div class="pi-cards-below"><div class="pi-cards pi-cards-3"><div class="pi-card" > 6099 <h3 class="pi-card-name">NatrÃum<span>(Sodium)</span></h3><div class="pi-tags"><span class="pi-tag">Vökvajafnvægi</span><span class="pi-tag">Vöðvar</span><span class="pi-tag">Taugakerfi</span></div><p class="pi-card-text">NatrÃum hjálpar lÃkamanum að viðhalda eðlilegu vökvajafnvægi og gegnir mikilvægu hlutverki à starfsemi tauga og vöðva.</p></div><div class="pi-card" > 6100 <h3 class="pi-card-name">KalÃum<span>(Potassium)</span></h3><div class="pi-tags"><span class="pi-tag">Vöðvar</span><span class="pi-tag">Taugakerfi</span><span class="pi-tag">Blóðþrýstingur</span></div><p class="pi-card-text">KalÃum stuðlar að eðlilegri starfsemi vöðva og taugakerfis og hjálpar til við að viðhalda eðlilegum blóðþrýstingi. KalÃum vinnur náið með natrÃum og saman hjálpa þau lÃkamanum að viðhalda vökvajafnvægi og eðlilegri starfsemi frumna.</p></div><div class="pi-card" > 6101 <h3 class="pi-card-name">MagnesÃum</h3><div class="pi-tags"><span class="pi-tag">Orka</span><span class="pi-tag">Vöðvar</span><span class="pi-tag">Ãreyta</span></div><p class="pi-card-text">MagnesÃum stuðlar að eðlilegri starfsemi vöðva og taugakerfis, stuðlar að eðlilegum orkuefnaskiptum og hjálpar til við að draga úr þreytu og örmögnun.</p></div></div></div></div> 6102
6102<script type="application/json" data-pi-labels>{"50050860712074": { "url": "", "flavor": "Strawberry Lemonade", "alt": true },"50050860744842": { "url": "", "flavor": "Strawberry Lemonade", "alt": true },"50050860777610": { "url": "", "flavor": "Strawberry Lemonade", "alt": true },"50050860810378": { "url": "", "flavor": "Strawberry Lemonade", "alt": true },"44751436906634": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/Hydration_Pina_Colada_innihaldslysing.png?v=1759347931\u0026width=960", "flavor": "Pina Colada", "alt": false },"44751436939402": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/Hydration_Pina_Colada_innihaldslysing.png?v=1759347931\u0026width=960", "flavor": "Pina Colada", "alt": false },"44751436972170": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/Hydration_Pina_Colada_innihaldslysing.png?v=1759347931\u0026width=960", "flavor": "Pina Colada", "alt": false },"44751437004938": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/Hydration_Pina_Colada_innihaldslysing.png?v=1759347931\u0026width=960", "flavor": "Pina Colada", "alt": false },"44751437037706": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/MB_INNIHALD.png?v=1776255722\u0026width=960", "flavor": "Mixed Berries", "alt": false },"44751437070474": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/MB_INNIHALD.png?v=1776255722\u0026width=960", "flavor": "Mixed Berries", "alt": false },"44751437103242": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/MB_INNIHALD.png?v=1776255722\u0026width=960", "flavor": "Mixed Berries", "alt": false },"44751437136010": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/Hydration_mixed_berries_innihaldslysing.png?v=1759347931\u0026width=960", "flavor": "Mixed Berries", "alt": false },"44751437168778": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/LL_INNIHALD.png?v=1776255645\u0026width=960", "flavor": "Lemon\/Lime", "alt": false },"44751437201546": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/LL_INNIHALD.png?v=1776255645\u0026width=960", "flavor": "Lemon\/Lime", "alt": false },"44751437234314": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/LL_INNIHALD.png?v=1776255645\u0026width=960", "flavor": "Lemon\/Lime", "alt": false },"44751437267082": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/lemonlime_innihald.jpg?v=1765379317\u0026width=960", "flavor": "Lemon\/Lime", "alt": false },"45773488324746": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/PH_INNIHALD.png?v=1776255757\u0026width=960", "flavor": "Peach Crush", "alt": false },"45773488357514": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/PH_INNIHALD.png?v=1776255757\u0026width=960", "flavor": "Peach Crush", "alt": false },"45773488390282": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/PH_INNIHALD.png?v=1776255757\u0026width=960", "flavor": "Peach Crush", "alt": false },"45773488423050": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/Hydration_Peach_Crush_innihaldslysing.png?v=1759347931\u0026width=960", "flavor": "Peach Crush", "alt": false },"47230751473802": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/PE_INNIHALD.png?v=1776255780\u0026width=960", "flavor": "Peru", "alt": false },"47230751506570": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/PE_INNIHALD.png?v=1776255780\u0026width=960", "flavor": "Peru", "alt": false },"47230751539338": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/PE_INNIHALD.png?v=1776255780\u0026width=960", "flavor": "Peru", "alt": false },"47230751572106": { "url": "\/\/happyhydrate.is\/cdn\/shop\/files\/Hydration_Peru_Innihaldslysing.png?v=1759347931\u0026width=960", "flavor": "Peru", "alt": false }}</script>
6102 6103</section> 6104
6105<script> 6106(() => { 6107 const root = document.getElementById("template--22413711704202__product_info_jonny"); 6108 if (!root) return; 6109 6110 const tabs = Array.from(root.querySelectorAll('[data-pi-tab]')); 6111 const panels = Array.from(root.querySelectorAll('[data-pi-panel]')); 6112 const activate = (key) => { 6113 tabs.forEach(t => t.setAttribute('aria-selected', t.dataset.piTab === key ? 'true' : 'false')); 6114 panels.forEach(p => p.classList.toggle('is-active', p.dataset.piPanel === key)); 6115 }; 6116 tabs.forEach(tab => tab.addEventListener('click', () => activate(tab.dataset.piTab))); 6117 6118 /* Næringargildi label follows the selected variant */ 6119 let labels = {}; 6120 try { 6121 const node = root.querySelector('[data-pi-labels]'); 6122 labels = node ? (JSON.parse(node.textContent || '{}') || {}) : {}; 6123 } catch (e) { labels = {}; } 6124 6125 const labelImg = root.querySelector('[data-pi-label]'); 6126 const labelTab = root.querySelector('[data-pi-naering-tab]'); 6127 6128 const mainEl = root.querySelector('[data-pi-innihald="main"]'); 6129 const altEl = root.querySelector('[data-pi-innihald="alt"]'); 6130 const applyVariant = (id) => { 6131 if (!id) return; 6132 const entry = labels[String(id)]; 6133 const useAlt = !!(entry && entry.alt) && !!altEl; 6134 if (mainEl) mainEl.hidden = useAlt; 6135 if (altEl) altEl.hidden = !useAlt; 6136 if (!labelImg || !labelTab) return; 6137 const url = entry && entry.url ? entry.url : ''; 6138 if (url) { 6139 if (labelImg.getAttribute('src') !== url) labelImg.src = url; 6140 labelTab.hidden = false; 6141 } else { 6142 labelTab.hidden = true; 6143 if (labelTab.getAttribute('aria-selected') === 'true') activate('lysing'); 6144 } 6145 }; 6146 6147 const params = new URLSearchParams(window.location.search); 6148 applyVariant(params.get('variant') || root.dataset.piVariant); 6149 document.addEventListener('pdp:variant-change', (ev) => applyVariant(ev && ev.detail && ev.detail.id)); 6150})(); 6151</script>
6151 6152 6153 6154</div><div id="shopify-section-template--22413711704202__section_video_slider_NAxnFx" class="shopify-section"><style> 6155 [id="template--22413711704202__section_video_slider_NAxnFx"] { 6156 padding: 16px 32px; 6157 background: #FFFFFF; 6158 } 6159 6160 .videoSwiper { 6161 6162 margin: 0 auto; 6163 } 6164 6165 .videoSwiper .swiper-slide { 6166 height: auto; 6167 display: flex; 6168 } 6169 6170 .videoSliderWrapper { 6171 position: relative; 6172 cursor: pointer; 6173 height: 100%; 6174 } 6175 6176 .videoSliderVideoPlays { 6177 position: absolute; 6178 bottom: 20px; 6179 left: 20px; 6180 display: flex; 6181 align-items: center; 6182 gap: 10px; 6183 font-weight: bold; 6184 color: #FFFFFF; 6185 pointer-events: none; 6186 } 6187 6188 .videoSliderVideo { 6189 object-fit: cover; 6190 border-radius: 8px; 6191 height: 100%; 6192 } 6193 6194 6195 .video-header { 6196 display: flex; 6197 margin-bottom: 16px; 6198 } 6199 6200 .video-heading { 6201 color: #262626; 6202 font-size: 32px; 6203 font-family: "Dela Gothic One", sans-serif; 6204 font-weight: 300; 6205 } 6206 6207 .video-carousel-controls { 6208 margin-left: auto; 6209 display: flex; 6210 align-items: center; 6211 gap: 12px; 6212 } 6213 6214 .video-carousel-controls .control-prev, 6215 .video-carousel-controls .control-next { 6216 width: 56px; 6217 height: 56px; 6218 border-radius: 9999px; 6219 background: #f3f4f6; 6220 display: grid; 6221 place-items: center; 6222 box-shadow: 0 1px 2px rgba(0,0,0,.06); 6223 transition: background .2s ease, transform .1s ease, box-shadow .2s ease; 6224 cursor: pointer; 6225 color: #111; 6226 } 6227 6228 6229 6230@media (max-width:1000px){ 6231 6232 [id="template--22413711704202__section_video_slider_NAxnFx"] { 6233 padding: 16px 16px; 6234 background: #FFFFFF; 6235 } 6236 6237 6238 .videoSwiper .swiper-wrapper{ 6239 display:flex; 6240 gap:16px; 6241 overflow-x:auto; 6242 scroll-snap-type:x mandatory; 6243 padding-bottom:8px; /* room for iOS scrollbar */ 6244 transform:none !important; /* kill leftover Swiper transforms */ 6245 } 6246 .videoSwiper .swiper-slide{ 6247 flex:0 0 auto; 6248 min-width:60%; 6249 max-width:60%; 6250 scroll-snap-align:start; 6251 } 6252 6253 /* optional: match trio card visual scale */ 6254 .videoSliderWrapper{ height:auto; } 6255 .videoSliderVideo{ 6256 width:100%; 6257 object-fit:cover; 6258 border-radius:8px; 6259 } 6260 6261 .video-heading { 6262 font-size: 24px; 6263 6264 } 6265 6266 .video-carousel-controls .control-prev, 6267 .video-carousel-controls .control-next { 6268 width: 36px; 6269 height: 36px; 6270 } 6271 6272 .videoSwiper .swiper-wrapper{ 6273 overflow-x: auto; 6274 /* hide scrollbar (all browsers) */ 6275 scrollbar-width: none; /* Firefox */ 6276 -ms-overflow-style: none; /* IE/Edge legacy */ 6277 padding-bottom: 0; /* remove space reserved for scrollbar */ 6278 } 6279 .videoSwiper .swiper-wrapper::-webkit-scrollbar{ 6280 display: none; /* Chrome/Safari */ 6281 height: 0; width: 0; 6282 background: transparent; 6283 } 6284 6285} 6286</style> 6287 6288<section id="template--22413711704202__section_video_slider_NAxnFx"> 6289 <div class="video-header"> 6290 <div class="video-heading"> 6291 <p>Fylgdu okkur á miðlunum</p> 6292 </div> 6293 <div class="video-carousel-controls"> 6294 <div class="control-prev"> 6295 <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 6296 <g clip-path="url(#clip0_1176_3422)"> 6297 <path d="M15.3281 8H1.32812" stroke="black" stroke-width="2"/> 6298 <path d="M8.32812 15L1.32812 8L8.32812 1" stroke="black" stroke-width="2"/> 6299 </g> 6300 <defs> 6301 <clipPath id="clip0_1176_3422"> 6302 <rect width="16" height="16" fill="white" transform="matrix(-1 0 0 1 16 0)"/> 6303 </clipPath> 6304 </defs> 6305</svg> 6306 6307 </div> 6308 <div class="control-next"> 6309 <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 6310 <g clip-path="url(#clip0_1176_3427)"> 6311 <path d="M0.671875 8H14.6719" stroke="black" stroke-width="2"/> 6312 <path d="M7.67188 15L14.6719 8L7.67188 1" stroke="black" stroke-width="2"/> 6313 </g>
6314 <defs> 6315 <clipPath id="clip0_1176_3427"> 6316 <rect width="16" height="16" fill="white"/> 6317 </clipPath> 6318 </defs> 6319</svg> 6320 6321 </div> 6322 </div> 6323 </div> 6324 6325 <div class="videoSwiper swiper"> 6326 <div class="swiper-wrapper"> 6327 6328 <div class="swiper-slide"> 6329 <div class="videoSliderWrapper"> 6330 6331 <video class="videoSliderVideo" autoplay muted playsinline loop poster="//happyhydrate.is/cdn/shop/files/preview_images/ce96cd07c517403586df6de89782b963.thumbnail.0000000000.jpg?v=1754480351&width=400" data-src="//happyhydrate.is/cdn/shop/videos/c/vp/ce96cd07c517403586df6de89782b963/ce96cd07c517403586df6de89782b963.HD-1080p-7.2Mbps-54399699.mp4?v=0"></video> 6332 </div> 6333 </div> 6334 6335 <div class="swiper-slide"> 6336 <div class="videoSliderWrapper"> 6337 6338 <video class="videoSliderVideo" autoplay muted playsinline loop poster="//happyhydrate.is/cdn/shop/files/preview_images/a6928f806eda4b369a9b3b213cbbe35f.thumbnail.0000000000.jpg?v=1749739167&width=400" data-src="//happyhydrate.is/cdn/shop/videos/c/vp/a6928f806eda4b369a9b3b213cbbe35f/a6928f806eda4b369a9b3b213cbbe35f.HD-1080p-7.2Mbps-49279785.mp4?v=0"></video> 6339 </div> 6340 </div> 6341 6342 <div class="swiper-slide"> 6343 <div class="videoSliderWrapper"> 6344 6345 <video class="videoSliderVideo" autoplay muted playsinline loop poster="//happyhydrate.is/cdn/shop/files/preview_images/3342e59cc32448d4b47e47edc0a09652.thumbnail.0000000000.jpg?v=1741781708&width=400" data-src="//happyhydrate.is/cdn/shop/videos/c/vp/3342e59cc32448d4b47e47edc0a09652/3342e59cc32448d4b47e47edc0a09652.HD-1080p-7.2Mbps-44038649.mp4?v=0"></video> 6346 </div> 6347 </div> 6348 6349 <div class="swiper-slide"> 6350 <div class="videoSliderWrapper"> 6351 6352 <video class="videoSliderVideo" autoplay muted playsinline loop poster="//happyhydrate.is/cdn/shop/files/preview_images/047A4882_1.jpg?v=1741718502&width=400" data-src="//happyhydrate.is/cdn/shop/videos/c/vp/03d25817680e421f940426440bea17bb/03d25817680e421f940426440bea17bb.HD-1080p-7.2Mbps-43995506.mp4?v=0"></video> 6353 </div> 6354 </div> 6355 6356 <div class="swiper-slide"> 6357 <div class="videoSliderWrapper"> 6358 6359 <video class="videoSliderVideo" autoplay muted playsinline loop poster="//happyhydrate.is/cdn/shop/files/preview_images/Untitled_design_-_2025-03-03T124405.498.png?v=1741718254&width=400" data-src="//happyhydrate.is/cdn/shop/videos/c/vp/74566f612e9a41bea6da2610f8862853/74566f612e9a41bea6da2610f8862853.HD-1080p-7.2Mbps-43995163.mp4?v=0"></video> 6360 </div> 6361 </div> 6362 6363 </div> 6364 </div> 6365</section> 6366 6367 6368
6369<script> 6370document.addEventListener('DOMContentLoaded', function () { 6371(function () { 6372 const section = document.querySelector(`[id="template--22413711704202__section_video_slider_NAxnFx"]`); 6373 const prevBtn = section.querySelector('.control-prev'); 6374 const nextBtn = section.querySelector('.control-next'); 6375 const wrapper = section.querySelector('.swiper-wrapper'); 6376 6377 /* click-to-play/pause + lazy load (unchanged) */ 6378 section.querySelectorAll(".videoSliderVideo").forEach(video => { 6379 video.addEventListener("click", () => { 6380 if (video.paused) { 6381 video.play(); 6382 section.querySelectorAll(".videoSliderVideo").forEach(other => { if (other!==video) other.pause(); }); 6383 } else { 6384 video.pause(); 6385 } 6386 }); 6387 }); 6388 6389 const observer = new IntersectionObserver((entries) => { 6390 entries.forEach(v => { 6391 if (v.isIntersecting) { 6392 v.target.src = v.target.dataset.src; 6393 v.target.load(); 6394 observer.unobserve(v.target); 6395 } 6396 }); 6397 }, {}); 6398 section.querySelectorAll(".videoSliderVideo").forEach(v => observer.observe(v)); 6399 6400 /* ---- Responsive slider: native on mobile, Swiper on desktop ---- */ 6401 let swiper = null; 6402 let navHandlers = null; 6403 const mq = window.matchMedia('(max-width:1000px)'); 6404 6405 function attachMobileNav(){ 6406 if (navHandlers) return; 6407 6408 const styles = getComputedStyle(wrapper); 6409 const gapPx = parseFloat(styles.columnGap || styles.gap || '0') || 0; 6410 6411 function step(){ 6412 const firstSlide = wrapper.querySelector('.swiper-slide'); 6413 return (firstSlide ? firstSlide.getBoundingClientRect().width : 0) + gapPx; 6414 } 6415 function clamp(x, min, max){ return Math.max(min, Math.min(max, x)); } 6416 6417 // compute the next snap left so the next card starts at the container edge 6418 function nextSnapLeft(dir){ // dir: +1 next, -1 prev 6419 const s = step(); 6420 const maxLeft = wrapper.scrollWidth - wrapper.clientWidth; 6421 if (s <= 0) return wrapper.scrollLeft; 6422 6423 const i = wrapper.scrollLeft / s; 6424 const targetIdx = dir > 0 ? Math.floor(i + 1) : Math.ceil(i - 1); 6425 const target = targetIdx * s; 6426 return clamp(Math.round(target), 0, maxLeft); 6427 } 6428 6429 const onPrev = () => wrapper.scrollTo({ left: nextSnapLeft(-1), behavior:'smooth' }); 6430 const onNext = () => wrapper.scrollTo({ left: nextSnapLeft(+1), behavior:'smooth' }); 6431 6432 prevBtn?.addEventListener('click', onPrev); 6433 nextBtn?.addEventListener('click', onNext); 6434 navHandlers = { onPrev, onNext }; 6435 } 6436 6437 function detachMobileNav(){ 6438 if (!navHandlers) return; 6439 prevBtn?.removeEventListener('click', navHandlers.onPrev); 6440 nextBtn?.removeEventListener('click', navHandlers.onNext); 6441 navHandlers = null; 6442 } 6443 6444 function toMobile(){ 6445 if (swiper){ swiper.destroy(true,true); swiper = null; } 6446 // clear Swiper inline transforms so scroll works 6447 wrapper.style.transform = ''; 6448 attachMobileNav(); 6449 } 6450 6451 function toDesktop(){ 6452 detachMobileNav(); 6453 swiper = new Swiper(section.querySelector('.swiper'), { 6454 slidesPerView: 4, 6455 centeredSlides: false, 6456 spaceBetween: 32, 6457 loop: true, 6458 navigation: { 6459 nextEl: section.querySelector('.control-next'), 6460 prevEl: section.querySelector('.control-prev'), 6461 }, 6462 // still okay if someone resizes up from mobile 6463 breakpoints: { 6464 0: { slidesPerView: 1.5, centeredSlides: true, spaceBetween: 20 }, 6465 1024: { slidesPerView: 4, centeredSlides: false, spaceBetween: 32 } 6466 } 6467 }); 6468 } 6469 6470 function applyMode(){ mq.matches ? toMobile() : toDesktop(); } 6471 mq.addEventListener('change', applyMode); 6472 applyMode(); 6473}()); 6474}); 6475</script>
6475 6476 6477 6478</div><div id="shopify-section-template--22413711704202__171701511725c1f756" class="shopify-section"> 6479 6480 <div id="shopify-block-ARExGZDFXOWVyUzROS__junip_product_reviews_ugc_junip_product_review_6pkryw" class="shopify-block shopify-app-block"><!-- BEGIN app snippet: junip-product-review --><span 6481 class="junip-product-review" 6482 data-product-id="7907478503562" 6483 data-title="" 6484 data-title-alignment="" 6485 data-sort-order="mostRecent"> 6486</span> 6487<!-- END app snippet --> 6488 6489 6490</div> 6491 6492 6493 6494 6495 6496</div><div id="shopify-section-template--22413711704202__section_manual_cards_slider_ABC123" class="shopify-section"><style> 6497 [id="template--22413711704202__section_manual_cards_slider_ABC123"] { padding:32px 32px 16px; background:#fff; } 6498 .mcSwiper { margin:0 auto; } 6499 .mcSwiper .swiper-slide { height:auto; display:flex; } 6500 .mcCard { border-radius:6px; width:100%; display:flex; flex-direction:column; } 6501 6502 .mcMedia { display:flex; border-radius:6px; overflow:hidden; background:#f0eff2; height: 450px; justify-content: center; } 6503 6504 .mcMedia img { width:100%; height:auto; display:block; object-fit: cover; } 6505 .mcMedia--scaled { align-items:center; } 6506 .mcMedia--scaled img { height: var(--mc-scale, 100%); width:auto; max-width:none; object-fit: contain; } 6507 .mcMeta { margin-top:8px; } 6508 6509 .mcTitle { font-family:"DM Sans", sans-serif; font-size:16px; color:#262626; line-height:1.2; font-weight:500; } 6510 6511 .mcFlavor { font-family:"Dela Gothic One", sans-serif; font-size:24px; color:#262626; line-height:1.1; margin-top:8px; font-weight:200; } 6512 6513 6514 6515 .badgeNew, 6516 .badgeDiscount { 6517 position: absolute; 6518 top: 12px; 6519 right: 12px; 6520 background: #FFF716; 6521 color: #323232; 6522 font-weight: 100; 6523 font-size: 12px; 6524 letter-spacing: .02em; 6525 padding: 4px 10px; 6526 border-radius: 6px; 6527 font-family: "Dela Gothic One"; 6528 } 6529 6530 .badgeDiscount { 6531 background: #B02D28; 6532 color: #FFFFFF; 6533 } 6534 6535 /* When both badges exist, push the second one down */ 6536 .badgeNew + .badgeDiscount { 6537 top: 44px; /* or adjust to your spacing needs */ 6538 } 6539 6540 .badgeSoldOut{ position:absolute; top:12px; left:12px; background:#FDE2E2; color:#B02D28; font-weight:600; font-size:12px; letter-spacing:.02em; padding:4px 10px; border-radius:6px; font-family:"DM Sans", system-ui, sans-serif; } 6541 .badgeSale{ position:absolute; top:12px; left:12px; z-index:2; background:#DDF4E0; color:#1B7A3A; font-weight:600; font-size:12px; letter-spacing:.02em; padding:4px 10px; border-radius:6px; font-family:"DM Sans", system-ui, sans-serif; } 6542 6543 .mcHeader { display:flex; align-items:center; margin-bottom:12px; } 6544 .mcHeading { color:#262626; font-size:32px; font-family:"Dela Gothic One", sans-serif; font-weight:300; } 6545 .mcControls { margin-left:auto; display:flex; align-items:center; gap:12px; } 6546 .mcControls .control-prev, .mcControls .control-next { 6547 width:56px; height:56px; border-radius:9999px; background:#f3f4f6; display:grid; place-items:center; 6548 box-shadow:0 1px 2px rgba(0,0,0,.06); transition:background .2s, transform .1s, box-shadow .2s; cursor:pointer; color:#111; 6549 } 6550 6551 @media (max-width:1000px){ 6552 6553 [id="template--22413711704202__section_manual_cards_slider_ABC123"] { padding:32px 16px 16px; background:#fff; } 6554 .mcSwiper .swiper-wrapper{ 6555 display:flex; 6556 gap:16px; 6557 overflow-x:auto; 6558 scroll-snap-type:x mandatory; 6559 padding-bottom:0; 6560 6561 /* hide scrollbar */ 6562 scrollbar-width:none; /* Firefox */ 6563 -ms-overflow-style:none; /* IE/Edge old */ 6564 } 6565 .mcSwiper .swiper-wrapper::-webkit-scrollbar{ display:none; width:0; height:0; } 6566 6567 .mcSwiper .swiper-slide{ 6568 flex:0 0 auto; 6569 min-width:60%; 6570 max-width:60%; 6571 scroll-snap-align:start; 6572 } 6573 6574 .mcControls .control-prev, .mcControls .control-next { 6575 width:36px; height:36px; 6576 } 6577 6578 .mcMedia { height: 300px; } 6579 .mcMedia--scaled img { width: 100%; max-width: 100%; height: auto; } 6580 6581 .mcHeading { 6582 font-size: 18px; 6583 6584 } 6585 6586 6587 6588 } 6589</style><section id="template--22413711704202__section_manual_cards_slider_ABC123"> 6590 <div class="mcHeader"> 6591 6592 <div class="mcHeading"><p>Vinsælustu vörurnar</p></div> 6593
6594 <div class="mcControls"> 6595 <div class="control-prev"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 6596 <g clip-path="url(#clip0_1176_3422)"> 6597 <path d="M15.3281 8H1.32812" stroke="black" stroke-width="2"/> 6598 <path d="M8.32812 15L1.32812 8L8.32812 1" stroke="black" stroke-width="2"/> 6599 </g> 6600 <defs> 6601 <clipPath id="clip0_1176_3422"> 6602 <rect width="16" height="16" fill="white" transform="matrix(-1 0 0 1 16 0)"/> 6603 </clipPath> 6604 </defs> 6605</svg> 6606 </div> 6607 <div class="control-next"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 6608 <g clip-path="url(#clip0_1176_3427)"> 6609 <path d="M0.671875 8H14.6719" stroke="black" stroke-width="2"/> 6610 <path d="M7.67188 15L14.6719 8L7.67188 1" stroke="black" stroke-width="2"/> 6611 </g> 6612 <defs> 6613 <clipPath id="clip0_1176_3427"> 6614 <rect width="16" height="16" fill="white"/> 6615 </clipPath> 6616 </defs> 6617</svg> 6618</div> 6619 </div> 6620 </div> 6621 6622 <div class="mcSwiper swiper"> 6623 <div class="swiper-wrapper"> 6624 6625 6626 6627 6628 6629 6630<div class="swiper-slide" > 6631 <a class="mcCard" href="/products/hydration-xpress?variant=50050860744842" > 6632 <span class="mcMedia mcMedia--scaled" style="--mc-scale: 82%"> 6633 6634 <img 6635 src="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=800" 6636 srcset="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=400 400w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=800 800w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-StrawberryLemonade.png?v=1788381496&width=1200 1200w" 6637 sizes="(min-width: 1024px) 25vw, 66vw" 6638 alt="Hydration Xpress Strawberry Lemonade" 6639 width="1240" 6640 height="1240" 6641 loading="lazy" 6642 decoding="async"> 6643 6644 </span> 6645 <span class="mcMeta"> 6646 <div class="mcTitle"> 6647 Hydration Xpress 6648 <span class="badgeNew">NÃTT</span> 6649 6650 6651 6652 </div> 6653 <div class="mcFlavor">Strawberry Lemonade</div> 6654 </span> 6655 </a> 6656 </div> 6657 6658 6659 6660 6661 6662 6663<div class="swiper-slide" > 6664 <a class="mcCard" href="/products/hydration-xpress?variant=45773488324746" > 6665 <span class="mcMedia mcMedia--scaled" style="--mc-scale: 82%"> 6666 6667 <img 6668 src="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496&width=800" 6669 srcset="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496&width=400 400w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496&width=800 800w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PeachCrush.png?v=1788381496&width=1200 1200w" 6670 sizes="(min-width: 1024px) 25vw, 66vw" 6671 alt="Hydration Xpress Peach Crush" 6672 width="1240" 6673 height="1240" 6674 loading="lazy" 6675 decoding="async"> 6676 6677 </span> 6678 <span class="mcMeta"> 6679 <div class="mcTitle"> 6680 Hydration Xpress 6681 6682 6683 6684 6685 </div> 6686 <div class="mcFlavor">Peach Crush</div> 6687 </span> 6688 </a> 6689 </div> 6690 6691 6692 6693 6694 6695 6696<div class="swiper-slide" > 6697 <a class="mcCard" href="/products/creatine-xpress-bundle?variant=46311578271882" > 6698 <span class="mcMedia"> 6699 6700 <img 6701 src="//happyhydrate.is/cdn/shop/files/Box_Mixed_Berries_Creatine.png?v=1758881439&width=800" 6702 srcset="//happyhydrate.is/cdn/shop/files/Box_Mixed_Berries_Creatine.png?v=1758881439&width=400 400w, //happyhydrate.is/cdn/shop/files/Box_Mixed_Berries_Creatine.png?v=1758881439&width=800 800w, //happyhydrate.is/cdn/shop/files/Box_Mixed_Berries_Creatine.png?v=1758881439&width=1200 1200w" 6703 sizes="(min-width: 1024px) 25vw, 66vw" 6704 alt="" 6705 width="1080" 6706 height="1080" 6707 loading="lazy" 6708 decoding="async"> 6709 6710 </span>
6711 <span class="mcMeta"> 6712 <div class="mcTitle"> 6713 KreatÃn 6714 6715 6716 6717 6718 </div> 6719 <div class="mcFlavor">Mixed Berries</div> 6720 </span> 6721 </a> 6722 </div> 6723 6724 6725 6726 6727 6728 6729<div class="swiper-slide" > 6730 <a class="mcCard" href="/products/creatine-xpress-bundle?variant=46311578140810" > 6731 <span class="mcMedia"> 6732 6733 <img 6734 src="//happyhydrate.is/cdn/shop/files/Box_Lemon_Lime_Creatine.png?v=1758881177&width=800" 6735 srcset="//happyhydrate.is/cdn/shop/files/Box_Lemon_Lime_Creatine.png?v=1758881177&width=400 400w, //happyhydrate.is/cdn/shop/files/Box_Lemon_Lime_Creatine.png?v=1758881177&width=800 800w, //happyhydrate.is/cdn/shop/files/Box_Lemon_Lime_Creatine.png?v=1758881177&width=1200 1200w" 6736 sizes="(min-width: 1024px) 25vw, 66vw" 6737 alt="" 6738 width="1080" 6739 height="1080" 6740 loading="lazy" 6741 decoding="async"> 6742 6743 </span> 6744 <span class="mcMeta"> 6745 <div class="mcTitle"> 6746 KreatÃn 6747 6748 6749 6750 6751 </div> 6752 <div class="mcFlavor">Lemon & lime</div> 6753 </span> 6754 </a> 6755 </div> 6756 6757 6758 6759 6760 6761 6762<div class="swiper-slide" > 6763 <a class="mcCard" href="/products/hydration-xpress?variant=44751436939402" > 6764 <span class="mcMedia mcMedia--scaled" style="--mc-scale: 82%"> 6765 6766 <img 6767 src="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496&width=800" 6768 srcset="//happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496&width=400 400w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496&width=800 800w, //happyhydrate.is/cdn/shop/files/HappyHydrate-Vorumynd-vef-PinaColada.png?v=1788381496&width=1200 1200w" 6769 sizes="(min-width: 1024px) 25vw, 66vw" 6770 alt="Hydration Xpress Pina Colada" 6771 width="1240" 6772 height="1240" 6773 loading="lazy" 6774 decoding="async"> 6775 6776 </span> 6777 <span class="mcMeta"> 6778 <div class="mcTitle"> 6779 Hydration Xpress 6780 6781 <span class="badgeSoldOut">Uppselt</span> 6782 6783 6784 </div> 6785 <div class="mcFlavor">Pina Colada</div> 6786 </span> 6787 </a> 6788 </div> 6789 6790 </div> 6791 </div> 6792</section> 6793
6794<script> 6795document.addEventListener('DOMContentLoaded', function () { 6796(() => { 6797 const section = document.querySelector(`[id="template--22413711704202__section_manual_cards_slider_ABC123"]`); 6798 const container = section.querySelector('.mcSwiper'); 6799 const wrapper = section.querySelector('.swiper-wrapper'); 6800 const prevBtn = section.querySelector('.control-prev'); 6801 const nextBtn = section.querySelector('.control-next'); 6802 6803 let swiper = null; 6804 let navHandlers = null; 6805 const mq = window.matchMedia('(max-width:1000px)'); 6806 6807 function attachMobileNav(){ 6808 if (navHandlers) return; 6809 6810 // measure one "step" = slide width + gap 6811 const firstSlide = wrapper.querySelector('.swiper-slide'); 6812 const styles = getComputedStyle(wrapper); 6813 const gapPx = parseFloat(styles.columnGap || styles.gap || '0') || 0; 6814 6815 function step() { 6816 // re-measure on each click in case of resize 6817 return (firstSlide?.getBoundingClientRect().width || 0) + gapPx; 6818 } 6819 function clamp(x, min, max){ return Math.max(min, Math.min(max, x)); } 6820 function nextSnapLeft(dir){ // dir: +1 (next) or -1 (prev) 6821 const s = step(); 6822 const maxLeft = wrapper.scrollWidth - wrapper.clientWidth; 6823 if (s <= 0) return wrapper.scrollLeft; 6824 6825 const i = wrapper.scrollLeft / s; 6826 const targetIdx = dir > 0 ? Math.floor(i + 1) : Math.ceil(i - 1); 6827 const target = targetIdx * s; 6828 return clamp(Math.round(target), 0, maxLeft); 6829 } 6830 6831 const onPrev = () => wrapper.scrollTo({ left: nextSnapLeft(-1), behavior: 'smooth' }); 6832 const onNext = () => wrapper.scrollTo({ left: nextSnapLeft(+1), behavior: 'smooth' }); 6833 6834 prevBtn?.addEventListener('click', onPrev); 6835 nextBtn?.addEventListener('click', onNext); 6836 navHandlers = { onPrev, onNext }; 6837 } 6838 function detachMobileNav(){ 6839 if (!navHandlers) return; 6840 prevBtn?.removeEventListener('click', navHandlers.onPrev); 6841 nextBtn?.removeEventListener('click', navHandlers.onNext); 6842 navHandlers = null; 6843 } 6844 6845 function toMobile(){ 6846 if (swiper){ swiper.destroy(true,true); swiper = null; } 6847 // clear Swiper transforms so native scroll works 6848 wrapper.style.transform = ''; 6849 container.classList.remove('swiper-initialized','swiper-horizontal'); 6850 attachMobileNav(); 6851 } 6852 6853 function toDesktop(){ 6854 detachMobileNav(); 6855 swiper = new Swiper(container, { 6856 slidesPerView: 4, 6857 centeredSlides: false, 6858 spaceBetween: 32, 6859 loop: true, 6860 navigation: { 6861 nextEl: nextBtn, 6862 prevEl: prevBtn, 6863 }, 6864 breakpoints: { 6865 0: { slidesPerView: 1.5, centeredSlides: true, spaceBetween: 20 }, 6866 1024: { slidesPerView: 4, centeredSlides: false, spaceBetween: 32 } 6867 } 6868 }); 6869 } 6870 6871 function applyMode(){ mq.matches ? toMobile() : toDesktop(); } 6872 mq.addEventListener('change', applyMode); 6873 applyMode(); 6874})(); 6875}); 6876</script>
6876 6877 6878 6879</div><div id="shopify-section-template--22413711704202__section_manual_feature_tiles_1" class="shopify-section"><style> 6880 [id="template--22413711704202__section_manual_feature_tiles_1"]{ padding: 40px 32px 32px; } 6881 .mft-grid{ display:grid; gap:24px; } 6882 @media(min-width:768px){ .mft-grid{ grid-template-columns:repeat(2,1fr); } } 6883 @media(min-width:1200px){ .mft-grid{ grid-template-columns:repeat(3,1fr); } } 6884 6885 @media (min-width:1200px){ 6886 .mft-grid--two{ 6887 grid-template-columns: repeat(2, 1fr) !important; 6888 } 6889 6890 .mft-grid--two .mft-tile{ 6891 min-height: 700px; 6892 } 6893 } 6894 6895 .mft-tile{ 6896 position:relative; overflow:hidden; border-radius:6px; background:#0f0f0f; 6897 min-height:500px; 6898 display:block; 6899 } 6900 .mft-img{ position:absolute; inset:0; } 6901 .mft-img img{ width:100%; height:100%; object-fit:cover; display:block; } 6902 6903 .mft-overlay{ 6904 position:absolute; inset:0; 6905 background:linear-gradient(180deg, rgba(0,0,0,0) 35%, rgba(0,0,0,.55) 100%); 6906 } 6907 .mft-content{ 6908 position:absolute; left:20px; right:20px; bottom:20px; z-index:2; color:#fff; 6909 display:flex; flex-direction:column; gap:14px; 6910 } 6911 .mft-title{ 6912 font-family:"Dela Gothic One", sans-serif; 6913 font-weight:400; 6914 font-size:36px; 6915 line-height:1.05; 6916 color: #FFFFFF; 6917 } 6918 .mft-btn{ 6919 font-family:"DM Sans", sans-serif; 6920 align-self:flex-start; background:#fff; color:#262626; border-radius:9999px; 6921 padding:10px 18px; font-weight:600; font-size:14px; text-decoration:none; 6922 } 6923 .mft-badge{ 6924 position:absolute; top: 12px; right: 12px; 6925 background: #FFF716; 6926 color:#323232; 6927 font-weight: 100; 6928 font-size: 12px; 6929 letter-spacing:.02em; 6930 padding: 4px 10px; 6931 border-radius: 2px; 6932 font-family:"Dela Gothic One" 6933 } 6934 6935 @media(max-width:767px){ 6936 [id="template--22413711704202__section_manual_feature_tiles_1"]{ padding:16px; } 6937 .mft-tile{ min-height:400px; } 6938 .mft-title{ font-size:28px; } 6939 } 6940</style> 6941 6942 6943<section id="template--22413711704202__section_manual_feature_tiles_1"> 6944 <div class="mft-grid"> 6945 6946 6947 6948 6949 6950 <a class="mft-tile" href="/products/creatine-xpress-bundle?variant=46311578271882" > 6951 <div class="mft-img"> 6952 6953 <img 6954 src="//happyhydrate.is/cdn/shop/files/gads_square_vorumynd.png?v=1761490561&width=1200" 6955 srcset="//happyhydrate.is/cdn/shop/files/gads_square_vorumynd.png?v=1761490561&width=800 800w, //happyhydrate.is/cdn/shop/files/gads_square_vorumynd.png?v=1761490561&width=1200 1200w, //happyhydrate.is/cdn/shop/files/gads_square_vorumynd.png?v=1761490561&width=1600 1600w" 6956 sizes="(min-width:1200px) 33vw, (min-width:768px) 50vw, 100vw" 6957 alt="" 6958 width="1080" 6959 height="1080" 6960 loading="lazy" 6961 decoding="async"> 6962 6963 </div> 6964 6965 6966 <span class="mft-overlay" aria-hidden="true"></span> 6967 6968 <div class="mft-content"> 6969 <div class="mft-title">KreatÃn</div> 6970 6971 <span class="mft-btn">Skoða vöru</span> 6972 6973 </div> 6974 </a> 6975 6976 6977 6978 6979 6980 <a class="mft-tile" href="/pages/brusi-whisker" > 6981 <div class="mft-img"> 6982 6983 <img 6984 src="//happyhydrate.is/cdn/shop/files/Stika-3.png?v=1761491700&width=1200" 6985 srcset="//happyhydrate.is/cdn/shop/files/Stika-3.png?v=1761491700&width=800 800w, //happyhydrate.is/cdn/shop/files/Stika-3.png?v=1761491700&width=1200 1200w, //happyhydrate.is/cdn/shop/files/Stika-3.png?v=1761491700&width=1600 1600w" 6986 sizes="(min-width:1200px) 33vw, (min-width:768px) 50vw, 100vw" 6987 alt="" 6988 width="1080" 6989 height="1080" 6990 loading="lazy" 6991 decoding="async"> 6992 6993 </div> 6994 6995 6996 <span class="mft-overlay" aria-hidden="true"></span> 6997 6998 <div class="mft-content"> 6999 <div class="mft-title">Komdu à áskrift</div> 7000 7001 <span class="mft-btn">Fá 15% afslátt</span> 7002 7003 </div> 7004 </a> 7005 7006 7007 7008 7009 7010 <a class="mft-tile" href="/products/hydration-kids-1" > 7011 <div class="mft-img"> 7012 7013 <img 7014 src="//happyhydrate.is/cdn/shop/files/Untitled_design-85_98e2b9dd-2961-4b19-9e3a-372e0773deff.png?v=1761490327&width=1200" 7015 srcset="//happyhydrate.is/cdn/shop/files/Untitled_design-85_98e2b9dd-2961-4b19-9e3a-372e0773deff.png?v=1761490327&width=800 800w, //happyhydrate.is/cdn/shop/files/Untitled_design-85_98e2b9dd-2961-4b19-9e3a-372e0773deff.png?v=1761490327&width=1200 1200w, //happyhydrate.is/cdn/shop/files/Untitled_design-85_98e2b9dd-2961-4b19-9e3a-372e0773deff.png?v=1761490327&width=1600 1600w" 7016 sizes="(min-width:1200px) 33vw, (min-width:768px) 50vw, 100vw" 7017 alt="" 7018 width="1080" 7019 height="1080" 7020 loading="lazy" 7021 decoding="async"> 7022 7023 </div> 7024
7025 <span class="mft-badge">NÃTT</span> 7026 <span class="mft-overlay" aria-hidden="true"></span> 7027 7028 <div class="mft-content"> 7029 <div class="mft-title">Hydration Kids</div> 7030 7031 <span class="mft-btn">Skoða vöru</span> 7032 7033 </div> 7034 </a> 7035 7036 </div> 7037</section> 7038 7039 7040</div><div id="shopify-section-template--22413711704202__section_full_video_nU4Gwy" class="shopify-section"><style> 7041 [id="template--22413711704202__section_full_video_nU4Gwy"]{ padding: 0 32px 32px; background:#fff; } 7042 .fv-wrap{ border-radius:6px; overflow:hidden; } 7043 .fv-video{ 7044 width:100%; 7045 height:auto; 7046 display:block; 7047 aspect-ratio: 16 / 9; /* nice big landscape video */ 7048 object-fit: cover; /* crops edges if needed to fill */ 7049 background:#000; 7050 } 7051 @media (max-width:1024px){ 7052 [id="template--22413711704202__section_full_video_nU4Gwy"]{ padding: 16px 16px; } 7053 7054 7055 /* Square on phones: robust ratio box (works even on older Safari) */ 7056 .fv-wrap{ position: relative; overflow: hidden; } 7057 .fv-wrap::before{ content:""; display:block; padding-top:100%; } /* 1:1 box */ 7058 .fv-wrap > .fv-video{ 7059 position:absolute; inset:0; 7060 width:100%; height:100%; 7061 object-fit: cover; /* fill square; crop left/right if needed */ 7062 object-position: center; 7063 } 7064 } 7065</style> 7066 7067<section id="template--22413711704202__section_full_video_nU4Gwy"> 7068 <div class="fv-wrap"> 7069 7070 7071 7072 7073 7074 <video playsinline="true" autoplay="autoplay" loop="loop" muted="muted" class="fv-video" preload="metadata" poster="//happyhydrate.is/cdn/shop/files/preview_images/6e10ec88d9254dec8403a0ba50b008a5.thumbnail.0000000000_small.jpg?v=1716406519" loading="lazy"><source src="//happyhydrate.is/cdn/shop/videos/c/vp/6e10ec88d9254dec8403a0ba50b008a5/6e10ec88d9254dec8403a0ba50b008a5.HD-1080p-7.2Mbps-29478654.mp4?v=0" type="video/mp4"><img src="//happyhydrate.is/cdn/shop/files/preview_images/6e10ec88d9254dec8403a0ba50b008a5.thumbnail.0000000000_small.jpg?v=1716406519"></video> 7075 7076 7077 7078 </div> 7079</section> 7080 7081 7082 7083</div> 7084</main> 7085 7086<!-- Footer --> 7087<div id="shopify-section-theme-footer" class="shopify-section"> 7088 7089 7090 7091 7092 7093<footer id="footer" 7094 > 7095 <div id="footerWrapper" class="container"> 7096 7097 7098 7099 7100 <div id="footerContent"> 7101 7102 <div style="flex: 1;"> 7103 <div style="max-width: 360px; gap: 8px; display: flex; flex-direction: column;"> 7104 <h1 class="footerHeading">Hafðu samband</h1> 7105 <p class="footerText">Endilega hafðu samband við okkur og við munum svara þér innan 24 tÃma. Mánudaga - Föstudaga 08.00 - 21.00</p> 7106 7107 <div style="margin-top: 12px; display: flex; gap: 8px; flex-direction: column;"> 7108 7109 <button class="footerButton" type="button" onclick="window.location.href='/pages/contact'"> 7110 <span>Hafa samband</span> 7111 7112 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" viewBox="0 0 12 13" fill="none"> 7113 <g clip-path="url(#clip0_1176_2947)"> 7114 <path d="M1.46875 11.4981L10.5313 2.43555" stroke="white" stroke-width="1.5"/> 7115 <path d="M3.73438 2.43555H10.5312V9.23242" stroke="white" stroke-width="1.5"/> 7116 </g> 7117 <defs> 7118 <clipPath id="clip0_1176_2947"> 7119 <rect width="12" height="12" fill="white" transform="translate(0 0.964844)"/> 7120 </clipPath> 7121 </defs> 7122 </svg> 7123 </button> 7124 7125 7126 </div> 7127 </div> 7128 7129 7130 </div> 7131 7132 <div id="midlar-vorur-container"> 7133 <div> 7134 <p class="midlar-vorur-footerText">Vörunar okkar</p> 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 <div class="footerNavGroup"> 7149 <div class="footerNavGroupLinks"> 7150 <div class="footerNavGroupLinksWrapper"> 7151 7152 <a class="footerNavItem" href="/collections/shop-all">Allar vörur</a> 7153 7154 <a class="footerNavItem" href="/products/hydration-xpress?variant=500
715450860744842">Hydrate</a> 7155 7156 <a class="footerNavItem" href="/products/energy-xpress-bundle">Energy</a> 7157 7158 <a class="footerNavItem" href="/products/creatine-xpress-bundle">KreatÃn</a> 7159 7160 <a class="footerNavItem" href="/pages/um-happy-hydrate">Um okkur</a> 7161 7162 <a class="footerNavItem" href="/pages/faq">Algengar spurningar</a> 7163 7164 </div> 7165 </div> 7166 </div> 7167 7168 7169 </div> 7170 7171 <div> 7172 <p class="midlar-vorur-footerText">Miðlarnir okkar</p> 7173 7174 <div id="social-links-footer-container"> 7175 7176 7177 <a href="https://www.facebook.com/happyhydrate" target="_blank" class="footerSocialLink"> 7178 <img src="//happyhydrate.is/cdn/shop/files/icon_fb_09_25.svg?v=1758471700&width=64" alt="" class="footerSocialLinkImg" width="32" height="32" loading="lazy" decoding="async"> 7179 <span>Facebook</span> 7180 <div> 7181 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" viewBox="0 0 12 13" fill="none"> 7182 <g clip-path="url(#clip0_1176_2947)"> 7183 <path d="M1.46875 11.4981L10.5313 2.43555" stroke="white" stroke-width="1.5"/> 7184 <path d="M3.73438 2.43555H10.5312V9.23242" stroke="white" stroke-width="1.5"/> 7185 </g> 7186 <defs> 7187 <clipPath id="clip0_1176_2947"> 7188 <rect width="12" height="12" fill="white" transform="translate(0 0.964844)"/> 7189 </clipPath> 7190 </defs> 7191 </svg> 7192 7193 </div> 7194 </a> 7195 7196 7197 7198 <a href="https://www.instagram.com/happyhydrate.is/" target="_blank" class="footerSocialLink"> 7199 <img src="//happyhydrate.is/cdn/shop/files/icon_ig_09_25.svg?v=1758471677&width=64" alt="" class="footerSocialLinkImg" width="32" height="32" loading="lazy" decoding="async"> 7200 <span>Instagram</span> 7201 <div> 7202 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" viewBox="0 0 12 13" fill="none"> 7203 <g clip-path="url(#clip0_1176_2947)"> 7204 <path d="M1.46875 11.4981L10.5313 2.43555" stroke="white" stroke-width="1.5"/> 7205 <path d="M3.73438 2.43555H10.5312V9.23242" stroke="white" stroke-width="1.5"/> 7206 </g> 7207 <defs> 7208 <clipPath id="clip0_1176_2947"> 7209 <rect width="12" height="12" fill="white" transform="translate(0 0.964844)"/> 7210 </clipPath> 7211 </defs> 7212 </svg> 7213 7214 </div> 7215 </a> 7216 7217 7218 7219 <a href="https://www.tiktok.com/@happyhydrate" target="_blank" class="footerSocialLink"> 7220 <img src="//happyhydrate.is/cdn/shop/files/icon_tt_09_25.svg?v=1758471727&width=64" alt="" class="footerSocialLinkImg" width="32" height="32" loading="lazy" decoding="async">
7221 <span>Tik Tok</span> 7222 <div> 7223 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" viewBox="0 0 12 13" fill="none"> 7224 <g clip-path="url(#clip0_1176_2947)"> 7225 <path d="M1.46875 11.4981L10.5313 2.43555" stroke="white" stroke-width="1.5"/> 7226 <path d="M3.73438 2.43555H10.5312V9.23242" stroke="white" stroke-width="1.5"/> 7227 </g> 7228 <defs> 7229 <clipPath id="clip0_1176_2947"> 7230 <rect width="12" height="12" fill="white" transform="translate(0 0.964844)"/> 7231 </clipPath> 7232 </defs> 7233 </svg> 7234 7235 </div> 7236 </a> 7237 7238 7239 7240 <a href="https://www.youtube.com/@HappyHydrate" target="_blank" class="footerSocialLink"> 7241 <img src="//happyhydrate.is/cdn/shop/files/icon_yt_09_25.svg?v=1758471743&width=64" alt="" class="footerSocialLinkImg" width="32" height="32" loading="lazy" decoding="async"> 7242 <span>Youtube</span> 7243 <div> 7244 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" viewBox="0 0 12 13" fill="none"> 7245 <g clip-path="url(#clip0_1176_2947)"> 7246 <path d="M1.46875 11.4981L10.5313 2.43555" stroke="white" stroke-width="1.5"/> 7247 <path d="M3.73438 2.43555H10.5312V9.23242" stroke="white" stroke-width="1.5"/> 7248 </g> 7249 <defs> 7250 <clipPath id="clip0_1176_2947"> 7251 <rect width="12" height="12" fill="white" transform="translate(0 0.964844)"/> 7252 </clipPath> 7253 </defs> 7254 </svg> 7255 7256 </div> 7257 </a> 7258 7259 7260 7261 <a href="https://www.linkedin.com/company/happy-hydrate/" target="_blank" class="footerSocialLink"> 7262 <img src="//happyhydrate.is/cdn/shop/files/icon_li_09_25.svg?v=1758471735&width=64" alt="" class="footerSocialLinkImg" width="32" height="32" loading="lazy" decoding="async"> 7263 <span>LinkedIn</span> 7264 <div> 7265 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" viewBox="0 0 12 13" fill="none"> 7266 <g clip-path="url(#clip0_1176_2947)"> 7267 <path d="M1.46875 11.4981L10.5313 2.43555" stroke="white" stroke-width="1.5"/> 7268 <path d="M3.73438 2.43555H10.5312V9.23242" stroke="white" stroke-width="1.5"/> 7269 </g> 7270 <defs> 7271 <clipPath id="clip0_1176_2947"> 7272 <rect width="12" height="12" fill="white" transform="translate(0 0.964844)"/> 7273 </clipPath> 7274 </defs> 7275 </svg> 7276 7277 </div> 7278 </a> 7279 7280 7281 7282 7283 </div> 7284 </div> 7285 7286 </div> 7287 7288 7289 </div> 7290 7291 <div> 7292 7293 <div id="footerDisclaimerEfstButton"> 7294 <div id="footerDisclaimer"> 7295 *VÃtamÃn eru ekki ætluð til þess að lækna sjúkdóma eða koma à veg fyrir þá og fæ
7295ðubótarefni eiga ekki að koma à stað hollrar og fjölbreyttrar fæðu. 7296 </div> 7297 7298 <button id="efstButton" type="button" onclick="window.scrollTo({ top: 0, behavior: 'smooth' })"> 7299 <span>Efst á sÃðu</span> 7300 7301 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" viewBox="0 0 12 13" fill="none"> 7302 <g clip-path="url(#clip0_1324_12069)"> 7303 <path d="M6 11.7246L6 1.66211" stroke="white" stroke-width="1.5"/> 7304 <path d="M0.96875 6.69336L6 1.66211L11.0312 6.69336" stroke="white" stroke-width="1.5"/> 7305 </g> 7306 <defs> 7307 <clipPath id="clip0_1324_12069"> 7308 <rect width="12" height="12" fill="white" transform="translate(12 12.4512) rotate(-180)"/> 7309 </clipPath> 7310 </defs> 7311 </svg> 7312 </button> 7313 </div> 7314 7315 7316 <div id="footerLegal"> 7317 <span id="footerLegalCompany">© 2026 Dro2026 (490726-0120)</span> 7318 <div id="footerLegalLinks"> 7319 7320 <a class="footerLegalItem" href="/policies/refund-policy">Skilafrestur</a> 7321 7322 <a class="footerLegalItem" href="/policies/terms-of-service">Skilmálar</a> 7323 7324 </div> 7325 </div> 7326 7327 7328 7329 7330 <img src="//happyhydrate.is/cdn/shop/t/80/assets/happy-hydrate.svg?v=29729460305610930331788984151" alt="Happy Hydrate" width="200" height="40" loading="lazy" decoding="async"> 7331 </div> 7332 7333 </div> 7334</footer> 7335 7336 7337</div> 7338 7339<div id="shopify-block-AQjZGMFhGOWxrSGM2c__15996750675595739762" class="shopify-block shopify-app-block">
7339<script 7340 src="https://cdn.shopify.com/extensions/01a0cee4-af97-7e31-82d6-68dbb541e24e/orvono-happy-hydrate-5/assets/orvono-popup.js" 7341 data-shop="happyhydrate-1068.myshopify.com" 7342 defer 7343></script>
7343 7344 7345 7346</div><div id="shopify-block-AM05QbkZpaG5MWU93V__18228966181090706294" class="shopify-block shopify-app-block"> 7347 7348 7349
7349<script type="module" src="https://cdn.shopify.com/extensions/01a0ec21-7369-78a6-b9c0-c07227d664ec/lb-upsell-451/assets/lb-upsell.js" defer="defer"></script>
7349 7350
7350<script type="module" src="https://cdn.shopify.com/extensions/01a0ec21-7369-78a6-b9c0-c07227d664ec/lb-upsell-451/assets/lb-upsell-components.esm.js" defer="defer"></script>
7350 7351 7352 7353
7354<script> 7355 7356 7357 7358</script>
7358 7359
7360<script> 7361 7362 window.lbInitMode = "immediate"; 7363 7364 window.lbComponentSrc = "https://cdn.shopify.com/extensions/01a0ec21-7369-78a6-b9c0-c07227d664ec/lb-upsell-451/assets/lb-upsell-components.esm.js";</script>
7364 7365
7366<script type="text/javascript" src="https://cdn.shopify.com/extensions/01a0ec21-7369-78a6-b9c0-c07227d664ec/lb-upsell-451/assets/lb-utils.js" defer="defer"></script>
7366 7367 7368</div><div id="shopify-block-AYU1uNGdwRjVma1l1U__16017602894386113438" class="shopify-block shopify-app-block"><!-- BEGIN app snippet: junip-store-key --><span 7369 class="junip-store-key" 7370 data-supports-theme-extensions="true" 7371 data-shopify-preview-mode="true" 7372 data-store-key="RkhQRF5dNtyZAWD1C6TXkhA8" 7373 data-onsite-enabled="true" 7374 data-review-count-enabled="true" 7375 data-star-color="#44d62c" 7376 data-star-template-url="https://api.juniphq.com/images/star_options/1/template"> 7377</span> 7378<!-- END app snippet -->
7379<script src="https://widgets.juniphq.com/v1/junip_shopify.js" async></script>
7379 7380</div>
7380<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
7380 7381</body> 7382 7383</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.