1<!doctype html> 2 3<html lang="it" dir="ltr"> 4 <head> 5 6 <!-- Google Consent Mode v2 per Shopify Privacy API --> 7
7<script> 8 window.dataLayer = window.dataLayer || []; 9 function gtag(){dataLayer.push(arguments);} 10 11 // 1. STATO INIZIALE: Blocca tutto preventivamente 12 gtag('consent', 'default', { 13 'analytics_storage': 'denied', 14 'ad_storage': 'denied', 15 'ad_user_data': 'denied', 16 'ad_personalization': 'denied', 17 'wait_for_update': 500 18 }); 19 20 // 2. ASCOLTA IL CONSENSO DI SHOPIFY 21 function updateShopifyConsent() { 22 if (window.Shopify && window.Shopify.customerPrivacy) { 23 var cp = window.Shopify.customerPrivacy; 24 var analyticsAllowed = cp.analyticsProcessingAllowed(); 25 var marketingAllowed = cp.marketingAllowed(); 26 27 gtag('consent', 'update', { 28 'analytics_storage': analyticsAllowed ? 'granted' : 'denied', 29 'ad_storage': marketingAllowed ? 'granted' : 'denied', 30 'ad_user_data': marketingAllowed ? 'granted' : 'denied', 31 'ad_personalization': marketingAllowed ? 'granted' : 'denied' 32 }); 33 34 window.dataLayer.push({ 35 event: 'shopify_consent_updated', 36 consent_marketing: marketingAllowed, 37 consent_analytics: analyticsAllowed 38 }); 39 } 40 } 41 42 // Controlla al caricamento e quando l'utente interagisce con il banner 43 document.addEventListener('DOMContentLoaded', function() { 44 if (window.Shopify && window.Shopify.loadFeatures) { 45 window.Shopify.loadFeatures([ 46 { 47 name: 'consent-tracking-api', 48 version: '0.1', 49 }, 50 ], function(error) { 51 if (!error) { 52 updateShopifyConsent(); 53 document.addEventListener('visitorConsentCollected', updateShopifyConsent); 54 } 55 }); 56 } 57 }); 58 </script>
58 59 <!-- Google Tag Manager --> 60
60<script>
vendor: 343 bytes, lines 60-64
60(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 61 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 62 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 63 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 64 })(window,document,'script','dataLayer','
64GTM-KGVTLWG
vendor: 3 bytes, line 64
64');
64</script>
64 65 <!-- End Google Tag Manager --><meta name="google-site-verification" content="lKEwoZZ9ECSAMkpyYFpVyNgLirN2EEjdMcRNiFVzCeM" /><meta charset="utf-8"> 66 <meta name="viewport" content="width=device-width, initial-scale=1.0, height=device-height, minimum-scale=1.0, maximum-scale=5.0"> 67 68 <title>Boutique e Gioiellerie di LOCMAN | Punti Vendita Ufficiali 69 </title><meta name="description" content="Scopri le boutique LOCMAN e le gioiellerie autorizzate in Italia e nel mondo. Trova il rivenditore più vicino e le collezioni di orologi italiani."><link rel="canonical" href="https://www.locman.it/pages/store"><link rel="shortcut icon" href="//www.locman.it/cdn/shop/files/Thumbnail_sfondo_blu_-_1200x1200_905c68dd-1b79-4326-b8ac-14ea5b7a4a57.png?v=1782913447&width=96"> 70 <link rel="apple-touch-icon" href="//www.locman.it/cdn/shop/files/Thumbnail_sfondo_blu_-_1200x1200_905c68dd-1b79-4326-b8ac-14ea5b7a4a57.png?v=1782913447&width=180"><link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin><link rel="preload" href="//www.locman.it/cdn/fonts/instrument_sans/instrumentsans_n4.db86542ae5e1596dbdb28c279ae6c2086c4c5bfa.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="//www.locman.it/cdn/fonts/nunito/nunito_n4.fc49103dc396b42cae9460289072d384b6c6eb63.woff2" as="font" type="font/woff2" crossorigin><meta property="og:type" content="website"> 71 <meta property="og:title" content="Boutique e Gioiellerie di LOCMAN | Punti Vendita Ufficiali"><meta property="og:image" content="http://www.locman.it/cdn/shop/files/Raggruppa_3_ecdeaf8b-2e33-4694-bc82-547d992acc60.svg?v=1782747952&width=2048"> 72 <meta property="og:image:secure_url" content="https://www.locman.it/cdn/shop/files/Raggruppa_3_ecdeaf8b-2e33-4694-bc82-547d992acc60.svg?v=1782747952&width=2048"> 73 <meta property="og:image:width" content="163"> 74 <meta property="og:image:height" content="41"><meta property="og:description" content="Scopri le boutique LOCMAN e le gioiellerie autorizzate in Italia e nel mondo. Trova il rivenditore più vicino e le collezioni di orologi italiani."><meta property="og:url" content="https://www.locman.it/pages/store"> 75<meta property="og:site_name" content="LOCMAN Italy - Orologeria Italiana"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="Boutique e Gioiellerie di LOCMAN | Punti Vendita Ufficiali"> 76 <meta name="twitter:description" content="Scopri le boutique LOCMAN e le gioiellerie autorizzate in Italia e nel mondo. Trova il rivenditore più vicino e le collezioni di orologi italiani."><meta name="twitter:image" content="https://www.locman.it/cdn/shop/files/Raggruppa_3_ecdeaf8b-2e33-4694-bc82-547d992acc60.svg?crop=center&height=1200&v=1782747952&width=1200"> 77 <meta name="twitter:image:alt" content="">
77<script type="application/ld+json"> 78 { 79 "@context": "https://schema.org", 80 "@type": "BreadcrumbList", 81 "itemListElement": [{ 82 "@type": "ListItem", 83 "position": 1, 84 "name": "Home", 85 "item": "https://www.locman.it" 86 },{ 87 "@type": "ListItem", 88 "position": 2, 89 "name": "STORE", 90 "item": "https://www.locman.it/pages/store" 91 }] 92 } 93</script>
93<style>/* Typography (heading) */ 94 @font-face { 95 font-family: "Instrument Sans"; 96 font-weight: 400; 97 font-style: normal; 98 font-display: fallback; 99 src: url("//www.locman.it/cdn/fonts/instrument_sans/instrumentsans_n4.db86542ae5e1596dbdb28c279ae6c2086c4c5bfa.woff2") format("woff2"), 100 url("//www.locman.it/cdn/fonts/instrument_sans/instrumentsans_n4.510f1b081e58d08c30978f465518799851ef6d8b.woff") format("woff"); 101} 102 103@font-face { 104 font-family: "Instrument Sans"; 105 font-weight: 400; 106 font-style: italic; 107 font-display: fallback; 108 src: url("//www.locman.it/cdn/fonts/instrument_sans/instrumentsans_i4.028d3c3cd8d085648c808ceb20cd2fd1eb3560e5.woff2") format("woff2"), 109 url("//www.locman.it/cdn/fonts/instrument_sans/instrumentsans_i4.7e90d82df8dee29a99237cd19cc529d2206706a2.woff") format("woff"); 110} 111 112/* Typography (body) */ 113 @font-face { 114 font-family: Nunito; 115 font-weight: 400; 116 font-style: normal; 117 font-display: fallback; 118 src: url("//www.locman.it/cdn/fonts/nunito/nunito_n4.fc49103dc396b42cae9460289072d384b6c6eb63.woff2") format("woff2"), 119 url("//www.locman.it/cdn/fonts/nunito/nunito_n4.5d26d13beeac3116db2479e64986cdeea4c8fbdd.woff") format("woff"); 120} 121 122@font-face { 123 font-family: Nunito; 124 font-weight: 400; 125 font-style: italic; 126 font-display: fallback; 127 src: url("//www.locman.it/cdn/fonts/nunito/nunito_i4.fd53bf99043ab6c570187ed42d1b49192135de96.woff2") format("woff2"), 128 url("//www.locman.it/cdn/fonts/nunito/nunito_i4.cb3876a003a73aaae5363bb3e3e99d45ec598cc6.woff") format("woff"); 129} 130 131@font-face { 132 font-family: Nunito; 133 font-weight: 700; 134 font-style: normal; 135 font-display: fallback; 136 src: url("//www.locman.it/cdn/fonts/nunito/nunito_n7.37cf9b8cf43b3322f7e6e13ad2aad62ab5dc9109.woff2") format("woff2"), 137 url("//www.locman.it/cdn/fonts/nunito/nunito_n7.45cfcfadc6630011252d54d5f5a2c7c98f60d5de.woff") format("woff"); 138} 139 140@font-face { 141 font-family: Nunito; 142 font-weight: 700; 143 font-style: italic; 144 font-display: fallback; 145 src: url("//www.locman.it/cdn/fonts/nunito/nunito_i7.3f8ba2027bc9ceb1b1764ecab15bae73f86c4632.woff2") format("woff2"), 146 url("//www.locman.it/cdn/fonts/nunito/nunito_i7.82bfb5f86ec77ada3c9f660da22064c2e46e1469.woff") format("woff"); 147} 148 149:root { 150 /* Container */ 151 --container-max-width: 100%; 152 --container-xxs-max-width: 27.5rem; /* 440px */ 153 --container-xs-max-width: 42.5rem; /* 680px */ 154 --container-sm-max-width: 61.25rem; /* 980px */ 155 --container-md-max-width: 71.875rem; /* 1150px */ 156 --container-lg-max-width: 78.75rem; /* 1260px */ 157 --container-xl-max-width: 85rem; /* 1360px */ 158 --container-gutter: 1.25rem; 159 160 --section-vertical-spacing: 2.5rem; 161 --section-vertical-spacing-tight:2.5rem; 162 163 --section-stack-gap:2.25rem; 164 --section-stack-gap-tight:2.25rem; 165 166 /* Form settings */ 167 --form-gap: 1.25rem; /* Gap between fieldset and submit button */ 168 --fieldset-gap: 1rem; /* Gap between each form input within a fieldset */ 169 --form-control-gap: 0.625rem; /* Gap between input and label (ignored for floating label) */ 170 --checkbox-control-gap: 0.75rem; /* Horizontal gap between checkbox and its associated label */ 171 --input-padding-block: 0.65rem; /* Vertical padding for input, textarea and native select */ 172 --input-padding-inline: 0.8rem; /* Horizontal padding for input, textarea and native select */ 173 --checkbox-size: 0.875rem; /* Size (width and height) for checkbox */ 174 175 /* Other sizes */ 176 --sticky-area-height: calc(var(--announcement-bar-is-sticky, 0) * var(--announcement-bar-height, 0px) + var(--header-is-sticky, 0) * var(--header-is-visible, 1) * var(--header-height, 0px)); 177 178 /* RTL support */ 179 --transform-logical-flip: 1; 180 --transform-origin-start: left; 181 --transform-origin-end: right; 182 183 /** 184 * --------------------------------------------------------------------- 185 * TYPOGRAPHY 186 * --------------------------------------------------------------------- 187 */ 188 189 /* Font properties */ 190 --heading-font-family: "Instrument Sans", sans-serif; 191 --heading-font-weight: 400; 192 --heading-font-style: normal; 193 --heading-text-transform: uppercase; 194 --heading-letter-spacing: 0.18em; 195 --text-font-family: Nunito, sans-serif;
196 --text-font-weight: 400; 197 --text-font-style: normal; 198 --text-letter-spacing: 0.0em; 199 --button-font: var(--text-font-style) var(--text-font-weight) var(--text-sm) / 1.65 var(--text-font-family); 200 --button-text-transform: uppercase; 201 --button-letter-spacing: 0.18em; 202 203 /* Font sizes */--text-heading-size-factor: 1; 204 --text-h1: max(0.6875rem, clamp(1.375rem, 1.146341463414634rem + 0.975609756097561vw, 2rem) * var(--text-heading-size-factor)); 205 --text-h2: max(0.6875rem, clamp(1.25rem, 1.0670731707317074rem + 0.7804878048780488vw, 1.75rem) * var(--text-heading-size-factor)); 206 --text-h3: max(0.6875rem, clamp(1.125rem, 1.0335365853658536rem + 0.3902439024390244vw, 1.375rem) * var(--text-heading-size-factor)); 207 --text-h4: max(0.6875rem, clamp(1rem, 0.9542682926829268rem + 0.1951219512195122vw, 1.125rem) * var(--text-heading-size-factor)); 208 --text-h5: calc(0.875rem * var(--text-heading-size-factor)); 209 --text-h6: calc(0.75rem * var(--text-heading-size-factor)); 210 211 --text-xs: 0.75rem; 212 --text-sm: 0.8125rem; 213 --text-base: 0.875rem; 214 --text-lg: 1.0rem; 215 --text-xl: 1.125rem; 216 217 /* Rounded variables (used for border radius) */ 218 --rounded-full: 9999px; 219 --button-border-radius: 0.0rem; 220 --input-border-radius: 0.0rem; 221 222 /* Box shadow */ 223 --shadow-sm: 0 2px 8px rgb(0 0 0 / 0.05); 224 --shadow: 0 5px 15px rgb(0 0 0 / 0.05); 225 --shadow-md: 0 5px 30px rgb(0 0 0 / 0.05); 226 --shadow-block: px px px rgb(var(--text-primary) / 0.0); 227 228 /* Product card */--product-card-text-transform: uppercase;/** 229 * --------------------------------------------------------------------- 230 * OTHER 231 * --------------------------------------------------------------------- 232 */ 233 234 --checkmark-svg-url: url(//www.locman.it/cdn/shop/t/2/assets/checkmark.svg?v=5588600397216680941778600951); 235 --cursor-zoom-in-svg-url: url(//www.locman.it/cdn/shop/t/2/assets/cursor-zoom-in.svg?v=26022421335126260971778600951); 236 } 237 238 [dir="rtl"]:root { 239 /* RTL support */ 240 --transform-logical-flip: -1; 241 --transform-origin-start: right; 242 --transform-origin-end: left; 243 } 244 245 @media screen and (min-width: 700px) { 246 :root { 247 /* Typography (font size) */ 248 --text-xs: 0.75rem; 249 --text-sm: 0.8125rem; 250 --text-base: 0.875rem; 251 --text-lg: 1.0rem; 252 --text-xl: 1.25rem; 253 254 /* Spacing settings */ 255 --container-gutter: 2rem; 256 } 257 } 258 259 @media screen and (min-width: 1000px) { 260 :root { 261 /* Spacing settings */ 262 --container-gutter: 3rem; 263 264 --section-vertical-spacing: 4rem; 265 --section-vertical-spacing-tight: 4rem; 266 267 --section-stack-gap:3rem; 268 --section-stack-gap-tight:3rem; 269 } 270 }:root {/* Overlay used for modal */ 271 --page-overlay: 0 0 0 / 0.4; 272 273 /* We use the first scheme background as default */ 274 --page-background: ; 275 276 /* Product colors */ 277 --on-sale-text: 227 44 43; 278 --on-sale-badge-background: 227 44 43; 279 --on-sale-badge-text: 255 255 255; 280 --sold-out-badge-background: 239 239 239; 281 --sold-out-badge-text: 0 0 0 / 0.65; 282 --custom-badge-background: 28 28 28; 283 --custom-badge-text: 255 255 255; 284 --star-color: 28 28 28; 285 286 /* Status colors */ 287 --success-background: 212 227 203; 288 --success-text: 48 122 7; 289 --warning-background: 253 241 224; 290 --warning-text: 237 138 0; 291 --error-background: 243 204 204; 292 --error-text: 203 43 43; 293 294 /* Modal scheme */ 295 --modal-scheme-background: 255 255 255; 296 --modal-scheme-background-gradient: ; 297 --modal-scheme-text-color: 28 28 28; 298 }.color-scheme--scheme-1 { 299 /* Color settings */--accent: 28 28 28; 300 --text-color: 28 28 28; 301 --background: 239 239 239 / 1.0; 302 --background-without-opacity: 239 239 239; 303 --background-gradient: ;--border-color: 207 207 207;/* Button colors */ 304 --button-background: 28 28 28; 305 --button-text-color: 255 255 255; 306 307 /* Circled buttons */ 308 --circle-button-background: 255 255 255; 309 --circle-button-text-color: 28 28 28; 310 }.shopify-section:has(.section-spacing.color-scheme--bg-609ecfcfee2f667ac6c12366fc6ece56) + .shopify-section:has(.section-spacing.color-scheme--bg-609ecfcfee2f667ac6c12366fc6ece56:not(.bordered-section)) .section-spacing { 311 padding-block-start: 0; 312 }.color-scheme--scheme-2 {
313 /* Color settings */--accent: 28 28 28; 314 --text-color: 28 28 28; 315 --background: 255 255 255 / 1.0; 316 --background-without-opacity: 255 255 255; 317 --background-gradient: ;--border-color: 221 221 221;/* Button colors */ 318 --button-background: 28 28 28; 319 --button-text-color: 255 255 255; 320 321 /* Circled buttons */ 322 --circle-button-background: 255 255 255; 323 --circle-button-text-color: 28 28 28; 324 }.shopify-section:has(.section-spacing.color-scheme--bg-54922f2e920ba8346f6dc0fba343d673) + .shopify-section:has(.section-spacing.color-scheme--bg-54922f2e920ba8346f6dc0fba343d673:not(.bordered-section)) .section-spacing { 325 padding-block-start: 0; 326 }.color-scheme--scheme-3 { 327 /* Color settings */--accent: 255 255 255; 328 --text-color: 255 255 255; 329 --background: 28 28 28 / 1.0; 330 --background-without-opacity: 28 28 28; 331 --background-gradient: ;--border-color: 62 62 62;/* Button colors */ 332 --button-background: 255 255 255; 333 --button-text-color: 28 28 28; 334 335 /* Circled buttons */ 336 --circle-button-background: 255 255 255; 337 --circle-button-text-color: 28 28 28; 338 }.shopify-section:has(.section-spacing.color-scheme--bg-c1f8cb21047e4797e94d0969dc5d1e44) + .shopify-section:has(.section-spacing.color-scheme--bg-c1f8cb21047e4797e94d0969dc5d1e44:not(.bordered-section)) .section-spacing { 339 padding-block-start: 0; 340 }.color-scheme--scheme-4 { 341 /* Color settings */--accent: 255 255 255; 342 --text-color: 255 255 255; 343 --background: 0 0 0 / 0.0; 344 --background-without-opacity: 0 0 0; 345 --background-gradient: ;--border-color: 255 255 255;/* Button colors */ 346 --button-background: 255 255 255; 347 --button-text-color: 28 28 28; 348 349 /* Circled buttons */ 350 --circle-button-background: 255 255 255; 351 --circle-button-text-color: 28 28 28; 352 }.shopify-section:has(.section-spacing.color-scheme--bg-3671eee015764974ee0aef1536023e0f) + .shopify-section:has(.section-spacing.color-scheme--bg-3671eee015764974ee0aef1536023e0f:not(.bordered-section)) .section-spacing { 353 padding-block-start: 0; 354 }.color-scheme--dialog { 355 /* Color settings */--accent: 28 28 28; 356 --text-color: 28 28 28; 357 --background: 255 255 255 / 1.0; 358 --background-without-opacity: 255 255 255; 359 --background-gradient: ;--border-color: 221 221 221;/* Button colors */ 360 --button-background: 28 28 28; 361 --button-text-color: 255 255 255; 362 363 /* Circled buttons */ 364 --circle-button-background: 255 255 255; 365 --circle-button-text-color: 28 28 28; 366 }@view-transition { 367 navigation: auto; 368 }</style>
369<script> 370 // This allows to expose several variables to the global scope, to be used in scripts 371 window.themeVariables = { 372 settings: { 373 showPageTransition: true, 374 pageType: "page", 375 moneyFormat: "${{amount}}", 376 moneyWithCurrencyFormat: "${{amount}} USD", 377 currencyCodeEnabled: false, 378 cartType: "drawer", 379 staggerMenuApparition: true 380 }, 381 382 strings: { 383 addedToCart: "Prodotto aggiunto !", 384 addedToCartWithTitle: "{{ product_title }} è stato aggiunto al carrello.", 385 closeGallery: "Chiudi galleria immagini", 386 zoomGallery: "Ingrandisci immagine", 387 errorGallery: "L\u0026#39;immagine non può essere caricata", 388 shippingEstimatorNoResults: "Siamo spiacenti, non spediamo nella tua zona.", 389 shippingEstimatorOneResult: "1 opzione spedizione disponibile per il tuo indirizzo:", 390 shippingEstimatorMultipleResults: "Multiple opzioni spedizione disponibili per il tuo indirizzo:", 391 shippingEstimatorError: "C\u0026#39;è stato un errore nel calcolo delle opzioni spedizione:", 392 next: "Successivo", 393 previous: "Precedente" 394 }, 395 396 mediaQueries: { 397 'sm': 'screen and (min-width: 700px)', 398 'md': 'screen and (min-width: 1000px)', 399 'lg': 'screen and (min-width: 1150px)', 400 'xl': 'screen and (min-width: 1400px)', 401 '2xl': 'screen and (min-width: 1600px)', 402 'sm-max': 'screen and (max-width: 699px)', 403 'md-max': 'screen and (max-width: 999px)', 404 'lg-max': 'screen and (max-width: 1149px)', 405 'xl-max': 'screen and (max-width: 1399px)', 406 '2xl-max': 'screen and (max-width: 1599px)', 407 'motion-safe': '(prefers-reduced-motion: no-preference)', 408 'motion-reduce': '(prefers-reduced-motion: reduce)', 409 'supports-hover': 'screen and (pointer: fine)', 410 'supports-touch': 'screen and (hover: none)' 411 } 412 };</script>
vendor: 1 bytes, line 412
412
413<script async crossorigin fetchpriority="high" src="/cdn/shopifycloud/importmap-polyfill/es-modules-shim.2.4.0.js"></script>
vendor: 1 bytes, line 413
413
414<script type="importmap">{ 415 "imports": { 416 "vendor": "//www.locman.it/cdn/shop/t/2/assets/vendor.min.js?v=53886175772894603331778600936", 417 "theme": "//www.locman.it/cdn/shop/t/2/assets/theme.js?v=92378975169375039651788944360", 418 "photoswipe": "//www.locman.it/cdn/shop/t/2/assets/photoswipe.min.js?v=2801" 419 } 420 } 421 </script>
421 422 423
423<script type="module" src="//www.locman.it/cdn/shop/t/2/assets/vendor.min.js?v=53886175772894603331778600936"></script>
423 424
424<script type="module" src="//www.locman.it/cdn/shop/t/2/assets/theme.js?v=92378975169375039651788944360"></script>
424 425 426
426<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
426<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/96027836749/digital_wallets/dialog"> 427<meta id="in-context-paypal-metadata" data-shop-id="96027836749" data-venmo-supported="false" data-environment="production" data-locale="it_IT" data-paypal-v4="true" data-currency="USD"> 428<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="alternate" hreflang="x-default" href="https://www.locman.it/pages/store"> 429<link rel="alternate" hreflang="it" href="https://www.locman.it/pages/store"> 430<link rel="alternate" hreflang="en" href="https://www.locman.it/en/pages/store">
431<script async="async" src="/checkouts/internal/preloads.js?locale=it-US&default_configuration_id=5777654093"></script>
431 432<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
433<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=it-US&default_configuration_id=5777654093&shop_id=96027836749" crossorigin="anonymous"></script>
vendor: 1 bytes, line 433
433
434<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":96027836749,"countryCode":"IT","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/96027836749","merchantName":"LOCMAN Italy - Orologeria Italiana","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","maestro","masterCard","amex"],"total":{"type":"pending","label":"LOCMAN Italy - Orologeria Italiana","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 434
434
435<script id="shopify-features" type="application/json">{"accessToken":"ad560c5e47a652a1e5bdfa21c79dcf76","betas":["rich-media-storefront-analytics"],"domain":"www.locman.it","predictiveSearch":true,"shopId":96027836749,"locale":"it"}</script>
vendor: 1 bytes, line 435
435
436<script>var Shopify = Shopify || {}; 437Shopify.shop = "8zxid1-kd.myshopify.com"; 438Shopify.locale = "it"; 439Shopify.currency = {"active":"USD","rate":"1.12587"}; 440Shopify.country = "US"; 441Shopify.theme = {"name":"Prestige","id":191184568653,"schema_name":"Prestige","schema_version":"11.1.0","theme_store_id":855,"role":"main"}; 442Shopify.theme.handle = "null"; 443Shopify.theme.style = {"id":null,"handle":null}; 444Shopify.cdnHost = "www.locman.it/cdn"; 445Shopify.routes = Shopify.routes || {}; 446Shopify.routes.root = "/"; 447Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 448Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 449Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 450Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 450
450
451<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 451
451
452<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 452
452
453<script> 454 window.ShopifyPay = window.ShopifyPay || {}; 455 window.ShopifyPay.apiHost = "shop.app\/pay"; 456 window.ShopifyPay.redirectState = null; 457</script>
vendor: 1 bytes, line 457
457
458<script> 459 window.Shopify = window.Shopify || {}; 460 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 461 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 462 window.Shopify.SignInWithShop.eligible = true; 463</script>
vendor: 1 bytes, line 463
463
464<script id="shop-js-analytics" type="application/json">{"pageType":"page"}</script>
vendor: 1 bytes, line 464
464
465<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.it.esm.js"></script>
vendor: 1 bytes, line 465
465
466<script type="module"> 467 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.it.esm.js"); 468 469 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 470 471</script>
vendor: 1 bytes, line 471
471
472<script> 473 window.Shopify = window.Shopify || {}; 474 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 475 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.it.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.it.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.it.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.it.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.it.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.it.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.it.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.it.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.it.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.it.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.it.esm.js"],"listener":["modules/v2/loader.listener.it.esm.js"],"pay-button":["modules/v2/loader.pay-button.it.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.it.esm.js"],"shop-button":["modules/v2/loader.shop-button.it.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.it.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.it.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.it.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.it.esm.js"],"shop-login":["modules/v2/loader.shop-login.it.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.it.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.it.esm.js"]}; 476</script>
vendor: 1 bytes, line 476
476
477<script id="__st">var __st={"a":96027836749,"offset":7200,"reqid":"9a1acdb5-01bb-4e2b-b1b2-b48c7aa87c52-1790927448","pageurl":"www.locman.it\/pages\/store?stockist-filters=flt_9p5qynnp","s":"pages-161521271117","u":"e09e22c28402","p":"page","rtyp":"page","rid":161521271117};</script>
vendor: 1 bytes, line 477
477
478<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 478
478
479<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protetto da hCaptcha',privacyText:'Privacy',termsText:'Termini'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 479
479
480<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//www.locman.it/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 480
480
481<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//www.locman.it/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
481<script crossorigin="anonymous" defer="defer" src="//www.locman.it/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 481
481
482<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 482
482
483<script> 484 window.Shopify = window.Shopify || {}; 485 window.Shopify.MCP = window.Shopify.MCP || {}; 486 window.Shopify.MCP.enabled = true; 487 window.Shopify.MCP.shop = "8zxid1-kd.myshopify.com"; 488 window.Shopify.MCP.mcpEndpoint = "https:\/\/www.locman.it\/api\/mcp"; 489 window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n - What is your return policy?\n - What is your shipping policy?\n - What is your phone number?\n - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}]; 490</script>
vendor: 1 bytes, line 490
490
491<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/www.locman.it\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 492</script>
vendor: 1 bytes, line 492
492
493<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://www.locman.it/cdn/shopifycloud/portable-wallets/latest/portable-wallets.it.js",t.type="module",document.head.appendChild(t)}}; 494</script>
vendor: 1 bytes, line 494
494
495<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 496 function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent); 497</script>
vendor: 1 bytes, line 497
497
498<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}})); 499</script>
vendor: 1 bytes, line 499
499
500<script id='scb4127' type='text/javascript' async='' src='https://www.locman.it/cdn/shopifycloud/privacy-banner/storefront-banner.js'></script>
500<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://www.locman.it/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 501<style id="shopify-accelerated-checkout-cart"> 502 #shopify-buyer-consent { 503 margin-top: 1em; 504 display: inline-block; 505 width: 100%; 506} 507 508#shopify-buyer-consent.hidden { 509 display: none; 510} 511 512#shopify-subscription-policy-button { 513 background: none; 514 border: none; 515 padding: 0; 516 text-decoration: underline; 517 font-size: inherit; 518 cursor: pointer; 519} 520 521#shopify-subscription-policy-button::before { 522 box-shadow: none; 523} 524 525 </style> 526
527<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
527 528<link href="//www.locman.it/cdn/shop/t/2/assets/theme.css?v=110264468922072731251782824923" rel="stylesheet" type="text/css" media="all" /><!-- BEGIN app block: shopify://apps/microsoft-clarity/blocks/clarity_js/31c3d126-8116-4b4a-8ba1-baeda7c4aeea -->
529<script type="text/javascript"> 530 (function (c, l, a, r, i, t, y) { 531 c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments); }; 532 t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i + "?ref=shopify"; 533 y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y); 534 535 c.Shopify.loadFeatures([{ name: "consent-tracking-api", version: "0.1" }], error => { 536 if (error) { 537 console.error("Error loading Shopify features:", error); 538 return; 539 } 540 541 c[a]('consentv2', { 542 ad_Storage: c.Shopify.customerPrivacy.marketingAllowed() ? "granted" : "denied", 543 analytics_Storage: c.Shopify.customerPrivacy.analyticsProcessingAllowed() ? "granted" : "denied", 544 source: 101, 545 }); 546 }); 547 548 l.addEventListener("visitorConsentCollected", function (e) { 549 c[a]('consentv2', { 550 ad_Storage: e.detail.marketingAllowed ? "granted" : "denied", 551 analytics_Storage: e.detail.analyticsAllowed ? "granted" : "denied", 552 source: 101, 553 }); 554 }); 555 })(window, document, "clarity", "script", "yj4qknni14"); 556</script>
556 557 558 559 560<!-- END app block --><!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 --> 561 562 563 564 565 566 567 568 569 570 571 572 573
573<script async src="https://static.klaviyo.com/onsite/js/XZth2y/klaviyo.js?company_id=XZth2y"></script>
573 574
574<script>!function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}();</script>
574 575 576 577 578 579 580 581
581<script> 582 window.klaviyoReviewsProductDesignMode = false 583 </script>
583 584 585 586 587 588 589 590 591 592 593<!-- END app block --><link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
594<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 96027836749,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "page"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 594
594
595<script> 596 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 597</script>
vendor: 1 bytes, line 597
597
598<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
598).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 96027836749,storefrontBaseUrl: "https://www.locman.it",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://www.locman.it/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"4521951565","configuration":"{\"projectId\":\"yj4qknni14\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"d8a2bb2ccbb513dc8e8b6937f4b8033e","type":"APP","apiClientId":240074326017,"privacyPurposes":[],"capabilities":["advanced_dom_events"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]}
598,"dataSharingState":"unrestricted"},{"id":"4165697869","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-TNYS5KZWGX\\\",\\\"AW-943142135\\\",\\\"GT-WPLH9KHP\\\"],\\\"target_country\\\":\\\"ZZ\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-TNYS5KZWGX\\\",\\\"AW-943142135\\\/uyQVCN-el8wcEPfp3MED\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-TNYS5KZWGX\\\",\\\"AW-943142135\\\/RUlfCOuel8wcEPfp3MED\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-TNYS5KZWGX\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-TNYS5KZWGX\\\",\\\"AW-943142135\\\/AOW2COiel8wcEPfp3MED\\\",\\\"MC-C0X39HMD67\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-TNYS5KZWGX\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-TNYS5KZWGX\\\",\\\"AW-943142135\\\/0bggCNyel8wcEPfp3MED\\\",\\\"MC-C0X39HMD67\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-TNYS5KZWGX\\\",\\\"AW-943142135\\\/ZYH7COWel8wcEPfp3MED\\\",\\\"MC-C0X39HMD67\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-TNYS5KZWGX\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-TNYS5KZWGX\\\",\\\"AW-943142135\\\/SJ1rCO6el8wcEPfp3MED\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-TNYS5KZWGX\\\",\\\"AW-943142135\\\/HZruCOKel8wcEPfp3MED\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-TNYS5KZWGX\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"4162126157","configuration":"{\"shopUrl\":\"8zxid1-kd.myshopify.com\",\"appNameSignature\":\"GLOBO PREORDER PIXEL\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"5e29fd9bedb5df4a579ac424cf473f51","type":"APP","apiClientId":1581593,"privacyPurposes":["ANALYTICS","MARKETING","PREFERENCES","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"4157800781","configuration":"{\"pixel_id\":\"648288138684479\",\"pixel_type\":\"facebook_pixel\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"4151968077","configuration":"{\"accountID\":\"XZth2y\",\"webPixelConfig\":\"eyJlbmFibGVBZGRlZFRvQ2FydEV2ZW50cyI6IHRydWV9\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c63c5b72c8d77be5f2d27d14c081da38","type":"APP","apiClientId":123074,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"310182221","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"GTM"},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"LOCMAN Italy
598- Orologeria Italiana","paymentSettings":{"currencyCode":"EUR"},"myshopifyDomain":"8zxid1-kd.myshopify.com","countryCode":"IT","storefrontUrl":"https:\/\/www.locman.it"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://www.locman.it/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"191184568653","themeStoreId":"855","themePublished":"true","eventMetadataId":"2a6cdfb2-1bb3-4ef8-960f-0f182b65868d","pageType":"page","resourceId":"161521271117","shopId":"96027836749","storefrontBaseUrl":"https:\/\/www.locman.it","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
598<script> 599 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 600 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 601 window.ShopifyAnalytics.meta.currency = 'USD'; 602 var meta = {"page":{"pageType":"page","resourceType":"page","resourceId":161521271117,"requestId":"9a1acdb5-01bb-4e2b-b1b2-b48c7aa87c52-1790927448"}}; 603 for (var attr in meta) { 604 window.ShopifyAnalytics.meta[attr] = meta[attr]; 605 } 606</script>
vendor: 1 bytes, line 606
606
607<script class="analytics"> 608 (function () { 609 var customDocumentWrite = function(content) { 610 var jquery = null; 611 612 if (window.jQuery) { 613 jquery = window.jQuery; 614 } else if (window.Checkout && window.Checkout.$) { 615 jquery = window.Checkout.$; 616 } 617 618 if (jquery) { 619 jquery('body').append(content); 620 } 621 }; 622 623 var hasLoggedConversion = function(token) { 624 if (token) { 625 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 626 } 627 return false; 628 } 629 630 var setCookieIfConversion = function(token) { 631 if (token) { 632 var twoMonthsFromNow = new Date(Date.now()); 633 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 634 635 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 636 } 637 } 638 639 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 640 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 641 if (trekkie.integrations) { 642 return; 643 } 644 trekkie.methods = [ 645 'identify', 646 'page', 647 'ready', 648 'track', 649 'trackForm', 650 'trackLink' 651 ]; 652 trekkie.factory = function(method) { 653 return function() { 654 var args = Array.prototype.slice.call(arguments); 655 args.unshift(method); 656 trekkie.push(args); 657 if (method == 'track' || method == 'page') { 658 var pageUrl; 659 try { 660 pageUrl = window.location.href; 661 } catch (e) {} 662 var pageReferrer; 663 try { 664 pageReferrer = document.referrer; 665 } catch (e) {} 666 try { 667 if (window.__TREKKIE_SHIM_QUEUE == null) { 668 window.__TREKKIE_SHIM_QUEUE = []; 669 } 670 window.__TREKKIE_SHIM_QUEUE.push({ 671 from: 'trekkie-stub', 672 method: method, 673 args: args.slice(1), 674 pageContext: { 675 url: pageUrl, 676 referrer: pageReferrer 677 } 678 }); 679 } catch (e) { 680 // no-op 681 } 682 } 683 return trekkie; 684 }; 685 }; 686 for (var i = 0; i < trekkie.methods.length; i++) { 687 var key = trekkie.methods[i]; 688 trekkie[key] = trekkie.factory(key); 689 } 690 trekkie.load = function(config) { 691 trekkie.config = config || {}; 692 trekkie.config.initialDocumentCookie = document.cookie; 693 var first = document.getElementsByTagName('script')[0]; 694var script = document.createElement('script'); 695script.type = 'text/javascript'; 696script.onerror = function(e) { 697 var scriptFallback = document.createElement('script'); 698 scriptFallback.type = 'text/javascript'; 699 scriptFallback.onerror = function(error) { 700 var Monorail = { 701 produce: function produce(monorailDomain, schemaId, payload) { 702 var currentMs = new Date().getTime(); 703 var event = { 704 schema_id: schemaId, 705 payload: payload, 706 metadata: { 707 event_created_at_ms: currentMs, 708 event_sent_at_ms: currentMs 709 } 710 }; 711 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 712 }, 713 sendRequest: function sendRequest(endpointUrl, payload) { 714 // Try the sendBeacon API 715 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 716 var blobData = new window.Blob([payload], { 717 type: 'text/plain' 718 }); 719 720 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 721 return true; 722 } // sendBeacon was not successful 723 724 } // XHR beacon 725 726 var xhr = new XMLHttpRequest(); 727 728 try { 729 xhr.open('POST', endpointUrl); 730 xhr.setRequestHeader('Content-Type', 'text/plain'); 731 xhr.send(payload); 732 } catch (e) { 733 console.log(e); 734 } 735 736 return false; 737 }, 738 isIos12: function isIos12() { 739 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 740 } 741 }; 742 Monorail.produce('monorail-edge.shopifysvc.com', 743 'trekkie_storefront_load_errors/1.1', 744 {shop_id: 96027836749, 745 theme_id: 191184568653, 746 app_name: "storefront", 747 context_url: window.location.href, 748 source_url: "//www.locman.it/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 749 750 }; 751 scriptFallback.async = true; 752 scriptFallback.src = '//www.locman.it/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 753 first.parentNode.insertBefore(scriptFallback, first); 754}; 755script.async = true; 756script.src = '//www.locman.it/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 757first.parentNode.insertBefore(script, first); 758 759 }; 760 trekkie.load( 761 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":96027836749,"isMerchantRequest":null,"themeId":191184568653,"themeCityHash":"13985880726652434307","contentLanguage":"it","currency":"USD","eventMetadataId":"2a6cdfb2-1bb3-4ef8-960f-0f182b65868d"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 762 ); 763 764 var loaded = false;
765 trekkie.ready(function() { 766 if (loaded) return; 767 loaded = true; 768 769 window.ShopifyAnalytics.lib = window.trekkie; 770 771 var originalDocumentWrite = document.write; 772 document.write = customDocumentWrite; 773 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 774 document.write = originalDocumentWrite; 775 776 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 777 var token = match? match[1]: undefined; 778 if (!hasLoggedConversion(token)) { 779 setCookieIfConversion(token); 780 781 } 782 }); 783 784 window.ShopifyAnalytics.lib.page(null,{"pageType":"page","resourceType":"page","resourceId":161521271117,"requestId":"9a1acdb5-01bb-4e2b-b1b2-b48c7aa87c52-1790927448","shopifyEmitted":true}); 785 786 var eventsListenerScript = document.createElement('script'); 787 eventsListenerScript.async = true; 788 eventsListenerScript.src = "//www.locman.it/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 789 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 790})();</script>
vendor: 1 bytes, line 790
790
791<script 792 defer 793 src="https://www.locman.it/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 794 data-application="storefront-renderer" 795 data-shop-id="96027836749" 796 data-render-region="gcp-us-west1" 797 data-page-type="page" 798 data-theme-instance-id="191184568653" 799 data-theme-name="Prestige" 800 data-theme-version="11.1.0" 801 data-monorail-region="shop_domain" 802 data-resource-timing-sampling-rate="10" 803 data-shs="true" 804 data-shs-beacon="true" 805 data-shs-export-with-fetch="true" 806 data-shs-logs-sample-rate="1" 807 data-shs-beacon-endpoint="https://www.locman.it/api/collect" 808></script>
vendor: 1 bytes, line 808
808
809<script src="https://cdn.shopify.com/storefront/web-components/account.js" type="module" crossorigin fetchpriority="low" async></script>
809<script id="shopify-customer-account-data" type="application/json">{"customer":null,"shop":{"id":"96027836749","customerAccountTranslations":[{"key":"account_menu.signed_out_state.sheet_title","value":"Accedi o crea un account"},{"key":"account_menu.signed_out_state.section_divider","value":"Altri metodi di accesso"},{"key":"account_menu.signed_out_state.alternate_divider","value":"OPPURE"},{"key":"account_menu.signed_out_state.email_field_label","value":"Email"},{"key":"account_menu.signed_out_state.orders_button","value":"Ordini"},{"key":"account_menu.signed_out_state.profile_button","value":"Profilo"},{"key":"account_menu.signed_out_state.shop_login_button","value":"Accedi con Shop"},{"key":"account_menu.signed_out_state.continue_with_google","value":"Continua con Google"},{"key":"account_menu.signed_out_state.continue_with_facebook","value":"Continua con Facebook"},{"key":"account_menu.signed_out_state.marketing_consent_label","value":"Inviami email con notizie e offerte"},{"key":"account_menu.signed_in_state.greeting_with_name","value":"Ciao {{first_name}}"},{"key":"account_menu.signed_in_state.greeting_without_name","value":"Account"},{"key":"account_menu.signed_in_state.orders_button","value":"Ordini"},{"key":"account_menu.signed_in_state.profile_button","value":"Profilo"},{"key":"account_menu.location_picker.sheet_title","value":"Sedi"},{"key":"account_menu.location_picker.search_field_placeholder","value":"Ricerca"},{"key":"account_menu.aria_labels.close_menu","value":"Chiudi menu"},{"key":"account_menu.aria_labels.back_to_main_menu","value":"Torna al menu principale da {{title}}"},{"key":"account_menu.aria_labels.open_submenu","value":"{{title}}, apre il sottomenu"},{"key":"account_menu.aria_labels.loading_menu","value":"Caricamento menu"},{"key":"account_menu.aria_labels.account","value":"Account"},{"key":"account_menu.aria_labels.sign_in_with_email","value":"Accedi con l'email"},{"key":"account_menu.aria_labels.sign_in","value":"Accedi"}],"socialLoginProviders":[{"handle":"Shop"}],"legacyCustomerAccounts":false,"signInLinksVisible":true,"b2bEnabled":false,"marketingConsentSigninEnabled":true,"marketingConsentPreselected":true},"visitor":{"country":"US","language":"it"}}</script>
809 810<meta name="shopify-y" content="01a131a0-b690-4a46-bf6b-920554979318" data-expiration="1822485048000"><meta name="shopify-s" content="1a6282cb-70c9-4048-bf76-2882d472a365" data-expiration="1790929248000"><meta name="new-cookie-storage-activated" content="t"> 811</head> 812 813 814 815 <body class="template-page features--button-transition features--zoom-image color-scheme color-scheme--scheme-1"> 816 <!-- Google Tag Manager (noscript) -->
vendor: 72 bytes, lines 816-817
816 817 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
817GTM-KGVTLWG
vendor: 91 bytes, lines 817-819
817" 818 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 819
819<!-- End Google Tag Manager (noscript) --><template id="drawer-default-template"> 820 <div part="base"> 821 <div part="overlay"></div> 822 823 <div part="content"> 824 <header part="header"> 825 <slot name="header"></slot> 826 827 <dialog-close-button style="display: contents"> 828 <button type="button" part="close-button tap-area" aria-label="Chiudi"><svg aria-hidden="true" focusable="false" fill="none" width="14" class="icon icon-close" viewBox="0 0 16 16"> 829 <path d="m1 1 14 14M1 15 15 1" stroke="currentColor" stroke-width="1.5"/> 830 </svg> 831 832 </button> 833 </dialog-close-button> 834 </header> 835 836 <div part="body"> 837 <slot></slot> 838 </div> 839 840 <footer part="footer"> 841 <slot name="footer"></slot> 842 </footer> 843 </div> 844 </div> 845</template><template id="modal-default-template"> 846 <div part="base"> 847 <div part="overlay"></div> 848 849 <div part="content"> 850 <header part="header"> 851 <slot name="header"></slot> 852 853 <dialog-close-button style="display: contents"> 854 <button type="button" part="close-button tap-area" aria-label="Chiudi"><svg aria-hidden="true" focusable="false" fill="none" width="14" class="icon icon-close" viewBox="0 0 16 16"> 855 <path d="m1 1 14 14M1 15 15 1" stroke="currentColor" stroke-width="1.5"/> 856 </svg> 857 858 </button> 859 </dialog-close-button> 860 </header> 861 862 <div part="body"> 863 <slot></slot> 864 </div> 865 </div> 866 </div> 867</template><template id="popover-default-template"> 868 <div part="base"> 869 <div part="overlay"></div> 870 871 <div part="content"> 872 <header part="header"> 873 <slot name="header"></slot> 874 875 <dialog-close-button style="display: contents"> 876 <button type="button" part="close-button tap-area" aria-label="Chiudi"><svg aria-hidden="true" focusable="false" fill="none" width="14" class="icon icon-close" viewBox="0 0 16 16"> 877 <path d="m1 1 14 14M1 15 15 1" stroke="currentColor" stroke-width="1.5"/> 878 </svg> 879 880 </button> 881 </dialog-close-button> 882 </header> 883 884 <div part="body"> 885 <slot></slot> 886 </div> 887 </div> 888 </div> 889</template><template id="header-search-default-template"> 890 <div part="base"> 891 <div part="overlay"></div> 892 893 <div part="content"> 894 <slot></slot> 895 </div> 896 </div> 897</template><template id="video-media-default-template"> 898 <slot></slot> 899 900 <svg part="play-button" fill="none" width="48" height="48" viewBox="0 0 48 48"> 901 <path fill-rule="evenodd" clip-rule="evenodd" d="M48 24c0 13.255-10.745 24-24 24S0 37.255 0 24 10.745 0 24 0s24 10.745 24 24Zm-18 0-9-6.6v13.2l9-6.6Z" fill="var(--play-button-background, #efefef)"/> 902 </svg> 903</template> 904<loading-bar class="loading-bar" aria-hidden="true"></loading-bar> 905 <a href="#main" allow-hash-change class="skip-to-content sr-only">Vai al contenuto</a><div class="sr-only" role="status" aria-live="polite" aria-atomic="true"> 906 <span id="status-announcement"></span> 907 </div> 908 909 <div class="sr-only" role="alert" aria-live="assertive" aria-atomic="true"> 910 <span id="error-announcement"></span> 911 </div> 912 913 <span id="header-scroll-tracker" style="position: absolute; width: 1px; height: 1px; top: var(--header-scroll-tracker-offset, 10px); left: 0;"></span><aside id="shopify-section-announcement-bar" class="shopify-section shopify-section--announcement-bar"> 914</aside> 915 <header id="shopify-section-header-locman" class="shopify-section shopify-section--header"><style> 916 :root { 917 --header-is-sticky: 1; 918 } 919 920 #shopify-section-header-locman { 921 --header-grid: "primary-nav logo secondary-nav" / minmax(0, 1fr) auto minmax(0, 1fr); 922 --header-padding-block: 1rem; 923 --header-transparent-header-text-color: 255 255 255; 924 --header-separation-border-color: 28 28 28 / 0.15; 925 926 position: relative; 927 z-index: 4; 928 } 929 930 /* --- ALLINEAMENTO RESPONSIVE DEL PADDING --- */ 931 @media screen and (min-width: 1000px) { 932 #shopify-section-header-locman .header { 933 padding-left: 8% !important; 934 padding-right: 8% !important; 935 max-width: 100% !important; 936 width: 100% !important; 937 box-sizing: border-box !important; 938 } 939 } 940 941 @media screen and (max-width: 999px) { 942 #shopify-section-header-locman .header { 943 padding-left: 4% !important; 944 padding-right: 4% !important; 945 box-sizing: border-box !important; 946 } 947 } 948 949 /* --- REQUISITI TIPOGRAFICI SCRITTE MENU PRINCIPALE (1° LIVELLO) --- */ 950 #shopify-section-header-locman .header__primary-nav-item > a, 951 #shopify-section-header-locman .header__primary-nav-item > mega-menu-disclosure > details > summary, 952 #shopify-section-header-locman .header__primary-nav-item > dropdown-menu-disclosure > details > summary { 953 text-align: left !important; 954 font-family: 'Gotham', sans-serif !important; 955 font-style: normal !important; 956 font-variant: normal !important; 957 font-weight: normal !important; 958 font-size: 12px !important; 959 line-height: 16px !important; 960 letter-spacing: 0.84px !important; 961 color: #000000 !important; 962 text-transform: uppercase !important; 963 opacity: 1 !important; 964 transition: all 0.3s ease; 965 } 966 967 #shopify-section-header-locman .header__primary-nav-item > a:hover, 968 #shopify-section-header-locman .header__primary-nav-item > mega-menu-disclosure > details > summary:hover, 969 #shopify-section-header-locman .header__primary-nav-item > dropdown-menu-disclosure > details > summary:hover, 970 #shopify-section-header-locman .header__primary-nav-item > mega-menu-disclosure > details[open] > summary { 971 text-decoration: underline !important; 972 text-decoration-thickness: 2px !important; 973 text-underline-offset: 8px !important; 974 text-decoration-color: #0D2340 !important; 975 } 976 977 /* --- STILE TITOLI MEGA MENU (2° LIVELLO: LOCMAN COLLEZIONI) --- */ 978 /* Imposta i margini solo sul genitore */ 979 #shopify-section-header-locman .header .header__menu-disclosure .mega-menu__linklist > li > a { 980 display: block !important; 981 margin-bottom: 12px !important; 982 } 983 984 /* Imposta Colore e Grassetto sul genitore E SU QUALSIASI FIGLIO al suo interno (risolve il problema dei link nascosti!) */ 985 #shopify-section-header-locman .header .header__menu-disclosure .mega-menu__linklist > li > a, 986 #shopify-section-header-locman .header .header__menu-disclosure .mega-menu__linklist > li > a * { 987 font-family: 'Gotham', sans-serif !important; 988 font-weight: bold !important; 989 font-size: 11px !important; 990 letter-spacing: 1px !important; 991 color: #000000 !important; 992 -webkit-text-fill-color: #000000 !important; 993 opacity: 1 !important; 994 text-transform: uppercase !important; 995 -webkit-text-stroke: 0.3px #000000 !important; /* Forza un tratto extra per simulare il grassetto estremo */ 996 } 997 998 /* --- STILE SOTTO-COLLEZIONI MEGA MENU E MENU NORMALE --- */
999 /* Ripristina i margini */ 1000 #shopify-section-header-locman .header .header__menu-disclosure .mega-menu__linklist > li > ul > li > a, 1001 #shopify-section-header-locman .header .header__menu-disclosure .header__dropdown-menu > li > a { 1002 display: inline-block !important; 1003 margin-bottom: 0 !important; 1004 padding-bottom: 8px !important; 1005 } 1006 1007 /* Salva le sotto-collezioni ripristinando grigio e font leggero su padre e figli */ 1008 #shopify-section-header-locman .header .header__menu-disclosure .mega-menu__linklist > li > ul > li > a, 1009 #shopify-section-header-locman .header .header__menu-disclosure .mega-menu__linklist > li > ul > li > a *, 1010 #shopify-section-header-locman .header .header__menu-disclosure .header__dropdown-menu > li > a, 1011 #shopify-section-header-locman .header .header__menu-disclosure .header__dropdown-menu > li > a * { 1012 font-family: 'Gotham', sans-serif !important; 1013 font-weight: 400 !important; 1014 font-size: 12px !important; 1015 color: #888888 !important; 1016 -webkit-text-fill-color: #888888 !important; 1017 opacity: 1 !important; 1018 text-transform: none !important; 1019 letter-spacing: 0.5px !important; 1020 transition: all 0.3s ease !important; 1021 -webkit-text-stroke: 0px transparent !important; /* Annulla il tratto extra */ 1022 } 1023 1024 /* Hover per le sotto-collezioni e menu normale */ 1025 #shopify-section-header-locman .header .header__menu-disclosure .mega-menu__linklist > li > ul > li > a:hover, 1026 #shopify-section-header-locman .header .header__menu-disclosure .mega-menu__linklist > li > ul > li > a:hover *, 1027 #shopify-section-header-locman .header .header__menu-disclosure .header__dropdown-menu > li > a:hover, 1028 #shopify-section-header-locman .header .header__menu-disclosure .header__dropdown-menu > li > a:hover * { 1029 color: #000000 !important; 1030 -webkit-text-fill-color: #000000 !important; 1031 } 1032 1033 /* --- BLOCCO REQUISITI ESCLUSIVI PER DESKTOP (>= 1000px) --- */ 1034 @media screen and (min-width: 1000px) { 1035 #shopify-section-header-locman { 1036 --header-grid: "primary-nav logo secondary-nav" / minmax(0, 1fr) auto minmax(0, 1fr) !important; 1037 } 1038 1039 #shopify-section-header-locman .header__primary-nav .contents { 1040 display: flex !important; 1041 align-items: center !important; 1042 gap: 35px !important; 1043 } 1044 1045 #shopify-section-header-locman .header__secondary-nav .contents { 1046 display: flex !important; 1047 align-items: center !important; 1048 justify-content: flex-end !important; 1049 gap: 25px !important; 1050 } 1051 } 1052 1053 /* --- BLOCCO REQUISITI ESCLUSIVI PER MOBILE (< 1000px) --- */ 1054 @media screen and (max-width: 999px) { 1055 #shopify-section-header-locman .header__secondary-nav .contents { 1056 display: flex !important; 1057 align-items: center !important; 1058 justify-content: flex-end !important; 1059 gap: 15px !important; 1060 } 1061 } 1062 1063 #shopify-section-header-locman .header__secondary-nav svg { 1064 stroke: #0D2340 !important; 1065 stroke-width: 1.3px !important; 1066 fill: none !important; 1067 } 1068 1069 @media screen and (min-width: 700px) { 1070 #shopify-section-header-locman { 1071 --header-padding-block: 1.6rem; 1072 } 1073 }#shopify-section-header-locman { 1074 position: sticky; 1075 top: 0; 1076 } 1077 1078 .shopify-section--announcement-bar ~ #shopify-section-header-locman { 1079 top: calc(var(--announcement-bar-is-sticky, 0) * var(--announcement-bar-height, 0px)); 1080 }#shopify-section-header-locman { 1081 --header-logo-width: 120px; 1082 } 1083 1084 @media screen and (min-width: 700px) { 1085 #shopify-section-header-locman { 1086 --header-logo-width: 200px; 1087 } 1088 }/* --- FIX COMPLETO IMMAGINE BANDIERA DEPRECATA CDN --- */ 1089 .localization-selectors img, 1090 .localization-selector__flag, 1091 [slot="trigger"] img, 1092 .header__secondary-nav img { 1093 display: none !important; 1094 opacity: 0 !important; 1095 width: 0 !important; 1096 height: 0 !important; 1097 } 1098 .localization-selectors button, 1099 .localization-selectors [slot="trigger"], 1100 .localization-selectors a { 1101 display: inline-flex !important;
1102 align-items: center !important; 1103 } 1104</style> 1105 1106<height-observer variable="header"> 1107 <x-header 1108 1109 class="header color-scheme color-scheme--scheme-2" 1110 ><nav 1111 class="header__primary-nav" 1112 aria-label="Navigazione primaria" 1113 > 1114 <button 1115 type="button" 1116 aria-controls="sidebar-menu" 1117 1118 class="md:hidden" 1119 1120 > 1121 <span class="sr-only">Menù</span><svg aria-hidden="true" fill="none" focusable="false" width="24" class="header__nav-icon icon icon-hamburger" viewBox="0 0 24 24"> 1122 <path d="M1 19h22M1 12h22M1 5h22" stroke="currentColor" stroke-width="1.5" stroke-linecap="square"/> 1123 </svg></button><ul class="contents unstyled-list md-max:hidden"> 1124 1125 <li class="header__primary-nav-item"> 1126 <mega-menu-disclosure follow-summary-link trigger="hover" class="contents"><details class="header__menu-disclosure"> 1127 <summary data-follow-link="#" data-title="Collezioni">Collezioni</summary><div class="mega-menu " ><ul class="mega-menu__linklist unstyled-list"><li class="v-stack justify-items-start gap-5"> 1128 <a href="#" class="h6">LOCMAN COLLEZIONI</a><ul class="v-stack gap-2.5 unstyled-list"><li> 1129 <a href="/collections/aethalia" class="link-faded">Aethalia</a> 1130 </li><li> 1131 <a href="/collections/montecristo" class="link-faded">Montecristo</a> 1132 </li><li> 1133 <a href="/collections/montecristo-limited-edition" class="link-faded">Montecristo Oisa</a> 1134 </li><li> 1135 <a href="/collections/stealth" class="link-faded">Stealth</a> 1136 </li><li> 1137 <a href="/collections/sport" class="link-faded">Sport</a> 1138 </li><li> 1139 <a href="/collections/mare" class="link-faded">Mare</a> 1140 </li><li> 1141 <a href="/collections/island" class="link-faded">Island</a> 1142 </li><li> 1143 <a href="/collections/1960" class="link-faded">1960</a> 1144 </li><li> 1145 <a href="/collections/amo" class="link-faded">Amo</a> 1146 </li></ul></li><li class="v-stack justify-items-start gap-5"> 1147 <a href="#" class="h6">COLLABORAZIONI</a><ul class="v-stack gap-2.5 unstyled-list"><li> 1148 <a href="/collections/ducati" class="link-faded">LOCMAN Ducati</a> 1149 </li><li> 1150 <a href="https://www.locman.it/collections/ducati-corse" class="link-faded">Ducati</a> 1151 </li><li> 1152 <a href="/collections/frecce-tricolori" class="link-faded">Frecce Tricolori</a> 1153 </li><li> 1154 <a href="/collections/amerigo-vespucci" class="link-faded">Amerigo Vespucci</a> 1155 </li></ul></li><li class="v-stack justify-items-start gap-5"> 1156 <a href="#" class="h6">L'O COLLEZIONI</a><ul class="v-stack gap-2.5 unstyled-list"><li> 1157 <a href="/collections/decimo-canto" class="link-faded">Decimo Canto</a> 1158 </li><li> 1159 <a href="/collections/xxiv-canto" class="link-faded">XXIV Canto</a> 1160 </li></ul></li></ul><div class="mega-menu__promo"><a href="https://locman.myshopify.com/search?q=YACHTING&type=product" class="v-stack justify-items-center gap-4 sm:gap-5 group"><div class="overflow-hidden"><img src="//www.locman.it/cdn/shop/files/Locman_45_2.png?v=1780559666&width=1080" alt="" srcset="//www.locman.it/cdn/shop/files/Locman_45_2.png?v=1780559666&width=315 315w, //www.locman.it/cdn/shop/files/Locman_45_2.png?v=1780559666&width=630 630w, //www.locman.it/cdn/shop/files/Locman_45_2.png?v=1780559666&width=945 945w" width="1080" height="1350" loading="lazy" sizes="315px" class="zoom-image group-hover:zoom"></div><div class="v-stack text-center gap-2.5"><p class="h6">Montecristo Yachting</p></div></a><a href="https://www.locman.it/search?q=0563&type=product" class="v-stack justify-items-center gap-4 sm:gap-5 group"><div class="overflow-hidden"><img src="//www.locman.it/cdn/shop/files/Locman_45_15.png?v=1788945140&width=1080" alt="" srcset="//www.locman.it/cdn/shop/files/Locman_45_15.png?v=1788945140&width=315 315w, //www.locman.it/cdn/shop/files/Locman_45_15.png?v=1788945140&width=630 630w, //www.locman.it/cdn/shop/files/Locman_45_15.png?v=1788945140&width=945 945w" width="1080" height="1350" loading="lazy" sizes="315px" class="zoom-image group-hover:zoom"></div><div class="v-stack text-center gap-2.5"><p class="h6">Mare 563</p></div></a></div></div> 1161</details></mega-menu-disclosure></li> 1162 1163 <li class="header__primary-nav-item"><a 1164 href="/pages/cinturini" 1165 data-title="CINTURINI" 1166 class="block" 1167 1168 >CINTURINI</a></li> 1169 1170 <li class="header__primary-nav-item"><dropdown-menu-disclosure follow-summary-link trigger="hover"><details class="header__menu-disclosure"> 1171 <summary data-follow-link="#" data-title="Brand">Brand</summary><ul class="header__dropdown-menu header__dropdown-menu--restrictable unstyled-list" role="list"><li>
1171<a href="/pages/chi-siamo" class="link-faded-reverse" >Chi Siamo</a></li><li><a href="/pages/il-tempo-della-natura" class="link-faded-reverse" >Il Tempo della Natura</a></li><li><a href="/pages/tecnologie-e-private-label" class="link-faded-reverse" >Tecnologia e Private Label</a></li></ul></details></dropdown-menu-disclosure></li> 1172 1173 <li class="header__primary-nav-item"><dropdown-menu-disclosure follow-summary-link trigger="hover"><details class="header__menu-disclosure"> 1174 <summary data-follow-link="#" data-title="Store">Store</summary><ul class="header__dropdown-menu header__dropdown-menu--restrictable unstyled-list" role="list"><li><a href="/pages/store?stockist-filters=flt_9p5qynnp" class="link-faded-reverse" >Boutique</a></li><li><a href="/pages/store?stockist-filters=flt_y3m8z4yp" class="link-faded-reverse" >Concessionari</a></li></ul></details></dropdown-menu-disclosure></li></ul></nav> 1175 <a href="/" class="header__logo"><span class="sr-only">LOCMAN Italy - Orologeria Italiana</span><img src="//www.locman.it/cdn/shop/files/Raggruppa_3.svg?v=1779108175&width=163" alt="LOCMAN Italy - Orologeria Italiana" srcset="//www.locman.it/cdn/shop/files/Raggruppa_3.svg?v=1779108175&width=163 163w, //www.locman.it/cdn/shop/files/Raggruppa_3.svg?v=1779108175&width=163 163w" width="163" height="41" sizes="200px" class="header__logo-image"></a> 1176 �<nav class="header__secondary-nav" aria-label="Navigazione secondaria"> 1177 <ul class="contents unstyled-list"> 1178 1179 <li class="localization-selectors md-max:hidden" style="position: relative;"><form method="post" action="/localization" id="HeaderLanguageForm" accept-charset="UTF-8" class="localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/pages/store?stockist-filters=flt_9p5qynnp" /><div class="custom-language-trigger" style="display: inline-flex; align-items: center; gap: 8px; cursor: pointer; position: relative;"><svg style="width: 18px; height: 12px; display: inline-block; vertical-align: middle; border: 1px solid #EAEAEA;" viewBox="0 0 30 20" xmlns="http://www.w3.org/2000/svg"> 1180 <rect width="10" height="20" fill="#009246"/> 1181 <rect x="10" width="10" height="20" fill="#ffffff"/> 1182 <rect x="20" width="10" height="20" fill="#ce2b37"/> 1183 </svg><span style="font-family: 'Gotham', sans-serif; font-size: 12px; font-weight: 400; color: #0D2340; letter-spacing: 0.8px; text-transform: uppercase;"> 1184 IT 1185 </span> 1186 1187 <svg width="8" height="5" viewBox="0 0 10 6" fill="none" stroke="#0D2340" stroke-width="1.5" style="margin-left: 2px;"> 1188 <path d="M1 1l4 4 4-4" stroke-linecap="round" stroke-linejoin="round"/> 1189 </svg> 1190 1191 <select name="locale_code" onchange="this.form.submit()" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;-webkit-appearance: none;"><option value="it" selected> 1192 IT 1193 </option><option value="en" > 1194 EN 1195 </option></select> 1196 1197 </div></form></li><li class="header__account-link sm-max:hidden"> 1198 <shopify-store store-domain="https://www.locman.it" country="US" language="it"></shopify-store> 1199<shopify-account menu="customer-account-main-menu"> 1200 <div slot="signed-out-avatar"><svg aria-hidden="true" fill="none" focusable="false" width="24" class="header__nav-icon icon icon-account" viewBox="0 0 24 24"> 1201 <path d="M16.125 8.75c-.184 2.478-2.063 4.5-4.125 4.5s-3.944-2.021-4.125-4.5c-.187-2.578 1.64-4.5 4.125-4.5 2.484 0 4.313 1.969 4.125 4.5Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1202 <path d="M3.017 20.747C3.783 16.5 7.922 14.25 12 14.25s8.217 2.25 8.984 6.497" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10"/> 1203 </svg></div> 1204 </shopify-account> 1205 </li><li class="header__search-link"> 1206 <a href="/search" aria-controls="header-search-header-locman">
1207 <span class="sr-only">Cerca</span><svg aria-hidden="true" fill="none" focusable="false" width="24" class="header__nav-icon icon icon-search" viewBox="0 0 24 24"> 1208 <path d="M10.364 3a7.364 7.364 0 1 0 0 14.727 7.364 7.364 0 0 0 0-14.727Z" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10"/> 1209 <path d="M15.857 15.858 21 21.001" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round"/> 1210 </svg></a> 1211 </li><li class="relative header__cart-link"> 1212 <a href="/cart" aria-controls="cart-drawer" data-no-instant> 1213 <span class="sr-only">Carrello</span><svg aria-hidden="true" fill="none" focusable="false" width="24" class="header__nav-icon icon icon-cart" viewBox="0 0 24 24"><path d="M4.75 8.25A.75.75 0 0 0 4 9L3 19.125c0 1.418 1.207 2.625 2.625 2.625h12.75c1.418 0 2.625-1.149 2.625-2.566L20 9a.75.75 0 0 0-.75-.75H4.75Zm2.75 0v-1.5a4.5 4.5 0 0 1 4.5-4.5v0a4.5 4.5 0 0 1 4.5 4.5v1.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg><cart-dot class="header__cart-dot "></cart-dot> 1214 </a> 1215 </li> 1216 </ul> 1217 </nav><header-search id="header-search-header-locman" class="header-search"> 1218 <div class="container"> 1219 <form id="predictive-search-form" action="/search" method="GET" aria-owns="header-predictive-search" class="header-search__form" role="search"> 1220 <div class="header-search__form-control"><svg aria-hidden="true" fill="none" focusable="false" width="20" class="icon icon-search" viewBox="0 0 24 24"> 1221 <path d="M10.364 3a7.364 7.364 0 1 0 0 14.727 7.364 7.364 0 0 0 0-14.727Z" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10"/> 1222 <path d="M15.857 15.858 21 21.001" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round"/> 1223 </svg><input 1224 type="search" 1225 name="q" 1226 spellcheck="false" 1227 class="header-search__input h5 sm:h4" 1228 aria-label="Ricerca" 1229 placeholder="Cerca..." 1230 > 1231 <input type="hidden" name="type" value="product"> 1232 1233 <dialog-close-button class="contents"> 1234 <button type="button"> 1235 <span class="sr-only">Chiudi</span><svg aria-hidden="true" focusable="false" fill="none" width="16" class="icon icon-close" viewBox="0 0 16 16"> 1236 <path d="m1 1 14 14M1 15 15 1" stroke="currentColor" stroke-width="1.5"/> 1237 </svg> 1238 1239 </button> 1240 </dialog-close-button> 1241 </div> 1242 </form> 1243 1244 <predictive-search id="header-predictive-search" class="predictive-search"> 1245 <div class="predictive-search__content" slot="results"></div> 1246 </predictive-search> 1247 </div> 1248 1249
1249<script> 1250 (function() { 1251 var form = document.getElementById('predictive-search-form'); 1252 if (form) { 1253 form.addEventListener('submit', function() { 1254 var input = form.querySelector('input[name="q"]'); 1255 if (input) { 1256 var val = input.value.trim(); 1257 if (/^\d{3}$/.test(val)) { 1258 input.value = '0' + val; 1259 } 1260 } 1261 }); 1262 } 1263 })(); 1264 </script>
1264 1265</header-search> 1266<template id="header-sidebar-template"> 1267 <div part="base"> 1268 <div part="overlay"></div> 1269 1270 <div part="content"> 1271 <header part="header"> 1272 <dialog-close-button class="contents"> 1273 <button type="button" part="close-button tap-area" aria-label="Chiudi"><svg aria-hidden="true" focusable="false" fill="none" width="16" class="icon icon-close" viewBox="0 0 16 16"> 1274 <path d="m1 1 14 14M1 15 15 1" stroke="currentColor" stroke-width="1.5"/> 1275 </svg> 1276 1277 </button> 1278 </dialog-close-button> 1279 </header> 1280 1281 <div part="panel-list"> 1282 <slot name="main-panel"></slot><slot name="collapsible-panel"></slot></div> 1283 </div> 1284 </div> 1285</template> 1286 1287<header-sidebar id="sidebar-menu" class="header-sidebar drawer drawer--sm color-scheme color-scheme--scheme-2" template="header-sidebar-template" open-from="left"><div class="header-sidebar__main-panel" slot="main-panel"> 1288 <div class="header-sidebar__scroller"> 1289 <ul class="header-sidebar__linklist divide-y unstyled-list" role="list"><li><button 1290 type="button" 1291 class="header-sidebar__linklist-button h6" 1292 aria-controls="header-panel-1" 1293 aria-expanded="false" 1294 >Collezioni<svg aria-hidden="true" focusable="false" fill="none" width="12" class="icon icon-chevron-right icon--direction-aware" viewBox="0 0 10 10"> 1295 <path d="m3 9 4-4-4-4" stroke="currentColor" stroke-linecap="square"/> 1296 </svg></button></li><li><a href="/pages/cinturini" class="header-sidebar__linklist-button h6">CINTURINI</a></li><li><button 1297 type="button" 1298 class="header-sidebar__linklist-button h6" 1299 aria-controls="header-panel-3" 1300 aria-expanded="false" 1301 >Brand<svg aria-hidden="true" focusable="false" fill="none" width="12" class="icon icon-chevron-right icon--direction-aware" viewBox="0 0 10 10"> 1302 <path d="m3 9 4-4-4-4" stroke="currentColor" stroke-linecap="square"/> 1303 </svg></button></li><li><button 1304 type="button" 1305 class="header-sidebar__linklist-button h6" 1306 aria-controls="header-panel-4" 1307 aria-expanded="false" 1308 >Store<svg aria-hidden="true" focusable="false" fill="none" width="12" class="icon icon-chevron-right icon--direction-aware" viewBox="0 0 10 10"> 1309 <path d="m3 9 4-4-4-4" stroke="currentColor" stroke-linecap="square"/> 1310 </svg></button></li></ul> 1311 </div><div class="header-sidebar__footer"><shopify-account menu="customer-account-main-menu"> 1312 <div slot="signed-out-avatar"> 1313 <div class="text-with-icon smallcaps sm:hidden"><svg aria-hidden="true" fill="none" focusable="false" width="20" class="icon icon-account" viewBox="0 0 24 24"> 1314 <path d="M16.125 8.75c-.184 2.478-2.063 4.5-4.125 4.5s-3.944-2.021-4.125-4.5c-.187-2.578 1.64-4.5 4.125-4.5 2.484 0 4.313 1.969 4.125 4.5Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 1315 <path d="M3.017 20.747C3.783 16.5 7.922 14.25 12 14.25s8.217 2.25 8.984 6.497" stroke="currentColor" stroke-width="1.5" stroke-miterlimit="10"/> 1316 </svg>Login</div> 1317 </div> 1318 </shopify-account><div class="localization-selectors"><div class="relative"> 1319 <button 1320 type="button" 1321 class="localization-toggle heading text-xxs link-faded" 1322 aria-controls="popover-localization-header-sidebar-header-locman-country" 1323 aria-label="Cambia paese o valuta" 1324 aria-expanded="false" 1325 ><img src="//cdn.shopify.com/static/images/flags/us.svg?format=jpg&width=60" alt="Stati Uniti" srcset="//cdn.shopify.com/static/images/flags/us.svg?format=jpg&width=60 60w" width="60" height="45" class="country-flag"><span>USD 1326 $</span><svg aria-hidden="true" focusable="false" fill="none" width="10" class="icon icon-chevron-down" viewBox="0 0 10 10"> 1327 <path d="m1 3 4 4 4-4" stroke="currentColor" stroke-linecap="square"/> 1328 </svg></button> 1329 1330 <x-popover 1331 id="popover-localization-header-sidebar-header-locman-country" 1332 initial-focus="[aria-selected='true']" 1333 class="popover popover--top-start color-scheme color-scheme--dialog" 1334 > 1335 <p class="h4" slot="header">Paese/Area geografica</p><form method="post" action="/localization" id="localization-form-header-sidebar-header-locman-country" accept-charset="UTF-8" class="shopify-localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/pages/store?stockist-filters=flt_9p5qynnp" /><x-listbox class="popover__value-list"><button 1336 type="submit" 1337 name="country_code" 1338 class="popover__value-option h-stack gap-2.5" 1339 role="option" 1340 value="AF" 1341 aria-selected="false" 1342 ><img src="//cdn.shopify.com/static/images/flags/af.svg?format=jpg&width=60" alt="Afghanistan" srcset="//cdn.shopify.com/static/images/flags/af.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Afghanistan (EUR 1343 â¬)</span 1344 > 1345 </button><button 1346 type="submit" 1347 name="country_code" 1348 class="popover__value-option h-stack gap-2.5" 1349 role="option" 1350 value="AD" 1351 aria-selected="false" 1352 ><img src="//cdn.shopify.com/static/images/flags/ad.svg?format=jpg&width=60" alt="Andorra" srcset="//cdn.shopify.com/static/images/flags/ad.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Andorra (EUR 1353 â¬)</span 1354 > 1355 </button><button 1356 type="submit" 1357 name="country_code" 1358 class="popover__value-option h-stack gap-2.5" 1359 role="option" 1360 value="AG" 1361 aria-selected="false" 1362 ><img src="//cdn.shopify.com/static/images/flags/ag.svg?format=jpg&width=60" alt="Antigua e Barbuda" srcset="//cdn.shopify.com/static/images/flags/ag.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Antigua e Barbuda (USD 1363 $)</span 1364 > 1365 </button><button 1366 type="submit" 1367 name="country_code" 1368 class="popover__value-option h-stack gap-2.5" 1369 role="option" 1370 value="SA" 1371 aria-selected="false" 1372 ><img src="//cdn.shopify.com/static/images/flags/sa.svg?format=jpg&width=60" alt="Arabia Saudita" srcset="//cdn.shopify.com/static/images/flags/sa.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Arabia Saudita (EUR 1373 â¬)</span 1374 > 1375 </button><button 1376 type="submit" 1377 name="country_code" 1378 class="popover__value-option h-stack gap-2.5" 1379 role="option" 1380 value="AR" 1381 aria-selected="false" 1382 ><img src="//cdn.shopify.com/static/images/flags/ar.svg?format=jpg&width=60" alt="Argentina" srcset="//cdn.shopify.com/static/images/flags/ar.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Argentina (USD 1383 $)</span 1384 > 1385 </button><button 1386 type="submit" 1387 name="country_code" 1388 class="popover__value-option h-stack gap-2.5" 1389 role="option" 1390 value="AW" 1391 aria-selected="false" 1392 ><img src="//cdn.shopify.com/static/images/flags/aw.svg?format=jpg&width=60" alt="Aruba" srcset="//cdn.shopify.com/static/images/flags/aw.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Aruba (USD 1393 $)</span 1394 > 1395 </button><button 1396 type="submit" 1397 name="country_code" 1398 class="popover__value-option h-stack gap-2.5" 1399 role="option" 1400 value="AU" 1401 aria-selected="false" 1402 ><img src="//cdn.shopify.com/static/images/flags/au.svg?format=jpg&width=60" alt="Australia" srcset="//cdn.shopify.com/static/images/flags/au.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Australia (EUR 1403 â¬)</span 1404 > 1405 </button><button 1406 type="submit" 1407 name="country_code" 1408 class="popover__value-option h-stack gap-2.5" 1409 role="option" 1410 value="AT" 1411 aria-selected="false" 1412 ><img src="//cdn.shopify.com/static/images/flags/at.svg?format=jpg&width=60" alt="Austria" srcset="//cdn.shopify.com/static/images/flags/at.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Austria (EUR 1413 â¬)</span 1414 > 1415 </button><button 1416 type="submit" 1417 name="country_code" 1418 class="popover__value-option h-stack gap-2.5" 1419 role="option" 1420 value="BH" 1421 aria-selected="false" 1422 ><img src="//cdn.shopify.com/static/images/flags/bh.svg?format=jpg&width=60" alt="Bahrein" srcset="//cdn.shopify.com/static/images/flags/bh.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Bahrein (EUR 1423 â¬)</span 1424 > 1425 </button><button 1426 type="submit" 1427 name="country_code" 1428 class="popover__value-option h-stack gap-2.5" 1429 role="option" 1430 value="BE" 1431 aria-selected="false" 1432 ><img src="//cdn.shopify.com/static/images/flags/be.svg?format=jpg&width=60" alt="Belgio" srcset="//cdn.shopify.com/static/images/flags/be.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Belgio (EUR 1433 â¬)</span 1434 > 1435 </button><button 1436 type="submit" 1437 name="country_code" 1438 class="popover__value-option h-stack gap-2.5" 1439 role="option" 1440 value="BO" 1441 aria-selected="false" 1442 ><img src="//cdn.shopify.com/static/images/flags/bo.svg?format=jpg&width=60" alt="Bolivia" srcset="//cdn.shopify.com/static/images/flags/bo.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Bolivia (USD 1443 $)</span 1444 > 1445 </button><button 1446 type="submit" 1447 name="country_code" 1448 class="popover__value-option h-stack gap-2.5" 1449 role="option" 1450 value="BA" 1451 aria-selected="false" 1452 ><img src="//cdn.shopify.com/static/images/flags/ba.svg?format=jpg&width=60" alt="Bosnia ed Erzegovina" srcset="//cdn.shopify.com/static/images/flags/ba.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Bosnia ed Erzegovina (EUR 1453 â¬)</span 1454 > 1455 </button><button 1456 type="submit" 1457 name="country_code" 1458 class="popover__value-option h-stack gap-2.5" 1459 role="option" 1460 value="BR"
1461 aria-selected="false" 1462 ><img src="//cdn.shopify.com/static/images/flags/br.svg?format=jpg&width=60" alt="Brasile" srcset="//cdn.shopify.com/static/images/flags/br.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Brasile (USD 1463 $)</span 1464 > 1465 </button><button 1466 type="submit" 1467 name="country_code" 1468 class="popover__value-option h-stack gap-2.5" 1469 role="option" 1470 value="BN" 1471 aria-selected="false" 1472 ><img src="//cdn.shopify.com/static/images/flags/bn.svg?format=jpg&width=60" alt="Brunei" srcset="//cdn.shopify.com/static/images/flags/bn.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Brunei (EUR 1473 â¬)</span 1474 > 1475 </button><button 1476 type="submit" 1477 name="country_code" 1478 class="popover__value-option h-stack gap-2.5" 1479 role="option" 1480 value="BG" 1481 aria-selected="false" 1482 ><img src="//cdn.shopify.com/static/images/flags/bg.svg?format=jpg&width=60" alt="Bulgaria" srcset="//cdn.shopify.com/static/images/flags/bg.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Bulgaria (EUR 1483 â¬)</span 1484 > 1485 </button><button 1486 type="submit" 1487 name="country_code" 1488 class="popover__value-option h-stack gap-2.5" 1489 role="option" 1490 value="CA" 1491 aria-selected="false" 1492 ><img src="//cdn.shopify.com/static/images/flags/ca.svg?format=jpg&width=60" alt="Canada" srcset="//cdn.shopify.com/static/images/flags/ca.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Canada (USD 1493 $)</span 1494 > 1495 </button><button 1496 type="submit" 1497 name="country_code" 1498 class="popover__value-option h-stack gap-2.5" 1499 role="option" 1500 value="CZ" 1501 aria-selected="false" 1502 ><img src="//cdn.shopify.com/static/images/flags/cz.svg?format=jpg&width=60" alt="Cechia" srcset="//cdn.shopify.com/static/images/flags/cz.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Cechia (EUR 1503 â¬)</span 1504 > 1505 </button><button 1506 type="submit" 1507 name="country_code" 1508 class="popover__value-option h-stack gap-2.5" 1509 role="option" 1510 value="CL" 1511 aria-selected="false" 1512 ><img src="//cdn.shopify.com/static/images/flags/cl.svg?format=jpg&width=60" alt="Cile" srcset="//cdn.shopify.com/static/images/flags/cl.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Cile (USD 1513 $)</span 1514 > 1515 </button><button 1516 type="submit" 1517 name="country_code" 1518 class="popover__value-option h-stack gap-2.5" 1519 role="option" 1520 value="CN" 1521 aria-selected="false" 1522 ><img src="//cdn.shopify.com/static/images/flags/cn.svg?format=jpg&width=60" alt="Cina" srcset="//cdn.shopify.com/static/images/flags/cn.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Cina (EUR 1523 â¬)</span 1524 > 1525 </button><button 1526 type="submit" 1527 name="country_code" 1528 class="popover__value-option h-stack gap-2.5" 1529 role="option" 1530 value="CY" 1531 aria-selected="false" 1532 ><img src="//cdn.shopify.com/static/images/flags/cy.svg?format=jpg&width=60" alt="Cipro" srcset="//cdn.shopify.com/static/images/flags/cy.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Cipro (EUR 1533 â¬)</span 1534 > 1535 </button><button 1536 type="submit" 1537 name="country_code" 1538 class="popover__value-option h-stack gap-2.5" 1539 role="option" 1540 value="CO" 1541 aria-selected="false" 1542 ><img src="//cdn.shopify.com/static/images/flags/co.svg?format=jpg&width=60" alt="Colombia" srcset="//cdn.shopify.com/static/images/flags/co.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Colombia (USD 1543 $)</span 1544 > 1545 </button><button 1546 type="submit" 1547 name="country_code" 1548 class="popover__value-option h-stack gap-2.5" 1549 role="option" 1550 value="KR" 1551 aria-selected="false" 1552 ><img src="//cdn.shopify.com/static/images/flags/kr.svg?format=jpg&width=60" alt="Corea del Sud" srcset="//cdn.shopify.com/static/images/flags/kr.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Corea del Sud (EUR 1553 â¬)</span 1554 > 1555 </button><button 1556 type="submit" 1557 name="country_code" 1558 class="popover__value-option h-stack gap-2.5" 1559 role="option" 1560 value="CR" 1561 aria-selected="false" 1562 ><img src="//cdn.shopify.com/static/images/flags/cr.svg?format=jpg&width=60" alt="Costa Rica" srcset="//cdn.shopify.com/static/images/flags/cr.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Costa Rica (USD 1563 $)</span 1564 > 1565 </button><button 1566 type="submit" 1567 name="country_code" 1568 class="popover__value-option h-stack gap-2.5" 1569 role="option" 1570 value="HR" 1571 aria-selected="false" 1572 ><img src="//cdn.shopify.com/static/images/flags/hr.svg?format=jpg&width=60" alt="Croazia" srcset="//cdn.shopify.com/static/images/flags/hr.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Croazia (EUR 1573 â¬)</span 1574 > 1575 </button><button 1576 type="submit" 1577 name="country_code" 1578 class="popover__value-option h-stack gap-2.5" 1579 role="option" 1580 value="CW" 1581 aria-selected="false" 1582 ><img src="//cdn.shopify.com/static/images/flags/cw.svg?format=jpg&width=60" alt="Curaçao" srcset="//cdn.shopify.com/static/images/flags/cw.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Curaçao (USD 1583 $)</span 1584 > 1585 </button><button 1586 type="submit" 1587 name="country_code" 1588 class="popover__value-option h-stack gap-2.5" 1589 role="option" 1590 value="DK" 1591 aria-selected="false" 1592 ><img src="//cdn.shopify.com/static/images/flags/dk.svg?format=jpg&width=60" alt="Danimarca" srcset="//cdn.shopify.com/static/images/flags/dk.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Danimarca (EUR 1593 â¬)</span 1594 > 1595 </button><button 1596 type="submit" 1597 name="country_code" 1598 class="popover__value-option h-stack gap-2.5" 1599 role="option" 1600 value="DM" 1601 aria-selected="false" 1602 ><img src="//cdn.shopify.com/static/images/flags/dm.svg?format=jpg&width=60" alt="Dominica" srcset="//cdn.shopify.com/static/images/flags/dm.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Dominica (USD 1603 $)</span 1604 > 1605 </button><button 1606 type="submit" 1607 name="country_code" 1608 class="popover__value-option h-stack gap-2.5" 1609 role="option" 1610 value="EC" 1611 aria-selected="false" 1612 ><img src="//cdn.shopify.com/static/images/flags/ec.svg?format=jpg&width=60" alt="Ecuador" srcset="//cdn.shopify.com/static/images/flags/ec.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Ecuador (USD 1613 $)</span 1614 > 1615 </button><button 1616 type="submit" 1617 name="country_code" 1618 class="popover__value-option h-stack gap-2.5" 1619 role="option" 1620 value="EG" 1621 aria-selected="false" 1622 ><img src="//cdn.shopify.com/static/images/flags/eg.svg?format=jpg&width=60" alt="Egitto" srcset="//cdn.shopify.com/static/images/flags/eg.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Egitto (EUR 1623 â¬)</span 1624 > 1625 </button><button 1626 type="submit" 1627 name="country_code" 1628 class="popover__value-option h-stack gap-2.5" 1629 role="option" 1630 value="AE" 1631 aria-selected="false" 1632 ><img src="//cdn.shopify.com/static/images/flags/ae.svg?format=jpg&width=60" alt="Emirati Arabi Uniti" srcset="//cdn.shopify.com/static/images/flags/ae.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Emirati Arabi Uniti (EUR 1633 â¬)</span 1634 > 1635 </button><button 1636 type="submit" 1637 name="country_code" 1638 class="popover__value-option h-stack gap-2.5" 1639 role="option" 1640 value="EE" 1641 aria-selected="false" 1642 ><img src="//cdn.shopify.com/static/images/flags/ee.svg?format=jpg&width=60" alt="Estonia" srcset="//cdn.shopify.com/static/images/flags/ee.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Estonia (EUR 1643 â¬)</span 1644 > 1645 </button><button 1646 type="submit" 1647 name="country_code" 1648 class="popover__value-option h-stack gap-2.5" 1649 role="option" 1650 value="FJ" 1651 aria-selected="false" 1652 ><img src="//cdn.shopify.com/static/images/flags/fj.svg?format=jpg&width=60" alt="Figi" srcset="//cdn.shopify.com/static/images/flags/fj.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Figi (EUR 1653 â¬)</span 1654 > 1655 </button><button 1656 type="submit" 1657 name="country_code" 1658 class="popover__value-option h-stack gap-2.5" 1659 role="option" 1660 value="PH" 1661 aria-selected="false" 1662 ><img src="//cdn.shopify.com/static/images/flags/ph.svg?format=jpg&width=60" alt="Filippine" srcset="//cdn.shopify.com/static/images/flags/ph.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Filippine (EUR 1663 â¬)</span 1664 > 1665 </button><button 1666 type="submit" 1667 name="country_code" 1668 class="popover__value-option h-stack gap-2.5" 1669 role="option" 1670 value="FI" 1671 aria-selected="false" 1672 ><img src="//cdn.shopify.com/static/images/flags/fi.svg?format=jpg&width=60" alt="Finlandia" srcset="//cdn.shopify.com/static/images/flags/fi.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Finlandia (EUR 1673 â¬)</span 1674 > 1675 </button><button 1676 type="submit" 1677 name="country_code" 1678 class="popover__value-option h-stack gap-2.5" 1679 role="option" 1680 value="FR" 1681 aria-selected="false" 1682 ><img src="//cdn.shopify.com/static/images/flags/fr.svg?format=jpg&width=60" alt="Francia" srcset="//cdn.shopify.com/static/images/flags/fr.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Francia (EUR 1683 â¬)</span 1684 > 1685 </button><button 1686 type="submit" 1687 name="country_code" 1688 class="popover__value-option h-stack gap-2.5" 1689 role="option" 1690 value="DE" 1691 aria-selected="false" 1692 ><img src="//cdn.shopify.com/static/images/flags/de.svg?format=jpg&width=60" alt="Germania" srcset="//cdn.shopify.com/static/images/flags/de.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Germania (EUR 1693 â¬)</span 1694 > 1695 </button><button 1696 type="submit" 1697 name="country_code" 1698 class="popover__value-option h-stack gap-2.5" 1699 role="option" 1700 value="JM" 1701 aria-selected="false" 1702 ><img src="//cdn.shopify.com/static/images/flags/jm.svg?format=jpg&width=60" alt="Giamaica" srcset="//cdn.shopify.com/static/images/flags/jm.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Giamaica (USD 1703 $)</span 1704 > 1705 </button><button 1706 type="submit" 1707 name="country_code" 1708 class="popover__value-option h-stack gap-2.5" 1709 role="option" 1710 value="JP" 1711 aria-selected="false" 1712 ><img src="//cdn.shopify.com/static/images/flags/jp.svg?format=jpg&width=60" alt="Giappone" srcset="//cdn.shopify.com/static/images/flags/jp.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Giappone (EUR 1713 â¬)</span 1714 > 1715 </button><button 1716 type="submit" 1717 name="country_code" 1718 class="popover__value-option h-stack gap-2.5" 1719 role="option" 1720 value="GI" 1721 aria-selected="false" 1722 ><img src="//cdn.shopify.com/static/images/flags/gi.svg?format=jpg&width=60" alt="Gibilterra" srcset="//cdn.shopify.com/static/images/flags/gi.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Gibilterra (EUR 1723 â¬)</span 1724 > 1725 </button><button 1726 type="submit" 1727 name="country_code" 1728 class="popover__value-option h-stack gap-2.5" 1729 role="option" 1730 value="GR" 1731 aria-selected="false" 1732 ><img src="//cdn.shopify.com/static/images/flags/gr.svg?format=jpg&width=60" alt="Grecia" srcset="//cdn.shopify.com/static/images/flags/gr.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Grecia (EUR 1733 â¬)</span 1734 > 1735 </button><button 1736 type="submit" 1737 name="country_code" 1738 class="popover__value-option h-stack gap-2.5" 1739 role="option" 1740 value="GD" 1741 aria-selected="false" 1742 ><img src="//cdn.shopify.com/static/images/flags/gd.svg?format=jpg&width=60" alt="Grenada" srcset="//cdn.shopify.com/static/images/flags/gd.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Grenada (USD 1743 $)</span 1744 > 1745 </button><button 1746 t
1746ype="submit" 1747 name="country_code" 1748 class="popover__value-option h-stack gap-2.5" 1749 role="option" 1750 value="GL" 1751 aria-selected="false" 1752 ><img src="//cdn.shopify.com/static/images/flags/gl.svg?format=jpg&width=60" alt="Groenlandia" srcset="//cdn.shopify.com/static/images/flags/gl.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Groenlandia (EUR 1753 â¬)</span 1754 > 1755 </button><button 1756 type="submit" 1757 name="country_code" 1758 class="popover__value-option h-stack gap-2.5" 1759 role="option" 1760 value="GP" 1761 aria-selected="false" 1762 ><img src="//cdn.shopify.com/static/images/flags/gp.svg?format=jpg&width=60" alt="Guadalupa" srcset="//cdn.shopify.com/static/images/flags/gp.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Guadalupa (USD 1763 $)</span 1764 > 1765 </button><button 1766 type="submit" 1767 name="country_code" 1768 class="popover__value-option h-stack gap-2.5" 1769 role="option" 1770 value="IN" 1771 aria-selected="false" 1772 ><img src="//cdn.shopify.com/static/images/flags/in.svg?format=jpg&width=60" alt="India" srcset="//cdn.shopify.com/static/images/flags/in.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>India (EUR 1773 â¬)</span 1774 > 1775 </button><button 1776 type="submit" 1777 name="country_code" 1778 class="popover__value-option h-stack gap-2.5" 1779 role="option" 1780 value="ID" 1781 aria-selected="false" 1782 ><img src="//cdn.shopify.com/static/images/flags/id.svg?format=jpg&width=60" alt="Indonesia" srcset="//cdn.shopify.com/static/images/flags/id.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Indonesia (EUR 1783 â¬)</span 1784 > 1785 </button><button 1786 type="submit" 1787 name="country_code" 1788 class="popover__value-option h-stack gap-2.5" 1789 role="option" 1790 value="IQ" 1791 aria-selected="false" 1792 ><img src="//cdn.shopify.com/static/images/flags/iq.svg?format=jpg&width=60" alt="Iraq" srcset="//cdn.shopify.com/static/images/flags/iq.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Iraq (EUR 1793 â¬)</span 1794 > 1795 </button><button 1796 type="submit" 1797 name="country_code" 1798 class="popover__value-option h-stack gap-2.5" 1799 role="option" 1800 value="IE" 1801 aria-selected="false" 1802 ><img src="//cdn.shopify.com/static/images/flags/ie.svg?format=jpg&width=60" alt="Irlanda" srcset="//cdn.shopify.com/static/images/flags/ie.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Irlanda (EUR 1803 â¬)</span 1804 > 1805 </button><button 1806 type="submit" 1807 name="country_code" 1808 class="popover__value-option h-stack gap-2.5" 1809 role="option" 1810 value="IS" 1811 aria-selected="false" 1812 ><img src="//cdn.shopify.com/static/images/flags/is.svg?format=jpg&width=60" alt="Islanda" srcset="//cdn.shopify.com/static/images/flags/is.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Islanda (EUR 1813 â¬)</span 1814 > 1815 </button><button 1816 type="submit" 1817 name="country_code" 1818 class="popover__value-option h-stack gap-2.5" 1819 role="option" 1820 value="FO" 1821 aria-selected="false" 1822 ><img src="//cdn.shopify.com/static/images/flags/fo.svg?format=jpg&width=60" alt="Isole Fær Ãer" srcset="//cdn.shopify.com/static/images/flags/fo.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Isole Fær Ãer (EUR 1823 â¬)</span 1824 > 1825 </button><button 1826 type="submit" 1827 name="country_code" 1828 class="popover__value-option h-stack gap-2.5" 1829 role="option" 1830 value="IT" 1831 aria-selected="false" 1832 ><img src="//cdn.shopify.com/static/images/flags/it.svg?format=jpg&width=60" alt="Italia" srcset="//cdn.shopify.com/static/images/flags/it.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Italia (EUR 1833 â¬)</span 1834 > 1835 </button><button 1836 type="submit" 1837 name="country_code" 1838 class="popover__value-option h-stack gap-2.5" 1839 role="option" 1840 value="KW" 1841 aria-selected="false" 1842 ><img src="//cdn.shopify.com/static/images/flags/kw.svg?format=jpg&width=60" alt="Kuwait" srcset="//cdn.shopify.com/static/images/flags/kw.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Kuwait (EUR 1843 â¬)</span 1844 > 1845 </button><button 1846 type="submit" 1847 name="country_code" 1848 class="popover__value-option h-stack gap-2.5" 1849 role="option" 1850 value="LV" 1851 aria-selected="false" 1852 ><img src="//cdn.shopify.com/static/images/flags/lv.svg?format=jpg&width=60" alt="Lettonia" srcset="//cdn.shopify.com/static/images/flags/lv.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Lettonia (EUR 1853 â¬)</span 1854 > 1855 </button><button 1856 type="submit" 1857 name="country_code" 1858 class="popover__value-option h-stack gap-2.5" 1859 role="option" 1860 value="LI" 1861 aria-selected="false" 1862 ><img src="//cdn.shopify.com/static/images/flags/li.svg?format=jpg&width=60" alt="Liechtenstein" srcset="//cdn.shopify.com/static/images/flags/li.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Liechtenstein (EUR 1863 â¬)</span 1864 > 1865 </button><button 1866 type="submit" 1867 name="country_code" 1868 class="popover__value-option h-stack gap-2.5" 1869 role="option" 1870 value="LT" 1871 aria-selected="false" 1872 ><img src="//cdn.shopify.com/static/images/flags/lt.svg?format=jpg&width=60" alt="Lituania" srcset="//cdn.shopify.com/static/images/flags/lt.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Lituania (EUR 1873 â¬)</span 1874 > 1875 </button><button 1876 type="submit" 1877 name="country_code" 1878 class="popover__value-option h-stack gap-2.5" 1879 role="option" 1880 value="LU" 1881 aria-selected="false" 1882 ><img src="//cdn.shopify.com/static/images/flags/lu.svg?format=jpg&width=60" alt="Lussemburgo" srcset="//cdn.shopify.com/static/images/flags/lu.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Lussemburgo (EUR 1883 â¬)</span 1884 > 1885 </button><button 1886 type="submit" 1887 name="country_code" 1888 class="popover__value-option h-stack gap-2.5" 1889 role="option" 1890 value="MK" 1891 aria-selected="false" 1892 ><img src="//cdn.shopify.com/static/images/flags/mk.svg?format=jpg&width=60" alt="Macedonia del Nord" srcset="//cdn.shopify.com/static/images/flags/mk.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Macedonia del Nord (EUR 1893 â¬)</span 1894 > 1895 </button><button 1896 type="submit" 1897 name="country_code" 1898 class="popover__value-option h-stack gap-2.5" 1899 role="option" 1900 value="MY" 1901 aria-selected="false" 1902 ><img src="//cdn.shopify.com/static/images/flags/my.svg?format=jpg&width=60" alt="Malaysia" srcset="//cdn.shopify.com/static/images/flags/my.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Malaysia (EUR 1903 â¬)</span 1904 > 1905 </button><button 1906 type="submit" 1907 name="country_code" 1908 class="popover__value-option h-stack gap-2.5" 1909 role="option" 1910 value="MT" 1911 aria-selected="false" 1912 ><img src="//cdn.shopify.com/static/images/flags/mt.svg?format=jpg&width=60" alt="Malta" srcset="//cdn.shopify.com/static/images/flags/mt.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Malta (EUR 1913 â¬)</span 1914 > 1915 </button><button 1916 type="submit" 1917 name="country_code" 1918 class="popover__value-option h-stack gap-2.5" 1919 role="option" 1920 value="MA" 1921 aria-selected="false" 1922 ><img src="//cdn.shopify.com/static/images/flags/ma.svg?format=jpg&width=60" alt="Marocco" srcset="//cdn.shopify.com/static/images/flags/ma.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Marocco (EUR 1923 â¬)</span 1924 > 1925 </button><button 1926 type="submit" 1927 name="country_code" 1928 class="popover__value-option h-stack gap-2.5" 1929 role="option" 1930 value="MQ" 1931 aria-selected="false" 1932 ><img src="//cdn.shopify.com/static/images/flags/mq.svg?format=jpg&width=60" alt="Martinica" srcset="//cdn.shopify.com/static/images/flags/mq.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Martinica (USD 1933 $)</span 1934 > 1935 </button><button 1936 type="submit" 1937 name="country_code" 1938 class="popover__value-option h-stack gap-2.5" 1939 role="option" 1940 value="MX" 1941 aria-selected="false" 1942 ><img src="//cdn.shopify.com/static/images/flags/mx.svg?format=jpg&width=60" alt="Messico" srcset="//cdn.shopify.com/static/images/flags/mx.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Messico (USD 1943 $)</span 1944 > 1945 </button><button 1946 type="submit" 1947 name="country_code" 1948 class="popover__value-option h-stack gap-2.5" 1949 role="option" 1950 value="MD" 1951 aria-selected="false" 1952 ><img src="//cdn.shopify.com/static/images/flags/md.svg?format=jpg&width=60" alt="Moldavia" srcset="//cdn.shopify.com/static/images/flags/md.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Moldavia (EUR 1953 â¬)</span 1954 > 1955 </button><button 1956 type="submit" 1957 name="country_code" 1958 class="popover__value-option h-stack gap-2.5" 1959 role="option" 1960 value="ME" 1961 aria-selected="false" 1962 ><img src="//cdn.shopify.com/static/images/flags/me.svg?format=jpg&width=60" alt="Montenegro" srcset="//cdn.shopify.com/static/images/flags/me.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Montenegro (EUR 1963 â¬)</span 1964 > 1965 </button><button 1966 type="submit" 1967 name="country_code" 1968 class="popover__value-option h-stack gap-2.5" 1969 role="option" 1970 value="NO" 1971 aria-selected="false" 1972 ><img src="//cdn.shopify.com/static/images/flags/no.svg?format=jpg&width=60" alt="Norvegia" srcset="//cdn.shopify.com/static/images/flags/no.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Norvegia (EUR 1973 â¬)</span 1974 > 1975 </button><button 1976 type="submit" 1977 name="country_code" 1978 class="popover__value-option h-stack gap-2.5" 1979 role="option" 1980 value="NZ" 1981 aria-selected="false" 1982 ><img src="//cdn.shopify.com/static/images/flags/nz.svg?format=jpg&width=60" alt="Nuova Zelanda" srcset="//cdn.shopify.com/static/images/flags/nz.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Nuova Zelanda (EUR 1983 â¬)</span 1984 > 1985 </button><button 1986 type="submit" 1987 name="country_code" 1988 class="popover__value-option h-stack gap-2.5" 1989 role="option" 1990 value="NL" 1991 aria-selected="false" 1992 ><img src="//cdn.shopify.com/static/images/flags/nl.svg?format=jpg&width=60" alt="Paesi Bassi" srcset="//cdn.shopify.com/static/images/flags/nl.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Paesi Bassi (EUR 1993 â¬)</span 1994 > 1995 </button><button 1996 type="submit" 1997 name="country_code" 1998 class="popover__value-option h-stack gap-2.5" 1999 role="option" 2000 value="PK" 2001 aria-selected="false" 2002 ><img src="//cdn.shopify.com/static/images/flags/pk.svg?format=jpg&width=60" alt="Pakistan" srcset="//cdn.shopify.com/static/images/flags/pk.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Pakistan (EUR 2003 â¬)</span 2004 > 2005 </button><button 2006 type="submit" 2007 name="country_code" 2008 class="popover__value-option h-stack gap-2.5" 2009 role="option" 2010 value="PL" 2011 aria-selected="false" 2012 ><img src="//cdn.shopify.com/static/images/flags/pl.svg?format=jpg&width=60" alt="Polonia" srcset="//cdn.shopify.com/static/images/flags/pl.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Polonia (EUR 2013 â¬)</span 2014 > 2015 </button><button 2016 type="submit" 2017 name="country_code" 2018 class="popover__value-option h-stack gap-2.5" 2019 role="option" 2020 value="PT" 2021 aria-selected="false" 2022 ><img src="//cdn.shopify.com/static/images/flags/pt.svg?format=jpg&width=60" alt="Portogallo" srcset="//cdn.shopify.com/static/images/flags/pt.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Portogallo (EUR 2023 â¬)</span 2024 > 2025 </button><button 2026 type="submit" 2027 name="country_code" 2028 class="popover__value-option h-stack gap-2.5" 2029 role="option" 2030 value="HK" 2031 aria-selected="false" 2032 ><img src="//cdn.shopify.com/static/images/flags/hk.svg?format=jpg&width=60" alt="RAS di Hong Kong" sr
2032cset="//cdn.shopify.com/static/images/flags/hk.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>RAS di Hong Kong (EUR 2033 â¬)</span 2034 > 2035 </button><button 2036 type="submit" 2037 name="country_code" 2038 class="popover__value-option h-stack gap-2.5" 2039 role="option" 2040 value="GB" 2041 aria-selected="false" 2042 ><img src="//cdn.shopify.com/static/images/flags/gb.svg?format=jpg&width=60" alt="Regno Unito" srcset="//cdn.shopify.com/static/images/flags/gb.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Regno Unito (EUR 2043 â¬)</span 2044 > 2045 </button><button 2046 type="submit" 2047 name="country_code" 2048 class="popover__value-option h-stack gap-2.5" 2049 role="option" 2050 value="DO" 2051 aria-selected="false" 2052 ><img src="//cdn.shopify.com/static/images/flags/do.svg?format=jpg&width=60" alt="Repubblica Dominicana" srcset="//cdn.shopify.com/static/images/flags/do.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Repubblica Dominicana (USD 2053 $)</span 2054 > 2055 </button><button 2056 type="submit" 2057 name="country_code" 2058 class="popover__value-option h-stack gap-2.5" 2059 role="option" 2060 value="RO" 2061 aria-selected="false" 2062 ><img src="//cdn.shopify.com/static/images/flags/ro.svg?format=jpg&width=60" alt="Romania" srcset="//cdn.shopify.com/static/images/flags/ro.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Romania (EUR 2063 â¬)</span 2064 > 2065 </button><button 2066 type="submit" 2067 name="country_code" 2068 class="popover__value-option h-stack gap-2.5" 2069 role="option" 2070 value="WS" 2071 aria-selected="false" 2072 ><img src="//cdn.shopify.com/static/images/flags/ws.svg?format=jpg&width=60" alt="Samoa" srcset="//cdn.shopify.com/static/images/flags/ws.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Samoa (EUR 2073 â¬)</span 2074 > 2075 </button><button 2076 type="submit" 2077 name="country_code" 2078 class="popover__value-option h-stack gap-2.5" 2079 role="option" 2080 value="RS" 2081 aria-selected="false" 2082 ><img src="//cdn.shopify.com/static/images/flags/rs.svg?format=jpg&width=60" alt="Serbia" srcset="//cdn.shopify.com/static/images/flags/rs.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Serbia (EUR 2083 â¬)</span 2084 > 2085 </button><button 2086 type="submit" 2087 name="country_code" 2088 class="popover__value-option h-stack gap-2.5" 2089 role="option" 2090 value="SG" 2091 aria-selected="false" 2092 ><img src="//cdn.shopify.com/static/images/flags/sg.svg?format=jpg&width=60" alt="Singapore" srcset="//cdn.shopify.com/static/images/flags/sg.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Singapore (EUR 2093 â¬)</span 2094 > 2095 </button><button 2096 type="submit" 2097 name="country_code" 2098 class="popover__value-option h-stack gap-2.5" 2099 role="option" 2100 value="SK" 2101 aria-selected="false" 2102 ><img src="//cdn.shopify.com/static/images/flags/sk.svg?format=jpg&width=60" alt="Slovacchia" srcset="//cdn.shopify.com/static/images/flags/sk.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Slovacchia (EUR 2103 â¬)</span 2104 > 2105 </button><button 2106 type="submit" 2107 name="country_code" 2108 class="popover__value-option h-stack gap-2.5" 2109 role="option" 2110 value="SI" 2111 aria-selected="false" 2112 ><img src="//cdn.shopify.com/static/images/flags/si.svg?format=jpg&width=60" alt="Slovenia" srcset="//cdn.shopify.com/static/images/flags/si.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Slovenia (EUR 2113 â¬)</span 2114 > 2115 </button><button 2116 type="submit" 2117 name="country_code" 2118 class="popover__value-option h-stack gap-2.5" 2119 role="option" 2120 value="ES" 2121 aria-selected="false" 2122 ><img src="//cdn.shopify.com/static/images/flags/es.svg?format=jpg&width=60" alt="Spagna" srcset="//cdn.shopify.com/static/images/flags/es.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Spagna (EUR 2123 â¬)</span 2124 > 2125 </button><button 2126 type="submit" 2127 name="country_code" 2128 class="popover__value-option h-stack gap-2.5" 2129 role="option" 2130 value="LK" 2131 aria-selected="false" 2132 ><img src="//cdn.shopify.com/static/images/flags/lk.svg?format=jpg&width=60" alt="Sri Lanka" srcset="//cdn.shopify.com/static/images/flags/lk.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Sri Lanka (EUR 2133 â¬)</span 2134 > 2135 </button><button 2136 type="submit" 2137 name="country_code" 2138 class="popover__value-option h-stack gap-2.5" 2139 role="option" 2140 value="US" 2141 aria-selected="true" 2142 ><img src="//cdn.shopify.com/static/images/flags/us.svg?format=jpg&width=60" alt="Stati Uniti" srcset="//cdn.shopify.com/static/images/flags/us.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Stati Uniti (USD 2143 $)</span 2144 > 2145 </button><button 2146 type="submit" 2147 name="country_code" 2148 class="popover__value-option h-stack gap-2.5" 2149 role="option" 2150 value="ZA" 2151 aria-selected="false" 2152 ><img src="//cdn.shopify.com/static/images/flags/za.svg?format=jpg&width=60" alt="Sudafrica" srcset="//cdn.shopify.com/static/images/flags/za.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Sudafrica (EUR 2153 â¬)</span 2154 > 2155 </button><button 2156 type="submit" 2157 name="country_code" 2158 class="popover__value-option h-stack gap-2.5" 2159 role="option" 2160 value="SE" 2161 aria-selected="false" 2162 ><img src="//cdn.shopify.com/static/images/flags/se.svg?format=jpg&width=60" alt="Svezia" srcset="//cdn.shopify.com/static/images/flags/se.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Svezia (EUR 2163 â¬)</span 2164 > 2165 </button><button 2166 type="submit" 2167 name="country_code" 2168 class="popover__value-option h-stack gap-2.5" 2169 role="option" 2170 value="CH" 2171 aria-selected="false" 2172 ><img src="//cdn.shopify.com/static/images/flags/ch.svg?format=jpg&width=60" alt="Svizzera" srcset="//cdn.shopify.com/static/images/flags/ch.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Svizzera (EUR 2173 â¬)</span 2174 > 2175 </button><button 2176 type="submit" 2177 name="country_code" 2178 class="popover__value-option h-stack gap-2.5" 2179 role="option" 2180 value="TW" 2181 aria-selected="false" 2182 ><img src="//cdn.shopify.com/static/images/flags/tw.svg?format=jpg&width=60" alt="Taiwan" srcset="//cdn.shopify.com/static/images/flags/tw.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Taiwan (EUR 2183 â¬)</span 2184 > 2185 </button><button 2186 type="submit" 2187 name="country_code" 2188 class="popover__value-option h-stack gap-2.5" 2189 role="option" 2190 value="TH" 2191 aria-selected="false" 2192 ><img src="//cdn.shopify.com/static/images/flags/th.svg?format=jpg&width=60" alt="Thailandia" srcset="//cdn.shopify.com/static/images/flags/th.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Thailandia (EUR 2193 â¬)</span 2194 > 2195 </button><button 2196 type="submit" 2197 name="country_code" 2198 class="popover__value-option h-stack gap-2.5" 2199 role="option" 2200 value="HU" 2201 aria-selected="false" 2202 ><img src="//cdn.shopify.com/static/images/flags/hu.svg?format=jpg&width=60" alt="Ungheria" srcset="//cdn.shopify.com/static/images/flags/hu.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Ungheria (EUR 2203 â¬)</span 2204 > 2205 </button><button 2206 type="submit" 2207 name="country_code" 2208 class="popover__value-option h-stack gap-2.5" 2209 role="option" 2210 value="UY" 2211 aria-selected="false" 2212 ><img src="//cdn.shopify.com/static/images/flags/uy.svg?format=jpg&width=60" alt="Uruguay" srcset="//cdn.shopify.com/static/images/flags/uy.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Uruguay (USD 2213 $)</span 2214 > 2215 </button><button 2216 type="submit" 2217 name="country_code" 2218 class="popover__value-option h-stack gap-2.5" 2219 role="option" 2220 value="VN" 2221 aria-selected="false" 2222 ><img src="//cdn.shopify.com/static/images/flags/vn.svg?format=jpg&width=60" alt="Vietnam" srcset="//cdn.shopify.com/static/images/flags/vn.svg?format=jpg&width=60 60w" width="60" height="45" loading="lazy" class="country-flag"><span>Vietnam (EUR 2223 â¬)</span 2224 > 2225 </button></x-listbox></form></x-popover> 2226 </div></div></div></div><header-sidebar-collapsible-panel class="header-sidebar__collapsible-panel" slot="collapsible-panel"> 2227 <div class="header-sidebar__scroller"><div id="header-panel-1" class="header-sidebar__sub-panel" hidden> 2228 <button 2229 type="button" 2230 class="header-sidebar__back-button link-faded is-divided text-with-icon h6 md:hidden" 2231 data-action="close-panel" 2232 ><svg aria-hidden="true" focusable="false" fill="none" width="12" class="icon icon-chevron-left icon--direction-aware" viewBox="0 0 10 10"> 2233 <path d="M7 1 3 5l4 4" stroke="currentColor" stroke-linecap="square"/> 2234 </svg>Collezioni</button> 2235 2236 <ul class="header-sidebar__linklist divide-y unstyled-list" role="list"><li><accordion-disclosure> 2237 <details 2238 class="accordion__disclosure group" 2239 2240 > 2241 <summary class="header-sidebar__linklist-button h6">LOCMAN COLLEZIONI<span class="animated-plus group-expanded:rotate" aria-hidden="true"></span> 2242 </summary> 2243 2244 <div class="header-sidebar__nested-linklist"><a href="/collections/aethalia" class="link-faded-reverse">Aethalia</a><a href="/collections/montecristo" class="link-faded-reverse">Montecristo</a><a href="/collections/montecristo-limited-edition" class="link-faded-reverse">Montecristo Oisa</a><a href="/collections/stealth" class="link-faded-reverse">Stealth</a><a href="/collections/sport" class="link-faded-reverse">Sport</a><a href="/collections/mare" class="link-faded-reverse">Mare</a><a href="/collections/island" class="link-faded-reverse">Island</a><a href="/collections/1960" class="link-faded-reverse">1960</a><a href="/collections/amo" class="link-faded-reverse">Amo</a></div> 2245 </details> 2246 </accordion-disclosure></li><li><accordion-disclosure> 2247 <details 2248 class="accordion__disclosure group" 2249 2250 > 2251 <summary class="header-sidebar__linklist-button h6">COLLABORAZIONI<span class="animated-plus group-expanded:rotate" aria-hidden="true"></span> 2252 </summary> 2253 2254 <div class="header-sidebar__nested-linklist"><a href="/collections/ducati" class="link-faded-reverse">LOCMAN Ducati</a><a href="https://www.locman.it/collections/ducati-corse" class="link-faded-reverse">Ducati</a><a href="/collections/frecce-tricolori" class="link-faded-reverse">Frecce Tricolori</a><a href="/collections/amerigo-vespucci" class="link-faded-reverse">Amerigo Vespucci</a></div> 2255 </details> 2256 </accordion-disclosure></li><li><accordion-disclosure> 2257 <details 2258 class="accordion__disclosure group" 2259 2260 > 2261 <summary class="header-sidebar__linklist-button h6">L'O COLLEZIONI<span class="animated-plus group-expanded:rotate" aria-hidden="true"></span> 2262 </summary> 2263 2264 <div class="header-sidebar__nested-linklist"><a href="/collections/decimo-canto" class="link-faded-reverse">Decimo Canto</a><a href="/collections/xxiv-canto" class="link-faded-reverse">XXIV Canto</a></div> 2265 </details> 2266 </accordion-disclosure></li></ul><div class="header-sidebar__promo scroll-area bleed md:unbleed"><a href="https://locman.myshopify.com/search?q=YACHTING&type=product" class="v-stack justify-items-center gap-4 sm:gap-5 group"><div class="overflow-hidden"><img src="//www.locman.it/cdn/shop/files/Locman_45_2.png?v=1780559666&width=1080" alt="" srcset="//www.locman.it/cdn/shop/files/Locman_45_2.png?v=1780559666&width=315 315w, //www.locman.it/cdn/shop/files/Locman_45_2.png?v=1780559666&width=630 630w, //www.locman.it/cdn/shop/files/Locman_45_2.png?v=1780559666&width=945 945w" width="1080" height="1350" loading="lazy" sizes="315px" class="zoom-image group-hover:zoom"></div><div class="v-stack text-center gap-0.5"><p class="h6">Montecristo Yachting</p></div></a><a href="https://www.locman.it/search?q=0563&type=product" class="v-stack justify-items-center gap-4 sm:gap-5 group"><div class="overflow-hidden"><img src="//www.locman.it/cdn/shop/files/Locman_45_15.png?v=1788945140&width=1080" alt="" srcset="//www.locman.it/cdn/shop/files/Locman_45_15.png?v=1788945140&width=315 315w, //www.locman.it/cdn/shop/files/Locman_45_15.png?v=1788945140&width=630 630w, //www.locman.it/cdn/shop/files/Locman_45_15.png?v=1788945140&width=945 945w" width="1080" height="1350" loading="lazy" sizes="315px" class="zoom-image group-hover:zoom"></div><div class="v-stack text-center gap-0.5"><p class="h6">Mare 563</p></div></a></div></div><div id="header-panel-3" class="header-sidebar__sub-panel" hidden> 2267 <button 2268 type="button" 2269 class="header-sidebar__back-button link-faded is-divided text-with-icon h6 md:hidden" 2270 data-ac
2270tion="close-panel" 2271 ><svg aria-hidden="true" focusable="false" fill="none" width="12" class="icon icon-chevron-left icon--direction-aware" viewBox="0 0 10 10"> 2272 <path d="M7 1 3 5l4 4" stroke="currentColor" stroke-linecap="square"/> 2273 </svg>Brand</button> 2274 2275 <ul class="header-sidebar__linklist divide-y unstyled-list" role="list"><li><a href="/pages/chi-siamo" class="header-sidebar__linklist-button h6">Chi Siamo</a></li><li><a href="/pages/il-tempo-della-natura" class="header-sidebar__linklist-button h6">Il Tempo della Natura</a></li><li><a href="/pages/tecnologie-e-private-label" class="header-sidebar__linklist-button h6">Tecnologia e Private Label</a></li></ul></div><div id="header-panel-4" class="header-sidebar__sub-panel" hidden> 2276 <button 2277 type="button" 2278 class="header-sidebar__back-button link-faded is-divided text-with-icon h6 md:hidden" 2279 data-action="close-panel" 2280 ><svg aria-hidden="true" focusable="false" fill="none" width="12" class="icon icon-chevron-left icon--direction-aware" viewBox="0 0 10 10"> 2281 <path d="M7 1 3 5l4 4" stroke="currentColor" stroke-linecap="square"/> 2282 </svg>Store</button> 2283 2284 <ul class="header-sidebar__linklist divide-y unstyled-list" role="list"><li><a href="/pages/store?stockist-filters=flt_9p5qynnp" class="header-sidebar__linklist-button h6">Boutique</a></li><li><a href="/pages/store?stockist-filters=flt_y3m8z4yp" class="header-sidebar__linklist-button h6">Concessionari</a></li></ul></div></div> 2285 </header-sidebar-collapsible-panel></header-sidebar> 2286</x-header> 2287</height-observer> 2288
2289<script> 2290 document.documentElement.style.setProperty('--header-height', `${document.getElementById('shopify-section-header-locman').clientHeight.toFixed(2)}px`); 2291</script>
2291 2292 2293</header> 2294<!-- BEGIN sections: overlay-group --> 2295 2296<!-- END sections: overlay-group --><main id="main" class="anchor"> 2297 <section id="shopify-section-template--28360936030541__main" class="shopify-section shopify-section--main-page"><style> 2298 /* --- REGOLE FONT E LAYOUT PERSONALIZZATE --- */ 2299 2300 /* 0. FORZA COLORE DI SFONDO DELLA PAGINA */ 2301 #shopify-section-template--28360936030541__main .color-scheme { 2302 background-color: #F8F8F8 !important; 2303 } 2304 2305 /* 1. Titolo PRINCIPALE della pagina a 30px, Font Gotham e centrato */ 2306 #shopify-section-template--28360936030541__main .section-header h1, 2307 #shopify-section-template--28360936030541__main .section-header .h2 { 2308 font-family: 'Gotham', sans-serif !important; 2309 font-size: 30px !important; 2310 line-height: 1.2 !important; 2311 text-transform: uppercase; 2312 letter-spacing: 2px; 2313 } 2314 2315 /* 2. Regole generali del testo a 16px, Gotham e interlinea ariosa */ 2316 #shopify-section-template--28360936030541__main .prose { 2317 font-family: 'Gotham', sans-serif !important; 2318 font-size: 16px !important; 2319 line-height: 2 !important; 2320 } 2321 2322 /* 3. TESTO STRETTO: Stringe i paragrafi al centro per ricreare l'effetto "colonna stretta" */ 2323 #shopify-section-template--28360936030541__main .prose p, 2324 #shopify-section-template--28360936030541__main .prose ul, 2325 #shopify-section-template--28360936030541__main .prose ol { 2326 max-width: 750px; 2327 margin-left: auto !important; 2328 margin-right: auto !important; 2329 } 2330 2331 /* 4. TITOLI INTERNI (h2, h3, ecc.): Li centriamo e gli diamo la stessa dimensione del titolo principale */ 2332 #shopify-section-template--28360936030541__main .prose h1, 2333 #shopify-section-template--28360936030541__main .prose h2, 2334 #shopify-section-template--28360936030541__main .prose h3, 2335 #shopify-section-template--28360936030541__main .prose h4, 2336 #shopify-section-template--28360936030541__main .prose h5, 2337 #shopify-section-template--28360936030541__main .prose h6 { 2338 max-width: 750px; 2339 margin-left: auto !important; 2340 margin-right: auto !important; 2341 text-align: center !important; 2342 font-family: 'Gotham', sans-serif !important; 2343 font-size: 30px !important; 2344 line-height: 1.3 !important; 2345 letter-spacing: 2px; 2346 text-transform: uppercase; 2347 margin-top: 60px !important; 2348 margin-bottom: 25px !important; 2349 } 2350
2351 /* 5. IMMAGINI LARGHE: Fa in modo che le immagini escano dalla colonna di testo */ 2352 #shopify-section-template--28360936030541__main .prose img, 2353 #shopify-section-template--28360936030541__main .prose figure, 2354 #shopify-section-template--28360936030541__main .prose iframe { 2355 max-width: 100% !important; 2356 width: 100% !important; 2357 height: auto !important; 2358 margin-top: 60px !important; 2359 margin-bottom: 60px !important; 2360 display: block; 2361 border-radius: 0 !important; 2362 } 2363</style> 2364 2365<div class="section-spacing section-spacing--tight color-scheme color-scheme--scheme-1 color-scheme--bg-609ecfcfee2f667ac6c12366fc6ece56"> 2366 <div class="container container--full"> 2367 <div class="section-stack"><div class="section-header justify-self-center text-center"> 2368 <h1 class="h2">STORE</h1> 2369 </div> 2370 <div class="prose"><!-- Start Stockist.co widget --> 2371<stockist-store-locator data-stockist-widget-tag="map_p3x8p863"> 2372 Loading store locator from <a href="https://stockist.co">Stockist store locator</a>... 2373</stockist-store-locator>
2374<script async src="https://stockist.co/embed/v1/widget.min.js"></script>
2374 2375<!-- End Stockist.co widget --></div></div> 2376 </div> 2377</div> 2378
2379<script> 2380 document.addEventListener("DOMContentLoaded", function() { 2381 if (window.location.search.indexOf('stockist-filters=flt_9p5qynnp') > -1) { 2382 var pageTitle = document.querySelector('#shopify-section-template--28360936030541__main .section-header h1'); 2383 if (pageTitle) { 2384 pageTitle.textContent = 'BOUTIQUE'; 2385 } 2386 } 2387 }); 2388</script>
2388 2389 2390</section><div id="shopify-section-template--28360936030541__trust_badges_locman_kPFehE" class="shopify-section"><style data-shopify>.trust-badges-template--28360936030541__trust_badges_locman_kPFehE { 2391 background-color: #F8F8F8; 2392 padding: 100px 0; 2393 width: 100%; 2394 } 2395 2396 .trust-badges__container { 2397 padding: 0 8%; 2398 margin: 0 auto; 2399 max-width: 100%; 2400 box-sizing: border-box; 2401 } 2402 2403 .trust-badges__inner { 2404 background-color: #FFFFFF; 2405 padding: 70px 40px; 2406 display: grid; 2407 grid-template-columns: repeat(4, 1fr); 2408 gap: 30px; 2409 text-align: center; 2410 } 2411 2412 .trust-badge-item { 2413 display: flex; 2414 flex-direction: column; 2415 align-items: center; 2416 } 2417 2418 /* Link wrapper per "Scoprilo in Gioielleria" */ 2419 .trust-badge-item--link { 2420 text-decoration: none; 2421 color: inherit; 2422 cursor: pointer; 2423 transition: opacity 0.3s ease; 2424 } 2425 2426 .trust-badge-item--link:hover { 2427 opacity: 0.7; 2428 } 2429 2430 .trust-badge__icon { 2431 margin-bottom: 25px; 2432 height: 35px; 2433 display: flex;
2434 align-items: center; 2435 justify-content: center; 2436 } 2437 2438 .trust-badge__icon svg { 2439 height: 100%; 2440 width: auto; 2441 stroke: #0D2340; 2442 fill: none; 2443 stroke-width: 1.2px; 2444 } 2445 2446 .trust-badge__title { 2447 text-align: center; 2448 font-family: 'Gotham', sans-serif; 2449 font-weight: 400; 2450 font-size: 13px; 2451 line-height: 18px; 2452 letter-spacing: 0.65px; 2453 color: #0D2340; 2454 text-transform: uppercase; 2455 margin: 0 0 10px 0; 2456 } 2457 2458 .trust-badge__text { 2459 text-align: center; 2460 font-family: 'Gotham', sans-serif; 2461 font-weight: 400; 2462 font-size: 12px; 2463 line-height: 16px; 2464 letter-spacing: 0.6px; 2465 color: #000000; 2466 max-width: 280px; 2467 margin: 0 auto; 2468 } 2469 2470 @media (max-width: 1024px) { 2471 .trust-badges__inner { padding: 50px 20px; } 2472 } 2473 2474 @media (max-width: 768px) { 2475 .trust-badges-template--28360936030541__trust_badges_locman_kPFehE { padding: 60px 0; } 2476 .trust-badges__inner { 2477 grid-template-columns: 1fr; 2478 gap: 50px; 2479 } 2480 .trust-badges__container { padding: 0 20px; } 2481 }</style><section class="trust-badges-template--28360936030541__trust_badges_locman_kPFehE"> 2482 <div class="trust-badges__container"> 2483 <div class="trust-badges__inner"> 2484 2485 <!-- 1. OROLOGERIA ITALIANA --> 2486 <div class="trust-badge-item"> 2487 <div class="trust-badge__icon"> 2488 <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 2489 <circle cx="12" cy="12" r="10" stroke-linecap="round"/> 2490 <path d="M12 6v6l4 2" stroke-linecap="round"/> 2491 </svg> 2492 </div><h3 class="trust-badge__title">OROLOGERIA ITALIANA</h3> 2493 <p class="trust-badge__text">Fondiamo tecnologia, creatività e<br>artigianato italiano</p></div> 2494 2495 <!-- 2. SPEDIZIONE GRATUITA --> 2496 <div class="trust-badge-item"> 2497 <div class="trust-badge__icon"> 2498 <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 2499 <rect x="1" y="8" width="15" height="10" rx="2" stroke-linecap="round"/> 2500 <circle cx="5.5" cy="18" r="2.5"/> 2501 <circle cx="11.5" cy="18" r="2.5"/> 2502 <path d="M16 13h3l3 3v3h-2" stroke-linecap="round" stroke-linejoin="round"/> 2503 <circle cx="19.5" cy="18" r="2.5"/> 2504 </svg> 2505 </div><h3 class="trust-badge__title">SPEDIZIONE GRATUITA</h3> 2506 <p class="trust-badge__text">La spedizione è gratuita<br>per gli orologi in Italia</p></div> 2507 2508 <!-- 3. RESO GRATUITO --> 2509 <div class="trust-badge-item"> 2510 <div class="trust-badge__icon"> 2511 <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 2512 <path d="M4 12a8 8 0 118 8" stroke-linecap="round"/> 2513 <path d="M1 12l3-3m-3 3l3 3" stroke-linecap="round" stroke-linejoin="round"/> 2514 </svg> 2515 </div><h3 class="trust-badge__title">RESO GRATUITO</h3> 2516 <p class="trust-badge__text">Reso facile e gratuito<br>entro 15 giorni</p></div> 2517 2518 <!-- 4. SCOPRILO IN GIOIELLERIA â LINK --> 2519 <a href="#" class="trust-badge-item trust-badge-item--link"> 2520 <div class="trust-badge__icon"> 2521 <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 2522 <path d="M3 21h18M5 21V7l8-4 8 4v14" stroke-linecap="round" stroke-linejoin="round"/> 2523 <path d="M9 10h6v4H9z" stroke-linecap="round"/> 2524 </svg> 2525 </div><h3 class="trust-badge__title">SCOPRILO IN GIOIELLERIA</h3> 2526 <p class="trust-badge__text">Vieni a scoprire dal vivo<br>i nostri orologi</p></a> 2527 2528 </div> 2529 </div> 2530</section> 2531 2532</div> 2533<footer id="shopify-section-footer-locman" class="shopify-section shopify-section--footer"><style> 2534 #shopify-section-footer-locman { 2535 --footer-content-justify-items: start; 2536 } 2537 2538 /* ============================================================================ 2539 OVERRIDES STRUTTURALI E TIPOGRAFICI LOCMAN FOOTER - FIX GRID 2540 ============================================================================== */ 2541 2542 #shopify-section-footer-locman .footer { 2543 background-color: #0D2340 !important; 2544 padding: 0 !important; 2545 border: none !important; 2546 } 2547 2548 #shopify-section-footer-locman .container { 2549 max-width: 100% !important; 2550 padding: 0 !important; 2551 margin: 0 !important; 2552 } 2553 2554 /* ========================================== 2555 GRIGLIA DESKTOP (4 COLONNE) 2556 ========================================== */ 2557 @media screen and (min-width: 1000px) { 2558 #shopify-section-footer-locman .footer__block-list { 2559 display: grid !important; 2560 grid-template-columns: 2.5fr 1fr 1fr 1fr !important; 2561 padding: 80px 8% 60px 8% !important; 2562 gap: 0 !important; 2563 } 2564 2565 #shopify-section-footer-locman .footer__block:nth-child(1) { grid-column: 1; grid-row: 1; margin-bottom: 20px; } 2566 #shopify-section-footer-locman .footer__block:nth-child(2) { grid-column: 1; grid-row: 2; padding-right: 40px; } 2567 #shopify-section-footer-locman .footer__block:nth-child(3) { grid-column: 2; grid-row: 1 / span 2; } 2568 #shopify-section-footer-locman .footer__block:nth-child(4) { grid-column: 3; grid-row: 1 / span 2; } 2569 #shopify-section-footer-locman .footer__block:nth-child(5) { grid-column: 4; grid-row: 1; } 2570 #shopify-section-footer-locman .footer__block:nth-child(6) { grid-column: 4; grid-row: 2; margin-top: 35px; } 2571 2572 /* RESET ACCORDION PER DESKTOP */ 2573 #shopify-section-footer-locman .custom-locman-accordion__summary { 2574 pointer-events: none !important; 2575 padding: 0 !important; 2576 margin-bottom: 25px !important; 2577 } 2578 #shopify-section-footer-locman .custom-locman-accordion__summary.h6 { 2579 margin-bottom: 25px !important; 2580 } 2581 #shopify-section-footer-locman .custom-locman-accordion__icon { display: none !important; } 2582 #shopify-section-footer-locman .custom-locman-accordion__content { 2583 display: block !important; 2584 padding-bottom: 0 !important; 2585 } 2586 } 2587 2588 /* ========================================== 2589 GRIGLIA MOBILE (1 COLONNA E ACCORDION CHIUSI) 2590 ========================================== */ 2591 @media screen and (max-width: 999px) { 2592 #shopify-section-footer-locman .footer__block-list { 2593 display: flex !important; 2594 flex-direction: column !important; 2595 padding: 60px 5% !important; 2596 gap: 0 !important; 2597 } 2598 2599 #shopify-section-footer-locman .footer__block { 2600 margin-bottom: 40px !important; 2601 } 2602 2603 /* I blocchi links si attaccano e formano la fisarmonica */ 2604 #shopify-section-footer-locman .footer__block--links { 2605 margin-bottom: 0 !important; 2606 border-bottom: 1px solid rgba(255, 255, 255, 0.2) !important; 2607 } 2608 2609 #shopify-section-footer-locman .footer__block--links:last-child { 2610 margin-bottom: 40px !important; 2611 } 2612 2613 #shopify-section-footer-locman .footer__block--links:first-of-type { 2614 border-top: 1px solid rgba(255, 255, 255, 0.2) !important; 2615 } 2616 2617 /* SU MOBILE IL CONTENUTO E' NASCOSTO FINCHE' NON SI APRE */ 2618 #shopify-section-footer-locman .custom-locman-accordion__content { 2619 display: none; 2620 padding-bottom: 20px !important; 2621 } 2622 #shopify-section-footer-locman .custom-locman-accordion.is-open .custom-locman-accordion__content { 2623 display: block; 2624 } 2625 } 2626 2627 /* ========================================== 2628 STILI ACCORDION BASE 2629 ========================================== */ 2630 #shopify-section-footer-locman .custom-locman-accordion { 2631 width: 100% !important; 2632 } 2633 2634 #shopify-section-footer-locman .custom-locman-accordion__summary { 2635 display: flex !important; 2636 justify-content: space-between !important;
2637 align-items: center !important; 2638 width: 100% !important; 2639 background: transparent !important; 2640 border: none !important; 2641 cursor: pointer !important; 2642 padding: 20px 0 !important; 2643 margin: 0 !important; 2644 list-style: none !important; 2645 } 2646 2647 #shopify-section-footer-locman .custom-locman-accordion__icon { 2648 transition: transform 0.3s ease !important; 2649 flex-shrink: 0 !important; 2650 } 2651 2652 #shopify-section-footer-locman .custom-locman-accordion.is-open .custom-locman-accordion__icon { 2653 transform: rotate(180deg) !important; 2654 } 2655 2656 #shopify-section-footer-locman .custom-locman-accordion__summary.h6 { 2657 margin-bottom: 0 !important; 2658 } 2659 2660 /* --- STILI TIPOGRAFICI E COLORI --- */ 2661 #shopify-section-footer-locman .footer__block .h6 { 2662 text-align: left !important; 2663 font-family: 'Gotham', sans-serif !important; 2664 font-style: normal !important; 2665 font-variant: normal !important; 2666 font-weight: normal !important; 2667 font-size: 13px !important; 2668 line-height: 18px !important; 2669 letter-spacing: 0.91px !important; 2670 color: #FFFFFF !important; 2671 text-transform: uppercase !important; 2672 opacity: 1 !important; 2673 margin-bottom: 25px !important; 2674 } 2675 2676 #shopify-section-footer-locman .footer__block .link-faded, 2677 #shopify-section-footer-locman .footer__block .prose, 2678 #shopify-section-footer-locman .footer__block .prose p, 2679 #shopify-section-footer-locman .footer__block .text-subdued { 2680 text-align: left !important; 2681 font-family: 'Gotham', sans-serif !important; 2682 font-style: normal !important; 2683 font-variant: normal !important; 2684 font-weight: normal !important; 2685 font-size: 11px !important; 2686 line-height: 26px !important; 2687 letter-spacing: 0.55px !important; 2688 color: #FFFFFF !important; 2689 opacity: 1 !important; 2690 text-decoration: none !important; 2691 } 2692 2693 #shopify-section-footer-locman .footer__block .link-faded:hover { 2694 opacity: 0.6 !important; 2695 } 2696 2697 /* --- FORM NEWSLETTER --- */ 2698 #shopify-section-footer-locman .footer__block .form input[type="email"] { 2699 background-color: transparent !important; 2700 border: 1px solid rgba(255, 255, 255, 0.4) !important; 2701 color: #FFFFFF !important; 2702 font-family: 'Gotham', sans-serif !important; 2703 font-size: 12px !important; 2704 padding: 12px 15px !important; 2705 border-radius: 0 !important; 2706 box-shadow: none !important; 2707 margin-bottom: 10px !important; 2708 display: block !important; 2709 width: 100% !important; 2710 max-width: 320px !important; 2711 } 2712 2713 #shopify-section-footer-locman .footer__block .form button { 2714 background-color: #FFFFFF !important; 2715 color: #0D2340 !important; 2716 font-family: 'Gotham', sans-serif !important; 2717 font-weight: 500 !important; 2718 font-size: 11px !important; 2719 letter-spacing: 1px !important; 2720 border-radius: 0 !important; 2721 padding: 12px 35px !important; 2722 text-transform: uppercase !important; 2723 border: none !important; 2724 width: auto !important; 2725 display: inline-block !important; 2726 } 2727 2728 /* --- ICONE SOCIAL --- */ 2729 #shopify-section-footer-locman .custom-social-wrapper { 2730 margin-top: 40px !important; 2731 } 2732 2733 #shopify-section-footer-locman .custom-social-wrapper .social-media { 2734 justify-content: flex-start !important; 2735 gap: 20px !important; 2736 } 2737 2738 #shopify-section-footer-locman .custom-social-wrapper svg { 2739 fill: #FFFFFF !important; 2740 width: 22px !important; 2741 height: 22px !important; 2742 } 2743 2744 /* --- FASCIA FINALE (FULL BLEED) --- */ 2745 #shopify-section-footer-locman .footer__aside { 2746 background-color: #07182E !important; 2747 width: 100% !important; 2748 margin: 0 !important; 2749 padding: 20px 8% !important; 2750 border: none !important; 2751 display: flex !important; 2752 flex-direction: column !important; 2753 align-items: center !important; 2754 justify-content: center !important; 2755 } 2756 2757 #shopify-section-footer-locman .footer__aside .footer__cookie-btn { 2758 font-family: 'Gotham', sans-serif !important; 2759 font-size: 11px !important; 2760 letter-spacing: 0.6px !important; 2761 color: rgba(255, 255, 255, 0.8) !important; 2762 text-decoration: underline !important; 2763 cursor: pointer !important; 2764 background: transparent !important; 2765 border: none !important; 2766 padding: 0 !important; 2767 transition: opacity 0.2s ease !important; 2768 } 2769
2770 #shopify-section-footer-locman .footer__aside .footer__cookie-btn:hover { 2771 opacity: 0.6 !important; 2772 } 2773 2774 #shopify-section-footer-locman .footer__aside p.heading { 2775 font-family: 'Gotham', sans-serif !important; 2776 font-size: 10px !important; 2777 color: rgba(255, 255, 255, 0.7) !important; 2778 text-align: center !important; 2779 letter-spacing: 0.5px !important; 2780 text-transform: none !important; 2781 margin: 0 !important; 2782 } 2783</style><div class="footer color-scheme color-scheme--scheme-2 color-scheme--bg-54922f2e920ba8346f6dc0fba343d673 "> 2784 <div class="container"> 2785 <div class="footer__inner"><div class="footer__block-list"><div class="footer__block footer__block--image" ><img src="//www.locman.it/cdn/shop/files/LOCMAN_ITALY_WHITE.png?v=1780499046&width=1477" alt="" srcset="//www.locman.it/cdn/shop/files/LOCMAN_ITALY_WHITE.png?v=1780499046&width=150 150w, //www.locman.it/cdn/shop/files/LOCMAN_ITALY_WHITE.png?v=1780499046&width=300 300w" width="1477" height="372" sizes="150px" style="--image-max-width: 150px" class="constrained-image"></div><div class="footer__block footer__block--newsletter" ><div class="v-stack gap-4 sm:gap-5"><div class="prose text-subdued"><p>Iscriviti alla nostra newsletter per novità e anteprime. </p></div><form method="post" action="/contact#newsletter-form-footer-locman" id="newsletter-form-footer-locman" accept-charset="UTF-8" class="form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="contact[tags]" value="newsletter"><div class="form-control" ><input 2786 id="input--footer-locman--contactemail" 2787 class="input" 2788 type="email" 2789 2790 dir="ltr" 2791 2792 2793 placeholder="E-mail" 2794 2795 2796 name="contact[email]" 2797 2798 2799 2800 2801 2802 autocomplete="email" 2803 2804 enterkeyhint="send" 2805 required 2806 2807 2808 2809 2810 ><label for="input--footer-locman--contactemail" class="floating-label text-xs">E-mail</label></div><div class="privacy-text-wrapper text-subdued" style="font-size: 11px; margin-top: 5px; margin-bottom: 15px;"><p style="margin: 0; line-height: 1.2;"><a href="/pages/privacy-policy" target="_blank" title="Privacy Policy">Privacy Policy</a></p></div><div class="align-self-start" style="margin-top: 10px;"> 2811<button type="submit" class="button" style="--button-background: 255 255 255;--button-outline-color: 255 255 255;" >Iscriviti alla newsletter</button></div></form><div class="custom-social-wrapper"></div></div></div><div class="footer__block footer__block--links" ><div class="v-stack gap-4 sm:gap-5"><div class="custom-locman-accordion"> 2812 <button type="button" class="custom-locman-accordion__summary h6"> 2813 <span>COLLEZIONI</span> 2814 <svg class="custom-locman-accordion__icon" width="12" height="8" viewBox="0 0 12 8" fill="none" xmlns="http://www.w3.org/2000/svg"> 2815 <path d="M1 1L6 6L11 1" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2816 </svg> 2817 </button> 2818 <div class="custom-locman-accordion__content"> 2819 <ul class="v-stack gap-2.5 unstyled-list" role="list"><li> 2820 <a href="/collections/1960" class="link-faded">1960</a> 2821 </li><li> 2822 <a href="/collections/aethalia" class="link-faded">Aethalia</a> 2823 </li><li> 2824 <a href="/collections/amerigo-vespucci" class="link-faded">Amerigo Vespucci</a> 2825 </li><li> 2826 <a href="/collections/amo" class="link-faded">Amo</a> 2827 </li><li> 2828 <a href="/collections/decimo-canto" class="link-faded">Decimo Canto</a> 2829 </li><li> 2830 <a href="/collections/ducati" class="link-faded">Ducati</a> 2831 </li><li> 2832 <a href="/collections/island" class="link-faded">Island</a> 2833 </li><li> 2834 <a href="/collections/montecristo-limited-edition" class="link-faded">Montecristo Limited Edition</a> 2835 </li><li> 2836 <a href="/collections/mare" class="link-faded">Mare</a> 2837 </li><li> 2838 <a href="/collections/montecristo" class="link-faded">Montecristo</a> 2839 </li><li> 2840 <a href="/collections/sport" class="link-faded">Sport</a> 2841 </li><li> 2842 <a href="/collections/stealth" class="link-faded">Stealth</a> 2843 </li></ul> 2844 </div> 2845 </div></div></div><div class="footer__block footer__block--links" ><div class="v-stack gap-4 sm:gap-5"><div class="custom-locman-accordion"> 2846 <button type="button" class="custom-locman-accordion__summary h6">
2847 <span>BRAND</span> 2848 <svg class="custom-locman-accordion__icon" width="12" height="8" viewBox="0 0 12 8" fill="none" xmlns="http://www.w3.org/2000/svg"> 2849 <path d="M1 1L6 6L11 1" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2850 </svg> 2851 </button> 2852 <div class="custom-locman-accordion__content"> 2853 <ul class="v-stack gap-2.5 unstyled-list" role="list"><li> 2854 <a href="/pages/chi-siamo" class="link-faded">L'azienda</a> 2855 </li><li> 2856 <a href="https://www.locman.it/pages/store?stockist-filters=flt_zpnzwj5p" class="link-faded">Centri assistenza</a> 2857 </li><li> 2858 <a href="https://shopify.com/96027836749/account/profile?locale=it®ion_country=US&buyer_flags=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI4enhpZDEta2QubXlzaG9waWZ5LmNvbSIsImZsYWdzIjpbXSwiZXhwIjoxNzkxNTMyMjQ4LCJuYmYiOjE3OTA5Mjc0NDh9.MlGSEdLWhJHvKYO4P5IAA6X7xvHbGvwlGFspl5JrlMA" class="link-faded">Area riservata</a> 2859 </li><li> 2860 <a href="/pages/tecnologie-e-private-label" class="link-faded">Tecnologie e Private Label</a> 2861 </li></ul> 2862 </div> 2863 </div></div></div><div class="footer__block footer__block--links" ><div class="v-stack gap-4 sm:gap-5"><div class="custom-locman-accordion"> 2864 <button type="button" class="custom-locman-accordion__summary h6"> 2865 <span>INFORMAZIONI</span> 2866 <svg class="custom-locman-accordion__icon" width="12" height="8" viewBox="0 0 12 8" fill="none" xmlns="http://www.w3.org/2000/svg"> 2867 <path d="M1 1L6 6L11 1" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2868 </svg> 2869 </button> 2870 <div class="custom-locman-accordion__content"> 2871 <ul class="v-stack gap-2.5 unstyled-list" role="list"><li> 2872 <a href="/pages/termini-e-condizioni" class="link-faded">Termini e Condizioni</a> 2873 </li><li> 2874 <a href="/pages/privacy-policy" class="link-faded">Privacy Policy</a> 2875 </li><li> 2876 <a href="/pages/cookie-policy" class="link-faded">Cookie Policy</a> 2877 </li><li> 2878 <a href="/pages/termini-e-uso-del-sito" class="link-faded">Termini e Uso del Sito</a> 2879 </li></ul> 2880 </div> 2881 </div></div></div><div class="footer__block footer__block--links" ><div class="v-stack gap-4 sm:gap-5"><div class="custom-locman-accordion"> 2882 <button type="button" class="custom-locman-accordion__summary h6"> 2883 <span>CONTATTI</span> 2884 <svg class="custom-locman-accordion__icon" width="12" height="8" viewBox="0 0 12 8" fill="none" xmlns="http://www.w3.org/2000/svg"> 2885 <path d="M1 1L6 6L11 1" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2886 </svg> 2887 </button> 2888 <div class="custom-locman-accordion__content"> 2889 <ul class="v-stack gap-2.5 unstyled-list" role="list"><li> 2890 <a href="/pages/contacts" class="link-faded">Contatti</a> 2891 </li><li> 2892 <a href="/pages/contacts" class="link-faded">Lavora con noi</a> 2893 </li></ul> 2894 </div> 2895 </div></div></div></div><div class="footer__aside"> 2896 <div style="margin-bottom: 14px; display: flex; gap: 20px; justify-content: center; align-items: center; flex-wrap: wrap;"> 2897 <button type="button"
2898 class="footer__cookie-btn" 2899 onclick="if(window.Shopify && window.Shopify.customerPrivacy){ window.Shopify.customerPrivacy.openPreferences(); }"> 2900 Preferenze Cookie 2901 </button> 2902 </div> 2903 <p class="heading text-subdued text-xxs"> 2904 © 2026 LOCMAN SPA Piazza G. da Verrazzano, 7 - 57034 Marina di Campo, ISOLA D'ELBA (LI), ITALY - P.I. 01190380491 - Capitale sociale 1.000.000,00 i.v. - Numero Reg. Imprese Maremma e Tirreno 08504700157 2905 </p> 2906 </div> 2907 </div> 2908 </div> 2909</div> 2910
2911<script> 2912 document.addEventListener('DOMContentLoaded', function() { 2913 var accordions = document.querySelectorAll('.custom-locman-accordion__summary'); 2914 accordions.forEach(function(acc) { 2915 acc.addEventListener('click', function(e) { 2916 if (window.innerWidth >= 1000) return; 2917 var wrapper = this.parentElement; 2918 wrapper.classList.toggle('is-open'); 2919 }); 2920 }); 2921 }); 2922</script>
2922 2923 2924</footer> 2925</main> 2926 2927
2927<script> 2928 window.GloboPreorderParams = window.GloboPreorderParams || {}; 2929 window.GloboPreorderParams.selectors = window.GloboPreorderParams.selectors || {}; 2930 window.GloboPreorderParams.selectors.productForm = []; 2931</script>
2931 2932 2933<style> 2934 .globo-preorder-button, 2935 .globo-backinstock-button, 2936 .globo-preorder, 2937 .globo-backinstock, 2938 [data-globo-preorder-btn], 2939 [data-globo-backinstock-btn], 2940 .globo-form, 2941 .globo-modal, 2942 .globo-backdrop, 2943 #globo-preorder-modal, 2944 #globo-backinstock-modal, 2945 #globo-preorder-backdrop { 2946 display: none !important; 2947 visibility: hidden !important; 2948 pointer-events: none !important; 2949 } 2950</style> 2951 2952 2953 2954 2955 2956 <div id="shopify-block-AV1c1MGppS3Bld2V0Z__1967102994182284862" class="shopify-block shopify-app-block"><!-- BEGIN app snippet: connected_sdk_script -->
2956<script src='https://www.paypalobjects.com/pa/js/min/pa.js'></script>
2956 2957
2958<script 2959 src='https://www.paypal.com/sdk/js?client-id=AbtXlp5R3xc83T9xW_ZXKTK8IVZ-14EMelDioU4VC285IqSuxUI4yotKxjV0sz_X6YsONYi10vSBPNKM&merchant-id=B28B73WV6U2FW&components=messages' 2960 data-namespace='PayPalSDK' 2961 data-partner-attribution-id='JADEDPIXEL_SHOPPINGCART_EC_CA' 2962></script>
2962 2963<!-- END app snippet --><!-- BEGIN app snippet: utils -->
2963<script> 2964 // ============================================ 2965 // Core Utilities 2966 // ============================================ 2967 2968 // Setup FPTI Analytics 2969 if (PAYPAL && PAYPAL.analytics) { 2970 PAYPAL.analytics.setup({ 2971 data: { 2972 pgrp: 'shopify:messaging:app-embed', 2973 comp: 'shopify-app-embed', 2974 }, 2975 }); 2976 } 2977 2978 const recordEvent = (event_name, additionalData) => { 2979 PAYPAL.analytics.instance.recordEvent(event_name, { 2980 theme: window?.Shopify?.theme?.name || 'unknown', 2981 shop: window?.Shopify?.shop || 'unknown', 2982 path: window.location.pathname, 2983 flow: 'Shopify - Pay Later', 2984 space_key: 'SKD8GM', 2985 ...additionalData, 2986 }); 2987 }; 2988 2989 // In Theme Editor when using Advanced Settings 2990 // User chooses copy as JS Path from their browser 2991 // The pasted value will be a string that contains "document.querySelector("...") 2992 // Remove document.querySelector(" and ") 2993 // Using JS Path we can ensure the path to the element is accurate 2994 const parseSelector = (selector) => { 2995 try { 2996 // Handle both single and double quotes 2997 return selector 2998 .replace(/document\.querySelector\(["']/g, '') 2999 .replace(/["']\)/g, ''); 3000 } catch (e) { 3001 recordEvent('appEmbed:parseSelector:error', { error: e.message }); 3002 } 3003 }; 3004 3005 // Waits for Element to be rendered 3006 // Uses mutation observer to watch for changes in the DOM 3007 // https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver 3008 // On changes, check for the selector again 3009 const waitForElement = (selector) => { 3010 try { 3011 return new Promise((resolve) => { 3012 const existing = document.querySelector(selector); 3013 if (existing) return resolve(existing); 3014 3015 const observer = new MutationObserver(() => { 3016 const el = document.querySelector(selector); 3017 if (el) { 3018 observer.disconnect(); 3019 resolve(el); 3020 } 3021 }); 3022 3023 observer.observe(document.body, { 3024 childList: true, 3025 subtree: true, 3026 }); 3027 }); 3028 } catch (e) { 3029 recordEvent('appEmbed:waitForElement:error', { error: e.message }); 3030 } 3031 }; 3032 3033 // Formats correct cart/drawer subtotal and adds or updates messaging 3034 const addOrUpdateMessagingPriceAttribute = async (price, locator, messaging) => { 3035 try { 3036 // Format price to 2 decimal places ex: 150000 => 1500.00 3037 // Messaging requires price to be in string format 3038 const formattedPrice = Number((price / 100).toFixed(2)).toString(); 3039 3040 const messagingId = messaging.id; 3041 const existingMessaging = document.getElementById(messagingId); 3042 3043 if (existingMessaging) { 3044 // Update the data-pp-amount attribute on the existing element 3045 existingMessaging.setAttribute('data-pp-amount', formattedPrice); 3046 } else { 3047 const element = await waitForElement(locator); 3048 3049 const updatedPriceMessaging = messaging.cloneNode(); 3050 updatedPriceMessaging.setAttribute('data-pp-amount', formattedPrice); 3051 3052 element.after(updatedPriceMessaging); 3053 } 3054 } catch (e) { 3055 recordEvent('appEmbed:addOrUpdateMessagingPriceAttribute:error', { error: e.message }); 3056 } 3057 }; 3058 3059 // Fetches cart details from Shopify cart endpoint 3060 const fetchCartDetails = async () => { 3061 try { 3062 const response = await fetch('/cart.js'); 3063 const cart = await response.json(); 3064 3065 return cart.total_price; 3066 } catch (e) { 3067 recordEvent('appEmbed:fetchCartDetails:error', { error: e.message }); 3068 } 3069 }; 3070 3071 // Fetches variant details Shopify product endpoint 3072 // https://shopify.dev/docs/api/ajax/reference/product 3073 const fetchVariant = async () => { 3074 try { 3075 // Ex: https://test-store.myshopify.com/products/the-multi-location-snowboard?variant=45268551368883 3076 const urlParams = new URLSearchParams(window.location.search); 3077 const urlVariantId = parseInt(urlParams.get('variant'), 10); 3078 const productHandle = window.location.pathname.split('/products/')[1]?.split('?')[0]; 3079 3080 const response = await fetch(`/products/${productHandle}.js`); 3081 const productData = await response.json(); 3082 const variants = productData.variants; 3083 const selectedVariant = variants.find(v => v.id === urlVariantId); 3084 3085 if (selectedVariant) { 3086 return selectedVariant; 3087 } 3088 3089 return variants.find(v => v.available) || variants[0]; 3090 } catch (e) { 3091 recordEvent('appEmbed:fetchVariant:error', { error: e.message }); 3092 } 3093 }; 3094 3095 // Get the selected variant ID from URL, form input, or select element
3096 const getSelectedVariantId = () => { 3097 try { 3098 const urlParams = new URLSearchParams(window.location.search); 3099 const urlVariant = urlParams.get('variant'); 3100 if (urlVariant) return parseInt(urlVariant, 10); 3101 3102 const formInput = document.querySelector('form[action*="/cart/add"] input[name="id"]'); 3103 if (formInput?.value) return parseInt(formInput.value, 10); 3104 3105 const selectInput = document.querySelector('form[action*="/cart/add"] select[name="id"]'); 3106 if (selectInput?.value) return parseInt(selectInput.value, 10); 3107 3108 return null; 3109 } catch (e) { 3110 recordEvent('appEmbed:getSelectedVariantId:error', { error: e.message }); 3111 return null; 3112 } 3113 }; 3114 3115 const getShopifyData = () => { 3116 try { 3117 const selectedVariantId = getSelectedVariantId(); 3118 3119 const findVariant = (variants) => { 3120 if (!variants?.length) return null; 3121 if (selectedVariantId) { 3122 const selected = variants.find(v => v.id === selectedVariantId); 3123 if (selected) return selected; 3124 } 3125 return variants.find(v => v.available) || variants[0]; 3126 }; 3127 3128 if (window.meta?.product) { 3129 const product = window.meta.product; 3130 const variant = findVariant(product.variants); 3131 return { 3132 product: { title: product.title, vendor: product.vendor, type: product.type, id: product.id }, 3133 price: variant ? { 3134 priceInCents: variant.price, 3135 compareAtPrice: variant.compare_at_price, 3136 currency: window.Shopify?.currency?.active || 'USD', 3137 variantId: variant.id, 3138 variantTitle: variant.title 3139 } : null 3140 }; 3141 } 3142 3143 if (window.ShopifyAnalytics?.meta?.product) { 3144 const product = window.ShopifyAnalytics.meta.product; 3145 const variant = findVariant(product.variants); 3146 return { 3147 product: { title: product.title, vendor: product.vendor, id: product.id }, 3148 price: variant ? { 3149 priceInCents: variant.price, 3150 currency: window.Shopify?.currency?.active || 'USD', 3151 variantId: variant.id 3152 } : null 3153 }; 3154 } 3155 3156 return null; 3157 } catch (e) { 3158 recordEvent('appEmbed:getShopifyData:error', { error: e.message }); 3159 return null; 3160 } 3161 }; 3162 3163 // Generic function to watch for changes in the DOM 3164 // and listen for specific API calls made by the Shopify store 3165 // Callback provides specific logic for handling the response 3166 const watchForChanges = (locator, messaging, callback) => { 3167 try { 3168 // Overrides the native `fetch` function to listen for specific API calls. 3169 // Wrapped in an Immediately Invoked Function Expression (IIFE) 3170 // To avoid polluting the global namespace. 3171 (function (window, windowFetch) { 3172 // Check if `fetch` is a function. If not, exit early. 3173 if (typeof fetch !== 'function') return; 3174 3175 window.fetch = function () { 3176 // Call the original `fetch` function with the provided arguments. 3177 const response = windowFetch.apply(this, arguments); 3178 3179 response.then(async (res) => { 3180 if (typeof callback === 'function') { 3181 callback(res, locator, messaging); 3182 } 3183 }); 3184 3185 // Return the original `fetch` response. 3186 return response; 3187 }; 3188 })(window, window.fetch); 3189 } catch (e) { 3190 recordEvent('appEmbed:watchForChanges:error', { error: e.message }); 3191 } 3192 }; 3193 3194 // Provides ability to watch for cart changes 3195 // such as increment, decrement, or remove items 3196 // Also handles adding new items which opens Cart Drawer 3197 // and updates the messaging with the new cart total 3198 // This function is used for both Cart Drawer and Cart Page 3199 const watchForCartChanges = (locator, messaging) => { 3200 const cartChangeCallback = async (res, locator, messaging) => { 3201 // Determine the id of messaging div either #paypal-upstream-messaging-cart-{page | drawer} 3202 const messagingId = messaging.id; 3203 3204 // Changes (e.g., increment, decrement, or remove items). 3205 if (res.url.includes('/cart/change')) { 3206 // Clone the response to read its JSON data without consuming the original response. 3207 res 3208 .clone() 3209 .json() 3210 .then((data) => { 3211 addOrUpdateMessagingPriceAttribute(data.total_price, locator, messaging); 3212 }); 3213 3214 // Called when adding a new item which opens Cart Drawer 3215 } else if (res.url.includes('/cart/add')) { 3216 // Adding items does not return the updated cart details, 3217 // Fetch the updated cart details (e.g., total_price). 3218 const updatedPrice = await fetchCartDetails(); 3219 3220 // Introduce a delay to handle potential race conditions where the cart drawer has not rendered yet. 3221 setTimeout(async () => { 3222 await addOrUpdateMessagingPriceAttribute(updatedPrice, locator, messaging); 3223 }, 500); 3224 } 3225 }; 3226 3227 watchForChanges(locator, messaging, cartChangeCallback); 3228 }; 3229
3230 // Provides ability to watch for product specific changes 3231 // such as variant selection on product pages 3232 const watchForProductChanges = (locator, messaging) => { 3233 let lastVariantId = new URLSearchParams(window.location.search).get('variant'); 3234 3235 const handleVariantChange = async () => { 3236 const currentVariantId = new URLSearchParams(window.location.search).get('variant'); 3237 if (currentVariantId && currentVariantId !== lastVariantId) { 3238 lastVariantId = currentVariantId; 3239 3240 const newVariantData = await fetchVariant(); 3241 const newPriceInCents = newVariantData?.price; 3242 3243 if (newPriceInCents) { 3244 await addOrUpdateMessagingPriceAttribute(newPriceInCents, locator, messaging); 3245 } else { 3246 recordEvent('appEmbed:watchForProductChanges:error:noNewVariantPrice'); 3247 } 3248 } 3249 }; 3250 3251 // Shopify themes can either handle variant changes on the client-side or server-side (via variant API calls) 3252 // We will "intercept" and handle variant changes by: 3253 // 1. Watching for URL changes 3254 const _pushState = history.pushState.bind(history); 3255 const _replaceState = history.replaceState.bind(history); 3256 3257 history.pushState = function (...args) { 3258 _pushState(...args); 3259 handleVariantChange(); 3260 }; 3261 3262 history.replaceState = function (...args) { 3263 _replaceState(...args); 3264 handleVariantChange(); 3265 }; 3266 3267 // 2. Watching for back/forward browser clicks 3268 window.addEventListener('popstate', handleVariantChange); 3269 3270 // 3. Fallback: Watching for variant API calls 3271 // Future optimization: This fallback could be removed if all Shopify themes can be handled with 1. and 2. 3272 const productChangeCallback = async (res, locator, messaging) => { 3273 if (res.url.includes('/variants')) { 3274 await handleVariantChange(); 3275 return; 3276 } 3277 }; 3278 3279 watchForChanges(locator, messaging, productChangeCallback); 3280 }; 3281</script>
3281 3282<!-- END app snippet --><!-- BEGIN app snippet: price-detection -->
3282<script> 3283 // ============================================ 3284 // Price Detection & Element Scoring 3285 // Depends on: utils.liquid (recordEvent, getShopifyData) 3286 // ============================================ 3287 3288 const extractPriceFromText = (text) => { 3289 const match = text.match(/[\d,]+\.?\d*/); 3290 if (!match) return null; 3291 return parseFloat(match[0].replace(/,/g, '')); 3292 }; 3293 3294 const textMatchesPrice = (text, knownPriceInCents) => { 3295 const extracted = extractPriceFromText(text); 3296 if (extracted === null) return false; 3297 const knownPrice = knownPriceInCents / 100; 3298 return Math.abs(extracted - knownPrice) < 0.01; 3299 }; 3300 3301 const hasStrikethrough = (element) => { 3302 let el = element; 3303 while (el && el !== document.body) { 3304 const style = getComputedStyle(el); 3305 if (style.textDecoration.includes('line-through') || 3306 style.textDecorationLine?.includes('line-through')) { 3307 return true; 3308 } 3309 if (['S', 'DEL', 'STRIKE'].includes(el.tagName)) { 3310 return true; 3311 } 3312 el = el.parentElement; 3313 } 3314 return false; 3315 }; 3316 3317 // Find the add-to-cart button. Result is cached since the button doesn't change per page load. 3318 let _cachedAddToCartButton; 3319 const findAddToCartButton = () => { 3320 if (_cachedAddToCartButton !== undefined) return _cachedAddToCartButton; 3321 try { 3322 const formButton = document.querySelector('form[action*="/cart/add"] button[type="submit"]'); 3323 if (formButton) return (_cachedAddToCartButton = formButton); 3324 3325 const buttons = document.querySelectorAll('button'); 3326 for (const btn of buttons) { 3327 const text = btn.textContent.toLowerCase(); 3328 if (text.includes('add to cart') || text.includes('add to bag') || 3329 text.includes('buy now') || text.includes('add to basket')) { 3330 return (_cachedAddToCartButton = btn); 3331 } 3332 } 3333 3334 return (_cachedAddToCartButton = null); 3335 } catch (e) { 3336 recordEvent('appEmbed:findAddToCartButton:error', { error: e.message }); 3337 return (_cachedAddToCartButton = null); 3338 } 3339 }; 3340 3341 // Find element containing specific text (used for product title proximity). 3342 // Result is cached per text string â title is static per page load and scoreElement 3343 // calls this once per candidate, so without caching it's O(candidates) full DOM walks. 3344 let _titleElementCache = {}; 3345 const findElementContainingText = (text) => { 3346 if (text in _titleElementCache) return _titleElementCache[text]; 3347 try { 3348 const normalizedText = text.toLowerCase().trim(); 3349 const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT); 3350 3351 let node; 3352 while (node = walker.nextNode()) { 3353 const nodeText = node.textContent.trim().toLowerCase(); 3354 if (nodeText.length > 5 && normalizedText.includes(nodeText.substring(0, 20))) { 3355 const el = node.parentElement; 3356 const rect = el.getBoundingClientRect(); 3357 if (rect.width > 0 && rect.height > 0) { 3358 const fontSize = parseFloat(getComputedStyle(el).fontSize); 3359 if (fontSize >= 16) return (_titleElementCache[text] = el); 3360 } 3361 } 3362 } 3363 return (_titleElementCache[text] = null); 3364 } catch (e) { 3365 return null; 3366 } 3367 }; 3368 3369 const getViewportThresholds = () => { 3370 const vh = window.innerHeight; 3371 const isMobile = window.innerWidth < 768; 3372 3373 return { 3374 position: [[vh * 0.6, 50], [vh * 1.2, 30], [vh * 2.0, 10]], 3375 fontSize: [ 3376 [isMobile ? 18 : 24, 40], 3377 [isMobile ? 14 : 18, 25], 3378 [isMobile ? 12 : 14, 10], 3379 ], 3380 proximity: { 3381 close: isMobile ? 60 : 100, 3382 medium: isMobile ? 120 : 200, 3383 far: isMobile ? 240 : 400, 3384 }, 3385 }; 3386 }; 3387 3388 const getTieredScore = (value, tiers, defaultScore = 0) => { 3389 for (const [threshold, points] of tiers) { 3390 if (value < threshold) return points; 3391 } 3392 return defaultScore; 3393 }; 3394 3395 // Scores a DOM element on how likely it is to be the product's main price. 3396 // Higher score = better candidate. Factors: 3397 // - Position on page (elements higher up score better) 3398 // - Font size (larger text = more likely a displayed price) 3399 // - Proximity to product title and add-to-cart button 3400 // - Structural exclusions (footer/header/nav/hidden = heavy penalty) 3401 // - Strikethrough detection (compare-at prices = heavy penalty) 3402 const scoreElement = (element, productMeta = null, debug = false) => { 3403 let score = 0; 3404 const breakdown = debug ? {} : null; 3405 const { position, fontSize, proximity } = getViewportThresholds(); 3406 const { close, medium, far } = proximity; 3407 const rect = element.getBoundingClientRect(); 3408 3409 // POSITION ON PAGE 3410 const absoluteTop = rect.top + window.scrollY; 3411 const posScore = getTieredScore(absoluteTop, position, -30); 3412 score += posScore; 3413 if (debug) breakdown.position = `${posScore >= 0 ? '+' : ''}${posScore} (top ${Math.round(absoluteTop)}px)`; 3414 3415 // FONT SIZE 3416 const fontPx = parseFloat(getComputedStyle(element).fontSize); 3417 const fontScore = fontSize.find(([t]) => fontPx >= t)?.[1] ?? -10; 3418 score += fontScore; 3419 if (debug) breakdown.fontSize = `${fontScore >= 0 ? '+' : ''}${fontScore} (${fontPx}px)`; 3420 3421 // PROXIMITY TO PRODUCT TITLE 3422 if (productMeta?.title) { 3423 const titleElement = findElementContainingText(productMeta.title); 3424 if (titleElement) { 3425 const distance = Math.abs(titleElement.getBoundingClientRect().bottom - rect.top); 3426 const titleScore = getTieredScore(distance, [[close, 40], [medium, 25], [far, 10]], 0); 3427 score += titleScore; 3428 if (debug) breakdown.titleProximity = `+${titleScore} (${Math.round(distance)}px)`; 3429 } else if (debug) { 3430 breakdown.titleProximity = 'title element not found'; 3431 } 3432 } else if (debug) { 3433 breakdown.titleProximity = 'no product title'; 3434 } 3435 3436 // PROXIMITY TO ADD-TO-CART BUTTON 3437 const addButton = findAddToCartButton(); 3438 if (addButton) { 3439 const distance = Math.abs(addButton.getBoundingClientRect().top - rect.top); 3440 const cartScore = getTieredScore(distance, [[close, 30], [medium, 20], [far, 10]], 0); 3441 score += cartScore; 3442 if (debug) breakdown.cartProximity = `+${cartScore} (${Math.round(distance)}px)`; 3443 } else if (debug) { 3444 breakdown.cartProximity = 'add-to-cart not found'; 3445 } 3446 3447 // STRUCTURAL EXCLUSIONS 3448 const exclusions = [ 3449 ['footer, header, nav', 'in footer/header/nav'], 3450 ['button, a[href*="/cart"], [type="submit"]', 'in button/link'], 3451 ['[aria-hidden="true"], [hidden], .hidden, .visually-hidden', 'hidden'], 3452 ]; 3453 for (const [selector, reason] of exclusions) { 3454 if (element.closest(selector)) { 3455 score -= 100; 3456 if (debug) breakdown.structural = `-100 (${reason})`; 3457 break; 3458 } 3459 } 3460 if (debug && !breakdown.structural) breakdown.structural = '+0'; 3461 3462 // STRIKETHROUGH 3463 if (hasStrikethrough(element)) { 3464 score -= 100; 3465 if (debug) breakdown.strikethrough = '-100 (compare-at price)'; 3466 } else if (debug) { 3467 breakdown.strikethrough = '+0'; 3468 } 3469 3470 if (debug) { 3471 breakdown.totalScore = score; 3472 breakdown.elementText = element.textContent.trim().substring(0, 30); 3473 breakdown.elementTag = element.tagName; 3474 } 3475 3476 return debug ? { score, breakdown } : score; 3477 }; 3478 3479 // Find all elements containing a specific price value 3480 const findElementsWithPrice = (knownPriceInCents, productMeta = null, debug = false, log = () => {}) => { 3481 const candidates = []; 3482 const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT); 3483 3484 let node; 3485 while (node = walker.nextNode()) { 3486 const text = node.textContent.trim(); 3487 if (text.length > 30 || !textMatchesPrice(text, knownPriceInCents)) continue; 3488 3489 const element = node.parentElement; 3490 const rect = element.getBoundingClientRect(); 3491 3492 if (rect.width === 0 || rect.height === 0 || hasStrikethrough(element)) continue; 3493 3494 const score = scoreElement(element, productMeta, false); 3495 candidates.push({ element, text, score }); 3496 } 3497 3498 if (debug && candidates.length > 0) { 3499 candidates.sort((a, b) => b.score - a.score); 3500 log(` Candidates: ${candidates.length}, top: score=${candidates[0].score}, text="${candidates[0].text}"`); 3501 } 3502 3503 return candidates; 3504 }; 3505 3506 // Find the /cart/add form by traversing from the price element 3507 // This is more reliable than name-based container detection since all Shopify themes have this form 3508 const findCartFormFromPrice = (priceElement, debug = false, log = () => {}) => { 3509 let el = priceElement; 3510 3511 while (el && el !== document.body) { 3512 if (el.tagName === 'FORM' && el.action?.includes('/cart/add')) { 3513 if (debug) log(` Found /cart/add form (element itself)`); 3514 return el; 3515 } 3516 3517 let sibling = el.nextElementSibling; 3518 while (sibling) { 3519 if (sibling.tagName === 'FORM' && sibling.action?.includes('/cart/add')) { 3520 if (debug) log(` Found /cart/add form as sibling`); 3521 return sibling; 3522 } 3523 // Check if sibling contains the form 3524 const formInSibling = sibling.querySelector('form[action*="/cart/add"]'); 3525 if (formInSibling) { 3526 if (debug) log(` Found /cart/add form inside sibling`); 3527 return formInSibling; 3528 } 3529 sibling = sibling.nextElementSibling; 3530 } 3531 3532 el = el.parentElement; 3533 } 3534 3535 if (debug) log(` No /cart/add form found`); 3536 return null; 3537 }; 3538 3539 // Fallback: walk up from the price text element to find a suitable wrapper. 3540 // Used when no /cart/add form exists near the price element. 3541 const findPriceContainer = (priceElement) => { 3542 let el = priceElement; 3543 let bestContainer = priceElement; 3544 3545 while (el && el !== document.body) { 3546 // Look for elements with price-related IDs (common Shopify pattern) 3547 if (el.id && /price/i.test(el.id)) { 3548 bestContainer = el; 3549 } 3550 // Look for elements with price-related classes that seem like containers 3551 if (el.className && typeof el.className === 'string') { 3552 const classes = el.className.toLowerCase(); 3553 if (/\bprice\b/.test(classes) && !/price-item|price__regular|price__sale/.test(classes)) { 3554 bestContainer = el; 3555 } 3556 } 3557 // Stop at major structural elements 3558 if (el.tagName === 'SECTION' || el.tagName === 'ARTICLE' || el.tagName === 'MAIN') { 3559 break; 3560 } 3561 el = el.parentElement; 3562 } 3563 3564 return bestContainer; 3565 }; 3566 3567 // Try common Shopify theme price selectors (Dawn and derivatives) 3568 const findPriceByTemplateSelector = (debug = false, log = () => {}) => { 3569 const selectors = [ 3570 '[id*="price-template"]', // Dawn theme pattern 3571 '.price-item--regular:not(s):not(del)',
3572 '[data-product-price]', 3573 ]; 3574 3575 for (const selector of selectors) { 3576 const el = document.querySelector(selector); 3577 if (el && !hasStrikethrough(el)) { 3578 if (debug) log(`Template selector found: ${selector}`); 3579 return el; 3580 } 3581 } 3582 return null; 3583 }; 3584 3585 // Check if we're in an isolated/sandboxed iframe (theme editor) 3586 const isIsolatedContext = () => { 3587 if (window === window.top) return false; // Not in iframe 3588 try { 3589 // Try to access parent - if cross-origin, we're isolated 3590 const test = window.parent.document; 3591 return false; // Can access parent, not isolated 3592 } catch (e) { 3593 return true; // Cross-origin, we're isolated 3594 } 3595 }; 3596 3597 // Try to find price element in sibling iframes (theme editor workaround) 3598 const findPriceInSiblingIframes = (knownPriceInCents) => { 3599 const iframes = document.querySelectorAll('iframe'); 3600 3601 for (const iframe of iframes) { 3602 try { 3603 const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document; 3604 if (!iframeDoc) continue; 3605 3606 const priceElement = iframeDoc.querySelector('.price-item, .price, [data-product-price]'); 3607 if (priceElement) { 3608 return { element: priceElement, document: iframeDoc }; 3609 } 3610 } catch (e) { 3611 // Cross-origin iframe, skip 3612 } 3613 } 3614 3615 return null; 3616 }; 3617 3618 // Helper: Insert messaging near a price element (before cart form or after price container). 3619 // Returns the price container element used as the logical anchor. 3620 const insertMessagingNearPrice = (priceElement, messaging, debug = false, log = () => {}) => { 3621 const cartForm = findCartFormFromPrice(priceElement, debug, log); 3622 const container = findPriceContainer(priceElement); 3623 if (cartForm) { 3624 cartForm.before(messaging.cloneNode()); 3625 if (debug) log('Inserted messaging before /cart/add form'); 3626 } else { 3627 container.after(messaging.cloneNode()); 3628 if (debug) log('Inserted after price container (no form found)'); 3629 } 3630 return container; 3631 }; 3632 3633 // Insert messaging after price element 3634 const insertMessagingWithRetry = (shopifyData, messaging, debug = false, log = () => {}) => { 3635 // Skip visual preview iframe 3636 if (window.location.search.includes('source=visualPreviewInitialLoad')) return; 3637 if (document.querySelector('#paypal-upstream-messaging-product')) return; 3638 3639 const liquidPriceInCents = shopifyData?.price?.priceInCents; 3640 const isIsolated = isIsolatedContext(); 3641 3642 if (debug) { 3643 log('=== Price Detection ==='); 3644 log(`Context: ${isIsolated ? 'Theme Editor' : 'Live Storefront'}`); 3645 log(`Price: ${liquidPriceInCents} cents ($${(liquidPriceInCents / 100).toFixed(2)})`); 3646 } 3647 3648 // Priority 1: Template selectors (common theme patterns like Dawn) 3649 const templateElement = findPriceByTemplateSelector(debug, log); 3650 if (templateElement) { 3651 return insertMessagingNearPrice(templateElement, messaging, debug, log); 3652 } 3653 3654 // Priority 2: Scoring-based price detection 3655 const priceElement = findPriceElement(shopifyData, debug, log); 3656 if (priceElement) { 3657 return insertMessagingNearPrice(priceElement, messaging, debug, log); 3658 } 3659 3660 // Priority 3: Sibling iframes (theme editor only) 3661 if (isIsolated) { 3662 const siblingResult = findPriceInSiblingIframes(liquidPriceInCents); 3663 if (siblingResult) { 3664 return insertMessagingNearPrice(siblingResult.element, messaging, debug, log); 3665 } 3666 } 3667 3668 if (!isIsolated) { 3669 log('Could not find price element. Consider using Advanced Settings with a custom selector.'); 3670 } 3671 return null; 3672 }; 3673 3674 const findPriceElement = (shopifyData = null, debug = false, log = () => {}) => { 3675 try { 3676 const knownPriceInCents = shopifyData?.price?.priceInCents; 3677 const productMeta = shopifyData?.product; 3678 3679 if (debug) log(`findPriceElement: ${knownPriceInCents} cents`); 3680 3681 if (knownPriceInCents) { 3682 const candidates = findElementsWithPrice(knownPriceInCents, productMeta, debug, log); 3683 if (candidates.length > 0) { 3684 candidates.sort((a, b) => b.score - a.score); 3685 if (debug) log(` â FOUND (score=${candidates[0].score})`); 3686 return candidates[0].element; 3687 } 3688 } 3689 3690 if (debug) log(' â null (no candidates)'); 3691 return null; 3692 } catch (e) { 3693 if (debug) log(` â Error: ${e.message}`); 3694 recordEvent('appEmbed:findPriceElement:error', { error: e.message }); 3695 return null; 3696 } 3697 }; 3698</script>
3698 3699<!-- END app snippet --><!-- BEGIN app snippet: navigator-panel --><template id="pp-nav-template"> 3700 <style> 3701 /* --- Floating placement panel shell --- */ 3702 #pp-nav-panel { 3703 position: fixed; 3704 top: 50%; 3705 left: 20px; 3706 transform: translateY(-50%); 3707 background: #fff; 3708 border-radius: 12px; 3709 font-family: system-ui, -apple-system, sans-serif; 3710 font-size: 13px; 3711 z-index: 999999; 3712 width: 340px; 3713 box-shadow: 0 8px 32px rgba(0,0,0,0.18); 3714 overflow: hidden; 3715 transition: transform 0.3s ease, height 0.3s ease; 3716 } 3717 #pp-nav-panel.minimized { 3718 display: none; 3719 } 3720 3721 /* --- Minimized pill button --- */ 3722 #pp-nav-pill { 3723 position: fixed; 3724 bottom: 20px; 3725 left: 20px; 3726 background: #003087; 3727 color: #fff; 3728 border: none; 3729 border-radius: 24px; 3730 padding: 10px 18px; 3731 font-family: system-ui, -apple-system, sans-serif; 3732 font-size: 13px; 3733 font-weight: 600; 3734 cursor: pointer; 3735 z-index: 999999; 3736 box-shadow: 0 4px 16px rgba(0,48,135,0.3); 3737 display: none; 3738 align-items: center; 3739 gap: 8px; 3740 transition: box-shadow 0.2s; 3741 } 3742 #pp-nav-pill:hover { 3743 box-shadow: 0 6px 20px rgba(0,48,135,0.45); 3744 } 3745 3746 /* --- Header --- */ 3747 .pp-panel-header { 3748 background: #003087; 3749 color: #fff; 3750 padding: 14px 16px; 3751 display: flex; 3752 align-items: center; 3753 justify-content: space-between; 3754 } 3755 .pp-panel-title { 3756 font-size: 14px; 3757 font-weight: 700; 3758 margin: 0; 3759 letter-spacing: 0.01em; 3760 } 3761 .pp-minimize-btn { 3762 background: none; 3763 border: none; 3764 color: rgba(255,255,255,0.8); 3765 cursor: pointer; 3766 font-size: 18px; 3767 line-height: 1; 3768 padding: 2px; 3769 border-radius: 4px; 3770 transition: color 0.15s; 3771 } 3772 .pp-minimize-btn:hover { 3773 color: #fff; 3774 } 3775 3776 /* --- Panel body --- */ 3777 .pp-panel-content { 3778 padding: 16px; 3779 } 3780 3781 /* --- Step info boxes --- */ 3782 .pp-step-box { 3783 border-radius: 8px; 3784 padding: 10px 12px; 3785 font-size: 12px; 3786 line-height: 1.5; 3787 margin-bottom: 12px; 3788 display: flex; 3789 align-items: flex-start; 3790 gap: 8px; 3791 } 3792 .pp-step-box.blue { 3793 background: #e8f4fd; 3794 border: 1px solid #b8dff5; 3795 color: #0a5a96; 3796 } 3797 .pp-step-box.green { 3798 background: #e6f9ee; 3799 border: 1px solid #a3e4b8; 3800 color: #1a7a3a; 3801 } 3802 .pp-step-text { 3803 flex: 1; 3804 } 3805 .pp-step-text p { 3806 margin: 0 0 8px 0; 3807 } 3808 .pp-step-text p:last-child { 3809 margin-bottom: 0; 3810 } 3811 .pp-step-text strong { 3812 display: block; 3813 font-size: 12px; 3814 margin-bottom: 2px; 3815 } 3816 .pp-step-dismiss { 3817 background: none; 3818 border: none; 3819 color: inherit; 3820 opacity: 0.5; 3821 cursor: pointer; 3822 font-size: 16px; 3823 line-height: 1; 3824 padding: 0; 3825 flex-shrink: 0; 3826 } 3827 .pp-step-dismiss:hover { 3828 opacity: 1; 3829 } 3830 3831 /* --- Warning banners --- */ 3832 .pp-warning { 3833 background: #fff3cd; 3834 border: 1px solid #ffc107; 3835 border-radius: 8px; 3836 padding: 10px 12px; 3837 margin-bottom: 12px; 3838 font-size: 12px; 3839 color: #856404; 3840 line-height: 1.4; 3841 } 3842 .pp-warning-icon { 3843 margin-right: 4px; 3844 } 3845 3846 /* --- Pick placement + copy actions --- */ 3847 .pp-pick-btn { 3848 width: 100%; 3849 padding: 12px; 3850 border: 2px solid #0070ba; 3851 border-radius: 8px; 3852 background: #0070ba; 3853 color: #fff; 3854 cursor: pointer; 3855 font-size: 13px; 3856 font-weight: 600; 3857 transition: all 0.15s; 3858 display: flex; 3859 align-items: center; 3860 justify-content: center; 3861 gap: 8px; 3862 } 3863 .pp-pick-btn:hover { 3864 opacity: 0.9; 3865 } 3866 .pp-pick-btn.active { 3867 background: #f0f7ff; 3868 color: #0070ba; 3869 border-color: #b8dff5; 3870 } 3871 .pp-pick-btn.active:hover { 3872 background: #e0efff; 3873 } 3874 3875 /* --- Copy button --- */ 3876 #pp-apply-btn { 3877 width: 100%; 3878 background: #28a745; 3879 color: #fff; 3880 border: none; 3881 padding: 12px; 3882 border-radius: 8px; 3883 font-weight: 600; 3884 cursor: pointer; 3885 font-size: 13px; 3886 transition: all 0.2s; 3887 display: none; 3888 align-items: center; 3889 justify-content: center; 3890 gap: 8px; 3891 margin-top: 12px; 3892 } 3893 #pp-apply-btn:hover { 3894 opacity: 0.9; 3895 } 3896 #pp-apply-btn.applied { 3897 background: #28a745; 3898 } 3899 3900 /* --- Step 2 confirmation --- */ 3901 #pp-step2 { 3902 display: none; 3903 margin-top: 18px; 3904 } 3905 </style> 3906 <div class='pp-panel-header'> 3907 <div class='pp-panel-title'>PayPal Pay Later Messaging</div> 3908 <button class='pp-minimize-btn' id='pp-collapse-btn' title='Minimize panel'>▾</button> 3909 </div> 3910 <div class='pp-panel-content'> 3911 <div id='pp-warning' class='pp-warning' style='display: none;'></div> 3912 <div id='pp-inspector-warning' class='pp-warning' style='display: none;'></div> 3913 <div class='pp-step-box blue' id='pp-step1'>
3914 <span class='pp-step-text' 3915 ><strong>Step 1: Choose message placement</strong> 3916 Click the button below and then hover over your page to select a placement. 3917 </span> 3918 </div> 3919 <button id='pp-pick-btn' class='pp-pick-btn'>◎ Start Picking Placement</button 3920 ><button id='pp-apply-btn'>Copy Current Placement</button> 3921 <div id='pp-step2' style='display:none;'> 3922 <div class='pp-step-box green'> 3923 <span class='pp-step-text' 3924 ><strong>Step 2: Paste and save</strong> 3925 <p style='margin: 0 0 8px 0;'> 3926 You have copied the placement for the <b id='pp-context-name'>Product Page</b>. 3927 </p> 3928 <p style='margin: 0;'> 3929 Go back to the App Embeds section, and in the Paypal Advanced Settings, paste the copied value into the 3930 <b id='pp-selector-name'>Product Page</b> field and click the 'Save' button in the top right corner. 3931 </p></span 3932 ><button class='pp-step-dismiss' id='pp-step2-dismiss' title='Dismiss'>×</button> 3933 </div> 3934 </div> 3935 </div> 3936</template> 3937<!-- END app snippet --><!-- BEGIN app snippet: navigator -->
3937<script> 3938 // ============================================ 3939 // DOM Traversal Controls for Theme Editor 3940 // Depends on: price-detection.liquid (isIsolatedContext) 3941 // ============================================ 3942 3943 const OVERLAY_STYLE = 3944 'position:fixed;pointer-events:none;background:rgba(255,152,0,0.12);border:2px solid rgba(255,152,0,0.6);z-index:999998;display:none;'; 3945 const OVERLAY_LABEL_STYLE = 3946 'position:absolute;bottom:100%;left:-2px;background:#f57c00;color:#fff;font:10px system-ui;padding:2px 6px;border-radius:3px 3px 0 0;white-space:nowrap;'; 3947 const COPY_BUTTON_LABEL = 'Copy Current Placement'; 3948 const COPIED_BUTTON_LABEL = 'Placement Copied!'; 3949 3950 const isInOverlay = (el) => { 3951 while (el && el !== document.body) { 3952 if (getComputedStyle(el).position === 'fixed') return true; 3953 el = el.parentElement; 3954 } 3955 return false; 3956 }; 3957 3958 // Position a fixed overlay to cover a target element 3959 const positionOverlayOnElement = (overlay, el) => { 3960 const rect = el.getBoundingClientRect(); 3961 Object.assign(overlay.style, { 3962 top: rect.top + 'px', 3963 left: rect.left + 'px', 3964 width: rect.width + 'px', 3965 height: rect.height + 'px', 3966 display: 'block', 3967 }); 3968 }; 3969 3970 // Module-level refs for global listeners added by createNavigationPanel. 3971 // Stored here so they can be removed if the panel is re-initialized. 3972 let _panelInspectorActivate = null; 3973 let _panelInspectorDeactivate = null; 3974 let _highlightedElement = null; 3975 let _panelPickModeCleanup = null; 3976 3977 // Detect UID pattern in ID (Shopify's --suffix or long numeric/hex suffixes) 3978 const hasUid = (id) => { 3979 if (!id) return false; 3980 if (/--/.test(id)) return true; 3981 return /[-_](\d{5,}|[a-f0-9]{8,})$/i.test(id); 3982 }; 3983 const getIdPrefix = (id) => { 3984 if (id.includes('--')) return id.split('--')[0]; 3985 const match = id.match(/^(.+?)[-_](\d{5,}|[a-f0-9]{8,})$/i); 3986 return match ? match[1] : null; 3987 }; 3988 const getMeaningfulClasses = (el) => { 3989 if (!el.className || typeof el.className !== 'string') return []; 3990 return el.className.trim().split(/\s+/).filter(c => 3991 c && !c.startsWith('_') && !c.startsWith('js-') && 3992 c.length < 30 && !/^[a-f0-9]{6,}$/i.test(c) && !/^[A-Z]/.test(c) 3993 ); 3994 }; 3995 const isUnique = (selector) => document.querySelectorAll(selector).length === 1; 3996 3997 // Returns null if no unique selector can be generated 3998 const generateSelector = (element) => { 3999 if (!element || element === document.body || element === document.documentElement) { 4000 return null; 4001 } 4002 const classes = getMeaningfulClasses(element); 4003 4004 // Priority 1: Clean ID 4005 if (element.id && !hasUid(element.id)) return `#${element.id}`; 4006 4007 // Priority 2: ID with UID â attribute wildcard selector 4008 if (element.id && hasUid(element.id)) { 4009 const prefix = getIdPrefix(element.id); 4010 if (prefix) { 4011 const selector = `[id^="${prefix}-"]`; 4012 if (isUnique(selector)) return selector; 4013 } 4014 } 4015 4016 // Priority 3: Unique class 4017 for (const cls of classes) { 4018 if (isUnique('.' + cls)) return '.' + cls; 4019 } 4020 4021 // Priority 4: Ancestor + target class combinations (walk up to 5 levels) 4022 if (classes.length > 0) { 4023 let ancestor = element.parentElement; 4024 let depth = 0; 4025 while (ancestor && ancestor !== document.body && ancestor !== document.documentElement && depth < 5) { 4026 const ancClasses = getMeaningfulClasses(ancestor); 4027 if (ancClasses.length > 0) { 4028 const s1 = `.${ancClasses[0]} .${classes[0]}`; 4029 if (isUnique(s1)) return s1; 4030 const s2 = `.${ancClasses[0]} > .${classes[0]}`; 4031 if (isUnique(s2)) return s2; 4032 } 4033 if (ancestor.id && !hasUid(ancestor.id)) { 4034 const s3 = `#${ancestor.id} .${classes[0]}`; 4035 if (isUnique(s3)) return s3; 4036 } 4037 ancestor = ancestor.parentElement; 4038 depth++; 4039 } 4040 } 4041 4042 // NO FALLBACK - return null if no unique selector exists 4043 return null; 4044 }; 4045 const hasSpecificSelector = (el) => generateSelector(el) !== null; 4046 const shouldSkipElement = (el) => { 4047 if (!el || el.hidden) return true; 4048 if (['SCRIPT', 'STYLE', 'TEMPLATE'].includes(el.tagName)) return true; 4049 if ( 4050 el.closest('#pp-nav-panel') || 4051 el.closest('#pp-nav-pill') || 4052 el.closest('#pp-pick-overlay') 4053 ) 4054 return true; 4055 if (el.hasAttribute('data-pp-message')) return true; 4056 if (!hasSpecificSelector(el)) return true; 4057 return false;
4058 }; 4059 const resolveContextName = (providedContextName, messagingTemplate) => { 4060 if (providedContextName && providedContextName !== 'this area') return providedContextName; 4061 const id = messagingTemplate?.id || ''; 4062 if (id.includes('cart-drawer')) return 'Cart Drawer'; 4063 if (id.includes('cart')) return 'Cart Page'; 4064 if (id.includes('product')) return 'Product Page'; 4065 return 'this area'; 4066 }; 4067 4068 // Called when the cart drawer closes (via IntersectionObserver in cartDrawer.liquid) 4069 // and at the start of createNavigationPanel to tear down any existing instance. 4070 // Cleans up pick mode listeners, DOM elements, highlights, and preview clones. 4071 const destroyNavigationPanel = () => { 4072 if (_panelPickModeCleanup) { 4073 _panelPickModeCleanup(); 4074 _panelPickModeCleanup = null; 4075 } 4076 document.getElementById('pp-nav-panel')?.remove(); 4077 document.getElementById('pp-nav-pill')?.remove(); 4078 const preview = document.querySelector('[id$="-preview"][data-pp-message]'); 4079 if (preview) preview.remove(); 4080 if (_highlightedElement) { 4081 _highlightedElement.style.outline = ''; 4082 _highlightedElement.style.outlineOffset = ''; 4083 _highlightedElement = null; 4084 } 4085 if (_panelInspectorActivate) { 4086 document.removeEventListener('shopify:inspector:activate', _panelInspectorActivate); 4087 document.removeEventListener('shopify:inspector:deactivate', _panelInspectorDeactivate); 4088 _panelInspectorActivate = _panelInspectorDeactivate = null; 4089 } 4090 document.documentElement.style.cursor = ''; 4091 }; 4092 4093 const createNavigationPanel = ( 4094 initialElement, 4095 messagingTemplate, 4096 warningMessage = null, 4097 contextName = 'this area', 4098 ) => {
4099 let currentTarget = initialElement; 4100 let resolvedContextName = resolveContextName(contextName, messagingTemplate); 4101 destroyNavigationPanel(); 4102 4103 const panel = document.createElement('div'); 4104 panel.id = 'pp-nav-panel'; 4105 const tmpl = document.getElementById('pp-nav-template'); 4106 panel.appendChild(tmpl.content.cloneNode(true)); 4107 4108 // Create minimized pill button (separate from panel) 4109 const pill = document.createElement('button'); 4110 pill.id = 'pp-nav-pill'; 4111 pill.innerHTML = 'PayPal Pay Later Messaging'; 4112 const applyBtn = panel.querySelector('#pp-apply-btn'); 4113 const warningEl = panel.querySelector('#pp-warning'); 4114 const step2 = panel.querySelector('#pp-step2'); 4115 const step2Dismiss = panel.querySelector('#pp-step2-dismiss'); 4116 const contextEl = panel.querySelector('#pp-context-name'); 4117 const selectorEl = panel.querySelector('#pp-selector-name'); 4118 const updateContextUI = (newContext) => { 4119 resolvedContextName = newContext; 4120 if (contextEl) contextEl.textContent = resolvedContextName; 4121 if (selectorEl) { 4122 selectorEl.textContent = resolvedContextName; 4123 } 4124 }; 4125 updateContextUI(resolvedContextName); 4126 const detectContextFromElement = (el) => { 4127 if (el.closest('#CartDrawer, .drawer, .cart-drawer, [id*="cart-drawer"], [class*="cart-drawer"]')) 4128 return 'Cart Drawer'; 4129 if (window.location.pathname.endsWith('/cart') || el.closest('.cart, #cart, #main-cart-items, #main-cart-footer')) 4130 return 'Cart Page'; 4131 return 'Product Page'; 4132 }; 4133 4134 // Show warning message if provided 4135 if (warningMessage && warningEl) { 4136 warningEl.innerHTML = `<span class="pp-warning-icon">â ï¸</span>${warningMessage}`; 4137 warningEl.style.display = 'block'; 4138 } 4139 let isInitialRender = true; 4140 const updateUI = () => { 4141 // Highlight element 4142 highlightElement(currentTarget); 4143 // Update button states 4144 applyBtn.textContent = COPY_BUTTON_LABEL; 4145 applyBtn.classList.remove('applied'); 4146 // Reposition messaging â skip on initial render (already placed correctly by auto-detection) 4147 if (!isInitialRender) repositionMessaging(); 4148 isInitialRender = false;
4149 }; 4150 4151 const highlightElement = (el) => { 4152 if (_highlightedElement) { 4153 _highlightedElement.style.outline = ''; 4154 _highlightedElement.style.outlineOffset = ''; 4155 } 4156 _highlightedElement = el; 4157 if (el) { 4158 el.style.outline = '2px solid rgba(255,152,0,0.6)'; 4159 el.style.outlineOffset = '-1px'; 4160 } 4161 }; 4162 4163 const repositionMessaging = () => { 4164 if (!currentTarget) return; 4165 const existing = document.getElementById(messagingTemplate.id); 4166 const targetInOverlay = isInOverlay(currentTarget); 4167 const msgInOverlay = existing && isInOverlay(existing); 4168 if (targetInOverlay !== msgInOverlay) { 4169 // Cross-context: reposition messaging in the target's context without touching the original 4170 const allMessaging = document.querySelectorAll('[data-pp-message]'); 4171 let contextMsg = null; 4172 for (const el of allMessaging) { 4173 if (isInOverlay(el) === targetInOverlay) { contextMsg = el; break; } 4174 } 4175 if (!contextMsg) { 4176 contextMsg = messagingTemplate.cloneNode(true); 4177 contextMsg.id = messagingTemplate.id + '-preview'; 4178 } 4179 contextMsg.remove(); 4180 currentTarget.after(contextMsg); 4181 return; 4182 } 4183 if (existing) existing.remove(); 4184 const newMessaging = messagingTemplate.cloneNode(true); 4185 currentTarget.after(newMessaging); 4186 }; 4187 4188 const collapseBtn = panel.querySelector('#pp-collapse-btn'); 4189 const pickBtn = panel.querySelector('#pp-pick-btn'); 4190 let pickMode = false; 4191 let pickHoverTarget = null; 4192 let pickOverlay = null; 4193 let pickLabel = null; 4194 let applyBtnResetTimer = null; 4195 let _pickRafId = null; 4196 4197 const enterPickMode = () => { 4198 pickMode = true; 4199 document.documentElement.style.cursor = 'crosshair'; 4200 pickBtn.classList.add('active'); 4201 pickBtn.innerHTML = 'â Pick a spot on the page...'; 4202 applyBtn.textContent = COPY_BUTTON_LABEL; 4203 applyBtn.classList.remove('applied'); 4204 applyBtn.style.display = 'flex'; 4205 step2.style.display = 'none'; 4206 if (contextEl) contextEl.textContent = resolvedContextName; 4207 // Create overlay for highlighting (pointer-events:none prevents interference) 4208 pickOverlay = document.createElement('div'); 4209 pickOverlay.id = 'pp-pick-overlay'; 4210 pickOverlay.style.cssText = OVERLAY_STYLE; 4211 pickLabel = document.createElement('div'); 4212 pickLabel.style.cssText = OVERLAY_LABEL_STYLE; 4213 pickOverlay.appendChild(pickLabel); 4214 document.body.appendChild(pickOverlay); 4215 4216 document.addEventListener('mousemove', onPickHover, true); 4217 document.addEventListener('click', onPickClick, true); 4218 document.addEventListener('mousedown', onPickSuppressEvent, true); 4219 document.addEventListener('pointerdown', onPickSuppressEvent, true); 4220 }; 4221 4222 const exitPickMode = () => { 4223 pickMode = false; 4224 document.documentElement.style.cursor = ''; 4225 pickBtn.classList.remove('active'); 4226 pickBtn.innerHTML = 'â Start Picking Placement'; 4227 applyBtn.style.display = 'none'; 4228 // Remove overlay 4229 const overlay = document.getElementById('pp-pick-overlay'); 4230 if (overlay) overlay.remove(); 4231 pickOverlay = null; 4232 pickLabel = null; 4233 pickHoverTarget = null; 4234 4235 if (_pickRafId) { cancelAnimationFrame(_pickRafId); _pickRafId = null; } 4236 document.removeEventListener('mousemove', onPickHover, true); 4237 document.removeEventListener('click', onPickClick, true); 4238 document.removeEventListener('mousedown', onPickSuppressEvent, true); 4239 document.removeEventListener('pointerdown', onPickSuppressEvent, true); 4240 }; 4241 4242 // Find the nearest visible child element to cursor coordinates 4243 const snapToNearestChild = (parent, cx, cy) => { 4244 const children = parent.children; 4245 if (!children.length) return null; 4246 let best = null; 4247 let bestDist = 30; 4248 for (const child of children) { 4249 if (shouldSkipElement(child)) continue; 4250 const r = child.getBoundingClientRect(); 4251 if (r.width === 0 || r.height === 0) continue; 4252 const dx = cx < r.left ? r.left - cx : cx > r.right ? cx - r.right : 0; 4253 const dy = cy < r.top ? r.top - cy : cy > r.bottom ? cy - r.bottom : 0; 4254 const dist = Math.sqrt(dx * dx + dy * dy); 4255 if (dist < bestDist) { 4256 bestDist = dist; 4257 best = child; 4258 } 4259 } 4260 return best; 4261 }; 4262 4263 const onPickHover = (e) => { 4264 if (_pickRafId) return; 4265 _pickRafId = requestAnimationFrame(() => { 4266 _pickRafId = null; 4267 let el = document.elementFromPoint(e.clientX, e.clientY); 4268 if (!el || shouldSkipElement(el)) { 4269 document.documentElement.style.cursor = 'not-allowed'; 4270 if (pickOverlay) pickOverlay.style.display = 'none'; 4271 pickHoverTarget = null; 4272 return; 4273 } 4274 4275 if (el.children.length > 0) { 4276 const snapped = snapToNearestChild(el, e.clientX, e.clientY); 4277 if (snapped) el = snapped; 4278 } 4279 4280 // Skip elements without a unique selector 4281 if (shouldSkipElement(el)) { 4282 document.documentElement.style.cursor = 'not-allowed'; 4283 pickHoverTarget = null; 4284 if (pickOverlay) pickOverlay.style.display = 'none'; 4285 return; 4286 } 4287 document.documentElement.style.cursor = 'crosshair'; 4288 if (el === pickHoverTarget) return; 4289 pickHoverTarget = el; 4290 positionOverlayOnElement(pickOverlay, el);
4291 pickLabel.innerHTML = 'Select this placement'; 4292 }); 4293 }; 4294 4295 const onPickSuppressEvent = (e) => { 4296 if (e.target.closest('#pp-nav-panel')) return; 4297 e.preventDefault(); 4298 e.stopPropagation(); 4299 }; 4300 4301 const onPickClick = (e) => { 4302 if (e.target.closest('#pp-nav-panel')) return; 4303 e.preventDefault(); 4304 e.stopPropagation(); 4305 e.stopImmediatePropagation(); 4306 if (pickHoverTarget && !shouldSkipElement(pickHoverTarget)) { 4307 currentTarget = pickHoverTarget; 4308 updateContextUI(detectContextFromElement(currentTarget)); 4309 updateUI(); 4310 } 4311 }; 4312 4313 // --- Pick button --- 4314 pickBtn.addEventListener('click', () => { 4315 if (pickMode) exitPickMode(); 4316 else enterPickMode(); 4317 }); 4318 4319 _panelPickModeCleanup = () => { if (pickMode) exitPickMode(); }; 4320 4321 // --- Minimize / expand --- 4322 collapseBtn.addEventListener('click', () => { 4323 if (pickMode) exitPickMode(); 4324 panel.classList.add('minimized'); 4325 pill.style.display = 'flex'; 4326 highlightElement(null); 4327 }); 4328 pill.addEventListener('click', () => { 4329 panel.classList.remove('minimized'); 4330 pill.style.display = 'none'; 4331 highlightElement(currentTarget); 4332 }); 4333 4334 // --- Step 2 dismiss --- 4335 step2Dismiss.addEventListener('click', () => { 4336 step2.style.display = 'none'; 4337 }); 4338 4339 // Handle copy button click 4340 panel.addEventListener('click', async (e) => { 4341 const button = e.target.closest('#pp-apply-btn'); 4342 if (!button) return; 4343 // Skip buttons handled separately 4344 if (button.id === 'pp-collapse-btn' || button.id === 'pp-pick-btn' || button.id === 'pp-step2-dismiss') return; 4345 if (button.id === 'pp-apply-btn') { 4346 const selector = generateSelector(currentTarget); 4347 if (!selector) return; 4348 let copied = false; 4349 try { 4350 // Try multiple copy methods (iframe security blocks clipboard API) 4351 if (navigator.clipboard?.writeText) { 4352 await navigator.clipboard.writeText(selector); 4353 copied = true; 4354 } 4355 } catch {} 4356 if (!copied) { 4357 try { 4358 const ta = document.createElement('textarea'); 4359 ta.value = selector; 4360 ta.style.position = 'fixed'; 4361 ta.style.opacity = '0'; 4362 document.body.appendChild(ta); 4363 ta.select(); 4364 copied = document.execCommand('copy'); 4365 ta.remove(); 4366 } catch {} 4367 } 4368 if (copied) { 4369 applyBtn.textContent = COPIED_BUTTON_LABEL; 4370 applyBtn.classList.add('applied'); 4371 if (applyBtnResetTimer) clearTimeout(applyBtnResetTimer); 4372 applyBtnResetTimer = setTimeout(() => { 4373 applyBtn.textContent = COPY_BUTTON_LABEL; 4374 applyBtn.classList.remove('applied'); 4375 applyBtnResetTimer = null; 4376 }, 1200); 4377 // Show Step 2 confirmation 4378 step2.style.display = 'block'; 4379 } 4380 exitPickMode(); 4381 } 4382 }); 4383 4384 // --- Inspector mode detection --- 4385 const inspectorWarning = panel.querySelector('#pp-inspector-warning'); 4386 let inspectorActive = typeof Shopify !== 'undefined' && Shopify.inspectMode; 4387 const isMac = navigator.platform?.startsWith('Mac') || navigator.userAgentData?.platform === 'macOS'; 4388 const shortcut = isMac ? 'â â§ I' : 'Ctrl + Shift + I'; 4389 const enableInspectorMode = () => { 4390 inspectorActive = true; 4391 inspectorWarning.innerHTML = `<span class="pp-warning-icon">â ï¸</span> For a better experience, press <strong>${shortcut}</strong> to turn off inspector mode`; 4392 inspectorWarning.style.display = 'block'; 4393 }; 4394 const disableInspectorMode = () => { 4395 inspectorActive = false; 4396 inspectorWarning.style.display = 'none'; 4397 }; 4398 _panelInspectorActivate = enableInspectorMode; 4399 _panelInspectorDeactivate = disableInspectorMode; 4400 document.addEventListener('shopify:inspector:activate', enableInspectorMode); 4401 document.addEventListener('shopify:inspector:deactivate', disableInspectorMode); 4402 4403 // Prevent panel/pill clicks from closing cart drawer (themes close drawer on outside mousedown) 4404 const stopBubble = (e) => e.stopPropagation(); 4405 panel.addEventListener('mousedown', stopBubble); 4406 panel.addEventListener('pointerdown', stopBubble); 4407 pill.addEventListener('mousedown', stopBubble); 4408 pill.addEventListener('pointerdown', stopBubble); 4409 4410 document.body.appendChild(panel); 4411 document.body.appendChild(pill); 4412 if (inspectorActive) enableInspectorMode(); 4413 updateUI(); 4414 return panel; 4415 }; 4416</script>
4416 4417<!-- END app snippet --><!-- BEGIN app snippet: cartDrawer -->
4417<script> 4418 // Determine correct locator by theme name 4419 const cartDrawerThemeName = window.Shopify.theme.name; 4420 let cartDrawerLocator, cartDrawerNodeToObserve, cartDrawerMutationNode; 4421 4422 switch (cartDrawerThemeName) { 4423 // to support other themes add cases 4424 // default case supports Shopify Free themes 4425 default: 4426 cartDrawerLocator = '.cart-drawer__footer .totals'; 4427 cartDrawerNodeToObserve = '#CartDrawer'; 4428 cartDrawerMutationNode = 'drawer__inner'; 4429 break; 4430 } 4431 // Begin Upstream Messaging Implementation 4432 try { 4433 const cartDrawerMessaging = document.createElement('div'); 4434 const price = 0 / 100; 4435 4436 const cartDrawerAttributes = { 4437 'id': 'paypal-upstream-messaging-cart-drawer', 4438 'data-pp-message': '', 4439 'data-pp-placement': 'cart', 4440 'data-pp-style-layout': 'text', 4441 'data-pp-style-text-align': 'right', 4442 'data-pp-style-logo-type': "inline", 4443 'data-pp-style-text-color': "black", 4444 'data-pp-style-text-size': "12", 4445 'data-pp-style-logo-position': "", 4446 'data-pp-amount': price, 4447 }; 4448 4449 Object.keys(cartDrawerAttributes).forEach((key) => { 4450 cartDrawerMessaging.setAttribute(key, cartDrawerAttributes[key]); 4451 }); 4452 4453 const advancedSettingsEnabled = 'false' === 'true'; 4454 const customCartDrawerSelector = ''.trim(); 4455 4456 if (advancedSettingsEnabled && customCartDrawerSelector !== '') { 4457 // utils.liquid 4458 cartDrawerLocator = parseSelector(customCartDrawerSelector); 4459 } 4460 4461 if ("enabled" === 'enabled') { 4462 waitForElement(cartDrawerLocator).then(elem => { 4463 elem.after(cartDrawerMessaging.cloneNode()); 4464 4465 if (advancedSettingsEnabled && isIsolatedContext() && !document.getElementById('pp-nav-panel')) { 4466 let drawerPanelActive = false; 4467 new IntersectionObserver((entries) => { 4468 if (entries[0].isIntersecting) { 4469 if (!document.getElementById('pp-nav-panel')) { 4470 setTimeout(() => { 4471 if (!document.getElementById('pp-nav-panel')) { 4472 createNavigationPanel(elem, cartDrawerMessaging, null, 'Cart Drawer'); 4473 drawerPanelActive = true; 4474 } 4475 }, 300); 4476 } 4477 } else if (drawerPanelActive) { 4478 destroyNavigationPanel(); 4479 drawerPanelActive = false; 4480 } 4481 }, { threshold: 0.1 }).observe(elem); 4482 } 4483 }); 4484 4485 // Custom selector not found â show navigator with warning when drawer opens 4486 if (advancedSettingsEnabled && customCartDrawerSelector && !document.querySelector(cartDrawerLocator) && isIsolatedContext() && !document.getElementById('pp-nav-panel')) { 4487 const drawerContainer = document.querySelector(cartDrawerNodeToObserve); 4488 if (drawerContainer) { 4489 let warningPanelActive = false; 4490 const warning = 'Selected placement not found on this page. Please choose an element that is present on all page templates.'; 4491 recordEvent('appEmbed:advanced-settings-selector-not-found', { locator: cartDrawerLocator }); 4492 new IntersectionObserver((entries) => { 4493 if (entries[0].isIntersecting) { 4494 if (!document.getElementById('pp-nav-panel')) { 4495 setTimeout(() => { 4496 if (!document.getElementById('pp-nav-panel')) { 4497 createNavigationPanel(drawerContainer, cartDrawerMessaging, warning, 'Cart Drawer'); 4498 warningPanelActive = true; 4499 } 4500 }, 300); 4501 } 4502 } else if (warningPanelActive) { 4503 destroyNavigationPanel(); 4504 warningPanelActive = false; 4505 } 4506 }, { threshold: 0.1 }).observe(drawerContainer); 4507 } 4508 } 4509 4510 // utils.liquid 4511 watchForCartChanges(cartDrawerLocator, cartDrawerMessaging); 4512 } 4513 } catch (e) { 4514 // utils.liquid 4515 recordEvent('appEmbed:query-selector-not-found-cart-drawer', { locator: cartDrawerLocator, error: e.message }); 4516 } 4517 </script>
4517 4518<!-- END app snippet --> 4519 4520 4521</div>
4521<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
4521 4522</body> 4523</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.