PageSourceSearch

https://www.farma.it/app

html farma.it collected 2026-10-09 18:26:27 UTC 535,703 bytes, 9,142 lines download raw bytes

1<!doctype html>
2<html lang="it">
3<head prefix="og: http://ogp.me/ns# cms: http://ogp.me/ns/cms#">
4    <meta charset="utf-8"/>
5<meta name="title" content="Farma.it - il punto dove la tua salute ha la priorità"/>
6<meta name="robots" content="INDEX,FOLLOW"/>
7<meta name="viewport" content="width=device-width, initial-scale=1"/>
8<title>Farma.it - il punto dove la tua salute ha la priorità</title>
9        <link rel="stylesheet" type="text/css" media="all" href="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/css/styles.css" />
10<link rel="icon" type="image/x-icon" href="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Magento_Theme/favicon.ico" />
11<link rel="shortcut icon" type="image/x-icon" href="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Magento_Theme/favicon.ico" />
12<link rel="preload" as="font" crossorigin="anonymous" href="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/fonts/SourceSans3/SourceSans3-Light.woff2" />
13<link rel="preload" as="font" crossorigin="anonymous" href="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/fonts/SourceSans3/SourceSans3-Medium.woff2" />
14<link rel="preload" as="font" crossorigin="anonymous" href="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/fonts/SourceSans3/SourceSans3-Bold.woff2" />
15<link rel="preload" as="font" crossorigin="anonymous" href="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/fonts/BalooBhaina2/BalooBhaina2-Bold.woff2" />
16<link rel="icon" sizes="16x16" href="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Magento_Theme/favicon-16x16.png" />
17<link rel="icon" sizes="32x32" href="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Magento_Theme/favicon-32x32.png" />
18<link rel="apple-touch-icon-precomposed" href="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Magento_Theme/apple-touch-icon.png" />
19<link rel="canonical" href="https://www.farma.it/" />
20<meta name="facebook-domain-verification" content="19ikyzhaaju7aes0tjiyen338y422x" />
21<style>
22.checkout-payment-method .payment-method-title input[value="sella_fabrickpass"]+label>span {
23    width: 100%
24}
25
26.checkout-payment-method .payment-method-title input[value="sella_fabrickpass"]+label:after {
27    content: '';
28    display: block;
29    height: 30px;
30    width: 100%;
31    background-size: contain!important;
32    background: url("https://www.farma.it/media/paybybank-logo.png") no-repeat right
33}
34
35.bg-cerave-week {
36    background: #0072ba;
37}
38
39.bg-cerave-week:hover {
40    background: #0069ac;
41    text-decoration: none;
42}
43
44[data-content-type="text"] ol {
45    list-style-type: decimal;
46    padding-left: 20px;
47}
48
49[data-content-type="text"] ul {
50    list-style-type: disc;
51    padding-left: 20px;
52}
53
54[data-content-type="text"] ol li, [data-content-type="text"] ol li {
55    margin-top: 4px;
56}
57
58.catalog-product-view .product-info-main #gallery img.derma-badge {
59    width: 120px!important;
60}
61
62#amfaq-ask-form-inline .button-container {
63display: none !important;
64}
65
66.children-category-container {
67overflow: hidden;
68}
69div.sella-payment-method-container div.img-sella-container {
70    display: none;
71}
72
73div.sella-payment-method-container > div {
74    display: flex;
75    align-items: center;
76}
77div.sella-card-form input {
78    width: 100%;
79    border-radius: 26px;
80    border-width: 1px;
81    --tw-border-opacity: 1;
82    border-color: rgb(214 214 214 / var(--tw-border-opacity));
83    padding: .875rem;
84    line-height: 1;
85    color: rgb(8 1 26 / var(--tw-text-opacity));
86    --tw-text-opacity: 1;
87    color: rgb(107 114 128 / var(--tw-text-opacity));
88    font-size: 16px;
89}
90
91[data-bind="i18n: 'Sustainable delivery estimated in 48-72 hours'"] {
92    display: none;
93}
94
95/* stile doppi punti */
96/*
97.col-method#label_method_inpost_inpost:after {
98    content: 'Punti Fedeltà x2!';
99    background: #fec802e6;
100    padding: 0px 5px;
101    border-radius: 5px;
102    color: #f15b2c;
103    font-weight: bold;
104    font-size: 12px;
105    vertical-align: middle;
106    display: inline-block;
107    white-space: nowrap;
108    animation: smooth-bounce-h 2.5s cubic-bezier(0.45, 0.05, 0.55, 0.95) infinite;
109    padding: 4px 8px;
110}
111
112@keyframes smooth-bounce-h {
113    0%   { transform: translateX(0); }
114    25%  { transform: translateX(6px); }
115    50%  { transform: translateX(0); }
116    75%  { transform: translateX(-6px); }
117    100% { transform: translateX(0); }
118}
119
120.col-method#label_method_inpost_inpost {
121    display: flex;
122    gap: 8px;
123    align-items: center;
124}
125*/
126</style>
127
128
129<meta name="google-site-verification" content="9QFzfN_ciMqKFU_cA05_S82R8WLpqnsp4E4Ihexm7EE" />
130
131<script>
132// Aggiungi un event listener al documento
133document.addEventListener('click', function(event) {
134  // Ottieni l'elemento target cliccato
135  var targetElement = event.target;
136
137  // Verifica se l'elemento cliccato ha le classi specificate
138  var hasTargetClasses = targetElement.classList.contains('block') &&
139                          targetElement.classList.contains('px-6') &&
140                          targetElement.classList.contains('w-full') &&
141                          targetElement.classList.contains('py-3') &&
142                          targetElement.classList.contains('text-base') &&
143                          targetElement.classList.contains('hover:text-secondary') &&
144                          targetElement.classList.contains('hover:bg-tertiary-darker/10') &&
145                          targetElement.classList.contains('hover:fill-primary') &&
146                          targetElement.classList.contains('font-bold') &&
147                          targetElement.classList.contains('cursor-pointer') &&
148                          targetElement.classList.contains('level0') &&
149                          targetElement.classList.contains('nav-11') &&
150                          targetElement.classList.contains('page-item');
151
152  // Verifica se l'elemento cliccato è un figlio di un elemento con le classi specificate
153  var parentElement = targetElement.closest('.block.px-6.w-full.py-3.text-base.hover\\:text-secondary.hover\\:bg-tertiary-darker\\/10.hover\\:fill-primary.font-bold.cursor-pointer.level0.nav-11.page-item');
154
155  // Esegui l'azione solo se l'elemento cliccato ha le classi o è un figlio di un elemento con le classi
156  if (hasTargetClasses || parentElement) {
157    // Esegui il reindirizzamento o caricamento del link
158      window.location.href = "https://www.farma.it/dermocosmetica";
159  }
160
161  // Ottieni l'elemento target cliccato
162  targetElement = event.target;
163
164  // Verifica se l'elemento cliccato ha le classi specificate
165  hasTargetClasses = targetElement.classList.contains('block') &&
166                          targetElement.classList.contains('px-6') &&
167                          targetElement.classList.contains('w-full') &&
168                          targetElement.classList.contains('py-3') &&
169                          targetElement.classList.contains('text-base') &&
170                          targetElement.classList.contains('hover:text-secondary') &&
171                          targetElement.classList.contains('hover:bg-tertiary-darker/10') &&
172                          targetElement.classList.contains('hover:fill-primary') &&
173                          targetElement.classList.contains('font-bold') &&
174                          targetElement.classList.contains('cursor-pointer') &&
175                          targetElement.classList.contains('level0') &&
176                          targetElement.classList.contains('nav-12') &&
177                          targetElement.classList.contains('page-item');
178
179  // Verifica se l'elemento cliccato è un figlio di un elemento con le classi specificate
180  parentElement = targetElement.closest('.block.px-6.w-full.py-3.text-base.hover\\:text-secondary.hover\\:bg-tertiary-darker\\/10.hover\\:fill-primary.font-bold.cursor-pointer.level0.nav-12.page-item');
181
182  // Esegui l'azione solo se l'elemento cliccato ha le classi o è un figlio di un elemento con le classi
183  if (hasTargetClasses || parentElement) {
184    // Esegui il reindirizzamento o caricamento del link
185      window.location.href = "https://www.farma.it/gastro-intestinale";
186  }
187
188});
189
190</script>
190
191
192<script defer>
193    window.addEventListener('load', () => {
194        Alpine.effect(() => {
195            // Funzione per capire se un elemento è naturalmente focusabile
196            const isNaturallyFocusable = (el) => {
197                const tag = el.tagName.toLowerCase();
198                if (tag === "a") return el.hasAttribute("href");
199                return ["button", "input", "select", "textarea"].includes(tag);
200            };
201
202            // 1. Link con href="#" => role="button" + tabindex
203            document.querySelectorAll("[href='#']:not([role])").forEach(el => {
204                el.setAttribute("role", "button");
205                if (!el.hasAttribute("tabindex") && !isNaturallyFocusable(el)) {
206                    el.setAttribute("tabindex", "0");
207                }
208            });
209
210            // 2. Link target="_blank" => aria-label se manca
211            document.querySelectorAll("a[target='_blank']:not([aria-label])").forEach(el => {
212                const text = el.textContent.trim();
213                if (text.length > 0) {
214                    el.setAttribute("aria-label", `${text} - opens in new tab`);
215                }
216            });
217
218            // 2.1 Link con href valorizzato e senza aria-label => estrai path finale
219            document.querySelectorAll("a[href]:not([aria-label])").forEach(el => {
220                const href = el.getAttribute("href");
221                if (href && href !== "#" && !el.hasAttribute("aria-label")) {
222                    try {
223                        const cleanHref = href.split('?')[0].split('#')[0];
224                        const parts = cleanHref.split('/');
225                        const last = parts.filter(p => p).pop();
226                        if (last) {
227                            const label = decodeURIComponent(last)
228                                .replace(/[-_]/g, ' ')
229                                .replace(/[^\w\sàèéìòùÀÈÉÌÒÙ]/gi, '')
230                                .trim();
231                            if (label) {
232                                el.setAttribute("aria-label", label);
233                            }
234                        }
235                    } catch (e) {}
236                }
237            });
238
239            // 3. Form di ricerca => role="search"
240            document.getElementById("search_mini_form")?.setAttribute("role", "search");
241
242            // 4. Icone visive => role="presentation" se mancante
243            document.querySelectorAll("i[class*='-icon'], em[class*='-icon'], span[class*='-icon']").forEach(el => {
244                if (!el.hasAttribute("role")) {
245                    el.setAttribute("role", "presentation");
246                }
247            });
248
249            // 5. SVG: rimuovi role="img", imposta alt e role="presentation" se serve
250            document.querySelectorAll("svg").forEach(el => {
251                if (el.getAttribute("role") === "img") {
252                    el.removeAttribute("role");
253                }
254                if (!el.hasAttribute("alt")) {
255                    el.setAttribute("alt", "Icona");
256                }
257                if (!el.hasAttribute("role")) {
258                    el.setAttribute("role", "presentation");
259                }
260            });
261
262            // 6. Elementi cliccabili via classi => role="button" + tabindex="0"
263            const clickableSelector = [
264                ".cursor-pointer",
265                ".group\\/button",
266                "[style*='cursor: pointer']",
267                '.swiper-button-prev',
268                '.swiper-button-next',
269                '.swiper-pagination-bullet',
270                '.product-item-link'
271            ].join(',');
272
273            document.querySelectorAll(clickableSelector).forEach(el => {
274                if (el.hasAttribute("role")) return;
275
276                const tag = el.tagName.toLowerCase();
277                const isNativeButton =
278                    tag === "button" ||
279                    (tag === "input" && ["button", "submit", "reset"].includes(el.type));
280
281                if (!isNativeButton) {
282                    el.setAttribute("role", "button");
283
284                    if (!el.hasAttribute("tabindex") && !isNaturallyFocusable(el)) {
285                        el.setAttribute("tabindex", "0");
286                    }
287
288                    if (!el.hasAttribute("aria-label")) {
289                        el.setAttribute("aria-label", "Action");
290                    }
291                }
292            });
293
294            // 7. Elementi con @click => role="button" + tabindex="0"
295            document.querySelectorAll("*").forEach(el => {
296                if (
297                    el.hasAttribute("@click") &&
298                    el.hasAttribute("@click.prevent") &&
299                    !el.hasAttribute("role") &&
300                    el.tagName.toLowerCase() !== "button"
301                ) {
302                    el.setAttribute("role", "button");
303
304                    if (!el.hasAttribute("tabindex") && !isNaturallyFocusable(el)) {
305                        el.setAttribute("tabindex", "0");
306                    }
307
308                    if (!el.hasAttribute("aria-label")) {
309                        el.setAttribute("aria-label", "Action");
310                    }
311                }
312            });
313
314            // 8. Cookiebot title: attesa dinamica e pulizia
315            const observeCookiebotTitle = () => {
316                const targetId = "CybotCookiebotDialogBodyContentTitle";
317
318                const handleTitle = (el) => {
319                    if (el.getAttribute("role") === "heading") el.removeAttribute("role");
320                    if (el.hasAttribute("aria-level")) el.removeAttribute("aria-level");
321                };
322
323                const existing = document.getElementById(targetId);
324                if (existing) {
325                    handleTitle(existing);
326                    return;
327                }
328
329                const observer = new MutationObserver((mutations, obs) => {
330                    const found = document.getElementById(targetId);
331                    if (found) {
332                        handleTitle(found);
333                        obs.disconnect();
334                    }
335                });
336
337                observer.observe(document.body, {
338                    childList: true,
339                    subtree: true,
340                });
341            };
342
343            observeCookiebotTitle();
344
345            // 9. Correzione elementi pseudo-button generici (span/div/a) con comportamento da bottone
346            document.querySelectorAll("a, span, div").forEach(el => {
347                const isButtonLike =
348                    el.hasAttribute("@click") ||
349                    el.hasAttribute("@click.prevent") ||
350                    el.hasAttribute("x-on:click") ||
351                    el.hasAttribute("onclick") ||
352                    el.hasAttribute("@keyup.enter") ||
353                    el.hasAttribute("x-on:keyup.enter") ||
354                    el.classList.contains("cursor-pointer") ||
355                    el.classList.contains("badge-container") ||
356                    el.classList.contains("rating-summary");
357
358                if (isButtonLike) {
359                    const isFocusable = isNaturallyFocusable(el) || el.hasAttribute("tabindex");
360
361                    // Assegna solo se mancano
362                    if (!el.hasAttribute("role")) {
363                        el.setAttribute("role", "button");
364                    }
365                    if (!isFocusable) {
366                        el.setAttribute("tabindex", "0");
367                    }
368                    if (!el.hasAttribute("aria-label")) {
369                        el.setAttribute("aria-label", "Action");
370                    }
371                }
372            });
373        });
374    });
375
376
377window.addEventListener('init-external-scripts', () => {
378
379if (!window.dataLayer) {
380        window.dataLayer = [];
381}
382
383      window.dataLayer.push({
384                    event: 'init_external_scripts'
385      })
386});
387
388
389document.addEventListener('click', function (event) {
390    const link = event.target.closest('a[href^="#"]');
391
392    if (!link) {
393        return;
394    }
395
396    const targetId = link.getAttribute('href').substring(1);
397
398    if (!targetId) {
399        return;
400    }
401
402    const target = document.getElementById(targetId);
403
404    // Ci interessa solo se il target è un form
405    if (!(target instanceof HTMLFormElement)) {
406        return;
407    }
408
409    event.preventDefault();
410
411    target.requestSubmit();
412});
413</script>
413
414
415            <!-- Added the new component below to track server events -->
416    
416<script>
417        window.addToCartData =
418            {"url":"https:\/\/www.farma.it\/fbe\/pixel\/tracker\/","eventName":"facebook_businessextension_ssapi_add_to_cart","fbAgentVersion":"magento_opensource-0.0.0-1.6.4","fbPixelId":"512468414859242","source":"magento_opensource","pluginVersion":"1.6.4","track":"track","event":"AddToCart"}    </script>
418
419    
419<script>
420        (function () {
421            var product_id = null;
422
423            window.addEventListener('configurable-selection-changed', event => {
424                product_id = event.detail.productIndex;
425            });
426
427            window.addEventListener("product-addtocart-success", event => {
428                var product_info_url = window.BASE_URL + 'fbe/Pixel/ProductInfoForAddToCart';
429
430                if (!product_id) {
431                    //If it's simple, get product_id from request
432                    product_id = event.detail.product_id;
433                }
434
435                product_qty = 1;
436                if (event?.detail?.form_data?.qty !== undefined) {
437                    product_qty = event.detail.form_data.qty;
438                }
439
440                const params = new URLSearchParams({
441                    form_key: hyva.getFormKey(),
442                    product_id: product_id,
443                    product_sku: null
444                });
445                const contentType = 'application/json';
446
447                fetch(product_info_url + '?' + params.toString(), {
448                    method: 'GET',
449                    headers: {
450                        'Content-Type': contentType
451                    }
452                }).then(response => {
453                    if (!response.ok) {
454                        throw new Error('Error while processing Facebook Pixel event.');
455                    }
456                    return response.json();
457                }).then(res => {
458                    let addToCartConfigPixel = {
459                        "url" : window.addToCartData.url,
460                        "payload": {
461                            "eventName" : window.addToCartData.eventName,
462                            "productId" : res.productId
463                        },
464                        "browserEventData": {
465                            'fbAgentVersion': window.addToCartData.fbAgentVersion,
466                            'fbPixelId': window.addToCartData.fbPixelId,
467                            'source': window.addToCartData.source,
468                            'pluginVersion': window.addToCartData.pluginVersion,
469                            'track': window.addToCartData.track,
470                            'event': window.addToCartData.event,
471                            'payload': {
472                                "content_name": res.name,
473                                "content_ids": [res.id],
474                                "value": res.value,
475                                "currency": res.currency,
476                                "content_type": res.content_type,
477                                "contents": [{
478                                    "id": res.id,
479                                    "quantity": product_qty ?? 1
480                                }]
481                            }
482                        }
483                    };
484
485                    metaPixelTracker(addToCartConfigPixel);
486                }).catch(error => {
487                    console.error(error);
488                });
489            });
490        })();
491    </script>
491
492<!-- Meta Business Extension for Magento 2 -->
493<!-- Meta Pixel Code -->
494<script>
vendor: 398 bytes, lines 494-502
494
495!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
496n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
497n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
498t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
499document,'script','//connect.facebook.net/en_US/fbevents.js');
500    fbq(
501  'init',
502  '
502512468414859242
vendor: 59 bytes, lines 502-505
502',
503    {},
504  {agent: 'magento_opensource-0.0.0-1.6.4' }
505);
506fbq('track', 'PageView', {
507  source: "magento_opensource",
508  pluginVersion: "1.6.4"
509});
510</script>
510
511
512<script>
513    function metaPixelTracker(config) {
514        let eventId = crypto.randomUUID();
515        var browserEventData = config.browserEventData;
516        let browserPayload = config.browserEventData.payload;
517
518        browserPayload.source = browserEventData.source;
519        browserPayload.pluginVersion = browserEventData.pluginVersion;
520
521        fbq('set', 'agent', browserEventData.fbAgentVersion, browserEventData.fbPixelId);
522        fbq(browserEventData.track, browserEventData.event, browserPayload, {
523                eventID: eventId
524            }
525        );
526
527        var formData = new FormData();
528        formData.append('form_key', hyva.getFormKey());
529        formData.append('eventId', eventId);
530
531        Object.entries(config.payload).forEach(function (item) {
532            formData.append(item[0], item[1]);
533        })
534
535        fetch(config.url, {
536            method: 'POST',
537            body: formData
538        }).catch(error => {
539            console.error(error);
540        });
541    }
542
543    function metaParseJson(json) {
544        json = decodeURIComponent(json.replace(/\+/g, ' '));
545        return JSON.parse(json);
546    }
547
548    function metaDelCookie(name) {
549        var date = new Date(0);
550        var cookie = name + '=' + '; path=/; expires=' + date.toUTCString();
551
552        document.cookie = cookie;
553    }
554
555    function metaGetCookie(name) {
556        var cookie = ' ' + document.cookie;
557        var search = ' ' + name + '=';
558        var setStr = null;
559        var offset = 0;
560        var end = 0;
561
562        if (cookie.length > 0) {
563            offset = cookie.indexOf(search);
564            if (offset !== -1) {
565                offset += search.length;
566                end = cookie.indexOf(';', offset);
567                if (end === -1) {
568                    end = cookie.length;
569                }
570                setStr = decodeURI(cookie.substring(offset, end));
571            }
572        }
573        return setStr;
574    }
575</script>
575
576<!-- End Meta Pixel Code -->
577
578<!-- Google Tag Manager by MagePal -->
579<script type="text/javascript">
580    window.dataLayer = window.dataLayer || [];
581
582
583    function initMagepalGtmDatalayer_4f71f1c5e6503faecb6d9e35a59f2399() {
584        'use strict';
585
586        let lastPushedCart = {};
587        let lastPushedCustomer = {};
588
589        function objectKeyExist(object)
590        {
591            const items = Array.isArray(object) ? object : Object.values(object);
592            return items.reduce((acc, v) => (acc || v.customer || v.cart), false);
593            // return _.some(object, function (o) {
594            //     return !_.isEmpty(_.pick(o, ['customer', 'cart']));
595            // })
596        }
597
598        const isObject = x => x === Object(x);
599        const has = (x, p) => isObject(x) && x.hasOwnProperty(p);
600        const isEqual = (x, y) => JSON.stringify(x) === JSON.stringify(y);
601
602        //Update datalayer
603        function updateDataLayer(_gtmDataLayer, _dataObject, _forceUpdate)
604        {
605            let customer = {isLoggedIn : false},
606                cart = {hasItems: false};
607
608            if (_gtmDataLayer !== undefined && (!objectKeyExist(_gtmDataLayer) || _forceUpdate)) {
609                if (isObject(_dataObject) && has(_dataObject, 'customer')) {
610                    customer = _dataObject.customer;
611                }
612
613                if (isObject(_dataObject) && has(_dataObject, 'cart')) {
614                    cart = _dataObject.cart;
615                }
616
617                if (!isEqual(lastPushedCart, cart) || !isEqual(lastPushedCustomer, customer)) {
618                    window.dispatchEvent(new CustomEvent('mpCustomerSession', {detail: [customer, cart, _gtmDataLayer]}));
619                    //$('body').trigger('mpCustomerSession', [customer, cart, _gtmDataLayer]);
620                    _gtmDataLayer.push({'event': 'mpCustomerSession', 'customer': customer, 'cart': cart});
621
622                    lastPushedCustomer = customer;
623                    lastPushedCart = cart;
624                }
625            }
626        }
627
628        function isTrackingAllowed(config)
629        {
630            let allowServices = false,
631                allowedCookies,
632                allowedWebsites;
633
634            if (!config.isGdprEnabled || (!config.isGdprEnabled && !config.addJsInHeader)) {
635                allowServices = true;
636            } else if (config.isCookieRestrictionModeEnabled && config.gdprOption === 1) {
637                allowedCookies = hyva.getCookie(config.cookieName);
638
639                if (allowedCookies !== null) {
640                    allowedWebsites = JSON.parse(allowedCookies);
641
642                    if (allowedWebsites[config.currentWebsite] === 1) {
643                        allowServices = true;
644                    }
645                }
646            } else if (config.gdprOption === 2) {
647                allowServices = hyva.getCookie(config.cookieName) !== null;
648            } else if (config.gdprOption === 3) {
649                allowServices = hyva.getCookie(config.cookieName) === null;
650            }
651
652            return allowServices;
653        }
654
655        //load gtm
656        function initTracking(dataLayerName, accountId, containerCode)
657        {
658            window.dispatchEvent(new CustomEvent('gtm:beforeInitialize'));
659
660            (function (w, d, s, l, i) {
661                w[l] = w[l] || [];
662                w[l].push({
663                    'gtm.start':
664                        new Date().getTime(), event: 'gtm.js'
665                });
666                var f = d.getElementsByTagName(s)[0],
667                    j = d.createElement(s), dl = l != dataLayerName ? '&l=' + l : '';
668                j.async = true;
669                j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl + containerCode;
670                f.parentNode.insertBefore(j, f);
671            })(window, document, 'script', dataLayerName, accountId);
672            window.dispatchEvent(new CustomEvent('gtm:afterInitialize'));
673        }
674
675        function pushData(dataLayerName, dataLayer)
676        {
677            //if (_.isArray(dataLayer)) {
678            if (Array.isArray(dataLayer)) {
679                //_.each(dataLayer, function (data) {
680                dataLayer.forEach(function (data) {
681                    window[dataLayerName].push(data);
682                });
683            }
684        }
685
686        const config = {
687            dataLayer: "dataLayer",
688            gdprOption: 0,
689            isGdprEnabled: 0,
690            isCookieRestrictionModeEnabled: 0,
691        };
692
693                config.currentWebsite = 1;
694        config.cookieName = "user_allowed_save_cookie";
695        config.accountId = "GTM-TQTH9KNM";
696        config.data = [{"ecommerce":{"currencyCode":"EUR"},"pageType":"cms_page_view","list":"other"}];
697        config.addJsInHeader = 0;
698        config.containerCode = "";
699        
700        window[config.dataLayer] = window[config.dataLayer] || [];
701
702        if (has(config, 'accountId') && isTrackingAllowed(config)) {
703            pushData(config.dataLayer, config.data);
704            initTracking(config.dataLayer, config.accountId, config.containerCode);
705        }
706
707        const gtmDataLayer = window[config.dataLayer];
708
709        window.addEventListener("private-content-loaded", event => {
710            const dataObject = event.detail.data['magepal-gtm-jsdatalayer'] || {};
711            updateDataLayer(gtmDataLayer, dataObject, true)
712        });
713
714        // dataObject.subscribe(function (_dataObject) {
715        //     updateDataLayer(gtmDataLayer, _dataObject, true);
716        // }, this);
717
718        // if (!_.contains(customerData.getExpiredKeys(), 'magepal-gtm-jsdatalayer')) {
719        //     updateDataLayer(gtmDataLayer, dataObject(), false);
720        // }
721
722    }
723    window.addEventListener('DOMContentLoaded', initMagepalGtmDatalayer_4f71f1c5e6503faecb6d9e35a59f2399);
724
725</script>
725
726<!-- End Google Tag Manager by MagePal -->
727
728<link rel="canonical" href="https://www.farma.it/app">
729<script>
730    var BASE_URL = 'https://www.farma.it/';
731    var THEME_PATH = 'https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT';
732    var COOKIE_CONFIG = {
733        "expires": null,
734        "path": "\u002F",
735        "domain": ".farma.it",
736        "secure": true,
737        "lifetime": "7200",
738        "cookie_restriction_enabled": false    };
739    var CURRENT_STORE_CODE = 'default';
740    var CURRENT_WEBSITE_ID = '1';
741    var CURRENT_MIN_ORDER_VALUE = '24.90';
742    var CURRENT_MIN_ORDER_VALUE_FORMATTED = '24,90 €';
743    var CURRENT_MIN_ORDER_INCLUDE_DISCOUNT = '0';
744    var CURRENT_STORE_CURRENCY = 'EUR';
745
746    window.hyva = window.hyva || {}
747
748    window.cookie_consent_groups = window.cookie_consent_groups || {}
749    window.cookie_consent_groups['necessary'] = true;
750
751    window.cookie_consent_config = window.cookie_consent_config || {};
752    window.cookie_consent_config['necessary'] = [].concat(
753        window.cookie_consent_config['necessary'] || [],
754        [
755            'user_allowed_save_cookie',
756            'form_key',
757            'mage-messages',
758            'private_content_version',
759            'mage-cache-sessid',
760            'last_visited_store',
761            'section_data_ids'
762        ]
763    );
764    document.addEventListener("alpine:init", () => {
765        Alpine.store('externalScriptsInit', false);
766        window.addEventListener('init-external-scripts', () => Alpine.store('externalScriptsInit',true), {
767            once: true,
768            passive: true
769        });
770    });
771</script>
vendor: 1 bytes, line 771
771
772<script>
773    (function( hyva, undefined ) {
774
775        function lifetimeToExpires(options, defaults) {
776
777            const lifetime = options.lifetime || defaults.lifetime;
778
779            if (lifetime) {
780                const date = new Date;
781                date.setTime(date.getTime() + lifetime * 1000);
782                return date;
783            }
784
785            return null;
786        }
787
788        function generateRandomString() {
789
790            const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
791                length = 16;
792
793            let formKey = '',
794                charactersLength = allowedCharacters.length;
795
796            for (let i = 0; i < length; i++) {
797                formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))]
798            }
799
800            return formKey;
801        }
802
803        const sessionCookieMarker = {noLifetime: true}
804
805        const cookieTempStorage = {};
806
807        const internalCookie = {
808            get(name) {
809                const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
810                return v ? v[2] : null;
811            },
812            set(name, value, days, skipSetDomain) {
813                let expires,
814                    path,
815                    domain,
816                    secure,
817                    samesite;
818
819                const defaultCookieConfig = {
820                    expires: null,
821                    path: '/',
822                    domain: null,
823                    secure: false,
824                    lifetime: null,
825                    samesite: 'lax'
826                };
827
828                const cookieConfig = window.COOKIE_CONFIG || {};
829
830                expires = days && days !== sessionCookieMarker
831                    ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig)
832                    : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires;
833
834                path = cookieConfig.path || defaultCookieConfig.path;
835                domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain);
836                secure = cookieConfig.secure || defaultCookieConfig.secure;
837                samesite = cookieConfig.samesite || defaultCookieConfig.samesite;
838
839                document.cookie = name + "=" + encodeURIComponent(value) +
840                    (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') +
841                    (path ? '; path=' + path : '') +
842                    (domain ? '; domain=' + domain : '') +
843                    (secure ? '; secure' : '') +
844                    (samesite ? '; samesite=' + samesite : 'lax');
845            },
846            isWebsiteAllowedToSaveCookie() {
847                const allowedCookies = this.get('user_allowed_save_cookie');
848                if (allowedCookies) {
849                    const allowedWebsites = JSON.parse(unescape(allowedCookies));
850
851                    return allowedWebsites[CURRENT_WEBSITE_ID] === 1;
852                }
853                return false;
854            },
855            getGroupByCookieName(name) {
856                const cookieConsentConfig = window.cookie_consent_config || {};
857                let group = null;
858                for (let prop in cookieConsentConfig) {
859                    if (!cookieConsentConfig.hasOwnProperty(prop)) continue;
860                    if (cookieConsentConfig[prop].includes(name)) {
861                        group = prop;
862                        break;
863                    }
864                }
865                return group;
866            },
867            isCookieAllowed(name) {
868                const cookieGroup = this.getGroupByCookieName(name);
869                return cookieGroup
870                    ? window.cookie_consent_groups[cookieGroup]
871                    : this.isWebsiteAllowedToSaveCookie();
872            },
873            saveTempStorageCookies() {
874                for (const [name, data] of Object.entries(cookieTempStorage)) {
875                    if (this.isCookieAllowed(name)) {
876                        this.set(name, data['value'], data['days'], data['skipSetDomain']);
877                        delete cookieTempStorage[name];
878                    }
879                }
880            }
881        };
882
883        hyva.getCookie = (name) => {
884            const cookieConfig = window.COOKIE_CONFIG || {};
885
886            if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
887                return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null;
888            }
889
890            return internalCookie.get(name);
891        }
892
893        hyva.setCookie = (name, value, days, skipSetDomain) => {
894            const cookieConfig = window.COOKIE_CONFIG || {};
895
896            if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
897                cookieTempStorage[name] = {value, days, skipSetDomain};
898                return;
899            }
900            return internalCookie.set(name, value, days, skipSetDomain);
901        }
902
903
904        hyva.setSessionCookie = (name, value, skipSetDomain) => {
905            return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain)
906        }
907
908        hyva.getBrowserStorage = () => {
909            const browserStorage = window.localStorage || window.sessionStorage;
910            if (!browserStorage) {
911                console.warn('Browser Storage is unavailable');
912                return false;
913            }
914            try {
915                browserStorage.setItem('storage_test', '1');
916                browserStorage.removeItem('storage_test');
917            } catch (error) {
918                console.warn('Browser Storage is not accessible', error);
919                return false;
920            }
921            return browserStorage;
922        }
923
924        hyva.postForm = (postParams) => {
925            const form = document.createElement("form");
926
927            let data = postParams.data;
928
929            if (! postParams.skipUenc && ! data.uenc) {
930                data.uenc = btoa(window.location.href);
931            }
932            form.method = "POST";
933            form.action = postParams.action;
934
935            Object.keys(postParams.data).map(key => {
936                const field = document.createElement("input");
937                field.type = 'hidden'
938                field.value = postParams.data[key];
939                field.name = key;
940                form.appendChild(field);
941            });
942
943            const form_key = document.createElement("input");
944            form_key.type = 'hidden';
945            form_key.value = hyva.getFormKey();
946            form_key.name="form_key";
947            form.appendChild(form_key);
948
949            document.body.appendChild(form);
950
951            form.submit();
952        }
953
954        hyva.getFormKey = function () {
955            let formKey = hyva.getCookie('form_key');
956
957            if (!formKey) {
958                formKey = generateRandomString();
959                hyva.setCookie('form_key', formKey);
960            }
961
962            return formKey;
963        }
964
965        hyva.formatPrice = (value, showSign, options = {}) => {
966            const groupSeparator = options.groupSeparator;
967            const decimalSeparator = options.decimalSeparator
968            delete options.groupSeparator;
969            delete options.decimalSeparator;
970            const formatter = new Intl.NumberFormat(
971                'it\u002DIT',
972                Object.assign({
973                    style: 'currency',
974                    currency: 'EUR',
975                    signDisplay: showSign ? 'always' : 'auto'
976                }, options)
977            );
978            return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ?
979                formatter.formatToParts(value).map(({type, value}) => {
980                    switch (type) {
981                        case 'currency':
982                            return '\u20AC' || value;
983                        case 'minusSign':
984                            return '- ';
985                        case 'plusSign':
986                            return '+ ';
987                        case 'group':
988                            return groupSeparator !== undefined ? groupSeparator : value;
989                        case 'decimal':
990                            return decimalSeparator !== undefined ? decimalSeparator : value;
991                        default :
992                            return value;
993                    }
994                }).reduce((string, part) => string + part) :
995                formatter.format(value);
996        }
997
998        const formatStr = function (str, nStart) {
999            const args = Array.from(arguments).slice(2);
1000
1001            return str.replace(/(%+)([0-9]+)/g, (m, p, n) => {
1002                const idx = parseInt(n) - nStart;
1003
1004                if (args[idx] === null || args[idx] === void 0) {
1005                    return m;
1006                }
1007                return p.length % 2
1008                    ? p.slice(0, -1).replace('%%', '%') + args[idx]
1009                    : p.replace('%%', '%') + n;
1010            })
1011        }
1012
1013        hyva.str = function (string) {
1014            const args = Array.from(arguments);
1015            args.splice(1, 0, 1);
1016
1017            return formatStr.apply(undefined, args);
1018        }
1019
1020        hyva.strf = function () {
1021            const args = Array.from(arguments);
1022            args.splice(1, 0, 0);
1023
1024            return formatStr.apply(undefined, args);
1025        }
1026
1027        /**
1028         * Take a html string as `content` parameter and
1029         * extract an element from the DOM to replace in
1030         * the current page under the same selector,
1031         * defined by `targetSelector`
1032         */
1033        hyva.replaceDomElement = (targetSelector, content) => {
1034            // Parse the content and extract the DOM node using the `targetSelector`
1035            const parser = new DOMParser();
1036            const doc = parser.parseFromString(content, 'text/html');
1037            const contentNode = doc.querySelector(targetSelector);
1038
1039            // Bail if content or target can't be found
1040            if (!contentNode || !document.querySelector(targetSelector)) {
1041                return;
1042            }
1043
1044                        hyva.activateScripts(contentNode);
1045            
1046            // Replace the old DOM node with the new content
1047            document.querySelector(targetSelector).replaceWith(contentNode);
1048
1049            // Reload customerSectionData and display cookie-messages if present
1050            window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
1051            hyva.initMessages();
1052        }
1053
1054        hyva.removeScripts = (contentNode) => {
1055            const scripts = contentNode.getElementsByTagName('script');
1056            for (let i = 0; i < scripts.length; i++) {
1057                scripts[i].parentNode.removeChild(scripts[i]);
1058            }
1059            const templates = contentNode.getElementsByTagName('template');
1060            for (let i = 0; i < templates.length; i++) {
1061                const container = document.createElement('div');
1062                container.innerHTML = templates[i].innerHTML;
1063                hyva.removeScripts(container);
1064                templates[i].innerHTML = container.innerHTML;
1065            }
1066        }
1067
1068        hyva.activateScripts = (contentNode) => {
1069            // Create new array from HTMLCollection to avoid mutation of collection while manipulating the DOM.
1070            const scripts = Array.from(contentNode.getElementsByTagName('script'));
1071
1072            // Iterate over all script tags to duplicate+inject each into the head
1073            for (const original of scripts) {
1074                const script = document.createElement('script');
1075                original.type && (script.type = original.type);
1076                script.innerHTML = original.innerHTML;
1077
1078                // Remove the original (non-executing) script from the contentNode
1079                original.parentNode.removeChild(original)
1080
1081                // Add script to head
1082                document.head.appendChild(script);
1083            }
1084
1085            return contentNode;
1086        }
1087
1088        const replace = {['+']: '-', ['/']: '_', ['=']: ','};
1089        hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]);
1090
1091        let currentTrap;
1092
1093        const focusableElements = (rootElement) => {
1094            const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]';
1095            return Array.from(rootElement.querySelectorAll(selector))
1096                .filter(el => {
1097                    return el.style.display !== 'none'
1098                        && !el.disabled
1099                        && el.tabIndex !== -1
1100                        && (el.offsetWidth || el.offsetHeight || el.getClientRects().length)
1101                })
1102        }
1103
1104        const focusTrap = (e) => {
1105            const isTabPressed = e.key === 'Tab' || e.keyCode === 9;
1106            if (!isTabPressed) return;
1107
1108            const focusable = focusableElements(currentTrap)
1109            const firstFocusableElement = focusable[0]
1110            const lastFocusableElement = focusable[focusable.length - 1]
1111
1112            e.shiftKey
1113                ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault())
1114                : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault())
1115        };
1116
1117        hyva.releaseFocus = (rootElement) => {
1118            if (currentTrap && (!rootElement || rootElement === currentTrap)) {
1119                currentTrap.removeEventListener('keydown', focusTrap)
1120                currentTrap = null
1121            }
1122        }
1123        hyva.trapFocus = (rootElement) => {
1124            if (!rootElement) return;
1125            hyva.releaseFocus()
1126            currentTrap = rootElement
1127            rootElement.addEventListener('keydown', focusTrap)
1128            const firstElement = focusableElements(rootElement)[0]
1129            firstElement && firstElement.focus()
1130        }
1131
1132        hyva.safeParseNumber = (rawValue) => {
1133            const number = rawValue ? parseFloat(rawValue) : null;
1134
1135            return Array.isArray(number) || isNaN(number) ? rawValue : number;
1136        }
1137
1138        const toCamelCase = s => s.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('');
1139        hyva.createBooleanObject = (name, value = false, additionalMethods = {}) => {
1140
1141            const camelCase = toCamelCase(name);
1142            const key = '__hyva_bool_' + name
1143
1144            return new Proxy(Object.assign(
1145                additionalMethods,
1146                {
1147                    [key]: !!value,
1148                    [name]() {return !!this[key]},
1149                    ['!' + name]() {return !this[key]}, // @deprecated This does not work with non-CSP Alpine
1150                    ['not' + camelCase]() {return !this[key]},
1151                    ['toggle' + camelCase]() {this[key] = !this[key]},
1152                    [`set${camelCase}True`]() {this[key] = true},
1153                    [`set${camelCase}False`]() {this[key] = false},
1154                }
1155            ), {
1156                set(target, prop, value) {
1157                    return prop === name
1158                        ? (target[key] = !!value)
1159                        : Reflect.set(...arguments);
1160                }
1161            })
1162        }
1163
1164                hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true})
1165        window.addEventListener('alpine:init', () => Alpine.data('{}', () => ({})), {once: true});
1166                window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies())
1167
1168    }( window.hyva = window.hyva || {} ));
1169    //# sourceURL=hyva.js
1170</script>
vendor: 1 bytes, line 1170
1170
1171<script type="speculationrules">
1172{
1173    "tag": "Hyva Theme",
1174    "prefetch": [{
1175        "source": "document",
1176        "where": {
1177            "and": [
1178                { "href_matches": "/*" },
1179                { "not": {
1180                    "href_matches": ["/customer/*","/search/*","/sales/*","/wishlist/*","/checkout/*","/paypal/*","/newsletter/*","/stores/store/redirect/*"]                }},
1181                { "not": {
1182                    "selector_matches": [".no-preload", ".do-not-prerender", "[download]", "[rel~=nofollow]", "[target]"]
1183                }}
1184            ]
1185        },
1186        "eagerness": "moderate"
1187    }]
1188}
1189</script>
vendor: 1 bytes, line 1189
1189
1190<script class="feedaty_sdk" src="https://widget.feedaty.com/v3.0.0/js/2021/10214034/feedaty.min.js" async></script>
1190
1191
1192    <meta property="og:type" content="cms"/>
1193
1194    
1195    
1196    <meta property="og:url" content="https://www.farma.it/app"/>
1197    <meta property="og:site_name" content="Farma.it by Antica Farmacia Orlandi Shop"/>
1198<script>
1199    function deepMerge(target, ...sources) {
1200        if (!sources.length) {
1201            return target;
1202        }
1203
1204        const source = sources.shift();
1205
1206        if (typeof target !== 'object' || typeof source !== 'object') {
1207            return target;
1208        }
1209
1210        for (let key in source) {
1211            if (source.hasOwnProperty(key)) {
1212                if (source[key] instanceof Array) {
1213                    target[key] = target[key] || [];
1214                    target[key] = target[key].concat(source[key]);
1215                } else if (typeof source[key] === 'object') {
1216                    target[key] = deepMerge(target[key] || {}, source[key]);
1217                } else {
1218                    target[key] = source[key];
1219                }
1220            }
1221        }
1222
1223        return deepMerge(target, ...sources);
1224    }
1225
1226    function amastyRewardsProduct() {
1227        return {
1228            captionStartText: 'Puoi\u0020guadagnare',
1229            captionAfterText: '',
1230            captionRegistrationText: 'registrandoti\u0021',
1231            captionEndText: '',
1232            productId: this.$el.dataset.productId,
1233            formSelector: 'product_addtocart_form',
1234            form: null,
1235            refreshUrl: this.$el.dataset.refreshUrl,
1236            loader: false,
1237            isFetching: false,
1238            abortFetchController: false,
1239            highlight: {
1240                registration_link: '',
1241                caption_color: '',
1242                caption_text: '0',
1243                visible: false
1244            },
1245
1246            init() {
1247                this.formObserver();
1248                document.addEventListener(`update-qty-${this.productId}`, () => {
1249                    this.updateData();
1250                });
1251                window.addEventListener('update-bundle-option-selection', () => {
1252                    this.updateData();
1253                });
1254                this.$nextTick(() => this.updateData());
1255            },
1256
1257            hideBlock() {
1258                this.highlight.visible = false;
1259                this.loader = true;
1260            },
1261
1262            dispatchStatus(type, message) {
1263                window.dispatchMessages([{
1264                    type: type,
1265                    text: message
1266                }], 5000);
1267            },
1268
1269            formObserver() {
1270                const product = document.querySelector(`input[name='product'][value='${this.productId}']`);
1271
1272                if (product) {
1273                    const productForm = product.form;
1274                    if (productForm) {
1275                        productForm.addEventListener('change', () => {
1276                            this.updateData();
1277                        });
1278                    }
1279                }
1280            },
1281
1282            updateData() {
1283                if (this.isFetching) {
1284                    return false;
1285                }
1286                if (!this.refreshUrl) {
1287                    this.loader = false;
1288                    return false;
1289                }
1290                this.hideBlock();
1291
1292                if (this.abortFetchController) {
1293                    this.abortFetchController.abort();
1294                }
1295
1296                this.abortFetchController = new AbortController();
1297
1298                const product = document.querySelector(`input[name='product'][value='${this.productId}']`);
1299                let formParams = '';
1300
1301                if (!product) {
1302                    formParams = 'form_key=' + hyva.getFormKey() + '&product=' + this.productId;
1303                } else {
1304                    const form = product.form;
1305                    const formData = new FormData(form);
1306                    formParams = new URLSearchParams(formData).toString();
1307                }
1308                const formJson = JSON.stringify({
1309                    page: 0,
1310                    productId: this.productId,
1311                    attributes: formParams
1312                });
1313
1314                const requestOptions = {
1315                    method: 'POST',
1316                    body: formJson,
1317                    headers: {
1318                        'Content-Type': 'application/json',
1319                        'x-requested-with': 'XMLHttpRequest',
1320                    },
1321                    signal: this.abortFetchController.signal
1322                };
1323                this.isFetching = true;
1324                fetch(this.refreshUrl, requestOptions).then(response => {
1325                    if (!response.ok) {
1326                        return Promise.reject(`${response.status} ${response.statusText}`);
1327                    }
1328                    return response.json();
1329                }).then((data) => {
1330                    this.highlight.visible = data.visible;
1331                    this.highlight.caption_text = data.caption_text;
1332                    this.highlight.caption_color = data.caption_color;
1333
1334                    if (data?.registration_link) {
1335                        this.highlight.registration_link = data.registration_link;
1336                    }
1337
1338                    if (data?.need_to_change_message && data?.need_to_change_message === 1) {
1339                        this.captionAfterText = 'completando\u0020un\u0020acquisto\u0021\u0020Solo\u0020per';
1340                        this.captionRegistrationText = 'registrati.';
1341                        this.captionEndText = 'utenti';
1342                    }
1343                }).catch(error => {
1344                    if (error.name !== 'AbortError' && typeof error === 'string' && error.match(/'401'/g) !== null) {
1345                        this.dispatchStatus('error', error);
1346                    }
1347                }).finally(() => {
1348                    this.loader = false;
1349                    this.isFetching = false;
1350                });
1351            },
1352
1353            highlightCaptionText() {
1354                return this.highlight.caption_text !== '0' && !this.loader;
1355            },
1356
1357            highlightStyle() {
1358                return `color: ${this.highlight.caption_color}`;
1359            },
1360
1361            isHighlightRegistrationLink() {
1362                return this.highlight.registration_link && this.highlight.registration_link !== '';
1363            },
1364
1365            isNotRegistrationLink() {
1366                return !this.highlight.registration_link;
1367            },
1368
1369            highlightVisible() {
1370                return this.highlight.visible && !this.loader;
1371            }
1372        }
1373    }
1374
1375    window.addEventListener(
1376        'alpine:init',
1377        () => Alpine.data('amastyRewardsProduct', amastyRewardsProduct),
1378        { once: true }
1379    );
1380</script>
vendor: 1 bytes, line 1380
1380
1381<script>
1382    (function () {
1383        let amSwiperProcessed = false;
1384
1385        window.addEventListener('load-amswiper', () => {
1386            if (amSwiperProcessed) {
1387                window?.Swiper && window.dispatchEvent(new CustomEvent('amswiper-loaded', {}));
1388                return;
1389            }
1390
1391            const script = document.createElement('script');
1392            script.src = 'https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Amasty_LibSwiperJs/js/vendor/swiper/swiper.min.js';
1393            script.async = true;
1394            document.body.appendChild(script);
1395
1396            amSwiperProcessed = true;
1397
1398            script.onload = () => {
1399                window.dispatchEvent(new CustomEvent('amswiper-loaded', {}));
1400            }
1401
1402            const stylesHref = 'https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Amasty_LibSwiperJs/vendor/swiper/swiper.min.css';
1403
1404            if (document.querySelector(`link[href="${stylesHref}"]`)) {
1405                return;
1406            }
1407
1408            const styles = document.createElement('link');
1409            styles.rel = 'stylesheet';
1410            styles.type = 'text/css';
1411            styles.href = stylesHref;
1412
1413            document.head.appendChild(styles);
1414        });
1415    }());
1416</script>
1416
1417</head>
1418<body id="html-body" class="cms-app page-layout-1column cms-page-view page-layout-cms-full-width">
1419                        <noscript>
1420            <img height="1" width="1" style="display:none"
1421                 src="https://www.facebook.com/tr?id=512468414859242&amp;ev=PageView&amp;noscript=1&amp;a=magento_opensource-0.0.0-1.6.4">
1422        </noscript>
1423    
1424<!-- Google Tag Manager by MagePal -->
vendor: 62 bytes, lines 1424-1425
1424
1425<noscript><iframe src="//www.googletagmanager.com/ns.html?id=
1425GTM-TQTH9KNM
vendor: 83 bytes, lines 1425-1426
1425"
1426height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1427<!-- End Google Tag Manager by MagePal -->
1428
1429
1430    
1431    
1431<script type="module">const { KlarnaSDK } = await import("https\u003A\u002F\u002Fjs.klarna.com\u002Fweb\u002Dsdk\u002Fv2\u002Fklarna.mjs");
1432const MyKlarna = await KlarnaSDK({
1433    clientId: "klarna_live_client_Rnpiams_MTNpWWc3LzJ3UUppciNHKUgqJSlSTG9lS0gsN2Q1MmUxN2UtZmE4MC00OGIxLWFhNjgtNTc4NDMyN2M2MGQ0LDEsWlJNMmtVejlkd0Q1bVBoOHZnc3JKN1YyL3FOY2ZrYzRRSWRjNUNhY3ZZYz0",
1434    products: ["PAYMENT", "MESSAGING", "IDENTITY", "CUSTOMER"],
1435    locale: "it\u002DIT"
1436});
1437const token = await MyKlarna.Interoperability.token();
1438const klarnaReadyEvent = new CustomEvent("klarna-sdk-ready", {
1439    detail: { token, sdk: MyKlarna }
1440});
1441window.dispatchEvent(klarnaReadyEvent);</script>
1441    
1442<div
1443            class="ambanners ambanner-10"
1444        data-position="10"
1445        data-bannerid=""
1446        data-role="amasty-banner-container"
1447></div>
1448
1449<script nonce='MHpuY3ZpbGdvM2N2bm5jdTlmMnlzaXFxaHFmbzMzajY=' >
1450    'use strict';
1451    (function (blackbird) {
1452
1453        const addEventListenerOnElementToLoad = (elementToLoad, source) => new Promise((resolve, reject) => {
1454            elementToLoad.addEventListener('load', () => {
1455                elementToLoad.dataset.loaded = true;
1456                resolve(elementToLoad);
1457            })
1458
1459            elementToLoad.addEventListener('error', () => {
1460                reject(new Error(`[External resource loader] : The resource "${source}", failed to load.`));
1461            });
1462        });
1463
1464        blackbird.loadExternalScript = async (source) => {
1465            const scriptWithSameSrc = document.querySelector(`script[src="${source}"][data-loaded]`);
1466
1467            if (scriptWithSameSrc && scriptWithSameSrc.dataset.loaded === 'true') {
1468                return scriptWithSameSrc;
1469            }
1470
1471            const script = scriptWithSameSrc ?? document.createElement('script');
1472            script.type = 'text/javascript';
1473            script.async = true;
1474            script.src = source;
1475            script.dataset.loaded = false;
1476
1477            document.head.appendChild(script);
1478            await addEventListenerOnElementToLoad(script, source);
1479            return script;
1480        }
1481
1482        blackbird.loadExternalStyle = async (source) => {
1483            const linkWithSameHref = document.querySelector(`link[href="${source}"][data-loaded]`);
1484
1485            if (linkWithSameHref && linkWithSameHref.dataset.loaded === 'true') {
1486                return linkWithSameHref;
1487            }
1488
1489            const link = linkWithSameHref ?? document.createElement('link');
1490            link.type = 'text/css'
1491            link.rel = 'stylesheet';
1492            link.href = source;
1493            link.dataset.loaded = false;
1494
1495            document.head.prepend(link);
1496            await addEventListenerOnElementToLoad(link, source);
1497            return link;
1498        }
1499
1500        blackbird.loadExternalResource = (source) => {
1501            const scriptUrlRegex = /\.(js)$/i;
1502            const styleUrlRegex = /\.(css)$/i;
1503
1504            if (scriptUrlRegex.test(source)) {
1505                return blackbird.loadExternalScript(source);
1506            }
1507
1508            if (styleUrlRegex.test(source)) {
1509                return blackbird.loadExternalStyle(source);
1510            }
1511        }
1512
1513    }(window.blackbird = window.blackbird || {}));
1514</script>
1514
1515<!-- BEGIN Trovaprezzi Trusted Program CODE -->
1516<script type="text/javascript" src="https://tps.trovaprezzi.it/javascripts/tracking-vanilla.min.js"></script>
1516
1517
1518<!-- END  Trovaprezzi Trusted Program CODE -->
1519<input name="form_key" type="hidden" value="9dQr53kPKJTqt6jR" />
1520    <noscript>
1521        <section
1522            class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal"
1523            aria-labelledby="messageGlobalNoScriptMessage"
1524        >
1525            <div class="container text-center">
1526                <p id="messageGlobalNoScriptMessage">
1527                    <strong>I JavaScript sembrano essere disabilitati nel tuo browser.</strong>
1528                    <span>
1529                        Per una migliore esperienza sul nostro sito, assicurati di attivare i javascript nel tuo browser.                    </span>
1530                </p>
1531            </div>
1532        </section>
1533    </noscript>
1534
1535
1536<div class="widget block block-static-block">
1537    <style>#html-body [data-pb-style=HBYLWMQ]{justify-content:flex-start;display:flex;flex-direction:column;background-color:#ff6801;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div class="preheader" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="false" data-intersect="false" data-element="main" data-pb-style="HBYLWMQ"><div data-content-type="html" data-appearance="default" data-intersect="false" data-element="main" data-decoded="true"><p class="py-1 text-xxs lg:text-xs text-center w-full text-white font-medium px-2">
1538Spedizione <strong id="prova-agent">Gratuita</strong><span class="hidden lg:inline"> su tutti i prodotti</span> | Ordine minimo 24,90 €
1539</p>
1540<a href="http://reskyt.com/app/anticafarmaciaorlandi" class="href-download-app reskyt" id="href-download-app" style="display:none">
1541    <div id="install-app">
1542        <span class="close-install-app" onclick="return reskytCloseBar();"><span>x</span></span>
1543        <div class="content-app">
1544            <img class="img-app" src="https://cdn.reskyt.com/7724/antica-farmacia-orlandi-icono-app-436884-250116101022.png" alt="Farma.it">
1545            <div class="name-app">Farma.it</div>
1546            <div class="fab-app">Farma.it - by Antica Farmacia Orlandi</div>
1547            <div class="title-app">Disponibile su <span id="platform-app"></span></div>
1548        </div>
1549    </div>
1550</a>
1551
1552<style>
1553    .fixed-header .reskyt #install-app {
1554        display: none;
1555    }
1556    
1557    .reskyt #install-app {
1558        width:100%;
1559        right: 0;
1560        position: fixed;
1561        top:0;
1562        z-index: 900;
1563        color:#000000;
1564        background-color:rgb(255, 102, 0);;
1565        font-family: Verdana, Arial, sans-serif;
1566        font-size:12px;
1567        min-height:90px;
1568        z-index: 99999;
1569    }
1570    .reskyt .close-install-app {
1571        padding:8px 5px;
1572        display:block;
1573        width:20px;
1574        height:40px;
1575        font-family: Helvetica, Arial, Verdana, sans-serif;
1576        font-weight: normal;
1577        font-size:14px;
1578        text-align:center;
1579        cursor:pointer !important;
1580        font-weight:bold;
1581        color:#666;
1582        position:absolute;
1583        margin-top:20px;
1584    }
1585    .reskyt .img-app {
1586        max-height: 60px;
1587        width:57px;
1588        border: 1px solid #e8ecf1;
1589        -webkit-border-radius: 8px;
1590        -moz-border-radius: 8px;
1591        border-radius: 8px;
1592    }
1593    .reskyt .img-app, .reskyt .content-app {
1594        float:left;
1595    }
1596    .reskyt .fab-app {
1597        color:#000000;
1598        font-size:11px;
1599    }
1600    .reskyt .name-app, .reskyt .title-app, .reskyt .fab-app {
1601        margin-left:70px;
1602        padding:1px 0;
1603    }
1604    .reskyt .title-app {                 color: #444444;             }
1605    .reskyt .name-app {
1606        font-weight:bold;
1607        margin-top:2px;
1608        overflow:hidden;
1609        height: 16px;
1610    }
1611    .reskyt .content-app {
1612        margin-top:8px;
1613        margin-right: 34px;
1614        margin-left: 30px;
1615        position:absolute;
1616    }
1617    .reskyt .view-install-app {
1618        color:blue;
1619        line-height:25px;
1620        margin-top:23px;
1621        text-transform:uppercase;
1622        position:absolute;
1623        right:5px;
1624    }
1625    @media screen and (max-width: 350px){                  .reskyt .title-app { overflow: auto; max-height: 28px;}                }
1626</style>
1627
1628<script>
1629
1630    function reskytCloseBar () {
1631        dias_expire = 7; /*Dias que queremos que pasen hasta que se vuelva a mostrar la barra*/
1632        reskytSetCookie("reskyt-install-app", 1, dias_expire);
1633        document.getElementById("href-download-app").style.display = "none";
1634        return false;
1635    }
1636    function reskytSetCookie(cname, cvalue, exdays) {
1637        var d = new Date();
1638        d.setTime(d.getTime() + (exdays*24*60*60*1000));
1639        var expires = "expires="+ d.toUTCString();
1640        document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; /*Añadir ;SameSite=None;Secure en caso de que la cookie tenga que ser accesible entre iFrame*/
1641    }
1642    function reskytGetCookie(cname) {
1643        var name = cname + "=";
1644        var decodedCookie = decodeURIComponent(document.cookie);
1645        var ca = decodedCookie.split(';');
1646        for(var i = 0; i <ca.length; i++) {
1647            var c = ca[i];
1648            while (c.charAt(0) == ' ') {
1649                c = c.substring(1);
1650            }
1651            if (c.indexOf(name) == 0) {
1652                return c.substring(name.length, c.length);
1653            }
1654        }
1655        return "";
1656    }
1657    url = window.location.href;
1658    if ( url.indexOf("customapp=") != -1 ) {
1659        reskytSetCookie("is_app_install_bar", 1, 365);
1660    }
1661    window.addEventListener('load', function () {
1662        let isMobile = true;
1663
1664        const platformApp = document.getElementById("platform-app");
1665        const downloadApp = document.getElementById("href-download-app");
1666
1667        if (/Android/i.test(navigator.userAgent)) {
1668            if (platformApp) {
1669                platformApp.innerHTML = "Google Play";
1670            }
1671        } else if (/iPhone|iPad|iPod/i.test(navigator.userAgent)) {
1672            if (platformApp) {
1673                platformApp.innerHTML = "App Store";
1674            }
1675        } else if (/IEMobile/i.test(navigator.userAgent)) {
1676            if (platformApp) {
1677                platformApp.innerHTML = "Windows Phone";
1678            }
1679        } else {
1680            isMobile = false;
1681        }
1682
1683        if (
1684            downloadApp &&
1685            isMobile &&
1686            !reskytGetCookie("is_app_install_bar") &&
1687            !reskytGetCookie("reskyt-install-app")
1688        ) {
1689            downloadApp.style.display = "block";
1690        } else if (downloadApp) {
1691            downloadApp.style.display = "none";
1692        }
1693    });
1694</script>
1694</div></div></div>
1695
1696
1697<script data-cfasync="false">
1698    window.amastyCookieManager = window.amastyCookieManager || {};
1699</script>
vendor: 1 bytes, line 1699
1699
1700<script type="text/plain" data-cookieconsent="marketing">
1701    (function() {
1702      "use strict";
1703
1704      window.CONNECTIF_CART_SUMMARY = null;
1705
1706      function addClientScript(result) {
1707          if (
1708              !document.querySelector("#__cn_generic_script__" + result.clientId) &&
1709              !document.querySelector("#__cn_client_script_" + result.clientId)
1710          ) {
1711              const url =
1712                  result.cdnProtocol +
1713                  "://" +
1714                  result.cdnDomain +
1715                  "/" +
1716                  result.cdnPath +
1717                  "/" +
1718                  result.clientScriptPath +
1719                  result.clientId;
1720              const element = document.createElement("script");
1721              element.setAttribute("src", url);
1722              element.setAttribute("id", "__cn_generic_script__" + result.clientId);
1723              document.body.appendChild(element);
1724          } else {
1725              var cartModel = window.connectif.getCartModel();
1726              window.connectif.managed.sendEvents([], {cart: cartModel})
1727          }
1728      }
1729
1730      function addTags(innerHTML, elementToRemove = null) {
1731        if (!!innerHTML) {
1732            if (elementToRemove) {
1733                let elementToRemoveNode = document.querySelector(elementToRemove);
1734                if (elementToRemoveNode) {
1735                    elementToRemoveNode.remove();
1736                }
1737            }
1738
1739          let element = document.createElement("div");
1740          element.style.display = "none";
1741          element.innerHTML = innerHTML;
1742          document.body.appendChild(element);
1743        }
1744      }
1745
1746      function fetchConnectif() {
1747        const url = 'https://www.farma.it/connectif/tags/ajaxconnectiftags' + '?' + Date.now().toString(36) + Math.random().toString(36).substr(2);
1748
1749        fetch(url, {
1750          method: "GET",
1751          headers: {
1752            "Content-Type": "application/json",
1753              'Cache-Control': 'no-cache, no-store, must-revalidate',
1754              'Pragma': 'no-cache',
1755              'Expires': '0',
1756              'X-Requested-With': 'XMLHttpRequest'
1757          }
1758        })
1759        .then(response => response.json())
1760        .then(result => {
1761          addTags(result.renderedClientInfo, '.cn_client_info');
1762          addTags(result.renderedCart, '.cn_cart');
1763          addTags(result.renderedNewsletter, '.cn_newsletter_subscribe');
1764
1765          if (
1766            document.readyState === "complete" ||
1767            document.readyState === "interactive"
1768          ) {
1769            addClientScript(result);
1770          } else {
1771            document.addEventListener(
1772              "DOMContentLoaded",
1773              addClientScript.bind(null, result)
1774            );
1775          }
1776        })
1777        .catch(error => console.error('Error:', error));
1778      }
1779
1780        window.addEventListener('private-content-loaded', (e) => {
1781            //fetch Connecitf only at first visit or whenever cart is updated (add to cart, remove from cart, qty update)
1782            var cartSummary = 0;
1783            if (e.detail && e.detail.data && e.detail.data.cart && e.detail.data.cart.summary_count) {
1784                cartSummary = e.detail.data.cart.summary_count;
1785            }
1786            if (window.CONNECTIF_CART_SUMMARY === null || cartSummary !== window.CONNECTIF_CART_SUMMARY)  {
1787                fetchConnectif();
1788                window.CONNECTIF_CART_SUMMARY = cartSummary;
1789            }
1790        });
1791    })();
1792</script>
1792
1793<div class="page-wrapper"><header class="page-header"><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white
1794   contentarea"
1795   href="#contentarea">
1796    <span>
1797        Salta al contenuto    </span>
1798</a>
1799<script>
1800    function initHeader () {
1801        return {
1802            cart: {},
1803            fixedPosition: 50,
1804            fixedClass: 'fixed-header',
1805            getData(data) {
1806                if (data.cart) { this.cart = data.cart }
1807            },
1808            getCartItemsCountLabel() {
1809                if(this.cart && this.cart.summary_count){
1810                    return (this.cart.summary_count > 99)? '99+' : `${this.cart.summary_count}`
1811                }
1812                return '0';
1813            },
1814            fixedHeader() {
1815                if (window.scrollY > this.fixedPosition) {
1816                    document.body.classList.add(this.fixedClass);
1817                } else {
1818                    document.body.classList.remove(this.fixedClass);
1819                }
1820            },
1821            bodyScroll(removeScroll) {
1822                const body = document.querySelector('body');
1823                if (!document.querySelector("#maincontent > .dfd-root")) {
1824                    if (removeScroll) {
1825                        body.classList.add('overflow-hidden');
1826                    } else {
1827                        body.classList.remove('overflow-hidden');
1828                    }
1829                }
1830            }
1831        }
1832    }
1833</script>
1833
1834<div id="header"
1835     class="relative w-full"
1836     :class="searchOpened ? '' : 'z-30'"
1837     x-data="{...initHeader(), ...{searchOpened: false}}"
1838     @live-search-state-changed.window="searchOpened = $event.detail; bodyScroll(searchOpened)"
1839     @private-content-loaded.window="getData(event.detail.data)"
1840     @scroll.window="fixedHeader()"
1841>
1842    <div class="content w-full bg-white shadow-lg border-b border-primary-darker" :class="searchOpened ? 'z-40' : ''">
1843        <div class="container flex flex-wrap items-center justify-between w-full pt-4 mx-auto mt-0">
1844            <!-- Logo -->
1845            <div class="order-2 flex-1 lg:flex-none w-auto">
1846    <a class="flex items-center justify-center lg:justify-start text-xl font-medium tracking-wide text-gray-800
1847        no-underline hover:no-underline font-title "
1848       href="https://www.farma.it/"
1849       title=""
1850       aria-label="store logo">
1851        <img src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/logo.svg"
1852             style="height: 60px;"
1853             title=""
1854             alt=""
1855            width="253"            height="70"        />
1856            </a>
1857</div>
1858
1859            <!-- Main Navigation -->
1860            
1861
1862<div x-data="initMenuMobile_6ac8c77d0ec48()"
1863     x-defer="intersect"
1864     x-intersect.once="isActive = true; $watch('open', value => { fetchData() })"
1865     class="z-20 order-1 navigation lg:hidden"
1866>
1867    <template x-if="isActive">
1868        <div class="flex items-baseline justify-between menu-icon mr-3">
1869            <div class="flex justify-end w-full">
1870                <a @click="$dispatch('toggle-mobile-menu6ac8c77d0ec48')"
1871                   class="flex items-center justify-center cursor-pointer">
1872                    <span class="bg-[#6328E035] rounded-full text-secondary p-2">
1873                        <svg xmlns="http://www.w3.org/2000/svg" id="Livello_1" viewBox="0 0 24 17.44" width="14" height="14" role="img">
1874    <path fill="currentColor" d="M1.54 10.26a1.541 1.541 0 0 1 0-3.08h20.92a1.541 1.541 0 0 1 .08 3.08h-21ZM1.54 3.08a1.541 1.541 0 0 1 0-3.08h20.92a1.541 1.541 0 0 1 .08 3.08h-21ZM1.54 17.44a1.541 1.541 0 0 1 0-3.08h20.92a1.541 1.541 0 0 1 .08 3.08h-21Z"/>
1875<title>menu</title></svg>
1876                    </span>
1877                </a>
1878            </div>
1879        </div>
1880    </template>
1881    <!-- mobile -->
1882    <template x-if="isActive">
1883        <div @load.window="setActiveMenu($root)"
1884         class="bg-container-lighter h-screen overflow-x-hidden overflow-y-auto fixed top-0 left-0 w-full"
1885         :class="{'' : open}"
1886         @toggle-mobile-menu6ac8c77d0ec48.window="open = !open"
1887         @keydown.window.escape="open=false"
1888         x-cloak
1889         x-show="open"
1890         x-transition:enter="transform transition ease-in-out duration-300"
1891         x-transition:enter-start="-translate-x-full"
1892         x-transition:enter-end="translate-x-0"
1893         x-transition:leave="transform transition ease-in-out duration-300"
1894         x-transition:leave-start="translate-x-0"
1895         x-transition:leave-end="-translate-x-full">
1896
1897        <div class="flex items-baseline justify-between menu-icon shadow-md">
1898            <span class="font-bold font-baloo-bhaina text-primary px-4 pt-4 pb-3 w-full text-center text-xl"  :class="{
1899                    'hidden' : panelLevel > 0
1900                }">Menu</span>
1901            <a @click="$dispatch('toggle-mobile-menu6ac8c77d0ec48')"
1902               class="absolute z-10 top-0 right-0 cursor-pointer mt-0.5 p-5 pr-4"
1903            >
1904                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12" role="img">
1905    <path d="M21.82 24c-.58 0-1.13-.23-1.54-.64l-8.27-8.27-8.29 8.27a2.179 2.179 0 0 1-3.08-3.08L8.92 12 .64 3.73a2.19 2.19 0 0 1 0-3.09 2.172 2.172 0 0 1 3.08 0L12 8.92 20.27.64a2.19 2.19 0 0 1 3.09 0c.85.85.85 2.23 0 3.09L15.08 12l8.27 8.27c.85.85.85 2.24 0 3.09-.41.41-.96.64-1.54.64Z" style="fill:currentColor"/>
1906<title>x</title></svg>
1907            </a>
1908        </div>
1909
1910        <nav class="hidden w-full duration-150 text-base ease-in-out transform border-t transition-display border-container"
1911             :class="{ 'hidden' : !open }">
1912
1913
1914            <div class="submenu-top mt-4">
1915                
1916<div class="level-0">
1917        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
1918          :class="{
1919                    '-translate-x-full' : panelLevel > '0',
1920                    'translate-x-0' : panelLevel <= '0'
1921                }">
1922        <a href="https://www.farma.it/farma-lovers" class="level-top new-badge flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span class='menu-icon mr-2'>
1923                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/point.svg" alt="Raccolta&#x20;Punti&#x20;Farma&#x20;Lovers" />
1924            </span>
1925                    <span>Raccolta Punti Farma Lovers</span>
1926        </a>            </span>
1927
1928    </div>
1929
1930<div class="level-0">
1931        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
1932          :class="{
1933                    '-translate-x-full' : panelLevel > '0',
1934                    'translate-x-0' : panelLevel <= '0'
1935                }">
1936        <a href="https://www.farma.it/coupon-e-promo" class="level-top  flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span class='menu-icon mr-2'>
1937                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/coupon-duotone.svg" alt="Fino&#x20;al&#x20;-10&#x25;&#x20;sui&#x20;prodotti&#x20;cosmetici" />
1938            </span>
1939                    <span>Fino al -10% sui prodotti cosmetici</span>
1940        </a>            </span>
1941
1942    </div>
1943
1944<div class="level-0">
1945        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
1946          :class="{
1947                    '-translate-x-full' : panelLevel > '0',
1948                    'translate-x-0' : panelLevel <= '0'
1949                }">
1950        <a href="/richiamami" class="level-top  flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span class='menu-icon mr-2'>
1951                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/phone-duotone.svg" alt="Richiamami" />
1952            </span>
1953                    <span>Richiamami</span>
1954        </a>            </span>
1955
1956    </div>
1957            </div>
1958
1959            <!-- LEVEL 0 -->
1960            <div class="level-0 mt-4">
1961                <div @click="togglePanelActiveId('root')" class="flex items-center transition-transform duration-150 ease-in-out transform"
1962                      :class="{
1963                    '-translate-x-full' : panelLevel > 0,
1964                    'translate-x-0' : panelLevel <= 0
1965                }">
1966                    <div class="w-full cursor-pointer level-0 px-3  ">
1967                        <div class="px-4 pt-3 pb-2 flex justify-between items-center text-secondary bg-tertiary-darker/10 rounded-xl">
1968                            <span class="font-bold text-lg font-baloo-bhaina">
1969                                Categorie                            </span>
1970                            <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="relative bottom-0.5" width="20" height="20" role="img">
1971  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1972<title>chevron-right</title></svg>
1973                        </div>
1974                    </div>
1975                </div>
1976                <div class="absolute top-0 right-0 z-10 h-screen overflow-hidden w-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter level0"
1977                     :class="{
1978                    'translate-x-full h-0' : !isPanelActive('root'),
1979                    'translate-x-0 h-screen overflow-y-auto' : isPanelActive('root')
1980                }"
1981                >
1982                    <template x-if="isLoading && $store.externalScriptsInit">
1983    <div class="absolute bg-white/60 z-10 h-full w-full flex items-center justify-center">
1984        <div class="flex items-center">
1985            <!-- loading icon -->
1986            <svg class="animate-spin h-5 w-5 text-gray-600" xmlns="http://www.w3.org/2000/svg" fill="none"
1987                 viewBox="0 0 24 24">
1988                <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
1989                <path class="opacity-75" fill="currentColor"
1990                      d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z">
1991                </path>
1992            </svg>
1993            <!-- end loading icon -->
1994        </div>
1995    </div>
1996</template>
1997                    <a class="block mb-4 relative shadow-md font-bold font-baloo-bhaina text-primary px-4 pt-4 pb-3 w-full text-center text-xl bg-white"
1998                       @click="removePanelActiveId('root')"
1999                       :class="{ 'sticky top-0 left-0 right-0 z-20': isPanelActive('root') && panelLevel <= 1 }"
2000                    >
2001                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 20.57" class="absolute top-4.5 left-4" width="16" height="16" role="img">
2002    <path d="M22.29 8.58H5.14l5.64-5.64c.65-.69.62-1.78-.07-2.43-.66-.62-1.68-.62-2.35 0L1.01 7.88C.37 8.52 0 9.39 0 10.29c0 .9.37 1.76 1.01 2.4l7.35 7.38c.68.66 1.77.64 2.43-.05.64-.67.64-1.73 0-2.39L5.15 12h17.14c.95-.02 1.7-.81 1.67-1.76-.02-.92-.76-1.65-1.67-1.67Z" style="fill:currentColor"/>
2003<title>arrow-back</title></svg>
2004                        <span class="ml-4">
2005                            Categorie                        </span>
2006                    </a>
2007                    <template x-for="(item, index) in menuData" :key="item.id">
2008                        <!-- LEVEL 1 -->
2009                        <div class="level-1">
2010                            <span class="flex items-center transition-transform duration-150 ease-in-out transform px-4 py-2 font-bold font-baloo-bhaina"
2011                                  :class="{
2012                                    '-translate-x-full h-0 overflow-hidden' : panelLevel > 1,
2013                                    'translate-x-0' : panelLevel <= 1
2014                                }"
2015                            >
2016                                <a x-bind:href="item.link" @click="(item.submenu && item.submenu.children) && togglePanelActiveId(item.id, $event)" class="flex items-center w-full cursor-pointer level-1">
2017                                    <template x-if="item.icon">
2018                                        <template x-if="item.icon_content">
2019                                            <span x-html="item.icon_content" class='menu-icon mr-4 inline-block'></span>
2020                                        </template>
2021                                        <template x-if="!item.icon_content">
2022                                            <span x-show="item.icon" class='menu-icon mr-4 inline-block'><img x-bind:src="item.icon" x-bind:alt="item.label" /></span>
2023                                        </template>
2024                                    </template>
2025                                    <span x-text="item.label"></span>
2026                                </a>
2027                                <template x-if="item.submenu && item.submenu.children">
2028                                    <span class="block"
2029                                          @click="togglePanelActiveId(item.id)"
2030                                    >
2031                                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" role="img">
2032  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
2033<title>chevron-right</title></svg>
2034                                     </span>
2035                                </template>
2036                            </span>
2037                            <template x-if="item.submenu && item.submenu.children">
2038                                <div class="level1 absolute flex flex-col top-0 right-0 z-10 overflow-hidden w-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter"
2039                                     :class="{
2040                                        'translate-x-full h-0' : !isPanelActive(item.id),
2041                                        'translate-x-0 h-screen' : isPanelActive(item.id),
2042                                        'overflow-y-auto': isPanelActive(item.id) && panelLevel <= 2
2043                                    }"
2044                                >
2045                                    <a class="block mb-4 relative shadow-md font-bold font-baloo-bhaina text-primary px-4 pt-4 pb-3 w-full text-center text-xl bg-white"
2046                                       @click="removePanelActiveId(item.id)"
2047                                       :class="{ 'sticky top-0 left-0 right-0 z-20': isPanelActive(item.id) && panelLevel <= 2 }"
2048                                    >
2049                                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 20.57" class="absolute top-4.5 left-4" width="16" height="16" role="img">
2050    <path d="M22.29 8.58H5.14l5.64-5.64c.65-.69.62-1.78-.07-2.43-.66-.62-1.68-.62-2.35 0L1.01 7.88C.37 8.52 0 9.39 0 10.29c0 .9.37 1.76 1.01 2.4l7.35 7.38c.68.66 1.77.64 2.43-.05.64-.67.64-1.73 0-2.39L5.15 12h17.14c.95-.02 1.7-.81 1.67-1.76-.02-.92-.76-1.65-1.67-1.67Z" style="fill:currentColor"/>
2051<title>arrow-back</title></svg>
2052                                        <span class="ml-4" x-text="item.label"></span>
2053                                    </a>
2054                                    <a x-bind:href="item.link"
2055                                       x-bind:title="item.label"
2056                                       class="order-1 flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter underline text-secondary gap-1"
2057                                    >
2058                                        <span>Vedi tutti</span>
2059                                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="16" height="16" role="img">
2060  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
2061<title>chevron-right</title></svg>
2062                                    </a>
2063                                    <template x-for="child in item.submenu.children">
2064                                        <template x-for="(item, index) in child">
2065                                            <template x-if="item.type && item.type == 'category-item'">
2066                                                <!-- LEVEL 2 -->
2067                                                <div class="level-2" :class="{'order-0': item.type == 'custom_list', 'order-1': item.type != 'custom_list'}">
2068                                                    <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2069                                                          :class="{
2070                                                            'font-bold': item.type == 'custom_list',
2071                                                            '-translate-x-full' : panelLevel > 2,
2072                                                            'translate-x-0' : panelLevel <= 2
2073                                                        }"
2074                                                    >
2075                                                        <a x-bind:href="item.link" @click="(item.children) && togglePanelActiveId(item.id, $event)" class="flex items-center w-full px-7 py-1 text-[15px] cursor-pointer level-2">
2076                                                            <span x-text="item.label"></span>
2077                                                        </a>
2078                                                        <template x-if="item.children">
2079                                                            <span class="block"
2080                                                                  @click="togglePanelActiveId(item.id)"
2081                                                            >
2082                                                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" role="img">
2083  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
2084<title>chevron-right</title></svg>
2085                                                             </span>
2086                                                        </template>
2087                                                    </span>
2088
2089                                                    <template x-if="item.children">
2090                                                        <div class="level2 absolute flex flex-col top-0 right-0 z-10 overflow-hidden w-full h-full transition-transform duration-200 ease-in-out translate-x-full transform bg-container-lighter"
2091                                                             :class="{
2092                                                                'translate-x-full h-0' : !isPanelActive(item.id),
2093                                                                'translate-x-0 h-screen overflow-y-auto' : isPanelActive(item.id)
2094                                                            }"
2095                                                        >
2096                                                            <a class="block mb-4 relative shadow-md font-bold font-baloo-bhaina text-primary px-4 pt-4 pb-3 w-full text-center text-xl bg-white"
2097                                                               @click="removePanelActiveId(item.id)"
2098                                                               :class="{ 'sticky top-0 left-0 right-0 z-20': isPanelActive(item.id) }"
2099                                                            >
2100                                                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 20.57" width="16" height="16" role="img">
2101    <path d="M22.29 8.58H5.14l5.64-5.64c.65-.69.62-1.78-.07-2.43-.66-.62-1.68-.62-2.35 0L1.01 7.88C.37 8.52 0 9.39 0 10.29c0 .9.37 1.76 1.01 2.4l7.35 7.38c.68.66 1.77.64 2.43-.05.64-.67.64-1.73 0-2.39L5.15 12h17.14c.95-.02 1.7-.81 1.67-1.76-.02-.92-.76-1.65-1.67-1.67Z" style="fill:currentColor"/>
2102<title>arrow-back</title></svg>
2103                                                                <sp
2103an class="ml-4" x-text="item.label"></span>
2104                                                            </a>
2105                                                            <template x-for="(item, index) in item.children" :key="index">
2106                                                                <template x-if="item.type && item.type != 'block'">
2107
2108                                                                        <div class="level-3">
2109                                                                            <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2110                                                                                  :class="{
2111                                                                                    '-translate-x-full' : panelLevel > 3,
2112                                                                                    'translate-x-0' : panelLevel <= 3
2113                                                                                }"
2114                                                                            >
2115                                                                                <a x-bind:href="item.link" class="flex items-center w-full px-7 py-4 cursor-pointer bg-container-lighter border-container level-3">
2116                                                                                    <span x-text="item.label"></span>
2117                                                                                </a>
2118                                                                            </span>
2119                                                                        </div>
2120
2121                                                                    </template>
2122                                                            </template>
2123                                                        </div>
2124                                                    </template>
2125                                                </div>
2126
2127                                            </template>
2128                                        </template>
2129                                    </template>
2130                                </div>
2131                            </template>
2132                        </div>
2133                    </template>
2134                </div>
2135            </div>
2136
2137            <div class="transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : panelLevel > 0, 'translate-x-0' : panelLevel <= 0 }">
2138                <div class="font-bold px-7 mt-5 mb-2">
2139                    Collegamenti utili                </div>
2140                
2141<div class="level-0">
2142        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2143          :class="{
2144                    '-translate-x-full' : panelLevel > '0',
2145                    'translate-x-0' : panelLevel <= '0'
2146                }">
2147        <a href="https://www.farma.it/brands" class="level-top  flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span>Marchi</span>
2148        </a>            </span>
2149
2150    </div>
2151
2152<div class="level-0">
2153        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2154          :class="{
2155                    '-translate-x-full' : panelLevel > '0',
2156                    'translate-x-0' : panelLevel <= '0'
2157                }">
2158        <a href="/blog.html" class="level-top  flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span>I nostri consigli</span>
2159        </a>            </span>
2160
2161    </div>
2162
2163<div class="level-0">
2164        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2165          :class="{
2166                    '-translate-x-full' : panelLevel > '0',
2167                    'translate-x-0' : panelLevel <= '0'
2168                }">
2169        <a href="https://www.farma.it/coupon-e-promo" class="level-top  flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">
2169                    <span>Coupon</span>
2170        </a>            </span>
2171
2172    </div>
2173
2174<div class="level-0">
2175        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2176          :class="{
2177                    '-translate-x-full' : panelLevel > '0',
2178                    'translate-x-0' : panelLevel <= '0'
2179                }">
2180        <a href="/prodotti-in-offerta" class="level-top text-red flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span>In offerta</span>
2181        </a>            </span>
2182
2183    </div>
2184
2185<div class="level-0">
2186        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2187          :class="{
2188                    '-translate-x-full' : panelLevel > '0',
2189                    'translate-x-0' : panelLevel <= '0'
2190                }">
2191        <a href="/faq" class="level-top  flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span>Serve Aiuto?</span>
2192        </a>            </span>
2193
2194    </div>
2195
2196<div class="level-0">
2197        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2198          :class="{
2199                    '-translate-x-full' : panelLevel > '0',
2200                    'translate-x-0' : panelLevel <= '0'
2201                }">
2202        <a href="/sales/guest/form" class="level-top hidden lg:inline flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span>Informazioni sul tuo ordine</span>
2203        </a>            </span>
2204
2205    </div>
2206
2207<div class="level-0">
2208        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2209          :class="{
2210                    '-translate-x-full' : panelLevel > '0',
2211                    'translate-x-0' : panelLevel <= '0'
2212                }">
2213        <a href="/farma-it-podcast" class="level-top  flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span class='menu-icon mr-2'>
2214                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/tv-warning.svg" alt="Podcast" />
2215            </span>
2216                    <span>Podcast</span>
2217        </a>            </span>
2218
2219    </div>
2220
2221<div class="level-0">
2222        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2223          :class="{
2224                    '-translate-x-full' : panelLevel > '0',
2225                    'translate-x-0' : panelLevel <= '0'
2226                }">
2227        <a href="/app" class="level-top text-secondary font-medium flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span>Scarica l&#039;App!</span>
2228        </a>            </span>
2229
2230    </div>
2231
2232                <!-- BLOCK customer-menu-mobile -->
2233<div class="w-full px-3 my-3" x-data="initCustomerMenuMobile()" @private-content-loaded.window="getData(event.detail.data)">
2234    <template x-if="isLoggedIn()">
2235        <a
2236                href="https&#x3A;&#x2F;&#x2F;www.farma.it&#x2F;customer&#x2F;account&#x2F;"
2237                id="customer-menu-mobile"
2238                class="px-4 pt-3 pb-2 flex justify-start gap-3 items-center bg-category-lighter rounded-xl"
2239                aria-label="Il&#x20;mio&#x20;Account"
2240        >
2241            <span class="relative block">
2242                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" aria-hidden="true">
2243    <path d="M4.07 21c-.07-.05-.13-.1-.19-.17C-1 16.35-1.32 8.76 3.16 3.87c4.48-4.88 12.07-5.2 16.95-.72 4.88 4.48 5.21 12.07.73 16.96-.23.25-.47.49-.73.73-.05.06-.12.12-.19.17-4.53 4-11.32 4-15.85 0ZM12 22.15c2.25 0 4.44-.75 6.22-2.13a7.354 7.354 0 0 0-6.14-3.4h-.16c-2.49.02-4.8 1.3-6.14 3.4 1.78 1.39 3.97 2.14 6.22 2.13Zm4.83-6.02c1.09.67 2.03 1.56 2.76 2.61 3.73-4.19 3.35-10.61-.84-14.33C14.56.68 8.14 1.06 4.42 5.25 1 9.1 1 14.9 4.42 18.74a9.2 9.2 0 0 1 4.16-3.31 5.546 5.546 0 0 1-.93-7.78 5.546 5.546 0 0 1 7.78-.93 5.546 5.546 0 0 1 0 8.71c.49.19.96.43 1.4.7Zm-8.52-5.06c0 2.01 1.61 3.65 3.62 3.69h.15A3.694 3.694 0 0 0 15.7 11a3.694 3.694 0 0 0-3.76-3.62 3.692 3.692 0 0 0-3.62 3.69Z" style="fill:currentColor"/>
2244</svg>
2245            </span>
2246            <span class="font-bold text-lg font-baloo-bhaina truncate">
2247                <span>Ciao, </span>
2248                <span x-text="customer.firstname"></span>
2249            </span>
2250            <span class="relative bottom-0.5 whitespace-nowrap block ml-auto text-[15px] font-medium">Il mio Account</span>
2251        </a>
2252    </template>
2253    <template x-if="!isLoggedIn()">
2254        <span>
2255            <a
2256                    href="https&#x3A;&#x2F;&#x2F;www.farma.it&#x2F;customer&#x2F;account&#x2F;"
2257                    id="customer-menu-mobile"
2258                    class="px-4 py-3 flex justify-between gap-3 items-center bg-category-lighter rounded-xl"
2259                    aria-label="Il&#x20;mio&#x20;Account"
2260            >
2261                <span class="relative block">
2262                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" aria-hidden="true">
2263    <path d="M4.07 21c-.07-.05-.13-.1-.19-.17C-1 16.35-1.32 8.76 3.16 3.87c4.48-4.88 12.07-5.2 16.95-.72 4.88 4.48 5.21 12.07.73 16.96-.23.25-.47.49-.73.73-.05.06-.12.12-.19.17-4.53 4-11.32 4-15.85 0ZM12 22.15c2.25 0 4.44-.75 6.22-2.13a7.354 7.354 0 0 0-6.14-3.4h-.16c-2.49.02-4.8 1.3-6.14 3.4 1.78 1.39 3.97 2.14 6.22 2.13Zm4.83-6.02c1.09.67 2.03 1.56 2.76 2.61 3.73-4.19 3.35-10.61-.84-14.33C14.56.68 8.14 1.06 4.42 5.25 1 9.1 1 14.9 4.42 18.74a9.2 9.2 0 0 1 4.16-3.31 5.546 5.546 0 0 1-.93-7.78 5.546 5.546 0 0 1 7.78-.93 5.546 5.546 0 0 1 0 8.71c.49.19.96.43 1.4.7Zm-8.52-5.06c0 2.01 1.61 3.65 3.62 3.69h.15A3.694 3.694 0 0 0 15.7 11a3.694 3.694 0 0 0-3.76-3.62 3.692 3.692 0 0 0-3.62 3.69Z" style="fill:currentColor"/>
2264</svg>
2265                </span>
2266                <span class="label font-medium text-[15px]">
2267                    <span>Accedi&#x20;&#x2F;&#x20;Registrati</span>
2268                </span>
2269            </a>
2270        </span>
2271    </template>
2272</div>
2273<!-- /BLOCK customer-menu-mobile -->
2274                <div class="font-bold px-7 mt-5 mb-2">
2275                    Servizi clienti                </div>
2276                <div class="submenu-bottom mb-4">
2277                    
2278<div class="level-0">
2279        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2280          :class="{
2281                    '-translate-x-full' : panelLevel > '0',
2282                    'translate-x-0' : panelLevel <= '0'
2283                }">
2284        <a href="faq" class="level-top  flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span class='menu-icon mr-2'>
2285                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/information-circle.svg" alt="Serve&#x20;aiuto&#x3F;" />
2286            </span>
2287                    <span>Serve aiuto?</span>
2288        </a>            </span>
2289
2290    </div>
2291
2292<div class="level-0">
2293        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2294          :class="{
2295                    '-translate-x-full' : panelLevel > '0',
2296                    'translate-x-0' : panelLevel <= '0'
2297                }">
2298        <a href="https://www.farma.it/contattaci" class="level-top  flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span class='menu-icon mr-2'>
2299                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/chat.svg" alt="Contattaci" />
2300            </span>
2301                    <span>Contattaci</span>
2302        </a>            </span>
2303
2304    </div>
2305
2306<div class="level-0">
2307        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2308          :class="{
2309                    '-translate-x-full' : panelLevel > '0',
2310                    'translate-x-0' : panelLevel <= '0'
2311                }">
2312        <a href="sales/guest/form" class="level-top  flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span class='menu-icon mr-2'>
2313                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/tracking.svg" alt="Traccia&#x20;il&#x20;tuo&#x20;pacco" />
2314            </span>
2315                    <span>Traccia il tuo pacco</span>
2316        </a>            </span>
2317
2318    </div>
2319
2320<div class="level-0">
2321        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2322          :class="{
2323                    '-translate-x-full' : panelLevel > '0',
2324                    'translate-x-0' : panelLevel <= '0'
2325                }">
2326        <a href="https://www.farma.it/pagamenti-e-condizioni" class="level-top  flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span class='menu-icon mr-2'>
2327                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/credit-card.svg" alt="Pagamenti" />
2328            </span>
2329                    <span>Pagamenti</span>
2330        </a>            </span>
2331
2332    </div>
2333
2334<div class="level-0">
2335        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2336          :class="{
2337                    '-translate-x-full' : panelLevel > '0',
2338                    'translate-x-0' : panelLevel <= '0'
2339                }">
2340        <a href="https://www.farma.it/spedizioni" class="level-top  flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter border-container level-0">                    <span class='menu-icon mr-2'>
2341                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/truck.svg" alt="Spedizioni" />
2342            </span>
2343                    <span>Spedizioni</span>
2344        </a>            </span>
2345
2346    </div>
2347                </div>
2348            </div>
2349
2350            
2351        </nav>
2352    </div>
2353    </template>
2354</div>
2355
2356<script>
2357    'use strict';
2358
2359    const initMenuMobile_6ac8c77d0ec48 = () => {
2360        return {
2361            open: false,
2362            isActive: false,
2363            isLoaded: false,
2364            mobilePanelActiveId: [],
2365            panelLevel: 0,
2366            menuData: null,
2367            isLoading: false,
2368            currentUrl: window.location.href.split('?')[0],
2369            isPanelActive(id){
2370                return this.mobilePanelActiveId.includes(id);
2371            },
2372            setPanelActiveId(id, replace = false){
2373                if(replace){
2374                    this.clearPanelActiveId();
2375                }
2376                if(!this.isPanelActive(id))
2377                    this.mobilePanelActiveId.push(id);
2378                id && (this.panelLevel += 1);
2379            },
2380            removePanelActiveId(id){
2381                let i = this.mobilePanelActiveId.indexOf(id);
2382                if(i >= 0)
2383                    this.mobilePanelActiveId.splice(i, 1);
2384                this.panelLevel -= 1;
2385            },
2386            togglePanelActiveId(id, event){
2387                if(event)
2388                    event.preventDefault();
2389                if(this.isPanelActive(id))
2390                    this.removePanelActiveId(id);
2391                else
2392                    this.setPanelActiveId(id);
2393            },
2394            clearPanelActiveId(){
2395                this.mobilePanelActiveId =[];
2396            },
2397            hasSubmenu(item){
2398                return item.submenu;
2399            },
2400            setActiveMenu(menuNode) {
2401                Array.from(menuNode.querySelectorAll('a')).filter(link => {
2402                    return link.href === window.location.href.split('?')[0];
2403                }).map(item => {
2404                    this.addClassToParent(item);
2405                });
2406            },
2407            addClassToParent(item){
2408                if(item) {
2409                    item.classList.add('underline')
2410                    parent = item.closest(`div.class-${this.panelLevel - 1}`)
2411                    parent && (parent !== item) && this.addClassToParent(parent.querySelector('span > a'));
2412                }
2413            },
2414            dispatchMessage(type, message, timeout) {
2415                typeof window.dispatchMessages && window.dispatchMessages(
2416                    [{
2417                        type: type,
2418                        text: message,
2419                    }],
2420                    timeout
2421                );
2422            },
2423            fetchData(){
2424                this.$dispatch('screen-lock',this.open);
2425                this.isLoaded = true;
2426                if (!this.menuData && this.open) {
2427                    this.isLoading = true;
2428                    fetch(
2429                        'https://www.farma.it/megamenu/get/json/id/1/limit/0/level/2/',
2430                        {
2431                            headers: {contentType: 'application/json'},
2432                        }
2433                    ).then(response => {
2434                        if (response.ok) {
2435                            return response.json();
2436                        } else {
2437                            this.dispatchMessage('error', response);
2438                            console.warn("GET request failed", response);
2439                        }
2440                    })
2441                    .then(data => {
2442                        this.menuData = data;
2443                        this.isLoading = false;
2444                        this.$nextTick(() => {
2445                            this.setActiveMenu(this.$root);
2446                        });
2447                    });
2448                }
2449            }
2450        }
2451    }
2452</script>
2452
2453
2454
2455<nav class="hidden hierarchy">
2456    <li><a href='https://www.farma.it/rimedi-e-salute.html'>Rimedi e Salute</a><ul><li><a href='https://www.farma.it/rimedi-e-salute/immunologici.html'>Immunologici</a></li><li><a href='https://www.farma.it/rimedi-e-salute/antiparassitari-insetticidi-e-repellenti.html'>Antiparassitari, Insetticidi e Repellenti</a></li><li><a href='https://www.farma.it/rimedi-e-salute/mal-di-testa-0.html'>Dolore, Febbre e Infiammazioni</a></li><li><a href='https://www.farma.it/rimedi-e-salute/antimicrobici.html'>Antimicrobici</a></li><li><a href='https://www.farma.it/rimedi-e-salute/preparati-ormonali.html'>Preparati Ormonali</a></li><li><a href='https://www.farma.it/rimedi-e-salute/antiacne.html'>Antiacne</a></li><li><a href='https://www.farma.it/rimedi-e-salute/decongestionanti-nasali.html'>Influenza e Raffreddore</a></li><li><a href='https://www.farma.it/rimedi-e-salute/decongestionanti-ed-antinfiammatori.html'>Occhi</a></li><li><a href='https://www.farma.it/rimedi-e-salute/emorroidi-e-ragadi.html'>Stomaco e Intestino</a></li><li><a href='https://www.farma.it/rimedi-e-salute/igiene-orale.html'>Igiene Orale</a></li><li><a href='https://www.farma.it/rimedi-e-salute/sali-minerali.html'>Sali minerali</a></li><li><a href='https://www.farma.it/rimedi-e-salute/cicatrizzanti.html'>Cicatrizzanti</a></li><li><a href='https://www.farma.it/rimedi-e-salute/sistema-cardiovascolare.html'>Sistema Cardiovascolare</a></li><li><a href='https://www.farma.it/rimedi-e-salute/stitichezza-e-lassativi.html'>Stitichezza e Lassativi</a></li><li><a href='https://www.farma.it/rimedi-e-salute/dermatologici.html'>Dermatologici</a></li><li><a href='https://www.farma.it/rimedi-e-salute/antisettici-cavo-orale.html'>Antisettici cavo orale</a></li><li><a href='https://www.farma.it/rimedi-e-salute/anti-diarrea.html'>Anti Diarrea</a></li><li><a href='https://www.farma.it/rimedi-e-salute/disinfettanti.html'>Disinfettanti</a></li><li><a href='https://www.farma.it/rimedi-e-salute/altri-disturbi.html'>Altri Disturbi</a></li><li><a href='https://www.farma.it/rimedi-e-salute/antimicotici.html'>Antimicotici</a></li><li><a href='https://www.farma.it/rimedi-e-salute/allergie.html'>Allergie</a></li><li><a href='https://www.farma.it/rimedi-e-salute/antiacidi-e-digestivi.html'>Antiacidi e Digestivi</a></li><li><a href='https://www.farma.it/rimedi-e-salute/disturbi-addominali.html'>Disturbi Addominali</a></li><li><a href='https://www.farma.it/rimedi-e-salute/controllo-del-peso.html'>Controllo del Peso</a></li><li><a href='https://www.farma.it/rimedi-e-salute/genito-urinario.html'>Genito-Urinario</a></li></ul><ul></ul></li><li><a href='https://www.farma.it/veterinaria-e-animali.html'>Veterinaria e animali</a><ul><li><a href='https://www.farma.it/veterinaria-e-animali/antiparassitari.html'>Antiparassitari</a></li><li><a href='https://www.farma.it/veterinaria-e-animali/toelettatura-e-igiene.html'>Toelettatura e Igiene</a></li><li><a href='https://www.farma.it/veterinaria-e-animali/alimentazione.html'>Alimentazione cani, gatti ed altri animali domestici</a></li><li><a href='https://www.farma.it/veterinaria-e-animali/medicazioni.html'>Medicazioni Veterinarie</a></li><li><a href='https://www.farma.it/veterinaria-e-animali/accessori-0.html'>Accessori</a></li><li><a href='https://www.farma.it/veterinaria-e-animali/integratori-e-parafarmaci.html'>Integratori e Parafarmaci Veterinari</a></li><li><a href='https://www.farma.it/veterinaria-e-animali/alimentazione-0.html'>Alimentazione</a></li><li><a href='https://www.farma.it/veterinaria-e-animali/medicazioni-0.html'>Medicazioni</a></li><li><a href='https://www.farma.it/veterinaria-e-animali/integratori-e-parafarmaci-0.html'>Integratori e Parafarmaci</a></li><li><a href='https://www.farma.it/veterinaria-e-animali/abbigliamento.html'>Abbigliamento</a></li></ul><ul></ul></li><li><a href='https://www.farma.it/omeopatia-0.html'>Omeopatia</a><ul><li><a href='https://www.farma.it/omeopatia-0/gocce.html'>Gocce</a></li><li><a href='https://www.farma.it/omeopatia-0/granuli.html'>Granuli</a></li><li><a href='https://www.farma.it/omeopatia-0/globuli.html'>Globuli</a></li><li><a href='https://www.farma.it/omeopatia-0/creme-e-unguenti.html'>Creme e Unguenti</a></li><li><a href='https://www.farma.it/omeopatia-0/sciroppi.html'>Sciroppi</a></li><li><a href='https://www.farma.it/omeopatia-0/fiale.html'>Fiale</a></li><li><a href='https://www.farma.it/omeopatia-0/colliri-0.html'>Colliri</a></li><li><a href='https://www.farma.it/omeopatia-0/spray.html'>Spray</a></li><li><a href='https://www.farma.it/omeopatia-0/altri-preparati.html'>Preparati omeopatici</a></li><li><a href='https://www.farma.it/omeopatia-0/confetti-e-capsule.html'>Confetti e Capsule</a></li><li><a href='https://www.farma.it/omeopatia-0/polveri.html'>Polveri</a></li><li><a href='https://www.farma.it/omeopatia-0/supposte.html'>Supposte</a></li><li><a href='https://www.farma.it/omeopatia-0/olii.html'>Olii</a></li><li><a href='https://www.farma.it/omeopatia-0/ovuli.html'>Ovuli</a></li><li><a href='https://www.farma.it/omeopatia-0/bioterapici.html'>Bioterapici</a></li><li><a href='https://www.farma.it/omeopatia-0/altro.html'>Altro</a></li><li><a href='https://www.farma.it/omeopatia-0/altri-preparati-1.html'>Altri preparati</a></li></ul><ul></ul></li><li><a href='https://www.farma.it/erboristeria-e-fitoterapia.html'>Erboristeria e Fitoterapia</a><ul><li><a href='https://www.farma.it/erboristeria-e-fitoterapia/floriterapia.html'>Floriterapia</a></li><li><a href='https://www.farma.it/erboristeria-e-fitoterapia/cosmetici-naturali.html'>Cosmetici Naturali</a></li></ul><ul></ul></li><li><a href='https://www.farma.it/alimentazione-e-integratori.html'>Alimentazione e Integratori</a><ul><li><a href='https://www.farma.it/alimentazione-e-integratori/integratori-alimentari.html'>Integratori Alimentari</a></li><li><a href='https://www.farma.it/alimentazione-e-integratori/alimentazione-speciale.html'>Alimentazione Speciale</a></li></ul><ul></ul></li><li><a href='https://www.farma.it/igiene-e-benessere.html'>Igiene e Benessere</a><ul><li><a href='https://www.farma.it/igiene-e-benessere/igiene-intima.html'>Igiene intima</a></li><li><a href='https://www.farma.it/igiene-e-benessere/bocca-e-denti.html'>Bocca e Denti</a></li><li><a href='https://www.farma.it/igiene-e-benessere/capelli.html'>Capelli</a></li><li><a href='https://www.farma.it/igiene-e-benessere/naso.html'>Naso</a></li><li><a href='https://www.farma.it/igiene-e-benessere/corpo-0.html'>Corpo</a></li><li><a href='https://www.farma.it/igiene-e-benessere/anti-zanzare-e-insetti.html'>Anti zanzare e insetti</a></li><li><a href='https://www.farma.it/catalog/category/view/s/strumenti-sanitari/id/162/'>Strumenti Sanitari</a></li><li><a href='https://www.farma.it/igiene-e-benessere/prodotti-per-la-casa.html'>Prodotti per la casa</a></li><li><a href='https://www.farma.it/igiene-e-benessere/orecchie.html'>Orecchie</a></li><li><a href='https://www.farma.it/igiene-e-benessere/igiene-orale-0.html'>Igiene Orale</a></li><li><a href='https://www.farma.it/igiene-e-benessere/amplificatori-acustici.html'>Amplificatori acustici</a></li></ul><ul></ul></li><li><a href='https://www.farma.it/bellezza-e-cosmetica.html'>Bellezza e Cosmetica</a><ul><li><a href='https://www.farma.it/bellezza-e-cosmetica/corpo.html'>Corpo</a></li><li><a href='https://www.farma.it/bellezza-e-cosmetica/viso.html'>Viso</a></li><li><a href='https://www.farma.it/bellezza-e-cosmetica/piedi.html'>Piedi</a></li><li><a href='https://www.farma.it/bellezza-e-cosmetica/mani.html'>Mani</a></li><li><a href='https://www.farma.it/bellezza-e-cosmetica/capelli-0.html'>Capelli</a></li><li><a href='https://www.farma.it/bellezza-e-cosmetica/solari.html'>Solari</a></li><li><a href='https://www.farma.it/bellezza-e-cosmetica/trucco-e-make-up.html'>Trucco e Make-Up</a></li></ul><ul></ul></li><li><a href='https://www.farma.it/salute-e-cura-della-persona.html'>Salute e Cura della Persona</a><ul><li><a href='https://www.farma.it/salute-e-cura-della-persona/prodotti-per-gli-occhi.html'>Prodotti per gli occhi</a></li><li><a href='https://www.farma.it/salute-e-cura-della-persona/ortopedia-e-comfort.html'>Ortopedia e Comfort</a></li><li><a href='https://www.farma.it/salute-e-cura-della-persona/medicazioni-e-disinfettanti.html'>Medicazioni e Disinfettanti</a></li><li><a href='https://www.farma.it/salute-e-cura-della-persona/diagnostici.html'>Diagnostici</a></li><li><a href='https://www.farma.it/salute-e-cura-della-persona/profilattici.html'>Profilattici</a></li><li><a href='https://www.farma.it/salute-e-cura-della-persona/decongestionanti-nasali-0.html'>Decongestionanti Nasali</a></li></ul><ul></ul></li><li><a href='https://www.farma.it/mamme-e-bambini.html'>Mamme e Bambini</a><ul><li><a href='https://www.farma.it/mamme-e-bambini/igiene-del-bambino.html'>Igiene del Bambino</a></li><li><a href='https://www.farma.it/mamme-e-bambini/alimentazione-ed-integrazione.html'>Alimentazione ed Integrazione</a></li><li><a href='https://www.farma.it/mamme-e-bambini/accessori.html'>Accessori</a></li><li><a href='https://www.farma.it/mamme-e-bambini/alimentazione-del-bambino.html'>Alimentazione del bambino</a></li><li><a href='https://www.farma.it/mamme-e-bambini/giochi.html'>Giochi</a></li></ul><ul></ul></li><li><a href='https://www.farma.it/apparecchi-elettromedicali.html'>Apparecchi Elettromedicali</a><ul><li><a href='https://www.farma.it/apparecchi-elettromedicali/aerosol-0.html'>Aerosol e accessori</a></li><li><a href='https://www.farma.it/apparecchi-elettromedicali/termometri.html'>Termometri</a></li><li><a href='https://www.farma.it/apparecchi-elettromedicali/sfigmomanometri.html'>Sfigmomanometri</a></li><li><a href='https://www.farma.it/apparecchi-elettromedicali/terapia-termica.html'>Terapia termica</a></li><li><a href='https://www.farma.it/apparecchi-elettromedicali/fisioterapia-e-massaggi.html'>Fisioterapia e Massaggi</a></li><li><a href='https://www.farma.it/apparecchi-elettromedicali/altri.html'>Altri</a></li><li><a href='https://www.farma.it/apparecchi-elettromedicali/bilance.html'>Bilance</a></li><li><a href='https://www.farma.it/apparecchi-elettromedicali/dispositivi-medicali.html'>Dispositivi Medicali</a></li><li><a href='https://www.farma.it/apparecchi-elettromedicali/aerosol-1.html'>Aerosol</a></li></ul></li><li><a href='https://www.farma.it/dermocosmetica'>Dermocosmetica</a></li><li><a href='https://www.farma.it/gastro-intestinale'>Benessere intestinale</a></li></nav>
2457
2458<div x-data="initMenuDesktop_6ac8c77d1c956()"
2459     x-defer="intersect"
2460     x-intersect.once="isActive = true; $watch('open', value => { fetchData() })"
2461     class="order-5 navigation first hidden lg:flex w-full main lg:mt-3"
2462     :class="{ 'z-20': open }"
2463>
2464    <!-- desktop -->
2465    <div x-ref="nav-desktop"
2466         @load.window="setActiveMenu($root)"
2467         class="hidden lg:block lg:relative lg:min-h-0 lg:w-auto">
2468        <nav class="w-full duration-150 ease-in-out transform flex justify-start w-auto min-h-0 transition-display my-2">
2469            <div class="mr-6 level-top nav-side">
2470                <span class="level-top py-3 md:py-0 w-full font-bold level-0 cursor-pointer flex items-center gap-2" @click="$dispatch('toggle-main-menu')">
2471                    <span class="bg-[#6328E035] rounded-full text-secondary p-1.5">
2472                        <svg xmlns="http://www.w3.org/2000/svg" id="Livello_1" viewBox="0 0 24 17.44" width="12" height="12" role="img">
2473    <path fill="currentColor" d="M1.54 10.26a1.541 1.541 0 0 1 0-3.08h20.92a1.541 1.541 0 0 1 .08 3.08h-21ZM1.54 3.08a1.541 1.541 0 0 1 0-3.08h20.92a1.541 1.541 0 0 1 .08 3.08h-21ZM1.54 17.44a1.541 1.541 0 0 1 0-3.08h20.92a1.541 1.541 0 0 1 .08 3.08h-21Z"/>
2474<title>menu</title></svg>
2475                    </span>
2476                    <span class="my-auto">Categorie</span>
2477                </span>
2478            </div>
2479            <div class="nav-menu flex">
2480                
2481<div class="relative mx-2 level-0 level0 nav-1 first page-item level-top">
2482        <a href="https://www.farma.it/brands" class="py-3 md:py-0 flex w-full text-base md:text-sm md:inline hover:underline level-0 ">                <span class="leading-none">Marchi</span>
2483    </a>
2484    </div>
2485
2486<div class="relative mx-2 level-0 level0 nav-2 custom-item level-top">
2487        <a href="/blog.html" class="py-3 md:py-0 flex w-full text-base md:text-sm md:inline hover:underline level-0 ">                <span class="leading-none">I nostri consigli</span>
2488    </a>
2489    </div>
2490
2491<div class="relative mx-2 level-0 level0 nav-3 page-item level-top">
2492        <a href="https://www.farma.it/coupon-e-promo" class="py-3 md:py-0 flex w-full text-base md:text-sm md:inline hover:underline level-0 ">                <span class="leading-none">Coupon</span>
2493    </a>
2494    </div>
2495
2496<div class="relative mx-2 level-0 level0 nav-4 custom-item level-top">
2497        <a href="/prodotti-in-offerta" class="py-3 md:py-0 flex w-full text-base md:text-sm md:inline hover:underline level-0 text-red">                <span class="leading-none">In offerta</span>
2498    </a>
2499    </div>
2500
2501<div class="relative mx-2 level-0 level0 nav-5 custom-item level-top">
2502        <a href="/faq" class="py-3 md:py-0 flex w-full text-base md:text-sm md:inline hover:underline level-0 ">                <span class="leading-none">Serve Aiuto?</span>
2503    </a>
2504    </div>
2505
2506<div class="relative mx-2 level-0 level0 nav-6 custom-item level-top">
2507        <a href="/sales/guest/form" class="py-3 md:py-0 flex w-full text-base md:text-sm md:inline hover:underline level-0 hidden lg:inline">                <span class="leading-none">Informazioni sul tuo ordine</span>
2508    </a>
2509    </div>
2510
2511<div class="relative mx-2 level-0 level0 nav-7 custom-item level-top">
2512        <a href="/farma-it-podcast" class="py-3 md:py-0 flex w-full text-base md:text-sm md:inline hover:underline level-0 ">                    
2513<span class="menu-icon flex gap-2 items-center relative">
2514    <?xml version="1.0" encoding="UTF-8"?>
2515<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" stroke-width="1.5" viewBox="0 0 24 24" fill="none" color="#000000" class="fill-primary"><path d="M12 11V14" stroke="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 18.01L12.01 17.9989" stroke="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M2 20V9C2 7.89543 2.89543 7 4 7H20C21.1046 7 22 7.89543 22 9V20C22 21.1046 21.1046 22 20 22H4C2.89543 22 2 21.1046 2 20Z" stroke="#000000" stroke-width="1.5"/><path d="M8.5 2.5L12 6L15.5 2.5" stroke="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
2516                <span class="leading-none">Podcast</span>
2517    </a>
2518    </div>
2519
2520<div class="relative mx-2 level-0 level0 nav-8 last custom-item level-top">
2521        <a href="/app" class="py-3 md:py-0 flex w-full text-base md:text-sm md:inline hover:underline level-0 text-secondary font-medium">                <span class="leading-none">Scarica l&#039;App!</span>
2522    </a>
2523    </div>
2524            </div>
2525        </nav>
2526    </div>
2527    <template x-if="isActive">
2528        <section x-cloak id="main-menu_6ac8c77d1c956"
2529             @toggle-main-menu.window="open = !open"
2530             @keydown.window.escape="open=false"
2531    >
2532        <div role="dialog"
2533             x-ref="dialog"
2534             aria-label="Menu"
2535             aria-labelledby="menu-drawer-title"
2536             aria-modal="true"
2537             class="fixed inset-y-0 left-0 z-30 flex">
2538            <div class="relative z-20 w-screen"
2539                 x-ref="dialogContainer"
2540                 x-show="open"
2541                 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700"
2542                 x-transition:enter-start="-translate-x-full"
2543                 x-transition:enter-end="translate-x-0"
2544                 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700"
2545                 x-transition:leave-start="translate-x-0"
2546                 x-transition:leave-end="-translate-x-full"
2547            >
2548                <div class="flex flex-col h-full pb-6 bg-container-gray shadow-inner">
2549                    <template x-if="isLoading && $store.externalScriptsInit">
2550    <div class="absolute bg-white/60 z-10 h-full w-full flex items-center justify-center">
2551        <div class="flex items-center">
2552            <!-- loading icon -->
2553            <svg class="animate-spin h-5 w-5 text-gray-600" xmlns="http://www.w3.org/2000/svg" fill="none"
2554                 viewBox="0 0 24 24">
2555                <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
2556                <path class="opacity-75" fill="currentColor"
2557                      d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z">
2558                </path>
2559            </svg>
2560            <!-- end loading icon -->
2561        </div>
2562    </div>
2563</template>
2564                    <div x-ref="dialogContent" class="h-full overflow-y-auto scrollbar scrollbar-thin scrollbar-track-transparent scrollbar-thumb-gray-3 w-full">
2565                        <template x-cloak x-for="(item, index) in menuData" :key="index">
2566                            <div class="level-1" :class="item.classes" @click="onMouseEnter(item, null, true)">
2567                                <div class="block px-6 w-full py-3 text-base hover:text-secondary hover:bg-tertiary-darker/10 hover:fill-primary font-bold cursor-pointer"
2568                                   :class="[ item.classes? item.classes.join(' '): '', isPanelActive(item.id)? 'fill-primary bg-tertiary-darker/10' : '']"
2569                                   :style="{ color: item.color }"
2570                                >
2571                                    <div class="ml-auto w-full max-w-[246px] flex items-center">
2572                                        <template x-if="item.icon">
2573                                            <template x-if="item.icon_content">
2574                                                <span x-html="item.icon_content" class='menu-icon mr-2.5 inline-block'></span>
2575                                            </template>
2576                                            <template x-if="!item.icon_content">
2577                                                <span x-show="item.icon" class='menu-icon mr-2.5 inline-block'><img x-bind:src="item.icon" x-bind:alt="item.label" /></span>
2578                                            </template>
2579                                        </template>
2580                                        <span x-text="item.label"></span>
2581                                        <template x-if="hasSubmenu(item)">
2582                                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12.24 24" class="ml-auto" width="12" height="12" role="img">
2583    <path d="M1.08 23.87C.43 23.61.01 22.99 0 22.29c0-.46.18-.89.51-1.21l7.62-7.52c.86-.85.87-2.23.03-3.09l-.03-.03L.52 2.93C-.15 2.27-.16 1.2.5.53L.52.51C1.2-.17 2.29-.17 2.97.5l7.6 7.51c2.2 2.17 2.23 5.7.06 7.91l-.06.06-7.61 7.52a1.766 1.766 0 0 1-1.89.37Z" style="fill:currentColor"/>
2584<title>arrow-right</title></svg>
2585                                        </template>
2586                                    </div>
2587                                </div>
2588                                <template x-if="hasSubmenu(item)">
2589                                    <template x-teleport="#main-menu-second-level_6ac8c77d1c956" x-data="{ submenu: item.submenu, item: item}">
2590                                        <div class="absolute top-0 left-0 h-[calc(100vh-100px)] z-10 px-6 py-2 pb-16 bg-white shadow-lg level1"
2591                                             x-init="$watch('open',(value, oldValue) => { !value && clearPanelActiveId() })"
2592                                             :class="[ open? 'grid' : 'hidden', (submenu.l || submenu.r)? 'w-11/12 xl:w-4/5 2xl:w-8/12 grid-cols-5' : ((submenu.children && submenu.children.length > 1)? 'grid-cols-2 max-w-full' : 'min-w-[320px]') ]"
2593                                             x-show="isPanelActive(item.id)"
2594                                             x-transition:enter="transform transition ease-in-out duration-300"
2595                                             x-transition:enter-start="-translate-x-full"
2596                                             x-transition:enter-end="translate-x-0"
2597                                             x-transition:leave="transform transition ease-in-out duration-300"
2598                                             x-transition:leave-start="translate-x-0"
2599                                             x-transition:leave-end="-translate-x-full"
2600                                        >
2601                                            <template x-if="submenu.t">
2602                                                <div class="top_block column">
2603                                                    <div class="column-content" x-html="submenu.t"></div>
2604                                                </div>
2605                                            </template>
2606                                            <template x-if="submenu.l">
2607                                                <div class="left_block column">
2608                                                    <div class="column-content" x-html="submenu.l"></div>
2609                                                </div>
2610                                            </template>
2611
2612                                            <template x-if="submenu.children" x-data="{ children: submenu.children }">
2613                                                <div class="column main-column pb-16 pt-0.5 h-full overflow-y-auto scrollbar scrollbar-thin scrollbar-track-transparent scrollbar-thumb-gray-3"
2614                                                     :class="{ 'col
2614-span-3 flex gap-2': ((!submenu.r && submenu.l) || (!submenu.l && submenu.r)) || (submenu.children && submenu.children.length > 1) }"
2615                                                >
2616                                                    <template x-for="(column,y) in children" :key="y">
2617                                                        <div :class="{ 'w-[210px] xl:w-[240px]' : y != children.length - 1, 'w-[210px] xl:w-[317px]': y == children.length - 1 }">
2618                                                            <template x-if="item.label && y == 0">
2619                                                                <div class="flex justify-between gap-3">
2620                                                                    <span class="font-bold text-primary mb-3 block" x-text="item.label"></span>
2621                                                                    <a x-bind:href="item.link" class="hover:underline text-sm text-secondary flex items-center gap-1 -top-1.5 relative">
2622                                                                        <span class="leading-none">Vedi tutti</span>
2623                                                                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="16" height="16" role="img">
2624  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
2625<title>chevron-right</title></svg>
2626                                                                    </a>
2627                                                                </div>
2628                                                            </template>
2629                                                            <template x-if="column.label && y != 0">
2630                                                                <span class="font-bold text-primary mb-3 block" x-text="column.label"></span>
2631                                                            </template>
2632                                                            <template x-if="column.html">
2633                                                                <div x-html="column.html"></div>
2634                                                            </template>
2635                                                            <template x-if="!column.html">
2636                                                                <template x-for="(child, i) in column" :key="i">
2637                                                                    <div class="relative block w-full">
2638                                                                        <template x-if="child.type == 'header'">
2639                                                                            <div class="font-bold text-primary mb-3 block" x-text="child.label"></div>
2640                                                                        </template>
2641                                                                        <template x-if="child.type != 'header'">
2642                                                                            <template x-if="child.type != 'custom_list'">
2643                                                                                <div class="relative block w-full py-0.5 my-0.5" :class="child.classes">
2644                                                                                    <template x-if="child.html">
2645                                                                                        <div x-html="child.html"></div>
2646                                                                                    </template>
2647                                                                                    <template x-if="!child.html && child.type != 'custom_list'">
2648                                                                                        <a x-bind:href="child.link" class="hover:underline text-sm">
2649                                                                                            <span x-text="child.label"></span>
2650                                                                                        </a>
2651                                                                                    </template>
2652                                                                                </div>
2653                                                                            </template>
2654                                                                            <template x-if="child.type == 'custom_list'">
2655                                                                                <div class="brand-list">
2656                                                                                    <sp
2656an class="font-bold text-primary mb-4 block" x-text="child.label"></span>
2657                                                                                    <template x-for="(brand, i) in child.children" :key="i">
2658                                                                                        <div class="relative block w-full py-0.5 mt-0.5 brand-item">
2659                                                                                            <a x-bind:href="brand.link" class="hover:underline">
2660                                                                                                <span x-text="brand.label"></span>
2661                                                                                            </a>
2662                                                                                        </div>
2663                                                                                    </template>
2664                                                                                </div>
2665                                                                            </template>
2666                                                                        </template>
2667                                                                    </div>
2668                                                                </template>
2669                                                            </template>
2670                                                        </div>
2671                                                    </template>
2672                                                </div>
2673                                            </template>
2674
2675                                            <template x-if="submenu.r">
2676                                                <div class="right_block column -my-2 -mr-5 overflow-auto h-[calc(100vh-100px)] scrollbar scrollbar-thin scrollbar-track-transparent scrollbar-thumb-gray-3"
2677                                                     x-show="isPanelActive(item.id)"
2678                                                     :class="(submenu.children && submenu.children.length < 1)? 'col-span-3' : 'col-span-2'"
2679                                                     x-transition:enter="ease-in-out duration-700"
2680                                                     x-transition:enter-start="opacity-0"
2681                                                     x-transition:enter-end="opacity-100"
2682                                                     x-transition:leave="ease-in-out duration-100"
2683                                                     x-transition:leave-start="opacity-100"
2684                                                     x-transition:leave-end="opacity-0"
2685                                                >
2686                                                    <div class="column-content" x-html="submenu.r"></div>
2687                                                </div>
2688
2689
2690                                            </template>
2691                                            <template x-if="submenu.b">
2692                                                <div class="bottom_block column">
2693                                                    <div class="column-content" x-html="submenu.b"></div>
2694                                                </div>
2695                                            </template>
2696                                        </div>
2697                                    </template>
2698                                </template>
2699                            </div>
2700                        </template>
2701                    </div>
2702                </div>
2703            </div>
2704            <div id="main-menu-second-level_6ac8c77d1c956" class="relative z-10 w-screen h-[calc(100vh-100px)]"
2705                 x-show="open">
2706                <div class="backdrop"
2707                     x-ref="backdrop"
2708                     x-show="open"
2709                     x-transition:enter="ease-in-out duration-500"
2710                     x-transition:enter-start="opacity-0"
2711                     x-transition:enter-end="opacity-100"
2712                     x-transition:leave="ease-in-out duration-500"
2713                     x-transition:leave-start="opacity-100"
2714                     x-transition:leave-end="opacity-0"
2715                     @click="open=false"
2716                     aria-label="Close panel"></div>
2717            </div>
2718        </div>
2719    </section>
2720    </template>
2721</div>
2722
2723<script>
2724    'use strict';
2725
2726    const initMenuDesktop_6ac8c77d1c956 = () => {
2727        return {
2728            isActive: false,
2729            open: false,
2730            hoverPanelActiveId: [],
2731            menuData: null,
2732            isLoading: false,
2733            currentUrl: window.location.href.split('?')[0],
2734            panelLevel: 0,
2735            isPanelActive(id){
2736                return this.hoverPanelActiveId.includes(id);
2737            },
2738            setPanelActiveId(id, replace = false){
2739                if(replace){
2740                    this.clearPanelActiveId();
2741                }
2742                if(!this.isPanelActive(id))
2743                    this.hoverPanelActiveId.push(id);
2744            },
2745            removePanelActiveId(id){
2746                let i = this.hoverPanelActiveId.indexOf(id);
2747                if(i >= 0)
2748                    this.hoverPanelActiveId.splice(i, 1);
2749            },
2750            clearPanelActiveId(){
2751                this.hoverPanelActiveId =[];
2752            },
2753            onMouseEnter(item, id = null, clear = false){
2754                if(this.hasSubmenu(item)){
2755                    this.setPanelActiveId(id? id : item.id, clear);
2756                }else{
2757                    this.clearPanelActiveId();
2758                }
2759            },
2760            hasSubmenu(item){
2761                return item.submenu;
2762            },
2763            setActiveMenu(menuNode) {
2764                return; // ignoriamo questa funzionalità per questo progetto
2765                Array.from(menuNode.querySelectorAll('a')).filter(link => {
2766                    return (link.href) && link.href === this.currentUrl;
2767                }).map(item => {
2768                    item.classList.add('underline');
2769                    item.closest('div.level1') &&
2770                    item.closest('div.level1').querySelector('a').classList.add('underline');
2771                });
2772            },
2773            dispatchMessage(type, message, timeout) {
2774                typeof window.dispatchMessages && window.dispatchMessages(
2775                    [{
2776                        type: type,
2777                        text: message,
2778                    }],
2779                    timeout
2780                );
2781            },
2782            setMenuStyles () {
2783                let header = document.querySelector('#header .content');
2784                let headerContent = header.querySelector('.container');
2785                let headerContentStyle = window.getComputedStyle(headerContent);
2786
2787                const topDialog = (header.offsetHeight + header.getBoundingClientRect().top) + 'px';
2788                this.$refs.dialog.style.top = topDialog;
2789                this.$refs.backdrop.style.top = topDialog;
2790                this.$refs.dialogContainer.style.width =
2791                    (parseInt(headerContentStyle.marginLeft) + parseInt(headerContentStyle.paddingLeft) + 282) + 'px';
2792            },
2793            fetchData(){
2794                // Calculate offset top
2795                this.setMenuStyles();
2796                // Fetch data
2797                this.$dispatch('screen-lock',this.open);
2798                if(!this.menuData && this.open){
2799                    this.isLoading = true;
2800                    fetch(
2801                        'https://www.farma.it/megamenu/get/json/id/1/limit/0/level/1/?1791543165',
2802                        {
2803                            headers: {contentType: 'application/json'},
2804                        }
2805                    ).then(response => {
2806                        if (response.ok) {
2807                            return response.json();
2808                        } else {
2809                            this.dispatchMessage('error', response.statusText);
2810                            console.warn("GET request failed", response);
2811                        }
2812                    })
2813                    .then(data => {
2814                        this.menuData = data;
2815                        this.isLoading = false;
2816                        this.$nextTick(() => {
2817                            this.setActiveMenu(document.getElementById('main-menu-second-level_6ac8c77d1c956'));
2818                        });
2819                    });
2820                }
2821            }
2822        }
2823    }
2824</script>
2824
2825
2826            <!-- Search -->
2827            <div class="order-4 lg:order-3 w-full lg:w-auto lg:flex-1"
2828                 :class="searchOpened ? 'z-40': ''"
2829                 id="search-content"
2830            >
2831                    <div class="mx-auto my-3 lg:my-0 search-container">
2832        <div class="supercontainer">
2833            <div id="algoliaAutocomplete" class="block block-search algolia-search-block algolia-search-input container py-2 mx-auto text-black hidden" ></div>
2834            <div id="panelContainer" class="relative" x-data="initAutocompleteInsight"></div>
2835            <div id="menu-open-search" class="control relative lg:mx-10" >
2836                <label for="search" class="block relative cursor-text">
2837                    <div class="input-search form-input pl-[38px] py-2 h-[36px] flex items-center" aria-hidden="true">
2838                        <span>Cerca all’interno della farmacia</span>
2839                    </div>
2840                    <div class="absolute top-0 left-0 py-2.5 lg:py-3 px-4 h-[42px] lg:h-[46px] pointer-events-none">
2841                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14" role="img">
2842    <path d="M22.79 24c-.32 0-.63-.12-.86-.35l-6.05-6.04v-1.14l-.68-.7-.22.19a9.1 9.1 0 0 1-7.46 2.06 9.128 9.128 0 0 1-7.45-7.8 8.98 8.98 0 0 1 2.2-7.15A9.095 9.095 0 0 1 9.08 0c.38 0 .77.02 1.15.07 4.96.62 8.48 5.15 7.86 10.12a9.046 9.046 0 0 1-2.12 4.78l-.19.22.7.68h1.14l6.03 6.06a1.213 1.213 0 0 1-.86 2.07ZM9.08 2.27c-3.76 0-6.8 3.04-6.8 6.8s3.04 6.8 6.8 6.8 6.8-3.04 6.8-6.8c0-3.75-3.05-6.79-6.8-6.8Z" style="fill:currentColor"/>
2843<title>search</title></svg>
2844                    </div>
2845                </label>
2846            </div>
2847
2848            <!-- Close button (left arrow on mobile, X on desktop) -->
2849            <button id="close-instant-search"
2850                    type="button"
2851                    class="instant-search-close"
2852                    aria-label="Close search"
2853                    title="Close search">
2854                <span class="icon-x"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16" role="img">
2855    <path d="M21.82 24c-.58 0-1.13-.23-1.54-.64l-8.27-8.27-8.29 8.27a2.179 2.179 0 0 1-3.08-3.08L8.92 12 .64 3.73a2.19 2.19 0 0 1 0-3.09 2.172 2.172 0 0 1 3.08 0L12 8.92 20.27.64a2.19 2.19 0 0 1 3.09 0c.85.85.85 2.23 0 3.09L15.08 12l8.27 8.27c.85.85.85 2.24 0 3.09-.41.41-.96.64-1.54.64Z" style="fill:currentColor"/>
2856<title>x</title></svg>
2857</span>
2858                <span class="icon-arrow">
2859                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 20.57" width="12" height="12">
2860                        <path d="M22.29 8.58H5.14l5.64-5.64c.65-.69.62-1.78-.07-2.43-.66-.62-1.68-.62-2.35 0L1.01 7.88C.37 8.52 0 9.39 0 10.29c0 .9.37 1.76 1.01 2.4l7.35 7.38c.68.66 1.77.64 2.43-.05.64-.67.64-1.73 0-2.39L5.15 12h17.14c.95-.02 1.7-.81 1.67-1.76-.02-.92-.76-1.65-1.67-1.67Z" style="fill:currentColor"/>
2861                    </svg>
2862                </span>
2863            </button>
2864
2865            <!-- Reset button (clears input) shown on mobile -->
2866            <button id="reset-instant-search"
2867                    class="reset-instant-search"
2868                    aria-label="Clear search"
2869                    title="Clear search">
2870                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12" role="img">
2871    <path d="M21.82 24c-.58 0-1.13-.23-1.54-.64l-8.27-8.27-8.29 8.27a2.179 2.179 0 0 1-3.08-3.08L8.92 12 .64 3.73a2.19 2.19 0 0 1 0-3.09 2.172 2.172 0 0 1 3.08 0L12 8.92 20.27.64a2.19 2.19 0 0 1 3.09 0c.85.85.85 2.23 0 3.09L15.08 12l8.27 8.27c.85.85.85 2.24 0 3.09-.41.41-.96.64-1.54.64Z" style="fill:currentColor"/>
2872<title>x</title></svg>
2873            </button>
2874
2875            <div id="menu-search-icon" class="control relative">
2876                <input id="search"
2877                       x-ref="searchInput"
2878                       type="search"
2879                       enterkeyhint="search"
2880                       inputmode="search"
2881                       autocomplete="off"
2882                       name="q"
2883                       placeholder="Cerca&#x20;all&#x2019;interno&#x20;della&#x20;farmacia"
2884                       maxlength="128"
2885                       class="input-search form-input pl-[45px] lg:pl-[38px] py-2 h-[53px]"
2886                />
2887                <div class="hidden lg:block absolute top-[9px] left-0 py-2.5 px-4 h-[42px] lg:h-[46px]">
2888                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14" role="img">
2889    <path d="M22.79 24c-.32 0-.63-.12-.86-.35l-6.05-6.04v-1.14l-.68-.7-.22.19a9.1 9.1 0 0 1-7.46 2.06 9.128 9.128 0 0 1-7.45-7.8 8.98 8.98 0 0 1 2.2-7.15A9.095 9.095 0 0 1 9.08 0c.38 0 .77.02 1.15.07 4.96.62 8.48 5.15 7.86 10.12a9.046 9.046 0 0 1-2.12 4.78l-.19.22.7.68h1.14l6.03 6.06a1.213 1.213 0 0 1-.86 2.07ZM9.08 2.27c-3.76 0-6.8 3.04-6.8 6.8s3.04 6.8 6.8 6.8 6.8-3.04 6.8-6.8c0-3.75-3.05-6.79-6.8-6.8Z" style="fill:currentColor"/>
2890<title>search</title></svg>
2891                </div>
2892            </div>
2893            <div id="view-all-products" class="lg:hidden border-t">
2894                <button class="btn btn-primary view-all-button-algolia" onclick="try{document.querySelector('#autocomplete-products-footer a')?.click();}catch(e){};var p=document.getElementById('view-all-products');if(p){p.classList.add('hidden');}">
2895                    Vedi tutti i <span id="aa-count-mobile" class="mx-1"></span> prodotti
2896                </button>
2897            </div>
2898        </div>
2899    </div>
2900
2901    
2901<script>
2902        'use strict';
2903
2904        function initAutocompleteInsight() {
2905            return {
2906                bindClickEvent(element, eventName, objectID, indexName, position, queryId) {
2907                    try {
2908                        element.querySelector('.algoliasearch-autocomplete-hit')?.addEventListener("click", function () {
2909                            buildInsightsEventData(eventName, objectID, indexName, position, queryId);
2910                        });
2911                    } catch (e) {}
2912                }
2913            }
2914        }
2915
2916        document.addEventListener('DOMContentLoaded', function() {
2917            const searchEl = document.getElementById('search');
2918            if (!searchEl) return;
2919
2920            // delegate Enter/mobile submit logic to autocomplete.js bindings
2921            searchEl.addEventListener('click', function () {
2922                setTimeout(function () {
2923                    // After aa-Input is available, keep it in sync with #search value
2924                    function syncAaInput() {
2925                        const currentAaInput = document.querySelector('.aa-Input');
2926                        if (!currentAaInput || !('value' in currentAaInput)) return;
2927                        const newVal = searchEl.value ?? '';
2928                        if (currentAaInput.value !== newVal) {
2929                            currentAaInput.value = newVal;
2930                            // Notify Algolia/autocomplete about the programmatic change
2931                            currentAaInput.dispatchEvent(new Event('input', { bubbles: true }));
2932                            currentAaInput.dispatchEvent(new Event('change', { bubbles: true }));
2933                        }
2934                    }
2935
2936                    // Initial sync once available
2937                    syncAaInput();
2938                    // Keep syncing as the user types or changes the field
2939                    searchEl.addEventListener('input', syncAaInput);
2940                    searchEl.addEventListener('change', syncAaInput);
2941                }, 100);
2942            });
2943        });
2944    </script>
2944
2945    
2945<script>
2946        // Immediately apply open classes and show backdrop on click of #menu-open-search
2947        document.addEventListener('DOMContentLoaded', function() {
2948            var openTrigger = document.getElementById('menu-open-search');
2949            if (openTrigger) {
2950                openTrigger.addEventListener('click', function () {
2951                    try {
2952                        var panelContainer = document.getElementById('panelContainer');
2953                        var searchWrapper = document.getElementById('menu-search-icon');
2954                        var searchContainer = document.querySelector('.search-container');
2955                        var aaPanel = document.querySelector('.aa-Panel');
2956                        var bodyEl = document.body;
2957
2958                        if (panelContainer) panelContainer.classList.add('is-open');
2959                        if (searchWrapper) searchWrapper.classList.add('is-open');
2960                        if (searchContainer) searchContainer.classList.add('is-open');
2961                        if (aaPanel) aaPanel.classList.add('is-open');
2962                        if (bodyEl) bodyEl.classList.add('max-h-screen', 'lock-screen', 'overflow-hidden', 'instant-lock');
2963
2964                        // Pz8 per evitare flickering della ricerca
2965                        (function triggerSearchClicksOnce(el) {
2966                            if (!el) return;
2967
2968                            if (window.__algoliaSearchClicksTriggered) return;
2969                            window.__algoliaSearchClicksTriggered = true;
2970                            for (let i = 0; i < 100; i++) {
2971                                setTimeout(function () {
2972                                    let panel = document.querySelector('.aa-PanelLayout');
2973                                    if (panel) {
2974                                        i = 100;
2975                                        return;
2976                                    }
2977                                    if (window.__algoliaSearchClicksTriggered) {
2978                                        el.click();
2979                                    }
2980
2981                                }, i * 5);
2982                            }
2983                        })(document.getElementById('search'));
2984                    } catch (e) {
2985                        // swallow errors
2986                    }
2987                });
2988            }
2989
2990        });
2991    </script>
2991
2992    
2992<script>
2993        // Toggle 'is-empty' on .search-container only on 'change' when input remains empty and there are results
2994        document.addEventListener('DOMContentLoaded', function() {
2995            var searchContainer = document.querySelector('.search-container');
2996            if (!searchContainer) return;
2997
2998            function handleChange(e) {
2999                try {
3000                    var val = (e && e.target && typeof e.target.value === 'string') ? e.target.value.trim() : '';
3001                    if (val === '' && searchContainer.classList.contains('has-results')) {
3002                        searchContainer.classList.add('is-empty');
3003                    } else {
3004                        searchContainer.classList.remove('is-empty');
3005                    }
3006                } catch (err) {
3007                    // no-op
3008                }
3009            }
3010
3011            // Native search input
3012            var nativeInput = document.getElementById('search');
3013            if (nativeInput) {
3014                nativeInput.addEventListener('change', handleChange, { passive: true });
3015            }
3016
3017            // Algolia injected input may appear later; observe and bind once when present
3018            var aaBound = false;
3019            var tryBindAa = function() {
3020                if (aaBound) return;
3021                var aaInput = document.querySelector('.aa-Input');
3022                if (aaInput) {
3023                    aaInput.addEventListener('change', handleChange, { passive: true });
3024                    aaBound = true;
3025                }
3026            };
3027            // Try now and a little later in case of async initialization
3028            tryBindAa();
3029            var aaInterval = setInterval(function(){
3030                if (aaBound) { clearInterval(aaInterval); return; }
3031                tryBindAa();
3032            }, 200);
3033            setTimeout(function(){ clearInterval(aaInterval); }, 6000);
3034        });
3035    </script>
3035
3036            </div>
3037
3038            <!-- Buttons -->
3039            <div class="flex items-center gap-4 lg:gap-8 order-3 ml-3 lg:ml-0 lg:order-4">
3040                <!-- Static Block -->
3041                <div class="hidden lg:block">
3042                    <div data-content-type="html" data-appearance="default" data-intersect="false" data-element="main" data-decoded="true"><a class="flex items-center gap-2 hover:underline" href="/richiamami">
3043    <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" width="20" height="20" role="img">
3044    <path d="M12.98 1c0-.55.45-1 1-1C19.51 0 23.99 4.49 24 10.02c0 .55-.45 1-1 1s-1-.45-1-1c0-4.43-3.59-8.01-8.02-8.02-.55 0-1-.45-1-1Zm1 5.01a4.01 4.01 0 0 1 4.01 4.01c0 .55.45 1 1 1s1-.45 1-1c0-3.32-2.69-6.01-6.01-6.01-.55 0-1 .45-1 1s.45 1 1 1Zm9.11 10.76a3.108 3.108 0 0 1 0 4.39l-.91 1.05C13.98 30.06-5.99 10.1 1.75 1.87l1.15-1a3.081 3.081 0 0 1 4.33.04c.03.03 1.89 2.44 1.89 2.44a3.118 3.118 0 0 1 0 4.29L7.96 9.1a12.83 12.83 0 0 0 6.94 6.96l1.47-1.17a3.099 3.099 0 0 1 4.29 0s2.41 1.86 2.44 1.89Zm-1.38 1.46s-2.4-1.84-2.43-1.88c-.43-.43-1.12-.43-1.55 0-.03.03-2.05 1.64-2.05 1.64-.28.22-.65.28-.98.15a15.02 15.02 0 0 1-8.83-8.82 1 1 0 0 1 .14-1S7.62 6.3 7.65 6.27c.43-.43.43-1.12 0-1.55-.03-.03-1.88-2.43-1.88-2.43-.43-.39-1.1-.38-1.52.04l-1.15 1c-5.65 6.8 11.65 23.14 17.6 17.51l.91-1.05c.44-.41.48-1.1.08-1.56Z" style="fill:currentColor"></path>
3045<title>heroicons/outline/phone</title></svg>
3046
3047    <div class="text-xs font-medium">Richiamami</div>
3048    </a></div>                </div>
3049
3050                <!-- Customer Icon & Dropdown -->
3051                <!-- BLOCK header.customer -->
3052<div x-data="initHeaderCustomerMenu()" @private-content-loaded.window="getData(event.detail.data)">
3053
3054    <template x-if="isLoggedIn()">
3055        <a
3056                href="https&#x3A;&#x2F;&#x2F;www.farma.it&#x2F;customer&#x2F;account&#x2F;"
3057                id="customer-menu"
3058                class="flex items-center gap-2 hover:underline"
3059                aria-label="Il&#x20;mio&#x20;Account"
3060        >
3061        <span class="relative block">
3062            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" aria-hidden="true">
3063    <path d="M4.07 21c-.07-.05-.13-.1-.19-.17C-1 16.35-1.32 8.76 3.16 3.87c4.48-4.88 12.07-5.2 16.95-.72 4.88 4.48 5.21 12.07.73 16.96-.23.25-.47.49-.73.73-.05.06-.12.12-.19.17-4.53 4-11.32 4-15.85 0ZM12 22.15c2.25 0 4.44-.75 6.22-2.13a7.354 7.354 0 0 0-6.14-3.4h-.16c-2.49.02-4.8 1.3-6.14 3.4 1.78 1.39 3.97 2.14 6.22 2.13Zm4.83-6.02c1.09.67 2.03 1.56 2.76 2.61 3.73-4.19 3.35-10.61-.84-14.33C14.56.68 8.14 1.06 4.42 5.25 1 9.1 1 14.9 4.42 18.74a9.2 9.2 0 0 1 4.16-3.31 5.546 5.546 0 0 1-.93-7.78 5.546 5.546 0 0 1 7.78-.93 5.546 5.546 0 0 1 0 8.71c.49.19.96.43 1.4.7Zm-8.52-5.06c0 2.01 1.61 3.65 3.62 3.69h.15A3.694 3.694 0 0 0 15.7 11a3.694 3.694 0 0 0-3.76-3.62 3.692 3.692 0 0 0-3.62 3.69Z" style="fill:currentColor"/>
3064</svg>
3065            <span x-text="customer.firstname.charAt(0)"
3066                  class="lg:hidden absolute h-3 w-3 bg-white leading-none top-[-3px] left-3 text-xxs font-bold text-center text-sale rounded-full"
3067            >0</span>
3068        </span>
3069            <span class="label hidden lg:block text-xs truncate text-center w-full leading-none font-medium">
3070                <span>Ciao, </span>
3071                <span x-text="customer.firstname"></span>
3072            </span>
3073        </a>
3074    </template>
3075
3076    <template x-if="!isLoggedIn()">
3077        <span>
3078            <a
3079                    href="https&#x3A;&#x2F;&#x2F;www.farma.it&#x2F;customer&#x2F;account&#x2F;"
3080                    id="customer-menu"
3081                    class="flex items-center gap-2 hover:underline"
3082                    aria-label="Il&#x20;mio&#x20;Account"
3083            >
3084                <span class="relative block">
3085                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" aria-hidden="true">
3086    <path d="M4.07 21c-.07-.05-.13-.1-.19-.17C-1 16.35-1.32 8.76 3.16 3.87c4.48-4.88 12.07-5.2 16.95-.72 4.88 4.48 5.21 12.07.73 16.96-.23.25-.47.49-.73.73-.05.06-.12.12-.19.17-4.53 4-11.32 4-15.85 0ZM12 22.15c2.25 0 4.44-.75 6.22-2.13a7.354 7.354 0 0 0-6.14-3.4h-.16c-2.49.02-4.8 1.3-6.14 3.4 1.78 1.39 3.97 2.14 6.22 2.13Zm4.83-6.02c1.09.67 2.03 1.56 2.76 2.61 3.73-4.19 3.35-10.61-.84-14.33C14.56.68 8.14 1.06 4.42 5.25 1 9.1 1 14.9 4.42 18.74a9.2 9.2 0 0 1 4.16-3.31 5.546 5.546 0 0 1-.93-7.78 5.546 5.546 0 0 1 7.78-.93 5.546 5.546 0 0 1 0 8.71c.49.19.96.43 1.4.7Zm-8.52-5.06c0 2.01 1.61 3.65 3.62 3.69h.15A3.694 3.694 0 0 0 15.7 11a3.694 3.694 0 0 0-3.76-3.62 3.692 3.692 0 0 0-3.62 3.69Z" style="fill:currentColor"/>
3087</svg>
3088                </span>
3089                <span class="label hidden lg:block text-xs truncate text-center w-full leading-none font-medium">
3090                    <span>Accedi&#x20;&#x2F;&#x20;Registrati</span>
3091                </span>
3092            </a>
3093        </span>
3094    </template>
3095</div>
3096<script>
3097    function initHeaderCustomerMenu() {
3098        return {
3099            open: false,
3100            customer: {},
3101            getData(data) {
3102                if (data.customer) { this.customer = data.customer }
3103            },
3104            isLoggedIn(){
3105                return !!(this.customer.firstname);
3106            }
3107        }
3108    }
3109</script>
3109
3110<!-- /BLOCK header.customer -->
3111                <!-- Wishlist Icon -->
3112                
3113<a
3114    href="https://www.farma.it/wishlist/"
3115    class="relative hidden md:inline-flex btn bg-transparent border-transparent p-1"
3116    x-data="initWishlistHeader"
3117    @private-content-loaded.window="receiveWishlistData"
3118    aria-label="La&#x20;mia&#x20;lista&#x20;desideri"
3119    :aria-label="linkAriaLabel"
3120>
3121    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" viewBox="0 0 24 24" aria-hidden="true"><path d="M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5"/></svg>
3122    <template x-if="itemCount">
3123        <span
3124            x-text="itemCount"
3125            class="absolute -top-1.5 -right-1.5 px-2 py-1 rounded-full bg-primary text-on-primary text-xs
3126                font-semibold leading-none text-center uppercase tabular-nums"
3127            aria-hidden="true"
3128        ></span>
3129    </template>
3130</a>
3131
3132<script>
3133    function initWishlistHeader() {
3134        return {
3135            wishlistProducts: null,
3136            itemCount: 0,
3137            linkAriaLabel() {
3138                const countLabel = this.itemCount > 1
3139                    ? hyva.str('\u00251\u0020elementi', this.itemCount)
3140                    : hyva.str('\u00251\u0020elemento', this.itemCount);
3141                return `Wishlist\u0020Products (${countLabel})`;
3142            },
3143            receiveWishlistData() {
3144                const data = this.$event.detail.data;
3145                this.itemCount = data.wishlist ? parseInt(data.wishlist.counter) : 0;
3146            }
3147        }
3148    }
3149
3150    window.addEventListener('alpine:init', () => {
3151        Alpine.data('initWishlistHeader', initWishlistHeader);
3152    }, { once: true })
3153</script>
3153
3154
3155                <!-- Cart Icon -->
3156                <a id="menu-cart-icon"
3157                   @click.prevent.stop="$dispatch('toggle-cart',{});"                   class="flex items-center gap-2 hover:underline"
3158                   href="https://www.farma.it/checkout/cart/index/"
3159                >
3160                    <span class="relative block">
3161                        <svg xmlns="http://www.w3.org/2000/svg" id="Livello_1" viewBox="0 0 22.79 24" width="20" height="20" role="img">
3162    <path fill="currentColor" d="M6.98 24c-1.05 0-1.9-.86-1.89-1.91 0-1.05.86-1.9 1.91-1.89 1.05 0 1.89.85 1.89 1.9 0 1.05-.86 1.9-1.91 1.9ZM17.11 24c-1.05 0-1.9-.86-1.89-1.91 0-1.05.86-1.9 1.91-1.89 1.05 0 1.89.85 1.89 1.9 0 1.05-.86 1.9-1.91 1.9ZM19.14 18.95H8.56c-2.5 0-4.62-1.87-4.91-4.35L2.24 2.78c-.07-.57-.55-1-1.12-1H.89A.893.893 0 0 1-.05.94C-.08.45.3.03.79 0h.33c1.48 0 2.72 1.1 2.9 2.57l.05.46h6.95c.49-.02.9.37.92.86.02.49-.37.9-.86.92H4.27l.98 8.32h12.51c1.53 0 2.84-1.09 3.11-2.59l.13-.72a.9.9 0 0 1 .88-.73c.05 0 .11 0 .16.01.48.09.81.55.72 1.03l-.13.72a4.953 4.953 0 0 1-4.87 4.06H5.51l.06.16c.45 1.26 1.64 2.1 2.98 2.1h10.58c.49-.02.9.37.92.86.02.49-.37.9-.86.92h-.06Z"/>
3163<title>shopping-cart</title></svg>
3164                        <span x-text="getCartItemsCountLabel"
3165                              class="absolute top-[-6px] right-[1px] text-xxs font-bold text-center text-sale rounded-full"
3166                        >0</span>
3167                    </span>
3168                    <span class="header-subtotal label hidden lg:inline text-sm leading-none font-bold">0,00 €</span>
3169                </a>
3170            </div>
3171        </div>
3172    </div>
3173
3174    <!-- Cart Drawer -->
3175    
3175<script>
3176    function initCartDrawer() {
3177        return {
3178            open: false,
3179            isLoading: false,
3180            cart: {},
3181            maxItemsToDisplay: 10,
3182            itemsCount: 0,
3183            totalCartAmount: 0,
3184            headerSubtotal: null,
3185            headerSubtotalSelector: '.header-subtotal',
3186            groupedData: {},
3187
3188            itemsCountLabel(){
3189                return (this.itemsCount > 99)? '99+' : `${this.itemsCount}`;
3190            },
3191            isVisible(){
3192                return (this.open && this.itemsCount > 0)
3193            },
3194            getData(data) {
3195                if (data.cart) {
3196                    this.cart = data.cart;
3197                    this.itemsCount = data.cart.items && data.cart.items.length || 0;
3198                    this.totalCartAmount = this.cart.summary_count;
3199                    this.setCartItems();
3200                    this.initGroupedData()
3201                }
3202                this.isLoading = false;
3203            },
3204            cartItems: [],
3205            getItemCountTitle() {
3206                return hyva.strf('(%0 di %1)', this.maxItemsToDisplay, this.itemsCount)
3207            },
3208            getHeaderSubtotal() {
3209                if (!this.headerSubtotal) {
3210                    this.headerSubtotal = document.querySelector(this.headerSubtotalSelector);
3211                }
3212
3213                return this.headerSubtotal;
3214            },
3215            setCartItems() {
3216                this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || [];
3217
3218                if (this.maxItemsToDisplay > 0) {
3219                    this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10));
3220                }
3221
3222                try {
3223                    var subtotal = (this.cart?.subtotal_incl_tax_discounted) ? this.cart.subtotal_incl_tax_discounted : this.cart.subtotal;
3224                    if (subtotal) {
3225                        this.getHeaderSubtotal().innerHTML = subtotal;
3226                    }
3227                } catch (e) {}
3228            },
3229            initGroupedData() {
3230                let self = this;
3231                try {
3232                    Object.values(this.cart['fake_grouped_parents']).forEac
3232h(function (parent) {
3233                        let price = 0.0000,
3234                            productIds = parent.product_ids.split(','),
3235                            groupedId = parent['grouped_id'];
3236                        self.groupedData[groupedId] = {
3237                            'price': price,
3238                            'items': []
3239                        };
3240                        productIds.forEach(function (productId) {
3241                            let product = self.cart.items.find((item) => item.product_id == productId);
3242                            if (product) {
3243                                self.groupedData[groupedId]['items'].push({
3244                                    'name': product['product_name'],
3245                                    'qty': product['qty']
3246                                });
3247                                price += product['product_price_value'] * product['qty'];
3248                            }
3249                        })
3250                        self.groupedData[groupedId]['price'] = hyva.formatPrice(price, false);
3251                    })
3252                } catch (e) {}
3253                console.log(this.groupedData);
3254            },
3255            deleteItemFromCart(itemId) {
3256                this.isLoading = true;
3257
3258                const formKey = hyva.getFormKey();
3259                const postUrl = BASE_URL + 'checkout/sidebar/removeItem/';
3260
3261                fetch(postUrl, {
3262                    "headers": {
3263                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
3264                    },
3265                    "body": "form_key=" + formKey + "&item_id=" + itemId,
3266                    "method": "POST",
3267                    "mode": "cors",
3268                    "credentials": "include"
3269                }).then(response => {
3270                    if (response.redirected) {
3271                        window.location.href = response.url;
3272                    } else if (response.ok) {
3273                        return response.json();
3274                    } else {
3275                        window.dispatchMessages && window.dispatchMessages([{
3276                            type: 'warning',
3277                            text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.'
3278                        }]);
3279                        this.isLoading = false;
3280                    }
3281                }).then(result => {
3282                    window.dispatchMessages && window.dispatchMessages([{
3283                        type: result.success ? 'success' : 'error',
3284                        text: result.success
3285                            ? 'Hai\u0020rimosso\u0020il\u0020prodotto.'
3286                            : result.error_message
3287                    }], result.success ? 5000 : 0)
3288                    window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
3289                });
3290            },
3291            deleteGroupedFromCart(groupedId) {
3292                let deleteButton = document.querySelector('#cart-drawer [data-grouped-id="' + groupedId + '"] .delete');
3293                if (deleteButton) {
3294                    deleteButton.click();
3295                }
3296            },
3297            getGroupedPrice(groupedId) {
3298                return this.groupedData[groupedId]['price'];
3299            }
3300        }
3301    }
3302</script>
3302
3303<section id="cart-drawer"
3304         x-data="initCartDrawer()"
3305         x-init="$watch('isVisible', value => $dispatch('screen-lock', value))"
3306         @private-content-loaded.window="getData($event.detail.data)"
3307         @toggle-cart.window="if(itemsCount > 0){open=true}"
3308         @keydown.window.escape="open=false"
3309         @cart-loading-start.window="isLoading=true"
3310         @cart-loading-stop.window="isLoading=false"
3311>
3312    <template x-if="cart && cart.summary_count">
3313        <div role="dialog"
3314             aria-labelledby="cart-drawer-title"
3315             aria-modal="true"
3316             @click.outside="open=false"
3317             class="fixed inset-y-0 right-0 z-30 flex max-w-full">
3318            <div class="backdrop"
3319                 x-show="open"
3320                 x-transition:enter="ease-in-out duration-500"
3321                 x-transition:enter-start="opacity-0"
3322                 x-transition:enter-end="opacity-100"
3323                 x-transition:leave="ease-in-out duration-500"
3324                 x-transition:leave-start="opacity-100"
3325                 x-transition:leave-end="opacity-0"
3326                 @click="open=false"
3327                 aria-label="Close panel"></div>
3328            <div class="relative w-screen max-w-[470px] shadow-2xl"
3329                 x-show="open"
3330                 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700"
3331                 x-transition:enter-start="translate-x-full"
3332                 x-transition:enter-end="translate-x-0"
3333                 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700"
3334                 x-transition:leave-start="translate-x-0"
3335                 x-transition:leave-end="translate-x-full"
3336            >
3337                <div
3338                    x-show="open"
3339                    x-transition:enter="ease-in-out duration-500"
3340                    x-transition:enter-start="opacity-0"
3341                    x-transition:enter-end="opacity-100"
3342                    x-transition:leave="ease-in-out duration-500"
3343                    x-transition:leave-start="opacity-100"
3344                    x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex p-2 mt-2">
3345                    <button @click="open=false" aria-label="Close panel"
3346                            class="p-2 text-primary transition duration-150 ease-in-out hover:text-secondary">
3347                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" role="img">
3348    <path d="M21.82 24c-.58 0-1.13-.23-1.54-.64l-8.27-8.27-8.29 8.27a2.179 2.179 0 0 1-3.08-3.08L8.92 12 .64 3.73a2.19 2.19 0 0 1 0-3.09 2.172 2.172 0 0 1 3.08 0L12 8.92 20.27.64a2.19 2.19 0 0 1 3.09 0c.85.85.85 2.23 0 3.09L15.08 12l8.27 8.27c.85.85.85 2.24 0 3.09-.41.41-.96.64-1.54.64Z" style="fill:currentColor"/>
3349<title>x</title></svg>
3350                    </button>
3351                </div>
3352                <div class="flex flex-col h-screen h-[100dvh] py-6 space-y-6 bg-white shadow-xl">
3353                    
3354                    <header class="px-4 sm:px-6">
3355                        <h2 id="cart-drawer-title" class="text-xl font-bold leading-6 text-primary">
3356                            Carrello                            <span class="items-total font-normal"
3357                                  x-text="'(' + totalCartAmount + ')'">
3358                            </span>
3359                        </h2>
3360                    </header>
3361
3362                    
3363                    <div class="relative grid gap-6 px-4 py-6 overflow-y-auto bg-white border-t sm:gap-8 sm:px-6 border-container">
3364                        <template x-for="parent in cart.fake_grouped_parents">
3365                            <div class="flex items-start p-3 -m-3 space-x-4">
3366                                <a :href="parent.url" class="w-1/4">
3367                                    <img
3368                                        :src="parent.image"
3369                                        width="78"
3370                                        height="78"
3371                                        loading="lazy"
3372                                    />
3373                                </a>
3374                                <div class="w-3/4">
3375                                    <div>
3376                                        <p class="text-sm">
3377                                            <span x-html="parent.name"></span>
3378                                        </p>
3379                                    </div>
3380                                    <div class="mt-2">
3381                                        <template x-for="child_item in groupedData[parent.grouped_id].items">
3382                                            <div class="font-body-sm font-sm text-gray-1">
3383                                                <span x-html="child_item.qty + 'x ' + child_item.name"></span>
3384                                            </div>
3385                                        </template>
3386                                    </div>
3387                                    <p class="flex mt-2">
3388                                        <span>
3389                                            <span class="price-including-tax">
3390                                                <span class="minicart-price">
3391                                                    <span class="price" x-html="getGroupedPrice(parent.grouped_id)"></span>
3392                                                </span>
3393                                            </span>
3394                                        </span>
3395                                    </p>
3396                                    <div class="pt-2 mt-2">
3397                                        <button class="inline-flex p-2 btn shadow-none bg-container-darker text-primary hover:shadow-lg hover:bg-secondary/10"
3398                                                @click="deleteGroupedFromCart(parent.grouped_id)"
3399                                        >
3400                                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21.96 24" class="p-0.5" width="20" height="20" role="img">
3401    <path d="M13.9 24H8.06a4.85 4.85 0 0 1-4.84-4.4L1.87 5.64H.78a.781.781 0 0 1 0-1.56h4.38l.04-.19A4.86 4.86 0 0 1 9.96 0H12c2.31 0 4.3 1.63 4.76 3.89l.04.19h4.38c.42 0 .76.33.78.74v.04c0 .43-.35.78-.78.78h-1.12l-1.32 13.95a4.842 4.842 0 0 1-4.84 4.4ZM3.45 5.64l1.32 13.81a3.284 3.284 0 0 0 3.28 2.98h5.84c1.7 0 3.13-1.29 3.28-2.98l1.31-13.81H3.45Zm6.51-4.08c-1.4 0-2.65.88-3.11 2.2l-.11.32h8.48l-.11-.32A3.299 3.299 0 0 0 12 1.56H9.97Z" style="fill:currentColor"/>
3402<title>trash</title></svg>
3403                                        </button>
3404                                    </div>
3405                                </div>
3406                            </div>
3407                        </template>
3408                        <template x-for="item in cartItems">
3409                            <div class="flex items-start p-3 -m-3 space-x-4" :class="{'hidden': item.grouped_id }" x-bind:data-grouped-id="item.grouped_id">
3410                                <a :href="item.product_url" class="w-1/4">
3411                                    <img
3412                                        :src="item.product_image.src"
3413                                        :width="item.product_image.width"
3414                                        :height="item.product_image.height"
3415                                        loading="lazy"
3416                                    />
3417                                </a>
3418                                <div class="w-3/4 space-y-2">
3419                                    <div>
3420                                        <p class="text-sm">
3421                                            <span x-html="item.product_name"></span>
3422                                        </p>
3423                                        <p class="text-xs sr-only"><span x-html="item.product_sku"></span></p>
3424                                    </div>
3425                                    <template x-for="(option, i) in item.options">
3426                                        <span class="text-xxs text-primary-lighter inline-block before:inline-block before:mx-1 before:content-['-']"
3427                                              x-html="option.value"
3428                                              :class="{ 'before:content-none before:hidden': i == 0 }"
3429                                        ></span>
3430                                    </template>
3431                                    <div class="font-body-sm font-sm inline text-gray-1">
3432                                        Quantità:                                        <sp
3432an x-html="item.qty"></span>
3433                                    </div>
3434                                    <p class="flex">
3435                                        <span x-html="item.product_price"></span>
3436                                        <span x-show="item.regular_price_value > item.product_price_value" x-html="hyva.formatPrice(item.regular_price_value)" class="line-through ml-1.5"></span>
3437                                    </p>
3438                                    <div class="pt-2">
3439                                        <a :href="item.configure_url"
3440                                           x-show="item.product_type !== 'grouped'"
3441                                           class="inline-flex p-2 mr-2 btn shadow-none bg-container-darker text-primary hover:shadow-lg hover:bg-secondary/10">
3442                                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="p-0.5" width="20" height="20" role="img">
3443    <path d="M2.88 24H.76a.76.76 0 0 1-.76-.76v-2.11c0-1.29.51-2.53 1.43-3.44L18.11 1.01a3.455 3.455 0 0 1 4.88-.02 3.455 3.455 0 0 1 .02 4.88l-.02.02L6.3 22.58C5.39 23.49 4.16 24 2.88 24ZM15.35 5.91 2.5 18.77c-.63.63-.98 1.48-.98 2.37v1.35h1.35c.89 0 1.74-.35 2.36-.98L18.09 8.66l-2.74-2.74Zm5.2-4.4c-.51 0-1 .2-1.37.57l-2.76 2.76 2.74 2.73 2.76-2.76c.76-.75.76-1.98 0-2.74-.36-.36-.86-.57-1.37-.57Z" style="fill:currentColor"/>
3444<title>Modifica</title></svg>
3445                                        </a>
3446                                        <button class="delete inline-flex p-2 btn shadow-none bg-container-darker text-primary hover:shadow-lg hover:bg-secondary/10"
3447                                                @click="deleteItemFromCart(item.item_id)"
3448                                        >
3449                                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21.96 24" class="p-0.5" width="20" height="20" role="img">
3450    <path d="M13.9 24H8.06a4.85 4.85 0 0 1-4.84-4.4L1.87 5.64H.78a.781.781 0 0 1 0-1.56h4.38l.04-.19A4.86 4.86 0 0 1 9.96 0H12c2.31 0 4.3 1.63 4.76 3.89l.04.19h4.38c.42 0 .76.33.78.74v.04c0 .43-.35.78-.78.78h-1.12l-1.32 13.95a4.842 4.842 0 0 1-4.84 4.4ZM3.45 5.64l1.32 13.81a3.284 3.284 0 0 0 3.28 2.98h5.84c1.7 0 3.13-1.29 3.28-2.98l1.31-13.81H3.45Zm6.51-4.08c-1.4 0-2.65.88-3.11 2.2l-.11.32h8.48l-.11-.32A3.299 3.299 0 0 0 12 1.56H9.97Z" style="fill:currentColor"/>
3451<title>Elimina</title></svg>
3452                                        </button>
3453                                    </div>
3454
3455                                </div>
3456                            </div>
3457                        </template>
3458                    </div>
3459
3460                    
3461                    <div class="relative grid gap-6 px-4 pt-6 bg-white sm:gap-8 sm:px-6 !mt-auto">
3462                        <div class="w-full p-3 -m-3 space-x-4 text-right">
3463                            <p>Subtotale: <span class="font-bold text-xl" x-html="cart.subtotal_incl_tax_discounted"></span></p>
3464                        </div>
3465                        <div class="w-full p-3 -m-3 space-y-3">
3466                            <a href="https://www.farma.it/checkout/cart/"
3467                               class="block btn btn-primary">
3468                                Vai al Carrello                            </a>
3469                        </div>
3470                                            </div>
3471
3472                                    </div>
3473            </div>
3474            
3475<div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50"
3476     style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgb(255 255 255/0.60);"
3477     x-show="isLoading"
3478     x-transition:enter="ease-out duration-200"
3479     x-transition:enter-start="opacity-0"
3480     x-transition:enter-end="opacity-100"
3481     x-transition:leave="ease-in duration-200"
3482     x-transition:leave-start="opacity-100"
3483     x-transition:leave-end="opacity-0">
3484    <svg xmlns="http://www.w3.org/2000/svg" width="57" height="57" viewBox="0 0 38 38" stroke="#ffb590" class="text-primary" role="img">
3485    <g fill="none" fill-rule="evenodd">
3486        <g transform="translate(1 1)" stroke-width="2">
3487            <circle stroke="#ff6801" cx="18" cy="18" r="18"/>
3488            <path d="M36 18c0-9.94-8.06-18-18-18">
3489                <animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="1s" repeatCount="indef
3489inite"/>
3490            </path>
3491        </g>
3492    </g>
3493<title>loader</title></svg>
3494</div>
3495        </div>
3496    </template>
3497</section>
3498
3499    <!-- Authentication Pop-Up -->
3500    <!-- BLOCK authentication-popup -->
3500<script>
3501    function initAuthentication() {
3502        return {
3503            open: false,
3504            forceAuthentication: false,
3505            checkoutUrl: 'https://www.farma.it/checkout/index/',
3506            errors: 0,
3507            hasCaptchaToken: 0,
3508            displayErrorMessage: false,
3509            errorMessages: [],
3510            setErrorMessages: function setErrorMessages(messages) {
3511                this.errorMessages = [messages];
3512                this.displayErrorMessage = this.errorMessages.length;
3513            },
3514            submitForm: function () {
3515                // Do not rename $form, the variable is expected to be declared in the recaptcha output
3516                const $form = document.querySelector('#login-form');
3517                
3518                if (this.errors === 0) {
3519                    this.dispatchLoginRequest($form);
3520                }
3521            },
3522            onPrivateContentLoaded: function (data) {
3523                const isLoggedIn = data.customer && data.customer.firstname;
3524                if (data.cart && !isLoggedIn) {
3525                    this.forceAuthentication = !data.cart.isGuestCheckoutAllowed;
3526                }
3527            },
3528            redirectIfAuthenticated: function (event) {
3529                if (event.detail && event.detail.url) {
3530                    this.checkoutUrl = event.detail.url;
3531                }
3532                if (!this.forceAuthentication) {
3533                    window.location.href = this.checkoutUrl;
3534                }
3535            },
3536            dispatchLoginRequest: function(form) {
3537                this.isLoading = true;
3538                const username = this.$refs['customer-email'].value;
3539                const password = this.$refs['customer-password'].value;
3540                const formKey = hyva.getFormKey();
3541                const bodyFields = {
3542                    'username': username,
3543                    'password': password,
3544                    'formKey': formKey
3545                };
3546                                const fieldName = 'g\u002Drecaptcha\u002Dresponse';
3547                const recaptchaField = fieldName && form[fieldName];
3548                if (recaptchaField) {
3549                    bodyFields[fieldName] = recaptchaField.value;
3550                }
3551                fetch('https://www.farma.it/customer/ajax/login/', {
3552                        method: 'POST',
3553                        headers: {
3554                            'Content-Type': 'application/json',
3555                            'X-Requested-With': 'XMLHttpRequest'
3556                        },
3557                        body: JSON.stringify(bodyFields)
3558                    }
3559                ).then(response => {
3560                        return response.json()
3561                    }
3562                ).then(data=> {
3563                    this.isLoading = false;
3564                    if (data.errors) {
3565                        dispatchMessages([{
3566                            type: 'error',
3567                            text: data.message
3568                        }], 5000);
3569                        this.errors = 1;
3570                        this.hasCaptchaToken = 0;
3571                    } else {
3572                        window.location.href = this.checkoutUrl;
3573                    }
3574                });
3575            }
3576        }
3577    }
3578</script>
3578
3579<section id="authentication-popup"
3580         x-data="initAuthentication()"
3581         @private-content-loaded.window="onPrivateContentLoaded($event.detail.data)"
3582         @toggle-authentication.window="open = forceAuthentication; redirectIfAuthenticated(event)"
3583         @keydown.window.escape="open = false"
3584         class="hidden"
3585         :class="{ 'hidden': !open }"
3586>
3587    <div role="dialog"
3588         aria-labelledby="authentication-popup-title"
3589         aria-modal="true"
3590         @click.outside="open=false"
3591         class="fixed inset-y-0 right-0 z-50 flex max-w-full">
3592        <div class="backdrop"
3593             x-show="open"
3594             x-transition:enter="ease-in-out duration-500"
3595             x-transition:enter-start="opacity-0"
3596             x-transition:enter-end="opacity-100"
3597             x-transition:leave="ease-in-out duration-500"
3598             x-transition:leave-start="opacity-100"
3599             x-transition:leave-end="opacity-0"
3600             @click="open=false"
3601             aria-label="Close panel"></div>
3602        <div class="relative w-screen max-w-[485px] shadow-2xl"
3603             x-show="open"
3604             x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700"
3605             x-transition:enter-start="translate-x-full"
3606             x-transition:enter-end="translate-x-0"
3607             x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700"
3608             x-transition:leave-start="translate-x-0"
3609             x-transition:leave-end="translate-x-full"
3610        >
3611            <div
3612                x-show="open"
3613                x-transition:enter="ease-in-out duration-500"
3614                x-transition:enter-start="opacity-0"
3615                x-transition:enter-end="opacity-100"
3616                x-transition:leave="ease-in-out duration-500"
3617                x-transition:leave-start="opacity-100"
3618                x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex p-2 mt-3 sm:mt-7 sm:mr-6">
3619                <button @click="open=false" aria-label="Close panel"
3620                        class="p-2 text-primary transition duration-150 ease-in-out hover:text-secondary">
3621                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16" role="img">
3622    <path d="M21.82 24c-.58 0-1.13-.23-1.54-.64l-8.27-8.27-8.29 8.27a2.179 2.179 0 0 1-3.08-3.08L8.92 12 .64 3.73a2.19 2.19 0 0 1 0-3.09 2.172 2.172 0 0 1 3.08 0L12 8.92 20.27.64a2.19 2.19 0 0 1 3.09 0c.85.85.85 2.23 0 3.09L15.08 12l8.27 8.27c.85.85.85 2.24 0 3.09-.41.41-.96.64-1.54.64Z" style="fill:currentColor"/>
3623<title>x</title></svg>
3624                </button>
3625            </div>
3626            <div class="flex flex-col h-screen h-[100dvh] pt-6 pb-6 sm:pt-10 space-y-6 sm:space-y-10 bg-white shadow-xl overflow-y-auto">
3627                <header class="px-4">
3628                    <div id="authentication-popup-title" class="text-3xl font-bold leading-6 text-primary-darker">
3629                        Accedi o registrati                    </div>
3630                </header>
3631                <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm">
3632                    <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900">
3633                        <strong class="font-medium">Esegui il checkout utilizzando il tuo account</strong>
3634                    </p>
3635
3636                    <form class="form form-login"
3637                          method="post"
3638                          @submit.prevent="submitForm();"
3639                          id="login-form"
3640                    >
3641                                                <div class="fieldset login">
3642                            <div class="field email required">
3643                                <label class="label" for="form-login-username" form="login-form" >
3644                                    <span>Indirizzo email</span>
3645                                </label>
3646                                <div class="control">
3647                                    <input name="username"
3648                                           id="form-login-username"
3649                                           x-ref="customer-email"
3650                                           @change="errors = 0"
3651                                           type="email"
3652                                           required
3653                                           class="form-input input-text"
3654                                    >
3655                                </div>
3656                            </div>
3657                            <div class="field password required">
3658                                <label for="form-login-password" class="label" form="login-form">
3659                                    <span>Password</span>
3660                                </label>
3661                                <div class="control">
3662                                    <input name="password"
3663                                           id="form-login-password"
3664                                           type="password"
3665                                           class="form-input input-text"
3666                                           required
3667                                           x-ref="customer-password"
3668                                           @change="errors = 0"
3669                                    >
3670                                </div>
3671                            </div>
3672
3673                            <input name="context" type="hidden" value="checkout" />
3674                            <div class="actions-toolbar flex justify-between pt-6 pb-2 items-center">
3675                                <button type="submit"                                        class="inline-flex btn btn-primary disabled:opacity-75"
3676                                >
3677                                    Accedi                                </button>
3678                                <a href="https://www.farma.it/customer/account/forgotpassword/"
3679                                >
3680                                    Hai dimenticato la password?                                </a>
3681                            </div>
3682
3683                        </div>
3684                    </form>
3685                </div>
3686                <div class="mx-4">
3687                                    </div>
3688                <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm">
3689                    <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900">
3690                        <strong class="font-medium">Esegui il checkout come nuovo cliente</strong>
3691                    </p>
3692
3693                    <div class="block-content">
3694                        <p class="mb-1">
3695                            La creazione di un account ha molti vantaggi:                        </p>
3696                        <ul class="list-disc pl-5">
3697                            <li> Vedere lo stato dell&#039;ordine e della spedizione</li>
3698                            <li> Cronologia ordini</li>
3699                            <li> Checkout più veloce</li>
3700                        </ul>
3701                        <div class="actions-toolbar flex justify-between mt-6 mb-2 items-center">
3702                            <a href="https://www.farma.it/customer/account/create/"
3703                               class="inline-flex btn btn-primary">
3704                                Crea il tuo Account                            </a>
3705                        </div>
3706                    </div>
3707                </div>
3708            </div>
3709        </div>
3710    </div>
3711</section>
3712<!-- /BLOCK authentication-popup --></div>
3713
3714</header><div class="widget block block-static-block">
3715    </div>
3716<div class="top-container flex flex-col"><nav class="breadcrumbs order-1 " aria-label="Breadcrumb">
3717    <div class="container">
3718        <ol class="items list-reset pt-4 flex flex-wrap text-grey-1 text-xxs ">
3719                            <li class="item flex items-center  home">
3720                                    <a href="https://www.farma.it/"
3721                       class="no-underline hover:underline "
3722                       title="Vai&#x20;alla&#x20;Home&#x20;Page"
3723                    >Home</a>
3724                                                            <span aria-hidden="true" class="separator text-primary">
3725                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12.24 24" class="p-2" width="24" height="24" role="img">
3726    <path d="M1.08 23.87C.43 23.61.01 22.99 0 22.29c0-.46.18-.89.51-1.21l7.62-7.52c.86-.85.87-2.23.03-3.09l-.03-.03L.52 2.93C-.15 2.27-.16 1.2.5.53L.52.51C1.2-.17 2.29-.17 2.97.5l7.6 7.51c2.2 2.17 2.23 5.7.06 7.91l-.06.06-7.61 7.52a1.766 1.766 0 0 1-1.89.37Z" style="fill:currentColor"/>
3727<title>arrow-right</title></svg>
3728                    </span>
3729                                    </li>
3730                            <li class="item flex items-center  cms_page">
3731                                    <a href=""
3732                       class="text-gray-1 pointer-events-none "
3733                       aria-current="page"
3734                    >Farma.it - il punto dove la tua salute ha la priorità</a>
3735                                                    </li>
3736                    </ol>
3737    </div>
3738</nav>
3739<div class="widget block block-static-block">
3740    </div>
3741</div>
3741<main id="maincontent" class="page-main-full-width"><div id="algolia-autocomplete-container"></div><div id="contentarea" tabindex="-1"></div>
3742<div class="page messages">
3742<script>
3743    function initMessages() {
3744        "use strict";
3745        return {
3746            messages: window.mageMessages || [],
3747
3748            hideAfter: 4000,
3749            icons: {
3750                error: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="text-white" role="img">    <path d="M0 12a12 12 0 1 1 12 12A12.015 12.015 0 0 1 0 12Z" fill="#ea302d"/>    <path d="m12.033 13.582-.036.036-.035-.036-3.629 3.563-1.6-1.58L10.355 12 6.733 8.437l1.6-1.58 3.632 3.562.035-.033.036.033 3.626-3.562 1.606 1.58L13.646 12l3.622 3.565-1.606 1.58Z" fill="#fdeae9"/><title>message-type-error</title></svg>',
3751                success: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="text-white" role="img">    <path d="M0 12a12 12 0 1 1 12 12A12.015 12.015 0 0 1 0 12Z" fill="#10b981"/>    <path d="M9.841 16.98a1.2 1.2 0 0 1-.849-.352l-4.089-4.092 1.7-1.7 3.24 3.24 7.561-7.561 1.7 1.7-8.41 8.41a1.2 1.2 0 0 1-.853.355Z" fill="#e6f8f2"/><title>message-type-success</title></svg>',
3752                info: '<svg xmlns="http://www.w3.org/2000/svg" id="Livello_1" viewBox="0 0 24 24" class="text-white" width="20" height="20" role="img">    <path d="M12 24C5.37 24 0 18.63 0 12S5.37 0 12 0s12 5.37 12 12-5.37 12-12 12Z" style="fill:#08011a"/>    <path fill="#fff" d="M12 10c1.1 0 2 .9 2 2v5.33c0 1.1-.9 2-2 2s-2-.9-2-2V12c0-1.1.9-2 2-2ZM11.99 4.42H12c1.24 0 2.25 1.01 2.25 2.25S13.24 8.92 12 8.92h-.01c-1.24 0-2.25-1.01-2.25-2.25s1.01-2.25 2.25-2.25Z"/><title>message-type-info</title></svg>',
3753                warning: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="text-white" role="img">    <path d="M3.31 22.862a3.3 3.3 0 0 1-2.866-4.948L9.135 2.793a3.307 3.307 0 0 1 5.731 0l8.689 15.121a3.3 3.3 0 0 1-2.865 4.947Z" fill="#f9b602"/>    <path d="M13.145 14.219h-2.287V7.61h2.287ZM10.856 18.546v-2.287h2.302v2.288Z" fill="#2e2f2f"/><title>message-type-warning</title></svg>',
3754                notice: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="text-white" role="img">    <path d="M10.437 23.584a3.184 3.184 0 0 1-1.151-1.146l1.6-.93a1.214 1.214 0 0 0 .472.471 1.282 1.282 0 0 0 1.289 0 1.205 1.205 0 0 0 .471-.471l1.6.93a3.2 3.2 0 0 1-1.146 1.146A3.156 3.156 0 0 1 12 24a3.125 3.125 0 0 1-1.563-.416Zm-8.405-4.01a.929.929 0 0 1-.9-.65.9.9 0 0 1 .357-1.024 6.091 6.091 0 0 0 1.455-2.037 17.711 17.711 0 0 0 1.485-7.845 8.242 8.242 0 0 1 2.2-5.648A7.428 7.428 0 0 1 12 0a7.426 7.426 0 0 1 5.375 2.369 8.241 8.241 0 0 1 2.2 5.648 17.725 17.725 0 0 0 1.485 7.846 6.116 6.116 0 0 0 1.452 2.037.9.9 0 0 1 .352 1.02.928.928 0 0 1-.9.65Z" fill="#2e2f2f"/><title>message-type-notice</title></svg>',
3755            },
3756
3757            isEmpty() {
3758                return this.messages.reduce(
3759                    function (isEmpty, message) {
3760                        return isEmpty && message === undefined
3761                    }, true
3762                )
3763            },
3764            removeMessage(messageIndex) {
3765                this.messages[messageIndex] = undefined;
3766            },
3767            addMessages(messages, hideAfter) {
3768                messages.map((message) => {
3769                    message.icon = this.icons[message.type];
3770                    this.messages = this.messages.concat(message);
3771                    if (hideAfter) {
3772                        this.setHideTimeOut(this.messages.length - 1, hideAfter);
3773                    }
3774                });
3775            },
3776            setHideTimeOut(messageIndex, hideAfter) {
3777                setTimeout((messageIndex) => {
3778                    this.removeMessage(messageIndex);
3779                }, hideAfter, messageIndex);
3780            },
3781            animateMessage(elem) {
3782                if (elem) {
3783                    if (window.matchMedia('(min-width: 1024px)').matches) {
3784                        elem.classList.add('transition-all', 'duration-300');
3785                        elem.style.position = 'absolute';
3786                        const headerEl = document.querySelector('.header-elements');
3787                        elem.style.left = (headerEl ? headerEl.getBoundingClientRect().left : 0) + 'px';
3788                        elem.style.opacity = 1;
3789
3790                        setTimeout(() => {
3791                            elem.style.left = '0';
3792                            elem.style.opacity = 0;
3793                        }, this.hideAfter - 300);
3794                    } else {
3795                        elem.style.left = '-400px';
3796                        elem.classList.add('transition-all', 'duration-300');
3797                        elem.style.opacity = 0;
3798
3799                        setTimeout(() => {
3800                            elem.style.left = '0';
3801                            elem.style.opacity = 1;
3802                        }, 10);
3803
3804                        setTimeout(() => {
3805                            elem.style.left = '-400px';
3806                            elem.style.opacity = 0;
3807                        }, this.hideAfter - 300);
3808                    }
3809                }
3810            },
3811            eventListeners: {
3812                ['@messages-loaded.window']() {
3813                    this.addMessages(event.detail.messages, this.hideAfter)
3814                },
3815                ['@private-content-loaded.window'](event) {
3816                    const data = event.detail.data;
3817                    if (
3818                        data.messages &&
3819                        data.messages.messages &&
3820                        data.messages.messages.length
3821                    ) {
3822                        this.addMessages(data.messages.messages, this.hideAfter);
3823                    }
3824                },
3825                ['@clear-messages.window']() {
3826                    this.messages = [];
3827                }
3828            }
3829        }
3830    }
3831</script>
3831
3832<section id="messages"
3833         x-data="initMessages()"
3834         x-bind="eventListeners"
3835         class="absolute"
3836>
3837    <template x-if="!isEmpty()">
3838        <div class="w-full">
3839            <div role="alert" class="messages mx-auto py-3 pl-0 pr-[.938rem] lg:px-layoutGutter lg:px-0">
3840                <template x-for="(message, index) in messages" :key="index">
3841                    <div>
3842                        <template x-if="message">
3843                            <div class="message w-fit lg:min-w-[25rem] rounded-md relative" :class="message.type"
3844                                 :ui-id="'message-' + message.type"
3845                                 style="left: 0; max-width: 400px"
3846                                 x-init="animateMessage($el)"
3847                            >
3848                                <span x-html="message.icon" class="mr-3"></span>
3849                                <span x-html="message.text" class="pr-2"></span>
3850                                <a href="#" class="close cursor-pointer ml-auto my-auto" title="close"
3851                                   @click.prevent="removeMessage(index)">
3852                                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="text-primary" width="12" height="12" role="img">
3853    <path d="M21.82 24c-.58 0-1.13-.23-1.54-.64l-8.27-8.27-8.29 8.27a2.179 2.179 0 0 1-3.08-3.08L8.92 12 .64 3.73a2.19 2.19 0 0 1 0-3.09 2.172 2.172 0 0 1 3.08 0L12 8.92 20.27.64a2.19 2.19 0 0 1 3.09 0c.85.85.85 2.23 0 3.09L15.08 12l8.27 8.27c.85.85.85 2.24 0 3.09-.41.41-.96.64-1.54.64Z" style="fill:currentColor"/>
3854<title>x</title></svg>
3855                                </a>
3856                            </div>
3857                        </template>
3858                    </div>
3859                </template>
3860            </div>
3861        </div>
3862    </template>
3863</section>
3864</div><div class="columns"><div class="column main">
3864<script>
3865    document.addEventListener("alpine:init", () => {
3866        Alpine.store('ajaxPrices', {
3867            nodesToUpdate: [],
3868            prices: [],
3869            options: {
3870                additional_data: {}
3871            },
3872
3873            hasPrice(productId){
3874                return this.getPriceFloat(productId) != null;
3875            },
3876
3877            getPriceHtml(productId) {
3878                if (!(productId in this.prices)) {
3879                    return null;
3880                }
3881                return this.prices[productId]['html'];
3882            },
3883
3884            getPriceFloat(productId) {
3885                if (!(productId in this.prices)) {
3886                    return null;
3887                }
3888                return this.prices[productId]['float'];
3889            },
3890
3891            addNode(productId) {
3892                if (!productId) {
3893                    return
3894                }
3895
3896                this.nodesToUpdate.push({
3897                    "productId": productId,
3898                });
3899
3900                Alpine.debounce(this.updateNodes.bind(this), 150)();
3901            },
3902
3903            updateNodes() {
3904                var nodes = this.nodesToUpdate;
3905                this.nodesToUpdate = [];
3906
3907                this.processNodes(nodes);
3908            },
3909
3910            processNodes(nodes) {
3911                var self = this,
3912                    idsToLoad = [],
3913                    containerToReload = [];
3914
3915                nodes.forEach(function (node) {
3916                    var productId = node.productId;
3917
3918                    if (productId in self.prices) {
3919                        //self.apply(node);
3920                        return; //continue
3921                    }
3922
3923                    idsToLoad.push(productId);
3924
3925                    containerToReload.push(node);
3926                });
3927
3928                if (idsToLoad.length) {
3929                    self.get(idsToLoad, function () {
3930                        self.processNodes(containerToReload);
3931                    });
3932                }
3933            },
3934
3935            store: function (prices) {
3936                this.prices = Object.assign(this.prices, prices);
3937            },
3938
3939            get(ids, callback) {
3940
3941                var self = this,
3942                    params = '/ids/' + ids.join();
3943
3944                let additionalParams = this.options.additional_data;
3945                params += "?" + new URLSearchParams(additionalParams).toString();
3946
3947                fetch(BASE_URL + 'ajaxprices/price/render' + params)
3948                    .then((response) => response.json())
3949                    .then((data) => {
3950                        if (data.error) {
3951                            console.error("ajax_price_error: " + data.errorMessage)
3952                            return;
3953                        }
3954
3955                        var prices = data.data;
3956                        self.store(prices);
3957                        callback();
3958                    });
3959            }
3960        });
3961    });
3962</script>
3962
3963
3964<script>
3965    document.addEventListener("alpine:init", () => {
3966        Alpine.store('badges', {
3967            nodesToUpdate: [],
3968            badges: [],
3969            productBadges: [],
3970            options: {
3971                additional_data: {}
3972            },
3973
3974            getBadgesHtml(productId, position) {
3975                if (!(productId in this.productBadges) || !(position in this.productBadges[productId])) {
3976                    return [];
3977                }
3978                let index = this.productBadges[productId][position],
3979                    self = this,
3980                    badges = [];
3981
3982                index.forEach(function (element) {
3983                    badges.push(self.badges[element]);
3984                });
3985                return badges;
3986            },
3987
3988            addNode(productId, position) {
3989                this.nodesToUpdate.push({
3990                    "productId": productId,
3991                    "position": position
3992                });
3993
3994                Alpine.debounce(this.updateNodes.bind(this), 150)();
3995            },
3996
3997            updateNodes() {
3998                var nodes = this.nodesToUpdate;
3999                this.nodesToUpdate = [];
4000
4001                this.processNodes(nodes);
4002            },
4003
4004            processNodes(nodes) {
4005                var self = this,
4006                    idsToLoad = [],
4007                    containerToReload = [];
4008
4009                nodes.forEach(function (node) {
4010                    var productId = node.productId;
4011
4012                    if (self.productBadges[productId]) {
4013                        //self.apply(node);
4014                        return; //continue
4015                    }
4016
4017                    idsToLoad.push(productId);
4018                    containerToReload.push(node);
4019                });
4020
4021                if (idsToLoad.length) {
4022                    self.get(idsToLoad, function () {
4023                        self.processNodes(containerToReload);
4024                    });
4025                }
4026            },
4027
4028            store: function (badges, productBadges) {
4029                this.badges = Object.assign(this.badges, badges);
4030                this.productBadges = Object.assign(this.productBadges, productBadges);
4031            },
4032
4033            get(ids, callback) {
4034                var self = this,
4035                    params = '/ids/' + ids.join();
4036
4037                let additionalParams = this.options.additional_data;
4038                params += "?" + new URLSearchParams(additionalParams).toString();
4039
4040                fetch(BASE_URL + 'badge/api/get' + params)
4041                    .then((response) => response.json())
4042                    .then((data) => {
4043                        if (data.error) {
4044                            console.error("badges_error: " + data.errorMessage)
4045                            return;
4046                        }
4047
4048                        var badges = data.data.badges,
4049                            productBadges = data.data.productBadges;
4050
4051                        self.store(badges, productBadges);
4052                        callback();
4053                    });
4054            }
4055        });
4056    });
4057</script>
4057
4058
4059
4060<script>
4061    document.addEventListener("alpine:init", () => {
4062        Alpine.store('omnibusPrices', {
4063            nodesToUpdate: [],
4064            prices: [],
4065            options: {
4066                additional_data: {}
4067            },
4068
4069            hasPrice(productId){
4070                return this.getPriceHtml(productId) != null;
4071            },
4072
4073            getPriceHtml(productId) {
4074                if (!(productId in this.prices)) {
4075                    return null;
4076                }
4077                return this.prices[productId];
4078            },
4079
4080            addNode(productId, position) {
4081                this.nodesToUpdate.push({
4082                    "productId": productId,
4083                });
4084
4085                Alpine.debounce(this.updateNodes.bind(this), 150)();
4086            },
4087
4088            updateNodes() {
4089                var nodes = this.nodesToUpdate;
4090                this.nodesToUpdate = [];
4091
4092                this.processNodes(nodes);
4093            },
4094
4095            processNodes(nodes) {
4096                var self = this,
4097                    idsToLoad = [],
4098                    containerToReload = [];
4099
4100                nodes.forEach(function (node) {
4101                    var productId = node.productId;
4102
4103                    if (productId in self.prices) {
4104                        //self.apply(node);
4105                        return; //continue
4106                    }
4107
4108                    idsToLoad.push(productId);
4109                    containerToReload.push(node);
4110                });
4111
4112                if (idsToLoad.length) {
4113                    self.get(idsToLoad, function () {
4114                        self.processNodes(containerToReload);
4115                    });
4116                }
4117            },
4118
4119            store: function (prices) {
4120                this.prices = Object.assign(this.prices, prices);
4121            },
4122
4123            get(ids, callback) {
4124                var self = this,
4125                    params = '/ids/' + ids.join();
4126
4127                let additionalParams = this.options.additional_data;
4128                params += "?" + new URLSearchParams(additionalParams).toString();
4129
4130                fetch(BASE_URL + 'omnibus/ajax/render' + params)
4131                    .then((response) => response.json())
4132                    .then((data) => {
4133                        if (data.error) {
4134                            console.error("omnibus_prices_error: " + data.errorMessage)
4135                            return;
4136                        }
4137
4138                        var prices = data.data;
4139                        self.store(prices);
4140                        callback();
4141                    });
4142            }
4143        });
4144    });
4145</script>
vendor: 1 bytes, line 4145
4145
4146<script nonce="MHpuY3ZpbGdvM2N2bm5jdTlmMnlzaXFxaHFmbzMzajY=">
4147    var feedId = getUrlParam('ff'),
4148        product = getUrlParam('fp'),
4149        currentDate = new Date(),
4150        session = getCookie('feed_session');
4151
4152    if (!session) {
4153        session = '' + Math.floor(currentDate.getTime() / 1000) + Math.floor(Math.random() * 10000001);
4154    }
4155
4156    if (session && feedId > 0 && product > 0) {
4157        setCookie('feed_session', session, {expires: 365, path: '/'});
4158        setCookie('feed_id', feedId, 365);
4159
4160        var xhr = new XMLHttpRequest(),
4161            baseUrl = 'https://www.farma.it/',
4162            url = BASE_URL + '?rnd=' + Math.floor(Math.random() * 10000001) + "&feed=" + feedId + "&session=" + session + "&product=" + product;
4163
4164        xhr.open('GET', url, true);
4165        xhr.setRequestHeader('Content-Type', 'application/json');
4166        xhr.send();
4167    }
4168
4169    function getUrlParam(name) {
4170        let results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
4171
4172        if (results === null) {
4173            return '';
4174        } else {
4175            return results[1] || 0;
4176        }
4177    }
4178
4179    function getCookie(cookieName) {
4180        var name = cookieName + "=",
4181            decodedCookie = decodeURIComponent(document.cookie),
4182            cookieArray = decodedCookie.split(';');
4183
4184        for (var i = 0; i < cookieArray.length; i++) {
4185            var cookie = cookieArray[i].trim();
4186            if (cookie.indexOf(name) === 0) {
4187                return cookie.substring(name.length, cookie.length);
4188            }
4189        }
4190
4191        return null;
4192    }
4193
4194    function setCookie(cookieName, cookieValue, expirationDays) {
4195        var d = new Date();
4196        d.setTime(d.getTime() + (expirationDays * 24 * 60 * 60 * 1000));
4197        var expires = "expires=" + d.toUTCString();
4198        document.cookie = cookieName + "=" + cookieValue + ";" + expires + ";path=/";
4199    }
4200</script>
4200
4201<style>#html-body [data-pb-style=BV4MPVS],#html-body [data-pb-style=GBNRKV1]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=BV4MPVS]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=GBNRKV1]{align-self:stretch}#html-body [data-pb-style=HC8PRCR]{display:flex;width:100%}#html-body [data-pb-style=LWR9TT5],#html-body [data-pb-style=QP0Q4E0]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:50%;align-self:stretch}#html-body [data-pb-style=BXIQD50]{margin-top:10px;margin-bottom:10px;border-style:none}#html-body [data-pb-style=AA7NMAO],#html-body [data-pb-style=W1O4L6W]{max-width:100%;height:auto}#html-body [data-pb-style=X858NDS]{margin-top:10px;margin-bottom:10px;border-style:none}#html-body [data-pb-style=N812EAA],#html-body [data-pb-style=T964SSS]{max-width:100%;height:auto}@media only screen and (max-width: 767px) { #html-body [data-pb-style=BXIQD50],#html-body [data-pb-style=X858NDS]{border-style:none} }</style><div class="ul-enhanced" data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-intersect="false" data-element="main" data-pb-style="BV4MPVS"><div class="row-full-width-inner" data-element="inner"><h1 class="font-baloo-bhaina font-bold text-2xl lg:text-3xl md:mb-4" data-content-type="heading" data-appearance="default" data-intersect="false" data-element="main">&Egrave; arrivata l'app FARMA.IT</h1><div data-content-type="html" data-appearance="default" data-intersect="false" data-element="main" data-decoded="true"><style>
4202   .image-full-width img {
4203     width: 100%;
4204   }
4205</style> </div><div class="mb-4 md:mb-6" data-content-type="text" data-appearance="default" data-intersect="false" data-element="main"><h2>Starti vicino per noi &egrave; una priorit&agrave;!</h2>
4206<p>Per questo abbiamo lanciato la nuova app FARMA.IT.</p>
4207<p>Scopri un modo pi&ugrave; comodo e veloce per portarci sempre con te.</p>
4208<p>Tutto il nostro catalogo, le nostre offerte e le informazioni sui tuoi ordini, in una comoda app.</p></div><h2 class="mb-4" data-content-type="heading" data-appearance="default" data-intersect="false" data-element="main">Scarica subito l'app!</h2><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-intersect="false" data-element="main" data-pb-style="GBNRKV1"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="HC8PRCR"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-intersect="false" data-element="main" data-pb-style="QP0Q4E0"><figure data-content-type="image" data-appearance="full-width" data-intersect="false" data-element="main" data-pb-style="BXIQD50"><a href="https://play.google.com/store/apps/details?id=com.developer.farmait" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.farma.it/media/wysiwyg/FarmaIT_App_Dwnl_2-7818d2f2.webp"><img class="pagebuilder-mobile-hidden" src="https://www.farma.it/media/wysiwyg/FarmaIT_App_Dwnl_2.png" alt="" title="" data-element="desktop_image" data-pb-style="AA7NMAO" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.farma.it/media/wysiwyg/FarmaIT_App_Dwnl_2-7818d2f2.webp"><img class="pagebuilder-mobile-only" src="https://www.farma.it/media/wysiwyg/FarmaIT_App_Dwnl_2.png" alt="" title="" data-element="mobile_image" data-pb-style="W1O4L6W" loading="lazy"></picture></a></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-intersect="false" data-element="main" data-pb-style="LWR9TT5"><figure data-content-type="image" data-appearance="full-width" data-intersect="false" data-element="main" data-pb-style="X858NDS"><a href="https://apps.apple.com/it/app/farma-it/id6740766576" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.farma.it/media/wysiwyg/FarmaIT_App_Dwnl_1-efb0c529.webp"><img class="pagebuilder-mobile-hidden" src="https://www.farma.it/media/wysiwyg/FarmaIT_App_Dwnl_1.png" alt="" title="" data-element="desktop_image" data-pb-style="N812EAA" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.farma.it/media/wysiwyg/FarmaIT_App_Dwnl_1-efb0c529.webp"><img class="pagebuilder-mobile-only" src="https://www.farma.it/media/wysiwyg/FarmaIT_App_Dwnl_1.png" alt="" title="" data-element="mobile_image" data-pb-style="T964SSS" loading="lazy"></picture></a></figure></div></div></div></div></div>
4208<script>
4209    function hasWebP() {
4210        var elem = document.createElement('canvas');
4211
4212        if (!!(elem.getContext && elem.getContext('2d'))) {
4213            return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0;
4214        }
4215        return false;
4216    }
4217
4218    if (hasWebP()) {
4219        document.body.classList.add("webp");
4220    } else {
4221        document.body.classList.add("no-webp");
4222    }
4223</script>
4223
4224</div></div></main><footer class="page-footer mt-auto">
4225                                        <div style="background-image: url('https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/bg_newsletter.webp');
4226                    font-size: justify-content: flex-start;
4227                    display: flex;
4228                    flex-direction: column;
4229                    background-position: left top;
4230                    background-size: cover;
4231                    background-repeat: no-repeat;
4232                    background-attachment: scroll;"
4233                >
4234                    <div class="container">
4235                        <div class="py-8 md:py-10 scroll-mt-36" id="newsletter_footer">
4236    <form class="form subscribe rounded-full" action="https://www.farma.it/newsletter/subscriber/new/" method="post" x-data="initNewsletterForm()" @submit.prevent="submitForm()" id="newsletter-validate-detail">
4237        <div class="flex flex-wrap justify-start gap-2">
4238            <label for="newsletter-subscribe" class="sr-only" role="img" aria-label="Indirizzo&#x20;email">
4239                Indirizzo email            </label>
4240
4241            <input name="form_key" type="hidden" x-bind:value="window.hyva.getFormKey()">
4242            <div class="control">
4243    <input type="hidden"
4244           value=""
4245           name="g-recaptcha-response"
4246    >
4247</div>
4248
4249            <div class="w-full md:grid grid-cols-12 items-center xl:items-end">
4250                <div class="col-span-5 text-white mb-6">
4251                    <h4 class="h2 font-bold font-baloo-bhaina text-white mb-2 md:mb-4">Non perderti nulla!<br/>Iscriviti alla nostra Newsletter</h4>
4252                    <p>Ti basta un ultimo click per completare l’iscrizione e iniziare a ricevere subito tutti i <strong>nostri aggiornamenti</strong> e le <strong>nostre promozioni.</strong></p>
4253                </div>
4254                <div></div>
4255                <div class="col-span-6 order-3 md:mb-6">
4256                    <div class="control input-group flex gap-x-2.5 md:gap-x-4 relative">
4257                        <input class="input-text form-control py-2 form-input pl-12" name="email" type="email" required id="newsletter-subscribe"
4258                               x-bind:placeholder="window.matchMedia('(max-width: 700px)').matches ?
4259                               'Inserisci&#x20;e-mail&#x20;&#x2A;' :
4260                               'Inserisci&#x20;indirizzo&#x20;e-mail&#x20;&#x2A;'">
4261                        <div class="absolute top-0 left-3 py-3.5 pl-1">
4262                            <?xml version="1.0" encoding="UTF-8"?>
4263<svg xmlns="http://www.w3.org/2000/svg" id="Livello_1" viewBox="0 0 24 21.95" class="w-5 h-5" width="24" height="24" role="img">
4264    <path fill="#5E24C2" d="m19.19,21.95H4.81c-2.65,0-4.8-2.16-4.81-4.81V4.81C0,2.16,2.16,0,4.81,0h14.38c2.65,0,4.8,2.16,4.81,4.81v12.32c0,2.65-2.16,4.8-4.81,4.81ZM1.4,5.57v11.57c0,1.88,1.53,3.4,3.41,3.41h14.38c1.88,0,3.4-1.53,3.4-3.41V5.57l-7.19,7.19c-1.88,1.88-4.93,1.88-6.81,0L1.4,5.57ZM4.81,1.4c-1.39,0-2.64.85-3.15,2.14l-.08.2,8.02,8.02c1.33,1.33,3.48,1.33,4.82,0L22.43,3.75l-.08-.2c-.51-1.3-1.76-2.15-3.16-2.14H4.81Z"/>
4265<title>footer/icon_email</title></svg>
4266                        </div>
4267                        <div class="input-group-append">
4268                            <button class="btn btn-secondary h-full">
4269                                Iscriviti                            </button>
4270                        </div>
4271                    </div>
4272                    <div class="flex gap-2 mt-3 pl-5 max-w-lg">
4273                        
4274        <div x-data="{
4275            checked: false,
4276            consentId: 5         }"
4277         id="checkbox-0"
4278         class="flex w-full last:mb-3">
4279        <div
4280            class="flex flex-wrap field choice ">
4281            <input type="hidden" name="amgdpr_agreement[newsletter_privacy_policy]"
4282                   value="0"/>
4283            <div class="flex flex-row">
4284                <input type="checkbox"
4285                       name="amgdpr_agreement[newsletter_privacy_policy]"
4286                       title="Newsletter - Privacy Policy"
4287                       value="1"
4288                       id="amprivacy-checkbox-6ac8d380ac07d"
4289                       class="amgdpr-consent-checkbox mt-0.5"
4290                       x-model="checked"
4291                       @amgdpr-consent-accepted.window="event.detail === consentId && (checked = true)"
4292                                            required
4293                     />
4294                <label for="amprivacy-checkbox-6ac8d380ac07d"
4295                       class="label">
4296                <span class="amgdpr-consent-span">
4297                    Letta l’<a href="/privacy-policy" target="_blank" class="underline">informativa privacy</a>, presto il mio consenso per ricevere newsletter e/o DEM                </span>
4298                </label>
4299            </div>
4300            <div class="h-0 w-full"></div>
4301        </div>
4302
4303        <input type="hidden"
4304               name="am-gdpr-checkboxes-from"
4305               value="subscription"/>
4306    </div>
4307<policy-placeholder></policy-placeholder>
4308                    </div>
4309                </div>
4310            </div>
4311        </div>
4312        <div>
4313            <template x-if="displayErrorMessage">
4314                <p class="flex items-center mage-error">
4315                    <span class="inline-block w-8 h-8 mr-3">
4316                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img">
4317  <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
4318<title>exclamation-circle</title></svg>
4319                    </span>
4320                    <template x-for="errorMessage in errorMessages">
4321                        <span x-html="errorMessage"></span>
4322                    </template>
4323                </p>
4324            </template>
4325        </div>
4326    </form>
4327    <div class="w-full text-white">
4328        <p class="legal-notice my-2 text-xxs">
4329    Questo form è protetto da reCAPTCHA - vi si applicano la <a class="underline" href="https://policies.google.com/privacy" target="_blank" rel="noopener">Privacy Policy</a> e i <a class="underline" href="https://policies.google.com/terms" target="_blank" rel="noopener">Termini di Servizio</a> di Google.</p>
4330    </div>
4331    
4331<script type="text/javascript">
4332        function initNewsletterForm() {
4333            return {
4334                errors: 0,
4335                hasCaptchaToken: 0,
4336                displayErrorMessage: false,
4337                errorMessages: [],
4338                setErrorMessages(messages) {
4339                    this.errorMessages = [messages]
4340                    this.displayErrorMessage = this.errorMessages.length
4341                },
4342                submitForm() {
4343                    // Do not rename $form, the variable is expected to be declared in the recaptcha output
4344                    const $form = document.querySelector('#newsletter-validate-detail');
4345                        if (!this.hasCaptchaToken) {
4346        this.errors = 1;
4347
4348        const lockSubmitButton = () => {
4349            $form.querySelector('[type="submit"]')?.setAttribute('disabled', true);
4350        };
4351
4352        const failCaptcha = (errorMessage, exception = null) => {
4353            this.errors = 1;
4354            lockSubmitButton();
4355
4356            if (this.setErrorMessages) {
4357                this.setErrorMessages([errorMessage]);
4358                this.displayErrorMessage = true;
4359            } else {
4360                window.dispatchMessages && window.dispatchMessages([{ type: "error", text: errorMessage }], 5000);
4361            }
4362
4363            if (exception) {
4364                console.error(
4365                    exception ||
4366                    'An unknown error occurred during ReCaptcha validation. Are the tokens and the domain correctly set up in the Google console?'
4367                );
4368            }
4369        };
4370
4371        const executeGreCaptcha = () => {
4372            grecaptcha.ready(() => {
4373                grecaptcha.execute(
4374                    '6LdDii8sAAAAAF1j_v4WIzmCV2phMFuJKWeFtEhJ',
4375                    {action: 'submit'}
4376                ).then((token) => {
4377                    const tokenElement = $form['g\u002Drecaptcha\u002Dresponse'];
4378
4379                    if (tokenElement && token && token.length > 0) {
4380                        $form['g\u002Drecaptcha\u002Dresponse'].value = token;
4381                        this.errors = 0;
4382                        this.hasCaptchaToken = 1;
4383                        (this.submitForm || $form.submit).call(this);
4384                    } else {
4385                        failCaptcha(
4386                            tokenElement
4387                                ? 'ReCaptcha\u0020validation\u0020failed.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020try\u0020again.'
4388                                : 'ReCaptcha\u0020token\u0020element\u0020is\u0020missing.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020try\u0020again.'
4389                        );
4390                    }
4391                }).catch((exception) => {
4392                    failCaptcha(
4393                        'ReCaptcha\u0020validation\u0020failed\u0020due\u0020to\u0020a\u0020technical\u0020error.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020try\u0020again.',
4394                        exception
4395                    );
4396                });
4397            });
4398        };
4399
4400        if (window.grecaptcha) {
4401            executeGreCaptcha();
4402        } else {
4403            const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6LdDii8sAAAAAF1j_v4WIzmCV2phMFuJKWeFtEhJ";
4404            const script = document.createElement('script');
4405            script.setAttribute('type', 'text/javascript');
4406            script.setAttribute('src', recaptchaUrl);
4407            document.head.appendChild(script);
4408
4409            script.addEventListener("load", executeGreCaptcha, false);
4410        }
4411    }
4412
4413                    if (this.errors === 0) {
4414                        $form.submit();
4415                    }
4416                }
4417            }
4418        }
4419    </script>
4419
4420</div>
4421                    </div>
4422                </div>
4423                        <div x-data="{ show: false }"  x-intersect.once.margin.200px="show = true" x-init="$watch('show', (value) => { if (value) { $nextTick(() => { $dispatch('footer:added') }); } } )" class="dna-footer-item " id="dna-footer-item_footer">
4424                 <template x-if="show">
4425                                 <div class="dna-footer-item-content">
4426                         <div data-content-type="html" data-appearance="default" data-intersect="false" data-element="main" data-decoded="true"><div class="bg-container-gray">
4427    <div class="lg:grid grid-cols-10 justify-between w-full py-5 md:pt-10 md:pb-8 xl:gap-8 container bg-container-gray pt-2">
4428        <div class="md:grid grid-cols-3 col-span-7 md:mr-8 gap-2">
4429            <div class="overflow-hidden md:mb-8 lg:mb-0 mb-3" x-data="{open: false}">
4430                <h5 class="font-bold md:pb-4 pt-3 md:pt-0 md:pb-3 flex justify-between font-baloo-bhaina" @click="open = !open">farma.it
4431                    <span class="text-xl md:hidden items-center flex" x-show="!open">
4432                        <img class='w-3 h-3' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/icon/icon_arrow_down.svg" alt="down"/>
4433                    </span>
4434                    <span class="text-xl md:hidden items-center flex" x-show="open">
4435                        <img class='w-3 h-3' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/icon/icon_arrow_up.svg" alt="up"/>
4436                    </span>
4437                </h5>
4438
4439                <ul class="md:block transition-all md:h-auto md:mb-0 md:!h-auto" :class="open ? '' : 'h-0'"
4440                    x-bind:style="open ? 'height:' + $el.childElementCount * 27 /* 25px element child width */ + 'px' : ''">
4441                    <li class="py-0.5"><a href="/chi-siamo" class="text-xs md:text-base hover:text-secondary">La nostra Azienda</a></li>
4442                    <li class="py-0.5"><a href="/coupon-e-promo" class="text-xs md:text-base hover:text-secondary">Coupon</a></li>
4443                    <li class="py-0.5"><a href="/farma-lovers" class="text-xs md:text-base hover:text-secondary">Programma Fedeltà Farma Lovers</a></li>
4444                    <li class="py-0.5"><a href="/lavora-con-noi" class="text-xs md:text-base hover:text-secondary">Lavora con noi</a></li>
4445                    <li class="py-0.5"><a href="/blog" class="text-xs md:text-base hover:text-secondary">I nostri consigli</a></li>
4446                    <li class="py-0.5"><a href="/parita-di-genere" class="text-xs md:text-base hover:text-secondary">Politiche per la parità di genere</a></li>
4447                </ul>
4448            </div>
4449
4450            <div class="overflow-hidden mb-3" x-data="{open: false}">
4451                <h5 class="font-bold md:pb-4 pt-3 md:pt-0 md:pb-3 flex justify-between font-baloo-bhaina" @click="open = !open">Servizi clienti
4452                    <span class="text-xl md:hidden items-center flex" x-show="!open">
4453                        <img class='w-3 h-3' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/icon/icon_arrow_down.svg" alt="down"/>
4454                    </span>
4455                    <span class="text-xl md:hidden items-center flex" x-show="open">
4456                        <img class='w-3 h-3' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/icon/icon_arrow_up.svg" alt="up"/>
4457                    </span>
4458                </h5>
4459
4460                <ul class="md:block transition-all md:h-auto md:mb-0 md:!h-auto" :class="open ? '' : 'h-0'"
4461                    x-bind:style="open ? 'height:' + $el.childElementCount * 27 + 'px' : ''">
4462                    <li class="py-0.5"><a href="/contattaci" class="text-xs md:text-base hover:text-secondary">Contattaci</a></li>
4463                    <li class="py-0.5"><a href="/richiamami" class="text-xs md:text-base hover:text-secondary">Richiamami</a></li>
4464                    <!-- <li class="py-0.5"><a href="/sales/guest/form" class="text-xs md:text-base hover:text-secondary">Stato dell'ordine</a></li> -->
4465                    <li class="py-0.5"><a href="/faq" class="text-xs md:text-base hover:text-secondary">FAQ</a></li>
4466                    <li class="py-0.5"><a href="/rma/guest/login" class="text-xs md:text-base hover:text-secondary">Resi</a></li>
4467                </ul>
4468            </div>
4469
4470            <div class="overflow-hidden mb-3" x-data="{open: false}">
4471                <h5 class="font-bold md:pb-4 pt-3 md:pt-0 md:pb-3 flex justify-between font-baloo-bhaina" @click="open = !open">Condizioni di vendita
4472                    <span class="text-xl md:hidden items-center flex" x-show="!open">
4473                        <img class='w-3 h-3' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/icon/icon_arrow_down.svg" alt="down"/>
4474                    </span>
4475                    <span class="text-xl md:hidden items-center flex" x-show="open">
4476                        <img class='w-3 h-3' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/icon/icon_arrow_up.svg" alt="up"/>
4477                    </span>
4478                </h5>
4479
4480                <ul class="md:block transition-all md:h-auto md:mb-0 md:!h-auto text-xs md:text-base " :class="open ? '' : 'h-0'"
4481                    x-bind:style="open ? 'height:' + $el.childElementCount * 27 + 'px' : ''">
4482                    <li class="py-0.5"><a href="/pagamenti-e-condizioni" class="hover:text-secondary">Pagamenti & Condizioni</a></li>
4483                    <li class="py-0.5"><a href="/spedizioni" class="hover:text-secondary">Spedizioni</a></li>
4484                    <li class="py-0.5"><a href="/privacy-policy" class="hover:text-secondary">Privacy Policy</a></li>
4485                    <li class="py-0.5"><a href="/cookie-policy" class="hover:text-secondary">Cookie Policy</a></li>
4486                    <li class="py-0.5"><a href="/comunicazioni" class="hover:text-secondary">Comunicazioni</a></li>
4487                    <li class="py-0.5"><span class="hover:text-secondary cursor-pointer" onclick="Cookiebot.show();preventDefault()">Gestisci Cookie</span>
4488                    <li class="py-0.5"><a href="/garanzia-legale" class="hover:text-secondary">Garanzia legale UE – almeno 2 anni</a></li>
4489                    </li>
4490                </ul>
4491            </div>
4492
4493            <div class="overflow-hidden" x-data="{open: false}">
4494                <h5 class="font-bold md:pb-4 pt-3 md:pt-0 md:pb-3 flex justify-between font-baloo-bhaina pb-3" @click="open = !open">Servizi Offerti
4495                    <span class="text-xl md:hidden items-center flex" x-show="!open">
4496                        <img class='w-3 h-3' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/icon/icon_arrow_down.svg" alt="down"/>
4497                    </span>
4498                    <span class="text-xl md:hidden items-center flex" x-show="open">
4499                        <img class='w-3 h-3' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/icon/icon_arrow_up.svg" alt="up"/>
4500                    </span>
4501                </h5>
4502
4503                <ul class="md:block transition-all md:h-auto md:mb-0 md:!h-auto" :class="open ? 'mb-3' : 'h-0'"
4504                    x-bind:style="open ? 'height:' + $el.childElementCount * 32 + 'px' : ''">
4505                    <li class="mb-3"><p class="text-xs md:text-base flex gap-2 items-center">
4506                        <img class='w-5 h-5' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/icon/icon_discount.svg" alt="discount"/>Tantissimi Sconti</p></li>
4507                    <li class="mb-3"><p class="text-xs md:text-base flex gap-2 items-center">
4508                        <img class='w-5 h-5' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/icon/icon_lock.svg" alt="lock"/>Transazione Sicura</p></li>
4509                    <li class="mb-3"><p class="text-xs md:text-base flex gap-2 items-center">
4510                        <img class='w-5 h-5' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/icon/icon_return.svg" alt="return"/>Reso Facile e Veloce</p></li>
4511                    <li><p class="text-xs md:text-base flex gap-2 items-center">
4512                        <img class='w-5 h-5' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/icon/icon_shield.svg" alt="shield"/>Garanzia</p></li>
4513                </ul>
4514            </div>
4515
4516            <div class="overflow-hidden md:w-40">
4517                <h5 class="font-bold md:pb-4 pb-3 pt-3 md:pt-0 md:pb-3 font-baloo-bhaina">
4518                    Pagamenti Veloci & Sicuri
4519                </h5>
4520
4521                <div class="mb-4 flex gap-1.5 md:gap-2 flex-wrap">
4522                    <img title="Visa" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/payment/visa.svg" alt="visa"/>
4523                    <img title="PayPal" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/payment/paypal.svg" alt="PayPal"/>
4524                    <img title="Mastercard" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/payment/mastercard.svg" alt="Mastercard"/>
4525                    <img title="Maestro" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/payment/maestro.svg" alt="Maestro"/>
4526                    <img title="Discover" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/payment/discover.svg" alt="Discover"/>
4527                    <img title="Amex" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/payment/amex.svg" alt="Amex"/>
4528                    <img title="Satispay" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/payment/klarna.svg" alt="Klarna"/>
4529                    <img title="Satispay" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/payment/satispay.svg" alt="Satispay"/>
4530                    <img title="Contrassegno" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/payment/contrassegno.svg" alt="Contrassegno"/>
4531                    <img title="Bonifico" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/payment/bonifico.svg" alt="Bonifico"/>
4532                    <img title="Google Pay" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/media/wysiwyg/Google_Pay_Logo_Orlandi.svg" alt="Google Pay"/>
4533                    <img title="Apple Pay" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/media/wysiwyg/Apple_Pay_logo_Orlandi.svg" alt="Apple Pay"/>
4534                </div>
4535            </div>
4536
4537            <div class="overflow-hidden md:w-40">
4538                <h5 class="font-bold md:pb-4 pb-3 pt-3 md:pt-0 font-baloo-bhaina">Consegna Gratuita in 24/72h</h5>
4539
4540                <div class="mb-4 flex gap-1.5 md:gap-2 flex-wrap">
4541                    <img title="GLS" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/carrier/gls.svg" alt="GLS"/>
4542                    <img title="UPS" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/carrier/ups.svg" alt="UPS"/>
4543<!-- <img title="Liccardi" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/media/wysiwyg/liccardi_orlandi.svg" alt="Liccardi"/> -->
4544<img title="InPost" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/media/wysiwyg/inpost_orlandi.svg" alt="InPost"/>
4545<!-- <img title="Amazon Shipping" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/media/wysiwyg/amazon-shipping_orlandi.svg" alt="Amazon Shipping"/> -->
4546                </div>
4547            </div>
4548        </div>
4549
4550        <div class="col-span-3">
4551            <div>
4552                <div>
4553                    <h5 class="font-bold md:pb-4 pb-3 pt-3 md:pt-0 md:pb-3 font-baloo-bhaina">Sito sicuro</h5>
4554                </div>
4555
4556                <div class="gap-4 mb-4 md:mb-9 md:flex">
4557<div style="display:flex;flex-direction:column;gap:8px;margin-bottom:8px">
4558<div class="feedaty_widget" data-ver="2021" data-id="66ab4361b28b3" data-type="merchant" data-variant="200x150-4" data-lang="all" data-gui="all"></div>
4559<a target="_blank" rel="noopener" href="https://www.farma.it/garanzia-legale">                                                                                                                                           
4560                              <picture class="rounded-lg md:mb-4 !block"><source type="image/webp" srcset="https://www.farma.it/media/wysiwyg/footer/badge/GARAN_Label_colour-968cd542.webp"><img loading="lazy" class="rounded-lg md:mb-4 !block" src="https://www.farma.it/media/wysiwyg/footer/badge/GARAN_Label_colour.jpg" alt="Garanzia Legale" style="width:140px;height:auto" loading="lazy"></picture>                                       
4561                          </a>
4562</div>
4563                    <div>
4564                        <a target="_blank" href="https://www.trovaprezzi.it/negozi/farmait">
4565                            <picture class="rounded-lg mb-2 md:mb-4 !block !visible"><source type="image/webp" srcset="https://www.farma.it/media/wysiwyg/footer/badge/trovaprezzi-418bf217.webp"><img loading="lazy" class="rounded-lg mb-2 md:mb-4 !block !visible" src="https://www.farma.it/media/wysiwyg/footer/badge/trovaprezzi.jpg" alt="Trovaprezzi" loading="lazy"></picture>
4566                        </a>
4567                        <a target="_blank" href="https://www.prezzifarmaco.it/scheda-negozio/farmait-by-antica-farmacia-orlandi-501">
4568                            <picture class="rounded-lg md:mb-4 !block !visible"><source type="image/webp" srcset="https://www.farma.it/media/wysiwyg/footer/badge/prezzifarmaco-5edf662d.webp"><img loading="lazy" class="rounded-lg md:mb-4 !block !visible" src="https://www.farma.it/media/wysiwyg/footer/badge/prezzifarmaco.jpg" alt="Prezzi Farmaco" loading="lazy"></picture>
4569                        </a>
4570<a href="https://www.farma.it/farmacia-antifumo">
4571                     <picture><source type="image/webp" srcset="https://www.farma.it/media/wysiwyg/footer/bollino_rettangolare_OK_1-ce63bed2.webp"><img src="https://www.farma.it/media/wysiwyg/footer/bollino_rettangolare_OK_1.png" alt="SITAB" loading="lazy" /></picture>
4572</a>
4573                    </div>
4574                </div>
4575            </div>
4576
4577            <div class="mb-8">
4578                <p class="text-xs mb-2 md:mb-4">Cliccando il badge, puoi verificare che Farma.it è un'entità regolarmente autorizzata dal Ministero della Salute a effettuare la vendita online di medicinali.</p>
4579
4580                <div class="flex gap-2 mb-6 md:mb-8">
4581                    <a target="_blank" href="https://www.salute.gov.it/LogoCommercioElettronico/CercaSitoEComm?useMode=getDettaglio&amp;VOLID=C016715">
4582                        <picture class="rounded-lg !block !visible"><source type="image/webp" srcset="https://www.farma.it/media/wysiwyg/footer/badge/farmacia-d29fbe1b.webp"><img loading="lazy" class="rounded-lg !block !visible" src="https://www.farma.it/media/wysiwyg/footer/badge/farmacia.jpg" alt="farmacia" loading="lazy"></picture>
4583                    </a>
4584                    <a target="_blank" href="https://www.salute.gov.it/LogoCommercioElettronicoVET/CercaSitoEComm?useMode=getDettaglio&VOLID=C016715&area=veterinari&id=5907&lingua=italiano&menu=vendite">
4585                        <picture class="rounded-lg !block !visible"><source type="image/webp" srcset="https://www.farma.it/media/wysiwyg/footer/badge/VET-fdaf9e0c.webp"><img loading="lazy" class="rounded-lg !block !visible" src="https://www.farma.it/media/wysiwyg/footer/badge/VET.jpg" alt="VET" loading="lazy"></picture>
4586                    </a>
4587                </div>
4588<div class="mb-2 md:mb-4 flex gap-2">
4589<a href="https://apps.apple.com/it/app/farma-it/id6740766576" target="_blank">
4590<svg id="livetype" xmlns="http://www.w3.org/2000/svg" width="135" viewB
4590ox="0 0 119.66407 40">
4591  <title>Download_on_the_App_Store_Badge_IT_RGB_blk_100317</title>
4592  <g>
4593    <g>
4594      <g>
4595        <path d="M110.13477,0H9.53468c-.3667,0-.729,0-1.09473.002-.30615.002-.60986.00781-.91895.0127A13.21476,13.21476,0,0,0,5.5171.19141a6.66509,6.66509,0,0,0-1.90088.627A6.43779,6.43779,0,0,0,1.99757,1.99707,6.25844,6.25844,0,0,0,.81935,3.61816a6.60119,6.60119,0,0,0-.625,1.90332,12.993,12.993,0,0,0-.1792,2.002C.00587,7.83008.00489,8.1377,0,8.44434V31.5586c.00489.3105.00587.6113.01515.9219a12.99232,12.99232,0,0,0,.1792,2.0019,6.58756,6.58756,0,0,0,.625,1.9043A6.20778,6.20778,0,0,0,1.99757,38.001a6.27445,6.27445,0,0,0,1.61865,1.1787,6.70082,6.70082,0,0,0,1.90088.6308,13.45514,13.45514,0,0,0,2.0039.1768c.30909.0068.6128.0107.91895.0107C8.80567,40,9.168,40,9.53468,40H110.13477c.3594,0,.7246,0,1.084-.002.3047,0,.6172-.0039.9219-.0107a13.279,13.279,0,0,0,2-.1768,6.80432,6.80432,0,0,0,1.9082-.6308,6.27742,6.27742,0,0,0,1.6172-1.1787,6.39482,6.39482,0,0,0,1.1816-1.6143,6.60413,6.60413,0,0,0,.6191-1.9043,13.50643,13.50643,0,0,0,.1856-2.0019c.0039-.3106.0039-.6114.0039-.9219.0078-.3633.0078-.7246.0078-1.0938V9.53613c0-.36621,0-.72949-.0078-1.09179,0-.30664,0-.61426-.0039-.9209a13.5071,13.5071,0,0,0-.1856-2.002,6.6177,6.6177,0,0,0-.6191-1.90332,6.46619,6.46619,0,0,0-2.7988-2.7998,6.76754,6.76754,0,0,0-1.9082-.627,13.04394,13.04394,0,0,0-2-.17676c-.3047-.00488-.6172-.01074-.9219-.01269-.3594-.002-.7246-.002-1.084-.002Z" style="fill: #a6a6a6"></path>
4596        <path d="M8.44483,39.125c-.30468,0-.602-.0039-.90429-.0107a12.68714,12.68714,0,0,1-1.86914-.1631,5.88381,5.88381,0,0,1-1.65674-.5479,5.40573,5.40573,0,0,1-1.397-1.0166,5.32082,5.32082,0,0,1-1.02051-1.3965,5.72186,5.72186,0,0,1-.543-1.6572,12.41351,12.41351,0,0,1-.1665-1.875c-.00634-.2109-.01464-.9131-.01464-.9131V8.44434S.88185,7.75293.8877,7.5498a12.37039,12.37039,0,0,1,.16553-1.87207,5.7555,5.7555,0,0,1,.54346-1.6621A5.37349,5.37349,0,0,1,2.61183,2.61768,5.56543,5.56543,0,0,1,4.01417,1.59521a5.82309,5.82309,0,0,1,1.65332-.54394A12.58589,12.58589,0,0,1,7.543.88721L8.44532.875H111.21387l.9131.0127a12.38493,12.38493,0,0,1,1.8584.16259,5.93833,5.93833,0,0,1,1.6709.54785,5.59374,5.59374,0,0,1,2.415,2.41993,5.76267,5.76267,0,0,1,.5352,1.64892,12.995,12.995,0,0,1,.1738,1.88721c.0029.2832.0029.5874.0029.89014.0079.375.0079.73193.0079,1.09179V30.4648c0,.3633,0,.7178-.0079,1.0752,0,.3252,0,.6231-.0039.9297a12.73126,12.73126,0,0,1-.1709,1.8535,5.739,5.739,0,0,1-.54,1.67,5.48029,5.48029,0,0,1-1.0156,1.3857,5.4129,5.4129,0,0,1-1.3994,1.0225,5.86168,5.86168,0,0,1-1.668.5498,12.54218,12.54218,0,0,1-1.8692.1631c-.2929.0068-.5996.0107-.8974.0107l-1.084.002Z"></path>
4597      </g>
4598      <g id="_Group_" data-name="&lt;Group&gt;">
4599        <g id="_Group_2" data-name="&lt;Group&gt;">
4600          <g id="_Group_3" data-name="&lt;Group&gt;">
4601            <path id="_Path_" data-name="&lt;Path&gt;" d="M24.76888,20.30068a4.94881,4.94881,0,0,1,2.35656-4.15206,5.06566,5.06566,0,0,0-3.99116-2.15768c-1.67924-.17626-3.30719,1.00483-4.1629,1.00483-.87227,0-2.18977-.98733-3.6085-.95814a5.31529,5.31529,0,0,0-4.47292,2.72787c-1.934,3.34842-.49141,8.26947,1.3612,10.97608.9269,1.32535,2.01018,2.8058,3.42763,2.7533,1.38706-.05753,1.9051-.88448,3.5794-.88448,1.65876,0,2.14479.88448,3.591.8511,1.48838-.02416,2.42613-1.33124,3.32051-2.66914a10.962,10.962,0,0,0,1.51842-3.09251A4.78205,4.78205,0,0,1,24.76888,20.30068Z" style="fill: #fff"></path>
4602            <path id="_Path_2" data-name="&lt;Path&gt;" d="M22.03725,12.21089a4.87248,4.87248,0,0,0,1.11452-3.49062,4.95746,4.95746,0,0,0-3.20758,1.65961,4.63634,4.63634,0,0,0-1.14371,3.36139A4.09905,4.09905,0,0,0,22.03725,12.21089Z" style="fill: #fff"></path>
4603          </g>
4604        </g>
4605        <g>
4606          <path d="M42.30227,27.13965h-4.7334l-1.13672,3.35645H34.42727l4.4834-12.418h2.083l4.4834,12.418H43.438ZM38.0591,25.59082h3.752l-1.84961-5.44727h-.05176Z" style="fill: #fff"></path>
4607          <path d="M55.15969,25.96973c0,2.81348-1.50586,4.62109-3.77832,4.62109a3.0693,3.0693,0,0,1-2.84863-1.584h-.043v4.48438h-1.8584V21.44238H48.4302v1.50586h.03418a3.21162,3.21162,0,0,1,2.88281-1.60059C53.645,21.34766,55.15969,23.16406,55.15969,25.96973Zm-1.91016,0c0-1.833-.94727-3.03809-2.39258-3.03809-1.41992,0-2.375,1.23047-2.375,3.03809,0,1.82422.95508,3.0459,2.375,3.0459C52.30227,29.01563,53.24953,27.81934,53.24953,25.96973Z" style="fill: #fff"></path>
4608          <path d="M65.12453,25.96973c0,2.81348-1.50586,4.62109-3.77832,4.62109a3.0693,3.0693,0,0,1-2.84863-1.584h-.043v4.48438h-1.8584V21.44238H58.395v1.50586h.03418A3.21162,3.21162,0,0,1,61.312,21.34766C63.60988,21.34766,65.12453,23.16406,65.12453,25.96973Zm-1.91016,0c0-1.833-.94727-3.03809-2.39258-3.03809-1.41992,0-2.375,1.23047-2.375,3.03809,0,1.82422.95508,3.0459,2.375,3.0459C62.26711,29.01563,63.21438,27.81934,63.21438,25.96973Z" style="fill: #fff"></path>
4609          <path d="M71.71047,27.03613c.1377,1.23145,1.334,2.04,2.96875,2.04,1.56641,0,2.69336-.80859,2.69336-1.9
46091895,0-.96387-.67969-1.541-2.28906-1.93652l-1.60937-.3877c-2.28027-.55078-3.33887-1.61719-3.33887-3.34766,0-2.14258,1.86719-3.61426,4.51855-3.61426,2.624,0,4.42285,1.47168,4.4834,3.61426h-1.876c-.1123-1.23926-1.13672-1.9873-2.63379-1.9873s-2.52148.75684-2.52148,1.8584c0,.87793.6543,1.39453,2.25488,1.79l1.36816.33594c2.54785.60254,3.60645,1.626,3.60645,3.44238,0,2.32324-1.85059,3.77832-4.79395,3.77832-2.75391,0-4.61328-1.4209-4.7334-3.667Z" style="fill: #fff"></path>
4610          <path d="M83.34621,19.2998v2.14258h1.72168v1.47168H83.34621v4.99121c0,.77539.34473,1.13672,1.10156,1.13672a5.80752,5.80752,0,0,0,.61133-.043v1.46289a5.10351,5.10351,0,0,1-1.03223.08594c-1.833,0-2.54785-.68848-2.54785-2.44434V22.91406H80.16262V21.44238H81.479V19.2998Z" style="fill: #fff"></path>
4611          <path d="M86.065,25.96973c0-2.84863,1.67773-4.63867,4.29395-4.63867,2.625,0,4.29492,1.79,4.29492,4.63867,0,2.85645-1.66113,4.63867-4.29492,4.63867C87.72609,30.6084,86.065,28.82617,86.065,25.96973Zm6.69531,0c0-1.9541-.89551-3.10742-2.40137-3.10742s-2.40039,1.16211-2.40039,3.10742c0,1.96191.89453,3.10645,2.40039,3.10645S92.76027,27.93164,92.76027,25.96973Z" style="fill: #fff"></path>
4612          <path d="M96.18606,21.44238h1.77246v1.541h.043a2.1594,2.1594,0,0,1,2.17773-1.63574,2.86616,2.86616,0,0,1,.63672.06934v1.73828a2.59794,2.59794,0,0,0-.835-.1123,1.87264,1.87264,0,0,0-1.93652,2.083v5.37012h-1.8584Z" style="fill: #fff"></path>
4613          <path d="M109.3843,27.83691c-.25,1.64355-1.85059,2.77148-3.89844,2.77148-2.63379,0-4.26855-1.76465-4.26855-4.5957,0-2.83984,1.64355-4.68164,4.19043-4.68164,2.50488,0,4.08008,1.7207,4.08008,4.46582v.63672h-6.39453v.1123a2.358,2.358,0,0,0,2.43555,2.56445,2.04834,2.04834,0,0,0,2.09082-1.27344Zm-6.28223-2.70215h4.52637a2.1773,2.1773,0,0,0-2.2207-2.29785A2.292,2.292,0,0,0,103.10207,25.13477Z" style="fill: #fff"></path>
4614        </g>
4615      </g>
4616    </g>
4617    <g id="_Group_4" data-name="&lt;Group&gt;">
4618      <g>
4619        <path d="M36.30861,13.09326c.07813.56641.63184.92627,1.43066.92627.74414,0,1.29-.38428,1.29-.91357,0-.45508-.34766-.728-1.1377-.91406l-.76855-.186c-1.0791-.25244-1.57129-.77344-1.57129-1.6499,0-1.063.86816-1.77,2.1709-1.77a1.94737,1.94737,0,0,1,2.15039,1.71191h-.90234A1.13875,1.13875,0,0,0,37.71,9.40479c-.73242,0-1.21973.35156-1.21973.88916,0,.42578.31445.66992,1.0918.85156l.65723.16162c1.22363.28516,1.72852.78125,1.72852,1.67871,0,1.14111-.88477,1.85645-2.29883,1.85645-1.32324,0-2.21289-.68213-2.2793-1.749Z" style="fill: #fff"></path>
4620        <path d="M44.15432,11.6665a1.00546,1.00546,0,0,0-1.06348-.76465c-.74414,0-1.19922.57031-1.19922,1.52979,0,.97607.459,1.55908,1.19922,1.55908a.97873.97873,0,0,0,1.06348-.74023h.86426a1.762,1.762,0,0,1-1.92285,1.53418,2.06791,2.06791,0,0,1-2.11328-2.353,2.05305,2.05305,0,0,1,2.1084-2.32373,1.77731,1.77731,0,0,1,1.92773,1.55859Z" style="fill: #fff"></path>
4621        <path d="M45.90041,13.42432c0-.81055.60352-1.27783,1.6748-1.34424l1.21973-.07031v-.38867c0-.47559-.31445-.74414-.92187-.74414-.49609,0-.83984.18213-.93848.50049h-.86035c.09082-.77344.81836-1.26953,1.83984-1.26953,1.12891,0,1.76563.562,1.76563,1.51318v3.07666h-.85547v-.63281h-.07031a1.515,1.515,0,0,1-1.35254.707A1.36026,1.36026,0,0,1,45.90041,13.42432Zm2.89453-.38477v-.37646l-1.09961.07031c-.62012.0415-.90137.25244-.90137.64941,0,.40527.35156.64111.835.64111A1.0615,1.0615,0,0,0,48.79494,13.03955Z" style="fill: #fff"></path>
4622        <path d="M51.07131,10.19482h.85547v.69043h.06641a1.22092,1.22092,0,0,1,1.21582-.76514,1.86836,1.86836,0,0,1,.39648.03711v.877a2.43442,2.43442,0,0,0-.49609-.05371A1.05507,1.05507,0,0,0,51.96,12.03906v2.65869h-.88867Z" style="fill: #fff"></path>
4623        <path d="M54.53811,8.86328a.57572.57572,0,1,1,.5752.5415A.54735.54735,0,0,1,54.53811,8.86328Zm.13184,1.33154h.88574v4.50293h-.88574Z" style="fill: #fff"></path>
4624        <path d="M59.93752,11.6665a1.00546,1.00546,0,0,0-1.06348-.76465c-.74414,0-1.19922.57031-1.19922,1.52979,0,.97607.459,1.55908,1.19922,1.55908a.97873.97873,0,0,0,1.06348-.74023h.86426a1.762,1.762,0,0,1-1.92285,1.53418,2.06791,2.06791,0,0,1-2.11328-2.353,2.05305,2.05305,0,0,1,2.1084-2.32373,1.77731,1.77731,0,0,1,1.92773,1.55859Z" style="fill: #fff"></path>
4625        <path d="M61.68361,13.42432c0-.81055.60352-1.27783,1.6748-1.34424l1.21973-.07031v-.38867c0-.47559-.31445-.74414-.92187-.74414-.49609,0-.83984.18213-.93848.50049h-.86035c.09082-.77344.81836-1.26953,1.83984-1.26953,1.12891,0,1.76611.562,1.76611,1.51318v3.07666h-.856v-.63281h-.07031a1.515,1.515,0,0,1-1.35254.707A1.36026,1.36026,0,0,1,61.68361,13.42432Zm2.89453-.38477v-.37646l-1.09961.07031c-.62012.0415-.90137.25244-.90137.64941,0,.40527.35156.64111.835.64111A1.0615,1.0615,0,0,0,64.57815,13.03955Z" style="fill: #fff"></path>
4626        <path d="M70.94289,10.10791c1.0127,0,1.6748.47119,1.76172,1.26514h-.85254c-.082-.33057-.40527-.5415-.90918-.5415-.49609,0-.873.23535-.873.58691,0,.269.22754.43848.71582.55029l.748.17334c.85645.19873,1.25781.56689,1.25781,1.22852,0,.84766-.79,1.41406-1.86523,1.41406-1.07129,0-1.76953-.48389-1.84863-1.28174h.88965a.91365.91365,0,0,0,.97949.562c.55371,0,.94727-.248.94727-.60791,0-.26855-.21094-.44238-.66211-.5498l-.78516-.18213c-.85645-.20264-1.25293-.58691-1.25293-1.25684C69.19387,10.66992,69.92531,10.10791,70.94289,10.10791Z" style="fill: #fff"></path>
4627        <path d="M77.78469,14.69775h-.85645v-.71533h-.07031a1.35022,1.35022,0,0,1-1.36035.80225,1.4622,1.4622,0,0,1-1.55078-1.6665V10.19482h.88965v2.69189c0,.72754.293,1.0752.94629,1.0752a1.02228,1.02228,0,0,0,1.1123-1.1333V10.19482h.88965Z" style="fill: #fff"></path>
4628      </g>
4629    </g>
4630  </g>
4631</svg>
4632
4633
4634</a>
4635<a href="https://play.google.com/store/apps/details?id=com.developer.farmait" target="_blank">
4636<svg version="1.1" id="svg1372" width="150" viewBox="0 0 861.33331 255.2092" sodipodi:docname="google-play-badge-it.eps" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
4637  <defs id="defs1376">
4638    <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1390">
4639      <path d="M 0,2207.03 H 6460 V 292.961 H 0 Z" id="path1388"></path>
4640    </clipPath>
4641    <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1412">
4642      <path d="M 0,2207.04 H 6460 V 292.961 H 0 Z" id="path1410"></path>
4643    </clipPath>
4644  </defs>
4645  <sodipodi:namedview id="namedview1374" pagecolor="#ffffff" bordercolor="#000000" borderopacity="0.25" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" showgrid="false"></sodipodi:namedview>
4646  <g id="g1380" inkscape:groupmode="layer" inkscape:label="Page 1" transform="matrix(1.3333333,0,0,-1.3333333,-5.5867668e-7,294.27066)">
4647    <g id="g1382" transform="scale(0.1)">
4648      <g id="g1384">
4649        <g id="g1386" clip-path="url(#clipPath1390)">
4650          <path d="M 6220.74,292.969 H 239.262 C 107.668,292.969 0,400.629 0,532.23 v 1435.55 c 0,131.6 107.668,239.26 239.262,239.26 H 6220.74 c 131.59,0 239.26,-107.66 239.26,-239.26 V 532.23 c 0,-131.601 -107.67,-239.261 -239.26,-239.261" style="fill:#100f0d;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1392"></path>
4651          <path d="M 6220.74,2207.03 H 239.262 C 107.668,2207.03 0,2099.36 0,1967.77 V 532.219 C 0,400.621 107.668,292.961 239.262,292.961 H 6220.74 c 131.59,0 239.26,107.66 239.26,239.258 V 1967.77 c 0,131.59 -107.67,239.26 -239.26,239.26 m 0,-38.28 c 110.83,0 200.98,-90.15 200.98,-200.98 V 532.219 c 0,-110.828 -90.15,-200.981 -200.98,-200.981 H 239.262 c -110.828,0 -200.9807,90.153 -200.9807,200.981 V 1967.77 c 0,110.83 90.1527,200.98 200.9807,200.98 H 6220.74" style="fill:#a2a2a1;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1394"></path>
4652          <path d="m 5117.09,771.48 h 89.29 v 598.19 h -89.29 z m 804.24,382.72 -102.35,-259.36 h -3.06 L 5709.68,1154.2 H 5613.5 L 5772.8,791.719 5681.98,590.07 h 93.12 l 245.53,564.13 z M 5414.96,839.43 c -29.28,0 -70.05,14.64 -70.05,50.808 0,46.184 50.77,63.844 94.65,63.844 39.24,0 57.71,-8.473 81.59,-20 -6.94,-55.422 -54.65,-94.652 -106.19,-94.652 m 10.77,327.83 c -64.65,0 -131.64,-28.47 -159.35,-91.54 l 79.29,-33.12 c 16.95,33.12 48.48,43.89 81.59,43.89 46.18,0 93.12,-27.71 93.89,-76.95 v -6.17 c -16.18,9.23 -50.82,23.06 -93.12,23.06 -85.42,0 -172.41,-46.942 -172.41,-134.649 0,-80.062 70.05,-131.601 148.53,-131.601 60.05,0 93.12,26.898 113.94,58.48 h 3.06 v -46.18 h 86.18 v 229.36 c 0,106.18 -79.24,165.42 -181.6,165.42 m -551.83,-85.89 h -127 v 205.09 h 127 c 66.76,0 104.65,-55.32 104.65,-102.55 0,-46.37 -37.89,-102.54 -104.65,-102.54 m -2.29,288.3 H 4657.66 V 771.48 h 89.24 v 226.622 h 124.71 c 98.95,0 196.24,71.688 196.24,185.808 0,114.13 -97.29,185.76 -196.24,185.76 M 3704.93,839.328 c -61.68,0 -113.31,51.633 -113.31,122.551 0,71.681 51.63,124.131 113.31,124.131 60.91,0 108.67,-52.45 108.67,-124.131 0,-70.918 -47.76,-122.551 -108.67,-122.551 m 102.5,281.372 h -3.06 c -20.05,23.88 -58.57,45.51 -107.14,45.51 -101.79,0 -195.05,-89.44 -195.05,-204.331 0,-114.078 93.26,-202.75 195.05,-202.75 48.57,0 87.09,21.582 107.14,46.269 h 3.06 v -29.277 c 0,-77.902 -41.59,-119.492 -108.67,-119.492 -54.75,0 -88.67,39.293 -102.55,72.453 l -77.85,-32.402 c 22.34,-53.969 81.73,-120.25 180.4,-120.25 104.84,0 193.51,61.679 193.51,211.992 v 365.438 h -84.84 z M 3953.9,771.48 h 89.44 v 598.24 h -89.44 z m 221.27,197.34 c -2.3,78.67 60.92,118.72 106.38,118.72 35.5,0 65.55,-17.71 75.55,-43.16 z m 277.54,67.85 c -16.99,45.51 -68.62,129.54 -174.23,129.54 -104.84,0 -191.93,-82.5 -191.93,-203.569 0,-114.071 86.32,-203.512 201.93,-203.512 93.31,0 147.24,57.043 169.64,90.199 l -69.39,46.274 c -23.16,-33.922 -54.74,-56.274 -100.25,-56.274 -45.45,0 -77.85,20.82 -98.67,61.633 l 272.14,112.599 z m -2168.07,67.04 v -86.32 h 206.58 c -6.18,-48.57 
4652-22.35,-84.031 -46.99,-108.671 -30.1,-30.098 -77.14,-63.219 -159.59,-63.219 -127.24,0 -226.67,102.5 -226.67,229.74 0,127.19 99.43,229.69 226.67,229.69 68.62,0 118.72,-26.94 155.71,-61.63 l 60.91,60.86 c -51.67,49.34 -120.25,87.14 -216.62,87.14 -174.23,0 -320.7,-141.88 -320.7,-316.06 0,-174.279 146.47,-316.111 320.7,-316.111 94.03,0 164.95,30.871 220.45,88.672 57.04,57.039 74.8,137.187 74.8,201.979 0,20.05 -1.54,38.52 -4.65,53.93 z m 530.1,-264.382 c -61.63,0 -114.84,50.871 -114.84,123.313 0,73.269 53.21,123.369 114.84,123.369 61.68,0 114.89,-50.1 114.89,-123.369 0,-72.442 -53.21,-123.313 -114.89,-123.313 m 0,326.882 c -112.55,0 -204.28,-85.61 -204.28,-203.569 0,-117.141 91.73,-203.512 204.28,-203.512 112.55,0 204.33,86.371 204.33,203.512 0,117.959 -91.78,203.569 -204.33,203.569 m 445.69,-326.882 c -61.68,0 -114.89,50.871 -114.89,123.313 0,73.269 53.21,123.369 114.89,123.369 61.69,0 114.85,-50.1 114.85,-123.369 0,-72.442 -53.16,-123.313 -114.85,-123.313 m 0,326.882 c -112.54,0 -204.28,-85.61 -204.28,-203.569 0,-117.141 91.74,-203.512 204.28,-203.512 112.55,0 204.28,86.371 204.28,203.512 0,117.959 -91.73,203.569 -204.28,203.569" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1396"></path>
4653          <path d="M 991.355,1277.56 481.879,736.828 c 0.047,-0.09 0.047,-0.238 0.098,-0.328 15.644,-58.719 69.238,-101.93 132.882,-101.93 25.457,0 49.336,6.891 69.817,18.95 l 1.625,0.96 573.459,330.891 -268.405,292.189" style="fill:#eb3131;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1398"></path>
4654          <path d="m 1506.77,1369.63 -0.48,0.34 -247.59,143.51 -278.927,-248.21 279.927,-279.84 246.25,142.07 c 43.16,23.36 72.5,68.86 72.5,121.31 0,52.16 -28.91,97.42 -71.68,120.82" style="fill:#f6b60b;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1400"></path>
4655          <path d="m 481.867,1763.11 c -3.062,-11.29 -4.687,-23.16 -4.687,-35.41 V 772.191 c 0,-12.25 1.625,-24.113 4.738,-35.363 l 526.942,526.902 -526.993,499.38" style="fill:#5778c5;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1402"></path>
4656          <path d="m 995.117,1249.95 263.663,263.62 -572.784,332.09 c -20.816,12.49 -45.125,19.67 -71.109,19.67 -63.641,0 -117.332,-43.31 -132.981,-102.07 0,-0.05 -0.047,-0.1 -0.047,-0.15 l 513.258,-513.16" style="fill:#3bad49;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1404"></path>
4657        </g>
4658      </g>
4659      <g id="g1406">
4660        <g id="g1408" clip-path="url(#clipPath1412)">
4661          <path d="m 2093.53,1621.88 c 33.87,0 60.16,9.36 78.89,28.09 18.73,18.74 28.1,44.61 28.1,77.64 0,33.03 -9.37,58.92 -28.1,77.65 -18.73,18.73 -45.02,28.1 -78.89,28.1 h -48.29 v -211.48 z m -94.08,254.78 h 95.33 c 30.81,0 57.66,-6.25 80.55,-18.74 22.9,-12.49 40.52,-30.04 52.88,-52.66 12.35,-22.63 18.52,-48.5 18.52,-77.65 0,-29.14 -6.17,-55.02 -18.52,-77.64 -12.36,-22.62 -29.98,-40.17 -52.88,-52.66 -22.89,-12.49 -49.74,-18.73 -80.55,-18.73 h -95.33 v 298.08" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1414"></path>
4662          <path d="m 2306.26,1876.66 h 45.79 v -298.08 h -45.79 v 298.08" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1416"></path>
4663          <path d="m 2447.81,1593.56 c -19.71,14.43 -33.45,34.69 -41.22,60.78 l 43.3,17.49 c 4.44,-16.65 12.35,-30.26 23.73,-40.8 11.37,-10.55 25.11,-15.82 41.22,-15.82 14.98,0 27.68,3.88 38.08,11.66 10.41,7.77 15.62,18.45 15.62,32.05 0,12.49 -4.58,22.83 -13.74,31.02 -9.16,8.19 -24.98,16.17 -47.46,23.94 l -18.73,6.66 c -20.27,7.21 -37.12,17.28 -50.59,30.18 -13.46,12.91 -20.19,30.04 -20.19,51.42 0,14.7 3.96,28.31 11.87,40.79 7.91,12.49 19,22.34 33.3,29.56 14.3,7.22 30.46,10.83 48.51,10.83 25.81,0 46.48,-6.32 62.03,-18.94 15.53,-12.64 26.08,-26.86 31.64,-42.68 l -41.22,-17.49 c -2.78,10 -8.61,18.6 -17.48,25.82 -8.89,7.21 -20.4,10.82 -34.56,10.82 -13.6,0 -25.12,-3.61 -34.55,-10.82 -9.44,-7.22 -14.15,-16.38 -14.15,-27.48 0,-10.27 4.22,-18.8 12.69,-25.6 8.46,-6.81 21.57,-13.25 39.34,-19.36 l 19.15,-6.66 c 25.53,-8.89 45.23,-20.4 59.12,-34.55 13.88,-14.16 20.81,-33.04 20.81,-56.62 0,-19.43 -4.92,-35.74 -14.78,-48.92 -9.85,-13.19 -22.48,-22.96 
4663-37.88,-29.35 -15.41,-6.38 -31.16,-9.57 -47.25,-9.57 -24.71,0 -46.91,7.21 -66.61,21.64" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1418"></path>
4664          <path d="m 2777.94,1737.61 c 15.27,0 27.54,4.78 36.85,14.36 9.29,9.58 13.94,20.74 13.94,33.51 0,12.77 -4.65,23.94 -13.94,33.52 -9.31,9.57 -21.58,14.36 -36.85,14.36 h -57.87 v -95.75 z m -103.66,139.05 h 102.41 c 17.77,0 34.06,-3.89 48.92,-11.66 14.84,-7.78 26.64,-18.6 35.39,-32.47 8.74,-13.89 13.11,-29.57 13.11,-47.05 0,-17.48 -4.37,-33.16 -13.11,-47.04 -8.75,-13.88 -20.55,-24.71 -35.39,-32.47 -14.86,-7.77 -31.15,-11.66 -48.92,-11.66 h -56.62 v -115.73 h -45.79 v 298.08" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1420"></path>
4665          <path d="m 3122.01,1629.57 c 16.52,9.58 29.56,22.9 39.14,39.97 9.58,17.07 14.36,36.43 14.36,58.07 0,21.66 -4.78,41.01 -14.36,58.08 -9.58,17.07 -22.62,30.39 -39.14,39.97 -16.51,9.57 -34.76,14.36 -54.74,14.36 -19.98,0 -38.23,-4.79 -54.75,-14.36 -16.51,-9.58 -29.55,-22.9 -39.13,-39.97 -9.57,-17.07 -14.36,-36.42 -14.36,-58.08 0,-21.64 4.79,-41 14.36,-58.07 9.58,-17.07 22.62,-30.39 39.13,-39.97 16.52,-9.57 34.77,-14.36 54.75,-14.36 19.98,0 38.23,4.79 54.74,14.36 z m -133.42,-36.84 c -23.6,13.88 -42.12,32.68 -55.58,56.41 -13.47,23.74 -20.19,49.89 -20.19,78.47 0,28.59 6.72,54.75 20.19,78.48 13.46,23.73 31.98,42.53 55.58,56.41 23.58,13.88 49.81,20.82 78.68,20.82 28.87,0 55.02,-6.94 78.47,-20.82 23.45,-13.88 41.91,-32.68 55.38,-56.41 13.45,-23.73 20.18,-49.89 20.18,-78.48 0,-28.58 -6.73,-54.73 -20.18,-78.47 -13.47,-23.73 -31.93,-42.53 -55.38,-56.41 -23.45,-13.88 -49.6,-20.81 -78.47,-20.81 -28.87,0 -55.1,6.93 -78.68,20.81" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1422"></path>
4666          <path d="m 3280.41,1876.66 h 54.12 l 134.89,-218.99 h 2.5 l -2.5,57.46 v 161.53 h 45.38 v -298.08 h -47.46 l -141.55,230.22 h -2.5 l 2.5,-57.46 v -172.76 h -45.38 v 298.08" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1424"></path>
4667          <path d="m 3590.15,1876.66 h 45.79 v -298.08 h -45.79 v 298.08" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1426"></path>
4668          <path d="m 3827.45,1621.04 c 14.43,0 26.02,4.37 34.76,13.11 8.74,8.75 13.11,19.22 13.11,31.43 0,12.22 -4.51,22.76 -13.52,31.64 -9.02,8.89 -21.03,13.33 -36.02,13.33 h -69.11 v -89.51 z m -7.08,130.3 c 13.88,0 24.98,4.23 33.3,12.71 8.33,8.46 12.49,18.24 12.49,29.34 0,11.1 -4.1,20.75 -12.27,28.94 -8.19,8.18 -18.81,12.28 -31.86,12.28 h -65.36 v -83.27 z m -109.49,125.32 h 111.57 c 15.82,0 30.53,-3.48 44.13,-10.41 13.6,-6.94 24.36,-16.45 32.27,-28.52 7.91,-12.07 11.87,-25.47 11.87,-40.18 0,-14.71 -3.69,-27.54 -11.04,-38.5 -7.35,-10.97 -17.14,-19.36 -29.36,-25.19 v -2.08 c 15.55,-5.28 27.91,-14.02 37.07,-26.23 9.15,-12.21 13.73,-26.64 13.73,-43.3 0,-16.37 -4.23,-30.87 -12.7,-43.5 -8.47,-12.63 -19.84,-22.48 -34.14,-29.56 -14.3,-7.07 -29.9,-10.61 -46.83,-10.61 h -116.57 v 298.08" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1428"></path>
4669          <path d="m 3981.48,1876.66 h 45.79 v -298.08 h -45.79 v 298.08" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1430"></path>
4670          <path d="m 4102.63,1876.66 h 45.79 v -254.78 h 128.22 v -43.3 h -174.01 v 298.08" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1432"></path>
4671          <path d="m 4324.93,1876.66 h 180.69 v -43.3 h -134.89 v -84.09 h 121.56 v -43.3 h -121.56 v -84.09 h 134.89 v -43.3 h -180.69 v 298.08" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1434"></path>
4672          <path d="m 4680.03,1593.56 c -19.71,14.43 -33.45,34.69 -41.21,60.78 l 43.29,17.49 c 4.45,-16.65 12.36,-30.26 23.73,-40.8 11.38,-10.55 25.12,-15.82 41.22,-15.82 14.98,0 27.69,3.88 38.09,11.66 10.41,7.77 15.61,18.45 15.61,32.05 0,12.49 -4.58,22.83 -13.74,31.02 -9.16,8.19 -24.98,16.17 -47.46,23.94 l -18.73,6.66 c -20.26,7.21 -37.12,17.28 -50.58,30.18 -13.46,12.91 -20.19,30.04 -20.19,51.42 0,14.7 3.96,28.31 11.87,40.79 7.91,12.49 19,22.34 33.3,29.56 14.29,7.22 30.46,10.83 48.5,10.83 25.81,0 46.49,-6.32 62.03,-18.94 15.54,-12.64 26.09,-26.86 31.64,-42.68 l -41.22,-17.49 c -2.77,10 -8.6,18.6 -17.48,25.82 -8.88,7.21 -20.4,10.82 -34.56,10.82 -13.59,0 -25.11,-3.61 -34.55,-10.82 -9.43,-7.22 -14.15,-16.38 -14.15,-27.48 0,-10.27 4.23,-18.8 12.7,-25.6 8.45,-6.81 21.57,-13.25 39.33,-19.36 l 19.15,-6.66 c 25.54,-8.89 45.24,-20.4 59.12,-34.55 13.88,-14.16 20.82,-33.04 20.82,-56.62 0,-19.43 -4.93,-35.74 -14.78,-48.92 -9.85,-13.19 -22.48,-22.96 
4672-37.88,-29.35 -15.41,-6.38 -31.16,-9.57 -47.26,-9.57 -24.7,0 -46.9,7.21 -66.61,21.64" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1436"></path>
4673          <path d="m 4952.93,1586.9 c -17.07,9.99 -30.25,24.15 -39.55,42.47 -9.31,18.31 -13.94,39.55 -13.94,63.69 v 183.6 h 45.37 v -186.1 c 0,-22.48 5.83,-40.65 17.49,-54.53 11.65,-13.89 28.16,-20.82 49.54,-20.82 21.65,0 38.3,6.93 49.95,20.82 11.66,13.88 17.49,32.05 17.49,54.53 v 186.1 h 45.38 v -183.6 c 0,-23.87 -4.58,-44.96 -13.74,-63.28 -9.16,-18.31 -22.21,-32.54 -39.13,-42.67 -16.93,-10.13 -36.92,-15.19 -59.95,-15.19 -22.21,0 -41.85,4.99 -58.91,14.98" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path1438"></path>
4674        </g>
4675      </g>
4676    </g>
4677  </g>
4678</svg>
4679
4680</a></div>
4681            </div>
4682        </div>
4683    </div>
4684</div>
4685
4686<script>
4687if(typeof FeedatyWidget !== 'undefined') {
4688FeedatyWidget.init();
4689}
4690</script>
4690</div>                     </div>
4691                             </template>
4692            </div>
4693                <div class="footer content">
4693<script>
4694    'use strict';
4695
4696    function amBrandsPopup() {
4697        let cached = false;
4698
4699        const displayError = (error) => {
4700            console.error(error);
4701            typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
4702                [{
4703                    type: "error",
4704                    text: "Qualcosa\u0020\u00E8\u0020andato\u0020storto.\u0020Riprova\u0020di\u0020nuovo."
4705                }], 10000
4706            );
4707        };
4708
4709        let letters = [
4710            "A","B","C","D",
4711            "E","F","G","H","I","J","K","L","M",
4712            "N","O","P","Q","R","S","T","U","V","W","X","Y","Z","#"
4713        ];
4714
4715        return {
4716            hoverPanelActiveId: null,
4717            selectedLetter: null,
4718            items: [],
4719            letters: [],
4720            showCount: null,
4721            showFilter: null,
4722            showImages: true,
4723            showSearch: null,
4724            loading: false,
4725            label: 'Brands',
4726            isPopupEnabled: false,
4727            isTopMenuItemEnabled: false,
4728            cache: false,
4729            isMobile: false,
4730
4731            initErrorMessages(errors) {
4732                const messages = [];
4733                for (let error in Object.keys(errors)) {
4734                    messages.push({type: 'error', text: errors[error].message});
4735                }
4736                typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(messages, 10000);
4737            },
4738
4739            chooseLetter(letter) {
4740                this.selectedLetter = this.selectedLetter === letter ? null : letter;
4741            },
4742
4743            getQuery() {
4744                return "query BrandsPopupQuery { ambrandlist(\n                    showCount: true\n                    displayZero: true\n                  ) {\n                    all_letters,\n                    items {\n                      alt\n                      brandId\n                      cnt\n                      image\n                      img\n                      label\n                      letter\n                      url\n                    }\n                  }\n                  storeConfig {\n                    amshopby_brand_general_brands_brands_popup,\n                    amshopby_brand_general_menu_item_label,\n                    amshopby_brand_general_brands_page,\n                    amshopby_brand_general_topmenu_enabled,\n                    amshopby_brand_general_brands_popup_config {\n                      show_images,\n                      display_zero,\n                      filter_display_all,\n                      image_width,\n                      image_height,\n                      show_filter,\n                      show_count\n                    }\n                  } }"            },
4745
4746            /**
4747             * Retrieve media url for given path
4748             *
4749             * @param path
4750             * @returns {string}
4751             */
4752            getMediaUrl(path) {
4753                const baseUrl = BASE_URL.replace('index.php/', '');
4754                if (path.includes('://')) {
4755                    return path;
4756                }
4757
4758                let productImageUrl = `${baseUrl}${path}`;
4759                const regexDuplicateDomain = new RegExp(`^(https?:\/\/[^/]+).*\\1`);
4760                productImageUrl = productImageUrl.replace(regexDuplicateDomain, '$1');
4761
4762                return productImageUrl.includes('/product/placeholder/')
4763                    ? productImageUrl.replace(/\/media(?=\/static)/, '')
4764                    : productImageUrl;
4765            },
4766
4767            checkIsMobileResolution() {
4768                this.isMobile = window.matchMedia('(max-width: 1023px)').matches;
4769            },
4770
4771            getBrandUrl(url){
4772                return BASE_URL + url;
4773            },
4774
4775            init() {
4776                this.checkIsMobileResolution();
4777
4778                                    this.$watch('hoverPanelActiveId', (value) => {
4779                        if (value === 'am-brand') {
4780                            this.sendRequest();
4781                        }
4782                    });
4783                            },
4784
4785            /**
4786             * Get brands by letter
4787             *
4788             * @param result
4789             * @returns {{imageWidth: *, isTopMenuItemEnabled: *, showCount: *, displayAll: *, showFilter: *, showImages: *, isPopupEnabled: *, label: *, imageHeight: *, filterDisplayAll: *, brandsPage: *}}
4790             */
4791            settingsMapper(result) {
4792                const config = result.data.storeConfig?.amshopby_brand_general_brands_popup_config;
4793                return {
4794                    showImages: config.show_images,
4795                    showCount: config.show_count,
4796                    showFilter: config.show_filter,
4797                    imageWidth: config.image_width,
4798                    imageHeight: config.image_height,
4799                    filterDisplayAll: config.filter_display_all,
4800                    displayAll: config.display_zero,
4801                    isPopupEnabled: result.data.storeConfig?.amshopby_brand_general_brands_brands_popup,
4802                    label: result.data.storeConfig?.amshopby_brand_general_menu_item_label,
4803                    isTopMenuItemEnabled: result.data.storeConfig?.amshopby_brand_general_topmenu_enabled,
4804                    brandsPage: result.data.storeConfig?.amshopby_brand_general_brands_page,
4805                }
4806            },
4807
4808            /**
4809             * Send request to graphql
4810             *
4811             * @returns {Promise<any>}
4812             */
4813            async sendRequest() {
4814                if (this.isMobile) {
4815                    return false;
4816                }
4817
4818                this.loading = true;
4819
4820                try {
4821                    if (cached) {
4822                        this.loading = false;
4823                        return false;
4824                    }
4825
4826                    const response = await fetch('https://www.farma.it/graphql', {
4827                        method: 'POST',
4828                        headers: {
4829                            'Content-Type': 'application/json',
4830                            'Store': 'default'
4831                        },
4832                        credentials: 'include',
4833                        body: JSON.stringify({query: this.getQuery(), variables: {}})
4834                    });
4835
4836                    const result = await response.json();
4837
4838                    if (result?.errors) {
4839                        this.initErrorMessages(result.errors);
4840                        return;
4841                    }
4842
4843                    const data = result.data?.ambrandlist;
4844                    const mapper = this.settingsMapper(result);
4845
4846                    // Update component settings
4847                    Object.keys(mapper).forEach(config => {
4848                        this[config] = mapper[config];
4849                    });
4850
4851                    if (!this.filterDisplayAll) {
4852                        letters = data.all_letters.split(',');
4853                    }
4854
4855                    const items = data.items.map(brand => {
4856                        brand.image = brand.img
4857                            ? this.getMediaUrl(brand.img) : (brand.image ? this.getMediaUrl(brand.image) : null);
4858                        return brand;
4859                    });
4860
4861                    this.letters = letters.map(letter => ({
4862                        letter,
4863                        brands: this.getLetterItems(items, letter),
4864                    }));
4865
4866                    this.items = this.letters.filter(row => row.brands?.length > 0);
4867
4868                    cached = true;
4869                } catch (error) {
4870                    displayError(error);
4871                } finally {
4872                    this.loading = false;
4873                }
4874            },
4875
4876            /**
4877             * Get brands by letter
4878             *
4879             * @param items
4880             * @param letter
4881             * @returns {*}
4882             */
4883            getLetterItems(items, letter) {
4884                return items.filter(row => row.letter === letter);
4885            },
4886
4887            convertHtml(text) {
4888                let textField = document.createElement("textarea");
4889                textField.innerHTML = text;
4890                return textField.value;
4891            }
4892        }
4893    }
4894    
4895    function amBrandsPopupData() {
4896        return Object.assign(
4897            amBrandsPopup(),
4898            {
4899                brandPopupClass() {
4900                    return {
4901                        'hover:border-primary data-[active]:border-primary': !this.isPopupEnabled
4902                    }
4903                },
4904                labelPopupClass() {
4905                    return {'w-14 opacity-0': this.label === ''}
4906                },
4907                popupcontentClass() {
4908                    return {
4909                        'hidden' : this.hoverPanelActiveId !== 'am-brand',
4910                        'left-0' : `${this.$el.dataset.first}`,
4911                        'right-0' : `${this.$el.dataset.last}`
4912                    }
4913                },
4914                panelActiveMouseenterEvent() {
4915                    return this.hoverPanelActiveId = 'am-brand'
4916                },
4917                panelActiveMouseleaveEvent() {
4918                    return this.hoverPanelActiveId = null
4919                },
4920                isPopupShow() {
4921                    return this.hoverPanelActiveId === 'am-brand'
4922                },
4923                labelText(){
4924                    return this.label
4925                },
4926                isEnabledPopup(){
4927                    return this.isPopupEnabled
4928                },
4929                showExtMessage(){
4930                    return false
4931                },
4932                notLoading() {
4933                    return !this.loading
4934                },
4935                brandLabel() {
4936                    return this.brand.label
4937                },
4938                letterClass() {
4939                    return {
4940                        'border-blue-400 text-blue-400 bg-blue-100': this.selectedLetter === this.letter.letter,
4941                        'bg-gray-200 text-gray-700 cursor-default pointer-events-none': !this.letter.brands || this.letter.brands.length === 0
4942                    }
4943                },
4944                letterClickEvent(event) {
4945                    return this.chooseLetter(this.letter.letter)
4946                },
4947                letterBrands() {
4948                    return this.letter.brands
4949                },
4950                brandUrl() {
4951                    return this.getBrandUrl(this.brand.url)
4952                },
4953                brandImage() {
4954                    return this.brand.image
4955                },
4956                notBrandImage() {
4957                    return !this.brand.image
4958                },
4959                letterLetter() {
4960                    return this.letter.letter
4961                },
4962                brandBrandId() {
4963                    return this.brand.brandId
4964                },
4965                isLetterShow() {
4966                    return !this.selectedLetter || this.selectedLetter === this.letter.letter
4967                },
4968                brandImageMediaUrl() {
4969                    return this.getMediaUrl(this.brand.image)
4970                },
4971                brandImageStyle() {
4972                    return `max-width: ${this.imageWidth ? this.imageWidth + 'px' : '100px' };max-height: ${this.imageHeight ? this.imageHeight + 'px' : 'inherit'}`
4973                },
4974                brandsLabelStyle() {
4975                    return `min-width: ${this.imageWidth}px`
4976                },
4977                brandLabelFilter() {
4978                    return this.brand.label.charAt(0)
4979                },
4980                brandCnt() {
4981                    return '(' + this.brand.cnt + ')'
4982                }
4983            }
4984        )
4985    }
4986    window.addEventListener('alpine:init', () => Alpine.data('amBrandsPopupData', amBrandsPopupData), {once: true});
4987</script>
4987
4988</div><div class="after-footer footer content">
4989                                    <div x-data="{ show: false }"  x-intersect.once.margin.200px="show = true" x-init="$watch('show', (value) => { if (value) { $nextTick(() => { $dispatch('footer:added') }); } } )" class="dna-footer-item " id="dna-footer-item_after_footer">
4990                 <template x-if="show">
4991                                 <div class="dna-footer-item-content">
4992                         <div data-content-type="html" data-appearance="default" data-intersect="false" data-element="main" data-decoded="true"><div class="bg-quaternary pb-6 pt-5">
4993    <div class="md:flex justify-between text-white container lg:grid grid-cols-8">
4994        <div class="flex items-center order-2 col-span-2 mb-4 md:mb-0 w-60 socials">
4995            <h5 class="font-bold font-baloo-bhaina text-white">Seguici su</h5>
4996            <a target="_blank" href="https://www.instagram.com/farma.it/" class="ml-4">
4997                <img title="instagram" class='w-5 h-5' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/icon/social/instagram.svg" alt="instagram" />
4998            </a>
4999            <a target="_blank" href="https://www.facebook.com/farmapuntoit" class="ml-4">
5000                <img title="Facebook" class='w-5 h-5' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/icon/social/facebook.svg" alt="Facebook" />
5001            </a>
5002        </div>
5003        <div class="col-span-6">
5004            <p class="text-xxs mt-2 mb-2 md:flex font-normal leading-5 md:text-xs">Farma.it S.a.s. P. IVA 07417261216  REA: NA-884088 <br class="sm:hidden">
5005                <span class="flex gap-1.5"><span class="hidden md:block">&nbsp;&nbsp;-</span>CREDITS &nbsp;
5006                 <a href="https://www.dnafactory.it/" target="_blank" title="DNA Factory">
5007                    <img title="DNAFactory" class='w-28 h-5' loading="lazy" src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/dnafactory_logo_negativo.svg" alt="DNAFactory" />
5008                 </a>
5009                </span>
5010            </p>
5011
5012            <p class="text-xxs md:text-xs">Sede legale Via delle Repubbliche Marinare 128, 80147 Napoli </br>
5013Vendita online di medicinali senza obbligo di prescrizione effettuata tramite esercizio autorizzato dal Ministero della Salute – Codice identificativo n. 016715</p>
5014        </div>
5015    </div>
5016</div></div>                     </div>
5017                             </template>
5018            </div>
5019                </div></footer>
5020<script>
5021    function amBannerInjectorResolver () {
5022        const injectors = Object.values({"products.among.injector":{"position":14,"name":"amBannerAmongCategoryInjector"},"products.belowcart.injector":{"position":15,"name":"amBannerBelowCartInjector"}});
5023
5024        return {
5025            amBannerAmongCategoryInjector: function (sectionId, injectorParams) {
5026                const container = document.querySelector('[data-role="amasty-banner-container"][data-position="' + sectionId + '"]');
5027
5028                Object.keys(injectorParams.banners).map((id) => {
5029                    const params = injectorParams.banners[id];
5030                    const element = container.querySelector('[data-banner-id="' + id + '"]');
5031                    insertBannerAmongCategoryByConfig({
5032                        containerSelector: injectorParams.containerSelector,
5033                        itemSelector: injectorParams.itemSelector,
5034                        afterProductRow: params.afterProductRow,
5035                        afterProductNum: params.afterProductNum,
5036                        span: params.width
5037                    }, element);
5038                });
5039
5040                function insertBannerAmongCategoryByConfig (injectorConfig, element) {
5041                    const options = {
5042                        injectorConfig: {},
5043                        container: null,
5044                        after: null,
5045                        wrapper: null,
5046                        initialized: false,
5047                        gridSizes: ['sm', 'xl'],
5048                        bannerWidthClass: 'col-span',
5049                        ...injectorConfig
5050                    }
5051
5052                    insertBanner(element);
5053
5054                    function insertBanner(element) {
5055                        const initialized = setOptions();
5056
5057                        if (!initialized) {
5058                            return;
5059                        }
5060
5061                        element.classList.add('ambanners-injected-banner');
5062                        const wrapper = options.wrapper.cloneNode(true);
5063
5064                        wrapper.classList.remove('card', 'card-interactive');
5065                        addStylesForDifferentSizes(wrapper);
5066
5067                        insertWrapper(wrapper);
5068                        wrapper.append(element);
5069                    }
5070
5071                    function setOptions () {
5072                        const initialized = document.querySelector(options.containerSelector) !== null;
5073
5074                        if (!initialized) {
5075                            console.warn(
5076                                'Failed to initialize banner: Can\'t find an element with selector "' + options.containerSelector + '"'
5077                            );
5078
5079                            return;
5080                        }
5081
5082                        options.container = document.querySelector(options.containerSelector);
5083
5084                        setLineToInject();
5085
5086                        if (!options.after) {
5087                            return;
5088                        }
5089
5090                        setWrapper();
5091
5092                        return true;
5093                    }
5094
5095                    function setLineToInject() {
5096                        if (options.afterProductNum === -1) {
5097                            setFirstLineToInject();
5098                        } else {
5099                            setLineByPositionToInject();
5100                        }
5101                    }
5102
5103                    function setWrapper() {
5104                        if (options.after) {
5105                            options.wrapper = options.after.cloneNode();
5106                        }
5107                    }
5108
5109                    function setFirstLineToInject() {
5110                        options.after = document.querySelector(options.itemSelector);
5111                    }
5112
5113                    function setLineByPositionToInject() {
5114                        // calc banner insert offset
5115                        const offset = calculateOffsetBasedOnPreviousBanners();
5116
5117                        options.after = document.querySelectorAll(options.itemSelector)[options.afterProductNum - offset];
5118                    }
5119
5120                    function calculateOffsetBasedOnPreviousBanners () {
5121                        return [...document.querySelectorAll(`${options.itemSelector}`)]
5122                            ?.reduce((accumulator, amInjectedBannerWrapper) => {
5123                                const widthAttributeValue = Number(amInjectedBannerWrapper?.getAttribute('am-banner-span'))
5124
5125                                if (widthAttributeValue > 1) {
5126                                    accumulator += (widthAttributeValue - 1);
5127                                }
5128
5129                                return accumulator;
5130                            }, 0);
5131                    }
5132
5133                    function insertWrapper(insert) {
5134                        if (options.after) {
5135                            insertWrapperAfterFoundProduct(insert);
5136                        } else if (options.container) {
5137                            insertWrapperInProductListContainer(insert);
5138                        }
5139                    }
5140
5141                    function insertWrapperAfterFoundProduct(insert) {
5142                        if (options.afterProductNum === -1) {
5143                            options.after.parentNode.insertBefore(insert, options.after);
5144                        } else {
5145                            options.after.parentNode.insertBefore(insert, options.after.nextSibling);
5146                        }
5147                    }
5148
5149                    function insertWrapperInProductListContainer(insert) {
5150                        if (parseInt(options.afterProductRow) > 1) {
5151                            options.container.innerHTML += insert.innerHTML;
5152                        } else {
5153                            options.container.innerHTML = insert.innerHTML + options.container.innerHTML;
5154                        }
5155                    }
5156
5157                    function addStylesForDifferentSizes (wrapper) {
5158                        options.gridSizes?.forEach((size, index) => {
5159                            const widthValue = options.span > index + 1 ? index + 2 : options.span;
5160                            wrapper?.classList.add(`${size}:${options.bannerWidthClass}-${widthValue}`);
5161                            wrapper?.setAttribute('am-banner-span', widthValue);
5162                        });
5163                    }
5164                }
5165            },
5166
5167            amBannerBelowCartInjector: function (sectionId) {
5168                const belowProductAddToCartBanner = document.querySelector('.ambanners.ambanner-' + sectionId);
5169                belowProductAddToCartBanner.style.display = 'block';
5170                document.querySelectorAll('.product-item')?.forEach(product => {
5171                    product?.append(belowProductAddToCartBanner.cloneNode(true));
5172                });
5173                belowProductAddToCartBanner.style.display = 'none';
5174            },
5175
5176            resolve: function (position, injectorParams) {
5177                const injector = injectors.find((injector) => {
5178                    return injector.position === Number(position);
5179                });
5180
5181                return this[injector?.name]?.(position, injectorParams);
5182            }
5183        }
5184    }
5185</script>
5185
5186    <span class="data-fbq-success" data-fbq-success="true"></span>
5187
5188<div x-data="{...hyva.modal(), ...initAmGdprPolicyPopup()}" x-init="initGdprPopup()"
5189     x-spread="eventListeners" x-bind="eventListeners">
5190    <div x-cloak x-spread="overlay('amgdpr-policy-popup')" x-bind="overlay('amgdpr-policy-popup')"
5191         class="fixed inset-0 flex items-center justify-center text-left bg-black bg-opacity-50 z-40">
5192        <div x-ref="amgdpr-policy-popup" role="dialog" aria-labelledby="amgdpr-policy-content"
5193             class="flex flex-col  bg-white shadow-xl rounded-lg p-10 max-h-[95vh] max-w-6xl relative">
5194            <button @click="$dispatch('amgdpr-close-policy')" aria-label="Chiudi"
5195                    class="absolute right-4 top-4 text-gray-300 transition
5196                    hover:text-black focus:drop-shadow-md hover:drop-shadow-md">
5197                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="h-6 w-6" width="24" height="24" role="img">
5198  <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/>
5199<title>x</title></svg>
5200            </button>
5201            <div class="flex w-full">
5202                <p class="w-full text-3xl mb-5" x-text="title"></p>
5203            </div>
5204            <div x-show="notificationText && policyData.versionChanged" class="flex w-full">
5205                <p class="mb-4 p-4 bg-yellow-100 w-full" x-text="notificationText"></p>
5206            </div>
5207            <div id="amgdpr-policy-content" class="max-h-[500px] overflow-auto first:mx-0 child:mx-0"
5208                 x-html="policyText"></div>
5209            <div class="mt-8 flex w-full justify-center">
5210                <button x-focus-first @click="$dispatch('amgdpr-accept-policy')" type="button"
5211                        class="btn btn-primary font-bold"
5212                        aria-label="Ho&#x20;letto&#x20;e&#x20;Acconsento">
5213                    Ho letto e Acconsento                </button>
5214            </div>
5215        </div>
5216
5217    </div>
5218</div>
5219
5220<script>
5221    'use strict';
5222
5223    function initAmGdprPolicyPopup() {
5224        return {
5225            /**
5226             * @typedef PolicyData
5227             * @property {string} policyVersion
5228             * @property {boolean} show
5229             * @property {string} title
5230             * @property{boolean} versionChanged
5231             * @property {boolean} hideClose
5232             * @property {boolean} action
5233             */
5234
5235            eventListeners: {
5236                ['@amgdpr-accept-policy']() {
5237                    if (this.consentId) {
5238                        window.dispatchEvent(new CustomEvent('amgdpr-consent-accepted', {detail: this.consentId}));
5239                        this.consentId = undefined;
5240                        this.hide('amgdpr-policy-popup');
5241                    } else {
5242                        this.acceptPolicy();
5243                    }
5244                },
5245                ['@amgdpr-show-policy.window'](event) {
5246                    this.consentId = event.detail;
5247                    this.fetchPolicyContent().then(() => {
5248                        this.$nextTick(() => {
5249                            this.show('amgdpr-policy-popup');
5250                        });
5251                    });
5252                },
5253                ['@amgdpr-close-policy']() {
5254                    this.hide('amgdpr-policy-popup');
5255                }
5256            },
5257            textUrl: `${BASE_URL}gdpr/policy/policytext`,
5258            acceptUrl: `${BASE_URL}gdpr/policy/accept`,
5259            popupDataUrl: `${BASE_URL}gdpr/policy/popupData`,
5260            notificationText: 'We would like to inform you that our Privacy Policy has been amended.Please, read and accept the new terms.',
5261            showOnPageLoad: '',
5262            /**
5263             * @type PolicyData
5264             */
5265            policyData: {
5266                policyVersion: '',
5267                show: false,
5268                title: '',
5269                versionChanged: false,
5270                hideClose: false,
5271                action: true
5272            },
5273            title: '',
5274            policyText: '',
5275            consentId: undefined,
5276            initGdprPopup: function () {
5277                this.fetchPolicyData().then(() => {
5278                    if ((this.showOnPageLoad && this.policyData.show) || this.policyData.versionChanged) {
5279                        this.fetchPolicyContent().then(() => {
5280                            this.$nextTick(() => {
5281                                this.show('amgdpr-policy-popup');
5282                            });
5283                        });
5284                    }
5285                });
5286            },
5287
5288            /**
5289             * @returns {Promise}
5290             */
5291            fetchPolicyData: function () {
5292                return fetch(this.popupDataUrl)
5293                    .then(response => response.json())
5294                    .then((data) => {
5295                        this.policyData = {...data}
5296                    })
5297                    .catch(error => this.dispatchErrorMessage(error));
5298            },
5299
5300            /**
5301             * @returns {Promise}
5302             */
5303            fetchPolicyContent: function () {
5304                this.title = '';
5305                this.policyText = '';
5306
5307                const params = !!this.consentId
5308                    ? '?' + new URLSearchParams({consent_id: this.consentId})
5309                    : ''
5310
5311                return fetch(this.textUrl + params)
5312                    .then(response => response.json())
5313                    .then(policyContent => {
5314                        this.title = policyContent.title;
5315                        this.policyText = policyContent.content;
5316                    }).catch(error => this.dispatchErrorMessage(error));
5317            },
5318
5319            /**
5320             * @returns {void}
5321             */
5322            acceptPolicy: function () {
5323                window.dispatchEvent(new Event('amgdpr-loading-start'));
5324
5325                const body = new URLSearchParams({form_key: hyva.getFormKey(), ...this.policyData});
5326                const contentType = 'application/x-www-form-urlencoded; charset=UTF-8';
5327
5328                fetch(this.acceptUrl, {method: 'POST', body, headers: {'Content-Type': contentType}})
5329                    .then(response => response.json())
5330                    .then(data => {
5331                        if (data.error) {
5332                            this.dispatchErrorMessage(data.message)
5333                        } else {
5334                            this.notificationText = '';
5335                            this.hide('amgdpr-policy-popup');
5336                        }
5337                    })
5338                    .catch(error => this.dispatchErrorMessage(error))
5339                    .finally(() => window.dispatchEvent(new Event('amgdpr-loading-stop')));
5340            },
5341
5342            /**
5343             * @param {string} message
5344             * @returns {void}
5345             */
5346            dispatchErrorMessage: function (message) {
5347                typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([
5348                    {
5349                        type: "error",
5350                        text: message
5351                    }
5352                ]);
5353            }
5354        }
5355    }
5356</script>
5356
5357
5358
5359
5360
5361<script>
5362    function initFakeBrothers() {
5363        return {
5364            selected: 0,
5365            productId: 0,
5366            data: [],
5367            skeletonCount: 0,
5368            fetched: false,
5369            ajaxUrl: 'https://www.farma.it/fakeconfigurable/product/getBrothers/',
5370            showAttribute: false,
5371            attributeLabel: 'Color',
5372            optionDisplay: null,
5373            responsive: false,
5374            responsiveData: {
5375                children: [],
5376                childrenLenght: 0,
5377                itemSize: 0,
5378                itemOffset: 0,
5379                childrenSize: 0,
5380                boxSize: 0,
5381                hiddenCount: 0
5382            },
5383            init() {
5384                // Skeleton init
5385                if (this.skeletonCount) {
5386                    this.data = Array.from({length: this.skeletonCount}, () => ({}));
5387                }
5388                // Responsive init
5389                this.$nextTick(() => {
5390                    if (this.responsive && this.data.length) {
5391                        this.initResponsive();
5392                    }
5393                });
5394                // Brothers init
5395                if (this.productId) {
5396                    fetch(this.ajaxUrl + '?productId=' + this.productId)
5397                        .then(response => {
5398                            if (! response.ok) console.warn('GET request failed');
5399                            return response.json()
5400                        })
5401                        .then(result => {
5402                            if (this.showAttribute) {
5403                                result.data.forEach(function (item, index) {
5404                                    if (item.attribute == false) {
5405                                        result.data[index].attribute = '';
5406                                    }
5407                                });
5408                            }
5409                            this.data = result.data;
5410                            this.fetched = true;
5411                            // Attribute init
5412                            this.$nextTick(() => {
5413                                if (this.showAttribute) {
5414                                    // Siccome "x-ref" non funziona dentro gli elementi "template" devo usare "querySelector"
5415                                    this.optionDisplay = document.querySelector('[x-ref="optionDisplay"]');
5416                                    this.optionDisplay.innerText = this.data[0].attribute;
5417                                }
5418                            })
5419                        })
5420                        .catch(result => {
5421                            console.error(result.error);
5422                        })
5423                }
5424            },
5425            initResponsive() {
5426                this.responsiveData.children = this.$el.querySelectorAll('.brother');
5427                this.responsiveData.itemSize = this.responsiveData.children[0].offsetWidth + this.responsiveData.itemOffset;
5428                this.responsiveData.childrenLenght = this.responsiveData.children.length;
5429                this.responsiveData.childrenSize = this.responsiveData.childrenLenght * this.responsiveData.itemSize;
5430                this.calculateHiddenCount();
5431            },
5432            calculateHiddenCount() {
5433                if (this.responsive) {
5434                    this.responsiveData.boxSize = this.$el.offsetWidth;
5435
5436                    if (this.responsiveData.childrenSize > this.responsiveData.boxSize) {
5437                        this.responsiveData.hiddenCount =
5438                            Math.ceil((this.responsiveData.childrenSize - this.responsiveData.boxSize) / this.responsiveData.itemSize) + 1;
5439                    } else {
5440                        this.responsiveData.hiddenCount = 0;
5441                    }
5442                }
5443            },
5444            eventListeners: {
5445                ['@resize.window.debounce.50ms']() {
5446                    this.calculateHiddenCount();
5447                }
5448            }
5449        }
5450
5451    }
5452</script>
5452
5453<!-- Start Google Analytics 4 for Google Tag Manager by MagePal -->
5454        
5454<script type="text/javascript">
5455             (function() {
5456                window.addEventListener("private-content-loaded", event => {
5457                    const dataObject = event.detail.data['magepal-eegtm-jsdatalayer'] || {};
5458                    pushAddRemoveItemDataLayer(dataObject)
5459                });
5460
5461                const isObject = x => x === Object(x);
5462                const has = (x, p) => isObject(x) && x.hasOwnProperty(p);
5463                var itemListName = null;
5464                var itemListId = null;
5465
5466                function isEmpty(obj){
5467                    return JSON.stringify(obj) === '{}';
5468                }
5469
5470                function addDynamicElements(storedData, item) {
5471
5472                    if (has(storedData, 'index')) {
5473                        item.index = storedData.index;
5474                    }
5475
5476                    if (has(storedData, 'item_list_id')) {
5477                        item.item_list_id = itemListId = storedData.item_list_id;
5478                    }
5479
5480                    if (has(storedData, 'item_list_name')) {
5481                        item.item_list_name = itemListName = storedData.item_list_name;
5482                    }
5483                }
5484                /**
5485                 * Add click position/index to data
5486                 * @param ecommerceData
5487                 * @return {*}
5488                 */
5489                function processData(ecommerceData) {
5490                    var storedData = JSON.parse(window.localStorage.getItem("product-click-ga4"));
5491
5492                    ecommerceData.forEach((data) => {
5493                        if (has(data, 'parent_sku')
5494                            && isObject(storedData)
5495                            && has(storedData, 'item_id')
5496                            && data.parent_sku === storedData.item_id
5497                        ) {
5498                            addDynamicElements(storedData, data);
5499                        } else if (has(data, 'parent_sku')) {
5500                            var product = getProductBySku(data.parent_sku);
5501
5502                            if (product) {
5503                                addDynamicElements(product, data);
5504                            }
5505                        }
5506                    });
5507
5508                    return ecommerceData;
5509                }
5510
5511                 function getProductBySku(sku) {
5512                     var dlItems = window.dataLayer.find((item) => item?.ecommerce?.items)
5513
5514                     if (dlItems !== 'undefined') {
5515                         var dlItem = dlItems?.ecommerce?.items.find((item) => item.item_id === sku)
5516                         if (dlItem !== undefined) {
5517                             return dlItem;
5518                         }
5519                     }
5520
5521                     return false;
5522                 }
5523
5524                function pushAddRemoveItemDataLayer(data) {
5525                    if (isObject(data) && has(data, 'cart_items')) {
5526                        var ts = window.localStorage.getItem("magepal-eegtm-jsdatalayer-ts");
5527
5528                        if (ts !== 'undefined' && parseInt(ts) === parseInt(data.data_id)) {
5529                            return false;
5530                        } else {
5531                            window.localStorage.setItem("magepal-eegtm-jsdatalayer-ts", parseInt(data.data_id));
5532                        }
5533
5534                        var cartGenericLayer = {};
5535                        var dataLayer = window.dataLayer;
5536                        var self = this;
5537
5538                        data.cart_items.forEach((cartItem) =>  {
5539                            if (has(cartItem, 'event')) {
5540                                if (has(cartItem,'ecommerce')) {
5541                                    cartItem.ecommerce.currency = 'EUR';
5542                                }
5543
5544                                if (cartItem.event === 'add_to_cart') {
5545                                    var itemsAdded = processData(cartItem.ecommerce.items);
5546
5547                                    //$("body").trigger("mpGa4ItemAddToCart", [itemsAdded, dataLayer]);
5548                                    cartGenericLayer.add = {
5549                                        'products': itemsAdded
5550                                    };
5551                                }
5552
5553                                if (cartItem.event === 'remove_from_cart') {
5554                                    var itemsRemoved = processData(cartItem.ecommerce.items);
5555
5556                                    //$("body").trigger("mpGa4ItemRemoveFromCart", [itemsRemoved, dataLayer]);
5557                                    cartGenericLayer.remove = {
5558                                        'products': itemsRemoved
5559                                    };
5560                                }
5561                            }
5562
5563                            if (!isEmpty(cartGenericLayer)) {
5564                                cartItem.cart = cartGenericLayer;
5565                            }
5566                            cartItem._clear = true;
5567                            dataLayer.push(cartItem);
5568                        });
5569                    }
5570                }
5571            })();
5572        </script>
5572
5573    <!-- End Google Analytics 4 for Google Tag Manager by MagePal -->
5574
5575<script>
5576    document.addEventListener("alpine:initialized", () => {
5577        Alpine.store('dnafactoryGA4Promotions', {
5578            promotions: [{"creative_name":"Cemon 21092026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Cemon 21092026 BannerCategory","promotion_name":"Cemon 21092026 BannerCategory","css_selector":"[title=\"Cemon 21092026 BannerCategory\"]"},{"creative_name":"Bioderma 21092026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Bioderma 21092026 Sliderhomepage","promotion_name":"Bioderma 21092026 Sliderhomepage","css_selector":"[title=\"Bioderma 21092026 Sliderhomepage\"]"},{"creative_name":"Perrigo 21092026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Perrigo 21092026 Sliderhomepage","promotion_name":"Perrigo 21092026 Sliderhomepage","css_selector":"[title=\"Perrigo 21092026 Sliderhomepage\"]"},{"creative_name":"Wala 21092026 BannerCarrello","creative_slot":"BannerCarrello","promotion_id":"Wala 21092026 BannerCarrello","promotion_name":"Wala 21092026 BannerCarrello","css_selector":"[title=\"Wala 21092026 BannerCarrello\"]"},{"creative_name":"Erbavita 22092026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Erbavita 22092026 BannerCategory","promotion_name":"Erbavita 22092026 BannerCategory","css_selector":"[title=\"Erbavita 22092026 BannerCategory\"]"},{"creative_name":"Galderma 22092026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Galderma 22092026 BannerCategory","promotion_name":"Galderma 22092026 BannerCategory","css_selector":"[title=\"Galderma 22092026 BannerCategory\"]"},{"creative_name":"Alfasigma 22092026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Alfasigma 22092026 Sliderhomepage","promotion_name":"Alfasigma 22092026 Sliderhomepage","css_selector":"[title=\"Alfasigma 22092026 Sliderhomepage\"]"},{"creative_name":"Wala 23092026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Wala 23092026 Sliderhomepage","promotion_name":"Wala 23092026 Sliderhomepage","css_selector":"[title=\"Wala 23092026 Sliderhomepage\"]"},{"creative_name":"Wala 23092026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Wala 23092026 BannerCategory","promotion_name":"Wala 23092026 BannerCategory","css_selector":"[title=\"Wala 23092026 BannerCategory\"]"},{"creative_name":"Ganassini 23092026 BannerProductPage","creative_slot":"BannerProductPage","promotion_id":"Ganassini 23092026 BannerProductPage","promotion_name":"Ganassini 23092026 BannerProductPage","css_selector":"[title=\"Ganassini 23092026 BannerProductPage\"]"},{"creative_name":"Uriage 23092026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Uriage 23092026 Sliderhomepage","promotion_name":"Uriage 23092026 Sliderhomepage","css_selector":"[title=\"Uriage 23092026 Sliderhomepage\"]"},{"creative_name":"Ibsa 23092026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Ibsa 23092026 BannerCategory","promotion_name":"Ibsa 23092026 BannerCategory","css_selector":"[title=\"Ibsa 23092026 BannerCategory\"]"},{"creative_name":"Swisse 24092026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Swisse 24092026 Sliderhomepage","promotion_name":"Swisse 24092026 Sliderhomepage","css_selector":"[title=\"Swisse 24092026 Sliderhomepage\"]"},{"creative_name":"Swisse 24092026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Swisse 24092026 BannerCategory","promotion_name":"Swisse 24092026 BannerCategory","css_selector":"[title=\"Swisse 24092026 BannerCategory\"]"},{"creative_name":"Manetti 24092026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Manetti 24092026 Sliderhomepage","promotion_name":"Manetti 24092026 Sliderhomepage","css_selector":"[title=\"Manetti 24092026 Sliderhomepage\"]"},{"creative_name":"Schwabe 24092026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Schwabe 24092026 BannerCategory","promotion_name":"Schwabe 24092026 BannerCategory","css_selector":"[title=\"Schwabe 24092026 BannerCategory\"]"},{"creative_name":"Pharmalife 24092026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Pharmalife 24092026 BannerCategory","promotion_name":"Pharmalife 24092026 BannerCategory","css_selector":"[title=\"Pharmalife 24092026 BannerCategory\"]"},{"creative_name":"Zeta 25092026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Zeta 25092026 BannerCategory","promotion_name":"Zeta 25092026 BannerCategory","css_selector":"[title=\"Zeta 25092026 BannerCategory\"]"},{"creative_name":"Montefarmaco 25092026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Montefarmaco 25092026 Sliderhomepage","promotion_name":"Montefarmaco 25092026 Sliderhomepage","css_selector":"[title=\"Montefarmaco 25092026 Sliderhomepage\"]"},{"creative_name":"Aboca 25092026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Aboca 25092026 Sliderhomepage","promotion_name":"Aboca 25092026 Sliderhomepage","css_selector":"[title=\"Aboca 25092026 Sliderhomepage\"]"},{"creative_name":"Named 28092026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Named 28092026 BannerCategory","promotion_name":"Named 28092026 BannerCategory","css_selector":"[title=\"Named 28092026 BannerCategory\"]"},{"creative_name":"Loreal 28092026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Loreal 28092026 Sliderhomepage","promotion_name":"Loreal 28092026 Sliderhomepage","css_selector":"[title=\"Loreal 28092026 Sliderhomepage\"]"},{"creative_name":"Menarini 29092026 BannerProductPage","creative_slot":"BannerProductPage","promotion_id":"Menarini 29092026 BannerProductPage","promotion_name":"Menarini 29092026 BannerProductPage","css_selector":"[title=\"Menarini 29092026 BannerProductPage\"]"},{"creative_name":"Uniderm 29092026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Uniderm 29092026 BannerCategory","promotion_name":"Uniderm 29092026 BannerCategory","css_selector":"[title=\"Uniderm 29092026 BannerCategory\"]"},{"creative_name":"Prodeco 30092026 BannerProductPage","creative_slot":"BannerProductPage","promotion_id":"Prodeco 30092026 BannerProductPage","promotion_name":"Prodeco 30092026 BannerProductPage","css_selector":"[title=\"Prodeco 30092026 BannerProductPage\"]"},{"creative_name":"Alfasigma 30092026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Alfasigma 30092026 Sliderhomepage","promotion_name":"Alfasigma 30092026 Sliderhomepage","css_selector":"[title=\"Alfasigma 30092026 Sliderhomepage\"]"},{"creative_name":"Farmait 30092026 BannerProductPage","creative_slot":"BannerProductPage","promotion_id":"Farmait 30092026 BannerProductPage","promotion_name":"Farmait 30092026 BannerProductPage","css_selector":"[title=\"Farmait 30092026 BannerProductPage\"]"},{"creative_name":"farmait 01102026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"farmait 01102026 Sliderhomepage","promotion_name":"farmait 01102026 Sliderhomepage","css_selector":"[title=\"farmait 01102026 Sliderhomepage\"]"},{"creative_name":"Farmait 01102026 BannerProductPage","creative_slot":"BannerProductPage","promotion_id":"Farmait 01102026 BannerProductPage","promotion_name":"Farmait 01102026 BannerProductPage","css_selector":"[title=\"Farmait 01102026 BannerProductPage\"]"},{"creative_name":"Boiron 01102026 BannerProductPage","creative_slot":"BannerProductPage","promotion_id":"Boiron 01102026 BannerProductPage","promotion_name":"Boiron 01102026 BannerProductPage","css_selector":"[title=\"Boiron 01102026 BannerProductPage\"]"},{"creative_name":"Boehringer 02102026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Boehringer 02102026 BannerCategory","promotion_name":"Boehringer 02102026 BannerCategory","css_selector":"[title=\"Boehringer 02102026 BannerCategory\"]"},{"creative_name":"Boehringer 02102026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Boehringer 02102026 Sliderhomepage","promotion_name":"Boehringer 02102026 Sliderhomepage","css_selector":"[title=\"Boehringer 02102026 Sliderhomepage\"]"},{"creative_name":"Haleon 02102026 BannerProductPage","creative_slot":"BannerProductPage","promotion_id":"Haleon 02102026 BannerProductPage","promotion_name":"Haleon 02102026 BannerProductPage","css_selector":"[title=\"Haleon 02102026 BannerProductPage\"]"},{"creative_name":"Apivita 02102026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Apivita 02102026 BannerCategory","promotion_name":"Apivita 02102026 BannerCategory","css_selector":"[title=\"Apivita 02102026 BannerCategory\"]"},{"creative_name":"Danone 02102026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Danone 02102026 BannerCategory","promotion_name":"Danone 02102026 BannerCategory","css_selector":"[title=\"Danone 02102026 BannerCategory\"]"},{"creative_name":"Guna 02102026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Guna 02102026 BannerCategory","promotion_name":"Guna 02102026 BannerCategory","css_selector":"[title=\"Guna 02102026 BannerCategory\"]"},{"creative_name":"Rilastil 02102026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Rilastil 02102026 Sliderhomepage","promotion_name":"Rilastil 02102026 Sliderhomepage","css_selector":"[title=\"Rilastil 02102026 Sliderhomepage\"]"},{"creative_name":"Boiron 02102026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Boiron 02102026 Sliderhomepage","promotion_name":"Boiron 02102026 Sliderhomepage","css_selector":"[title=\"Boiron 02102026 Sliderhomepage\"]"},{"creative_name":"Prodeco 05102026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Prodeco 05102026 BannerCategory","promotion_name":"Prodeco 05102026 BannerCategory","css_selector":"[title=\"Prodeco 05102026 BannerCategory\"]"},{"creative_name":"Oti 05102026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Ot
5578i 05102026 Sliderhomepage","promotion_name":"Oti 05102026 Sliderhomepage","css_selector":"[title=\"Oti 05102026 Sliderhomepage\"]"},{"creative_name":"Eucerin 05102026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Eucerin 05102026 BannerCategory","promotion_name":"Eucerin 05102026 BannerCategory","css_selector":"[title=\"Eucerin 05102026 BannerCategory\"]"},{"creative_name":"Rilastil 05102026 BannerProductPage","creative_slot":"BannerProductPage","promotion_id":"Rilastil 05102026 BannerProductPage","promotion_name":"Rilastil 05102026 BannerProductPage","css_selector":"[title=\"Rilastil 05102026 BannerProductPage\"]"},{"creative_name":"Rilastil 05102026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Rilastil 05102026 BannerCategory","promotion_name":"Rilastil 05102026 BannerCategory","css_selector":"[title=\"Rilastil 05102026 BannerCategory\"]"},{"creative_name":"IMO 05102026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"IMO 05102026 Sliderhomepage","promotion_name":"IMO 05102026 Sliderhomepage","css_selector":"[title=\"IMO 05102026 Sliderhomepage\"]"},{"creative_name":"IMO 05102026 BannerCarrello","creative_slot":"BannerCarrello","promotion_id":"IMO 05102026 BannerCarrello","promotion_name":"IMO 05102026 BannerCarrello","css_selector":"[title=\"IMO 05102026 BannerCarrello\"]"},{"creative_name":"Kenvue 05102026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Kenvue 05102026 Sliderhomepage","promotion_name":"Kenvue 05102026 Sliderhomepage","css_selector":"[title=\"Kenvue 05102026 Sliderhomepage\"]"},{"creative_name":"Kenvue 05102026 BannerProductPage","creative_slot":"BannerProductPage","promotion_id":"Kenvue 05102026 BannerProductPage","promotion_name":"Kenvue 05102026 BannerProductPage","css_selector":"[title=\"Kenvue 05102026 BannerProductPage\"]"},{"creative_name":"Sanofi 05102026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Sanofi 05102026 Sliderhomepage","promotion_name":"Sanofi 05102026 Sliderhomepage","css_selector":"[title=\"Sanofi 05102026 Sliderhomepage\"]"},{"creative_name":"Esi 05102026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Esi 05102026 Sliderhomepage","promotion_name":"Esi 05102026 Sliderhomepage","css_selector":"[title=\"Esi 05102026 Sliderhomepage\"]"},{"creative_name":"Esi 05102026 BannerProductPage","creative_slot":"BannerProductPage","promotion_id":"Esi 05102026 BannerProductPage","promotion_name":"Esi 05102026 BannerProductPage","css_selector":"[title=\"Esi 05102026 BannerProductPage\"]"},{"creative_name":"Salugea 06102026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Salugea 06102026 BannerCategory","promotion_name":"Salugea 06102026 BannerCategory","css_selector":"[title=\"Salugea 06102026 BannerCategory\"]"},{"creative_name":"Prodeco 07102026 BannerProductPage","creative_slot":"BannerProductPage","promotion_id":"Prodeco 07102026 BannerProductPage","promotion_name":"Prodeco 07102026 BannerProductPage","css_selector":"[title=\"Prodeco 07102026 BannerProductPage\"]"},{"creative_name":"Erbavita 07102026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Erbavita 07102026 Sliderhomepage","promotion_name":"Erbavita 07102026 Sliderhomepage","css_selector":"[title=\"Erbavita 07102026 Sliderhomepage\"]"},{"creative_name":"Farmaderbe 07102026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Farmaderbe 07102026 BannerCategory","promotion_name":"Farmaderbe 07102026 BannerCategory","css_selector":"[title=\"Farmaderbe 07102026 BannerCategory\"]"},{"creative_name":"Angelini 07102026 BannerProductPage","creative_slot":"BannerProductPage","promotion_id":"Angelini 07102026 BannerProductPage","promotion_name":"Angelini 07102026 BannerProductPage","css_selector":"[title=\"Angelini 07102026 BannerProductPage\"]"},{"creative_name":"MarcoViti 08102026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"MarcoViti 08102026 Sliderhomepage","promotion_name":"MarcoViti 08102026 Sliderhomepage","css_selector":"[title=\"MarcoViti 08102026 Sliderhomepage\"]"},{"creative_name":"Elanco 08102026 BannerProductPage","creative_slot":"BannerProductPage","promotion_id":"Elanco 08102026 BannerProductPage","promotion_name":"Elanco 08102026 BannerProductPage","css_selector":"[title=\"Elanco 08102026 BannerProductPage\"]"},{"creative_name":"Elanco 08102026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Elanco 08102026 Sliderhomepage","promotion_name":"Elanco 08102026 Sliderhomepage","css_selector":"[title=\"Elanco 08102026 Sliderhomepage\"]"},{"creative_name":"Procter 08102026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Procter 08102026 BannerCategory","promotion_name":"Procter 08102026 BannerCategory","css_selector":"[title=\"Procter 08102026 BannerCategory\"]"},{"creative_name":"Goovi 08102026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Goovi 08102026 Sliderhomepage","promotion_name":"Goovi 08102026 Sliderhomepage","css_selector":"[title=\"Goovi 08102026 Sliderhomepage\"]"},{"creative_name":"Biosline 08102026 Sliderhomepage","creative_slot":"Sliderhomepage","promotion_id":"Biosline 08102026 Sliderhomepage","promotion_name":"Biosline 08102026 Sliderhomepage","css_selector":"[title=\"Biosline 08102026 Sliderhomepage\"]"},{"creative_name":"Galderma 08102026 BannerCategory","creative_slot":"BannerCategory","promotion_id":"Galderma 08102026 BannerCategory","promotion_name":"Galderma 08102026 BannerCategory","css_selector":"[title=\"Galderma 08102026 BannerCategory\"]"}],
5579            sentViewPromotions: [],
5580            sentClickPromotions: [],
5581
5582            init() {
5583                let self = this;
5584                self.promotions.forEach(function (promotion) {
5585                    var promotionElement = document.querySelector(promotion['css_selector']);
5586                    if (promotionElement) {
5587                        let aElement = promotionElement;
5588                        if (promotionElement.tagName !== 'A') {
5589                            aElement = promotionElement.closest('[data-content-type] a[href]');
5590                        }
5591
5592                        if (aElement) {
5593                            if (!self.sentViewPromotions.includes(promotion['promotion_id'])) {
5594                                self.sendView(promotion, aElement);
5595                            }
5596
5597                            aElement.addEventListener('click', function(e) {
5598                                if (!self.sentClickPromotions.includes(promotion['promotion_id'])) {
5599                                    self.sendClick(promotion, aElement);
5600                                }
5601                            });
5602                        }
5603                    }
5604                });
5605
5606                var additionalObserver = new MutationObserver(function(mutations) {
5607                    mutations.forEach(function(mutation) {
5608                        mutation.addedNodes.forEach(function(addedNode) {
5609                            if (addedNode.matches && addedNode.matches('.swiper-wrapper')) {
5610                                self.promotions.forEach(function (promotion) {
5611                                    var promotionElement = document.querySelector(promotion['css_selector']);
5612                                    if (promotionElement) {
5613                                        let aElement = promotionElement;
5614                                        if (promotionElement.tagName !== 'A') {
5615                                            aElement = promotionElement.closest('[data-content-type] a[href]');
5616                                        }
5617
5618                                        if (!self.sentViewPromotions.includes(promotion['promotion_id'])) {
5619                                            self.sendView(promotion, aElement);
5620                                        }
5621
5622                                        aElement.addEventListener('click', function(e) {
5623                                            if (!self.sentClickPromotions.includes(promotion['promotion_id'])) {
5624                                                self.sendClick(promotion, aElement);
5625                                            }
5626                                        });
5627                                    }
5628                                });
5629                            }
5630                        });
5631                    });
5632                });
5633
5634                document.querySelectorAll('[data-content-type="slider"], [data-role="amasty-banner-container"]').forEach(function (element) {
5635                    additionalObserver.observe(element, {childList: true, subtree: true});
5636                });
5637            },
5638
5639            sendView(promotionData, promotionElement = null) {
5640                this.sentViewPromotions.push(promotionData['promotion_id']);
5641                promotionData = this.normalizeData(promotionData, promotionElement);
5642                window.dataLayer.push({
5643                    event: 'view_promotion',
5644                    ecommerce: {
5645                        creative_name: promotionData['creative_name'],
5646                        creative_slot: promotionData['creative_slot'],
5647                        promotion_id: promotionData['promotion_id'],
5648                        promotion_name: promotionData['promotion_name'],
5649                    }
5650                })
5651            },
5652
5653            sendClick(promotionData, promotionElement = null) {
5654                this.sentClickPromotions.push(promotionData['promotion_id']);
5655                promotionData = this.normalizeData(promotionData, promotionElement);
5656                window.dataLayer.push({
5657                    event: 'select_promotion',
5658                    ecommerce: {
5659                        creative_name: promotionData['creative_name'],
5660                        creative_slot: promotionData['creative_slot'],
5661                        promotion_id: promotionData['promotion_id'],
5662                        promotion_name: promotionData['promotion_name'],
5663                    }
5664                })
5665            },
5666
5667            normalizeData(promotionData, promotionElement = null) {
5668                if (!promotionElement) {
5669                    return promotionData;
5670                }
5671
5672                var imgElement = promotionElement.querySelector('img');
5673                if (!imgElement) {
5674                    return promotionData;
5675                }
5676
5677                promotionData['creative_name'] = promotionData['creative_name'] ? promotionData['creative_name'] : imgElement.src.replace(BASE_URL, '');
5678                promotionData['creative_slot'] = promotionData['creative_slot'] ? promotionData['creative_slot'] : imgElement.alt;
5679                promotionData['promotion_name'] = promotionData['promotion_name'] ? promotionData['promotion_name'] : imgElement.title;
5680                return promotionData;
5681            }
5682        });
5683    });
5684</script>
5684
5685
5686<script>
5687    document.addEventListener("alpine:initialized", () => {
5688        Alpine.store('dnafactoryGA4Items', {
5689            itemsPushed: [],
5690            itemsSelected: [],
5691            itemsToPush: [],
5692
5693            sendItemListDebounced(...itemData) {
5694                let self = this;
5695                var itemDataToPush = itemData.filter(function (el) {
5696                    var itemList = el.item_list_id ?? 'default_list';
5697                    if (!(self.itemsPushed.hasOwnProperty(itemList) && self.itemsPushed[itemList].includes(el.item_id))) {
5698                        if (!self.itemsPushed.hasOwnProperty(itemList)) {
5699                            self.itemsPushed[itemList] = [];
5700                        }
5701                        self.itemsPushed[itemList].push(el.item_id);
5702                        return true;
5703                    }
5704
5705                    return false;
5706                });
5707
5708                this.itemsToPush.push(...itemDataToPush);
5709                Alpine.debounce(this.updateItemList.bind(this), 200)();
5710            },
5711
5712            sendItemList(itemsData, currency = "EUR", itemlistName = "Default List", itemlistId = "default_list") {
5713                window.dataLayer.push({
5714                    event: 'view_item_list',
5715                    ecommerce: {
5716                        items: this.normalizeData(itemsData)
5717                    },
5718                    currency: currency,
5719                    item_list_name: itemlistName,
5720                    item_list_id: itemlistId,
5721                    _clear: true
5722                })
5723            },
5724
5725            sendSelectItem(itemData, currency = "EUR", itemlistName = "Default List", itemlistId = "default_list") {
5726                if (this.itemsSelected.includes(itemData.item_id)) {
5727                    return;
5728                }
5729                this.itemsSelected.push(itemData.item_id);
5730
5731                window.dataLayer.push({
5732                    event: 'select_item',
5733                    ecommerce: {
5734                        items: this.normalizeData([itemData])
5735                    },
5736                    currency: currency,
5737                    item_list_name: itemlistName,
5738                    item_list_id: itemlistId,
5739                    _clear: true
5740                })
5741            },
5742
5743            updateItemList() {
5744                var items = this.itemsToPush;
5745                this.itemsToPush = [];
5746
5747                if (items.length > 0) {
5748                    var firstItem = items[0];
5749                    var [currency, itemListName, itemListId] = [firstItem.currency, firstItem.item_list_name, firstItem.item_list_id];
5750                    this.sendItemList(items, currency, itemListName, itemListId);
5751                }
5752            },
5753
5754            normalizeData(itemData) {
5755                itemData.forEach(function (el) {
5756                    var vatDivider = 1;
5757                    if (el.hasOwnProperty('vat_divider')) {
5758                        vatDivider = (parseFloat(el['vat_divider']) + 100)/100;
5759                        if (vatDivider <= 0) {
5760                            vatDivider = 1;
5761                        }
5762                    }
5763
5764                    if (el.hasOwnProperty('price')) {
5765                        el['price'] = parseFloat((el['price']/vatDivider).toFixed(2));
5766                    }
5767
5768                    if (el.hasOwnProperty('discount')) {
5769                        el['discount'] = parseFloat((el['discount']/vatDivider).toFixed(2));
5770                    }
5771
5772                    if (el.hasOwnProperty('item_category')) {
5773                        var categories = el['item_category'].split(/[>\/]+/);
5774                        if (categories.length > 0) {
5775                            var indexCategory = 1;
5776                            categories.forEach(function (category) {
5777                                var categoryKey = (indexCategory > 1) ? 'item_category' + indexCategory : 'item_category';
5778                                el[categoryKey] = category.trim();
5779                                indexCategory++;
5780                            });
5781                        }
5782                    }
5783                });
5784
5785                return itemData;
5786            }
5787        });
5788    });
5789</script>
5789
5790
5791<script>
5792    window.DNAFACTORY_GA4_SHOW_PRICE_TAX = 0;
5793    if (!window.dataLayer) {
5794        window.dataLayer = [];
5795    }
5796</script>
5796
5797
5798<script>
5799    let SnapSlider = class {
5800        constructor(el, {
5801            labelSepparator = 'di',
5802            autoPager,
5803            groupPager,
5804            loop
5805        } = {}) {
5806            this.el = el;
5807            this.track = this.el.querySelector("[data-track]");
5808            if (!this.track) {
5809                console.warn(
5810                    "No Slider track defined, reverting back to CSS slider.\nPlease create a wrapper for your slides with the attribute data-track",
5811                    this.el
5812                );
5813                return;
5814            }
5815            this.initialLoad = true;
5816            this.slides = [];
5817            this.inViewObserver;
5818            this.mutationObserver;
5819            this.resizeObserver;
5820            this.pager = this.el.querySelector("[data-pager]");
5821            this.navBtns = Array.from(
5822                this.el.querySelectorAll("[data-next], [data-prev]")
5823            );
5824            this.slideLabelSepparator = this.el.dataset.slideLabelSepparator || labelSepparator;
5825            this.useAutoPager = autoPager || this.el.hasAttribute("data-auto-pager") || false;
5826            this.useGroupPager = groupPager || this.el.hasAttribute("data-group-pager") || false;
5827            this.useLoop = loop || this.el.hasAttribute("data-loop") || false;
5828            this.sliderLabel = this.el.hasAttribute("aria-label") && this.el.getAttribute("aria-label").toLowerCase().trim().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
5829            this.sliderId = this.el.id || this.sliderLabel || "slider";
5830            this.markerIdName = "data-target-id";
5831            this.pagerClasses = this.el.dataset.pagerClass || "snap-pager";
5832            this.markerClasses = this.el.dataset.markerClass || "snap-marker";
5833            this.init();
5834        }
5835        init() {
5836            this.setupSlides();
5837            this.setupNav();
5838            if (this.useAutoPager) {
5839                this.createPager();
5840            } else {
5841                this.setupPager();
5842            }
5843            this.setupObservers();
5844            this.setupMutationObserver();
5845            this.setupResizeObserver();
5846            this.el.addEventListener("click", this.eventHandler.bind(this));
5847            this.el.addEventListener("keydown", this.eventHandler.bind(this));
5848            if ("onscrollend" in window) {
5849                this.track.addEventListener("scrollend", () => {
5850                    this.isNavigating = false;
5851                });
5852            } else {
5853                this.track.addEventListener("scroll", () => {
5854                    clearTimeout(this.scrollEndTimer);
5855                    this.scrollEndTimer = setTimeout(() => {
5856                        this.isNavigating = false;
5857                    }, 100);
5858                });
5859            }
5860        }
5861        destroy() {
5862            this.inViewObserver?.disconnect();
5863            this.mutationObserver?.disconnect();
5864            this.resizeObserver?.disconnect();
5865            this.el.removeEventListener("click", this.eventHandler.bind(this));
5866            this.el.removeEventListener("keydown", this.eventHandler.bind(this));
5867        }
5868        roundUpIfGreaterThan(number, min = 8) {
5869            const decimalPart = number - Math.floor(number);
5870            return decimalPart >= min ? Math.ceil(number) : Math.floor(number);
5871        }
5872        getInViewItems() {
5873            const inViewSlides = Array.from(this.track.querySelectorAll("[data-in-view]")).filter((el) => this.slides.includes(el));
5874            const firstInViewSlide = inViewSlides[0] || null;
5875            const lastInViewSlide = inViewSlides[inViewSlides.length - 1] || null;
5876            const isAtStart = firstInViewSlide === this.slides[0];
5877            const isAtEnd = lastInViewSlide === this.slides[this.slides.length - 1];
5878            return {
5879                inViewSlides,
5880                totalInViewSlides: inViewSlides.length,
5881                firstInViewSlide,
5882                lastInViewSlide,
5883                isAtStart,
5884                isAtEnd,
5885                hasNoOverflow: isAtStart && isAtEnd
5886            };
5887        }
5888        groupPagerMarkers() {
5889            if (this.slides.length === 0 || !this.pager || !this.useGroupPager) return;
5890            const totalVisibleSlides = this.roundUpIfGreaterThan(
5891                this.track.offsetWidth / this.slides[0].offsetWidth
5892            );
5893            const markers = Array.from(this.pager.querySelectorAll("a, button"));
5894            markers.forEach((marker, index) => {
5895                marker.style.display = index % totalVisibleSlides === 0 ? null : "none";
5896            });
5897        }
5898        handleInView(entries) {
5899            entries.forEach((entry) => {
5900                const marker = this.pager && (this.pager.querySelector(`[href="#${entry.target.id}"]`) || this.pager.querySelector(
5901                    `[${this.markerIdName}="${entry.target.id}"]`
5902                ));
5903                entry.target.toggleAttribute("data-in-view", entry.isIntersecting);
5904                entry.target.toggleAttribute("inert", !entry.isIntersecting);
5905                marker?.setAttribute("aria-current", entry.isIntersecting);
5906                marker?.setAttribute("tabindex", entry.isIntersecting ? "0" : "-1");
5907            });
5908            const { isAtStart, isAtEnd, hasNoOverflow } = this.getInViewItems();
5909            this.navBtns.forEach((btn) => {
5910                if (btn.hasAttribute("data-next")) {
5911                    btn.style.visibility = hasNoOverflow ? "hidden" : null;
5912                    isAtEnd && !this.useLoop ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled");
5913                }
5914                if (btn.hasAttribute("data-prev")) {
5915                    btn.style.visibility = hasNoOverflow ? "hidden" : null;
5916                    isAtStart && !this.useLoop ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled");
5917                }
5918            });
5919            if (this.pager) {
5920                this.pager.style.visibility = hasNoOverflow ? "hidden" : null;
5921                this.pager.toggleAttribute("inert", hasNoOverflow);
5922            }
5923            if (!this.initialLoad) {
5924                this.el.dispatchEvent(
5925                    new CustomEvent("slideChange", {
5926                        detail: this.getInViewItems()
5927                    })
5928                );
5929            } else {
5930                this.initialLoad = false;
5931            }
5932            if (document.activeElement.parentElement.hasAttribute("data-pager")) {
5933                const activeItems = this.pager.querySelectorAll('[tabindex="0"]');
5934                if (activeItems.length) {
5935                    activeItems[0].focus({ preventScroll: true });
5936                }
5937            }
5938        }
5939        getSlides() {
5940            if (!this.track) return [];
5941            return Array.from(this.track.children).filter(
5942                (child) => child.tagName.toLowerCase() !== "template" && child.tagName.toLowerCase() !== "style" && child.tagName.toLowerCase() !== "script" && child.style.display !== "none"
5943            );
5944        }
5945        refreshSlides() {
5946            this.initialLoad = true;
5947            this.slides = this.getSlides();
5948            this.setupSlides();
5949            if (this.useAutoPager) {
5950                this.createPager();
5951            } else {
5952                this.setupPager();
5953            }
5954            this.groupPagerMarkers();
5955            this.setupObservers();
5956        }
5957        setupSlides() {
5958            this.slides = this.getSlides();
5959            this.slides.forEach((slide, index) => {
5960                const totalSlides = this.slides.length;
5961                const currentSlide = index + 1;
5962                const existingLabel = slide.getAttribute("aria-label") || "";
5963                const isImage = slide.tagName.toLowerCase() === "img" || slide.tagName.toLowerCase() === "picture";
5964                const slideLabelTag = isImage ? "alt" : "aria-label";
5965                const hasAutoLabel = existingLabel.startsWith(
5966                    `${currentSlide} ${this.slideLabelSepparator} `
5967                );
5968                if (!slide.hasAttribute("id")) {
5969                    slide.setAttribute(
5970                        "id",
5971                        `${this.sliderId}-item-${currentSlide}`
5972                    );
5973                }
5974                if (!slide.hasAttribute(slideLabelTag) || slide.getAttribute(slideLabelTag) === "" || hasAutoLabel) {
5975                    slide.setAttribute(
5976                        slideLabelTag,
5977                        `${currentSlide} ${this.slideLabelSepparator} ${totalSlides}`
5978                    );
5979                }
5980                if (slide.tagName.toLowerCase() === "div" && !slide.hasAttribute("role")) {
5981                    slide.setAttribute("role", "group");
5982                }
5983                if (this.pager && !isImage) {
5984                    slide.setAttribute("role", "tabpanel");
5985                }
5986                if (slide.getAttribute("role") === "group") {
5987                    slide.setAttribute("aria-roledescription", "item");
5988                }
5989            });
5990            if (!this.el.hasAttribute("role") && this.el.tagName !== "SECTION") {
5991                this.el.setAttribute("role", "region");
5992            }
5993            if (!this.el.hasAttribute("aria-roledescription")) {
5994                this.el.setAttribute("aria-roledescription", "carousel");
5995            }
5996            if (!this.track.hasAttribute("tabindex")) {
5997                this.track.setAttribute("tabindex", 0);
5998            }
5999            this.track.setAttribute("aria-live", "polite");
6000        }
6001        setupNav() {
6002            this.navBtns.forEach((btn) => {
6003                btn.setAttribute("disabled", "");
6004                btn.removeAttribute("hidden");
6005                btn.classList.remove("invisible");
6006                btn.style.visibility = null;
6007            });
6008        }
6009        createPager() {
6010            const newPager = document.createElement("nav");
6011            newPager.setAttribute("data-pager", "");
6012            newPager.setAttribute("role", "tablist");
6013            newPager.classList.add(...this.pagerClasses.split(" "));
6014            this.slides.forEach((slide, index) => {
6015                const marker = document.createElement("button");
6016                const slideId = slide.id || `${this.sliderId}-item-${index + 1}`;
6017                marker.setAttribute(this.markerIdName, slideId);
6018                marker.classList.add(...this.markerClasses.split(" "));
6019                this.setupPagerMarker(marker, index);
6020                newPager.appendChild(marker);
6021                if (slide.tagName.toLowerCase() !== "img" && slide.tagName.toLowerCase() !== "picture") {
6022                    slide.removeAttribute("aria-roledescription");
6023                    slide.setAttribute("role", "tabpanel");
6024                }
6025            });
6026            if (this.pager) {
6027                this.pager.setAttribute("role", "tablist");
6028                this.pager.replaceChildren(...newPager.children);
6029            } else {
6030                this.track.after(newPager);
6031                this.pager = this.el.querySelector("[data-pager]");
6032            }
6033        }
6034        setupPager() {
6035            if (!this.pager) return;
6036            this.pager.setAttribute("role", "tablist");
6037            const items = Array.from(this.pager.querySelectorAll("a, button"));
6038            items.forEach((marker, index) => this.setupPagerMarker(marker, index));
6039        }
6040        setupPagerMarker(marker, index) {
6041            const markerId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName);
6042            const slideId = markerId || `${this.sliderId}-item-${index + 1}`;
6043            if (!markerId) {
6044                marker.setAttribute(this.markerIdName, slideId);
6045            }
6046            marker.setAttribute("role", "tab");
6047            marker.setAttribute("aria-controls", slideId);
6048            marker.setAttribute("aria-posinset", index + 1);
6049            marker.setAttribute("aria-setsize", this.slides.length);
6050            marker.setAttribute("tabindex", "-1");
6051            if (!marker.hasAttribute("aria-label")) {
6052                marker.setAttribute("aria-label", `Slide ${index + 1}`);
6053            }
6054        }
6055        setupObservers() {
6056            if (this.inViewObserver) {
6057                this.inViewObserver.disconnect();
6058            }
6059            this.inViewObserver = new IntersectionObserver(
6060                this.handleInView.bind(this), {
6061                    root: this.track,
6062                    threshold: 0.8
6063                }
6064            );
6065            this.slides.forEach((slide) => this.inViewObserver.observe(slide));
6066        }
6067        setupMutationObserver() {
6068            this.mutationObserver = new MutationObserver((mutations) => {
6069                if (mutations.some((m) => m.type === "childList" || m.target.parentElement === this.track)) {
6070                    this.refreshSlides();
6071                }
6072            });
6073            this.mutationObserver.observe(this.track, {
6074                childList: true,
6075                subtree: true,
6076                attributeFilter: ["style"]
6077            });
6078        }
6079        setupResizeObserver() {
6080            this.resizeObserver = new ResizeObserver(
6081                this.groupPagerMarkers.bind(this)
6082            );
6083            this.resizeObserver.observe(this.el);
6084        }
6085        goToSlideDir(dir = "next") {
6086            if (this.isNavigating) return;
6087            const { firstInViewSlide, lastInViewSlide } = this.getInViewItems();
6088            const isPrev = dir === "prev";
6089            const referenceSlide = isPrev ? firstInViewSlide : lastInViewSlide;
6090            const currentIndex = this.slides.indexOf(referenceSlide);
6091            let targetIndex = isPrev ? currentIndex - 1 : currentIndex + 1;
6092            if (targetIndex < 0 || targetIndex >= this.slides.length) {
6093                if (!this.useLoop) return;
6094                targetIndex = isPrev ? this.slides.length - 1 : 0;
6095            }
6096            const targetSlide = this.slides[targetIndex];
6097            if (!targetSlide) return;
6098            this.isNavigating = true;
6099            targetSlide.scrollIntoView({
6100                block: "nearest",
6101                inline: isPrev ? "end" : "start"
6102            });
6103        }
6104        pagerToSlide(event) {
6105            if (!event.target.closest("[data-pager]")) return;
6106            const marker = event.target.closest("a, button");
6107            if (!marker) return;
6108            event.preventDefault();
6109            const slideId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName);
6110            const targetSlide = this.track.querySelector(`#${slideId}`);
6111            targetSlide?.scrollIntoView({ block: "nearest", inline: "start" });
6112        }
6113        eventHandler(event) {
6114            const target = event.target.closest(
6115                "[data-next], [data-prev], [data-pager]"
6116            );
6117            if (!target) return;
6118            if (event.type === "click") {
6119                if (target.hasAttribute("data-next")) {
6120                    this.goToSlideDir("next");
6121                } else if (target.hasAttribute("data-prev")) {
6122                    this.goToSlideDir("prev");
6123                } else if (target.closest("[data-pager]")) {
6124                    this.pagerToSlide(event);
6125                }
6126            }
6127            if (event.type === "keydown" && target.closest("[data-pager]")) {
6128                if (event.key === "ArrowRight" || event.key === "ArrowDown") {
6129                    event.preventDefault();
6130                    this.goToSlideDir("next");
6131                } else if (event.key === "ArrowLeft" || event.key === "ArrowUp") {
6132                    event.preventDefault();
6133                    this.goToSlideDir("prev");
6134                }
6135            }
6136        }
6137    };
6138
6139    (() => {
6140        function alpineSnapSlider(Alpine) {
6141            Alpine.directive("snap-slider", (el, {
6142                modifiers
6143            }, {
6144                cleanup
6145            }) => {
6146                const slider = new SnapSlider(el, {
6147                    autoPager: modifiers.includes("auto-pager"),
6148                    groupPager: modifiers.includes("group-pager"),
6149                    loop: modifiers.includes("loop")
6150                });
6151                cleanup(() => {
6152                    slider.destroy();
6153                });
6154            });
6155        }
6156
6157        document.addEventListener("alpine:init", () => {
6158            window.Alpine.plugin(alpineSnapSlider);
6159        });
6160    })();
6161    //# sourceURL=alpine-snap-slider.js
6162</script>
vendor: 1 bytes, line 6162
6162
6163<script>
6164    (() => {
6165        // src/dialog.js
6166        function dialog_default(Alpine) {
6167            Alpine.directive("htmldialog", fylgjaAlpineDialog);
6168            function fylgjaAlpineDialog(el, { expression, modifiers }, { evaluateLater, cleanup }) {
6169            const evaluate = expression.length ? evaluateLater(expression) : () => {};
6170            const lockPageScroll = modifiers.includes("noscroll");
6171            const isModeless = modifiers.includes("modeless");
6172            const closeBy = el.getAttribute("closeby") || modifierValue(modifiers, "closeby", "closerequest");
6173            el.style.display = null;
6174            el.style.length === 0 && el.removeAttribute("style");
6175            if (el._x_isShown) {
6176                open();
6177            }
6178            const closeBySupported = (() => {
6179                return "closedBy" in HTMLDialogElement.prototype;
6180            })();
6181            function scrollLock(use = true) {
6182                document.body.style.overflow = use ? "hidden" : "";
6183            }
6184            function dialogSubmit(event) {
6185                if (event.target.getAttribute("method") === "dialog" || event.submitter?.getAttribute("formmethod") === "dialog") {
6186                event.preventDefault();
6187                evaluate();
6188                }
6189            }
6190            function escapeDialog(event) {
6191                if (event.key !== "Escape") return;
6192                event.preventDefault();
6193                if (closeBy === "none") return;
6194                evaluate();
6195            }
6196            function handleCloseByEvent(event) {
6197                if (event.target !== el) return;
6198                const rect = el.getBoundingClientRect();
6199                const isInDialog = rect.top <= event.clientY && event.clientY <= rect.top + rect.height && rect.left <= event.clientX && event.clientX <= rect.left + rect.width;
6200                if (!isInDialog) {
6201                if (closeBy === "any") {
6202                    if (closeBySupported) {
6203                    event.preventDefault();
6204                    }
6205                    evaluate();
6206                }
6207                }
6208            }
6209            function handleCloseEvent() {
6210                evaluate();
6211            }
6212            function open() {
6213                if (el.hasAttribute("open")) return;
6214                isModeless ? el.show() : el.showModal();
6215                scrollLock(lockPageScroll);
6216            }
6217            function close() {
6218                if (!el.hasAttribute("open")) return;
6219                el.close();
6220                scrollLock(false);
6221            }
6222            el._x_doShow = () => open();
6223            el._x_doHide = () => close();
6224            el.addEventListener("keydown", escapeDialog);
6225            el.addEventListener("submit", dialogSubmit);
6226            el.addEventListener("click", handleCloseByEvent);
6227            el.addEventListener("cancel", handleCloseEvent);
6228            cleanup(() => {
6229                el.removeEventListener("keydown", escapeDialog);
6230                el.removeEventListener("submit", dialogSubmit);
6231                el.removeEventListener("click", handleCloseByEvent);
6232                el.removeEventListener("cancel", handleCloseEvent);
6233                scrollLock(false);
6234            });
6235            }
6236        }
6237        function modifierValue(modifiers, key, fallback) {
6238            if (modifiers.indexOf(key) === -1) return fallback;
6239            const rawValue = modifiers[modifiers.indexOf(key) + 1];
6240            if (!rawValue) return fallback;
6241            if (key === "closeby") {
6242            const allowedValues = ["auto", "none", "closerequest", "any"];
6243            const options = allowedValues.join(", ");
6244            if (!allowedValues.includes(rawValue)) {
6245                console.warn(
6246                `"${rawValue}" is not one of the allowed values for closeby: ${options}`
6247                );
6248                return fallback;
6249            }
6250            }
6251            return rawValue;
6252        }
6253
6254        // src/cdn.js
6255        document.addEventListener("alpine:init", () => {
6256            window.Alpine.plugin(dialog_default);
6257        });
6258    })();
6259    //# sourceURL=alpine-htmldialog.js
6260</script>
vendor: 1 bytes, line 6260
6260
6261<script>
6262    (() => {
6263        function src_default(Alpine) {
6264            Alpine.directive("intersect", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
6265                let evaluate = evaluateLater(expression);
6266                let options = {
6267                    rootMargin: getRootMargin(modifiers),
6268                    threshold: getThreshold(modifiers)
6269                };
6270                let observer = new IntersectionObserver((entries) => {
6271                    entries.forEach((entry) => {
6272                        if (entry.isIntersecting === (value === "leave"))
6273                            return;
6274                        evaluate();
6275                        modifiers.includes("once") && observer.disconnect();
6276                    });
6277                }, options);
6278                observer.observe(el);
6279                cleanup(() => {
6280                    observer.disconnect();
6281                });
6282            }));
6283        }
6284        function getThreshold(modifiers) {
6285            if (modifiers.includes("full"))
6286                return 0.99;
6287            if (modifiers.includes("half"))
6288                return 0.5;
6289            if (!modifiers.includes("threshold"))
6290                return 0;
6291            let threshold = modifiers[modifiers.indexOf("threshold") + 1];
6292            if (threshold === "100")
6293                return 1;
6294            if (threshold === "0")
6295                return 0;
6296            return Number(`.${threshold}`);
6297        }
6298        function getLengthValue(rawValue) {
6299            let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/);
6300            return match ? match[1] + (match[2] || "px") : void 0;
6301        }
6302        function getRootMargin(modifiers) {
6303            const key = "margin";
6304            const fallback = "0px 0px 0px 0px";
6305            const index = modifiers.indexOf(key);
6306            if (index === -1)
6307                return fallback;
6308            let values = [];
6309            for (let i = 1; i < 5; i++) {
6310                values.push(getLengthValue(modifiers[index + i] || ""));
6311            }
6312            values = values.filter((v) => v !== void 0);
6313            return values.length ? values.join(" ").trim() : fallback;
6314        }
6315
6316        document.addEventListener("alpine:init", () => {
6317            window.Alpine.plugin(src_default);
6318        });
6319    })();
6320    //# sourceURL=alpine-intersect.js
6321</script>
6321
6322
6323<script>
6324    for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]":"intersect",".product-info [x-data]":"intersect","#filters-content [x-data]":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#notice-cookie-block":"intersect","#product_addtocart_form [x-data]:not(.dont-defer)":"intersect"})) {
6325        document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`));
6326    }
6327    //# sourceURL=alpine-defer-rules.js
6328</script>
vendor: 1 bytes, line 6328
6328
6329<script>
6330    (() => {
6331        const hasAlpine = new Promise(resolve => {
6332            window.addEventListener('alpine:initialized', resolve, {once: true, passive: true});
6333        });
6334
6335        const hasInteract = new Promise(resolve => {
6336            (events => {
6337                const onInteract = () => {
6338                    resolve();
6339                    events.forEach(type => window.removeEventListener(type, onInteract));
6340                }
6341                events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true}))
6342            })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown'])
6343        });
6344
6345        const onIntersect = (el) => {
6346            return new Promise(resolve => {
6347                const observer = new IntersectionObserver(entries => {
6348                    for (const entry of entries) {
6349                        if (entry.isIntersecting) {
6350                            observer.disconnect()
6351                            resolve();
6352                        }
6353                    }
6354                }, {});
6355                observer.observe(el);
6356            });
6357        }
6358
6359        function runComponent(el) {
6360            hasAlpine.then(() => {
6361                el.removeAttribute('x-ignore');
6362                queueMicrotask(() => Alpine.initTree(el));
6363            });
6364        }
6365
6366        function initDeferredComponents() {
6367            document.querySelectorAll('[x-data][x-defer]').forEach(el => {
6368                el.setAttribute('x-ignore', '');
6369                const deferUntil = (el.getAttribute('x-defer') || '').trim();
6370                switch (deferUntil) {
6371                    case 'interact':
6372                        hasInteract.then(() => runComponent(el));
6373                        break;
6374                    case 'intersect':
6375                        onIntersect(el).then(() => runComponent(el))
6376                        break;
6377                    case 'idle':
6378                        window.requestIdleCallback
6379                            ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000})
6380                            : setTimeout(() => runComponent(el), 4000);
6381                        break;
6382                    case 'eager':
6383                        runComponent(el);
6384                        break;
6385                    default:
6386                        if (deferUntil.startsWith('event:') && deferUntil.length > 6) {
6387                            window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true});
6388                        }
6389                }
6390            });
6391        }
6392
6393        window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true});
6394    })();
6395    //# sourceURL=alpine-defer.js
6396</script>
6396
6397
6398<script>
6399// x-teleport implementation
6400(_ => {
6401    document.addEventListener('DOMContentLoaded', event => {
6402        // x-teleport available only for template
6403        if (!Alpine.version.startsWith('2')) {
6404            return;
6405        }
6406
6407        const teleportDirective = (el, expression) => {
6408            let target = document.querySelector(expression)
6409            let clone = el.content.cloneNode(true).firstElementChild;
6410
6411            target.appendChild(clone);
6412            setTimeout(() => {
6413                target.querySelectorAll('[x-data]')
6414                    .forEach(el => Alpine.initializeComponent(el));
6415            }, 0)
6416        };
6417
6418        document.querySelectorAll('template').forEach(el => {
6419            if (!el.hasAttribute('x-teleport')) {
6420                return;
6421            }
6422
6423            teleportDirective(el, el.getAttribute('x-teleport'));
6424        });
6425
6426        document.querySelectorAll('[x-data]').forEach(el => {
6427            if (el.hasAttribute('x-init')) {
6428                return;
6429            }
6430
6431            setTimeout(() => {
6432                Alpine.initializeComponent(el);
6433            }, 0);
6434        });
6435    });
6436})()
6437</script>
6437
6438
6439<script type="module"
6440        src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Hyva_Theme/js/alpine3.min.js"
6441        defer
6442        crossorigin
6443></script>
vendor: 1 bytes, line 6443
6443
6444<script>
6445    function dispatchMessages(messages, hideAfter) {
6446        const messagesEvent = new CustomEvent("messages-loaded", {
6447            detail: {
6448                messages: messages,
6449                hideAfter: hideAfter
6450            }
6451        });
6452        window.dispatchEvent(messagesEvent);
6453    }
6454
6455        if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
6456        console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
6457    }
6458
6459    (function( hyva, undefined ) {
6460
6461        hyva.initFormKey = () => {
6462            if (typeof hyva.getFormKey !== 'function') return;
6463
6464            const formKey = hyva.getFormKey();
6465            if (!formKey) return;
6466
6467            document.querySelectorAll('input[name="form_key"]').forEach((input) => {
6468                input.value = formKey;
6469            });
6470        }
6471
6472        hyva.initMessages = () => {
6473            try {
6474                const messages = hyva.getCookie('mage-messages');
6475                window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
6476
6477                dispatchMessages(window.mageMessages);
6478
6479                                // empty `mage-messages` cookie
6480                const skipSetDomain = true;
6481                hyva.setCookie('mage-messages','', -1, skipSetDomain);
6482
6483            } catch (error) {
6484                console.warn('Error parsing Cookie Messages:', error);
6485            }
6486        }
6487
6488        window.addEventListener('DOMContentLoaded', hyva.initFormKey);
6489
6490        window.addEventListener('pageshow', (event) => {
6491            if (event.persisted) {
6492                hyva.initFormKey();
6493            }
6494        });
6495
6496        hyva.alpineInitialized(hyva.initMessages)
6497    }( window.hyva = window.hyva || {} ));
6498    //# sourceURL=hyva-cookies.js
6499</script>
vendor: 1 bytes, line 6499
6499
6500<script>
6501    (() => {
6502        const private_content_key = 'mage-cache-storage';
6503        const private_content_expire_key = 'mage-cache-timeout';
6504        const private_content_version_key = 'private_content_version';
6505        const section_data_ids_key = 'section_data_ids';
6506        const mage_cache_session_id_key = 'mage-cache-sessid';
6507        const last_visited_store_key = 'last_visited_store';
6508
6509        const ttl = 7200;
6510
6511                if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
6512            console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
6513        }
6514
6515        function loadSectionData () {
6516            const browserStorage = hyva.getBrowserStorage();
6517            if (!browserStorage) {
6518                typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
6519                    [{
6520                        type: "warning",
6521                        text: "Please enable LocalStorage in your browser."
6522                    }]
6523                );
6524                return;
6525            }
6526            try {
6527                let isInvalid = false;
6528
6529                                if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) {
6530                    isInvalid = true;
6531                }
6532                hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false);
6533
6534                                if (!hyva.getCookie(mage_cache_session_id_key)) {
6535                    isInvalid = true;
6536                    browserStorage.removeItem(private_content_key);
6537                    const skipSetDomain = true;
6538                    const days = false;
6539                    hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain)
6540                }
6541
6542                const cookieVersion = hyva.getCookie(private_content_version_key);
6543                const storageVersion = browserStorage.getItem(private_content_version_key);
6544
6545                if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) {
6546                    isInvalid = true;
6547                }
6548
6549                const privateContentExpires = browserStorage.getItem(private_content_expire_key);
6550                if (privateContentExpires && new Date(privateContentExpires) < new Date()) {
6551                    browserStorage.removeItem(private_content_key);
6552                }
6553
6554                if (isInvalid && cookieVersion) {
6555                    fetchPrivateContent([]);
6556                } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) {
6557                    const privateContent = JSON.parse(browserStorage.getItem(private_content_key));
6558                    if (
6559                        privateContent &&
6560                        privateContentExpires &&
6561                        privateContent.cart &&
6562                        privateContent.customer
6563                    ) {
6564                        dispatchPrivateContent(privateContent);
6565                    } else {
6566                        fetchPrivateContent([]);
6567                    }
6568                } else {
6569                    if (document.getElementById('default-section-data')) {
6570                        const privateContent = JSON.parse(document.getElementById('default-section-data').textContent.trim());
6571                        dispatchPrivateContent(privateContent);
6572                    } else {
6573                        dispatchPrivateContent({});
6574                    }
6575                }
6576
6577            } catch (error) {
6578                console.warn('Error retrieving Private Content:', error);
6579            }
6580        }
6581
6582        hyva.alpineInitialized(loadSectionData)
6583        window.addEventListener('reload-customer-section-data', loadSectionData);
6584
6585                window.processSectionDataBeforeDispatch = window.processSectionDataBeforeDispatch || (data => data);
6586
6587        function dispatchPrivateContent(data) {
6588
6589            const privateContentEvent = new CustomEvent("private-content-loaded", {
6590                detail: {
6591                    data: window.processSectionDataBeforeDispatch(data)
6592                }
6593            });
6594            window.dispatchEvent(privateContentEvent);
6595        }
6596
6597                function fetchPrivateContent(sections) {
6598            fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, {
6599                method: 'GET',
6600                headers: {
6601                    'Content-Type': 'application/json',
6602                    'X-Requested-With': 'XMLHttpRequest'
6603                }
6604            })
6605                .then(response => response.ok && response.json())
6606                .then(
6607                    data => {
6608                        if (data) {
6609                            try {
6610                                const browserStorage = hyva.getBrowserStorage();
6611
6612                                // merge new data preserving non-invalidated sections
6613                                const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {};
6614
6615                                                                if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) {
6616                                    delete oldSectionData['checkout-data'];
6617                                }
6618                                const newSectionData = Object.assign(oldSectionData, data);
6619
6620                                dispatchPrivateContent(newSectionData);
6621
6622                                // don't persist messages, they've been dispatched already
6623                                if (newSectionData.messages && newSectionData.messages.messages ) {
6624                                    newSectionData.messages.messages = [];
6625                                }
6626
6627                                browserStorage.setItem(private_content_key, JSON.stringify(newSectionData));
6628
6629                                const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString();
6630                                browserStorage.setItem(private_content_expire_key, expiresAt);
6631
6632                                const newCookieVersion = hyva.getCookie(private_content_version_key);
6633                                browserStorage.setItem(private_content_version_key, newCookieVersion);
6634
6635                                // We don't need the section_data_ids in Hyvä, but we store them for compatibility
6636                                // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout
6637                                hyva.setCookie(
6638                                    section_data_ids_key,
6639                                    JSON.stringify(
6640                                        Object.keys(data).reduce((sectionDataIds, sectionKey) => {
6641                                            sectionDataIds[sectionKey] = data[sectionKey]['data_id'];
6642                                            return sectionDataIds;
6643                                        }, {})
6644                                    ),
6645                                    false,
6646                                    true
6647                                );
6648                            } catch (error) {
6649                                console.warn("Couldn't store privateContent", error);
6650                            }
6651                        }
6652                    }
6653                )
6654                .catch(error => {
6655                    console.warn("Couldn't fetch privateContent", error);
6656                });
6657        }
6658    })();
6659    //# sourceURL=hyva-private-content.js
6660</script>
vendor: 1 bytes, line 6660
6660
6661<script>
6662    (() => {
6663        document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc()));
6664    })()
6665</script>
vendor: 1 bytes, line 6665
6665
6666<script>
6667    (events => {
6668        const addListeners = () => {
6669            var init = false;
6670            const dispatchUserInteractionEvent = Alpine.throttle(() => {
6671                if(!init){
6672                    init=true;
6673                    return false;
6674                }
6675                events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent))
6676                window.dispatchEvent(new Event('init-external-scripts'))
6677            }, 30);
6678            document.removeEventListener('alpine:initialized', addListeners)
6679            events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, { passive: true}))
6680        }
6681        document.addEventListener('alpine:initialized', addListeners, { once: true });
6682    })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown'])
6683</script>
vendor: 1 bytes, line 6683
6683
6684<script>
6685    'use strict';
6686
6687    (() => {
6688        const initCarousels = (elements) => {
6689            if (!Swiper) {
6690                return;
6691            }
6692
6693            const initProductCarousel = (carousel, additionalOptions) => {
6694                carousel.classList.add("swiper");
6695                if (!carousel.querySelectorAll(".swiper-wrapper").length) {
6696                    carousel.innerHTML = `<div class="swiper-wrapper">${carousel.innerHTML}</div>`;
6697                }
6698                carousel.querySelectorAll(".swiper-wrapper > *").forEach(function (el) {
6699                    el.classList.add("swiper-slide");
6700                });
6701
6702                let swiperElement = carousel.querySelector('.swiper');
6703                if (!swiperElement) {
6704                    swiperElement = carousel;
6705                }
6706
6707                if ((carousel.dataset.showArrows === 'true' || carousel.dataset.showDots === 'true') && !carousel.querySelectorAll(".swiper-pagination").length) {
6708                    swiperElement.insertAdjacentHTML(
6709                        'beforeend',
6710                        '\u000A\u003Cdiv\u0020class\u003D\u0022swiper\u002Dbutton\u002Dprev\u0020w\u002D12\u0020h\u002D12\u0020rounded\u002Dfull\u0020group\u002Fbutton\u0020bg\u002Dwhite\u0020hidden\u0020opacity\u002D0\u0020md\u003Agroup\u002Dhover\u003Aopacity\u002D100\u0020md\u003A\u0021flex\u0020shadow\u002Dlg\u0020shadow\u002Dblack\u002F30\u0020transition\u002Dall\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u003Csvg\u0020xmlns\u003D\u0022http\u003A\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\u0022\u0020fill\u003D\u0022none\u0022\u0020viewBox\u003D\u00220\u00200\u002024\u002024\u0022\u0020stroke\u002Dwidth\u003D\u00222\u0022\u0020stroke\u003D\u0022currentColor\u0022\u0020class\u003D\u0022m\u002Dauto\u0020group\u002Dhover\u002Fbutton\u003A\u0021stroke\u002Dprimary\u0022\u0020width\u003D\u002220\u0022\u0020height\u003D\u002220\u0022\u0020role\u
6710003D\u0022img\u0022\u003E\u000A\u0020\u0020\u003Cpath\u0020stroke\u002Dlinecap\u003D\u0022round\u0022\u0020stroke\u002Dlinejoin\u003D\u0022round\u0022\u0020d\u003D\u0022M15\u002019l\u002D7\u002D7\u00207\u002D7\u0022\u002F\u003E\u000A\u003Ctitle\u003Echevron\u002Dleft\u003C\u002Ftitle\u003E\u003C\u002Fsvg\u003E\u000A\u003C\u002Fdiv\u003E\u000A\u003Cdiv\u0020class\u003D\u0022swiper\u002Dbutton\u002Dnext\u0020w\u002D12\u0020h\u002D12\u0020rounded\u002Dfull\u0020group\u002Fbutton\u0020bg\u002Dwhite\u0020hidden\u0020hover\u003A\u0021stroke\u002Dprimary\u0020opacity\u002D0\u0020md\u003Agroup\u002Dhover\u003Aopacity\u002D100\u0020md\u003A\u0021flex\u0020shadow\u002Dlg\u0020shadow\u002Dblack\u002F30\u0020transition\u002Dall\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u003Csvg\u0020xmlns\u003D\u0022http\u003A\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\u0022\u0020fill\u003D\u0022none\u0022\u0020viewBox\u003D\u00220\u00200\u002024\u002024\u0022\u0020stroke\u002Dwidth\u003D\u00222\u0022\u0020stroke\u003D\u0022currentColor\u0022\u0020class\u003D\u0022m\u002Dauto\u0020group\u002Dhover\u002Fbutton\u003A\u0021stroke\u002Dprimary\u0022\u0020width\u003D\u002220\u0022\u0020height\u003D\u002220\u0022\u0020role\u
6710003D\u0022img\u0022\u003E\u000A\u0020\u0020\u003Cpath\u0020stroke\u002Dlinecap\u003D\u0022round\u0022\u0020stroke\u002Dlinejoin\u003D\u0022round\u0022\u0020d\u003D\u0022M9\u00205l7\u00207\u002D7\u00207\u0022\u002F\u003E\u000A\u003Ctitle\u003Echevron\u002Dright\u003C\u002Ftitle\u003E\u003C\u002Fsvg\u003E\u000A\u003C\u002Fdiv\u003E\u000A\u003Cdiv\u0020class\u003D\u0022swiper\u002Dpagination\u0020absolute\u0020right\u002D1\u002F2\u0020translate\u002Dx\u002D1\u002F2\u0020bottom\u002D5\u0020md\u003Abottom\u002D7\u0022\u003E\u003C\u002Fdiv\u003E\u000A'
6711                    );
6712                }
6713
6714                let autoplayOptions = {autoplay: false};
6715                if (carousel.dataset.autoplay === 'true') {
6716                    autoplayOptions = {
6717                        autoplay: {
6718                            delay: carousel.dataset.autoplaySpeed
6719                        },
6720                        plugins: [ SwiperPluginPagination, SwiperPluginAutoPlay, SwiperPluginNavigation ]
6721                    };
6722                }
6723
6724                let dotsOptions = {pagination: false};
6725                if (carousel.dataset.showDots === 'true') {
6726                    dotsOptions = {
6727                        pagination: {
6728                            el: '.swiper-pagination',
6729                            type: 'bullets',
6730                            clickable: true
6731                        }
6732                    };
6733                }
6734
6735                let arrowsOptions = {navigation: false};
6736                if (carousel.dataset.showArrows === 'true') {
6737                    arrowsOptions = {
6738                        navigation: {
6739                            nextEl: '.swiper-button-next',
6740                            prevEl: '.swiper-button-prev',
6741                        },
6742                    };
6743                }
6744
6745                let options = Object.assign({
6746                    slidesPerView: 'auto',
6747                    loop: carousel.dataset.infiniteLoop?.toLowerCase?.() === 'true'
6748                }, additionalOptions, dotsOptions, arrowsOptions, autoplayOptions);
6749
6750                initCarousel(swiperElement, options);
6751            };
6752
6753            elements.forEach(element => {
6754                if (element.dataset.contentType === 'slider') {
6755                    initProductCarousel(element, {slidesPerView: 1});
6756                } else {
6757                    initProductCarousel(element);
6758                }
6759            });
6760        };
6761
6762        window.addEventListener('init-external-scripts', () => {
6763            const carouselElements = document.querySelectorAll(
6764                `[data-content-type="products"][data-appearance="carousel"],
6765                [data-content-type="slider"], .clerk-product-async, .swiper.products-widget, .swiper, .async-carousel, .clerk`
6766            );
6767
6768            window.carouselInitialized = false;
6769
6770            // Autoplay Plugin
6771            const scriptAutoplay = document.createElement('script');
6772            scriptAutoplay.type = 'text/javascript';
6773            scriptAutoplay.src = 'https\u003A\u002F\u002Fwww.farma.it\u002Fstatic\u002Fversion1789421831\u002Ffrontend\u002FDNAFactory\u002Forlandi_hyva\u002Fit_IT\u002FMagento_PageBuilder\u002Fjs\u002FautoPlay.min.js';
6774            document.head.appendChild(scriptAutoplay);
6775
6776            // Pagination Plugin
6777            const scriptPagination = document.createElement('script');
6778            scriptPagination.type = 'text/javascript';
6779            scriptPagination.src = 'https\u003A\u002F\u002Fwww.farma.it\u002Fstatic\u002Fversion1789421831\u002Ffrontend\u002FDNAFactory\u002Forlandi_hyva\u002Fit_IT\u002FMagento_PageBuilder\u002Fjs\u002Fpagination.min.js';
6780            document.head.appendChild(scriptPagination);
6781
6782            // Navigation Plugin
6783            const scriptNavigation = document.createElement('script');
6784            scriptNavigation.type = 'text/javascript';
6785            scriptNavigation.src = 'https\u003A\u002F\u002Fwww.farma.it\u002Fstatic\u002Fversion1789421831\u002Ffrontend\u002FDNAFactory\u002Forlandi_hyva\u002Fit_IT\u002FMagento_PageBuilder\u002Fjs\u002Fnavigation.min.js';
6786            document.head.appendChild(scriptNavigation);
6787
6788            // Swiper
6789            const script = document.createElement('script');
6790            script.type = 'text/javascript';
6791
6792            script.addEventListener('load', () => {
6793                if (window.carouselInitialized) {
6794                    return;
6795                }
6796
6797                const carouselElementsToInitialize = document.querySelectorAll(
6798                    `[data-content-type="products"][data-appearance="carousel"],
6799                      [data-content-type="slider"], .swiper.products-widget`
6800                );
6801                initCarousels(carouselElementsToInitialize);
6802
6803                window.carouselInitialized = true;
6804                const carouselInitializedEvent = new Event("carousel-initialized");
6805                document.dispatchEvent(carouselInitializedEvent);
6806            });
6807
6808            script.src = 'https\u003A\u002F\u002Fwww.farma.it\u002Fstatic\u002Fversion1789421831\u002Ffrontend\u002FDNAFactory\u002Forlandi_hyva\u002Fit_IT\u002FMagento_PageBuilder\u002Fjs\u002Ftinyswiper\u002Dfull.min.js';
6809            document.head.appendChild(script);
6810        }, { once: true, passive: true });
6811    })();
6812
6813    function initCarousel(element = "", options = {}) {
6814        var defaultOptions = {
6815            slidesPerView: 'auto',
6816            navigation: {
6817                nextEl: '.swiper-button-next',
6818                prevEl: '.swiper-button-prev',
6819            },
6820            pagination: {
6821                el: '.swiper-pagination',
6822                type: 'bullets',
6823                clickable: true
6824            },
6825            fadingSlideSelector: ''
6826        };
6827        options = Object.assign(defaultOptions, options);
6828
6829        if (typeof element === 'string' || element instanceof String) {
6830            element = document.querySelector(element);
6831        }
6832
6833        if (!element) {
6834            return false;
6835        }
6836
6837        let paginationElement = element.querySelector(defaultOptions.pagination.el)
6838        if (paginationElement && defaultOptions.pagination) {
6839            defaultOptions.pagination.el = paginationElement;
6840        } else {
6841            defaultOptions.pagination = false
6842        }
6843
6844        let nextElement = element.querySelector(defaultOptions.navigation.nextEl)
6845        if (nextElement && defaultOptions.navigation) {
6846            defaultOptions.navigation.nextEl = nextElement;
6847        } else {
6848            defaultOptions.navigation = false;
6849        }
6850
6851        let prevElement = element.querySelector(defaultOptions.navigation.prevEl)
6852        if (prevElement && defaultOptions.navigation) {
6853            defaultOptions.navigation.prevEl = prevElement;
6854        } else {
6855            defaultOptions.navigation = false;
6856        }
6857
6858        if (options.slidesPerView == 'auto') {
6859            let wrapperWidth = element.clientWidth,
6860                slideWidth = element.querySelector('.swiper-slide').clientWidth;
6861
6862            options.slidesPerView = Math.round(wrapperWidth / slideWidth);
6863        }
6864
6865        if (!options.navigation) {
6866            element.querySelectorAll('.swiper-button-prev, .swiper-button-next')
6867                .forEach((element) => element.remove());
6868        }
6869
6870        if (options.slidesPerView > element.querySelectorAll('.swiper-slide').length) {
6871            element.querySelectorAll('.swiper-button-prev, .swiper-button-next, .swiper-pagination')
6872                .forEach((element) => element.remove());
6873            return;
6874        }
6875
6876        if (typeof Swiper != "undefined") {
6877            let carousel = new Swiper(element, options);
6878            attachCustomBehaviours(carousel, element, options);
6879            return;
6880        }
6881
6882        document.addEventListener("carousel-initialized", function () {
6883            let carousel = new Swiper(element, options);
6884            carousel.slideTo(0); // Fix per disabilitare navigazione quando non c'è overflow degli elementi
6885            attachCustomBehaviours(carousel, element, options);
6886        });
6887
6888    }
6889
6890    function attachCustomBehaviours(carousel, element, options) {
6891        // Fading selected slide behaviour
6892        let fadingSlide;
6893        try {
6894            if (options.fadingSlideSelector) {
6895                fadingSlide = document.querySelector(options.fadingSlideSelector)
6896            } else {
6897                fadingSlide = element.closest('.fading-slide-container').querySelector('.fading-slide');
6898            }
6899        } catch (e) {
6900            fadingSlide = null;
6901        }
6902
6903        if (fadingSlide) {
6904            fadingSlide.classList.add('transition-all');
6905
6906            carousel.on('before-slide', function(currentIndex, state, newIndex) {
6907                if (newIndex > 0) {
6908                    fadingSlide.classList.add('md:opacity-0');
6909                } else if (newIndex == 0) {
6910                    fadingSlide.classList.remove('md:opacity-0');
6911                }
6912            });
6913        }
6914    }
6915</script>
vendor: 1 bytes, line 6915
6915
6916<script>
6917    'use strict';
6918
6919    (() => {
6920        const applyShowOnHover = (element) => {
6921            const showOverlayOnHover = (element) => {
6922                const overlay = element.querySelector('.pagebuilder-overlay');
6923                const color = overlay.dataset.overlayColor;
6924
6925                element.addEventListener('mouseover', () => {
6926                    overlay.style.backgroundColor = color;
6927                });
6928                element.addEventListener('mouseout', () => {
6929                    overlay.style.backgroundColor = 'transparent';
6930                });
6931            };
6932
6933            const showButtonOnHover = (element) => {
6934                const button = element.querySelector('.pagebuilder-banner-button');
6935
6936                element.addEventListener('mouseover', () => {
6937                    button.style.opacity = '1';
6938                    button.style.visibility = 'visible';
6939                });
6940                element.addEventListener('mouseout', () => {
6941                    button.style.opacity = '0';
6942                    button.style.visibility = 'hidden';
6943                });
6944            };
6945
6946            if (element.dataset.showOverlay === 'hover') {
6947                showOverlayOnHover(element);
6948            }
6949            if (element.dataset.showButton === 'hover') {
6950                showButtonOnHover(element);
6951            }
6952        };
6953
6954        window.addEventListener('DOMContentLoaded', () => {
6955            document.querySelectorAll('[data-content-type="banner"],[data-content-type="slider"]').forEach(element => {
6956                applyShowOnHover(element);
6957            });
6958        });
6959    })();
6960</script>
6960
6961 
6961<script>
6962        function amastyRewardsCatalog() {
6963            return {
6964                productId: this.$el.dataset.productId,
6965                formSelector: 'product_addtocart_form',
6966                refreshUrl: this.$el.dataset.refreshUrl,
6967                loader: false,
6968                isFetching: false,
6969                abortFetchController: false,
6970                highlight: {
6971                    caption_color: '',
6972                    caption_text: '',
6973                    visible: false
6974                },
6975
6976                init() {
6977                    this.formObserver();
6978                    document.addEventListener(`update-qty-${this.productId}`, () => {
6979                        this.updateData();
6980                    });
6981                    this.$nextTick(() => this.updateData());
6982                },
6983
6984                hideBlock() {
6985                    this.highlight.visible = false;
6986                    this.loader = true;
6987                },
6988
6989                dispatchStatus(type, message) {
6990                    window.dispatchMessages([{
6991                        type: type,
6992                        text: message
6993                    }], 5000);
6994                },
6995
6996                formObserver() {
6997                    const product = document.querySelector(`input[name="product"][value="${this.productId}"]`);
6998
6999                    if (product) {
7000                        const productForm = product.form;
7001                        if (productForm) {
7002                            productForm.addEventListener('change', () => {
7003                                this.updateData();
7004                            });
7005                        }
7006                    }
7007                },
7008
7009                updateData() {
7010                    if (!this.refreshUrl || this.isFetching) return false;
7011                    this.hideBlock();
7012
7013                    if (this.abortFetchController) {
7014                        this.abortFetchController.abort();
7015                    }
7016                    this.abortFetchController = new AbortController();
7017
7018                    const product = document.querySelector(`input[name='product'][value='${this.productId}']`);
7019                    if (!product) return false;
7020
7021                    const form = product.form;
7022                    const formData = new FormData(form);
7023                    const formParams = new URLSearchParams(formData).toString();
7024                    const formJson = JSON.stringify({
7025                        productId: this.productId,
7026                        attributes: formParams
7027                    });
7028
7029                    const requestOptions = {
7030                        method: 'POST',
7031                        body: formJson,
7032                        headers: {
7033                            'Content-Type': 'application/json',
7034                            'x-requested-with': 'XMLHttpRequest',
7035                        },
7036                        signal: this.abortFetchController.signal
7037                    };
7038
7039                    this.isFetching = true;
7040                    fetch(this.refreshUrl, requestOptions).then(response => {
7041                        if (!response.ok) {
7042                            return Promise.reject(`${response.status} ${response.statusText}`);
7043                        }
7044                        return response.json();
7045                    }).then(data => {
7046                        this.highlight.visible = data.visible;
7047                        this.highlight.caption_text = data.caption_text;
7048                        this.highlight.caption_color = data.caption_color;
7049                    }).catch(error => {
7050                        if (error.name !== 'AbortError'
7051                                && typeof error === 'string'
7052                                && error.match(/'401'/g) !== null
7053                            ) {
7054                            this.dispatchStatus('error', error);
7055                        }
7056                    }).finally(() => {
7057                        this.loader = false;
7058                        this.abortFetchController = false;
7059                        this.isFetching = false;
7060                    });
7061                },
7062
7063                highlightVisible() {
7064                    return this.highlight.visible && !this.loader;
7065                },
7066
7067                highlightStyle() {
7068                    return `color: ${this.highlight.caption_color}`;
7069                },
7070            }
7071        }
7072
7073        window.addEventListener(
7074            'alpine:init',
7075            () => Alpine.data('amastyRewardsCatalog', amastyRewardsCatalog),
7076            { once: true }
7077        );
7078 </script>
7078
7079 
7079<script>
7080    'use strict';
7081
7082    const grecaptchaV2LoadCallbacks = [];
7083
7084    function executeRecaptchaLoadCallbacks () {
7085        while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) {
7086            const callback = grecaptchaV2LoadCallbacks.pop();
7087            typeof callback === 'string' ? window[callback]() : callback();
7088        }
7089    }
7090
7091    (function() {
7092        const loadRecaptchaScript = (event) => {
7093
7094            if (window.grecaptcha || !event.target.form) {
7095                return;
7096            }
7097
7098            const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks';
7099            const siteKey = '6LdDii8sAAAAAF1j_v4WIzmCV2phMFuJKWeFtEhJ';
7100            const script = document.createElement('script');
7101            script.type = 'text/javascript';
7102            script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`;
7103            script.async = true;
7104            document.head.appendChild(script);
7105
7106            script.addEventListener('load', () => {
7107                Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled'));
7108            });
7109        }
7110
7111        window.forceLoadRecaptchaScript = (form) => {
7112            loadRecaptchaScript({target: {form: form || 'dummy'}});
7113            executeRecaptchaLoadCallbacks();
7114        };
7115
7116        document.body.addEventListener('input', loadRecaptchaScript, { once: true });
7117        document.body.addEventListener('focus', loadRecaptchaScript, { once: true });
7118
7119    }());
7120
7121</script>
vendor: 1 bytes, line 7121
7121
7122<script>
7123    function selectManager() {
7124        return {
7125            value: '',
7126
7127            input: {
7128                ['x-model']: "value",
7129                [':class']: "{ 'invalid-placeholder': !value || value == \"\" }",
7130                ['x-init']() {
7131                    this.value = this.$el.options[this.$el.selectedIndex || 0].value
7132                }
7133            }
7134        }
7135    }
7136
7137    function qtyManager() {
7138        return {
7139            inputElement: null,
7140            value: 0,
7141            step: 1,
7142            min: null,
7143            max: null,
7144
7145            input: {
7146                ["x-model"]: "value",
7147                ['x-init']() {
7148                    this.inputElement = this.$el;
7149                    this.value = parseInt(this.$el.value);
7150                },
7151                ['x-on:input'] ($event) {
7152                    let inputValue = parseInt($event.target.value.replace(/\D/g, ''));
7153                    if (!this.checkMin(inputValue)) {
7154                        this.value = this.min;
7155                    } else if (!this.checkMax(inputValue)) {
7156                        this.value = this.max;
7157                    } else {
7158                        this.value = inputValue;
7159                    }
7160                }
7161            },
7162            plus: {
7163                ['@click']() {
7164                    if (this.checkMax(this.value, this.step)) {
7165                        this.value += this.step;
7166                    }
7167                    this.inputElement.dispatchEvent(new Event('changed'));
7168                }
7169            },
7170            minus: {
7171                ['@click']() {
7172                    if (this.checkMin(this.value, this.step)) {
7173                        this.value -= this.step;
7174                    }
7175                    this.inputElement.dispatchEvent(new Event('changed'));
7176                }
7177            },
7178            checkMin(value, step = null) {
7179                if (this.min) {
7180                    if (step) {
7181                        return value - step >= this.min;
7182                    }
7183                    return value >= this.min;
7184                }
7185                return true;
7186            },
7187            checkMax(value, step = null) {
7188                if (this.max) {
7189                    if (step) {
7190                        return value + step <= this.max;
7191                    }
7192                    return value <= this.max;
7193                }
7194                return true;
7195            }
7196        }
7197    }
7198
7199    /** Questo potrebbe convenire aggiungerlo solamente dove usiamo quell'input **/
7200    function dateInputManager() {
7201        return {
7202            value: '',
7203
7204            input: {
7205                ["x-model"]: "value",
7206                ['x-init']() {
7207                    this.value = this.$el.value
7208                },
7209
7210                ['x-on:input'](e) {
7211                    let date = e.target.value.replace(/\D/g, '');
7212                    let formattedDate = '';
7213
7214                    if (date.length >= 2) {
7215                        let value = date.substring(0, 2);
7216                        if (value > 31) {
7217                            value = 31;
7218                        }
7219                        formattedDate = value + '/';
7220                    } else {
7221                        this.value = date;
7222                        return;
7223                    }
7224
7225                    if (date.length >= 4) {
7226                        let value = date.substring(2, 4);
7227                        if (value > 12) {
7228                            value = 12;
7229                        }
7230                        formattedDate += value + '/';
7231                    } else {
7232                        this.value = formattedDate + date.substring(2, date.length);
7233                        return;
7234                    }
7235
7236                    if (date.length > 4) {
7237                        formattedDate += date.substring(4, 8);
7238                    } else {
7239                        this.value = formattedDate + date.substring(4, date.length);
7240                        return;
7241                    }
7242
7243                    this.value = formattedDate;
7244                }
7245            }
7246        }
7247    }
7248</script>
vendor: 1 bytes, line 7248
7248
7249<script>
7250    (function (w,d){
7251        function setScrollbarWidthCssVar() {
7252            let newSize = (w.innerWidth - d.body.clientWidth) + "px",
7253                oldSize = d.documentElement.style.getPropertyValue('--scrollbar-width');
7254            if (newSize !== oldSize){
7255                d.documentElement.style.setProperty('--scrollbar-width', newSize);
7256            }
7257        }
7258        d.addEventListener('alpine:init', () => {
7259            new ResizeObserver(Alpine.debounce(setScrollbarWidthCssVar, 300)).observe(d.documentElement);
7260        }, { once: true });
7261        setScrollbarWidthCssVar();
7262    }) (window, document);
7263    /** Effettua il lock della viewport quando necessario (es. all'apertura del menu o del minicart) */
7264    window.addEventListener('screen-lock', (event) => {
7265        document.body.classList.toggle('max-h-screen', event.detail);
7266        document.body.classList.toggle('lock-screen', event.detail);
7267        document.body.classList.toggle('overflow-hidden', event.detail);
7268    });
7269
7270    function initCustomerMenuMobile() {
7271        return {
7272            open: false,
7273            customer: {},
7274            getData(data) {
7275                if (data.customer) { this.customer = data.customer }
7276            },
7277            isLoggedIn(){
7278                return !!(this.customer.firstname);
7279            }
7280        }
7281    }
7282</script>
7282
7283
7284<!-- Wrapping template -->
7285<script type="text/template" id="instant_wrapper_template">
7286    {{#findAutocomplete}}
7287    <div id="algolia-autocomplete-container"></div>
7288    {{/findAutocomplete}}
7289
7290    <div id="algolia_instant_selector"
7291         class=" with-facets"
7292    >
7293        <div class="columns">
7294            <aside class="sidebar sidebar-main relative" id="algolia-left-container">
7295                <button class="filters lg:hidden btn btn-tertiary bg-tertiary-darker text-white rounded-lg flex pl-3 pr-4 py-1.5 items-center" onclick="toggleAaFilters()">
7296                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" alt="Icona" role="presentation">
7297                        <path stroke-linecap="round" stroke-linejoin="round" d="M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4"></path>
7298                        <title>adjustments</title>
7299                    </svg>
7300                    <span class="ml-1.5 font-baloo-bhaina">
7301                          Filtri                    </span>
7302                </button>
7303                <div class="mb-4 hidden lg:block" id="facets">
7304                    <div class="aa-mobile-header flex px-layoutGutter py-3 border-b mb-2 justify-between items-center lg:hidden shadow-md">
7305                        <span class="text-primary text-lg font-bold mx-auto pl-6">
7306                            Filtri                        </span>
7307                        <span id="aa-mobile-toggler" class="cursor-pointer" onclick="toggleAaFilters()">
7308                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" role="img">
7309                                <path d="M21.82 24c-.58 0-1.13-.23-1.54-.64l-8.27-8.27-8.29 8.27a2.179 2.179 0 0 1-3.08-3.08L8.92 12 .64 3.73a2.19 2.19 0 0 1 0-3.09 2.172 2.172 0 0 1 3.08 0L12 8.92 20.27.64a2.19 2.19 0 0 1 3.09 0c.85.85.85 2.23 0 3.09L15.08 12l8.27 8.27c.85.85.85 2.24 0 3.09-.41.41-.96.64-1.54.64Z" style="fill:currentColor"></path>
7310                                <title>x</title>
7311                            </svg>
7312                        </span>
7313                    </div>
7314                    <div class="pt-[50px] px-layoutGutter lg:px-0 lg:pt-0" id="instant-search-facets-container">
7315                        <div class="hidden lg:block text-primary text-md text-xl lg:text-2xl font-semibold h-10 mt-2.5">
7316                            Filtri                        </div>
7317                        <div class="w-full flex flex-col bg-white shadow hidden lg:mt-4 py-3" id="instant-search-active-filters">
7318                            <span class="title text-base font-bold font-baloo-bhaina hidden" id="instant-search-active-filters-label">
7319                                Filtri attivi                            </span>
7320                            <div class="order-2" id="clear-refinements"></div>
7321                            <div id="current-refinements"></div>
7322                        </div>
7323                    </div>
7324                </div>
7325            </aside>
7326            <div class="column main" id="algolia-right-container">
7327                <div class="hidden">
7328                    <div class="pb-3.5">
7329                        <div class="px-2.5">
7330                            {{#second_bar}}
7331                            <div id="instant-search-bar"></div>
7332                            {{/second_bar}}
7333                        </div>
7334                    </div>
7335                </div>
7336                <div class="relative">
7337                    <div itemscope itemtype="http://schema.org/ItemList" class="w-full">
7338                        <div id="algolia-toolbar" class="toolbar toolbar-products items-center flex justify-between">
7339                            <div class="left flex items-center">
7340                                <div id="algolia-stats"></div>
7341                            </div>
7342                            <div class="right flex items-center">
7343                                <span class="mr-2 inline-block">
7343Ordina per</span>
7344                                <div id="algolia-sorts"></div>
7345                            </div>
7346                        </div>
7347                        <div id="algolia-banner"></div>
7348                        <div id="instant-empty-results-container"></div>
7349                        <div class="py-6" id="instant-search-results-container"></div>
7350                    </div>
7351                </div>
7352                <div>
7353                    <div id="algolia-stats-range" class="mb-2"></div>
7354                    <div id="instant-search-pagination-container"></div>
7355                </div>
7356            </div>
7357        </div>
7358    </div>
7359</script>
7359
7360
7361<script>
7362    function toggleAaFilters() {
7363        try {
7364            var facets = document.getElementById('facets');
7365            if (!facets) return;
7366
7367            // Toggle visibility of facets (mobile overlay)
7368            facets.classList.toggle('hidden');
7369
7370            var isOpen = !facets.classList.contains('hidden');
7371            var body = document.body;
7372            var lockClasses = ['max-h-screen', 'lock-screen', 'overflow-hidden', 'instant-lock'];
7373            lockClasses.forEach(function (cls) {
7374                if (isOpen) {
7375                    body.classList.add(cls);
7376                } else {
7377                    body.classList.remove(cls);
7378                }
7379            });
7380
7381            // Apply or remove mobile collapsible bindings only when toggler is used
7382            try {
7383                if (window.AISFacetsCollapsible) {
7384                    if (isOpen) {
7385                        window.AISFacetsCollapsible.enable();
7386                    }
7387                }
7388            } catch (e2) { /* noop */ }
7389        } catch (e) {
7390            // Fail-safe: do nothing on error
7391            console.error('toggleAaFilters error', e);
7392        }
7393    }
7394</script>
7394
7395
7396<script>
7397    // Mobile-only: make Algolia facets panels (.ais-Panel) collapsible after they are rendered
7398    (function() {
7399        'use strict';
7400        var MOBILE_MQL = window.matchMedia('(max-width: 1023px)'); // Tailwind lg breakpoint
7401
7402        function applyCollapsible(root) {
7403            if (!root) return;
7404            var panels = root.querySelectorAll('.ais-Panel');
7405            panels.forEach(function(panel) {
7406                if (!panel || panel.dataset.collapsibleApplied === '1') return;
7407                var header = panel.querySelector('.ais-Panel-header');
7408                var body = panel.querySelector('.ais-Panel-body');
7409                if (!header || !body) return;
7410
7411                // Mark as processed
7412                panel.dataset.collapsibleApplied = '1';
7413
7414                // Ensure default open state
7415                panel.classList.remove('is-collapsed');
7416                header.setAttribute('aria-expanded', 'true');
7417
7418                // Make header interactive
7419                header.setAttribute('role', 'button');
7420                header.setAttribute('tabindex', '0');
7421
7422                // Inject chevron-down if not present
7423                if (!header.querySelector('.ais-Panel-chevron')) {
7424                    var chev = document.createElement('span');
7425                    chev.className = 'ais-Panel-chevron chevron';
7426                    chev.setAttribute('aria-hidden', 'true');
7427                    chev.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="18" height="18" role="img" aria-hidden="true"><path d="M6.23 8.34a1 1 0 0 1 1.41 0L12 12.7l4.36-4.36a1 1 0 1 1 1.41 1.41l-5.07 5.07a1 1 0 0 1-1.41 0L6.23 9.75a1 1 0 0 1 0-1.41Z" fill="currentColor"/></svg>';
7428                    header.appendChild(chev);
7429                }
7430
7431                var toggle = function() {
7432                    var collapsed = panel.classList.toggle('is-collapsed');
7433                    header.setAttribute('aria-expanded', String(!collapsed));
7434                };
7435
7436                header.addEventListener('click', toggle);
7437                header.addEventListener('keydown', function(e) {
7438                    if (e.key === 'Enter' || e.key === ' ') {
7439                        e.preventDefault();
7440                        toggle();
7441                    }
7442                });
7443            });
7444        }
7445
7446        function enableMobileCollapsible() {
7447            if (!MOBILE_MQL.matches) return;
7448            var container = document.getElementById('instant-search-facets-container');
7449            if (!container) return;
7450            applyCollapsible(container);
7451
7452            // Observe for dynamic facet (re)renders
7453            if (!container._aisCollapsibleObserver) {
7454                var obs = new MutationObserver(function() {
7455                    applyCollapsible(container);
7456                });
7457                obs.observe(container, { childList: true, subtree: true });
7458                container._aisCollapsibleObserver = obs;
7459            }
7460        }
7461
7462        function disableMobileCollapsible() {
7463            var container = document.getElementById('instant-search-facets-container');
7464            if (!container) return;
7465            // Ensure all panels are open on desktop
7466            container.querySelectorAll('.ais-Panel').forEach(function(panel) {
7467                panel.classList.remove('is-collapsed');
7468                var header = panel.querySelector('.ais-Panel-header');
7469                if (header) {
7470                    header.setAttribute('aria-expanded', 'true');
7471                }
7472            });
7473            if (container._aisCollapsibleObserver) {
7474                try { container._aisCollapsibleObserver.disconnect(); } catch (e) {}
7475                container._aisCollapsibleObserver = null;
7476            }
7477        }
7478
7479        // Expose API to be triggered explicitly by the mobile toggler
7480        window.AISFacetsCollapsible = {
7481            enable: enableMobileCollapsible,
7482            disable: disableMobileCollapsible,
7483            _mql: MOBILE_MQL
7484        };
7485    })();
7486</script>
7486
7487
7488<style>
7489    .ais-ClearRefinements-button span {
7490        display: none;
7491    }
7492
7493    .ais-ClearRefinements-button::after {
7494        content: 'Cancella tutto';
7495    }
7496</style>
7497<script type="text/template" id="instant-hit-template">
7498    <div class="item product product-item card card-interactive flex flex-col w-full h-full border hover:border-tertiary rounded-lg p-2 lg:px-4 lg:py-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"
7499         x-data="initInsight()"
7500         x-init="bindClickEvent($el, 'Product Clicked', '{{objectID}}', '{{__indexName}}', '{{__position}}', '{{__queryID}}')"
7501    >
7502        <meta itemprop="position" content="{{__position}}"/>
7503        <div class="relative flex flex-col flex-grow" itemprop="item" itemscope itemtype="http://schema.org/Product">
7504            <meta itemprop="url"
7505                  {{^__queryID}} content="{{url}}" {{/__queryID}}
7506                  {{#__queryID}} content="{{urlForInsights}}" {{/__queryID}}
7507            />
7508
7509            <span class="badge-container flex flex-wrap gap-2 absolute z-10" x-defer="intersect" x-intersect.once="$store.badges.addNode({{objectID}}, 'card_top_left')">
7510                <template x-for="badge in $store.badges.getBadgesHtml({{objectID}}, 'card_top_left')">
7511                    <span x-html="badge"></span>
7512                </template>
7513            </span>
7514
7515            <a class="product photo product-item-photo block mx-auto mb-4 result flex items-center justify-center max-w-[142px] max-h-[142px]"
7516               tabindex="-1"
7517               {{^__queryID}} href="{{url}}" {{/__queryID}}
7518               {{#__queryID}} href="{{urlForInsights}}" {{/__queryID}}
7519            >
7520                {{#image_url}}<img itemprop="image" src="{{{image_url}}}" alt="{{{name}}}" class="max-w-full max-h-full object-contain"/>{{/image_url}}
7521                {{^image_url}}<span class="no-image block max-w-[142px] max-h-[142px] bg-gray-3"></span>{{/image_url}}
7522            </a>
7523
7524            <div class="product-info flex flex-col grow justify-start">
7525                <div class="items-center justify-center">
7526                    <a class="product-item-link result"
7527                       {{^__queryID}} href="{{url}}" {{/__queryID}}
7528                       {{#__queryID}} href="{{urlForInsights}}" {{/__queryID}}>
7529                        <h2 class="text-primary text-xs line-clamp-3 font-normal">
7530                            {{{ _highlightResult.name.value }}}
7531                        </h2>
7532                    </a>
7533                </div>
7534                <div class="mt-1 mb-1">
7535                    {{#rating_count}}
7536                    <div class="rating-summary" title="{{rating_summary}}%" role="group" aria-label="{{rating_summary}}%">
7537                        <div class="inline-flex align-middle" style="line-height: 0;">
7538                            <div class="relative">
7539                                <div class="flex">
7540                                    <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="3 0 20 20" fill="currentColor" style="color: #cbd5e0" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg>
7541                                    <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="3 0 20 20" fill="currentColor" style="color: #cbd5e0" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg>
7542                                    <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="3 0 20 20" fill="currentColor" style="color: #cbd5e0" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
7542</svg>
7543                                    <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="3 0 20 20" fill="currentColor" style="color: #cbd5e0" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg>
7544                                    <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="3 0 20 20" fill="currentColor" style="color: #cbd5e0" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg>
7545                                </div>
7546                                <div class="absolute top-0 left-0 overflow-hidden" style="width: {{rating_summary}}%">
7547                                    <div class="flex w-fit">
7548                                        <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="3 0 20 20" fill="currentColor" style="color: #f6e05e" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg>
7549                                        <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="3 0 20 20" fill="currentColor" style="color: #f6e05e" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg>
7550                                        <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="3 0 20 20" fill="currentColor" style="color: #f6e05e" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg>
7551                                        <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="3 0 20 20" fill="currentColor" style="color: #f6e05e" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg>
7552                                        <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="3 0 20 20" fill="currentColor" style="color: #f6e05e" aria-hidden="true"><path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/></svg>
7553                                    </div>
7554                                </div>
7555                            </div>
7556                            <span class="ml-1 text-xs relative top-[-1px]">({{rating_count}})</span>
7557                        </div>
7558                    </div>
7559                    {{/rating_count}}
7560                </div>
7561
7562                <div class="flex flex-nowrap justify-between items-center mt-auto items-end leading-none">
7563                    <span class="ajax-price-container block flex-grow font-baloo-bhaina hide-price-labels">
7564                        <template x-if="active = true">
7565                            <div x-defer="intersect" x-intersect.once="$store.ajaxPrices.addNode({{objectID}})">
7566                                <template x-if="!$store.ajaxPrices.hasPrice({{objectID}})">
7567                                    <div class="skeleton w-16 lg:w-full h-6">
7568                                        Caricamento...                                    </div>
7569                                </template>
7570                                <template x-if="$store.ajaxPrices.hasPrice({{objectID}})">
7571                                    <span x-html="$store.ajaxPrices.getPriceHtml({{objectID}})"></span>
7572                                </template>
7573                            </div>
7574                        </template>
7575                    </span>
7576
7577                    {{#isAddToCartEnabled}}
7578                    {{#in_stock}}
7579                        <form class="flex-grow-0 product_addtocart_form" data-role="tocart-form" action="{{ addToCart.action }}" method="post">
7580                            <input type="hidden" name="product" value="{{objectID}}">
7581                            <input type="hidden" name="uenc" value="{{ addToCart.uenc }}">
7582                            <input name="form_key" type="hidden" value="{{ addToCart.formKey }}">
7583                            <button type="submit" title="Aggiungi al Carrello"
7584                                    class="w-auto btn btn-primary mt-auto z-10 justify-center text-sm rounded-md px-3 lg:px-4 py-2 ml-2"
7585                            >
7586                                <svg xmlns="http://www.w3.org/2000/svg" id="Livello_1" viewBox="0 0 23.99 24" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true" alt="Icona" role="presentation"><path fill="#fff" d="m4.93,21.86c0-1.18.96-2.14,2.14-2.14,1.18,0,2.14.96,2.14,2.14,0,1.18-.96,2.14-2.14,2.14,0,0,0,0,0,0-1.18,0-2.13-.96-2.14-2.14Z"></path><path fill="#fff" d="m14.79,21.86c0-1.18.96-2.14,2.14-2.14,1.18,0,2.14.96,2.14,2.14,0,1.18-.96,2.14-2.14,2.14,0,0,0,0,0,0-1.18,0-2.13-.96-2.14-2.14Z"></path><path fill="#fff" d="m18.73,7.07v-1.81h-1.8c-.64,0-1.15-.51-1.15-1.15s.51-1.15,1.15-1.15h1.8v-1.8C18.73.52,19.25,0,19.89,0s1.15.52,1.15,1.15v1.8h1.8c.64,0,1.15.51,1.15,1.15s-.51,1.15-1.15,1.15h-1.8v1.81c0,.64-.52,1.15-1.15,1.15s-1.15-.52-1.15-1.15Z"></path><path fill="#fff" d="m8.6,19.07c-2.58,0-4.76-1.93-5.06-4.5L2.18,3.03c-.05-.41-.4-.72-.82-.72h-.22c-.64,0-1.15-.52-1.15-1.15C0,.52.51,0,1.15,0h.22c1.58,0,2.92,1.19,3.1,2.76l.03.2h8.49c.64,0,1.15.51,1.15,1.15s-.51,1.15-1.15,1.15H4.77l.88,7.56h11.92c1.35,0,2.51-.97,2.75-2.3.1-.54.57-.94,1.13-.95.07,0,.14,0,.21.02.3.05.57.23.74.48.18.25.25.56.19.86-.43,2.43-2.55,4.2-5.01,4.19H6.05c.45,1,1.45,1.64,2.55,1.65h10.3c.64,0,1.15.52,1.15,1.15s-.52,1.15-1.15,1.15h-10.3Z"></path></svg>
7587                            </button>
7588                        </form>
7589                    {{/in_stock}}
7590                    {{^in_stock}}
7591                        <a class="w-auto mt-auto z-10 btn btn-primary bg-quaternary hover:bg-slate-900 active:bg-slate-900 justify-center text-sm rounded-md px-3 lg:px-4 py-2 ml-2" aria-label="Notify me"
7592                           {{^__queryID}} href="{{url}}" {{/__queryID}}
7593                           {{#__queryID}} href="{{urlForInsights}}" {{/__queryID}}
7594                    >
7595                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true" alt="Icona" role="presentation">
7596                                <path d="M19.5 24c-.38 0-.69-.31-.68-.69 0-.22.11-.43.28-.55a9.215 9.215 0 0 0 3.55-5.77c.07-.31.35-.53.67-.53.05 0 .1 0 .15.02.37.08.6.44.52.81a10.61 10.61 0 0 1-4.08 6.58c-.12.09-.26.13-.41.13Zm-6.88 0c-1.04 0-2.05-.32-2.89-.92l-.2-.14-.2.15c-2 1.5-4.85 1.1-6.35-.9a4.547 4.547 0 0 1-.06-5.37l.17-.24-1.57-1.56a5.049 5.049 0 0 1 0-7.16c.28-.28.59-.53.93-.74L8.4 3.45A8.797 8.797 0 0 1 18.64 4l.24.19 1.92-1.92c.26-.27.7-.28.97-.01.27.26.28.7.01.97l-.01.01-1.92 1.92.19.24a8.864 8.864 0 0 1 .81 9.86l-3.88 6.33a5.058 5.
7596058 0 0 1-3.73 2.39c-.2.02-.4.04-.6.04Zm.52-20.57c-1.42 0-2.82.41-4.02 1.18L3.17 8.28a3.7 3.7 0 0 0-.68 5.76l7.51 7.5c.7.69 1.64 1.08 2.62 1.08.15 0 .29 0 .43-.03 1.13-.13 2.13-.77 2.73-1.74l3.87-6.3a7.478 7.478 0 0 0-1.24-8.93l-.59-.58v.05a7.325 7.325 0 0 0-4.7-1.67Zm-9.09 14.1-.22.4c-.69 1.24-.47 2.78.54 3.77 1.01.96 2.51 1.17 3.75.52l.41-.22-4.48-4.48ZM.68 5.22a.69.69 0 0 1-.55-1.09C1.76 1.95 4.16.48 6.83.02S6.92 0 6.97 0c.38 0 .69.3.69.68 0 .33-.23.61-.55.68a9.18 9.18 0 0 0-5.89 3.58c-.13.17-.33.28-.55.28Z" style="fill:currentColor"></path>
7597                            </svg>
7598                        </a>
7599                    {{/in_stock}}
7600
7601                    {{/isAddToCartEnabled}}
7602                </div>
7603            </div>
7604        </div>
7605    </div>
7606</script>
vendor: 1 bytes, line 7606
7606
7607<script>
7608    'use strict';
7609
7610    function initInsight() {
7611        return {
7612            bindClickEvent(element, eventName, objectID, indexName, position, queryID) {
7613                element.querySelector(algoliaConfig.ccAnalytics.ISSelector).addEventListener("click", function () {
7614                    buildInsightsEventData(eventName, objectID, indexName, position, queryID);
7615                });
7616            }
7617        }
7618    }
7619</script>
vendor: 1 bytes, line 7619
7619
7620<script type="text/template" id="instant-stats-total-template">
7621    <div class="font-body-sm text-gray-1 hidden lg:block">
7622        <span itemprop="numberOfItems">{{nbHits}}</span>
7623        <span>prodotti</span>
7624    </div>
7625</script>
7625
7626
7627<script type="text/template" id="instant-stats-range-template">
7628    <div class="toolbar-amount font-body-sm text-gray-1 pb-4 text-center">
7629        <span itemprop="numberOfItems">{{first}}-{{last}}</span>
7630        <span>di</span>
7631        <span itemprop="numberOfItems">{{nbHits}}</span>
7632    </div>
7633</script>
vendor: 1 bytes, line 7633
7633
7634<script type="text/template" id="refinements-lists-item-template">
7635    <label class="{{cssClasses.label}} {{#isRefined}}checked{{/isRefined}} flex items-center mb-1">
7636        <input class="{{cssClasses.checkbox}}" {{#isRefined}}checked{{/isRefined}} type="checkbox" value="{{value}}" />
7637        <span class="pl-2">{{value}}</span>
7638        <span class="{{cssClasses.count}} flex-grow text-right">{{count}}</span>
7639    </label>
7640</script>
vendor: 1 bytes, line 7640
7640
7641<script type="text/template" id="current-refinements-template">
7642    <div class="cross-wrapper">
7643        <span class="clear-cross clear-refinement"></span>
7644    </div>
7645    <div class="current-refinement-wrapper">
7646        {{#label}}
7647        <span class="current-refinement-label">{{label}}{{^operator}}:{{/operator}}</span>
7648        {{/label}}
7649        {{#operator}}
7650        {{{displayOperator}}}
7651        {{/operator}}
7652        {{#exclude}}-{{/exclude}}
7653        <span class="current-refinement-name">{{name}}</span>
7654    </div>
7655</script>
vendor: 1 bytes, line 7655
7655
7656<script>
7657    (function () {
7658        const modals = [];
7659                let lastHide = 0;
7660
7661                function resolveElement($refs, value) {
7662            if (!value) return null;
7663                        if (value instanceof Element) return value;
7664                        if (typeof value === 'string') {
7665                try {
7666                    return ($refs && $refs[value]) || document.querySelector(value) || null;
7667                } catch (e) {}
7668            }
7669            return null;
7670        }
7671
7672                function determineTrigger($refs, dialog, trigger) {
7673                        if (!trigger && dialog?.target instanceof HTMLElement) {
7674                return dialog.target;
7675            }
7676
7677                        if (typeof dialog === 'string' && trigger?.target instanceof HTMLElement) {
7678                return trigger.target;
7679            }
7680
7681            return resolveElement($refs, trigger);
7682        }
7683
7684                function setFocusFirstElement(dialogElement) {
7685            if (!dialogElement) return;
7686
7687            window.setTimeout(() => {
7688                const candidates = dialogElement.querySelectorAll('[x-focus-first]');
7689                for (const candidate of candidates) {
7690                    if (candidate.closest('dialog') === dialogElement) {
7691                        candidate.focus();
7692                        return;
7693                    }
7694                }
7695            }, 50);
7696        }
7697
7698        window.hyva.modal = function(options = {}) {
7699                        if (this.$el && this.$el.dataset && this.$el.dataset.options) {
7700                try {
7701                    options = Object.assign(options, JSON.parse(this.$el.dataset.options || '{}'));
7702                } catch (e) {
7703                    throw new Error('Cannot read the dialog options from the data-options attribute: not valid JSON');
7704                }
7705            }
7706
7707            const config = Object.assign({
7708                dialog: 'dialog',                 duration: 300,                 transitionEnter: 'transition ease-out duration-300',
7709                transitionEnterStart: 'opacity-0',
7710                transitionEnterEnd: 'opacity-100',
7711                transitionLeave: 'transition ease-in duration-300',
7712                transitionLeaveStart: 'opacity-100',
7713                transitionLeaveEnd: 'opacity-0',
7714            }, options);
7715
7716            return {
7717                opened: {},
7718                show(dialog, trigger) {
7719                    const name = typeof dialog === 'string' ? dialog : config.dialog;
7720                    if (!name || this.opened[name]) return;
7721
7722                    this.opened[name] = true;
7723                    const focusTarget = determineTrigger(this.$refs, dialog, trigger);
7724                    const dialogEl = this.$refs && this.$refs[name];
7725                    const frame = { name, instance: this, focusTarget, time: Date.now() };
7726                    modals.push(frame);
7727                    setFocusFirstElement(dialogEl);
7728                    return new Promise(resolve => { frame.resolve = resolve; });
7729                },
7730                cancel() {
7731                    this.hide(false);
7732                },
7733                ok() {
7734                    this.hide(true);
7735                },
7736                hide(value) {
7737                                        if (Date.now() - lastHide < config.duration) return;
7738                    lastHide = Date.now();
7739
7740                                        const modal = modals.pop();
7741                    if (!modal) return;
7742
7743                    modal.instance.opened[modal.name] = false;
7744
7745                                        const focusTarget = modal.focusTarget;
7746                    focusTarget && window.setTimeout(() => focusTarget.focus(), config.duration + 50);
7747                    modal.resolve && modal.resolve(value);
7748                },
7749                /**
7750                 * @deprecated Use dialogConfig() instead, which is used by the default modal-container.phtml template.
7751                 * This method is kept for backwards compatibility with custom container templates.
7752                 */
7753                overlay(dialog) {
7754                    dialog = this.$el.dataset.dialogRefName || dialog;
7755                    const name = typeof dialog === 'string' ? dialog : config.dialog;
7756                    if (this.$el.tagName !== 'DIALOG' && ! window.hyva.modal.legacyModalCompatibility) {
7757                        console.warn(
7758                            '[hyva] Deprecated modal markup detected (x-bind="overlay" on a non-dialog element' +
7759                            (name ? ` for "${name}"` : '') + ').\n' +
7760                            'Escape and click-outside closing are not available for such dialogs anymore.\n' +
7761                            'Install hyva-themes/magento2-legacy-modal-compatibility or migrate to the native <dialog> markup.'
7762                        );
7763                    }
7764                    return Object.assign({}, this.dialogConfig(name), {
7765                        ['@hyva-modal-show.window'](event) {
7766                            event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide)
7767                        }
7768                    });
7769                },
7770                dialogConfig(name) {
7771                    name = name || this.$el.dataset.dialogRefName || config.dialog;
7772                    return {
7773                        ['x-show']: () => name ? this.opened[name] : false,
7774                        ['x-transition:enter']: config.transitionEnter,
7775                        ['x-transition:enter-start']: config.transitionEnterStart,
7776                        ['x-transition:enter-end']: config.transitionEnterEnd,
7777                        ['x-transition:leave']: config.transitionLeave,
7778                        ['x-transition:leave-start']: config.transitionLeaveStart,
7779                        ['x-transition:leave-end']: config.transitionLeaveEnd,
7780                        ['@hyva-modal-show.window'](event) {
7781                            event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide);
7782                        },
7783                    };
7784                },
7785                showDialogOnInit() {
7786                    const name = this.$el.dataset.dialogRefName;
7787                    if (name) {
7788                        this.show(name);
7789                    }
7790                }
7791            };
7792        }
7793
7794        window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length - 1]
7795
7796        window.hyva.modal.pop = function () {
7797            if (modals.length > 0) {
7798                modals[modals.length - 1].instance.hide();
7799            }
7800        }
7801
7802        /**
7803         * @deprecated Native <dialog> handles focus trapping automatically.
7804         * Calling this function has no effect. Kept for backwards compatibility.
7805         */
7806        window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) {}
7807
7808        /**
7809         * @deprecated Native <dialog> with x-htmldialog handles ESC key and click-outside events.
7810         * These functions have no effect. Kept for backwards compatibility.
7811         */
7812        window.hyva.modal.eventListeners = {
7813            keydown: event => {},
7814            click: event => {}
7815        };
7816    })();
7817
7818    window.addEventListener('alpine:init', () => {
7819        Alpine.data('hyvaModal', window.hyva.modal);
7820    }, {once: true});
7821</script>
7821
7822
7823<section x-data="initAmGdprLoader"
7824         @amgdpr-loading-start.window="showLoader"
7825         @amgdpr-loading-stop.window="hideLoader"
7826>
7827    
7828<div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50"
7829     style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgb(255 255 255/0.60);"
7830     x-show="isLoading"
7831     x-transition:enter="ease-out duration-200"
7832     x-transition:enter-start="opacity-0"
7833     x-transition:enter-end="opacity-100"
7834     x-transition:leave="ease-in duration-200"
7835     x-transition:leave-start="opacity-100"
7836     x-transition:leave-end="opacity-0">
7837    <svg xmlns="http://www.w3.org/2000/svg" width="57" height="57" viewBox="0 0 38 38" stroke="#ffb590" class="text-primary" role="img">
7838    <g fill="none" fill-rule="evenodd">
7839        <g transform="translate(1 1)" stroke-width="2">
7840            <circle stroke="#ff6801" cx="18" cy="18" r="18"/>
7841            <path d="M36 18c0-9.94-8.06-18-18-18">
7842                <animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="1s" repeatCount="indefinite"/>
7843            </path>
7844        </g>
7845    </g>
7846<title>loader</title></svg>
7847</div>
7848</section>
7849
7850<script data-cfasync="false">
7851    'use strict';
7852
7853    function initAmGdprLoader() {
7854        return {
7855            isLoading: false,
7856
7857            /**
7858             * @returns {void}
7859             */
7860            showLoader: function () {
7861                this.isLoading = true;
7862            },
7863
7864            /**
7865             * @returns {void}
7866             */
7867            hideLoader: function () {
7868                this.isLoading = false;
7869            }
7870        }
7871    }
7872
7873    window.addEventListener(
7874        'alpine:init',
7875        () => Alpine.data('initAmGdprLoader', initAmGdprLoader),
7876        { once: true }
7877    );
7878</script>
7878
7879
7880
7881<script data-cfasync="false">
7882    'use strict';
7883
7884    /**
7885     * @typedef {Object} CookieGroupData
7886     * @prop {Boolean} checked
7887     * @prop {[{description: string, lifetime: number|null, name: string, provider: string, type: string}]} cookies
7888     * @prop {String} description
7889     * @prop {string|null} groupId
7890     * @prop {Boolean} isEssential
7891     * @prop {String} name
7892     */
7893
7894    function initAmastyCookieGroupsStorage() {
7895        return {
7896            /**
7897             * @type {[CookieGroupData]}
7898             */
7899            groupData: [],
7900            cookiePolicy: undefined,
7901            lastUpdate: undefined,
7902
7903            /**
7904             * @returns {string|number[]}
7905             */
7906            getEssentialGroupIds: function () {
7907                return this.groupData.reduce(function (essentialGroupIds, group) {
7908                    if (group.isEssential) {
7909                        essentialGroupIds.push(group.groupId)
7910                    }
7911
7912                    return essentialGroupIds;
7913                }, []);
7914            },
7915
7916            /**
7917             * @returns {string|number[]}
7918             */
7919            getCheckedGroupIds: function () {
7920                return this.groupData.reduce(function (checkedGroupIds, group) {
7921                    if (group.checked) {
7922                        checkedGroupIds.push(group.groupId);
7923                    }
7924
7925                    return checkedGroupIds;
7926                }, []);
7927            },
7928
7929            /**
7930             * @param {string} cookieName
7931             * @returns {boolean}
7932             */
7933            isCookieEssential: function (cookieName) {
7934                const allEssentialCookies = this.getEssentialCookies();
7935
7936                return !!allEssentialCookies.find(cookie => cookie.name === cookieName);
7937            },
7938
7939            /**
7940             * @returns {array}
7941             */
7942            getEssentialCookies: function () {
7943                return this.groupData
7944                    .filter(group => group.isEssential)
7945                    .map(group => group.cookies)
7946                    .flat();
7947            },
7948
7949            /**
7950             * @returns {boolean}
7951             */
7952            hasGroupData: function () {
7953                return !!this.groupData.length;
7954            },
7955
7956            /**
7957             * @param {string} cookieName
7958             * @param {string} pattern
7959             * @returns {boolean}
7960             */
7961            isEssentialByPattern: function (cookieName, pattern) {
7962                const essentialCookiePatterns = this.getEssentialCookiesPattern(pattern);
7963
7964                return essentialCookiePatterns.some((pattern) => !!cookieName.match(this.getCookiePattern(pattern)));
7965            },
7966
7967            /**
7968             * @param {string} pattern
7969             * @return {Array}
7970             */
7971            getEssentialCookiesPattern: function (pattern) {
7972                return this.getCookiesByPattern(pattern, this.getEssentialCookies());
7973            },
7974
7975            /**
7976             * @param {string} pattern
7977             * @param {Array|undefined} cookies
7978             * @return {Array}
7979             */
7980            getCookiesByPattern: function (pattern, cookies) {
7981                if (typeof cookie === 'undefined') {
7982                    cookies = this.getAllCookies();
7983                }
7984
7985                return cookies
7986                    .map((cookie) => typeof cookie === 'object' ? cookie.name : cookie.split('=')[0].trim())
7987                    .filter((cookie) => cookie.match(pattern) !== null);
7988            },
7989
7990            /**
7991             * @returns {array}
7992             */
7993            getDisallowedCookies: function () {
7994                const disallowedCookie = decodeURIComponent(hyva.getCookie('amcookie_disallowed') ?? '');
7995                if (!disallowedCookie) {
7996                    return [];
7997                }
7998
7999                return disallowedCookie.split(',');
8000            },
8001
8002            /**
8003             * @returns {string}
8004             */
8005            getCookiePattern: function (pattern) {
8006                return `^${pattern.replaceAll('*', '.*')}$`;
8007            },
8008
8009            /**
8010             * @returns {array}
8011             */
8012            getAllCookies: function () {
8013                return document.cookie.split(';');
8014            },
8015
8016            /**
8017             * @param {boolean} setAcceptance
8018             * @returns {Promise}
8019             */
8020            updateGroupData: function (setAcceptance = false) {
8021                const cookieFetchUrl = `${BASE_URL}amcookie/cookie/cookies`;
8022                return fetch(cookieFetchUrl, {
8023                    method: "POST",
8024                    headers: {
8025                        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
8026                        'X-Requested-With': 'XMLHttpRequest'
8027                    },
8028                    body: new URLSearchParams({
8029                        allowed: hyva.getCookie('amcookie_allowed'),
8030                        restriction: hyva.getCookie('amcookie_policy_restriction')
8031                    })
8032                }).then(response => {
8033                    if (response.ok) {
8034                        return response.json();
8035                    }
8036
8037                    return Promise.reject(`${response.status} ${response.statusText}`);
8038                }).then(data => {
8039                    this.cookiePolicy = data.cookiePolicy ?? 'allowed';
8040                    this.lastUpdate = data.lastUpdate ?? 0;
8041                    this.groupData = [...data.groupData];
8042
8043                    hyva.setCookie('amcookie_policy_restriction', this.cookiePolicy, 10);
8044                    if (setAcceptance) {
8045                        amastyCookieManager.setLastCookieAcceptance(this.lastUpdate);
8046                    }
8047
8048                    return data;
8049                }).catch(error => {
8050                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([
8051                        {
8052                            type: "error",
8053                            text: error
8054                        }
8055                    ]);
8056                }).finally(() => window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated')));
8057            }
8058        }
8059    }
8060
8061    window.addEventListener(
8062        'alpine:init',
8063        () => Alpine.store('AmastyCookieGroups', initAmastyCookieGroupsStorage()),
8064        { once: true }
8065    );
8066</script>
8066
8067
8068<script data-cfasync="false">
8069    (function (amastyCookieManager) {
8070        'use strict';
8071
8072        amastyCookieManager.pattern = '{(?<cookiePattern>.*)}';
8073
8074        amastyCookieManager.getAmastyCookieGroupStorage = function () {
8075            return Alpine.store('AmastyCookieGroups') ?? {};
8076        };
8077
8078        amastyCookieManager.deleteDisallowedCookie = function () {
8079            const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage();
8080            const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? [];
8081
8082            disallowedCookies.forEach((name) => {
8083                const pattern = name.match(this.pattern);
8084                if (!!pattern && !!amastyCookieGroupStorage) {
8085                    const cookiePattern = amastyCookieGroupStorage.getCookiePattern(pattern.groups.cookiePattern) ?? '';
8086
8087                    amastyCookieGroupStorage.getCookiesByPattern(cookiePattern).forEach((cookieName) => {
8088                        this.deleteNotEssentialCookie(cookieName);
8089                    });
8090                } else {
8091                    this.deleteNotEssentialCookie(name);
8092                }
8093            });
8094        };
8095
8096        amastyCookieManager.isCookieAllowed = function (cookieName) {
8097            const allowedGroups = hyva.getCookie('amcookie_allowed');
8098            const disallowedCookie = this.getAmastyCookieGroupStorage()?.getDisallowedCookies() ?? [];
8099            const isCookiePolicyAllowed = hyva.getCookie('amcookie_policy_restriction') === 'allowed';
8100            const isCookieEssential = this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName);
8101            const isCookieEssentialByPattern = this.getAmastyCookieGroupStorage()?.isEssentialByPattern(cookieName, this.pattern);
8102
8103            if (!isCookiePolicyAllowed || isCookieEssential || isCookieEssentialByPattern) {
8104                return true;
8105            }
8106
8107            return !((!allowedGroups && !disallowedCookie) || this.isCookieDisallowed(cookieName));
8108        };
8109
8110        amastyCookieManager.isCookieDisallowed = function (cookieName) {
8111            const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage();
8112            const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? [];
8113
8114            return disallowedCookies.some((cookie) => {
8115                const pattern = cookie.match(this.pattern);
8116
8117                return !!pattern && !!cookieName.match(amastyCookieGroupStorage?.getCookiePattern(pattern.groups.cookiePattern));
8118            }) || disallowedCookies.indexOf(cookieName) !== -1;
8119        };
8120
8121        amastyCookieManager.processManageableCookies = function () {
8122            let cookieScripts = document.querySelectorAll('script[data-amcookie-groupid][type="text/plain"]');
8123
8124            cookieScripts.forEach((elem) => {
8125                if (this.isChecked(elem.dataset['amcookie-groupid'])) {
8126                    let elClone = elem.cloneNode(true).setAttribute('type', 'text/javascript');
8127
8128                    elem.remove();
8129                    document.body.appendChild(elClone);
8130                }
8131            });
8132        };
8133
8134        amastyCookieManager.deleteNotEssentialCookie = function (cookieName) {
8135            if (!this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName)) {
8136                hyva.setCookie(cookieName, '', -1, true);
8137            }
8138        };
8139
8140        amastyCookieManager.setLastCookieAcceptance = function (lastUpdate) {
8141            localStorage.setItem('am-last-cookie-acceptance', lastUpdate);
8142        };
8143
8144        window.addEventListener('amasty-cookie-group-updated', () => {
8145            amastyCookieManager.deleteDisallowedCookie();
8146        });
8147
8148        window.addEventListener('private-content-loaded', () => {
8149            amastyCookieManager.getAmastyCookieGroupStorage()?.hasGroupData() && amastyCookieManager.deleteDisallowedCookie();
8150        });
8151    }(window.amastyCookieManager = window.amastyCookieManager || {}));
8152</script>
8152
8153
8154<script data-cfasync="false">
8155    (function () {
8156        'use strict';
8157
8158        window.addEventListener('cookiebar-action-accept', (event) => {
8159            const groups = event.detail?.include_checked_groups ? Alpine.store('AmastyCookieGroups').getCheckedGroupIds() : [];
8160            const url = `${BASE_URL}amcookie/cookie/savegroups`;
8161            const contentType = 'application/x-www-form-urlencoded; charset=UTF-8';
8162            const body = new URLSearchParams({
8163                form_key: hyva.getFormKey()
8164            });
8165            groups.length && groups.map(groupId => body.append('groups[]', groupId));
8166
8167            fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}})
8168                .then(response => {
8169                    if (response.ok) {
8170                        return response.json();
8171                    }
8172
8173                    return Promise.reject(`${response.status} ${response.statusText}`);
8174                })
8175                .then(data => {
8176                    !!data.success && Alpine.store('AmastyCookieGroups').updateGroupData(true);
8177                })
8178                .catch(error => {
8179                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([
8180                        {
8181                            type: "error",
8182                            text: error
8183                        }
8184                    ]);
8185                })
8186                .finally(() => {
8187                    amastyCookieManager.processManageableCookies();
8188                    window.dispatchEvent(new CustomEvent('cookiebar-action-accept-finish'));
8189                    window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated'));
8190                    // Wait cookiebar close animation
8191                    setTimeout(() => {
8192                        window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
8193                    }, 100);
8194                });
8195        });
8196    })();
8197</script>
8197
8198
8199<script data-cfasync="false">
8200    (function () {
8201        'use strict';
8202
8203        window.addEventListener('cookiebar-action-allow', () => {
8204            const url = `${BASE_URL}amcookie/cookie/allow`;
8205            const contentType = 'application/x-www-form-urlencoded; charset=UTF-8';
8206            const body = new URLSearchParams({
8207                form_key: hyva.getFormKey()
8208            });
8209            fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}})
8210                .then(response => {
8211                    if (response.ok) {
8212                        return response;
8213                    }
8214
8215                    return Promise.reject(`${response.status} ${response.statusText}`);
8216                })
8217                .then(() => {
8218                    Alpine.store('AmastyCookieGroups').updateGroupData(true);
8219                })
8220                .catch(error => {
8221                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([
8222                        {
8223                            type: "error",
8224                            text: error
8225                        }
8226                    ]);
8227                })
8228                .finally(() => {
8229                    amastyCookieManager.processManageableCookies();
8230                    window.dispatchEvent(new CustomEvent('cookiebar-action-allow-finish'));
8231                    // Wait cookiebar close animation
8232                    setTimeout(() => {
8233                        window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
8234                    }, 100);
8235                });
8236        });
8237    })();
8238</script>
8238
8239
8240<style>
8241    :root {
8242        /* Bar Color Settings */
8243        --ambar-background: #fff;
8244        --ambar-links-color: #326ed1;
8245        --ambar-policy-text: #374151;
8246        --ambar-toggle-active-color: #2563eb;
8247        --ambar-toggle-inactive-color: #fff;
8248
8249        /* Buttons Color Settings */
8250        --ambar-button-accept-color: #337ab7;
8251        --ambar-button-accept-hover-color: #337ab7;
8252        --ambar-button-accept-text: #fff;
8253        --ambar-button-accept-hover-text: #fff;
8254
8255        --ambar-button-allow-color: #337ab7;
8256        --ambar-button-allow-hover-color: #337ab7;
8257        --ambar-button-allow-text: #fff;
8258        --ambar-button-allow-hover-text: #fff;
8259
8260        --ambar-button-decline-color: #337ab7;
8261        --ambar-button-decline-hover-color: #337ab7;
8262        --ambar-button-decline-text: #fff;
8263        --ambar-button-decline-hover-text: #fff;
8264
8265        --ambar-button-settings-color: #337ab7;
8266        --ambar-button-settings-hover-color: #337ab7;
8267        --ambar-button-settings-text: #fff;
8268        --ambar-button-settings-hover-text: #fff;
8269
8270        /* Buttons Order Settings */
8271        --ambar-button-accept-order: 0;
8272        --ambar-button-allow-order: 0;
8273        --ambar-button-settings-order: 0;
8274        --ambar-button-decline-order: 0;
8275
8276        /* Cookie Information Bar Color Settings */
8277        --ambar-information-background: #fff;
8278        --ambar-information-title: #374151;
8279        --ambar-information-description: #374151;
8280        --ambar-information-table-header: #374151;
8281        --ambar-information-table-content: #374151;
8282
8283        /* Cookie Information Bar Done Button Settings */
8284        --ambar-information-button-color: #1d4ed8;
8285        --ambar-information-button-hover-color: #1d4ed8;
8286        --ambar-information-button-text: #fff;
8287        --ambar-information-button-hover-text: #fff;
8288
8289        /* Settings Bar Done Button Settings */
8290        --ambar-setting-button-color: #1d4ed8;
8291        --ambar-setting-button-hover-color: #1d4ed8;
8292        --ambar-setting-button-text: #fff;
8293        --ambar-setting-button-hover-text: #fff;
8294    }
8295</style>
8296
8297<script data-cfasync="false">
8298    'use strict';
8299
8300    function initAmCookieActionDispatcherBtn() {
8301        return {
8302            actiondispatchHandler: function (event) {
8303                const { dispatchAction, dispatchPayload } = event.currentTarget.dataset;
8304                this.$dispatch(dispatchAction, this.parsePayload(dispatchPayload));
8305            },
8306            parsePayload: function (payload) {
8307                try {
8308                    return JSON.parse(payload);
8309                } catch (e) {
8310                    return null;
8311                }
8312            }
8313        };
8314    }
8315
8316    window.addEventListener(
8317        'alpine:init',
8318        () => Alpine.data('initAmCookieActionDispatcherBtn', initAmCookieActionDispatcherBtn),
8319        { once: true }
8320    );
8321</script>
8321
8322
8323<script data-cfasync="false">
8324    'use strict';
8325
8326    function initAmCookieGroups() {
8327        return {
8328            /**
8329             * @withContext x-for: $store.AmastyCookieGroups.groupData
8330             * @returns {string}
8331             */
8332            getInputGroupId: function () {
8333                return `amcookie-${this.$el.dataset.groupPrefix}group-${this.group.groupId}`
8334            },
8335
8336            /**
8337             * @withContext x-for: $store.AmastyCookieGroups.groupData
8338             * @returns {{"!bg-gray-400": boolean}}
8339             */
8340            getInputStyles: function () {
8341                return {
8342                    '!bg-gray-400': this.group.isEssential
8343                }
8344            },
8345
8346            /**
8347             * @withContext x-for: $store.AmastyCookieGroups.groupData
8348             * @returns {void}
8349             */
8350            toggleGroup: function () {
8351                this.group.checked = !this.group.checked;
8352            },
8353
8354            /**
8355             * @withContext x-for: $store.AmastyCookieGroups.groupData
8356             * @returns {void}
8357             */
8358            moreInfoClickHandler: function () {
8359                this.$dispatch(this.$el.dataset.dispatchAction, this.group);
8360            },
8361
8362            moreInformationAboutCookieGroup: function () {
8363                return hyva.str('About\u0020\u0022\u00251\u0022\u0020Cookie\u0020Group', this.group.name);
8364            }
8365        }
8366    }
8367
8368    window.addEventListener(
8369        'alpine:init',
8370        () => Alpine.data('initAmCookieGroups', initAmCookieGroups),
8371        {once: true}
8372    );
8373</script>
8373
8374<style>
8375    .is-loading > :not(.loader) {
8376        visibility: hidden;
8377    }
8378</style>
8379
8380<script>
8381    function connectifGetURLParameters(form) {
8382        let url = form.querySelector('.connectif-url').getAttribute('href');
8383        const parsedUrl = new URL(url);
8384
8385        const params = new URLSearchParams(parsedUrl.search);
8386
8387        const paramsObject = {};
8388        params.forEach((value, key) => {
8389            paramsObject[key] = decodeURIComponent(value);
8390        });
8391
8392        return paramsObject;
8393    }
8394
8395    var addToCartAjaxEvent = function (e) {
8396        let form = this;
8397        let delay = parseInt('1000', 10);
8398
8399        e.preventDefault();
8400
8401        const data = new URLSearchParams(new FormData(form)),
8402            button = form.querySelector('button') ?
8403                form.querySelector('button') :
8404                document.getElementById('product-addtocart-button'),
8405            loader = document.createElement('div'),
8406            initialText = button.innerHTML;
8407
8408        loader.className = 'absolute inset-0 flex justify-center items-center loader';
8409        loader.innerHTML = `
8410                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" xml:space="preserve" width="32" height="32">
8411                    <path fill="#333" d="M73 50c0-12.7-10.3-23-23-23S27 37.3 27 50m3.9 0c0-10.5 8.5-19.1 19.1-19.1S69.1 39.5 69.1 50">
8412                        <animateTransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/>
8413                    </path>
8414                </svg>
8415                `;
8416
8417        button.prepend(loader);
8418        button.classList.add('relative', 'is-loading', 'text-[0]');
8419        button.disabled = true;
8420
8421        var product_id = data.get('product');
8422
8423        fetch(e.currentTarget.action, {
8424            method: 'POST',
8425            body: data,
8426            headers: {
8427                'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
8428                'X-Requested-With': 'XMLHttpRequest'
8429            }
8430        })
8431            .then(res => {
8432                if (!res.ok) {
8433                    return form.submit();
8434                }
8435
8436                if (res.redirected) {
8437                    return [];
8438                }
8439
8440                return res.json();
8441            })
8442            .then(data => {
8443                if (form.classList.contains('connectif-product')) {
8444                    let jsonDecodedVAR = JSON.parse(connectifGetURLParameters(form)['cnWebLinkClicked']);
8445                    jsonDecodedVAR.type = "web-link-clicked";
8446
8447                    window.connectif.managed.sendEvents([jsonDecodedVAR], []).finally(() => submitCallback());
8448                } else {
8449                    submitCallback();
8450                }
8451
8452                function submitCallback() {
8453                    if (data.backUrl && data.backUrl !== window.location.href) {
8454                        form.submit();
8455                    } else {
8456                        button.classList.add('bg-success-darker', 'hover:bg-success-darker');
8457                        loader.remove();
8458
8459                        let defaultChild = button.querySelector('.check');
8460                        if (!defaultChild) {
8461                            button.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 17.45" class="w-6 h-6" width="24" height="24" role="img">
8462        <path d="M7.75 17.46c-.68 0-1.34-.27-1.82-.76L.44 11.17a1.54 1.54 0 0 1 0-2.16c.58-.59 1.54-.6 2.13-.01l.01.01 5.17 5.2L21.42.44c.58-.59 1.54-.6 2.13-.01l.01.01c.59.6.59 1.56 0 2.16L9.57 16.7c-.48.49-1.13.76-1.82.76Z" style="fill:currentColor"/>
8463    <title>check</title></svg>
8464    `;
8465                        } else {
8466                            defaultChild.classList.add('hidden');
8467                            let addingChild = button.querySelector('.added');
8468                            if (addingChild) {
8469                                addingChild.classList.remove('hidden');
8470                            }
8471                        }
8472
8473                        button.classList.remove('is-loading', 'text-[0]');
8474                    }
8475
8476                    window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
8477                }
8478            })
8479            .catch(err => {
8480                window.dispatchEvent(new CustomEvent('product-addtocart-error'));
8481
8482                setMessage({
8483                    text:'There was a problem adding your item to the cart.',
8484                    type: 'error'
8485                });
8486            })
8487            .finally(() => {
8488                try {
8489                    var messages = hyva.getCookie('mage-messages');
8490                    messages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
8491                    document.cookie = 'mage-messages=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
8492
8493                } catch (error) {
8494                    console.warn('Error parsing Cookie Messages:', error);
8495                    return;
8496                }
8497
8498                setTimeout(() => {
8499                    button.disabled = false;
8500                    button.classList.remove('bg-success-darker', 'hover:bg-success-darker');
8501                    button.classList.remove('text-[0]');
8502
8503                    let defaultChild = button.querySelector('.default');
8504                    if (!defaultChild) {
8505                        button.innerHTML = button.getAttribute("aria-label");
8506                    } else {
8507                        defaultChild.classList.remove('hidden');
8508                        let addingChild = button.querySelector('.added');
8509                        if (addingChild) {
8510                            addingChild.classList.add('hidden');
8511                        }
8512                    }
8513
8514                    button.innerHTML = initialText;
8515
8516                    window.dispatchEvent(new CustomEvent('product-addtocart-success', {
8517                        detail: {
8518                            product_id: product_id,
8519                            form_data: Object.fromEntries(new FormData(form))
8520                        }
8521                    }));
8522
8523                    messages.forEach(message => {
8524                        setMessage(message);
8525                    });
8526                }, delay);
8527            });
8528    };
8529
8530    window.setAjaxCart = (selectors = '.product_addtocart_form:not(.no-ajax), #product_addtocart_form:not(.no-ajax)') => {
8531        const addToCartForms = document.querySelectorAll(selectors);
8532
8533        addToCartForms.forEach(form => {
8534            form.removeEventListener('submit', addToCartAjaxEvent);
8535            form.addEventListener('submit', addToCartAjaxEvent);
8536        });
8537    }
8538
8539    /**
8540     * Set Message
8541     */
8542    function setMessage(message) {
8543        typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
8544            [message], 5000
8545        );
8546    }
8547
8548    /** Init on pageload */
8549    window.setAjaxCart();
8550</script>
8550
8551    
8551<script>
8552    function initAlgoliaInsights(partial) {
8553        window.algoliaAnalytics = AlgoliaAnalytics.default;
8554        window.hasAddedParameters = false;
8555        window.useCookie = algoliaConfig.cookieConfiguration.cookieRestrictionModeEnabled ? !!hyva.getCookie(algoliaConfig.cookieConfiguration.consentCookieName) : true;
8556
8557        if (!canTrack()) {
8558            return;
8559        }
8560
8561        initializeAnalytics(partial);
8562        addSearchParameters();
8563        bindEvents();
8564
8565        // Although events can accept both auth and anon tokens, queries can only accept a single token
8566        function determineUserToken() {
8567            return window.algoliaAnalytics.getAuthenticatedUserToken() ?? algoliaAnalytics.getUserToken();
8568        }
8569
8570        function initializeAnalytics(partial = false) {
8571            if (partial) {
8572                algoliaAnalytics.init({
8573                    appId: algoliaConfig.applicationId,
8574                    apiKey: algoliaConfig.apiKey,
8575                    partial: true,
8576                    useCookie: true,
8577                    cookieDuration: Number(algoliaConfig.cookieConfiguration.cookieDuration)
8578                });
8579            } else {
8580                algoliaAnalytics.init({
8581                    appId: algoliaConfig.applicationId,
8582                    apiKey: algoliaConfig.apiKey,
8583                    useCookie: true,
8584                    cookieDuration: Number(algoliaConfig.cookieConfiguration.cookieDuration)
8585                });
8586            }
8587            let userAgent = 'insights-js-in-magento (' + algoliaConfig.extensionVersion + ')';
8588            window.algoliaAnalytics.addAlgoliaAgent(userAgent);
8589
8590            let unsetAuthenticationToken = hyva.getCookie('unset_authentication_token');
8591            if (hyva.getCookie('aa-search') && hyva.getCookie('aa-search') !== '') {
8592                window.algoliaAnalytics.setUserToken(hyva.getCookie('aa-search'));
8593            } else if (hyva.getCookie('_ALGOLIA') && hyva.getCookie('_ALGOLIA') !== '') {
8594                window.algoliaAnalytics.setUserToken(hyva.getCookie('_ALGOLIA'));
8595            } else if (unsetAuthenticationToken && unsetAuthenticationToken !== '') {
8596                window.algoliaAnalytics.setUserToken('undefined');
8597                hyva.setCookie('unset_authentication_token', '', -1);
8598            }
8599        }
8600
8601        function applyInsightsToSearchParams(params = {}) {
8602            if (algoliaConfig.ccAnalytics.enabled) {
8603                params.clickAnalytics = true;
8604            }
8605
8606            if (algoliaConfig.personalization.enabled) {
8607                params.enablePersonalization = true;
8608                params.userToken = determineUserToken();
8609            }
8610
8611            return params;
8612        }
8613
8614        function addSearchParameters() {
8615            if (window.hasAddedParameters) {
8616                return;
8617            }
8618            algolia.registerHook('beforeWidgetInitialization', function (allWidgetConfiguration) {
8619                allWidgetConfiguration.configure = applyInsightsToSearchParams(
8620                    allWidgetConfiguration.configure
8621                );
8622                return allWidgetConfiguration;
8623            });
8624
8625            algolia.registerHook('afterAutocompleteProductSourceOptions', (options) => {
8626                return applyInsightsToSearchParams(options);
8627            });
8628
8629            window.hasAddedParameters = true;
8630        }
8631
8632
8633        function bindEvents() {
8634            bindClickedEvents();
8635            bindViewedEvents();
8636
8637            algolia.triggerHooks('afterInsightsBindEvents', this);
8638        }
8639
8640        function bindClickedEvents() {
8641            // Filter Clicked
8642            if (algoliaConfig.personalization.filterClicked.enabled) {
8643                const facets = algoliaConfig.facets;
8644                let containers = [];
8645                for (let i = 0; i < facets.length; i++) {
8646                    let elem = createISWidgetContainer(facets[i].attribute);
8647                    containers.push('.' + elem.className);
8648                }
8649
8650                algolia.registerHook('afterInstantsearchStart', function (search) {
8651                    const selectors = document.querySelectorAll(containers.join(', '));
8652                    selectors.forEach(function (e) {
8653                        e.addEventListener('click', function (event) {
8654                            const attribute = this.dataset.attr;
8655                            const elem = event.target;
8656                            if (elem.type === "checkbox" && elem.checked) {
8657                                var filter = attribute + ':' + elem.value;
8658                                trackFilterClick([filter]);
8659                            }
8660                        });
8661                    });
8662
8663                    return search;
8664                });
8665            }
8666        }
8667
8668        function bindViewedEvents() {
8669            // viewed event is exclusive to personalization
8670            if (!algoliaConfig.personalization.enabled) {
8671                return;
8672            }
8673
8674            const viewConfig = algoliaConfig.personalization.viewedEvents.viewProduct;
8675            if (viewConfig.enabled) {
8676                if (document.body.classList.contains('catalog-product-view')) {
8677                    const objectId = document.querySelector('#product_addtocart_form')?.querySelector('input[name="product"]').value;
8678                    if (objectId) {
8679                        const viewData = buildEventData(viewConfig.eventName, objectId, algoliaConfig.indexName + '_products');
8680                        trackView(viewData);
8681                    }
8682                }
8683
8684            }
8685        }
8686
8687        function buildEventData(eventName, objectId, indexName, position = null, queryId = null) {
8688            const eventData = {
8689                eventName: eventName,
8690                objectIDs: [objectId + ''],
8691                index: indexName
8692            };
8693
8694            if (position) {
8695                eventData.positions = [parseInt(position)];
8696            }
8697
8698            if (queryId) {
8699                eventData.queryID = queryId;
8700            }
8701
8702            return eventData;
8703        }
8704
8705        function trackClick(eventData) {
8706            if (eventData.queryID) {
8707                window.algoliaAnalytics.clickedObjectIDsAfterSearch(eventData);
8708            } else {
8709                window.algoliaAnalytics.clickedObjectIDs(eventData);
8710            }
8711        }
8712
8713        function trackFilterClick(filters) {
8714            const eventData = {
8715                index: algoliaConfig.indexName + '_products',
8716                eventName: algoliaConfig.personalization.filterClicked.eventName,
8717                filters: filters
8718            };
8719
8720            window.algoliaAnalytics.clickedFilters(eventData);
8721        }
8722
8723        function trackView(eventData) {
8724            window.algoliaAnalytics.viewedObjectIDs(eventData);
8725        }
8726    }
8727
8728    function canTrack() {
8729        return ((algoliaConfig.ccAnalytics.enabled
8730            || algoliaConfig.personalization.enabled) && window.useCookie);
8731    }
8732
8733    function buildInsightsEventData(eventName, objectId, indexName, position = null, queryId = null) {
8734        if (!canTrack()) {
8735            return;
8736        }
8737
8738        const eventData = {
8739            eventName: eventName,
8740            objectIDs: [objectId + ''],
8741            index: indexName
8742        };
8743        if (position) {
8744            eventData.positions = [parseInt(position)];
8745        }
8746        if (queryId) {
8747            eventData.queryID = queryId;
8748        }
8749        trackClick(eventData);
8750    }
8751
8752    function trackClick(eventData) {
8753        if (eventData.queryID) {
8754            window.algoliaAnalytics.clickedObjectIDsAfterSearch(eventData);
8755        } else {
8756            window.algoliaAnalytics.clickedObjectIDs(eventData);
8757        }
8758    }
8759</script>
8759
8760    
8760<script>
8761        window.algoliaConfig = {"instant":{"enabled":true,"selector":".columns","isAddToCartEnabled":true,"addToCartParams":{"action":"https:\/\/www.farma.it\/checkout\/cart\/add\/","formKey":"9dQr53kPKJTqt6jR","redirectUrlParam":"uenc"},"infiniteScrollEnabled":false,"urlTrackedParameters":["query","attribute:*","index","page"],"isSearchBoxEnabled":true,"isVisualMerchEnabled":false,"categorySeparator":" \/\/\/ ","categoryPageIdAttribute":"categoryPageId","isCategoryNavigationEnabled":false,"hidePagination":false},"autocomplete":{"enabled":true,"selector":".algolia-search-input","sections":[{"name":"manufacturer","label":"Marchi","hitsPerPage":""}],"nbOfProductsSuggestions":5,"nbOfCategoriesSuggestions":4,"nbOfQueriesSuggestions":10,"isDebugEnabled":false,"isNavigatorEnabled":true,"debounceMilliseconds":300,"minimumCharacters":0},"landingPage":{"query":"","configuration":"[]"},"recommend":{"enabledFBT":false,"enabledRelated":false,"enabledFBTInCart":false,"enabledRelatedInCart":false,"enabledLookingSimilar":0,"limitFBTProducts":12,"limitRelatedProducts":12,"limitTrendingItems":12,"limitLookingSimilar":12,"enabledTrendItems":0,"trendItemFacetName":null,"trendItemFacetValue":null,"isTrendItemsEnabledInPDP":0,"isTrendItemsEnabledInCartPage":0,"isAddToCartEnabledInFBT":false,"isAddToCartEnabledInRelatedProduct":false,"isAddToCartEnabledInTrendsItem":false,"isAddToCartEnabledInLookingSimilar":false,"FBTTitle":"Frequently bought together","relatedProductsTitle":"Potrebbe interessarti anche","trendingItemsTitle":"Trending items","addToCartParams":{"action":"https:\/\/www.farma.it\/checkout\/cart\/add\/","formKey":"9dQr53kPKJTqt6jR","redirectUrlParam":"uenc"},"isLookingSimilarEnabledInPDP":0,"isLookingSimilarEnabledInCartPage":0,"lookingSimilarTitle":"Prodotti simili"},"extensionVersion":"3.15.3","applicationId":"ZMUZFC3VV1","indexName":"magento2_default","apiKey":"ZGE0NDk5YjhjMjBmMjMyMjEyNDM1OWYwYTFmMDM2NTE4OWIyNDhhNTJlNzljNWQ2NGQzOTVhMGQ4OTM5NjE3OXRhZ0ZpbHRlcnM9JnZhbGlkVW50aWw9MTc5MTYzMjY0MA==","attributeFilter":[],"facets":[{"attribute":"manufacturer","type":"disjunctive","label":"Marchi","searchable":"1","create_rule":"2"},{"attribute":"price","type":"slider","label":"Prezzo","searchable":"1","create_rule":"2"},{"attribute":"categories","type":"disjunctive","label":"Categorie","searchable":"1","create_rule":"2"}],"areCategoriesInFacets":true,"hitsPerPage":20,"sortingIndices":[{"attribute":"price","sort":"asc","sortLabel":"Prezzo crescente","virtualReplica":"0","name":"magento2_default_products_price_default_asc","ranking":["asc(price.EUR.default)","typo","geo","words","filters","proximity","attribute","exact","custom"],"label":"Prezzo crescente"},{"attribute":"price","sort":"desc","sortLabel":"Prezzo decrescente","virtualReplica":"0","name":"magento2_default_products_price_default_desc","ranking":["desc(price.EUR.default)","typo","geo","words","filters","proximity","attribute","exact","custom"],"label":"Prezzo decrescente"},{"attribute":"created_at","sort":"desc","sortLabel":"Novit\u00e0","virtualReplica":"0","name":"magento2_default_products_created_at_desc","ranking":["desc(created_at)","typo","geo","words","filters","proximity","attribute","exact","custom"],"label":"Novit\u00e0"}],"isSearchPage":false,"isCategoryPage":false,"isLandingPage":false,"removeBranding":false,"productId":null,"priceKey":".EUR.default","priceGroup":null,"origFormatedVar":"price.EUR.default_original_formated","tierFormatedVar":"price.EUR.default_tier_formated","currencyCode":"EUR","currencySymbol":"\u20ac","priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":".","groupLength":3,"integerRequired":false},"maxValuesPerFacet":10,"autofocus":true,"resultPageUrl":"https:\/\/www.farma.it\/catalogsearch\/result\/","request":{"query":"","refinementKey":"","refinementValue":"","categoryId":"","landingPageId":"","path":"","level":"","parentCategory":"","childCategories":[],"url":"https:\/\/www.farma.it\/app"},"showCatsNotIncludedInNavigation":false,"showSuggestionsOnNoResultsPage":true,"baseUrl":"https:\/\/www.farma.it","popularQueries":["bionike","magnesio","Euphidra","Svr","NUXE","fermenti lattici","Solari","filorga","dentifricio","neavita"],"useAdaptiveImage":false,"urls":{"logo":"https:\/\/www.farma.it\/static\/version1789421831\/frontend\/DNAFactory\/orlandi_hyva\/it_IT\/Algolia_AlgoliaSearch\/js\/images\/algolia-logo-blue.svg"},"cookieConfiguration":{"customerTokenCookie":"_ALGOLIA_MAGENTO_AUTH","consentCookieName":"user_allowed_save_cookie","cookieAllowButtonSelector":"#btn-cookie-allow","cookieRestrictionModeEnabled":false,"cookieDuration":"15552000000"},"ccAnalytics":{"enabled":true,"ISSelector":".ais-Hits-item a.result, .ais-InfiniteHits-item a.result","conversionAnalyticsMode":"all","addToCartSelector":".action.primary.tocart","orderedProductIds":[]},"isPersonalizationEnabled":true,"personalization":{"enabled":true,"viewedEvents":{"viewProduct":{"eventName":"Viewed Product","enabled":true,"method":"viewedObjectIDs"}},"clickedEvents":{"productClicked":{"eventName":"Product Clicked","enabled":true,"selector":".ais-Hits-item a.result, .ais-InfiniteHits-item a.result","method":"clickedObjectIDs"},"productRecommended":{"eventName":"Recommended Product Clicked","enabled":true,"selector":".products-upsell .product-item","method":"clickedObjectIDs"}},"filterClicked":{"eventName":"Filter Clicked","enabled":true,"method":"clickedFilters"}},"analytics":{"enabled":false,"delay":"3000","triggerOnUiInteraction":"1","pushInitialSearch":"0"},"now":1791504000,"queue":{"isEnabled":true,"nbOfJobsToRun":30,"retryLimit":3,"nbOfElementsPerIndexingJob":300},"isPreventBackendRenderingEnabled":false,"translations":{"to":"a","or":"o","go":"Go","popularQueries":"Puoi provare le seguenti ricerche popolari","seeAll":"Vedi tutti i prodotti","allDepartments":"All departments","seeIn":"See products in","orIn":"or in","noProducts":"Non abbiamo trovato nessun prodotto per questa ricerca","noResults":"Nessun risultato","refine":"Refine","selectedFilters":"Selected Filters","clearAll":"Clear all","previousPage":"Pagina precedente","nextPage":"Pagina successiva","searchFor":"Search for products","relevance":"Rilevanza","categories":"Categorie","products":"Prodotti","suggestions":"Suggestions","searchBy":"Search by","searchForFacetValuesPlaceholder":"Cerca","showMore":"Show more products","searchTitle":"Search results for","placeholder":"Search for products, categories, ...","addToCart":"Aggiungi al Carrello"}};
8762
8763        let autocompleteInitialized = false;
8764        let commonInitialized = false;
8765        let insightsInitialized = false;
8766
8767        async function initAutocomplete() {
8768            if (autocompleteInitialized) {
8769                return
8770            }
8771
8772            autocompleteInitialized = true;
8773            Promise.all([
8774                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/internals/common.js"),
8775                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/internals/base64.js"),
8776                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/algolia-instantsearch.min.js"),
8777                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/search-insights.min.js"),
8778                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/algolia-search.min.js"),
8779                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/algolia-autocomplete.min.js"),
8780                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/query-suggestions-plugin.min.js"),
8781                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/autocomplete.js"),
8782                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/additional-section.js"),
8783                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/categories.js"),
8784                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/pages.js"),
8785                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/products.js"),
8786                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/suggestions.js"),
8787                ]
8788            ).then(data => {
8789                initCommon();
8790                initAlgoliaInsights();
8791                initAlgoliaAutocomplete();
8792            });
8793        }
8794
8795        function initInstantSearch() {
8796            Promise.all([
8797                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/internals/common.js"),
8798                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/internals/base64.js"),
8799                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/algolia-instantsearch.min.js"),
8800                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/search-insights.min.js"),
8801                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/hogan.min.js"),
8802                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/mustache.min.js"),
8803                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/internals/template-engine.js"),
8804                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/instantsearch.js"),
8805                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/algolia-search.min.js"),
8806                ]
8807            ).then(data => {
8808                initCommon();
8809                initAlgoliaInsights();
8810                initAlgoliaInstantSearch();
8811            });
8812        }
8813
8814        function initRecommended(objectIds) {
8815            Promise.all([
8816                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/internals/common.js"),
8817                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/internals/base64.js"),
8818                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/algolia-instantsearch.min.js"),
8819                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/search-insights.min.js"),
8820                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/recommend.min.js"),
8821                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/recommend-js.min.js"),
8822                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/recommend.js"),
8823                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/template/recommend/products.js"),
8824                ]
8825            ).then(data => {
8826                initCommon();
8827                initBase64();
8828                initAlgoliaInsights();
8829                initAlgoliaRecommended('cms_page_view', objectIds);
8830            });
8831        }
8832
8833        function initCommon() {
8834            if (commonInitialized) {
8835                return
8836            }
8837
8838            commonInitialized = true
8839            initAlgoliaCommon();
8840            initBase64();
8841            window.dispatchEvent(new CustomEvent('algolia-loaded'));
8842        }
8843
8844        if (algoliaConfig.instant.enabled && (algoliaConfig.isCategoryPage || algoliaConfig.isSearchPage)) {
8845            initInstantSearch();
8846        }
8847
8848        
8849        
8850
8851        let objectIds = [""];
8852        
8853        if (algoliaConfig.autocomplete.enabled) {
8854            document.getElementById('menu-search-icon').addEventListener('click', async () => {
8855                await initAutocomplete();
8856            },{once: true});
8857        }
8858
8859        window.addEventListener('init-algolia-trends', function () {
8860            initCommon();
8861            initAlgoliaInsights();
8862            window.dispatchEvent(new CustomEvent('init-algolia-trends-done'));
8863        });
8864
8865        window.addEventListener('init-algolia-LS', function () {
8866            initCommon();
8867            initAlgoliaInsights();
8868            window.dispatchEvent(new CustomEvent('init-algolia-LS-done'));
8869        });
8870
8871        window.addEventListener('user-allowed-save-cookie', function () {
8872            initAlgoliaInsights(true);
8873        });
8874    </script>
8874
8875
8876<style>
8877    .algolia-ac-product-row .badge-container .badge {
8878        max-height: fit-content;
8879        margin: auto 0;
8880    }
8881
8882    @media (max-width: 768px) {
8883        .catalogsearch-result-index {
8884            #algolia-left-container {
8885                width: calc(100vw - 15px);
8886                left: -15px;
8887                padding-left: 15px;
8888            }
8889
8890            #algolia-left-container .filters {
8891                width: calc(50% - 15px);
8892                margin-top: 30px;
8893            }
8894
8895            #algolia-toolbar {
8896                top: -76px;
8897                width: calc(50% - 15px);
8898            }
8899
8900            #algolia-toolbar .flex.right {
8901                flex-direction: column;
8902                align-items: flex-end;
8903                width: 100%;
8904                font-weight: bold;
8905            }
8906
8907            #algolia-toolbar .flex.left {
8908                position: absolute;
8909                width: calc(93vw - var(--scrollbar-width));
8910                top: -5px;
8911                left: calc((0% - 100vw + var(--scrollbar-width)) / 2);
8912                right: auto;
8913            }
8914
8915            #algolia-toolbar #algolia-sorts {
8916                width: 100%;
8917            }
8918
8919            #algolia-toolbar .ais-SortBy-select {
8920                background-color: white;
8921                font-weight: bold;
8922                padding-top: 0.375rem;
8923                padding-bottom: 0.375rem;
8924                padding-left: 0.75rem;
8925                padding-right: 1rem;
8926                width: 100%;
8927                border: 2px solid #6328e0;
8928            }
8929
8930            .ais-Stats-text > div {
8931                font-size: 16px;
8932                display: block;
8933            }
8934        }
8935    }
8936
8937    input[type="search"]::-webkit-search-decoration,
8938    input[type="search"]::-webkit-search-cancel-button,
8939    input[type="search"]::-webkit-search-results-button,
8940    input[type="search"]::-webkit-search-results-decoration {
8941        -webkit-appearance:none!important;
8942    }
8943
8944    .ais-Hits-banner-image {
8945        margin: auto!important;
8946        margin-bottom: 20px!important;
8947    }
8948</style>
8949<script>
8950    function initWishlist() {
8951        return {
8952            addToWishlist(productId) {
8953                const formKey = hyva.getFormKey();
8954                const postUrl = BASE_URL + 'wishlist/index/add/';
8955
8956                const params = new URLSearchParams({
8957                    form_key: formKey,
8958                    product: productId,
8959                    uenc: hyva.getUenc()
8960                });
8961
8962                const form = document.getElementById(`product_addtocart_form_${productId}`);
8963                if (form) {
8964                    new FormData(form).forEach((value, key) => params.set(key, value));
8965                }
8966
8967                fetch(postUrl, {
8968                    "headers": {
8969                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
8970                    },
8971                    "body": params.toString(),
8972                    "method": "POST",
8973                    "mode": "cors",
8974                    "credentials": "include"
8975                }).then(function (response) {
8976                    if (response.redirected) {
8977                        window.location.href = response.url;
8978                    } else if (response.ok) {
8979                        return response.json();
8980                    } else {
8981                        typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
8982                            [{
8983                                type: "warning",
8984                                text: "Could\u0020not\u0020add\u0020item\u0020to\u0020wishlist."
8985                            }], 5000
8986                        );
8987                    }
8988                }).then(function (response) {
8989                    if (!response) { return }
8990                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
8991                        [{
8992                            type: (response.success) ? "success" : "error",
8993                            text: (response.success)
8994                                ? "Prodotto\u0020\u00E8\u0020stato\u0020aggiunto\u0020nella\u0020tua\u0020lista\u0020desideri."
8995                                : response.error_message
8996                        }], 5000
8997                    );
8998                    const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data");
8999                    window.dispatchEvent(reloadCustomerDataEvent);
9000                }).catch(function (error) {
9001                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
9002                        [{
9003                            type: "error",
9004                            text: error
9005                        }], 5000
9006                    );
9007                });
9008            }
9009        }
9010    }
9011</script>
vendor: 1 bytes, line 9011
9011
9012<script>
9013    window.addEventListener('algolia-loaded', () => {
9014        algolia.registerHook('afterAutocompleteStart', () => {
9015            document.querySelector('#algoliaAutocomplete input')?.focus();
9016        });
9017    },{ once: true})
9018</script>
9018
9019    
9019<script>
9020        window.addEventListener('algolia-loaded', () => {
9021            algolia.registerHook('beforeWidgetInitialization', (allWidgetConfiguration) => {
9022                const {currentRefinements} = allWidgetConfiguration;
9023                const originalTransformItems = currentRefinements.transformItems.bind(currentRefinements);
9024                currentRefinements.transformItems = (items) => {
9025                    if (items.length !== 0) {
9026                        document.getElementById('instant-search-active-filters').classList.remove('hidden');
9027                        document.getElementById('instant-search-active-filters-label').classList.remove('hidden');
9028                    } else {
9029                        document.getElementById('instant-search-active-filters').classList.add('hidden');
9030                        document.getElementById('instant-search-active-filters-label').classList.add('hidden');
9031                    }
9032                    return originalTransformItems(items);
9033                }
9034                return allWidgetConfiguration;
9035            });
9036        },{ once: true})
9037    </script>
9037
9038<div x-cloak x-data="{...initAmBanners()}" x-init="initBanners()">
9039    
9040<div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50"
9041     style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgb(255 255 255/0.60);"
9042     x-show="isLoading"
9043     x-transition:enter="ease-out duration-200"
9044     x-transition:enter-start="opacity-0"
9045     x-transition:enter-end="opacity-100"
9046     x-transition:leave="ease-in duration-200"
9047     x-transition:leave-start="opacity-100"
9048     x-transition:leave-end="opacity-0">
9049    <svg xmlns="http://www.w3.org/2000/svg" width="57" height="57" viewBox="0 0 38 38" stroke="#ffb590" class="text-primary" role="img">
9050    <g fill="none" fill-rule="evenodd">
9051        <g transform="translate(1 1)" stroke-width="2">
9052            <circle stroke="#ff6801" cx="18" cy="18" r="18"/>
9053            <path d="M36 18c0-9.94-8.06-18-18-18">
9054                <animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="1s" repeatCount="indefinite"/>
9055            </path>
9056        </g>
9057    </g>
9058<title>loader</title></svg>
9059</div>
9060</div>
9061<script>
9062    'use strict';
9063
9064    function initAmBanners() {
9065        return {
9066            options: {
9067                sections: [],
9068                content: [],
9069                banners: [],
9070                injectorSectionId: null,
9071                injectorParams: {}
9072            },
9073            isLoading: true,
9074            injectorResolver: {},
9075
9076            initBanners: function () {
9077                this.options = {"sections":{"50":[37,103,127,50,128,117,90,67,54,6,41,40,21,13,7],"7":[62,61],"0":[58],"4":[10,9,8]},"content":{"37":"\n<div data-banner-id=\"37\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"https:\/\/wa.me\/447418640409\" aria-label=\"Promozione\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/banner_product_page\/Whatsapp_BPP.png\" alt=\"\" width=\"333\" height=\"189\" class=\"rounded-md mb-5\" \/>\r\n<\/a><\/div>    <\/div>\n","103":"\n<div data-banner-id=\"103\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"\/resi-e-rimborsi2\" aria-label=\"Promozione\" title=\"Farmait 30092026 BannerProductPage\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/banner_product_page\/reso_BPP.jpg\" alt=\"\" width=\"333\" height=\"189\" class=\"rounded-md mb-5\" \/>\r\n<\/a><\/div>    <\/div>\n","127":"\n<div data-banner-id=\"127\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"\/promo-farmait\" aria-label=\"Promozione\" title=\"Farmait 01102026 BannerProductPage\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/banner_product_page\/Solari_BPP_10_26.png\" alt=\"\" width=\"333\" height=\"189\" class=\"rounded-md mb-5\" \/>\r\n<\/a><\/div>    <\/div>\n","50":"\n<div data-banner-id=\"50\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"\/promo-rilastil\" aria-label=\"Promozione\" title=\"Rilastil 05102026 BannerProductPage\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/banner_product_page\/Rilastil_MUp_BPP_10_26.png\" alt=\"\" width=\"333\" height=\"189\" class=\"rounded-md mb-5\" \/>\r\n<\/a><\/div>    <\/div>\n","128":"\n<div data-banner-id=\"128\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"\/promo-thermacare\" aria-label=\"Promozione\" title=\"Angelini 07102026 BannerProductPage\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/banner_product_page\/ThermaCare_BPP_04_26.png\" alt=\"\" width=\"333\" height=\"189\" class=\"rounded-md mb-5\" \/>\r\n<\/a><\/div>    <\/div>\n","117":"\n<div data-banner-id=\"117\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"\/promo-menarini\" aria-label=\"Promozione\" title=\"Menarini 29092026 BannerProductPage\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/banner_product_page\/Menarini_BTW_BPP_09_26.png\" alt=\"\" width=\"333\" height=\"189\" class=\"rounded-md mb-5\" \/>\r\n<\/a><\/div>    <\/div>\n","90":"\n<div data-banner-id=\"90\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"\/promo-prodeco4\" aria-label=\"Promozione\" title=\"Prodeco 07102026 BannerProductPage\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/banner_product_page\/InMood_BPP_09_26.png\" alt=\"\" width=\"333\" height=\"189\" class=\"rounded-md mb-5\" \/>\r\n<\/a><\/div>    <\/div>\n","67":"\n<div data-banner-id=\"67\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"\/promo-haleon2\" aria-label=\"Promozione\" title=\"Haleon 02102026 BannerProductPage\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/banner_product_page\/BeTotal_BPP_10_26.png\" alt=\"\" width=\"333\" height=\"189\" class=\"rounded-md mb-5\" \/>\r\n<\/a><\/div>    <\/div>\n","62":"\n<div data-banner-id=\"62\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"https:\/\/www.salute.gov.it\/LogoCommercioElettronicoVET\/CercaSitoEComm?useMode=getDettaglio&VOLID=C016715&area=veterinari&id=5907&lingua=italiano&menu=vendite\" style=\"\r\n    background-color: #efeff0;\r\n    display: inline-block;\r\n    border-radius: 1.2rem;\r\n    padding: 8px;\r\n    margin-top: 10px;\r\n\" target=\"_blank\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/VET-c21198a7.jpg\" class=\"rounded-lg\" alt=\"Garanzia Veterinari\" width=\"110\" \/>\r\n<\/a><\/div>    <\/div>\n","61":"\n<div data-banner-id=\"61\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"https:\/\/www.salute.gov.it\/LogoCommercioElettronico\/CercaSitoEComm?useMode=getDettaglio&VOLID=C016715\" style=\"\r\n    background-color: #efeff0;\r\n    display: inline-block;\r\n    border-radius: 1.2rem;\r\n    padding: 8px;\r\n    margin-top: 10px;\r\n\" target=\"_blank\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/farmacia-ab57f402.jpg\" class=\"rounded-lg\" alt=\"Garanzia Farmaci\" width=\"110\"\/>\r\n<\/a><\/div>    <\/div>\n","58":"\n<div data-banner-id=\"58\">\n    <style>#html-body [data-pb-style=YEJYU1X]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=G07EOKR]{margin-top:20px;border-style:none}#html-body [data-pb-style=FBDF4WI],#html-body [data-pb-style=XTES42W]{border-radius:5px;max-width:100%;height:auto}@media only screen and (max-width: 767px) { #html-body [data-pb-style=G07EOKR]{border-style:none} }<\/style><div data-content-type=\"row\" data-appearance=\"contained\" data-element=\"main\"><div data-enable-parallax=\"0\" data-parallax-speed=\"0.5\" data-background-images=\"{}\" data-background-type=\"image\" data-video-loop=\"true\" data-video-play-only-visible=\"true\" data-video-lazy-load=\"true\" data-video-fallback-src=\"\" data-element=\"inner\" data-pb-style=\"YEJYU1X\"><figure data-content-type=\"image\" data-appearance=\"full-width\" data-intersect=\"false\" data-element=\"main\" data-pb-style=\"G07EOKR\"><a href=\"#product-add-promo-284906\" target=\"\" data-link-type=\"default\" title=\"IMO 05102026 BannerCarrello\" data-element=\"link\"><img width=\"761\" height=\"80\" class=\"pagebuilder-mobile-hidden\" src=\"https:\/\/www.farma.it\/media\/wysiwyg\/VC15_Active_CartBD_10_26_1.png\" alt=\"IMO 05102026 BannerCarrello\" title=\"IMO 05102026 BannerCarrello\" loading=\"lazy\" data-element=\"desktop_image\" data-pb-style=\"XTES42W\"><img width=\"288\" height=\"164\" class=\"pagebuilder-mobile-only\" src=\"https:\/\/www.farma.it\/media\/wysiwyg\/VC15_Active_CartBM_10_26.png\" alt=\"IMO 05102026 BannerCarrello\" title=\"IMO 05102026 BannerCarrello\" loading=\"lazy\" data-element=\"mobile_image\" data-pb-style=\"FBDF4WI\"><\/a><\/figure><div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><form id=\"product-add-promo-284906\" method=\"post\" action=\"\/checkout\/cart\/add\/\">\r\n    <input name=\"form_key\" type=\"hidden\" x-bind:value=\"hyva.getFormKey()\">\r\n    <input name=\"uenc\" type=\"hidden\" x-bind:value=\"hyva.getUenc()\">\r\n    <input name=\"product\" type=\"hidden\" value=\"284906\">\r\n<\/form>\r\n\r\n
9077<script>\r\n    window.addEventListener('init-external-scripts',function () {\r\n        document.querySelector('a[href*=\"#product-add-promo-284906\"]').addEventListener(\"click\", function(e) {\r\n            e.preventDefault();\r\n            document.getElementById(\"product-add-promo-284906\").submit();\r\n        });\r\n    });\r\n<\/script>\r\n<\/div><\/div><\/div>    <\/div>\n","54":"\n<div data-banner-id=\"54\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"\/promo-prodeco2\" aria-label=\"Promozione\"  title=\"Prodeco 30092026 BannerProductPage\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/banner_product_page\/Relief_BPP_09_26.png\" alt=\"\" width=\"333\" height=\"189\" class=\"rounded-md mb-5\" \/>\r\n<\/a><\/div>    <\/div>\n","6":"\n<div data-banner-id=\"6\">\n        <\/div>\n","41":"\n<div data-banner-id=\"41\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"\/promo-boiron\" aria-label=\"Promozione\" title=\"Boiron 01102026 BannerProductPage\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/banner_product_page\/Euphralia_BPP_10_26.png\" alt=\"\" width=\"333\" height=\"189\" class=\"rounded-md mb-5\" \/>\r\n<\/a><\/div>    <\/div>\n","40":"\n<div data-banner-id=\"40\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"\/promo-kenvue3\" aria-label=\"Promozione\" title=\"Kenvue 05102026 BannerProductPage\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/banner_product_page\/Neutrogena_BPP_10_26.png\" alt=\"\" width=\"333\" height=\"189\" class=\"rounded-md mb-5\" \/>\r\n<\/a><\/div>    <\/div>\n","21":"\n<div data-banner-id=\"21\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"\/promo-esi\" aria-label=\"Promozione\" title=\"Esi 05102026 BannerProductPage\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/banner_product_page\/ESI_BPP_10_26.png\" alt=\"\" width=\"333\" height=\"189\" class=\"rounded-md mb-5\" \/>\r\n<\/a><\/div>    <\/div>\n","13":"\n<div data-banner-id=\"13\">\n    <div data-content-type=\"html\" data-appearance=\"default\" data-intersect=\"false\" data-element=\"main\" data-decoded=\"true\"><a href=\"\/prodotti-elanco\" aria-label=\"Promozione\" title=\"Elanco 08102026 BannerProductPage\">\r\n<img src=\"https:\/\/www.farma.it\/media\/wysiwyg\/banner_product_page\/Elanco_BPP_10_26.png\" alt=\"\" width=\"333\" height=\"189\" class=\"rounded-md mb-5\" \/>\r\n<\/a><\/div>    <\/div>\n","10":"\n<div data-banner-id=\"10\">\n        <\/div>\n","9":"\n<div data-banner-id=\"9\">\n        <\/div>\n","8":"\n<div data-banner-id=\"8\">\n        <\/div>\n","7":"\n<div data-banner-id=\"7\">\n        <\/div>\n"},"injectorParams":{"containerSelector":".products-grid > .relative > .grid:not(.amasty-banner-items)","itemSelector":".products-grid > .relative > .grid:not(.amasty-banner-items) .product-item","banners":[]},"banners":[],"injectorSectionId":14};
9078                this.injectorResolver = amBannerInjectorResolver?.();
9079
9080                this.insertBanners();
9081                this.isLoading = false;
9082            },
9083
9084            insertBanners: function () {
9085                document.querySelectorAll('[data-role="amasty-banner-container"]').forEach((container) => {
9086                    const sectionId = container.getAttribute('data-position');
9087
9088                    if (sectionId) {
9089                        this.loadBannerBySection(sectionId, container);
9090                    } else {
9091                        this.loadBannerByBannerId(container);
9092                    }
9093                });
9094            },
9095
9096            getBanners: function (bannerId) {
9097                if (this.options.banners.indexOf(bannerId) === -1) {
9098                    return [];
9099                }
9100                const insertedBanner = this.banners.find((element) => {
9101                    return element === bannerId;
9102                });
9103
9104                return content[insertedBanner];
9105            },
9106
9107            getSectionBanners: function (section) {
9108                if (!(section in this.options.sections)) {
9109                    return [];
9110                }
9111
9112                return this.options.sections[section].map((id) => {
9113                    return this.options.content[id];
9114                });
9115            },
9116
9117            loadBannerBySection: function (sectionId, container) {
9118                container.innerHTML = this.getSectionBanners(sectionId).join('');
9119                this.injectorResolver?.resolve(sectionId, this.options.injectorParams);
9120                this.updateSection(`[data-role="amasty-banner-container"][data-position="${sectionId}"]`, container);
9121            },
9122
9123            loadBannerByBannerId: function (container) {
9124                const bannerId = container.getAttribute('data-bannerid');
9125                container.innerHTML = (this.getBanners(bannerId));
9126                this.updateSection(`[data-role="amasty-banner-container"][data-bannerid="${bannerId}"]`, container);
9127            },
9128
9129            updateSection: function(containerSelector, container) {
9130                hyva.replaceDomElement(
9131                    containerSelector,
9132                    container.innerHTML
9133                );
9134            }
9135        }
9136    }
9137</script>
vendor: 1 bytes, line 9137
9137
9138<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/www.farma.it\/","name":"Home"}}]}</script>
9138<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"WebSite","url":"https:\/\/www.farma.it\/","name":"Antica Farmacia Orlandi","potentialAction":{"@type":"SearchAction","target":"https:\/\/www.farma.it\/catalogsearch\/result\/?q={search_term_string}","query-input":"required name=search_term_string"}}</script>
9138<script type="application/ld+json">{"sameAs":["https:\/\/www.facebook.com\/farmapuntoit","https:\/\/www.instagram.com\/farma.it\/"]}</script>
9138<script type="text/json" id="default-section-data">
9139    {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":[],"directory-data":{"AT":{"name":"Austria","regions":{"102":{"code":"BL","name":"Burgenland"},"99":{"code":"KN","name":"K\u00e4rnten"},"96":{"code":"NO","name":"Nieder\u00f6sterreich"},"97":{"code":"OO","name":"Ober\u00f6sterreich"},"98":{"code":"SB","name":"Salzburg"},"100":{"code":"ST","name":"Steiermark"},"101":{"code":"TI","name":"Tirol"},"103":{"code":"VB","name":"Vorarlberg"},"95":{"code":"WI","name":"Wien"}}},"BE":{"name":"Belgio","regions":{"620":{"code":"VAN","name":"Antwerpen"},"621":{"code":"WBR","name":"Brabant wallon"},"622":{"code":"BRU","name":"Brussels-Capital Region"},"623":{"code":"WHT","name":"Hainaut"},"625":{"code":"WLG","name":"Li\u00e8ge"},"624":{"code":"VLI","name":"Limburg"},"626":{"code":"WLX","name":"Luxembourg"},"627":{"code":"WNA","name":"Namur"},"628":{"code":"VOV","name":"Oost-Vlaanderen"},"629":{"code":"VBR","name":"Vlaams-Brabant"},"630":{"code":"VWV","name":"West-Vlaanderen"}}},"BG":{"name":"Bulgaria","regions":{"640":{"code":"BG-01","name":"Blagoevgrad"},"641":{"code":"BG-02","name":"Burgas"},"647":{"code":"BG-08","name":"Dobrich"},"646":{"code":"BG-07","name":"Gabrovo"},"665":{"code":"BG-26","name":"Haskovo"},"648":{"code":"BG-09","name":"Kardzhali"},"649":{"code":"BG-10","name":"Kyustendil"},"650":{"code":"BG-11","name":"Lovech"},"651":{"code":"BG-12","name":"Montana"},"652":{"code":"BG-13","name":"Pazardzhik"},"653":{"code":"BG-14","name":"Pernik"},"654":{"code":"BG-15","name":"Pleven"},"655":{"code":"BG-16","name":"Plovdiv"},"656":{"code":"BG-17","name":"Razgrad"},"657":{"code":"BG-18","name":"Ruse"},"666":{"code":"BG-27","name":"Shumen"},"658":{"code":"BG-19","name":"Silistra"},"659":{"code":"BG-20","name":"Sliven"},"660":{"code":"BG-21","name":"Smolyan"},"661":{"code":"BG-22","name":"Sofia City"},"662":{"code":"BG-23","name":"Sofia Province"},"663":{"code":"BG-24","name":"Stara Zagora"},"664":{"code":"BG-25","name":"Targovishte"},"642":{"code":"BG-03","name":"Varna"},"643":{"code":"BG-04","name":"Veliko Tarnovo"},"644":{"code":"BG-05","name":"Vidin"},"645":{"code":"BG-06","name":"Vratsa"},"667":{"code":"BG-28","name":"Yambol"}}},"CH":{"name":"Svizzera","regions":{"104":{"code":"AG","name":"Aargau"},"106":{"code":"AR","name":"Appenzell Ausserrhoden"},"105":{"code":"AI","name":"Appenzell Innerrhoden"},"108":{"code":"BL","name":"Basel-Landschaft"},"109":{"code":"BS","name":"Basel-Stadt"},"107":{"code":"BE","name":"Bern"},"110":{"code":"FR","name":"Friburg"},"111":{"code":"GE","name":"Geneva"},"112":{"code":"GL","name":"Glarus"},"113":{"code":"GR","name":"Graub\u00fcnden"},"114":{"code":"JU","name":"Jura"},"115":{"code":"LU","name":"Lucerne"},"116":{"code":"NE","name":"Neuch\u00e2tel"},"117":{"code":"NW","name":"Nidwalden"},"118":{"code":"OW","name":"Obwalden"},"120":{"code":"SH","name":"Schaffhausen"},"122":{"code":"SZ","name":"Schwyz"},"121":{"code":"SO","name":"Solothurn"},"119":{"code":"SG","name":"St. Gallen"},"123":{"code":"TG","name":"Thurgau"},"124":{"code":"TI","name":"Ticino"},"125":{"code":"UR","name":"Uri"},"126":{"code":"VD","name":"Vaud"},"127":{"code":"VS","name":"Wallis"},"128":{"code":"ZG","name":"Zug"},"129":{"code":"ZH","name":"Z\u00fcrich"}}},"CZ":{"name":"Repubblica Ceca","regions":{"752":{"code":"CZ-31","name":"Jiho\u010desk\u00fd kraj"},"760":{"code":"CZ-64","name":"Jihomoravsk\u00fd kraj"},"754":{"code":"CZ-41","name":"Karlovarsk\u00fd kraj"},"759":{"code":"CZ-63","name":"Kraj Vyso\u010dina"},"757":{"code":"CZ-52","name":"Kr\u00e1lov\u00e9hradeck\u00fd kraj"},"756":{"code":"CZ-51","name":"Libereck\u00fd kraj"},"763":{"code":"CZ-80","name":"Moravskoslezsk\u00fd kraj"},"761":{"code":"CZ-71","name":"Olomouck\u00fd kraj"},"758":{"code":"CZ-53","name":"Pardubick\u00fd kraj"},"753":{"code":"CZ-32","name":"Plze\u0148sk\u00fd kraj"},"750":{"code":"CZ-10","name":"Praha, Hlavn\u00ed m\u011bsto"},"751":{"code":"CZ-20","name":"St\u0159edo\u010desk\u00fd kraj"},"755":{"code":"CZ-42","name":"\u00dasteck\u00fd kraj"},"762":{"code":"CZ-72","name":"Zl\u00ednsk\u00fd kraj"}}},"DE":{"name":"Germania","regions":{"80":{"code":"BAW","name":"Baden-W\u00fcrttemberg"},"81":{"code":"BAY","name":"Bayern"},"82":{"code":"BER","name":"Berlin"},"83":{"code":"BRG","name":"Brandenburg"},"84":{"code":"BRE","name":"Bremen"},"85":{"code":"HAM","name":"Hamburg"},"86":{"code":"HES","name":"Hessen"},"87":{"code":"MEC","name":"Mecklenburg-Vorpommern"},"79":{"code":"NDS","name":"Niedersachsen"},"88":{"code":"NRW","name":"Nordrhein-Westfalen"},"89":{"code":"RHE","name":"Rheinland-Pfalz"},"90":{"code":"SAR","name":"Saarland"},"91":{"code":"SAS","name":"Sachsen"},"92":{"code":"SAC","name":"Sachsen-Anhalt"},"93":{"code":"SCN","name":"Schleswig-Holstein"},"94":{"code":"THE","name":"Th\u00fcringen"}}},"DK":{"name":"Danimarca","regions":{"764":{"code":"DK-84","name":"Hovedstaden"},"765":{"code":"DK-82","name":"Midtjylland"},"766":{"code":"DK-81","name":"Nordjylland"},"767":{"code":"DK-85","name":"Sj\u00e6lland"},"768":{"code":"DK-83","name":"Syddanmark"}}},"EE":{"name":"Estonia","regions":{"340":{"code":"EE-37","name":"Harjumaa"},"341":{"code":"EE-39","name":"Hiiumaa"},"342":{"code":"EE-44","name":"Ida-Virumaa"}
9139,"344":{"code":"EE-51","name":"J\u00e4rvamaa"},"343":{"code":"EE-49","name":"J\u00f5gevamaa"},"346":{"code":"EE-59","name":"L\u00e4\u00e4ne-Virumaa"},"345":{"code":"EE-57","name":"L\u00e4\u00e4nemaa"},"348":{"code":"EE-67","name":"P\u00e4rnumaa"},"347":{"code":"EE-65","name":"P\u00f5lvamaa"},"349":{"code":"EE-70","name":"Raplamaa"},"350":{"code":"EE-74","name":"Saaremaa"},"351":{"code":"EE-78","name":"Tartumaa"},"352":{"code":"EE-82","name":"Valgamaa"},"353":{"code":"EE-84","name":"Viljandimaa"},"354":{"code":"EE-86","name":"V\u00f5rumaa"}}},"ES":{"name":"Spagna","regions":{"130":{"code":"A Coru\u0441a","name":"A Coru\u00f1a"},"131":{"code":"Alava","name":"Alava"},"132":{"code":"Albacete","name":"Albacete"},"133":{"code":"Alicante","name":"Alicante"},"134":{"code":"Almeria","name":"Almeria"},"135":{"code":"Asturias","name":"Asturias"},"136":{"code":"Avila","name":"Avila"},"137":{"code":"Badajoz","name":"Badajoz"},"138":{"code":"Baleares","name":"Baleares"},"139":{"code":"Barcelona","name":"Barcelona"},"140":{"code":"Burgos","name":"Burgos"},"141":{"code":"Caceres","name":"Caceres"},"142":{"code":"Cadiz","name":"Cadiz"},"143":{"code":"Cantabria","name":"Cantabria"},"144":{"code":"Castellon","name":"Castellon"},"145":{"code":"Ceuta","name":"Ceuta"},"146":{"code":"Ciudad Real","name":"Ciudad Real"},"147":{"code":"Cordoba","name":"Cordoba"},"148":{"code":"Cuenca","name":"Cuenca"},"149":{"code":"Girona","name":"Girona"},"150":{"code":"Granada","name":"Granada"},"151":{"code":"Guadalajara","name":"Guadalajara"},"152":{"code":"Guipuzcoa","name":"Guipuzcoa"},"153":{"code":"Huelva","name":"Huelva"},"154":{"code":"Huesca","name":"Huesca"},"155":{"code":"Jaen","name":"Jaen"},"156":{"code":"La Rioja","name":"La Rioja"},"157":{"code":"Las Palmas","name":"Las Palmas"},"158":{"code":"Leon","name":"Leon"},"159":{"code":"Lleida","name":"Lleida"},"160":{"code":"Lugo","name":"Lugo"},"161":{"code":"Madrid","name":"Madrid"},"162":{"code":"Malaga","name":"Malaga"},"163":{"code":"Melilla","name":"Melilla"},"164":{"code":"Murcia","name":"Murcia"},"165":{"code":"Navarra","name":"Navarra"},"166":{"code":"Ourense","name":"Ourense"},"167":{"code":"Palencia","name":"Palencia"},"168":{"code":"Pontevedra","name":"Pontevedra"},"169":{"code":"Salamanca","name":"Salamanca"},"170":{"code":"Santa Cruz de Tenerife","name":"Santa Cruz de Tenerife"},"171":{"code":"Segovia","name":"Segovia"},"172":{"code":"Sevilla","name":"Sevilla"},"173":{"code":"Soria","name":"Soria"},"174":{"code":"Tarragona","name":"Tarragona"},"175":{"code":"Teruel","name":"Teruel"},"176":{"code":"Toledo","name":"Toledo"},"177":{"code":"Valencia","name":"Valencia"},"178":{"code":"Valladolid","name":"Valladolid"},"179":{"code":"Vizcaya","name":"Vizcaya"},"180":{"code":"Zamora","name":"Zamora"},"181":{"code":"Zaragoza","name":"Zaragoza"}}},"FI":{"name":"Finlandia","regions":{"339":{"code":"Ahvenanmaa","name":"Ahvenanmaa"},"333":{"code":"Etel\u00e4-Karjala","name":"Etel\u00e4-Karjala"},"326":{"code":"Etel\u00e4-Pohjanmaa","name":"Etel\u00e4-Pohjanmaa"},"325":{"code":"Etel\u00e4-Savo","name":"Etel\u00e4-Savo"},"337":{"code":"It\u00e4-Uusimaa","name":"It\u00e4-Uusimaa"},"322":{"code":"Kainuu","name":"Kainuu"},"335":{"code":"Kanta-H\u00e4me","name":"Kanta-H\u00e4me"},"330":{"code":"Keski-Pohjanmaa","name":"Keski-Pohjanmaa"},"331":{"code":"Keski-Suomi","name":"Keski-Suomi"},"338":{"code":"Kymenlaakso","name":"Kymenlaakso"},"320":{"code":"Lappi","name":"Lappi"},"334":{"code":"P\u00e4ij\u00e4t-H\u00e4me","name":"P\u00e4ij\u00e4t-H\u00e4me"},"328":{"code":"Pirkanmaa","name":"Pirkanmaa"},"327":{"code":"Pohjanmaa","name":"Pohjanmaa"},"323":{"code":"Pohjois-Karjala","name":"Pohjois-Karjala"},"321":{"code":"Pohjois-Pohjanmaa","name":"Pohjois-Pohjanmaa"},"324":{"code":"Pohjois-Savo","name":"Pohjois-Savo"},"329":{"code":"Satakunta","name":"Satakunta"},"336":{"code":"Uusimaa","name":"Uusimaa"},"332":{"code":"Varsinais-Suomi","name":"Varsinais-Suomi"}}},"FR":{"name":"Francia","regions":{"182":{"code":"1","name":"Ain"},"183":{"code":"2","name":"Aisne"},"184":{"code":"3","name":"Allier"}
9139,"185":{"code":"4","name":"Alpes-de-Haute-Provence"},"187":{"code":"6","name":"Alpes-Maritimes"},"188":{"code":"7","name":"Ard\u00e8che"},"189":{"code":"8","name":"Ardennes"},"190":{"code":"9","name":"Ari\u00e8ge"},"191":{"code":"10","name":"Aube"},"192":{"code":"11","name":"Aude"},"193":{"code":"12","name":"Aveyron"},"249":{"code":"67","name":"Bas-Rhin"},"194":{"code":"13","name":"Bouches-du-Rh\u00f4ne"},"195":{"code":"14","name":"Calvados"},"196":{"code":"15","name":"Cantal"},"197":{"code":"16","name":"Charente"},"198":{"code":"17","name":"Charente-Maritime"},"199":{"code":"18","name":"Cher"},"200":{"code":"19","name":"Corr\u00e8ze"},"201":{"code":"2A","name":"Corse-du-Sud"},"203":{"code":"21","name":"C\u00f4te-d'Or"},"204":{"code":"22","name":"C\u00f4tes-d'Armor"},"205":{"code":"23","name":"Creuse"},"261":{"code":"79","name":"Deux-S\u00e8vres"},"206":{"code":"24","name":"Dordogne"},"207":{"code":"25","name":"Doubs"},"208":{"code":"26","name":"Dr\u00f4me"},"273":{"code":"91","name":"Essonne"},"209":{"code":"27","name":"Eure"},"210":{"code":"28","name":"Eure-et-Loir"},"211":{"code":"29","name":"Finist\u00e8re"},"212":{"code":"30","name":"Gard"},"214":{"code":"32","name":"Gers"},"215":{"code":"33","name":"Gironde"},"250":{"code":"68","name":"Haut-Rhin"},"202":{"code":"2B","name":"Haute-Corse"},"213":{"code":"31","name":"Haute-Garonne"},"225":{"code":"43","name":"Haute-Loire"},"234":{"code":"52","name":"Haute-Marne"},"252":{"code":"70","name":"Haute-Sa\u00f4ne"},"256":{"code":"74","name":"Haute-Savoie"},"269":{"code":"87","name":"Haute-Vienne"},"186":{"code":"5","name":"Hautes-Alpes"},"247":{"code":"65","name":"Hautes-Pyr\u00e9n\u00e9es"},"274":{"code":"92","name":"Hauts-de-Seine"},"216":{"code":"34","name":"H\u00e9rault"},"217":{"code":"35","name":"Ille-et-Vilaine"},"218":{"code":"36","name":"Indre"},"219":{"code":"37","name":"Indre-et-Loire"},"220":{"code":"38","name":"Is\u00e8re"},"221":{"code":"39","name":"Jura"},"222":{"code":"40","name":"Landes"},"223":{"code":"41","name":"Loir-et-Cher"},"224":{"code":"42","name":"Loire"},"226":{"code":"44","name":"Loire-Atlantique"},"227":{"code":"45","name":"Loiret"},"228":{"code":"46","name":"Lot"},"229":{"code":"47","name":"Lot-et-Garonne"},"230":{"code":"48","name":"Loz\u00e8re"},"231":{"code":"49","name":"Maine-et-Loire"},"232":{"code":"50","name":"Manche"},"233":{"code":"51","name":"Marne"},"235":{"code":"53","name":"Mayenne"},"236":{"code":"54","name":"Meurthe-et-Moselle"},"237":{"code":"55","name":"Meuse"},"238":{"code":"56","name":"Morbihan"},"239":{"code":"57","name":"Moselle"},"240":{"code":"58","name":"Ni\u00e8vre"},"241":{"code":"59","name":"Nord"},"242":{"code":"60","name":"Oise"},"243":{"code":"61","name":"Orne"},"257":{"code":"75","name":"Paris"},"244":{"code":"62","name":"Pas-de-Calais"},"245":{"code":"63","name":"Puy-de-D\u00f4me"},"246":{"code":"64","name":"Pyr\u00e9n\u00e9es-Atlantiques"},"248":{"code":"66","name":"Pyr\u00e9n\u00e9es-Orientales"},"251":{"code":"69","name":"Rh\u00f4ne"},"253":{"code":"71","name":"Sa\u00f4ne-et-Loire"},"254":{"code":"72","name":"Sarthe"},"255":{"code":"73","name":"Savoie"},"259":{"code":"77","name":"Seine-et-Marne"},"258":{"code":"76","name":"Seine-Maritime"},"275":{"code":"93","name":"Seine-Saint-Denis"},"262":{"code":"80","name":"Somme"},"263":{"code":"81","name":"Tarn"},"264":{"code":"82","name":"Tarn-et-Garonne"},"272":{"code":"90","name":"Territoire-de-Belfort"},"277":{"code":"95","name":"Val-d'Oise"},"276":{"code":"94","name":"Val-de-Marne"},"265":{"code":"83","name":"Var"},"266":{"code":"84","name":"Vaucluse"},"267":{"code":"85","name":"Vend\u00e9e"},"268":{"code":"86","name":"Vienne"},"270":{"code":"88","name":"Vosges"},"271":{"code":"89","name":"Yonne"},"260":{"code":"78","name":"Yvelines"}}},"GR":{"name":"Grecia","regions":{"806":{"code":"GR-69","name":"\u00c1gion \u00d3ros"},"793":{"code":"GR-A","name":"Anatolik\u00ed Makedon\u00eda kai Thr\u00e1ki"},"794":{"code":"GR-I","name":"Attik\u00ed"},"795":{"code":"GR-G","name":"Dytik\u00ed Ell\u00e1da"},"796":{"code":"GR-C","name":"Dytik\u00ed Makedon\u00eda"},"797":{"code":"GR-F","name":"Ion\u00eda N\u00edsia"},"798":{"code":"GR-D","name":"\u00cdpeiros"},"799":{"code":"GR-B","name":"Kentrik\u00ed Makedon\u00eda"},"800":{"code":"GR-M","name":"Kr\u00edti"},"801":{"code":"GR-L","name":"N\u00f3tio Aiga\u00edo"},"802":{"code":"GR-J","name":"Pelop\u00f3nnisos"},"803":{"code":"GR-H","name":"Stere\u00e1 Ell\u00e1da"}
9139,"804":{"code":"GR-E","name":"Thessal\u00eda"},"805":{"code":"GR-K","name":"V\u00f3reio Aiga\u00edo"}}},"HR":{"name":"Croazia","regions":{"554":{"code":"HR-07","name":"Bjelovarsko-bilogorska \u017eupanija"},"559":{"code":"HR-12","name":"Brodsko-posavska \u017eupanija"},"566":{"code":"HR-19","name":"Dubrova\u010dko-neretvanska \u017eupanija"},"568":{"code":"HR-21","name":"Grad Zagreb"},"565":{"code":"HR-18","name":"Istarska \u017eupanija"},"551":{"code":"HR-04","name":"Karlova\u010dka \u017eupanija"},"553":{"code":"HR-06","name":"Koprivni\u010dko-kri\u017eeva\u010dka \u017eupanija"},"549":{"code":"HR-02","name":"Krapinsko-zagorska \u017eupanija"},"556":{"code":"HR-09","name":"Li\u010dko-senjska \u017eupanija"},"567":{"code":"HR-20","name":"Me\u0111imurska \u017eupanija"},"561":{"code":"HR-14","name":"Osje\u010dko-baranjska \u017eupanija"},"558":{"code":"HR-11","name":"Po\u017ee\u0161ko-slavonska \u017eupanija"},"555":{"code":"HR-08","name":"Primorsko-goranska \u017eupanija"},"562":{"code":"HR-15","name":"\u0160ibensko-kninska \u017eupanija"},"550":{"code":"HR-03","name":"Sisa\u010dko-moslava\u010dka \u017eupanija"},"564":{"code":"HR-17","name":"Splitsko-dalmatinska \u017eupanija"},"552":{"code":"HR-05","name":"Vara\u017edinska \u017eupanija"},"557":{"code":"HR-10","name":"Viroviti\u010dko-podravska \u017eupanija"},"563":{"code":"HR-16","name":"Vukovarsko-srijemska \u017eupanija"},"560":{"code":"HR-13","name":"Zadarska \u017eupanija"},"548":{"code":"HR-01","name":"Zagreba\u010dka \u017eupanija"}}},"HU":{"name":"Ungheria"},"IE":{"name":"Irlanda"},"IT":{"name":"Italia","regions":{"825":{"code":"AG","name":"Agrigento"},"826":{"code":"AL","name":"Alessandria"},"827":{"code":"AN","name":"Ancona"},"828":{"code":"AO","name":"Aosta"},"830":{"code":"AR","name":"Arezzo"},"831":{"code":"AP","name":"Ascoli-Piceno"},"832":{"code":"AT","name":"Asti"},"833":{"code":"AV","name":"Avellino"},"834":{"code":"BA","name":"Bari"},"835":{"code":"BT","name":"Barletta-Andria-Trani"},"836":{"code":"BL","name":"Belluno"},"837":{"code":"BN","name":"Benevento"},"838":{"code":"BG","name":"Bergamo"},"839":{"code":"BI","name":"Biella"},"840":{"code":"BO","name":"Bologna"},"841":{"code":"BZ","name":"Bolzano"},"842":{"code":"BS","name":"Brescia"},"843":{"code":"BR","name":"Brindisi"},"844":{"code":"CA","name":"Cagliari"},"845":{"code":"CL","name":"Caltanissetta"},"846":{"code":"CB","name":"Campobasso"},"847":{"code":"CI","name":"Carbonia Iglesias"},"848":{"code":"CE","name":"Caserta"},"849":{"code":"CT","name":"Catania"},"850":{"code":"CZ","name":"Catanzaro"},"851":{"code":"CH","name":"Chieti"},"852":{"code":"CO","name":"Como"},"853":{"code":"CS","name":"Cosenza"},"854":{"code":"CR","name":"Cremona"},"855":{"code":"KR","name":"Crotone"},"856":{"code":"CN","name":"Cuneo"},"857":{"code":"EN","name":"Enna"},"858":{"code":"FM","name":"Fermo"},"859":{"code":"FE","name":"Ferrara"},"860":{"code":"FI","name":"Firenze"},"861":{"code":"FG","name":"Foggia"},"862":{"code":"FC","name":"Forli-Cesena"},"863":{"code":"FR","name":"Frosinone"},"864":{"code":"GE","name":"Genova"},"865":{"code":"GO","name":"Gorizia"},"866":{"code":"GR","name":"Grosseto"},"867":{"code":"IM","name":"Imperia"},"868":{"code":"IS","name":"Isernia"},"829":{"code":"AQ","name":"L'Aquila"},"869":{"code":"SP","name":"La-Spezia"},"870":{"code":"LT","name":"Latina"},"871":{"code":"LE","name":"Lecce"},"872":{"code":"LC","name":"Lecco"},"873":{"code":"LI","name":"Livorno"},"874":{"code":"LO","name":"Lodi"},"875":{"code":"LU","name":"Lucca"},"876":{"code":"MC","name":"Macerata"},"877":{"code":"MN","name":"Mantova"},"878":{"code":"MS","name":"Massa-Carrara"},"879":{"code":"MT","name":"Matera"},"880":{"code":"VS","name":"Medio Campidano"},"881":{"code":"ME","name":"Messina"},"882":{"code":"MI","name":"Milano"},"883":{"code":"MO","name":"Modena"},"884":{"code":"MB","name":"Monza-Brianza"},"885":{"code":"NA","name":"Napoli"},"886":{"code":"NO","name":"Novara"},"887":{"code":"NU","name":"Nuoro"},"888":{"code":"OG","name":"Ogliastra"},"889":{"code":"OT","name":"Olbia Tempio"},"890":{"code":"OR","name":"Oristano"},"891":{"code":"PD","name":"Padova"},"892":{"code":"PA","name":"Palermo"},"893":{"code":"PR","name":"Parma"},"894":{"code":"PV","name":"Pavia"},"895":{"code":"PG","name":"Perugia"},"896":{"code":"PU","name":"Pesaro-Urbino"},"897":{"code":"PE","name":"Pescara"},"898":{"code":"PC","name":"Piacenza"},"899":{"code":"PI","name":"Pisa"},"900":{"code":"PT","name":"Pistoia"},"901":{"code":"PN","name":"Pordenone"},"902":{"code":"PZ","name":"Potenza"},"903":{"code":"PO","name":"Prato"},"904":{"code":"RG","name":"Ragusa"},"905":{"code":"RA","name":"Ravenna"},"906":{"code":"RC","name":"Reggio-Calabria"},"907":{"code":"RE","name":"Reggio-Emilia"},"908":{"code":"RI","name":"Rieti"},"909":{"code":"RN","name":"Rimini"},"910":{"code":"RM","name":"Roma"},"911":{"code":"RO","name":"Rovigo"},"912":{"code":"SA","name":"Salerno"},"913":{"code":"SS","name":"Sassari"},"914":{"code":"SV","name":"Savona"},"915":{"code":"SI","name":"Siena"},"916":{"code":"SR","name":"Siracusa"},"917":{"code":"SO","name":"Sondrio"},"918":{"code":"TA","name":"Taranto"},"919":{"code":"TE","name":"Teramo"},"920":{"code":"TR","name":"Terni"},"921":{"code":"TO","name":"Torino"},"922":{"code":"TP","name":"Trapani"},"923":{"code":"TN","name":"Trento"},"924":{"code":"TV","name":"Treviso"},"925":{"code":"TS","name":"Trieste"},"926":{"code":"UD","name":"Udine"},"927":{"code":"VA","name":"Varese"},"928":{"code":"VE","name":"Venezia"},"929":{"code":"VB","name":"Verbania"},"930":{"code":"VC","name":"Vercelli"},"931":{"code":"VR","name":"Verona"}
9139,"932":{"code":"VV","name":"Vibo-Valentia"},"933":{"code":"VI","name":"Vicenza"},"934":{"code":"VT","name":"Viterbo"}}},"LT":{"name":"Lituania","regions":{"475":{"code":"LT-AL","name":"Alytaus Apskritis"},"476":{"code":"LT-KU","name":"Kauno Apskritis"},"477":{"code":"LT-KL","name":"Klaip\u0117dos Apskritis"},"478":{"code":"LT-MR","name":"Marijampol\u0117s Apskritis"},"479":{"code":"LT-PN","name":"Panev\u0117\u017eio Apskritis"},"480":{"code":"LT-SA","name":"\u0160iauli\u0173 Apskritis"},"481":{"code":"LT-TA","name":"Taurag\u0117s Apskritis"},"482":{"code":"LT-TE","name":"Tel\u0161i\u0173 Apskritis"},"483":{"code":"LT-UT","name":"Utenos Apskritis"},"484":{"code":"LT-VL","name":"Vilniaus Apskritis"}}},"LU":{"name":"Lussemburgo"},"LV":{"name":"Lettonia","regions":{"471":{"code":"\u0100da\u017eu novads","name":"\u0100da\u017eu novads"},"366":{"code":"Aglonas novads","name":"Aglonas novads"},"367":{"code":"LV-AI","name":"Aizkraukles novads"},"368":{"code":"Aizputes novads","name":"Aizputes novads"},"369":{"code":"Akn\u012bstes novads","name":"Akn\u012bstes novads"},"370":{"code":"Alojas novads","name":"Alojas novads"},"371":{"code":"Alsungas novads","name":"Alsungas novads"},"372":{"code":"LV-AL","name":"Al\u016bksnes novads"},"373":{"code":"Amatas novads","name":"Amatas novads"},"374":{"code":"Apes novads","name":"Apes novads"},"375":{"code":"Auces novads","name":"Auces novads"},"376":{"code":"Bab\u012btes novads","name":"Bab\u012btes novads"},"377":{"code":"Baldones novads","name":"Baldones novads"},"378":{"code":"Baltinavas novads","name":"Baltinavas novads"},"379":{"code":"LV-BL","name":"Balvu novads"},"380":{"code":"LV-BU","name":"Bauskas novads"},"381":{"code":"Bever\u012bnas novads","name":"Bever\u012bnas novads"},"382":{"code":"Broc\u0113nu novads","name":"Broc\u0113nu novads"},"383":{"code":"Burtnieku novads","name":"Burtnieku novads"},"384":{"code":"Carnikavas novads","name":"Carnikavas novads"},"387":{"code":"LV-CE","name":"C\u0113su novads"},"385":{"code":"Cesvaines novads","name":"Cesvaines novads"},"386":{"code":"Ciblas novads","name":"Ciblas novads"},"388":{"code":"Dagdas novads","name":"Dagdas novads"},"355":{"code":"LV-DGV","name":"Daugavpils"},"389":{"code":"LV-DA","name":"Daugavpils novads"},"390":{"code":"LV-DO","name":"Dobeles novads"},"391":{"code":"Dundagas novads","name":"Dundagas novads"},"392":{"code":"Durbes novads","name":"Durbes novads"},"393":{"code":"Engures novads","name":"Engures novads"},"472":{"code":"\u0112rg\u013cu novads","name":"\u0112rg\u013cu novads"},"394":{"code":"Garkalnes novads","name":"Garkalnes novads"},"395":{"code":"Grobi\u0146as novads","name":"Grobi\u0146as novads"},"396":{"code":"LV-GU","name":"Gulbenes novads"},"397":{"code":"Iecavas novads","name":"Iecavas novads"},"398":{"code":"Ik\u0161\u0137iles novads","name":"Ik\u0161\u0137iles novads"},"399":{"code":"Il\u016bkstes novads","name":"Il\u016bkstes novads"},"400":{"code":"In\u010dukalna novads","name":"In\u010dukalna novads"},"401":{"code":"Jaunjelgavas novads","name":"Jaunjelgavas novads"},"402":{"code":"Jaunpiebalgas novads","name":"Jaunpiebalgas novads"},"403":{"code":"Jaunpils novads","name":"Jaunpils novads"},"357":{"code":"J\u0113kabpils","name":"J\u0113kabpils"},"405":{"code":"LV-JK","name":"J\u0113kabpils novads"},"356":{"code":"LV-JEL","name":"Jelgava"},"404":{"code":"LV-JL","name":"Jelgavas novads"},"358":{"code":"LV-JUR","name":"J\u016brmala"},"406":{"code":"Kandavas novads","name":"Kandavas novads"},"412":{"code":"K\u0101rsavas novads","name":"K\u0101rsavas novads"},"473":{"code":"\u0136eguma novads","name":"\u0136eguma novads"},"474":{"code":"\u0136ekavas novads","name":"\u0136ekavas novads"},"407":{"code":"Kokneses novads","name":"Kokneses novads"},"410":{"code":"LV-KR","name":"Kr\u0101slavas novads"},"408":{"code":"Krimuldas novads","name":"Krimuldas novads"},"409":{"code":"Krustpils novads","name":"Krustpils novads"},"411":{"code":"LV-KU","name":"Kuld\u012bgas novads"},"413":{"code":"Lielv\u0101rdes novads","name":"Lielv\u0101rdes novads"},"359":{"code":"LV-LPX","name":"Liep\u0101ja"},"360":{"code":"LV-LE","name":"Liep\u0101jas novads"},"417":{"code":"L\u012bgatnes novads","name":"L\u012bgatnes novads"},"414":{"code":"LV-LM","name":"Limba\u017eu novads"},"418":{"code":"L\u012bv\u0101nu novads","name":"L\u012bv\u0101nu novads"},"415":{"code":"Lub\u0101nas novads","name":"Lub\u0101nas novads"},"416":{"code":"LV-LU","name":"Ludzas novads"},"419":{"code":"LV-MA","name":"Madonas novads"},"421":{"code":"M\u0101lpils novads","name":"M\u0101lpils novads"},"422":{"code":"M\u0101rupes novads","name":"M\u0101rupes novads"},"420":{"code":"Mazsalacas novads","name":"Mazsalacas novads"},"423":{"code":"Nauk\u0161\u0113nu novads","name":"Nauk\u0161\u0113nu novads"},"424":{"code":"Neretas novads","name":"Neretas novads"},"425":{"code":"N\u012bcas novads","name":"N\u012bcas novads"},"426":{"code":"LV-OG","name":"Ogres novads"},"427":{"code":"Olaines novads","name":"Olaines novads"},"428":{"code":"Ozolnieku novads","name":"Ozolnieku novads"},"432":{"code":"P\u0101rgaujas novads","name":"P\u0101rgaujas novads"},"433":{"code":"P\u0101vilostas novads","name":"P\u0101vilostas novads"},"434":{"code":"P\u013cavi\u0146u novads","name":"P\u013cavi\u0146u novads"},"429":{"code":"LV-PR","name":"Prei\u013cu novads"},"430":{"code":"Priekules novads","name":"Priekules novads"},"431":{"code":"Prieku\u013cu novads","name":"Prieku\u013cu novads"},"435":{"code":"Raunas novads","name":"Raunas novads"},"361":{"code":"LV-REZ","name":"R\u0113zekne"},"442":{"code":"LV-RE","name":"R\u0113zeknes novads"},"436":{"code":"Riebi\u0146u novads","name":"Riebi\u0146u novads"},"362":{"code":"LV-RIX","name":"R\u012bga"},"363":{"code":"LV-RI","name":"R\u012bgas novads"},"437":{"code":"Rojas novads","name":"Rojas novads"},"438":{"code":"Ropa\u017eu novads","name":"Ropa\u017eu novads"},"439":{"code":"Rucavas novads","name":"Rucavas novads"},"440":{"code":"Rug\u0101ju novads","name":"Rug\u0101ju novads"},"443":{"code":"R\u016bjienas novads","name":"R\u016bjienas novads"},"441":{"code":"Rund\u0101les novads","name":"Rund\u0101les novads"},"444":{"code":"Salacgr\u012bvas novads","name":"Salacgr\u012bvas novads"},"445":{"code":"Salas novads","name":"Salas novads"},"446":{"code":"Salaspils novads","name":"Salaspils novads"},"447":{"code":"LV-SA","name":"Saldus novads"},"448":{"code":"Saulkrastu novads","name":"Saulkrastu novads"},"455":{"code":"S\u0113jas novads","name":"S\u0113jas novads"},"449":{"code":"Siguldas novads","name":"Siguldas novads"}
9139,"451":{"code":"Skr\u012bveru novads","name":"Skr\u012bveru novads"},"450":{"code":"Skrundas novads","name":"Skrundas novads"},"452":{"code":"Smiltenes novads","name":"Smiltenes novads"},"453":{"code":"Stopi\u0146u novads","name":"Stopi\u0146u novads"},"454":{"code":"Stren\u010du novads","name":"Stren\u010du novads"},"456":{"code":"LV-TA","name":"Talsu novads"},"458":{"code":"T\u0113rvetes novads","name":"T\u0113rvetes novads"},"457":{"code":"LV-TU","name":"Tukuma novads"},"459":{"code":"Vai\u0146odes novads","name":"Vai\u0146odes novads"},"460":{"code":"LV-VK","name":"Valkas novads"},"364":{"code":"Valmiera","name":"Valmiera"},"461":{"code":"LV-VM","name":"Valmieras novads"},"462":{"code":"Varak\u013c\u0101nu novads","name":"Varak\u013c\u0101nu novads"},"469":{"code":"V\u0101rkavas novads","name":"V\u0101rkavas novads"},"463":{"code":"Vecpiebalgas novads","name":"Vecpiebalgas novads"},"464":{"code":"Vecumnieku novads","name":"Vecumnieku novads"},"365":{"code":"LV-VEN","name":"Ventspils"},"465":{"code":"LV-VE","name":"Ventspils novads"},"466":{"code":"Vies\u012btes novads","name":"Vies\u012btes novads"},"467":{"code":"Vi\u013cakas novads","name":"Vi\u013cakas novads"},"468":{"code":"Vi\u013c\u0101nu novads","name":"Vi\u013c\u0101nu novads"},"470":{"code":"Zilupes novads","name":"Zilupes novads"}}},"MC":{"name":"Monaco"},"NL":{"name":"Paesi Bassi"},"PL":{"name":"Polonia","regions":{"1011":{"code":"PL-02","name":"dolno\u015bl\u0105skie"},"1012":{"code":"PL-04","name":"kujawsko-pomorskie"},"1013":{"code":"PL-06","name":"lubelskie"},"1014":{"code":"PL-08","name":"lubuskie"},"1017":{"code":"PL-14","name":"mazowieckie"},"1016":{"code":"PL-12","name":"ma\u0142opolskie"},"1018":{"code":"PL-16","name":"opolskie"},"1019":{"code":"PL-18","name":"podkarpackie"},"1020":{"code":"PL-20","name":"podlaskie"},"1021":{"code":"PL-22","name":"pomorskie"},"1022":{"code":"PL-24","name":"\u015bl\u0105skie"},"1023":{"code":"PL-26","name":"\u015bwi\u0119tokrzyskie"},"1024":{"code":"PL-28","name":"warmi\u0144sko-mazurskie"},"1025":{"code":"PL-30","name":"wielkopolskie"},"1026":{"code":"PL-32","name":"zachodniopomorskie"},"1015":{"code":"PL-10","name":"\u0142\u00f3dzkie"}}},"PT":{"name":"Portogallo","regions":{"1027":{"code":"PT-01","name":"Aveiro"},"1028":{"code":"PT-02","name":"Beja"},"1029":{"code":"PT-03","name":"Braga"},"1030":{"code":"PT-04","name":"Bragan\u00e7a"},"1031":{"code":"PT-05","name":"Castelo Branco"},"1032":{"code":"PT-06","name":"Coimbra"},"1033":{"code":"PT-07","name":"\u00c9vora"},"1034":{"code":"PT-08","name":"Faro"},"1035":{"code":"PT-09","name":"Guarda"},"1036":{"code":"PT-10","name":"Leiria"},"1037":{"code":"PT-11","name":"Lisboa"},"1038":{"code":"PT-12","name":"Portalegre"},"1039":{"code":"PT-13","name":"Porto"},"1046":{"code":"PT-30","name":"Regi\u00e3o Aut\u00f3noma da Madeira"},"1045":{"code":"PT-20","name":"Regi\u00e3o Aut\u00f3noma dos A\u00e7ores"},"1040":{"code":"PT-14","name":"Santar\u00e9m"},"1041":{"code":"PT-15","name":"Set\u00fabal"},"1042":{"code":"PT-16","name":"Viana do Castelo"},"1043":{"code":"PT-17","name":"Vila Real"},"1044":{"code":"PT-18","name":"Viseu"}}},"RO":{"name":"Romania","regions":{"278":{"code":"AB","name":"Alba"},"279":{"code":"AR","name":"Arad"},"280":{"code":"AG","name":"Arge\u015f"},"281":{"code":"BC","name":"Bac\u0103u"},"282":{"code":"BH","name":"Bihor"},"283":{"code":"BN","name":"Bistri\u0163a-N\u0103s\u0103ud"},"284":{"code":"BT","name":"Boto\u015fani"},"286":{"code":"BR","name":"Br\u0103ila"},"285":{"code":"BV","name":"Bra\u015fov"},"287":{"code":"B","name":"Bucure\u015fti"},"288":{"code":"BZ","name":"Buz\u0103u"},"290":{"code":"CL","name":"C\u0103l\u0103ra\u015fi"},"289":{"code":"CS","name":"Cara\u015f-Severin"},"291":{"code":"CJ","name":"Cluj"},"292":{"code":"CT","name":"Constan\u0163a"},"293":{"code":"CV","name":"Covasna"},"294":{"code":"DB","name":"D\u00e2mbovi\u0163a"},"295":{"code":"DJ","name":"Dolj"},"296":{"code":"GL","name":"Gala\u0163i"},"297":{"code":"GR","name":"Giurgiu"},"298":{"code":"GJ","name":"Gorj"},"299":{"code":"HR","name":"Harghita"},"300":{"code":"HD","name":"Hunedoara"},"301":{"code":"IL","name":"Ialomi\u0163a"},"302":{"code":"IS","name":"Ia\u015fi"},"303":{"code":"IF","name":"Ilfov"},"304":{"code":"MM","name":"Maramure\u015f"},"305":{"code":"MH","name":"Mehedin\u0163i"},"306":{"code":"MS","name":"Mure\u015f"},"307":{"code":"NT","name":"Neam\u0163"},"308":{"code":"OT","name":"Olt"},"309":{"code":"PH","name":"Prahova"},"311":{"code":"SJ","name":"S\u0103laj"},"310":{"code":"SM","name":"Satu-Mare"},"312":{"code":"SB","name":"Sibiu"},"313":{"code":"SV","name":"Suceava"},"314":{"code":"TR","name":"Teleorman"},"315":{"code":"TM","name":"Timi\u015f"},"316":{"code":"TL","name":"Tulcea"},"318":{"code":"VL","name":"V\u00e2lcea"},"317":{"code":"VS","name":"Vaslui"},"319":{"code":"VN","name":"Vrancea"}}},"SE":{"name":"Svezia","regions":{"1057":{"code":"SE-K","name":"Blekinge l\u00e4n"}
9139,"1058":{"code":"SE-W","name":"Dalarnas l\u00e4n"},"1060":{"code":"SE-X","name":"G\u00e4vleborgs l\u00e4n"},"1059":{"code":"SE-I","name":"Gotlands l\u00e4n"},"1061":{"code":"SE-N","name":"Hallands l\u00e4n"},"1062":{"code":"SE-Z","name":"J\u00e4mtlands l\u00e4n"},"1063":{"code":"SE-F","name":"J\u00f6nk\u00f6pings l\u00e4n"},"1064":{"code":"SE-H","name":"Kalmar l\u00e4n"},"1065":{"code":"SE-G","name":"Kronobergs l\u00e4n"},"1066":{"code":"SE-BD","name":"Norrbottens l\u00e4n"},"1076":{"code":"SE-T","name":"\u00d6rebro l\u00e4n"},"1077":{"code":"SE-E","name":"\u00d6sterg\u00f6tlands l\u00e4n"},"1067":{"code":"SE-M","name":"Sk\u00e5ne l\u00e4n"},"1069":{"code":"SE-D","name":"S\u00f6dermanlands l\u00e4n"},"1068":{"code":"SE-AB","name":"Stockholms l\u00e4n"},"1070":{"code":"SE-C","name":"Uppsala l\u00e4n"},"1071":{"code":"SE-S","name":"V\u00e4rmlands l\u00e4n"},"1072":{"code":"SE-AC","name":"V\u00e4sterbottens l\u00e4n"},"1073":{"code":"SE-Y","name":"V\u00e4sternorrlands l\u00e4n"},"1074":{"code":"SE-U","name":"V\u00e4stmanlands l\u00e4n"},"1075":{"code":"SE-O","name":"V\u00e4stra G\u00f6talands l\u00e4n"}}},"SI":{"name":"Slovenia"},"SK":{"name":"Slovacchia"},"XI":{"name":"Irlanda del Nord"},"data_id":1791546240},"captcha":[],"instant-purchase":[],"loggedAsCustomer":[],"persistent":[],"review":[],"payments":[],"wishlist":{"items":[]},"faq":[],"ammessages":[],"rewards":[],"capi-event-ids":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[],"paypal-buyer-country":[],"magepal-gtm-jsdatalayer":[],"magepal-eegtm-jsdatalayer":[]}</script>
9139
9140
9141</div></body>
9142</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.