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