PageSourceSearch

https://horror-vacui.com/blogs/news

html horror-vacui.com collected 2026-09-26 16:57:40 UTC 257,623 bytes, 4,822 lines download raw bytes

1<!doctype html>
2<!--
3      ___                       ___           ___           ___
4     /  /\                     /__/\         /  /\         /  /\
5    /  /:/_                    \  \:\       /  /:/        /  /::\
6   /  /:/ /\  ___     ___       \  \:\     /  /:/        /  /:/\:\
7  /  /:/ /:/ /__/\   /  /\  ___  \  \:\   /  /:/  ___   /  /:/  \:\
8 /__/:/ /:/  \  \:\ /  /:/ /__/\  \__\:\ /__/:/  /  /\ /__/:/ \__\:\
9 \  \:\/:/    \  \:\  /:/  \  \:\ /  /:/ \  \:\ /  /:/ \  \:\ /  /:/
10  \  \::/      \  \:\/:/    \  \:\  /:/   \  \:\  /:/   \  \:\  /:/
11   \  \:\       \  \::/      \  \:\/:/     \  \:\/:/     \  \:\/:/
12    \  \:\       \__\/        \  \::/       \  \::/       \  \::/
13     \__\/                     \__\/         \__\/         \__\/
14--------------------------------------------------------------------
15#  Spark v2.7.0
16#  Documentation: https://fluorescent.co/help/spark/
17#  Purchase: https://themes.shopify.com/themes/spark/
18#  A product by Fluorescent: https://fluorescent.co/
19--------------------------------------------------------------------
20-->
21<html class="no-js" lang="en" style="--announcement-height: 1px;">
22<head>
22<script data-source-attribution="shopify.event_observer.bootstrap">
23(function(){let e=navigator,t=`prototype`,n=`sendBeacon`,r=e[n],i=fetch,a=XMLHttpRequest[t],{open:o,send:s}=a,c=`EventListener`,l=`add${c}`,u=`remove${c}`,d=EventTarget[t],f=d[l],p=d[u],m=e=>Error((e=document.currentScript)&&[e?.src,e?.id||e?.dataset?.sourceAttribution]),h=(e=[],t=0)=>(e.p=n=>e[t++%1e3]=n,[e,t=>(e.forEach(e.p=t),e.length=0)]),[g,_]=h(),[v,y]=h(),b,x=new WeakMap,S=e=>e&&g.p([e,b||[m()]]);d[l]=function(e,t,n){let r=this,i=t?.handleEvent||t,a=x.get(t),o=m();i?.call&&!a&&x.set(t,a=function(e){b=[o,e.type];try{i.call(t==i?this:t,e)}finally{b=null}}),v.p([e,o,a,r?.tagName||r+``,r?.id]),f.call(r,e,a||t,n)},d[u]=function(e,t,n){p.call(this,e,x.get(t)||t,n)},a.open=function(e,t){x.set(this,[t+``,e]),o.apply(this,arguments)},a.send=function(e){S(x.get(this)),s.call(this,e)},fetch=(e,t)=>(S([(e?.url||e)+``,t?.method]),i(e,t)),e[n]=(t,n)=>(S([t+``,``]),r.call(e,t,n)),setTimeout(()=>import("//horror-vacui.com/cdn/shopifycloud/storefront/assets/storefront/event_observer_reporter-ed358274.js").then(e=>e.$(_,y,f,i,`61810966677`)))})();
24//# sourceURL=event-observer-collector.js
25</script>
25
26
27
28    
29
30    
31
32    
33
34    
35
36<link id="TW_LINK" href="https://css.twik.io/6496146d980dc.css" onload="window.TWIK_SB && window.TWIK_SB()" rel="stylesheet"/>
36<script>!function(){window.TWIK_ID="6496146d980dc",localStorage.tw_init=1;var t=document.documentElement;if(window.TWIK_SB=function(){t.style.visibility="",t.style.opacity=""},window.TWIK_RS=function(){var t=document.getElementById("TW_LINK");t&&t.parentElement&&t.parentElement.removeChild(t)},setTimeout(TWIK_RS,localStorage.tw_init?2e3:6e3),setTimeout(TWIK_SB,localStorage.tw_init?250:1e3),document.body)return TWIK_RS();t.style.visibility="hidden",t.style.opacity=0}();</script>
36<script id="TW_SCRIPT" onload="window.TWIK_SB && window.TWIK_SB()" src="https://cdn.twik.io/tcs.js"></script>
36
37  <meta charset="UTF-8">
38  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
39  <meta name="viewport" content="width=device-width,initial-scale=1">
40  <meta name="google-site-verification" content="NbsxwWVHmLl0qkuvAvz-WrQxYNPg7UYwVRMdkcDhPrw" />
41  <link rel="canonical" href="https://horror-vacui.com/blogs/news">
42  <link rel="preconnect" href="https://cdn.shopify.com" crossorigin><link rel="shortcut icon" href="//horror-vacui.com/cdn/shop/files/favicon_1_32x32.jpg?v=1658138021" type="image/png"><title>News
43&ndash; HORROR VACUI</title>
44
45
46
47
48
49  
50
51
52
53
54<meta name="description" content="HORROR VACUI" />
55<meta property="og:url" content="https://horror-vacui.com/blogs/news">
56<meta property="og:site_name" content="HORROR VACUI">
57<meta property="og:type" content="website">
58<meta property="og:title" content="News">
59<meta property="og:description" content="HORROR VACUI">
60<meta property="og:image" content="http://horror-vacui.com/cdn/shop/files/IMG_0032_2250x4000.jpg?v=1762253358">
61<meta property="og:image:secure_url" content="https://horror-vacui.com/cdn/shop/files/IMG_0032_2250x4000.jpg?v=1762253358">
62
63
64
65<meta name="twitter:title" content="News">
66<meta name="twitter:description" content="HORROR VACUI">
67<meta name="twitter:card" content="summary_large_image">
68<meta name="twitter:image" content="https://horror-vacui.com/cdn/shop/files/IMG_0032_2250x4000.jpg?v=1762253358">
69<meta name="twitter:image:width" content="480">
70<meta name="twitter:image:height" content="480">
71
72  
72<script>
73  console.log('Spark v2.7.0 by Fluorescent');
74
75  document.documentElement.className = document.documentElement.className.replace('no-js', '');
76
77  window.theme = {
78    version: 'v2.7.0',
79    moneyFormat: "${{amount}}",
80    strings: {
81      name: "HORROR VACUI",
82      accessibility: {
83        play_video: "Play",
84        pause_video: "Pause"
85      },
86      product: {
87        no_shipping_rates: "Shipping rate unavailable",
88        country_placeholder: "Country\/Region",
89        review: "Write a review"
90      },
91      products: {
92        product: {
93          unavailable: "Unavailable",
94          unitPrice: "Unit price",
95          unitPriceSeparator: "per",
96          sku: "SKU"
97        }
98      },
99      quickCart: {
100        addProductQuantity: "Subtract product quantity",
101        removeProductQuantity: "Add product quantity",
102        removeProduct: "Remove",
103        quantity: "Quantity"
104      }
105    },
106    routes: {
107      root: "/",
108      cart: {
109        base: "/cart",
110        add: "/cart/add",
111        change: "/cart/change",
112        clear: "/cart/clear",
113        // Manual routes until Shopify adds support
114        shipping: "/cart/shipping_rates",
115      },
116      // Manual routes until Shopify adds support
117      products: "/products",
118      productRecommendations: "/recommendations/products",
119      predictive_search_url: '/search/suggest'
120    },
121  }
122
123  
124</script>
124
125
126  <style>
127  @font-face {
128  font-family: "EB Garamond";
129  font-weight: 400;
130  font-style: normal;
131  font-display: swap;
132  src: url("//horror-vacui.com/cdn/fonts/ebgaramond/ebgaramond_n4.f03b4ad40330b0ec2af5bb96f169ce0df8a12bc0.woff2") format("woff2"),
133       url("//horror-vacui.com/cdn/fonts/ebgaramond/ebgaramond_n4.73939a8b7fe7c6b6b560b459d64db062f2ba1a29.woff") format("woff");
134}
135
136  @font-face {
137  font-family: "EB Garamond";
138  font-weight: 400;
139  font-style: normal;
140  font-display: swap;
141  src: url("//horror-vacui.com/cdn/fonts/ebgaramond/ebgaramond_n4.f03b4ad40330b0ec2af5bb96f169ce0df8a12bc0.woff2") format("woff2"),
142       url("//horror-vacui.com/cdn/fonts/ebgaramond/ebgaramond_n4.73939a8b7fe7c6b6b560b459d64db062f2ba1a29.woff") format("woff");
143}
144
145  
146  @font-face {
147  font-family: "EB Garamond";
148  font-weight: 400;
149  font-style: normal;
150  font-display: swap;
151  src: url("//horror-vacui.com/cdn/fonts/ebgaramond/ebgaramond_n4.f03b4ad40330b0ec2af5bb96f169ce0df8a12bc0.woff2") format("woff2"),
152       url("//horror-vacui.com/cdn/fonts/ebgaramond/ebgaramond_n4.73939a8b7fe7c6b6b560b459d64db062f2ba1a29.woff") format("woff");
153}
154
155  @font-face {
156  font-family: "EB Garamond";
157  font-weight: 700;
158  font-style: normal;
159  font-display: swap;
160  src: url("//horror-vacui.com/cdn/fonts/ebgaramond/ebgaramond_n7.d08d282a03b4a9cde493a0a5c170eb41fd0a48a6.woff2") format("woff2"),
161       url("//horror-vacui.com/cdn/fonts/ebgaramond/ebgaramond_n7.7c8306185882f01a9ed6edf77ce46bbf9dd53b41.woff") format("woff");
162}
163
164  @font-face {
165  font-family: "EB Garamond";
166  font-weight: 400;
167  font-style: italic;
168  font-display: swap;
169  src: url("//horror-vacui.com/cdn/fonts/ebgaramond/ebgaramond_i4.8a8d350a4bec29823a3db2f6d6a96a056d2e3223.woff2") format("woff2"),
170       url("//horror-vacui.com/cdn/fonts/ebgaramond/ebgaramond_i4.ac4f3f00b446eda80de7b499ddd9e019a66ddfe2.woff") format("woff");
171}
172
173  @font-face {
174  font-family: "EB Garamond";
175  font-weight: 700;
176  font-style: italic;
177  font-display: swap;
178  src: url("//horror-vacui.com/cdn/fonts/ebgaramond/ebgaramond_i7.a554120900e2a1ba4ba64bd80ad36a8fd44041f5.woff2") format("woff2"),
179       url("//horror-vacui.com/cdn/fonts/ebgaramond/ebgaramond_i7.7101ca1f5cf9647cc8a47fe8b7268d197f62e702.woff") format("woff");
180}
181
182
183  :root {
184    --color-text: #1d1d1d;
185    --color-text-meta: rgba(29, 29, 29, 0.6);
186    --color-text-link: #000000;
187    --color-text-error: #C71B1B;
188    --color-text-success: #21b646;
189
190    --color-background: #ffffff;
191    --color-background-transparent: rgba(255, 255, 255, 0.8);
192    --color-border: #f4f4f4;
193    --color-overlay: #181818;
194    --color-overlay-transparent: rgba(24, 24, 24, 0.6);
195
196    --color-background-meta: #f5f5f5;
197    --color-background-darker-meta: #e8e8e8;
198    --color-foreground-meta: rgba(29, 29, 29, 0.6);
199
200    --color-border-input: #f4f4f4;
201    --color-text-input: #1d1d1d;
202
203    --color-background-button: #ffe9e8;
204    --color-background-button-hover: #ff8782;
205    --color-text-button: #1d1d1d;
206    --color-icon: rgba(29, 29, 29, 0.4);
207    --color-icon-darker: rgba(29, 29, 29, 0.6);
208
209    --color-background-sale-badge: #181818;
210    --color-text-sale-badge: #ffffff;
211    --color-background-sold-badge: #fbd3cc;
212    --color-text-sold-badge: #000000;
213
214    --color-background-contrast: #ffffff;
215    --color-background-meta-contrast: #f5f5f5;
216    --color-background-darker-meta-contrast: #e8e8e8;
217    --color-foreground-meta-contrast: rgba(0, 0, 0, 0.6);
218    --color-text-contrast: #000000;
219    --color-text-meta-contrast: rgba(0, 0, 0, 0.6);
220    --color-border-contrast: #3d3d3d;
221    --color-background-button-contrast: #000000;
222    --color-background-button-hover-contrast: #333333;
223    --color-text-button-contrast: #ffffff;
224    --color-text-link-contrast: #000000;
225
226    --color-text-header: #ffffff;
227    --color-background-header: #fbd3cc;
228    --color-background-header-transparent: rgba(251, 211, 204, 0);
229    --color-icon-header: #ffffff;
230    --color-shadow-header: rgba(0, 0, 0, 0.15);
231
232    --color-background-footer: #ffffff;
233    --color-text-footer: #1d1d1d;
234
235    --color-text-popover: #131313;
236    --color-text-meta-popover: rgba(19, 19, 19, 0.6);
237    --color-background-popover: #f4f4f4;
238    --color-background-meta-popover: #eaeaea;
239    --color-background-darker-meta-popover: #dddddd;
240    --color-background-button-popover: #131313;
241    --color-background-button-hover-popover: #464646;
242    --color-text-button-popover: #131313;
243    --color-border-popover: #d4d4d4;
244    --color-border-meta-popover: #a1a1a1;
245
246    --button-style: uppercase;
247    --button-shape: 0;
248
249    --font-logo: "EB Garamond", serif;
250    --font-logo-weight: 400;
251    --font-logo-style: normal;
252    --logo-font-size: 37px;
253    --logo-text-transform: none;
254    --logo-letter-spacing: 0.0em;
255
256    --font-heading: "EB Garamond", serif;
257    --font-heading-weight: 400;
258    --font-heading-style: normal;
259    --font-heading-light-weight: light;
260    --font-heading-text-transform: none;
261    --font-heading-base-letter-spacing: 0.025em;
262    --font-heading-base-size: 48px;
263
264    --font-body: "EB Garamond", serif;
265    --font-body-weight: 400;
266    --font-body-style: normal;
267    --font-body-italic: italic;
268    --font-body-bold-weight: 700;
269    --font-body-base-letter-spacing: 0.05em;
270    --font-body-base-size: 16px;
271    --font-body-base-line-height: 1.56;
272
273    --font-product-title-text-transform: none;
274    --font-product-title-base-letter-spacing: 0.125em;
275
276    /* Typography */
277    --font-size-heading-1-large: 64px;
278    --line-height-heading-1-large: 44;
279
280    --font-size-heading-1-base: 48px;
281    --line-height-heading-1-base: 1.08;
282
283    --font-size-heading-2-large: 36px;
284    --line-height-heading-2-large: 1.22;
285
286    --font-size-heading-2-base: 28px;
287    --line-height-heading-2-base: 1.29;
288
289    --font-size-heading-3-base: 24px;
290    --line-height-heading-3-base: 1.33;
291
292    --font-size-heading-4-base: 20px;
293    --line-height-heading-4-base: 1.4;
294
295    --font-size-body-large: 21px;
296    --line-height-body-large: 1.5;
297
298    --font-size-body-base: 16px;
299    --line-height-body-base:  1.56;
300
301    --font-size-body-small: 14px;
302    --line-height-body-small: 1.75;
303
304    --font-size-body-x-small: 12px;
305    --line-height-body-x-small: 1.85;
306
307    /* Shopify pay specific */
308    --payment-terms-background-color: #f5f5f5;
309  }
310</style>
311  <link href="//horror-vacui.com/cdn/shop/t/26/assets/theme.css?v=8871305132358273461728237194" rel="stylesheet" type="text/css" media="all" />
312  <link href="//horror-vacui.com/cdn/shop/t/26/assets/custom.css?v=98528082273817684791728237194" rel="stylesheet" type="text/css" media="all" />
313  
313<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
313<meta name="facebook-domain-verification" content="vi3sjvdy3nffgs94idlybhlzp5bex0">
314<meta name="google-site-verification" content="kZ8ort0vE-GMtcBKrk0bK34iIe9T52VI26qOsFm20wE">
315<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/61810966677/digital_wallets/dialog">
316<meta id="in-context-paypal-metadata" data-shop-id="61810966677" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD">
317<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="alternate" type="application/atom+xml" title="Feed" href="/blogs/news.atom" />
318<link rel="alternate" hreflang="x-default" href="https://horror-vacui.com/blogs/news">
319<link rel="alternate" hreflang="en" href="https://horror-vacui.com/blogs/news">
320<link rel="alternate" hreflang="en-GB" href="https://horror-vacui.com/en-im/blogs/news">
321<link rel="alternate" hreflang="en-CA" href="https://horror-vacui.com/en-za/blogs/news">
322<link rel="alternate" hreflang="en-MX" href="https://horror-vacui.com/en-za/blogs/news">
323<link rel="alternate" hreflang="en-JP" href="https://horror-vacui.com/en-jp/blogs/news">
324<link rel="alternate" hreflang="en-AU" href="https://horror-vacui.com/en-au/blogs/news">
325<link rel="alternate" hreflang="en-KR" href="https://horror-vacui.com/en-kr/blogs/news">
326<link rel="alternate" hreflang="en-CH" href="https://horror-vacui.com/en-ch/blogs/news">
327<link rel="alternate" hreflang="en-SE" href="https://horror-vacui.com/en-se/blogs/news">
328<link rel="alternate" hreflang="en-DK" href="https://horror-vacui.com/en-dk/blogs/news">
329<link rel="alternate" hreflang="en-TW" href="https://horror-vacui.com/en-tw/blogs/news">
330<link rel="alternate" hreflang="en-CN" href="https://horror-vacui.com/en-cn/blogs/news">
331<link rel="alternate" hreflang="en-SG" href="https://horror-vacui.com/en-sg/blogs/news">
332<link rel="alternate" hreflang="en-AE" href="https://horror-vacui.com/en-ae/blogs/news">
333<script async="async" src="/checkouts/internal/preloads.js?locale=en-US"></script>
vendor: 1 bytes, line 333
333
334<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":61810966677,"countryCode":"DE","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/61810966677","merchantName":"HORROR VACUI","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","maestro","masterCard","amex"],"total":{"type":"pending","label":"HORROR VACUI","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 334
334
335<script id="shopify-features" type="application/json">{"accessToken":"af8fa094312dc901e07a2cc60f6d78d4","betas":["rich-media-storefront-analytics"],"domain":"horror-vacui.com","predictiveSearch":true,"shopId":61810966677,"locale":"en"}</script>
vendor: 1 bytes, line 335
335
336<script>var Shopify = Shopify || {};
337Shopify.shop = "horror-vacui-shop.myshopify.com";
338Shopify.locale = "en";
339Shopify.currency = {"active":"USD","rate":"1.12"};
340Shopify.country = "US";
341Shopify.theme = {"name":"FW2024 shopify-horrorvacui\/main","id":174423933275,"schema_name":"Spark","schema_version":"2.7.0","theme_store_id":null,"role":"main"};
342Shopify.theme.handle = "null";
343Shopify.theme.style = {"id":null,"handle":null};
344Shopify.cdnHost = "horror-vacui.com/cdn";
345Shopify.routes = Shopify.routes || {};
346Shopify.routes.root = "/";
347Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js";
348Shopify.SignInWithShop = Shopify.SignInWithShop || {};
349Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {};
350Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 350
350
351<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 351
351
352<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 352
352
353<script>
354  window.Shopify = window.Shopify || {};
355  window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {};
356  window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 };
357  window.Shopify.SignInWithShop.eligible = true;
358</script>
vendor: 1 bytes, line 358
358
359<script id="shop-js-analytics" type="application/json">{"pageType":"blog"}</script>
vendor: 1 bytes, line 359
359
360<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"></script>
vendor: 1 bytes, line 360
360
361<script type="module">
362  await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js");
363
364  window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true});
365
366</script>
vendor: 1 bytes, line 366
366
367<script>
368  window.Shopify = window.Shopify || {};
369  if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {};
370  window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]};
371</script>
vendor: 1 bytes, line 371
371
372<script>(function() {
373  var isLoaded = false;
374  function asyncLoad() {
375    if (isLoaded) return;
376    isLoaded = true;
377    var urls = ["https:\/\/cdn.nfcube.com\/c001648ffe72672265fe5262ba5efb76.js?shop=horror-vacui-shop.myshopify.com","https:\/\/static.klaviyo.com\/onsite\/js\/XBSsrf\/klaviyo.js?company_id=XBSsrf\u0026shop=horror-vacui-shop.myshopify.com","\/\/d1liekpayvooaz.cloudfront.net\/apps\/customizery\/customizery.js?shop=horror-vacui-shop.myshopify.com"];
378    for (var i = 0; i < urls.length; i++) {
379      var s = document.createElement('script');
380      s.type = 'text/javascript';
381      s.async = true;
382      s.src = urls[i];
383      var x = document.getElementsByTagName('script')[0];
384      x.parentNode.insertBefore(s, x);
385    }
386  };
387  if(window.attachEvent) {
388    window.attachEvent('onload', asyncLoad);
389  } else {
390    window.addEventListener('load', asyncLoad, false);
391  }
392})();</script>
vendor: 1 bytes, line 392
392
393<script id="__st">var __st={"a":61810966677,"offset":7200,"reqid":"c5815a7e-1255-46f1-b9e0-032dc864dcd1-1790441860","pageurl":"horror-vacui.com\/blogs\/news","s":"blogs-84267368597","u":"6a8340561520","p":"blog","rtyp":"blog","rid":84267368597};</script>
vendor: 1 bytes, line 393
393
394<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 394
394
395<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 395
395
396<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//horror-vacui.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 396
396
397<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//horror-vacui.com/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
397<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 397
397
398<script>
399  window.Shopify = window.Shopify || {};
400  window.Shopify.MCP = window.Shopify.MCP || {};
401  window.Shopify.MCP.enabled = true;
402  window.Shopify.MCP.shop = "horror-vacui-shop.myshopify.com";
403  window.Shopify.MCP.mcpEndpoint = "https:\/\/horror-vacui.com\/api\/mcp";
404  window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n  - What is your return policy?\n  - What is your shipping policy?\n  - What is your phone number?\n  - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}];
405</script>
vendor: 1 bytes, line 405
405
406<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/horror-vacui.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})();
407</script>
vendor: 1 bytes, line 407
407
408<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://horror-vacui.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}};
409</script>
vendor: 1 bytes, line 409
409
410<script data-source-attribution="shopify.dynamic_checkout.buyer_consent">
411  function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent);
412</script>
vendor: 1 bytes, line 412
412
413<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}}));
414</script>
vendor: 1 bytes, line 414
414
415<script id='scb4127' type='text/javascript' async='' src='https://horror-vacui.com/cdn/shopifycloud/privacy-banner/storefront-banner.js'></script>
415<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://horror-vacui.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous">
416<style id="shopify-accelerated-checkout-cart">
417        #shopify-buyer-consent {
418  margin-top: 1em;
419  display: inline-block;
420  width: 100%;
421}
422
423#shopify-buyer-consent.hidden {
424  display: none;
425}
426
427#shopify-subscription-policy-button {
428  background: none;
429  border: none;
430  padding: 0;
431  text-decoration: underline;
432  font-size: inherit;
433  cursor: pointer;
434}
435
436#shopify-subscription-policy-button::before {
437  box-shadow: none;
438}
439
440      </style>
441
442<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
442
443<link rel="dns-prefetch" href="https://cdn.secomapp.com/">
444<link rel="dns-prefetch" href="https://ajax.googleapis.com/">
445<link rel="dns-prefetch" href="https://cdnjs.cloudflare.com/">
446<link rel="preload" as="stylesheet" href="//horror-vacui.com/cdn/shop/t/26/assets/sca-pp.css?v=178374312540912810101728237194">
447
448<link rel="stylesheet" href="//horror-vacui.com/cdn/shop/t/26/assets/sca-pp.css?v=178374312540912810101728237194">
449 
449<script>
450  
451  SCAPPShop = {};
452    
453  </script>
453 
454<script type="text/javascript">
455  window.Rivo = window.Rivo || {};
456  window.Rivo.common = window.Rivo.common || {};
457  window.Rivo.common.shop = {
458    permanent_domain: 'horror-vacui-shop.myshopify.com',
459    currency: "EUR",
460    money_format: "${{amount}}",
461    id: 61810966677
462  };
463  
464
465  window.Rivo.common.template = 'blog';
466  window.Rivo.common.cart = {};
467  window.Rivo.common.vapid_public_key = "BJuXCmrtTK335SuczdNVYrGVtP_WXn4jImChm49st7K7z7e8gxSZUKk4DhUpk8j2Xpiw5G4-ylNbMKLlKkUEU98=";
468  window.Rivo.global_config = {"asset_urls":{"loy":{"api_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_rivo_api.js?v=1711433133","lp_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_rivo_lp.js?v=1728357978","lp_css":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_rivo_lp.css?v=1726524319","profile_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_rivo_profile.js?v=1728357977","profile_css":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_rivo_profile.css?v=1728531230","init_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_loy_init.js?v=1728219104","referrals_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_loy_referrals.js?v=1711433131","referrals_css":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_loy_referrals.css?v=1700287043","widget_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0037\/2110\/1430\/t\/963\/assets\/ba_loy_widget.js?v=1728252181","widget_css":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_loy_widget.css?v=1692840875","page_init_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_loy_page_init.js?v=1711433130","page_widget_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_loy_page_widget.js?v=1711432435","page_widget_css":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_loy_page.css?v=1693059047","page_preview_js":"\/assets\/msg\/loy_page_preview.js","app_proxy_applications_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/app_proxy_application.js?v=1708835151","app_proxy_membership_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/app_proxy_membership.js?v=1708835152"},"forms":{"init_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_forms_init.js?v=1711433134","widget_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_forms_widget.js?v=1711433135","forms_css":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_forms.css?v=1691714518"},"global":{"helper_js":"https:\/\/cdn.shopify.com\/s\/files\/1\/0194\/1736\/6592\/t\/1\/assets\/ba_tracking.js?v=1710750015"}},"proxy_paths":{"loy":"\/apps\/ba-loy","app_metrics":"\/apps\/ba-loy\/app_metrics","push_subscription":"\/apps\/ba-loy\/push"},"aat":["loy"],"pv":false,"sts":false,"bam":false,"batc":false,"base_money_format":"€ {{amount_with_comma_separator}}","online_store_version":2,"loy_js_api_enabled":false,"hide_console_ad":false,"shop":{"id":61810966677,"name":"HORROR VACUI","domain":"horror-vacui.com"},"theme_extension_local_assets":false};
469
470  
471
472    window.Rivo.loy_config = {"brand_theme_settings":{"enabled":false,"button_bg":"#2932fc","header_bg":"#2932fc","desc_color":"#737376","icon_color":"#3a3a3a","link_color":"#2932fc","visibility":"both","cards_shape":"rounded","hide_widget":false,"launcher_bg":"#286ef8","mobile_icon":"star","mobile_text":"Rewards","title_color":"#212b36","banner_image":"","desktop_icon":"star","desktop_text":"Rewards","inputs_shape":"rounded","primary_font":"Inter","buttons_shape":"rounded","mobile_layout":"icon_with_text","primary_color":"#2932fc","desktop_layout":"icon_with_text","launcher_shape":"circle","secondary_font":"Inter","container_shape":"rounded","mobile_placement":"right","button_text_color":"#fff","desktop_placement":"right","header_text_color":"#fff","powered_by_hidden":false,"launcher_text_color":"#ffffff","mobile_side_spacing":20,"desktop_side_spacing":20,"panel_order_settings":{"vip":3,"points":1,"referrals":2},"mobile_bottom_spacing":20,"desktop_bottom_spacing":20,"hide_widget_permanently":false,"hide_widget_launcher_on_mobile":false},"launcher_style_settings":{"enabled":false,"button_bg":"#2932fc","header_bg":"#2932fc","de
472sc_color":"#737376","icon_color":"#3a3a3a","link_color":"#2932fc","visibility":"both","cards_shape":"rounded","hide_widget":false,"launcher_bg":"#286ef8","mobile_icon":"star","mobile_text":"Rewards","title_color":"#212b36","banner_image":"","desktop_icon":"star","desktop_text":"Rewards","inputs_shape":"rounded","primary_font":"Inter","buttons_shape":"rounded","mobile_layout":"icon_with_text","primary_color":"#2932fc","desktop_layout":"icon_with_text","launcher_shape":"circle","secondary_font":"Inter","container_shape":"rounded","mobile_placement":"right","button_text_color":"#fff","desktop_placement":"right","header_text_color":"#fff","powered_by_hidden":false,"launcher_text_color":"#ffffff","mobile_side_spacing":20,"desktop_side_spacing":20,"panel_order_settings":{"vip":3,"points":1,"referrals":2},"mobile_bottom_spacing":20,"desktop_bottom_spacing":20,"hide_widget_permanently":false,"hide_widget_launcher_on_mobile":false},"points_program_enabled":false,"referral_program_enabled":false,"membership_program_enabled":false,"vip_program_enabled":false,"vip_program_tier_type":"points_earned","vip_program_period":"lifetime","floating_widget_settings":{"enabled":false,"button_bg":"#2932fc","header_bg":"#2932fc","desc_color":"#737376","icon_color":"#3a3a3a","link_color":"#2932fc","visibility":"both","cards_shape":"rounded","hide_widget":false,"launcher_bg":"#286ef8","mobile_icon":"star","mobile_text":"Rewards","title_color":"#212b36","banner_image":"","desktop_icon":"star","desktop_text":"Rewards","inputs_shape":"rounded","primary_font":"Inter","buttons_shape":"rounded","mobile_layout":"icon_with_text","primary_color":"#2932fc","desktop_layout":"icon_with_text","launcher_shape":"circle","secondary_font":"Inter","container_shape":"rounded","mobile_placement":"right","button_text_color":"#fff","desktop_placement":"right","header_text_color":"#fff","powered_by_hidden":false,"launcher_text_color":"#ffffff","mobile_side_spacing":20,"desktop_side_spacing":20,"panel_order_settings":{},"mobile_bottom_spacing":20,"desktop_bottom_spacing":20,"hide_widget_permanently":false,"hide_widget_launcher_on_mobile":false,"desktop_launcher_icon":null,"mobile_launcher_icon":null},"domain_name":"loyalty.rivo.io","font_settings":{},"translations":{"vip_perks":"Perks","vip_tiers":"VIP Tiers","general_by":"by","vip_reward":"VIP reward","vip_status":"VIP Status","general_day":"Day","social_like":"Like","social_share":"Share","vip_benefits":"Benefits","general_error":"Hmm, something went wrong, please try again shortly","general_month":"Month","general_point":"Point","general_spend":"you spend","general_spent":"Spent","social_follow":"Follow","tos_expiry_at":"Reward expires on {{expiry_date}}.","vip_tier_desc":"Gain access to exclusive rewards.","general_credit":"Credit","general_points":"Points","general_redeem":"Redeem","general_reward":"reward","vip_tier_spend":"Spend {{amount}}","general_credits":"Credits","general_go_back":"Go back","general_rewards":"Rewards","general_sign_in":"Sign in","general_sign_up":"Sign up","referrals_title":"Referral Program","review_complete":"Post a product review","general_share_on":"Share on","general_you_have":"You have","tos_free_product":"Reward only applies to {{product_name}}","acct_creation_btn":"Start Earning","general_edit_date":"Edit Date","general_save_date":"Save date","general_signed_up":"signed up","member_point_desc":"Earn points and turn these into rewards!","referral_complete":"Complete a Referral","tos_expiry_months":"Expires {{expiry_months}} month(s) after being redeemed.","vip_tier_achieved":"Unlocked {{tier_name}}","vip_tier_added_to":"Added to {{tier_name}}","acct_creation_desc":"Get rewarded for being an awesome customer","general_apply_code":"Apply code","general_share_link":"Share your Personal Link","referrals_email_to":"To","vip_achieved_until":"Achieved until","vip_tier_to_unlock":"to unlock","visitor_point_desc":"Earn points and turn these into rewards!","acct_creation_title":"Join and Earn Rewards","general_reward_show":"Show","member_header_title":"{points}","member_point_header":"Points","referrals_completed":"referrals completed so far","vip_tier_dropped_to":"Fell to {{tier_name}}","vip_tier_on_highest":"You did it! You're on the highest tier 🎉","general_balance_text":"store credit","general_past_rewards":"Past rewards","general_product_page":"product page","general_ways_to_earn":"Ways to earn","general_your_rewards":"Your rewards","referrals_email_send":"Send email","referrals_get_reward":"Get your","referrals_share_link":"Share this link with a friend for them to claim the reward","social_facebook_like"
472:"Like page on Facebook","social_tiktok_follow":"Follow on TikTok","social_twitter_share":"Share link on Twitter","tos_min_order_amount":"Applies to all orders over {{min_order_amount}}.","vip_tier_earn_points":"Earn {{points}} Points","vip_tier_retained_to":"Kept {{tier_name}}","vip_tier_vip_history":"VIP History","visitor_header_title":"🏆 Rewards Program","visitor_point_header":"Earn Points","acct_creation_sign_in":"Already a member?","general_cancel_points":"Points canceled","general_no_points_yet":"No Points yet","general_refund_points":"Points refunded","general_sms_subscribe":"Subscribe to SMS","member_header_caption":"Your points","social_facebook_share":"Share link on Facebook","social_twitter_follow":"Follow on Twitter","vip_reward_earned_via":"Earned via {{vip_tier_name}} tier","vip_you_have_achieved":"You've achieved","general_no_rewards_yet":"No rewards yet","general_place_an_order":"Place an order","general_upload_receipt":"Submit a Receipt","general_ways_to_redeem":"Ways to redeem","referrals_claim_reward":"Claim your gift","referrals_code_invalid":"This referral code is invalid","referrals_email_invite":"Refer friends by email","referrals_visitor_desc":"Refer a friend who makes a purchase and both of you will claim rewards.","review_complete_points":"{{points_amount}} Points for every review posted","visitor_header_caption":"Join now and unlock awesome rewards","general_birthday_reward":"Celebrate with a reward","general_discount_amount":"points for ${{discount_amount}} off","general_email_subscribe":"Subscribe to Emails","general_expiration_date":"Expiration Date","general_no_activity_yet":"No activity yet","general_placed_an_order":"Placed an order","general_points_activity":"Points History","general_share_via_email":"Share via Email","general_upcoming_reward":"Upcoming reward","general_you_have_points":"You have {{points}} points","membership_order_placed":"Credits earned from placing an order","referrals_email_message":"Message","referrals_invalid_email":"Please enter a valid email address","referrals_referral_code":"Your referral link to share","social_instagram_follow":"Follow on Instagram","tos_apply_to_collection":"Only for products in specific collections.","tos_max_shipping_amount":"Maximum shipping amount of {{max_shipping_amount}}.","vip_tier_no_vip_history":"No VIP membership history yet","general_enter_valid_date":"Please enter a valid date","general_points_for_every":"Points for every","general_uploaded_receipt":"Submitted a Receipt","referral_complete_points":"{{points_amount}} Points for every referral completed","referrals_call_to_action":"Refer friends and earn","referrals_claimed_reward":"Here's your","referrals_create_account":"Create an Account","referrals_status_blocked":"blocked","referrals_status_pending":"pending","referrals_your_referrals":"Your referrals","general_click_to_see_more":"View My Rewards Account","general_redeemed_a_reward":"Redeemed a Reward","general_use_discount_code":"Use this discount code on your next order!","referrals_already_visited":"Already visited this page","referrals_general_invalid":"Sorry, looks like this referral is invalid","referrals_referred_reward":"They will get","referrals_referrer_reward":"You will get","general_celebrate_birthday":"Celebrate a birthday","general_how_to_earn_points":"How do I earn Points?","loyalty_page_rewards_title":"Rewards","referrals_no_referrals_yet":"No referrals yet","referrals_progran_disabled":"This referral program is disabled","referrals_status_completed":"completed","review_complete_past_tense":"Posted a product review","general_add_product_to_cart":"Add product to cart","general_balance_text_plural":"Credits","general_fallback_first_name":"there","general_not_enough_earnings":"Not enough earnings to redeem","general_were_awarded_points":"were awarded points","general_manual_points_adjust":"manual points adjustment","referral_complete_past_tense":"Completed a Referral","referrals_similar_ip_invalid":"We are unable to process referrals within the same IP address","vip_tier_orders_placed_count":"Place {{amount}} Orders","general_activate_store_credit":"Activate Store Credit","general_celebrate_anniversary":"Celebrate Loyalty Anniversary","general_redeemed_store_credit":"Redeemed Store Credit","loyalty_page_rewards_subtitle":"You have the following rewards ready to use","checkout_ui_redeem_points_desc":"You have {{points}} points! Redeem for discounts on this order.","general_discount_amount_coupon":"${{discount_amount}} off coupon","general_have_not_earned_points":"You haven't earned any Points yet.","referrals_email_to_placeholder":"Add a comma-separated list of emails","referrals_name_must_be_present":"Please enter your first name","checkout_ui_redeem_points_login":"Log in","checkout_ui_redeem_points_title":"Redeem your points","general_add_points_default_note":"Points granted by points import","general_celebrate_your_birthday":"Let's celebrate your birthday! 🎉 Please give us 30 days notice - otherwise, you'll have to wait another year.","general_please_choose_an_option":"Please choose an option from the","general_redeem_error_max_points":"Exceeded maximum points to spend","general_redeem_error_min_points":"Did not meet minimum points to redeem","loyalty_page_banner_earn_button":"Earn points","loyalty_page_rewards_no_rewards":"No rewards yet","loyalty_page_ways_to_earn_title":"Ways to Earn","referrals_email_already_claimed":"This email has already been claimed","referrals_general_invalid_title":"We're Sorry","social_facebook_like_past_tense":"Liked a page on Facebook","social_tiktok_follow_past_tense":"Followed on TikTok","
472social_twitter_share_past_tense":"Shared a link on Twitter","loyalty_page_banner_login_button":"Sign In","loyalty_page_upload_receipt_help":"Upload a receipt within the last 30 days to earn points. Please lay the receipt on a flat surface and take a photo from a close distance.","social_facebook_share_past_tense":"Shared a link on Facebook","social_twitter_follow_past_tense":"Followed on Twitter","account_slideout_home_login_title":"Sign in to manage your account","general_points_for_judgeme_review":"JudgeMe review","loyalty_page_banner_redeem_button":"Redeem Rewards","loyalty_page_subscribe_email_help":"Subscribe to our email list and earn points","loyalty_page_ways_to_redeem_title":"Ways to Redeem","referrals_account_already_claimed":"You already have an account. You can invite your friends to win rewards!","checkout_ui_redeemed_rewards_title":"Your rewards","general_reset_removal_default_note":"Existing points removed for points reset from import","loyalty_page_customer_birthday_day":"Day","loyalty_page_upload_receipt_attach":"Attach File","loyalty_page_upload_receipt_button":"Submit Receipt","loyalty_page_ways_to_earn_subtitle":"Earn points by completing these actions","referrals_your_referrals_show_here":"Your referrals will show here.","social_instagram_follow_past_tense":"Followed on Instagram","account_slideout_orders_login_title":"Sign in to view your orders","checkout_ui_points_estimation_title":"Complete this purchase to earn up to {{points}} points","checkout_ui_refer_friends_login_url":"account\/login?return_url=\/account\u0026email={{customer_email}}","general_loyalty_program_and_rewards":"Loyalty Program \u0026 Rewards","general_your_rewards_will_show_here":"Your rewards will show here.","loyalty_page_banner_logged_in_title":"Welcome to the program","loyalty_page_banner_register_button":"Join Now","loyalty_page_explainer_step_1_title":"Signup","loyalty_page_explainer_step_2_title":"Earn","loyalty_page_explainer_step_3_title":"Redeem","loyalty_page_subscribe_email_button":"Subscribe","loyalty_page_upload_receipt_no_file":"Please select a file to upload","loyalty_page_upload_receipt_success":"Thanks! Your receipt will be reviewed shortly","membership_tier_unlocked_past_tense":"Membership Signup","referrals_email_message_placeholder":"Customize your referral message. The referral link will be automatically added.","account_slideout_profile_login_title":"Sign in to manage your profile","checkout_ui_redeem_points_login_desc":"to view your points balance and discover rewards available for redemption.","loyalty_page_banner_logged_out_title":"Join our Loyalty Program","loyalty_page_customer_birthday_month":"Month","loyalty_page_customer_birthday_title":"Celebrate your birthday","loyalty_page_ways_to_redeem_subtitle":"Redeem points for these rewards","checkout_ui_points_estimation_subtext":"Loyalty points can be redeemed for rewards on future purchases. Actual points awarded may differ if other discounts are applied.","checkout_ui_refer_friends_login_title":"Claim your points from this purchase !","general_celebrate_birthday_past_tense":"Celebrated a birthday","account_dashboard_activity_block_title":"Your Activity","account_dashboard_member_card_cta_text":"View Rewards","account_dashboard_referral_block_title":"Refer a friend","general_reset_new_balance_default_note":"Points reset to new balance by points import","loyalty_page_explainer_logged_in_title":"Hi \u003cspan rivo-x-data rivo-x-text=\"$store.customer.first_name\"\u003e\u003c\/span\u003e, you have \u003cstrong\u003e\u003cspan rivo-x-data rivo-x-text=\"$store.customer.points_tally\"\u003e\u003c\/span\u003e\u003c\/strong\u003e Points","loyalty_page_explainer_step_1_subtitle":"Create an account on our store","loyalty_page_explainer_step_2_subtitle":"Earn points for shopping","loyalty_page_explainer_step_3_subtitle":"Redeem points for discounts","loyalty_page_vip_tiers_logged_in_title":"VIP Tiers","membership_recurring_signup_past_tense":"Recurring Credit","loyalty_page_activity_table_header_date":"Date","loyalty_page_activity_table_no_activity":"No activity yet","loyalty_page_explainer_logged_out_title":"How it Works","loyalty_page_vip_tiers_logged_out_title":"VIP Tiers","account_dashboard_member_card_body_title":"You have \u003cstrong\u003e\u003cspan rivo-x-data rivo-x-text=\"$store.customer.pretty_points_tally\"\u003e\u003c\/span\u003e\u003c\/strong\u003e Points","checkout_ui_redeem_points_alternate_name":"points","checkout_ui_redeemed_rewards_description":"Your rewards available to use","checkout_ui_redeemed_rewards_login_title":"Log in","checkout_ui_refer_friends_referral_title":"Refer a Friend","general_celebrate_anniversary_past_tense":"Celebrated Loyalty Anniversary","loyalty_page_activity_expiration_warning":"Expiration Date: \u003cspan rivo-x-data rivo-x-text=\"$store.customer.points_expiry\"\u003e\u003c\/span\u003e","loyalty_page_customer_birthday_save_date":"Save Date","referrals_create_account_to_claim_coupon":"Create an Account to claim your coupon","account_dashboard_referral_block_subtitle":"Give your friends a reward and claim your own when they make a purchase","checkout_ui_redeemed_rewards_select_label":"Select a Reward","loyalty_page_activity_table_header_action":"Activity","loyalty_page_banner_logged_in_description":"As a member, you will earn points for shopping","loyalty_page_explainer_logged_in_subtitle":"Here's an overview of your current points balance and recent activity","loyalty_page_vip_tiers_logged_in_subtitle":"You are on the \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.tier?.name\"\u003e\u003c\/span\u003e tier","account_dashboard_member_card_header_title":"Welcome \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.first_name\"\u003e\u003c\/span\u003e","account_dashboard_vip_tiers_progress_t
472itle":"VIP Tier Status","general_converted_to_credits_external_note":"Converted your points balance to store credit","general_converted_to_credits_internal_note":"Converted from points to store credit","loyalty_page_banner_logged_out_description":"Join for free and begin earning points \u0026 rewards every time you shop.","loyalty_page_vip_tiers_logged_out_subtitle":"Join our VIP loyalty program to unlock exclusive rewards available only to members.","account_dashboard_member_card_body_subtitle":"You're on the \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.tier?.name\"\u003e\u003c\/span\u003e tier","account_dashboard_referral_block_share_html":"\u003ca href=\"\/pages\/refer-a-friend\"\u003eEmail your link to friends\u003c\/a\u003e or \u003ca href=\"\/pages\/refer-a-friend?popup_panel=email_stats\"\u003eget your stats\u003c\/a\u003e","checkout_ui_refer_friends_login_description":"Log in or register to activate your loyalty account, redeem your points and access your special offers.","loyalty_page_activity_table_header_earnings":"Points","membership_recurring_anniversary_past_tense":"Membership Anniversary Credits","account_dashboard_unused_rewards_block_title":"Use your rewards","checkout_ui_redeem_incremental_earnings_desc":"How much of your ${{balance}} in balance would you like to redeem?","checkout_ui_refer_friends_login_button_title":"Activate my account","general_order_placed_store_credit_multiplier":"Earn cash back for every $1 spent","loyalty_page_vip_tiers_progress_column_title":"Tier Status","referrals_email_your_friend_has_referred_you":"Your friend has referred you to {{shop_name}}","account_dashboard_vip_tiers_progress_subtitle":"Earn \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.next_tier?.formatted_to_spend_or_earn\"\u003e\u003c\/span\u003e points to reach the \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.next_tier?.name\"\u003e\u003c\/span\u003e tier.","checkout_ui_redeem_incremental_earnings_login":"Log in","checkout_ui_redeem_incremental_earnings_title":"Redeem store balance","referrals_email_checkout_out_and_claim_reward":"Check out the referral link and claim a free reward.","account_dashboard_rewards_progress_block_title":"Earn more rewards","checkout_ui_redeem_points_select_discount_desc":"Please select a discount","checkout_ui_redeemed_rewards_login_description":"to view your rewards available to use.","checkout_ui_refer_friends_referral_description":"Share your referral link with friends and earn rewards each time a new friend makes a purchase.","account_dashboard_unused_rewards_block_subtitle":"Use your previously redeemed rewards:","checkout_ui_redeem_points_select_discount_label":"Select Discount","checkout_ui_redeemed_rewards_select_description":"Please select a reward","checkout_ui_refer_friends_referral_button_title":"Refer a Friend","loyalty_page_vip_tiers_progress_column_subtitle":"Earn \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.next_tier?.formatted_to_spend_or_earn\"\u003e\u003c\/span\u003e points to reach the \u003cspan rivo-x-data rivo-x-text=\"$store.customer?.current_vip_tier_info?.next_tier?.name\"\u003e\u003c\/span\u003e tier.","account_dashboard_unused_rewards_block_date_text":"Redeemed on: {{date}}","account_dashboard_referral_block_copy_button_text":"Copy","account_dashboard_rewards_progress_block_subtitle":"Earn another \u003cspan rivo-x-data rivo-x-text=\"$store.customer.pretty_points_amount_to_next_reward\"\u003e\u003c\/span\u003e points to unlock a \u003cspan rivo-x-data rivo-x-text=\"$store.customer.next_reward?.name\"\u003e\u003c\/span\u003e reward\u003c\/p\u003e","account_dashboard_unused_rewards_block_no_rewards":"No rewards yet","checkout_ui_redeem_incremental_earnings_login_desc":"to view your balance.","checkout_ui_refer_friends_referral_text_field_label":"Your referral link","account_dashboard_vip_tiers_progress_completed_subtitle":"Congrats! You've reached the highest tier.","checkout_ui_redeem_incremental_earnings_form_input_label":"Earnings amount","checkout_ui_redeem_incremental_discount_code_change_error":"{{code}} couldn't be used with your existing discounts.","checkout_ui_redeem_incremental_earnings_form_submit_button":"Redeem","account_dashboard_rewards_progress_block_completed_subtitle":"Keep earning points to unlock more rewards"},"widget_css":"#baLoySectionWrapper .ba-loy-bg-color {\n  background: linear-gradient(125deg, hsla(237,97%,5
4727%,1), hsla(237,100%,41%,1));\n}\n\n#baLoySectionWrapper .section-panel-wrapper {\n  box-shadow:rgba(0, 0, 0, 0.1) 0px 4px 15px 0px, rgba(0, 0, 0, 0.1) 0px 1px 2px 0px, #2932fc 0px 2px 0px 0px inset;\n}\n\n\n\n\n.header-main, .header-secondary, .points-expiry-desc {\n\tcolor: #fff !important;\n}\n.main-default a.sign-in{\n  color: #2932fc !important;\n}\n\n.section-table-piece-detail-items .li-img path {\n  fill: #3a3a3a;\n}\n\n.buttons-icons-detail-image .li-img {\n  fill: #3a3a3a;\n}\n\n#baLoySectionWrapper .loy-button-main{\n    background: #2932fc;\n    color: #fff;\n}\n\n  #baLoySectionWrapper .loy-button-main{\n    color: #fff;\n  }\n\n  #baLoySectionWrapper .main-default, #baLoySectionWrapper div.panel-section .head-title,#baLoySectionWrapper body {\n    color: #212b36;\n  }\n\n  #baLoySectionWrapper .section-panel-wrapper .panel-desc, #baLoySectionWrapper .main-default.sign-in-text{\n    color: #737376;\n  }\n\n  #launcher-wrapper{\n    background: #286ef8;\n  }\n\n\n.ba-loy-namespace .ba-loy-messenger-frame, #launcher-wrapper{\n  right: 20px;\n  left: auto;\n}\n.ba-loy-namespace .ba-loy-messenger-frame {\n  bottom: 90px;\n}\n#launcher-wrapper{\n  bottom: 20px;\n}\n\n.launcher-text{\n  color: #ffffff !important;\n}\n\n#launcher-wrapper .launcher-desktop { display: block; }\n#launcher-wrapper .launcher-mobile  { display: none;  }\n\n@media (max-device-width: 851px) and (orientation: landscape), (max-width: 500px) {\n  .ba-loy-namespace .ba-loy-messenger-frame{\n    height: 100%;\n    min-height: 100%;\n    bottom: 0;\n    right: 0;\n    left: 0;\n    top: 0;\n    width: 100%;\n    border-radius: 0 !important;\n  }\n  #launcher-wrapper.up{\n    display: none;\n  }\n  #launcher-wrapper{\n    right: 20px;\n    left: auto;\n    bottom: 20px;\n  }\n  #launcher-wrapper .launcher-desktop { display: none;  }\n  #launcher-wrapper .launcher-mobile  { display: block; }\n}\n\n\n\n.ba-loy-circle{border-radius: 30px !important;}\n.ba-loy-rounded{border-radius: 10px !important;}\n.ba-loy-square{border-radius: 0px !important;}\n","custom_css":null,"ways_to_earn":[],"points_rewards":[{"id":178201,"name":"€ 5 off coupon","enabled":true,"points_amount":500,"points_type":"fixed","reward_type":"fixed_amount","source":"points","pretty_display_rewards":"€ 5 off coupon (500 points required)","icon_url":null,"pretty_points_amount":"500","terms_of_service":{"reward_type":"fixed_amount","applies_to":"entire","show_tos":false},"pretty_terms_of_service":""},{"id":178202,"name":"€ 10 off coupon","enabled":true,"points_amount":1000,"points_type":"fixed","reward_type":"fixed_amount","source":"points","pretty_display_rewards":"€ 10 off coupon (1,000 points required)","icon_url":null,"pretty_points_amount":"1,000","terms_of_service":{"reward_type":"fixed_amount","applies_to":"entire","show_tos":false},"pretty_terms_of_service":""},{"id":178203,"name":"€ 20 off coupon","enabled":true,"points_amount":2000,"points_type":"fixed","reward_type":"fixed_amount","source":"points","pretty_display_rewards":"€ 20 off coupon (2,000 points required)","icon_url":null,"pretty_points_amount":"2,000","terms_of_service":{"reward_type":"fixed_amount","applies_to":"entire","show_tos":false},"pretty_terms_of_service":""}],"rewards":[{"id":178201,"name":"€ 5 off coupon","enabled":true,"points_amount":500,"points_type":"fixed","reward_type":"fixed_amount","source":"points","pretty_display_rewards":"€ 5 off coupon (500 points required)","icon_url":null,"pretty_points_amount":"500","terms_of_service":{"reward_type":"fixed_amount","applies_to":"entire","show_tos":false},"pretty_terms_of_service":""},{"id":178202,"name":"€ 10 off coupon","enabled":true,"points_amount":1000,"points_type":"fixed","reward_type":"fixed_amount","source":"points","pretty_display_rewards":"€ 10 off coupon (1,000 points required)","icon_url":null,"pretty_points_amount":"1,000","terms_of_service":{"reward_type":"fixed_amount","applies_to":"entire","show_tos":false},"pretty_terms_of_service":""},{"id":178203,"name":"€ 20 off coupon","enabled":true,"points_amount":2000,"points_type":"fixed","reward_type":"fixed_amount","source":"points","pretty_display_rewards":"€ 20 off coupon (2,000 points required)","icon_url":null,"pretty_points_amount":"2,000","terms_of_service":{"reward_type":"fixed_amount","applies_to":"entire","show_tos":false},"pretty_terms_of_service":""}],"widget_custom_icons":{"brand_icon":null,"rewards":null,"ways_to_earn":null,"ways_to_redeem":null},"referral_rewards":{"referrer_reward":{"id":178204,"name":"€ 5 off coupon","reward_type":"fixed_amount","properties":{"applies_to":"entire"}},"referred_reward":{"id":178205,"name":"€ 5 off coupon","reward_type":"fixed_amount","properties":{"applies_to":"entire"}}},"referral_settings":{"referrals_landing_path":null},"referral_social_settings":{"sms":false,"email":false,"twitter":true,"facebook":true,"whatsapp":false,"share_order":["email","sms","twitter","facebook","whatsapp","link"],"sms_message":"","twitter_message":"","whatsapp_message":""},"referrals_customer_account_required":false,"friend_discounts_disabled":false,"vip_tiers":[],"account_embed_widget_settings":{"enabled":false,"custom_css":null,"custom_link":null,"target_page":null,"custom_placement":null,"custom_insert_method":null},"loyalty_landing_page_settings":{"enabled":false,"vip_tiers_table_data":[]},"account_dashboard_settings":{},"forms":[],"points_expiry_enabled":false,"frontend":{},"referral_campaigns":[],"paid_membership_settings":{"name":null,"page_title":"Membership","product_id":null,"segment_id":null,"variant_id":null,"landing_path":"\/","credits_enabled":false,"product_enabled":false,"selling_plan_id":null,"billing_interval":"month","cancellation_policy":"immediate","free_shipping_enabled":true,"page_guest_description":"Join our membership program to get access to exclusive discounts, offers, and more!","page_member_description":"You're getting access to exclusive discounts, offers, and more!","custom_dashboard_enabled":false,"exclusive_access_enabled":true,"priority_support_enabled":true,"landing_path_redirect_enabled":true,"landing_settings":{"faq_items":[],"faq_title_text":"FAQ","sections_order":["hero","member_details","member_activity","benefits","faq"],"tab_font_color":"inherit","hero_title_text":"Membership","benefits_title_text":"Benefits","faq_section_enabled":true,"custom_frame_enabled":false,"faq_description_text":"Here are some frequently asked questions","hero_section_enabled":true,"hero_description_text":"You're getting access to exclusive discounts, offers, and more!","main_background_color":"inherit","custom_sidebar_enabled":false,"faq_section_font_color":"inherit","benefits_section_enabled":true,"member_card_logo_enabled":false,"benefits_description_text":"Here's what you get with your membership","benefits_section_font_color":"inherit","faq_section_background_color":"inherit","member_details_section_enabled":true,"member_activity_section_enabled":true,"benefits_section_background_color":"inherit"}},"checkout_ui_settings":{"global_show_login_enabled":false,"global_show_login_header_enabled":false,"redeem_incremental_earnings_show_login_enabled":false,"redeem_incremental_earnings_balance_to_currency":false,"redeemed_rewards_hide_selections_when_no_options":false,"redeem_points_hide_selections_unless_discount_exists":false,"redeemed_rewards_hide_selections_when_discount_applied":false,"redeem_incremental_earnings_input_amount_stepper_enabled":false,"redeem_incremental_earnings_hide_redeem_when_discount_exists":false,"redeem_incremental_earnings_hide_redeem_unless_minimum_order_value_is_met":false},"membership_tiers":[],"credit_mode":false,"active_bonus_campaign":null,"js_api_config":{"emit_points_balances_on_load":false},"auto_login":{"enabled":false,"email_provider":"kl","email_identifier":"utm_klaviyo_profile_id"},"account_widget_settings":{"enabled":false,"cards_shape":"rounded","inputs_shape":"rounded","buttons_shape":"rounded","primary_color":"#20124d","home_cta_1_url":"\/pages\/loyalty-program","launcher_shape":"circle","container_shape":"rounded","home_cta_1_text":"View Rewards","home_cta_2_text":"Manage Subscriptions","show_powered_by":false,"desktop_placement":"left","email_placeholder":"Enter your email","login_button_text":"Get Sign In Code","login_issues_link":"\/account\/login","login_issues_text":"Click here to sign in with your password if you are having issues","verify_title_text":"Enter the code we just sent to [[email]]","home_cta_1_enabled":true,"home_cta_2_enabled":true,"home_cta_3_enabled":false,"latest_order_title":"Latest Order","profile_list_links":[],"reload_after_login":false,"verify_button_text":"Verify Code","mobile_side_spacing":20,"popular_today_title":"Popular Today","slideout_icon_color":"#303030","desktop_side_spacing":20,"home_logged_in_title":"Welcome \u003cspan rivo-ax-text='$store.rivo_profile_customer?.first_name'\u003e\u003c\/span\u003e","profile_log_out_text":"Log out","home_logged_out_title":"Sign in to your account","mobile_bottom_spacing":20,"order_returns_enabled":false,"popular_today_enabled":true,"recently_viewed_title":"Recently Viewed","replace_account_links":true,"slideout_border_color":"#E0E0E0","custom_sub_cta_enabled":false,"desktop_bottom_spacing":20,"order_tracking_partner":"shopify","orders_logged_in_title":"Your Orders","product_rating_enabled":false,"slideout_subdued_color":"#F7F7F7","home_logged_in_subtitle":"You have \u003cspan rivo-ax-text='$store.rivo_profile_customer?.pretty_points_tally'\u003e\u003c\/span\u003e points","order_buy_again_enabled":false,"orders_empty_state_text":"You haven't placed any orders yet","orders_logged_out_title":"Log in to view, track, and manage your orders","recently_viewed_enabled":true,"home_logged_out_subtitle":"Get access to your rewards, referrals, and more","verify_login_
472issues_link":"\/#rivo","verify_login_issues_text":"Having issues? Click here to try again.","home_cta_1_primary_button":true,"home_cta_2_primary_button":false,"home_cta_3_primary_button":false,"order_returns_button_text":"Start a Return","slideout_background_color":"#FFFFFF","order_tracking_button_text":"Track Shipment","primary_button_class_names":"button button--primary","order_buy_again_button_text":"Buy Again","profile_list_contact_us_url":"#","slideout_heading_font_color":"#303030","login_accepts_marketing_text":"Email me with updates and offers","order_track_shipment_enabled":true,"profile_list_contact_us_text":"Contact Us","secondary_button_class_names":"button button--secondary","add_to_cart_notification_text":"Added to cart","featured_home_content_enabled":false,"address_saved_notification_text":"Address saved","login_accepts_marketing_default":true,"login_accepts_marketing_enabled":true,"profile_list_contact_us_enabled":true,"profile_list_personal_info_text":"Personal Information","orders_additional_button_enabled":false,"product_compare_at_price_enabled":true,"recently_viewed_empty_state_text":"No recently viewed products","slideout_body_primary_font_color":"#303030","profile_updated_notification_text":"Profile updated","shipping_address_empty_state_text":"You haven't added any shipping addresses yet","slideout_body_secondary_font_color":"#707070","order_returns_button_primary_button":false,"order_tracking_button_primary_button":true,"profile_list_shipping_addresses_text":"Shipping Addresses","order_buy_again_button_primary_button":false,"orders_additional_button_primary_button":false,"favorites_enabled":false,"favorites_title":"Favorites","favorites_empty_state_text":"No favorited products"},"persisted_login_enabled":false};
473    window.Rivo.loy_config.api_endpoint = "/apps/ba-loy";
474    window.Rivo.loy_config.domain_name = "loyalty.rivo.io";
475
476
477
478
479</script>
479
480
481
482<script type="text/javascript">
483  
484
485  //Global snippet for Rivo
486  //this is updated automatically - do not edit manually.
487
488  function loadScript(src, defer, done) {
489    var js = document.createElement('script');
490    js.src = src;
491    js.defer = defer;
492    js.onload = function(){done();};
493    js.onerror = function(){
494      done(new Error('Failed to load script ' + src));
495    };
496    document.head.appendChild(js);
497  }
498
499  function browserSupportsAllFeatures() {
500    return window.Promise && window.fetch && window.Symbol;
501  }
502
503  if (browserSupportsAllFeatures()) {
504    main();
505  } else {
506    loadScript('https://polyfill-fastly.net/v3/polyfill.min.js?features=Promise,fetch', true, main);
507  }
508
509  function loadAppScripts(){
510     if (window.Rivo.global_config.aat.includes("loy")){
511      loadScript(window.Rivo.global_config.asset_urls.loy.init_js, true, function(){});
512     }
513
514     if (window.Rivo.global_config.aat.includes("rev")){
515      loadScript(window.Rivo.global_config.asset_urls.rev.init_js, true, function(){});
516     }
517
518     if (window.Rivo.global_config.aat.includes("pu")){
519      loadScript(window.Rivo.global_config.asset_urls.pu.init_js, true, function(){});
520     }
521
522     if (window.Rivo.global_config.aat.includes("pop") || window.Rivo.global_config.aat.includes("pu")){
523      loadScript(window.Rivo.global_config.asset_urls.widgets.init_js, true, function(){});
524     }
525  }
526
527  function main(err) {
528    loadScript(window.Rivo.global_config.asset_urls.global.helper_js, false, loadAppScripts);
529  }
530</script>
530
531
532<!-- BEGIN app block: shopify://apps/complianz-consent/blocks/bc-block/e49729f0-d37d-4e24-ac65-e0e2f472ac27 -->
533
534    
535    
536<link id='complianz-css' rel="stylesheet" href=https://cdn.shopify.com/extensions/019ff089-9ce4-7f60-9df7-212f05df0e73/complianz-gdpr-cookie-consent-88/assets/complainz.css media="print" onload="this.media='all'">
537    <style>
538        #iubenda-iframe.iubenda-iframe-branded > div.purposes-header,
539        #iubenda-iframe.iubenda-iframe-branded > div.iub-cmp-header,
540        #purposes-container > div.purposes-header,
541        #iubenda-cs-banner .iubenda-cs-brand {
542            background-color: #ffffff !important;
543            color: #000000!important;
544        }
545        #iubenda-iframe.iubenda-iframe-branded .purposes-header .iub-btn-cp ,
546        #iubenda-iframe.iubenda-iframe-branded .purposes-header .iub-btn-cp:hover,
547        #iubenda-iframe.iubenda-iframe-branded .purposes-header .iub-btn-back:hover  {
548            background-color: #ffffff !important;
549            opacity: 1 !important;
550        }
551        #iubenda-cs-banner .iub-toggle .iub-toggle-label {
552            color: !important;
553        }
554        #iubenda-iframe.iubenda-iframe-branded .purposes-header .iub-btn-cp:hover,
555        #iubenda-iframe.iubenda-iframe-branded .purposes-header .iub-btn-back:hover {
556            background-color: !important;
557            color: !important;
558        }
559        #iubenda-cs-banner #iubenda-cs-title {
560            font-size: 14px !important;
561        }
562        #iubenda-cs-banner .iubenda-cs-content,
563        #iubenda-cs-title,
564        .iub-toggle-checkbox.granular-control-checkbox span {
565            background-color: #ffffff !important;
566            color: #000000 !important;
567            font-size: 14px !important;
568        }
569        #iubenda-cs-banner .iubenda-cs-close-btn {
570            font-size: 14px !important;
571            background-color: #ffffff !important;
572        }
573        #iubenda-cs-banner .iubenda-cs-opt-group {
574            color: #ffffff !important;
575        }
576        #iubenda-cs-banner .iubenda-cs-opt-group button,
577        .iubenda-alert button.iubenda-button-cancel {
578            background-color: #fbd3cc!important;
579            color: #000000!important;
580        }
581        #iubenda-cs-banner .iubenda-cs-opt-group button.iubenda-cs-accept-btn,
582        #iubenda-cs-banner .iubenda-cs-opt-group button.iubenda-cs-btn-primary,
583        .iubenda-alert button.iubenda-button-confirm {
584            background-color: #fbd3cc !important;
585            color: #000000 !important;
586        }
587        #iubenda-cs-banner .iubenda-cs-opt-group button.iubenda-cs-reject-btn {
588            background-color: #fbd3cc!important;
589            color: #000000!important;
590        }
591
592        #iubenda-cs-banner .iubenda-banner-content button {
593            cursor: pointer !important;
594            color: currentColor !important;
595            text-decoration: underline !important;
596            border: none !important;
597            background-color: transparent !important;
598            font-size: 100% !important;
599            padding: 0 !important;
600        }
601
602        #iubenda-cs-banner .iubenda-cs-opt-group button {
603            border-radius: 4px !important;
604            padding-block: 10px !important;
605        }
606
607        div#iubenda-iframe-content div.purposes-checkbox input[type="checkbox"] {
608            display: block !important;
609        }
610
611        @media (min-width: 640px) {
612            #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-container, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-container, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-container {
613                width: 560px !important;
614            }
615            #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubend
615a-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group {
616                flex-direction: row !important;
617            }
618            #iubenda-cs-banner .iubenda-cs-opt-group button:not(:last-of-type),
619            #iubenda-cs-banner .iubenda-cs-opt-group button {
620                margin-right: 4px !important;
621            }
622            #iubenda-cs-banner .iubenda-cs-container .iubenda-cs-brand {
623                position: absolute !important;
624                inset-block-start: 6px;
625            }
626        }
627        #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group > div, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group > div, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group > div {
628            flex-direction: row-reverse;
629            width: 100% !important;
630        }
631
632        .iubenda-cs-brand-badge-outer, .iubenda-cs-brand-badge, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-bottom .iubenda-cs-brand-badge-outer,
633        #iubenda-cs-banner.iubenda-cs-default.iubenda-cs-bottom .iubenda-cs-brand-badge-outer,
634        #iubenda-cs-banner.iubenda-cs-default:not(.iubenda-cs-left) .iubenda-cs-brand-badge-outer,
635        #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-left) .iubenda-cs-brand-badge-outer {
636            display: none !important
637        }
638
639        #iubenda-cs-banner:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-container.iubenda-cs-themed {
640            flex-direction: row !important;
641        }
642
643        #iubenda-cs-banner #iubenda-cs-title,
644        #iubenda-cs-banner #iubenda-cs-custom-title {
645            justify-self: center !important;
646            font-size: 14px !important;
647            font-family: -apple-system,sans-serif !important;
648            margin-inline: auto !important;
649            width: 55% !important;
650            text-align: center;
651            font-weight: 600;
652            visibility: unset;
653        }
654
655        @media (max-width: 640px) {
656            #iubenda-cs-banner #iubenda-cs-title,
657            #iubenda-cs-banner #iubenda-cs-custom-title {
658                display: block;
659            }
660        }
661
662        #iubenda-cs-banner .iubenda-cs-brand img {
663            max-width: 110px !important;
664            min-height: 32px !important;
665        }
666        #iubenda-cs-banner .iubenda-cs-container .iubenda-cs-brand {
667            background: none !important;
668            padding: 0px !important;
669            margin-block-start:10px !important;
670            margin-inline-start:16px !important;
671        }
672
673        #iubenda-cs-banner .iubenda-cs-opt-group button {
674            padding-inline: 4px !important;
675        }
676
677        #cookie-policy-content,
678        #privacy-policy-content {
679            min-height: 2rem;
680            transition: opacity 0.8s ease-in-out;
681        }
682
683        #cookie-policy-content.complianz-policy-content--loaded,
684        #privacy-policy-content.complianz-policy-content--loaded {
685            animation: complianz-policy-fade-in 0.7s ease-in-out both;
686        }
687
688        @keyframes complianz-policy-fade-in {
689            from {
690                opacity: 0;
691            }
692            to {
693                opacity: 1;
694            }
695        }
696
697    </style>
698    
699    
700    
701    
702
703    
703<script type="text/javascript">
704        function filterGoogleConsentModeURLs(domainsArray) {
705            const googleConsentModeComplianzURls = [
706                // 197, # Google Tag Manager:
707                {"domain":"s.www.googletagmanager.com", "path":""},
708                {"domain":"www.tagmanager.google.com", "path":""},
709                {"domain":"www.googletagmanager.com", "path":""},
710                {"domain":"googletagmanager.com", "path":""},
711                {"domain":"tagassistant.google.com", "path":""},
712                {"domain":"tagmanager.google.com", "path":""},
713
714                // 2110, # Google Analytics 4:
715                {"domain":"www.analytics.google.com", "path":""},
716                {"domain":"www.google-analytics.com", "path":""},
717                {"domain":"ssl.google-analytics.com", "path":""},
718                {"domain":"google-analytics.com", "path":""},
719                {"domain":"analytics.google.com", "path":""},
720                {"domain":"region1.google-analytics.com", "path":""},
721                {"domain":"region1.analytics.google.com", "path":""},
722                {"domain":"*.google-analytics.com", "path":""},
723                {"domain":"www.googletagmanager.com", "path":"/gtag/js?id=G"},
724                {"domain":"googletagmanager.com", "path":"/gtag/js?id=UA"},
725                {"domain":"www.googletagmanager.com", "path":"/gtag/js?id=UA"},
726                {"domain":"googletagmanager.com", "path":"/gtag/js?id=G"},
727
728                // 177, # Google Ads conversion tracking:
729                {"domain":"googlesyndication.com", "path":""},
730                {"domain":"media.admob.com", "path":""},
731                {"domain":"gmodules.com", "path":""},
732                {"domain":"ad.ytsa.net", "path":""},
733                {"domain":"dartmotif.net", "path":""},
734                {"domain":"dmtry.com", "path":""},
735                {"domain":"go.channelintelligence.com", "path":""},
736                {"domain":"googleusercontent.com", "path":""},
737                {"domain":"googlevideo.com", "path":""},
738                {"domain":"gvt1.com", "path":""},
739                {"domain":"links.channelintelligence.com", "path":""},
740                {"domain":"obrasilinteirojoga.com.br", "path":""},
741                {"domain":"pcdn.tcgmsrv.net", "path":""},
742                {"domain":"rdr.tag.channelintelligence.com", "path":""},
743                {"domain":"static.googleadsserving.cn", "path":""},
744                {"domain":"studioapi.doubleclick.com", "path":""},
745                {"domain":"teracent.net", "path":""},
746                {"domain":"ttwbs.channelintelligence.com", "path":""},
747                {"domain":"wtb.channelintelligence.com", "path":""},
748                {"domain":"youknowbest.com", "path":""},
749                {"domain":"doubleclick.net", "path":""},
750                {"domain":"redirector.gvt1.com", "path":""},
751
752                //116, # Google Ads Remarketing
753                {"domain":"googlesyndication.com", "path":""},
754                {"domain":"media.admob.com", "path":""},
755                {"domain":"gmodules.com", "path":""},
756                {"domain":"ad.ytsa.net", "path":""},
757                {"domain":"dartmotif.net", "path":""},
758                {"domain":"dmtry.com", "path":""},
759                {"domain":"go.channelintelligence.com", "path":""},
760                {"domain":"googleusercontent.com", "path":""},
761                {"domain":"googlevideo.com", "path":""},
762                {"domain":"gvt1.com", "path":""},
763                {"domain":"links.channelintelligence.com", "path":""},
764                {"domain":"obrasilinteirojoga.com.br", "path":""},
765                {"domain":"pcdn.tcgmsrv.net", "path":""},
766                {"domain":"rdr.tag.channelintelligence.com", "path":""},
767                {"domain":"static.googleadsserving.cn", "path":""},
768                {"domain":"studioapi.doubleclick.com", "path":""},
769                {"domain":"teracent.net", "path":""},
770                {"domain":"ttwbs.channelintelligence.com", "path":""},
771                {"domain":"wtb.channelintelligence.com", "path":""},
772                {"domain":"youknowbest.com", "path":""},
773                {"domain":"doubleclick.net", "path":""},
774                {"domain":"redirector.gvt1.com", "path":""}
775            ];
776
777            if (!Array.isArray(domainsArray)) { 
778                return [];
779            }
780
781            const blockedPairs = new Map();
782            for (const rule of googleConsentModeComplianzURls) {
783                if (!blockedPairs.has(rule.domain)) {
784                    blockedPairs.set(rule.domain, new Set());
785                }
786                blockedPairs.get(rule.domain).add(rule.path);
787            }
788
789            return domainsArray.filter(item => {
790                const paths = blockedPairs.get(item.d);
791                return !(paths && paths.has(item.p));
792            });
793        }
794
795        function setupAutoblockingByDomain() {
796            // autoblocking by domain
797            const autoblockByDomainArray = [];
798            const prefixID = '10000' // to not get mixed with real metis ids
799            let cmpBlockerDomains = []
800            let cmpCmplcVendorsPurposes = {}
801            let counter = 1
802            for (const object of autoblockByDomainArray) {
803                cmpBlockerDomains.push({
804                    d: object.d,
805                    p: object.path,
806                    v: prefixID + counter,
807                });
808                counter++;
809            }
810            
811            counter = 1
812            for (const object of autoblockByDomainArray) {
813                cmpCmplcVendorsPurposes[prefixID + counter] = object?.p ?? '1';
814                counter++;
815            }
816
817            Object.defineProperty(window, "cmp_iub_vendors_purposes", {
818                get() {
819                    return cmpCmplcVendorsPurposes;
820                },
821                set(value) {
822                    cmpCmplcVendorsPurposes = { ...cmpCmplcVendorsPurposes, ...value };
823                }
824            });
825            const basicGmc = true;
826
827
828            Object.defineProperty(window, "cmp_importblockerdomains", {
829                get() {
830                    if (basicGmc) {
831                        return filterGoogleConsentModeURLs(cmpBlockerDomains);
832                    }
833                    return cmpBlockerDomains;
834                },
835                set(value) {
836                    cmpBlockerDomains = [ ...cmpBlockerDomains, ...value ];
837                }
838            });
839        }
840
841        function splitDomains(joinedString) {
842            if (!joinedString) {
843                return []; // empty string -> empty array
844            }
845            return joinedString.split(";");
846        }
847
848        function setupWhitelist() {
849            let cmpBlockIgnoredDomains = [];
850            Object.defineProperty(window, "cmp_block_ignoredomains", {
851                get() {
852                    return cmpBlockIgnoredDomains;
853                },
854                set(value) {
855                    cmpBlockIgnoredDomains = [ ...cmpBlockIgnoredDomains, ...value ];
856                }
857            });
858            // Whitelist by domain:
859            const whitelistString = "";
860            const whitelist_array = [...splitDomains(whitelistString)];
861            window.cmp_block_ignoredomains = whitelist_array;
862        }
863
864        function enforceRejectionRecovery() {
865            const base = (window._iub = window._iub || {});
866            const featuresHolder = {};
867
868            function lockFlagOn(holder) {
869                const desc = Object.getOwnPropertyDescriptor(holder, 'rejection_recovery');
870                if (!desc) {
871                    Object.defineProperty(holder, 'rejection_recovery', {
872                        get() { return true; },
873                        set(_) { /* ignore */ },
874                        enumerable: true,
875                        configurable: false
876                    });
877                }
878                return holder;
879            }
880
881            Object.defineProperty(base, 'csFeatures', {
882                configurable: false,
883                enumerable: true,
884                get() {
885                    return featuresHolder;
886                },
887                set(obj) {
888                    if (obj && typeof obj === 'object') {
889                        Object.keys(obj).forEach(k => {
890                            if (k !== 'rejection_recovery') {
891                                featuresHolder[k] = obj[k];
892                            }
893                        });
894                    }
895                    // we lock it, it won't try to redefine
896                    lockFlagOn(featuresHolder);
897                }
898            });
899
900            // Ensure an object is exposed even if read early
901            if (!('csFeatures' in base)) {
902                base.csFeatures = {};
903            } else {
904                // If someone already set it synchronously, merge and lock now.
905                base.csFeatures = base.csFeatures;
906            }
907        }
908        window._iub = window?._iub || [];
909        const _iub = window._iub;
910        enforceRejectionRecovery();
911        setupAutoblockingByDomain();
912        setupWhitelist();
913
914        let currentLang = "en";
915        if (currentLang === 'pt-PT') {
916            currentLang = 'pt';
917        }
918        let fallbackLang = "en";
919        if (fallbackLang === 'pt-PT') {
920            fallbackLang = 'pt';
921        }
922        const cookiePolicyIds = {"en":85163624};
923        _iub.csConfiguration = {
924            ..._iub.csConfiguration,
925            cookiePolicyId: cookiePolicyIds[currentLang] ?? cookiePolicyIds[fallbackLang],
926            cmpId: { tcf: 332 },
927        };
928    </script>
928
929
930    
931        
931<script src="https://cs.iubenda.com/autoblocking/4387159.js"></script>
931
932    
933
934    
935    
936        
936<script src="//cdn.iubenda.com/cs/gpp/stub.js"></script>
936
937    
938
939    
939<script type="text/javascript">
940        function injectComplianceCss(cssText) {
941            const existing = document.querySelector('style[data-compliance-custom="true"]');
942            if (existing) existing.remove();
943
944            const style = document.createElement('style');
945            style.setAttribute('data-compliance-custom', 'true');
946            style.appendChild(document.createTextNode(cssText));
947            document.body.appendChild(style);
948        }
949
950        window.addEventListener('DOMContentLoaded', () => {
951            const css = "\n\/* Note: use !important to override the default styles *\/\n\/* =========================\n   FIRST LAYER (Banner)\n   ========================= *\/\n\/* banner content *\/\n#iubenda-cs-banner .iubenda-cs-content {\n}\n\/* privacy policy link *\/\n#iubenda-cs-title {\n}\n\/* main paragraph *\/\n#iubenda-cs-paragraph.iubenda-cs-small-margin-top {\n}\n\/* privacy policy link *\/\n#iubenda-cs-banner .iubenda-cs-cookie-policy-lnk {\n}\n\n\/* button (accept) *\/\n#iubenda-cs-banner .iubenda-cs-opt-group button.iubenda-cs-accept-btn {\n}
951\n\n\/* button (reject) *\/\n#iubenda-cs-banner .iubenda-cs-opt-group button.iubenda-cs-reject-btn {\n}\n\n\/* button (view preference) *\/\n#iubenda-cs-banner .iubenda-cs-opt-group button {\n}\n\n\/* =========================\n   SECOND LAYER (Preferences Modal)\n   ========================= *\/\n\n\/* modal header *\/\n#iubenda-iframe-content #purposes-container .purposes-header {\n}\n\/* header button *\/\n#iubenda-iframe-content #purposes-container .purposes-header .purposes-header-right .iub-btn-cp  {\n}\n\n\/* modal main section *\/\n#iubenda-iframe-content #purposes-content-container .purposes-content {\n}\n\/* consent buttons *\/\n#iubenda-iframe-content .purposes-content .iub-consent-buttons {\n}\n\/* consent buttons hover *\/\n#iubenda-iframe-content .purposes-content .iub-btn:hover {\n}\n\/* consent sections *\/\n#purposes-content-container div.purposes-section-body, #purposes-content-container .purposes-item div.purposes-item-header { \n}\n\n\/* modal footer*\/\n#iubenda-iframe-content .iubenda-iframe-footer {\n}
951\n\/* save and continue button *\/\n#iubenda-iframe-content #iubFooterBtnContainer button {\n}\n";
952            injectComplianceCss(css);
953        });
954        function loadScript(src) {
955            return new Promise((resolve, reject) => {
956                const s = document.createElement("script");
957                s.src = src;
958                s.charset = "UTF-8";
959                s.onload = resolve;
960                s.onerror = reject;
961                document.head.appendChild(s);
962            });
963        }
964
965
966        let policyContentListenerRegistered = false;
967
968        window.IubEventsTrackRecord = window.IubEventsTrackRecord || {
969            iubLoaded: false,
970            domContentLoaded: false,
971        };
972
973        function initIubenda() {
974            const currentCsConfiguration = {"siteId":4387159,"cookiePolicyIds":{"en":85163624},"banner":{"acceptButtonDisplay":true,"rejectButtonDisplay":true,"customizeButtonDisplay":true,"position":"float-center","backgroundOverlay":true,"fontSize":"14px","content":"","title":"","hideTitle":false,"acceptButtonCaption":"","rejectButtonCaption":"","customizeButtonCaption":"","cookiePolicyLinkCaption":"","privacyWidget":true,"privacyWidgetPosition":"bottom-right","customCss":"\n\/* Note: use !important to override the default styles *\/\n\/* =========================\n   FIRST LAYER (Banner)\n   ========================= *\/\n\/* banner content *\/\n#iubend
974a-cs-banner .iubenda-cs-content {\n}\n\/* privacy policy link *\/\n#iubenda-cs-title {\n}\n\/* main paragraph *\/\n#iubenda-cs-paragraph.iubenda-cs-small-margin-top {\n}\n\/* privacy policy link *\/\n#iubenda-cs-banner .iubenda-cs-cookie-policy-lnk {\n}\n\n\/* button (accept) *\/\n#iubenda-cs-banner .iubenda-cs-opt-group button.iubenda-cs-accept-btn {\n}\n\n\/* button (reject) *\/\n#iubenda-cs-banner .iubenda-cs-opt-group button.iubenda-cs-reject-btn {\n}\n\n\/* button (view preference) *\/\n#iubenda-cs-banner .iubenda-cs-opt-group button {\n}\n\n\/* =========================\n   SECOND LAYER (Preferences Modal)\n   ========================= *\/\n\n\/* modal header *\/\n#iubenda-iframe-content #purposes-container .purposes-header {\n}\n\/* header button *\/\n#iubenda-iframe-content #purposes-container .purposes-header .purposes-header-right .iub-btn-cp  {\n}\n\n\/* modal main section *\/\n#iubenda-iframe-content #purposes-content-container .purposes-content {\n}\n\/* consent buttons *\/\n#iubenda-iframe-content .purposes-content .iub-consent-buttons {\n}
974\n\/* consent buttons hover *\/\n#iubenda-iframe-content .purposes-content .iub-btn:hover {\n}\n\/* consent sections *\/\n#purposes-content-container div.purposes-section-body, #purposes-content-container .purposes-item div.purposes-item-header { \n}\n\n\/* modal footer*\/\n#iubenda-iframe-content .iubenda-iframe-footer {\n}\n\/* save and continue button *\/\n#iubenda-iframe-content #iubFooterBtnContainer button {\n}\n","backgroundColor":"#ffffff","textColor":"#000000","acceptButtonColor":"#fbd3cc","acceptButtonCaptionColor":"#000000","rejectButtonColor":"#fbd3cc","rejectButtonCaptionColor":"#000000","customizeButtonColor":"#fbd3cc","customizeButtonCaptionColor":"#000000","applyStyles":"false"},"privacyWidget":true};
975            const preview_config = {"format_and_position":{"has_background_overlay":true,"position":"float-center"},"text":{"fontsize":"14px","content":{"title":{"en":"COOKIES HORROR-VACUI.COM"},"hideTitle":false,"main":"","accept":"","reject":"","learnMore":"","cp_caption":""}},"theme":{"setting_type":2,"standard":{"subtype":"light"},"color":{"selected_color":"Mint","selected_color_style":"neutral"},"custom":{"main":{"background":"#ffffff","text":"#000000"},"acceptButton":{"background":"#fbd3cc","text":"#000000"},"rejectButton":{"background":"#fbd3cc","text":"#000000"},"learnMoreButton":{"background":"#fbd3cc","text":"#000000"}},"logo":{"type":0,"add_from_url":{"url":"","brand_header_color":"#000000","brand_text_color":"#ffffff"},"upload":{"src":"","brand_header_color":"#ffffff","brand_text_color":"#000000"}}},"privacyWidget":true,"privacyWidgetPosition":"bottom-right","cookiePolicyPageUrl":"\/pages\/cookie-policy","privacyPolicyPageUrl":"\/policies\/privacy-policy","customCss":"\n\/* Note: use !important to override the default styles *\/\n\/* =========================\n   FIRST LAYER (Banner)\n   ========================= *\/\n\/* banner content *\/\n#iubend
975a-cs-banner .iubenda-cs-content {\n}\n\/* privacy policy link *\/\n#iubenda-cs-title {\n}\n\/* main paragraph *\/\n#iubenda-cs-paragraph.iubenda-cs-small-margin-top {\n}\n\/* privacy policy link *\/\n#iubenda-cs-banner .iubenda-cs-cookie-policy-lnk {\n}\n\n\/* button (accept) *\/\n#iubenda-cs-banner .iubenda-cs-opt-group button.iubenda-cs-accept-btn {\n}\n\n\/* button (reject) *\/\n#iubenda-cs-banner .iubenda-cs-opt-group button.iubenda-cs-reject-btn {\n}\n\n\/* button (view preference) *\/\n#iubenda-cs-banner .iubenda-cs-opt-group button {\n}\n\n\/* =========================\n   SECOND LAYER (Preferences Modal)\n   ========================= *\/\n\n\/* modal header *\/\n#iubenda-iframe-content #purposes-container .purposes-header {\n}\n\/* header button *\/\n#iubenda-iframe-content #purposes-container .purposes-header .purposes-header-right .iub-btn-cp  {\n}\n\n\/* modal main section *\/\n#iubenda-iframe-content #purposes-content-container .purposes-content {\n}\n\/* consent buttons *\/\n#iubenda-iframe-content .purposes-content .iub-consent-buttons {\n}
975\n\/* consent buttons hover *\/\n#iubenda-iframe-content .purposes-content .iub-btn:hover {\n}\n\/* consent sections *\/\n#purposes-content-container div.purposes-section-body, #purposes-content-container .purposes-item div.purposes-item-header { \n}\n\n\/* modal footer*\/\n#iubenda-iframe-content .iubenda-iframe-footer {\n}\n\/* save and continue button *\/\n#iubenda-iframe-content #iubFooterBtnContainer button {\n}\n","primaryDomain":"https:\/\/horror-vacui.com"};
976            const settings = {"businessLocation":"DE","targetRegions":{"EU":true,"US":true,"CA":true,"BR":true},"legislations":{"isAutomatic":true,"customLegislations":{"gdprApplies":true,"usprApplies":true,"ccpaApplies":true,"lgpdApplies":true}},"googleConsentMode":false,"microsoftConsentMode":false,"enableTcf":false,"fallbackLanguage":"en","emailNotification":true,"disableAutoBlocking":false,"enableAdvanceGCM":true};
977
978            const supportedLangs = [
979            'bg','ca','cs','da','de','el','en','en-GB','es','et',
980            'fi','fr','hr','hu','it','lt','lv','nl','no','pl',
981            'pt','pt-BR','ro','ru','sk','sl','sv'
982            ];
983
984            // Build i18n map; prefer globals (e.g., window.it / window.en) if your locale files define them,
985            // otherwise fall back to Liquid-injected JSON (cleaned_*).
986            let currentLang = "en";
987            if (currentLang === 'pt-PT') {
988                currentLang = 'pt';
989            }
990            const fallbackLang = "en";
991            let iub_i18n = {};
992
993            // fallback first
994            (function attachFallback() {
995                // If your external locale file defines a global like "window[<lang>]"
996                if (typeof window[fallbackLang] !== "undefined") {
997                    iub_i18n[fallbackLang] = window[fallbackLang];
998                    return;
999                }
1000            })();
1001
1002            // then current
1003            (function attachCurrent() {
1004            if (supportedLangs.includes(currentLang)) {
1005                if (typeof window[currentLang] !== "undefined") {
1006                    iub_i18n[currentLang] = window[currentLang];
1007                    return;
1008                }
1009            }
1010            })();
1011
1012            const localeRootUrl = "/";
1013            const normalizedLocaleRoot = localeRootUrl.startsWith('/') ? localeRootUrl : `/${localeRootUrl}`;
1014            const isPrimaryLang = normalizedLocaleRoot === '/';
1015
1016            const hasCookiePolicyForLocale = Boolean(currentCsConfiguration?.cookiePolicyIds?.[currentLang]);
1017            const localePath = isPrimaryLang ? '' : (hasCookiePolicyForLocale ? normalizedLocaleRoot : `/${fallbackLang}`);
1018            const primaryDomain = "https://horror-vacui.com";
1019            const cookiePolicyPageUrl = "/pages/cookie-policy";
1020            const privacyPolicyPageUrl = "/policies/privacy-policy";
1021
1022            const cookiePolicyId =
1023            currentCsConfiguration?.cookiePolicyIds[currentLang] ??
1024            currentCsConfiguration?.cookiePolicyIds[fallbackLang];
1025
1026            // 🔴 IMPORTANT: make _iub global
1027            window._iub = window?._iub || [];
1028            const _iub = window._iub;
1029
1030            _iub.csConfiguration = {
1031                ..._iub.csConfiguration,
1032                ...currentCsConfiguration,
1033                cookiePolicyId,
1034                consentOnContinuedBrowsing:  false,
1035                perPurposeConsent:           true,
1036                countryDetection:            true,
1037                enableGdpr:                  settings?.legislations?.customLegislations?.gdprApplies,
1038                enableUspr:                  settings?.legislations?.customLegislations?.usprApplies,
1039                enableCcpa:                  settings?.legislations?.customLegislations?.ccpaApplies,
1040                enableLgpd:                  settings?.legislations?.customLegislations?.lgpdApplies,
1041                googleConsentMode:           settings?.googleConsentMode,
1042                uetConsentMode:              settings?.microsoftConsentMode,
1043                enableTcf:                   settings?.enableTcf,
1044                tcfPublisherCC:              settings?.businessLocation,
1045                lang:                        supportedLangs.includes(currentLang) ? currentLang : fallbackLang,
1046                i18n:                        iub_i18n,
1047                brand:                       'Complianz',
1048                cookiePolicyInOtherWindow:   true,
1049                cookiePolicyUrl:             `${primaryDomain}${localePath}${cookiePolicyPageUrl}`,
1050                privacyPolicyUrl:            `${primaryDomain}${localePath}${privacyPolicyPageUrl}`,
1051                floatingPreferencesButtonDisplay: currentCsConfiguration?.privacyWidget ? (currentCsConfiguration?.banner?.privacyWidgetPosition ?? 'bottom-right') : false,
1052                cmpId:                       { tcf: 332 },
1053                callback:                    {},
1054                purposes:                    "1, 2, 3, 4, 5",
1055                promptToAcceptOnBlockedElements: true,
1056                googleEnableAdvertiserConsentMode: settings?.googleConsentMode && settings?.enableTcf,
1057                whitelabel:                   true,
1058                amazonConsentSignal:          settings?.amazonConsentSignal
1059            };
1060            window._cmplc = {
1061                csConfiguration: {
1062                    cookiePolicyId
1063                }
1064            }
1065            const customeContent = preview_config?.text?.content ?? {};
1066            const titleContent =
1067            customeContent?.title?.hasOwnProperty(currentLang) ? customeContent?.title[currentLang] :
1068            customeContent?.title?.hasOwnProperty(fallbackLang) ? customeContent?.title[fallbackLang] : '';
1069            let mainContent =
1070            customeContent?.main?.hasOwnProperty(currentLang) ? customeContent?.main[currentLang] :
1071            customeContent?.main?.hasOwnProperty(fallbackLang) ? customeContent?.main[fallbackLang] : '';
1072            if (titleContent !== '') {
1073            mainContent = mainContent !== '' ? `<h2 id='iubenda-cs-custom-title'>${titleContent}</h2>${mainContent}` : '';
1074            }
1075
1076            _iub.csConfiguration.banner = {
1077            ..._iub.csConfiguration.banner,
1078            content: mainContent,
1079            acceptButtonCaption:
1080                customeContent?.accept?.hasOwnProperty(currentLang) ? customeContent?.accept[currentLang] :
1081                customeContent?.accept?.hasOwnProperty(fallbackLang) ? customeContent?.accept[fallbackLang] : '',
1082            rejectButtonCaption:
1083                customeContent?.reject?.hasOwnProperty(currentLang) ? customeContent?.reject[currentLang] :
1084                customeContent?.reject?.hasOwnProperty(fallbackLang) ? customeContent?.reject[fallbackLang] : '',
1085            customizeButtonCaption:
1086                customeContent?.learnMore?.hasOwnProperty(currentLang) ? customeContent?.learnMore[currentLang] :
1087                customeContent?.learnMore?.hasOwnProperty(fallbackLang) ? customeContent?.learnMore[fallbackLang] : '',
1088            cookiePolicyLinkCaption:
1089                customeContent?.cp_caption?.hasOwnProperty(currentLang) ? customeContent?.cp_caption[currentLang] :
1090                customeContent?.cp_caption?.hasOwnProperty(fallbackLang) ? customeContent?.cp_caption[fallbackLang] : '',
1091            };
1092
1093            var onPreferenceExpressedOrNotNeededCallback = function(prefs) {
1094                var isPrefEmpty = !prefs || Object.keys(prefs).length === 0;
1095                var consent = isPrefEmpty ? _iub.cs.api.getPreferences() : prefs;
1096                var shopifyPurposes = {
1097                    "analytics": [4, 's'],
1098                    "marketing": [5, 'adv'],
1099                    "preferences": [2, 3],
1100                    "sale_of_data": ['s', 'sh'],
1101                }
1102                var expressedConsent = {};
1103                Object.keys(shopifyPurposes).forEach(function(purposeItem) {
1104                    var purposeExpressed = null
1105                    shopifyPurposes[purposeItem].forEach(item => {
1106                    if (consent.purposes && typeof consent.purposes[item] === 'boolean') {
1107                        purposeExpressed = consent.purposes[item];
1108                    }
1109                    if (consent.uspr && typeof consent.uspr[item] === 'boolean' && purposeExpressed !== false) {
1110                        purposeExpressed = consent.uspr[item];
1111                    }
1112                    })
1113                    if (typeof purposeExpressed === 'boolean') {
1114                        expressedConsent[purposeItem] = purposeExpressed;
1115                    }
1116                })
1117
1118                var oldConsentOfCustomer = Shopify.customerPrivacy.currentVisitorConsent();
1119                if (oldConsentOfCustomer["sale_of_data"] !== 'no') {
1120                    expressedConsent["sale_of_data"] = true;
1121                }
1122
1123                window.Shopify.customerPrivacy.setTrackingConsent(expressedConsent, function() {});
1124            }
1125
1126            var onCcpaOptOutCallback = function () {
1127                window.Shopify.customerPrivacy.setTrackingConsent({ "sale_of_data": false });
1128            }
1129        
1130            var onReady = function () {
1131                const currentConsent = window.Shopify.customerPrivacy.currentVisitorConsent();
1132                delete currentConsent['sale_of_data'];
1133                if (Object.values(currentConsent).some(consent => consent !== '') || !_iub.cs.state.needsConsent) {
1134                    return;
1135                }
1136                window._iub.cs.api.showBanner();
1137            }
1138
1139            _iub.csConfiguration.callback.onPreferenceExpressedOrNotNeeded = onPreferenceExpressedOrNotNeededCallback;
1140            _iub.csConfiguration.callback.onCcpaOptOut = onCcpaOptOutCallback;
1141            _iub.csConfiguration.callback.onReady = onReady;
1142            window.COMPLIANZ_CONFIGURATION_IS_SET = true;
1143            window.dispatchEvent(new CustomEvent('iub::configurationIsSet'));
1144            window.dispatchEvent(new CustomEvent('cmplc::configurationIsSet'));
1145        }
1146
1147        function isValidPolicyId(id) {
1148            if (typeof id === 'number' && !Number.isNaN(id)) {
1149                return true;
1150            }
1151            if (typeof id === 'string' && id.trim() !== '' && !Number.isNaN(Number(id))) {
1152                return true;
1153            }
1154            return false;
1155        }
1156
1157        function normalizePolicyId(id) {
1158            return typeof id === 'number' ? id : Number(id);
1159        }
1160
1161        function getPolicyContentElements() {
1162            return {
1163                cpTag: document.getElementById('cookie-policy-content'),
1164                ppTag: document.getElementById('privacy-policy-content'),
1165            };
1166        }
1167
1168        function setPolicyContentLoading(el) {
1169            el.classList.remove('complianz-policy-content--loaded');
1170            el.style.opacity = '0';
1171        }
1172
1173        function revealPolicyContent(el, content) {
1174            el.innerHTML = content;
1175            el.classList.remove('complianz-policy-content--loaded');
1176            void el.offsetWidth;
1177            el.classList.add('complianz-policy-content--loaded');
1178            el.style.removeProperty('opacity');
1179            el.dataset.complianzPolicyLoaded = 'true';
1180        }
1181
1182        function markIubLoaded() {
1183            if (window.IubEventsTrackRecord.iubLoaded) {
1184                return;
1185            }
1186            window.IubEventsTrackRecord.iubLoaded = true;
1187        }
1188
1189        function markDomContentLoaded() {
1190            if (window.IubEventsTrackRecord.domContentLoaded) {
1191                return;
1192            }
1193            window.IubEventsTrackRecord.domContentLoaded = true;
1194        }
1195
1196        async function tryPopulatePolicyContent() {
1197            if (!window.IubEventsTrackRecord.iubLoaded || !window.IubEventsTrackRecord.domContentLoaded) {
1198                return;
1199            }
1200
1201            await populatePolicyContent();
1202        }
1203
1204        async function populatePolicyContent() {
1205            const { cpTag, ppTag } = getPolicyContentElements();
1206            const rawId = window._iub?.csConfiguration?.cookiePolicyId;
1207
1208            if (!cpTag && !ppTag) {
1209                return;
1210            }
1211
1212            if (!isValidPolicyId(rawId)) {
1213                if (cpTag) {
1214                    revealPolicyContent(cpTag, 'Failed to load content.');
1215                }
1216                if (ppTag) {
1217                    revealPolicyContent(ppTag, 'Failed to load content.');
1218                }
1219                return;
1220            }
1221
1222            const id = normalizePolicyId(rawId);
1223
1224            if (cpTag && cpTag.dataset.complianzPolicyLoaded !== 'true') {
1225                setPolicyContentLoading(cpTag);
1226                const cpUrl = 'https://www.iubenda.com/api/privacy-policy/' + id + '/cookie-policy/no-markup';
1227                try {
1228                    const response = await fetch(cpUrl);
1229                    if (!response.ok) {
1230                        throw new Error('HTTP ' + response.status);
1231                    }
1232                    const html = await response.json();
1233                    const content = html?.content ?? 'Failed to load content.';
1234                    revealPolicyContent(cpTag, content);
1235                } catch (_err) {
1236                    revealPolicyContent(cpTag, 'Failed to load content.');
1237                }
1238            }
1239
1240            if (ppTag && ppTag.dataset.complianzPolicyLoaded !== 'true') {
1241                setPolicyContentLoading(ppTag);
1242                const ppUrl = 'https://www.iubenda.com/api/privacy-policy/' + id + '/no-markup';
1243                try {
1244                    const response = await fetch(ppUrl);
1245                    if (!response.ok) {
1246                        throw new Error('HTTP ' + response.status);
1247                    }
1248                    const html = await response.json();
1249                    const content = html?.content ?? 'Failed to load content.';
1250                    revealPolicyContent(ppTag, content);
1251                } catch (_err) {
1252                    revealPolicyContent(ppTag, 'Failed to load content.');
1253                }
1254            }
1255        }
1256
1257        function registerEventListeners() {
1258            if (policyContentListenerRegistered) {
1259                return;
1260            }
1261            policyContentListenerRegistered = true;
1262
1263            window.addEventListener('iub::configurationIsSet', () => {
1264                markIubLoaded();
1265                tryPopulatePolicyContent();
1266            });
1267
1268            window.addEventListener('cmplc::configurationIsSet', () => {
1269                markIubLoaded();
1270                tryPopulatePolicyContent();
1271            });
1272
1273            document.addEventListener('DOMContentLoaded', () => {
1274                markDomContentLoaded();
1275                tryPopulatePolicyContent();
1276            });
1277
1278            if (document.readyState !== 'loading') {
1279                markDomContentLoaded();
1280                tryPopulatePolicyContent();
1281            }
1282
1283            if (window.COMPLIANZ_CONFIGURATION_IS_SET) {
1284                markIubLoaded();
1285                tryPopulatePolicyContent();
1286            }
1287        }
1288
1289        registerEventListeners();
1290
1291        Promise.all([
1292            loadScript("https://cdn.shopify.com/extensions/019ff089-9ce4-7f60-9df7-212f05df0e73/complianz-gdpr-cookie-consent-88/assets/en.js"),
1293            loadScript("https://cdn.shopify.com/extensions/019ff089-9ce4-7f60-9df7-212f05df0e73/complianz-gdpr-cookie-consent-88/assets/en.js"),
1294        ]).finally(() => {
1295            initIubenda();
1296            loadScript("https://cdn.iubenda.com/cs/iubenda_cs.js");
1297        });
1298    </script>
1298
1299
1300    
1300<script>
1301        window.Shopify.loadFeatures(
1302            [
1303                {
1304                name: 'consent-tracking-api',
1305                version: '0.1',
1306                },
1307            ],
1308            function(error) {
1309                if (error) {
1310                throw error;
1311                }
1312            }
1313        );
1314    </script>
1314
1315
1316
1317<!-- END app block -->
1317<script src="https://cdn.shopify.com/extensions/01a0d8da-dbb6-759e-90f0-31975754fa90/forms-2597/assets/shopify-forms-loader.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1317
1317
1318<script src="https://cdn.shopify.com/extensions/01a038e6-d7af-7b85-9f54-e79f35af1943/cevoid-22/assets/galleries.js" type="text/javascript" defer="defer"></script>
1318
1319<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
1320<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 61810966677,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "blog"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 1320
1320
1321<script>
1322  window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || [];
1323</script>
vendor: 1 bytes, line 1323
1323
1324<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
1324).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 61810966677,storefrontBaseUrl: "https://horror-vacui.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://horror-vacui.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"1037500763","configuration":"{\"config\":\"{\\\"pixel_id\\\":\\\"G-XK2F6NLNZB\\\",\\\"target_country\\\":\\\"DE\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":\\\"G-XK2F6NLNZB\\\"},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":\\\"G-XK2F6NLNZB\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-XK2F6NLNZB\\\",\\\"MC-TBRMB7VW1D\\\"]},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-XK2F6NLNZB\\\",\\\"MC-TBRMB7VW1D\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-XK2F6NLNZB\\\",\\\"MC-TBRMB7VW1D\\\"]},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":\\\"G-XK2F6NLNZB\\\"},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":\\\"G-XK2F6NLNZB\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"494469467","configuration":"{\"pixel_id\":\"227108833069223\",\"pixel_type\":\"facebook_pixel\",\"metaapp_system_user_token\":\"-\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]}
1324,{"id":"152437083","configuration":"{\"tagID\":\"2613191566665\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7ae565e198624b39e0856d352b9a6b4c","type":"APP","apiClientId":3009811,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"211648859","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS"],"name":"Google Analytics tag (migrated)"},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"HORROR VACUI","paymentSettings":{"currencyCode":"EUR"},"myshopifyDomain":"horror-vacui-shop.myshopify.com","countryCode":"DE","storefrontUrl":"https:\/\/horror-vacui.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://horror-vacui.com/cdn","c8540278we853e1abpb62b2c4amde256306",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"false","themeId":"174423933275","themePublished":"true","eventMetadataId":"e76575eb-5d41-41e9-a01b-7b9001b30cf0","pageType":"blog","resourceId":"84267368597","shopId":"61810966677","storefrontBaseUrl":"https:\/\/horror-vacui.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"c8540278we853e1abpb62b2c4amde256306","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
1324<script>
1325  window.ShopifyAnalytics = window.ShopifyAnalytics || {};
1326  window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
1327  window.ShopifyAnalytics.meta.currency = 'USD';
1328  var meta = {"page":{"pageType":"blog","resourceType":"blog","resourceId":84267368597,"requestId":"c5815a7e-1255-46f1-b9e0-032dc864dcd1-1790441860"}};
1329  for (var attr in meta) {
1330    window.ShopifyAnalytics.meta[attr] = meta[attr];
1331  }
1332</script>
vendor: 1 bytes, line 1332
1332
1333<script class="analytics">
1334  (function () {
1335    var customDocumentWrite = function(content) {
1336      var jquery = null;
1337
1338      if (window.jQuery) {
1339        jquery = window.jQuery;
1340      } else if (window.Checkout && window.Checkout.$) {
1341        jquery = window.Checkout.$;
1342      }
1343
1344      if (jquery) {
1345        jquery('body').append(content);
1346      }
1347    };
1348
1349    var hasLoggedConversion = function(token) {
1350      if (token) {
1351        return document.cookie.indexOf('loggedConversion=' + token) !== -1;
1352      }
1353      return false;
1354    }
1355
1356    var setCookieIfConversion = function(token) {
1357      if (token) {
1358        var twoMonthsFromNow = new Date(Date.now());
1359        twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2);
1360
1361        document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow;
1362      }
1363    }
1364
1365    var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || [];
1366    window.ShopifyAnalytics.lib.trekkie = window.trekkie;
1367    if (trekkie.integrations) {
1368      return;
1369    }
1370    trekkie.methods = [
1371      'identify',
1372      'page',
1373      'ready',
1374      'track',
1375      'trackForm',
1376      'trackLink'
1377    ];
1378    trekkie.factory = function(method) {
1379      return function() {
1380        var args = Array.prototype.slice.call(arguments);
1381        args.unshift(method);
1382        trekkie.push(args);
1383        if (method == 'track' || method == 'page') {
1384          var pageUrl;
1385          try {
1386            pageUrl = window.location.href;
1387          } catch (e) {}
1388          var pageReferrer;
1389          try {
1390            pageReferrer = document.referrer;
1391          } catch (e) {}
1392          try {
1393            if (window.__TREKKIE_SHIM_QUEUE == null) {
1394              window.__TREKKIE_SHIM_QUEUE = [];
1395            }
1396            window.__TREKKIE_SHIM_QUEUE.push({
1397              from: 'trekkie-stub',
1398              method: method,
1399              args: args.slice(1),
1400              pageContext: {
1401                url: pageUrl,
1402                referrer: pageReferrer
1403              }
1404            });
1405          } catch (e) {
1406            // no-op
1407          }
1408        }
1409        return trekkie;
1410      };
1411    };
1412    for (var i = 0; i < trekkie.methods.length; i++) {
1413      var key = trekkie.methods[i];
1414      trekkie[key] = trekkie.factory(key);
1415    }
1416    trekkie.load = function(config) {
1417      trekkie.config = config || {};
1418      trekkie.config.initialDocumentCookie = document.cookie;
1419      var first = document.getElementsByTagName('script')[0];
1420var script = document.createElement('script');
1421script.type = 'text/javascript';
1422script.onerror = function(e) {
1423  var scriptFallback = document.createElement('script');
1424  scriptFallback.type = 'text/javascript';
1425  scriptFallback.onerror = function(error) {
1426          var Monorail = {
1427      produce: function produce(monorailDomain, schemaId, payload) {
1428        var currentMs = new Date().getTime();
1429        var event = {
1430          schema_id: schemaId,
1431          payload: payload,
1432          metadata: {
1433            event_created_at_ms: currentMs,
1434            event_sent_at_ms: currentMs
1435          }
1436        };
1437        return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event));
1438      },
1439      sendRequest: function sendRequest(endpointUrl, payload) {
1440        // Try the sendBeacon API
1441        if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) {
1442          var blobData = new window.Blob([payload], {
1443            type: 'text/plain'
1444          });
1445
1446          if (window.navigator.sendBeacon(endpointUrl, blobData)) {
1447            return true;
1448          } // sendBeacon was not successful
1449
1450        } // XHR beacon
1451
1452        var xhr = new XMLHttpRequest();
1453
1454        try {
1455          xhr.open('POST', endpointUrl);
1456          xhr.setRequestHeader('Content-Type', 'text/plain');
1457          xhr.send(payload);
1458        } catch (e) {
1459          console.log(e);
1460        }
1461
1462        return false;
1463      },
1464      isIos12: function isIos12() {
1465        return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1;
1466      }
1467    };
1468    Monorail.produce('monorail-edge.shopifysvc.com',
1469      'trekkie_storefront_load_errors/1.1',
1470      {shop_id: 61810966677,
1471      theme_id: 174423933275,
1472      app_name: "storefront",
1473      context_url: window.location.href,
1474      source_url: "//horror-vacui.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js"});
1475
1476  };
1477  scriptFallback.async = true;
1478  scriptFallback.src = '//horror-vacui.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js';
1479  first.parentNode.insertBefore(scriptFallback, first);
1480};
1481script.async = true;
1482script.src = '//horror-vacui.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js';
1483first.parentNode.insertBefore(script, first);
1484
1485    };
1486    trekkie.load(
1487      {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":61810966677,"isMerchantRequest":null,"themeId":174423933275,"themeCityHash":"11997501915388676196","contentLanguage":"en","currency":"USD","eventMetadataId":"e76575eb-5d41-41e9-a01b-7b9001b30cf0"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":false,"source":"trekkie-storefront-renderer","apiClientId":580111}}
1488    );
1489
1490    var loaded = false;
1491    trekkie.ready(function() {
1492      if (loaded) return;
1493      loaded = true;
1494
1495      window.ShopifyAnalytics.lib = window.trekkie;
1496
1497      var originalDocumentWrite = document.write;
1498      document.write = customDocumentWrite;
1499      try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {};
1500      document.write = originalDocumentWrite;
1501
1502      var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/)
1503      var token = match? match[1]: undefined;
1504      if (!hasLoggedConversion(token)) {
1505        setCookieIfConversion(token);
1506        
1507      }
1508    });
1509
1510    window.ShopifyAnalytics.lib.page(null,{"pageType":"blog","resourceType":"blog","resourceId":84267368597,"requestId":"c5815a7e-1255-46f1-b9e0-032dc864dcd1-1790441860","shopifyEmitted":true});
1511
1512    var eventsListenerScript = document.createElement('script');
1513    eventsListenerScript.async = true;
1514    eventsListenerScript.src = "//horror-vacui.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js";
1515    document.getElementsByTagName('head')[0].appendChild(eventsListenerScript);
1516})();</script>
1516
1517  
1517<script>
1518  if (!window.ga || (window.ga && typeof window.ga !== 'function')) {
1519    window.ga = function ga() {
1520      (window.ga.q = window.ga.q || []).push(arguments);
1521      if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {
1522        window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"});
1523      }
1524      console.error("Shopify's Google Analytics stub called with:", Array.from(arguments), "\nSee https://help.shopify.com/manual/promoting-marketing/pixels/pixel-migration#google for more information.");
1525    };
1526    if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {
1527      window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"});
1528    }
1529  }
1530</script>
vendor: 1 bytes, line 1530
1530
1531<script
1532  defer
1533  src="https://horror-vacui.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js"
1534  data-application="storefront-renderer"
1535  data-shop-id="61810966677"
1536  data-render-region="gcp-us-west1"
1537  data-page-type="blog"
1538  data-theme-instance-id="174423933275"
1539  data-theme-name="Spark"
1540  data-theme-version="2.7.0"
1541  data-monorail-region="shop_domain"
1542  data-resource-timing-sampling-rate="10"
1543  data-shs="true"
1544  data-shs-beacon="true"
1545  data-shs-export-with-fetch="true"
1546  data-shs-logs-sample-rate="1"
1547  data-shs-beacon-endpoint="https://horror-vacui.com/api/collect"
1548></script>
1548
1549<meta name="shopify-y" content="ca565f01-7e9e-4493-9853-a86b1b74f8d5" data-expiration="1821999460000"><meta name="shopify-s" content="a3edb18d-0d45-403b-973a-6ff8dc819ec4" data-expiration="1790443660000"><meta name="new-cookie-storage-activated" content="t">
1550</head>
1551<body
1552  class="template-blog header-sticky"
1553  
1554    data-enable-cart-ajax="true"
1555  
1556>
1557  <div class="page">
1558    
1559      <div class="page-transition" data-page-transition></div>
1560    
1561    <div class="theme-editor-scroll-offset"></div>
1562    <div class="header__space" data-header-space></div>
1563    <div id="shopify-section-announcement-bar" class="shopify-section"><div
1564    class="announcement-bar"
1565    data-section-id="announcement-bar"
1566    data-section-type="announcement-bar"
1567    data-timing="3000"
1568  ><div
1569        class="announcement-bar__item ff-body fs-body-x-small"
1570        style="
1571          --color-background: #ffffff;
1572          --color-gradient-overlay: rgba(255, 255, 255, 100);
1573          --color-gradient-overlay-transparent: rgba(255, 255, 255, 0);
1574          --color-text: #000000;
1575        "
1576        data-announcement
1577        data-index="0"
1578        
1579      >
1580        <div class="announcement-bar__content-wrapper">
1581          <div class="announcement-bar__content"><span>
1582                <a class="announcement-bar__link color-inherit" href="/collections/new-in">
1583                  New arrivals in July
1584                </a>
1585              </span></div>
1586        </div>
1587
1588        <div class="announcement-bar__gradient-gap"></div>
1589      </div><div
1590        class="announcement-bar__item ff-body fs-body-x-small"
1591        style="
1592          --color-background: #ffffff;
1593          --color-gradient-overlay: rgba(255, 255, 255, 100);
1594          --color-gradient-overlay-transparent: rgba(255, 255, 255, 0);
1595          --color-text: #000000;
1596        "
1597        data-announcement
1598        data-index="1"
1599        
1600      >
1601        <div class="announcement-bar__content-wrapper">
1602          <div class="announcement-bar__content"><span>
1603                <a class="announcement-bar__link color-inherit" href="/collections/boxer-shorts">
1604                  Boxer Shorts are here
1605                </a>
1606              </span></div>
1607        </div>
1608
1609        <div class="announcement-bar__gradient-gap"></div>
1610      </div></div>
1611</div>
1612    <div id="shopify-section-header" class="shopify-section header__outer-wrapper">
1613
1614
1615<header
1616  data-section-id="header"
1617  data-section-type="header"
1618  
1619    data-enable-sticky-header="true"
1620  
1621  class="
1622  header
1623  header--icon
1624  header--center
1625  header--navigation-inline
1626  header--has-logo
1627  
1628  
1629    header--has-transparent-logo
1630  
1631  header--has-accounts
1632  
1633  
1634  "
1635  style="
1636    --width-max-logo: 250px;
1637    --color-cart-count-transparent: #000000;
1638    --color-text-transparent: #ffffff;
1639    --color-icon-transparent: #ffffff;
1640    --color-border-transparent: rgba(255, 255, 255, 0.0);
1641  "
1642>
1643  
1643<script type="application/json" data-search-settings>
1644  {
1645    "limit": 4,
1646    "show_articles": true,
1647    "show_pages": false
1648  }
1649</script>
1649
1650
1651  <a href="#main" class="header__skip-top-content btn btn--primary btn--small">
1652    Skip to content
1653  </a>
1654
1655  <div class="header__inner">
1656
1657    <div class="header__left"><button class="header__menu-icon header__icon-touch header__icon-menu" aria-label="Open menu modal" data-js-menu-button>
1658    <span class="icon-button ">
1659  <span class="icon-button__icon">
1660    
1661<span class="icon ">
1662  <svg width="100%" viewBox="0 0 24 24">
1663    
1664        <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.1" d="M3.43 12h17.14M3.43 6.29h17.14M3.43 17.71h17.14"/>
1665
1666      
1667  </svg>
1668</span>
1669  </span>
1670</span>
1671
1672  </button>
1673</div>
1674    <div class="header__center">
1675      <h1 class="header__logo">
1676    <a
1677      class="header__logo-link" href="/"
1678      
1679        aria-label="HORROR VACUI"
1680      
1681    ><div class="image js-enabled image--27319082647701 regular-logo">
1682  <img
1683    class="image__img lazyload lazypreload "
1684    src="//horror-vacui.com/cdn/shop/files/hv_logo_horizontal_test_300x300.png?v=1659012424"
1685    data-src="//horror-vacui.com/cdn/shop/files/hv_logo_horizontal_test_{width}x.png?v=1659012424"
1686    data-widths="[180, 360, 540, 720, 900, 1080, 1296, 1512, 1728, 2048]"
1687    data-aspectratio="10.60070671378092"
1688    data-sizes="auto"
1689    alt=""
1690  >
1691</div><style>
1692    .image--27319082647701 {
1693      padding-top: 9.433333333333334%;
1694    }
1695  </style><noscript>
1696  <div class="image image--27319082647701 regular-logo">
1697    <img class="image__img" src="//horror-vacui.com/cdn/shop/files/hv_logo_horizontal_test_2048x2048.png?v=1659012424" alt="">
1698  </div>
1699</noscript><div class="image js-enabled image--27316918878357 transparent-logo">
1700  <img
1701    class="image__img lazyload lazypreload "
1702    src="//horror-vacui.com/cdn/shop/files/hv_logo_horizontal_weiss_transparent_300x300.png?v=1658991418"
1703    data-src="//horror-vacui.com/cdn/shop/files/hv_logo_horizontal_weiss_transparent_{width}x.png?v=1658991418"
1704    data-widths="[180, 360, 540, 720, 900, 1080, 1296, 1512, 1728, 2048]"
1705    data-aspectratio="10.59322033898305"
1706    data-sizes="auto"
1707    alt=""
1708  >
1709</div><style>
1710    .image--27316918878357 {
1711      padding-top: 9.44%;
1712    }
1713  </style><noscript>
1714  <div class="image image--27316918878357 transparent-logo">
1715    <img class="image__img" src="//horror-vacui.com/cdn/shop/files/hv_logo_horizontal_weiss_transparent_2048x2048.png?v=1658991418" alt="">
1716  </div>
1717</noscript></a>
1718  </h1>
1719    </div>
1720    <div class="header__right"><a
1721    class="header__icon-touch header__icon-touch--search no-transition"
1722    href="/search"
1723    data-search
1724    aria-label="Open search modal"
1725  >
1726    <span class="icon-button ">
1727  <span class="icon-button__icon">
1728    
1729<span class="icon ">
1730  <svg width="100%" viewBox="0 0 24 24">
1731    
1732        <circle fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.25" class="cls-1" cx="10" cy="9.93" r="8.41"/>
1733        <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.25" class="cls-1" d="M16.29,16.22l6.12,6.11"/>
1734
1735      
1736  </svg>
1737</span>
1738  </span>
1739</span>
1740
1741  </a>
1742<a
1743    class="header__icon-touch header__icon-touch--account"
1744    href="/account"
1745    aria-label="Go to the account page"
1746    >
1747    <span class="icon-button ">
1748  <span class="icon-button__icon">
1749    
1750<span class="icon ">
1751  <svg width="100%" viewBox="0 0 24 24">
1752    
1753        <circle fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.25" cx="12" cy="6.47" r="4.8"/>
1754        <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.25" d="M21 22.33a.33.33 0 0 0 .32-.36c-.08-.76-.27-2.57-.37-3.28a4.54 4.54 0 0 0-4.51-3.92h-9A4.54 4.54 0 0 0 3 18.69c-.1.71-.29 2.52-.37 3.28a.33.33 0 0 0 .32.36z"/>
1755
1756      
1757  </svg>
1758</span>
1759  </span>
1760</span>
1761
1762  </a>
1763<a
1764    class="header__icon-touch no-transition"
1765    href="/cart"
1766    aria-label="Open cart modal"
1767    data-js-cart-icon
1768  >
1769    <span class="icon-button ">
1770  <span class="icon-button__icon">
1771    
1772<span class="icon ">
1773  <svg width="100%" viewBox="0 0 24 24">
1774    
1775        <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.25" class="cls-1" d="m19.84 7.53 1.4 12.88a1.73 1.73 0 0 1-1.53 1.91H4.48a1.73 1.73 0 0 1-1.73-1.72 1.15 1.15 0 0 1 0-.19L4.16 7.53a.27.27 0 0 1 .28-.25h15.12a.27.27 0 0 1 .28.25z"/>
1776        <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.25" class="cls-1" d="M16.23 7.28V5.75a4.23 4.23 0 0 0-8.46 0v1.53"/>
1777
1778      
1779  </svg>
1780</span>
1781  </span>
1782</span>
1783
1784    <div class="header__cart-count" data-js-cart-indicator>
1785      <span data-js-cart-count>0</span>
1786    </div>
1787  </a>
1788    </div><div class="quick-search" data-quick-search>
1789  <div class="quick-search__overlay" data-overlay></div>
1790
1791  <div class="quick-search__container popover">
1792    <button type="button" class="quick-search__close" aria-label="Close" data-close-icon>
1793      <span class="icon-button ">
1794  <span class="icon-button__icon">
1795    
1796<span class="icon ">
1797  <svg width="100%" viewBox="0 0 24 24">
1798    
1799        <path stroke-width="1" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M18 6 6 18M6 6l12 12"/>
1800
1801      
1802  </svg>
1803</span>
1804  </span>
1805</span>
1806
1807    </button>
1808
1809    <div class="quick-search__heading ff-heading fs-heading-2-base fs-heading-2-large-ns">Search</div>
1810
1811    <form action="/search" class="quick-search__form" autocomplete="off">
1812      <div class="quick-search__bar">
1813        <label for="search" class="visually-hidden" aria-label="What are you looking for?"></label>
1814        <input
1815          class="quick-search__input"
1816          id="search"
1817          type="text"
1818          name="q"
1819          placeholder="What are you looking for?"
1820          data-input
1821        >
1822        <input type="hidden" name="options[prefix]" value="last">
1823        <div class="quick-search__actions">
1824          <button class="quick-search__clear" type="button" data-clear aria-label="Clear search">
1825            
1826<span class="icon ">
1827  <svg width="100%" viewBox="0 0 24 24">
1828    
1829        <path stroke-width="1" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M18 6 6 18M6 6l12 12"/>
1830
1831      
1832  </svg>
1833</span>
1834          </button>
1835          <button class="quick-search__submit" type="submit" aria-label="Search">
1836            
1837<span class="icon ">
1838  <svg width="100%" viewBox="0 0 24 24">
1839    
1840        <path fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" d="M5 12h14M12 5l7 7-7 7"/>
1841
1842      
1843  </svg>
1844</span>
1845          </button>
1846        </div>
1847      </div>
1848
1849      <div class="quick-search__results-wrapper">
1850        <div class="quick-search__results" data-results></div>
1851      </div>
1852    </form>
1853
1854    <div class="quick-search__blur"></div>
1855  </div>
1856</div>
1857
1858
1859    <div class="quick-cart" data-quick-cart>
1860  <div class="quick-cart__overlay" data-overlay></div>
1861
1862  <div class="quick-cart__container popover">
1863    <button type="button" class="quick-cart__close" aria-label="Close" data-close-icon>
1864      <span class="icon-button ">
1865  <span class="icon-button__icon">
1866    
1867<span class="icon ">
1868  <svg width="100%" viewBox="0 0 24 24">
1869    
1870        <path stroke-width="1" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M18 6 6 18M6 6l12 12"/>
1871
1872      
1873  </svg>
1874</span>
1875  </span>
1876</span>
1877
1878    </button>
1879    <div class="quick-cart__cart visible" data-cart data-scroll-lock-ignore>
1880      <div class="quick-cart__header ff-heading fs-heading-2-base fs-heading-2-large-ns">Cart</div>
1881      <div class="quick-cart__items" data-items></div>
1882      <div class="quick_cart__empty ff-body fs-body-base" data-empty>Your cart is currently empty.</div>
1883      <div class="quick-cart__footer ff-body fs-body-base ta-c" data-footer>
1884        <div class="quick-cart__discounts c-subdued" data-discounts></div>
1885        <div class="quick-cart__total">
1886          <span>Subtotal</span>
1887          <span class="fs-body-bold" data-subtotal></span>
1888        </div>
1889        <a href="/cart" class="btn btn--secondary btn--medium btn--full visible  button-add-to-cart light button-image">Go to cart</a>
1890        <a href="/checkout/" class="quick-cart__buy-now btn btn--primary btn--medium btn--full visible  button-add-to-cart light button-image" data-buy-now-button>Checkout</a>
1891      </div>
1892    </div>
1893  </div>
1894</div>
1895
1896  </div>
1897
1898  <div class="no-js-menu no-js-menu--desktop">
1899    <nav>
1900  <ul>
1901    
1902      <li><a href="/collections/editio-rarissima">EDITIO RARISSIMA</a></li>
1903      
1904    
1905      <li><a href="/collections/new-in">NEW</a></li>
1906      
1907    
1908      <li><a href="/collections/dresses">DRESSES</a></li>
1909      
1910    
1911      <li><a href="/collections/blouses">TOPS</a></li>
1912      
1913    
1914      <li><a href="/collections/skirts">SKIRTS</a></li>
1915      
1916    
1917      <li><a href="/collections/trousers">PANTS</a></li>
1918      
1919    
1920      <li><a href="/collections/jackets">COATS AND JACKETS</a></li>
1921      
1922    
1923      <li><a href="/collections/pyjamas-robes-boxers">PYJAMAS, ROBES, BOXERS</a></li>
1924      
1925    
1926      <li><a href="/pages/our-hv-atelier">THE ATELIER</a></li>
1927      
1928        <li><a href="/pages/about-anna-2">ABOUT ANNA</a></li>
1929        
1930      
1931        <li><a href="/pages/our-hv-atelier">OUR ARTISANS</a></li>
1932        
1933      
1934        <li><a href="/pages/our-hv-atelier">HORROR VACUI CRAFTSMANSHIP</a></li>
1935        
1936      
1937    
1938      <li><a href="/blogs/news">POSTCARDS</a></li>
1939      
1940    
1941</ul>
1942</nav>
1943  </div>
1944
1945  
1946
1947
1948<div
1949  class="drawer-menu popover"
1950  data-drawer-menu
1951>
1952  
1952<script type="application/json" data-search-settings>
1953  {
1954    "limit": 4,
1955    "show_articles": true,
1956    "show_pages": false
1957  }
1958</script>
1958
1959
1960  <div class="drawer-menu__overlay" data-overlay></div>
1961
1962  <div class="drawer-menu__panel" data-scroll-lock-ignore>
1963
1964    <div class="drawer-menu__close-wrapper">
1965      <button
1966        type="button"
1967        data-drawer-close
1968        class="drawer-menu__close-icon"
1969        aria-label="Close"
1970      >
1971        <span class="icon-button ">
1972  <span class="icon-button__icon">
1973    
1974<span class="icon ">
1975  <svg width="100%" viewBox="0 0 24 24">
1976    
1977        <path stroke-width="1" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M18 6 6 18M6 6l12 12"/>
1978
1979      
1980  </svg>
1981</span>
1982  </span>
1983</span>
1984
1985      </button>
1986    </div>
1987
1988    <div class="drawer-menu__bottom">
1989      <div class="drawer-menu__all-links" data-depth="0" data-all-links>
1990        <div class="drawer-menu__contents">
1991          <div class="drawer-menu__main" data-main>
1992            <ul class="drawer-menu__primary-links drawer-menu-list--0" data-primary-container="true" data-depth="0">
1993
1994              <li class="drawer-menu__item drawer-menu__item--emphasized drawer-menu__search-parent" data-list-item>
1995                <a
1996                  class="drawer-menu__link fs-heading-2-base fs-heading-2-large-ns"
1997                  href="#"
1998                  data-item="parent"
1999                  aria-haspopup="true"
2000                  aria-expanded="false"
2001                >
2002                  Search
2003                  
2004                </a>
2005                <ul class="drawer-menu__list drawer-menu__list--sub" data-search-menu aria-hidden="true">
2006                  <li class="drawer-menu__item drawer-menu__item--heading">
2007                    <button class="drawer-menu__link" data-item="back">
2008                      <span class="fs-heading-2-base fs-heading-2-large-ns">
2009                        Search
2010                      </span>
2011                      
2012<span class="icon menu-icon">
2013  <svg width="100%" viewBox="0 0 24 24">
2014    
2015        <path fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" d="M5 12h14M12 5l7 7-7 7"/>
2016
2017      
2018  </svg>
2019</span>
2020                    </button>
2021                  </li>
2022                  <li class="drawer-menu__search">
2023                    <form action="/search" autocomplete="off">
2024                      <div class="drawer-menu__header">
2025                        <div class="drawer-menu__search-input-wrapper">
2026                          <label for="drawer-search" class="visually-hidden">Search</label>
2027                          <input
2028                            name="q"
2029                            id="drawer-search"
2030                            class="drawer-menu__search-input"
2031                            placeholder="What are you looking for?"
2032                            data-input
2033                          />
2034                          <div class="drawer-menu__actions">
2035                            <button
2036                              class="drawer-menu__clear"
2037                              type="button"
2038                              data-search-clear
2039                              aria-label="Clear search"
2040                            >
2041                              
2042<span class="icon ">
2043  <svg width="100%" viewBox="0 0 24 24">
2044    
2045        <path stroke-width="1" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M18 6 6 18M6 6l12 12"/>
2046
2047      
2048  </svg>
2049</span>
2050                            </button>
2051                            <button
2052                              class="drawer-menu__submit"
2053                              type="submit"
2054                              data-search-submit
2055                              aria-label="Search"
2056                            >
2057                              
2058<span class="icon ">
2059  <svg width="100%" viewBox="0 0 24 24">
2060    
2061        <path fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" d="M5 12h14M12 5l7 7-7 7"/>
2062
2063      
2064  </svg>
2065</span>
2066                            </button>
2067                          </div>
2068                        </div>
2069                      </div>
2070                      <div class="drawer-menu__search-results" data-scroll-lock-ignore data-search-results></div>
2071                    </form>
2072                  </li>
2073                </ul>
2074              </li>
2075
2076              <!-- if primary doesn't exist but secondary does --><li
2077    class="
2078      drawer-menu__item
2079      drawer-menu__item--emphasized
2080      "
2081      data-list-item
2082    >
2083    <a
2084      data-item="link"
2085      class="drawer-menu__link  "
2086      href="/collections/editio-rarissima"
2087      
2088    >
2089      <span
2090        class="
2091          ff-heading
2092            fs-heading-2-base
2093            fs-heading-2-large-ns
2094          
2095        "
2096      >
2097        EDITIO RARISSIMA
2098      </span></a>
2099
2100    
2101</li><li
2102    class="
2103      drawer-menu__item
2104      drawer-menu__item--emphasized
2105      "
2106      data-list-item
2107    >
2108    <a
2109      data-item="link"
2110      class="drawer-menu__link  "
2111      href="/collections/new-in"
2112      
2113    >
2114      <span
2115        class="
2116          ff-heading
2117            fs-heading-2-base
2118            fs-heading-2-large-ns
2119          
2120        "
2121      >
2122        NEW
2123      </span></a>
2124
2125    
2126</li><li
2127    class="
2128      drawer-menu__item
2129      drawer-menu__item--emphasized
2130      "
2131      data-list-item
2132    >
2133    <a
2134      data-item="link"
2135      class="drawer-menu__link  "
2136      href="/collections/dresses"
2137      
2138    >
2139      <span
2140        class="
2141          ff-heading
2142            fs-heading-2-base
2143            fs-heading-2-large-ns
2144          
2145        "
2146      >
2147        DRESSES
2148      </span></a>
2149
2150    
2151</li><li
2152    class="
2153      drawer-menu__item
2154      drawer-menu__item--emphasized
2155      "
2156      data-list-item
2157    >
2158    <a
2159      data-item="link"
2160      class="drawer-menu__link  "
2161      href="/collections/blouses"
2162      
2163    >
2164      <span
2165        class="
2166          ff-heading
2167            fs-heading-2-base
2168            fs-heading-2-large-ns
2169          
2170        "
2171      >
2172        TOPS
2173      </span></a>
2174
2175    
2176</li><li
2177    class="
2178      drawer-menu__item
2179      drawer-menu__item--emphasized
2180      "
2181      data-list-item
2182    >
2183    <a
2184      data-item="link"
2185      class="drawer-menu__link  "
2186      href="/collections/skirts"
2187      
2188    >
2189      <span
2190        class="
2191          ff-heading
2192            fs-heading-2-base
2193            fs-heading-2-large-ns
2194          
2195        "
2196      >
2197        SKIRTS
2198      </span></a>
2199
2200    
2201</li><li
2202    class="
2203      drawer-menu__item
2204      drawer-menu__item--emphasized
2205      "
2206      data-list-item
2207    >
2208    <a
2209      data-item="link"
2210      class="drawer-menu__link  "
2211      href="/collections/trousers"
2212      
2213    >
2214      <span
2215        class="
2216          ff-heading
2217            fs-heading-2-base
2218            fs-heading-2-large-ns
2219          
2220        "
2221      >
2222        PANTS
2223      </span></a>
2224
2225    
2226</li><li
2227    class="
2228      drawer-menu__item
2229      drawer-menu__item--emphasized
2230      "
2231      data-list-item
2232    >
2233    <a
2234      data-item="link"
2235      class="drawer-menu__link  "
2236      href="/collections/jackets"
2237      
2238    >
2239      <span
2240        class="
2241          ff-heading
2242            fs-heading-2-base
2243            fs-heading-2-large-ns
2244          
2245        "
2246      >
2247        COATS AND JACKETS
2248      </span></a>
2249
2250    
2251</li><li
2252    class="
2253      drawer-menu__item
2254      drawer-menu__item--emphasized
2255      "
2256      data-list-item
2257    >
2258    <a
2259      data-item="link"
2260      class="drawer-menu__link  "
2261      href="/collections/pyjamas-robes-boxers"
2262      
2263    >
2264      <span
2265        class="
2266          ff-heading
2267            fs-heading-2-base
2268            fs-heading-2-large-ns
2269          
2270        "
2271      >
2272        PYJAMAS, ROBES, BOXERS
2273      </span></a>
2274
2275    
2276</li><li
2277    class="
2278      drawer-menu__item
2279      drawer-menu__item--emphasized
2280      "
2281      data-list-item
2282    >
2283    <a
2284      data-item="parent"
2285      class="drawer-menu__link no-transition "
2286      href="/pages/our-hv-atelier"
2287      
2288        data-link="primary"
2289        aria-haspopup="true"
2290        aria-expanded="false"
2291      
2292    >
2293      <span
2294        class="
2295          ff-heading
2296            fs-heading-2-base
2297            fs-heading-2-large-ns
2298          
2299        "
2300      >
2301        THE ATELIER
2302      </span>
2303<span class="icon menu-icon">
2304  <svg width="100%" viewBox="0 0 24 24">
2305    
2306        <path fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" d="M5 12h14M12 5l7 7-7 7"/>
2307
2308      
2309  </svg>
2310</span>
2311</a>
2312
2313    
2314<ul class="drawer-menu__list drawer-menu__list--sub drawer-menu-list--1" aria-hidden="true">
2315        <li class="drawer-menu__item drawer-menu__item--heading">
2316          <button class="drawer-menu__link" data-heading="true" data-item="back">
2317            <span class="ff-heading fs-heading-2-base fs-heading-2-large-ns">THE ATELIER</span>
2318            
2319<span class="icon menu-icon">
2320  <svg width="100%" viewBox="0 0 24 24">
2321    
2322        <path fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" d="M5 12h14M12 5l7 7-7 7"/>
2323
2324      
2325  </svg>
2326</span>
2327          </button>
2328        </li>
2329        <li
2330    class="
2331      drawer-menu__item
2332      
2333      "
2334      data-list-item
2335    >
2336    <a
2337      data-item="link"
2338      class="drawer-menu__link  "
2339      href="/pages/about-anna-2"
2340      
2341    >
2342      <span
2343        class="
2344          
2345            fs-body-base
2346            fs-body-large-ns
2347        "
2348      >
2349        ABOUT ANNA
2350      </span></a>
2351
2352    
2353</li><li
2354    class="
2355      drawer-menu__item
2356      
2357      "
2358      data-list-item
2359    >
2360    <a
2361      data-item="link"
2362      class="drawer-menu__link  "
2363      href="/pages/our-hv-atelier"
2364      
2365    >
2366      <span
2367        class="
2368          
2369            fs-body-base
2370            fs-body-large-ns
2371        "
2372      >
2373        OUR ARTISANS
2374      </span></a>
2375
2376    
2377</li><li
2378    class="
2379      drawer-menu__item
2380      
2381      "
2382      data-list-item
2383    >
2384    <a
2385      data-item="link"
2386      class="drawer-menu__link  "
2387      href="/pages/our-hv-atelier"
2388      
2389    >
2390      <span
2391        class="
2392          
2393            fs-body-base
2394            fs-body-large-ns
2395        "
2396      >
2397        HORROR VACUI CRAFTSMANSHIP
2398      </span></a>
2399
2400    
2401</li>
2402      </ul></li><li
2403    class="
2404      drawer-menu__item
2405      drawer-menu__item--emphasized
2406      drawer-menu__item--emphasized-last"
2407      data-list-item
2408    >
2409    <a
2410      data-item="link"
2411      class="drawer-menu__link  active"
2412      href="/blogs/news"
2413      
2414    >
2415      <span
2416        class="
2417          ff-heading
2418            fs-heading-2-base
2419            fs-heading-2-large-ns
2420          
2421        "
2422      >
2423        POSTCARDS
2424      </span></a>
2425
2426    
2427</li>
2428<li class="drawer-menu__item" data-list-item>
2429                  <a class="drawer-menu__link fs-body-base fs-body-large-ns" href="/account">
2430                      Register / Login
2431</a>
2432                </li></ul>
2433          </div>
2434        </div>
2435      </div>
2436    </div>
2437  </div>
2438</div>
2439
2440</header>
2441
2442<script>
2443  // Set heading height at component level
2444  const header = document.querySelector('#shopify-section-header');
2445  document.documentElement.style.setProperty('--height-header', header.offsetHeight + 'px');
2446</script>
2446
2447
2448<style>
2449  
2450    .template-index #main {
2451      margin-top: calc(var(--height-header) * -1);
2452    }
2453
2454    .template-index #main .offset-section:first-child .slideshow__content-inner,
2455    .template-index #main .offset-section:first-child .video-hero__content-inner {
2456      padding-top: calc(var(--height-header) - var(--space-outer));
2457    }
2458  
2459</style>
2460
2461</div>
2462    <main id="main" class="main">
2463       
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484<script type="application/json" id="hidden-collections-data">
2485  {
2486    "productId": null
2487    , "collectionId": null
2488    , "secureToken": null
2489  }
2490  </script>
2490
2491  
2491<script>
2492  if (!window.__hidden_banner_ran) {
2493    window.__hidden_banner_ran = true;
2494    var hiddenCollectionsDataElement = document.getElementById('hidden-collections-data');
2495    if (hiddenCollectionsDataElement) {
2496      var hiddenCollectionsData = JSON.parse(hiddenCollectionsDataElement.innerHTML);
2497      var hiddenCollectionsMessage = "You are viewing a private collection";
2498      if (hiddenCollectionsData && hiddenCollectionsData.collectionId) {
2499        var banner = document.createElement('div');
2500        banner.innerHTML = '<div style="bottom: 20px; left: 20px; padding: 10px 20px; position: fixed; background-color: #f7f7f7; border-radius: 10px;">'+
2501          '<h6 style="padding: 0; margin: 0">Private ' + (hiddenCollectionsData.productId ? 'product' : 'collection') + '</h6>' +
2502        '</div>';
2503        document.body.appendChild(banner);
2504      }
2505    }
2506  }
2507  </script>
2507
2508   <section id="shopify-section-template--23943398130011__1682071672acc7c375" class="shopify-section"><div><div id="shopify-block-AZ3lmUHU4VDRHajZYY__568441fb-dd46-4b19-8a2f-d8b4a0c33d26" class="shopify-block shopify-app-block cevoid-section-gallery"><div class="cevoid-section-block">
2509  
2510    <div
2511      class="cevoid-title-wrapper"
2512      style="margin-bottom: 30px; text-align: center;"
2513    >
2514      
2515        <div
2516          class="cevoid-title"
2517          style="color: #ffffff; font-size: 43px; line-height: 43px;"
2518        >
2519          Send us your postcard.
2520        </div>
2521      
2522      
2523        <p
2524          class="cevoid-paragraph"
2525          style="color: #000000; font-size: 26px; line-height: 26px;"
2526        >
2527          POSTCARDS
2528        </p>
2529      
2530    </div>
2531  
2532
2533  <div
2534    id="cevoid-container"
2535    data-gallery="g-yZKGcJA6WgsIKmjXKeHMF"
2536    
2537    
2538  ></div>
2539</div>
2540
2541
2542
2543<style>
2544  .cevoid-section-gallery {
2545    width: 100%;
2546  }
2547</style>
2548
2549
2550</div>
2551</div>
2552
2553
2554</section> 
2555
2556
2557    </main>
2558    <footer id="shopify-section-footer" class="shopify-section footer__parent"><div
2559  class="footer"
2560  data-section-id="footer"
2561  data-section-type="footer"
2562  style="
2563    --color-background-input: rgba(29, 29, 29, 0.2);
2564    --color-background-input-hover: rgba(29, 29, 29, 0.25);
2565    --color-background-input-hover-dull: rgba(29, 29, 29, 0.1);
2566    --color-background-input-highlight: rgba(29, 29, 29, 0.35);
2567    --color-text-input: rgba(29, 29, 29, 0.95);
2568  "
2569>
2570  <div class="footer__inner">
2571    <div class="footer__groups">
2572      
2573        <div class="footer__group footer__group--menu footer__group--1">
2574          <button type="button" class="footer__header" data-header>
2575            <span class="footer__heading ff-heading fs-heading-4-base">Orders</span>
2576            <span class="footer__arrow">
2577<span class="icon ">
2578  <svg width="100%" viewBox="0 0 24 24">
2579    
2580        <path fill="currentColor" d="m0 6 12 12L24 6z" />
2581
2582      
2583  </svg>
2584</span></span>
2585          </button>
2586          <div class="footer__group-content"><div class="footer__links fs-body-base">
2587                
2588                  <ul>
2589                    
2590                      <li><a href="/pages/contact">Contact us</a></li>
2591                    
2592                      <li><a href="/policies/shipping-policy">Shipping & Returns</a></li>
2593                    
2594                      <li><a href="/policies/terms-of-service">Terms & Conditions</a></li>
2595                    
2596                      <li><a href="/policies/privacy-policy">Privacy</a></li>
2597                    
2598                      <li><a href="/?id=GDPR_769769dd5c4da8efb4d18bf16ca2c677">Cookies</a></li>
2599                    
2600                      <li><a href="/policies/legal-notice">Legal Issues</a></li>
2601                    
2602                  </ul>
2603                
2604              </div></div>
2605        </div>
2606      
2607        <div class="footer__group footer__group--menu footer__group--2">
2608          <button type="button" class="footer__header" data-header>
2609            <span class="footer__heading ff-heading fs-heading-4-base">The Atelier</span>
2610            <span class="footer__arrow">
2611<span class="icon ">
2612  <svg width="100%" viewBox="0 0 24 24">
2613    
2614        <path fill="currentColor" d="m0 6 12 12L24 6z" />
2615
2616      
2617  </svg>
2618</span></span>
2619          </button>
2620          <div class="footer__group-content"><div class="footer__links fs-body-base">
2621                
2622                  <ul>
2623                    
2624                      <li><a href="/pages/about-anna-2">About Anna</a></li>
2625                    
2626                      <li><a href="/pages/our-hv-atelier">Our Artisans</a></li>
2627                    
2628                      <li><a href="/pages/our-hv-atelier">Craftsmanship</a></li>
2629                    
2630                  </ul>
2631                
2632              </div></div>
2633        </div>
2634      
2635        <div class="footer__group footer__group--newsletter footer__group--3">
2636          <button type="button" class="footer__header" data-header>
2637            <span class="footer__heading ff-heading fs-heading-4-base">Newsletter</span>
2638            <span class="footer__arrow">
2639<span class="icon ">
2640  <svg width="100%" viewBox="0 0 24 24">
2641    
2642        <path fill="currentColor" d="m0 6 12 12L24 6z" />
2643
2644      
2645  </svg>
2646</span></span>
2647          </button>
2648          <div class="footer__group-content"><div class="footer__newsletter">
2649                <div class="fs-body-base footer__text"><p>Receive the latest news from the Atelier and discover our stories, collections, and surprises.</p></div>
2650
2651                <form method="post" action="/contact#footer-subscribe" id="footer-subscribe" accept-charset="UTF-8" class="footer__newsletter-form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="✓" />
2652                  
2653�<div class="footer__newsletter-inner">
2654                      <input type="hidden" name="contact[tags]" value="newsletter">
2655                      <label for="footer-subscribe-email" class="visually-hidden">Email address</label>
2656                      <input type="email"
2657                        class="input"
2658                        name="contact[email]"
2659                        id="footer-subscribe-email"
2660                        value=""
2661                        placeholder="Email address"
2662                        autocorrect="off"
2663                        autocapitalize="off"
2664                      >
2665                      <button type="submit" name="commit" id="Subscribe-footer" class="footer__newsletter-button" aria-label="Subscribe">
2666<span class="icon ">
2667  <svg width="100%" viewBox="0 0 24 24">
2668    
2669        <circle fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" cx="12" cy="12" r="10"/>
2670        <path fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" d="m12 16 4-4-4-4M8 12h8"/>
2671
2672      
2673  </svg>
2674</span></button>
2675                    </div></form>
2676              </div></div>
2677        </div>
2678      �</div><hr class="footer__rule" /><div class="footer__bottom"><div class="footer__bottom-left">
2679            �<ul class="social-icons"><li>
2680        <a href="https://www.facebook.com/horrorvacuimunich/" title="HORROR VACUI on Facebook" target="_blank">
2681          
2682<span class="icon ">
2683  <svg width="100%" viewBox="0 0 24 24">
2684    
2685        <path d="M12,2C6.477,2,2,6.477,2,12c0,5.013,3.693,9.153,8.505,9.876V14.65H8.031v-2.629h2.474v-1.749 c0-2.896,1.411-4.167,3.818-4.167c1.153,0,1.762,0.085,2.051,0.124v2.294h-1.642c-1.022,0-1.379,0.969-1.379,2.061v1.437h2.995 l-0.406,2.629h-2.588v7.247C18.235,21.236,22,17.062,22,12C22,6.477,17.523,2,12,2z" fill="currentColor" />
2686
2687      
2688  </svg>
2689</span>
2690        </a>
2691      </li><li>
2692        <a href="https://de.pinterest.com/horrorvacuipjs/?etslf=6592&eq=HORROR" title="HORROR VACUI on Pinterest" target="_blank">
2693          
2694<span class="icon ">
2695  <svg width="100%" viewBox="0 0 24 24">
2696    
2697        <path d="M12,2C6.477,2,2,6.477,2,12c0,4.237,2.636,7.855,6.356,9.312c-0.087-0.791-0.167-2.005,0.035-2.868 c0.182-0.78,1.172-4.971,1.172-4.971s-0.299-0.599-0.299-1.484c0-1.391,0.806-2.428,1.809-2.428c0.853,0,1.265,0.641,1.265,1.408 c0,0.858-0.546,2.141-0.828,3.329c-0.236,0.996,0.499,1.807,1.481,1.807c1.777,0,3.143-1.874,3.143-4.579 c0-2.394-1.72-4.068-4.177-4.068c-2.845,0-4.515,2.134-4.515,4.34c0,0.859,0.331,1.781,0.744,2.282 c0.082,0.099,0.093,0.186,0.069,0.287c-0.076,0.316-0.244,0.995-0.277,1.134c-0.043,0.183-0.145,0.222-0.334,0.133 c-1.249-0.582-2.03-2.408-2.03-3.874c0-3.154,2.292-6.052,6.608-6.052c3.469,0,6.165,2.472,6.165,5.776 c0,3.447-2.173,6.22-5.189,6.22c-1.013,0-1.966-0.527-2.292-1.148c0,0-0.502,1.909-0.623,2.378 c-0.226,0.868-0.835,1.958-1.243,2.622C9.975,21.843,10.969,22,12,22c5.522,0,10-4.478,10-10S17.523,2,12,2z" fill="currentColor" />
2698
2699      
2700  </svg>
2701</span>
2702        </a>
2703      </li><li>
2704        <a href="https://www.instagram.com/horrorvacuimunich/" title="HORROR VACUI on Instagram" target="_blank">
2705          
2706<span class="icon ">
2707  <svg width="100%" viewBox="0 0 24 24">
2708    
2709        <path d="M7.8,2H16.2C19.4,2 22,4.6 22,7.8V16.2A5.8,5.8 0 0,1 16.2,22H7.8C4.6,22 2,19.4 2,16.2V7.8A5.8,5.8 0 0,1 7.8,2M7.6,4A3.6,3.6 0 0,0 4,7.6V16.4C4,18.39 5.61,20 7.6,20H16.4A3.6,3.6 0 0,0 20,16.4V7.6C20,5.61 18.39,4 16.4,4H7.6M17.25,5.5A1.25,1.25 0 0,1 18.5,6.75A1.25,1.25 0 0,1 17.25,8A1.25,1.25 0 0,1 16,6.75A1.25,1.25 0 0,1 17.25,5.5M12,7A5,5 0 0,1 17,12A5,5 0 0,1 12,17A5,5 0 0,1 7,12A5,5 0 0,1 12,7M12,9A3,3 0 0,0 9,12A3,3 0 0,0 12,15A3,3 0 0,0 15,12A3,3 0 0,0 12,9Z" fill="currentColor" />
2710
2711      
2712  </svg>
2713</span>
2714        </a>
2715      </li></ul>
2716�</div><div class="footer__bottom-right"></div>
2717      </div><div class="footer__mobile-social-icons">
2718        <ul class="social-icons"><li>
2719        <a href="https://www.facebook.com/horrorvacuimunich/" title="HORROR VACUI on Facebook" target="_blank">
2720          
2721<span class="icon ">
2722  <svg width="100%" viewBox="0 0 24 24">
2723    
2724        <path d="M12,2C6.477,2,2,6.477,2,12c0,5.013,3.693,9.153,8.505,9.876V14.65H8.031v-2.629h2.474v-1.749 c0-2.896,1.411-4.167,3.818-4.167c1.153,0,1.762,0.085,2.051,0.124v2.294h-1.642c-1.022,0-1.379,0.969-1.379,2.061v1.437h2.995 l-0.406,2.629h-2.588v7.247C18.235,21.236,22,17.062,22,12C22,6.477,17.523,2,12,2z" fill="currentColor" />
2725
2726      
2727  </svg>
2728</span>
2729        </a>
2730      </li><li>
2731        <a href="https://de.pinterest.com/horrorvacuipjs/?etslf=6592&eq=HORROR" title="HORROR VACUI on Pinterest" target="_blank">
2732          
2733<span class="icon ">
2734  <svg width="100%" viewBox="0 0 24 24">
2735    
2736        <path d="M12,2C6.477,2,2,6.477,2,12c0,4.237,2.636,7.855,6.356,9.312c-0.087-0.791-0.167-2.005,0.035-2.868 c0.182-0.78,1.172-4.971,1.172-4.971s-0.299-0.599-0.299-1.484c0-1.391,0.806-2.428,1.809-2.428c0.853,0,1.265,0.641,1.265,1.408 c0,0.858-0.546,2.141-0.828,3.329c-0.236,0.996,0.499,1.807,1.481,1.807c1.777,0,3.143-1.874,3.143-4.579 c0-2.394-1.72-4.068-4.177-4.068c-2.845,0-4.515,2.134-4.515,4.34c0,0.859,0.331,1.781,0.744,2.282 c0.082,0.099,0.093,0.186,0.069,0.287c-0.076,0.316-0.244,0.995-0.277,1.134c-0.043,0.183-0.145,0.222-0.334,0.133 c-1.249-0.582-2.03-2.408-2.03-3.874c0-3.154,2.292-6.052,6.608-6.052c3.469,0,6.165,2.472,6.165,5.776 c0,3.447-2.173,6.22-5.189,6.22c-1.013,0-1.966-0.527-2.292-1.148c0,0-0.502,1.909-0.623,2.378 c-0.226,0.868-0.835,1.958-1.243,2.622C9.975,21.843,10.969,22,12,22c5.522,0,10-4.478,10-10S17.523,2,12,2z" fill="currentColor" />
2737
2738      
2739  </svg>
2740</span>
2741        </a>
2742      </li><li>
2743        <a href="https://www.instagram.com/horrorvacuimunich/" title="HORROR VACUI on Instagram" target="_blank">
2744          
2745<span class="icon ">
2746  <svg width="100%" viewBox="0 0 24 24">
2747    
2748        <path d="M7.8,2H16.2C19.4,2 22,4.6 22,7.8V16.2A5.8,5.8 0 0,1 16.2,22H7.8C4.6,22 2,19.4 2,16.2V7.8A5.8,5.8 0 0,1 7.8,2M7.6,4A3.6,3.6 0 0,0 4,7.6V16.4C4,18.39 5.61,20 7.6,20H16.4A3.6,3.6 0 0,0 20,16.4V7.6C20,5.61 18.39,4 16.4,4H7.6M17.25,5.5A1.25,1.25 0 0,1 18.5,6.75A1.25,1.25 0 0,1 17.25,8A1.25,1.25 0 0,1 16,6.75A1.25,1.25 0 0,1 17.25,5.5M12,7A5,5 0 0,1 17,12A5,5 0 0,1 12,17A5,5 0 0,1 7,12A5,5 0 0,1 12,7M12,9A3,3 0 0,0 9,12A3,3 0 0,0 12,15A3,3 0 0,0 15,12A3,3 0 0,0 12,9Z" fill="currentColor" />
2749
2750      
2751  </svg>
2752</span>
2753        </a>
2754      </li></ul>
2755
2756      </div><div class="footer__credits fs-body-x-small">
2757      <p>Copyright &copy; 2026, <a href="/" title="">HORROR VACUI</a>.</p>
2758      <p><a target="_blank" rel="nofollow" href="https://www.shopify.com?utm_campaign=poweredby&amp;utm_medium=shopify&amp;utm_source=onlinestore">Powered by Shopify</a></p>
2759    </div>
2760  </div>
2761</div>
2762
2763
2764
2765</footer>
2766    <div id="shopify-section-popup" class="shopify-section">
2767</div>
2768    <div class="modal popover" data-modal>
2769  <div class="modal__wash"></div>
2770  <div class="modal__inner" data-scroll-lock-ignore>
2771    <div class="modal__header">
2772      <button
2773      type="button"
2774      data-modal-close
2775      class="modal__close-icon"
2776      aria-label="Close"
2777      >
2778        <span class="icon-button ">
2779  <span class="icon-button__icon">
2780    
2781<span class="icon ">
2782  <svg width="100%" viewBox="0 0 24 24">
2783    
2784        <path stroke-width="1" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M18 6 6 18M6 6l12 12"/>
2785
2786      
2787  </svg>
2788</span>
2789  </span>
2790</span>
2791
2792      </button>
2793    </div>
2794    <div class="modal__content rte rte--page"></div>
2795  </div>
2796</div>
2797
2798    <div
2799  class="store-availability-drawer popover"
2800  data-store-availability-drawer
2801  aria-describedby="drawer-title"
2802  aria-hidden="true"
2803  role="dialog"
2804>
2805  <div class="store-availability-drawer__wash" data-store-availability-drawer-wash></div>
2806  <div class="store-availability-drawer__inner">
2807    <div class="store-availability-drawer__header">
2808      <div class="store-availability-drawer__product-info">
2809        <h4 id="drawer-title" class="store-availability-drawer__store-list-product-title ff-heading fs-heading-2-large">
2810          Availability
2811        </h4>
2812      </div>
2813      <button
2814        type="button"
2815        class="store-availability-drawer__close"
2816        data-store-availability-close aria-label="Close"
2817      >
2818        <span class="icon-button ">
2819  <span class="icon-button__icon">
2820    
2821<span class="icon ">
2822  <svg width="100%" viewBox="0 0 24 24">
2823    
2824        <path stroke-width="1" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M18 6 6 18M6 6l12 12"/>
2825
2826      
2827  </svg>
2828</span>
2829  </span>
2830</span>
2831
2832      </button>
2833    </div>
2834    <div class="store-availbility-drawer__product" data-store-availability-product></div>
2835
2836    <div class="store-availbility-drawer__content" data-store-list-container></div>
2837  </div>
2838</div>
2839
2840
2841    
2842  </div>
2843  
2843<script src="//www.youtube.com/iframe_api" type="text/javascript"></script>
2843
2844  <link href="//horror-vacui.com/cdn/shopifycloud/shopify-plyr/v1.0/shopify-plyr.css" rel="stylesheet" type="text/css" media="all" />
2845
2846  
2847  
2848    
2849    
2849<script type="module" src="//horror-vacui.com/cdn/shop/t/26/assets/theme.js?v=54341719082674082291728237194" ></script>
2849
2850  
2850<script type="module" src="//horror-vacui.com/cdn/shop/t/26/assets/custom.js?v=183251399032734045921728237194" ></script>
2850
2851    
2852    
2852<script nomodule src="//horror-vacui.com/cdn/shop/t/26/assets/s.min.js?v=176831107740605177141728237194"></script>
2852
2853    
2853<script nomodule>
2854        System.import('//horror-vacui.com/cdn/shop/t/26/assets/theme.nomodule.js?v=170450442978053367801728237194');
2855    </script>
2855
2856  
2857  
2858  
2859  
2860<script src="//cdn.shopify.com/s/files/1/0194/1736/6592/t/1/assets/booster-page-speed-optimizer.js?23" type="text/javascript"></script>
2860
2861 
2862  <div class="index-section--flush powr-popup" id="00753def_1678284576"></div>
2863  
2864  <div class="index-section--flush powr-popup" id="2ac8f652_1680269198"></div>
2865 <!-- langify-v2-scripts-begin -->
2866
2867
2868<script>
2869  var langify = langify || {};
2870
2871
2872  /**
2873  * 
2874  * 
2875  * @class LyHelper
2876  */
2877  class LyHelper {
2878    constructor() {
2879      return {
2880        ajax: function(params) { return LyHelper.ajax(params); },
2881        isIE: function() { return LyHelper.isIE(); },
2882        extractImageObject: function(val) { return LyHelper.extractImageObject(val); },
2883        getCurrentLanguage: function() { return LyHelper.getCurrentLanguage(); },
2884        getCookie: function(name) { return LyHelper.getCookie(name); },
2885        setCookie: function(name, value, days) { return LyHelper.setCookie(name, value, days); },
2886        getVersion: function() { return LyHelper.getVersion(); },
2887        isOutOfViewport: function(elem) { return LyHelper.isOutOfViewport(elem); },
2888        isDomainFeatureEnabled: function() { return LyHelper.isDomainFeatureEnabled(); },
2889        getVal: function(str) { return LyHelper.getVal(str); },
2890        inIframe: function() { return LyHelper.inIframe(); },
2891        shopifyAPI: function() { return LyHelper.shopifyAPI(); },
2892        loadScript: function(url, callback) { return LyHelper.loadScript(url, callback); },
2893        localizationRedirect: function(type, code, additionalFields, additionalParams, domain) { return LyHelper.localizationRedirect(type, code, additionalFields, additionalParams, domain); },
2894        changeCurrency: function(code) { return LyHelper.changeCurrency(code); },
2895        log: function(title, data, type) { return LyHelper.log(title, data, type); },
2896      }
2897    }
2898    static ajax(params) {
2899      var data = params.data;
2900      fetch(params.url, {
2901        method: params.method,
2902        headers: {
2903          'Content-Type': 'application/json',
2904        },
2905        body: (data && params.method === 'POST') ? JSON.stringify(data) : null,
2906      })
2907      .then(response => response.json())
2908      .then(data => {
2909        params.success(data);
2910      })
2911      .catch((error) => {
2912        console.error('Error:', error);
2913      });
2914    }
2915    static isIE() {
2916      var ua = navigator.userAgent;
2917      var is_ie = ua.indexOf("MSIE ") > -1 || ua.indexOf("Trident/") > -1;
2918      return is_ie;
2919    }
2920    static extractImageObject(val) {
2921      if(!val || val == '') return false;
2922      var val = val;
2923
2924      // Handle src-sets
2925      if(val.search(/([0-9]+w?h?x?,)/gi) > -1) {
2926        val = val.split(/([0-9]+w?h?x?,)/gi)[0];
2927      }
2928
2929      var hostBegin = val.indexOf('//') ? val.indexOf('//') : 0;
2930      var hostEnd = val.lastIndexOf('/') + 1;
2931      var host = val.substring(hostBegin, hostEnd);      
2932      var afterHost = val.substring(hostEnd, val.length);
2933
2934      var url = val;
2935      var file = ''; 
2936      var name = ''; 
2937      var type = '';
2938      afterHost = afterHost.substring(0, (afterHost.indexOf("#") == -1) ? afterHost.length : afterHost.indexOf("#"));
2939      afterHost = afterHost.substring(0, (afterHost.indexOf("?") == -1) ? afterHost.length : afterHost.indexOf("?"));
2940      name = afterHost.replace(/(_[0-9]+x[0-9]*|_{width}x|_{size})?(_crop_(top|center|bottom|left|right))?(@[0-9]*x)?(\.progressive)?\.(png\.jpg|jpe?g|png|gif|webp)/gi, "");
2941
2942      if(afterHost.search(/(\.png\.jpg|\.jpg\.jpg)/gi) > -1) {
2943        type = afterHost.substring(afterHost.search(/(\.png\.jpg|\.jpg\.jpg)/gi)+1, afterHost.length);
2944      } else {
2945        type = afterHost.substring(afterHost.lastIndexOf('.')+1, afterHost.length);
2946      }
2947      
2948      file = afterHost.replace(/(_[0-9]+x[0-9]*|_{width}x|_{size})?(_crop_(top|center|bottom|left|right))?(@[0-9]*x)?(\.progressive)?\.(png\.jpg|jpe?g|png|gif|webp)/gi, '.'+type);
2949
2950      return {
2951        host: host,
2952        name: name,
2953        type: type,
2954        file: file
2955      }
2956    }
2957    static getCurrentLanguage() {
2958      return window.langify.locale.iso_code;
2959    }
2960    static setLanguage(code) {
2961      
2962    }
2963    static getCookie(name) {
2964      var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
2965      if(v) return v[2];
2966      else return null;
2967    }
2968    static setCookie(name, value, days) {
2969      var d = new Date;
2970      d.setTime(d.getTime() + 24*60*60*1000*days);
2971      document.cookie = name + "=" + value + ";path=/;expires=" + d.toGMTString();
2972    }
2973    static getVersion() {
2974      return 2;
2975    }
2976    static isOutOfViewport (elem) {
2977      var bounding = elem.getBoundingClientRect();
2978      var out = {};
2979      out.top = bounding.top < 0;
2980      out.left = bounding.left < 0;
2981      out.bottom = Math.ceil(bounding.bottom) >= (window.innerHeight || document.documentElement.clientHeight);
2982      out.right = bounding.right > (window.innerWidth || document.documentElement.clientWidth);
2983      out.any = out.top || out.left || out.bottom || out.right;
2984      out.inViewport = bounding.x > 0 && bounding.y > 0;
2985      return out;
2986    }
2987    static isDomainFeatureEnabled() {
2988      return window.langify.locale.domain_feature_enabled;
2989    }
2990    static getVal(str) {
2991      var v = window.location.search.match(new RegExp('(?:[?&]'+str+'=)([^&]+)'));
2992      return v ? v[1] : null;
2993    }
2994    static inIframe() {
2995      try {
2996        return window.self !== window.top;
2997      } catch (e) {
2998        return true;
2999      }
3000    }
3001    static shopifyAPI() {
3002      var root_url = window.langify.locale.root_url != '/' ? window.langify.locale.root_url : '';
3003
3004      return {
3005        attributeToString: function(attribute) {
3006          if((typeof attribute) !== 'string') {
3007            attribute += '';
3008            if(attribute === 'undefined') {attribute = '';}
3009          }
3010          return attribute.trim();
3011        },
3012        getCart: function(callback) {
3013          LyHelper.ajax({
3014            method: 'GET',
3015            url: root_url+'/cart.js',
3016            success: function (cart, textStatus) {
3017              if((typeof callback) === 'function') {
3018                callback(cart);
3019              }
3020            }
3021          });
3022        },
3023        updateCartNote: function(note, callback) {
3024          var params = {
3025            method: 'POST',
3026            url: root_url+'/cart/update.js',
3027            data: 'note=' + this.attributeToString(note),
3028            dataType: 'json',
3029            success: function(cart) {if((typeof callback) === 'function') {callback(cart);}},
3030            error: this.onError
3031          };
3032          LyHelper.ajax(params);
3033        },
3034        updateCartAttributes: function(attributes, callback) {
3035          var params = {
3036            method: 'POST',
3037            url: root_url+'/cart/update.js',
3038            data: {"attributes": attributes},
3039            dataType: 'json',
3040            success: function(cart) {
3041              if((typeof callback) === 'function') {
3042                callback(cart);
3043              }
3044            },
3045            error: this.onError
3046          };
3047          LyHelper.ajax(params);
3048        },
3049        onError: function(XMLHttpRequest, textStatus) {
3050
3051        }      
3052      }
3053    }
3054    static loadScript(url, callback) {
3055      var script = document.createElement('script');
3056      script.type = 'text/javascript';
3057      if(script.readyState) {
3058        script.onreadystatechange = function () {
3059          if(script.readyState == 'loaded' || script.readyState == 'complete') {
3060            script.onreadystatechange = null;
3061            callback();
3062          }
3063        };
3064      } else {
3065        script.onload = function () {
3066          callback();
3067        };
3068      }
3069      script.src = url;
3070      document.getElementsByTagName('head')[0].appendChild(script);
3071    }
3072    static localizationRedirect(type, code, additionalFields, additionalParams, domain) {
3073      if(type !== 'country_code' && type !== 'language_code') { 
3074        return false; 
3075      }
3076      if(!additionalParams) {
3077        var additionalParams = '';
3078      }
3079      if(domain) {
3080        window.location.href = domain;
3081        return true;
3082      }
3083      var params = [
3084        {
3085          name: type,
3086          value: code
3087        },
3088        {
3089          name: 'return_to',
3090          value: window.location.pathname + window.location.search + additionalParams + window.location.hash
3091        },
3092        {
3093          name: 'form_type',
3094          value: 'localization'
3095        },
3096        {
3097          name: '_method',
3098          value: 'put'
3099        }
3100      ];
3101      if(additionalFields) {
3102        for(var i=0; i<additionalFields.length; i++) {
3103          params.push(additionalFields[i]);
3104        }
3105      }
3106      const form = document.createElement('form');
3107      form.method = 'POST';
3108      form.action = '/localization';
3109      params.forEach(function(param) {
3110        const field = document.createElement('input');
3111        field.type = 'hidden';
3112        field.name = param['name'];
3113        field.value = param['value'];
3114        form.appendChild(field);
3115      });
3116      document.body.appendChild(form);
3117      form.submit();
3118    }
3119    static changeCurrency(code) {
3120      const params = [
3121        {
3122          name: 'currency_code',
3123          value: code
3124        },
3125        {
3126          name: 'return_to',
3127          value: window.location.pathname + window.location.search + window.location.hash
3128        },
3129        {
3130          name: 'form_type',
3131          value: 'localization'
3132        },
3133        {
3134          name: '_method',
3135          value: 'put'
3136        }
3137      ];
3138      const form = document.createElement('form');
3139      form.method = 'POST';
3140      form.action = '/localization';
3141      params.forEach(function(param) {
3142        const field = document.createElement('input');
3143        field.type = 'hidden';
3144        field.name = param['name'];
3145        field.value = param['value'];
3146        form.appendChild(field);
3147      });
3148      document.body.appendChild(form);
3149      form.submit();
3150    }
3151    static log(title, data, type) {
3152      if(langify.settings.debug) {
3153        if(!data) {
3154          var data = '';
3155        }
3156        
3157        var css = 'color: green; font-weight: bold;';
3158        if(type === 'error') {
3159          css = 'color: red; font-weight: bold;';
3160        }
3161
3162        console.log(`%c ${title}: \n`, css, data);
3163      }
3164    }
3165  };
3166
3167
3168  /**
3169  *
3170  *
3171  * @class TranslationObserver
3172  */
3173  class TranslationObserver {
3174    constructor() {
3175      LyHelper.log('TranslationObserver instantiation')
3176    }
3177
3178    init() {
3179      if(langify.settings.observe && !LyHelper.isIE()) {
3180        var langifyObserver = this.langifyObserverCore();
3181        langifyObserver.init();
3182        
3183        // HOTFIX: translation observer sometimes refuses to trigger on page load_
3184        langifyObserver.triggerCustomContents();
3185
3186        langify.api = {
3187          observer: {
3188            start: langifyObserver.init,
3189            stop: langifyObserver.stopObserver,
3190            trigger: langifyObserver.triggerCustomContents,
3191            translateLink: langifyObserver.translateLink,
3192            translateTextNode: langifyObserver.translateTextNode,
3193            translateNodeAttrs: langifyObserver.translateNodeAttrs,
3194            translateImage: langifyObserver.translateImage,
3195            translateCssImage: langifyObserver.translateCssImage
3196          }
3197        };
3198      }
3199
3200      return this;
3201    }
3202
3203    langifyObserverCore() {
3204      var observedNodes = [];
3205      var intersectionObs = null;
3206      var mutationCount = 0;
3207      var mutationObs = null;
3208      var mutationObsConfig = {
3209        characterData: true,
3210        characterDataOldValue: true,
3211        attributes: true,
3212        attributeOldValue: true,
3213        childList: true,
3214        subtree: true,
3215      };
3216      var customContents_html = {};
3217      var customContents_text = {};
3218      var customContents_attr = {};
3219    
3220      function init() {
3221        if(langify.settings.observe) {
3222          spreadCustomContents();
3223          if (window.MutationObserver) {
3224            if (langify.settings.lazyload && window.IntersectionObserver) {
3225              startIntersectionObserver();
3226            } else {
3227              startMutationObserver(null);
3228            }
3229          } else {
3230            startMutationEvents();
3231          }
3232        }
3233      }
3234    
3235    
3236      // Intersection Observer
3237      function startIntersectionObserver() {
3238        intersectionObs = new IntersectionObserver(callbackIntersectionChange);
3239        var elementNodes = document.getElementsByClassName('shopify-section');
3240        Array.prototype.slice.call(elementNodes).forEach(function(node) {
3241          intersectionObs.observe(node);
3242        });
3243      }
3244    
3245      function callbackIntersectionChange(intersections) {
3246        intersections.forEach(function(intersection) {
3247          var target = intersection.target;
3248          var targetIsIntersecting = Boolean(target.getAttribute('ly-is-intersecting') === "true" ? true : false);
3249    
3250          if(typeof targetIsIntersecting == 'undefined' || targetIsIntersecting == null) {
3251            target.setAttribute('ly-is-intersecting', intersection.isIntersecting);
3252            targetIsIntersecting = intersection.isIntersecting;
3253          }
3254          
3255          // On Screen
3256          if(targetIsIntersecting == false && intersection.isIntersecting == true) {
3257            if(!target.getAttribute('ly-is-observing')) {
3258              startMutationObserver(target);
3259              intersectionObs.unobserve(target);
3260    
3261              // As the mutation observer didn't see the "add" of the elememts, trigger the initial translation manually
3262              var elementNodes = getNodesUnder(target, 'SHOW_ELEMENT');
3263              var textNodes = getNodesUnder(target, 'SHOW_TEXT');
3264              var nodes = elementNodes.concat(textNodes);
3265              nodes.forEach(function(node) {
3266                translate(node, 'mutation -> childList');
3267              });
3268            }
3269          } 
3270          // Off Screen
3271          //else if(targetIsIntersecting == true && intersection.isIntersecting == false) {
3272          //  stopMutationObserver(target);
3273          //}
3274          target.setAttribute('ly-is-intersecting', intersection.isIntersecting);
3275        });
3276      }
3277    
3278    
3279      // Mutation Observer
3280      function startMutationObserver(observerTarget) {
3281        if (!observerTarget) {
3282          var target = document.documentElement || document.body; // main window
3283        } else {
3284          if (observerTarget.nodeName  === 'IFRAME') {
3285            try { var target = observerTarget.contentDocument || observerTarget.contentWindow.document; }
3286            catch { return false; }
3287          } else {
3288            var target = observerTarget;
3289          }
3290        }
3291        mutationObs = new MutationObserver(callbackDomChange);
3292        mutationObs.observe(target, mutationObsConfig);
3293        observedNodes.push(target);
3294        try { target.setAttribute('ly-is-observing', 'true'); } catch(e) {}
3295      }
3296    
3297      function stopMutationObserver(target) {
3298        if(observedNodes.indexOf(target) > -1) {
3299          observedNodes.splice(observedNodes.indexOf(target), 1);
3300        }
3301        var mutations = mutationObs.takeRecords();
3302        mutationObs.disconnect();
3303        observedNodes.forEach(node => {
3304          mutationObs.observe(node, mutationObsConfig);
3305        });
3306        try { target.removeAttribute('ly-is-observing'); } catch(e) {}
3307      }
3308    
3309    
3310      function callbackDomChange(mutations, mutationObs) {
3311        for (var i = 0, length = mutations.length; i < length; i++) {
3312          var mutation = mutations[i];
3313          var target = mutation.target;
3314    
3315          // Links-Hook
3316          if (mutation.type === 'attributes' && (mutation.attributeName === 'href' || mutation.attributeName === 'action')) {
3317            var target = mutation.target;
3318            translateLink(target.getAttribute(mutation.attributeName), target);
3319          }
3320          // Images-Hook
3321          else if (mutation.type === 'attributes' && (mutation.attributeName === 'src' || mutation.attributeName === 'data-src' || mutation.attributeName === 'srcset' || mutation.attributeName === 'data-srcset')) {
3322            translateImage(target, mutation.attributeName);
3323          }
3324          else if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
3325            translateCssImage(target);
3326          }
3327          // Subtree Events
3328          else if (mutation.type === 'childList') {
3329            // Added Nodes
3330            if(mutation.addedNodes.length > 0) {
3331              var elementNodes = getNodesUnder(mutation.target, 'SHOW_ELEMENT');
3332              var textNodes = getNodesUnder(mutation.target, 'SHOW_TEXT');
3333              var nodes = elementNodes.concat(textNodes);
3334              nodes.forEach(function(node) {
3335                translate(node, 'mutation -> childList');
3336              });
3337            }
3338          }
3339          // CharacterData Events
3340          else if (mutation.type === 'characterData') {
3341            var target = mutation.target;
3342            translate(target, 'mutation -> characterData');
3343          }
3344        }
3345      }
3346    
3347    
3348      function translate(node, info) {
3349        if((node.nodeType === 1 && node.hasAttribute('data-ly-locked')) || (node.nodeType === 3 && node.parentNode && node.parentNode.hasAttribute('data-ly-locked'))) {
3350          return;
3351        }
3352        // CC-Hook
3353        if (node.nodeName  !== 'SCRIPT' && node.nodeName  !== 'STYLE') {
3354          if (node.nodeType === 3) {
3355            translateTextNode(node, info);
3356          }
3357          translateNodeAttrs(node);
3358        }
3359        // Links-Hook
3360        if (node.nodeName  === 'A' || node.nodeName  === 'FORM') {
3361          if(node.hasAttribute('href')) var attrName = 'href';
3362          else var attrName = 'action';
3363          var url = node.getAttribute(attrName);
3364          translateLink(url, node);
3365        }
3366        // Images-Hook
3367        if (node.nodeName  === 'IMG' || node.nodeName  === 'SOURCE') {
3368          translateImage(node, ['src', 'data-src', 'srcset', 'data-srcset']);
3369        }
3370        if (node.attributes && node.getAttribute('style')) {
3371          translateCssImage(node);
3372        }
3373        // Iframe Observation
3374        if (node.nodeName  === 'IFRAME') {
3375          // Todo: handle srcdoc iframe content observing
3376          if (node.getAttribute('ly-is-observing') == null && node.getAttribute('src') == null && !node.hasAttribute('srcdoc')) {
3377            node.setAttribute('ly-is-observing', 'true');
3378            startMutationObserver(node);
3379          }
3380        }
3381      }
3382    
3383      function translateNodeAttrs(node) {
3384        if (node.attributes && node.getAttribute('placeholder')) {
3385          var src = node.getAttribute('placeholder').trim().replace(/(\r\n|\n|\r)/gim,"").replace(/\s+/g," ").toLowerCase();
3386          if(customContents_text[src] && node.getAttribute('placeholder') !== customContents_text[src]) {
3387            node.setAttribute('placeholder', customContents_text[src]);
3388          }
3389        }
3390      }
3391    
3392    
3393      function translateTextNode(node, info) {
3394        if(langify.settings.observeCustomContents === false || !node.textContent || node.textContent.trim().length === 0) {
3395          return;
3396        }
3397        var oldSrc = node.textContent.trim().replace(/(\r\n|\n|\r)/gim,"").replace(/\s+/g," ").toLowerCase();
3398        var src = node.textContent.trim().replace(/(\r\n|\n|\r)/gim," ").replace(/\s+/g," ").toLowerCase();
3399        if(customContents_text[oldSrc]) {
3400          src = oldSrc;
3401        }
3402        if(customContents_text[src] && node.textContent !== customContents_text[src]) {
3403          var newContent = node.textContent.replace(node.textContent.trim(), customContents_text[src]);
3404          if (newContent != node.textContent) {
3405            if(!node.parentNode.hasAttribute('data-ly-mutation-count') || parseInt(node.parentNode.getAttribute('data-ly-mutation-count')) < langify.settings.maxMutations) {
3406              var count = node.parentNode.hasAttribute('data-ly-mutation-count') ? parseInt(node.parentNode.getAttribute('data-ly-mutation-count')) : 0;
3407              node.parentNode.setAttribute('data-ly-mutation-count', count+1);
3408              node.textContent = newContent;
3409    
3410              mutationCount = mutationCount + 1;
3411              LyHelper.log('REPLACED (TEXT)', {
3412                  oldValue: src,
3413                  newValue: customContents_text[src],
3414                  mutationCount,
3415                }, 'success'
3416              );
3417            
3418              var event = new CustomEvent('langify.observer.aftertranslatetext', { 
3419                bubbles: true,
3420                detail: {
3421                  target: node,
3422                  original: src,
3423                  translation: customContents_text[src]
3424                }
3425              });
3426              node.dispatchEvent(event);
3427            }
3428          }
3429        }
3430      }
3431    
3432      function translateLink(url, node, force) {
3433        if(langify.settings.observeLinks === false || isLocalizationForm(node) || node.hasAttribute('data-ly-locked') || !url || (url.indexOf('mailto:') !== -1 || url.indexOf('javascript:') !== -1 || url.indexOf('tel:') !== -1 || url.indexOf('file:') !== -1 || url.indexOf('ftp:') !== -1 || url.indexOf('sms:') !== -1 || url.indexOf('market:') !== -1 || url.indexOf('fax:') !== -1 || url.indexOf('callto:') !== -1 || url.indexOf('ts3server:') !== -1)) {
3434          return;
3435        }
3436        var isLocalized = (
3437          url.indexOf('/'+ langify.locale.iso_code +'/') === 0 || url === '/'+ langify.locale.iso_code || 
3438          url.indexOf('/'+ langify.locale.iso_code.toLowerCase() +'/') === 0 || url === '/'+ langify.locale.iso_code.toLowerCase() ||          
3439          url.indexOf('/'+ langify.locale.iso_code.toLowerCase().substring(0,2) +'/') === 0 || url === '/'+ langify.locale.iso_code.toLowerCase().substring(0,2) ||
3440          url.indexOf(langify.locale.root_url + '/') === 0 || url === langify.locale.root_url || 
3441          url.indexOf(langify.locale.shop_url + langify.locale.root_url) === 0 || url === langify.locale.shop_url + langify.locale.root_url
3442        );
3443        var cleanUrl = url.replace(langify.locale.shop_url, '');
3444        var re = new RegExp(`\/\\b${langify.locale.iso_code.replace('-', '\-')}\\b\/`, 'gi');
3445        var link = cleanUrl.replace(re, '/');
3446        var isUrlAbsolute = (link.indexOf('://') > 0 || link.indexOf('//') === 0);
3447        var blacklist = ['#', '/'+ langify.locale.iso_code +'#'].concat(langify.settings.linksBlacklist);
3448        var isUrlBlacklisted = blacklist.find(x => url.indexOf(x) === 0);
3449        if(!isLocalized && !isUrlAbsolute && !isUrlBlacklisted && langify.locale.root_url != '/' || force) {
3450          if(node.hasAttribute('href')) var attrName = 'href'; else var attrName = 'action';
3451          if(link === '/' || link == langify.locale.root_url) link = '';
3452          var newLink = langify.locale.root_url + link;
3453          var timeStamp = Math.floor(Date.now());
3454          if(!node.hasAttribute('data-ly-processed') || timeStamp > parseInt(node.getAttribute('data-ly-processed')) + langify.settings.timeout) {
3455            node.setAttribute('data-ly-processed', timeStamp);
3456            node.setAttribute(attrName, newLink);
3457            if(node.hasAttribute('data-'+attrName)) node.setAttribute('data-'+attrName, newLink);
3458    
3459            mutationCount = mutationCount + 1;
3460            LyHelper.log('REPLACED (LINK)', {
3461                attrName,
3462                oldValue: url,
3463                newValue: newLink,
3464                mutationCount,
3465              }, 'success'
3466            );
3467            
3468            var event = new CustomEvent('langify.observer.aftertranslatelink', { 
3469              bubbles: true,
3470              detail: {
3471                target: node,
3472                attribute: attrName,
3473                original: url,
3474                translation: newLink
3475              }
3476            });
3477            node.dispatchEvent(event);
3478          }
3479        }
3480      }
3481    
3482      function translateImage(node, attr) {
3483        if(langify.settings.observeImages === false || node.hasAttribute('data-ly-locked') || Object.keys(customContents_image).length === 0) {
3484          return
3485        }
3486        var attrs = [];
3487        if(typeof attr === 'string') attrs.push(attr);
3488        else if(typeof attr === 'object') attrs = attr;
3489        var timeStamp = Math.floor(Date.now());
3490        if(!node.hasAttribute('data-ly-processed') || timeStamp > parseInt(node.getAttribute('data-ly-processed')) + langify.settings.timeout) {
3491          node.setAttribute('data-ly-processed', timeStamp);
3492          attrs.forEach(function(attr) {
3493            if(node.hasAttribute(attr)) {
3494              var imgObject = LyHelper.extractImageObject(node.getAttribute(attr));
3495              var imgKey = imgObject ? imgObject.file.toLowerCase() : '';
3496    
3497              if(customContents_image[imgKey]) {
3498    
3499                // Replace
3500                var oldValue = node.getAttribute(attr);
3501                var translation = node.getAttribute(attr);
3502                translation = translation.replace(new RegExp(imgObject.host, 'g'), customContents_image[imgKey].host);
3503                translation = translation.replace(new RegExp(imgObject.name, 'g'), customContents_image[imgKey].name);
3504                translation = translation.replace(new RegExp(imgObject.type, 'g'), customContents_image[imgKey].type);
3505    
3506                // China Hook
3507                if(node.getAttribute(attr).indexOf('cdn.shopifycdn.net') >= 0) {
3508                  translation = translation.replace(new RegExp('cdn.shopify.com', 'g'), 'cdn.shopifycdn.net'); 
3509                }
3510    
3511                if(node.getAttribute(attr) != translation) {
3512                  node.setAttribute(attr, translation);
3513    
3514                  mutationCount = mutationCount + 1;
3515                  LyHelper.log('REPLACED (IMAGE)', {
3516                    attrName: attr,
3517                    oldValue: oldValue,
3518                    newValue: translation,
3519                    mutationCount,
3520                  }, 'success');
3521            
3522                  var event = new CustomEvent('langify.observer.aftertranslateimage', { 
3523                    bubbles: true,
3524                    detail: {
3525                      target: node,
3526                      attribute: attr,
3527                      original: oldValue,
3528                      translation: translation
3529                    }
3530                  });
3531                  node.dispatchEvent(event);
3532                }
3533              }
3534            }
3535          });
3536        }
3537      }
3538    
3539      function translateCssImage(node) {
3540        if(langify.settings.observeImages === false || node.hasAttribute('data-ly-locked') || Object.keys(customContents_image).length === 0 || !node.getAttribute('style')) {
3541          return
3542        }
3543    
3544        var imgMatches = node.getAttribute('style').match(/url\(("|')?(.*)("|')?\)/gi);
3545        if(imgMatches !== null) {
3546          var imgSource = imgMatches[0].replace(/url\(("|')?|("|')?\)/, '');
3547          var imgObject = LyHelper.extractImageObject(imgSource);
3548          var imgKey = imgObject ? imgObject.file.toLowerCase() : '';
3549          var attr = 'style';
3550    
3551          if(customContents_image[imgKey]) {
3552    
3553            // Replace
3554            var translation = node.getAttribute(attr);
3555            translation = translation.replace(new RegExp(imgObject.host, 'g'), customContents_image[imgKey].host);
3556            translation = translation.replace(new RegExp(imgObject.name, 'g'), customContents_image[imgKey].name);
3557            translation = translation.replace(new RegExp(imgObject.type, 'g'), customContents_image[imgKey].type);
3558    
3559            // China Hook
3560            if(node.getAttribute(attr).indexOf('cdn.shopifycdn.net') >= 0) {
3561              translation = translation.replace(new RegExp('cdn.shopify.com', 'g'), 'cdn.shopifycdn.net'); 
3562            }
3563    
3564            if(node.getAttribute(attr) != translation) {
3565              var timeStamp = Math.floor(Date.now());
3566              if(!node.hasAttribute('data-ly-processed') || timeStamp > parseInt(node.getAttribute('data-ly-processed')) + langify.settings.timeout) {
3567                node.setAttribute('data-ly-processed', timeStamp);
3568                node.setAttribute(attr, translation);
3569                mutationCount = mutationCount + 1;
3570              }
3571            }
3572          }          
3573        }
3574      }
3575    
3576      function findAndLocalizeLinks(target, parent) {
3577        if(target.parentNode && parent) var allLinks = target.parentElement.querySelectorAll('[href],[action]');
3578        else var allLinks = target.querySelectorAll('[href],[action]');
3579        allLinks.forEach(link => {
3580          if(link.hasAttribute('href')) var attrName = 'href'; else var attrName = 'action';
3581          var url = link.getAttribute(attrName);
3582          translateLink(url, link);
3583        });
3584      }
3585      
3586      function isLocalizationForm(node) {
3587        if(node.querySelector('input[name="form_type"][value="localization"]')){
3588          return true;
3589        }
3590        return false;
3591      }
3592    
3593      function getNodesUnder(el, show){
3594        var n, a=[], walk=document.createTreeWalker(el, NodeFilter[show] , null, false);
3595        while(n=walk.nextNode()) a.push(n);
3596        return a;
3597      }
3598    
3599      function spreadCustomContents() {
3600        var getFileName = function(url) {
3601          if(!url || url == '') return;
3602          url = url.substring(0, (url.indexOf("#") == -1) ? url.length : url.indexOf("#"));
3603          url = url.substring(0, (url.indexOf("?") == -1) ? url.length : url.indexOf("?"));
3604          url = url.substring(url.lastIndexOf("/") + 1, url.length);
3605          url = url.replace(/(_[0-9]+x[0-9]*|_{width}x)?(_crop_(top|center|bottom|left|right))?(@[0-9]*x)?(\.progressive)?\.(jpe?g|png|gif|webp)/gi, "");
3606          return '/' + url;
3607        }
3608        Object.entries(customContents).forEach(function(entry) {
3609          //if(/<\/?[a-z][\s\S]*>/i.test(entry[0])) customContents_html[entry[0]] = entry[1];
3610          //else if(/(http(s?):)?([/|.|\w|\s|-])*\.(?:jpe?g|gif|png)/.test(entry[0])) customContents_image[getFileName(entry[0])] = getFileName(entry[1]);
3611          if(/(http(s?):)?([/|.|\w|\s|-])*\.(?:jpe?g|gif|png|webp)/.test(entry[0])) customContents_image[LyHelper.extractImageObject(entry[0]).file] = LyHelper.extractImageObject(entry[1]);
3612          else customContents_text[entry[0]] = entry[1];
3613        });
3614        LyHelper.log('CUSTOM CONTENTS:', {customContents, customContents_text, customContents_image}, 'info')
3615      }
3616    
3617      // Polyfill for old browsers
3618      function startMutationEvents() {
3619        var target = document.querySelector('body');
3620        target.addEventListener("DOMAttrModified", function (event) {
3621          if(event.attrName === 'href' || event.attrName === 'action') {
3622            if(event.prevValue != event.newValue) {
3623              translateLink(event.newValue, event.target);
3624            }
3625          }
3626        }, false);
3627        target.addEventListener("DOMSubtreeModified", function (event) {
3628          //findAndLocalizeLinks(event.target, false);
3629          //matchCustomContent(event.target);
3630        }, false);
3631      }
3632    
3633      function triggerCustomContents() {
3634        var rootnode = document.getElementsByTagName('body')[0]
3635        var walker = document.createTreeWalker(rootnode, NodeFilter.SHOW_ALL, null, false)
3636        
3637        while (walker.nextNode()) {
3638          //LyHelper.log(walker.currentNode.tagName)
3639          translate(walker.currentNode, null);
3640        }
3641      }
3642    
3643      function stopObserver() {
3644        mutationObs.takeRecords();
3645        mutationObs.disconnect();
3646      }
3647    
3648      //init();
3649      return {
3650        init: init,
3651        triggerCustomContents: triggerCustomContents,
3652        stopObserver: stopObserver,
3653        translateLink: translateLink,
3654        translateTextNode: translateTextNode,
3655        translateNodeAttrs: translateNodeAttrs,
3656        translateImage: translateImage,
3657        translateCssImage: translateCssImage
3658      }
3659    };
3660  }
3661
3662
3663  /**
3664  *
3665  * 
3666  * @class Switcher
3667  */
3668  class Switcher {
3669    constructor(switcherSettings) {
3670      LyHelper.log('Switcher instantiation');
3671
3672      this.lyForceOff = location.search.split('ly-force-off=')[1];
3673      this.switcherElements = Array.prototype.slice.call(document.getElementsByClassName('ly-switcher-wrapper'));
3674    }
3675
3676    init() {
3677
3678      // Initial cart.attributes update
3679      LyHelper.shopifyAPI().getCart(function (cart) {
3680        var currentLanguage = langify.locale.iso_code;
3681        if(!cart.attributes.language || cart.attributes.language != currentLanguage) {
3682          LyHelper.shopifyAPI().updateCartAttributes({"language": currentLanguage}, function(data){});
3683        }
3684      });
3685
3686      if(langify.locale.languages.length === 1) {
3687        console.info(`%c LANGIFY INFO:\n`, 'font-weight: bold;', 'The language switcher is hidden! This can have one of the following reasons: \n * All additional languages are disabled in the "Langify -> Dashboard -> Languages" section. \n * If you are using different domains for your additional languages, ensure that "Cross Domain Links" are enabled inside the "Langify -> Dashboard -> Switcher Configurator -> Domains" section.');
3688        return false;
3689      }
3690
3691      this.setCustomPosition();
3692      this.initCustomDropdown();
3693      this.bindCountrySwitchers();
3694      this.bindCurrencySwitchers();
3695      this.bindLanguageSwitchers();
3696
3697      var event = new CustomEvent('langify.switcher.initialized', { 
3698        bubbles: true,
3699        detail: {}
3700      });
3701    }
3702
3703    initCustomDropdown() {
3704      // Custom Dropdown
3705      var root = this;
3706      var switcher = document.getElementsByClassName('ly-custom-dropdown-switcher');
3707      for(var a = 0; a < switcher.length; a++) {
3708        switcher[a].classList.toggle('ly-is-open');
3709        var isOut = LyHelper.isOutOfViewport(switcher[a]);
3710        if(isOut.bottom && isOut.inViewport) {
3711          switcher[a].classList.add('ly-is-dropup');
3712          var arrows = switcher[a].querySelectorAll('.ly-arrow');
3713          for(var b = 0; b < arrows.length; b++) {
3714            arrows[b].classList.add('ly-arrow-up');    
3715          }
3716        }
3717        switcher[a].classList.toggle('ly-is-open');
3718        switcher[a].onclick = function(event) {
3719          root.toggleSwitcherOpen(this);
3720        }
3721      }
3722
3723      document.addEventListener('click', function(event) {
3724        if(!event.target.closest('.ly-custom-dropdown-switcher')) {
3725          var openSwitchers = document.querySelectorAll('.ly-custom-dropdown-switcher.ly-is-open')
3726          for(var i = 0; i < openSwitchers.length; i++) {
3727            openSwitchers[i].classList.remove('ly-is-open');
3728          }
3729        }
3730      });
3731    }
3732    
3733    bindLanguageSwitchers() {
3734      var root = this;
3735      var links = document.getElementsByClassName('ly-languages-switcher-link');
3736      for(var l = 0; l < links.length; l++) {
3737        
3738        links[l].addEventListener('click', function(event) {
3739          event.preventDefault();
3740          if(LyHelper.isDomainFeatureEnabled() && this.getAttribute('href') !== '#' && !this.getAttribute('data-country-code')) {
3741          	var domain = this.getAttribute('href');
3742          }
3743          LyHelper.setCookie('ly-lang-selected', this.getAttribute('data-language-code'), 365);
3744          LyHelper.localizationRedirect('language_code', this.getAttribute('data-language-code'), root._dataAttrToAdditionalFields(this), null, domain);
3745        });
3746      }
3747
3748      // Native select event handling
3749      var nativeLangifySelects = document.querySelectorAll('select.ly-languages-switcher');
3750      for(var i = 0; i < nativeLangifySelects.length; i++) {
3751        nativeLangifySelects[i].onchange = function() {
3752          event.preventDefault();
3753          if(LyHelper.isDomainFeatureEnabled() && this[this.selectedIndex].getAttribute('data-domain') !== '#' && this[this.selectedIndex].getAttribute('data-country-code')) {
3754            var domain = this[this.selectedIndex].getAttribute('data-domain');
3755          }
3756          LyHelper.setCookie('ly-lang-selected', this[this.selectedIndex].getAttribute('data-language-code'), 365);
3757          LyHelper.localizationRedirect('language_code', this[this.selectedIndex].getAttribute('data-language-code'), root._dataAttrToAdditionalFields(this), null, domain);
3758        };
3759      }
3760    }
3761    
3762    bindCountrySwitchers() {
3763      var countrySelectSwitcher = document.querySelectorAll('select.ly-country-switcher');
3764      var countryCustomSwitcher = document.querySelectorAll('div.ly-country-switcher a');
3765      for(var i=0; i<countryCustomSwitcher.length; i++) {
3766        countryCustomSwitcher[i].addEventListener('click', function(e) {
3767          LyHelper.localizationRedirect('country_code', this.getAttribute('data-country-code'));
3768        });
3769      }
3770      for(var a=0; a<countrySelectSwitcher.length; a++) {
3771        countrySelectSwitcher[a].addEventListener('change', function(){
3772          LyHelper.localizationRedirect('country_code', this[this.selectedIndex].getAttribute('data-country-code'));
3773        });
3774      }  
3775    }
3776    
3777    bindCurrencySwitchers() {
3778      var currencySelectSwitcher = document.querySelectorAll('select.ly-currency-switcher');
3779      var currencyCustomSwitcher = document.querySelectorAll('div.ly-currency-switcher a');
3780      for(var i=0; i<currencyCustomSwitcher.length; i++) {
3781        currencyCustomSwitcher[i].addEventListener('click', function(e) {
3782          LyHelper.changeCurrency(this.getAttribute('data-currency-code'));
3783        });
3784      }
3785      for(var a=0; a<currencySelectSwitcher.length; a++) {
3786        currencySelectSwitcher[a].addEventListener('change', function(){
3787          LyHelper.changeCurrency(this[this.selectedIndex].getAttribute('data-currency-code'));
3788        });
3789      }  
3790    }
3791
3792    setCustomPosition() {
3793      for(var i = 0; i < this.switcherElements.length; i++) {
3794        if(this.lyForceOff !== 'true') {
3795          if(langify.locale.languages.length <= 1) {
3796            this.switcherElements[i].querySelector('.ly-languages-switcher').classList.add('ly-hide');
3797          }
3798          this.switcherElements[i].classList.remove('ly-hide');
3799        }
3800        if(this.switcherElements[i].classList.contains('ly-custom') && (document.getElementById('ly-custom-'+this.switcherElements[i].getAttribute('data-breakpoint')) || document.getElementsByClassName('ly-custom-'+this.switcherElements[i].getAttribute('data-breakpoint')).length )) {
3801          var targets = Array.from(document.getElementsByClassName('ly-custom-'+this.switcherElements[i].getAttribute('data-breakpoint')));
3802          var target = document.getElementById('ly-custom-'+this.switcherElements[i].getAttribute('data-breakpoint'));
3803          if(target) targets.push(target);
3804          for(var c = 0; c < targets.length; c++) {
3805            var clone = this.switcherElements[i].cloneNode(true);
3806            this.switcherElements[i].remove();
3807            targets[c].innerHTML = clone.outerHTML;
3808          }
3809          this.switcherElements[i].classList.add('ly-hide');
3810        }
3811      }
3812    }
3813
3814    toggleSwitcherOpen(e) {
3815      var target = e;
3816      if(!target.classList.contains('ly-is-open')) {
3817        var openSwitchers = document.querySelectorAll('.ly-custom-dropdown-switcher.ly-is-open')
3818        for(var i = 0; i < openSwitchers.length; i++) {
3819          openSwitchers[i].classList.remove('ly-is-open');
3820        }
3821
3822        target.getElementsByClassName('ly-custom-dropdown-current')[0].setAttribute('aria-expanded', 'true');
3823      } else {
3824        target.getElementsByClassName('ly-custom-dropdown-current')[0].setAttribute('aria-expanded', 'false');
3825      }
3826      target.classList.toggle('ly-is-open');
3827      var isOut = LyHelper.isOutOfViewport(target);
3828      if(isOut.bottom) {
3829        target.classList.add('ly-is-dropup');
3830      }
3831    }
3832
3833    togglePopupOpen(e) {
3834      e.closest('.ly-popup-switcher').classList.toggle('ly-is-open');
3835    }
3836
3837    _getCountryCodeFromHreflang(language_code) {
3838      var hreflangTags = document.querySelectorAll('link[hreflang]');
3839      var languageDomains = {};
3840      var countryCode = false;
3841      for(var i = 0; i < hreflangTags.length; i++) {
3842        if(hreflangTags[i].getAttribute('hreflang').indexOf(language_code) === 0) {
3843          if(!languageDomains[hreflangTags[i].getAttribute('href')]) {
3844            languageDomains[hreflangTags[i].getAttribute('href')] = hreflangTags[i];
3845          }
3846        }
3847      }
3848      if(Object.keys(languageDomains).length > 0) {
3849        countryCode = Object.values(languageDomains)[0].getAttribute('hreflang');
3850        countryCode = countryCode.split('-');
3851        if(countryCode[1]) {
3852          countryCode = countryCode[1]
3853        } else {
3854          
3855        }
3856      }
3857      return countryCode;
3858    }
3859
3860    _dataAttrToAdditionalFields(elem) {
3861      var additionalFields = [];
3862      if(elem.hasAttribute('data-country-code')) {
3863        additionalFields.push({
3864          name: 'country_code',
3865          value: elem.getAttribute('data-country-code')
3866        });
3867      }
3868      if(elem.hasAttribute('data-currency-code')) {
3869        additionalFields.push({
3870          name: 'currency_code',
3871          value: elem.getAttribute('data-currency-code')
3872        });
3873      }
3874      return additionalFields;
3875    }
3876  }
3877
3878
3879  /**
3880  *
3881  *
3882  * @class LanguageDetection
3883  */
3884  class LanguageDetection {
3885
3886    constructor() {
3887      this.hreflangList = null;
3888      LyHelper.log('LanguageDetection instantiation');
3889    }
3890
3891    init() {
3892      if(LyHelper.inIframe()
3893      || window.location.pathname.indexOf('preview_key=') > 0) {
3894        return null;
3895      }
3896
3897      var currentLang = langify.locale.iso_code.toLowerCase();
3898      //var localizationData = this.getLocalizationData();
3899      this.hreflangList = this.getHreflangList();
3900
3901      var userLang = navigator.language || navigator.userLanguage;
3902      userLang = userLang.toLowerCase();
3903      var bot = /bot|google|baidu|bing|msn|duckduckbot|teoma|slurp|yandex|Chrome-Lighthouse/i.test(navigator.userAgent);
3904      var blockedRoutes = window.lyBlockedRoutesList || [];
3905      var blockedRoute = blockedRoutes.find(x => window.location.pathname.indexOf(x) === 0);
3906      var is404 = document.getElementsByClassName('template-404').length;
3907
3908      if(LyHelper.getVal('redirected') === 'true') {
3909        LyHelper.setCookie('ly-lang-selected', currentLang, 365);
3910        var _href = window.location.href;
3911        history.replaceState(null, '', _href.replace(/(\?|&)(redirected=true)/i, ''));
3912        return null;
3913      }
3914
3915      if(!is404 && !bot && !blockedRoute && LyHelper.getVal('ly-lang-detect') !== 'off') {
3916        if(userLang && !LyHelper.getCookie('ly-lang-selected')) {
3917          var hasMatch = this.matchHreflangList(userLang);
3918          if(currentLang !== this._hreflangToLanguageCode(hasMatch)) {
3919            if(hasMatch) {
3920              this.redirectMatched(userLang);
3921            } else if (!hasMatch && langify.settings.switcher.languageDetectionDefault) {
3922              // Redirect to default language
3923              this.redirectMatched(langify.settings.switcher.languageDetectionDefault);
3924            }
3925          }
3926        } else {
3927          if(LyHelper.getCookie('ly-lang-selected') && LyHelper.getCookie('ly-lang-selected') !== currentLang) {
3928            // Only save cookie when the domain feature is active
3929            if(LyHelper.isDomainFeatureEnabled()) {
3930              LyHelper.setCookie('ly-lang-selected', currentLang, 365);
3931            }
3932            this.redirectMatched(LyHelper.getCookie('ly-lang-selected'));
3933          }
3934        }
3935      }
3936      
3937      this._geolocationAppSupport();
3938    }
3939    redirectMatched(userLang) {
3940      var match = this.matchHreflangList(userLang);
3941      if(match) {
3942        this.redirectHref(match.href, match.lang);
3943      }
3944      return match;
3945    }
3946    matchHreflangList(userLang) {
3947      var matchedHreflang = false;
3948      var browserLang = userLang;
3949
3950      // Find candidates
3951      var candidates = this.hreflangList.filter(item => item.lang === browserLang);
3952      if(candidates.length === 0) {
3953        browserLang = userLang.toLowerCase();
3954        candidates = this.hreflangList.filter(item => item.lang.toLowerCase().indexOf(browserLang) === 0);
3955      }
3956      if(candidates.length === 0) {
3957        browserLang = userLang.toLowerCase().substring(0, 2);
3958        candidates = this.hreflangList.filter(item => item.lang.toLowerCase().indexOf(browserLang) === 0);
3959      }
3960
3961      // Handle candidates
3962      if(candidates.length === 1) {
3963        return({href: candidates[0].href, lang: browserLang});
3964      } 
3965      else if(candidates.length > 1) {
3966        var preferedCandidate = candidates.find(item => item.href.indexOf(window.location.host) >= 0)
3967        if(preferedCandidate) {
3968          return({href: preferedCandidate.href, lang: browserLang});
3969        } else {
3970          return({href: candidates[0].href, lang: browserLang});
3971        }
3972      } 
3973      
3974      return false;
3975    }
3976    redirectHref(href, userLang) {
3977      var queryString = window.location.search;
3978      var url = href.split('?')[0];
3979      if(queryString === '') {
3980        queryString = '?redirected=true';
3981      } else {
3982        queryString += '&redirected=true';
3983      }
3984      window.location.replace(url + queryString);
3985    }
3986    getHreflangList() {
3987      var hreflangTags = document.querySelectorAll('link[hreflang]');
3988      var hreflangList = [];
3989      var countryCode = false;
3990      // Cross Domain Links option
3991      if(LyHelper.isDomainFeatureEnabled()) {
3992        for(var i = 0; i < langify.locale.languages.length; i++) {
3993          let newHref = 'https://' + langify.locale.languages[i].domain + window.location.pathname + window.location.search + window.location.hash;
3994          // When cross-domain link is pointing to the same domain with subfolders, window.location.pathname would have to be unlocalized before it can be merged into the url
3995          if(new String(langify.locale.languages[i].domain).indexOf(window.location.hostname) === 0) {
3996            let unlocalizedPathname = langify.locale.root_url !== '/' ? window.location.pathname.replace(langify.locale.root_url, '') : window.location.pathname;
3997            newHref = 'https://' + langify.locale.languages[i].domain + unlocalizedPathname + window.location.search + window.location.hash
3998          }
3999          hreflangList.push({
4000            href: newHref,
4001            lang: langify.locale.languages[i].iso_code,
4002          });
4003        }
4004      }
4005      for(var i = 0; i < hreflangTags.length; i++) {
4006        var hreflang = hreflangTags[i].getAttribute('hreflang').toLowerCase();
4007        hreflang = hreflang.replace('zh-hans', 'zh-cn').replace('zh-hant', 'zh-tw'); // Chinese special cases
4008        hreflangList.push({
4009          href: hreflangTags[i].getAttribute('href'),
4010          lang: hreflang
4011        });
4012      }
4013      return hreflangList;
4014    }
4015    _langToHreflang(userLang) {
4016      var hreflang = '';
4017      this.hreflangList.map(function(item) {
4018        if(item.lang === userLang) {
4019          hreflang = userLang;
4020        }
4021      });
4022      if(hreflang === '') {
4023        this.hreflangList.map(function(item) {
4024          var browserLang = userLang.toLowerCase();
4025          if(item.lang.toLowerCase().indexOf(browserLang) === 0) {
4026            hreflang = browserLang;
4027          }
4028          else if(item.lang.toLowerCase().indexOf(browserLang.substring(0, 2)) === 0) {
4029            hreflang = browserLang.substring(0, 2);
4030          }
4031        });        
4032      }
4033      return hreflang || userLang;
4034    }
4035    _hreflangToLanguageCode(hreflangTag) {
4036      if(!hreflangTag || !hreflangTag.lang) return false;
4037	  var languageCode = false;
4038      langify.locale.languages.forEach(function(item) {
4039        if(item.iso_code.toLowerCase() === hreflangTag.lang.toLowerCase()) {
4040          languageCode = item.iso_code;
4041        }
4042      });
4043      if(!languageCode) {
4044        langify.locale.languages.forEach(function(item) {
4045          if(item.iso_code.toLowerCase() === hreflangTag.lang.substring(0, 2).toLowerCase()) {
4046            languageCode = item.iso_code;
4047          }
4048        });
4049      }
4050      return languageCode;
4051    }
4052    _geolocationAppSupport() {
4053      var target = document.querySelector('body');
4054      var config = { childList: true, subtree: true };
4055      var geolocationObserver = new MutationObserver(function(mutations) {
4056        mutations.forEach(function(mutation) {
4057          if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
4058            var target = mutation.target.getElementsByClassName('locale-bar__form');
4059            if(target[0]) {
4060              target[0].onsubmit = function() {
4061                var locale_code = target[0].elements['locale_code'].value;
4062                var selector = target[0].getElementsByClassName('locale-bar__selector');
4063                if(selector.length >= 1) {
4064                  locale_code = selector[0].options[selector[0].selectedIndex].value;
4065                }
4066                LyHelper.setCookie('ly-lang-selected', locale_code, 365);
4067              };
4068            }
4069            var selectors = mutation.target.getElementsByClassName('locale-selectors__selector');
4070            if(selectors.length > 0) {
4071              for(var selector of selectors) {
4072                if(selector.getAttribute('name') === 'locale_code') {
4073                  selector.onchange = function() {
4074                    var locale_code = selector.options[selector.selectedIndex].value;
4075                    LyHelper.setCookie('ly-lang-selected', locale_code, 365);
4076                  };        
4077                }
4078              }
4079            }
4080          }
4081        });
4082      });
4083      geolocationObserver.observe(target, config);
4084      setTimeout(function() {
4085        geolocationObserver.disconnect();
4086      }, 10000);
4087    }
4088  }
4089
4090
4091  /**
4092  *
4093  *
4094  * @class Recommendation
4095  */
4096  class Recommendation extends LanguageDetection {
4097    
4098    constructor() {
4099      super();
4100      LyHelper.log('Recommendation instantiation');
4101    }
4102
4103    init() {
4104      this.hreflangList = this.getHreflangList();
4105
4106      var userLang = navigator.language || navigator.userLanguage;
4107      userLang = userLang.toLowerCase();
4108
4109      var recommendation = this.matchHreflangList(userLang);
4110      var recommendationLanguageCode = this._hreflangToLanguageCode(recommendation);
4111      if(recommendationLanguageCode && recommendationLanguageCode !== langify.locale.iso_code && !LyHelper.getCookie('ly-lang-selected')) {
4112        this.recommended_language_code = recommendationLanguageCode;
4113        this.recommended_country_code = null;
4114        this.recommended_currency_code = null;
4115        this._translateStrings(recommendationLanguageCode);
4116        this._bindings();
4117      } else {
4118        return false;
4119      }
4120    }
4121
4122    _translateStrings(languageCode) {
4123      var recommendationElement = document.querySelectorAll('.ly-recommendation')[0];
4124      var strings = langify.settings.switcher.recommendation_strings[languageCode];
4125      var recommendationStr = 'Looks like your browser is set to [[language]]. Change the language?';
4126      var buttonStr = 'Change';
4127      var matchedLanguageCode = this._langToHreflang(languageCode).toLowerCase();
4128      var languageStr = langify.settings.switcher.languages.find(x => x.iso_code.toLowerCase() === matchedLanguageCode) ? langify.settings.switcher.languages.find(x => x.iso_code.toLowerCase() === matchedLanguageCode).name : languageCode.toUpperCase();
4129      if(strings) {
4130        recommendationStr = strings.recommendation ? strings.recommendation : recommendationStr;
4131        buttonStr = strings.button ? strings.button : buttonStr;
4132        languageStr = strings.language ? strings.language : languageStr;
4133      }
4134      var newCode = recommendationElement.innerHTML;
4135      newCode = newCode.replaceAll('[[recommendation]]', recommendationStr).replaceAll('[[button]]', buttonStr).replaceAll('[[language]]', languageStr);
4136      recommendationElement.innerHTML = newCode;     
4137    }
4138
4139    _bindings() {
4140      var _this = this;
4141      var lyForceOff = location.search.split('ly-force-off=')[1];
4142      var recommendationElement = document.querySelectorAll('.ly-recommendation')[0];
4143      var form = recommendationElement.querySelectorAll('.ly-recommendation-form')[0];
4144      var links = recommendationElement.getElementsByClassName('ly-custom-dropdown-list-element');
4145      var customDropdown = recommendationElement.querySelectorAll('.ly-custom-dropdown-switcher');
4146      var nativeSelects = recommendationElement.getElementsByClassName('ly-native-select');
4147
4148      form.addEventListener('submit', function(e) {
4149        e.preventDefault();
4150        
4151        if(_this.recommended_country_code || _this.recommended_currency_code) {
4152          // When a country or currency is involved, use old redirection
4153          var additionalFields = [];
4154          if(_this.recommended_country_code) {
4155            additionalFields.push({
4156              name: 'country_code',
4157              value: _this.recommended_country_code
4158            });
4159          }
4160          if(_this.recommended_currency_code) {
4161            additionalFields.push({
4162              name: 'currency_code',
4163              value: _this.recommended_currency_code
4164            });
4165          }
4166          LyHelper.setCookie('ly-lang-selected', _this.recommended_language_code, 365);
4167          LyHelper.localizationRedirect('language_code', _this.recommended_language_code, additionalFields);
4168        } else {
4169          //...or use new hreflang redirection
4170          _this.redirectMatched(_this.recommended_language_code);
4171        }
4172      });
4173      
4174      // Overwrite switchers
4175      for(var l = 0; l < links.length; l++) {
4176        links[l].addEventListener('click', function(event) {
4177          event.preventDefault();
4178          
4179          // When clicked from within a custom dropdown
4180          var parentCustomDropdown = event.currentTarget.closest('.ly-custom-dropdown-switcher');
4181          if(parentCustomDropdown) {
4182            _this._selectCustomDropdownEntry(parentCustomDropdown, this);
4183          } else {
4184            _this.recommended_language_code = this.getAttribute('data-language-code');
4185          }
4186        });
4187      }
4188
4189      for(var i = 0; i < nativeSelects.length; i++) {
4190        nativeSelects[i].onchange = _this._selectNativeDropdownEntry.bind(this);
4191        
4192        if(nativeSelects[i].classList.contains('ly-languages-switcher')) {
4193          nativeSelects[i].value = _this.recommended_language_code;
4194        }
4195      }
4196
4197      for(var i = 0; i < customDropdown.length; i++) {
4198        if(recommendationElement.className.indexOf('bottom') > -1) {
4199          customDropdown[i].classList.add('ly-is-dropup');       
4200        }
4201        
4202        if(customDropdown[i].classList.contains('ly-languages-switcher')) {
4203          _this._selectCustomDropdownEntry(customDropdown[i], customDropdown[i].querySelector('.ly-custom-dropdown-list a[data-language-code="'+ _this.recommended_language_code +'"]'));
4204        }
4205      } 
4206      if(!lyForceOff) {
4207        recommendationElement.classList.add('ly-is-open');
4208      }
4209    }
4210
4211    _selectNativeDropdownEntry(event) {
4212      event.preventDefault();
4213      var element = event.currentTarget;
4214      var _this = this;
4215
4216      if(element[element.selectedIndex].hasAttribute('data-language-code')) {
4217        _this.recommended_language_code = element[element.selectedIndex].getAttribute('data-language-code');
4218      }
4219      if(element[element.selectedIndex].hasAttribute('data-country-code')) {
4220        _this.recommended_country_code = element[element.selectedIndex].getAttribute('data-country-code');
4221      }
4222      if(element[element.selectedIndex].hasAttribute('data-currency-code')) {
4223        _this.recommended_currency_code = element[element.selectedIndex].getAttribute('data-currency-code');
4224      }
4225    }
4226
4227    _selectCustomDropdownEntry(element, entry) {
4228      if(!entry) return;
4229      var _this = this;
4230      var currentElem = element.querySelector('.ly-custom-dropdown-current');
4231      var currentIcon = currentElem.querySelector('.ly-icon');        
4232      var currentLabel = currentElem.querySelector('span');
4233      var valueToSelect = '';
4234
4235      if(entry.hasAttribute('data-language-code')) {
4236        _this.recommended_language_code = entry.getAttribute('data-language-code');
4237        valueToSelect = _this.recommended_language_code;
4238      }
4239      if(entry.hasAttribute('data-country-code')) {
4240        _this.recommended_country_code = entry.getAttribute('data-country-code');
4241        valueToSelect = _this.recommended_country_code;
4242      }
4243      if(entry.hasAttribute('data-currency-code')) {
4244        _this.recommended_currency_code = entry.getAttribute('data-currency-code');
4245        valueToSelect = _this.recommended_currency_code;
4246      }
4247      if(entry.hasAttribute('data-country-code') && entry.hasAttribute('data-currency-code')) {
4248        valueToSelect = _this.recommended_country_code + '-' + _this.recommended_currency_code;
4249      }
4250
4251      if(element.querySelector('.ly-custom-dropdown-list li.current')) {
4252        element.querySelector('.ly-custom-dropdown-list li.current').classList.remove('current');  
4253        element.querySelector('.ly-custom-dropdown-list li[key="'+ valueToSelect +'"]').classList.add('current');  
4254      }
4255      if(element.querySelector('.ly-custom-dropdown-list li.current span')) currentLabel.innerHTML = element.querySelector('.ly-custom-dropdown-list li.current span').innerHTML;
4256      if(element.querySelector('.ly-custom-dropdown-list li.current .ly-icon')) currentIcon.classList = element.querySelector('.ly-custom-dropdown-list li.current .ly-icon').classList;
4257    }
4258
4259    toggleOpen(e) {
4260      e.closest('.ly-recommendation').classList.toggle('ly-is-open');
4261      if(!e.closest('.ly-recommendation').classList.contains('ly-is-open')) {
4262        LyHelper.setCookie('ly-lang-selected', this.recommended_language_code, 365);
4263      }
4264    }
4265  }
4266
4267
4268  /**
4269  *
4270  *
4271  * @class Langify
4272  */
4273  class Langify {
4274    constructor(settings, locale) {
4275      LyHelper.log('Langify instantiation')
4276
4277      var translationObserver = new TranslationObserver().init();
4278
4279      langify.helper = new LyHelper();
4280      LyHelper.log(langify.helper);
4281
4282
4283      var lyForceOff = location.search.split('ly-force-off=')[1];
4284      if(lyForceOff === 'true') {
4285        document.getElementById('preview-bar-iframe').classList.add('ly-hide');
4286        return false;
4287      }
4288
4289      if(settings.theme && ((settings.theme.loadJquery && settings.theme.loadJquery === true) || typeof settings.theme.loadJquery === 'undefined')) {
4290        if(typeof jQuery === 'undefined') {
4291          LyHelper.loadScript('//cdn.jsdelivr.net/jquery/1.9.1/jquery.min.js', function() {});
4292        } 
4293      }
4294
4295      //document.addEventListener("DOMContentLoaded", function() {
4296        langify.switcher = new Switcher();
4297        langify.switcher.init();
4298
4299        if(settings.switcher) {
4300          if(settings.switcher.recommendation && settings.switcher.recommendation_enabled) {
4301            langify.recommendation = new Recommendation();
4302            langify.recommendation.init();
4303          } else {
4304            if(settings.switcher.languageDetection) {
4305              langify.languageDetection = new LanguageDetection();
4306              langify.languageDetection.init();
4307            }        
4308          }
4309        }
4310      //});
4311    }
4312  }
4313
4314  // Polyfills
4315  (function(){var t;null==window.MutationObserver&&(t=function(){function t(t){this.callBack=t}return t.prototype.observe=function(t,n){return this.element=t,this.interval=setInterval((e=this,function(){var t;if((t=e.element.innerHTML)!==e.oldHtml)return e.oldHtml=t,e.callBack.apply(null)}),200);var e},t.prototype.disconnect=function(){return window.clearInterval(this.interval)},t}(),window.MutationObserver=t)}).call(this);
4316  !function(){"use strict";if("object"==typeof window)if("IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)"isIntersecting"in window.IntersectionObserverEntry.prototype||Object.defineProperty(window.IntersectionObserverEntry.prototype,"isIntersecting",{get:function(){return this.intersectionRatio>0}});else{var t=function(t){for(var e=window.document,o=i(e);o;)o=i(e=o.ownerDocument);return e}(),e=[],o=null,n=null;s.prototype.THROTTLE_TIMEOUT=100,s.prototype.POLL_INTERVAL=null,s.prototype.USE_MUTATION_OBSERVER=!0,s._setupCrossOriginUpdater=function(){return o||(o=function(t,o){n=t&&o?l(t,o):{top:0,bottom:0,left:0,right:0,width:0,height:0},e.forEach(function(t){t._checkForIntersections()})}),o},s._resetCrossOriginUpdater=function(){o=null,n=null},s.prototype.observe=function(t){if(!this._observationTargets.some(function(e){return e.element==t})){if(!t||1!=t.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:t,entry:null}),this._monitorIntersections(t.ownerDocument),this._checkForIntersections()}},s.prototype.unobserve=function(t){this._observationTargets=this._observationTargets.filter(function(e){return e.element!=t}),this._unmonitorIntersections(t.ownerDocument),0==this._observationTargets.length&&this._unregisterInstance()},s.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorAllIntersections(),this._unregisterInstance()},s.prototype.takeRecords=function(){var t=this._queuedEntries.slice();return this._queuedEntries=[],t},s.prototype._initThresholds=function(t){var e=t||[0];return Array.isArray(e)||(e=[e]),e.sort().filter(function(t,e,o){if("number"!=typeof t||isNaN(t)||t<0||t>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return t!==o[e-1]})},s.prototype._parseRootMargin=function(t){var e=(t||"0px").split(/\s+/).map(function(t){var e=/^(-?\d*\.?\d+)(px|%)$/.exec(t);if(!e)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(e[1]),unit:e[2]}});return e[1]=e[1]||e[0],e[2]=e[2]||e[0],e[3]=e[3]||e[1],e},s.prototype._monitorIntersections=function(e){var o=e.defaultView;if(o&&-1==this._monitoringDocuments.indexOf(e)){var n=this._checkForIntersections,r=null,s=null;this.POLL_INTERVAL?r=o.setInterval(n,this.POLL_INTERVAL):(h(o,"resize",n,!0),h(e,"scroll",n,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in o&&(s=new o.MutationObserver(n)).observe(e,{attributes:!0,childList:!0,characterData:!0,subtree:!0})),this._monitoringDocuments.push(e),this._monitoringUnsubscribes.push(function(){var t=e.defaultView;t&&(r&&t.clearInterval(r),c(t,"resize",n,!0)),c(e,"scroll",n,!0),s&&s.disconnect()});var u=this.root&&(this.root.ownerDocument||this.root)||t;if(e!=u){var a=i(e);a&&this._monitorIntersections(a.ownerDocument)}}},s.prototype._unmonitorIntersections=function(e){var o=this._monitoringDocuments.indexOf(e);if(-1!=o){var n=this.root&&(this.root.ownerDocument||this.root)||t;if(!this._observationTargets.some(function(t){var o=t.element.ownerDocument;if(o==e)return!0;for(;o&&o!=n;){var r=i(o);if((o=r&&r.ownerDocument)==e)return!0}return!1})){var r=this._monitoringUnsubscribes[o];if(this._monitoringDocuments.splice(o,1),this._monitoringUnsubscribes.splice(o,1),r(),e!=n){var s=i(e);s&&this._unmonitorIntersections(s.ownerDocument)}}}},s.prototype._unmonitorAllIntersections=function(){var t=this._monitoringUnsubscribes.slice(0);this._monitoringDocuments.length=0,this._monitoringUnsubscribes.length=0;for(var e=0;e<t.length;e++)t[e]()},s.prototype._checkForIntersections=function(){if(this.root||!o||n){var t=this._rootIsInDom(),e=t?this._getRootRect():{top:0,bottom:0,left:0,right:0,width:0,height:0};
4316this._observationTargets.forEach(function(n){var i=n.element,s=u(i),h=this._rootContainsTarget(i),c=n.entry,a=t&&h&&this._computeTargetAndRootIntersection(i,s,e),l=null;this._rootContainsTarget(i)?o&&!this.root||(l=e):l={top:0,bottom:0,left:0,right:0,width:0,height:0};var f=n.entry=new r({time:window.performance&&performance.now&&performance.now(),target:i,boundingClientRect:s,rootBounds:l,intersectionRect:a});c?t&&h?this._hasCrossedThreshold(c,f)&&this._queuedEntries.push(f):c&&c.isIntersecting&&this._queuedEntries.push(f):this._queuedEntries.push(f)},this),this._queuedEntries.length&&this._callback(this.takeRecords(),this)}},s.prototype._computeTargetAndRootIntersection=function(e,i,r){if("none"!=window.getComputedStyle(e).display){for(var s,h,c,a,f,d,g,m,v=i,_=p(e),b=!1;!b&&_;){var w=null,y=1==_.nodeType?window.getComputedStyle(_):{};if("none"==y.display)return null;if(_==this.root||9==_.nodeType)if(b=!0,_==this.root||_==t)o&&!this.root?!n||0==n.width&&0==n.height?(_=null,w=null,v=null):w=n:w=r;else{var I=p(_),E=I&&u(I),T=I&&this._computeTargetAndRootIntersection(I,E,r);E&&T?(_=I,w=l(E,T)):(_=null,v=null)}else{var R=_.ownerDocument;_!=R.body&&_!=R.documentElement&&"visible"!=y.overflow&&(w=u(_))}if(w&&(s=w,h=v,c=void 0,a=void 0,f=void 0,d=void 0,g=void 0,m=void 0,c=Math.max(s.top,h.top),a=Math.min(s.bottom,h.bottom),f=Math.max(s.left,h.left),d=Math.min(s.right,h.right),m=a-c,v=(g=d-f)>=0&&m>=0&&{top:c,bottom:a,left:f,right:d,width:g,height:m}||null),!v)break;_=_&&p(_)}return v}},s.prototype._getRootRect=function(){var e;if(this.root&&!d(this.root))e=u(this.root);else{var o=d(this.root)?this.root:t,n=o.documentElement,i=o.body;e={top:0,left:0,right:n.clientWidth||i.clientWidth,width:n.clientWidth||i.clientWidth,bottom:n.clientHeight||i.clientHeight,height:n.clientHeight||i.clientHeight}}return this._expandRectByRootMargin(e)},s.prototype._expandRectByRootMargin=function(t){var e=this._rootMarginValues.map(function(e,o){return"px"==e.unit?e.value:e.value*(o%2?t.width:t.height)/100}),o={top:t.top-e[0],right:t.right+e[1],bottom:t.bottom+e[2],left:t.left-e[3]};return o.width=o.right-o.left,o.height=o.bottom-o.top,o},s.prototype._hasCrossedThreshold=function(t,e){var o=t&&t.isIntersecting?t.intersectionRatio||0:-1,n=e.isIntersecting?e.intersectionRatio||0:-1;if(o!==n)for(var i=0;i<this.thresholds.length;i++){var r=this.thresholds[i];if(r==o||r==n||r<o!=r<n)return!0}},s.prototype._rootIsInDom=function(){return!this.root||f(t,this.root)},s.prototype._rootContainsTarget=function(e){var o=this.root&&(this.root.ownerDocument||this.root)||t;return f(o,e)&&(!this.root||o==e.ownerDocument)},s.prototype._registerInstance=function(){e.indexOf(this)<0&&e.push(this)},s.prototype._unregisterInstance=function(){var t=e.indexOf(this);-1!=t&&e.splice(t,1)},window.IntersectionObserver=s,window.IntersectionObserverEntry=r}function i(t){try{return t.defaultView&&t.defaultView.frameElement||null}catch(t){return null}}function r(t){this.time=t.time,this.target=t.target,this.rootBounds=a(t.rootBounds),this.boundingClientRect=a(t.boundingClientRect),this.intersectionRect=a(t.intersectionRect||{top:0,bottom:0,left:0,right:0,width:0,height:0}),this.isIntersecting=!!t.intersectionRect;var e=this.boundingClientRect,o=e.width*e.height,n=this.intersectionRect,i=n.width*n.height;this.intersectionRatio=o?Number((i/o).toFixed(4)):this.isIntersecting?1:0}function s(t,e){var o,n,i,r=e||{};if("function"!=typeof t)throw new Error("callback must be a function");if(r.root&&1!=r.root.nodeType&&9!=r.root.nodeType)throw new Error("root must be a Document or Element");this._checkForIntersections=(o=this._checkForIntersections.bind(this),n=this.THROTTLE_TIMEOUT,i=null,function(){i||(i=setTimeout(function(){o(),i=null},n))}),this._callback=t,this._observationTargets=[],this._queuedEntries=[],this._rootMarginValues=this._parseRootMargin(r.rootMargin),this.thresholds=this._initThresholds(r.threshold),this.root=r.root||null,this.rootMargin=this._rootMarginValues.map(function(t){return t.value+t.unit}).join(" "),this._monitoringDocuments=[],this._monitoringUnsubscribes=[]}function h(t,e,o,n){"function"==typeof t.addEventListener?t.addEventListener(e,o,n||!1):"function"==typeof t.attachEvent&&t.attachEvent("on"+e,o)}function c(t,e,o,n){"function"==typeof t.removeEventListener?t.removeEventListener(e,o,n||!1):"function"==typeof t.detatchEvent&&t.detatchEvent("on"+e,o)}function u(t){var e;try{e=t.getBoundingClientRect()}catch(t){}return e?(e.width&&e.height||(e={top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:e.right-e.left,height:e.bottom-e.top}),e):{top:0,bottom:0,left:0,right:0,width:0,height:0}}function a(t){return!t||"x"in t?t:{top:t.top,y:t.top,bottom:t.bottom,left:t.left,x:t.left,right:t.right,width:t.width,height:t.height}}function l(t,e){var o=e.top-t.top,n=e.left-t.left;return{top:o,left:n,height:e.height,width:e.width,bottom:o+e.height,right:n+e.width}}function f(t,e){for(var o=e;o;){if(o==t)return!0;o=p(o)}return!1}function p(e){var o=e.parentNode;return 9==e.nodeType&&e!=t?i(e):(o&&o.assignedSlot&&(o=o.assignedSlot.parentNode),o&&11==o.nodeType&&o.host?o.host:o)}function d(t){return t&&9===t.nodeType}}();
4317  !function(){if("function"==typeof window.CustomEvent)return!1;window.CustomEvent=function(n,t){t=t||{bubbles:!1,cancelable:!1,detail:null};var e=document.createEvent("CustomEvent");return e.initCustomEvent(n,t.bubbles,t.cancelable,t.detail),e}}();
4318
4319  var langify = window.langify || {};
4320  var customContents = {};
4321  var customContents_image = {};
4322  var langifySettingsOverwrites = {};
4323  var defaultSettings = {
4324    debug: false,               // BOOL : Enable/disable console logs
4325    observe: true,              // BOOL : Enable/disable the entire mutation observer (off switch)
4326    observeLinks: false,
4327    observeImages: true,
4328    observeCustomContents: true,
4329    maxMutations: 5,
4330    timeout: 100,               // INT : Milliseconds to wait after a mutation, before the next mutation event will be allowed for the element
4331    linksBlacklist: [],
4332  };
4333
4334  if(langify.settings) { 
4335    langifySettingsOverwrites = Object.assign({}, langify.settings);
4336    langify.settings = Object.assign(defaultSettings, langify.settings); 
4337  } else { 
4338    langify.settings = defaultSettings; 
4339  }
4340
4341  langify.settings.theme = null;
4342  langify.settings.switcher = null;
4343
4344  langify.locale = langify.locale || {
4345    primary: true,
4346    iso_code: "en",
4347    root_url: "\/",
4348    language_id: "ly176949",
4349    shop_url: "https:\/\/horror-vacui.com",
4350    domain_feature_enabled: null,
4351    languages: [{
4352        iso_code: "en",
4353        root_url: "\/",
4354        domain: null,
4355      },],};
4356
4357  // Disable link correction ALWAYS on languages with mapped domains
4358  
4359  if(langify.locale.root_url == '/') {
4360    langify.settings.observeLinks = false;
4361  }
4362
4363  window.addEventListener('DOMContentLoaded', function() {
4364    langify.helper = new LyHelper();
4365
4366    // Custom Contents Section
4367
4368    // Images Section
4369    
4370
4371
4372    var langifyInstance = new Langify(langify.settings, langify.locale);
4373  });
4374</script>
4374
4375<div data-breakpoint="" class="ly-switcher-wrapper ly-breakpoint-1 fixed bottom_right ly-hide" style="font-size: 14px; margin: 0px 0px; "><div data-dropup="false" onclick="langify.switcher.toggleSwitcherOpen(this)" class="ly-languages-switcher ly-custom-dropdown-switcher ly-bright-theme" style=" margin: 0px 0px;">
4376          <span role="button" tabindex="0" aria-label="Selected language: English" aria-expanded="false" aria-controls="languagesSwitcherList-1" class="ly-custom-dropdown-current" style="background: #ffffff; color: #000000;  "><i class="ly-icon ly-flag-icon ly-flag-icon-en "></i><span class="ly-custom-dropdown-current-inner ly-custom-dropdown-current-inner-text">English</span>
4377<div aria-hidden="true" class="ly-arrow ly-arrow-black stroke" style="vertical-align: middle; width: 14.0px; height: 14.0px;">
4378        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14.0 14.0" height="14.0px" width="14.0px" style="position: absolute;">
4379          <path d="M1 4.5 L7.0 10.5 L13.0 4.5" fill="transparent" stroke="#000000" stroke-width="1px"/>
4380        </svg>
4381      </div>
4382          </span>
4383          <ul id="languagesSwitcherList-1" role="list" class="ly-custom-dropdown-list ly-is-open ly-bright-theme" style="background: #ffffff; color: #000000; "><li key="en" class="current" style="color: #000000;  margin: 0px 0px;" tabindex="-1">
4384                  <a class="ly-custom-dropdown-list-element ly-languages-switcher-link ly-bright-theme current_lang"
4385                    href="#"
4386                      data-language-code="en" 
4387                    
4388                    data-ly-locked="true"><i class="ly-icon ly-flag-icon ly-flag-icon-en"></i><span class="ly-custom-dropdown-list-element-right">English</span></a>
4389                </li></ul>
4390        </div></div>
4391<style>
4392
4393
4394    .ly-flag-icon-en { background-image: url('//horror-vacui.com/cdn/shop/t/26/assets/ly-icon-e
4394n.svg?v=168749326791323067301728237194'); }
4395
4396  .ly-switcher-wrapper {
4397    
4398  }
4399  .ly-switcher-wrapper.fixed {
4400    position: fixed;
4401    z-index: 1000;
4402  }
4403  .ly-switcher-wrapper.absolute {
4404    position: absolute;
4405    z-index: 1000;
4406  }
4407  .ly-switcher-wrapper.fixed.top_left,
4408  .ly-switcher-wrapper.absolute.top_left {
4409    top: 0;
4410    left: 0;
4411  }
4412  .ly-switcher-wrapper.fixed.top_right,
4413  .ly-switcher-wrapper.absolute.top_right {
4414    top: 0;
4415    right: 0;
4416  }
4417  .ly-switcher-wrapper.fixed.bottom_left,
4418  .ly-switcher-wrapper.absolute.bottom_left {
4419    bottom: 0;
4420    left: 0;
4421  }
4422  .ly-switcher-wrapper.fixed.bottom_right,
4423  .ly-switcher-wrapper.absolute.bottom_right {
4424    bottom: 0;
4425    right: 0;
4426  }
4427  .ly-switcher-wrapper .shopify-currency-form {
4428    display: inline-block;
4429  }
4430
4431
4432  .ly-currency-switcher {
4433    font-size: 1em;
4434  }
4435
4436  .ly-inner-text {
4437    margin: 0 0.2em;
4438    white-space: nowrap;
4439  }
4440
4441  .ly-flag-icon {
4442    background-size: contain;
4443    background-position: 50%;
4444    background-repeat: no-repeat;
4445    position: relative;
4446    display: inline-block;
4447    width: 1.33333333em;
4448    line-height: 1em;
4449  }
4450  .ly-flag-icon:before {
4451    content: '';
4452    display: inline-block;
4453  }
4454  .ly-flag-icon.ly-flag-squared {
4455    width: 1em;
4456  }
4457  .ly-flag-icon.ly-flag-rounded {
4458    width: 1em;
4459    border-radius: 50%;
4460  }
4461  .ly-languages-switcher {
4462    white-space: nowrap;
4463    list-style-type: none;
4464    display: flex;
4465    font-size: 1em;
4466  }
4467  .ly-languages-switcher-link {
4468    margin: 0 0.2em;
4469    cursor: pointer;
4470    white-space: nowrap;
4471    text-decoration: none;
4472    display: inline-block;
4473  }
4474  .ly-languages-switcher.ly-list {
4475    margin: 0;
4476    padding: 0;
4477    display: block;
4478  }
4479  .ly-languages-switcher.ly-native-select {
4480    
4481  }
4482  .ly-icon {
4483    margin: 0 0.2em;
4484  }
4485
4486  .ly-arrow {
4487    display: inline-block;
4488    position: relative;
4489    vertical-align: middle;
4490    direction: ltr !important;
4491    -webkit-transition: transform 0.25s;
4492    -moz-transition: transform 0.25s;
4493    transition: transform 0.25s;
4494    margin: 0 0.2em;
4495  }
4496  .ly-custom-dropdown-switcher.ly-is-open .ly-arrow {
4497    transform: rotate(180deg);
4498  }
4499  .ly-custom-dropdown-switcher.ly-arrow.ly-arrow-up {
4500    transform: rotate(180deg);
4501  }
4502  .ly-custom-dropdown-switcher.ly-is-open .ly-arrow.ly-arrow-up {
4503    transform: rotate(0deg);
4504  }
4505
4506  .ly-custom-dropdown-switcher {
4507    text-align: left;
4508    display: inline-block;
4509    position: relative;
4510    user-select: none;
4511    cursor: pointer;
4512  }
4513  .ly-custom-dropdown-current {
4514    display: block;
4515    vertical-align: middle;
4516  }
4517  .ly-custom-dropdown-current-inner {
4518    display: inline-block;
4519    vertical-align: middle;
4520  }
4521  .ly-custom-dropdown-current-inner-image {
4522    margin-right: 0.25em;
4523  }
4524  .ly-custom-dropdown-current-inner-text {
4525    margin: 0 0.2em;
4526  }
4527  .ly-custom-dropdown-list {
4528    display: none !important;
4529    list-style: none;
4530    position: absolute;
4531    left: 0;
4532    padding: inherit !important;
4533    padding: 0 !important;
4534    margin: 0;
4535    z-index: 99999;
4536    text-align: left;
4537    width: 100%;
4538    font-size: 1em;
4539  }
4540  .ly-custom-dropdown-list-element {
4541    color: inherit !important;
4542    display: block;
4543  }
4544  .ly-custom-dropdown-list > li {
4545    margin: 0 !important;
4546    display: block;
4547  }
4548  .ly-custom-dropdown-list-element-left {
4549    margin-right: 0.5em;
4550  }
4551  .ly-custom-dropdown-list-element-right {
4552    text-align: left;
4553  }
4554  .ly-custom-dropdown-list-element-left,
4555  .ly-custom-dropdown-list-element-right {
4556    vertical-align: middle;
4557  }
4558  .ly-custom-dropdown-switcher .ly-languages-switcher-link {
4559    margin: 0;
4560  }
4561  .ly-languages-switcher-dropdown {
4562    display: inline-block;
4563  }
4564  .ly-languages-links-switcher {
4565    display: inline-block;
4566  }
4567  .ly-languages-links-switcher > .ly-languages-link {
4568    /*margin-right: 0.5em;*/
4569    padding: inherit !important;
4570    color: inherit !important;
4571  }
4572  .ly-custom-dropdown-list-element {
4573    /*padding: inherit !important;*/
4574    text-decoration: none;
4575  }
4576  .ly-is-uppercase {
4577    text-transform: uppercase;
4578  }
4579  .ly-is-transparent.ly-links,
4580  .ly-is-transparent.ly-list,
4581  .ly-is-transparent.ly-currency-switcher,
4582  .ly-is-transparent.ly-custom-dropdown-switcher,
4583  .ly-is-transparent.ly-custom-dropdown-switcher .ly-custom-dropdown-list {
4584    background: transparent !important;
4585  }
4586  .ly-arrow-up {
4587    transform: rotateZ(180deg);
4588  }
4589
4590  .ly-custom-dropdown-switcher .ly-custom-dropdown-list li.current{
4591    display: none;
4592  }
4593  .ly-custom-dropdown-switcher.ly-is-open .ly-custom-dropdown-list {
4594    display: flex !important;
4595    min-width: 100%;
4596    width: 100%;
4597    flex-direction: column-reverse;
4598    right: 0;
4599    left: auto;
4600    overflow: auto;
4601    max-height: 350px;
4602    max-height: 50vh;
4603  }
4604
4605  .ly-is-dropup .ly-custom-dropdown-list {
4606    bottom: 100%;
4607  }
4608  .ly-hide {
4609    display: none !important;
4610  }
4611  body.ly-force-off #preview-bar-iframe,
4612  body.ly-force-off .ly-languages-switcher {
4613    display: none !important;
4614  }
4615
4616  .ly-close {
4617    position: absolute;
4618    opacity: 0.3;
4619    right: 0;
4620    top: 0;
4621    width: 3em;
4622    height: 3em;
4623    display: inline-block !important;
4624    background: rbga(0,0,0,0);
4625    padding: 1em;
4626  }
4627  .ly-close:hover {
4628    opacity: 1;
4629  }
4630  .ly-close .inner {
4631    transform: translateX(-50%);
4632    position: relative;
4633    width: 100%;
4634    height: 100%;
4635    display: inline-block;
4636  }
4637  .ly-close .inner:before, .ly-close .inner:after {
4638    position: absolute;
4639    left: 1em;
4640    content: ' ';
4641    height: 1em;
4642    width: 2px;
4643    background-color: #333;
4644  }
4645  .ly-close .inner:before {
4646    transform: rotate(45deg);
4647  }
4648  .ly-close .inner:after {
4649    transform: rotate(-45deg);
4650  }
4651
4652
4653
4654  .ly-popup-switcher {}
4655  .ly-popup-switcher .ly-popup-current {
4656    cursor: pointer;
4657    background: transparent;
4658  }
4659  .ly-popup-switcher .ly-popup-modal {
4660    position: fixed;
4661    z-index: 1000;
4662    top: 0;
4663    left: 0;
4664    width: 100%;
4665    height: 100%;
4666    display: none;
4667    justify-content: center; 
4668    align-items: center;
4669  }
4670  .ly-popup-switcher.ly-is-open .ly-popup-modal {
4671    display: flex;
4672  }
4673  .ly-popup-switcher .ly-popup-modal-backdrop {
4674    position: fixed;
4675    width: 100%;
4676    height: 100%;
4677    z-index: 0;
4678    top: 0;
4679    left: 0;
4680    background:rgba(0, 0, 0, 0.38);
4681    cursor: pointer;
4682  }
4683  .ly-popup-switcher .ly-popup-modal .ly-popup-modal-content {
4684    padding: 1em;
4685    position: absolute;
4686    z-index: 1000;
4687  }
4688  .ly-popup-switcher .ly-popup-modal .ly-popup-modal-content ul {
4689    padding: 0;
4690    margin: 12px 0 0 0;
4691    list-style: none;
4692    display: flex;
4693    flex-direction: column;
4694  }
4695  .ly-popup-switcher .ly-popup-modal .ly-popup-modal-content ul .ly-languages-switcher-link {
4696    margin: 0;
4697    border: solid 1px;
4698    padding: 1em;
4699    display: block;
4700    min-width: 225px;
4701    margin-top: 1em;
4702  }
4703  .ly-popup-switcher .ly-popup-modal .ly-popup-modal-content ul .ly-languages-switcher-link.current_lang {
4704    display: none;
4705  }
4706
4707
4708
4709  /* Recommendation */
4710  .ly-recommendation {
4711    display: none;
4712  }
4713  .ly-recommendation.ly-is-open {
4714    display: inline-block;
4715  }
4716  .ly-recommendation form {
4717    display: inline-block;
4718  }
4719  .ly-recommendation .ly-arrow,
4720  .ly-arrow.recommendation {
4721    display: none;
4722  }
4723  .ly-recommendation .ly-arrow.recommendation {
4724    display: inline-block;
4725  }
4726  .ly-recommendation .ly-switcher-wrapper {
4727    font-size: 1em !important;
4728  }
4729  .ly-recommendation .ly-popup-modal .ly-popup-switcher .ly-popup-modal .ly-popup-modal-backdrop {
4730    display: none;
4731  }
4732  .ly-recommendation-form button[type="submit"] {
4733    cursor: pointer;
4734  }
4735
4736  /* Recommendation Banner */
4737  .ly-recommendation .ly-banner {
4738    position: fixed;
4739    z-index: 100000;
4740    width: 100%;
4741  }
4742  .ly-recommendation .ly-banner .ly-banner-content {
4743    width: 100%;
4744    padding: 1em 30px 1em 1em;
4745    box-shadow: 0 0 20px rgba(0,0,0,.25);
4746  }
4747  .ly-recommendation .ly-banner.top {
4748    top: 0;
4749  }
4750  .ly-recommendation .ly-banner.bottom {
4751    bottom: 0;
4752  }
4753  .ly-recommendation .ly-banner .ly-banner-content .ly-switcher-wrapper {
4754    position: relative !important;
4755    margin: 0 !important;
4756    display: inline-block !important;
4757  }
4758  .ly-recommendation .ly-banner .ly-recommendation-form button[type="submit"] {
4759    margin-left: 10px;
4760  }
4761
4762
4763  /* Recommendation Popup */
4764  .ly-recommendation .ly-popup-modal {
4765    position: fixed;
4766    z-index: 10000;
4767  }
4768  .ly-recommendation .ly-popup-modal .ly-switcher-wrapper {
4769    position: relative !important;
4770    margin: 0 !important;
4771    display: inline-block !important;
4772  }
4773  .ly-recommendation .ly-popup-modal-backdrop {
4774    position: fixed;
4775    width: 100%;
4776    height: 100%;
4777    z-index: 1000;
4778    top: 0;
4779    left: 0;
4780    background:rgba(0, 0, 0, 0.38);
4781  }
4782  .ly-recommendation .ly-popup-modal .ly-popup-modal-content {
4783    padding: 1em 30px 1em 1em;
4784  }
4785  .ly-recommendation .ly-popup-modal .ly-popup-modal-content .ly-languages-switcher {
4786    position: relative !important;
4787    margin: 0 !important;
4788  }
4789  .ly-recommendation .ly-popup-modal .ly-popup-modal-content h3 {
4790    margin: 0 2em 1em 0;
4791    font-size: inherit;
4792    position: relative;
4793  }
4794  .ly-recommendation .ly-popup-modal.top_left { top: 0; left: 0; margin-right: 0 !important; margin-bottom: 0 !important; padding-right: 0 !important; padding-bottom: 0 !important;}
4795  .ly-recommendation .ly-popup-modal.top_center { top: 0; left: 50%; transform: translateX(-50%); margin-right: 0 !important; margin-bottom: 0 !important; margin-left: 0 !important; padding-right: 0 !important; padding-bottom: 0 !important; padding-left: 0 !important;}
4796  .ly-recommendation .ly-popup-modal.top_right { top: 0; right: 0; margin-left: 0 !important; margin-bottom: 0 !important; padding-left: 0 !important; padding-bottom: 0 !important; }
4797  .ly-recommendation .ly-popup-modal.center_center { top: 50%; left: 50%; transform: translateX(-50%) translateY(-50%); margin: 0 !important; padding: 0 !important; }
4798  .ly-recommendation .ly-popup-modal.bottom_left { bottom: 0; left: 0; margin-right: 0 !important; margin-top: 0 !important; padding-right: 0 !important; padding-top: 0 !important; }
4799  .ly-recommendation .ly-popup-modal.bottom_center { bottom: 0; left: 50%; transform: translateX(-50%); margin-right: 0 !important; margin-left: 0 !important; margin-top: 0 !important; padding-right: 0 !important; padding-left: 0 !important; padding-top: 0 !important; }
4800  .ly-recommendation .ly-popup-modal.bottom_right { bottom: 0; right: 0; margin-left: 0 !important; margin-top: 0 !important; padding-left: 0 !important; padding-top: 0 !important; }
4801
4802
4803
4804
4805
4806  
4807</style><!-- langify-v2-scripts-end --><!-- "snippets/preorder-now.liquid" was not rendered, the associated app was uninstalled -->
4808  
4809
4810
4811
4812<div id="shopify-block-AZFd6aGFnS21FS1hVa__13768625480086291342" class="shopify-block shopify-app-block">
4812<script>
4813  window['ShopifyForms'] = {
4814    ...window['ShopifyForms'],
4815    currentPageType: "blog"
4816  };
4817</script>
4817
4818
4819
4820</div>
4820<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
4820
4821</body>    
4822</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.