PageSourceSearch

https://www.farma.it/customer/account/forgotpassword/

html farma.it collected 2026-10-09 18:26:23 UTC 530,830 bytes, 9,151 lines download raw bytes

1<!doctype html>
2<html lang="it">
3<head >
4    <meta charset="utf-8"/>
5<meta name="title" content="Hai dimenticato la password?"/>
6<meta name="robots" content="INDEX,FOLLOW"/>
7<meta name="viewport" content="width=device-width, initial-scale=1"/>
8<title>Hai dimenticato la password?</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<meta name="facebook-domain-verification" content="19ikyzhaaju7aes0tjiyen338y422x" />
20<style>
21.checkout-payment-method .payment-method-title input[value="sella_fabrickpass"]+label>span {
22    width: 100%
23}
24
25.checkout-payment-method .payment-method-title input[value="sella_fabrickpass"]+label:after {
26    content: '';
27    display: block;
28    height: 30px;
29    width: 100%;
30    background-size: contain!important;
31    background: url("https://www.farma.it/media/paybybank-logo.png") no-repeat right
32}
33
34.bg-cerave-week {
35    background: #0072ba;
36}
37
38.bg-cerave-week:hover {
39    background: #0069ac;
40    text-decoration: none;
41}
42
43[data-content-type="text"] ol {
44    list-style-type: decimal;
45    padding-left: 20px;
46}
47
48[data-content-type="text"] ul {
49    list-style-type: disc;
50    padding-left: 20px;
51}
52
53[data-content-type="text"] ol li, [data-content-type="text"] ol li {
54    margin-top: 4px;
55}
56
57.catalog-product-view .product-info-main #gallery img.derma-badge {
58    width: 120px!important;
59}
60
61#amfaq-ask-form-inline .button-container {
62display: none !important;
63}
64
65.children-category-container {
66overflow: hidden;
67}
68div.sella-payment-method-container div.img-sella-container {
69    display: none;
70}
71
72div.sella-payment-method-container > div {
73    display: flex;
74    align-items: center;
75}
76div.sella-card-form input {
77    width: 100%;
78    border-radius: 26px;
79    border-width: 1px;
80    --tw-border-opacity: 1;
81    border-color: rgb(214 214 214 / var(--tw-border-opacity));
82    padding: .875rem;
83    line-height: 1;
84    color: rgb(8 1 26 / var(--tw-text-opacity));
85    --tw-text-opacity: 1;
86    color: rgb(107 114 128 / var(--tw-text-opacity));
87    font-size: 16px;
88}
89
90[data-bind="i18n: 'Sustainable delivery estimated in 48-72 hours'"] {
91    display: none;
92}
93
94/* stile doppi punti */
95/*
96.col-method#label_method_inpost_inpost:after {
97    content: 'Punti Fedeltà x2!';
98    background: #fec802e6;
99    padding: 0px 5px;
100    border-radius: 5px;
101    color: #f15b2c;
102    font-weight: bold;
103    font-size: 12px;
104    vertical-align: middle;
105    display: inline-block;
106    white-space: nowrap;
107    animation: smooth-bounce-h 2.5s cubic-bezier(0.45, 0.05, 0.55, 0.95) infinite;
108    padding: 4px 8px;
109}
110
111@keyframes smooth-bounce-h {
112    0%   { transform: translateX(0); }
113    25%  { transform: translateX(6px); }
114    50%  { transform: translateX(0); }
115    75%  { transform: translateX(-6px); }
116    100% { transform: translateX(0); }
117}
118
119.col-method#label_method_inpost_inpost {
120    display: flex;
121    gap: 8px;
122    align-items: center;
123}
124*/
125</style>
126
127
128<meta name="google-site-verification" content="9QFzfN_ciMqKFU_cA05_S82R8WLpqnsp4E4Ihexm7EE" />
129
130<script>
131// Aggiungi un event listener al documento
132document.addEventListener('click', function(event) {
133  // Ottieni l'elemento target cliccato
134  var targetElement = event.target;
135
136  // Verifica se l'elemento cliccato ha le classi specificate
137  var hasTargetClasses = targetElement.classList.contains('block') &&
138                          targetElement.classList.contains('px-6') &&
139                          targetElement.classList.contains('w-full') &&
140                          targetElement.classList.contains('py-3') &&
141                          targetElement.classList.contains('text-base') &&
142                          targetElement.classList.contains('hover:text-secondary') &&
143                          targetElement.classList.contains('hover:bg-tertiary-darker/10') &&
144                          targetElement.classList.contains('hover:fill-primary') &&
145                          targetElement.classList.contains('font-bold') &&
146                          targetElement.classList.contains('cursor-pointer') &&
147                          targetElement.classList.contains('level0') &&
148                          targetElement.classList.contains('nav-11') &&
149                          targetElement.classList.contains('page-item');
150
151  // Verifica se l'elemento cliccato è un figlio di un elemento con le classi specificate
152  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');
153
154  // Esegui l'azione solo se l'elemento cliccato ha le classi o è un figlio di un elemento con le classi
155  if (hasTargetClasses || parentElement) {
156    // Esegui il reindirizzamento o caricamento del link
157      window.location.href = "https://www.farma.it/dermocosmetica";
158  }
159
160  // Ottieni l'elemento target cliccato
161  targetElement = event.target;
162
163  // Verifica se l'elemento cliccato ha le classi specificate
164  hasTargetClasses = targetElement.classList.contains('block') &&
165                          targetElement.classList.contains('px-6') &&
166                          targetElement.classList.contains('w-full') &&
167                          targetElement.classList.contains('py-3') &&
168                          targetElement.classList.contains('text-base') &&
169                          targetElement.classList.contains('hover:text-secondary') &&
170                          targetElement.classList.contains('hover:bg-tertiary-darker/10') &&
171                          targetElement.classList.contains('hover:fill-primary') &&
172                          targetElement.classList.contains('font-bold') &&
173                          targetElement.classList.contains('cursor-pointer') &&
174                          targetElement.classList.contains('level0') &&
175                          targetElement.classList.contains('nav-12') &&
176                          targetElement.classList.contains('page-item');
177
178  // Verifica se l'elemento cliccato è un figlio di un elemento con le classi specificate
179  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');
180
181  // Esegui l'azione solo se l'elemento cliccato ha le classi o è un figlio di un elemento con le classi
182  if (hasTargetClasses || parentElement) {
183    // Esegui il reindirizzamento o caricamento del link
184      window.location.href = "https://www.farma.it/gastro-intestinale";
185  }
186
187});
188
189</script>
189
190
191<script defer>
192    window.addEventListener('load', () => {
193        Alpine.effect(() => {
194            // Funzione per capire se un elemento è naturalmente focusabile
195            const isNaturallyFocusable = (el) => {
196                const tag = el.tagName.toLowerCase();
197                if (tag === "a") return el.hasAttribute("href");
198                return ["button", "input", "select", "textarea"].includes(tag);
199            };
200
201            // 1. Link con href="#" => role="button" + tabindex
202            document.querySelectorAll("[href='#']:not([role])").forEach(el => {
203                el.setAttribute("role", "button");
204                if (!el.hasAttribute("tabindex") && !isNaturallyFocusable(el)) {
205                    el.setAttribute("tabindex", "0");
206                }
207            });
208
209            // 2. Link target="_blank" => aria-label se manca
210            document.querySelectorAll("a[target='_blank']:not([aria-label])").forEach(el => {
211                const text = el.textContent.trim();
212                if (text.length > 0) {
213                    el.setAttribute("aria-label", `${text} - opens in new tab`);
214                }
215            });
216
217            // 2.1 Link con href valorizzato e senza aria-label => estrai path finale
218            document.querySelectorAll("a[href]:not([aria-label])").forEach(el => {
219                const href = el.getAttribute("href");
220                if (href && href !== "#" && !el.hasAttribute("aria-label")) {
221                    try {
222                        const cleanHref = href.split('?')[0].split('#')[0];
223                        const parts = cleanHref.split('/');
224                        const last = parts.filter(p => p).pop();
225                        if (last) {
226                            const label = decodeURIComponent(last)
227                                .replace(/[-_]/g, ' ')
228                                .replace(/[^\w\sàèéìòùÀÈÉÌÒÙ]/gi, '')
229                                .trim();
230                            if (label) {
231                                el.setAttribute("aria-label", label);
232                            }
233                        }
234                    } catch (e) {}
235                }
236            });
237
238            // 3. Form di ricerca => role="search"
239            document.getElementById("search_mini_form")?.setAttribute("role", "search");
240
241            // 4. Icone visive => role="presentation" se mancante
242            document.querySelectorAll("i[class*='-icon'], em[class*='-icon'], span[class*='-icon']").forEach(el => {
243                if (!el.hasAttribute("role")) {
244                    el.setAttribute("role", "presentation");
245                }
246            });
247
248            // 5. SVG: rimuovi role="img", imposta alt e role="presentation" se serve
249            document.querySelectorAll("svg").forEach(el => {
250                if (el.getAttribute("role") === "img") {
251                    el.removeAttribute("role");
252                }
253                if (!el.hasAttribute("alt")) {
254                    el.setAttribute("alt", "Icona");
255                }
256                if (!el.hasAttribute("role")) {
257                    el.setAttribute("role", "presentation");
258                }
259            });
260
261            // 6. Elementi cliccabili via classi => role="button" + tabindex="0"
262            const clickableSelector = [
263                ".cursor-pointer",
264                ".group\\/button",
265                "[style*='cursor: pointer']",
266                '.swiper-button-prev',
267                '.swiper-button-next',
268                '.swiper-pagination-bullet',
269                '.product-item-link'
270            ].join(',');
271
272            document.querySelectorAll(clickableSelector).forEach(el => {
273                if (el.hasAttribute("role")) return;
274
275                const tag = el.tagName.toLowerCase();
276                const isNativeButton =
277                    tag === "button" ||
278                    (tag === "input" && ["button", "submit", "reset"].includes(el.type));
279
280                if (!isNativeButton) {
281                    el.setAttribute("role", "button");
282
283                    if (!el.hasAttribute("tabindex") && !isNaturallyFocusable(el)) {
284                        el.setAttribute("tabindex", "0");
285                    }
286
287                    if (!el.hasAttribute("aria-label")) {
288                        el.setAttribute("aria-label", "Action");
289                    }
290                }
291            });
292
293            // 7. Elementi con @click => role="button" + tabindex="0"
294            document.querySelectorAll("*").forEach(el => {
295                if (
296                    el.hasAttribute("@click") &&
297                    el.hasAttribute("@click.prevent") &&
298                    !el.hasAttribute("role") &&
299                    el.tagName.toLowerCase() !== "button"
300                ) {
301                    el.setAttribute("role", "button");
302
303                    if (!el.hasAttribute("tabindex") && !isNaturallyFocusable(el)) {
304                        el.setAttribute("tabindex", "0");
305                    }
306
307                    if (!el.hasAttribute("aria-label")) {
308                        el.setAttribute("aria-label", "Action");
309                    }
310                }
311            });
312
313            // 8. Cookiebot title: attesa dinamica e pulizia
314            const observeCookiebotTitle = () => {
315                const targetId = "CybotCookiebotDialogBodyContentTitle";
316
317                const handleTitle = (el) => {
318                    if (el.getAttribute("role") === "heading") el.removeAttribute("role");
319                    if (el.hasAttribute("aria-level")) el.removeAttribute("aria-level");
320                };
321
322                const existing = document.getElementById(targetId);
323                if (existing) {
324                    handleTitle(existing);
325                    return;
326                }
327
328                const observer = new MutationObserver((mutations, obs) => {
329                    const found = document.getElementById(targetId);
330                    if (found) {
331                        handleTitle(found);
332                        obs.disconnect();
333                    }
334                });
335
336                observer.observe(document.body, {
337                    childList: true,
338                    subtree: true,
339                });
340            };
341
342            observeCookiebotTitle();
343
344            // 9. Correzione elementi pseudo-button generici (span/div/a) con comportamento da bottone
345            document.querySelectorAll("a, span, div").forEach(el => {
346                const isButtonLike =
347                    el.hasAttribute("@click") ||
348                    el.hasAttribute("@click.prevent") ||
349                    el.hasAttribute("x-on:click") ||
350                    el.hasAttribute("onclick") ||
351                    el.hasAttribute("@keyup.enter") ||
352                    el.hasAttribute("x-on:keyup.enter") ||
353                    el.classList.contains("cursor-pointer") ||
354                    el.classList.contains("badge-container") ||
355                    el.classList.contains("rating-summary");
356
357                if (isButtonLike) {
358                    const isFocusable = isNaturallyFocusable(el) || el.hasAttribute("tabindex");
359
360                    // Assegna solo se mancano
361                    if (!el.hasAttribute("role")) {
362                        el.setAttribute("role", "button");
363                    }
364                    if (!isFocusable) {
365                        el.setAttribute("tabindex", "0");
366                    }
367                    if (!el.hasAttribute("aria-label")) {
368                        el.setAttribute("aria-label", "Action");
369                    }
370                }
371            });
372        });
373    });
374
375
376window.addEventListener('init-external-scripts', () => {
377
378if (!window.dataLayer) {
379        window.dataLayer = [];
380}
381
382      window.dataLayer.push({
383                    event: 'init_external_scripts'
384      })
385});
386
387
388document.addEventListener('click', function (event) {
389    const link = event.target.closest('a[href^="#"]');
390
391    if (!link) {
392        return;
393    }
394
395    const targetId = link.getAttribute('href').substring(1);
396
397    if (!targetId) {
398        return;
399    }
400
401    const target = document.getElementById(targetId);
402
403    // Ci interessa solo se il target è un form
404    if (!(target instanceof HTMLFormElement)) {
405        return;
406    }
407
408    event.preventDefault();
409
410    target.requestSubmit();
411});
412</script>
412
413
414    <!-- Meta Business Extension for Magento 2 -->
415<!-- Meta Pixel Code -->
416<script>
vendor: 398 bytes, lines 416-424
416
417!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
418n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
419n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
420t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
421document,'script','//connect.facebook.net/en_US/fbevents.js');
422    fbq(
423  'init',
424  '
424512468414859242
vendor: 59 bytes, lines 424-427
424',
425    {},
426  {agent: 'magento_opensource-0.0.0-1.6.4' }
427);
428fbq('track', 'PageView', {
429  source: "magento_opensource",
430  pluginVersion: "1.6.4"
431});
432</script>
432
433
434<script>
435    function metaPixelTracker(config) {
436        let eventId = crypto.randomUUID();
437        var browserEventData = config.browserEventData;
438        let browserPayload = config.browserEventData.payload;
439
440        browserPayload.source = browserEventData.source;
441        browserPayload.pluginVersion = browserEventData.pluginVersion;
442
443        fbq('set', 'agent', browserEventData.fbAgentVersion, browserEventData.fbPixelId);
444        fbq(browserEventData.track, browserEventData.event, browserPayload, {
445                eventID: eventId
446            }
447        );
448
449        var formData = new FormData();
450        formData.append('form_key', hyva.getFormKey());
451        formData.append('eventId', eventId);
452
453        Object.entries(config.payload).forEach(function (item) {
454            formData.append(item[0], item[1]);
455        })
456
457        fetch(config.url, {
458            method: 'POST',
459            body: formData
460        }).catch(error => {
461            console.error(error);
462        });
463    }
464
465    function metaParseJson(json) {
466        json = decodeURIComponent(json.replace(/\+/g, ' '));
467        return JSON.parse(json);
468    }
469
470    function metaDelCookie(name) {
471        var date = new Date(0);
472        var cookie = name + '=' + '; path=/; expires=' + date.toUTCString();
473
474        document.cookie = cookie;
475    }
476
477    function metaGetCookie(name) {
478        var cookie = ' ' + document.cookie;
479        var search = ' ' + name + '=';
480        var setStr = null;
481        var offset = 0;
482        var end = 0;
483
484        if (cookie.length > 0) {
485            offset = cookie.indexOf(search);
486            if (offset !== -1) {
487                offset += search.length;
488                end = cookie.indexOf(';', offset);
489                if (end === -1) {
490                    end = cookie.length;
491                }
492                setStr = decodeURI(cookie.substring(offset, end));
493            }
494        }
495        return setStr;
496    }
497</script>
497
498<!-- End Meta Pixel Code -->
499
500<!-- Google Tag Manager by MagePal -->
501<script type="text/javascript">
502    window.dataLayer = window.dataLayer || [];
503
504
505    function initMagepalGtmDatalayer_4f71f1c5e6503faecb6d9e35a59f2399() {
506        'use strict';
507
508        let lastPushedCart = {};
509        let lastPushedCustomer = {};
510
511        function objectKeyExist(object)
512        {
513            const items = Array.isArray(object) ? object : Object.values(object);
514            return items.reduce((acc, v) => (acc || v.customer || v.cart), false);
515            // return _.some(object, function (o) {
516            //     return !_.isEmpty(_.pick(o, ['customer', 'cart']));
517            // })
518        }
519
520        const isObject = x => x === Object(x);
521        const has = (x, p) => isObject(x) && x.hasOwnProperty(p);
522        const isEqual = (x, y) => JSON.stringify(x) === JSON.stringify(y);
523
524        //Update datalayer
525        function updateDataLayer(_gtmDataLayer, _dataObject, _forceUpdate)
526        {
527            let customer = {isLoggedIn : false},
528                cart = {hasItems: false};
529
530            if (_gtmDataLayer !== undefined && (!objectKeyExist(_gtmDataLayer) || _forceUpdate)) {
531                if (isObject(_dataObject) && has(_dataObject, 'customer')) {
532                    customer = _dataObject.customer;
533                }
534
535                if (isObject(_dataObject) && has(_dataObject, 'cart')) {
536                    cart = _dataObject.cart;
537                }
538
539                if (!isEqual(lastPushedCart, cart) || !isEqual(lastPushedCustomer, customer)) {
540                    window.dispatchEvent(new CustomEvent('mpCustomerSession', {detail: [customer, cart, _gtmDataLayer]}));
541                    //$('body').trigger('mpCustomerSession', [customer, cart, _gtmDataLayer]);
542                    _gtmDataLayer.push({'event': 'mpCustomerSession', 'customer': customer, 'cart': cart});
543
544                    lastPushedCustomer = customer;
545                    lastPushedCart = cart;
546                }
547            }
548        }
549
550        function isTrackingAllowed(config)
551        {
552            let allowServices = false,
553                allowedCookies,
554                allowedWebsites;
555
556            if (!config.isGdprEnabled || (!config.isGdprEnabled && !config.addJsInHeader)) {
557                allowServices = true;
558            } else if (config.isCookieRestrictionModeEnabled && config.gdprOption === 1) {
559                allowedCookies = hyva.getCookie(config.cookieName);
560
561                if (allowedCookies !== null) {
562                    allowedWebsites = JSON.parse(allowedCookies);
563
564                    if (allowedWebsites[config.currentWebsite] === 1) {
565                        allowServices = true;
566                    }
567                }
568            } else if (config.gdprOption === 2) {
569                allowServices = hyva.getCookie(config.cookieName) !== null;
570            } else if (config.gdprOption === 3) {
571                allowServices = hyva.getCookie(config.cookieName) === null;
572            }
573
574            return allowServices;
575        }
576
577        //load gtm
578        function initTracking(dataLayerName, accountId, containerCode)
579        {
580            window.dispatchEvent(new CustomEvent('gtm:beforeInitialize'));
581
582            (function (w, d, s, l, i) {
583                w[l] = w[l] || [];
584                w[l].push({
585                    'gtm.start':
586                        new Date().getTime(), event: 'gtm.js'
587                });
588                var f = d.getElementsByTagName(s)[0],
589                    j = d.createElement(s), dl = l != dataLayerName ? '&l=' + l : '';
590                j.async = true;
591                j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl + containerCode;
592                f.parentNode.insertBefore(j, f);
593            })(window, document, 'script', dataLayerName, accountId);
594            window.dispatchEvent(new CustomEvent('gtm:afterInitialize'));
595        }
596
597        function pushData(dataLayerName, dataLayer)
598        {
599            //if (_.isArray(dataLayer)) {
600            if (Array.isArray(dataLayer)) {
601                //_.each(dataLayer, function (data) {
602                dataLayer.forEach(function (data) {
603                    window[dataLayerName].push(data);
604                });
605            }
606        }
607
608        const config = {
609            dataLayer: "dataLayer",
610            gdprOption: 0,
611            isGdprEnabled: 0,
612            isCookieRestrictionModeEnabled: 0,
613        };
614
615                config.currentWebsite = 1;
616        config.cookieName = "user_allowed_save_cookie";
617        config.accountId = "GTM-TQTH9KNM";
618        config.data = [{"ecommerce":{"currencyCode":"EUR"},"pageType":"customer_account_forgotpassword","list":"other"}];
619        config.addJsInHeader = 0;
620        config.containerCode = "";
621        
622        window[config.dataLayer] = window[config.dataLayer] || [];
623
624        if (has(config, 'accountId') && isTrackingAllowed(config)) {
625            pushData(config.dataLayer, config.data);
626            initTracking(config.dataLayer, config.accountId, config.containerCode);
627        }
628
629        const gtmDataLayer = window[config.dataLayer];
630
631        window.addEventListener("private-content-loaded", event => {
632            const dataObject = event.detail.data['magepal-gtm-jsdatalayer'] || {};
633            updateDataLayer(gtmDataLayer, dataObject, true)
634        });
635
636        // dataObject.subscribe(function (_dataObject) {
637        //     updateDataLayer(gtmDataLayer, _dataObject, true);
638        // }, this);
639
640        // if (!_.contains(customerData.getExpiredKeys(), 'magepal-gtm-jsdatalayer')) {
641        //     updateDataLayer(gtmDataLayer, dataObject(), false);
642        // }
643
644    }
645    window.addEventListener('DOMContentLoaded', initMagepalGtmDatalayer_4f71f1c5e6503faecb6d9e35a59f2399);
646
647</script>
647
648<!-- End Google Tag Manager by MagePal -->
649
650<link rel="canonical" href="https://www.farma.it/customer/account/forgotpassword/">
651<script>
652    var BASE_URL = 'https://www.farma.it/';
653    var THEME_PATH = 'https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT';
654    var COOKIE_CONFIG = {
655        "expires": null,
656        "path": "\u002F",
657        "domain": ".farma.it",
658        "secure": true,
659        "lifetime": "7200",
660        "cookie_restriction_enabled": false    };
661    var CURRENT_STORE_CODE = 'default';
662    var CURRENT_WEBSITE_ID = '1';
663    var CURRENT_MIN_ORDER_VALUE = '24.90';
664    var CURRENT_MIN_ORDER_VALUE_FORMATTED = '24,90 €';
665    var CURRENT_MIN_ORDER_INCLUDE_DISCOUNT = '0';
666    var CURRENT_STORE_CURRENCY = 'EUR';
667
668    window.hyva = window.hyva || {}
669
670    window.cookie_consent_groups = window.cookie_consent_groups || {}
671    window.cookie_consent_groups['necessary'] = true;
672
673    window.cookie_consent_config = window.cookie_consent_config || {};
674    window.cookie_consent_config['necessary'] = [].concat(
675        window.cookie_consent_config['necessary'] || [],
676        [
677            'user_allowed_save_cookie',
678            'form_key',
679            'mage-messages',
680            'private_content_version',
681            'mage-cache-sessid',
682            'last_visited_store',
683            'section_data_ids'
684        ]
685    );
686    document.addEventListener("alpine:init", () => {
687        Alpine.store('externalScriptsInit', false);
688        window.addEventListener('init-external-scripts', () => Alpine.store('externalScriptsInit',true), {
689            once: true,
690            passive: true
691        });
692    });
693</script>
vendor: 1 bytes, line 693
693
694<script>
695    (function( hyva, undefined ) {
696
697        function lifetimeToExpires(options, defaults) {
698
699            const lifetime = options.lifetime || defaults.lifetime;
700
701            if (lifetime) {
702                const date = new Date;
703                date.setTime(date.getTime() + lifetime * 1000);
704                return date;
705            }
706
707            return null;
708        }
709
710        function generateRandomString() {
711
712            const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
713                length = 16;
714
715            let formKey = '',
716                charactersLength = allowedCharacters.length;
717
718            for (let i = 0; i < length; i++) {
719                formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))]
720            }
721
722            return formKey;
723        }
724
725        const sessionCookieMarker = {noLifetime: true}
726
727        const cookieTempStorage = {};
728
729        const internalCookie = {
730            get(name) {
731                const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
732                return v ? v[2] : null;
733            },
734            set(name, value, days, skipSetDomain) {
735                let expires,
736                    path,
737                    domain,
738                    secure,
739                    samesite;
740
741                const defaultCookieConfig = {
742                    expires: null,
743                    path: '/',
744                    domain: null,
745                    secure: false,
746                    lifetime: null,
747                    samesite: 'lax'
748                };
749
750                const cookieConfig = window.COOKIE_CONFIG || {};
751
752                expires = days && days !== sessionCookieMarker
753                    ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig)
754                    : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires;
755
756                path = cookieConfig.path || defaultCookieConfig.path;
757                domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain);
758                secure = cookieConfig.secure || defaultCookieConfig.secure;
759                samesite = cookieConfig.samesite || defaultCookieConfig.samesite;
760
761                document.cookie = name + "=" + encodeURIComponent(value) +
762                    (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') +
763                    (path ? '; path=' + path : '') +
764                    (domain ? '; domain=' + domain : '') +
765                    (secure ? '; secure' : '') +
766                    (samesite ? '; samesite=' + samesite : 'lax');
767            },
768            isWebsiteAllowedToSaveCookie() {
769                const allowedCookies = this.get('user_allowed_save_cookie');
770                if (allowedCookies) {
771                    const allowedWebsites = JSON.parse(unescape(allowedCookies));
772
773                    return allowedWebsites[CURRENT_WEBSITE_ID] === 1;
774                }
775                return false;
776            },
777            getGroupByCookieName(name) {
778                const cookieConsentConfig = window.cookie_consent_config || {};
779                let group = null;
780                for (let prop in cookieConsentConfig) {
781                    if (!cookieConsentConfig.hasOwnProperty(prop)) continue;
782                    if (cookieConsentConfig[prop].includes(name)) {
783                        group = prop;
784                        break;
785                    }
786                }
787                return group;
788            },
789            isCookieAllowed(name) {
790                const cookieGroup = this.getGroupByCookieName(name);
791                return cookieGroup
792                    ? window.cookie_consent_groups[cookieGroup]
793                    : this.isWebsiteAllowedToSaveCookie();
794            },
795            saveTempStorageCookies() {
796                for (const [name, data] of Object.entries(cookieTempStorage)) {
797                    if (this.isCookieAllowed(name)) {
798                        this.set(name, data['value'], data['days'], data['skipSetDomain']);
799                        delete cookieTempStorage[name];
800                    }
801                }
802            }
803        };
804
805        hyva.getCookie = (name) => {
806            const cookieConfig = window.COOKIE_CONFIG || {};
807
808            if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
809                return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null;
810            }
811
812            return internalCookie.get(name);
813        }
814
815        hyva.setCookie = (name, value, days, skipSetDomain) => {
816            const cookieConfig = window.COOKIE_CONFIG || {};
817
818            if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
819                cookieTempStorage[name] = {value, days, skipSetDomain};
820                return;
821            }
822            return internalCookie.set(name, value, days, skipSetDomain);
823        }
824
825
826        hyva.setSessionCookie = (name, value, skipSetDomain) => {
827            return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain)
828        }
829
830        hyva.getBrowserStorage = () => {
831            const browserStorage = window.localStorage || window.sessionStorage;
832            if (!browserStorage) {
833                console.warn('Browser Storage is unavailable');
834                return false;
835            }
836            try {
837                browserStorage.setItem('storage_test', '1');
838                browserStorage.removeItem('storage_test');
839            } catch (error) {
840                console.warn('Browser Storage is not accessible', error);
841                return false;
842            }
843            return browserStorage;
844        }
845
846        hyva.postForm = (postParams) => {
847            const form = document.createElement("form");
848
849            let data = postParams.data;
850
851            if (! postParams.skipUenc && ! data.uenc) {
852                data.uenc = btoa(window.location.href);
853            }
854            form.method = "POST";
855            form.action = postParams.action;
856
857            Object.keys(postParams.data).map(key => {
858                const field = document.createElement("input");
859                field.type = 'hidden'
860                field.value = postParams.data[key];
861                field.name = key;
862                form.appendChild(field);
863            });
864
865            const form_key = document.createElement("input");
866            form_key.type = 'hidden';
867            form_key.value = hyva.getFormKey();
868            form_key.name="form_key";
869            form.appendChild(form_key);
870
871            document.body.appendChild(form);
872
873            form.submit();
874        }
875
876        hyva.getFormKey = function () {
877            let formKey = hyva.getCookie('form_key');
878
879            if (!formKey) {
880                formKey = generateRandomString();
881                hyva.setCookie('form_key', formKey);
882            }
883
884            return formKey;
885        }
886
887        hyva.formatPrice = (value, showSign, options = {}) => {
888            const groupSeparator = options.groupSeparator;
889            const decimalSeparator = options.decimalSeparator
890            delete options.groupSeparator;
891            delete options.decimalSeparator;
892            const formatter = new Intl.NumberFormat(
893                'it\u002DIT',
894                Object.assign({
895                    style: 'currency',
896                    currency: 'EUR',
897                    signDisplay: showSign ? 'always' : 'auto'
898                }, options)
899            );
900            return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ?
901                formatter.formatToParts(value).map(({type, value}) => {
902                    switch (type) {
903                        case 'currency':
904                            return '\u20AC' || value;
905                        case 'minusSign':
906                            return '- ';
907                        case 'plusSign':
908                            return '+ ';
909                        case 'group':
910                            return groupSeparator !== undefined ? groupSeparator : value;
911                        case 'decimal':
912                            return decimalSeparator !== undefined ? decimalSeparator : value;
913                        default :
914                            return value;
915                    }
916                }).reduce((string, part) => string + part) :
917                formatter.format(value);
918        }
919
920        const formatStr = function (str, nStart) {
921            const args = Array.from(arguments).slice(2);
922
923            return str.replace(/(%+)([0-9]+)/g, (m, p, n) => {
924                const idx = parseInt(n) - nStart;
925
926                if (args[idx] === null || args[idx] === void 0) {
927                    return m;
928                }
929                return p.length % 2
930                    ? p.slice(0, -1).replace('%%', '%') + args[idx]
931                    : p.replace('%%', '%') + n;
932            })
933        }
934
935        hyva.str = function (string) {
936            const args = Array.from(arguments);
937            args.splice(1, 0, 1);
938
939            return formatStr.apply(undefined, args);
940        }
941
942        hyva.strf = function () {
943            const args = Array.from(arguments);
944            args.splice(1, 0, 0);
945
946            return formatStr.apply(undefined, args);
947        }
948
949        /**
950         * Take a html string as `content` parameter and
951         * extract an element from the DOM to replace in
952         * the current page under the same selector,
953         * defined by `targetSelector`
954         */
955        hyva.replaceDomElement = (targetSelector, content) => {
956            // Parse the content and extract the DOM node using the `targetSelector`
957            const parser = new DOMParser();
958            const doc = parser.parseFromString(content, 'text/html');
959            const contentNode = doc.querySelector(targetSelector);
960
961            // Bail if content or target can't be found
962            if (!contentNode || !document.querySelector(targetSelector)) {
963                return;
964            }
965
966                        hyva.activateScripts(contentNode);
967            
968            // Replace the old DOM node with the new content
969            document.querySelector(targetSelector).replaceWith(contentNode);
970
971            // Reload customerSectionData and display cookie-messages if present
972            window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
973            hyva.initMessages();
974        }
975
976        hyva.removeScripts = (contentNode) => {
977            const scripts = contentNode.getElementsByTagName('script');
978            for (let i = 0; i < scripts.length; i++) {
979                scripts[i].parentNode.removeChild(scripts[i]);
980            }
981            const templates = contentNode.getElementsByTagName('template');
982            for (let i = 0; i < templates.length; i++) {
983                const container = document.createElement('div');
984                container.innerHTML = templates[i].innerHTML;
985                hyva.removeScripts(container);
986                templates[i].innerHTML = container.innerHTML;
987            }
988        }
989
990        hyva.activateScripts = (contentNode) => {
991            // Create new array from HTMLCollection to avoid mutation of collection while manipulating the DOM.
992            const scripts = Array.from(contentNode.getElementsByTagName('script'));
993
994            // Iterate over all script tags to duplicate+inject each into the head
995            for (const original of scripts) {
996                const script = document.createElement('script');
997                original.type && (script.type = original.type);
998                script.innerHTML = original.innerHTML;
999
1000                // Remove the original (non-executing) script from the contentNode
1001                original.parentNode.removeChild(original)
1002
1003                // Add script to head
1004                document.head.appendChild(script);
1005            }
1006
1007            return contentNode;
1008        }
1009
1010        const replace = {['+']: '-', ['/']: '_', ['=']: ','};
1011        hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]);
1012
1013        let currentTrap;
1014
1015        const focusableElements = (rootElement) => {
1016            const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]';
1017            return Array.from(rootElement.querySelectorAll(selector))
1018                .filter(el => {
1019                    return el.style.display !== 'none'
1020                        && !el.disabled
1021                        && el.tabIndex !== -1
1022                        && (el.offsetWidth || el.offsetHeight || el.getClientRects().length)
1023                })
1024        }
1025
1026        const focusTrap = (e) => {
1027            const isTabPressed = e.key === 'Tab' || e.keyCode === 9;
1028            if (!isTabPressed) return;
1029
1030            const focusable = focusableElements(currentTrap)
1031            const firstFocusableElement = focusable[0]
1032            const lastFocusableElement = focusable[focusable.length - 1]
1033
1034            e.shiftKey
1035                ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault())
1036                : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault())
1037        };
1038
1039        hyva.releaseFocus = (rootElement) => {
1040            if (currentTrap && (!rootElement || rootElement === currentTrap)) {
1041                currentTrap.removeEventListener('keydown', focusTrap)
1042                currentTrap = null
1043            }
1044        }
1045        hyva.trapFocus = (rootElement) => {
1046            if (!rootElement) return;
1047            hyva.releaseFocus()
1048            currentTrap = rootElement
1049            rootElement.addEventListener('keydown', focusTrap)
1050            const firstElement = focusableElements(rootElement)[0]
1051            firstElement && firstElement.focus()
1052        }
1053
1054        hyva.safeParseNumber = (rawValue) => {
1055            const number = rawValue ? parseFloat(rawValue) : null;
1056
1057            return Array.isArray(number) || isNaN(number) ? rawValue : number;
1058        }
1059
1060        const toCamelCase = s => s.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('');
1061        hyva.createBooleanObject = (name, value = false, additionalMethods = {}) => {
1062
1063            const camelCase = toCamelCase(name);
1064            const key = '__hyva_bool_' + name
1065
1066            return new Proxy(Object.assign(
1067                additionalMethods,
1068                {
1069                    [key]: !!value,
1070                    [name]() {return !!this[key]},
1071                    ['!' + name]() {return !this[key]}, // @deprecated This does not work with non-CSP Alpine
1072                    ['not' + camelCase]() {return !this[key]},
1073                    ['toggle' + camelCase]() {this[key] = !this[key]},
1074                    [`set${camelCase}True`]() {this[key] = true},
1075                    [`set${camelCase}False`]() {this[key] = false},
1076                }
1077            ), {
1078                set(target, prop, value) {
1079                    return prop === name
1080                        ? (target[key] = !!value)
1081                        : Reflect.set(...arguments);
1082                }
1083            })
1084        }
1085
1086                hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true})
1087        window.addEventListener('alpine:init', () => Alpine.data('{}', () => ({})), {once: true});
1088                window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies())
1089
1090    }( window.hyva = window.hyva || {} ));
1091    //# sourceURL=hyva.js
1092</script>
vendor: 1 bytes, line 1092
1092
1093<script type="speculationrules">
1094{
1095    "tag": "Hyva Theme",
1096    "prefetch": [{
1097        "source": "document",
1098        "where": {
1099            "and": [
1100                { "href_matches": "/*" },
1101                { "not": {
1102                    "href_matches": ["/customer/*","/search/*","/sales/*","/wishlist/*","/checkout/*","/paypal/*","/newsletter/*","/stores/store/redirect/*"]                }},
1103                { "not": {
1104                    "selector_matches": [".no-preload", ".do-not-prerender", "[download]", "[rel~=nofollow]", "[target]"]
1105                }}
1106            ]
1107        },
1108        "eagerness": "moderate"
1109    }]
1110}
1111</script>
vendor: 1 bytes, line 1111
1111
1112<script class="feedaty_sdk" src="https://widget.feedaty.com/v3.0.0/js/2021/10214034/feedaty.min.js" async></script>
vendor: 1 bytes, line 1112
1112
1113<script>
1114    function deepMerge(target, ...sources) {
1115        if (!sources.length) {
1116            return target;
1117        }
1118
1119        const source = sources.shift();
1120
1121        if (typeof target !== 'object' || typeof source !== 'object') {
1122            return target;
1123        }
1124
1125        for (let key in source) {
1126            if (source.hasOwnProperty(key)) {
1127                if (source[key] instanceof Array) {
1128                    target[key] = target[key] || [];
1129                    target[key] = target[key].concat(source[key]);
1130                } else if (typeof source[key] === 'object') {
1131                    target[key] = deepMerge(target[key] || {}, source[key]);
1132                } else {
1133                    target[key] = source[key];
1134                }
1135            }
1136        }
1137
1138        return deepMerge(target, ...sources);
1139    }
1140
1141    function amastyRewardsProduct() {
1142        return {
1143            captionStartText: 'Puoi\u0020guadagnare',
1144            captionAfterText: '',
1145            captionRegistrationText: 'registrandoti\u0021',
1146            captionEndText: '',
1147            productId: this.$el.dataset.productId,
1148            formSelector: 'product_addtocart_form',
1149            form: null,
1150            refreshUrl: this.$el.dataset.refreshUrl,
1151            loader: false,
1152            isFetching: false,
1153            abortFetchController: false,
1154            highlight: {
1155                registration_link: '',
1156                caption_color: '',
1157                caption_text: '0',
1158                visible: false
1159            },
1160
1161            init() {
1162                this.formObserver();
1163                document.addEventListener(`update-qty-${this.productId}`, () => {
1164                    this.updateData();
1165                });
1166                window.addEventListener('update-bundle-option-selection', () => {
1167                    this.updateData();
1168                });
1169                this.$nextTick(() => this.updateData());
1170            },
1171
1172            hideBlock() {
1173                this.highlight.visible = false;
1174                this.loader = true;
1175            },
1176
1177            dispatchStatus(type, message) {
1178                window.dispatchMessages([{
1179                    type: type,
1180                    text: message
1181                }], 5000);
1182            },
1183
1184            formObserver() {
1185                const product = document.querySelector(`input[name='product'][value='${this.productId}']`);
1186
1187                if (product) {
1188                    const productForm = product.form;
1189                    if (productForm) {
1190                        productForm.addEventListener('change', () => {
1191                            this.updateData();
1192                        });
1193                    }
1194                }
1195            },
1196
1197            updateData() {
1198                if (this.isFetching) {
1199                    return false;
1200                }
1201                if (!this.refreshUrl) {
1202                    this.loader = false;
1203                    return false;
1204                }
1205                this.hideBlock();
1206
1207                if (this.abortFetchController) {
1208                    this.abortFetchController.abort();
1209                }
1210
1211                this.abortFetchController = new AbortController();
1212
1213                const product = document.querySelector(`input[name='product'][value='${this.productId}']`);
1214                let formParams = '';
1215
1216                if (!product) {
1217                    formParams = 'form_key=' + hyva.getFormKey() + '&product=' + this.productId;
1218                } else {
1219                    const form = product.form;
1220                    const formData = new FormData(form);
1221                    formParams = new URLSearchParams(formData).toString();
1222                }
1223                const formJson = JSON.stringify({
1224                    page: 0,
1225                    productId: this.productId,
1226                    attributes: formParams
1227                });
1228
1229                const requestOptions = {
1230                    method: 'POST',
1231                    body: formJson,
1232                    headers: {
1233                        'Content-Type': 'application/json',
1234                        'x-requested-with': 'XMLHttpRequest',
1235                    },
1236                    signal: this.abortFetchController.signal
1237                };
1238                this.isFetching = true;
1239                fetch(this.refreshUrl, requestOptions).then(response => {
1240                    if (!response.ok) {
1241                        return Promise.reject(`${response.status} ${response.statusText}`);
1242                    }
1243                    return response.json();
1244                }).then((data) => {
1245                    this.highlight.visible = data.visible;
1246                    this.highlight.caption_text = data.caption_text;
1247                    this.highlight.caption_color = data.caption_color;
1248
1249                    if (data?.registration_link) {
1250                        this.highlight.registration_link = data.registration_link;
1251                    }
1252
1253                    if (data?.need_to_change_message && data?.need_to_change_message === 1) {
1254                        this.captionAfterText = 'completando\u0020un\u0020acquisto\u0021\u0020Solo\u0020per';
1255                        this.captionRegistrationText = 'registrati.';
1256                        this.captionEndText = 'utenti';
1257                    }
1258                }).catch(error => {
1259                    if (error.name !== 'AbortError' && typeof error === 'string' && error.match(/'401'/g) !== null) {
1260                        this.dispatchStatus('error', error);
1261                    }
1262                }).finally(() => {
1263                    this.loader = false;
1264                    this.isFetching = false;
1265                });
1266            },
1267
1268            highlightCaptionText() {
1269                return this.highlight.caption_text !== '0' && !this.loader;
1270            },
1271
1272            highlightStyle() {
1273                return `color: ${this.highlight.caption_color}`;
1274            },
1275
1276            isHighlightRegistrationLink() {
1277                return this.highlight.registration_link && this.highlight.registration_link !== '';
1278            },
1279
1280            isNotRegistrationLink() {
1281                return !this.highlight.registration_link;
1282            },
1283
1284            highlightVisible() {
1285                return this.highlight.visible && !this.loader;
1286            }
1287        }
1288    }
1289
1290    window.addEventListener(
1291        'alpine:init',
1292        () => Alpine.data('amastyRewardsProduct', amastyRewardsProduct),
1293        { once: true }
1294    );
1295</script>
vendor: 1 bytes, line 1295
1295
1296<script>
1297    (function () {
1298        let amSwiperProcessed = false;
1299
1300        window.addEventListener('load-amswiper', () => {
1301            if (amSwiperProcessed) {
1302                window?.Swiper && window.dispatchEvent(new CustomEvent('amswiper-loaded', {}));
1303                return;
1304            }
1305
1306            const script = document.createElement('script');
1307            script.src = 'https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Amasty_LibSwiperJs/js/vendor/swiper/swiper.min.js';
1308            script.async = true;
1309            document.body.appendChild(script);
1310
1311            amSwiperProcessed = true;
1312
1313            script.onload = () => {
1314                window.dispatchEvent(new CustomEvent('amswiper-loaded', {}));
1315            }
1316
1317            const stylesHref = 'https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Amasty_LibSwiperJs/vendor/swiper/swiper.min.css';
1318
1319            if (document.querySelector(`link[href="${stylesHref}"]`)) {
1320                return;
1321            }
1322
1323            const styles = document.createElement('link');
1324            styles.rel = 'stylesheet';
1325            styles.type = 'text/css';
1326            styles.href = stylesHref;
1327
1328            document.head.appendChild(styles);
1329        });
1330    }());
1331</script>
1331
1332</head>
1333<body id="html-body" class="customer-account-forgotpassword page-layout-1column">
1334                        <noscript>
1335            <img height="1" width="1" style="display:none"
1336                 src="https://www.facebook.com/tr?id=512468414859242&amp;ev=PageView&amp;noscript=1&amp;a=magento_opensource-0.0.0-1.6.4">
1337        </noscript>
1338    
1339<!-- Google Tag Manager by MagePal -->
vendor: 62 bytes, lines 1339-1340
1339
1340<noscript><iframe src="//www.googletagmanager.com/ns.html?id=
1340GTM-TQTH9KNM
vendor: 83 bytes, lines 1340-1341
1340"
1341height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1342<!-- End Google Tag Manager by MagePal -->
1343
1344
1345    
1346    
1346<script type="module">const { KlarnaSDK } = await import("https\u003A\u002F\u002Fjs.klarna.com\u002Fweb\u002Dsdk\u002Fv2\u002Fklarna.mjs");
1347const MyKlarna = await KlarnaSDK({
1348    clientId: "klarna_live_client_Rnpiams_MTNpWWc3LzJ3UUppciNHKUgqJSlSTG9lS0gsN2Q1MmUxN2UtZmE4MC00OGIxLWFhNjgtNTc4NDMyN2M2MGQ0LDEsWlJNMmtVejlkd0Q1bVBoOHZnc3JKN1YyL3FOY2ZrYzRRSWRjNUNhY3ZZYz0",
1349    products: ["PAYMENT", "MESSAGING", "IDENTITY", "CUSTOMER"],
1350    locale: "it\u002DIT"
1351});
1352const token = await MyKlarna.Interoperability.token();
1353const klarnaReadyEvent = new CustomEvent("klarna-sdk-ready", {
1354    detail: { token, sdk: MyKlarna }
1355});
1356window.dispatchEvent(klarnaReadyEvent);</script>
1356    
1357<div
1358            class="ambanners ambanner-10"
1359        data-position="10"
1360        data-bannerid=""
1361        data-role="amasty-banner-container"
1362></div>
1363
1364<script nonce='Z21reG1veG44ajg0aHZqYmg4NG5sY2Rqd2l1bWZla2g=' >
1365    'use strict';
1366    (function (blackbird) {
1367
1368        const addEventListenerOnElementToLoad = (elementToLoad, source) => new Promise((resolve, reject) => {
1369            elementToLoad.addEventListener('load', () => {
1370                elementToLoad.dataset.loaded = true;
1371                resolve(elementToLoad);
1372            })
1373
1374            elementToLoad.addEventListener('error', () => {
1375                reject(new Error(`[External resource loader] : The resource "${source}", failed to load.`));
1376            });
1377        });
1378
1379        blackbird.loadExternalScript = async (source) => {
1380            const scriptWithSameSrc = document.querySelector(`script[src="${source}"][data-loaded]`);
1381
1382            if (scriptWithSameSrc && scriptWithSameSrc.dataset.loaded === 'true') {
1383                return scriptWithSameSrc;
1384            }
1385
1386            const script = scriptWithSameSrc ?? document.createElement('script');
1387            script.type = 'text/javascript';
1388            script.async = true;
1389            script.src = source;
1390            script.dataset.loaded = false;
1391
1392            document.head.appendChild(script);
1393            await addEventListenerOnElementToLoad(script, source);
1394            return script;
1395        }
1396
1397        blackbird.loadExternalStyle = async (source) => {
1398            const linkWithSameHref = document.querySelector(`link[href="${source}"][data-loaded]`);
1399
1400            if (linkWithSameHref && linkWithSameHref.dataset.loaded === 'true') {
1401                return linkWithSameHref;
1402            }
1403
1404            const link = linkWithSameHref ?? document.createElement('link');
1405            link.type = 'text/css'
1406            link.rel = 'stylesheet';
1407            link.href = source;
1408            link.dataset.loaded = false;
1409
1410            document.head.prepend(link);
1411            await addEventListenerOnElementToLoad(link, source);
1412            return link;
1413        }
1414
1415        blackbird.loadExternalResource = (source) => {
1416            const scriptUrlRegex = /\.(js)$/i;
1417            const styleUrlRegex = /\.(css)$/i;
1418
1419            if (scriptUrlRegex.test(source)) {
1420                return blackbird.loadExternalScript(source);
1421            }
1422
1423            if (styleUrlRegex.test(source)) {
1424                return blackbird.loadExternalStyle(source);
1425            }
1426        }
1427
1428    }(window.blackbird = window.blackbird || {}));
1429</script>
1429
1430<!-- BEGIN Trovaprezzi Trusted Program CODE -->
1431<script type="text/javascript" src="https://tps.trovaprezzi.it/javascripts/tracking-vanilla.min.js"></script>
1431
1432
1433<!-- END  Trovaprezzi Trusted Program CODE -->
1434<input name="form_key" type="hidden" value="NuWLCNhC6L8sVz4U" />
1435    <noscript>
1436        <section
1437            class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal"
1438            aria-labelledby="messageGlobalNoScriptMessage"
1439        >
1440            <div class="container text-center">
1441                <p id="messageGlobalNoScriptMessage">
1442                    <strong>I JavaScript sembrano essere disabilitati nel tuo browser.</strong>
1443                    <span>
1444                        Per una migliore esperienza sul nostro sito, assicurati di attivare i javascript nel tuo browser.                    </span>
1445                </p>
1446            </div>
1447        </section>
1448    </noscript>
1449
1450
1451<div class="widget block block-static-block">
1452    <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">
1453Spedizione <strong id="prova-agent">Gratuita</strong><span class="hidden lg:inline"> su tutti i prodotti</span> | Ordine minimo 24,90 €
1454</p>
1455<a href="http://reskyt.com/app/anticafarmaciaorlandi" class="href-download-app reskyt" id="href-download-app" style="display:none">
1456    <div id="install-app">
1457        <span class="close-install-app" onclick="return reskytCloseBar();"><span>x</span></span>
1458        <div class="content-app">
1459            <img class="img-app" src="https://cdn.reskyt.com/7724/antica-farmacia-orlandi-icono-app-436884-250116101022.png" alt="Farma.it">
1460            <div class="name-app">Farma.it</div>
1461            <div class="fab-app">Farma.it - by Antica Farmacia Orlandi</div>
1462            <div class="title-app">Disponibile su <span id="platform-app"></span></div>
1463        </div>
1464    </div>
1465</a>
1466
1467<style>
1468    .fixed-header .reskyt #install-app {
1469        display: none;
1470    }
1471    
1472    .reskyt #install-app {
1473        width:100%;
1474        right: 0;
1475        position: fixed;
1476        top:0;
1477        z-index: 900;
1478        color:#000000;
1479        background-color:rgb(255, 102, 0);;
1480        font-family: Verdana, Arial, sans-serif;
1481        font-size:12px;
1482        min-height:90px;
1483        z-index: 99999;
1484    }
1485    .reskyt .close-install-app {
1486        padding:8px 5px;
1487        display:block;
1488        width:20px;
1489        height:40px;
1490        font-family: Helvetica, Arial, Verdana, sans-serif;
1491        font-weight: normal;
1492        font-size:14px;
1493        text-align:center;
1494        cursor:pointer !important;
1495        font-weight:bold;
1496        color:#666;
1497        position:absolute;
1498        margin-top:20px;
1499    }
1500    .reskyt .img-app {
1501        max-height: 60px;
1502        width:57px;
1503        border: 1px solid #e8ecf1;
1504        -webkit-border-radius: 8px;
1505        -moz-border-radius: 8px;
1506        border-radius: 8px;
1507    }
1508    .reskyt .img-app, .reskyt .content-app {
1509        float:left;
1510    }
1511    .reskyt .fab-app {
1512        color:#000000;
1513        font-size:11px;
1514    }
1515    .reskyt .name-app, .reskyt .title-app, .reskyt .fab-app {
1516        margin-left:70px;
1517        padding:1px 0;
1518    }
1519    .reskyt .title-app {                 color: #444444;             }
1520    .reskyt .name-app {
1521        font-weight:bold;
1522        margin-top:2px;
1523        overflow:hidden;
1524        height: 16px;
1525    }
1526    .reskyt .content-app {
1527        margin-top:8px;
1528        margin-right: 34px;
1529        margin-left: 30px;
1530        position:absolute;
1531    }
1532    .reskyt .view-install-app {
1533        color:blue;
1534        line-height:25px;
1535        margin-top:23px;
1536        text-transform:uppercase;
1537        position:absolute;
1538        right:5px;
1539    }
1540    @media screen and (max-width: 350px){                  .reskyt .title-app { overflow: auto; max-height: 28px;}                }
1541</style>
1542
1543<script>
1544
1545    function reskytCloseBar () {
1546        dias_expire = 7; /*Dias que queremos que pasen hasta que se vuelva a mostrar la barra*/
1547        reskytSetCookie("reskyt-install-app", 1, dias_expire);
1548        document.getElementById("href-download-app").style.display = "none";
1549        return false;
1550    }
1551    function reskytSetCookie(cname, cvalue, exdays) {
1552        var d = new Date();
1553        d.setTime(d.getTime() + (exdays*24*60*60*1000));
1554        var expires = "expires="+ d.toUTCString();
1555        document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; /*Añadir ;SameSite=None;Secure en caso de que la cookie tenga que ser accesible entre iFrame*/
1556    }
1557    function reskytGetCookie(cname) {
1558        var name = cname + "=";
1559        var decodedCookie = decodeURIComponent(document.cookie);
1560        var ca = decodedCookie.split(';');
1561        for(var i = 0; i <ca.length; i++) {
1562            var c = ca[i];
1563            while (c.charAt(0) == ' ') {
1564                c = c.substring(1);
1565            }
1566            if (c.indexOf(name) == 0) {
1567                return c.substring(name.length, c.length);
1568            }
1569        }
1570        return "";
1571    }
1572    url = window.location.href;
1573    if ( url.indexOf("customapp=") != -1 ) {
1574        reskytSetCookie("is_app_install_bar", 1, 365);
1575    }
1576    window.addEventListener('load', function () {
1577        let isMobile = true;
1578
1579        const platformApp = document.getElementById("platform-app");
1580        const downloadApp = document.getElementById("href-download-app");
1581
1582        if (/Android/i.test(navigator.userAgent)) {
1583            if (platformApp) {
1584                platformApp.innerHTML = "Google Play";
1585            }
1586        } else if (/iPhone|iPad|iPod/i.test(navigator.userAgent)) {
1587            if (platformApp) {
1588                platformApp.innerHTML = "App Store";
1589            }
1590        } else if (/IEMobile/i.test(navigator.userAgent)) {
1591            if (platformApp) {
1592                platformApp.innerHTML = "Windows Phone";
1593            }
1594        } else {
1595            isMobile = false;
1596        }
1597
1598        if (
1599            downloadApp &&
1600            isMobile &&
1601            !reskytGetCookie("is_app_install_bar") &&
1602            !reskytGetCookie("reskyt-install-app")
1603        ) {
1604            downloadApp.style.display = "block";
1605        } else if (downloadApp) {
1606            downloadApp.style.display = "none";
1607        }
1608    });
1609</script>
1609</div></div></div>
1610
1611
1612<script data-cfasync="false">
1613    window.amastyCookieManager = window.amastyCookieManager || {};
1614</script>
vendor: 1 bytes, line 1614
1614
1615<script type="text/plain" data-cookieconsent="marketing">
1616    (function() {
1617      "use strict";
1618
1619      window.CONNECTIF_CART_SUMMARY = null;
1620
1621      function addClientScript(result) {
1622          if (
1623              !document.querySelector("#__cn_generic_script__" + result.clientId) &&
1624              !document.querySelector("#__cn_client_script_" + result.clientId)
1625          ) {
1626              const url =
1627                  result.cdnProtocol +
1628                  "://" +
1629                  result.cdnDomain +
1630                  "/" +
1631                  result.cdnPath +
1632                  "/" +
1633                  result.clientScriptPath +
1634                  result.clientId;
1635              const element = document.createElement("script");
1636              element.setAttribute("src", url);
1637              element.setAttribute("id", "__cn_generic_script__" + result.clientId);
1638              document.body.appendChild(element);
1639          } else {
1640              var cartModel = window.connectif.getCartModel();
1641              window.connectif.managed.sendEvents([], {cart: cartModel})
1642          }
1643      }
1644
1645      function addTags(innerHTML, elementToRemove = null) {
1646        if (!!innerHTML) {
1647            if (elementToRemove) {
1648                let elementToRemoveNode = document.querySelector(elementToRemove);
1649                if (elementToRemoveNode) {
1650                    elementToRemoveNode.remove();
1651                }
1652            }
1653
1654          let element = document.createElement("div");
1655          element.style.display = "none";
1656          element.innerHTML = innerHTML;
1657          document.body.appendChild(element);
1658        }
1659      }
1660
1661      function fetchConnectif() {
1662        const url = 'https://www.farma.it/connectif/tags/ajaxconnectiftags' + '?' + Date.now().toString(36) + Math.random().toString(36).substr(2);
1663
1664        fetch(url, {
1665          method: "GET",
1666          headers: {
1667            "Content-Type": "application/json",
1668              'Cache-Control': 'no-cache, no-store, must-revalidate',
1669              'Pragma': 'no-cache',
1670              'Expires': '0',
1671              'X-Requested-With': 'XMLHttpRequest'
1672          }
1673        })
1674        .then(response => response.json())
1675        .then(result => {
1676          addTags(result.renderedClientInfo, '.cn_client_info');
1677          addTags(result.renderedCart, '.cn_cart');
1678          addTags(result.renderedNewsletter, '.cn_newsletter_subscribe');
1679
1680          if (
1681            document.readyState === "complete" ||
1682            document.readyState === "interactive"
1683          ) {
1684            addClientScript(result);
1685          } else {
1686            document.addEventListener(
1687              "DOMContentLoaded",
1688              addClientScript.bind(null, result)
1689            );
1690          }
1691        })
1692        .catch(error => console.error('Error:', error));
1693      }
1694
1695        window.addEventListener('private-content-loaded', (e) => {
1696            //fetch Connecitf only at first visit or whenever cart is updated (add to cart, remove from cart, qty update)
1697            var cartSummary = 0;
1698            if (e.detail && e.detail.data && e.detail.data.cart && e.detail.data.cart.summary_count) {
1699                cartSummary = e.detail.data.cart.summary_count;
1700            }
1701            if (window.CONNECTIF_CART_SUMMARY === null || cartSummary !== window.CONNECTIF_CART_SUMMARY)  {
1702                fetchConnectif();
1703                window.CONNECTIF_CART_SUMMARY = cartSummary;
1704            }
1705        });
1706    })();
1707</script>
1707
1708<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
1709   contentarea"
1710   href="#contentarea">
1711    <span>
1712        Salta al contenuto    </span>
1713</a>
1714<script>
1715    function initHeader () {
1716        return {
1717            cart: {},
1718            fixedPosition: 50,
1719            fixedClass: 'fixed-header',
1720            getData(data) {
1721                if (data.cart) { this.cart = data.cart }
1722            },
1723            getCartItemsCountLabel() {
1724                if(this.cart && this.cart.summary_count){
1725                    return (this.cart.summary_count > 99)? '99+' : `${this.cart.summary_count}`
1726                }
1727                return '0';
1728            },
1729            fixedHeader() {
1730                if (window.scrollY > this.fixedPosition) {
1731                    document.body.classList.add(this.fixedClass);
1732                } else {
1733                    document.body.classList.remove(this.fixedClass);
1734                }
1735            },
1736            bodyScroll(removeScroll) {
1737                const body = document.querySelector('body');
1738                if (!document.querySelector("#maincontent > .dfd-root")) {
1739                    if (removeScroll) {
1740                        body.classList.add('overflow-hidden');
1741                    } else {
1742                        body.classList.remove('overflow-hidden');
1743                    }
1744                }
1745            }
1746        }
1747    }
1748</script>
1748
1749<div id="header"
1750     class="relative w-full"
1751     :class="searchOpened ? '' : 'z-30'"
1752     x-data="{...initHeader(), ...{searchOpened: false}}"
1753     @live-search-state-changed.window="searchOpened = $event.detail; bodyScroll(searchOpened)"
1754     @private-content-loaded.window="getData(event.detail.data)"
1755     @scroll.window="fixedHeader()"
1756>
1757    <div class="content w-full bg-white shadow-lg border-b border-primary-darker" :class="searchOpened ? 'z-40' : ''">
1758        <div class="container flex flex-wrap items-center justify-between w-full pt-4 mx-auto mt-0">
1759            <!-- Logo -->
1760            <div class="order-2 flex-1 lg:flex-none w-auto">
1761    <a class="flex items-center justify-center lg:justify-start text-xl font-medium tracking-wide text-gray-800
1762        no-underline hover:no-underline font-title "
1763       href="https://www.farma.it/"
1764       title=""
1765       aria-label="store logo">
1766        <img src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/logo.svg"
1767             style="height: 60px;"
1768             title=""
1769             alt=""
1770            width="253"            height="70"        />
1771            </a>
1772</div>
1773
1774            <!-- Main Navigation -->
1775            
1776
1777<div x-data="initMenuMobile_6ac924bac94ac()"
1778     x-defer="intersect"
1779     x-intersect.once="isActive = true; $watch('open', value => { fetchData() })"
1780     class="z-20 order-1 navigation lg:hidden"
1781>
1782    <template x-if="isActive">
1783        <div class="flex items-baseline justify-between menu-icon mr-3">
1784            <div class="flex justify-end w-full">
1785                <a @click="$dispatch('toggle-mobile-menu6ac924bac94ac')"
1786                   class="flex items-center justify-center cursor-pointer">
1787                    <span class="bg-[#6328E035] rounded-full text-secondary p-2">
1788                        <svg xmlns="http://www.w3.org/2000/svg" id="Livello_1" viewBox="0 0 24 17.44" width="14" height="14" role="img">
1789    <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"/>
1790<title>menu</title></svg>
1791                    </span>
1792                </a>
1793            </div>
1794        </div>
1795    </template>
1796    <!-- mobile -->
1797    <template x-if="isActive">
1798        <div @load.window="setActiveMenu($root)"
1799         class="bg-container-lighter h-screen overflow-x-hidden overflow-y-auto fixed top-0 left-0 w-full"
1800         :class="{'' : open}"
1801         @toggle-mobile-menu6ac924bac94ac.window="open = !open"
1802         @keydown.window.escape="open=false"
1803         x-cloak
1804         x-show="open"
1805         x-transition:enter="transform transition ease-in-out duration-300"
1806         x-transition:enter-start="-translate-x-full"
1807         x-transition:enter-end="translate-x-0"
1808         x-transition:leave="transform transition ease-in-out duration-300"
1809         x-transition:leave-start="translate-x-0"
1810         x-transition:leave-end="-translate-x-full">
1811
1812        <div class="flex items-baseline justify-between menu-icon shadow-md">
1813            <span class="font-bold font-baloo-bhaina text-primary px-4 pt-4 pb-3 w-full text-center text-xl"  :class="{
1814                    'hidden' : panelLevel > 0
1815                }">Menu</span>
1816            <a @click="$dispatch('toggle-mobile-menu6ac924bac94ac')"
1817               class="absolute z-10 top-0 right-0 cursor-pointer mt-0.5 p-5 pr-4"
1818            >
1819                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12" role="img">
1820    <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"/>
1821<title>x</title></svg>
1822            </a>
1823        </div>
1824
1825        <nav class="hidden w-full duration-150 text-base ease-in-out transform border-t transition-display border-container"
1826             :class="{ 'hidden' : !open }">
1827
1828
1829            <div class="submenu-top mt-4">
1830                
1831<div class="level-0">
1832        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
1833          :class="{
1834                    '-translate-x-full' : panelLevel > '0',
1835                    'translate-x-0' : panelLevel <= '0'
1836                }">
1837        <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'>
1838                <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" />
1839            </span>
1840                    <span>Raccolta Punti Farma Lovers</span>
1841        </a>            </span>
1842
1843    </div>
1844
1845<div class="level-0">
1846        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
1847          :class="{
1848                    '-translate-x-full' : panelLevel > '0',
1849                    'translate-x-0' : panelLevel <= '0'
1850                }">
1851        <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'>
1852                <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" />
1853            </span>
1854                    <span>Fino al -10% sui prodotti cosmetici</span>
1855        </a>            </span>
1856
1857    </div>
1858
1859<div class="level-0">
1860        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
1861          :class="{
1862                    '-translate-x-full' : panelLevel > '0',
1863                    'translate-x-0' : panelLevel <= '0'
1864                }">
1865        <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'>
1866                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/phone-duotone.svg" alt="Richiamami" />
1867            </span>
1868                    <span>Richiamami</span>
1869        </a>            </span>
1870
1871    </div>
1872            </div>
1873
1874            <!-- LEVEL 0 -->
1875            <div class="level-0 mt-4">
1876                <div @click="togglePanelActiveId('root')" class="flex items-center transition-transform duration-150 ease-in-out transform"
1877                      :class="{
1878                    '-translate-x-full' : panelLevel > 0,
1879                    'translate-x-0' : panelLevel <= 0
1880                }">
1881                    <div class="w-full cursor-pointer level-0 px-3  ">
1882                        <div class="px-4 pt-3 pb-2 flex justify-between items-center text-secondary bg-tertiary-darker/10 rounded-xl">
1883                            <span class="font-bold text-lg font-baloo-bhaina">
1884                                Categorie                            </span>
1885                            <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">
1886  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1887<title>chevron-right</title></svg>
1888                        </div>
1889                    </div>
1890                </div>
1891                <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"
1892                     :class="{
1893                    'translate-x-full h-0' : !isPanelActive('root'),
1894                    'translate-x-0 h-screen overflow-y-auto' : isPanelActive('root')
1895                }"
1896                >
1897                    <template x-if="isLoading && $store.externalScriptsInit">
1898    <div class="absolute bg-white/60 z-10 h-full w-full flex items-center justify-center">
1899        <div class="flex items-center">
1900            <!-- loading icon -->
1901            <svg class="animate-spin h-5 w-5 text-gray-600" xmlns="http://www.w3.org/2000/svg" fill="none"
1902                 viewBox="0 0 24 24">
1903                <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
1904                <path class="opacity-75" fill="currentColor"
1905                      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">
1906                </path>
1907            </svg>
1908            <!-- end loading icon -->
1909        </div>
1910    </div>
1911</template>
1912                    <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"
1913                       @click="removePanelActiveId('root')"
1914                       :class="{ 'sticky top-0 left-0 right-0 z-20': isPanelActive('root') && panelLevel <= 1 }"
1915                    >
1916                        <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">
1917    <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"/>
1918<title>arrow-back</title></svg>
1919                        <span class="ml-4">
1920                            Categorie                        </span>
1921                    </a>
1922                    <template x-for="(item, index) in menuData" :key="item.id">
1923                        <!-- LEVEL 1 -->
1924                        <div class="level-1">
1925                            <span class="flex items-center transition-transform duration-150 ease-in-out transform px-4 py-2 font-bold font-baloo-bhaina"
1926                                  :class="{
1927                                    '-translate-x-full h-0 overflow-hidden' : panelLevel > 1,
1928                                    'translate-x-0' : panelLevel <= 1
1929                                }"
1930                            >
1931                                <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">
1932                                    <template x-if="item.icon">
1933                                        <template x-if="item.icon_content">
1934                                            <span x-html="item.icon_content" class='menu-icon mr-4 inline-block'></span>
1935                                        </template>
1936                                        <template x-if="!item.icon_content">
1937                                            <span x-show="item.icon" class='menu-icon mr-4 inline-block'><img x-bind:src="item.icon" x-bind:alt="item.label" /></span>
1938                                        </template>
1939                                    </template>
1940                                    <span x-text="item.label"></span>
1941                                </a>
1942                                <template x-if="item.submenu && item.submenu.children">
1943                                    <span class="block"
1944                                          @click="togglePanelActiveId(item.id)"
1945                                    >
1946                                        <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">
1947  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1948<title>chevron-right</title></svg>
1949                                     </span>
1950                                </template>
1951                            </span>
1952                            <template x-if="item.submenu && item.submenu.children">
1953                                <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"
1954                                     :class="{
1955                                        'translate-x-full h-0' : !isPanelActive(item.id),
1956                                        'translate-x-0 h-screen' : isPanelActive(item.id),
1957                                        'overflow-y-auto': isPanelActive(item.id) && panelLevel <= 2
1958                                    }"
1959                                >
1960                                    <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"
1961                                       @click="removePanelActiveId(item.id)"
1962                                       :class="{ 'sticky top-0 left-0 right-0 z-20': isPanelActive(item.id) && panelLevel <= 2 }"
1963                                    >
1964                                        <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">
1965    <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"/>
1966<title>arrow-back</title></svg>
1967                                        <span class="ml-4" x-text="item.label"></span>
1968                                    </a>
1969                                    <a x-bind:href="item.link"
1970                                       x-bind:title="item.label"
1971                                       class="order-1 flex items-center w-full px-7 py-1 text-[15px] cursor-pointer bg-container-lighter underline text-secondary gap-1"
1972                                    >
1973                                        <span>Vedi tutti</span>
1974                                        <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">
1975  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1976<title>chevron-right</title></svg>
1977                                    </a>
1978                                    <template x-for="child in item.submenu.children">
1979                                        <template x-for="(item, index) in child">
1980                                            <template x-if="item.type && item.type == 'category-item'">
1981                                                <!-- LEVEL 2 -->
1982                                                <div class="level-2" :class="{'order-0': item.type == 'custom_list', 'order-1': item.type != 'custom_list'}">
1983                                                    <span class="flex items-center transition-transform duration-150 ease-in-out transform"
1984                                                          :class="{
1985                                                            'font-bold': item.type == 'custom_list',
1986                                                            '-translate-x-full' : panelLevel > 2,
1987                                                            'translate-x-0' : panelLevel <= 2
1988                                                        }"
1989                                                    >
1990                                                        <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">
1991                                                            <span x-text="item.label"></span>
1992                                                        </a>
1993                                                        <template x-if="item.children">
1994                                                            <span class="block"
1995                                                                  @click="togglePanelActiveId(item.id)"
1996                                                            >
1997                                                                <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">
1998  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1999<title>chevron-right</title></svg>
2000                                                             </span>
2001                                                        </template>
2002                                                    </span>
2003
2004                                                    <template x-if="item.children">
2005                                                        <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"
2006                                                             :class="{
2007                                                                'translate-x-full h-0' : !isPanelActive(item.id),
2008                                                                'translate-x-0 h-screen overflow-y-auto' : isPanelActive(item.id)
2009                                                            }"
2010                                                        >
2011                                                            <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"
2012                                                               @click="removePanelActiveId(item.id)"
2013                                                               :class="{ 'sticky top-0 left-0 right-0 z-20': isPanelActive(item.id) }"
2014                                                            >
2015                                                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 20.57" width="16" height="16" role="img">
2016    <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"/>
2017<title>arrow-back</title></svg>
2018                                                                <sp
2018an class="ml-4" x-text="item.label"></span>
2019                                                            </a>
2020                                                            <template x-for="(item, index) in item.children" :key="index">
2021                                                                <template x-if="item.type && item.type != 'block'">
2022
2023                                                                        <div class="level-3">
2024                                                                            <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2025                                                                                  :class="{
2026                                                                                    '-translate-x-full' : panelLevel > 3,
2027                                                                                    'translate-x-0' : panelLevel <= 3
2028                                                                                }"
2029                                                                            >
2030                                                                                <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">
2031                                                                                    <span x-text="item.label"></span>
2032                                                                                </a>
2033                                                                            </span>
2034                                                                        </div>
2035
2036                                                                    </template>
2037                                                            </template>
2038                                                        </div>
2039                                                    </template>
2040                                                </div>
2041
2042                                            </template>
2043                                        </template>
2044                                    </template>
2045                                </div>
2046                            </template>
2047                        </div>
2048                    </template>
2049                </div>
2050            </div>
2051
2052            <div class="transition-transform duration-150 ease-in-out transform" :class="{ '-translate-x-full' : panelLevel > 0, 'translate-x-0' : panelLevel <= 0 }">
2053                <div class="font-bold px-7 mt-5 mb-2">
2054                    Collegamenti utili                </div>
2055                
2056<div class="level-0">
2057        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2058          :class="{
2059                    '-translate-x-full' : panelLevel > '0',
2060                    'translate-x-0' : panelLevel <= '0'
2061                }">
2062        <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>
2063        </a>            </span>
2064
2065    </div>
2066
2067<div class="level-0">
2068        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2069          :class="{
2070                    '-translate-x-full' : panelLevel > '0',
2071                    'translate-x-0' : panelLevel <= '0'
2072                }">
2073        <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>
2074        </a>            </span>
2075
2076    </div>
2077
2078<div class="level-0">
2079        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2080          :class="{
2081                    '-translate-x-full' : panelLevel > '0',
2082                    'translate-x-0' : panelLevel <= '0'
2083                }">
2084        <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">
2084                    <span>Coupon</span>
2085        </a>            </span>
2086
2087    </div>
2088
2089<div class="level-0">
2090        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2091          :class="{
2092                    '-translate-x-full' : panelLevel > '0',
2093                    'translate-x-0' : panelLevel <= '0'
2094                }">
2095        <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>
2096        </a>            </span>
2097
2098    </div>
2099
2100<div class="level-0">
2101        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2102          :class="{
2103                    '-translate-x-full' : panelLevel > '0',
2104                    'translate-x-0' : panelLevel <= '0'
2105                }">
2106        <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>
2107        </a>            </span>
2108
2109    </div>
2110
2111<div class="level-0">
2112        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2113          :class="{
2114                    '-translate-x-full' : panelLevel > '0',
2115                    'translate-x-0' : panelLevel <= '0'
2116                }">
2117        <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>
2118        </a>            </span>
2119
2120    </div>
2121
2122<div class="level-0">
2123        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2124          :class="{
2125                    '-translate-x-full' : panelLevel > '0',
2126                    'translate-x-0' : panelLevel <= '0'
2127                }">
2128        <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'>
2129                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/tv-warning.svg" alt="Podcast" />
2130            </span>
2131                    <span>Podcast</span>
2132        </a>            </span>
2133
2134    </div>
2135
2136<div class="level-0">
2137        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2138          :class="{
2139                    '-translate-x-full' : panelLevel > '0',
2140                    'translate-x-0' : panelLevel <= '0'
2141                }">
2142        <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>
2143        </a>            </span>
2144
2145    </div>
2146
2147                <!-- BLOCK customer-menu-mobile -->
2148<div class="w-full px-3 my-3" x-data="initCustomerMenuMobile()" @private-content-loaded.window="getData(event.detail.data)">
2149    <template x-if="isLoggedIn()">
2150        <a
2151                href="https&#x3A;&#x2F;&#x2F;www.farma.it&#x2F;customer&#x2F;account&#x2F;"
2152                id="customer-menu-mobile"
2153                class="px-4 pt-3 pb-2 flex justify-start gap-3 items-center bg-category-lighter rounded-xl"
2154                aria-label="Il&#x20;mio&#x20;Account"
2155        >
2156            <span class="relative block">
2157                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" aria-hidden="true">
2158    <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"/>
2159</svg>
2160            </span>
2161            <span class="font-bold text-lg font-baloo-bhaina truncate">
2162                <span>Ciao, </span>
2163                <span x-text="customer.firstname"></span>
2164            </span>
2165            <span class="relative bottom-0.5 whitespace-nowrap block ml-auto text-[15px] font-medium">Il mio Account</span>
2166        </a>
2167    </template>
2168    <template x-if="!isLoggedIn()">
2169        <span>
2170            <a
2171                    href="https&#x3A;&#x2F;&#x2F;www.farma.it&#x2F;customer&#x2F;account&#x2F;"
2172                    id="customer-menu-mobile"
2173                    class="px-4 py-3 flex justify-between gap-3 items-center bg-category-lighter rounded-xl"
2174                    aria-label="Il&#x20;mio&#x20;Account"
2175            >
2176                <span class="relative block">
2177                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" aria-hidden="true">
2178    <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"/>
2179</svg>
2180                </span>
2181                <span class="label font-medium text-[15px]">
2182                    <span>Accedi&#x20;&#x2F;&#x20;Registrati</span>
2183                </span>
2184            </a>
2185        </span>
2186    </template>
2187</div>
2188<!-- /BLOCK customer-menu-mobile -->
2189                <div class="font-bold px-7 mt-5 mb-2">
2190                    Servizi clienti                </div>
2191                <div class="submenu-bottom mb-4">
2192                    
2193<div class="level-0">
2194        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2195          :class="{
2196                    '-translate-x-full' : panelLevel > '0',
2197                    'translate-x-0' : panelLevel <= '0'
2198                }">
2199        <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'>
2200                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/information-circle.svg" alt="Serve&#x20;aiuto&#x3F;" />
2201            </span>
2202                    <span>Serve aiuto?</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="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'>
2214                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/chat.svg" alt="Contattaci" />
2215            </span>
2216                    <span>Contattaci</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="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'>
2228                <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" />
2229            </span>
2230                    <span>Traccia il tuo pacco</span>
2231        </a>            </span>
2232
2233    </div>
2234
2235<div class="level-0">
2236        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2237          :class="{
2238                    '-translate-x-full' : panelLevel > '0',
2239                    'translate-x-0' : panelLevel <= '0'
2240                }">
2241        <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'>
2242                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/credit-card.svg" alt="Pagamenti" />
2243            </span>
2244                    <span>Pagamenti</span>
2245        </a>            </span>
2246
2247    </div>
2248
2249<div class="level-0">
2250        <span class="flex items-center transition-transform duration-150 ease-in-out transform"
2251          :class="{
2252                    '-translate-x-full' : panelLevel > '0',
2253                    'translate-x-0' : panelLevel <= '0'
2254                }">
2255        <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'>
2256                <img class="w-4.5 h-4.5" src="https://www.farma.it/media/dnafactory/megamenu/truck.svg" alt="Spedizioni" />
2257            </span>
2258                    <span>Spedizioni</span>
2259        </a>            </span>
2260
2261    </div>
2262                </div>
2263            </div>
2264
2265            
2266        </nav>
2267    </div>
2268    </template>
2269</div>
2270
2271<script>
2272    'use strict';
2273
2274    const initMenuMobile_6ac924bac94ac = () => {
2275        return {
2276            open: false,
2277            isActive: false,
2278            isLoaded: false,
2279            mobilePanelActiveId: [],
2280            panelLevel: 0,
2281            menuData: null,
2282            isLoading: false,
2283            currentUrl: window.location.href.split('?')[0],
2284            isPanelActive(id){
2285                return this.mobilePanelActiveId.includes(id);
2286            },
2287            setPanelActiveId(id, replace = false){
2288                if(replace){
2289                    this.clearPanelActiveId();
2290                }
2291                if(!this.isPanelActive(id))
2292                    this.mobilePanelActiveId.push(id);
2293                id && (this.panelLevel += 1);
2294            },
2295            removePanelActiveId(id){
2296                let i = this.mobilePanelActiveId.indexOf(id);
2297                if(i >= 0)
2298                    this.mobilePanelActiveId.splice(i, 1);
2299                this.panelLevel -= 1;
2300            },
2301            togglePanelActiveId(id, event){
2302                if(event)
2303                    event.preventDefault();
2304                if(this.isPanelActive(id))
2305                    this.removePanelActiveId(id);
2306                else
2307                    this.setPanelActiveId(id);
2308            },
2309            clearPanelActiveId(){
2310                this.mobilePanelActiveId =[];
2311            },
2312            hasSubmenu(item){
2313                return item.submenu;
2314            },
2315            setActiveMenu(menuNode) {
2316                Array.from(menuNode.querySelectorAll('a')).filter(link => {
2317                    return link.href === window.location.href.split('?')[0];
2318                }).map(item => {
2319                    this.addClassToParent(item);
2320                });
2321            },
2322            addClassToParent(item){
2323                if(item) {
2324                    item.classList.add('underline')
2325                    parent = item.closest(`div.class-${this.panelLevel - 1}`)
2326                    parent && (parent !== item) && this.addClassToParent(parent.querySelector('span > a'));
2327                }
2328            },
2329            dispatchMessage(type, message, timeout) {
2330                typeof window.dispatchMessages && window.dispatchMessages(
2331                    [{
2332                        type: type,
2333                        text: message,
2334                    }],
2335                    timeout
2336                );
2337            },
2338            fetchData(){
2339                this.$dispatch('screen-lock',this.open);
2340                this.isLoaded = true;
2341                if (!this.menuData && this.open) {
2342                    this.isLoading = true;
2343                    fetch(
2344                        'https://www.farma.it/megamenu/get/json/id/1/limit/0/level/2/',
2345                        {
2346                            headers: {contentType: 'application/json'},
2347                        }
2348                    ).then(response => {
2349                        if (response.ok) {
2350                            return response.json();
2351                        } else {
2352                            this.dispatchMessage('error', response);
2353                            console.warn("GET request failed", response);
2354                        }
2355                    })
2356                    .then(data => {
2357                        this.menuData = data;
2358                        this.isLoading = false;
2359                        this.$nextTick(() => {
2360                            this.setActiveMenu(this.$root);
2361                        });
2362                    });
2363                }
2364            }
2365        }
2366    }
2367</script>
2367
2368
2369
2370<nav class="hidden hierarchy">
2371    <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>
2372
2373<div x-data="initMenuDesktop_6ac924bad7544()"
2374     x-defer="intersect"
2375     x-intersect.once="isActive = true; $watch('open', value => { fetchData() })"
2376     class="order-5 navigation first hidden lg:flex w-full main lg:mt-3"
2377     :class="{ 'z-20': open }"
2378>
2379    <!-- desktop -->
2380    <div x-ref="nav-desktop"
2381         @load.window="setActiveMenu($root)"
2382         class="hidden lg:block lg:relative lg:min-h-0 lg:w-auto">
2383        <nav class="w-full duration-150 ease-in-out transform flex justify-start w-auto min-h-0 transition-display my-2">
2384            <div class="mr-6 level-top nav-side">
2385                <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')">
2386                    <span class="bg-[#6328E035] rounded-full text-secondary p-1.5">
2387                        <svg xmlns="http://www.w3.org/2000/svg" id="Livello_1" viewBox="0 0 24 17.44" width="12" height="12" role="img">
2388    <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"/>
2389<title>menu</title></svg>
2390                    </span>
2391                    <span class="my-auto">Categorie</span>
2392                </span>
2393            </div>
2394            <div class="nav-menu flex">
2395                
2396<div class="relative mx-2 level-0 level0 nav-1 first page-item level-top">
2397        <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>
2398    </a>
2399    </div>
2400
2401<div class="relative mx-2 level-0 level0 nav-2 custom-item level-top">
2402        <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>
2403    </a>
2404    </div>
2405
2406<div class="relative mx-2 level-0 level0 nav-3 page-item level-top">
2407        <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>
2408    </a>
2409    </div>
2410
2411<div class="relative mx-2 level-0 level0 nav-4 custom-item level-top">
2412        <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>
2413    </a>
2414    </div>
2415
2416<div class="relative mx-2 level-0 level0 nav-5 custom-item level-top">
2417        <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>
2418    </a>
2419    </div>
2420
2421<div class="relative mx-2 level-0 level0 nav-6 custom-item level-top">
2422        <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>
2423    </a>
2424    </div>
2425
2426<div class="relative mx-2 level-0 level0 nav-7 custom-item level-top">
2427        <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 ">                    
2428<span class="menu-icon flex gap-2 items-center relative">
2429    <?xml version="1.0" encoding="UTF-8"?>
2430<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>
2431                <span class="leading-none">Podcast</span>
2432    </a>
2433    </div>
2434
2435<div class="relative mx-2 level-0 level0 nav-8 last custom-item level-top">
2436        <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>
2437    </a>
2438    </div>
2439            </div>
2440        </nav>
2441    </div>
2442    <template x-if="isActive">
2443        <section x-cloak id="main-menu_6ac924bad7544"
2444             @toggle-main-menu.window="open = !open"
2445             @keydown.window.escape="open=false"
2446    >
2447        <div role="dialog"
2448             x-ref="dialog"
2449             aria-label="Menu"
2450             aria-labelledby="menu-drawer-title"
2451             aria-modal="true"
2452             class="fixed inset-y-0 left-0 z-30 flex">
2453            <div class="relative z-20 w-screen"
2454                 x-ref="dialogContainer"
2455                 x-show="open"
2456                 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700"
2457                 x-transition:enter-start="-translate-x-full"
2458                 x-transition:enter-end="translate-x-0"
2459                 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700"
2460                 x-transition:leave-start="translate-x-0"
2461                 x-transition:leave-end="-translate-x-full"
2462            >
2463                <div class="flex flex-col h-full pb-6 bg-container-gray shadow-inner">
2464                    <template x-if="isLoading && $store.externalScriptsInit">
2465    <div class="absolute bg-white/60 z-10 h-full w-full flex items-center justify-center">
2466        <div class="flex items-center">
2467            <!-- loading icon -->
2468            <svg class="animate-spin h-5 w-5 text-gray-600" xmlns="http://www.w3.org/2000/svg" fill="none"
2469                 viewBox="0 0 24 24">
2470                <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
2471                <path class="opacity-75" fill="currentColor"
2472                      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">
2473                </path>
2474            </svg>
2475            <!-- end loading icon -->
2476        </div>
2477    </div>
2478</template>
2479                    <div x-ref="dialogContent" class="h-full overflow-y-auto scrollbar scrollbar-thin scrollbar-track-transparent scrollbar-thumb-gray-3 w-full">
2480                        <template x-cloak x-for="(item, index) in menuData" :key="index">
2481                            <div class="level-1" :class="item.classes" @click="onMouseEnter(item, null, true)">
2482                                <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"
2483                                   :class="[ item.classes? item.classes.join(' '): '', isPanelActive(item.id)? 'fill-primary bg-tertiary-darker/10' : '']"
2484                                   :style="{ color: item.color }"
2485                                >
2486                                    <div class="ml-auto w-full max-w-[246px] flex items-center">
2487                                        <template x-if="item.icon">
2488                                            <template x-if="item.icon_content">
2489                                                <span x-html="item.icon_content" class='menu-icon mr-2.5 inline-block'></span>
2490                                            </template>
2491                                            <template x-if="!item.icon_content">
2492                                                <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>
2493                                            </template>
2494                                        </template>
2495                                        <span x-text="item.label"></span>
2496                                        <template x-if="hasSubmenu(item)">
2497                                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12.24 24" class="ml-auto" width="12" height="12" role="img">
2498    <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"/>
2499<title>arrow-right</title></svg>
2500                                        </template>
2501                                    </div>
2502                                </div>
2503                                <template x-if="hasSubmenu(item)">
2504                                    <template x-teleport="#main-menu-second-level_6ac924bad7544" x-data="{ submenu: item.submenu, item: item}">
2505                                        <div class="absolute top-0 left-0 h-[calc(100vh-100px)] z-10 px-6 py-2 pb-16 bg-white shadow-lg level1"
2506                                             x-init="$watch('open',(value, oldValue) => { !value && clearPanelActiveId() })"
2507                                             :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]') ]"
2508                                             x-show="isPanelActive(item.id)"
2509                                             x-transition:enter="transform transition ease-in-out duration-300"
2510                                             x-transition:enter-start="-translate-x-full"
2511                                             x-transition:enter-end="translate-x-0"
2512                                             x-transition:leave="transform transition ease-in-out duration-300"
2513                                             x-transition:leave-start="translate-x-0"
2514                                             x-transition:leave-end="-translate-x-full"
2515                                        >
2516                                            <template x-if="submenu.t">
2517                                                <div class="top_block column">
2518                                                    <div class="column-content" x-html="submenu.t"></div>
2519                                                </div>
2520                                            </template>
2521                                            <template x-if="submenu.l">
2522                                                <div class="left_block column">
2523                                                    <div class="column-content" x-html="submenu.l"></div>
2524                                                </div>
2525                                            </template>
2526
2527                                            <template x-if="submenu.children" x-data="{ children: submenu.children }">
2528                                                <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"
2529                                                     :class="{ 'col
2529-span-3 flex gap-2': ((!submenu.r && submenu.l) || (!submenu.l && submenu.r)) || (submenu.children && submenu.children.length > 1) }"
2530                                                >
2531                                                    <template x-for="(column,y) in children" :key="y">
2532                                                        <div :class="{ 'w-[210px] xl:w-[240px]' : y != children.length - 1, 'w-[210px] xl:w-[317px]': y == children.length - 1 }">
2533                                                            <template x-if="item.label && y == 0">
2534                                                                <div class="flex justify-between gap-3">
2535                                                                    <span class="font-bold text-primary mb-3 block" x-text="item.label"></span>
2536                                                                    <a x-bind:href="item.link" class="hover:underline text-sm text-secondary flex items-center gap-1 -top-1.5 relative">
2537                                                                        <span class="leading-none">Vedi tutti</span>
2538                                                                        <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">
2539  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
2540<title>chevron-right</title></svg>
2541                                                                    </a>
2542                                                                </div>
2543                                                            </template>
2544                                                            <template x-if="column.label && y != 0">
2545                                                                <span class="font-bold text-primary mb-3 block" x-text="column.label"></span>
2546                                                            </template>
2547                                                            <template x-if="column.html">
2548                                                                <div x-html="column.html"></div>
2549                                                            </template>
2550                                                            <template x-if="!column.html">
2551                                                                <template x-for="(child, i) in column" :key="i">
2552                                                                    <div class="relative block w-full">
2553                                                                        <template x-if="child.type == 'header'">
2554                                                                            <div class="font-bold text-primary mb-3 block" x-text="child.label"></div>
2555                                                                        </template>
2556                                                                        <template x-if="child.type != 'header'">
2557                                                                            <template x-if="child.type != 'custom_list'">
2558                                                                                <div class="relative block w-full py-0.5 my-0.5" :class="child.classes">
2559                                                                                    <template x-if="child.html">
2560                                                                                        <div x-html="child.html"></div>
2561                                                                                    </template>
2562                                                                                    <template x-if="!child.html && child.type != 'custom_list'">
2563                                                                                        <a x-bind:href="child.link" class="hover:underline text-sm">
2564                                                                                            <span x-text="child.label"></span>
2565                                                                                        </a>
2566                                                                                    </template>
2567                                                                                </div>
2568                                                                            </template>
2569                                                                            <template x-if="child.type == 'custom_list'">
2570                                                                                <div class="brand-list">
2571                                                                                    <sp
2571an class="font-bold text-primary mb-4 block" x-text="child.label"></span>
2572                                                                                    <template x-for="(brand, i) in child.children" :key="i">
2573                                                                                        <div class="relative block w-full py-0.5 mt-0.5 brand-item">
2574                                                                                            <a x-bind:href="brand.link" class="hover:underline">
2575                                                                                                <span x-text="brand.label"></span>
2576                                                                                            </a>
2577                                                                                        </div>
2578                                                                                    </template>
2579                                                                                </div>
2580                                                                            </template>
2581                                                                        </template>
2582                                                                    </div>
2583                                                                </template>
2584                                                            </template>
2585                                                        </div>
2586                                                    </template>
2587                                                </div>
2588                                            </template>
2589
2590                                            <template x-if="submenu.r">
2591                                                <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"
2592                                                     x-show="isPanelActive(item.id)"
2593                                                     :class="(submenu.children && submenu.children.length < 1)? 'col-span-3' : 'col-span-2'"
2594                                                     x-transition:enter="ease-in-out duration-700"
2595                                                     x-transition:enter-start="opacity-0"
2596                                                     x-transition:enter-end="opacity-100"
2597                                                     x-transition:leave="ease-in-out duration-100"
2598                                                     x-transition:leave-start="opacity-100"
2599                                                     x-transition:leave-end="opacity-0"
2600                                                >
2601                                                    <div class="column-content" x-html="submenu.r"></div>
2602                                                </div>
2603
2604
2605                                            </template>
2606                                            <template x-if="submenu.b">
2607                                                <div class="bottom_block column">
2608                                                    <div class="column-content" x-html="submenu.b"></div>
2609                                                </div>
2610                                            </template>
2611                                        </div>
2612                                    </template>
2613                                </template>
2614                            </div>
2615                        </template>
2616                    </div>
2617                </div>
2618            </div>
2619            <div id="main-menu-second-level_6ac924bad7544" class="relative z-10 w-screen h-[calc(100vh-100px)]"
2620                 x-show="open">
2621                <div class="backdrop"
2622                     x-ref="backdrop"
2623                     x-show="open"
2624                     x-transition:enter="ease-in-out duration-500"
2625                     x-transition:enter-start="opacity-0"
2626                     x-transition:enter-end="opacity-100"
2627                     x-transition:leave="ease-in-out duration-500"
2628                     x-transition:leave-start="opacity-100"
2629                     x-transition:leave-end="opacity-0"
2630                     @click="open=false"
2631                     aria-label="Close panel"></div>
2632            </div>
2633        </div>
2634    </section>
2635    </template>
2636</div>
2637
2638<script>
2639    'use strict';
2640
2641    const initMenuDesktop_6ac924bad7544 = () => {
2642        return {
2643            isActive: false,
2644            open: false,
2645            hoverPanelActiveId: [],
2646            menuData: null,
2647            isLoading: false,
2648            currentUrl: window.location.href.split('?')[0],
2649            panelLevel: 0,
2650            isPanelActive(id){
2651                return this.hoverPanelActiveId.includes(id);
2652            },
2653            setPanelActiveId(id, replace = false){
2654                if(replace){
2655                    this.clearPanelActiveId();
2656                }
2657                if(!this.isPanelActive(id))
2658                    this.hoverPanelActiveId.push(id);
2659            },
2660            removePanelActiveId(id){
2661                let i = this.hoverPanelActiveId.indexOf(id);
2662                if(i >= 0)
2663                    this.hoverPanelActiveId.splice(i, 1);
2664            },
2665            clearPanelActiveId(){
2666                this.hoverPanelActiveId =[];
2667            },
2668            onMouseEnter(item, id = null, clear = false){
2669                if(this.hasSubmenu(item)){
2670                    this.setPanelActiveId(id? id : item.id, clear);
2671                }else{
2672                    this.clearPanelActiveId();
2673                }
2674            },
2675            hasSubmenu(item){
2676                return item.submenu;
2677            },
2678            setActiveMenu(menuNode) {
2679                return; // ignoriamo questa funzionalità per questo progetto
2680                Array.from(menuNode.querySelectorAll('a')).filter(link => {
2681                    return (link.href) && link.href === this.currentUrl;
2682                }).map(item => {
2683                    item.classList.add('underline');
2684                    item.closest('div.level1') &&
2685                    item.closest('div.level1').querySelector('a').classList.add('underline');
2686                });
2687            },
2688            dispatchMessage(type, message, timeout) {
2689                typeof window.dispatchMessages && window.dispatchMessages(
2690                    [{
2691                        type: type,
2692                        text: message,
2693                    }],
2694                    timeout
2695                );
2696            },
2697            setMenuStyles () {
2698                let header = document.querySelector('#header .content');
2699                let headerContent = header.querySelector('.container');
2700                let headerContentStyle = window.getComputedStyle(headerContent);
2701
2702                const topDialog = (header.offsetHeight + header.getBoundingClientRect().top) + 'px';
2703                this.$refs.dialog.style.top = topDialog;
2704                this.$refs.backdrop.style.top = topDialog;
2705                this.$refs.dialogContainer.style.width =
2706                    (parseInt(headerContentStyle.marginLeft) + parseInt(headerContentStyle.paddingLeft) + 282) + 'px';
2707            },
2708            fetchData(){
2709                // Calculate offset top
2710                this.setMenuStyles();
2711                // Fetch data
2712                this.$dispatch('screen-lock',this.open);
2713                if(!this.menuData && this.open){
2714                    this.isLoading = true;
2715                    fetch(
2716                        'https://www.farma.it/megamenu/get/json/id/1/limit/0/level/1/?1791567035',
2717                        {
2718                            headers: {contentType: 'application/json'},
2719                        }
2720                    ).then(response => {
2721                        if (response.ok) {
2722                            return response.json();
2723                        } else {
2724                            this.dispatchMessage('error', response.statusText);
2725                            console.warn("GET request failed", response);
2726                        }
2727                    })
2728                    .then(data => {
2729                        this.menuData = data;
2730                        this.isLoading = false;
2731                        this.$nextTick(() => {
2732                            this.setActiveMenu(document.getElementById('main-menu-second-level_6ac924bad7544'));
2733                        });
2734                    });
2735                }
2736            }
2737        }
2738    }
2739</script>
2739
2740
2741            <!-- Search -->
2742            <div class="order-4 lg:order-3 w-full lg:w-auto lg:flex-1"
2743                 :class="searchOpened ? 'z-40': ''"
2744                 id="search-content"
2745            >
2746                    <div class="mx-auto my-3 lg:my-0 search-container">
2747        <div class="supercontainer">
2748            <div id="algoliaAutocomplete" class="block block-search algolia-search-block algolia-search-input container py-2 mx-auto text-black hidden" ></div>
2749            <div id="panelContainer" class="relative" x-data="initAutocompleteInsight"></div>
2750            <div id="menu-open-search" class="control relative lg:mx-10" >
2751                <label for="search" class="block relative cursor-text">
2752                    <div class="input-search form-input pl-[38px] py-2 h-[36px] flex items-center" aria-hidden="true">
2753                        <span>Cerca all’interno della farmacia</span>
2754                    </div>
2755                    <div class="absolute top-0 left-0 py-2.5 lg:py-3 px-4 h-[42px] lg:h-[46px] pointer-events-none">
2756                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14" role="img">
2757    <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"/>
2758<title>search</title></svg>
2759                    </div>
2760                </label>
2761            </div>
2762
2763            <!-- Close button (left arrow on mobile, X on desktop) -->
2764            <button id="close-instant-search"
2765                    type="button"
2766                    class="instant-search-close"
2767                    aria-label="Close search"
2768                    title="Close search">
2769                <span class="icon-x"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16" role="img">
2770    <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"/>
2771<title>x</title></svg>
2772</span>
2773                <span class="icon-arrow">
2774                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 20.57" width="12" height="12">
2775                        <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"/>
2776                    </svg>
2777                </span>
2778            </button>
2779
2780            <!-- Reset button (clears input) shown on mobile -->
2781            <button id="reset-instant-search"
2782                    class="reset-instant-search"
2783                    aria-label="Clear search"
2784                    title="Clear search">
2785                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12" role="img">
2786    <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"/>
2787<title>x</title></svg>
2788            </button>
2789
2790            <div id="menu-search-icon" class="control relative">
2791                <input id="search"
2792                       x-ref="searchInput"
2793                       type="search"
2794                       enterkeyhint="search"
2795                       inputmode="search"
2796                       autocomplete="off"
2797                       name="q"
2798                       placeholder="Cerca&#x20;all&#x2019;interno&#x20;della&#x20;farmacia"
2799                       maxlength="128"
2800                       class="input-search form-input pl-[45px] lg:pl-[38px] py-2 h-[53px]"
2801                />
2802                <div class="hidden lg:block absolute top-[9px] left-0 py-2.5 px-4 h-[42px] lg:h-[46px]">
2803                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14" role="img">
2804    <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"/>
2805<title>search</title></svg>
2806                </div>
2807            </div>
2808            <div id="view-all-products" class="lg:hidden border-t">
2809                <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');}">
2810                    Vedi tutti i <span id="aa-count-mobile" class="mx-1"></span> prodotti
2811                </button>
2812            </div>
2813        </div>
2814    </div>
2815
2816    
2816<script>
2817        'use strict';
2818
2819        function initAutocompleteInsight() {
2820            return {
2821                bindClickEvent(element, eventName, objectID, indexName, position, queryId) {
2822                    try {
2823                        element.querySelector('.algoliasearch-autocomplete-hit')?.addEventListener("click", function () {
2824                            buildInsightsEventData(eventName, objectID, indexName, position, queryId);
2825                        });
2826                    } catch (e) {}
2827                }
2828            }
2829        }
2830
2831        document.addEventListener('DOMContentLoaded', function() {
2832            const searchEl = document.getElementById('search');
2833            if (!searchEl) return;
2834
2835            // delegate Enter/mobile submit logic to autocomplete.js bindings
2836            searchEl.addEventListener('click', function () {
2837                setTimeout(function () {
2838                    // After aa-Input is available, keep it in sync with #search value
2839                    function syncAaInput() {
2840                        const currentAaInput = document.querySelector('.aa-Input');
2841                        if (!currentAaInput || !('value' in currentAaInput)) return;
2842                        const newVal = searchEl.value ?? '';
2843                        if (currentAaInput.value !== newVal) {
2844                            currentAaInput.value = newVal;
2845                            // Notify Algolia/autocomplete about the programmatic change
2846                            currentAaInput.dispatchEvent(new Event('input', { bubbles: true }));
2847                            currentAaInput.dispatchEvent(new Event('change', { bubbles: true }));
2848                        }
2849                    }
2850
2851                    // Initial sync once available
2852                    syncAaInput();
2853                    // Keep syncing as the user types or changes the field
2854                    searchEl.addEventListener('input', syncAaInput);
2855                    searchEl.addEventListener('change', syncAaInput);
2856                }, 100);
2857            });
2858        });
2859    </script>
2859
2860    
2860<script>
2861        // Immediately apply open classes and show backdrop on click of #menu-open-search
2862        document.addEventListener('DOMContentLoaded', function() {
2863            var openTrigger = document.getElementById('menu-open-search');
2864            if (openTrigger) {
2865                openTrigger.addEventListener('click', function () {
2866                    try {
2867                        var panelContainer = document.getElementById('panelContainer');
2868                        var searchWrapper = document.getElementById('menu-search-icon');
2869                        var searchContainer = document.querySelector('.search-container');
2870                        var aaPanel = document.querySelector('.aa-Panel');
2871                        var bodyEl = document.body;
2872
2873                        if (panelContainer) panelContainer.classList.add('is-open');
2874                        if (searchWrapper) searchWrapper.classList.add('is-open');
2875                        if (searchContainer) searchContainer.classList.add('is-open');
2876                        if (aaPanel) aaPanel.classList.add('is-open');
2877                        if (bodyEl) bodyEl.classList.add('max-h-screen', 'lock-screen', 'overflow-hidden', 'instant-lock');
2878
2879                        // Pz8 per evitare flickering della ricerca
2880                        (function triggerSearchClicksOnce(el) {
2881                            if (!el) return;
2882
2883                            if (window.__algoliaSearchClicksTriggered) return;
2884                            window.__algoliaSearchClicksTriggered = true;
2885                            for (let i = 0; i < 100; i++) {
2886                                setTimeout(function () {
2887                                    let panel = document.querySelector('.aa-PanelLayout');
2888                                    if (panel) {
2889                                        i = 100;
2890                                        return;
2891                                    }
2892                                    if (window.__algoliaSearchClicksTriggered) {
2893                                        el.click();
2894                                    }
2895
2896                                }, i * 5);
2897                            }
2898                        })(document.getElementById('search'));
2899                    } catch (e) {
2900                        // swallow errors
2901                    }
2902                });
2903            }
2904
2905        });
2906    </script>
2906
2907    
2907<script>
2908        // Toggle 'is-empty' on .search-container only on 'change' when input remains empty and there are results
2909        document.addEventListener('DOMContentLoaded', function() {
2910            var searchContainer = document.querySelector('.search-container');
2911            if (!searchContainer) return;
2912
2913            function handleChange(e) {
2914                try {
2915                    var val = (e && e.target && typeof e.target.value === 'string') ? e.target.value.trim() : '';
2916                    if (val === '' && searchContainer.classList.contains('has-results')) {
2917                        searchContainer.classList.add('is-empty');
2918                    } else {
2919                        searchContainer.classList.remove('is-empty');
2920                    }
2921                } catch (err) {
2922                    // no-op
2923                }
2924            }
2925
2926            // Native search input
2927            var nativeInput = document.getElementById('search');
2928            if (nativeInput) {
2929                nativeInput.addEventListener('change', handleChange, { passive: true });
2930            }
2931
2932            // Algolia injected input may appear later; observe and bind once when present
2933            var aaBound = false;
2934            var tryBindAa = function() {
2935                if (aaBound) return;
2936                var aaInput = document.querySelector('.aa-Input');
2937                if (aaInput) {
2938                    aaInput.addEventListener('change', handleChange, { passive: true });
2939                    aaBound = true;
2940                }
2941            };
2942            // Try now and a little later in case of async initialization
2943            tryBindAa();
2944            var aaInterval = setInterval(function(){
2945                if (aaBound) { clearInterval(aaInterval); return; }
2946                tryBindAa();
2947            }, 200);
2948            setTimeout(function(){ clearInterval(aaInterval); }, 6000);
2949        });
2950    </script>
2950
2951            </div>
2952
2953            <!-- Buttons -->
2954            <div class="flex items-center gap-4 lg:gap-8 order-3 ml-3 lg:ml-0 lg:order-4">
2955                <!-- Static Block -->
2956                <div class="hidden lg:block">
2957                    <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">
2958    <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" width="20" height="20" role="img">
2959    <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>
2960<title>heroicons/outline/phone</title></svg>
2961
2962    <div class="text-xs font-medium">Richiamami</div>
2963    </a></div>                </div>
2964
2965                <!-- Customer Icon & Dropdown -->
2966                <!-- BLOCK header.customer -->
2967<div x-data="initHeaderCustomerMenu()" @private-content-loaded.window="getData(event.detail.data)">
2968
2969    <template x-if="isLoggedIn()">
2970        <a
2971                href="https&#x3A;&#x2F;&#x2F;www.farma.it&#x2F;customer&#x2F;account&#x2F;"
2972                id="customer-menu"
2973                class="flex items-center gap-2 hover:underline"
2974                aria-label="Il&#x20;mio&#x20;Account"
2975        >
2976        <span class="relative block">
2977            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" aria-hidden="true">
2978    <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"/>
2979</svg>
2980            <span x-text="customer.firstname.charAt(0)"
2981                  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"
2982            >0</span>
2983        </span>
2984            <span class="label hidden lg:block text-xs truncate text-center w-full leading-none font-medium">
2985                <span>Ciao, </span>
2986                <span x-text="customer.firstname"></span>
2987            </span>
2988        </a>
2989    </template>
2990
2991    <template x-if="!isLoggedIn()">
2992        <span>
2993            <a
2994                    href="https&#x3A;&#x2F;&#x2F;www.farma.it&#x2F;customer&#x2F;account&#x2F;"
2995                    id="customer-menu"
2996                    class="flex items-center gap-2 hover:underline"
2997                    aria-label="Il&#x20;mio&#x20;Account"
2998            >
2999                <span class="relative block">
3000                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" aria-hidden="true">
3001    <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"/>
3002</svg>
3003                </span>
3004                <span class="label hidden lg:block text-xs truncate text-center w-full leading-none font-medium">
3005                    <span>Accedi&#x20;&#x2F;&#x20;Registrati</span>
3006                </span>
3007            </a>
3008        </span>
3009    </template>
3010</div>
3011<script>
3012    function initHeaderCustomerMenu() {
3013        return {
3014            open: false,
3015            customer: {},
3016            getData(data) {
3017                if (data.customer) { this.customer = data.customer }
3018            },
3019            isLoggedIn(){
3020                return !!(this.customer.firstname);
3021            }
3022        }
3023    }
3024</script>
3024
3025<!-- /BLOCK header.customer -->
3026                <!-- Wishlist Icon -->
3027                
3028<a
3029    href="https://www.farma.it/wishlist/"
3030    class="relative hidden md:inline-flex btn bg-transparent border-transparent p-1"
3031    x-data="initWishlistHeader"
3032    @private-content-loaded.window="receiveWishlistData"
3033    aria-label="La&#x20;mia&#x20;lista&#x20;desideri"
3034    :aria-label="linkAriaLabel"
3035>
3036    <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>
3037    <template x-if="itemCount">
3038        <span
3039            x-text="itemCount"
3040            class="absolute -top-1.5 -right-1.5 px-2 py-1 rounded-full bg-primary text-on-primary text-xs
3041                font-semibold leading-none text-center uppercase tabular-nums"
3042            aria-hidden="true"
3043        ></span>
3044    </template>
3045</a>
3046
3047<script>
3048    function initWishlistHeader() {
3049        return {
3050            wishlistProducts: null,
3051            itemCount: 0,
3052            linkAriaLabel() {
3053                const countLabel = this.itemCount > 1
3054                    ? hyva.str('\u00251\u0020elementi', this.itemCount)
3055                    : hyva.str('\u00251\u0020elemento', this.itemCount);
3056                return `Wishlist\u0020Products (${countLabel})`;
3057            },
3058            receiveWishlistData() {
3059                const data = this.$event.detail.data;
3060                this.itemCount = data.wishlist ? parseInt(data.wishlist.counter) : 0;
3061            }
3062        }
3063    }
3064
3065    window.addEventListener('alpine:init', () => {
3066        Alpine.data('initWishlistHeader', initWishlistHeader);
3067    }, { once: true })
3068</script>
3068
3069
3070                <!-- Cart Icon -->
3071                <a id="menu-cart-icon"
3072                   @click.prevent.stop="$dispatch('toggle-cart',{});"                   class="flex items-center gap-2 hover:underline"
3073                   href="https://www.farma.it/checkout/cart/index/"
3074                >
3075                    <span class="relative block">
3076                        <svg xmlns="http://www.w3.org/2000/svg" id="Livello_1" viewBox="0 0 22.79 24" width="20" height="20" role="img">
3077    <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"/>
3078<title>shopping-cart</title></svg>
3079                        <span x-text="getCartItemsCountLabel"
3080                              class="absolute top-[-6px] right-[1px] text-xxs font-bold text-center text-sale rounded-full"
3081                        >0</span>
3082                    </span>
3083                    <span class="header-subtotal label hidden lg:inline text-sm leading-none font-bold">0,00 €</span>
3084                </a>
3085            </div>
3086        </div>
3087    </div>
3088
3089    <!-- Cart Drawer -->
3090    
3090<script>
3091    function initCartDrawer() {
3092        return {
3093            open: false,
3094            isLoading: false,
3095            cart: {},
3096            maxItemsToDisplay: 10,
3097            itemsCount: 0,
3098            totalCartAmount: 0,
3099            headerSubtotal: null,
3100            headerSubtotalSelector: '.header-subtotal',
3101            groupedData: {},
3102
3103            itemsCountLabel(){
3104                return (this.itemsCount > 99)? '99+' : `${this.itemsCount}`;
3105            },
3106            isVisible(){
3107                return (this.open && this.itemsCount > 0)
3108            },
3109            getData(data) {
3110                if (data.cart) {
3111                    this.cart = data.cart;
3112                    this.itemsCount = data.cart.items && data.cart.items.length || 0;
3113                    this.totalCartAmount = this.cart.summary_count;
3114                    this.setCartItems();
3115                    this.initGroupedData()
3116                }
3117                this.isLoading = false;
3118            },
3119            cartItems: [],
3120            getItemCountTitle() {
3121                return hyva.strf('(%0 di %1)', this.maxItemsToDisplay, this.itemsCount)
3122            },
3123            getHeaderSubtotal() {
3124                if (!this.headerSubtotal) {
3125                    this.headerSubtotal = document.querySelector(this.headerSubtotalSelector);
3126                }
3127
3128                return this.headerSubtotal;
3129            },
3130            setCartItems() {
3131                this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || [];
3132
3133                if (this.maxItemsToDisplay > 0) {
3134                    this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10));
3135                }
3136
3137                try {
3138                    var subtotal = (this.cart?.subtotal_incl_tax_discounted) ? this.cart.subtotal_incl_tax_discounted : this.cart.subtotal;
3139                    if (subtotal) {
3140                        this.getHeaderSubtotal().innerHTML = subtotal;
3141                    }
3142                } catch (e) {}
3143            },
3144            initGroupedData() {
3145                let self = this;
3146                try {
3147                    Object.values(this.cart['fake_grouped_parents']).forEac
3147h(function (parent) {
3148                        let price = 0.0000,
3149                            productIds = parent.product_ids.split(','),
3150                            groupedId = parent['grouped_id'];
3151                        self.groupedData[groupedId] = {
3152                            'price': price,
3153                            'items': []
3154                        };
3155                        productIds.forEach(function (productId) {
3156                            let product = self.cart.items.find((item) => item.product_id == productId);
3157                            if (product) {
3158                                self.groupedData[groupedId]['items'].push({
3159                                    'name': product['product_name'],
3160                                    'qty': product['qty']
3161                                });
3162                                price += product['product_price_value'] * product['qty'];
3163                            }
3164                        })
3165                        self.groupedData[groupedId]['price'] = hyva.formatPrice(price, false);
3166                    })
3167                } catch (e) {}
3168                console.log(this.groupedData);
3169            },
3170            deleteItemFromCart(itemId) {
3171                this.isLoading = true;
3172
3173                const formKey = hyva.getFormKey();
3174                const postUrl = BASE_URL + 'checkout/sidebar/removeItem/';
3175
3176                fetch(postUrl, {
3177                    "headers": {
3178                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
3179                    },
3180                    "body": "form_key=" + formKey + "&item_id=" + itemId,
3181                    "method": "POST",
3182                    "mode": "cors",
3183                    "credentials": "include"
3184                }).then(response => {
3185                    if (response.redirected) {
3186                        window.location.href = response.url;
3187                    } else if (response.ok) {
3188                        return response.json();
3189                    } else {
3190                        window.dispatchMessages && window.dispatchMessages([{
3191                            type: 'warning',
3192                            text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.'
3193                        }]);
3194                        this.isLoading = false;
3195                    }
3196                }).then(result => {
3197                    window.dispatchMessages && window.dispatchMessages([{
3198                        type: result.success ? 'success' : 'error',
3199                        text: result.success
3200                            ? 'Hai\u0020rimosso\u0020il\u0020prodotto.'
3201                            : result.error_message
3202                    }], result.success ? 5000 : 0)
3203                    window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
3204                });
3205            },
3206            deleteGroupedFromCart(groupedId) {
3207                let deleteButton = document.querySelector('#cart-drawer [data-grouped-id="' + groupedId + '"] .delete');
3208                if (deleteButton) {
3209                    deleteButton.click();
3210                }
3211            },
3212            getGroupedPrice(groupedId) {
3213                return this.groupedData[groupedId]['price'];
3214            }
3215        }
3216    }
3217</script>
3217
3218<section id="cart-drawer"
3219         x-data="initCartDrawer()"
3220         x-init="$watch('isVisible', value => $dispatch('screen-lock', value))"
3221         @private-content-loaded.window="getData($event.detail.data)"
3222         @toggle-cart.window="if(itemsCount > 0){open=true}"
3223         @keydown.window.escape="open=false"
3224         @cart-loading-start.window="isLoading=true"
3225         @cart-loading-stop.window="isLoading=false"
3226>
3227    <template x-if="cart && cart.summary_count">
3228        <div role="dialog"
3229             aria-labelledby="cart-drawer-title"
3230             aria-modal="true"
3231             @click.outside="open=false"
3232             class="fixed inset-y-0 right-0 z-30 flex max-w-full">
3233            <div class="backdrop"
3234                 x-show="open"
3235                 x-transition:enter="ease-in-out duration-500"
3236                 x-transition:enter-start="opacity-0"
3237                 x-transition:enter-end="opacity-100"
3238                 x-transition:leave="ease-in-out duration-500"
3239                 x-transition:leave-start="opacity-100"
3240                 x-transition:leave-end="opacity-0"
3241                 @click="open=false"
3242                 aria-label="Close panel"></div>
3243            <div class="relative w-screen max-w-[470px] shadow-2xl"
3244                 x-show="open"
3245                 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700"
3246                 x-transition:enter-start="translate-x-full"
3247                 x-transition:enter-end="translate-x-0"
3248                 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700"
3249                 x-transition:leave-start="translate-x-0"
3250                 x-transition:leave-end="translate-x-full"
3251            >
3252                <div
3253                    x-show="open"
3254                    x-transition:enter="ease-in-out duration-500"
3255                    x-transition:enter-start="opacity-0"
3256                    x-transition:enter-end="opacity-100"
3257                    x-transition:leave="ease-in-out duration-500"
3258                    x-transition:leave-start="opacity-100"
3259                    x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex p-2 mt-2">
3260                    <button @click="open=false" aria-label="Close panel"
3261                            class="p-2 text-primary transition duration-150 ease-in-out hover:text-secondary">
3262                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" role="img">
3263    <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"/>
3264<title>x</title></svg>
3265                    </button>
3266                </div>
3267                <div class="flex flex-col h-screen h-[100dvh] py-6 space-y-6 bg-white shadow-xl">
3268                    
3269                    <header class="px-4 sm:px-6">
3270                        <h2 id="cart-drawer-title" class="text-xl font-bold leading-6 text-primary">
3271                            Carrello                            <span class="items-total font-normal"
3272                                  x-text="'(' + totalCartAmount + ')'">
3273                            </span>
3274                        </h2>
3275                    </header>
3276
3277                    
3278                    <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">
3279                        <template x-for="parent in cart.fake_grouped_parents">
3280                            <div class="flex items-start p-3 -m-3 space-x-4">
3281                                <a :href="parent.url" class="w-1/4">
3282                                    <img
3283                                        :src="parent.image"
3284                                        width="78"
3285                                        height="78"
3286                                        loading="lazy"
3287                                    />
3288                                </a>
3289                                <div class="w-3/4">
3290                                    <div>
3291                                        <p class="text-sm">
3292                                            <span x-html="parent.name"></span>
3293                                        </p>
3294                                    </div>
3295                                    <div class="mt-2">
3296                                        <template x-for="child_item in groupedData[parent.grouped_id].items">
3297                                            <div class="font-body-sm font-sm text-gray-1">
3298                                                <span x-html="child_item.qty + 'x ' + child_item.name"></span>
3299                                            </div>
3300                                        </template>
3301                                    </div>
3302                                    <p class="flex mt-2">
3303                                        <span>
3304                                            <span class="price-including-tax">
3305                                                <span class="minicart-price">
3306                                                    <span class="price" x-html="getGroupedPrice(parent.grouped_id)"></span>
3307                                                </span>
3308                                            </span>
3309                                        </span>
3310                                    </p>
3311                                    <div class="pt-2 mt-2">
3312                                        <button class="inline-flex p-2 btn shadow-none bg-container-darker text-primary hover:shadow-lg hover:bg-secondary/10"
3313                                                @click="deleteGroupedFromCart(parent.grouped_id)"
3314                                        >
3315                                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21.96 24" class="p-0.5" width="20" height="20" role="img">
3316    <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"/>
3317<title>trash</title></svg>
3318                                        </button>
3319                                    </div>
3320                                </div>
3321                            </div>
3322                        </template>
3323                        <template x-for="item in cartItems">
3324                            <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">
3325                                <a :href="item.product_url" class="w-1/4">
3326                                    <img
3327                                        :src="item.product_image.src"
3328                                        :width="item.product_image.width"
3329                                        :height="item.product_image.height"
3330                                        loading="lazy"
3331                                    />
3332                                </a>
3333                                <div class="w-3/4 space-y-2">
3334                                    <div>
3335                                        <p class="text-sm">
3336                                            <span x-html="item.product_name"></span>
3337                                        </p>
3338                                        <p class="text-xs sr-only"><span x-html="item.product_sku"></span></p>
3339                                    </div>
3340                                    <template x-for="(option, i) in item.options">
3341                                        <span class="text-xxs text-primary-lighter inline-block before:inline-block before:mx-1 before:content-['-']"
3342                                              x-html="option.value"
3343                                              :class="{ 'before:content-none before:hidden': i == 0 }"
3344                                        ></span>
3345                                    </template>
3346                                    <div class="font-body-sm font-sm inline text-gray-1">
3347                                        Quantità:                                        <sp
3347an x-html="item.qty"></span>
3348                                    </div>
3349                                    <p class="flex">
3350                                        <span x-html="item.product_price"></span>
3351                                        <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>
3352                                    </p>
3353                                    <div class="pt-2">
3354                                        <a :href="item.configure_url"
3355                                           x-show="item.product_type !== 'grouped'"
3356                                           class="inline-flex p-2 mr-2 btn shadow-none bg-container-darker text-primary hover:shadow-lg hover:bg-secondary/10">
3357                                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="p-0.5" width="20" height="20" role="img">
3358    <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"/>
3359<title>Modifica</title></svg>
3360                                        </a>
3361                                        <button class="delete inline-flex p-2 btn shadow-none bg-container-darker text-primary hover:shadow-lg hover:bg-secondary/10"
3362                                                @click="deleteItemFromCart(item.item_id)"
3363                                        >
3364                                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21.96 24" class="p-0.5" width="20" height="20" role="img">
3365    <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"/>
3366<title>Elimina</title></svg>
3367                                        </button>
3368                                    </div>
3369
3370                                </div>
3371                            </div>
3372                        </template>
3373                    </div>
3374
3375                    
3376                    <div class="relative grid gap-6 px-4 pt-6 bg-white sm:gap-8 sm:px-6 !mt-auto">
3377                        <div class="w-full p-3 -m-3 space-x-4 text-right">
3378                            <p>Subtotale: <span class="font-bold text-xl" x-html="cart.subtotal_incl_tax_discounted"></span></p>
3379                        </div>
3380                        <div class="w-full p-3 -m-3 space-y-3">
3381                            <a href="https://www.farma.it/checkout/cart/"
3382                               class="block btn btn-primary">
3383                                Vai al Carrello                            </a>
3384                        </div>
3385                                            </div>
3386
3387                                    </div>
3388            </div>
3389            
3390<div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50"
3391     style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgb(255 255 255/0.60);"
3392     x-show="isLoading"
3393     x-transition:enter="ease-out duration-200"
3394     x-transition:enter-start="opacity-0"
3395     x-transition:enter-end="opacity-100"
3396     x-transition:leave="ease-in duration-200"
3397     x-transition:leave-start="opacity-100"
3398     x-transition:leave-end="opacity-0">
3399    <svg xmlns="http://www.w3.org/2000/svg" width="57" height="57" viewBox="0 0 38 38" stroke="#ffb590" class="text-primary" role="img">
3400    <g fill="none" fill-rule="evenodd">
3401        <g transform="translate(1 1)" stroke-width="2">
3402            <circle stroke="#ff6801" cx="18" cy="18" r="18"/>
3403            <path d="M36 18c0-9.94-8.06-18-18-18">
3404                <animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="1s" repeatCount="indef
3404inite"/>
3405            </path>
3406        </g>
3407    </g>
3408<title>loader</title></svg>
3409</div>
3410        </div>
3411    </template>
3412</section>
3413
3414    <!-- Authentication Pop-Up -->
3415    <!-- BLOCK authentication-popup -->
3415<script>
3416    function initAuthentication() {
3417        return {
3418            open: false,
3419            forceAuthentication: false,
3420            checkoutUrl: 'https://www.farma.it/checkout/index/',
3421            errors: 0,
3422            hasCaptchaToken: 0,
3423            displayErrorMessage: false,
3424            errorMessages: [],
3425            setErrorMessages: function setErrorMessages(messages) {
3426                this.errorMessages = [messages];
3427                this.displayErrorMessage = this.errorMessages.length;
3428            },
3429            submitForm: function () {
3430                // Do not rename $form, the variable is expected to be declared in the recaptcha output
3431                const $form = document.querySelector('#login-form');
3432                
3433                if (this.errors === 0) {
3434                    this.dispatchLoginRequest($form);
3435                }
3436            },
3437            onPrivateContentLoaded: function (data) {
3438                const isLoggedIn = data.customer && data.customer.firstname;
3439                if (data.cart && !isLoggedIn) {
3440                    this.forceAuthentication = !data.cart.isGuestCheckoutAllowed;
3441                }
3442            },
3443            redirectIfAuthenticated: function (event) {
3444                if (event.detail && event.detail.url) {
3445                    this.checkoutUrl = event.detail.url;
3446                }
3447                if (!this.forceAuthentication) {
3448                    window.location.href = this.checkoutUrl;
3449                }
3450            },
3451            dispatchLoginRequest: function(form) {
3452                this.isLoading = true;
3453                const username = this.$refs['customer-email'].value;
3454                const password = this.$refs['customer-password'].value;
3455                const formKey = hyva.getFormKey();
3456                const bodyFields = {
3457                    'username': username,
3458                    'password': password,
3459                    'formKey': formKey
3460                };
3461                                const fieldName = 'g\u002Drecaptcha\u002Dresponse';
3462                const recaptchaField = fieldName && form[fieldName];
3463                if (recaptchaField) {
3464                    bodyFields[fieldName] = recaptchaField.value;
3465                }
3466                fetch('https://www.farma.it/customer/ajax/login/', {
3467                        method: 'POST',
3468                        headers: {
3469                            'Content-Type': 'application/json',
3470                            'X-Requested-With': 'XMLHttpRequest'
3471                        },
3472                        body: JSON.stringify(bodyFields)
3473                    }
3474                ).then(response => {
3475                        return response.json()
3476                    }
3477                ).then(data=> {
3478                    this.isLoading = false;
3479                    if (data.errors) {
3480                        dispatchMessages([{
3481                            type: 'error',
3482                            text: data.message
3483                        }], 5000);
3484                        this.errors = 1;
3485                        this.hasCaptchaToken = 0;
3486                    } else {
3487                        window.location.href = this.checkoutUrl;
3488                    }
3489                });
3490            }
3491        }
3492    }
3493</script>
3493
3494<section id="authentication-popup"
3495         x-data="initAuthentication()"
3496         @private-content-loaded.window="onPrivateContentLoaded($event.detail.data)"
3497         @toggle-authentication.window="open = forceAuthentication; redirectIfAuthenticated(event)"
3498         @keydown.window.escape="open = false"
3499         class="hidden"
3500         :class="{ 'hidden': !open }"
3501>
3502    <div role="dialog"
3503         aria-labelledby="authentication-popup-title"
3504         aria-modal="true"
3505         @click.outside="open=false"
3506         class="fixed inset-y-0 right-0 z-50 flex max-w-full">
3507        <div class="backdrop"
3508             x-show="open"
3509             x-transition:enter="ease-in-out duration-500"
3510             x-transition:enter-start="opacity-0"
3511             x-transition:enter-end="opacity-100"
3512             x-transition:leave="ease-in-out duration-500"
3513             x-transition:leave-start="opacity-100"
3514             x-transition:leave-end="opacity-0"
3515             @click="open=false"
3516             aria-label="Close panel"></div>
3517        <div class="relative w-screen max-w-[485px] shadow-2xl"
3518             x-show="open"
3519             x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700"
3520             x-transition:enter-start="translate-x-full"
3521             x-transition:enter-end="translate-x-0"
3522             x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700"
3523             x-transition:leave-start="translate-x-0"
3524             x-transition:leave-end="translate-x-full"
3525        >
3526            <div
3527                x-show="open"
3528                x-transition:enter="ease-in-out duration-500"
3529                x-transition:enter-start="opacity-0"
3530                x-transition:enter-end="opacity-100"
3531                x-transition:leave="ease-in-out duration-500"
3532                x-transition:leave-start="opacity-100"
3533                x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex p-2 mt-3 sm:mt-7 sm:mr-6">
3534                <button @click="open=false" aria-label="Close panel"
3535                        class="p-2 text-primary transition duration-150 ease-in-out hover:text-secondary">
3536                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16" role="img">
3537    <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"/>
3538<title>x</title></svg>
3539                </button>
3540            </div>
3541            <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">
3542                <header class="px-4">
3543                    <div id="authentication-popup-title" class="text-3xl font-bold leading-6 text-primary-darker">
3544                        Accedi o registrati                    </div>
3545                </header>
3546                <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm">
3547                    <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900">
3548                        <strong class="font-medium">Esegui il checkout utilizzando il tuo account</strong>
3549                    </p>
3550
3551                    <form class="form form-login"
3552                          method="post"
3553                          @submit.prevent="submitForm();"
3554                          id="login-form"
3555                    >
3556                                                <div class="fieldset login">
3557                            <div class="field email required">
3558                                <label class="label" for="form-login-username" form="login-form" >
3559                                    <span>Indirizzo email</span>
3560                                </label>
3561                                <div class="control">
3562                                    <input name="username"
3563                                           id="form-login-username"
3564                                           x-ref="customer-email"
3565                                           @change="errors = 0"
3566                                           type="email"
3567                                           required
3568                                           class="form-input input-text"
3569                                    >
3570                                </div>
3571                            </div>
3572                            <div class="field password required">
3573                                <label for="form-login-password" class="label" form="login-form">
3574                                    <span>Password</span>
3575                                </label>
3576                                <div class="control">
3577                                    <input name="password"
3578                                           id="form-login-password"
3579                                           type="password"
3580                                           class="form-input input-text"
3581                                           required
3582                                           x-ref="customer-password"
3583                                           @change="errors = 0"
3584                                    >
3585                                </div>
3586                            </div>
3587
3588                            <input name="context" type="hidden" value="checkout" />
3589                            <div class="actions-toolbar flex justify-between pt-6 pb-2 items-center">
3590                                <button type="submit"                                        class="inline-flex btn btn-primary disabled:opacity-75"
3591                                >
3592                                    Accedi                                </button>
3593                                <a href="https://www.farma.it/customer/account/forgotpassword/"
3594                                >
3595                                    Hai dimenticato la password?                                </a>
3596                            </div>
3597
3598                        </div>
3599                    </form>
3600                </div>
3601                <div class="mx-4">
3602                                    </div>
3603                <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm">
3604                    <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900">
3605                        <strong class="font-medium">Esegui il checkout come nuovo cliente</strong>
3606                    </p>
3607
3608                    <div class="block-content">
3609                        <p class="mb-1">
3610                            La creazione di un account ha molti vantaggi:                        </p>
3611                        <ul class="list-disc pl-5">
3612                            <li> Vedere lo stato dell&#039;ordine e della spedizione</li>
3613                            <li> Cronologia ordini</li>
3614                            <li> Checkout più veloce</li>
3615                        </ul>
3616                        <div class="actions-toolbar flex justify-between mt-6 mb-2 items-center">
3617                            <a href="https://www.farma.it/customer/account/create/"
3618                               class="inline-flex btn btn-primary">
3619                                Crea il tuo Account                            </a>
3620                        </div>
3621                    </div>
3622                </div>
3623            </div>
3624        </div>
3625    </div>
3626</section>
3627<!-- /BLOCK authentication-popup --></div>
3628
3629</header><div class="widget block block-static-block">
3630    </div>
3631<div class="top-container flex flex-col"><div class="widget block block-static-block">
3632    </div>
3633</div><main id="maincontent" class="page-main"><div id="algolia-autocomplete-container"></div><div id="contentarea" tabindex="-1"></div>
3634<div class="page messages">
3634<script>
3635    function initMessages() {
3636        "use strict";
3637        return {
3638            messages: window.mageMessages || [],
3639
3640            hideAfter: 4000,
3641            icons: {
3642                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>',
3643                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>',
3644                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>',
3645                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>',
3646                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>',
3647            },
3648
3649            isEmpty() {
3650                return this.messages.reduce(
3651                    function (isEmpty, message) {
3652                        return isEmpty && message === undefined
3653                    }, true
3654                )
3655            },
3656            removeMessage(messageIndex) {
3657                this.messages[messageIndex] = undefined;
3658            },
3659            addMessages(messages, hideAfter) {
3660                messages.map((message) => {
3661                    message.icon = this.icons[message.type];
3662                    this.messages = this.messages.concat(message);
3663                    if (hideAfter) {
3664                        this.setHideTimeOut(this.messages.length - 1, hideAfter);
3665                    }
3666                });
3667            },
3668            setHideTimeOut(messageIndex, hideAfter) {
3669                setTimeout((messageIndex) => {
3670                    this.removeMessage(messageIndex);
3671                }, hideAfter, messageIndex);
3672            },
3673            animateMessage(elem) {
3674                if (elem) {
3675                    if (window.matchMedia('(min-width: 1024px)').matches) {
3676                        elem.classList.add('transition-all', 'duration-300');
3677                        elem.style.position = 'absolute';
3678                        const headerEl = document.querySelector('.header-elements');
3679                        elem.style.left = (headerEl ? headerEl.getBoundingClientRect().left : 0) + 'px';
3680                        elem.style.opacity = 1;
3681
3682                        setTimeout(() => {
3683                            elem.style.left = '0';
3684                            elem.style.opacity = 0;
3685                        }, this.hideAfter - 300);
3686                    } else {
3687                        elem.style.left = '-400px';
3688                        elem.classList.add('transition-all', 'duration-300');
3689                        elem.style.opacity = 0;
3690
3691                        setTimeout(() => {
3692                            elem.style.left = '0';
3693                            elem.style.opacity = 1;
3694                        }, 10);
3695
3696                        setTimeout(() => {
3697                            elem.style.left = '-400px';
3698                            elem.style.opacity = 0;
3699                        }, this.hideAfter - 300);
3700                    }
3701                }
3702            },
3703            eventListeners: {
3704                ['@messages-loaded.window']() {
3705                    this.addMessages(event.detail.messages, this.hideAfter)
3706                },
3707                ['@private-content-loaded.window'](event) {
3708                    const data = event.detail.data;
3709                    if (
3710                        data.messages &&
3711                        data.messages.messages &&
3712                        data.messages.messages.length
3713                    ) {
3714                        this.addMessages(data.messages.messages, this.hideAfter);
3715                    }
3716                },
3717                ['@clear-messages.window']() {
3718                    this.messages = [];
3719                }
3720            }
3721        }
3722    }
3723</script>
3723
3724<section id="messages"
3725         x-data="initMessages()"
3726         x-bind="eventListeners"
3727         class="absolute"
3728>
3729    <template x-if="!isEmpty()">
3730        <div class="w-full">
3731            <div role="alert" class="messages mx-auto py-3 pl-0 pr-[.938rem] lg:px-layoutGutter lg:px-0">
3732                <template x-for="(message, index) in messages" :key="index">
3733                    <div>
3734                        <template x-if="message">
3735                            <div class="message w-fit lg:min-w-[25rem] rounded-md relative" :class="message.type"
3736                                 :ui-id="'message-' + message.type"
3737                                 style="left: 0; max-width: 400px"
3738                                 x-init="animateMessage($el)"
3739                            >
3740                                <span x-html="message.icon" class="mr-3"></span>
3741                                <span x-html="message.text" class="pr-2"></span>
3742                                <a href="#" class="close cursor-pointer ml-auto my-auto" title="close"
3743                                   @click.prevent="removeMessage(index)">
3744                                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="text-primary" width="12" height="12" role="img">
3745    <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"/>
3746<title>x</title></svg>
3747                                </a>
3748                            </div>
3749                        </template>
3750                    </div>
3751                </template>
3752            </div>
3753        </div>
3754    </template>
3755</section>
3756</div><div class="columns max-w-lg"><div class="column main">
3756<script>
3757    document.addEventListener("alpine:init", () => {
3758        Alpine.store('ajaxPrices', {
3759            nodesToUpdate: [],
3760            prices: [],
3761            options: {
3762                additional_data: {}
3763            },
3764
3765            hasPrice(productId){
3766                return this.getPriceFloat(productId) != null;
3767            },
3768
3769            getPriceHtml(productId) {
3770                if (!(productId in this.prices)) {
3771                    return null;
3772                }
3773                return this.prices[productId]['html'];
3774            },
3775
3776            getPriceFloat(productId) {
3777                if (!(productId in this.prices)) {
3778                    return null;
3779                }
3780                return this.prices[productId]['float'];
3781            },
3782
3783            addNode(productId) {
3784                if (!productId) {
3785                    return
3786                }
3787
3788                this.nodesToUpdate.push({
3789                    "productId": productId,
3790                });
3791
3792                Alpine.debounce(this.updateNodes.bind(this), 150)();
3793            },
3794
3795            updateNodes() {
3796                var nodes = this.nodesToUpdate;
3797                this.nodesToUpdate = [];
3798
3799                this.processNodes(nodes);
3800            },
3801
3802            processNodes(nodes) {
3803                var self = this,
3804                    idsToLoad = [],
3805                    containerToReload = [];
3806
3807                nodes.forEach(function (node) {
3808                    var productId = node.productId;
3809
3810                    if (productId in self.prices) {
3811                        //self.apply(node);
3812                        return; //continue
3813                    }
3814
3815                    idsToLoad.push(productId);
3816
3817                    containerToReload.push(node);
3818                });
3819
3820                if (idsToLoad.length) {
3821                    self.get(idsToLoad, function () {
3822                        self.processNodes(containerToReload);
3823                    });
3824                }
3825            },
3826
3827            store: function (prices) {
3828                this.prices = Object.assign(this.prices, prices);
3829            },
3830
3831            get(ids, callback) {
3832
3833                var self = this,
3834                    params = '/ids/' + ids.join();
3835
3836                let additionalParams = this.options.additional_data;
3837                params += "?" + new URLSearchParams(additionalParams).toString();
3838
3839                fetch(BASE_URL + 'ajaxprices/price/render' + params)
3840                    .then((response) => response.json())
3841                    .then((data) => {
3842                        if (data.error) {
3843                            console.error("ajax_price_error: " + data.errorMessage)
3844                            return;
3845                        }
3846
3847                        var prices = data.data;
3848                        self.store(prices);
3849                        callback();
3850                    });
3851            }
3852        });
3853    });
3854</script>
3854
3855
3856<script>
3857    document.addEventListener("alpine:init", () => {
3858        Alpine.store('badges', {
3859            nodesToUpdate: [],
3860            badges: [],
3861            productBadges: [],
3862            options: {
3863                additional_data: {}
3864            },
3865
3866            getBadgesHtml(productId, position) {
3867                if (!(productId in this.productBadges) || !(position in this.productBadges[productId])) {
3868                    return [];
3869                }
3870                let index = this.productBadges[productId][position],
3871                    self = this,
3872                    badges = [];
3873
3874                index.forEach(function (element) {
3875                    badges.push(self.badges[element]);
3876                });
3877                return badges;
3878            },
3879
3880            addNode(productId, position) {
3881                this.nodesToUpdate.push({
3882                    "productId": productId,
3883                    "position": position
3884                });
3885
3886                Alpine.debounce(this.updateNodes.bind(this), 150)();
3887            },
3888
3889            updateNodes() {
3890                var nodes = this.nodesToUpdate;
3891                this.nodesToUpdate = [];
3892
3893                this.processNodes(nodes);
3894            },
3895
3896            processNodes(nodes) {
3897                var self = this,
3898                    idsToLoad = [],
3899                    containerToReload = [];
3900
3901                nodes.forEach(function (node) {
3902                    var productId = node.productId;
3903
3904                    if (self.productBadges[productId]) {
3905                        //self.apply(node);
3906                        return; //continue
3907                    }
3908
3909                    idsToLoad.push(productId);
3910                    containerToReload.push(node);
3911                });
3912
3913                if (idsToLoad.length) {
3914                    self.get(idsToLoad, function () {
3915                        self.processNodes(containerToReload);
3916                    });
3917                }
3918            },
3919
3920            store: function (badges, productBadges) {
3921                this.badges = Object.assign(this.badges, badges);
3922                this.productBadges = Object.assign(this.productBadges, productBadges);
3923            },
3924
3925            get(ids, callback) {
3926                var self = this,
3927                    params = '/ids/' + ids.join();
3928
3929                let additionalParams = this.options.additional_data;
3930                params += "?" + new URLSearchParams(additionalParams).toString();
3931
3932                fetch(BASE_URL + 'badge/api/get' + params)
3933                    .then((response) => response.json())
3934                    .then((data) => {
3935                        if (data.error) {
3936                            console.error("badges_error: " + data.errorMessage)
3937                            return;
3938                        }
3939
3940                        var badges = data.data.badges,
3941                            productBadges = data.data.productBadges;
3942
3943                        self.store(badges, productBadges);
3944                        callback();
3945                    });
3946            }
3947        });
3948    });
3949</script>
3949
3950
3951
3952<script>
3953    document.addEventListener("alpine:init", () => {
3954        Alpine.store('omnibusPrices', {
3955            nodesToUpdate: [],
3956            prices: [],
3957            options: {
3958                additional_data: {}
3959            },
3960
3961            hasPrice(productId){
3962                return this.getPriceHtml(productId) != null;
3963            },
3964
3965            getPriceHtml(productId) {
3966                if (!(productId in this.prices)) {
3967                    return null;
3968                }
3969                return this.prices[productId];
3970            },
3971
3972            addNode(productId, position) {
3973                this.nodesToUpdate.push({
3974                    "productId": productId,
3975                });
3976
3977                Alpine.debounce(this.updateNodes.bind(this), 150)();
3978            },
3979
3980            updateNodes() {
3981                var nodes = this.nodesToUpdate;
3982                this.nodesToUpdate = [];
3983
3984                this.processNodes(nodes);
3985            },
3986
3987            processNodes(nodes) {
3988                var self = this,
3989                    idsToLoad = [],
3990                    containerToReload = [];
3991
3992                nodes.forEach(function (node) {
3993                    var productId = node.productId;
3994
3995                    if (productId in self.prices) {
3996                        //self.apply(node);
3997                        return; //continue
3998                    }
3999
4000                    idsToLoad.push(productId);
4001                    containerToReload.push(node);
4002                });
4003
4004                if (idsToLoad.length) {
4005                    self.get(idsToLoad, function () {
4006                        self.processNodes(containerToReload);
4007                    });
4008                }
4009            },
4010
4011            store: function (prices) {
4012                this.prices = Object.assign(this.prices, prices);
4013            },
4014
4015            get(ids, callback) {
4016                var self = this,
4017                    params = '/ids/' + ids.join();
4018
4019                let additionalParams = this.options.additional_data;
4020                params += "?" + new URLSearchParams(additionalParams).toString();
4021
4022                fetch(BASE_URL + 'omnibus/ajax/render' + params)
4023                    .then((response) => response.json())
4024                    .then((data) => {
4025                        if (data.error) {
4026                            console.error("omnibus_prices_error: " + data.errorMessage)
4027                            return;
4028                        }
4029
4030                        var prices = data.data;
4031                        self.store(prices);
4032                        callback();
4033                    });
4034            }
4035        });
4036    });
4037</script>
vendor: 1 bytes, line 4037
4037
4038<script nonce="Z21reG1veG44ajg0aHZqYmg4NG5sY2Rqd2l1bWZla2g=">
4039    var feedId = getUrlParam('ff'),
4040        product = getUrlParam('fp'),
4041        currentDate = new Date(),
4042        session = getCookie('feed_session');
4043
4044    if (!session) {
4045        session = '' + Math.floor(currentDate.getTime() / 1000) + Math.floor(Math.random() * 10000001);
4046    }
4047
4048    if (session && feedId > 0 && product > 0) {
4049        setCookie('feed_session', session, {expires: 365, path: '/'});
4050        setCookie('feed_id', feedId, 365);
4051
4052        var xhr = new XMLHttpRequest(),
4053            baseUrl = 'https://www.farma.it/',
4054            url = BASE_URL + '?rnd=' + Math.floor(Math.random() * 10000001) + "&feed=" + feedId + "&session=" + session + "&product=" + product;
4055
4056        xhr.open('GET', url, true);
4057        xhr.setRequestHeader('Content-Type', 'application/json');
4058        xhr.send();
4059    }
4060
4061    function getUrlParam(name) {
4062        let results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
4063
4064        if (results === null) {
4065            return '';
4066        } else {
4067            return results[1] || 0;
4068        }
4069    }
4070
4071    function getCookie(cookieName) {
4072        var name = cookieName + "=",
4073            decodedCookie = decodeURIComponent(document.cookie),
4074            cookieArray = decodedCookie.split(';');
4075
4076        for (var i = 0; i < cookieArray.length; i++) {
4077            var cookie = cookieArray[i].trim();
4078            if (cookie.indexOf(name) === 0) {
4079                return cookie.substring(name.length, cookie.length);
4080            }
4081        }
4082
4083        return null;
4084    }
4085
4086    function setCookie(cookieName, cookieValue, expirationDays) {
4087        var d = new Date();
4088        d.setTime(d.getTime() + (expirationDays * 24 * 60 * 60 * 1000));
4089        var expires = "expires=" + d.toUTCString();
4090        document.cookie = cookieName + "=" + cookieValue + ";" + expires + ";path=/";
4091    }
4092</script>
4092
4093<div class="w-full mx-auto mb-12">
4094    <h1 class="font-baloo-bhaina font-bold h2 pb-2 mt-5 md:mt-16">Hai dimenticato la password?</h1>
4095    <div class="mb-8">
4096        <form action="https://www.farma.it/customer/account/forgotpasswordpost/"
4097              method="post"
4098              id="user_forgotpassword"
4099              x-data="initPasswordForm()"
4100              @submit.prevent="submitForm();">
4101            <input name="form_key" type="hidden" value="NuWLCNhC6L8sVz4U" />            <input type="hidden" name="formId" value="user_forgotpassword"/>
4102                        <div class="control">
4103    <input type="hidden"
4104           value=""
4105           name="g-recaptcha-response"
4106    >
4107</div>
4108            <fieldset class="fieldset">
4109                <div class="mb-4 md:mb-6">Nessun problema!<br>Inserisci il tuo indirizzo mail per reimpostare una nuova password.</div>
4110                <div class="field email required">
4111                    <div class="control">
4112                        <input type="email" name="email" alt="email" id="email_address" class="form-input" placeholder="Indirizzo email *" required
4113                               value="">
4114                    </div>
4115                </div>
4116                                <p class="legal-notice my-2 text-xxs">
4117    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>
4118            </fieldset>
4119            <div class="pt-5">
4120                <div class="primary">
4121                    <button type="submit" class="w-full action submit primary btn btn-primary disabled:opacity-75"
4122                                            >
4123                        <span>Resetta la mia password</span>
4124                    </button>
4125                </div>
4126                <div class="secondary flex justify-center pt-5 md:pt-8">
4127                    <a class="action back text-primary underline"
4128                       href="https://www.farma.it/customer/account/login/referer/aHR0cHM6Ly93d3cuZmFybWEuaXQvY3VzdG9tZXIvYWNjb3VudC9mb3Jnb3RwYXNzd29yZC8~/"><span>Torna indietro</span></a>
4129                </div>
4130            </div>
4131        </form>
4132        
4132<script>
4133            function initPasswordForm() {
4134                return {
4135                    errors: 0,
4136                    hasCaptchaToken: 0,
4137                    submitForm() {
4138                        // Do not rename $form, the variable is expected to be declared in the recaptcha output
4139                        const $form = document.querySelector('#user_forgotpassword');
4140                            if (!this.hasCaptchaToken) {
4141        this.errors = 1;
4142
4143        const lockSubmitButton = () => {
4144            $form.querySelector('[type="submit"]')?.setAttribute('disabled', true);
4145        };
4146
4147        const failCaptcha = (errorMessage, exception = null) => {
4148            this.errors = 1;
4149            lockSubmitButton();
4150
4151            if (this.setErrorMessages) {
4152                this.setErrorMessages([errorMessage]);
4153                this.displayErrorMessage = true;
4154            } else {
4155                window.dispatchMessages && window.dispatchMessages([{ type: "error", text: errorMessage }], 5000);
4156            }
4157
4158            if (exception) {
4159                console.error(
4160                    exception ||
4161                    'An unknown error occurred during ReCaptcha validation. Are the tokens and the domain correctly set up in the Google console?'
4162                );
4163            }
4164        };
4165
4166        const executeGreCaptcha = () => {
4167            grecaptcha.ready(() => {
4168                grecaptcha.execute(
4169                    '6LdDii8sAAAAAF1j_v4WIzmCV2phMFuJKWeFtEhJ',
4170                    {action: 'submit'}
4171                ).then((token) => {
4172                    const tokenElement = $form['g\u002Drecaptcha\u002Dresponse'];
4173
4174                    if (tokenElement && token && token.length > 0) {
4175                        $form['g\u002Drecaptcha\u002Dresponse'].value = token;
4176                        this.errors = 0;
4177                        this.hasCaptchaToken = 1;
4178                        (this.submitForm || $form.submit).call(this);
4179                    } else {
4180                        failCaptcha(
4181                            tokenElement
4182                                ? 'ReCaptcha\u0020validation\u0020failed.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020try\u0020again.'
4183                                : 'ReCaptcha\u0020token\u0020element\u0020is\u0020missing.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020try\u0020again.'
4184                        );
4185                    }
4186                }).catch((exception) => {
4187                    failCaptcha(
4188                        'ReCaptcha\u0020validation\u0020failed\u0020due\u0020to\u0020a\u0020technical\u0020error.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020try\u0020again.',
4189                        exception
4190                    );
4191                });
4192            });
4193        };
4194
4195        if (window.grecaptcha) {
4196            executeGreCaptcha();
4197        } else {
4198            const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6LdDii8sAAAAAF1j_v4WIzmCV2phMFuJKWeFtEhJ";
4199            const script = document.createElement('script');
4200            script.setAttribute('type', 'text/javascript');
4201            script.setAttribute('src', recaptchaUrl);
4202            document.head.appendChild(script);
4203
4204            script.addEventListener("load", executeGreCaptcha, false);
4205        }
4206    }
4207
4208                        if (this.errors === 0) {
4209                            $form.submit();
4210                        }
4211                    }
4212                }
4213            }
4214        </script>
4214
4215    </div>
4216</div>
4217<script>
4218    function hasWebP() {
4219        var elem = document.createElement('canvas');
4220
4221        if (!!(elem.getContext && elem.getContext('2d'))) {
4222            return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0;
4223        }
4224        return false;
4225    }
4226
4227    if (hasWebP()) {
4228        document.body.classList.add("webp");
4229    } else {
4230        document.body.classList.add("no-webp");
4231    }
4232</script>
4232
4233</div></div></main><footer class="page-footer mt-auto">
4234                                        <div style="background-image: url('https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/images/footer/bg_newsletter.webp');
4235                    font-size: justify-content: flex-start;
4236                    display: flex;
4237                    flex-direction: column;
4238                    background-position: left top;
4239                    background-size: cover;
4240                    background-repeat: no-repeat;
4241                    background-attachment: scroll;"
4242                >
4243                    <div class="container">
4244                        <div class="py-8 md:py-10 scroll-mt-36" id="newsletter_footer">
4245    <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">
4246        <div class="flex flex-wrap justify-start gap-2">
4247            <label for="newsletter-subscribe" class="sr-only" role="img" aria-label="Indirizzo&#x20;email">
4248                Indirizzo email            </label>
4249
4250            <input name="form_key" type="hidden" x-bind:value="window.hyva.getFormKey()">
4251            <div class="control">
4252    <input type="hidden"
4253           value=""
4254           name="g-recaptcha-response"
4255    >
4256</div>
4257
4258            <div class="w-full md:grid grid-cols-12 items-center xl:items-end">
4259                <div class="col-span-5 text-white mb-6">
4260                    <h4 class="h2 font-bold font-baloo-bhaina text-white mb-2 md:mb-4">Non perderti nulla!<br/>Iscriviti alla nostra Newsletter</h4>
4261                    <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>
4262                </div>
4263                <div></div>
4264                <div class="col-span-6 order-3 md:mb-6">
4265                    <div class="control input-group flex gap-x-2.5 md:gap-x-4 relative">
4266                        <input class="input-text form-control py-2 form-input pl-12" name="email" type="email" required id="newsletter-subscribe"
4267                               x-bind:placeholder="window.matchMedia('(max-width: 700px)').matches ?
4268                               'Inserisci&#x20;e-mail&#x20;&#x2A;' :
4269                               'Inserisci&#x20;indirizzo&#x20;e-mail&#x20;&#x2A;'">
4270                        <div class="absolute top-0 left-3 py-3.5 pl-1">
4271                            <?xml version="1.0" encoding="UTF-8"?>
4272<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">
4273    <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"/>
4274<title>footer/icon_email</title></svg>
4275                        </div>
4276                        <div class="input-group-append">
4277                            <button class="btn btn-secondary h-full">
4278                                Iscriviti                            </button>
4279                        </div>
4280                    </div>
4281                    <div class="flex gap-2 mt-3 pl-5 max-w-lg">
4282                        
4283        <div x-data="{
4284            checked: false,
4285            consentId: 5         }"
4286         id="checkbox-0"
4287         class="flex w-full last:mb-3">
4288        <div
4289            class="flex flex-wrap field choice ">
4290            <input type="hidden" name="amgdpr_agreement[newsletter_privacy_policy]"
4291                   value="0"/>
4292            <div class="flex flex-row">
4293                <input type="checkbox"
4294                       name="amgdpr_agreement[newsletter_privacy_policy]"
4295                       title="Newsletter - Privacy Policy"
4296                       value="1"
4297                       id="amprivacy-checkbox-6ac931cd7d8a9"
4298                       class="amgdpr-consent-checkbox mt-0.5"
4299                       x-model="checked"
4300                       @amgdpr-consent-accepted.window="event.detail === consentId && (checked = true)"
4301                                            required
4302                     />
4303                <label for="amprivacy-checkbox-6ac931cd7d8a9"
4304                       class="label">
4305                <span class="amgdpr-consent-span">
4306                    Letta l’<a href="/privacy-policy" target="_blank" class="underline">informativa privacy</a>, presto il mio consenso per ricevere newsletter e/o DEM                </span>
4307                </label>
4308            </div>
4309            <div class="h-0 w-full"></div>
4310        </div>
4311
4312        <input type="hidden"
4313               name="am-gdpr-checkboxes-from"
4314               value="subscription"/>
4315    </div>
4316<policy-placeholder></policy-placeholder>
4317                    </div>
4318                </div>
4319            </div>
4320        </div>
4321        <div>
4322            <template x-if="displayErrorMessage">
4323                <p class="flex items-center mage-error">
4324                    <span class="inline-block w-8 h-8 mr-3">
4325                        <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">
4326  <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
4327<title>exclamation-circle</title></svg>
4328                    </span>
4329                    <template x-for="errorMessage in errorMessages">
4330                        <span x-html="errorMessage"></span>
4331                    </template>
4332                </p>
4333            </template>
4334        </div>
4335    </form>
4336    <div class="w-full text-white">
4337        <p class="legal-notice my-2 text-xxs">
4338    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>
4339    </div>
4340    
4340<script type="text/javascript">
4341        function initNewsletterForm() {
4342            return {
4343                errors: 0,
4344                hasCaptchaToken: 0,
4345                displayErrorMessage: false,
4346                errorMessages: [],
4347                setErrorMessages(messages) {
4348                    this.errorMessages = [messages]
4349                    this.displayErrorMessage = this.errorMessages.length
4350                },
4351                submitForm() {
4352                    // Do not rename $form, the variable is expected to be declared in the recaptcha output
4353                    const $form = document.querySelector('#newsletter-validate-detail');
4354                        if (!this.hasCaptchaToken) {
4355        this.errors = 1;
4356
4357        const lockSubmitButton = () => {
4358            $form.querySelector('[type="submit"]')?.setAttribute('disabled', true);
4359        };
4360
4361        const failCaptcha = (errorMessage, exception = null) => {
4362            this.errors = 1;
4363            lockSubmitButton();
4364
4365            if (this.setErrorMessages) {
4366                this.setErrorMessages([errorMessage]);
4367                this.displayErrorMessage = true;
4368            } else {
4369                window.dispatchMessages && window.dispatchMessages([{ type: "error", text: errorMessage }], 5000);
4370            }
4371
4372            if (exception) {
4373                console.error(
4374                    exception ||
4375                    'An unknown error occurred during ReCaptcha validation. Are the tokens and the domain correctly set up in the Google console?'
4376                );
4377            }
4378        };
4379
4380        const executeGreCaptcha = () => {
4381            grecaptcha.ready(() => {
4382                grecaptcha.execute(
4383                    '6LdDii8sAAAAAF1j_v4WIzmCV2phMFuJKWeFtEhJ',
4384                    {action: 'submit'}
4385                ).then((token) => {
4386                    const tokenElement = $form['g\u002Drecaptcha\u002Dresponse'];
4387
4388                    if (tokenElement && token && token.length > 0) {
4389                        $form['g\u002Drecaptcha\u002Dresponse'].value = token;
4390                        this.errors = 0;
4391                        this.hasCaptchaToken = 1;
4392                        (this.submitForm || $form.submit).call(this);
4393                    } else {
4394                        failCaptcha(
4395                            tokenElement
4396                                ? 'ReCaptcha\u0020validation\u0020failed.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020try\u0020again.'
4397                                : 'ReCaptcha\u0020token\u0020element\u0020is\u0020missing.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020try\u0020again.'
4398                        );
4399                    }
4400                }).catch((exception) => {
4401                    failCaptcha(
4402                        'ReCaptcha\u0020validation\u0020failed\u0020due\u0020to\u0020a\u0020technical\u0020error.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020try\u0020again.',
4403                        exception
4404                    );
4405                });
4406            });
4407        };
4408
4409        if (window.grecaptcha) {
4410            executeGreCaptcha();
4411        } else {
4412            const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6LdDii8sAAAAAF1j_v4WIzmCV2phMFuJKWeFtEhJ";
4413            const script = document.createElement('script');
4414            script.setAttribute('type', 'text/javascript');
4415            script.setAttribute('src', recaptchaUrl);
4416            document.head.appendChild(script);
4417
4418            script.addEventListener("load", executeGreCaptcha, false);
4419        }
4420    }
4421
4422                    if (this.errors === 0) {
4423                        $form.submit();
4424                    }
4425                }
4426            }
4427        }
4428    </script>
4428
4429</div>
4430                    </div>
4431                </div>
4432                        <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">
4433                 <template x-if="show">
4434                                 <div class="dna-footer-item-content">
4435                         <div data-content-type="html" data-appearance="default" data-intersect="false" data-element="main" data-decoded="true"><div class="bg-container-gray">
4436    <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">
4437        <div class="md:grid grid-cols-3 col-span-7 md:mr-8 gap-2">
4438            <div class="overflow-hidden md:mb-8 lg:mb-0 mb-3" x-data="{open: false}">
4439                <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
4440                    <span class="text-xl md:hidden items-center flex" x-show="!open">
4441                        <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"/>
4442                    </span>
4443                    <span class="text-xl md:hidden items-center flex" x-show="open">
4444                        <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"/>
4445                    </span>
4446                </h5>
4447
4448                <ul class="md:block transition-all md:h-auto md:mb-0 md:!h-auto" :class="open ? '' : 'h-0'"
4449                    x-bind:style="open ? 'height:' + $el.childElementCount * 27 /* 25px element child width */ + 'px' : ''">
4450                    <li class="py-0.5"><a href="/chi-siamo" class="text-xs md:text-base hover:text-secondary">La nostra Azienda</a></li>
4451                    <li class="py-0.5"><a href="/coupon-e-promo" class="text-xs md:text-base hover:text-secondary">Coupon</a></li>
4452                    <li class="py-0.5"><a href="/farma-lovers" class="text-xs md:text-base hover:text-secondary">Programma Fedeltà Farma Lovers</a></li>
4453                    <li class="py-0.5"><a href="/lavora-con-noi" class="text-xs md:text-base hover:text-secondary">Lavora con noi</a></li>
4454                    <li class="py-0.5"><a href="/blog" class="text-xs md:text-base hover:text-secondary">I nostri consigli</a></li>
4455                    <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>
4456                </ul>
4457            </div>
4458
4459            <div class="overflow-hidden mb-3" x-data="{open: false}">
4460                <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
4461                    <span class="text-xl md:hidden items-center flex" x-show="!open">
4462                        <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"/>
4463                    </span>
4464                    <span class="text-xl md:hidden items-center flex" x-show="open">
4465                        <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"/>
4466                    </span>
4467                </h5>
4468
4469                <ul class="md:block transition-all md:h-auto md:mb-0 md:!h-auto" :class="open ? '' : 'h-0'"
4470                    x-bind:style="open ? 'height:' + $el.childElementCount * 27 + 'px' : ''">
4471                    <li class="py-0.5"><a href="/contattaci" class="text-xs md:text-base hover:text-secondary">Contattaci</a></li>
4472                    <li class="py-0.5"><a href="/richiamami" class="text-xs md:text-base hover:text-secondary">Richiamami</a></li>
4473                    <!-- <li class="py-0.5"><a href="/sales/guest/form" class="text-xs md:text-base hover:text-secondary">Stato dell'ordine</a></li> -->
4474                    <li class="py-0.5"><a href="/faq" class="text-xs md:text-base hover:text-secondary">FAQ</a></li>
4475                    <li class="py-0.5"><a href="/rma/guest/login" class="text-xs md:text-base hover:text-secondary">Resi</a></li>
4476                </ul>
4477            </div>
4478
4479            <div class="overflow-hidden mb-3" x-data="{open: false}">
4480                <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
4481                    <span class="text-xl md:hidden items-center flex" x-show="!open">
4482                        <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"/>
4483                    </span>
4484                    <span class="text-xl md:hidden items-center flex" x-show="open">
4485                        <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"/>
4486                    </span>
4487                </h5>
4488
4489                <ul class="md:block transition-all md:h-auto md:mb-0 md:!h-auto text-xs md:text-base " :class="open ? '' : 'h-0'"
4490                    x-bind:style="open ? 'height:' + $el.childElementCount * 27 + 'px' : ''">
4491                    <li class="py-0.5"><a href="/pagamenti-e-condizioni" class="hover:text-secondary">Pagamenti & Condizioni</a></li>
4492                    <li class="py-0.5"><a href="/spedizioni" class="hover:text-secondary">Spedizioni</a></li>
4493                    <li class="py-0.5"><a href="/privacy-policy" class="hover:text-secondary">Privacy Policy</a></li>
4494                    <li class="py-0.5"><a href="/cookie-policy" class="hover:text-secondary">Cookie Policy</a></li>
4495                    <li class="py-0.5"><a href="/comunicazioni" class="hover:text-secondary">Comunicazioni</a></li>
4496                    <li class="py-0.5"><span class="hover:text-secondary cursor-pointer" onclick="Cookiebot.show();preventDefault()">Gestisci Cookie</span>
4497                    <li class="py-0.5"><a href="/garanzia-legale" class="hover:text-secondary">Garanzia legale UE – almeno 2 anni</a></li>
4498                    </li>
4499                </ul>
4500            </div>
4501
4502            <div class="overflow-hidden" x-data="{open: false}">
4503                <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
4504                    <span class="text-xl md:hidden items-center flex" x-show="!open">
4505                        <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"/>
4506                    </span>
4507                    <span class="text-xl md:hidden items-center flex" x-show="open">
4508                        <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"/>
4509                    </span>
4510                </h5>
4511
4512                <ul class="md:block transition-all md:h-auto md:mb-0 md:!h-auto" :class="open ? 'mb-3' : 'h-0'"
4513                    x-bind:style="open ? 'height:' + $el.childElementCount * 32 + 'px' : ''">
4514                    <li class="mb-3"><p class="text-xs md:text-base flex gap-2 items-center">
4515                        <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>
4516                    <li class="mb-3"><p class="text-xs md:text-base flex gap-2 items-center">
4517                        <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>
4518                    <li class="mb-3"><p class="text-xs md:text-base flex gap-2 items-center">
4519                        <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>
4520                    <li><p class="text-xs md:text-base flex gap-2 items-center">
4521                        <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>
4522                </ul>
4523            </div>
4524
4525            <div class="overflow-hidden md:w-40">
4526                <h5 class="font-bold md:pb-4 pb-3 pt-3 md:pt-0 md:pb-3 font-baloo-bhaina">
4527                    Pagamenti Veloci & Sicuri
4528                </h5>
4529
4530                <div class="mb-4 flex gap-1.5 md:gap-2 flex-wrap">
4531                    <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"/>
4532                    <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"/>
4533                    <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"/>
4534                    <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"/>
4535                    <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"/>
4536                    <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"/>
4537                    <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"/>
4538                    <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"/>
4539                    <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"/>
4540                    <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"/>
4541                    <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"/>
4542                    <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"/>
4543                </div>
4544            </div>
4545
4546            <div class="overflow-hidden md:w-40">
4547                <h5 class="font-bold md:pb-4 pb-3 pt-3 md:pt-0 font-baloo-bhaina">Consegna Gratuita in 24/72h</h5>
4548
4549                <div class="mb-4 flex gap-1.5 md:gap-2 flex-wrap">
4550                    <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"/>
4551                    <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"/>
4552<!-- <img title="Liccardi" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/media/wysiwyg/liccardi_orlandi.svg" alt="Liccardi"/> -->
4553<img title="InPost" class='w-auto h-7 md:h8' loading="lazy" src="https://www.farma.it/media/wysiwyg/inpost_orlandi.svg" alt="InPost"/>
4554<!-- <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"/> -->
4555                </div>
4556            </div>
4557        </div>
4558
4559        <div class="col-span-3">
4560            <div>
4561                <div>
4562                    <h5 class="font-bold md:pb-4 pb-3 pt-3 md:pt-0 md:pb-3 font-baloo-bhaina">Sito sicuro</h5>
4563                </div>
4564
4565                <div class="gap-4 mb-4 md:mb-9 md:flex">
4566<div style="display:flex;flex-direction:column;gap:8px;margin-bottom:8px">
4567<div class="feedaty_widget" data-ver="2021" data-id="66ab4361b28b3" data-type="merchant" data-variant="200x150-4" data-lang="all" data-gui="all"></div>
4568<a target="_blank" rel="noopener" href="https://www.farma.it/garanzia-legale">                                                                                                                                           
4569                              <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>                                       
4570                          </a>
4571</div>
4572                    <div>
4573                        <a target="_blank" href="https://www.trovaprezzi.it/negozi/farmait">
4574                            <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>
4575                        </a>
4576                        <a target="_blank" href="https://www.prezzifarmaco.it/scheda-negozio/farmait-by-antica-farmacia-orlandi-501">
4577                            <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>
4578                        </a>
4579<a href="https://www.farma.it/farmacia-antifumo">
4580                     <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>
4581</a>
4582                    </div>
4583                </div>
4584            </div>
4585
4586            <div class="mb-8">
4587                <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>
4588
4589                <div class="flex gap-2 mb-6 md:mb-8">
4590                    <a target="_blank" href="https://www.salute.gov.it/LogoCommercioElettronico/CercaSitoEComm?useMode=getDettaglio&amp;VOLID=C016715">
4591                        <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>
4592                    </a>
4593                    <a target="_blank" href="https://www.salute.gov.it/LogoCommercioElettronicoVET/CercaSitoEComm?useMode=getDettaglio&VOLID=C016715&area=veterinari&id=5907&lingua=italiano&menu=vendite">
4594                        <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>
4595                    </a>
4596                </div>
4597<div class="mb-2 md:mb-4 flex gap-2">
4598<a href="https://apps.apple.com/it/app/farma-it/id6740766576" target="_blank">
4599<svg id="livetype" xmlns="http://www.w3.org/2000/svg" width="135" viewB
4599ox="0 0 119.66407 40">
4600  <title>Download_on_the_App_Store_Badge_IT_RGB_blk_100317</title>
4601  <g>
4602    <g>
4603      <g>
4604        <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>
4605        <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>
4606      </g>
4607      <g id="_Group_" data-name="&lt;Group&gt;">
4608        <g id="_Group_2" data-name="&lt;Group&gt;">
4609          <g id="_Group_3" data-name="&lt;Group&gt;">
4610            <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>
4611            <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>
4612          </g>
4613        </g>
4614        <g>
4615          <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>
4616          <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>
4617          <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>
4618          <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
46181895,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>
4619          <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>
4620          <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>
4621          <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>
4622          <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>
4623        </g>
4624      </g>
4625    </g>
4626    <g id="_Group_4" data-name="&lt;Group&gt;">
4627      <g>
4628        <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>
4629        <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>
4630        <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>
4631        <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>
4632        <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>
4633        <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>
4634        <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>
4635        <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>
4636        <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>
4637      </g>
4638    </g>
4639  </g>
4640</svg>
4641
4642
4643</a>
4644<a href="https://play.google.com/store/apps/details?id=com.developer.farmait" target="_blank">
4645<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">
4646  <defs id="defs1376">
4647    <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1390">
4648      <path d="M 0,2207.03 H 6460 V 292.961 H 0 Z" id="path1388"></path>
4649    </clipPath>
4650    <clipPath clipPathUnits="userSpaceOnUse" id="clipPath1412">
4651      <path d="M 0,2207.04 H 6460 V 292.961 H 0 Z" id="path1410"></path>
4652    </clipPath>
4653  </defs>
4654  <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>
4655  <g id="g1380" inkscape:groupmode="layer" inkscape:label="Page 1" transform="matrix(1.3333333,0,0,-1.3333333,-5.5867668e-7,294.27066)">
4656    <g id="g1382" transform="scale(0.1)">
4657      <g id="g1384">
4658        <g id="g1386" clip-path="url(#clipPath1390)">
4659          <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>
4660          <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>
4661          <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 
4661-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>
4662          <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>
4663          <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>
4664          <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>
4665          <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>
4666        </g>
4667      </g>
4668      <g id="g1406">
4669        <g id="g1408" clip-path="url(#clipPath1412)">
4670          <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>
4671          <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>
4672          <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 
4672-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>
4673          <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>
4674          <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>
4675          <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>
4676          <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>
4677          <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>
4678          <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>
4679          <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>
4680          <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>
4681          <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 
4681-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>
4682          <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>
4683        </g>
4684      </g>
4685    </g>
4686  </g>
4687</svg>
4688
4689</a></div>
4690            </div>
4691        </div>
4692    </div>
4693</div>
4694
4695<script>
4696if(typeof FeedatyWidget !== 'undefined') {
4697FeedatyWidget.init();
4698}
4699</script>
4699</div>                     </div>
4700                             </template>
4701            </div>
4702                <div class="footer content">
4702<script>
4703    'use strict';
4704
4705    function amBrandsPopup() {
4706        let cached = false;
4707
4708        const displayError = (error) => {
4709            console.error(error);
4710            typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
4711                [{
4712                    type: "error",
4713                    text: "Qualcosa\u0020\u00E8\u0020andato\u0020storto.\u0020Riprova\u0020di\u0020nuovo."
4714                }], 10000
4715            );
4716        };
4717
4718        let letters = [
4719            "A","B","C","D",
4720            "E","F","G","H","I","J","K","L","M",
4721            "N","O","P","Q","R","S","T","U","V","W","X","Y","Z","#"
4722        ];
4723
4724        return {
4725            hoverPanelActiveId: null,
4726            selectedLetter: null,
4727            items: [],
4728            letters: [],
4729            showCount: null,
4730            showFilter: null,
4731            showImages: true,
4732            showSearch: null,
4733            loading: false,
4734            label: 'Brands',
4735            isPopupEnabled: false,
4736            isTopMenuItemEnabled: false,
4737            cache: false,
4738            isMobile: false,
4739
4740            initErrorMessages(errors) {
4741                const messages = [];
4742                for (let error in Object.keys(errors)) {
4743                    messages.push({type: 'error', text: errors[error].message});
4744                }
4745                typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(messages, 10000);
4746            },
4747
4748            chooseLetter(letter) {
4749                this.selectedLetter = this.selectedLetter === letter ? null : letter;
4750            },
4751
4752            getQuery() {
4753                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                  } }"            },
4754
4755            /**
4756             * Retrieve media url for given path
4757             *
4758             * @param path
4759             * @returns {string}
4760             */
4761            getMediaUrl(path) {
4762                const baseUrl = BASE_URL.replace('index.php/', '');
4763                if (path.includes('://')) {
4764                    return path;
4765                }
4766
4767                let productImageUrl = `${baseUrl}${path}`;
4768                const regexDuplicateDomain = new RegExp(`^(https?:\/\/[^/]+).*\\1`);
4769                productImageUrl = productImageUrl.replace(regexDuplicateDomain, '$1');
4770
4771                return productImageUrl.includes('/product/placeholder/')
4772                    ? productImageUrl.replace(/\/media(?=\/static)/, '')
4773                    : productImageUrl;
4774            },
4775
4776            checkIsMobileResolution() {
4777                this.isMobile = window.matchMedia('(max-width: 1023px)').matches;
4778            },
4779
4780            getBrandUrl(url){
4781                return BASE_URL + url;
4782            },
4783
4784            init() {
4785                this.checkIsMobileResolution();
4786
4787                                    this.$watch('hoverPanelActiveId', (value) => {
4788                        if (value === 'am-brand') {
4789                            this.sendRequest();
4790                        }
4791                    });
4792                            },
4793
4794            /**
4795             * Get brands by letter
4796             *
4797             * @param result
4798             * @returns {{imageWidth: *, isTopMenuItemEnabled: *, showCount: *, displayAll: *, showFilter: *, showImages: *, isPopupEnabled: *, label: *, imageHeight: *, filterDisplayAll: *, brandsPage: *}}
4799             */
4800            settingsMapper(result) {
4801                const config = result.data.storeConfig?.amshopby_brand_general_brands_popup_config;
4802                return {
4803                    showImages: config.show_images,
4804                    showCount: config.show_count,
4805                    showFilter: config.show_filter,
4806                    imageWidth: config.image_width,
4807                    imageHeight: config.image_height,
4808                    filterDisplayAll: config.filter_display_all,
4809                    displayAll: config.display_zero,
4810                    isPopupEnabled: result.data.storeConfig?.amshopby_brand_general_brands_brands_popup,
4811                    label: result.data.storeConfig?.amshopby_brand_general_menu_item_label,
4812                    isTopMenuItemEnabled: result.data.storeConfig?.amshopby_brand_general_topmenu_enabled,
4813                    brandsPage: result.data.storeConfig?.amshopby_brand_general_brands_page,
4814                }
4815            },
4816
4817            /**
4818             * Send request to graphql
4819             *
4820             * @returns {Promise<any>}
4821             */
4822            async sendRequest() {
4823                if (this.isMobile) {
4824                    return false;
4825                }
4826
4827                this.loading = true;
4828
4829                try {
4830                    if (cached) {
4831                        this.loading = false;
4832                        return false;
4833                    }
4834
4835                    const response = await fetch('https://www.farma.it/graphql', {
4836                        method: 'POST',
4837                        headers: {
4838                            'Content-Type': 'application/json',
4839                            'Store': 'default'
4840                        },
4841                        credentials: 'include',
4842                        body: JSON.stringify({query: this.getQuery(), variables: {}})
4843                    });
4844
4845                    const result = await response.json();
4846
4847                    if (result?.errors) {
4848                        this.initErrorMessages(result.errors);
4849                        return;
4850                    }
4851
4852                    const data = result.data?.ambrandlist;
4853                    const mapper = this.settingsMapper(result);
4854
4855                    // Update component settings
4856                    Object.keys(mapper).forEach(config => {
4857                        this[config] = mapper[config];
4858                    });
4859
4860                    if (!this.filterDisplayAll) {
4861                        letters = data.all_letters.split(',');
4862                    }
4863
4864                    const items = data.items.map(brand => {
4865                        brand.image = brand.img
4866                            ? this.getMediaUrl(brand.img) : (brand.image ? this.getMediaUrl(brand.image) : null);
4867                        return brand;
4868                    });
4869
4870                    this.letters = letters.map(letter => ({
4871                        letter,
4872                        brands: this.getLetterItems(items, letter),
4873                    }));
4874
4875                    this.items = this.letters.filter(row => row.brands?.length > 0);
4876
4877                    cached = true;
4878                } catch (error) {
4879                    displayError(error);
4880                } finally {
4881                    this.loading = false;
4882                }
4883            },
4884
4885            /**
4886             * Get brands by letter
4887             *
4888             * @param items
4889             * @param letter
4890             * @returns {*}
4891             */
4892            getLetterItems(items, letter) {
4893                return items.filter(row => row.letter === letter);
4894            },
4895
4896            convertHtml(text) {
4897                let textField = document.createElement("textarea");
4898                textField.innerHTML = text;
4899                return textField.value;
4900            }
4901        }
4902    }
4903    
4904    function amBrandsPopupData() {
4905        return Object.assign(
4906            amBrandsPopup(),
4907            {
4908                brandPopupClass() {
4909                    return {
4910                        'hover:border-primary data-[active]:border-primary': !this.isPopupEnabled
4911                    }
4912                },
4913                labelPopupClass() {
4914                    return {'w-14 opacity-0': this.label === ''}
4915                },
4916                popupcontentClass() {
4917                    return {
4918                        'hidden' : this.hoverPanelActiveId !== 'am-brand',
4919                        'left-0' : `${this.$el.dataset.first}`,
4920                        'right-0' : `${this.$el.dataset.last}`
4921                    }
4922                },
4923                panelActiveMouseenterEvent() {
4924                    return this.hoverPanelActiveId = 'am-brand'
4925                },
4926                panelActiveMouseleaveEvent() {
4927                    return this.hoverPanelActiveId = null
4928                },
4929                isPopupShow() {
4930                    return this.hoverPanelActiveId === 'am-brand'
4931                },
4932                labelText(){
4933                    return this.label
4934                },
4935                isEnabledPopup(){
4936                    return this.isPopupEnabled
4937                },
4938                showExtMessage(){
4939                    return false
4940                },
4941                notLoading() {
4942                    return !this.loading
4943                },
4944                brandLabel() {
4945                    return this.brand.label
4946                },
4947                letterClass() {
4948                    return {
4949                        'border-blue-400 text-blue-400 bg-blue-100': this.selectedLetter === this.letter.letter,
4950                        'bg-gray-200 text-gray-700 cursor-default pointer-events-none': !this.letter.brands || this.letter.brands.length === 0
4951                    }
4952                },
4953                letterClickEvent(event) {
4954                    return this.chooseLetter(this.letter.letter)
4955                },
4956                letterBrands() {
4957                    return this.letter.brands
4958                },
4959                brandUrl() {
4960                    return this.getBrandUrl(this.brand.url)
4961                },
4962                brandImage() {
4963                    return this.brand.image
4964                },
4965                notBrandImage() {
4966                    return !this.brand.image
4967                },
4968                letterLetter() {
4969                    return this.letter.letter
4970                },
4971                brandBrandId() {
4972                    return this.brand.brandId
4973                },
4974                isLetterShow() {
4975                    return !this.selectedLetter || this.selectedLetter === this.letter.letter
4976                },
4977                brandImageMediaUrl() {
4978                    return this.getMediaUrl(this.brand.image)
4979                },
4980                brandImageStyle() {
4981                    return `max-width: ${this.imageWidth ? this.imageWidth + 'px' : '100px' };max-height: ${this.imageHeight ? this.imageHeight + 'px' : 'inherit'}`
4982                },
4983                brandsLabelStyle() {
4984                    return `min-width: ${this.imageWidth}px`
4985                },
4986                brandLabelFilter() {
4987                    return this.brand.label.charAt(0)
4988                },
4989                brandCnt() {
4990                    return '(' + this.brand.cnt + ')'
4991                }
4992            }
4993        )
4994    }
4995    window.addEventListener('alpine:init', () => Alpine.data('amBrandsPopupData', amBrandsPopupData), {once: true});
4996</script>
4996
4997</div><div class="after-footer footer content">
4998                                    <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">
4999                 <template x-if="show">
5000                                 <div class="dna-footer-item-content">
5001                         <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">
5002    <div class="md:flex justify-between text-white container lg:grid grid-cols-8">
5003        <div class="flex items-center order-2 col-span-2 mb-4 md:mb-0 w-60 socials">
5004            <h5 class="font-bold font-baloo-bhaina text-white">Seguici su</h5>
5005            <a target="_blank" href="https://www.instagram.com/farma.it/" class="ml-4">
5006                <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" />
5007            </a>
5008            <a target="_blank" href="https://www.facebook.com/farmapuntoit" class="ml-4">
5009                <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" />
5010            </a>
5011        </div>
5012        <div class="col-span-6">
5013            <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">
5014                <span class="flex gap-1.5"><span class="hidden md:block">&nbsp;&nbsp;-</span>CREDITS &nbsp;
5015                 <a href="https://www.dnafactory.it/" target="_blank" title="DNA Factory">
5016                    <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" />
5017                 </a>
5018                </span>
5019            </p>
5020
5021            <p class="text-xxs md:text-xs">Sede legale Via delle Repubbliche Marinare 128, 80147 Napoli </br>
5022Vendita online di medicinali senza obbligo di prescrizione effettuata tramite esercizio autorizzato dal Ministero della Salute – Codice identificativo n. 016715</p>
5023        </div>
5024    </div>
5025</div></div>                     </div>
5026                             </template>
5027            </div>
5028                </div></footer>
5029<script>
5030    function amBannerInjectorResolver () {
5031        const injectors = Object.values({"products.among.injector":{"position":14,"name":"amBannerAmongCategoryInjector"},"products.belowcart.injector":{"position":15,"name":"amBannerBelowCartInjector"}});
5032
5033        return {
5034            amBannerAmongCategoryInjector: function (sectionId, injectorParams) {
5035                const container = document.querySelector('[data-role="amasty-banner-container"][data-position="' + sectionId + '"]');
5036
5037                Object.keys(injectorParams.banners).map((id) => {
5038                    const params = injectorParams.banners[id];
5039                    const element = container.querySelector('[data-banner-id="' + id + '"]');
5040                    insertBannerAmongCategoryByConfig({
5041                        containerSelector: injectorParams.containerSelector,
5042                        itemSelector: injectorParams.itemSelector,
5043                        afterProductRow: params.afterProductRow,
5044                        afterProductNum: params.afterProductNum,
5045                        span: params.width
5046                    }, element);
5047                });
5048
5049                function insertBannerAmongCategoryByConfig (injectorConfig, element) {
5050                    const options = {
5051                        injectorConfig: {},
5052                        container: null,
5053                        after: null,
5054                        wrapper: null,
5055                        initialized: false,
5056                        gridSizes: ['sm', 'xl'],
5057                        bannerWidthClass: 'col-span',
5058                        ...injectorConfig
5059                    }
5060
5061                    insertBanner(element);
5062
5063                    function insertBanner(element) {
5064                        const initialized = setOptions();
5065
5066                        if (!initialized) {
5067                            return;
5068                        }
5069
5070                        element.classList.add('ambanners-injected-banner');
5071                        const wrapper = options.wrapper.cloneNode(true);
5072
5073                        wrapper.classList.remove('card', 'card-interactive');
5074                        addStylesForDifferentSizes(wrapper);
5075
5076                        insertWrapper(wrapper);
5077                        wrapper.append(element);
5078                    }
5079
5080                    function setOptions () {
5081                        const initialized = document.querySelector(options.containerSelector) !== null;
5082
5083                        if (!initialized) {
5084                            console.warn(
5085                                'Failed to initialize banner: Can\'t find an element with selector "' + options.containerSelector + '"'
5086                            );
5087
5088                            return;
5089                        }
5090
5091                        options.container = document.querySelector(options.containerSelector);
5092
5093                        setLineToInject();
5094
5095                        if (!options.after) {
5096                            return;
5097                        }
5098
5099                        setWrapper();
5100
5101                        return true;
5102                    }
5103
5104                    function setLineToInject() {
5105                        if (options.afterProductNum === -1) {
5106                            setFirstLineToInject();
5107                        } else {
5108                            setLineByPositionToInject();
5109                        }
5110                    }
5111
5112                    function setWrapper() {
5113                        if (options.after) {
5114                            options.wrapper = options.after.cloneNode();
5115                        }
5116                    }
5117
5118                    function setFirstLineToInject() {
5119                        options.after = document.querySelector(options.itemSelector);
5120                    }
5121
5122                    function setLineByPositionToInject() {
5123                        // calc banner insert offset
5124                        const offset = calculateOffsetBasedOnPreviousBanners();
5125
5126                        options.after = document.querySelectorAll(options.itemSelector)[options.afterProductNum - offset];
5127                    }
5128
5129                    function calculateOffsetBasedOnPreviousBanners () {
5130                        return [...document.querySelectorAll(`${options.itemSelector}`)]
5131                            ?.reduce((accumulator, amInjectedBannerWrapper) => {
5132                                const widthAttributeValue = Number(amInjectedBannerWrapper?.getAttribute('am-banner-span'))
5133
5134                                if (widthAttributeValue > 1) {
5135                                    accumulator += (widthAttributeValue - 1);
5136                                }
5137
5138                                return accumulator;
5139                            }, 0);
5140                    }
5141
5142                    function insertWrapper(insert) {
5143                        if (options.after) {
5144                            insertWrapperAfterFoundProduct(insert);
5145                        } else if (options.container) {
5146                            insertWrapperInProductListContainer(insert);
5147                        }
5148                    }
5149
5150                    function insertWrapperAfterFoundProduct(insert) {
5151                        if (options.afterProductNum === -1) {
5152                            options.after.parentNode.insertBefore(insert, options.after);
5153                        } else {
5154                            options.after.parentNode.insertBefore(insert, options.after.nextSibling);
5155                        }
5156                    }
5157
5158                    function insertWrapperInProductListContainer(insert) {
5159                        if (parseInt(options.afterProductRow) > 1) {
5160                            options.container.innerHTML += insert.innerHTML;
5161                        } else {
5162                            options.container.innerHTML = insert.innerHTML + options.container.innerHTML;
5163                        }
5164                    }
5165
5166                    function addStylesForDifferentSizes (wrapper) {
5167                        options.gridSizes?.forEach((size, index) => {
5168                            const widthValue = options.span > index + 1 ? index + 2 : options.span;
5169                            wrapper?.classList.add(`${size}:${options.bannerWidthClass}-${widthValue}`);
5170                            wrapper?.setAttribute('am-banner-span', widthValue);
5171                        });
5172                    }
5173                }
5174            },
5175
5176            amBannerBelowCartInjector: function (sectionId) {
5177                const belowProductAddToCartBanner = document.querySelector('.ambanners.ambanner-' + sectionId);
5178                belowProductAddToCartBanner.style.display = 'block';
5179                document.querySelectorAll('.product-item')?.forEach(product => {
5180                    product?.append(belowProductAddToCartBanner.cloneNode(true));
5181                });
5182                belowProductAddToCartBanner.style.display = 'none';
5183            },
5184
5185            resolve: function (position, injectorParams) {
5186                const injector = injectors.find((injector) => {
5187                    return injector.position === Number(position);
5188                });
5189
5190                return this[injector?.name]?.(position, injectorParams);
5191            }
5192        }
5193    }
5194</script>
5194
5195    <span class="data-fbq-success" data-fbq-success="true"></span>
5196
5197<div x-data="{...hyva.modal(), ...initAmGdprPolicyPopup()}" x-init="initGdprPopup()"
5198     x-spread="eventListeners" x-bind="eventListeners">
5199    <div x-cloak x-spread="overlay('amgdpr-policy-popup')" x-bind="overlay('amgdpr-policy-popup')"
5200         class="fixed inset-0 flex items-center justify-center text-left bg-black bg-opacity-50 z-40">
5201        <div x-ref="amgdpr-policy-popup" role="dialog" aria-labelledby="amgdpr-policy-content"
5202             class="flex flex-col  bg-white shadow-xl rounded-lg p-10 max-h-[95vh] max-w-6xl relative">
5203            <button @click="$dispatch('amgdpr-close-policy')" aria-label="Chiudi"
5204                    class="absolute right-4 top-4 text-gray-300 transition
5205                    hover:text-black focus:drop-shadow-md hover:drop-shadow-md">
5206                <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">
5207  <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"/>
5208<title>x</title></svg>
5209            </button>
5210            <div class="flex w-full">
5211                <p class="w-full text-3xl mb-5" x-text="title"></p>
5212            </div>
5213            <div x-show="notificationText && policyData.versionChanged" class="flex w-full">
5214                <p class="mb-4 p-4 bg-yellow-100 w-full" x-text="notificationText"></p>
5215            </div>
5216            <div id="amgdpr-policy-content" class="max-h-[500px] overflow-auto first:mx-0 child:mx-0"
5217                 x-html="policyText"></div>
5218            <div class="mt-8 flex w-full justify-center">
5219                <button x-focus-first @click="$dispatch('amgdpr-accept-policy')" type="button"
5220                        class="btn btn-primary font-bold"
5221                        aria-label="Ho&#x20;letto&#x20;e&#x20;Acconsento">
5222                    Ho letto e Acconsento                </button>
5223            </div>
5224        </div>
5225
5226    </div>
5227</div>
5228
5229<script>
5230    'use strict';
5231
5232    function initAmGdprPolicyPopup() {
5233        return {
5234            /**
5235             * @typedef PolicyData
5236             * @property {string} policyVersion
5237             * @property {boolean} show
5238             * @property {string} title
5239             * @property{boolean} versionChanged
5240             * @property {boolean} hideClose
5241             * @property {boolean} action
5242             */
5243
5244            eventListeners: {
5245                ['@amgdpr-accept-policy']() {
5246                    if (this.consentId) {
5247                        window.dispatchEvent(new CustomEvent('amgdpr-consent-accepted', {detail: this.consentId}));
5248                        this.consentId = undefined;
5249                        this.hide('amgdpr-policy-popup');
5250                    } else {
5251                        this.acceptPolicy();
5252                    }
5253                },
5254                ['@amgdpr-show-policy.window'](event) {
5255                    this.consentId = event.detail;
5256                    this.fetchPolicyContent().then(() => {
5257                        this.$nextTick(() => {
5258                            this.show('amgdpr-policy-popup');
5259                        });
5260                    });
5261                },
5262                ['@amgdpr-close-policy']() {
5263                    this.hide('amgdpr-policy-popup');
5264                }
5265            },
5266            textUrl: `${BASE_URL}gdpr/policy/policytext`,
5267            acceptUrl: `${BASE_URL}gdpr/policy/accept`,
5268            popupDataUrl: `${BASE_URL}gdpr/policy/popupData`,
5269            notificationText: 'We would like to inform you that our Privacy Policy has been amended.Please, read and accept the new terms.',
5270            showOnPageLoad: '',
5271            /**
5272             * @type PolicyData
5273             */
5274            policyData: {
5275                policyVersion: '',
5276                show: false,
5277                title: '',
5278                versionChanged: false,
5279                hideClose: false,
5280                action: true
5281            },
5282            title: '',
5283            policyText: '',
5284            consentId: undefined,
5285            initGdprPopup: function () {
5286                this.fetchPolicyData().then(() => {
5287                    if ((this.showOnPageLoad && this.policyData.show) || this.policyData.versionChanged) {
5288                        this.fetchPolicyContent().then(() => {
5289                            this.$nextTick(() => {
5290                                this.show('amgdpr-policy-popup');
5291                            });
5292                        });
5293                    }
5294                });
5295            },
5296
5297            /**
5298             * @returns {Promise}
5299             */
5300            fetchPolicyData: function () {
5301                return fetch(this.popupDataUrl)
5302                    .then(response => response.json())
5303                    .then((data) => {
5304                        this.policyData = {...data}
5305                    })
5306                    .catch(error => this.dispatchErrorMessage(error));
5307            },
5308
5309            /**
5310             * @returns {Promise}
5311             */
5312            fetchPolicyContent: function () {
5313                this.title = '';
5314                this.policyText = '';
5315
5316                const params = !!this.consentId
5317                    ? '?' + new URLSearchParams({consent_id: this.consentId})
5318                    : ''
5319
5320                return fetch(this.textUrl + params)
5321                    .then(response => response.json())
5322                    .then(policyContent => {
5323                        this.title = policyContent.title;
5324                        this.policyText = policyContent.content;
5325                    }).catch(error => this.dispatchErrorMessage(error));
5326            },
5327
5328            /**
5329             * @returns {void}
5330             */
5331            acceptPolicy: function () {
5332                window.dispatchEvent(new Event('amgdpr-loading-start'));
5333
5334                const body = new URLSearchParams({form_key: hyva.getFormKey(), ...this.policyData});
5335                const contentType = 'application/x-www-form-urlencoded; charset=UTF-8';
5336
5337                fetch(this.acceptUrl, {method: 'POST', body, headers: {'Content-Type': contentType}})
5338                    .then(response => response.json())
5339                    .then(data => {
5340                        if (data.error) {
5341                            this.dispatchErrorMessage(data.message)
5342                        } else {
5343                            this.notificationText = '';
5344                            this.hide('amgdpr-policy-popup');
5345                        }
5346                    })
5347                    .catch(error => this.dispatchErrorMessage(error))
5348                    .finally(() => window.dispatchEvent(new Event('amgdpr-loading-stop')));
5349            },
5350
5351            /**
5352             * @param {string} message
5353             * @returns {void}
5354             */
5355            dispatchErrorMessage: function (message) {
5356                typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([
5357                    {
5358                        type: "error",
5359                        text: message
5360                    }
5361                ]);
5362            }
5363        }
5364    }
5365</script>
5365
5366
5367
5368
5369
5370<script>
5371    function initFakeBrothers() {
5372        return {
5373            selected: 0,
5374            productId: 0,
5375            data: [],
5376            skeletonCount: 0,
5377            fetched: false,
5378            ajaxUrl: 'https://www.farma.it/fakeconfigurable/product/getBrothers/',
5379            showAttribute: false,
5380            attributeLabel: 'Color',
5381            optionDisplay: null,
5382            responsive: false,
5383            responsiveData: {
5384                children: [],
5385                childrenLenght: 0,
5386                itemSize: 0,
5387                itemOffset: 0,
5388                childrenSize: 0,
5389                boxSize: 0,
5390                hiddenCount: 0
5391            },
5392            init() {
5393                // Skeleton init
5394                if (this.skeletonCount) {
5395                    this.data = Array.from({length: this.skeletonCount}, () => ({}));
5396                }
5397                // Responsive init
5398                this.$nextTick(() => {
5399                    if (this.responsive && this.data.length) {
5400                        this.initResponsive();
5401                    }
5402                });
5403                // Brothers init
5404                if (this.productId) {
5405                    fetch(this.ajaxUrl + '?productId=' + this.productId)
5406                        .then(response => {
5407                            if (! response.ok) console.warn('GET request failed');
5408                            return response.json()
5409                        })
5410                        .then(result => {
5411                            if (this.showAttribute) {
5412                                result.data.forEach(function (item, index) {
5413                                    if (item.attribute == false) {
5414                                        result.data[index].attribute = '';
5415                                    }
5416                                });
5417                            }
5418                            this.data = result.data;
5419                            this.fetched = true;
5420                            // Attribute init
5421                            this.$nextTick(() => {
5422                                if (this.showAttribute) {
5423                                    // Siccome "x-ref" non funziona dentro gli elementi "template" devo usare "querySelector"
5424                                    this.optionDisplay = document.querySelector('[x-ref="optionDisplay"]');
5425                                    this.optionDisplay.innerText = this.data[0].attribute;
5426                                }
5427                            })
5428                        })
5429                        .catch(result => {
5430                            console.error(result.error);
5431                        })
5432                }
5433            },
5434            initResponsive() {
5435                this.responsiveData.children = this.$el.querySelectorAll('.brother');
5436                this.responsiveData.itemSize = this.responsiveData.children[0].offsetWidth + this.responsiveData.itemOffset;
5437                this.responsiveData.childrenLenght = this.responsiveData.children.length;
5438                this.responsiveData.childrenSize = this.responsiveData.childrenLenght * this.responsiveData.itemSize;
5439                this.calculateHiddenCount();
5440            },
5441            calculateHiddenCount() {
5442                if (this.responsive) {
5443                    this.responsiveData.boxSize = this.$el.offsetWidth;
5444
5445                    if (this.responsiveData.childrenSize > this.responsiveData.boxSize) {
5446                        this.responsiveData.hiddenCount =
5447                            Math.ceil((this.responsiveData.childrenSize - this.responsiveData.boxSize) / this.responsiveData.itemSize) + 1;
5448                    } else {
5449                        this.responsiveData.hiddenCount = 0;
5450                    }
5451                }
5452            },
5453            eventListeners: {
5454                ['@resize.window.debounce.50ms']() {
5455                    this.calculateHiddenCount();
5456                }
5457            }
5458        }
5459
5460    }
5461</script>
5461
5462<!-- Start Google Analytics 4 for Google Tag Manager by MagePal -->
5463        
5463<script type="text/javascript">
5464             (function() {
5465                window.addEventListener("private-content-loaded", event => {
5466                    const dataObject = event.detail.data['magepal-eegtm-jsdatalayer'] || {};
5467                    pushAddRemoveItemDataLayer(dataObject)
5468                });
5469
5470                const isObject = x => x === Object(x);
5471                const has = (x, p) => isObject(x) && x.hasOwnProperty(p);
5472                var itemListName = null;
5473                var itemListId = null;
5474
5475                function isEmpty(obj){
5476                    return JSON.stringify(obj) === '{}';
5477                }
5478
5479                function addDynamicElements(storedData, item) {
5480
5481                    if (has(storedData, 'index')) {
5482                        item.index = storedData.index;
5483                    }
5484
5485                    if (has(storedData, 'item_list_id')) {
5486                        item.item_list_id = itemListId = storedData.item_list_id;
5487                    }
5488
5489                    if (has(storedData, 'item_list_name')) {
5490                        item.item_list_name = itemListName = storedData.item_list_name;
5491                    }
5492                }
5493                /**
5494                 * Add click position/index to data
5495                 * @param ecommerceData
5496                 * @return {*}
5497                 */
5498                function processData(ecommerceData) {
5499                    var storedData = JSON.parse(window.localStorage.getItem("product-click-ga4"));
5500
5501                    ecommerceData.forEach((data) => {
5502                        if (has(data, 'parent_sku')
5503                            && isObject(storedData)
5504                            && has(storedData, 'item_id')
5505                            && data.parent_sku === storedData.item_id
5506                        ) {
5507                            addDynamicElements(storedData, data);
5508                        } else if (has(data, 'parent_sku')) {
5509                            var product = getProductBySku(data.parent_sku);
5510
5511                            if (product) {
5512                                addDynamicElements(product, data);
5513                            }
5514                        }
5515                    });
5516
5517                    return ecommerceData;
5518                }
5519
5520                 function getProductBySku(sku) {
5521                     var dlItems = window.dataLayer.find((item) => item?.ecommerce?.items)
5522
5523                     if (dlItems !== 'undefined') {
5524                         var dlItem = dlItems?.ecommerce?.items.find((item) => item.item_id === sku)
5525                         if (dlItem !== undefined) {
5526                             return dlItem;
5527                         }
5528                     }
5529
5530                     return false;
5531                 }
5532
5533                function pushAddRemoveItemDataLayer(data) {
5534                    if (isObject(data) && has(data, 'cart_items')) {
5535                        var ts = window.localStorage.getItem("magepal-eegtm-jsdatalayer-ts");
5536
5537                        if (ts !== 'undefined' && parseInt(ts) === parseInt(data.data_id)) {
5538                            return false;
5539                        } else {
5540                            window.localStorage.setItem("magepal-eegtm-jsdatalayer-ts", parseInt(data.data_id));
5541                        }
5542
5543                        var cartGenericLayer = {};
5544                        var dataLayer = window.dataLayer;
5545                        var self = this;
5546
5547                        data.cart_items.forEach((cartItem) =>  {
5548                            if (has(cartItem, 'event')) {
5549                                if (has(cartItem,'ecommerce')) {
5550                                    cartItem.ecommerce.currency = 'EUR';
5551                                }
5552
5553                                if (cartItem.event === 'add_to_cart') {
5554                                    var itemsAdded = processData(cartItem.ecommerce.items);
5555
5556                                    //$("body").trigger("mpGa4ItemAddToCart", [itemsAdded, dataLayer]);
5557                                    cartGenericLayer.add = {
5558                                        'products': itemsAdded
5559                                    };
5560                                }
5561
5562                                if (cartItem.event === 'remove_from_cart') {
5563                                    var itemsRemoved = processData(cartItem.ecommerce.items);
5564
5565                                    //$("body").trigger("mpGa4ItemRemoveFromCart", [itemsRemoved, dataLayer]);
5566                                    cartGenericLayer.remove = {
5567                                        'products': itemsRemoved
5568                                    };
5569                                }
5570                            }
5571
5572                            if (!isEmpty(cartGenericLayer)) {
5573                                cartItem.cart = cartGenericLayer;
5574                            }
5575                            cartItem._clear = true;
5576                            dataLayer.push(cartItem);
5577                        });
5578                    }
5579                }
5580            })();
5581        </script>
5581
5582    <!-- End Google Analytics 4 for Google Tag Manager by MagePal -->
5583
5584<script>
5585    document.addEventListener("alpine:initialized", () => {
5586        Alpine.store('dnafactoryGA4Promotions', {
5587            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
5587i 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\"]"}],
5588            sentViewPromotions: [],
5589            sentClickPromotions: [],
5590
5591            init() {
5592                let self = this;
5593                self.promotions.forEach(function (promotion) {
5594                    var promotionElement = document.querySelector(promotion['css_selector']);
5595                    if (promotionElement) {
5596                        let aElement = promotionElement;
5597                        if (promotionElement.tagName !== 'A') {
5598                            aElement = promotionElement.closest('[data-content-type] a[href]');
5599                        }
5600
5601                        if (aElement) {
5602                            if (!self.sentViewPromotions.includes(promotion['promotion_id'])) {
5603                                self.sendView(promotion, aElement);
5604                            }
5605
5606                            aElement.addEventListener('click', function(e) {
5607                                if (!self.sentClickPromotions.includes(promotion['promotion_id'])) {
5608                                    self.sendClick(promotion, aElement);
5609                                }
5610                            });
5611                        }
5612                    }
5613                });
5614
5615                var additionalObserver = new MutationObserver(function(mutations) {
5616                    mutations.forEach(function(mutation) {
5617                        mutation.addedNodes.forEach(function(addedNode) {
5618                            if (addedNode.matches && addedNode.matches('.swiper-wrapper')) {
5619                                self.promotions.forEach(function (promotion) {
5620                                    var promotionElement = document.querySelector(promotion['css_selector']);
5621                                    if (promotionElement) {
5622                                        let aElement = promotionElement;
5623                                        if (promotionElement.tagName !== 'A') {
5624                                            aElement = promotionElement.closest('[data-content-type] a[href]');
5625                                        }
5626
5627                                        if (!self.sentViewPromotions.includes(promotion['promotion_id'])) {
5628                                            self.sendView(promotion, aElement);
5629                                        }
5630
5631                                        aElement.addEventListener('click', function(e) {
5632                                            if (!self.sentClickPromotions.includes(promotion['promotion_id'])) {
5633                                                self.sendClick(promotion, aElement);
5634                                            }
5635                                        });
5636                                    }
5637                                });
5638                            }
5639                        });
5640                    });
5641                });
5642
5643                document.querySelectorAll('[data-content-type="slider"], [data-role="amasty-banner-container"]').forEach(function (element) {
5644                    additionalObserver.observe(element, {childList: true, subtree: true});
5645                });
5646            },
5647
5648            sendView(promotionData, promotionElement = null) {
5649                this.sentViewPromotions.push(promotionData['promotion_id']);
5650                promotionData = this.normalizeData(promotionData, promotionElement);
5651                window.dataLayer.push({
5652                    event: 'view_promotion',
5653                    ecommerce: {
5654                        creative_name: promotionData['creative_name'],
5655                        creative_slot: promotionData['creative_slot'],
5656                        promotion_id: promotionData['promotion_id'],
5657                        promotion_name: promotionData['promotion_name'],
5658                    }
5659                })
5660            },
5661
5662            sendClick(promotionData, promotionElement = null) {
5663                this.sentClickPromotions.push(promotionData['promotion_id']);
5664                promotionData = this.normalizeData(promotionData, promotionElement);
5665                window.dataLayer.push({
5666                    event: 'select_promotion',
5667                    ecommerce: {
5668                        creative_name: promotionData['creative_name'],
5669                        creative_slot: promotionData['creative_slot'],
5670                        promotion_id: promotionData['promotion_id'],
5671                        promotion_name: promotionData['promotion_name'],
5672                    }
5673                })
5674            },
5675
5676            normalizeData(promotionData, promotionElement = null) {
5677                if (!promotionElement) {
5678                    return promotionData;
5679                }
5680
5681                var imgElement = promotionElement.querySelector('img');
5682                if (!imgElement) {
5683                    return promotionData;
5684                }
5685
5686                promotionData['creative_name'] = promotionData['creative_name'] ? promotionData['creative_name'] : imgElement.src.replace(BASE_URL, '');
5687                promotionData['creative_slot'] = promotionData['creative_slot'] ? promotionData['creative_slot'] : imgElement.alt;
5688                promotionData['promotion_name'] = promotionData['promotion_name'] ? promotionData['promotion_name'] : imgElement.title;
5689                return promotionData;
5690            }
5691        });
5692    });
5693</script>
5693
5694
5695<script>
5696    document.addEventListener("alpine:initialized", () => {
5697        Alpine.store('dnafactoryGA4Items', {
5698            itemsPushed: [],
5699            itemsSelected: [],
5700            itemsToPush: [],
5701
5702            sendItemListDebounced(...itemData) {
5703                let self = this;
5704                var itemDataToPush = itemData.filter(function (el) {
5705                    var itemList = el.item_list_id ?? 'default_list';
5706                    if (!(self.itemsPushed.hasOwnProperty(itemList) && self.itemsPushed[itemList].includes(el.item_id))) {
5707                        if (!self.itemsPushed.hasOwnProperty(itemList)) {
5708                            self.itemsPushed[itemList] = [];
5709                        }
5710                        self.itemsPushed[itemList].push(el.item_id);
5711                        return true;
5712                    }
5713
5714                    return false;
5715                });
5716
5717                this.itemsToPush.push(...itemDataToPush);
5718                Alpine.debounce(this.updateItemList.bind(this), 200)();
5719            },
5720
5721            sendItemList(itemsData, currency = "EUR", itemlistName = "Default List", itemlistId = "default_list") {
5722                window.dataLayer.push({
5723                    event: 'view_item_list',
5724                    ecommerce: {
5725                        items: this.normalizeData(itemsData)
5726                    },
5727                    currency: currency,
5728                    item_list_name: itemlistName,
5729                    item_list_id: itemlistId,
5730                    _clear: true
5731                })
5732            },
5733
5734            sendSelectItem(itemData, currency = "EUR", itemlistName = "Default List", itemlistId = "default_list") {
5735                if (this.itemsSelected.includes(itemData.item_id)) {
5736                    return;
5737                }
5738                this.itemsSelected.push(itemData.item_id);
5739
5740                window.dataLayer.push({
5741                    event: 'select_item',
5742                    ecommerce: {
5743                        items: this.normalizeData([itemData])
5744                    },
5745                    currency: currency,
5746                    item_list_name: itemlistName,
5747                    item_list_id: itemlistId,
5748                    _clear: true
5749                })
5750            },
5751
5752            updateItemList() {
5753                var items = this.itemsToPush;
5754                this.itemsToPush = [];
5755
5756                if (items.length > 0) {
5757                    var firstItem = items[0];
5758                    var [currency, itemListName, itemListId] = [firstItem.currency, firstItem.item_list_name, firstItem.item_list_id];
5759                    this.sendItemList(items, currency, itemListName, itemListId);
5760                }
5761            },
5762
5763            normalizeData(itemData) {
5764                itemData.forEach(function (el) {
5765                    var vatDivider = 1;
5766                    if (el.hasOwnProperty('vat_divider')) {
5767                        vatDivider = (parseFloat(el['vat_divider']) + 100)/100;
5768                        if (vatDivider <= 0) {
5769                            vatDivider = 1;
5770                        }
5771                    }
5772
5773                    if (el.hasOwnProperty('price')) {
5774                        el['price'] = parseFloat((el['price']/vatDivider).toFixed(2));
5775                    }
5776
5777                    if (el.hasOwnProperty('discount')) {
5778                        el['discount'] = parseFloat((el['discount']/vatDivider).toFixed(2));
5779                    }
5780
5781                    if (el.hasOwnProperty('item_category')) {
5782                        var categories = el['item_category'].split(/[>\/]+/);
5783                        if (categories.length > 0) {
5784                            var indexCategory = 1;
5785                            categories.forEach(function (category) {
5786                                var categoryKey = (indexCategory > 1) ? 'item_category' + indexCategory : 'item_category';
5787                                el[categoryKey] = category.trim();
5788                                indexCategory++;
5789                            });
5790                        }
5791                    }
5792                });
5793
5794                return itemData;
5795            }
5796        });
5797    });
5798</script>
5798
5799
5800<script>
5801    window.DNAFACTORY_GA4_SHOW_PRICE_TAX = 0;
5802    if (!window.dataLayer) {
5803        window.dataLayer = [];
5804    }
5805</script>
5805
5806
5807<script>
5808    let SnapSlider = class {
5809        constructor(el, {
5810            labelSepparator = 'di',
5811            autoPager,
5812            groupPager,
5813            loop
5814        } = {}) {
5815            this.el = el;
5816            this.track = this.el.querySelector("[data-track]");
5817            if (!this.track) {
5818                console.warn(
5819                    "No Slider track defined, reverting back to CSS slider.\nPlease create a wrapper for your slides with the attribute data-track",
5820                    this.el
5821                );
5822                return;
5823            }
5824            this.initialLoad = true;
5825            this.slides = [];
5826            this.inViewObserver;
5827            this.mutationObserver;
5828            this.resizeObserver;
5829            this.pager = this.el.querySelector("[data-pager]");
5830            this.navBtns = Array.from(
5831                this.el.querySelectorAll("[data-next], [data-prev]")
5832            );
5833            this.slideLabelSepparator = this.el.dataset.slideLabelSepparator || labelSepparator;
5834            this.useAutoPager = autoPager || this.el.hasAttribute("data-auto-pager") || false;
5835            this.useGroupPager = groupPager || this.el.hasAttribute("data-group-pager") || false;
5836            this.useLoop = loop || this.el.hasAttribute("data-loop") || false;
5837            this.sliderLabel = this.el.hasAttribute("aria-label") && this.el.getAttribute("aria-label").toLowerCase().trim().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
5838            this.sliderId = this.el.id || this.sliderLabel || "slider";
5839            this.markerIdName = "data-target-id";
5840            this.pagerClasses = this.el.dataset.pagerClass || "snap-pager";
5841            this.markerClasses = this.el.dataset.markerClass || "snap-marker";
5842            this.init();
5843        }
5844        init() {
5845            this.setupSlides();
5846            this.setupNav();
5847            if (this.useAutoPager) {
5848                this.createPager();
5849            } else {
5850                this.setupPager();
5851            }
5852            this.setupObservers();
5853            this.setupMutationObserver();
5854            this.setupResizeObserver();
5855            this.el.addEventListener("click", this.eventHandler.bind(this));
5856            this.el.addEventListener("keydown", this.eventHandler.bind(this));
5857            if ("onscrollend" in window) {
5858                this.track.addEventListener("scrollend", () => {
5859                    this.isNavigating = false;
5860                });
5861            } else {
5862                this.track.addEventListener("scroll", () => {
5863                    clearTimeout(this.scrollEndTimer);
5864                    this.scrollEndTimer = setTimeout(() => {
5865                        this.isNavigating = false;
5866                    }, 100);
5867                });
5868            }
5869        }
5870        destroy() {
5871            this.inViewObserver?.disconnect();
5872            this.mutationObserver?.disconnect();
5873            this.resizeObserver?.disconnect();
5874            this.el.removeEventListener("click", this.eventHandler.bind(this));
5875            this.el.removeEventListener("keydown", this.eventHandler.bind(this));
5876        }
5877        roundUpIfGreaterThan(number, min = 8) {
5878            const decimalPart = number - Math.floor(number);
5879            return decimalPart >= min ? Math.ceil(number) : Math.floor(number);
5880        }
5881        getInViewItems() {
5882            const inViewSlides = Array.from(this.track.querySelectorAll("[data-in-view]")).filter((el) => this.slides.includes(el));
5883            const firstInViewSlide = inViewSlides[0] || null;
5884            const lastInViewSlide = inViewSlides[inViewSlides.length - 1] || null;
5885            const isAtStart = firstInViewSlide === this.slides[0];
5886            const isAtEnd = lastInViewSlide === this.slides[this.slides.length - 1];
5887            return {
5888                inViewSlides,
5889                totalInViewSlides: inViewSlides.length,
5890                firstInViewSlide,
5891                lastInViewSlide,
5892                isAtStart,
5893                isAtEnd,
5894                hasNoOverflow: isAtStart && isAtEnd
5895            };
5896        }
5897        groupPagerMarkers() {
5898            if (this.slides.length === 0 || !this.pager || !this.useGroupPager) return;
5899            const totalVisibleSlides = this.roundUpIfGreaterThan(
5900                this.track.offsetWidth / this.slides[0].offsetWidth
5901            );
5902            const markers = Array.from(this.pager.querySelectorAll("a, button"));
5903            markers.forEach((marker, index) => {
5904                marker.style.display = index % totalVisibleSlides === 0 ? null : "none";
5905            });
5906        }
5907        handleInView(entries) {
5908            entries.forEach((entry) => {
5909                const marker = this.pager && (this.pager.querySelector(`[href="#${entry.target.id}"]`) || this.pager.querySelector(
5910                    `[${this.markerIdName}="${entry.target.id}"]`
5911                ));
5912                entry.target.toggleAttribute("data-in-view", entry.isIntersecting);
5913                entry.target.toggleAttribute("inert", !entry.isIntersecting);
5914                marker?.setAttribute("aria-current", entry.isIntersecting);
5915                marker?.setAttribute("tabindex", entry.isIntersecting ? "0" : "-1");
5916            });
5917            const { isAtStart, isAtEnd, hasNoOverflow } = this.getInViewItems();
5918            this.navBtns.forEach((btn) => {
5919                if (btn.hasAttribute("data-next")) {
5920                    btn.style.visibility = hasNoOverflow ? "hidden" : null;
5921                    isAtEnd && !this.useLoop ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled");
5922                }
5923                if (btn.hasAttribute("data-prev")) {
5924                    btn.style.visibility = hasNoOverflow ? "hidden" : null;
5925                    isAtStart && !this.useLoop ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled");
5926                }
5927            });
5928            if (this.pager) {
5929                this.pager.style.visibility = hasNoOverflow ? "hidden" : null;
5930                this.pager.toggleAttribute("inert", hasNoOverflow);
5931            }
5932            if (!this.initialLoad) {
5933                this.el.dispatchEvent(
5934                    new CustomEvent("slideChange", {
5935                        detail: this.getInViewItems()
5936                    })
5937                );
5938            } else {
5939                this.initialLoad = false;
5940            }
5941            if (document.activeElement.parentElement.hasAttribute("data-pager")) {
5942                const activeItems = this.pager.querySelectorAll('[tabindex="0"]');
5943                if (activeItems.length) {
5944                    activeItems[0].focus({ preventScroll: true });
5945                }
5946            }
5947        }
5948        getSlides() {
5949            if (!this.track) return [];
5950            return Array.from(this.track.children).filter(
5951                (child) => child.tagName.toLowerCase() !== "template" && child.tagName.toLowerCase() !== "style" && child.tagName.toLowerCase() !== "script" && child.style.display !== "none"
5952            );
5953        }
5954        refreshSlides() {
5955            this.initialLoad = true;
5956            this.slides = this.getSlides();
5957            this.setupSlides();
5958            if (this.useAutoPager) {
5959                this.createPager();
5960            } else {
5961                this.setupPager();
5962            }
5963            this.groupPagerMarkers();
5964            this.setupObservers();
5965        }
5966        setupSlides() {
5967            this.slides = this.getSlides();
5968            this.slides.forEach((slide, index) => {
5969                const totalSlides = this.slides.length;
5970                const currentSlide = index + 1;
5971                const existingLabel = slide.getAttribute("aria-label") || "";
5972                const isImage = slide.tagName.toLowerCase() === "img" || slide.tagName.toLowerCase() === "picture";
5973                const slideLabelTag = isImage ? "alt" : "aria-label";
5974                const hasAutoLabel = existingLabel.startsWith(
5975                    `${currentSlide} ${this.slideLabelSepparator} `
5976                );
5977                if (!slide.hasAttribute("id")) {
5978                    slide.setAttribute(
5979                        "id",
5980                        `${this.sliderId}-item-${currentSlide}`
5981                    );
5982                }
5983                if (!slide.hasAttribute(slideLabelTag) || slide.getAttribute(slideLabelTag) === "" || hasAutoLabel) {
5984                    slide.setAttribute(
5985                        slideLabelTag,
5986                        `${currentSlide} ${this.slideLabelSepparator} ${totalSlides}`
5987                    );
5988                }
5989                if (slide.tagName.toLowerCase() === "div" && !slide.hasAttribute("role")) {
5990                    slide.setAttribute("role", "group");
5991                }
5992                if (this.pager && !isImage) {
5993                    slide.setAttribute("role", "tabpanel");
5994                }
5995                if (slide.getAttribute("role") === "group") {
5996                    slide.setAttribute("aria-roledescription", "item");
5997                }
5998            });
5999            if (!this.el.hasAttribute("role") && this.el.tagName !== "SECTION") {
6000                this.el.setAttribute("role", "region");
6001            }
6002            if (!this.el.hasAttribute("aria-roledescription")) {
6003                this.el.setAttribute("aria-roledescription", "carousel");
6004            }
6005            if (!this.track.hasAttribute("tabindex")) {
6006                this.track.setAttribute("tabindex", 0);
6007            }
6008            this.track.setAttribute("aria-live", "polite");
6009        }
6010        setupNav() {
6011            this.navBtns.forEach((btn) => {
6012                btn.setAttribute("disabled", "");
6013                btn.removeAttribute("hidden");
6014                btn.classList.remove("invisible");
6015                btn.style.visibility = null;
6016            });
6017        }
6018        createPager() {
6019            const newPager = document.createElement("nav");
6020            newPager.setAttribute("data-pager", "");
6021            newPager.setAttribute("role", "tablist");
6022            newPager.classList.add(...this.pagerClasses.split(" "));
6023            this.slides.forEach((slide, index) => {
6024                const marker = document.createElement("button");
6025                const slideId = slide.id || `${this.sliderId}-item-${index + 1}`;
6026                marker.setAttribute(this.markerIdName, slideId);
6027                marker.classList.add(...this.markerClasses.split(" "));
6028                this.setupPagerMarker(marker, index);
6029                newPager.appendChild(marker);
6030                if (slide.tagName.toLowerCase() !== "img" && slide.tagName.toLowerCase() !== "picture") {
6031                    slide.removeAttribute("aria-roledescription");
6032                    slide.setAttribute("role", "tabpanel");
6033                }
6034            });
6035            if (this.pager) {
6036                this.pager.setAttribute("role", "tablist");
6037                this.pager.replaceChildren(...newPager.children);
6038            } else {
6039                this.track.after(newPager);
6040                this.pager = this.el.querySelector("[data-pager]");
6041            }
6042        }
6043        setupPager() {
6044            if (!this.pager) return;
6045            this.pager.setAttribute("role", "tablist");
6046            const items = Array.from(this.pager.querySelectorAll("a, button"));
6047            items.forEach((marker, index) => this.setupPagerMarker(marker, index));
6048        }
6049        setupPagerMarker(marker, index) {
6050            const markerId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName);
6051            const slideId = markerId || `${this.sliderId}-item-${index + 1}`;
6052            if (!markerId) {
6053                marker.setAttribute(this.markerIdName, slideId);
6054            }
6055            marker.setAttribute("role", "tab");
6056            marker.setAttribute("aria-controls", slideId);
6057            marker.setAttribute("aria-posinset", index + 1);
6058            marker.setAttribute("aria-setsize", this.slides.length);
6059            marker.setAttribute("tabindex", "-1");
6060            if (!marker.hasAttribute("aria-label")) {
6061                marker.setAttribute("aria-label", `Slide ${index + 1}`);
6062            }
6063        }
6064        setupObservers() {
6065            if (this.inViewObserver) {
6066                this.inViewObserver.disconnect();
6067            }
6068            this.inViewObserver = new IntersectionObserver(
6069                this.handleInView.bind(this), {
6070                    root: this.track,
6071                    threshold: 0.8
6072                }
6073            );
6074            this.slides.forEach((slide) => this.inViewObserver.observe(slide));
6075        }
6076        setupMutationObserver() {
6077            this.mutationObserver = new MutationObserver((mutations) => {
6078                if (mutations.some((m) => m.type === "childList" || m.target.parentElement === this.track)) {
6079                    this.refreshSlides();
6080                }
6081            });
6082            this.mutationObserver.observe(this.track, {
6083                childList: true,
6084                subtree: true,
6085                attributeFilter: ["style"]
6086            });
6087        }
6088        setupResizeObserver() {
6089            this.resizeObserver = new ResizeObserver(
6090                this.groupPagerMarkers.bind(this)
6091            );
6092            this.resizeObserver.observe(this.el);
6093        }
6094        goToSlideDir(dir = "next") {
6095            if (this.isNavigating) return;
6096            const { firstInViewSlide, lastInViewSlide } = this.getInViewItems();
6097            const isPrev = dir === "prev";
6098            const referenceSlide = isPrev ? firstInViewSlide : lastInViewSlide;
6099            const currentIndex = this.slides.indexOf(referenceSlide);
6100            let targetIndex = isPrev ? currentIndex - 1 : currentIndex + 1;
6101            if (targetIndex < 0 || targetIndex >= this.slides.length) {
6102                if (!this.useLoop) return;
6103                targetIndex = isPrev ? this.slides.length - 1 : 0;
6104            }
6105            const targetSlide = this.slides[targetIndex];
6106            if (!targetSlide) return;
6107            this.isNavigating = true;
6108            targetSlide.scrollIntoView({
6109                block: "nearest",
6110                inline: isPrev ? "end" : "start"
6111            });
6112        }
6113        pagerToSlide(event) {
6114            if (!event.target.closest("[data-pager]")) return;
6115            const marker = event.target.closest("a, button");
6116            if (!marker) return;
6117            event.preventDefault();
6118            const slideId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName);
6119            const targetSlide = this.track.querySelector(`#${slideId}`);
6120            targetSlide?.scrollIntoView({ block: "nearest", inline: "start" });
6121        }
6122        eventHandler(event) {
6123            const target = event.target.closest(
6124                "[data-next], [data-prev], [data-pager]"
6125            );
6126            if (!target) return;
6127            if (event.type === "click") {
6128                if (target.hasAttribute("data-next")) {
6129                    this.goToSlideDir("next");
6130                } else if (target.hasAttribute("data-prev")) {
6131                    this.goToSlideDir("prev");
6132                } else if (target.closest("[data-pager]")) {
6133                    this.pagerToSlide(event);
6134                }
6135            }
6136            if (event.type === "keydown" && target.closest("[data-pager]")) {
6137                if (event.key === "ArrowRight" || event.key === "ArrowDown") {
6138                    event.preventDefault();
6139                    this.goToSlideDir("next");
6140                } else if (event.key === "ArrowLeft" || event.key === "ArrowUp") {
6141                    event.preventDefault();
6142                    this.goToSlideDir("prev");
6143                }
6144            }
6145        }
6146    };
6147
6148    (() => {
6149        function alpineSnapSlider(Alpine) {
6150            Alpine.directive("snap-slider", (el, {
6151                modifiers
6152            }, {
6153                cleanup
6154            }) => {
6155                const slider = new SnapSlider(el, {
6156                    autoPager: modifiers.includes("auto-pager"),
6157                    groupPager: modifiers.includes("group-pager"),
6158                    loop: modifiers.includes("loop")
6159                });
6160                cleanup(() => {
6161                    slider.destroy();
6162                });
6163            });
6164        }
6165
6166        document.addEventListener("alpine:init", () => {
6167            window.Alpine.plugin(alpineSnapSlider);
6168        });
6169    })();
6170    //# sourceURL=alpine-snap-slider.js
6171</script>
vendor: 1 bytes, line 6171
6171
6172<script>
6173    (() => {
6174        // src/dialog.js
6175        function dialog_default(Alpine) {
6176            Alpine.directive("htmldialog", fylgjaAlpineDialog);
6177            function fylgjaAlpineDialog(el, { expression, modifiers }, { evaluateLater, cleanup }) {
6178            const evaluate = expression.length ? evaluateLater(expression) : () => {};
6179            const lockPageScroll = modifiers.includes("noscroll");
6180            const isModeless = modifiers.includes("modeless");
6181            const closeBy = el.getAttribute("closeby") || modifierValue(modifiers, "closeby", "closerequest");
6182            el.style.display = null;
6183            el.style.length === 0 && el.removeAttribute("style");
6184            if (el._x_isShown) {
6185                open();
6186            }
6187            const closeBySupported = (() => {
6188                return "closedBy" in HTMLDialogElement.prototype;
6189            })();
6190            function scrollLock(use = true) {
6191                document.body.style.overflow = use ? "hidden" : "";
6192            }
6193            function dialogSubmit(event) {
6194                if (event.target.getAttribute("method") === "dialog" || event.submitter?.getAttribute("formmethod") === "dialog") {
6195                event.preventDefault();
6196                evaluate();
6197                }
6198            }
6199            function escapeDialog(event) {
6200                if (event.key !== "Escape") return;
6201                event.preventDefault();
6202                if (closeBy === "none") return;
6203                evaluate();
6204            }
6205            function handleCloseByEvent(event) {
6206                if (event.target !== el) return;
6207                const rect = el.getBoundingClientRect();
6208                const isInDialog = rect.top <= event.clientY && event.clientY <= rect.top + rect.height && rect.left <= event.clientX && event.clientX <= rect.left + rect.width;
6209                if (!isInDialog) {
6210                if (closeBy === "any") {
6211                    if (closeBySupported) {
6212                    event.preventDefault();
6213                    }
6214                    evaluate();
6215                }
6216                }
6217            }
6218            function handleCloseEvent() {
6219                evaluate();
6220            }
6221            function open() {
6222                if (el.hasAttribute("open")) return;
6223                isModeless ? el.show() : el.showModal();
6224                scrollLock(lockPageScroll);
6225            }
6226            function close() {
6227                if (!el.hasAttribute("open")) return;
6228                el.close();
6229                scrollLock(false);
6230            }
6231            el._x_doShow = () => open();
6232            el._x_doHide = () => close();
6233            el.addEventListener("keydown", escapeDialog);
6234            el.addEventListener("submit", dialogSubmit);
6235            el.addEventListener("click", handleCloseByEvent);
6236            el.addEventListener("cancel", handleCloseEvent);
6237            cleanup(() => {
6238                el.removeEventListener("keydown", escapeDialog);
6239                el.removeEventListener("submit", dialogSubmit);
6240                el.removeEventListener("click", handleCloseByEvent);
6241                el.removeEventListener("cancel", handleCloseEvent);
6242                scrollLock(false);
6243            });
6244            }
6245        }
6246        function modifierValue(modifiers, key, fallback) {
6247            if (modifiers.indexOf(key) === -1) return fallback;
6248            const rawValue = modifiers[modifiers.indexOf(key) + 1];
6249            if (!rawValue) return fallback;
6250            if (key === "closeby") {
6251            const allowedValues = ["auto", "none", "closerequest", "any"];
6252            const options = allowedValues.join(", ");
6253            if (!allowedValues.includes(rawValue)) {
6254                console.warn(
6255                `"${rawValue}" is not one of the allowed values for closeby: ${options}`
6256                );
6257                return fallback;
6258            }
6259            }
6260            return rawValue;
6261        }
6262
6263        // src/cdn.js
6264        document.addEventListener("alpine:init", () => {
6265            window.Alpine.plugin(dialog_default);
6266        });
6267    })();
6268    //# sourceURL=alpine-htmldialog.js
6269</script>
vendor: 1 bytes, line 6269
6269
6270<script>
6271    (() => {
6272        function src_default(Alpine) {
6273            Alpine.directive("intersect", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
6274                let evaluate = evaluateLater(expression);
6275                let options = {
6276                    rootMargin: getRootMargin(modifiers),
6277                    threshold: getThreshold(modifiers)
6278                };
6279                let observer = new IntersectionObserver((entries) => {
6280                    entries.forEach((entry) => {
6281                        if (entry.isIntersecting === (value === "leave"))
6282                            return;
6283                        evaluate();
6284                        modifiers.includes("once") && observer.disconnect();
6285                    });
6286                }, options);
6287                observer.observe(el);
6288                cleanup(() => {
6289                    observer.disconnect();
6290                });
6291            }));
6292        }
6293        function getThreshold(modifiers) {
6294            if (modifiers.includes("full"))
6295                return 0.99;
6296            if (modifiers.includes("half"))
6297                return 0.5;
6298            if (!modifiers.includes("threshold"))
6299                return 0;
6300            let threshold = modifiers[modifiers.indexOf("threshold") + 1];
6301            if (threshold === "100")
6302                return 1;
6303            if (threshold === "0")
6304                return 0;
6305            return Number(`.${threshold}`);
6306        }
6307        function getLengthValue(rawValue) {
6308            let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/);
6309            return match ? match[1] + (match[2] || "px") : void 0;
6310        }
6311        function getRootMargin(modifiers) {
6312            const key = "margin";
6313            const fallback = "0px 0px 0px 0px";
6314            const index = modifiers.indexOf(key);
6315            if (index === -1)
6316                return fallback;
6317            let values = [];
6318            for (let i = 1; i < 5; i++) {
6319                values.push(getLengthValue(modifiers[index + i] || ""));
6320            }
6321            values = values.filter((v) => v !== void 0);
6322            return values.length ? values.join(" ").trim() : fallback;
6323        }
6324
6325        document.addEventListener("alpine:init", () => {
6326            window.Alpine.plugin(src_default);
6327        });
6328    })();
6329    //# sourceURL=alpine-intersect.js
6330</script>
6330
6331
6332<script>
6333    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"})) {
6334        document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`));
6335    }
6336    //# sourceURL=alpine-defer-rules.js
6337</script>
vendor: 1 bytes, line 6337
6337
6338<script>
6339    (() => {
6340        const hasAlpine = new Promise(resolve => {
6341            window.addEventListener('alpine:initialized', resolve, {once: true, passive: true});
6342        });
6343
6344        const hasInteract = new Promise(resolve => {
6345            (events => {
6346                const onInteract = () => {
6347                    resolve();
6348                    events.forEach(type => window.removeEventListener(type, onInteract));
6349                }
6350                events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true}))
6351            })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown'])
6352        });
6353
6354        const onIntersect = (el) => {
6355            return new Promise(resolve => {
6356                const observer = new IntersectionObserver(entries => {
6357                    for (const entry of entries) {
6358                        if (entry.isIntersecting) {
6359                            observer.disconnect()
6360                            resolve();
6361                        }
6362                    }
6363                }, {});
6364                observer.observe(el);
6365            });
6366        }
6367
6368        function runComponent(el) {
6369            hasAlpine.then(() => {
6370                el.removeAttribute('x-ignore');
6371                queueMicrotask(() => Alpine.initTree(el));
6372            });
6373        }
6374
6375        function initDeferredComponents() {
6376            document.querySelectorAll('[x-data][x-defer]').forEach(el => {
6377                el.setAttribute('x-ignore', '');
6378                const deferUntil = (el.getAttribute('x-defer') || '').trim();
6379                switch (deferUntil) {
6380                    case 'interact':
6381                        hasInteract.then(() => runComponent(el));
6382                        break;
6383                    case 'intersect':
6384                        onIntersect(el).then(() => runComponent(el))
6385                        break;
6386                    case 'idle':
6387                        window.requestIdleCallback
6388                            ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000})
6389                            : setTimeout(() => runComponent(el), 4000);
6390                        break;
6391                    case 'eager':
6392                        runComponent(el);
6393                        break;
6394                    default:
6395                        if (deferUntil.startsWith('event:') && deferUntil.length > 6) {
6396                            window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true});
6397                        }
6398                }
6399            });
6400        }
6401
6402        window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true});
6403    })();
6404    //# sourceURL=alpine-defer.js
6405</script>
6405
6406
6407<script>
6408// x-teleport implementation
6409(_ => {
6410    document.addEventListener('DOMContentLoaded', event => {
6411        // x-teleport available only for template
6412        if (!Alpine.version.startsWith('2')) {
6413            return;
6414        }
6415
6416        const teleportDirective = (el, expression) => {
6417            let target = document.querySelector(expression)
6418            let clone = el.content.cloneNode(true).firstElementChild;
6419
6420            target.appendChild(clone);
6421            setTimeout(() => {
6422                target.querySelectorAll('[x-data]')
6423                    .forEach(el => Alpine.initializeComponent(el));
6424            }, 0)
6425        };
6426
6427        document.querySelectorAll('template').forEach(el => {
6428            if (!el.hasAttribute('x-teleport')) {
6429                return;
6430            }
6431
6432            teleportDirective(el, el.getAttribute('x-teleport'));
6433        });
6434
6435        document.querySelectorAll('[x-data]').forEach(el => {
6436            if (el.hasAttribute('x-init')) {
6437                return;
6438            }
6439
6440            setTimeout(() => {
6441                Alpine.initializeComponent(el);
6442            }, 0);
6443        });
6444    });
6445})()
6446</script>
6446
6447
6448<script type="module"
6449        src="https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Hyva_Theme/js/alpine3.min.js"
6450        defer
6451        crossorigin
6452></script>
vendor: 1 bytes, line 6452
6452
6453<script>
6454    function dispatchMessages(messages, hideAfter) {
6455        const messagesEvent = new CustomEvent("messages-loaded", {
6456            detail: {
6457                messages: messages,
6458                hideAfter: hideAfter
6459            }
6460        });
6461        window.dispatchEvent(messagesEvent);
6462    }
6463
6464        if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
6465        console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
6466    }
6467
6468    (function( hyva, undefined ) {
6469
6470        hyva.initFormKey = () => {
6471            if (typeof hyva.getFormKey !== 'function') return;
6472
6473            const formKey = hyva.getFormKey();
6474            if (!formKey) return;
6475
6476            document.querySelectorAll('input[name="form_key"]').forEach((input) => {
6477                input.value = formKey;
6478            });
6479        }
6480
6481        hyva.initMessages = () => {
6482            try {
6483                const messages = hyva.getCookie('mage-messages');
6484                window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
6485
6486                dispatchMessages(window.mageMessages);
6487
6488                                // empty `mage-messages` cookie
6489                const skipSetDomain = true;
6490                hyva.setCookie('mage-messages','', -1, skipSetDomain);
6491
6492            } catch (error) {
6493                console.warn('Error parsing Cookie Messages:', error);
6494            }
6495        }
6496
6497        window.addEventListener('DOMContentLoaded', hyva.initFormKey);
6498
6499        window.addEventListener('pageshow', (event) => {
6500            if (event.persisted) {
6501                hyva.initFormKey();
6502            }
6503        });
6504
6505        hyva.alpineInitialized(hyva.initMessages)
6506    }( window.hyva = window.hyva || {} ));
6507    //# sourceURL=hyva-cookies.js
6508</script>
vendor: 1 bytes, line 6508
6508
6509<script>
6510    (() => {
6511        const private_content_key = 'mage-cache-storage';
6512        const private_content_expire_key = 'mage-cache-timeout';
6513        const private_content_version_key = 'private_content_version';
6514        const section_data_ids_key = 'section_data_ids';
6515        const mage_cache_session_id_key = 'mage-cache-sessid';
6516        const last_visited_store_key = 'last_visited_store';
6517
6518        const ttl = 7200;
6519
6520                if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
6521            console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
6522        }
6523
6524        function loadSectionData () {
6525            const browserStorage = hyva.getBrowserStorage();
6526            if (!browserStorage) {
6527                typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
6528                    [{
6529                        type: "warning",
6530                        text: "Please enable LocalStorage in your browser."
6531                    }]
6532                );
6533                return;
6534            }
6535            try {
6536                let isInvalid = false;
6537
6538                                if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) {
6539                    isInvalid = true;
6540                }
6541                hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false);
6542
6543                                if (!hyva.getCookie(mage_cache_session_id_key)) {
6544                    isInvalid = true;
6545                    browserStorage.removeItem(private_content_key);
6546                    const skipSetDomain = true;
6547                    const days = false;
6548                    hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain)
6549                }
6550
6551                const cookieVersion = hyva.getCookie(private_content_version_key);
6552                const storageVersion = browserStorage.getItem(private_content_version_key);
6553
6554                if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) {
6555                    isInvalid = true;
6556                }
6557
6558                const privateContentExpires = browserStorage.getItem(private_content_expire_key);
6559                if (privateContentExpires && new Date(privateContentExpires) < new Date()) {
6560                    browserStorage.removeItem(private_content_key);
6561                }
6562
6563                if (isInvalid && cookieVersion) {
6564                    fetchPrivateContent([]);
6565                } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) {
6566                    const privateContent = JSON.parse(browserStorage.getItem(private_content_key));
6567                    if (
6568                        privateContent &&
6569                        privateContentExpires &&
6570                        privateContent.cart &&
6571                        privateContent.customer
6572                    ) {
6573                        dispatchPrivateContent(privateContent);
6574                    } else {
6575                        fetchPrivateContent([]);
6576                    }
6577                } else {
6578                    if (document.getElementById('default-section-data')) {
6579                        const privateContent = JSON.parse(document.getElementById('default-section-data').textContent.trim());
6580                        dispatchPrivateContent(privateContent);
6581                    } else {
6582                        dispatchPrivateContent({});
6583                    }
6584                }
6585
6586            } catch (error) {
6587                console.warn('Error retrieving Private Content:', error);
6588            }
6589        }
6590
6591        hyva.alpineInitialized(loadSectionData)
6592        window.addEventListener('reload-customer-section-data', loadSectionData);
6593
6594                window.processSectionDataBeforeDispatch = window.processSectionDataBeforeDispatch || (data => data);
6595
6596        function dispatchPrivateContent(data) {
6597
6598            const privateContentEvent = new CustomEvent("private-content-loaded", {
6599                detail: {
6600                    data: window.processSectionDataBeforeDispatch(data)
6601                }
6602            });
6603            window.dispatchEvent(privateContentEvent);
6604        }
6605
6606                function fetchPrivateContent(sections) {
6607            fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, {
6608                method: 'GET',
6609                headers: {
6610                    'Content-Type': 'application/json',
6611                    'X-Requested-With': 'XMLHttpRequest'
6612                }
6613            })
6614                .then(response => response.ok && response.json())
6615                .then(
6616                    data => {
6617                        if (data) {
6618                            try {
6619                                const browserStorage = hyva.getBrowserStorage();
6620
6621                                // merge new data preserving non-invalidated sections
6622                                const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {};
6623
6624                                                                if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) {
6625                                    delete oldSectionData['checkout-data'];
6626                                }
6627                                const newSectionData = Object.assign(oldSectionData, data);
6628
6629                                dispatchPrivateContent(newSectionData);
6630
6631                                // don't persist messages, they've been dispatched already
6632                                if (newSectionData.messages && newSectionData.messages.messages ) {
6633                                    newSectionData.messages.messages = [];
6634                                }
6635
6636                                browserStorage.setItem(private_content_key, JSON.stringify(newSectionData));
6637
6638                                const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString();
6639                                browserStorage.setItem(private_content_expire_key, expiresAt);
6640
6641                                const newCookieVersion = hyva.getCookie(private_content_version_key);
6642                                browserStorage.setItem(private_content_version_key, newCookieVersion);
6643
6644                                // We don't need the section_data_ids in Hyvä, but we store them for compatibility
6645                                // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout
6646                                hyva.setCookie(
6647                                    section_data_ids_key,
6648                                    JSON.stringify(
6649                                        Object.keys(data).reduce((sectionDataIds, sectionKey) => {
6650                                            sectionDataIds[sectionKey] = data[sectionKey]['data_id'];
6651                                            return sectionDataIds;
6652                                        }, {})
6653                                    ),
6654                                    false,
6655                                    true
6656                                );
6657                            } catch (error) {
6658                                console.warn("Couldn't store privateContent", error);
6659                            }
6660                        }
6661                    }
6662                )
6663                .catch(error => {
6664                    console.warn("Couldn't fetch privateContent", error);
6665                });
6666        }
6667    })();
6668    //# sourceURL=hyva-private-content.js
6669</script>
vendor: 1 bytes, line 6669
6669
6670<script>
6671    (() => {
6672        document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc()));
6673    })()
6674</script>
vendor: 1 bytes, line 6674
6674
6675<script>
6676    (events => {
6677        const addListeners = () => {
6678            var init = false;
6679            const dispatchUserInteractionEvent = Alpine.throttle(() => {
6680                if(!init){
6681                    init=true;
6682                    return false;
6683                }
6684                events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent))
6685                window.dispatchEvent(new Event('init-external-scripts'))
6686            }, 30);
6687            document.removeEventListener('alpine:initialized', addListeners)
6688            events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, { passive: true}))
6689        }
6690        document.addEventListener('alpine:initialized', addListeners, { once: true });
6691    })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown'])
6692</script>
vendor: 1 bytes, line 6692
6692
6693<script>
6694    'use strict';
6695
6696    (() => {
6697        const initCarousels = (elements) => {
6698            if (!Swiper) {
6699                return;
6700            }
6701
6702            const initProductCarousel = (carousel, additionalOptions) => {
6703                carousel.classList.add("swiper");
6704                if (!carousel.querySelectorAll(".swiper-wrapper").length) {
6705                    carousel.innerHTML = `<div class="swiper-wrapper">${carousel.innerHTML}</div>`;
6706                }
6707                carousel.querySelectorAll(".swiper-wrapper > *").forEach(function (el) {
6708                    el.classList.add("swiper-slide");
6709                });
6710
6711                let swiperElement = carousel.querySelector('.swiper');
6712                if (!swiperElement) {
6713                    swiperElement = carousel;
6714                }
6715
6716                if ((carousel.dataset.showArrows === 'true' || carousel.dataset.showDots === 'true') && !carousel.querySelectorAll(".swiper-pagination").length) {
6717                    swiperElement.insertAdjacentHTML(
6718                        'beforeend',
6719                        '\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
6719003D\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
6719003D\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'
6720                    );
6721                }
6722
6723                let autoplayOptions = {autoplay: false};
6724                if (carousel.dataset.autoplay === 'true') {
6725                    autoplayOptions = {
6726                        autoplay: {
6727                            delay: carousel.dataset.autoplaySpeed
6728                        },
6729                        plugins: [ SwiperPluginPagination, SwiperPluginAutoPlay, SwiperPluginNavigation ]
6730                    };
6731                }
6732
6733                let dotsOptions = {pagination: false};
6734                if (carousel.dataset.showDots === 'true') {
6735                    dotsOptions = {
6736                        pagination: {
6737                            el: '.swiper-pagination',
6738                            type: 'bullets',
6739                            clickable: true
6740                        }
6741                    };
6742                }
6743
6744                let arrowsOptions = {navigation: false};
6745                if (carousel.dataset.showArrows === 'true') {
6746                    arrowsOptions = {
6747                        navigation: {
6748                            nextEl: '.swiper-button-next',
6749                            prevEl: '.swiper-button-prev',
6750                        },
6751                    };
6752                }
6753
6754                let options = Object.assign({
6755                    slidesPerView: 'auto',
6756                    loop: carousel.dataset.infiniteLoop?.toLowerCase?.() === 'true'
6757                }, additionalOptions, dotsOptions, arrowsOptions, autoplayOptions);
6758
6759                initCarousel(swiperElement, options);
6760            };
6761
6762            elements.forEach(element => {
6763                if (element.dataset.contentType === 'slider') {
6764                    initProductCarousel(element, {slidesPerView: 1});
6765                } else {
6766                    initProductCarousel(element);
6767                }
6768            });
6769        };
6770
6771        window.addEventListener('init-external-scripts', () => {
6772            const carouselElements = document.querySelectorAll(
6773                `[data-content-type="products"][data-appearance="carousel"],
6774                [data-content-type="slider"], .clerk-product-async, .swiper.products-widget, .swiper, .async-carousel, .clerk`
6775            );
6776
6777            window.carouselInitialized = false;
6778
6779            // Autoplay Plugin
6780            const scriptAutoplay = document.createElement('script');
6781            scriptAutoplay.type = 'text/javascript';
6782            scriptAutoplay.src = 'https\u003A\u002F\u002Fwww.farma.it\u002Fstatic\u002Fversion1789421831\u002Ffrontend\u002FDNAFactory\u002Forlandi_hyva\u002Fit_IT\u002FMagento_PageBuilder\u002Fjs\u002FautoPlay.min.js';
6783            document.head.appendChild(scriptAutoplay);
6784
6785            // Pagination Plugin
6786            const scriptPagination = document.createElement('script');
6787            scriptPagination.type = 'text/javascript';
6788            scriptPagination.src = 'https\u003A\u002F\u002Fwww.farma.it\u002Fstatic\u002Fversion1789421831\u002Ffrontend\u002FDNAFactory\u002Forlandi_hyva\u002Fit_IT\u002FMagento_PageBuilder\u002Fjs\u002Fpagination.min.js';
6789            document.head.appendChild(scriptPagination);
6790
6791            // Navigation Plugin
6792            const scriptNavigation = document.createElement('script');
6793            scriptNavigation.type = 'text/javascript';
6794            scriptNavigation.src = 'https\u003A\u002F\u002Fwww.farma.it\u002Fstatic\u002Fversion1789421831\u002Ffrontend\u002FDNAFactory\u002Forlandi_hyva\u002Fit_IT\u002FMagento_PageBuilder\u002Fjs\u002Fnavigation.min.js';
6795            document.head.appendChild(scriptNavigation);
6796
6797            // Swiper
6798            const script = document.createElement('script');
6799            script.type = 'text/javascript';
6800
6801            script.addEventListener('load', () => {
6802                if (window.carouselInitialized) {
6803                    return;
6804                }
6805
6806                const carouselElementsToInitialize = document.querySelectorAll(
6807                    `[data-content-type="products"][data-appearance="carousel"],
6808                      [data-content-type="slider"], .swiper.products-widget`
6809                );
6810                initCarousels(carouselElementsToInitialize);
6811
6812                window.carouselInitialized = true;
6813                const carouselInitializedEvent = new Event("carousel-initialized");
6814                document.dispatchEvent(carouselInitializedEvent);
6815            });
6816
6817            script.src = 'https\u003A\u002F\u002Fwww.farma.it\u002Fstatic\u002Fversion1789421831\u002Ffrontend\u002FDNAFactory\u002Forlandi_hyva\u002Fit_IT\u002FMagento_PageBuilder\u002Fjs\u002Ftinyswiper\u002Dfull.min.js';
6818            document.head.appendChild(script);
6819        }, { once: true, passive: true });
6820    })();
6821
6822    function initCarousel(element = "", options = {}) {
6823        var defaultOptions = {
6824            slidesPerView: 'auto',
6825            navigation: {
6826                nextEl: '.swiper-button-next',
6827                prevEl: '.swiper-button-prev',
6828            },
6829            pagination: {
6830                el: '.swiper-pagination',
6831                type: 'bullets',
6832                clickable: true
6833            },
6834            fadingSlideSelector: ''
6835        };
6836        options = Object.assign(defaultOptions, options);
6837
6838        if (typeof element === 'string' || element instanceof String) {
6839            element = document.querySelector(element);
6840        }
6841
6842        if (!element) {
6843            return false;
6844        }
6845
6846        let paginationElement = element.querySelector(defaultOptions.pagination.el)
6847        if (paginationElement && defaultOptions.pagination) {
6848            defaultOptions.pagination.el = paginationElement;
6849        } else {
6850            defaultOptions.pagination = false
6851        }
6852
6853        let nextElement = element.querySelector(defaultOptions.navigation.nextEl)
6854        if (nextElement && defaultOptions.navigation) {
6855            defaultOptions.navigation.nextEl = nextElement;
6856        } else {
6857            defaultOptions.navigation = false;
6858        }
6859
6860        let prevElement = element.querySelector(defaultOptions.navigation.prevEl)
6861        if (prevElement && defaultOptions.navigation) {
6862            defaultOptions.navigation.prevEl = prevElement;
6863        } else {
6864            defaultOptions.navigation = false;
6865        }
6866
6867        if (options.slidesPerView == 'auto') {
6868            let wrapperWidth = element.clientWidth,
6869                slideWidth = element.querySelector('.swiper-slide').clientWidth;
6870
6871            options.slidesPerView = Math.round(wrapperWidth / slideWidth);
6872        }
6873
6874        if (!options.navigation) {
6875            element.querySelectorAll('.swiper-button-prev, .swiper-button-next')
6876                .forEach((element) => element.remove());
6877        }
6878
6879        if (options.slidesPerView > element.querySelectorAll('.swiper-slide').length) {
6880            element.querySelectorAll('.swiper-button-prev, .swiper-button-next, .swiper-pagination')
6881                .forEach((element) => element.remove());
6882            return;
6883        }
6884
6885        if (typeof Swiper != "undefined") {
6886            let carousel = new Swiper(element, options);
6887            attachCustomBehaviours(carousel, element, options);
6888            return;
6889        }
6890
6891        document.addEventListener("carousel-initialized", function () {
6892            let carousel = new Swiper(element, options);
6893            carousel.slideTo(0); // Fix per disabilitare navigazione quando non c'è overflow degli elementi
6894            attachCustomBehaviours(carousel, element, options);
6895        });
6896
6897    }
6898
6899    function attachCustomBehaviours(carousel, element, options) {
6900        // Fading selected slide behaviour
6901        let fadingSlide;
6902        try {
6903            if (options.fadingSlideSelector) {
6904                fadingSlide = document.querySelector(options.fadingSlideSelector)
6905            } else {
6906                fadingSlide = element.closest('.fading-slide-container').querySelector('.fading-slide');
6907            }
6908        } catch (e) {
6909            fadingSlide = null;
6910        }
6911
6912        if (fadingSlide) {
6913            fadingSlide.classList.add('transition-all');
6914
6915            carousel.on('before-slide', function(currentIndex, state, newIndex) {
6916                if (newIndex > 0) {
6917                    fadingSlide.classList.add('md:opacity-0');
6918                } else if (newIndex == 0) {
6919                    fadingSlide.classList.remove('md:opacity-0');
6920                }
6921            });
6922        }
6923    }
6924</script>
vendor: 1 bytes, line 6924
6924
6925<script>
6926    'use strict';
6927
6928    (() => {
6929        const applyShowOnHover = (element) => {
6930            const showOverlayOnHover = (element) => {
6931                const overlay = element.querySelector('.pagebuilder-overlay');
6932                const color = overlay.dataset.overlayColor;
6933
6934                element.addEventListener('mouseover', () => {
6935                    overlay.style.backgroundColor = color;
6936                });
6937                element.addEventListener('mouseout', () => {
6938                    overlay.style.backgroundColor = 'transparent';
6939                });
6940            };
6941
6942            const showButtonOnHover = (element) => {
6943                const button = element.querySelector('.pagebuilder-banner-button');
6944
6945                element.addEventListener('mouseover', () => {
6946                    button.style.opacity = '1';
6947                    button.style.visibility = 'visible';
6948                });
6949                element.addEventListener('mouseout', () => {
6950                    button.style.opacity = '0';
6951                    button.style.visibility = 'hidden';
6952                });
6953            };
6954
6955            if (element.dataset.showOverlay === 'hover') {
6956                showOverlayOnHover(element);
6957            }
6958            if (element.dataset.showButton === 'hover') {
6959                showButtonOnHover(element);
6960            }
6961        };
6962
6963        window.addEventListener('DOMContentLoaded', () => {
6964            document.querySelectorAll('[data-content-type="banner"],[data-content-type="slider"]').forEach(element => {
6965                applyShowOnHover(element);
6966            });
6967        });
6968    })();
6969</script>
6969
6970 
6970<script>
6971        function amastyRewardsCatalog() {
6972            return {
6973                productId: this.$el.dataset.productId,
6974                formSelector: 'product_addtocart_form',
6975                refreshUrl: this.$el.dataset.refreshUrl,
6976                loader: false,
6977                isFetching: false,
6978                abortFetchController: false,
6979                highlight: {
6980                    caption_color: '',
6981                    caption_text: '',
6982                    visible: false
6983                },
6984
6985                init() {
6986                    this.formObserver();
6987                    document.addEventListener(`update-qty-${this.productId}`, () => {
6988                        this.updateData();
6989                    });
6990                    this.$nextTick(() => this.updateData());
6991                },
6992
6993                hideBlock() {
6994                    this.highlight.visible = false;
6995                    this.loader = true;
6996                },
6997
6998                dispatchStatus(type, message) {
6999                    window.dispatchMessages([{
7000                        type: type,
7001                        text: message
7002                    }], 5000);
7003                },
7004
7005                formObserver() {
7006                    const product = document.querySelector(`input[name="product"][value="${this.productId}"]`);
7007
7008                    if (product) {
7009                        const productForm = product.form;
7010                        if (productForm) {
7011                            productForm.addEventListener('change', () => {
7012                                this.updateData();
7013                            });
7014                        }
7015                    }
7016                },
7017
7018                updateData() {
7019                    if (!this.refreshUrl || this.isFetching) return false;
7020                    this.hideBlock();
7021
7022                    if (this.abortFetchController) {
7023                        this.abortFetchController.abort();
7024                    }
7025                    this.abortFetchController = new AbortController();
7026
7027                    const product = document.querySelector(`input[name='product'][value='${this.productId}']`);
7028                    if (!product) return false;
7029
7030                    const form = product.form;
7031                    const formData = new FormData(form);
7032                    const formParams = new URLSearchParams(formData).toString();
7033                    const formJson = JSON.stringify({
7034                        productId: this.productId,
7035                        attributes: formParams
7036                    });
7037
7038                    const requestOptions = {
7039                        method: 'POST',
7040                        body: formJson,
7041                        headers: {
7042                            'Content-Type': 'application/json',
7043                            'x-requested-with': 'XMLHttpRequest',
7044                        },
7045                        signal: this.abortFetchController.signal
7046                    };
7047
7048                    this.isFetching = true;
7049                    fetch(this.refreshUrl, requestOptions).then(response => {
7050                        if (!response.ok) {
7051                            return Promise.reject(`${response.status} ${response.statusText}`);
7052                        }
7053                        return response.json();
7054                    }).then(data => {
7055                        this.highlight.visible = data.visible;
7056                        this.highlight.caption_text = data.caption_text;
7057                        this.highlight.caption_color = data.caption_color;
7058                    }).catch(error => {
7059                        if (error.name !== 'AbortError'
7060                                && typeof error === 'string'
7061                                && error.match(/'401'/g) !== null
7062                            ) {
7063                            this.dispatchStatus('error', error);
7064                        }
7065                    }).finally(() => {
7066                        this.loader = false;
7067                        this.abortFetchController = false;
7068                        this.isFetching = false;
7069                    });
7070                },
7071
7072                highlightVisible() {
7073                    return this.highlight.visible && !this.loader;
7074                },
7075
7076                highlightStyle() {
7077                    return `color: ${this.highlight.caption_color}`;
7078                },
7079            }
7080        }
7081
7082        window.addEventListener(
7083            'alpine:init',
7084            () => Alpine.data('amastyRewardsCatalog', amastyRewardsCatalog),
7085            { once: true }
7086        );
7087 </script>
7087
7088 
7088<script>
7089    'use strict';
7090
7091    const grecaptchaV2LoadCallbacks = [];
7092
7093    function executeRecaptchaLoadCallbacks () {
7094        while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) {
7095            const callback = grecaptchaV2LoadCallbacks.pop();
7096            typeof callback === 'string' ? window[callback]() : callback();
7097        }
7098    }
7099
7100    (function() {
7101        const loadRecaptchaScript = (event) => {
7102
7103            if (window.grecaptcha || !event.target.form) {
7104                return;
7105            }
7106
7107            const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks';
7108            const siteKey = '6LdDii8sAAAAAF1j_v4WIzmCV2phMFuJKWeFtEhJ';
7109            const script = document.createElement('script');
7110            script.type = 'text/javascript';
7111            script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`;
7112            script.async = true;
7113            document.head.appendChild(script);
7114
7115            script.addEventListener('load', () => {
7116                Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled'));
7117            });
7118        }
7119
7120        window.forceLoadRecaptchaScript = (form) => {
7121            loadRecaptchaScript({target: {form: form || 'dummy'}});
7122            executeRecaptchaLoadCallbacks();
7123        };
7124
7125        document.body.addEventListener('input', loadRecaptchaScript, { once: true });
7126        document.body.addEventListener('focus', loadRecaptchaScript, { once: true });
7127
7128    }());
7129
7130</script>
vendor: 1 bytes, line 7130
7130
7131<script>
7132    function selectManager() {
7133        return {
7134            value: '',
7135
7136            input: {
7137                ['x-model']: "value",
7138                [':class']: "{ 'invalid-placeholder': !value || value == \"\" }",
7139                ['x-init']() {
7140                    this.value = this.$el.options[this.$el.selectedIndex || 0].value
7141                }
7142            }
7143        }
7144    }
7145
7146    function qtyManager() {
7147        return {
7148            inputElement: null,
7149            value: 0,
7150            step: 1,
7151            min: null,
7152            max: null,
7153
7154            input: {
7155                ["x-model"]: "value",
7156                ['x-init']() {
7157                    this.inputElement = this.$el;
7158                    this.value = parseInt(this.$el.value);
7159                },
7160                ['x-on:input'] ($event) {
7161                    let inputValue = parseInt($event.target.value.replace(/\D/g, ''));
7162                    if (!this.checkMin(inputValue)) {
7163                        this.value = this.min;
7164                    } else if (!this.checkMax(inputValue)) {
7165                        this.value = this.max;
7166                    } else {
7167                        this.value = inputValue;
7168                    }
7169                }
7170            },
7171            plus: {
7172                ['@click']() {
7173                    if (this.checkMax(this.value, this.step)) {
7174                        this.value += this.step;
7175                    }
7176                    this.inputElement.dispatchEvent(new Event('changed'));
7177                }
7178            },
7179            minus: {
7180                ['@click']() {
7181                    if (this.checkMin(this.value, this.step)) {
7182                        this.value -= this.step;
7183                    }
7184                    this.inputElement.dispatchEvent(new Event('changed'));
7185                }
7186            },
7187            checkMin(value, step = null) {
7188                if (this.min) {
7189                    if (step) {
7190                        return value - step >= this.min;
7191                    }
7192                    return value >= this.min;
7193                }
7194                return true;
7195            },
7196            checkMax(value, step = null) {
7197                if (this.max) {
7198                    if (step) {
7199                        return value + step <= this.max;
7200                    }
7201                    return value <= this.max;
7202                }
7203                return true;
7204            }
7205        }
7206    }
7207
7208    /** Questo potrebbe convenire aggiungerlo solamente dove usiamo quell'input **/
7209    function dateInputManager() {
7210        return {
7211            value: '',
7212
7213            input: {
7214                ["x-model"]: "value",
7215                ['x-init']() {
7216                    this.value = this.$el.value
7217                },
7218
7219                ['x-on:input'](e) {
7220                    let date = e.target.value.replace(/\D/g, '');
7221                    let formattedDate = '';
7222
7223                    if (date.length >= 2) {
7224                        let value = date.substring(0, 2);
7225                        if (value > 31) {
7226                            value = 31;
7227                        }
7228                        formattedDate = value + '/';
7229                    } else {
7230                        this.value = date;
7231                        return;
7232                    }
7233
7234                    if (date.length >= 4) {
7235                        let value = date.substring(2, 4);
7236                        if (value > 12) {
7237                            value = 12;
7238                        }
7239                        formattedDate += value + '/';
7240                    } else {
7241                        this.value = formattedDate + date.substring(2, date.length);
7242                        return;
7243                    }
7244
7245                    if (date.length > 4) {
7246                        formattedDate += date.substring(4, 8);
7247                    } else {
7248                        this.value = formattedDate + date.substring(4, date.length);
7249                        return;
7250                    }
7251
7252                    this.value = formattedDate;
7253                }
7254            }
7255        }
7256    }
7257</script>
vendor: 1 bytes, line 7257
7257
7258<script>
7259    (function (w,d){
7260        function setScrollbarWidthCssVar() {
7261            let newSize = (w.innerWidth - d.body.clientWidth) + "px",
7262                oldSize = d.documentElement.style.getPropertyValue('--scrollbar-width');
7263            if (newSize !== oldSize){
7264                d.documentElement.style.setProperty('--scrollbar-width', newSize);
7265            }
7266        }
7267        d.addEventListener('alpine:init', () => {
7268            new ResizeObserver(Alpine.debounce(setScrollbarWidthCssVar, 300)).observe(d.documentElement);
7269        }, { once: true });
7270        setScrollbarWidthCssVar();
7271    }) (window, document);
7272    /** Effettua il lock della viewport quando necessario (es. all'apertura del menu o del minicart) */
7273    window.addEventListener('screen-lock', (event) => {
7274        document.body.classList.toggle('max-h-screen', event.detail);
7275        document.body.classList.toggle('lock-screen', event.detail);
7276        document.body.classList.toggle('overflow-hidden', event.detail);
7277    });
7278
7279    function initCustomerMenuMobile() {
7280        return {
7281            open: false,
7282            customer: {},
7283            getData(data) {
7284                if (data.customer) { this.customer = data.customer }
7285            },
7286            isLoggedIn(){
7287                return !!(this.customer.firstname);
7288            }
7289        }
7290    }
7291</script>
7291
7292
7293<!-- Wrapping template -->
7294<script type="text/template" id="instant_wrapper_template">
7295    {{#findAutocomplete}}
7296    <div id="algolia-autocomplete-container"></div>
7297    {{/findAutocomplete}}
7298
7299    <div id="algolia_instant_selector"
7300         class=" with-facets"
7301    >
7302        <div class="columns">
7303            <aside class="sidebar sidebar-main relative" id="algolia-left-container">
7304                <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()">
7305                    <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">
7306                        <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>
7307                        <title>adjustments</title>
7308                    </svg>
7309                    <span class="ml-1.5 font-baloo-bhaina">
7310                          Filtri                    </span>
7311                </button>
7312                <div class="mb-4 hidden lg:block" id="facets">
7313                    <div class="aa-mobile-header flex px-layoutGutter py-3 border-b mb-2 justify-between items-center lg:hidden shadow-md">
7314                        <span class="text-primary text-lg font-bold mx-auto pl-6">
7315                            Filtri                        </span>
7316                        <span id="aa-mobile-toggler" class="cursor-pointer" onclick="toggleAaFilters()">
7317                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" role="img">
7318                                <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>
7319                                <title>x</title>
7320                            </svg>
7321                        </span>
7322                    </div>
7323                    <div class="pt-[50px] px-layoutGutter lg:px-0 lg:pt-0" id="instant-search-facets-container">
7324                        <div class="hidden lg:block text-primary text-md text-xl lg:text-2xl font-semibold h-10 mt-2.5">
7325                            Filtri                        </div>
7326                        <div class="w-full flex flex-col bg-white shadow hidden lg:mt-4 py-3" id="instant-search-active-filters">
7327                            <span class="title text-base font-bold font-baloo-bhaina hidden" id="instant-search-active-filters-label">
7328                                Filtri attivi                            </span>
7329                            <div class="order-2" id="clear-refinements"></div>
7330                            <div id="current-refinements"></div>
7331                        </div>
7332                    </div>
7333                </div>
7334            </aside>
7335            <div class="column main" id="algolia-right-container">
7336                <div class="hidden">
7337                    <div class="pb-3.5">
7338                        <div class="px-2.5">
7339                            {{#second_bar}}
7340                            <div id="instant-search-bar"></div>
7341                            {{/second_bar}}
7342                        </div>
7343                    </div>
7344                </div>
7345                <div class="relative">
7346                    <div itemscope itemtype="http://schema.org/ItemList" class="w-full">
7347                        <div id="algolia-toolbar" class="toolbar toolbar-products items-center flex justify-between">
7348                            <div class="left flex items-center">
7349                                <div id="algolia-stats"></div>
7350                            </div>
7351                            <div class="right flex items-center">
7352                                <span class="mr-2 inline-block">
7352Ordina per</span>
7353                                <div id="algolia-sorts"></div>
7354                            </div>
7355                        </div>
7356                        <div id="algolia-banner"></div>
7357                        <div id="instant-empty-results-container"></div>
7358                        <div class="py-6" id="instant-search-results-container"></div>
7359                    </div>
7360                </div>
7361                <div>
7362                    <div id="algolia-stats-range" class="mb-2"></div>
7363                    <div id="instant-search-pagination-container"></div>
7364                </div>
7365            </div>
7366        </div>
7367    </div>
7368</script>
7368
7369
7370<script>
7371    function toggleAaFilters() {
7372        try {
7373            var facets = document.getElementById('facets');
7374            if (!facets) return;
7375
7376            // Toggle visibility of facets (mobile overlay)
7377            facets.classList.toggle('hidden');
7378
7379            var isOpen = !facets.classList.contains('hidden');
7380            var body = document.body;
7381            var lockClasses = ['max-h-screen', 'lock-screen', 'overflow-hidden', 'instant-lock'];
7382            lockClasses.forEach(function (cls) {
7383                if (isOpen) {
7384                    body.classList.add(cls);
7385                } else {
7386                    body.classList.remove(cls);
7387                }
7388            });
7389
7390            // Apply or remove mobile collapsible bindings only when toggler is used
7391            try {
7392                if (window.AISFacetsCollapsible) {
7393                    if (isOpen) {
7394                        window.AISFacetsCollapsible.enable();
7395                    }
7396                }
7397            } catch (e2) { /* noop */ }
7398        } catch (e) {
7399            // Fail-safe: do nothing on error
7400            console.error('toggleAaFilters error', e);
7401        }
7402    }
7403</script>
7403
7404
7405<script>
7406    // Mobile-only: make Algolia facets panels (.ais-Panel) collapsible after they are rendered
7407    (function() {
7408        'use strict';
7409        var MOBILE_MQL = window.matchMedia('(max-width: 1023px)'); // Tailwind lg breakpoint
7410
7411        function applyCollapsible(root) {
7412            if (!root) return;
7413            var panels = root.querySelectorAll('.ais-Panel');
7414            panels.forEach(function(panel) {
7415                if (!panel || panel.dataset.collapsibleApplied === '1') return;
7416                var header = panel.querySelector('.ais-Panel-header');
7417                var body = panel.querySelector('.ais-Panel-body');
7418                if (!header || !body) return;
7419
7420                // Mark as processed
7421                panel.dataset.collapsibleApplied = '1';
7422
7423                // Ensure default open state
7424                panel.classList.remove('is-collapsed');
7425                header.setAttribute('aria-expanded', 'true');
7426
7427                // Make header interactive
7428                header.setAttribute('role', 'button');
7429                header.setAttribute('tabindex', '0');
7430
7431                // Inject chevron-down if not present
7432                if (!header.querySelector('.ais-Panel-chevron')) {
7433                    var chev = document.createElement('span');
7434                    chev.className = 'ais-Panel-chevron chevron';
7435                    chev.setAttribute('aria-hidden', 'true');
7436                    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>';
7437                    header.appendChild(chev);
7438                }
7439
7440                var toggle = function() {
7441                    var collapsed = panel.classList.toggle('is-collapsed');
7442                    header.setAttribute('aria-expanded', String(!collapsed));
7443                };
7444
7445                header.addEventListener('click', toggle);
7446                header.addEventListener('keydown', function(e) {
7447                    if (e.key === 'Enter' || e.key === ' ') {
7448                        e.preventDefault();
7449                        toggle();
7450                    }
7451                });
7452            });
7453        }
7454
7455        function enableMobileCollapsible() {
7456            if (!MOBILE_MQL.matches) return;
7457            var container = document.getElementById('instant-search-facets-container');
7458            if (!container) return;
7459            applyCollapsible(container);
7460
7461            // Observe for dynamic facet (re)renders
7462            if (!container._aisCollapsibleObserver) {
7463                var obs = new MutationObserver(function() {
7464                    applyCollapsible(container);
7465                });
7466                obs.observe(container, { childList: true, subtree: true });
7467                container._aisCollapsibleObserver = obs;
7468            }
7469        }
7470
7471        function disableMobileCollapsible() {
7472            var container = document.getElementById('instant-search-facets-container');
7473            if (!container) return;
7474            // Ensure all panels are open on desktop
7475            container.querySelectorAll('.ais-Panel').forEach(function(panel) {
7476                panel.classList.remove('is-collapsed');
7477                var header = panel.querySelector('.ais-Panel-header');
7478                if (header) {
7479                    header.setAttribute('aria-expanded', 'true');
7480                }
7481            });
7482            if (container._aisCollapsibleObserver) {
7483                try { container._aisCollapsibleObserver.disconnect(); } catch (e) {}
7484                container._aisCollapsibleObserver = null;
7485            }
7486        }
7487
7488        // Expose API to be triggered explicitly by the mobile toggler
7489        window.AISFacetsCollapsible = {
7490            enable: enableMobileCollapsible,
7491            disable: disableMobileCollapsible,
7492            _mql: MOBILE_MQL
7493        };
7494    })();
7495</script>
7495
7496
7497<style>
7498    .ais-ClearRefinements-button span {
7499        display: none;
7500    }
7501
7502    .ais-ClearRefinements-button::after {
7503        content: 'Cancella tutto';
7504    }
7505</style>
7506<script type="text/template" id="instant-hit-template">
7507    <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"
7508         x-data="initInsight()"
7509         x-init="bindClickEvent($el, 'Product Clicked', '{{objectID}}', '{{__indexName}}', '{{__position}}', '{{__queryID}}')"
7510    >
7511        <meta itemprop="position" content="{{__position}}"/>
7512        <div class="relative flex flex-col flex-grow" itemprop="item" itemscope itemtype="http://schema.org/Product">
7513            <meta itemprop="url"
7514                  {{^__queryID}} content="{{url}}" {{/__queryID}}
7515                  {{#__queryID}} content="{{urlForInsights}}" {{/__queryID}}
7516            />
7517
7518            <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')">
7519                <template x-for="badge in $store.badges.getBadgesHtml({{objectID}}, 'card_top_left')">
7520                    <span x-html="badge"></span>
7521                </template>
7522            </span>
7523
7524            <a class="product photo product-item-photo block mx-auto mb-4 result flex items-center justify-center max-w-[142px] max-h-[142px]"
7525               tabindex="-1"
7526               {{^__queryID}} href="{{url}}" {{/__queryID}}
7527               {{#__queryID}} href="{{urlForInsights}}" {{/__queryID}}
7528            >
7529                {{#image_url}}<img itemprop="image" src="{{{image_url}}}" alt="{{{name}}}" class="max-w-full max-h-full object-contain"/>{{/image_url}}
7530                {{^image_url}}<span class="no-image block max-w-[142px] max-h-[142px] bg-gray-3"></span>{{/image_url}}
7531            </a>
7532
7533            <div class="product-info flex flex-col grow justify-start">
7534                <div class="items-center justify-center">
7535                    <a class="product-item-link result"
7536                       {{^__queryID}} href="{{url}}" {{/__queryID}}
7537                       {{#__queryID}} href="{{urlForInsights}}" {{/__queryID}}>
7538                        <h2 class="text-primary text-xs line-clamp-3 font-normal">
7539                            {{{ _highlightResult.name.value }}}
7540                        </h2>
7541                    </a>
7542                </div>
7543                <div class="mt-1 mb-1">
7544                    {{#rating_count}}
7545                    <div class="rating-summary" title="{{rating_summary}}%" role="group" aria-label="{{rating_summary}}%">
7546                        <div class="inline-flex align-middle" style="line-height: 0;">
7547                            <div class="relative">
7548                                <div class="flex">
7549                                    <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>
7550                                    <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>
7551                                    <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"/>
7551</svg>
7552                                    <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>
7553                                    <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>
7554                                </div>
7555                                <div class="absolute top-0 left-0 overflow-hidden" style="width: {{rating_summary}}%">
7556                                    <div class="flex w-fit">
7557                                        <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>
7558                                        <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>
7559                                        <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>
7560                                        <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>
7561                                        <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>
7562                                    </div>
7563                                </div>
7564                            </div>
7565                            <span class="ml-1 text-xs relative top-[-1px]">({{rating_count}})</span>
7566                        </div>
7567                    </div>
7568                    {{/rating_count}}
7569                </div>
7570
7571                <div class="flex flex-nowrap justify-between items-center mt-auto items-end leading-none">
7572                    <span class="ajax-price-container block flex-grow font-baloo-bhaina hide-price-labels">
7573                        <template x-if="active = true">
7574                            <div x-defer="intersect" x-intersect.once="$store.ajaxPrices.addNode({{objectID}})">
7575                                <template x-if="!$store.ajaxPrices.hasPrice({{objectID}})">
7576                                    <div class="skeleton w-16 lg:w-full h-6">
7577                                        Caricamento...                                    </div>
7578                                </template>
7579                                <template x-if="$store.ajaxPrices.hasPrice({{objectID}})">
7580                                    <span x-html="$store.ajaxPrices.getPriceHtml({{objectID}})"></span>
7581                                </template>
7582                            </div>
7583                        </template>
7584                    </span>
7585
7586                    {{#isAddToCartEnabled}}
7587                    {{#in_stock}}
7588                        <form class="flex-grow-0 product_addtocart_form" data-role="tocart-form" action="{{ addToCart.action }}" method="post">
7589                            <input type="hidden" name="product" value="{{objectID}}">
7590                            <input type="hidden" name="uenc" value="{{ addToCart.uenc }}">
7591                            <input name="form_key" type="hidden" value="{{ addToCart.formKey }}">
7592                            <button type="submit" title="Aggiungi al Carrello"
7593                                    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"
7594                            >
7595                                <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>
7596                            </button>
7597                        </form>
7598                    {{/in_stock}}
7599                    {{^in_stock}}
7600                        <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"
7601                           {{^__queryID}} href="{{url}}" {{/__queryID}}
7602                           {{#__queryID}} href="{{urlForInsights}}" {{/__queryID}}
7603                    >
7604                            <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">
7605                                <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.
7605058 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>
7606                            </svg>
7607                        </a>
7608                    {{/in_stock}}
7609
7610                    {{/isAddToCartEnabled}}
7611                </div>
7612            </div>
7613        </div>
7614    </div>
7615</script>
vendor: 1 bytes, line 7615
7615
7616<script>
7617    'use strict';
7618
7619    function initInsight() {
7620        return {
7621            bindClickEvent(element, eventName, objectID, indexName, position, queryID) {
7622                element.querySelector(algoliaConfig.ccAnalytics.ISSelector).addEventListener("click", function () {
7623                    buildInsightsEventData(eventName, objectID, indexName, position, queryID);
7624                });
7625            }
7626        }
7627    }
7628</script>
vendor: 1 bytes, line 7628
7628
7629<script type="text/template" id="instant-stats-total-template">
7630    <div class="font-body-sm text-gray-1 hidden lg:block">
7631        <span itemprop="numberOfItems">{{nbHits}}</span>
7632        <span>prodotti</span>
7633    </div>
7634</script>
7634
7635
7636<script type="text/template" id="instant-stats-range-template">
7637    <div class="toolbar-amount font-body-sm text-gray-1 pb-4 text-center">
7638        <span itemprop="numberOfItems">{{first}}-{{last}}</span>
7639        <span>di</span>
7640        <span itemprop="numberOfItems">{{nbHits}}</span>
7641    </div>
7642</script>
vendor: 1 bytes, line 7642
7642
7643<script type="text/template" id="refinements-lists-item-template">
7644    <label class="{{cssClasses.label}} {{#isRefined}}checked{{/isRefined}} flex items-center mb-1">
7645        <input class="{{cssClasses.checkbox}}" {{#isRefined}}checked{{/isRefined}} type="checkbox" value="{{value}}" />
7646        <span class="pl-2">{{value}}</span>
7647        <span class="{{cssClasses.count}} flex-grow text-right">{{count}}</span>
7648    </label>
7649</script>
vendor: 1 bytes, line 7649
7649
7650<script type="text/template" id="current-refinements-template">
7651    <div class="cross-wrapper">
7652        <span class="clear-cross clear-refinement"></span>
7653    </div>
7654    <div class="current-refinement-wrapper">
7655        {{#label}}
7656        <span class="current-refinement-label">{{label}}{{^operator}}:{{/operator}}</span>
7657        {{/label}}
7658        {{#operator}}
7659        {{{displayOperator}}}
7660        {{/operator}}
7661        {{#exclude}}-{{/exclude}}
7662        <span class="current-refinement-name">{{name}}</span>
7663    </div>
7664</script>
vendor: 1 bytes, line 7664
7664
7665<script>
7666    (function () {
7667        const modals = [];
7668                let lastHide = 0;
7669
7670                function resolveElement($refs, value) {
7671            if (!value) return null;
7672                        if (value instanceof Element) return value;
7673                        if (typeof value === 'string') {
7674                try {
7675                    return ($refs && $refs[value]) || document.querySelector(value) || null;
7676                } catch (e) {}
7677            }
7678            return null;
7679        }
7680
7681                function determineTrigger($refs, dialog, trigger) {
7682                        if (!trigger && dialog?.target instanceof HTMLElement) {
7683                return dialog.target;
7684            }
7685
7686                        if (typeof dialog === 'string' && trigger?.target instanceof HTMLElement) {
7687                return trigger.target;
7688            }
7689
7690            return resolveElement($refs, trigger);
7691        }
7692
7693                function setFocusFirstElement(dialogElement) {
7694            if (!dialogElement) return;
7695
7696            window.setTimeout(() => {
7697                const candidates = dialogElement.querySelectorAll('[x-focus-first]');
7698                for (const candidate of candidates) {
7699                    if (candidate.closest('dialog') === dialogElement) {
7700                        candidate.focus();
7701                        return;
7702                    }
7703                }
7704            }, 50);
7705        }
7706
7707        window.hyva.modal = function(options = {}) {
7708                        if (this.$el && this.$el.dataset && this.$el.dataset.options) {
7709                try {
7710                    options = Object.assign(options, JSON.parse(this.$el.dataset.options || '{}'));
7711                } catch (e) {
7712                    throw new Error('Cannot read the dialog options from the data-options attribute: not valid JSON');
7713                }
7714            }
7715
7716            const config = Object.assign({
7717                dialog: 'dialog',                 duration: 300,                 transitionEnter: 'transition ease-out duration-300',
7718                transitionEnterStart: 'opacity-0',
7719                transitionEnterEnd: 'opacity-100',
7720                transitionLeave: 'transition ease-in duration-300',
7721                transitionLeaveStart: 'opacity-100',
7722                transitionLeaveEnd: 'opacity-0',
7723            }, options);
7724
7725            return {
7726                opened: {},
7727                show(dialog, trigger) {
7728                    const name = typeof dialog === 'string' ? dialog : config.dialog;
7729                    if (!name || this.opened[name]) return;
7730
7731                    this.opened[name] = true;
7732                    const focusTarget = determineTrigger(this.$refs, dialog, trigger);
7733                    const dialogEl = this.$refs && this.$refs[name];
7734                    const frame = { name, instance: this, focusTarget, time: Date.now() };
7735                    modals.push(frame);
7736                    setFocusFirstElement(dialogEl);
7737                    return new Promise(resolve => { frame.resolve = resolve; });
7738                },
7739                cancel() {
7740                    this.hide(false);
7741                },
7742                ok() {
7743                    this.hide(true);
7744                },
7745                hide(value) {
7746                                        if (Date.now() - lastHide < config.duration) return;
7747                    lastHide = Date.now();
7748
7749                                        const modal = modals.pop();
7750                    if (!modal) return;
7751
7752                    modal.instance.opened[modal.name] = false;
7753
7754                                        const focusTarget = modal.focusTarget;
7755                    focusTarget && window.setTimeout(() => focusTarget.focus(), config.duration + 50);
7756                    modal.resolve && modal.resolve(value);
7757                },
7758                /**
7759                 * @deprecated Use dialogConfig() instead, which is used by the default modal-container.phtml template.
7760                 * This method is kept for backwards compatibility with custom container templates.
7761                 */
7762                overlay(dialog) {
7763                    dialog = this.$el.dataset.dialogRefName || dialog;
7764                    const name = typeof dialog === 'string' ? dialog : config.dialog;
7765                    if (this.$el.tagName !== 'DIALOG' && ! window.hyva.modal.legacyModalCompatibility) {
7766                        console.warn(
7767                            '[hyva] Deprecated modal markup detected (x-bind="overlay" on a non-dialog element' +
7768                            (name ? ` for "${name}"` : '') + ').\n' +
7769                            'Escape and click-outside closing are not available for such dialogs anymore.\n' +
7770                            'Install hyva-themes/magento2-legacy-modal-compatibility or migrate to the native <dialog> markup.'
7771                        );
7772                    }
7773                    return Object.assign({}, this.dialogConfig(name), {
7774                        ['@hyva-modal-show.window'](event) {
7775                            event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide)
7776                        }
7777                    });
7778                },
7779                dialogConfig(name) {
7780                    name = name || this.$el.dataset.dialogRefName || config.dialog;
7781                    return {
7782                        ['x-show']: () => name ? this.opened[name] : false,
7783                        ['x-transition:enter']: config.transitionEnter,
7784                        ['x-transition:enter-start']: config.transitionEnterStart,
7785                        ['x-transition:enter-end']: config.transitionEnterEnd,
7786                        ['x-transition:leave']: config.transitionLeave,
7787                        ['x-transition:leave-start']: config.transitionLeaveStart,
7788                        ['x-transition:leave-end']: config.transitionLeaveEnd,
7789                        ['@hyva-modal-show.window'](event) {
7790                            event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide);
7791                        },
7792                    };
7793                },
7794                showDialogOnInit() {
7795                    const name = this.$el.dataset.dialogRefName;
7796                    if (name) {
7797                        this.show(name);
7798                    }
7799                }
7800            };
7801        }
7802
7803        window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length - 1]
7804
7805        window.hyva.modal.pop = function () {
7806            if (modals.length > 0) {
7807                modals[modals.length - 1].instance.hide();
7808            }
7809        }
7810
7811        /**
7812         * @deprecated Native <dialog> handles focus trapping automatically.
7813         * Calling this function has no effect. Kept for backwards compatibility.
7814         */
7815        window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) {}
7816
7817        /**
7818         * @deprecated Native <dialog> with x-htmldialog handles ESC key and click-outside events.
7819         * These functions have no effect. Kept for backwards compatibility.
7820         */
7821        window.hyva.modal.eventListeners = {
7822            keydown: event => {},
7823            click: event => {}
7824        };
7825    })();
7826
7827    window.addEventListener('alpine:init', () => {
7828        Alpine.data('hyvaModal', window.hyva.modal);
7829    }, {once: true});
7830</script>
7830
7831
7832<section x-data="initAmGdprLoader"
7833         @amgdpr-loading-start.window="showLoader"
7834         @amgdpr-loading-stop.window="hideLoader"
7835>
7836    
7837<div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50"
7838     style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgb(255 255 255/0.60);"
7839     x-show="isLoading"
7840     x-transition:enter="ease-out duration-200"
7841     x-transition:enter-start="opacity-0"
7842     x-transition:enter-end="opacity-100"
7843     x-transition:leave="ease-in duration-200"
7844     x-transition:leave-start="opacity-100"
7845     x-transition:leave-end="opacity-0">
7846    <svg xmlns="http://www.w3.org/2000/svg" width="57" height="57" viewBox="0 0 38 38" stroke="#ffb590" class="text-primary" role="img">
7847    <g fill="none" fill-rule="evenodd">
7848        <g transform="translate(1 1)" stroke-width="2">
7849            <circle stroke="#ff6801" cx="18" cy="18" r="18"/>
7850            <path d="M36 18c0-9.94-8.06-18-18-18">
7851                <animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="1s" repeatCount="indefinite"/>
7852            </path>
7853        </g>
7854    </g>
7855<title>loader</title></svg>
7856</div>
7857</section>
7858
7859<script data-cfasync="false">
7860    'use strict';
7861
7862    function initAmGdprLoader() {
7863        return {
7864            isLoading: false,
7865
7866            /**
7867             * @returns {void}
7868             */
7869            showLoader: function () {
7870                this.isLoading = true;
7871            },
7872
7873            /**
7874             * @returns {void}
7875             */
7876            hideLoader: function () {
7877                this.isLoading = false;
7878            }
7879        }
7880    }
7881
7882    window.addEventListener(
7883        'alpine:init',
7884        () => Alpine.data('initAmGdprLoader', initAmGdprLoader),
7885        { once: true }
7886    );
7887</script>
7887
7888
7889
7890<script data-cfasync="false">
7891    'use strict';
7892
7893    /**
7894     * @typedef {Object} CookieGroupData
7895     * @prop {Boolean} checked
7896     * @prop {[{description: string, lifetime: number|null, name: string, provider: string, type: string}]} cookies
7897     * @prop {String} description
7898     * @prop {string|null} groupId
7899     * @prop {Boolean} isEssential
7900     * @prop {String} name
7901     */
7902
7903    function initAmastyCookieGroupsStorage() {
7904        return {
7905            /**
7906             * @type {[CookieGroupData]}
7907             */
7908            groupData: [],
7909            cookiePolicy: undefined,
7910            lastUpdate: undefined,
7911
7912            /**
7913             * @returns {string|number[]}
7914             */
7915            getEssentialGroupIds: function () {
7916                return this.groupData.reduce(function (essentialGroupIds, group) {
7917                    if (group.isEssential) {
7918                        essentialGroupIds.push(group.groupId)
7919                    }
7920
7921                    return essentialGroupIds;
7922                }, []);
7923            },
7924
7925            /**
7926             * @returns {string|number[]}
7927             */
7928            getCheckedGroupIds: function () {
7929                return this.groupData.reduce(function (checkedGroupIds, group) {
7930                    if (group.checked) {
7931                        checkedGroupIds.push(group.groupId);
7932                    }
7933
7934                    return checkedGroupIds;
7935                }, []);
7936            },
7937
7938            /**
7939             * @param {string} cookieName
7940             * @returns {boolean}
7941             */
7942            isCookieEssential: function (cookieName) {
7943                const allEssentialCookies = this.getEssentialCookies();
7944
7945                return !!allEssentialCookies.find(cookie => cookie.name === cookieName);
7946            },
7947
7948            /**
7949             * @returns {array}
7950             */
7951            getEssentialCookies: function () {
7952                return this.groupData
7953                    .filter(group => group.isEssential)
7954                    .map(group => group.cookies)
7955                    .flat();
7956            },
7957
7958            /**
7959             * @returns {boolean}
7960             */
7961            hasGroupData: function () {
7962                return !!this.groupData.length;
7963            },
7964
7965            /**
7966             * @param {string} cookieName
7967             * @param {string} pattern
7968             * @returns {boolean}
7969             */
7970            isEssentialByPattern: function (cookieName, pattern) {
7971                const essentialCookiePatterns = this.getEssentialCookiesPattern(pattern);
7972
7973                return essentialCookiePatterns.some((pattern) => !!cookieName.match(this.getCookiePattern(pattern)));
7974            },
7975
7976            /**
7977             * @param {string} pattern
7978             * @return {Array}
7979             */
7980            getEssentialCookiesPattern: function (pattern) {
7981                return this.getCookiesByPattern(pattern, this.getEssentialCookies());
7982            },
7983
7984            /**
7985             * @param {string} pattern
7986             * @param {Array|undefined} cookies
7987             * @return {Array}
7988             */
7989            getCookiesByPattern: function (pattern, cookies) {
7990                if (typeof cookie === 'undefined') {
7991                    cookies = this.getAllCookies();
7992                }
7993
7994                return cookies
7995                    .map((cookie) => typeof cookie === 'object' ? cookie.name : cookie.split('=')[0].trim())
7996                    .filter((cookie) => cookie.match(pattern) !== null);
7997            },
7998
7999            /**
8000             * @returns {array}
8001             */
8002            getDisallowedCookies: function () {
8003                const disallowedCookie = decodeURIComponent(hyva.getCookie('amcookie_disallowed') ?? '');
8004                if (!disallowedCookie) {
8005                    return [];
8006                }
8007
8008                return disallowedCookie.split(',');
8009            },
8010
8011            /**
8012             * @returns {string}
8013             */
8014            getCookiePattern: function (pattern) {
8015                return `^${pattern.replaceAll('*', '.*')}$`;
8016            },
8017
8018            /**
8019             * @returns {array}
8020             */
8021            getAllCookies: function () {
8022                return document.cookie.split(';');
8023            },
8024
8025            /**
8026             * @param {boolean} setAcceptance
8027             * @returns {Promise}
8028             */
8029            updateGroupData: function (setAcceptance = false) {
8030                const cookieFetchUrl = `${BASE_URL}amcookie/cookie/cookies`;
8031                return fetch(cookieFetchUrl, {
8032                    method: "POST",
8033                    headers: {
8034                        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
8035                        'X-Requested-With': 'XMLHttpRequest'
8036                    },
8037                    body: new URLSearchParams({
8038                        allowed: hyva.getCookie('amcookie_allowed'),
8039                        restriction: hyva.getCookie('amcookie_policy_restriction')
8040                    })
8041                }).then(response => {
8042                    if (response.ok) {
8043                        return response.json();
8044                    }
8045
8046                    return Promise.reject(`${response.status} ${response.statusText}`);
8047                }).then(data => {
8048                    this.cookiePolicy = data.cookiePolicy ?? 'allowed';
8049                    this.lastUpdate = data.lastUpdate ?? 0;
8050                    this.groupData = [...data.groupData];
8051
8052                    hyva.setCookie('amcookie_policy_restriction', this.cookiePolicy, 10);
8053                    if (setAcceptance) {
8054                        amastyCookieManager.setLastCookieAcceptance(this.lastUpdate);
8055                    }
8056
8057                    return data;
8058                }).catch(error => {
8059                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([
8060                        {
8061                            type: "error",
8062                            text: error
8063                        }
8064                    ]);
8065                }).finally(() => window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated')));
8066            }
8067        }
8068    }
8069
8070    window.addEventListener(
8071        'alpine:init',
8072        () => Alpine.store('AmastyCookieGroups', initAmastyCookieGroupsStorage()),
8073        { once: true }
8074    );
8075</script>
8075
8076
8077<script data-cfasync="false">
8078    (function (amastyCookieManager) {
8079        'use strict';
8080
8081        amastyCookieManager.pattern = '{(?<cookiePattern>.*)}';
8082
8083        amastyCookieManager.getAmastyCookieGroupStorage = function () {
8084            return Alpine.store('AmastyCookieGroups') ?? {};
8085        };
8086
8087        amastyCookieManager.deleteDisallowedCookie = function () {
8088            const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage();
8089            const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? [];
8090
8091            disallowedCookies.forEach((name) => {
8092                const pattern = name.match(this.pattern);
8093                if (!!pattern && !!amastyCookieGroupStorage) {
8094                    const cookiePattern = amastyCookieGroupStorage.getCookiePattern(pattern.groups.cookiePattern) ?? '';
8095
8096                    amastyCookieGroupStorage.getCookiesByPattern(cookiePattern).forEach((cookieName) => {
8097                        this.deleteNotEssentialCookie(cookieName);
8098                    });
8099                } else {
8100                    this.deleteNotEssentialCookie(name);
8101                }
8102            });
8103        };
8104
8105        amastyCookieManager.isCookieAllowed = function (cookieName) {
8106            const allowedGroups = hyva.getCookie('amcookie_allowed');
8107            const disallowedCookie = this.getAmastyCookieGroupStorage()?.getDisallowedCookies() ?? [];
8108            const isCookiePolicyAllowed = hyva.getCookie('amcookie_policy_restriction') === 'allowed';
8109            const isCookieEssential = this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName);
8110            const isCookieEssentialByPattern = this.getAmastyCookieGroupStorage()?.isEssentialByPattern(cookieName, this.pattern);
8111
8112            if (!isCookiePolicyAllowed || isCookieEssential || isCookieEssentialByPattern) {
8113                return true;
8114            }
8115
8116            return !((!allowedGroups && !disallowedCookie) || this.isCookieDisallowed(cookieName));
8117        };
8118
8119        amastyCookieManager.isCookieDisallowed = function (cookieName) {
8120            const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage();
8121            const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? [];
8122
8123            return disallowedCookies.some((cookie) => {
8124                const pattern = cookie.match(this.pattern);
8125
8126                return !!pattern && !!cookieName.match(amastyCookieGroupStorage?.getCookiePattern(pattern.groups.cookiePattern));
8127            }) || disallowedCookies.indexOf(cookieName) !== -1;
8128        };
8129
8130        amastyCookieManager.processManageableCookies = function () {
8131            let cookieScripts = document.querySelectorAll('script[data-amcookie-groupid][type="text/plain"]');
8132
8133            cookieScripts.forEach((elem) => {
8134                if (this.isChecked(elem.dataset['amcookie-groupid'])) {
8135                    let elClone = elem.cloneNode(true).setAttribute('type', 'text/javascript');
8136
8137                    elem.remove();
8138                    document.body.appendChild(elClone);
8139                }
8140            });
8141        };
8142
8143        amastyCookieManager.deleteNotEssentialCookie = function (cookieName) {
8144            if (!this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName)) {
8145                hyva.setCookie(cookieName, '', -1, true);
8146            }
8147        };
8148
8149        amastyCookieManager.setLastCookieAcceptance = function (lastUpdate) {
8150            localStorage.setItem('am-last-cookie-acceptance', lastUpdate);
8151        };
8152
8153        window.addEventListener('amasty-cookie-group-updated', () => {
8154            amastyCookieManager.deleteDisallowedCookie();
8155        });
8156
8157        window.addEventListener('private-content-loaded', () => {
8158            amastyCookieManager.getAmastyCookieGroupStorage()?.hasGroupData() && amastyCookieManager.deleteDisallowedCookie();
8159        });
8160    }(window.amastyCookieManager = window.amastyCookieManager || {}));
8161</script>
8161
8162
8163<script data-cfasync="false">
8164    (function () {
8165        'use strict';
8166
8167        window.addEventListener('cookiebar-action-accept', (event) => {
8168            const groups = event.detail?.include_checked_groups ? Alpine.store('AmastyCookieGroups').getCheckedGroupIds() : [];
8169            const url = `${BASE_URL}amcookie/cookie/savegroups`;
8170            const contentType = 'application/x-www-form-urlencoded; charset=UTF-8';
8171            const body = new URLSearchParams({
8172                form_key: hyva.getFormKey()
8173            });
8174            groups.length && groups.map(groupId => body.append('groups[]', groupId));
8175
8176            fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}})
8177                .then(response => {
8178                    if (response.ok) {
8179                        return response.json();
8180                    }
8181
8182                    return Promise.reject(`${response.status} ${response.statusText}`);
8183                })
8184                .then(data => {
8185                    !!data.success && Alpine.store('AmastyCookieGroups').updateGroupData(true);
8186                })
8187                .catch(error => {
8188                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([
8189                        {
8190                            type: "error",
8191                            text: error
8192                        }
8193                    ]);
8194                })
8195                .finally(() => {
8196                    amastyCookieManager.processManageableCookies();
8197                    window.dispatchEvent(new CustomEvent('cookiebar-action-accept-finish'));
8198                    window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated'));
8199                    // Wait cookiebar close animation
8200                    setTimeout(() => {
8201                        window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
8202                    }, 100);
8203                });
8204        });
8205    })();
8206</script>
8206
8207
8208<script data-cfasync="false">
8209    (function () {
8210        'use strict';
8211
8212        window.addEventListener('cookiebar-action-allow', () => {
8213            const url = `${BASE_URL}amcookie/cookie/allow`;
8214            const contentType = 'application/x-www-form-urlencoded; charset=UTF-8';
8215            const body = new URLSearchParams({
8216                form_key: hyva.getFormKey()
8217            });
8218            fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}})
8219                .then(response => {
8220                    if (response.ok) {
8221                        return response;
8222                    }
8223
8224                    return Promise.reject(`${response.status} ${response.statusText}`);
8225                })
8226                .then(() => {
8227                    Alpine.store('AmastyCookieGroups').updateGroupData(true);
8228                })
8229                .catch(error => {
8230                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([
8231                        {
8232                            type: "error",
8233                            text: error
8234                        }
8235                    ]);
8236                })
8237                .finally(() => {
8238                    amastyCookieManager.processManageableCookies();
8239                    window.dispatchEvent(new CustomEvent('cookiebar-action-allow-finish'));
8240                    // Wait cookiebar close animation
8241                    setTimeout(() => {
8242                        window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
8243                    }, 100);
8244                });
8245        });
8246    })();
8247</script>
8247
8248
8249<style>
8250    :root {
8251        /* Bar Color Settings */
8252        --ambar-background: #fff;
8253        --ambar-links-color: #326ed1;
8254        --ambar-policy-text: #374151;
8255        --ambar-toggle-active-color: #2563eb;
8256        --ambar-toggle-inactive-color: #fff;
8257
8258        /* Buttons Color Settings */
8259        --ambar-button-accept-color: #337ab7;
8260        --ambar-button-accept-hover-color: #337ab7;
8261        --ambar-button-accept-text: #fff;
8262        --ambar-button-accept-hover-text: #fff;
8263
8264        --ambar-button-allow-color: #337ab7;
8265        --ambar-button-allow-hover-color: #337ab7;
8266        --ambar-button-allow-text: #fff;
8267        --ambar-button-allow-hover-text: #fff;
8268
8269        --ambar-button-decline-color: #337ab7;
8270        --ambar-button-decline-hover-color: #337ab7;
8271        --ambar-button-decline-text: #fff;
8272        --ambar-button-decline-hover-text: #fff;
8273
8274        --ambar-button-settings-color: #337ab7;
8275        --ambar-button-settings-hover-color: #337ab7;
8276        --ambar-button-settings-text: #fff;
8277        --ambar-button-settings-hover-text: #fff;
8278
8279        /* Buttons Order Settings */
8280        --ambar-button-accept-order: 0;
8281        --ambar-button-allow-order: 0;
8282        --ambar-button-settings-order: 0;
8283        --ambar-button-decline-order: 0;
8284
8285        /* Cookie Information Bar Color Settings */
8286        --ambar-information-background: #fff;
8287        --ambar-information-title: #374151;
8288        --ambar-information-description: #374151;
8289        --ambar-information-table-header: #374151;
8290        --ambar-information-table-content: #374151;
8291
8292        /* Cookie Information Bar Done Button Settings */
8293        --ambar-information-button-color: #1d4ed8;
8294        --ambar-information-button-hover-color: #1d4ed8;
8295        --ambar-information-button-text: #fff;
8296        --ambar-information-button-hover-text: #fff;
8297
8298        /* Settings Bar Done Button Settings */
8299        --ambar-setting-button-color: #1d4ed8;
8300        --ambar-setting-button-hover-color: #1d4ed8;
8301        --ambar-setting-button-text: #fff;
8302        --ambar-setting-button-hover-text: #fff;
8303    }
8304</style>
8305
8306<script data-cfasync="false">
8307    'use strict';
8308
8309    function initAmCookieActionDispatcherBtn() {
8310        return {
8311            actiondispatchHandler: function (event) {
8312                const { dispatchAction, dispatchPayload } = event.currentTarget.dataset;
8313                this.$dispatch(dispatchAction, this.parsePayload(dispatchPayload));
8314            },
8315            parsePayload: function (payload) {
8316                try {
8317                    return JSON.parse(payload);
8318                } catch (e) {
8319                    return null;
8320                }
8321            }
8322        };
8323    }
8324
8325    window.addEventListener(
8326        'alpine:init',
8327        () => Alpine.data('initAmCookieActionDispatcherBtn', initAmCookieActionDispatcherBtn),
8328        { once: true }
8329    );
8330</script>
8330
8331
8332<script data-cfasync="false">
8333    'use strict';
8334
8335    function initAmCookieGroups() {
8336        return {
8337            /**
8338             * @withContext x-for: $store.AmastyCookieGroups.groupData
8339             * @returns {string}
8340             */
8341            getInputGroupId: function () {
8342                return `amcookie-${this.$el.dataset.groupPrefix}group-${this.group.groupId}`
8343            },
8344
8345            /**
8346             * @withContext x-for: $store.AmastyCookieGroups.groupData
8347             * @returns {{"!bg-gray-400": boolean}}
8348             */
8349            getInputStyles: function () {
8350                return {
8351                    '!bg-gray-400': this.group.isEssential
8352                }
8353            },
8354
8355            /**
8356             * @withContext x-for: $store.AmastyCookieGroups.groupData
8357             * @returns {void}
8358             */
8359            toggleGroup: function () {
8360                this.group.checked = !this.group.checked;
8361            },
8362
8363            /**
8364             * @withContext x-for: $store.AmastyCookieGroups.groupData
8365             * @returns {void}
8366             */
8367            moreInfoClickHandler: function () {
8368                this.$dispatch(this.$el.dataset.dispatchAction, this.group);
8369            },
8370
8371            moreInformationAboutCookieGroup: function () {
8372                return hyva.str('About\u0020\u0022\u00251\u0022\u0020Cookie\u0020Group', this.group.name);
8373            }
8374        }
8375    }
8376
8377    window.addEventListener(
8378        'alpine:init',
8379        () => Alpine.data('initAmCookieGroups', initAmCookieGroups),
8380        {once: true}
8381    );
8382</script>
8382
8383<style>
8384    .is-loading > :not(.loader) {
8385        visibility: hidden;
8386    }
8387</style>
8388
8389<script>
8390    function connectifGetURLParameters(form) {
8391        let url = form.querySelector('.connectif-url').getAttribute('href');
8392        const parsedUrl = new URL(url);
8393
8394        const params = new URLSearchParams(parsedUrl.search);
8395
8396        const paramsObject = {};
8397        params.forEach((value, key) => {
8398            paramsObject[key] = decodeURIComponent(value);
8399        });
8400
8401        return paramsObject;
8402    }
8403
8404    var addToCartAjaxEvent = function (e) {
8405        let form = this;
8406        let delay = parseInt('1000', 10);
8407
8408        e.preventDefault();
8409
8410        const data = new URLSearchParams(new FormData(form)),
8411            button = form.querySelector('button') ?
8412                form.querySelector('button') :
8413                document.getElementById('product-addtocart-button'),
8414            loader = document.createElement('div'),
8415            initialText = button.innerHTML;
8416
8417        loader.className = 'absolute inset-0 flex justify-center items-center loader';
8418        loader.innerHTML = `
8419                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" xml:space="preserve" width="32" height="32">
8420                    <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">
8421                        <animateTransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/>
8422                    </path>
8423                </svg>
8424                `;
8425
8426        button.prepend(loader);
8427        button.classList.add('relative', 'is-loading', 'text-[0]');
8428        button.disabled = true;
8429
8430        var product_id = data.get('product');
8431
8432        fetch(e.currentTarget.action, {
8433            method: 'POST',
8434            body: data,
8435            headers: {
8436                'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
8437                'X-Requested-With': 'XMLHttpRequest'
8438            }
8439        })
8440            .then(res => {
8441                if (!res.ok) {
8442                    return form.submit();
8443                }
8444
8445                if (res.redirected) {
8446                    return [];
8447                }
8448
8449                return res.json();
8450            })
8451            .then(data => {
8452                if (form.classList.contains('connectif-product')) {
8453                    let jsonDecodedVAR = JSON.parse(connectifGetURLParameters(form)['cnWebLinkClicked']);
8454                    jsonDecodedVAR.type = "web-link-clicked";
8455
8456                    window.connectif.managed.sendEvents([jsonDecodedVAR], []).finally(() => submitCallback());
8457                } else {
8458                    submitCallback();
8459                }
8460
8461                function submitCallback() {
8462                    if (data.backUrl && data.backUrl !== window.location.href) {
8463                        form.submit();
8464                    } else {
8465                        button.classList.add('bg-success-darker', 'hover:bg-success-darker');
8466                        loader.remove();
8467
8468                        let defaultChild = button.querySelector('.check');
8469                        if (!defaultChild) {
8470                            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">
8471        <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"/>
8472    <title>check</title></svg>
8473    `;
8474                        } else {
8475                            defaultChild.classList.add('hidden');
8476                            let addingChild = button.querySelector('.added');
8477                            if (addingChild) {
8478                                addingChild.classList.remove('hidden');
8479                            }
8480                        }
8481
8482                        button.classList.remove('is-loading', 'text-[0]');
8483                    }
8484
8485                    window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
8486                }
8487            })
8488            .catch(err => {
8489                window.dispatchEvent(new CustomEvent('product-addtocart-error'));
8490
8491                setMessage({
8492                    text:'There was a problem adding your item to the cart.',
8493                    type: 'error'
8494                });
8495            })
8496            .finally(() => {
8497                try {
8498                    var messages = hyva.getCookie('mage-messages');
8499                    messages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
8500                    document.cookie = 'mage-messages=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
8501
8502                } catch (error) {
8503                    console.warn('Error parsing Cookie Messages:', error);
8504                    return;
8505                }
8506
8507                setTimeout(() => {
8508                    button.disabled = false;
8509                    button.classList.remove('bg-success-darker', 'hover:bg-success-darker');
8510                    button.classList.remove('text-[0]');
8511
8512                    let defaultChild = button.querySelector('.default');
8513                    if (!defaultChild) {
8514                        button.innerHTML = button.getAttribute("aria-label");
8515                    } else {
8516                        defaultChild.classList.remove('hidden');
8517                        let addingChild = button.querySelector('.added');
8518                        if (addingChild) {
8519                            addingChild.classList.add('hidden');
8520                        }
8521                    }
8522
8523                    button.innerHTML = initialText;
8524
8525                    window.dispatchEvent(new CustomEvent('product-addtocart-success', {
8526                        detail: {
8527                            product_id: product_id,
8528                            form_data: Object.fromEntries(new FormData(form))
8529                        }
8530                    }));
8531
8532                    messages.forEach(message => {
8533                        setMessage(message);
8534                    });
8535                }, delay);
8536            });
8537    };
8538
8539    window.setAjaxCart = (selectors = '.product_addtocart_form:not(.no-ajax), #product_addtocart_form:not(.no-ajax)') => {
8540        const addToCartForms = document.querySelectorAll(selectors);
8541
8542        addToCartForms.forEach(form => {
8543            form.removeEventListener('submit', addToCartAjaxEvent);
8544            form.addEventListener('submit', addToCartAjaxEvent);
8545        });
8546    }
8547
8548    /**
8549     * Set Message
8550     */
8551    function setMessage(message) {
8552        typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
8553            [message], 5000
8554        );
8555    }
8556
8557    /** Init on pageload */
8558    window.setAjaxCart();
8559</script>
8559
8560    
8560<script>
8561    function initAlgoliaInsights(partial) {
8562        window.algoliaAnalytics = AlgoliaAnalytics.default;
8563        window.hasAddedParameters = false;
8564        window.useCookie = algoliaConfig.cookieConfiguration.cookieRestrictionModeEnabled ? !!hyva.getCookie(algoliaConfig.cookieConfiguration.consentCookieName) : true;
8565
8566        if (!canTrack()) {
8567            return;
8568        }
8569
8570        initializeAnalytics(partial);
8571        addSearchParameters();
8572        bindEvents();
8573
8574        // Although events can accept both auth and anon tokens, queries can only accept a single token
8575        function determineUserToken() {
8576            return window.algoliaAnalytics.getAuthenticatedUserToken() ?? algoliaAnalytics.getUserToken();
8577        }
8578
8579        function initializeAnalytics(partial = false) {
8580            if (partial) {
8581                algoliaAnalytics.init({
8582                    appId: algoliaConfig.applicationId,
8583                    apiKey: algoliaConfig.apiKey,
8584                    partial: true,
8585                    useCookie: true,
8586                    cookieDuration: Number(algoliaConfig.cookieConfiguration.cookieDuration)
8587                });
8588            } else {
8589                algoliaAnalytics.init({
8590                    appId: algoliaConfig.applicationId,
8591                    apiKey: algoliaConfig.apiKey,
8592                    useCookie: true,
8593                    cookieDuration: Number(algoliaConfig.cookieConfiguration.cookieDuration)
8594                });
8595            }
8596            let userAgent = 'insights-js-in-magento (' + algoliaConfig.extensionVersion + ')';
8597            window.algoliaAnalytics.addAlgoliaAgent(userAgent);
8598
8599            let unsetAuthenticationToken = hyva.getCookie('unset_authentication_token');
8600            if (hyva.getCookie('aa-search') && hyva.getCookie('aa-search') !== '') {
8601                window.algoliaAnalytics.setUserToken(hyva.getCookie('aa-search'));
8602            } else if (hyva.getCookie('_ALGOLIA') && hyva.getCookie('_ALGOLIA') !== '') {
8603                window.algoliaAnalytics.setUserToken(hyva.getCookie('_ALGOLIA'));
8604            } else if (unsetAuthenticationToken && unsetAuthenticationToken !== '') {
8605                window.algoliaAnalytics.setUserToken('undefined');
8606                hyva.setCookie('unset_authentication_token', '', -1);
8607            }
8608        }
8609
8610        function applyInsightsToSearchParams(params = {}) {
8611            if (algoliaConfig.ccAnalytics.enabled) {
8612                params.clickAnalytics = true;
8613            }
8614
8615            if (algoliaConfig.personalization.enabled) {
8616                params.enablePersonalization = true;
8617                params.userToken = determineUserToken();
8618            }
8619
8620            return params;
8621        }
8622
8623        function addSearchParameters() {
8624            if (window.hasAddedParameters) {
8625                return;
8626            }
8627            algolia.registerHook('beforeWidgetInitialization', function (allWidgetConfiguration) {
8628                allWidgetConfiguration.configure = applyInsightsToSearchParams(
8629                    allWidgetConfiguration.configure
8630                );
8631                return allWidgetConfiguration;
8632            });
8633
8634            algolia.registerHook('afterAutocompleteProductSourceOptions', (options) => {
8635                return applyInsightsToSearchParams(options);
8636            });
8637
8638            window.hasAddedParameters = true;
8639        }
8640
8641
8642        function bindEvents() {
8643            bindClickedEvents();
8644            bindViewedEvents();
8645
8646            algolia.triggerHooks('afterInsightsBindEvents', this);
8647        }
8648
8649        function bindClickedEvents() {
8650            // Filter Clicked
8651            if (algoliaConfig.personalization.filterClicked.enabled) {
8652                const facets = algoliaConfig.facets;
8653                let containers = [];
8654                for (let i = 0; i < facets.length; i++) {
8655                    let elem = createISWidgetContainer(facets[i].attribute);
8656                    containers.push('.' + elem.className);
8657                }
8658
8659                algolia.registerHook('afterInstantsearchStart', function (search) {
8660                    const selectors = document.querySelectorAll(containers.join(', '));
8661                    selectors.forEach(function (e) {
8662                        e.addEventListener('click', function (event) {
8663                            const attribute = this.dataset.attr;
8664                            const elem = event.target;
8665                            if (elem.type === "checkbox" && elem.checked) {
8666                                var filter = attribute + ':' + elem.value;
8667                                trackFilterClick([filter]);
8668                            }
8669                        });
8670                    });
8671
8672                    return search;
8673                });
8674            }
8675        }
8676
8677        function bindViewedEvents() {
8678            // viewed event is exclusive to personalization
8679            if (!algoliaConfig.personalization.enabled) {
8680                return;
8681            }
8682
8683            const viewConfig = algoliaConfig.personalization.viewedEvents.viewProduct;
8684            if (viewConfig.enabled) {
8685                if (document.body.classList.contains('catalog-product-view')) {
8686                    const objectId = document.querySelector('#product_addtocart_form')?.querySelector('input[name="product"]').value;
8687                    if (objectId) {
8688                        const viewData = buildEventData(viewConfig.eventName, objectId, algoliaConfig.indexName + '_products');
8689                        trackView(viewData);
8690                    }
8691                }
8692
8693            }
8694        }
8695
8696        function buildEventData(eventName, objectId, indexName, position = null, queryId = null) {
8697            const eventData = {
8698                eventName: eventName,
8699                objectIDs: [objectId + ''],
8700                index: indexName
8701            };
8702
8703            if (position) {
8704                eventData.positions = [parseInt(position)];
8705            }
8706
8707            if (queryId) {
8708                eventData.queryID = queryId;
8709            }
8710
8711            return eventData;
8712        }
8713
8714        function trackClick(eventData) {
8715            if (eventData.queryID) {
8716                window.algoliaAnalytics.clickedObjectIDsAfterSearch(eventData);
8717            } else {
8718                window.algoliaAnalytics.clickedObjectIDs(eventData);
8719            }
8720        }
8721
8722        function trackFilterClick(filters) {
8723            const eventData = {
8724                index: algoliaConfig.indexName + '_products',
8725                eventName: algoliaConfig.personalization.filterClicked.eventName,
8726                filters: filters
8727            };
8728
8729            window.algoliaAnalytics.clickedFilters(eventData);
8730        }
8731
8732        function trackView(eventData) {
8733            window.algoliaAnalytics.viewedObjectIDs(eventData);
8734        }
8735    }
8736
8737    function canTrack() {
8738        return ((algoliaConfig.ccAnalytics.enabled
8739            || algoliaConfig.personalization.enabled) && window.useCookie);
8740    }
8741
8742    function buildInsightsEventData(eventName, objectId, indexName, position = null, queryId = null) {
8743        if (!canTrack()) {
8744            return;
8745        }
8746
8747        const eventData = {
8748            eventName: eventName,
8749            objectIDs: [objectId + ''],
8750            index: indexName
8751        };
8752        if (position) {
8753            eventData.positions = [parseInt(position)];
8754        }
8755        if (queryId) {
8756            eventData.queryID = queryId;
8757        }
8758        trackClick(eventData);
8759    }
8760
8761    function trackClick(eventData) {
8762        if (eventData.queryID) {
8763            window.algoliaAnalytics.clickedObjectIDsAfterSearch(eventData);
8764        } else {
8765            window.algoliaAnalytics.clickedObjectIDs(eventData);
8766        }
8767    }
8768</script>
8768
8769    
8769<script>
8770        window.algoliaConfig = {"instant":{"enabled":true,"selector":".columns","isAddToCartEnabled":true,"addToCartParams":{"action":"https:\/\/www.farma.it\/checkout\/cart\/add\/","formKey":"NuWLCNhC6L8sVz4U","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":3},"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":"NuWLCNhC6L8sVz4U","redirectUrlParam":"uenc"},"isLookingSimilarEnabledInPDP":0,"isLookingSimilarEnabledInCartPage":0,"lookingSimilarTitle":"Prodotti simili"},"extensionVersion":"3.15.3","applicationId":"ZMUZFC3VV1","indexName":"magento2_default","apiKey":"MmUxZWIyN2ZjODA3ODk3ZTEwOWRmOWNhODBjYThlMDQ4NDBhZThiZGM0ZTBkYjJjMjNjNzRmYjcwMWQwMzA5MnRhZ0ZpbHRlcnM9JnZhbGlkVW50aWw9MTc5MTY1Njc4MQ==","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\/customer\/account\/forgotpassword\/"},"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"}};
8771
8772        let autocompleteInitialized = false;
8773        let commonInitialized = false;
8774        let insightsInitialized = false;
8775
8776        async function initAutocomplete() {
8777            if (autocompleteInitialized) {
8778                return
8779            }
8780
8781            autocompleteInitialized = true;
8782            Promise.all([
8783                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/internals/common.js"),
8784                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/internals/base64.js"),
8785                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/algolia-instantsearch.min.js"),
8786                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/search-insights.min.js"),
8787                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/algolia-search.min.js"),
8788                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/algolia-autocomplete.min.js"),
8789                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/query-suggestions-plugin.min.js"),
8790                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/autocomplete.js"),
8791                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/additional-section.js"),
8792                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/categories.js"),
8793                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/pages.js"),
8794                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/products.js"),
8795                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/template/autocomplete/suggestions.js"),
8796                ]
8797            ).then(data => {
8798                initCommon();
8799                initAlgoliaInsights();
8800                initAlgoliaAutocomplete();
8801            });
8802        }
8803
8804        function initInstantSearch() {
8805            Promise.all([
8806                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/internals/common.js"),
8807                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/internals/base64.js"),
8808                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/algolia-instantsearch.min.js"),
8809                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/search-insights.min.js"),
8810                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/hogan.min.js"),
8811                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/mustache.min.js"),
8812                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/internals/template-engine.js"),
8813                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/instantsearch.js"),
8814                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/algolia-search.min.js"),
8815                ]
8816            ).then(data => {
8817                initCommon();
8818                initAlgoliaInsights();
8819                initAlgoliaInstantSearch();
8820            });
8821        }
8822
8823        function initRecommended(objectIds) {
8824            Promise.all([
8825                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/internals/common.js"),
8826                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/internals/base64.js"),
8827                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/algolia-instantsearch.min.js"),
8828                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/search-insights.min.js"),
8829                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/recommend.min.js"),
8830                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Algolia_AlgoliaSearch/js/lib/recommend-js.min.js"),
8831                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/recommend.js"),
8832                                blackbird.loadExternalResource("https://www.farma.it/static/version1789421831/frontend/DNAFactory/orlandi_hyva/it_IT/Blackbird_HyvaAlgoliaSearch/js/template/recommend/products.js"),
8833                ]
8834            ).then(data => {
8835                initCommon();
8836                initBase64();
8837                initAlgoliaInsights();
8838                initAlgoliaRecommended('customer_account_forgotpassword', objectIds);
8839            });
8840        }
8841
8842        function initCommon() {
8843            if (commonInitialized) {
8844                return
8845            }
8846
8847            commonInitialized = true
8848            initAlgoliaCommon();
8849            initBase64();
8850            window.dispatchEvent(new CustomEvent('algolia-loaded'));
8851        }
8852
8853        if (algoliaConfig.instant.enabled && (algoliaConfig.isCategoryPage || algoliaConfig.isSearchPage)) {
8854            initInstantSearch();
8855        }
8856
8857        
8858        
8859
8860        let objectIds = [""];
8861        
8862        if (algoliaConfig.autocomplete.enabled) {
8863            document.getElementById('menu-search-icon').addEventListener('click', async () => {
8864                await initAutocomplete();
8865            },{once: true});
8866        }
8867
8868        window.addEventListener('init-algolia-trends', function () {
8869            initCommon();
8870            initAlgoliaInsights();
8871            window.dispatchEvent(new CustomEvent('init-algolia-trends-done'));
8872        });
8873
8874        window.addEventListener('init-algolia-LS', function () {
8875            initCommon();
8876            initAlgoliaInsights();
8877            window.dispatchEvent(new CustomEvent('init-algolia-LS-done'));
8878        });
8879
8880        window.addEventListener('user-allowed-save-cookie', function () {
8881            initAlgoliaInsights(true);
8882        });
8883    </script>
8883
8884
8885<style>
8886    .algolia-ac-product-row .badge-container .badge {
8887        max-height: fit-content;
8888        margin: auto 0;
8889    }
8890
8891    @media (max-width: 768px) {
8892        .catalogsearch-result-index {
8893            #algolia-left-container {
8894                width: calc(100vw - 15px);
8895                left: -15px;
8896                padding-left: 15px;
8897            }
8898
8899            #algolia-left-container .filters {
8900                width: calc(50% - 15px);
8901                margin-top: 30px;
8902            }
8903
8904            #algolia-toolbar {
8905                top: -76px;
8906                width: calc(50% - 15px);
8907            }
8908
8909            #algolia-toolbar .flex.right {
8910                flex-direction: column;
8911                align-items: flex-end;
8912                width: 100%;
8913                font-weight: bold;
8914            }
8915
8916            #algolia-toolbar .flex.left {
8917                position: absolute;
8918                width: calc(93vw - var(--scrollbar-width));
8919                top: -5px;
8920                left: calc((0% - 100vw + var(--scrollbar-width)) / 2);
8921                right: auto;
8922            }
8923
8924            #algolia-toolbar #algolia-sorts {
8925                width: 100%;
8926            }
8927
8928            #algolia-toolbar .ais-SortBy-select {
8929                background-color: white;
8930                font-weight: bold;
8931                padding-top: 0.375rem;
8932                padding-bottom: 0.375rem;
8933                padding-left: 0.75rem;
8934                padding-right: 1rem;
8935                width: 100%;
8936                border: 2px solid #6328e0;
8937            }
8938
8939            .ais-Stats-text > div {
8940                font-size: 16px;
8941                display: block;
8942            }
8943        }
8944    }
8945
8946    input[type="search"]::-webkit-search-decoration,
8947    input[type="search"]::-webkit-search-cancel-button,
8948    input[type="search"]::-webkit-search-results-button,
8949    input[type="search"]::-webkit-search-results-decoration {
8950        -webkit-appearance:none!important;
8951    }
8952
8953    .ais-Hits-banner-image {
8954        margin: auto!important;
8955        margin-bottom: 20px!important;
8956    }
8957</style>
8958<script>
8959    function initWishlist() {
8960        return {
8961            addToWishlist(productId) {
8962                const formKey = hyva.getFormKey();
8963                const postUrl = BASE_URL + 'wishlist/index/add/';
8964
8965                const params = new URLSearchParams({
8966                    form_key: formKey,
8967                    product: productId,
8968                    uenc: hyva.getUenc()
8969                });
8970
8971                const form = document.getElementById(`product_addtocart_form_${productId}`);
8972                if (form) {
8973                    new FormData(form).forEach((value, key) => params.set(key, value));
8974                }
8975
8976                fetch(postUrl, {
8977                    "headers": {
8978                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
8979                    },
8980                    "body": params.toString(),
8981                    "method": "POST",
8982                    "mode": "cors",
8983                    "credentials": "include"
8984                }).then(function (response) {
8985                    if (response.redirected) {
8986                        window.location.href = response.url;
8987                    } else if (response.ok) {
8988                        return response.json();
8989                    } else {
8990                        typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
8991                            [{
8992                                type: "warning",
8993                                text: "Could\u0020not\u0020add\u0020item\u0020to\u0020wishlist."
8994                            }], 5000
8995                        );
8996                    }
8997                }).then(function (response) {
8998                    if (!response) { return }
8999                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
9000                        [{
9001                            type: (response.success) ? "success" : "error",
9002                            text: (response.success)
9003                                ? "Prodotto\u0020\u00E8\u0020stato\u0020aggiunto\u0020nella\u0020tua\u0020lista\u0020desideri."
9004                                : response.error_message
9005                        }], 5000
9006                    );
9007                    const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data");
9008                    window.dispatchEvent(reloadCustomerDataEvent);
9009                }).catch(function (error) {
9010                    typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
9011                        [{
9012                            type: "error",
9013                            text: error
9014                        }], 5000
9015                    );
9016                });
9017            }
9018        }
9019    }
9020</script>
vendor: 1 bytes, line 9020
9020
9021<script>
9022    window.addEventListener('algolia-loaded', () => {
9023        algolia.registerHook('afterAutocompleteStart', () => {
9024            document.querySelector('#algoliaAutocomplete input')?.focus();
9025        });
9026    },{ once: true})
9027</script>
9027
9028    
9028<script>
9029        window.addEventListener('algolia-loaded', () => {
9030            algolia.registerHook('beforeWidgetInitialization', (allWidgetConfiguration) => {
9031                const {currentRefinements} = allWidgetConfiguration;
9032                const originalTransformItems = currentRefinements.transformItems.bind(currentRefinements);
9033                currentRefinements.transformItems = (items) => {
9034                    if (items.length !== 0) {
9035                        document.getElementById('instant-search-active-filters').classList.remove('hidden');
9036                        document.getElementById('instant-search-active-filters-label').classList.remove('hidden');
9037                    } else {
9038                        document.getElementById('instant-search-active-filters').classList.add('hidden');
9039                        document.getElementById('instant-search-active-filters-label').classList.add('hidden');
9040                    }
9041                    return originalTransformItems(items);
9042                }
9043                return allWidgetConfiguration;
9044            });
9045        },{ once: true})
9046    </script>
9046
9047<div x-cloak x-data="{...initAmBanners()}" x-init="initBanners()">
9048    
9049<div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50"
9050     style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgb(255 255 255/0.60);"
9051     x-show="isLoading"
9052     x-transition:enter="ease-out duration-200"
9053     x-transition:enter-start="opacity-0"
9054     x-transition:enter-end="opacity-100"
9055     x-transition:leave="ease-in duration-200"
9056     x-transition:leave-start="opacity-100"
9057     x-transition:leave-end="opacity-0">
9058    <svg xmlns="http://www.w3.org/2000/svg" width="57" height="57" viewBox="0 0 38 38" stroke="#ffb590" class="text-primary" role="img">
9059    <g fill="none" fill-rule="evenodd">
9060        <g transform="translate(1 1)" stroke-width="2">
9061            <circle stroke="#ff6801" cx="18" cy="18" r="18"/>
9062            <path d="M36 18c0-9.94-8.06-18-18-18">
9063                <animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="1s" repeatCount="indefinite"/>
9064            </path>
9065        </g>
9066    </g>
9067<title>loader</title></svg>
9068</div>
9069</div>
9070<script>
9071    'use strict';
9072
9073    function initAmBanners() {
9074        return {
9075            options: {
9076                sections: [],
9077                content: [],
9078                banners: [],
9079                injectorSectionId: null,
9080                injectorParams: {}
9081            },
9082            isLoading: true,
9083            injectorResolver: {},
9084
9085            initBanners: function () {
9086                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
9086<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};
9087                this.injectorResolver = amBannerInjectorResolver?.();
9088
9089                this.insertBanners();
9090                this.isLoading = false;
9091            },
9092
9093            insertBanners: function () {
9094                document.querySelectorAll('[data-role="amasty-banner-container"]').forEach((container) => {
9095                    const sectionId = container.getAttribute('data-position');
9096
9097                    if (sectionId) {
9098                        this.loadBannerBySection(sectionId, container);
9099                    } else {
9100                        this.loadBannerByBannerId(container);
9101                    }
9102                });
9103            },
9104
9105            getBanners: function (bannerId) {
9106                if (this.options.banners.indexOf(bannerId) === -1) {
9107                    return [];
9108                }
9109                const insertedBanner = this.banners.find((element) => {
9110                    return element === bannerId;
9111                });
9112
9113                return content[insertedBanner];
9114            },
9115
9116            getSectionBanners: function (section) {
9117                if (!(section in this.options.sections)) {
9118                    return [];
9119                }
9120
9121                return this.options.sections[section].map((id) => {
9122                    return this.options.content[id];
9123                });
9124            },
9125
9126            loadBannerBySection: function (sectionId, container) {
9127                container.innerHTML = this.getSectionBanners(sectionId).join('');
9128                this.injectorResolver?.resolve(sectionId, this.options.injectorParams);
9129                this.updateSection(`[data-role="amasty-banner-container"][data-position="${sectionId}"]`, container);
9130            },
9131
9132            loadBannerByBannerId: function (container) {
9133                const bannerId = container.getAttribute('data-bannerid');
9134                container.innerHTML = (this.getBanners(bannerId));
9135                this.updateSection(`[data-role="amasty-banner-container"][data-bannerid="${bannerId}"]`, container);
9136            },
9137
9138            updateSection: function(containerSelector, container) {
9139                hyva.replaceDomElement(
9140                    containerSelector,
9141                    container.innerHTML
9142                );
9143            }
9144        }
9145    }
9146</script>
vendor: 1 bytes, line 9146
9146
9147<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>
9147<script type="application/ld+json">{"sameAs":["https:\/\/www.facebook.com\/farmapuntoit","https:\/\/www.instagram.com\/farma.it\/"]}</script>
9147<script type="text/json" id="default-section-data">
9148    {"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"}
9148,"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"}
9148,"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"}
9148,"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"}
9148,"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"}
9148,"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"}
9148,"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":1791570381},"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>
9148
9149
9150</div></body>
9151</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.