SKU

In stock

Bong Gravitational Stündenglass Gravity Hookah

Bong gravitational Stündenglass Gravity Hookah reliable, simple and versatile, which contains all the quality and precision of German technology. This gravitational glass bong manages to cool smoking and steam with the help of physics: since, with a rotation at 180 °, the weight of the water compresses the steam that will be released in large quantities and at the perfect temperature, to be inhaled without struggling the lungs.
SKU BGSGH

In stock

Details

Lo Stündenglass Gravity Hookah is the first gravitational bong reliable, simple and versatile, which contains all the quality and precision of German technology. It guarantees sessions of smoke and steam of the highest quality also thanks to the use of materials so resistant and reliable as to be widely used also on plane projects.

Considering the practicality it brings, the engineering study behind this device and an extendable guarantee of up to 10 years, the price of this bong stündenglass is truly unparalleled, especially because there will guarantee extraordinary smoke experiences

The Stundenglass has three features to satisfy any type of consumer; It can be used with dried herbs, operate like a hookè loaded with tobacco for shisha or can turn into a table vaporizer for concentrated.

Lo Stündenglass is an elegant and avant -garde device as it manages to exploit the kinetic movement to generate an air flow simply by rotating on an axis at 360 °.

Turn the device and the magic begins!

Stündenglass The first device that cools the steam with physics

How does Stündenglass Gravity Hookah work? how is it done?

This gravitational glass bong manages to cool smoking and steam with the help of physics: its technology allows you not to strain the lungs since, with a rotation at 180 °, the Water weight with a waterfall movement, compresses the steam that will be released in large quantities and perfect temperature, ready to be aspirated without effort.

Gravity Hookah Stündenglass has two globes in Borosilicate glass and the structure manufactured with anodized aluminum . Thanks to its distinct techniques, this gravitational bong offers an inclusive set of bowl for aluminum hookah and a glass bowl as well as a 90cm silicone tube to allow the customer to use it in full comfort.

The device is equipped with a 45 ° adjustable mouthpiece that emits a constant flow of smoke or steam and powerful enough to allow not to rest the lips on the mouthpiece, but it will also be enough to bring them closer. This feature can be a big advantage because it finally allows you to be able to return to share your fluid and light extractions and above all without any risk of being able to ingest the stored water of the glass container.

In addition, this gravity bong of the Stündenglass allows you to connect & nbsp; with any type of Vaporizer </a> laptop via a 14mm glass adapter. </p> <H2> Features of the Stündenglass Gravity Hookah and how the kit is equipped <p> As you may have understood this <a Title="bong" href="https://www.growshopitalia.com/Bong-Vetro"> Bong </a>, exploiter of gravity, is not a simple pipe or vaporizer; It allows in no time and in a single session to move on to smoking derived from a brake of hookah, to a softer one originated from the grass, to a thick and full -bodied one emitted by the heating of the concentrates. </p> <H3> We summarize all its strengths of the gravitational bong: </ h3> <ul> <li> 360 ° gravitational system </li> <li> Suitable for hookahs, herbs and concentrates </li> <li> Interchangeable and without direct contact mouthpiece </li> <li> Forced air supply </li> <li> Anodized metal structure </li> <li> Borosilicate glass bulbs washable in dishwasher </li> <li> Male adapter of 14mm </li> <li> Simple and functional </li> <li> 10 years of guarantee </li> </ul> <p> The kit is sold in a package equipped with a handle that allows better transport of your serious bong. </p> <H3> The Stündenglass Gravity Bong kit includes: </ H3> <ul> <li> 1x anodized aluminum structure </li> <li> 2x glass globes </li> <li> 2x Upstems </li> <li> 1x Bocchino </li> <li> 1x glass chamber </li> <li> 1x Clove Clove </li> <li> 1x charcoal tray </li> <li> 1 Homghil tube + tube adapter </li> <li> 1 Wand for Holyghe + Tube Terminal </li> <li> 1 Male-Maschio adapter </li> </ul> </div></div></section> <section id="product.attributes" class="border-t border-solid -mt-px" :class="selected === 2 ? 'lg:block' : 'lg:hidden' "><div class="heading cursor-pointer lg:cursor-none lg:hidden" @click="window.innerWidth < 768 ? selected.includes(2) ? selected = selected.filter(item => item !== 2) : selected.push(2) : selected = 2"> <div class="w-full flex py-3 pr-5 md:flex-row border-gray-300 relative"><h2 class="text-primary text-base title-font font-base uppercase text-left w-full">More Information <svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="transition-transform transform duration-300 ease-in-out absolute right-1 top-1/2 -m-3 mr-0 hidden"><path d="M19 9L12 16L5 9" stroke="#4A5568" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></h2></div></div><div id="product.attributes-div" class="w-full relative overflow-hidden mb-4 pt-4 lg:py-4 lg:px-4 lg:bg-container-darker product.attributes-div" x-ref="container2" x-bind:class="{ 'block' : window.innerWidth < 768 ? selected.includes(2) : selected == 2, 'hidden' : window.innerWidth < 768 ? !selected.includes(2) : selected !== 2 }" > <div class="table-wrapper overflow-x-auto "><table class="additional-attributes w-full -mt-1"> <tr class="text-sm "><th class="col label w-1/2 py-2 px-2 text-left text-primary font-bold uppercase" scope="row">Features</th><td class="col data w-1/2 py-2 px-2 text-left text-primary" data-th="Features" >Gravitational Bong</td></tr> <tr class="text-sm bg-gray-200"><th class="col label w-1/2 py-2 px-2 text-left text-primary font-bold uppercase" scope="row"> Manuals and related articles</th><td class="col data w-1/2 py-2 px-2 text-left text-primary" data-th=" Manuals and related articles" ><a class="link-productdescription" href="/manuali-e-risorse/come-usare-bong">HOW A BONG IS MADE AND HOW TO USE IT</a></td></tr> <tr class="text-sm "><th class="col label w-1/2 py-2 px-2 text-left text-primary font-bold uppercase" scope="row">Brand and Model</th><td class="col data w-1/2 py-2 px-2 text-left text-primary" data-th="Brand and Model" >Stündenglass Gravity Hookah</td></tr> <tr class="text-sm bg-gray-200"><th class="col label w-1/2 py-2 px-2 text-left text-primary font-bold uppercase" scope="row">Shipments all over Europe</th><td class="col data w-1/2 py-2 px-2 text-left text-primary" data-th="Shipments all over Europe" >Yes</td></tr></table></div></div></section> <section id="product.info.details.reviews.container" class="border-t border-solid -mt-px" :class="selected === 3 ? 'lg:block' : 'lg:hidden' "><div class="heading cursor-pointer lg:cursor-none lg:hidden" @click="window.innerWidth < 768 ? selected.includes(3) ? selected = selected.filter(item => item !== 3) : selected.push(3) : selected = 3"> <div class="w-full flex py-3 pr-5 md:flex-row border-gray-300 relative"><h2 class="text-primary text-base title-font font-base uppercase text-left w-full">Reviews <svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="transition-transform transform duration-300 ease-in-out absolute right-1 top-1/2 -m-3 mr-0 hidden"><path d="M19 9L12 16L5 9" stroke="#4A5568" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></h2></div></div><div id="product.info.details.reviews.container-div" class="w-full relative overflow-hidden mb-4 pt-4 lg:py-4 lg:px-4 lg:bg-container-darker product.info.details.reviews.container-div" x-ref="container3" x-bind:class="{ 'block' : window.innerWidth < 768 ? selected.includes(3) : selected == 3, 'hidden' : window.innerWidth < 768 ? !selected.includes(3) : selected !== 3 }" > <div class="w-full mx-auto items-center" id="review-form"><div class="w-full"><div class=""><h4 class="text-primary text-base uppercase title-font font-base text-left md:text-left w-full">Write Your Own Review</h4></div> <form class="review-form" id="review_form" @submit.prevent="submitForm()" action="" x-data="initReviewForm()" > <div class="control"><input type="hidden" value="" class="form-input" name="g-recaptcha-response" /></div> <fieldset><div class="text-xs"><span> You're reviewing:</span> <span class="font-semibold">Bong Gravitational Stündenglass Gravity Hookah</span></div> <div><div><label for="nickname_field" class="sr-only"><span>Nickname</span></label> <div><input class="form-input mt-3 block w-full text-sm" required title="Nickname" placeholder="Nickname*" type="text" name="nickname" id="nickname_field"/></div></div><div><label for="summary_field" class="sr-only"><span>Summary</span></label> <div><input class="form-input mt-3 block w-full text-sm" required title="Summary" placeholder="Summary*" type="text" name="title" id="summary_field"/></div></div><div><label for="review_field" class="sr-only"><span>Review</span></label> <div><textarea class="form-input mt-3 block w-full text-sm" required title="Review" placeholder="Review*" name="detail" id="review_field" cols="5" rows="3"></textarea></div></div></div></fieldset><div class="my-3"><div><button x-show="!displaySuccessMessage" type="submit" class="btn btn-primary"><span> Submit Review</span></button> <div class="flex flex-row justify-start items-center w-full" x-show="isLoading"><!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --><svg width="57" height="57" viewBox="0 0 57 57" xmlns="http://www.w3.org/2000/svg" stroke="#fff" style="transform: scale(0.6)" class="stroke-current text-primary"><g fill="none" fill-rule="evenodd"><g transform="translate(1 1)" stroke-width="2"><circle cx="5" cy="50" r="5"><animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/><animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/></circle><circle cx="27" cy="5" r="5"><animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/><animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/></circle><circle cx="49" cy="50" r="5"><animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/><animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/></circle></g></g></svg><div class="ml-4 text-primary">Loading...</div></div><p x-show="displaySuccessMessage" class="text-green flex items-center"><span class="inline-block w-8 h-8 mr-3"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg></span> You submitted your review for moderation.</p><template x-if="displayErrorMessage"><p class="text-red flex items-center"><span class="inline-block w-8 h-8 mr-3"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/></svg></span> <template x-for="errorMessage in errorMessages"><span x-html="errorMessage"></span></template></p></template></div> <p class="my-4 text-sm text-gray-900">This form is protected by reCAPTCHA - the <a class="underline" href="https://policies.google.com/privacy">Google Privacy Policy</a> and <a class="underline" href="https://policies.google.com/terms">Terms of Service</a> apply.</p></div></form><script> function initReviewForm() { return { isLoading: false, displayNickname: false, displaySuccessMessage: false, displayErrorMessage: false, errorMessages: [], errors: 0, hasCaptchaToken: 0, nickname: null, summary: null, ratings: [], review: null, setErrorMessages: function (messages) { this.errorMessages = [messages] this.displayErrorMessage = this.errorMessages.length }, submitForm: function () { var $form = document.querySelector('#review_form'); this.validate(); if (!this.hasCaptchaToken) { this.errors = 1; const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6LdMoTUeAAAAAPewqPBGGTxK3IcFELTLYkVDciKH"; const executeGreCaptcha = () => { grecaptcha.ready(() => { grecaptcha.execute( '6LdMoTUeAAAAAPewqPBGGTxK3IcFELTLYkVDciKH', {action: 'submit'} ).then((token) => { const recaptchaResponseInput = $form.querySelector('input[name="g-recaptcha-response"]'); if (recaptchaResponseInput != null) { recaptchaResponseInput.value = token; this.errors = 0; this.hasCaptchaToken = 1; this.submitForm(); } else { this.errors = 1; if (this.setErrorMessages) { this.setErrorMessages(['Your form does not have the required fields for recaptcha to work.']) this.displayErrorMessage = true; } } }); }) } if (typeof window.grecaptcha !== 'undefined') { executeGreCaptcha(); } else { let script = document.createElement('script'); script.setAttribute('type', 'text/javascript'); script.setAttribute('src', recaptchaUrl); document.head.appendChild(script); script.addEventListener("load", executeGreCaptcha, false); } } if (this.errors === 0) { this.placeReview(); } }, validate: function () { this.nickname = document.getElementById('nickname_field').value; this.summary = document.getElementById('summary_field').value; this.review = document.getElementById('review_field').value; let ratingValue; if (!(this.nickname && this.summary && this.review && Object.keys(this.ratings).length === 0 )) { this.setErrorMessages( ['Please\u0020verify\u0020you\u0027ve\u0020entered\u0020all\u0020required\u0020information'] ); this.displayErrorMessage = true; this.errors = 1; this.hasCaptchaToken = 0; } }, placeReview: function () { this.isLoading = true; this.displayErrorMessage = false; const query = ` mutation createProductReviewMutation( $sku: String!, $nick: String!, $summary: String!, $review: String!, $ratings: [ProductReviewRatingInput]! ) { createProductReview( input: { sku: $sku, nickname: $nick, summary: $summary, text: $review, ratings: $ratings } ) { review { nickname } } } `; const variables = { sku: 'BGSGH', nick: this.nickname, summary: this.summary, review: this.review, ratings: Object.keys(this.ratings).map(key => { return {id: btoa(key), value_id: this.ratings[key]} }) }; const form = document.querySelector('#review_form'); const recaptchaHeader = form && form.elements['g-recaptcha-response'] ? {'X-ReCaptcha': form.elements['g-recaptcha-response'].value} : {}; fetch(`${BASE_URL}graphql`, { method: 'POST', headers: Object.assign({ 'Content-Type': 'application/json;charset=utf-8', 'Store': 'en' }, recaptchaHeader), credentials: 'include', body: JSON.stringify({query: query, variables: variables}) }) .then(response => response.json()) .then(data => { this.isLoading = false; if (data.errors) { this.setErrorMessages(['Submitting\u0020your\u0020review\u0020failed,\u0020please\u0020try\u0020again.']); this.displayErrorMessage = true; } else { this.displaySuccessMessage = true; } } ); } } }</script></div></div> </div></section> </div> <section><div class="product-slider"><div></div><script> 'use strict'; window.addEventListener('DOMContentLoaded', function() { if (! window.productSliderEventHandlerInitialized) { window.productSliderEventHandlerInitialized = true; window.addEventListener('product-add-to-wishlist', (event) => { const productId = event.detail.productId; fetch(BASE_URL + "wishlist/index/add/", { headers: { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, body: new URLSearchParams({ form_key: hyva.getFormKey(), product: productId, uenc: btoa(window.location.href) } ), method: "POST", mode: "cors", credentials: "include" }).then(function (response) { if (response.redirected) { window.location.href = response.url; } else if (response.ok) { return response.json(); } else { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "warning", text: "Could not add item to wishlist." }], 5000 ); } }).then(function (result) { if (!result) { return } typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: (result.success) ? "success" : "error", text: (result.success) ? "Product has been added to your Wish List." : result.error_message }], 5000 ); window.dispatchEvent(new CustomEvent("reload-customer-section-data")); }).catch(function (error) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "error", text: error }], 5000 ); }); }) window.addEventListener('product-add-to-compare', (event) => { const productId = event.detail.productId; hyva.postForm({ action: BASE_URL + 'catalog/product_compare/add/', data: {product: productId} }) }) } });</script></div> <div class="product-slider"><div> <script> 'use strict'; function initSliderComponent() { return { active: 0, itemCount: 0, getSlider() { return this.$el.querySelector('.js_slides'); }, pageSize: 4, pageFillers: 0, calcPageSize() { const slider = this.getSlider(); if (slider) { this.itemCount = slider.querySelectorAll('.js_slide').length; this.pageSize = Math.round(slider.clientWidth / slider.querySelector('.js_slide').clientWidth); this.pageFillers = ( this.pageSize * Math.ceil(this.itemCount / this.pageSize) ) - this.itemCount; } }, calcActive() { const slider = this.getSlider(); if (slider) { const sliderItems = this.itemCount + this.pageFillers; const calculatedActiveSlide = slider.scrollLeft / (slider.scrollWidth / sliderItems); this.active = Math.round(calculatedActiveSlide / this.pageSize) * this.pageSize; } }, scrollPrevious() { this.scrollTo(this.active - this.pageSize); }, scrollNext() { this.scrollTo(this.active + this.pageSize); }, scrollTo(idx) { const slider = this.getSlider(); if (slider) { const slideWidth = slider.scrollWidth / (this.itemCount + this.pageFillers); slider.scrollLeft = Math.floor(slideWidth) * idx; this.active = idx; } } } }</script><section class="lg:mb-12 lg:mt-0 xxs:mt-6 text-gray-700 body-font rounded-md shadow-md" x-data="initSliderComponent()" x-init="calcPageSize();" @resize.window.debounce="calcPageSize(); $nextTick( function() { calcActive() })" > <div class="relative"> <div class="flex flex-col items-center pt-6 pb-3 mx-auto mb-6 md:flex-row"><h3 class="block-title bg-dgray inline-block px-3 py-1 mb-5 text-white text-sm text-semibold uppercase">We found other products you might like!</h3></div> <div class="flex-none relative w-full overflow-x-hidden focus-within:ring-1 active:ring-0 ring-blue-500 ring-opacity-50"><div class="relative flex flex-nowrap justify-items-start w-full overflow-auto transition-all js_slides snap " @scroll.debounce="calcActive" > <div class="flex-none flex items-stretch justify-center w-full p-1 js_slide md:w-1/2 lg:w-1/3 xl:w-1/4"> <div class="item product product-item relative flex flex-col "> <a href="https://www.growshopitalia.com/en/ice-bong-black-leaf-30cm.html" class="overflow-hidden product photo product-item-photo block mx-auto mb-3 " tabindex="-1"><picture class="hover:shadow-sm object-contain"><source type="image/webp" srcset="https://www.growshopitalia.com/media/catalog/product/cache/e94c7e070f46f7dce7b3e10e2ac74168/b/l/black_leaf_glass_ice_bong_green_-1.webp"><img class="hover:shadow-sm object-contain" loading="lazy" x-data="" @update-gallery-4922.window="$el.src = event.detail" alt="Black Leaf' Glass Ice bong green -1" title="Black Leaf' Glass Ice bong green -1" src="https://www.growshopitalia.com/media/catalog/product/cache/e94c7e070f46f7dce7b3e10e2ac74168/b/l/black_leaf_glass_ice_bong_green_-1.jpg" width="360" height="360" loading="lazy" /></picture></a> <div class="product-info-container flex flex-col w-full lg:flex-row lg:w-3/4"><div class="product-info w-full min-h-50 "> <div class="mb-1 items-center justify-center uppercase text-primary font-bold text-base md:text-md text-center "><a class="product-item-link" href="https://www.growshopitalia.com/en/ice-bong-black-leaf-30cm.html">Black Leaf Glass Ice Bong</a></div></div><div class="addtocart w-full align-right text-center pb-20"><script> function initPriceBox__66eb86eeb6603() { return { updatePrice(priceData) { const regularPriceLabel = this.$el.querySelector('.normal-price .price-label'); const regularPriceElement = this.$el.querySelector('.normal-price .price-wrapper .price'); if (priceData.finalPrice.amount < priceData.oldPrice.amount) { regularPriceLabel.classList.add('hidden'); } else { regularPriceLabel.classList.remove('hidden'); } regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); } } }</script><div class="swatches-block hidden"></div><div class="product-price lg:border-l lg:border-gray-100 lg:m-0.5 md:mt-2"><div class="lg:mb-2 text-gray-900 product-price-wrapper border-l border-gray-100" x-data="initPriceBox__66eb86eeb6603()" @update-prices-4922.window="updatePrice(event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="4922" data-price-box="product-id-4922"> <span class="price-container price-final_price tax weee" > <span class="price-label">Final Price</span> <span id="product-price-4922" data-price-amount="59" data-price-type="finalPrice" class="price-wrapper " ><span class="price">€59.00</span></span> </span> </div></div><div class="product-cart flex flex-wrap justify-right items-center lg:pt-3 xxs:pt-2 xxs:mb-2 absolute bottom-0 w-full"> <div class="w-auto justify-center rounded-md border border-container-darker text-primary text-sm font-semibold mr-auto mx-auto lg:normal-case xxs:uppercase py-2 px-20 sm:px-3 lg:px-9"><span>Out of stock</span></div> </div></div></div></div></div></div> <div class="flex-none flex items-stretch justify-center w-full p-1 js_slide md:w-1/2 lg:w-1/3 xl:w-1/4"> <div class="item product product-item relative flex flex-col "> <a href="https://www.growshopitalia.com/en/icebong-black-leaf-30cm-nero.html" class="overflow-hidden product photo product-item-photo block mx-auto mb-3 " tabindex="-1"><picture class="hover:shadow-sm object-contain"><source type="image/webp" srcset="https://www.growshopitalia.com/media/catalog/product/cache/e94c7e070f46f7dce7b3e10e2ac74168/b/l/black_leaf_glass_icebong_black_-1.webp"><img class="hover:shadow-sm object-contain" loading="lazy" x-data="" @update-gallery-4921.window="$el.src = event.detail" alt="Black Leaf' Glass Icebong black -1" title="Black Leaf' Glass Icebong black -1" src="https://www.growshopitalia.com/media/catalog/product/cache/e94c7e070f46f7dce7b3e10e2ac74168/b/l/black_leaf_glass_icebong_black_-1.jpg" width="360" height="360" loading="lazy" /></picture></a> <div class="product-info-container flex flex-col w-full lg:flex-row lg:w-3/4"><div class="product-info w-full min-h-50 "> <div class="mb-1 items-center justify-center uppercase text-primary font-bold text-base md:text-md text-center "><a class="product-item-link" href="https://www.growshopitalia.com/en/icebong-black-leaf-30cm-nero.html">Black Leaf Glass Ice Bong Black</a></div></div><div class="addtocart w-full align-right text-center pb-20"><script> function initPriceBox__66eb86eebbe49() { return { updatePrice(priceData) { const regularPriceLabel = this.$el.querySelector('.normal-price .price-label'); const regularPriceElement = this.$el.querySelector('.normal-price .price-wrapper .price'); if (priceData.finalPrice.amount < priceData.oldPrice.amount) { regularPriceLabel.classList.add('hidden'); } else { regularPriceLabel.classList.remove('hidden'); } regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); } } }</script><div class="swatches-block hidden"></div><div class="product-price lg:border-l lg:border-gray-100 lg:m-0.5 md:mt-2"><div class="lg:mb-2 text-gray-900 product-price-wrapper border-l border-gray-100" x-data="initPriceBox__66eb86eebbe49()" @update-prices-4921.window="updatePrice(event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="4921" data-price-box="product-id-4921"> <span class="price-container price-final_price tax weee" > <span class="price-label">Final Price</span> <span id="product-price-4921" data-price-amount="59" data-price-type="finalPrice" class="price-wrapper " ><span class="price">€59.00</span></span> </span> </div></div><div class="product-cart flex flex-wrap justify-right items-center lg:pt-3 xxs:pt-2 xxs:mb-2 absolute bottom-0 w-full"> <div class="w-auto justify-center rounded-md border border-container-darker text-primary text-sm font-semibold mr-auto mx-auto lg:normal-case xxs:uppercase py-2 px-20 sm:px-3 lg:px-9"><span>Out of stock</span></div> </div></div></div></div></div></div> <div class="flex-none flex items-stretch justify-center w-full p-1 js_slide md:w-1/2 lg:w-1/3 xl:w-1/4"> <form method="post" action="https://www.growshopitalia.com/en/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuZ3Jvd3Nob3BpdGFsaWEuY29tL2VuL3N0dW5kZW5nbGFzcy1ncmF2aXR5LWhvb2thaC5odG1s/product/5220/" class="item product product-item product_addtocart_form relative md:pt-4 xxs:pt-6 flex flex-col " ><input name="form_key" type="hidden" value="b1y83wVPPd8j8GHc" /> <input type="hidden" name="product" value="5220"/> <a href="https://www.growshopitalia.com/en/bong-vetro-ice-percolator.html" class="overflow-hidden product photo product-item-photo block mx-auto mb-3 " tabindex="-1"><picture class="hover:shadow-sm object-contain"><source type="image/webp" srcset="https://www.growshopitalia.com/media/catalog/product/cache/e94c7e070f46f7dce7b3e10e2ac74168/b/o/bong_vetro_ice_percolator.webp"><img class="hover:shadow-sm object-contain" loading="lazy" x-data="" @update-gallery-5220.window="$el.src = event.detail" alt="Bong Vetro Ice Percolator" title="Bong Vetro Ice Percolator" src="https://www.growshopitalia.com/media/catalog/product/cache/e94c7e070f46f7dce7b3e10e2ac74168/b/o/bong_vetro_ice_percolator.jpg" width="360" height="360" loading="lazy" /></picture></a> <div class="product-info-container flex flex-col w-full lg:flex-row lg:w-3/4"><div class="product-info w-full min-h-50 "> <div class="mb-1 items-center justify-center uppercase text-primary font-bold text-base md:text-md text-center "><a class="product-item-link" href="https://www.growshopitalia.com/en/bong-vetro-ice-percolator.html">Bong glass ICE ALL</a></div></div><div class="addtocart w-full align-right text-center pb-20"><script> function initPriceBox__66eb86eec00dc() { return { updatePrice(priceData) { const regularPriceLabel = this.$el.querySelector('.normal-price .price-label'); const regularPriceElement = this.$el.querySelector('.normal-price .price-wrapper .price'); if (priceData.finalPrice.amount < priceData.oldPrice.amount) { regularPriceLabel.classList.add('hidden'); } else { regularPriceLabel.classList.remove('hidden'); } regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); } } }</script><div class="swatches-block hidden"> </div><div class="product-price lg:border-l lg:border-gray-100 lg:m-0.5 md:mt-2"><div class="lg:mb-2 text-gray-900 product-price-wrapper border-l border-gray-100" x-data="initPriceBox__66eb86eec00dc()" @update-prices-5220.window="updatePrice(event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="5220" data-price-box="product-id-5220"> <span class="price-container price-final_price tax weee" > <span class="price-label">Final Price</span> <span id="product-price-5220" data-price-amount="43.5" data-price-type="finalPrice" class="price-wrapper " ><span class="price">€43.50</span></span> </span> </div></div><div class="product-cart flex flex-wrap justify-right items-center lg:pt-3 xxs:pt-2 xxs:mb-2 absolute bottom-0 w-full"> <button class="w-auto btn btn-primary justify-center text-sm font-semibold mr-auto mx-auto lg:normal-case xxs:uppercase py-3 px-10 sm:px-3 lg:px-5 lg-auto" aria-label="Add to Cart" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" class="h-6 w-6 border-current inline sm:hidden md:inline" width="25" height="25"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/> </svg> <span class="ml-2 inline lg:ml-0 lg:ml-2">Add to Cart</span></button> </div></div></div></div></form></div> <div class="flex-none flex items-stretch justify-center w-full p-1 js_slide md:w-1/2 lg:w-1/3 xl:w-1/4"> <form method="post" action="https://www.growshopitalia.com/en/checkout/cart/add/uenc/aHR0cHM6Ly93d3cuZ3Jvd3Nob3BpdGFsaWEuY29tL2VuL3N0dW5kZW5nbGFzcy1ncmF2aXR5LWhvb2thaC5odG1s/product/5221/" class="item product product-item product_addtocart_form relative md:pt-4 xxs:pt-6 flex flex-col " ><input name="form_key" type="hidden" value="b1y83wVPPd8j8GHc" /> <input type="hidden" name="product" value="5221"/> <a href="https://www.growshopitalia.com/en/ice-bong-tree-percolator.html" class="overflow-hidden product photo product-item-photo block mx-auto mb-3 " tabindex="-1"><picture class="hover:shadow-sm object-contain"><source type="image/webp" srcset="https://www.growshopitalia.com/media/catalog/product/cache/e94c7e070f46f7dce7b3e10e2ac74168/i/c/ice_bong_tree_percolator_1.webp"><img class="hover:shadow-sm object-contain" loading="lazy" x-data="" @update-gallery-5221.window="$el.src = event.detail" alt="Ice Bong Tree Percolator" title="Ice Bong Tree Percolator" src="https://www.growshopitalia.com/media/catalog/product/cache/e94c7e070f46f7dce7b3e10e2ac74168/i/c/ice_bong_tree_percolator_1.jpg" width="360" height="360" loading="lazy" /></picture></a> <div class="product-info-container flex flex-col w-full lg:flex-row lg:w-3/4"><div class="product-info w-full min-h-50 "> <div class="mb-1 items-center justify-center uppercase text-primary font-bold text-base md:text-md text-center "><a class="product-item-link" href="https://www.growshopitalia.com/en/ice-bong-tree-percolator.html">Ice Bong Tree Plow</a></div></div><div class="addtocart w-full align-right text-center pb-20"><script> function initPriceBox__66eb86eec4527() { return { updatePrice(priceData) { const regularPriceLabel = this.$el.querySelector('.normal-price .price-label'); const regularPriceElement = this.$el.querySelector('.normal-price .price-wrapper .price'); if (priceData.finalPrice.amount < priceData.oldPrice.amount) { regularPriceLabel.classList.add('hidden'); } else { regularPriceLabel.classList.remove('hidden'); } regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); } } }</script><div class="swatches-block hidden"> </div><div class="product-price lg:border-l lg:border-gray-100 lg:m-0.5 md:mt-2"><div class="lg:mb-2 text-gray-900 product-price-wrapper border-l border-gray-100" x-data="initPriceBox__66eb86eec4527()" @update-prices-5221.window="updatePrice(event.detail);" ><div class="price-box price-final_price" data-role="priceBox" data-product-id="5221" data-price-box="product-id-5221"> <span class="price-container price-final_price tax weee" > <span class="price-label">Final Price</span> <span id="product-price-5221" data-price-amount="45" data-price-type="finalPrice" class="price-wrapper " ><span class="price">€45.00</span></span> </span> </div></div><div class="product-cart flex flex-wrap justify-right items-center lg:pt-3 xxs:pt-2 xxs:mb-2 absolute bottom-0 w-full"> <button class="w-auto btn btn-primary justify-center text-sm font-semibold mr-auto mx-auto lg:normal-case xxs:uppercase py-3 px-10 sm:px-3 lg:px-5 lg-auto" aria-label="Add to Cart" ><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" class="h-6 w-6 border-current inline sm:hidden md:inline" width="25" height="25"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/> </svg> <span class="ml-2 inline lg:ml-0 lg:ml-2">Add to Cart</span></button> </div></div></div></div></form></div> <div :class="{ 'js_dummy_slide w-full md:w-1/2 lg:w-1/3 xl:w-1/4 flex-none py-1' : pageFillers > 0 }"></div><div :class="{ 'js_dummy_slide w-full md:w-1/2 lg:w-1/3 xl:w-1/4 flex-none py-1' : pageFillers > 1 }"></div><div :class="{ 'js_dummy_slide w-full md:w-1/2 lg:w-1/3 xl:w-1/4 flex-none py-1' : pageFillers > 2 }"></div></div></div><div style="min-height: 65px"><template x-if="itemCount > pageSize"><div class="flex items-center justify-center flex-1 p-4"><button aria-label="Previous" tabindex="-1" class="w-8 h-8 mx-4 text-black rounded-full outline-none focus:outline-none" :class="{ 'invisible' : active === 0 }" @click="scrollPrevious"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" class="w-5 h-5" width="25" height="25"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"/> </svg> </button> <span class="flex-shrink-0 block w-3 h-3 mx-1 bg-black bg-opacity-25 rounded-full shadow cursor-pointer" :class="{ 'bg-opacity-100': active === 0, 'hidden': (pageSize !== 1 && !!(0 % pageSize)) }" @click="scrollTo(0)"></span> <span class="flex-shrink-0 block w-3 h-3 mx-1 bg-black bg-opacity-25 rounded-full shadow cursor-pointer" :class="{ 'bg-opacity-100': active === 1, 'hidden': (pageSize !== 1 && !!(1 % pageSize)) }" @click="scrollTo(1)"></span> <span class="flex-shrink-0 block w-3 h-3 mx-1 bg-black bg-opacity-25 rounded-full shadow cursor-pointer" :class="{ 'bg-opacity-100': active === 2, 'hidden': (pageSize !== 1 && !!(2 % pageSize)) }" @click="scrollTo(2)"></span> <span class="flex-shrink-0 block w-3 h-3 mx-1 bg-black bg-opacity-25 rounded-full shadow cursor-pointer" :class="{ 'bg-opacity-100': active === 3, 'hidden': (pageSize !== 1 && !!(3 % pageSize)) }" @click="scrollTo(3)"></span> <button aria-label="Next" tabindex="-1" class="w-8 h-8 mx-4 text-black rounded-full outline-none focus:outline-none" :class="{ 'invisible' : active >= itemCount - pageSize }" @click="scrollNext"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" class="w-5 h-5" width="25" height="25"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/> </svg> </button></div></template></div></div></section></div><script> 'use strict'; window.addEventListener('DOMContentLoaded', function() { if (! window.productSliderEventHandlerInitialized) { window.productSliderEventHandlerInitialized = true; window.addEventListener('product-add-to-wishlist', (event) => { const productId = event.detail.productId; fetch(BASE_URL + "wishlist/index/add/", { headers: { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, body: new URLSearchParams({ form_key: hyva.getFormKey(), product: productId, uenc: btoa(window.location.href) } ), method: "POST", mode: "cors", credentials: "include" }).then(function (response) { if (response.redirected) { window.location.href = response.url; } else if (response.ok) { return response.json(); } else { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "warning", text: "Could not add item to wishlist." }], 5000 ); } }).then(function (result) { if (!result) { return } typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: (result.success) ? "success" : "error", text: (result.success) ? "Product has been added to your Wish List." : result.error_message }], 5000 ); window.dispatchEvent(new CustomEvent("reload-customer-section-data")); }).catch(function (error) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "error", text: error }], 5000 ); }); }) window.addEventListener('product-add-to-compare', (event) => { const productId = event.detail.productId; hyva.postForm({ action: BASE_URL + 'catalog/product_compare/add/', data: {product: productId} }) }) } });</script></div> </section></div> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Product","name":"Bong Gravitational St\u00fcndenglass Gravity Hookah","sku":"BGSGH","image":"https:\/\/www.growshopitalia.com\/media\/catalog\/product\/cache\/9bd442661597b3f0d63ed1ded4db5701\/s\/t\/st_ndenglass-gravity-hookah.jpg","category":"Bong no ice","description":"Bong gravitational St\u00fcndenglass Gravity Hookah reliable, simple and versatile, which contains all the quality and precision of German technology. This gravitational glass bong manages to cool smoking and steam with the help of physics: since, with a rotation at 180 \u00b0, the weight of the water compresses the steam that will be released in large quantities and at the perfect temperature, to be inhaled without struggling the lungs.","offers":{"@type":"Offer","url":"https:\/\/www.growshopitalia.com\/en\/stundenglass-gravity-hookah.html","price":"578.90","priceCurrency":"EUR","priceValidUntil":"2030-01-01","availability":"https:\/\/schema.org\/InStock","sku":"BGSGH"}}</script> <script> function hasWebP() { var elem = document.createElement('canvas'); if (!!(elem.getContext && elem.getContext('2d'))) { return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0; } return false; } if (hasWebP()) { document.body.classList.add("webp"); } else { document.body.classList.add("no-webp"); }</script><script> document.addEventListener('alpine:init', () => { Alpine.data('initGallery', () => { const galleryInitData = initGallery(); document.dispatchEvent(new CustomEvent('gallery-init', {detail: galleryInitData})); return galleryInitData; }); });</script><script> document.addEventListener('gallery-init', ({detail: galleryData}) => { if (typeof hasWebP != 'function') { console.error('[Yireo_WebP2] JavaScript function "hasWebP" does not exist'); return; } function replaceImage(image) { if (image.full && image.full_webp) { image.full = image.full_webp; delete image.full_webp; } if (image.img && image.img_webp) { image.img = image.img_webp; delete image.img_webp; } if (image.thumb && image.thumb_webp) { image.thumb = image.thumb_webp; delete image.thumb_webp; } } if (galleryData.images) { galleryData.images.forEach(function(image) { replaceImage(image); }); } if (galleryData.initialImages) { galleryData.initialImages.forEach(function(image) { replaceImage(image); }); } });</script> <section class="amsearch-overlay-block" data-bind=" scope: 'index = amsearch_overlay_section', mageInit: { 'Magento_Ui/js/core/app': { components: { 'amsearch_overlay_section': { component: 'Amasty_Xsearch/js/components/overlay' } } } }"><div class="amsearch-overlay" data-bind=" event: { click: hide }, afterRender: initNode"></div></section> <script type="text/x-magento-init"> { "*": { "amsearchAnalyticsCollector": { "minChars": 3 } } }</script></div></div></main><footer class="page-footer"><div class="footer content"> <script> function initFooter () { return { footer: { }, applyIcons: function() { var iconArrowUp = '<svg xmlns="http://www.w3.org/2000/svg" class="up h-6 w-6 hidden absolute right-0" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 15l7-7 7 7" /></svg>'; var iconArrowDown = '<svg xmlns="http://www.w3.org/2000/svg" class="down h-6 w-6 hidden absolute right-0" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" /></svg>'; accordion = this.$refs.accordion; var headings = accordion.querySelectorAll('.heading'); headings.forEach(function (el,i) { el.innerHTML = el.innerHTML + iconArrowUp + iconArrowDown; }); } } }</script><footer class="text-gray-700 body-font bg-footer border-t border-container-darker shadow text-contrast-primary mt-5" x-data="initFooter()"><div class="container px-5 py-8 mx-auto footer-top"><div class="order-first gap-y-16"><style>#html-body [data-pb-style=LDV4NAN]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="LDV4NAN"><div data-content-type="html" data-appearance="default" data-element="main"><div class="w-full px-4 gap-y-4 accordion" x-ref="accordion" x-on:load.window="applyIcons()"> <div class="w-full lg:grid lg:grid-cols-4 lg:gap-1 xl:col-span-2"> <div> <h4 class="py-2 text-md leading-0 font-black font-lato tracking-wider heading" :class="{ 'open' : footer.menu1}" x-on:click="footer.menu1 = ! footer.menu1"> My Account </h4> <ul class="mt-4 text-sm content" :class="{ 'active' : footer.menu1}" > <li class="mt-2"><a class="block p-2 lg:p-0" href="https://www.growshopitalia.com/customer/account" title="Il mio account">Il mio account</a></li> <li class="mt-2"><a class="block p-2 lg:p-0" href="https://www.growshopitalia.com/sales/order/history" title="I miei Ordini">I miei ordini</a></li> <li class="mt-2"><a class="block p-2 lg:p-0" href="https://www.growshopitalia.com/termini-e-condizioni" title="Termini e condizioni">Termini e condizioni</a></li> <li class="mt-2"><a class="block p-2 lg:p-0" href="https://www.growshopitalia.com/privacy-policy" title="Termini e condizioni">Privacy & Policy</a></li> </ul> </div> <div> <h4 class="py-2 text-md leading-0 font-black font-lato tracking-wider heading" :class="{ 'open' : footer.menu2}" x-on:click="footer.menu2 = ! footer.menu2">Informazioni GSI </h4> <ul class="mt-4 text-sm content" :class="{ 'active' : footer.menu2}" > <li class="mt-2"><a class="block p-2 lg:p-0" href="https://www.growshopitalia.com/chi-siamo" title="Chi Siamo">Chi siamo</a></li> <li class="mt-2"><a class="block p-2 lg:p-0" href="https://www.growshopitalia.com/spedizioni" title="Spedizioni">Spedizioni</a></li> <li class="mt-2"><a class="block p-2 lg:p-0" href="https://www.growshopitalia.com/negozi" title="Punti vendita">Punti vendita</a></li> <li class="mt-2"><a class="block p-2 lg:p-0" href="https://www.growshopitalia.com/grow-shop-roma" title="Punti vendita">Grow Shop Roma</a></li> <li class="mt-2"><a class="block p-2 lg:p-0" href="https://www.growshopitalia.com/contact" title="Contattaci">Contattaci</a></li> </ul> </div> <div> <h4 class="py-2 text-md leading-0 font-black font-lato tracking-wider heading" :class="{ 'open' : footer.menu3}" x-on:click="footer.menu3 = ! footer.menu3">Il nostro punto vendita </h4> <div class="mt-4 text-sm content" :class="{ 'active' : footer.menu3}" > <div class="feature feature-icon-hover first mt-3"> <p class="no-margin"> <a class="block p-2 lg:p-0" href="https://www.growshopitalia.com/contact"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" fill="currentColor" aria-hidden="true" width="12" height="12" viewBox="0 0 267 383" class="w-4 h-4 text-yellow inline"> <title/> <g id="location"> </g> <path d="M265,128.9C263.7,68.1,218.9,14.4,159.4,2.5C154,1.4,148.6,0.8,143.2,0c-6.5,0-13,0-19.4,0c-8.2,1.5-16.5,2.5-24.5,4.6 c-50.2,13.2-89,57.6-95.9,109.1c-4.1,30.1,1.2,58.2,15.7,84.7c31.1,56.9,62.2,113.8,93.1,170.8c4,7.3,9.7,11.7,17.5,13.8 c2.5,0,5,0,7.5,0c9.2-2.2,14.6-8.3,19-16.4c30.1-55.5,60.3-110.8,90.7-166.1C259.1,178.1,265.5,154.5,265,128.9z M133.3,192.8 c-40.3-0.1-73-33.1-72.8-73.5c0.1-40.1,33-72.7,73.2-72.6c40.3,0.1,73,33.1,72.8,73.5C206.3,160.2,173.4,192.8,133.3,192.8z"/> </svg> Via Tor De Schiavi 1-1b-1c Roma 00171 <br>     06 - 95947059</a> </p> </div> </div> </div> <div> <h4 class="py-2 text-md leading-0 font-black font-lato tracking-wider heading" :class="{ 'open' : footer.menu4}" x-on:click="footer.menu4 = ! footer.menu4">Social </h4> <div class="social-icons mt-4 text-sm content" :class="{ 'active' : footer.menu4}" > <div class="mt-2 inline"><a rel="noreferrer" href="https://www.facebook.com/GrowShopItalia/" title="Facebook" target="_blank"> <svg xmlns="http://www.w3.org/2000/svg" version="1.1" fill="currentColor" width="12" height="12" viewBox="0 0 1024 1024" class="w-10 h-10 border-2 text-white rounded-md p-2 inline mr-2"> <title/> <g id="grow-facebook"> </g> <path d="M575.87 1024h-191.87v-512h-128v-176.45l128-0.058-0.208-103.952c0-143.952 39.034-231.54 208.598-231.54h141.176v176.484h-88.23c-66.032 0-69.206 24.656-69.206 70.684l-0.262 88.324h158.69l-18.704 176.45-139.854 0.058-0.13 512z"/> </svg> </a> </div> <div class="mt-2 inline"><a rel="noreferrer" href="https://www.instagram.com/growshopitalia/" title="Twitter" target="_blank"> <svg xmlns="http://www.w3.org/2000/svg" version="1.1" fill="currentColor" width="12" height="12" viewBox="0 0 1024 1024" class="w-10 h-10 border-2 text-white rounded-md p-2 inline mr-2"> <title/> <g id="grow-instagram"> </g> <path d="M896 0h-768c-70.656 0-128 57.344-128 128v768c0 70.656 57.344 128 128 128h768c70.656 0 128-57.344 128-128v-768c0-70.656-57.344-128-128-128zM512 384c117.888 0 128 128 128 128s3.776 128-128 128c-131.712 0-128-128-128-128s10.112-128 128-128zM896 832c0 35.392-28.608 64-64 64h-640c-35.392 0-64-28.608-64-64v-320c0-35.392 28.608-64 64-64h73.088c-5.376 20.544-9.088 41.728-9.088 64 0 141.376 114.624 256 256 256s256-114.624 256-256c0-22.272-3.776-43.456-9.088-64h73.088c35.392 0 64 28.608 64 64v320zM896 256c0 35.328-28.608 64-64 64h-64c-35.328 0-64-28.672-64-64v-64c0-35.328 28.672-64 64-64h64c35.392 0 64 28.672 64 64v64z"/> </svg> </a> </div> <div class="mt-2 inline"><a rel="noreferrer" href="https://www.youtube.com/channel/UCLKV1bhNpsvi9LDb-0FVIOw" title="Linkedin" target="_blank"> <svg xmlns="http://www.w3.org/2000/svg" version="1.1" fill="currentColor" width="1024" height="1024" viewBox="0 0 1024 1024" class="w-10 h-10 border-2 text-white rounded-md p-2 inline mr-2"> <title/> <g id="grow-youtube"> </g> <path d="M832 128h-640c-105.6 0-192 86.4-192 192v384c0 105.6 86.4 192 192 192h640c105.6 0 192-86.4 192-192v-384c0-105.6-86.4-192-192-192zM384 768v-512l320 256-320 256z"/> </svg> </a> </div> </div> </div> </div> </div> </div></div></div><style type="text/css"></style> </div></div><div class="bg-footer-darker border-container"><div class="container px-5 py-6 mx-auto flex items-center justify-between sm:flex-row flex-col"><div class="my-3 lg:my-0 text-xs text-left text-white">Filodafab srl P.iva 10316661007 viale Ippocrate 61 - 00161 Roma</div><style>.cmsb206-my-3 { margin-top: 0.75rem; margin-bottom: 0.75rem } .cmsb206-flex { display: flex } .cmsb206-items-center { align-items: center } .cmsb206-gap-2 { gap: 0.5rem } @media (min-width: 1024px) { .cmsb206-lg\:my-0 { margin-top: 0px; margin-bottom: 0px } }</style> <div data-content-type="html" data-appearance="default" data-element="main"><div class="footer-bottom-payment-methods cmsb206-my-3 cmsb206-flex cmsb206-items-center cmsb206-gap-2 cmsb206-lg:my-0"> <picture><source type="image/webp" srcset="https://www.growshopitalia.com/media/wysiwyg/varie/mastercard.webp"><img src="https://www.growshopitalia.com/media/wysiwyg/varie/mastercard.png" alt="Payments methods accepted" width="50" height="31" loading="lazy" /></picture> <picture><source type="image/webp" srcset="https://www.growshopitalia.com/media/wysiwyg/varie/maestro.webp"><img src="https://www.growshopitalia.com/media/wysiwyg/varie/maestro.png" alt="Payments methods accepted" width="50" height="31" loading="lazy" /></picture> <picture><source type="image/webp" srcset="https://www.growshopitalia.com/media/wysiwyg/varie/visa.webp"><img src="https://www.growshopitalia.com/media/wysiwyg/varie/visa.png" alt="Payments methods accepted" width="50" height="31" loading="lazy" /></picture> <picture><source type="image/webp" srcset="https://www.growshopitalia.com/media/wysiwyg/varie/electron.webp"><img src="https://www.growshopitalia.com/media/wysiwyg/varie/electron.png" alt="Payments methods accepted" width="50" height="31" loading="lazy" /></picture> <picture><source type="image/webp" srcset="https://www.growshopitalia.com/media/wysiwyg/varie/amex.webp"><img src="https://www.growshopitalia.com/media/wysiwyg/varie/amex.png" alt="Payments methods accepted" width="50" height="31" loading="lazy" /></picture> </div></div></div></div></footer></div></footer><script data-ommit="true"> document.addEventListener("DOMContentLoaded", () => { let bind = () => { Object.entries( { add_to_cart: event => { AEC.add(event.currentTarget, dataLayer); }, remove_from_cart:event => { AEC.remove(event.currentTarget, dataLayer); }, select_item:event => { AEC.click(event.currentTarget, dataLayer); }, add_to_wishlist:event => { AEC.wishlist(event.currentTarget, dataLayer); }, add_to_compare:event => { AEC.compare(event.currentTarget, dataLayer); }, add_to_cart_swatch:event => { AEC.addSwatch(event.currentTarget, dataLayer); } }).forEach(([event, callback]) => { [...document.querySelectorAll('[data-event]:not([data-bound])')].filter(element => { return element.dataset.event === event; }).forEach(element => { element.addEventListener('click', callback); element.dataset.bound = true; }); }); }; bind(); if("PerformanceObserver" in window) { const observer = new PerformanceObserver((items) => { items.getEntries().filter(({ initiatorType }) => initiatorType === "xmlhttprequest").forEach((entry) => { bind(); }); }); observer.observe( { entryTypes: ["resource"] }); } });</script><script data-ommit="true"> document.addEventListener("DOMContentLoaded", () => { var PromotionTrack = ((dataLayer) => { return { apply: () => { var promotions = [], position = 0; document.querySelectorAll('[data-promotion]').forEach(promotion => { let entity = { promotion_id: promotion.dataset.promotionId, promotion_name: promotion.dataset.promotionName, creative_name: promotion.dataset.promotionCreative, creative_slot: promotion.dataset.promotionPosition }; AEC.EventDispatcher.trigger('ec.cookie.promotion.entity', entity, { element: promotion }); promotions.push(entity); promotion.addEventListener('click', (event) => { var data = { 'event': 'select_promotion', 'ecommerce': { 'items': [ { promotion_id: event.target.dataset.promotionId, promotion_name: event.target.dataset.promotionName, creative_name: event.target.dataset.promotionCreative, creative_slot: event.target.dataset.promotionPosition } ] } }; AEC.Cookie.promotionClick(data, promotion).push(dataLayer); /** * Save persistent data */ AEC.Persist.push(AEC.Persist.CONST_KEY_PROMOTION, { 'promotion': data.ecommerce.items[0] }); }); }); if (promotions.length) { AEC.Cookie.promotion( { 'event':'view_promotion', 'ecommerce': { 'items': promotions } }).push(dataLayer); } return this; } } })(dataLayer).apply(); });</script><script data-ommit="true"> document.addEventListener("DOMContentLoaded", () => { (() => { let map = {}, trace = {}; document.querySelectorAll('[data-widget]').forEach((element) => { let widget = element.dataset.widget; let entity = { item_id: element.dataset.id, item_name: element.dataset.name, item_list_name: element.dataset.list, item_list_id: element.dataset.list, item_brand: element.dataset.brand, category: element.dataset.category, price: parseFloat(element.dataset.price), index: parseFloat(element.dataset.position), currency: AEC.GA4.currency, quantity: 1, google_business_vertical: 'retail' }; Object.assign(entity, entity, AEC.GA4.augmentCategories(entity)); let attributes = element.dataset.attributes; if (attributes) { Object.entries(JSON.parse(attributes)).forEach(([key, value]) => { entity[key] = value; }); } if (!map.hasOwnProperty(widget)) { map[widget] = []; map[widget].trace = {}; map[widget].entry = []; map[widget].item_list_id = ''; map[widget].item_list_name = ''; } if (!map[widget].trace.hasOwnProperty(element.dataset.id)) { map[widget].trace[element.dataset.id] = true; map[widget].entry.push(entity); map[widget].item_list_id = entity.item_list_id; map[widget].item_list_name = entity.item_list_name; } }); Object.entries(map).forEach(([key, value]) => { if (value.entry.length) { let data = { event: 'view_item_list', ecommerce: { item_list_id: value.item_list_id, item_list_name: value.item_list_name, items: value.entry } }; if ('undefined' !== typeof dataLayer) { (function(callback) { if (AEC.Const.COOKIE_DIRECTIVE) { AEC.CookieConsent.queue(callback).process(); } else { callback.apply(window,[]); } }) ( (function(dataLayer, data) { return function() { AEC.EventDispatcher.trigger('ec.widget.view.data', data); dataLayer.push(data); } })(dataLayer, data) ); } } }); })(); });</script><script data-ommit="true"> if (typeof dataLayer !== "undefined") { AEC.Request.get(AEC.url('datalayer/index/events'), {}, response => { Object.entries(response.events).forEach(([key, event]) => { dataLayer.push(event); }); }); AEC.EventDispatcher.on('ec.facebook.loaded', () => { }); if (window.google_tag_params) { (function(callback) { if (AEC.Const.COOKIE_DIRECTIVE) { if (!AEC.Const.COOKIE_DIRECTIVE_CONSENT_GRANTED) { AEC.CookieConsent.queue(callback); } else { callback.apply(window,[]); } } else { callback.apply(window,[]); } }) ( (function(dataLayer) { return () => { AEC.Cookie.remarketing({ event:'fireRemarketingTag', google_tag_params: window.google_tag_params }).push(dataLayer); } })(dataLayer) ); } } else { console.log('dataLayer[] is not intialized. Check if GTM is installed properly'); }</script><script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/www.growshopitalia.com\/en\/headshop-smoke-shop-articoli-per-fumatori","name":"Head-smoke Shop"}},{"@type":"ListItem","position":2,"item":{"@id":"https:\/\/www.growshopitalia.com\/en\/bong-vetro","name":"Bongs and water pipes"}},{"@type":"ListItem","position":3,"item":{"@id":"https:\/\/www.growshopitalia.com\/en\/bong-no-ice","name":"Bong no ice"}},{"@type":"ListItem","position":4,"item":{"@id":"https:\/\/www.growshopitalia.com\/en\/stundenglass-gravity-hookah.html","name":"Bong Gravitational St\u00fcndenglass Gravity Hookah"}}]}</script> <script type="module" src="https://www.growshopitalia.com/static/version1725441768/frontend/Magenio/growshopitalia_hyva/en_US/js/swiper-bundle.min.js" defer crossorigin ></script> <script> (function () { "use strict"; const DIRECTIVE = "intersect"; const X_ATTR_RE = /^x-([a-z-]*)\b/i; function parseHtmlAttribute(reference) { const name = reference.name; const value = reference.value; const typeMatch = name.match(X_ATTR_RE); const valueMatch = name.match(/:([a-zA-Z0-9\-:]+)/); const modifiers = name.match(/\.[^.\]]+(?=[^\]]*$)/g) || []; return { type: typeMatch ? typeMatch[1] : null, value: valueMatch ? valueMatch[1] : null, modifiers: modifiers.map((i) => i.replace(".", "")), expression: value, }; } function getXDirectives(el) { return Array.from(el.attributes) .filter(function (attr) { return X_ATTR_RE.test(attr.name); }) .map(parseHtmlAttribute); } if (window.Alpine) { console.error("Intersect plugin must be included before AlpineJs, x-intersect will not work."); } const getLengthValue = (rawValue) => { let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/) return match ? match[1] + (match[2] || 'px') : undefined } const getRootMargin = (modifiers) => { const key = 'margin' const fallback = '0px 0px 0px 0px' const index = modifiers.indexOf(key) if (index === -1) return fallback let values = [] for (let i = 1; i < 5; i++) { values.push(getLengthValue(modifiers[index + i] || '')) } values = values.filter((v) => v !== undefined) return values.length ? values.join(' ').trim() : fallback } const getThreshhold = (modifiers) => { if (modifiers.includes("full")) return 0.8; if (modifiers.includes("half")) return 0.5; return 0; }; const AlpineIntersectionDirective = { start: function start() { Alpine.onBeforeComponentInitialized(function (component) { const legacyResolveBoundAttributes = component.resolveBoundAttributes; component.resolveBoundAttributes = function (el, initialUpdate, extraVars) { if (initialUpdate === void 0) { initialUpdate = false; } if (initialUpdate) { const attrs = getXDirectives(el); attrs.forEach(function (reference) { const type = reference.type; const expression = reference.expression; const value = reference.value; const modifiers = reference.modifiers; if (type === DIRECTIVE) { const options = { rootMargin: getRootMargin(modifiers), threshold: getThreshhold(modifiers), }; if ("IntersectionObserver" in window) { const observer = new IntersectionObserver((elements) => { elements.forEach((element) => { if (element.isIntersecting === (value === 'leave')) return component.evaluateReturnExpression(el, expression, extraVars); modifiers.includes("once") && observer.disconnect(); }); }, options); observer.observe(el); } else { component.evaluateReturnExpression(el, expression, extraVars); } } }); } return legacyResolveBoundAttributes.bind(component)(el, initialUpdate, extraVars); }; }); }, }; const initAlpine = window.deferLoadingAlpine || ((callback) => callback()); window.deferLoadingAlpine = (callback) => { AlpineIntersectionDirective.start(); initAlpine(callback); }; })();</script> <script type="module" src="https://www.growshopitalia.com/static/version1725441768/frontend/Magenio/growshopitalia_hyva/en_US/Hyva_Theme/js/alpine.min.js" defer crossorigin ></script> <script> 'use strict'; function dispatchMessages(messages, hideAfter) { const messagesEvent = new CustomEvent("messages-loaded", { detail: { messages: messages, hideAfter: hideAfter } }); window.dispatchEvent(messagesEvent); } if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); } (function( hyva, undefined ) { hyva.initFormKey = () => { const inputSelector = 'input[name="form_key"]', formKey = hyva.getFormKey(); Array.from(document.querySelectorAll(inputSelector)).map(function (input) { input.value = formKey }); } hyva.initMessages = () => { try { const messages = hyva.getCookie('mage-messages'); window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; dispatchMessages(window.mageMessages); const skipSetDomain = true; hyva.setCookie('mage-messages','', -1, skipSetDomain); } catch (error) { console.warn('Error parsing Cookie Messages:', error); } } window.addEventListener('DOMContentLoaded', hyva.initFormKey); window.addEventListener('load', hyva.initMessages); }( window.hyva = window.hyva || {} ));</script> <script> 'use strict'; { const private_content_key = 'mage-cache-storage'; const private_content_expire_key = 'mage-cache-timeout'; const private_content_version_key = 'private_content_version'; const section_data_ids_key = 'section_data_ids'; const mage_cache_session_id_key = 'mage-cache-sessid'; const last_visited_store_key = 'last_visited_store'; const ttl = 3600; if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); } function loadSectionData () { const browserStorage = hyva.getBrowserStorage(); if (!browserStorage) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "warning", text: "Please enable LocalStorage in your browser." }] ); return; } try { let isInvalid = false; if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { isInvalid = true; } hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); if (!hyva.getCookie(mage_cache_session_id_key)) { isInvalid = true; const skipSetDomain = true; const days = false; hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) } const cookieVersion = hyva.getCookie(private_content_version_key); const storageVersion = browserStorage.getItem(private_content_version_key); if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { isInvalid = true; } const privateContentExpires = browserStorage.getItem(private_content_expire_key); if (privateContentExpires && new Date(privateContentExpires) < new Date()) { browserStorage.removeItem(private_content_key); } if (isInvalid) { fetchPrivateContent([]); } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); if ( privateContent && privateContentExpires && privateContent.cart && privateContent.customer ) { dispatchPrivateContent(privateContent); } else { fetchPrivateContent([]); } } else { dispatchPrivateContent({}); } } catch (error) { console.warn('Error retrieving Private Content:', error); } } window.addEventListener('load', loadSectionData); window.addEventListener('reload-customer-section-data', loadSectionData); function dispatchPrivateContent(data) { const privateContentEvent = new CustomEvent("private-content-loaded", { detail: { data: data } }); window.dispatchEvent(privateContentEvent); } function fetchPrivateContent(sections) { fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { method: 'GET', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } }) .then(response => response.json()) .then( data => { if (data) { try { const browserStorage = hyva.getBrowserStorage(); const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}'); if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { delete oldSectionData['checkout-data']; } const newSectionData = Object.assign(oldSectionData, data); dispatchPrivateContent(newSectionData); if (newSectionData.messages && newSectionData.messages.messages ) { newSectionData.messages.messages = []; } browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); browserStorage.setItem(private_content_expire_key, expiresAt); const newCookieVersion = hyva.getCookie(private_content_version_key); browserStorage.setItem(private_content_version_key, newCookieVersion); hyva.setCookie( section_data_ids_key, JSON.stringify( Object.keys(data).reduce((sectionDataIds, sectionKey) => { sectionDataIds[sectionKey] = data[sectionKey]['data_id']; return sectionDataIds; }, {}) ), false, true ); } catch (error) { console.warn("Couldn't store privateContent", error); } } } ); } }</script><script> (() => { document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); })()</script> <script> (events => { const dispatchUserInteractionEvent = () => { events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) window.dispatchEvent(new Event('init-external-scripts')) }; events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown'])</script> <script> function initCompareOnProductList() { return { addToCompare(productId) { const formKey = document.querySelector('input[name=form_key]').value; const postUrl = BASE_URL + 'catalog/product_compare/add/'; fetch(postUrl, { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, "body": "form_key="+ formKey + "&product="+productId+"&uenc="+btoa(window.location.href), "method": "POST", "mode": "cors", "credentials": "include" }).then(function (response) { if (response.redirected) { window.location.href = response.url; } }).catch(function (error) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "error", text: error }], 5000 ); }); } }; }</script> <script> function initWishlist() { return { addToWishlist(productId) { const formKey = hyva.getFormKey(); fetch(BASE_URL + "wishlist/index/add/", { "headers": { "content-type": "application/x-www-form-urlencoded; charset=UTF-8", }, "body": "form_key="+ formKey + "&product="+productId+"&uenc="+btoa(window.location.href), "method": "POST", "mode": "cors", "credentials": "include" }).then(function (response) { if (response.redirected) { window.location.href = response.url; } else if (response.ok) { return response.json(); } else { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "warning", text: "Could not add item to wishlist." }], 5000 ); } }).then(function (response) { if (!response) { return } typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: (response.success) ? "success" : "error", text: (response.success) ? "Product has been added to your Wish List." : response.error_message }], 5000 ); const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); window.dispatchEvent(reloadCustomerDataEvent); }).catch(function (error) { typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( [{ type: "error", text: error }], 5000 ); }); } } }</script> <script> function initSwatchOptions(swatchConfig) { return { swatchConfig, getAttributeSwatchData(attributeId) { const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]); swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); return swatchConfig; }, getAllAttributeOptions(attributeId) { return ( this.optionConfig.attributes[attributeId] && this.optionConfig.attributes[attributeId].options ) || [] }, optionIsActive(attributeId, optionId) { return !!this.getAllowedAttributeOptions(attributeId).find( option => option.id === optionId ) }, optionIsEnabled(attributeId, optionId) { for (const productId in this.optionConfig.index) { if (this.optionConfig.index[productId][attributeId] === optionId) { return true; } } return false; }, mapSwatchTypeNumberToTypeCode(typeNumber) { switch ("" + typeNumber) { case "1": return "color" case "2": return "image" case "3": return "empty" case "0": default: return "text" } }, getTypeOfFirstOption(attributeId) { for (const optionId in this.swatchConfig[attributeId]) { const option = this.swatchConfig[attributeId][optionId]; if (typeof option.type !== 'undefined') { return this.mapSwatchTypeNumberToTypeCode(option.type); } } }, getVisualSwatchType(attributeId, targetOptionId) { const config = this.swatchConfig[attributeId]; if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); } return this.getTypeOfFirstOption(attributeId); }, getSwatchType(attributeId, optionId) { if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) { this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); } const type = this.swatchConfig[attributeId] && this.swatchConfig[attributeId].details && this.swatchConfig[attributeId].details.swatch_input_type || "empty"; return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; }, isTextSwatch(attributeId, optionId) { return this.getSwatchType(attributeId, optionId) === 'text'; }, isVisualSwatch(attributeId, optionId) { const type = this.getSwatchType(attributeId, optionId); return ['image', 'color'].includes(type); }, getSwatchBackgroundStyle(attributeId, optionId) { const config = this.getSwatchConfig(attributeId, optionId); const type = this.getSwatchType(attributeId, optionId); if (type === "color") { return 'background-color:' + config.value; } else if (type === "image") { return "background: #ffffff url('" + config.value + "') no-repeat center"; } else { return ''; } }, getSwatchText(attributeId, optionId) { const config = this.getSwatchConfig(attributeId, optionId); return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId); }, getOptionLabelFromOptionConfig(attributeId, optionId) { const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId); return option && option[0] && option[0].label ||''; }, getSwatchConfig(attributeId, optionId) { return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId] ? this.swatchConfig[attributeId][optionId] : false; }, activeTooltipItem: false, tooltipPositionElement: false, isTooltipVisible() { return this.activeTooltipItem && this.getSwatchConfig( this.activeTooltipItem.attribute, this.activeTooltipItem.item ); }, getTooltipImageStyle(attributeId, optionId) { const config = this.getSwatchConfig(attributeId, optionId); const type = this.getSwatchType(attributeId, optionId); if (type === "color") { return 'background-color:' + config.value + '; width: 110px; height: 90px;'; } else if (type === "image") { return "background: #ffffff url('" + config.thumb + "') center center no-repeat; width: 110px; height: 90px;"; } else { return 'display:none'; } }, getTooltipPosition() { return this.tooltipPositionElement ? `top: ${this.tooltipPositionElement.offsetTop}px;` + `left: ${ this.tooltipPositionElement.offsetLeft - ( this.tooltipPositionElement.closest('.snap') && this.tooltipPositionElement.closest('.snap').scrollLeft || 0 ) }px;` : '' }, getTooltipLabel() { return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label }, focusedLabel: false, focusLabel(optionId) { this.focusedLabel = optionId; }, blurLabel() { this.focusedLabel = false; }, showSwatches: false, initShowSwatchesIntersect() { if ('IntersectionObserver' in window && !window.scrollY) { const io = new IntersectionObserver( entries => { entries.map(entry => { if (entry.isIntersecting) { this.showSwatches = true; io.unobserve(this.$el); } }) } ); io.observe(this.$el); } else { this.showSwatches = true } } } }</script> <script> function initConfigurableOptions(productId, optionConfig) { function findPathParam(key) { const baseUrl = (BASE_URL.substr(0, 2) === '//' ? 'http:' : '') + BASE_URL; const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); for (let i = 0; i < pathParts.length; i += 2) { if (pathParts[i] === key && pathParts.length > i) { return pathParts[i + 1]; } } } return { optionConfig, productId, itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), allowedAttributeOptions: [], selectedValues: [], init() { this.findAllowedAttributeOptions(); this.$nextTick(() => { if (this.itemId && typeof this.optionConfig.defaultValues === 'object') { for (const [optionId, value] of Object.entries(this.optionConfig.defaultValues)) { this.changeOption(optionId, value + ''); } } }); }, findSimpleIndex() { this.productIndex = this.calculateSimpleIndexForFullSelection(this.selectedValues); }, calculateSimpleIndexForFullSelection(selectedValues) { const productIndexes = this.optionConfig.index; return Object.keys(productIndexes).find(productIndex => { const productCandidateOptions = productIndexes[productIndex]; for (const productOption in productCandidateOptions) { if ( ! selectedValues[productOption] || selectedValues[productOption] !== productCandidateOptions[productOption] ) { return false; } } return productIndex; }); }, productIndex: 0, findAllowedAttributeOptions() { this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); }, calculateAllowedAttributeOptions(selectedValues) { const allAttributes = this.optionConfig.attributes; const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { return a.position - b.position }); const productIndexes = this.optionConfig.index; let previousOption = false; let availableIndexes = Object.keys(productIndexes); const newAllowedAttributeOptions = []; allAttributesSorted.forEach(attribute => { if (previousOption && selectedValues[previousOption]) { availableIndexes = availableIndexes.filter(availableIndex => { return productIndexes[availableIndex][previousOption] === selectedValues[previousOption] }) } newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { return !!option.products.find(product => { return availableIndexes.includes(product); }) }); previousOption = attribute.id; }); return newAllowedAttributeOptions; }, findAttributeByOptionId(optionId) { for (const attributeId in this.optionConfig.attributes) { const attributeOptions = this.optionConfig.attributes[attributeId].options || []; if (attributeOptions.find(option => option.id === optionId)) { return attributeId; } } }, getAllowedAttributeOptions(attributeId) { return this.allowedAttributeOptions[attributeId] || [] }, getProductIdsForOption(option) { const attributeId = this.findAttributeByOptionId(option.id); const allOptions = this.optionConfig.attributes[attributeId]; const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); return opt && opt.products ? opt.products : []; }, findProductIdsForPartialSelection(optionSelection) { const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { const newCandidates = this.getProductIdsForOption({id: optionId}); return candidates === null ? newCandidates : candidates.filter(productId => newCandidates.includes(productId)); }, null); return candidateProducts || []; }, findCheapestProductForPartialSelection(optionSelection) { const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); return candidateProducts.reduce((cheapest, simpleIdx) => { if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount ? simpleIdx : cheapest; }, 0) }, findProductIdToUseForOptionPrice(option) { const attributeId = this.findAttributeByOptionId(option.id); const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); }, getAttributeOptionLabel(option) { const optionProduct = this.findProductIdToUseForOptionPrice(option); if ((! optionProduct) || (optionProduct === this.productIndex)) { return option.label; } const currentPrice = this.getOptionPriceAdjustmentBasePrice(); if (this.optionConfig.optionPrices[optionProduct]) { const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; if (optionPrice !== currentPrice){ return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true); } } return option.label; }, getOptionPriceAdjustmentBasePrice() { if (this.optionConfig.optionPrices[this.productIndex]) { return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount } const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues); return this.optionConfig.optionPrices[cheapestForSelection] ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount : this.optionConfig.prices.finalPrice.amount; }, changeOption(optionId, value) { this.selectedValues[optionId] = value; this.findSimpleIndex(); this.findAllowedAttributeOptions(); this.updatePrices(); this.updateGallery(); window.dispatchEvent( new CustomEvent( 'configurable-selection-changed', { detail: { productId: this.productId, optionId: this.optionId, value: this.value, productIndex: this.productIndex, selectedValues: this.selectedValues } } ) ); }, calculateIsMinimalPrice() { return ( this.selectedValues.filter(value => !!value).length < Object.keys(this.optionConfig.attributes).length ); }, updatePrices() { const value = this.productIndex ? this.optionConfig.optionPrices[this.productIndex] : this.optionConfig.prices; window.dispatchEvent( new CustomEvent( "update-prices-" + this.productId, { detail: Object.assign( value, { isMinimalPrice: this.calculateIsMinimalPrice() } ) } ) ); }, updateGallery () { const value = this.productIndex ? this.optionConfig.images[this.productIndex] : Object.values(this.optionConfig.images)[0]; value && window.dispatchEvent( new CustomEvent( "update-gallery", { detail: value } ) ); }, onGetCartData(data) { this.preselectCartItems(data); this.preselectQuerystringItems(); this.preselectLocationHashItems(); }, preselectCartItems(data) { const cart = data && data.cart; if (cart && cart.items) { const cartItem = cart.items.find((item) => { return ( item.item_id === this.itemId && item.product_id === this.productId ) }); if (cartItem && cartItem.options && cartItem.options.length) { cartItem.options.map(option => { this.changeOption(option.option_id, option.option_value); }) } } }, preselectQuerystringItems() { const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); Object.values(this.optionConfig.attributes).map(attribute => { urlQueryParams.get(attribute.code) && this.changeOption(attribute.id, urlQueryParams.get(attribute.code)); }); }, preselectLocationHashItems() { const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); Object.values(this.optionConfig.attributes).map(attribute => { urlHashParams.get(attribute.id) && this.changeOption(attribute.id, urlHashParams.get(attribute.id)); }); } } }</script> <script defer> 'use strict'; (() => { const equalizeButtonWidths = (buttons) => { const buttonList = buttons.querySelectorAll('[data-element="link"], [data-element="empty_link"]'); let buttonMinWidth = 0; buttonList.forEach(button => { const buttonWidth = button.offsetWidth; if (buttonWidth > buttonMinWidth) { buttonMinWidth = buttonWidth; } }); buttonList.forEach(button => { button.style.minWidth = `${buttonMinWidth}px`; }); }; window.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('[data-content-type="buttons"][data-same-width="true"]').forEach(buttons => { equalizeButtonWidths(buttons); }); }); })();</script> <script defer> 'use strict'; (() => { const initCarousels = (elements) => { if (!Glider) { return; } const initProductCarousel = (carousel) => { const gliderElement = carousel.querySelector('[data-role="glider-content"]'); if (!gliderElement) { return; } const gliderDots = carousel.querySelector('.glider-dots'); const gliderPrev = carousel.querySelector('.glider-prev'); const gliderNext = carousel.querySelector('.glider-next'); const glider = new Glider(gliderElement, { slidesToShow: 2, slidesToScroll: 2, scrollLock: true, draggable: true, dragVelocity: 2.5, dots: gliderDots, arrows: { prev: gliderPrev, next: gliderNext, }, responsive: [ { breakpoint: 768, settings: { slidesToShow: 3, slidesToScroll: 3, } }, { breakpoint: 1024, settings: { slidesToShow: 4, slidesToScroll: 4, } }, ], }); carousel.classList.remove('overflow-x-scroll'); gliderPrev.classList.remove('hidden'); gliderNext.classList.remove('hidden'); if (carousel.dataset.autoplay !== 'false') { gliderAutoplay( glider, carousel.dataset.autoplaySpeed, carousel.dataset.infiniteLoop ); } }; const initSliderCarousel = (slider) => { slider.innerHTML = `<div data-role="glider-content">${slider.innerHTML}</div>`; slider.classList.add('glider-contain'); slider.insertAdjacentHTML( 'beforeend', '\u0020\u003Cdiv\u0020class\u003D\u0022carousel\u002Dnav\u0020flex\u0020items\u002Dcenter\u0020justify\u002Dcenter\u0020flex\u002D1\u0020p\u002D4\u0022\u003E\u003Cbutton\u0020aria\u002Dlabel\u003D\u0022Previous\u0022\u0020class\u003D\u0022glider\u002Dprev\u0020w\u002D8\u0020h\u002D8\u0020mr\u002D1\u0020text\u002Dblack\u0020rounded\u002Dfull\u0020outline\u002Dnone\u0020focus\u003Aoutline\u002Dnone\u0020hidden\u0022\u003E\u003Csvg\u0020viewBox\u003D\u00220\u00200\u00201024\u00201024\u0022\u003E\u003Cpath\u0020class\u003D\u0022path1\u0022\u0020d\u003D\u0022M716.8\u00201024c6.552\u00200\u002013.102\u002D2.499\u002018.101\u002D7.499\u00209.998\u002D9.997\u00209.998\u002D26.206\u00200\u002D36.203l\u002D442.698\u002D442.698\u0020442.698\u002D442.699c9.998\u002D9.997\u00209.998\u002D26.206\u00200\u002D36.203s\u002D26.206\u002D9.998\u002D36.203\u00200l\u002D460.8\u0020460.8c\u002D9.998\u00209.997\u002D9.998\u002026.206\u00200\u002036.203l460.8\u0020460.8c5\u00205\u002011.55\u00207.499\u002018.102\u00207.499z\u0022\u003E\u003C\u002Fpath\u003E\u003C\u002Fsvg\u003E\u003C\u002Fbutton\u003E\u0020\u003Cdiv\u0020role\u003D\u0022tablist\u0022\u0020class\u003D\u0022glider\u002Ddots\u0020select\u002Dnone\u0020flex\u0020flex\u002Dwrap\u0020mx\u002D1\u0020justify\u002Dcenter\u0020p\u002D0\u0020focus\u003Aoutline\u002Dnone\u0022\u003E\u003C\u002Fdiv\u003E\u003Cbutton\u0020aria\u002Dlabel\u003D\u0022Next\u0022\u0020class\u003D\u0022glider\u002Dnext\u0020w\u002D8\u0020h\u002D8\u0020ml\u002D1\u0020text\u002Dblack\u0020rounded\u002Dfull\u0020outline\u002Dnone\u0020focus\u003Aoutline\u002Dnone\u0020hidden\u0022\u003E\u003Csvg\u0020viewBox\u003D\u00220\u00200\u00201024\u00201024\u0022\u003E\u003Cpath\u0020class\u003D\u0022path1\u0022\u0020d\u003D\u0022M256\u00201024c\u002D6.552\u00200\u002D13.102\u002D2.499\u002D18.101\u002D7.499\u002D9.998\u002D9.997\u002D9.998\u002D26.206\u00200\u002D36.203l442.698\u002D442.698\u002D442.698\u002D442.699c\u002D9.998\u002D9.997\u002D9.998\u002D26.206\u00200\u002D36.203s26.206\u002D9.998\u002036.203\u00200l460.8\u0020460.8c9.998\u00209.997\u00209.998\u002026.206\u00200\u002036.203l\u002D460.8\u0020460.8c\u002D5\u00205\u002D11.55\u00207.499\u002D18.102\u00207.499z\u0022\u003E\u003C\u002Fpath\u003E\u003C\u002Fsvg\u003E\u003C\u002Fbutton\u003E\u003C\u002Fdiv\u003E' ); const gliderElement = slider.querySelector('[data-role="glider-content"]'); const gliderDots = slider.querySelector('.glider-dots'); const gliderPrev = slider.querySelector('.glider-prev'); const gliderNext = slider.querySelector('.glider-next'); const glider = new Glider(gliderElement, { slidesToShow: 1, slidesToScroll: 1, scrollLock: true, scrollLockDelay: 250, draggable: true, dragVelocity: 2.5, dots: gliderDots, arrows: { prev: gliderPrev, next: gliderNext, }, }); slider.classList.add('glider-initialized'); if (slider.dataset.showArrows === 'true') { gliderPrev.classList.remove('hidden'); gliderNext.classList.remove('hidden'); } if (slider.dataset.autoplay !== 'false') { gliderAutoplay( glider, slider.dataset.autoplaySpeed, slider.dataset.infiniteLoop ); } }; const gliderAutoplay = (glider, milliseconds, loop) => { const pagesCount = glider.track.childElementCount; let slideTimeout = null; let nextIndex = 1; let paused = false; const slide = () => { slideTimeout = setTimeout( () => { if (loop && nextIndex >= pagesCount) { nextIndex = 0; } glider.scrollItem(nextIndex); }, parseInt(milliseconds) ); }; glider.ele.addEventListener('glider-animated', () => { nextIndex = glider.slide + glider.opt.slidesToScroll; window.clearInterval(slideTimeout); if (!paused && (loop || nextIndex < pagesCount)) { slide(); } }); const pause = () => { if (!paused) { clearInterval(slideTimeout); paused = true; } }; const unpause = () => { if (paused) { slide(); paused = false; } }; glider.ele.parentElement.addEventListener('mouseover', pause, {passive: true}); glider.ele.parentElement.addEventListener('touchstart', pause, {passive: true}); glider.ele.parentElement.addEventListener('mouseout', unpause, {passive: true}); glider.ele.parentElement.addEventListener('touchend', unpause, {passive: true}); slide(); }; elements.forEach(element => { if (element.dataset.contentType === 'products') { initProductCarousel(element); } if (element.dataset.contentType === 'slider') { initSliderCarousel(element); } }); }; window.addEventListener('DOMContentLoaded', () => { const carouselElements = document.querySelectorAll( `[data-content-type="products"][data-appearance="carousel"], [data-content-type="slider"]` ); if (carouselElements.length > 0) { const script = document.createElement('script'); script.type = 'text/javascript'; script.addEventListener('load', () => { initCarousels(carouselElements); }); script.src = 'https\u003A\u002F\u002Fwww.growshopitalia.com\u002Fstatic\u002Fversion1725441768\u002Ffrontend\u002FMagenio\u002Fgrowshopitalia_hyva\u002Fen_US\u002FHyva_PageBuilder\u002Fjs\u002Fglider.min.js'; document.head.appendChild(script); } }); })();</script> <script defer> 'use strict'; (() => { const initMaps = (elements) => { const renderMap = (element) => { const dataLocations = element.dataset.locations; if (!dataLocations || dataLocations === '[]') { element.classList.add('hidden'); return; } const map = new google.maps.Map( element, getMapOptions( element.dataset.showControls !== 'true', element.dataset.showControls === 'true' ) ); const locations = JSON.parse(dataLocations); const latitudeLongitudeBounds = new google.maps.LatLngBounds(); const bounds = []; locations.forEach(location => { const position = { lat: parseFloat(location.position.latitude), lng: parseFloat(location.position.longitude), }; bounds.push(position); const infowindow = new google.maps.InfoWindow({ content: getInfoWindowContent(location), }); const marker = new google.maps.Marker({ position: position, map, title: location.location_name, }); marker.addListener('click', () => { infowindow.open(map, marker); }); }); if (bounds.length > 1) { bounds.forEach(function (bound) { latitudeLongitudeBounds.extend(bound); }); map.fitBounds(latitudeLongitudeBounds); } if (bounds.length === 1) { map.setCenter(bounds[0]); } }; const getMapOptions = (disableDefaultUI, mapTypeControl) => { const style = ''; return { zoom: 8, scrollwheel: false, disableDoubleClickZoom: false, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DEFAULT, }, styles: style ? JSON.parse(style) : [], disableDefaultUI: disableDefaultUI, mapTypeControl: mapTypeControl, }; }; const getInfoWindowContent = (location) => { const title = location.location_name ? `<h3 class="text-2xl font-medium text-gray-900 title-font">${location.location_name}</h3>` : ''; const comment = location.comment ? `<p class="px-1 pt-3 text-primary">${location.comment}</p>` : ''; const phone = location.phone ? `<p class="px-1 pt-3 text-primary">Phone: ${location.phone}</p>` : ''; const street = location.address ? `${location.address}<br/>` : ''; const city = location.city ? `${location.city}<br/>` : ''; const state = location.state ? `${location.state}<br/>` : ''; const zipCode = location.zipcode ? `${location.zipcode}<br/>` : ''; const country = location.country ? location.country : ''; return `<div> ${title} ${comment} ${phone} <p class="px-1 pt-3 text-primary"> ${street} ${city} ${state} ${zipCode} ${country}</p></div>`; }; const hideAllMaps = () => { document.querySelectorAll('[data-content-type="map"]').forEach(element => { element.classList.add('hidden'); }); }; window.gm_authFailure = () => { hideAllMaps(); }; if (typeof google.maps === 'undefined') { hideAllMaps(); return; } elements.forEach(element => { if (element.dataset.contentType === 'map') { renderMap(element); } }); }; window.addEventListener('DOMContentLoaded', () => { const mapElements = document.querySelectorAll('[data-content-type="map"]'); if (mapElements.length > 0) { const script = document.createElement('script'); script.type = 'text/javascript'; script.addEventListener('load', () => { initMaps(mapElements); }); script.src = 'https\u003A\u002F\u002Fmaps.googleapis.com\u002Fmaps\u002Fapi\u002Fjs\u003Fv\u003D3\u0026key\u003D'; document.head.appendChild(script); } }); })();</script> <script defer> 'use strict'; (() => { const initParallaxImage = (element) => { if (!window.jarallax) { return; } element.classList.add('jarallax'); element.dataset.jarallax = ''; const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; const elementStyle = window.getComputedStyle(element); window.jarallax(element, { imgPosition: elementStyle.backgroundPosition || '50% 50%', imgRepeat: elementStyle.backgroundRepeat || 'no-repeat', imgSize: elementStyle.backgroundSize || 'cover', speed: parallaxSpeed, }); }; const initVideoBackground = (element) => { if (!window.jarallax) { return; } let slider = null; if (element.classList.contains('pagebuilder-slide-wrapper')) { const viewportElement = document.createElement('div'); slider = element.closest('[data-content-type=slider]'); viewportElement.classList.add('jarallax-viewport-element'); element.dataset.elementInViewport = '.jarallax-viewport-element'; element.appendChild(viewportElement); } element.classList.add('jarallax'); element.dataset.jarallax = ''; const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; window.jarallax(element, { imgSrc: element.dataset.videoFallbackSrc, speed: parallaxSpeed, videoLoop: element.dataset.videoLoop, videoPlayOnlyVisible: element.dataset.videoPlayOnlyVisible, videoLazyLoading: element.dataset.videoLazyLoad, disableVideo: false, elementInViewport: element.dataset.elementInViewport && element.querySelector(element.dataset.elementInViewport), }); if (slider) { if (slider.dataset.afterChangeIsSet) { return; } slider.addEventListener('glider-loaded', () => { slider.querySelectorAll('.jarallax').forEach(videoSlide => { videoSlide.jarallax && videoSlide.jarallax.onScroll(); }); }); slider.addEventListener('glider-animated', () => { slider.querySelectorAll('.jarallax').forEach(videoSlide => { videoSlide.jarallax && videoSlide.jarallax.onScroll(); }); }); slider.dataset.afterChangeIsSet = true; } }; window.addEventListener('DOMContentLoaded', () => { const parallaxImageElements = document.querySelectorAll( `[data-content-type="row"][data-background-type="image"][data-enable-parallax="1"], [data-content-type="row"] > [data-background-type="image"][data-enable-parallax="1"]` ); const videoBackgroundsElements = document.querySelectorAll( `[data-content-type="row"][data-background-type="video"][data-enable-parallax="1"], [data-content-type="row"] > [data-background-type="video"][data-enable-parallax="1"], [data-content-type="banner"] [data-background-type="video"], [data-content-type="slide"] [data-background-type="video"]` ); if (parallaxImageElements.length > 0 || videoBackgroundsElements.length > 0) { const jarallaxScript = document.createElement('script'); jarallaxScript.type = 'text/javascript'; jarallaxScript.addEventListener('load', () => { parallaxImageElements.forEach(row => { initParallaxImage(row); }); const jarallaxVideoScript = document.createElement('script'); jarallaxVideoScript.type = 'text/javascript'; jarallaxVideoScript.addEventListener('load', () => { videoBackgroundsElements.forEach(element => { initVideoBackground(element); }); }); jarallaxVideoScript.src = 'https\u003A\u002F\u002Fwww.growshopitalia.com\u002Fstatic\u002Fversion1725441768\u002Ffrontend\u002FMagenio\u002Fgrowshopitalia_hyva\u002Fen_US\u002FHyva_PageBuilder\u002Fjs\u002Fjarallax\u002Dvideo.min.js'; document.head.appendChild(jarallaxVideoScript); }); jarallaxScript.src = 'https\u003A\u002F\u002Fwww.growshopitalia.com\u002Fstatic\u002Fversion1725441768\u002Ffrontend\u002FMagenio\u002Fgrowshopitalia_hyva\u002Fen_US\u002FHyva_PageBuilder\u002Fjs\u002Fjarallax.min.js'; document.head.appendChild(jarallaxScript); } }); })();</script> <script defer> 'use strict'; (() => { const applyShowOnHover = (element) => { const showOverlayOnHover = (element) => { const overlay = element.querySelector('.pagebuilder-overlay'); const color = overlay.dataset.overlayColor; element.addEventListener('mouseover', () => { overlay.style.backgroundColor = color; }); element.addEventListener('mouseout', () => { overlay.style.backgroundColor = 'transparent'; }); }; const showButtonOnHover = (element) => { const button = element.querySelector('.pagebuilder-banner-button'); element.addEventListener('mouseover', () => { button.style.opacity = '1'; button.style.visibility = 'visible'; }); element.addEventListener('mouseout', () => { button.style.opacity = '0'; button.style.visibility = 'hidden'; }); }; if (element.dataset.showOverlay === 'hover') { showOverlayOnHover(element); } if (element.dataset.showButton === 'hover') { showButtonOnHover(element); } }; window.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('[data-content-type="banner"],[data-content-type="slider"]').forEach(element => { applyShowOnHover(element); }); }); })();</script> <script defer> 'use strict'; (() => { document.querySelectorAll('[data-content-type="tab-item"]').forEach(tabItem => { tabItem.setAttribute('x-show', `tab === '${tabItem.id}'`); }); document.querySelectorAll('[data-content-type="tabs"]').forEach(tab => { const defaultActiveTab = parseInt(tab.dataset.activeTab) || 0; tab.querySelectorAll('.tab-header').forEach((tabHeader, index) => { const tabLink = tabHeader.querySelector('a'); const tabId = tabLink.getAttribute('href').replace('#', ''); tabHeader.setAttribute(':class', `{ 'active': tab === '${tabId}' }`); tabLink.setAttribute('x-on:click.prevent', `tab = '${tabId}'`); if (index === defaultActiveTab) { tab.setAttribute('x-data', `{ tab: '${tabId}' }`); } }); }); })();</script> <script> 'use strict'; (function() { const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6LdMoTUeAAAAAPewqPBGGTxK3IcFELTLYkVDciKH"; const loadRecaptchaScript = (event) => { if (typeof window.grecaptcha !== 'undefined' || !event.target.form) { return } let script = document.createElement('script'); script.setAttribute('type', 'text/javascript'); script.setAttribute('src', recaptchaUrl); document.head.appendChild(script); } document.body.addEventListener("input", loadRecaptchaScript, { once: true }); document.body.addEventListener("focus", loadRecaptchaScript, { once: true }); }());</script> <script> (payload => { dataLayer.push(payload); })({"payload":"detail"});</script><script> (() => { const { fetch: originalFetch } = window; window.fetch = async (...args) => { let [resource, config ] = args; let targetUrl = (resource instanceof Request) ? resource.url : resource.toString(); const response = await originalFetch(resource, config); const json = () => response.clone().json().then((data) => { switch (true) { case -1 !== targetUrl.indexOf('removeItem'): if (data.hasOwnProperty('dataLayer') && 'undefined' !== typeof dataLayer) { AEC.Cookie.remove(data.dataLayer).push(dataLayer); } break; } return data; }); response.json = json; return response; }; /** * Custom variants */ AEC.EventDispatcher.on('ec.variants', variants => { if (!variants.length) { [...document.querySelectorAll('[name^="super_attribute"')].forEach(input => { if (input.parentNode.classList.contains('border-primary')) { var name = input.getAttribute('name'), id = name.substring(name.indexOf('[') + 1, name.lastIndexOf(']')); Object.entries(AEC.SUPER).forEach(([key, attribute]) => { if (attribute.id == id) { attribute.options.forEach(option => { if (option.value_index == input.value) { variants.push( { id: id, option: option.value_index, text: option.label }); } }); } }); } }); } }); window.addEventListener('add-to-cart', event => { let element = [...document.querySelectorAll('[data-event=add_to_cart]')].filter(node => { return node.dataset.id === event.detail.product_sku; }); if (element) { AEC.add(element[0], dataLayer); } }); window.addEventListener('cart-data-updated', event => { dataLayer.push( { event: 'update_cart', payload: event.detail.cart }); }); })();</script> <script> 'use strict'; function GoogleAnalytics () { let self = this; this.config = { isCookieRestrictionModeEnabled: 0, currentWebsite: 1, cookieName: "user_allowed_save_cookie", ordersTrackingData: [], pageTrackingData: {"optPageUrl":"","isAnonymizedIpActive":false,"accountId":"UA-60860694-1"}, } this.initGoogleAnalytics = function () { let allowServices = false, allowedCookies, allowedWebsites; if (self.config.isCookieRestrictionModeEnabled) { allowedCookies = hyva.getCookie(self.config.cookieName); if (allowedCookies !== null) { allowedWebsites = JSON.parse(decodeURIComponent(allowedCookies)); if (allowedWebsites[self.config.currentWebsite] === 1) { allowServices = true; } } } else { allowServices = true; } if (allowServices) { (function (i, s, o, g, r, a, m) { i.GoogleAnalyticsObject = r; i[r] = i[r] || function () { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.defer = 1; a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); ga('create', self.config.pageTrackingData.accountId, 'auto'); if (self.config.pageTrackingData.isAnonymizedIpActive) { ga('set', 'anonymizeIp', true); } if (self.config.ordersTrackingData.hasOwnProperty('currency')) { ga('require', 'ec', 'ec.js'); ga('set', 'currencyCode', self.config.ordersTrackingData.currency); if (self.config.ordersTrackingData.products) { self.config.ordersTrackingData.products.forEach(function (value) { ga('ec:addProduct', value); }); } if (self.config.ordersTrackingData.orders) { self.config.ordersTrackingData.orders.forEach(function (value) { ga('ec:setAction', 'purchase', value); }); } ga('send', 'pageview'); } else { ga('send', 'pageview' + self.config.pageTrackingData.optPageUrl); } } }; } window.addEventListener("load", new GoogleAnalytics().initGoogleAnalytics);</script></div></body></html><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8c5602eedc4c116b',t:'MTcyNjcxMTUzNS4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>