PageSourceSearch

https://stata-brazil.com/customer/account/login/referer/aHR0cHM6Ly…F6aWwuY29tL2N1c3RvbWVyL2FjY291bnQvaW5kZXgv/

html stata-brazil.com collected 2026-10-09 23:21:40 UTC 408,740 bytes, 6,998 lines download raw bytes

1<!doctype html>
2<html lang="pt">
3<head >
3<script nonce="anZ5bmpyamN1NW5oZGptNHRkaDRwbzJ1b3QwdjBtNjk=">(() => {
4    let mstCookieService = {
5        allCookiesByGroups: {"1":["add_to_cart","guest-view","login_redirect","mage-banners-cache-storage","mage-messages","mage-translation-storage","mage-translation-file-version","product_data_storage","recently_compared_product","recently_compared_product_previous","recently_viewed_product","recently_viewed_product_previous","remove_from_cart","stf","X-Magento-Vary","form_key","mage-cache-sessid","mage-cache-storage","mage-cache-storage-section-invalidation","persistent_shopping_cart","private_content_version","section_data_ids","store"],"2":["customer_segment_ids","external_no_cache","frontend","guest_view","last_category","last_product","newmessage","no_cache"],"3":["mg_dnt","user_allowed_save_cookie","authentication_flag","dataservices_customer_id","dataservices_customer_group","dataservices_cart_id","dataservices_product_context"],"4":["_ga","_ga_[*]"]},
6        essentialGroupIds: [1],
7        requiredCookies: ["mst_blog_secret_[*]","CacheWarmerStatus","CacheWarmer","mst-cache-warmer-toolbar","mst-cache-warmer-track","PHPSESSID","form_key","gdpr_cookie_consent","gdpr_cookie_groups","geo_ip_request","geo_ip_request_status","geo_ip_location","geo_ip_currency","info_bypass_cookie","trigger_send_key","qid","searchReport-log"],
8        isTrack: false,
9        wildcard: '[*]',
10        rejected: [],
11        sent: [],
12        getAllowedGroups() {
13            let cookieValue = this.getCookie('gdpr_cookie_groups');
14            let allowedGroupIds = cookieValue ? unescape(cookieValue).split(',') : [];
15
16            return (allowedGroupIds.length) ? allowedGroupIds : this.essentialGroupIds;
17        },
18        getAllowedCookies() {
19            let allowedGroups = this.getAllowedGroups();
20            let cookies = this.requiredCookies;
21            for (let groupId of allowedGroups) {
22                if (this.allCookiesByGroups[groupId]) {
23                    for (let code of this.allCookiesByGroups[groupId]) {
24                        cookies.push(code);
25                    }
26                }
27            }
28            return cookies;
29        },
30        getCookie(cookieCode) {
31            cookieCode += '=';
32            let cookieArr = document.cookie.split(';');
33            for (i = 0; i < cookieArr.length; i++) {
34                let cookie = (cookieArr[i]).trim();
35                if (cookie.indexOf(cookieCode) === 0) {
36                    return cookie.substring(cookieCode.length, cookie.length);
37                }
38            }
39            return null;
40        },
41        isAllowed(cookieCode) {
42            let allowedCookies = this.getAllowedCookies();
43            for (let code of allowedCookies) {
44                if (code == cookieCode) {
45                    return true;
46                }
47                if (code.indexOf(this.wildcard) !== -1) {
48                    let regexp = new RegExp('^' + code.replace(this.wildcard, '.+') + '$', 'i');
49                    if (regexp.test(cookieCode)) {
50                        return true;
51                    }
52                }
53            }
54            return false;
55        },
56        addSent(sent) {
57            this.sent = this.sent.concat(sent);
58        },
59        reject(cookieCode) {
60            if (this.rejected.indexOf(cookieCode) === -1) {
61                this.rejected.push(cookieCode);
62            }
63        },
64        sendRejected() {
65            if (this.rejected.length) {
66                let toSend = this.rejected.filter(function (cookieCode) {
67                    return this.indexOf(cookieCode) === -1;
68                }, this.sent);
69                if (toSend.length) {
70                    let body = toSend.reduce((body, cookieCode) => {
71                        body.append('cookie_list[]', cookieCode);
72                        return body;
73                    }, new URLSearchParams({}));
74                    fetch('/gdpr_cookie/cookie/rejected', {
75                        method: 'POST',
76                        headers: {
77                            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
78                            'X-Requested-With': 'XMLHttpRequest'
79                        },
80                        body: body
81                    });
82                    this.addSent(toSend);
83                }
84            }
85        }
86    };
87
88    let nativeCookie = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie');
89    if (!nativeCookie && HTMLDocument) {
90        nativeCookie = Object.getOwnPropertyDescriptor(HTMLDocument.prototype, 'cookie');
91    }
92    if (nativeCookie && nativeCookie.configurable) {
93        Object.defineProperty(document, 'cookie', {
94            enumerable: true,
95            configurable: true,
96            get() {
97                return nativeCookie.get.call(document);
98            },
99            set(v) {
100                try {
101                    let cookieCode = ((v.split(';')[0]).split('=')[0]).trim();
102                    if (!mstCookieService.isAllowed(cookieCode)) {
103                        mstCookieService.reject(cookieCode);
104                        return;
105                    }
106                } catch (e) {
107                    console.log('  -- error when check cookie: ', v);
108                    console.log(e.name + ':' + e.message);
109                    console.log(e.stack);
110                }
111                nativeCookie.set.call(document, v);
112            }
113        });
114
115        if (mstCookieService.isTrack) {
116            let timerId = setInterval(mstCookieService.sendRejected.bind(mstCookieService), 1000);
117        }
118    }
119})();window.dataLayer = window.dataLayer || [];
120function gtag(){dataLayer.push(arguments);}
121if(localStorage.getItem("mst-gdpr-google-consent-mode") === null){
122     gtag("consent", "default", {"ad_user_data":"granted","ad_personalization":"granted","ad_storage":"granted","analytics_storage":"granted","personalization_storage":"granted","functionality_storage":"granted","security_storage":"granted"});
123} else {
124     gtag("consent", "default", JSON.parse(localStorage.getItem("mst-gdpr-google-consent-mode")));
125}</script>
125
126    <meta charset="utf-8"/>
127<meta name="title" content="Customer Login"/>
128<meta name="robots" content="INDEX,FOLLOW"/>
129<meta name="viewport" content="width=device-width, initial-scale=1"/>
130<title>Customer Login</title>
131        <link rel="stylesheet" type="text/css" media="all" href="https://stata-brazil.com/static/version1790944496/frontend/TimberlakeHyva/timberlake/pt_BR/mage/gallery/gallery.css" />
132<link rel="stylesheet" type="text/css" media="all" href="https://stata-brazil.com/static/version1790944496/frontend/TimberlakeHyva/timberlake/pt_BR/css/styles.css" />
133<link rel="stylesheet" type="text/css" media="all" href="https://stata-brazil.com/static/version1790944496/frontend/TimberlakeHyva/timberlake/pt_BR/Magento_Theme/css/swiper.min.css" />
134<link rel="stylesheet" type="text/css" media="all" href="https://stata-brazil.com/static/version1790944496/frontend/TimberlakeHyva/timberlake/pt_BR/StripeIntegration_Payments/css/wallets.css" />
135<script type="text/javascript" src="https://stata-brazil.com/static/version1790944496/frontend/TimberlakeHyva/timberlake/pt_BR/Hyva_CheckoutStripe/js/load-stripe.js"></script>
135
136<link rel="canonical" href="https://stata-brazil.com/customer/account/login/referer/aHR0cHM6Ly9zdGF0YS1icmF6aWwuY29tL2N1c3RvbWVyL2FjY291bnQvaW5kZXgv/" />
137<link rel="alternate" hreflang="pt-BR" href="https://stata-brazil.com/customer/account/login/referer/aHR0cHM6Ly9zdGF0YS1icmF6aWwuY29tL2N1c3RvbWVyL2FjY291bnQvaW5kZXgv/customer/account/login/" />
138<link rel="alternate" hreflang="fr-FR" href="https://stata-france.com/customer/account/login/referer/aHR0cHM6Ly9zdGF0YS1icmF6aWwuY29tL2N1c3RvbWVyL2FjY291bnQvaW5kZXgv/customer/account/login/" />
139<link rel="alternate" hreflang="en-GB" href="https://stata-uk.com/customer/account/login/referer/aHR0cHM6Ly9zdGF0YS1icmF6aWwuY29tL2N1c3RvbWVyL2FjY291bnQvaW5kZXgv/customer/account/login/" />
140<link rel="alternate" hreflang="x-default" href="https://stata-uk.com/customer/account/login/referer/aHR0cHM6Ly9zdGF0YS1icmF6aWwuY29tL2N1c3RvbWVyL2FjY291bnQvaW5kZXgv/customer/account/login/" />
141<link rel="icon" type="image/x-icon" href="https://stata-brazil.com/media/favicon/default/timberlake-favicon_2_.png" />
142<link rel="shortcut icon" type="image/x-icon" href="https://stata-brazil.com/media/favicon/default/timberlake-favicon_2_.png" />
143<script type="application/ld+json">
144{
145  "@context": "https://schema.org",
146  "@type": "Organization",
147  "name": "Stata Brazil",
148  "url": "https://stata-brazil.com/",
149  "logo": "https://stata-brazil.com/static/frontend/TimberlakeHyva/timberlake/es_ES/images/stata-logo.png",
150  "sameAs": [
151    "https://www.facebook.com/timberlakeconsultants",
152    "https://www.linkedin.com/company/timberlake-consultants",
153    "https://twitter.com/timberlake_cons"
154  ],
155  "contactPoint": [{
156    "@type": "ContactPoint",
157    "telephone": "+55-11-4680-3503",
158    "email": "[email protected]",
159    "contactType": "customer service",
160    "areaServed": "BR",
161    "availableLanguage": ["Portuguese", "English"]
162  }],
163  "address": {
164    "@type": "PostalAddress",
165    "streetAddress": "Rua Gomes de Carvalho, 911 – Vila Olimpia",
166    "addressLocality": "São Paulo",
167    "addressRegion": "SP",
168    "postalCode": "04547-003",
169    "addressCountry": "BR"
170  }
171}
172</script>
172
173    
173<script>
174    var BASE_URL = 'https://stata-brazil.com/';
175    var THEME_PATH = 'https://stata-brazil.com/static/version1790944496/frontend/TimberlakeHyva/timberlake/pt_BR';
176    var COOKIE_CONFIG = {
177        "expires": null,
178        "path": "\u002F",
179        "domain": ".stata\u002Dbrazil.com",
180        "secure": false,
181        "lifetime": "3600",
182        "cookie_restriction_enabled": false    };
183    var CURRENT_STORE_CODE = 'stata_br';
184    var CURRENT_WEBSITE_ID = '49';
185
186    window.hyva = window.hyva || {}
187
188    window.cookie_consent_groups = window.cookie_consent_groups || {}
189    window.cookie_consent_groups['necessary'] = true;
190
191    window.cookie_consent_config = window.cookie_consent_config || {};
192    window.cookie_consent_config['necessary'] = [].concat(
193        window.cookie_consent_config['necessary'] || [],
194        [
195            'user_allowed_save_cookie',
196            'form_key',
197            'mage-messages',
198            'private_content_version',
199            'mage-cache-sessid',
200            'last_visited_store',
201            'section_data_ids'
202        ]
203    );
204</script>
vendor: 1 bytes, line 204
204
205<script>
206    (function( hyva, undefined ) {
207
208        function lifetimeToExpires(options, defaults) {
209
210            const lifetime = options.lifetime || defaults.lifetime;
211
212            if (lifetime) {
213                const date = new Date;
214                date.setTime(date.getTime() + lifetime * 1000);
215                return date;
216            }
217
218            return null;
219        }
220
221        function generateRandomString() {
222
223            const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
224                length = 16;
225
226            let formKey = '',
227                charactersLength = allowedCharacters.length;
228
229            for (let i = 0; i < length; i++) {
230                formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))]
231            }
232
233            return formKey;
234        }
235
236        const sessionCookieMarker = {noLifetime: true}
237
238        const cookieTempStorage = {};
239
240        const internalCookie = {
241            get(name) {
242                const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
243                return v ? v[2] : null;
244            },
245            set(name, value, days, skipSetDomain) {
246                let expires,
247                    path,
248                    domain,
249                    secure,
250                    samesite;
251
252                const defaultCookieConfig = {
253                    expires: null,
254                    path: '/',
255                    domain: null,
256                    secure: false,
257                    lifetime: null,
258                    samesite: 'lax'
259                };
260
261                const cookieConfig = window.COOKIE_CONFIG || {};
262
263                expires = days && days !== sessionCookieMarker
264                    ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig)
265                    : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires;
266
267                path = cookieConfig.path || defaultCookieConfig.path;
268                domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain);
269                secure = cookieConfig.secure || defaultCookieConfig.secure;
270                samesite = cookieConfig.samesite || defaultCookieConfig.samesite;
271
272                document.cookie = name + "=" + encodeURIComponent(value) +
273                    (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') +
274                    (path ? '; path=' + path : '') +
275                    (domain ? '; domain=' + domain : '') +
276                    (secure ? '; secure' : '') +
277                    (samesite ? '; samesite=' + samesite : 'lax');
278            },
279            isWebsiteAllowedToSaveCookie() {
280                const allowedCookies = this.get('user_allowed_save_cookie');
281                if (allowedCookies) {
282                    const allowedWebsites = JSON.parse(unescape(allowedCookies));
283
284                    return allowedWebsites[CURRENT_WEBSITE_ID] === 1;
285                }
286                return false;
287            },
288            getGroupByCookieName(name) {
289                const cookieConsentConfig = window.cookie_consent_config || {};
290                let group = null;
291                for (let prop in cookieConsentConfig) {
292                    if (!cookieConsentConfig.hasOwnProperty(prop)) continue;
293                    if (cookieConsentConfig[prop].includes(name)) {
294                        group = prop;
295                        break;
296                    }
297                }
298                return group;
299            },
300            isCookieAllowed(name) {
301                const cookieGroup = this.getGroupByCookieName(name);
302                return cookieGroup
303                    ? window.cookie_consent_groups[cookieGroup]
304                    : this.isWebsiteAllowedToSaveCookie();
305            },
306            saveTempStorageCookies() {
307                for (const [name, data] of Object.entries(cookieTempStorage)) {
308                    if (this.isCookieAllowed(name)) {
309                        this.set(name, data['value'], data['days'], data['skipSetDomain']);
310                        delete cookieTempStorage[name];
311                    }
312                }
313            }
314        };
315
316        hyva.getCookie = (name) => {
317            const cookieConfig = window.COOKIE_CONFIG || {};
318
319            if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
320                return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null;
321            }
322
323            return internalCookie.get(name);
324        }
325
326        hyva.setCookie = (name, value, days, skipSetDomain) => {
327            const cookieConfig = window.COOKIE_CONFIG || {};
328
329            if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
330                cookieTempStorage[name] = {value, days, skipSetDomain};
331                return;
332            }
333            return internalCookie.set(name, value, days, skipSetDomain);
334        }
335
336
337        hyva.setSessionCookie = (name, value, skipSetDomain) => {
338            return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain)
339        }
340
341        hyva.getBrowserStorage = () => {
342            const browserStorage = window.localStorage || window.sessionStorage;
343            if (!browserStorage) {
344                console.warn('Browser Storage is unavailable');
345                return false;
346            }
347            try {
348                browserStorage.setItem('storage_test', '1');
349                browserStorage.removeItem('storage_test');
350            } catch (error) {
351                console.warn('Browser Storage is not accessible', error);
352                return false;
353            }
354            return browserStorage;
355        }
356
357        hyva.postForm = (postParams) => {
358            const form = document.createElement("form");
359
360            let data = postParams.data;
361
362            if (! postParams.skipUenc && ! data.uenc) {
363                data.uenc = btoa(window.location.href);
364            }
365            form.method = "POST";
366            form.action = postParams.action;
367
368            Object.keys(postParams.data).map(key => {
369                const field = document.createElement("input");
370                field.type = 'hidden'
371                field.value = postParams.data[key];
372                field.name = key;
373                form.appendChild(field);
374            });
375
376            const form_key = document.createElement("input");
377            form_key.type = 'hidden';
378            form_key.value = hyva.getFormKey();
379            form_key.name="form_key";
380            form.appendChild(form_key);
381
382            document.body.appendChild(form);
383
384            form.submit();
385        }
386
387        hyva.getFormKey = function () {
388            let formKey = hyva.getCookie('form_key');
389
390            if (!formKey) {
391                formKey = generateRandomString();
392                hyva.setCookie('form_key', formKey);
393            }
394
395            return formKey;
396        }
397
398        hyva.formatPrice = (value, showSign, options = {}) => {
399            const groupSeparator = options.groupSeparator;
400            const decimalSeparator = options.decimalSeparator
401            delete options.groupSeparator;
402            delete options.decimalSeparator;
403            const formatter = new Intl.NumberFormat(
404                'pt\u002DBR',
405                Object.assign({
406                    style: 'currency',
407                    currency: 'USD',
408                    signDisplay: showSign ? 'always' : 'auto'
409                }, options)
410            );
411            return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ?
412                formatter.formatToParts(value).map(({type, value}) => {
413                    switch (type) {
414                        case 'currency':
415                            return '\u0024' || value;
416                        case 'minusSign':
417                            return '- ';
418                        case 'plusSign':
419                            return '+ ';
420                        case 'group':
421                            return groupSeparator !== undefined ? groupSeparator : value;
422                        case 'decimal':
423                            return decimalSeparator !== undefined ? decimalSeparator : value;
424                        default :
425                            return value;
426                    }
427                }).reduce((string, part) => string + part) :
428                formatter.format(value);
429        }
430
431        const formatStr = function (str, nStart) {
432            const args = Array.from(arguments).slice(2);
433
434            return str.replace(/(%+)([0-9]+)/g, (m, p, n) => {
435                const idx = parseInt(n) - nStart;
436
437                if (args[idx] === null || args[idx] === void 0) {
438                    return m;
439                }
440                return p.length % 2
441                    ? p.slice(0, -1).replace('%%', '%') + args[idx]
442                    : p.replace('%%', '%') + n;
443            })
444        }
445
446        hyva.str = function (string) {
447            const args = Array.from(arguments);
448            args.splice(1, 0, 1);
449
450            return formatStr.apply(undefined, args);
451        }
452
453        hyva.strf = function () {
454            const args = Array.from(arguments);
455            args.splice(1, 0, 0);
456
457            return formatStr.apply(undefined, args);
458        }
459
460        /**
461         * Take a html string as `content` parameter and
462         * extract an element from the DOM to replace in
463         * the current page under the same selector,
464         * defined by `targetSelector`
465         */
466        hyva.replaceDomElement = (targetSelector, content) => {
467            // Parse the content and extract the DOM node using the `targetSelector`
468            const parser = new DOMParser();
469            const doc = parser.parseFromString(content, 'text/html');
470            const contentNode = doc.querySelector(targetSelector);
471
472            // Bail if content or target can't be found
473            if (!contentNode || !document.querySelector(targetSelector)) {
474                return;
475            }
476
477                        hyva.activateScripts(contentNode);
478            
479            // Replace the old DOM node with the new content
480            document.querySelector(targetSelector).replaceWith(contentNode);
481
482            // Reload customerSectionData and display cookie-messages if present
483            window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
484            hyva.initMessages();
485        }
486
487        hyva.removeScripts = (contentNode) => {
488            const scripts = contentNode.getElementsByTagName('script');
489            for (let i = 0; i < scripts.length; i++) {
490                scripts[i].parentNode.removeChild(scripts[i]);
491            }
492            const templates = contentNode.getElementsByTagName('template');
493            for (let i = 0; i < templates.length; i++) {
494                const container = document.createElement('div');
495                container.innerHTML = templates[i].innerHTML;
496                hyva.removeScripts(container);
497                templates[i].innerHTML = container.innerHTML;
498            }
499        }
500
501        hyva.activateScripts = (contentNode) => {
502            // Create new array from HTMLCollection to avoid mutation of collection while manipulating the DOM.
503            const scripts = Array.from(contentNode.getElementsByTagName('script'));
504
505            // Iterate over all script tags to duplicate+inject each into the head
506            for (const original of scripts) {
507                const script = document.createElement('script');
508                original.type && (script.type = original.type);
509                script.innerHTML = original.innerHTML;
510
511                // Remove the original (non-executing) script from the contentNode
512                original.parentNode.removeChild(original)
513
514                // Add script to head
515                document.head.appendChild(script);
516            }
517
518            return contentNode;
519        }
520
521        const replace = {['+']: '-', ['/']: '_', ['=']: ','};
522        hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]);
523
524        let currentTrap;
525
526        const focusableElements = (rootElement) => {
527            const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]';
528            return Array.from(rootElement.querySelectorAll(selector))
529                .filter(el => {
530                    return el.style.display !== 'none'
531                        && !el.disabled
532                        && el.tabIndex !== -1
533                        && (el.offsetWidth || el.offsetHeight || el.getClientRects().length)
534                })
535        }
536
537        const focusTrap = (e) => {
538            const isTabPressed = e.key === 'Tab' || e.keyCode === 9;
539            if (!isTabPressed) return;
540
541            const focusable = focusableElements(currentTrap)
542            const firstFocusableElement = focusable[0]
543            const lastFocusableElement = focusable[focusable.length - 1]
544
545            e.shiftKey
546                ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault())
547                : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault())
548        };
549
550        hyva.releaseFocus = (rootElement) => {
551            if (currentTrap && (!rootElement || rootElement === currentTrap)) {
552                currentTrap.removeEventListener('keydown', focusTrap)
553                currentTrap = null
554            }
555        }
556        hyva.trapFocus = (rootElement) => {
557            if (!rootElement) return;
558            hyva.releaseFocus()
559            currentTrap = rootElement
560            rootElement.addEventListener('keydown', focusTrap)
561            const firstElement = focusableElements(rootElement)[0]
562            firstElement && firstElement.focus()
563        }
564
565        hyva.safeParseNumber = (rawValue) => {
566            const number = rawValue ? parseFloat(rawValue) : null;
567
568            return Array.isArray(number) || isNaN(number) ? rawValue : number;
569        }
570
571        const toCamelCase = s => s.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('');
572        hyva.createBooleanObject = (name, value = false, additionalMethods = {}) => {
573
574            const camelCase = toCamelCase(name);
575            const key = '__hyva_bool_' + name
576
577            return new Proxy(Object.assign(
578                additionalMethods,
579                {
580                    [key]: !!value,
581                    [name]() {return !!this[key]},
582                    ['!' + name]() {return !this[key]}, // @deprecated This does not work with non-CSP Alpine
583                    ['not' + camelCase]() {return !this[key]},
584                    ['toggle' + camelCase]() {this[key] = !this[key]},
585                    [`set${camelCase}True`]() {this[key] = true},
586                    [`set${camelCase}False`]() {this[key] = false},
587                }
588            ), {
589                set(target, prop, value) {
590                    return prop === name
591                        ? (target[key] = !!value)
592                        : Reflect.set(...arguments);
593                }
594            })
595        }
596
597                hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true})
598        window.addEventListener('alpine:init', () => Alpine.data('{}', () => ({})), {once: true});
599                window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies())
600
601    }( window.hyva = window.hyva || {} ));
602</script>
vendor: 1 bytes, line 602
602
603<script type="speculationrules">
604{
605    "tag": "Hyva Theme",
606    "prefetch": [{
607        "source": "document",
608        "where": {
609            "and": [
610                { "href_matches": "/*" },
611                { "not": {
612                    "href_matches": ["/customer/*","*/customer/*","/search/*","*/search/*","/sales/*","*/sales/*","/wishlist/*","*/wishlist/*","/checkout/*","*/checkout/*","/paypal/*","*/paypal/*"]                }},
613                { "not": {
614                    "selector_matches": [".no-preload", ".do-not-prerender", "[download]", "[rel~=nofollow]", "[target]"]
615                }}
616            ]
617        },
618        "eagerness": "moderate"
619    }]
620}
621</script>
vendor: 1 bytes, line 621
621
622<script>
623(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
624new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
625j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
626'https://www.googletagmanager.com/gtm.js?id='+i+dl;window.scriptEl = f.parentNode.insertBefore(j,f);
627                window.scriptEl.addEventListener('abort',      function() {window.isGtmLoaded = false;}, false);
628                window.scriptEl.addEventListener('cancel',     function() {window.isGtmLoaded = false;}, false);
629                window.scriptEl.addEventListener('error',      function() {window.isGtmLoaded = false;}, false);
630                window.scriptEl.addEventListener('invalid',    function() {window.isGtmLoaded = false;}, false);
631                window.scriptEl.addEventListener('load',       function() {window.isGtmLoaded = true;}, false);
632                window.scriptEl.addEventListener('loadeddata', function() {window.isGtmLoaded = true;}, false);
633                window.scriptEl.addEventListener('reset',      function() {window.isGtmLoaded = false;}, false);
634                window.scriptEl.addEventListener('suspend',    function() {window.isGtmLoaded = false;}, false);
635            
636})(window,document,'script','dataLayer','GTM-P4JQ4VV9');
637</script>
637
638</head>
639<body id="html-body" class="mst-nav__theme-hyva-reset mst-nav__theme-hyva-default mst-nav__theme-timberlakehyva-timberlake customer-account-login page-layout-1column">
640<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 640-641
640
641<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
641GTM-P4JQ4VV9
vendor: 85 bytes, lines 641-642
641"
642height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
643<!-- End Google Tag Manager (noscript) --><input name="form_key" type="hidden" value="MKRqwFeJZFPuKz00" />
644    <noscript>
645        <section class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal">
646            <div class="container text-center">
647                <p>
648                    <strong>JavaScript seems to be disabled in your browser.</strong>
649                    <span>
650                        For the best experience on our site, be sure to turn on Javascript in your browser.                    </span>
651                </p>
652            </div>
653        </section>
654    </noscript>
655
656
657<script>
658    document.body.addEventListener('touchstart', () => {}, {passive: true})
659</script>
659
660
661<script>
662    (function(hyva) {
663                const formValidationRules = {
664            required(value, options, field, context) {
665                const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element,
666                    fieldName = getFieldName(field),
667                    msg = fieldName
668                        ? hyva.str('\u00251\u0020field\u0020is\u0020required.', fieldName)
669                        : 'This\u0020is\u0020a\u0020required\u0020field.';
670
671                if (el.type === 'radio' || el.type === 'checkbox') {
672                    return (value === undefined || value.length === 0) ? msg : true;
673                }
674
675                el.setAttribute('required', '');
676                el.checkValidity();
677
678                return el.validity.valueMissing ? msg : true;
679            },
680            maxlength(value, options, field, context) {
681                const n = Number(options)
682                if (value.length > n) {
683                    const fieldName = getFieldName(field);
684                    return fieldName
685                        ? n === 1
686                            ? hyva.str('\u00251\u0020field\u0020cannot\u0020be\u0020longer\u0020than\u00201\u0020character.', fieldName)
687                            : hyva.str('\u00251\u0020field\u0020cannot\u0020be\u0020longer\u0020than\u0020\u00252\u0020characters.', fieldName, options)
688                        : n === 1
689                            ? 'Digite\u0020no\u0020m\u00E1ximo\u00201\u0020caractere.'
690                            : hyva.strf('Digite\u0020n\u00E3o\u0020mais\u0020do\u0020que\u0020\u00250\u0020caracteres.', options);
691                }
692                return true;
693            },
694            minlength(value, options, field, context) {
695                const n = Number(options)
696                if (value.length > 0 && value.length < n) {
697                    const fieldName = getFieldName(field);
698                    return fieldName
699                        ? n === 1
700                            ? hyva.str('\u00251\u0020field\u0020must\u0020be\u0020at\u0020least\u00201\u0020character\u0020long.', fieldName)
701                            : hyva.str('\u00251\u0020field\u0020must\u0020be\u0020at\u0020least\u0020\u00252\u0020characters\u0020long.', fieldName, options)
702                        : n === 1
703                            ? 'Digite\u0020pelo\u0020menos\u00201\u0020caractere.'
704                            : hyva.strf('Digite\u0020pelo\u0020menos\u0020\u00250\u0020caracteres.', options);
705                }
706                return true;
707            },
708            max(value, options, field, context) {
709                field.element.setAttribute('max', options);
710                field.element.checkValidity();
711                if (field.element.validity.rangeOverflow) {
712                    const fieldName = getFieldName(field);
713                    return fieldName
714                        ? hyva.str('\u00251\u0020field\u0020must\u0020contain\u0020a\u0020value\u0020less\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00252\u0022.', fieldName, options)
715                        : hyva.strf('Digite\u0020um\u0020valor\u0020menor\u0020ou\u0020igual\u0020a\u0020\u0022\u00250\u0022.', options);
716                }
717                return true;
718            },
719            min(value, options, field, context) {
720                field.element.setAttribute('min', options);
721                field.element.checkValidity();
722                if (field.element.validity.rangeUnderflow) {
723                    const fieldName = getFieldName(field);
724                    return fieldName
725                        ? hyva.str('\u00251\u0020field\u0020must\u0020contain\u0020a\u0020value\u0020greater\u0020than\u0020or\u0020equal\u0020to\u0020\u0022\u00252\u0022.', fieldName, options)
726                        : hyva.strf('Digite\u0020um\u0020valor\u0020maior\u0020ou\u0020igual\u0020a\u0020\u0022\u00250\u0022.', options);
727                }
728                return true;
729            },
730            step(value, options, field, context) {
731                field.element.setAttribute('step', options);
732                field.element.checkValidity();
733                if (field.element.validity.stepMismatch) {
734                    const val = Number(value),
735                        step = Number(options),
736                        fieldName = getFieldName(field),
737                        nearestLowerValue = Math.floor(val / step) * step,
738                        nearestUpperValue = Math.ceil(val / step) * step;
739                    return fieldName
740                        ? hyva.str('\u00251\u0020field\u0020is\u0020invalid.\u0020The\u0020two\u0020nearest\u0020valid\u0020values\u0020are\u0020\u0022\u00252\u0022\u0020and\u0020\u0022\u00253\u0022.', fieldName, nearestLowerValue, nearestUpperValue)
741                        : hyva.strf('Digite\u0020um\u0020valor\u0020v\u00E1lido.\u0020Os\u0020dois\u0020valores\u0020v\u00E1lidos\u0020mais\u0020pr\u00F3ximos\u0020s\u00E3o\u0020\u0022\u00250\u0022\u0020e\u0020\u0022\u00251\u0022.', nearestLowerValue, nearestUpperValue);
742                }
743                return true;
744            },
745            pattern(value, options, field, context) {
746                field.element.setAttribute('pattern', options);
747                field.element.checkValidity();
748                if (field.element.validity.patternMismatch) {
749                    const fieldName = getFieldName(field);
750                    return fieldName
751                        ? field.element.pattern
752                            ? hyva.str('\u00251\u0020field\u0020must\u0020match\u0020the\u0020requested\u0020format\u003A\u0020\u00252.', fieldName, field.element.pattern)
753                            : hyva.str('\u00251\u0020field\u0020must\u0020match\u0020the\u0020requested\u0020format.', fieldName)
754                        : field.element.pattern
755                            ? hyva.strf('Corresponda\u0020ao\u0020formato\u0020solicitado\u003A\u0020\u00250.', field.element.pattern)
756                            : 'Favor\u0020corresponder\u0020ao\u0020formato\u0020solicitado.';
757                }
758                return true;
759            },
760            email(value, options, field, context) {
761                                const rule = /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i;
762                if (value.length > 0 && !rule.test(value)) {
763                    const fieldName = getFieldName(field);
764                    return fieldName
765                        ? hyva.str('\u00251\u0020field\u0020must\u0020contain\u0020a\u0020valid\u0020email\u0020address\u0020\u0028Ex\u003A\u0020johndoe\u0040domain.com\u0029.', fieldName)
766                        : 'Please\u0020enter\u0020a\u0020valid\u0020email\u0020address\u0020\u0028Ex\u003A\u0020johndoe\u0040domain.com\u0029.';
767                }
768                return true;
769            },
770            password(value, options, field, context) {
771                const rule = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/;
772                if (value.length > 0 && !rule.test(value)) {
773                    const fieldName = getFieldName(field);
774                    return fieldName
775                        ? hyva.str('\u00251\u0020field\u0020must\u0020contain\u0020at\u0020least\u0020one\u0020upper\u0020case,\u0020one\u0020lower\u0020case,\u0020one\u0020digit\u0020and\u0020one\u0020special\u0020character\u0020\u0028\u0023\u003F\u0021\u0040\u0024\u0025\u005E\u0026\u002A\u002D\u0029', fieldName)
776                        : 'Forne\u00E7a\u0020pelo\u0020menos\u0020uma\u0020letra\u0020mai\u00FAscula,\u0020uma\u0020letra\u0020min\u00FAscula,\u0020um\u0020d\u00EDgito\u0020e\u0020um\u0020caractere\u0020especial\u0020\u0028\u0023\u003F\u0021\u0040\u0024\u0025\u005E\u0026amp\u003B\u002A\u002D\u0029';
777                }
778                return true;
779            },
780            equalTo(value, options, field, context) {
781                const dependencyField = context.fields[options].element;
782                if (value !== dependencyField.value) {
783                    const dependencyFieldName =
784                        dependencyField.label ||
785                        dependencyField.title ||
786                        (dependencyField.labels && dependencyField.labels[0] && dependencyField.labels[0].innerText) ||
787                        dependencyField.name,
788                        fieldName = getFieldName(field);
789                    return fieldName
790                        ? hyva.str('\u00251\u0020field\u0020value\u0020must\u0020be\u0020the\u0020same\u0020as\u0020\u0022\u00252\u0022.', fieldName, dependencyFieldName)
791                        : hyva.strf('Esse\u0020valor\u0020de\u0020campo\u0020deve\u0020ser\u0020igual\u0020a\u0020\u0022\u00250\u0022.', dependencyFieldName);
792                }
793                return true;
794            }
795        };
796
797                function raceSome(promises, pred) {
798            return new Promise((resolve, reject) => {
799
800                if (promises.length === 0) {
801                    return resolve();
802                }
803
804                let settled = false, nDone = 0;
805
806                const resolveIf = v => {
807                    if (!settled && (pred(v) || ++nDone === promises.length)) {
808                        settled = true;
809                        resolve(v);
810                    }
811                    return v;
812                }
813
814                promises.map(promise => {
815                    promise.then(resolveIf).catch(reason => {
816                        settled = true;
817                        reject(reason)
818                    });
819                    return promise;
820                });
821            });
822        }
823
824        const INPUT_ATTRIBUTE_RULES = {min: 'min', max: 'max', required: 'required', minlength: 'minlength', maxlength: 'maxlength', step: 'step', pattern: 'pattern'}
825        const INPUT_TYPE_RULES = {email: 'email'}
826
827        function getRules(element) {
828            let rules = {};
829            Object.keys(INPUT_ATTRIBUTE_RULES).forEach(attrName => {
830                if (element.hasAttribute(attrName)) {
831                    rules[INPUT_ATTRIBUTE_RULES[attrName]] = element.getAttribute(attrName);
832                }
833            })
834            if (INPUT_TYPE_RULES[element.type]) {
835                rules[INPUT_TYPE_RULES[element.type]] = true;
836            }
837
838            if (element.dataset.validate) {
839                try {
840                    Object.assign(rules, JSON.parse(element.dataset.validate));
841                } catch (error) {
842                    console.error('Validator error. Cannot parse data-validate attribute of element:\n', element);
843                }
844            }
845
846            return rules;
847        }
848
849        function isInvalidRuleResult(ruleState) {
850            return typeof ruleState === 'string' || !ruleState || (ruleState.type && ruleState.content);
851        }
852
853        async function runValidateFn(rule, options, value, field) {
854            return formValidationRules[rule](value, options, field, this);
855        }
856
857        function generateId() {
858            let id;
859            do {
860                id = `${this.idPrefix}-${++this.idSeq}`;
861            } while (document.getElementById(id));
862            return id;
863        }
864
865        function isVisible(element) {
866            const el = element.type !== 'hidden' ? element : (element.parentElement || {});
867            return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length)
868        }
869
870        function elementWillValidate(element) {
871            return (element.willValidate || element.type === 'hidden')
872                && element.tagName !== 'BUTTON'
873                && element.disabled === false
874                && !(element.tagName === 'INPUT' && element.type === 'submit')
875                && (element.hasAttribute('data-validate-hidden') || isVisible(element))
876        }
877
878        function createMessageContainer(el, fieldWrapperClassName) {
879            if (! el.parentElement) {
880                return;
881            }
882            const refocus = document.activeElement === el;
883            const wrapper = document.createElement('div');
884            wrapper.classList.add.apply(wrapper.classList, fieldWrapperClassName.split(' '));
885            el.parentElement.insertBefore(wrapper, el);
886            wrapper.appendChild(el);
887            refocus && document.activeElement !== el && el.focus();
888            return wrapper;
889        }
890
891        function containerNotFound(selector, el) {
892            const msg = `Cannot find message container element ${selector} of ${el.name}`;
893            console.error(msg, el);
894            throw msg;
895        }
896
897        function createTextInputFrom(el) {
898            const text = document.createElement('INPUT');
899            text.type = 'text';
900            text.value = el.value;
901            return text;
902        }
903
904        function classNamesToSelector(classNames) {
905            return classNames.split(' ')
906                .filter(className => className.length > 0)
907                .map(className => `.${className}`)
908                .join('')
909        }
910
911        function hasMessagesWrapper(field, messagesWrapperClassName) {
912            return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName));
913        }
914
915        function getMessagesWrapper(field, messagesWrapperClassName) {
916            if (hasMessagesWrapper.call(this, field, messagesWrapperClassName)) {
917                return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName));
918            }
919
920            const msgWrapper = document.createElement('ul');
921            const msgId = generateId.call(this);
922            msgWrapper.id = msgId;
923            field.element.setAttribute('aria-errormessage', msgId);
924            field.element.setAttribute('aria-describedby', msgId);
925            msgWrapper.classList.add.apply(msgWrapper.classList, messagesWrapperClassName.split(' '));
926            if (field.validateOnChange) {
927                msgWrapper.setAttribute('aria-live', 'polite');
928            }
929            this.getMessageContainer(field).appendChild(msgWrapper);
930
931            return msgWrapper;
932        }
933
934        function getCheckedValues(field) {
935            const name = field.element.name.replace(/([\\"])/g, '\\$1');
936            const elements = field.element.form.querySelectorAll('input[name="' + name + '"]:checked');
937            return Array.from(elements).map(el => el.value);
938        }
939
940        function escapeHtml(s) {
941            const div = document.createElement('div')
942            div.innerText = s;
943            return div.innerHTML;
944        }
945
946        
947        function formValidation(form, options = {}) {
948            const formElement = form || this.$el;
949
950            if (formElement.dataset && formElement.dataset.options) {
951                try {
952                    options = Object.assign(options, JSON.parse(formElement.dataset.options || '{}'));
953                } catch (e) {
954                    throw new Error('Cannot read the form options from the data-options attribute: not valid JSON');
955                }
956            }
957
958            // Disable browser default validation
959            if (formElement.tagName === 'FORM') {
960                formElement.setAttribute('novalidate', '');
961            } else {
962                console.error('formValidation can be initialized only on FORM element', formElement);
963                return;
964            }
965
966            options = Object.assign({
967                fieldWrapperClassName: 'field field-reserved',
968                messagesWrapperClassName: 'messages',
969                validClassName: 'field-success',
970                invalidClassName: 'field-error',
971                pageMessagesWrapperSelector: null,
972                scrollToFirstError: true,
973            }, options || {});
974
975            return {
976                state: {
977                    valid: false,
978                },
979                fields: {},
980                idSeq: 0,
981                idPrefix: formElement.id || 'vld-msg',
982                setupFields(elements) {
983                    this.fields = {};
984                    Array.from(elements).forEach(element => {
985                        if (elementWillValidate(element)) {
986                            this.setupField(element);
987                        }
988                    });
989                },
990                setupField(element) {
991                    if (! element) return;
992                    const onChange = !!element.dataset.onChange;
993                    if (elementWillValidate(element)) {
994                        const rules = getRules(element);
995                        if (Object.keys(rules).length > 0) {
996                            if (this.fields[element.name]) {
997                                Object.assign(this.fields[element.name].rules, rules);
998                            } else {
999                                this.fields[element.name] = {
1000                                    element,
1001                                    rules: rules,
1002                                    validateOnChange: onChange,
1003                                    state: {
1004                                        valid: null,
1005                                        rules: {}
1006                                    }
1007                                }
1008                            }
1009                        }
1010                    } else {
1011                        console.error('Element will not validate', element);
1012                    }
1013                },
1014                onSubmit(event) {
1015                    if (event.target.tagName === 'FORM') {
1016                        event.preventDefault();
1017
1018                        this.validate()
1019                            .then(() => event.target.submit())
1020                            .catch(invalidElements => {});
1021                    }
1022                },
1023                onChange(event) {
1024                    event.target.dataset.onChange = 'true';
1025                    if (!Object.keys(this.fields).length) {
1026                        this.setupFields(formElement.elements);
1027                    }
1028                    if (!Object.keys(this.fields).includes(event.target.name)) {
1029                        this.setupField(event.target);
1030                    }
1031                    const field = this.fields[event.target.name];
1032
1033                    this.validateField(field);
1034                    field && field.element.removeAttribute('data-on-change')
1035                },
1036                validateSafe() {
1037                    return new Promise(resolve => this.validate().then(() => resolve(true)).catch(() => {}))
1038                },
1039                validate() {
1040                    if (!Object.keys(this.fields).length || !Object.keys(this.fields).length !== formElement.elements.length) {
1041                        this.setupFields(formElement.elements);
1042                    }
1043                    return new Promise(async (resolve, reject) => {
1044                        if (formElement.elements) {
1045                                                        await raceSome(this.validateFields(), result => result !== true)
1046                            const invalidFields = Object.values(this.fields).filter(field => !field.state.valid);
1047                            this.state.valid = invalidFields.length === 0;
1048                            if (this.state.valid) {
1049                                resolve();
1050                            } else {
1051                                if (options.scrollToFirstError && invalidFields.length > 0) {
1052                                    invalidFields[0].element.focus()
1053                                    invalidFields[0].element.select && invalidFields[0].element.select();
1054                                }
1055                                reject(invalidFields.map(field => field.element));
1056                            }
1057                        }
1058                    });
1059                },
1060                                validateFields() {
1061                    const fields = Object.values(this.fields);
1062
1063                                        fields.forEach(field => {
1064                        this.getMessageContainer(field).classList.remove(options.validClassName, options.invalidClassName)
1065                    });
1066                                        return fields.map(field => this.validateField(field))
1067                },
1068                                validateField(field) {
1069                                        if (! field || ! elementWillValidate(field.element)) {
1070                        return new Promise(resolve => resolve(true))
1071                    }
1072
1073                    let value;
1074                    if (field.element.type === 'checkbox') {
1075                        value = getCheckedValues(field);
1076                    } else if (field.element.type === 'radio') {
1077                        value = getCheckedValues(field)[0] || undefined;
1078                    } else if (field.element.tagName === 'SELECT' && field.element.multiple) {
1079                        value = Array.from(field.element.selectedOptions).map(opt => opt.value);
1080                    } else {
1081                        value = field.element.value;
1082                    }
1083
1084                    const rules = field.rules || {};
1085
1086                                        field.state.valid = true;
1087                    this.showFieldState(field);
1088
1089                
1090                                        const fieldValidations = Object.keys(rules).filter(rule => formValidationRules[rule]).map(async rule => {
1091                        return runValidateFn.call(this, rule, rules[rule], value, field).then(result => {
1092                            field.state.rules[rule] = result;
1093                            return result;
1094                        })
1095                    });
1096
1097                    return new Promise(resolve => {
1098                                                Promise.all(fieldValidations).then(results => {
1099                                                                                    field.state.valid = !elementWillValidate(field.element) || rules.length === 0 || !results.some(isInvalidRuleResult)
1100                            this.showFieldState(field);
1101                            resolve(field.state.valid);
1102                        })
1103                    });
1104                },
1105                                getMessagesByField(field) {
1106                    const messages = [];
1107                    const invalidRules = Object.keys(field.state.rules).filter(rule => isInvalidRuleResult(field.state.rules[rule]));
1108
1109                    field.rules && Object.keys(field.rules).forEach((rule) => {
1110                        if (invalidRules.includes(rule)) {
1111                            const customMessage = field.element.getAttribute('data-msg-' + rule);
1112                            const message = customMessage ? customMessage : field.state.rules[rule];
1113                            const ruleOptions = JSON.parse(JSON.stringify(field.rules[rule]));
1114
1115                            if (typeof message === 'undefined' || message === null || (typeof message !== 'string' && ! message.type)) {
1116                                messages.push(hyva.strf('Validation rule "%0" failed.', rule));
1117                            } else if (Array.isArray(ruleOptions)) {
1118                                ruleOptions.unshift(message.type ? message.content : message);
1119                                const content = hyva.strf.apply(null, ruleOptions);
1120                                messages.push(message.type ? {type: message.type, content} : content);
1121                            } else {
1122                                const content = hyva.strf(message.type ? message.content : message, ruleOptions)
1123                                messages.push(message.type ? {type: message.type, content} : content);
1124                            }
1125                        }
1126                    });
1127                    return messages;
1128                },
1129                /** @deprecated */
1130                getFieldWrapper(field) {
1131                                        return this.getMessageContainer(field)
1132                },
1133                getMessageContainer(field) {
1134                    let container;
1135                    const pageSelector = field.element.getAttribute('data-validation-container') || options.pageMessagesContainerSelector;
1136                    if (pageSelector) {
1137                        container = document.querySelector(pageSelector)
1138                            || containerNotFound(pageSelector, field.element)
1139                    } else {
1140                        const containerSelector = classNamesToSelector(options.fieldWrapperClassName);
1141                        container = field.element.closest(containerSelector)
1142                            || createMessageContainer(field.element, options.fieldWrapperClassName)
1143                            || containerNotFound(containerSelector, field.element);
1144                    }
1145
1146                    return container;
1147                },
1148                showFieldState(field) {
1149                    const container = this.getMessageContainer(field),
1150                        hasErrorMessages = hasMessagesWrapper.call(this, field, options.messagesWrapperClassName),
1151                        messages = this.getMessagesByField(field).map(m => {
1152                            return m.type !== 'html' ? escapeHtml(m.type ? m.content : m) : m.content;
1153                        });
1154                    container.classList.toggle(options.validClassName, field.state.valid && ! hasErrorMessages);
1155                    container.classList.toggle(options.invalidClassName, !field.state.valid || hasErrorMessages);
1156                    this.createHtmlErrorMessage(field, messages);
1157
1158                    if (field.state.valid) {
1159                        field.element.removeAttribute('aria-invalid');
1160                    } else {
1161                        field.element.setAttribute('aria-invalid', 'true');
1162                        if (! document.activeElement) {
1163                            field.element.focus();
1164                        }
1165                    }
1166                },
1167                removeMessages(field, messagesClass) {
1168                    if (! hasMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName)) {
1169                        return;
1170                    }
1171
1172                    const msgWrapper = getMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName);
1173                    const messages = msgWrapper.querySelectorAll(`[data-msg-field='${field.element.name}']`);
1174                    Array.from(messages).forEach(msg => msg.remove());
1175                    if (msgWrapper && msgWrapper.childElementCount === 0) {
1176                        field.element.removeAttribute('aria-errormessage');
1177                        field.element.removeAttribute('aria-describedby');
1178                        msgWrapper.remove();
1179                    }
1180                },
1181                createErrorMessage(field, messages) {
1182                    const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml)
1183                    this.createHtmlErrorMessage(field, htmlMessages);
1184                },
1185                createHtmlErrorMessage(field, messages) {
1186                    this.removeMessages(field, options.messagesWrapperClassName);
1187                    field.element.removeAttribute('aria-errormessage');
1188                    field.element.removeAttribute('aria-describedby');
1189
1190                    if (!field.state.valid) {
1191                        const msgWrapper = this.addHtmlMessages(field, options.messagesWrapperClassName, messages);
1192                        field.element.setAttribute('aria-errormessage', msgWrapper.id);
1193                        field.element.setAttribute('aria-describedby', msgWrapper.id);
1194                    }
1195                },
1196                /** @deprecated */
1197                createMessage(field, message) {
1198                                        return this.addMessages(field, options.messagesWrapperClassName, message);
1199                },
1200                addMessages(field, messagesClass, messages) {
1201                    const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml)
1202                    return this.addHtmlMessages(field, messagesClass, htmlMessages);
1203                },
1204                addHtmlMessages(field, messagesClass, htmlMessages) {
1205                    const msgWrapper = getMessagesWrapper.call(this, field, messagesClass);
1206
1207                    (Array.isArray(htmlMessages) ? htmlMessages : [htmlMessages]).forEach((htmlMessage) => {
1208                        const li = document.createElement('li');
1209                        li.innerHTML = htmlMessage;
1210                        li.setAttribute('data-msg-field', field.element.name);
1211                        msgWrapper.appendChild(li);
1212                    });
1213
1214                    return msgWrapper;
1215                },
1216                setField(name, value) {
1217                    this.fields[name].element.value = value;
1218                    this.fields[name].element.dispatchEvent((new Event('input')));
1219                    this.validateField(this.fields[name]);
1220                }
1221            }
1222        }
1223
1224        function getFieldName(field) {
1225                        const fieldName = field.element?.getAttribute('title')
1226                || document.querySelector(`label[for="${field.element?.id}"]`)?.innerText;
1227
1228            return fieldName
1229                ? fieldName.trim()
1230                : '';
1231        }
1232
1233        hyva.formValidation = formValidation;
1234        hyva.formValidation.rules = formValidationRules;
1235        hyva.formValidation.setInputAttributeRuleName = (attrName, ruleName) => INPUT_ATTRIBUTE_RULES[attrName] = ruleName || attrName;
1236        hyva.formValidation.setInputTypeRuleName = (typeName, ruleName) => INPUT_TYPE_RULES[typeName] = ruleName || typeName;
1237        hyva.formValidation.addRule = (name, validator) => formValidationRules[name] = validator;
1238        hyva.formValidation.getFieldName = getFieldName;
1239    }(window.hyva = window.hyva || {}));
1240
1241    window.addEventListener('alpine:init', () => {
1242        Alpine.data('hyva.formValidation', hyva.formValidation);
1243        Alpine.data('hyva.formValidation($el)', hyva.formValidation);
1244    }, {once: true});
1245</script>
vendor: 1 bytes, line 1245
1245
1246<script>
1247    // https://github.com/Fischer-L/autoComplt
1248    !function(t,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():t.autoComplt=t.returnExports=e()}(this,function(){"use strict";Array.prototype.indexOf||(Array.prototype.indexOf=function(t,e){if(void 0===this||null===this)throw new TypeError('"this" is null or not defined');var o=this.length>>>0;for(e=+e||0,Math.abs(e)===1/0&&(e=0),0>e&&(e+=o,0>e&&(e=0));o>e;e++)if(this[e]===t)return e;return-1});var t=function(){var t=-1;if("Microsoft Internet Explorer"==navigator.appName){var e=navigator.userAgent,o=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})");null!=o.exec(e)&&(t=+RegExp.$1)}return-1===t?NaN:t},e=function(){var e=window.navigator.userAgent.toLowerCase();return e.search(/mobile|windows phone/)>=0?i.modeMobile:t()<=9?i.modePC:o().windowWidth>i.modeMobileW?i.modePC:i.modeMobile},o=function(){return window.innerWidth?{windowWidth:window.innerWidth,windowHeight:window.innerHeight}:document.documentElement.offsetHeight?{windowWidth:document.documentElement.offsetWidth,windowHeight:document.documentElement.offsetHeight}:document.body.offsetHeight?{windowWidth:document.body.offsetWidth,windowHeight:document.body.offsetHeight}:document.documentElement.clientHeight?{windowWidth:document.documentElement.clientWidth,windowHeight:document.documentElement.clientHeight}:document.body.clientHeight?{windowWidth:document.body.clientWidth,windowHeight:document.body.clientHeight}:{windowWidth:-1,windowHeight:-1}},i=function(t){return i=t,t.modePC="modePC",t.modeMobile="modeMobile",t.modeMobileW=768,t.autoCompltListClass="autoComplt-list",t.autoCompltHintClass="autoComplt-hint",t.autoCompltHintSelectedClass="autoComplt-hint-selected",t.maxHintNum=e()===i.modePC?10:5,t.autoCompltDelay=250,t.hiddenArg_close_list_n_make_final_selection="hiddenArg_close_list_n_make_final_selection",t.listStatus={attr:"data-listStatus",open:"open"},t.keyCode={up:38,down:40,esc:27,enter:13},t.defaultStyles={autoCompltList:{maxHeight:"none",border:"1px solid #aaa",padding:"0",margin:"0",zIndex:99,overflowX:"hidden",overflowY:"auto",display:"none",position:"absolute",backgroundColor:"#fff"},autoCompltHint:{height:"1.5em",padding:e()===i.modePC?"2px 6px 2px 10px":"6px 6px 6px 10px",margin:"6px 0",overflow:"hidden",listStyleType:"none",color:"#000",backgroundColor:"#fff",cursor:"default",fontSize:"1em"},autoCompltHintSelected:{color:"#fff",backgroundColor:"#3399ff"}},t.adjStyleAttrs={autoCompltList:["border","maxHeight","backgroundColor"],autoCompltHint:["height","padding","margin","color","backgroundColor","fontSize"],autoCompltHintSelected:["color","backgroundColor"]},t.listenersSupported=["select"],i}({}),n=function(t){return t||(t=window.event),t.target||(t.target=t.srcElement),t.stopBubble=function(){this.cancelBubble=!0,this.stopPropoagation&&this.stopPropoagation()},t.stopDefault=function(){return this.preventDefault&&this.preventDefault(),this.returnValue=!1,!1},t},l=function(t,e,o){t.addEventListener?t.addEventListener(e,o):t.attachEvent&&t.attachEvent("on"+e,o)},s=function(t,e,o){t.removeEventListener?t.removeEventListener(e,o):t.detachEvent&&t.detachEvent("on"+e,o)},u=function(t,e){var o=null;if(window.getComputedStyle)o=window.getComputedStyle(t)[e]||null;else if(t.currentStyle){o=t.currentStyle&&t.currentStyle[e];var i,n,l=t.style;null==o&&l&&l[e]&&(o=l[e]),i=l.left,n=t.runtimeStyle&&t.runtimeStyle.left,n&&(t.runtimeStyle.left=t.currentStyle.left),l.left="fontSize"===e?"1em":o,o=l.pixelLeft+"px",l.left=i,n&&(t.runtimeStyle.left=n)}return o},a={buildElem:function(t){var e=document.createElement("DIV");return e.innerHTML=t,e.firstChild.cloneNode(!0)},buildHint:function(t,e){return"string"==typeof t&&t?(t=this.buildElem('<li class="'+i.autoCompltHintClass+'">'+t+"</li>"),t.style.height=t.style.lineHeight=e.autoCompltHint.height,t.style.padding=e.autoCompltHint.padding,t.style.margin=e.autoCompltHint.margin,t.style.overflow=e.autoCompltHint.overflow,t.style.listStyleType=e.autoCompltHint.listStyleType,t.style.color=e.autoCompltHint.color,t.style.backgroundColor=e.autoCompltHint.backgroundColor,t.style.cursor=e.autoCompltHint.cursor,t.style.fontSize=e.autoCompltHint.fontSize,t):null},buildList:function(t){var e=this.buildElem('<ul class="'+i.autoCompltListClass+'"></ul>');return e.style.maxHeight=t.autoCompltList.maxHeight,e.style.border=t.autoCompltList.border,e.style.padding=t.autoCompltList.padding,e.style.margin=t.autoCompltList.margin,e.style.zIndex=t.autoCompltList.zIndex,e.style.overflowX=t.autoCompltList.overflowX,e.style.overflowY=t.autoCompltList.overflowY,e.style.display=t.autoCompltList.display,e.style.position=t.autoCompltList.position,e.style.backgroundColor=t.autoCompltList.backgroundColor,e}},r=function(t){this.uiElem=null,this.assocInput=t,this.mouseOnList=!1,this.onMouseSelectionListener=null,this.maxHintNum=i.maxHintNum,this.styles=JSON.parse(JSON.stringify(i.defaultStyles))};r.prototype.genList=function(){if(!this.uiElem){var t=this;this.uiElem=a.buildList(this.styles),l(this.uiElem,"mouseover",function(e){e=n(e),t.isHint(e.target)&&(t.pick(e.target),t.autoScroll())}),l(this.uiElem,"mouseout",function(e){t.unpick()}),l(this.uiElem,"mousedown",function(e){t.mouseOnList=!0,setTimeout(function(){t.assocInput.focus()},50)}),l(this.uiElem,"mouseup",function(e){e=n(e),t.isHint(e.target)&&(t.pick(e.target),"function"==typeof t.onMouseSelectionListener&&t.onMouseSelectionListener())}),document.body.appendChild(this.uiElem)}},r.prototype.isHint=function(t){if(t&&"object"==typeof t&&1===t.nodeType){var e=" "+t.className+" ";return e.indexOf(" "+i.autoCompltHintClass+" ")>=0}return!1},r.prototype.putHints=function(t){var e=0;if(t instanceof Array){var o,i,n=[];for(i=Math.min(t.length,this.maxHintNum),o=0;i>o;o++)n.push(a.buildHint(t[o],this.styles)),n[n.length-1]||n.pop();if(n.length>0){var l=document.createDocumentFragment();for(o=0,e=n.length;e>o;o++)l.appendChild(n[o]);this.clearHints(),this.genList(),this.uiElem.appendChild(l)}}return e},r.prototype.clearHints=function(){this.uiElem&&(this.uiElem.innerHTML="")},r.prototype.isOpen=function(){return this.uiElem?this.uiElem.getAttribute(i.listStatus.attr)==i.listStatus.open:!1},r.prototype.open=function(){var t;if(this.uiElem&&(t=this.uiElem.querySelectorAll("."+i.autoCompltHintClass))&&t.length){var e,o;for(o=this.assocInput.getBoundingClientRect(),this.uiElem.style.top=(document.documentElement&&document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop)+o.bottom+"px",this.uiElem.style.left=o.left+"px",o=o.right-o.left-parseFloat(u(this.uiElem,"borderLeftWidth"))-parseFloat(u(this.uiElem,"borderRightWidth")),this.uiElem.style.width=o+"px",e=0,o=0;e<t.length;
1248e++)o+=parseFloat(u(t[e],"height"))+parseFloat(u(t[e],"paddingTop"))+parseFloat(u(t[e],"paddingBottom")),t[e+1]&&(o+=Math.max(parseFloat(u(t[e],"marginBottom")),parseFloat(u(t[e+1],"marginTop"))));o+=parseFloat(u(t[0],"marginTop"))+parseFloat(u(t[t.length-1],"marginBottom")),this.uiElem.style.height=o+1+"px",this.uiElem.setAttribute(i.listStatus.attr,i.listStatus.open),this.uiElem.style.display="block"}},r.prototype.close=function(){this.uiElem&&(this.mouseOnList=!1,this.uiElem.parentNode.removeChild(this.uiElem),this.uiElem=null)},r.prototype.autoScroll=function(){var t=this.getPicked();if(t){var e,o=0,i=0,n=t.clientHeight,l=parseFloat(u(t,"marginTop")),s=parseFloat(u(t,"marginBottom"));for(e=t.previousSibling,i=n+(e?Math.max(l,s):l);e;)o+=n,e=e.previousSibling,o+=e?Math.max(l,s):l;(this.uiElem.clientHeight+this.uiElem.scrollTop-o<i||o-this.uiElem.scrollTop<i)&&(this.uiElem.scrollTop=o)}},r.prototype.pick=function(t){if(this.uiElem){var e=null;if(this.isHint(t))e=t;else if("number"==typeof t&&(t>=0||-1===t)){var o=this.uiElem.querySelectorAll("."+i.autoCompltHintClass);o.length>0&&(e=+t,e=-1===e||e>o.length-1?o.length-1:e,e=o[e])}null!==e&&(this.unpick(),e.className+=" "+i.autoCompltHintSelectedClass,e.style.color=this.styles.autoCompltHintSelected.color,e.style.backgroundColor=this.styles.autoCompltHintSelected.backgroundColor)}},r.prototype.unpick=function(){if(this.uiElem){var t=this.getPicked();t&&(t.className=i.autoCompltHintClass,t.style.color=this.styles.autoCompltHint.color,t.style.backgroundColor=this.styles.autoCompltHint.backgroundColor)}},r.prototype.getPicked=function(){return this.uiElem?this.uiElem.querySelector("."+i.autoCompltHintSelectedClass)||null:null};var c={enable:function(t,o){if(t&&"object"==typeof t&&"string"==typeof t.tagName&&"input"==t.tagName.toLowerCase()&&"text"==t.type&&1===t.nodeType&&!t.autoComplt){t.autoComplt={};var u=i.autoCompltDelay,a=!0,c="",p=null,m=null,d=new r(t),f=function(){if(t.value.length>0&&a&&"function"==typeof p&&c!==t.value){var e={that:t,compltTarget:c=t.value,compltTargetMatchCurrentTarget:function(){return e.compltTarget===c},call:function(){e.compltTargetMatchCurrentTarget()&&p.call(e.that,e.compltTarget,e.openHint)},openHint:function(t){e.compltTargetMatchCurrentTarget()&&(d.putHints(t)?d.open():e.that.autoComplt.close())}};setTimeout(e.call,u)}},h=function(){if(a){var e=d.getPicked();e?t.value=e.innerHTML:t.value=c}},y=function(e){d.mouseOnList?(t.focus(),d.mouseOnList=!1):d.isOpen()&&t.autoComplt.close(i.hiddenArg_close_list_n_make_final_selection)},g=function(o){if(e()!==i.modeMobile&&(o=n(o),a))if("keydown"!=o.type||!d.isOpen()||o.keyCode!==i.keyCode.up&&o.keyCode!==i.keyCode.down){if("keyup"==o.type){var l=!1;switch(o.keyCode){case i.keyCode.up:case i.keyCode.down:d.isOpen()||(l=!0);break;case i.keyCode.esc:d.isOpen()&&(t.value=c,t.autoComplt.close(i.hiddenArg_close_list_n_make_final_selection));break;case i.keyCode.enter:d.isOpen()&&(h(),t.autoComplt.close(i.hiddenArg_close_list_n_make_final_selection));break;default:l=!0}l&&(t.value.length>0?f():t.autoComplt.close())}}else{var s=d.getPicked();o.keyCode===i.keyCode.up?s?s.previousSibling?d.pick(s.previousSibling):d.unpick():d.pick(-1):o.keyCode===i.keyCode.down&&(s?s.nextSibling?d.pick(s.nextSibling):d.unpick():d.pick(0)),d.autoScroll(),h()}},C=function(o){e()!==i.modePC&&(t.value.length>0?f():t.autoComplt.close())},H=function(e){null!=m&&"function"==typeof m[e]&&m[e].call(t)};return t.autoComplt.setHintsFetcher=function(t){return null===t||"function"==typeof t?(p=t,!0):!1},t.autoComplt.setListener=function(t,e){return(null===e||"function"==typeof e)&&i.listenersSupported.indexOf(t)>=0?(null==m&&(m={}),m[t]=e,!0):!1},t.autoComplt.setStyles=function(t,e){var o,n,l=!1;switch(t){case i.autoCompltListClass:o=d.styles.autoCompltList,n=i.adjStyleAttrs.autoCompltList;break;case i.autoCompltHintClass:o=d.styles.autoCompltHint,n=i.adjStyleAttrs.autoCompltHint;break;case i.autoCompltHintSelectedClass:o=d.styles.autoCompltHintSelected,n=i.adjStyleAttrs.autoCompltHintSelected}if(e instanceof Object&&o&&n)for(var s=0;s<n.length;s++)("string"==typeof e[n[s]]||"number"==typeof e[n[s]])&&(l||(l={}),l[n[s]]=o[n[s]]=e[n[s]]);return l},t.autoComplt.config=function(t){var e=!1;if(t instanceof Object){var o;void 0!==t.delay&&(o=Math.floor(t.delay))>0&&(e||(e={}),u=e.delay=o),void 0!==t.maxHintNum&&(o=Math.floor(t.maxHintNum))>0&&(e||(e={}),d.maxHintNum=e.maxHintNum=o)}return e},t.autoComplt.close=function(){c="",d.close(),a&&""!==t.value&&arguments[0]===i.hiddenArg_close_list_n_make_final_selection&&H("select")},t.autoComplt.enable=function(){a=!0},t.autoComplt.disable=function(){a=!1,this.close()},t.autoComplt.destroy=function(){s(t,"blur",y),s(t,"keyup",g),s(t,"keydown",g),this.disable(),delete t.autoComplt},d.onMouseSelectionListener=function(){h(),t.autoComplt.close(i.hiddenArg_close_list_n_make_final_selection)},l(t,"blur",y),l(t,"keyup",g),l(t,"keydown",g),l(t,"input",C),o instanceof Object&&(t.autoComplt.config(o),t.autoComplt.setHintsFetcher(o.hintsFetcher)),t}return null}};return c});
1249</script>
1249
1250<div class="page-wrapper"><div class="before-header-container2"><div class="widget block block-static-block">
1251    </div>
1252</div><header class="page-header"><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white
1253   contentarea"
1254   href="#contentarea">
1255    <span>
1256        Skip to Content    </span>
1257</a>
1258</header><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div>
1259<div class="page messages">
1259<script>
1260        function initMessages() {
1261        "use strict";
1262        return {
1263            messages: window.mageMessages || [],
1264            isEmpty() {
1265                return this.messages.reduce(
1266                    function (isEmpty, message) {
1267                        return isEmpty && message === undefined
1268                    }, true
1269                )
1270            },
1271            removeMessage(messageIndex) {
1272                this.messages[messageIndex] = undefined;
1273            },
1274            addMessages(messages, hideAfter) {
1275                messages.map((message) => {
1276                    this.messages = this.messages.concat(message);
1277                    if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) {
1278                        hideAfter = window.defaultSuccessMessageTimeout;
1279                    }
1280                    if (hideAfter) {
1281                        this.setHideTimeOut(this.messages.length - 1, hideAfter);
1282                    }
1283                });
1284            },
1285            setHideTimeOut(messageIndex, hideAfter) {
1286                if (hideAfter == false) {
1287                    return;
1288                }
1289                setTimeout((messageIndex) => {
1290                    this.removeMessage(messageIndex);
1291                }, hideAfter, messageIndex);
1292            },
1293            eventListeners: {
1294                ['@messages-loaded.window'](event) {
1295                    this.addMessages(event.detail.messages, event.detail.hideAfter)
1296                },
1297                ['@private-content-loaded.window'](event) {
1298                    const data = event.detail.data;
1299                    if (
1300                        data.messages &&
1301                        data.messages.messages &&
1302                        data.messages.messages.length
1303                    ) {
1304                        this.addMessages(data.messages.messages, event.detail.hideAfter);
1305                    }
1306                },
1307                ['@clear-messages.window']() {
1308                    this.messages = [];
1309                }
1310            }
1311        }
1312    }
1313</script>
1313
1314<section id="messages"
1315         x-data="initMessages()"
1316         x-bind="eventListeners"
1317         aria-live="assertive"
1318         role="alert"
1319>
1320    <template x-if="!isEmpty()">
1321        <div>
1322            <div class="backdrop z-40"></div>
1323            <template x-for="(message, index) in messages" :key="index">
1324                <div>
1325                    <template x-if="message">
1326                        <div
1327                            class="fixed top-1/2 left-1/2 -translate-y-1/2 -translate-x-1/2 z-50 flex flex-col items-center gap-4 md:gap-0 md:items-end mx-auto w-full max-w-full md:max-w-[520px]">
1328                            <button
1329                                type="button"
1330                                class="w-12 h-12 rounded-full flex items-center justify-center text-primary bg-white md:-mr-12 md:-mb-2"
1331                                aria-label="Fechar mensagem"
1332                                @click.prevent="removeMessage(index)"
1333                            >
1334                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-6 h-6" width="18" height="18" aria-hidden="true">
1335  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
1336</svg>
1337                            </button>
1338                            <div
1339                                class="message-info w-full text-center py-6 px-4 lg:py-20 lg:px-10 bg-white rounded-2xl"
1340                                :class="message.type"
1341                                :ui-id="'message-' + message.type">
1342                               <div class="message-icon block mx-auto mb-7 w-[98px] h-[98px] p-6 rounded-3xl">
1343                                   <template x-if="message.type === 'success'">
1344                                       <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-12 h-12 text-white" width="48" height="48" aria-hidden="true">
1345  <path stroke-linecap="round" stroke-linejoin="round" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/>
1346</svg>
1347                                   </template>
1348                                    <template x-if="message.type === 'error'">
1349                                       <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-12 h-12 text-white" width="48" height="48" aria-hidden="true">
1350  <path stroke-linecap="round" stroke-linejoin="round" d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"/>
1351</svg>
1352                                   </template>
1353
1354                                    <template x-if="message.type === 'info'">
1355                                       <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-12 h-12 text-white" width="48" height="48" aria-hidden="true">
1356  <path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
1357</svg>
1358                                   </template>
1359                                    <template x-if="message.type === 'warning'">
1360                                       <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-12 h-12 text-white" width="48" height="48" aria-hidden="true">
1361  <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/>
1362</svg>
1363                                   </template>
1364
1365                                   <template x-if="message.type === 'forgot_password'">
1366                                       <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 47 47" fill="currentColor" class="w-12 h-12 text-white" aria-hidden="true">
1367    <path d="M9.518 9.164c-1.046.044-1.234.073-1.706.269-.998.414-1.917 1.137-2.471 1.945-.383.558-.711 1.275-.803 1.756-.12.627-.197 19.492-.085 20.878.093 1.149.304 1.76.894 2.587.709.992 1.586 1.645 2.788 2.074l.74.265 6.549-.023c7.359-.025 6.827.02 7.29-.619.478-.659.34-1.469-.333-1.956l-.315-.228-3.102-.007a556.578 556.578 0 0 1-6.513-.061l-3.411-.055-.36-.212c-.415-.243-.923-.79-1.128-1.214-.132-.272-.143-.698-.168-6.089-.015-3.188.001-7.042.035-8.564l.062-2.768 7.763 5.098 7.764 5.098h.984l7.756-5.093c4.266-2.801 7.775-5.073 7.799-5.049.024.024.065 2.06.092 4.525.053 4.893.044 4.798.517 5.24a1.41 1.41 0 0 0 1.936 0c.514-.486.483-.024.478-7.103-.004-4.937-.028-6.505-.104-6.776-.054-.194-.242-.652-.418-1.017-.263-.55-.441-.786-1.032-1.373-.764-.758-1.283-1.084-2.255-1.414l-.562-.191-13.753.014c-7.564.007-14.282.036-14.928.063m24.283 2.811 4.073.049.509.279c.409.223.576.376.846.776.276.408.319.517.235.598-.056.056-3.671 2.444-8.033 5.309L23.5 24.194l-7.461-4.902-7.986-5.244c-.289-.188-.544-.373-.567-.409-.078-.127.553
1367-.988.884-1.207.634-.418.488-.405 5.025-.449 6.301-.06 15.768-.064 20.406-.008m6.571 20.469c-.36.272-1.133 1.009-4.202 4.006l-2.879 2.811-1.37-1.332c-.753-.732-1.535-1.441-1.736-1.575-1.042-.69-2.488.172-2.267 1.352.07.371.944 1.344 2.834 3.155 2.02 1.936 1.917 1.858 2.503 1.895l.489.031.732-.655c.402-.36 2.326-2.235 4.274-4.167 3.537-3.507 3.866-3.879 3.862-4.365-.003-.295-.4-.949-.696-1.148-.375-.252-1.216-.256-1.544-.008" fill-rule="evenodd"/>
1368</svg>
1369                                   </template>
1370                                   <template x-if="message.type === 'password_reset'">
1371                                       <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-12 h-12 text-white" width="48" height="48" aria-hidden="true">
1372  <path stroke-linecap="round" stroke-linejoin="round" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/>
1373</svg>
1374                                   </template>
1375
1376                               </div>
1377                                <div x-html="message.text"></div>
1378                            </div>
1379                        </div>
1380                    </template>
1381                </div>
1382            </template>
1383        </div>
1384    </template>
1385</section>
1386</div><div class="page-title-wrapper sr-only&#x20;text-3xl">
1387    <h1 class="page-title"
1388        >
1389        <span class="base" data-ui-id="page-title-wrapper" >Customer Login</span>    </h1>
1390
1391    </div>
1392<div class="columns"><div class="column main">
1393<div x-data="initWarmerTrack" @private-content-loaded.window="sendStats"></div>
1394
1395<script>
1396    document.addEventListener('alpine:init', () => {
1397        Alpine.data('initWarmerTrack', () => ({
1398            ...{"pageType":"customer_account_login","url":"https:\/\/stata-brazil.com\/cache_warmer\/track\/","cookieName":"mst-cache-warmer-track","cookieValue":null},
1399
1400            sendStats: function () {
1401                var originCookieValue = hyva.getCookie(this.cookieName);
1402
1403                document.cookie = this.cookieName + '=' + window.performance.timing.fetchStart;
1404
1405                if (this.cookieValue === null && originCookieValue === null) {
1406                    return; //we don't know cached or not now
1407                }
1408
1409                var uri = window.location.href;
1410                var ttfb = window.performance.timing.responseStart - window.performance.timing.fetchStart;
1411                var isHit = this.cookieValue != originCookieValue ? 1 : 0;
1412
1413                fetch(this.url + '?' + (new URLSearchParams({
1414                    uri: uri,
1415                    ttfb: ttfb,
1416                    isHit: isHit
1417                }))).then(response => response.json());
1418            }
1419        }));
1420    });
1421</script>
1421
1422<span data-mage-init='{"emailCapture": {"url": "https://stata-brazil.com/event/action/capture/"}}'></span>
1423<div data-mage-init='{"Mirasvit_OptimizeJs\/js\/bundle\/track":{"callbackUrl":"https:\/\/stata-brazil.com\/optimizeJs\/bundle\/track\/","checkUrl":"https:\/\/stata-brazil.com\/optimizeJs\/bundle\/check\/","layout":"customer_account_login","mode":"background","locale":"pt_BR","theme":"TimberlakeHyva\/timberlake"}}'></div>
1424
1425<section class="customer-authentication">
1426    <div class="pb-20">
1427        <!--Logo-->
1428        <div class="brightness-0 invert flex justify-center lg:justify-start pt-[26px] pb-[22px] lg:pt-16 lg:pb-24">
1429            <div class="order-1 ">
1430    <a
1431        class="flex items-center justify-center max-w-[206px] max-h-[34px]"
1432        href="https://stata-brazil.com/"
1433        aria-label="Ir&#x20;para&#x20;a&#x20;p&#xE1;gina&#x20;inicial"
1434    >
1435        <img fetchpriority="high" 
1436            class="main-logo"
1437            src="https://stata-brazil.com/static/version1790944496/frontend/TimberlakeHyva/timberlake/pt_BR/images/stata-logo.png"
1438            alt="Stata&#x20;Brazil"
1439            width="226"
1440            height="76"
1441        />
1442
1443                <img fetchpriority="high" 
1444            class="secondary-logo"
1445            src="https://stata-brazil.com/static/version1790944496/frontend/TimberlakeHyva/timberlake/pt_BR/images/stata-logo.png"
1446            alt="Stata&#x20;Brazil"
1447            width="226"
1448            height="76"
1449        />
1450        
1451            </a>
1452</div>
1453        </div>
1454        <div class="lg:flex lg:gap-2.5 xl:gap-5">
1455            <div>
1456                <h2 class="text-white mb-6 lg:mb-0 max-lg:text-2xl text-center lg:text-left pt-16">
1457                    Cutting Edge Solutions in Data Science,Econometrics &amp; Forecasting                </h2>
1458            </div>
1459            <div class="w-full lg:max-w-[460px]"
1460                 x-data="{ activeTab:  0 }">
1461                <div class="bg-white rounded-t-3xl rounded-b-sm">
1462                    <div class="pt-6 px-4 pb-4 text-center lg:pt-10 lg:px-6">
1463                        <h5 class="pb-1">
1464                            Welcome To Timberlake                        </h5>
1465                        <p class="text-sm text-secondary">
1466                            Log in or create an account below                        </p>
1467                    </div>
1468                    <h2 class="sr-only">Authentication Tabs</h2>
1469                    <nav aria-label="Sign&#x20;In&#x20;and&#x20;Sign&#x20;Up&#x20;Tabs">
1470                        <ul class="flex items-center justify-center gap-2.5"
1471                            role="tablist">
1472                            <li class="basis-1/2"
1473                                role="presentation">
1474                                <button class="w-full pb-2.5 px-2 font-bold relative"
1475                                        role="tab"
1476                                        aria-controls="Sign&#x20;In"
1477                                        @click="activeTab = 0"
1478                                        :aria-selected="activeTab === 0"
1479                                        :class="{
1480                                        'text-brightBlue after:w-full after:h-1 after:rounded-sm after:bg-brightBlue after:absolute after:bottom-0 after:left-0': activeTab === 0
1481                                    }">
1482                                    Sign In                                </button>
1483                            </li>
1484                            <li class="basis-1/2"
1485                                role="presentation">
1486                                <button class="w-full pb-2.5 px-2 font-bold relative"
1487                                        role="tab"
1488                                        aria-controls="&#x20;Sign&#x20;Up"
1489                                        @click="activeTab = 1"
1490                                        :aria-selected="activeTab === 1"
1491                                        :class="{
1492                                        'text-brightBlue after:w-full after:h-1 after:rounded-sm after:bg-brightBlue after:absolute after:bottom-0 after:left-0': activeTab === 1
1493                                    }">
1494                                    Sign Up                                </button>
1495                            </li>
1496                        </ul>
1497                    </nav>
1498                </div>
1499                <div class="bg-white rounded-t-sm rounded-b-3xl mt-px py-6 px-4 lg:p-10">
1500                    <div x-show.transition.in.opacity.duration.600="activeTab === 0"
1501                         role="tabpanel"
1502                         aria-labelledby="&#x20;Sign&#x20;In Tab">
1503                        <div id="customer-login-container" class="login-container"><form class="form form-login"
1504      action="https://stata-brazil.com/customer/account/loginPost/referer/aHR0cHM6Ly9zdGF0YS1icmF6aWwuY29tL2N1c3RvbWVyL2FjY291bnQvaW5kZXgv/"
1505      method="post"
1506      x-data="initCustomerLoginForm()"
1507      @submit.prevent="submitForm()"
1508      id="customer-login-form">
1509    <input name="form_key" type="hidden" value="MKRqwFeJZFPuKz00" />    <fieldset class="fieldset login">
1510        <div class="field email required pb-2">
1511            <div class="control">
1512                <input name="login[username]"
1513                       class="form-input peer"
1514                       required
1515                       value=""
1516                       autocomplete="off"
1517                       id="login-email"
1518                       type="email"
1519                       placeholder="Email"
1520                       title="Email"
1521                />
1522                <label class="label" for="login-email">
1523                    <span>Email</span>
1524                </label>
1525            </div>
1526        </div>
1527        <div class="field password required">
1528            <div class="control flex items-center">
1529                <div class="sr-only" aria-live="polite">
1530                    <template x-if="!showPassword">
1531                                <span>
1532                                    Senha oculta                                </span>
1533                    </template>
1534                    <template x-if="showPassword">
1535                                <span>
1536                                    Senha exibida                                </span>
1537                    </template>
1538                </div>
1539                <input name="login[password]"
1540                       class="form-input peer pr-9"
1541                       required
1542                       :type="showPassword ? 'text' : 'password'"
1543                       autocomplete="off"
1544                       id="login-pass"
1545                       placeholder="Password"
1546                       title="Password"
1547                />
1548                <label for="login-pass" class="label">
1549                    <span>Password</span>
1550                </label>
1551                <button
1552                    type="button"
1553                    x-on:click="showPassword = !showPassword"
1554                    :aria-pressed="showPassword ? 'true' : 'false'"
1555                    class="absolute top-1/2 -translate-y-1/2 right-3"
1556                    :aria-label="showPassword ? 'Ocultar\u0020senha' : 'Show\u0020Password'"
1557                >
1558                    <template x-if="!showPassword">
1559                        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="w-6 h-6" aria-hidden="true">
1560    <path d="M2.673 8.056c-.225.08-.457.285-.56.495-.12.243-.128.678-.016.887.129.243 1.161 1.275 1.75 1.75.15.122.273.236.273.254 0 .018-.454.723-1.008 1.566-.555.842-1.031 1.595-1.058 1.672-.153.427.042.946.445 1.182.339.198.8.166 1.121-.079.076-.058.554-.747 1.161-1.671l1.038-1.582c.004-.005.189.08.411.189.223.109.519.246.658.303.312.13 1.206.438 1.382.476.082.018.131.053.132.095.001.037-.093.832-.208 1.767-.193 1.561-.206 1.716-.156 1.892a.996.996 0 0 0 1.553.55c.09-.065.212-.2.27-.3.098-.168.124-.318.319-1.865.117-.925.22-1.69.229-1.7.01-.009.232.001.494.022.61.051 1.584.051 2.194 0 .262-.021.484-.031.494-.022.009.01.112.775.229 1.7.195 1.547.221 1.697.319 1.865.447.762 1.583.607 1.823-.25.05-.176.037-.331-.156-1.892a88.188 88.188 0 0 1-.208-1.767c.001-.042.05-.077.132-.095.399-.086 1.423-.477 2.031-.775.227-.111.417-.198.422-.193l1.026 1.55c.559.847 1.083 1.598 1.164 1.668.167.147.404.224.673.22.492-.008.896-.406.944-.93a.704.704 0 0 0-.079-.443c-.055-.118-.526-.86-1.047-1.647a69.58 69.58 0 0 1-.968-1.484c-.011-.03.097-.146.255-.274.59-.477 1.626-1.513 1.747-1.747.179-.345.098-.847-.181-1.126-.294-.294-.613-.376-1.013-.26-.211.061-.274.112-.817.655-1.853 1.855-3.754 2.817-6.307 3.194-.681.101-2.479.101-3.16 0-2.578-.381-4.486-1.352-6.344-3.23-.485-.49-.566-.556-.757-.613-.256-.076-.448-.078-.646-.007" fill-rule="evenodd"/>
1561</svg>
1562                    </template>
1563                    <template x-if="showPassword">
1564                        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="w-6 h-6" aria-hidden="true">
1565    <path d="M11.16 5.043c-3.343.254-6.198 2.157-8.536 5.688-.542.819-.604.949-.604 1.269 0 .32.062.45.604 1.269 1.507 2.277 3.229 3.88 5.147 4.791 2.037.967 4.441 1.198 6.67.639 2.681-.673 4.974-2.468 6.935-5.43.542-.819.604-.949.604-1.269 0-.32-.062-.45-.604-1.269-1.764-2.665-3.814-4.395-6.156-5.197-1.278-.437-2.624-.6-4.06-.491m2.049 2.055c.802.123 1.373.302 2.176.683 1.533.727 2.957 2.037 4.188 3.854.125.184.227.349.227.365 0 .041-.399.627-.694 1.02-.819 1.09-1.86 2.087-2.834 2.714a7.874 7.874 0 0 1-5.772 1.12c-2.234-.431-4.191-1.837-5.895-4.234-.407-.572-.42-.597-.361-.71.076-.145.65-.94.944-1.31.388-.486 1.247-1.357 1.697-1.719a8.64 8.64 0 0 1 1.73-1.1c.838-.398 1.531-.607 2.312-.698l.513-.06c.267-.031 1.382.016 1.769.075m-1.71 1.942a3.05 3.05 0 0 0-2.385 2.12c-.135.434-.135 1.246 0 1.68a3.086 3.086 0 0 0 2.046 2.046c.434.135 1.246.135 1.68 0a3.086 3.086 0 0 0 2.046-2.046c.135-.434.135-1.246 0-1.68-.305-.981-1.076-1.753-2.025-2.031-.361-.106-1.029-.149-1.362-.089m.8
156511 2.021c.378.112.69.537.69.94 0 .33-.216.695-.516.871-.156.091-.23.108-.484.108s-.328-.017-.484-.108c-.581-.342-.683-1.098-.212-1.569.279-.279.612-.359 1.006-.242" fill-rule="evenodd"/>
1566</svg>
1567                    </template>
1568                </button>
1569            </div>
1570        </div>
1571
1572        <div class="control">
1573    <input type="hidden"
1574           value=""
1575           name="g-recaptcha-response"
1576    />
1577</div>
1578                <div class="flex flex-col gap-3 pt-3 lg:pt-4 lg:gap-4">
1579            <a class="btn-link btn-link-primary"
1580               href="https://stata-brazil.com/customer/account/forgotpassword/">
1581                <span>Forgot Your Password?</span>
1582            </a>
1583
1584            <button type="submit" class="btn btn-primary btn-size-lg" name="send"
1585                            >
1586                <span>Sign In</span></button>
1587        </div>
1588        <div>
1589            <template x-if="displayErrorMessage">
1590                <p class="text-red flex items-center">
1591                            <span class="inline-block w-8 h-8 mr-3">
1592                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img">
1593  <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
1594<title>exclamation-circle</title></svg>
1595                            </span>
1596                    <template x-for="errorMessage in errorMessages">
1597                        <span x-html="errorMessage"></span>
1598                    </template>
1599                </p>
1600            </template>
1601        </div>
1602    </fieldset>
1603</form>
1604<div class="w-full">
1605    <p class="my-4 text-sm text-gray-900">
1606Este formulário é protegido pelo reCAPTCHA - se aplicam a <a class="underline" href="https://policies.google.com/privacy" target="_blank" rel="noopener">Política de Privacidade do Google</a> e <a class="underline" href="https://policies.google.com/terms" target="_blank" rel="noopener">Termos de Serviço</a>.</p>
1607</div>
1608<script>
1609    function initCustomerLoginForm() {
1610        hyva.setCookie(
1611            'login_redirect',
1612            window.location.href,
1613            1
1614        )
1615        return {
1616            errors: 0,
1617            hasCaptchaToken: 0,
1618            showPassword: false,
1619            displayErrorMessage: false,
1620            errorMessages: [],
1621            setErrorMessages(messages) {
1622                this.errorMessages = [messages]
1623                this.displayErrorMessage = this.errorMessages.length
1624            },
1625            submitForm() {
1626                // do not rename $form, the variable is the expected name in the recaptcha output
1627                const $form = document.querySelector('#customer-login-form');
1628                    if (!this.hasCaptchaToken) {
1629        this.errors = 1;
1630
1631
1632        const executeGreCaptcha = () => {
1633            grecaptcha.ready(() => {
1634                grecaptcha.execute(
1635                    '6LfZyRsrAAAAAA274PpbvhhN2tBp_pIfniW8yAPZ',
1636                    {action: 'submit'}
1637                ).then((token) => {
1638                    const tokenElement = $form['g\u002Drecaptcha\u002Dresponse'];
1639
1640                    if (tokenElement && token && token.length > 0) {
1641                        $form['g\u002Drecaptcha\u002Dresponse'].value = token;
1642                        this.errors = 0;
1643                        this.hasCaptchaToken = 1;
1644                        (this.submitForm || $form.submit).call(this);
1645                    } else {
1646                        this.errors = 1;
1647                        const error = tokenElement
1648                            ? 'ReCaptcha\u0020validation\u0020failed,\u0020please\u0020try\u0020again'
1649                            : 'ReCaptcha\u0020token\u0020element\u0020is\u0020missing.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020trying\u0020again.';
1650                        if (this.setErrorMessages) {
1651                            this.setErrorMessages([error])
1652                            this.displayErrorMessage = true;
1653                        } else {
1654                            window.dispatchMessages && window.dispatchMessages([{type: "error", text: error}], 5000);
1655                        }
1656                    }
1657                }).catch(exception => {
1658                    console.error(exception || `An unknown error occurred during ReCaptcha validation. Are the tokens and the domain correctly set up in the Google console?`)
1659                });
1660            })
1661        }
1662
1663        if (window.grecaptcha) {
1664            executeGreCaptcha();
1665        } else {
1666            const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6LfZyRsrAAAAAA274PpbvhhN2tBp_pIfniW8yAPZ";
1667            const script = document.createElement('script');
1668            script.setAttribute('type', 'text/javascript');
1669            script.setAttribute('src', recaptchaUrl);
1670            document.head.appendChild(script);
1671
1672            script.addEventListener("load", executeGreCaptcha, false);
1673        }
1674    }
1675
1676                if (this.errors === 0) {
1677                    $form.submit();
1678                }
1679            }
1680        }
1681    }
1682</script>
1682
1683</div>                    </div>
1684                    <div x-show.transition.in.opacity.duration.600="activeTab === 1"
1685                         role="tabpanel"
1686                         aria-labelledby="&#x20;Sign&#x20;Up Tab">
1687                        <div class="registration-container registation-container container p-0"><form class="form create account form-create-account"
1688      action="https://stata-brazil.com/customer/account/createpost/"
1689      x-data="Object.assign(hyva.formValidation($el), initForm())"
1690          id="accountcreate"
1691      @submit.prevent="submitForm()"
1692      method="post" id="form-validate" enctype="multipart/form-data" autocomplete="off"
1693>
1694    <input name="form_key" type="hidden" value="MKRqwFeJZFPuKz00" />        <div class="control">
1695    <input type="hidden"
1696           value=""
1697           name="g-recaptcha-response"
1698    />
1699</div>
1700    <fieldset class="">
1701        <input type="hidden" name="success_url" value="">
1702        <input type="hidden" name="error_url" value="">
1703            <div class="field field-reserved w-full field-name-firstname required">
1704        <div class="control">
1705            <input type="text" id="firstname"
1706                   name="firstname"
1707                   value=""
1708                   required
1709                   title="First&#x20;Name"
1710                   class="form-input peer required-entry"
1711                   placeholder=" "
1712                   maxlength="18"
1713                   @input.debounce="onChange"
1714                 required            >
1715            <label class="label" for="firstname">
1716            <span>
1717                First Name            </span>
1718            </label>
1719        </div>
1720    </div>
1721    <div class="field field-reserved w-full field-name-lastname required">
1722        <div class="control">
1723            <input type="text" id="lastname"
1724                   name="lastname"
1725                   required
1726                   value=""
1727                   title="Last&#x20;Name"
1728                   class="form-input peer required-entry"
1729                   @input.debounce="onChange"
1730                   placeholder=" "
1731                   maxlength="18"
1732                 required            >
1733            <label class="label" for="lastname">
1734            <span>
1735                Last Name            </span>
1736            </label>
1737        </div>
1738    </div>
1739
1740                
1741                
1742                
1743        <div class="field field-reserved required">
1744            <div class="control">
1745                <input
1746                    type="email"
1747                    name="email"
1748                    autocomplete="email"
1749                    id="email_address"
1750                    required
1751                    title="Email"
1752                    class="form-input peer"
1753                    @input.debounce="onChange"
1754                    placeholder=" "
1755                />
1756                <label for="email_address" class="label">
1757                    <span>Email</span>
1758                </label>
1759            </div>
1760        </div>
1761
1762                            <div class="field field-reserved company ">
1763    <div class="control">
1764        <input type="text"
1765               name="company"
1766               id="company"
1767                              value=""
1768               title="Organiza&#xE7;&#xE3;o"
1769               class="form-input peer "
1770               placeholder=" "
1771         >
1772        <label for="company" class="label">
1773            <span>Organização</span>
1774        </label>
1775    </div>
1776</div>
1777        
1778        <div class="field field-reserved required">
1779            <div class="control"
1780                 x-data="{ customerIndustry: '' }"
1781                 :class="{ 'select-placeholder': !customerIndustry }"
1782            >
1783                                <select x-select="customerIndustry" name="customer_industry" class="form-select [&_+_button]:h-[52px]" id="customer_industry"
1784                        @input.debounce="onChange"
1785                        required
1786                        placeholder=""
1787                >
1788                    <option value="">
1789                        Please Select Your Industry                    </option>
1790                                            <option value="468">
1791                            Social/Science                        </option>
1792                                            <option value="469">
1793                            Biostatistics                        </option>
1794                                            <option value="470">
1795                            Economics                        </option>
1796                                            <option value="471">
1797                            Econometrics                        </option>
1798                                            <option value="472">
1799                            Finance                        </option>
1800                                            <option value="473">
1801                            Medicine                        </option>
1802                                            <option value="474">
1803                            Other                        </option>
1804                                    </select>
1805            </div>
1806        </div>
1807
1808        <div class="field field-reserved required">
1809            <div class="flex flex-wrap gap-4">
1810                <div class="control w-full flex items-center">
1811                                        <div class="sr-only" aria-l
1811ive="polite">
1812                        <template x-if="!showPassword">
1813                                    <span>
1814                                        Senha oculta                                    </span>
1815                        </template>
1816                        <template x-if="showPassword">
1817                                    <span>
1818                                        Senha exibida                                    </span>
1819                        </template>
1820                    </div>
1821                    <input
1822                        :type="showPassword ? 'text' : 'password'"
1823                        type="password"
1824                        id="password"
1825                        name="password"
1826                        title="Password"
1827                        minlength="8"
1828                        class="form-input peer pr-9"
1829                        required
1830                        data-validate='{"password-strength": {"minCharacterSets": 3}}'
1831                        @input.debounce="onChange"
1832                        autocomplete="off"
1833                        placeholder=" "
1834                    >
1835                    <label for="password" class="label">
1836                        <span>Password</span>
1837                    </label>
1838                    <button
1839                        type="button"
1840                        :aria-pressed="showPassword ? true : false"
1841                        x-on:click="showPassword = !showPassword"
1842                        class=" cursor-pointer absolute top-1/2 -translate-y-1/2 right-3"
1843                        :aria-label="showPassword ? 'Ocultar\u0020senha' : 'Show\u0020Password'"
1844                    >
1845                        <template x-if="!showPassword">
1846                           <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="w-6 h-6" aria-hidden="true">
1847    <path d="M2.673 8.056c-.225.08-.457.285-.56.495-.12.243-.128.678-.016.887.129.243 1.161 1.275 1.75 1.75.15.122.273.236.273.254 0 .018-.454.723-1.008 1.566-.555.842-1.031 1.595-1.058 1.672-.153.427.042.946.445 1.182.339.198.8.166 1.121-.079.076-.058.554-.747 1.161-1.671l1.038-1.582c.004-.005.189.08.411.189.223.109.519.246.658.303.312.13 1.206.438 1.382.476.082.018.131.053.132.095.001.037-.093.832-.208 1.767-.193 1.561-.206 1.716-.156 1.892a.996.996 0 0 0 1.553.55c.09-.065.212-.2.27-.3.098-.168.124-.318.319-1.865.117-.925.22-1.69.229-1.7.01-.009.232.001.494.022.61.051 1.584.051 2.194 0 .262-.021.484-.031.494-.022.009.01.112.775.229 1.7.195 1.547.221 1.697.319 1.865.447.762 1.583.607 1.823-.25.05-.176.037-.331-.156-1.892a88.188 88.188 0 0 1-.208-1.767c.001-.042.05-.077.132-.095.399-.086 1.423-.477 2.031-.775.227-.111.417-.198.422-.193l1.026 1.55c.559.847 1.083 1.598 1.164 1.668.167.147.404.224.673.22.492-.008.896-.406.944-.93a.704.704 0 0 0-.079-.443c-.055-.118-.526-.86-1.047-1.647a69.58 69.58 0 0 1-.968-1.484c-.011-.03.097-.146.255-.274.59-.477 1.626-1.513 1.747-1.747.179-.345.098-.847-.181-1.126-.294-.294-.613-.376-1.013-.26-.211.061-.274.112-.817.655-1.853 1.855-3.754 2.817-6.307 3.194-.681.101-2.479.101-3.16 0-2.578-.381-4.486-1.352-6.344-3.23-.485-.49-.566-.556-.757-.613-.256-.076-.448-.078-.646-.007" fill-rule="evenodd"/>
1848</svg>
1849                        </template>
1850                        <template x-if="showPassword">
1851                           <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="w-6 h-6" aria-hidden="true">
1852    <path d="M11.16 5.043c-3.343.254-6.198 2.157-8.536 5.688-.542.819-.604.949-.604 1.269 0 .32.062.45.604 1.269 1.507 2.277 3.229 3.88 5.147 4.791 2.037.967 4.441 1.198 6.67.639 2.681-.673 4.974-2.468 6.935-5.43.542-.819.604-.949.604-1.269 0-.32-.062-.45-.604-1.269-1.764-2.665-3.814-4.395-6.156-5.197-1.278-.437-2.624-.6-4.06-.491m2.049 2.055c.802.123 1.373.302 2.176.683 1.533.727 2.957 2.037 4.188 3.854.125.184.227.349.227.365 0 .041-.399.627-.694 1.02-.819 1.09-1.86 2.087-2.834 2.714a7.874 7.874 0 0 1-5.772 1.12c-2.234-.431-4.191-1.837-5.895-4.234-.407-.572-.42-.597-.361-.71.076-.145.65-.94.944-1.31.388-.486 1.247-1.357 1.697-1.719a8.64 8.64 0 0 1 1.73-1.1c.838-.398 1.531-.607 2.312-.698l.513-.06c.267-.031 1.382.016 1.769.075m-1.71 1.942a3.05 3.05 0 0 0-2.385 2.12c-.135.434-.135 1.246 0 1.68a3.086 3.086 0 0 0 2.046 2.046c.434.135 1.246.135 1.68 0a3.086 3.086 0 0 0 2.046-2.046c.135-.434.135-1.246 0-1.68-.305-.981-1.076-1.753-2.025-2.031-.361-.106-1.029-.149-1.362-.089m.8
185211 2.021c.378.112.69.537.69.94 0 .33-.216.695-.516.871-.156.091-.23.108-.484.108s-.328-.017-.484-.108c-.581-.342-.683-1.098-.212-1.569.279-.279.612-.359 1.006-.242" fill-rule="evenodd"/>
1853</svg>
1854                        </template>
1855                    </button>
1856                </div>
1857            </div>
1858        </div>
1859
1860        <div class="field field-reserved">
1861            <div class="control flex items-center">
1862                <div class="sr-only" aria-live="polite">
1863                    <template x-if="!showPasswordConfirm">
1864                                <span>
1865                                    Confirmar senha oculta                                </span>
1866                    </template>
1867                    <template x-if="showPasswordConfirm">
1868                                <span>
1869                                    confirmar a senha exibida                                </span>
1870                    </template>
1871                </div>
1872                <input
1873                    :type="showPasswordConfirm ? 'text' : 'password'"
1874                    type="password"
1875                    name="password_confirmation"
1876                    title="Confirm&#x20;Password"
1877                    id="password-confirmation"
1878                    data-validate='{"equalTo": "password"}'
1879                    @input.debounce="onChange"
1880                    required
1881                    class="form-input peer pr-9""
1882                    autocomplete="off"
1883                    placeholder=" "
1884                >
1885                <label for="password-confirmation" class="label">
1886                    <span>Confirm Password</span>
1887                </label>
1888
1889                <button
1890                    type="button"
1891                    x-on:click="showPasswordConfirm = !showPasswordConfirm"
1892                    :aria-pressed="showPasswordConfirm ? true : false"
1893                    class="cursor-pointer absolute top-1/2 -translate-y-1/2 right-3"
1894                    :aria-label="
1895                                showPasswordConfirm ? 'Ocultar\u0020senha' : 'Show\u0020Password'
1896                            "
1897                >
1898                    <template x-if="!showPasswordConfirm">
1899                       <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="w-6 h-6" aria-hidden="true">
1900    <path d="M2.673 8.056c-.225.08-.457.285-.56.495-.12.243-.128.678-.016.887.129.243 1.161 1.275 1.75 1.75.15.122.273.236.273.254 0 .018-.454.723-1.008 1.566-.555.842-1.031 1.595-1.058 1.672-.153.427.042.946.445 1.182.339.198.8.166 1.121-.079.076-.058.554-.747 1.161-1.671l1.038-1.582c.004-.005.189.08.411.189.223.109.519.246.658.303.312.13 1.206.438 1.382.476.082.018.131.053.132.095.001.037-.093.832-.208 1.767-.193 1.561-.206 1.716-.156 1.892a.996.996 0 0 0 1.553.55c.09-.065.212-.2.27-.3.098-.168.124-.318.319-1.865.117-.925.22-1.69.229-1.7.01-.009.232.001.494.022.61.051 1.584.051 2.194 0 .262-.021.484-.031.494-.022.009.01.112.775.229 1.7.195 1.547.221 1.697.319 1.865.447.762 1.583.607 1.823-.25.05-.176.037-.331-.156-1.892a88.188 88.188 0 0 1-.208-1.767c.001-.042.05-.077.132-.095.399-.086 1.423-.477 2.031-.775.227-.111.417-.198.422-.193l1.026 1.55c.559.847 1.083 1.598 1.164 1.668.167.147.404.224.673.22.492-.008.896-.406.944-.93a.704.704 0 0 0-.079-.443c-.055-.118-.526-.86-1.047-1.647a69.58 69.58 0 0 1-.968-1.484c-.011-.03.097-.146.255-.274.59-.477 1.626-1.513 1.747-1.747.179-.345.098-.847-.181-1.126-.294-.294-.613-.376-1.013-.26-.211.061-.274.112-.817.655-1.853 1.855-3.754 2.817-6.307 3.194-.681.101-2.479.101-3.16 0-2.578-.381-4.486-1.352-6.344-3.23-.485-.49-.566-.556-.757-.613-.256-.076-.448-.078-.646-.007" fill-rule="evenodd"/>
1901</svg>
1902                    </template>
1903                    <template x-if="showPasswordConfirm">
1904                       <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="w-6 h-6" aria-hidden="true">
1905    <path d="M11.16 5.043c-3.343.254-6.198 2.157-8.536 5.688-.542.819-.604.949-.604 1.269 0 .32.062.45.604 1.269 1.507 2.277 3.229 3.88 5.147 4.791 2.037.967 4.441 1.198 6.67.639 2.681-.673 4.974-2.468 6.935-5.43.542-.819.604-.949.604-1.269 0-.32-.062-.45-.604-1.269-1.764-2.665-3.814-4.395-6.156-5.197-1.278-.437-2.624-.6-4.06-.491m2.049 2.055c.802.123 1.373.302 2.176.683 1.533.727 2.957 2.037 4.188 3.854.125.184.227.349.227.365 0 .041-.399.627-.694 1.02-.819 1.09-1.86 2.087-2.834 2.714a7.874 7.874 0 0 1-5.772 1.12c-2.234-.431-4.191-1.837-5.895-4.234-.407-.572-.42-.597-.361-.71.076-.145.65-.94.944-1.31.388-.486 1.247-1.357 1.697-1.719a8.64 8.64 0 0 1 1.73-1.1c.838-.398 1.531-.607 2.312-.698l.513-.06c.267-.031 1.382.016 1.769.075m-1.71 1.942a3.05 3.05 0 0 0-2.385 2.12c-.135.434-.135 1.246 0 1.68a3.086 3.086 0 0 0 2.046 2.046c.434.135 1.246.135 1.68 0a3.086 3.086 0 0 0 2.046-2.046c.135-.434.135-1.246 0-1.68-.305-.981-1.076-1.753-2.025-2.031-.361-.106-1.029-.149-1.362-.089m.8
190511 2.021c.378.112.69.537.69.94 0 .33-.216.695-.516.871-.156.091-.23.108-.484.108s-.328-.017-.484-.108c-.581-.342-.683-1.098-.212-1.569.279-.279.612-.359 1.006-.242" fill-rule="evenodd"/>
1906</svg>
1907                    </template>
1908                </button>
1909            </div>
1910        </div>
1911
1912                    <div class="field choice newsletter">
1913                <input type="checkbox" name="is_subscribed"
1914                       title="Sign&#x20;Up&#x20;for&#x20;Newsletter" value="1"
1915                       id="is_subscribed"
1916                                           class="checkbox">
1917                <label for="is_subscribed" class="label">
1918                            <span>
1919                                Sign Up for Newsletter                            </span>
1920                </label>
1921            </div>
1922                                
1923
1924                        <p class="my-4 text-sm text-gray-900">
1925Este formulário é protegido pelo reCAPTCHA - se aplicam a <a class="underline" href="https://policies.google.com/privacy" target="_blank" rel="noopener">Política de Privacidade do Google</a> e <a class="underline" href="https://policies.google.com/terms" target="_blank" rel="noopener">Termos de Serviço</a>.</p>
1926
1927    </fieldset>
1928        <div class="flex pt-3">
1929        <div class="primary w-full">
1930            <button type="submit" class="action submit primary btn btn-primary btn-size-lg w-full"
1931                    title="Sign&#x20;Up"
1932                >
1933                <span>Sign Up</span>
1934            </button>
1935        </div>
1936    </div>
1937</form>
1938
1939<script>
1940    function initForm() {
1941        return {
1942            errors: 0,
1943            hasCaptchaToken: 0,
1944            showPassword: false,
1945            showPasswordConfirm: false,
1946            submitForm() {
1947                this.validate()
1948                    .then(() => {
1949                        // Do not rename $form, the variable is expected to be declared in the recaptcha output
1950                        const $form = document.querySelector('#accountcreate');
1951                            if (!this.hasCaptchaToken) {
1952        this.errors = 1;
1953
1954
1955        const executeGreCaptcha = () => {
1956            grecaptcha.ready(() => {
1957                grecaptcha.execute(
1958                    '6LfZyRsrAAAAAA274PpbvhhN2tBp_pIfniW8yAPZ',
1959                    {action: 'submit'}
1960                ).then((token) => {
1961                    const tokenElement = $form['g\u002Drecaptcha\u002Dresponse'];
1962
1963                    if (tokenElement && token && token.length > 0) {
1964                        $form['g\u002Drecaptcha\u002Dresponse'].value = token;
1965                        this.errors = 0;
1966                        this.hasCaptchaToken = 1;
1967                        (this.submitForm || $form.submit).call(this);
1968                    } else {
1969                        this.errors = 1;
1970                        const error = tokenElement
1971                            ? 'ReCaptcha\u0020validation\u0020failed,\u0020please\u0020try\u0020again'
1972                            : 'ReCaptcha\u0020token\u0020element\u0020is\u0020missing.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020trying\u0020again.';
1973                        if (this.setErrorMessages) {
1974                            this.setErrorMessages([error])
1975                            this.displayErrorMessage = true;
1976                        } else {
1977                            window.dispatchMessages && window.dispatchMessages([{type: "error", text: error}], 5000);
1978                        }
1979                    }
1980                }).catch(exception => {
1981                    console.error(exception || `An unknown error occurred during ReCaptcha validation. Are the tokens and the domain correctly set up in the Google console?`)
1982                });
1983            })
1984        }
1985
1986        if (window.grecaptcha) {
1987            executeGreCaptcha();
1988        } else {
1989            const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6LfZyRsrAAAAAA274PpbvhhN2tBp_pIfniW8yAPZ";
1990            const script = document.createElement('script');
1991            script.setAttribute('type', 'text/javascript');
1992            script.setAttribute('src', recaptchaUrl);
1993            document.head.appendChild(script);
1994
1995            script.addEventListener("load", executeGreCaptcha, false);
1996        }
1997    }
1998
1999                        if (this.errors === 0) {
2000                            $form.submit();
2001                        }
2002                    })
2003                    .catch((invalid) => {
2004                        if (invalid.length > 0) {
2005                            invalid[0].focus();
2006                        }
2007                    });
2008            },
2009                    }
2010    }
2011
2012    window.addEventListener('DOMContentLoaded', () => {
2013
2014        hyva.formValidation.addRule('telephone', (value, options) => {
2015            const phoneNumber = value.trim().replace(' ', '');
2016            if (phoneNumber && phoneNumber.length < (options.minlength || 3)) {
2017                return 'O\u0020n\u00FAmero\u0020de\u0020telefone\u0020\u00E9\u0020muito\u0020curto.';
2018            }
2019
2020            return true;
2021        });
2022
2023        const postCodeSpecs = {"AD":{"pattern_1":{"example":"AD100","pattern":"^AD\\d{3}$"}},"AM":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"AR":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"},"pattern_2":{"example":"A1234BCD","pattern":"^[a-zA-z]{1}[0-9]{4}[a-zA-z]{3}$"}},"AS":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"AT":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"AU":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"AX":{"pattern_1":{"example":"22123","pattern":"^22\\d{3}$"}},"AZ":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"},"pattern_2":{"example":"123456","pattern":"^[0-9]{6}$"}},"BA":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"BB":{"pattern_1":{"example":"BB12345","pattern":"^(BB\\d{5})?$"}},"BD":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"BE":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"BG":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"BH":{"pattern_1":{"example":"323","pattern":"^((1[0-2]|[1-9])\\d{2})?$"}},"BM":{"pattern_1":{"example":"MA 02","pattern":"^[A-Z]{2}[ ]?[A-Z0-9]{2}$"}},"BN":{"pattern_1":{"example":"AB1234","pattern":"^[a-zA-z]{2}[0-9]{4}$"}},"BR":{"pattern_1":{"example":"12345678","pattern":"^[0-9]{8}$"},"pattern_2":{"example":"12345-678","pattern":"^[0-9]{5}\\-[0-9]{3}$"}},"BY":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"CA":{"pattern_1":{"example":"A1B 2C3","pattern":"^[a-zA-z]{1}[0-9]{1}[a-zA-z]{1}\\s[0-9]{1}[a-zA-z]{1}[0-9]{1}$"},"pattern_2":{"example":"A1B2C3","pattern":"^[a-zA-z]{1}[0-9]{1}[a-zA-z]{1}[0-9]{1}[a-zA-z]{1}[0-9]{1}$"},"pattern_3":{"example":"A1B","pattern":"^[a-zA-z]{1}[0-9]{1}[a-zA-z]{1}$"}},"CC":{"pattern_1":{"example":"6799","pattern":"^6799$"}},"CH":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"CK":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"CL":{"pattern_1":{"example":"1234567","pattern":"^\\d{7}$"}},"CN":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"CR":{"pattern_1":{"example":"12345 or 123-1234","pattern":"^\\d{4,5}|\\d{3}-\\d{4}$"}},"CS":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"CU":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"CV":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"CX":{"pattern_1":{"example":"6798","pattern":"^6798$"}},"CY":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"CZ":{"pattern_1":{"example":"123 45","pattern":"^[0-9]{3}\\s[0-9]{2}$"}},"DE":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"DK":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"DO":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"DZ":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"EC":{"pattern_1":{"example":"A1234B or AB123456 or 123456","pattern":"^([A-Z]\\d{4}[A-Z]|(?:[A-Z]{2})?\\d{6})?$"}},"EE":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"EG":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"ES":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"ET":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"FI":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"FK":{"pattern_1":{"example":"FIQQ 1ZZ","pattern":"^FIQQ 1ZZ$"}},"FM":{"pattern_1":{"example":"96941","pattern":"^(9694[1-4])([ \\-]\\d{4})?$"}},"FO":{"pattern_1":{"example":"123","pattern":"^\\d{3}$"}},"FR":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"GB":{"pattern_1":{"example":"AB12 3CD","pattern":"^[a-zA-Z]{2}[0-9]{2}\\s?[0-9]{1}[a-zA-Z]{2}$"},"pattern_2":{"example":"A1B 2CD","pattern":"^[a-zA-Z]{1}[0-9]{1}[a-zA-Z]{1}\\s?[0-9]{1}[a-zA-Z]{2}$"},"pattern_3":{"example":"AB1 2CD","pattern":"^[a-zA-Z]{2}[0-9]{1}\\s?[0-9]{1}[a-zA-Z]{2}$"},"pattern_4":{"example":"AB1C 2DF","pattern":"^[a-zA-Z]{2}[0-9]{1}[a-zA-Z]{1}\\s?[0-9]{1}[a-zA-Z]{2}$"},"pattern_5":{"example":"A12 3BC","pattern":"^[a-zA-Z]{1}[0-9]{2}\\s?[0-9]{1}[a-zA-Z]{2}$"},"pattern_6":{"example":"A1 2BC","pattern":"^[a-zA-Z]{1}[0-9]{1}\\s?[0-9]{1}[a-zA-Z]{2}$"}},"GE":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"GF":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"GG":{"pattern_1":{"example":"GY10 2AB","pattern":"^[gG][yY]([1-9]|10)\\s?[0-9]{1}[a-zA-Z]{2}$"}},"GH":{"pattern_1":{"example":"GA18400","pattern":"^[A-Z][A-Z0-9]\\d{3,5}$"}},"GL":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"GN":{"pattern_1":{"example":"123","pattern":"^\\d{3}$"}},"GP":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"GR":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"GS":{"pattern_1":{"example":"SIQQ 1ZZ","pattern":"^SIQQ 1ZZ$"}},"GT":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"GU":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"GW":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"HM":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"HN":{"pattern_1":{"example":"12345","pattern":"^(?:\\d{5})?$"}},"HR":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"HT":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"HU":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"IC":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"ID":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"IE":{"pattern_1":{"example":"A65 F4E2","pattern":"^([AC-FHKNPRTV-Y]{1}[0-9]{2}|D6W)[ ]?[0-9AC-FHKNPRTV-Y]{4}$"}},"IL":{"pattern_1":{"example":"6687865","pattern":"^[0-9]{7}$"}},"IM":{"pattern_1":{"example":"IM1 1AD","pattern":"^IM\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}$"}},"IN":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"IO":{"pattern_1":{"example":"BBND 1ZZ","pattern":"^BBND 1ZZ$"}},"IS":{"pattern_1":{"example":"123","pattern":"^[0-9]{3}$"}},"IQ":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"IT":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}}
2023,"JE":{"pattern_1":{"example":"JE2 4PJ","pattern":"^[jJ][eE][1-5]{1}\\s?[0-9]{1}[a-zA-Z]{2}$"}},"JO":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"JP":{"pattern_1":{"example":"123-4567","pattern":"^[0-9]{3}-[0-9]{4}$"},"pattern_2":{"example":"1234567","pattern":"^[0-9]{7}$"}},"KE":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"KG":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"KR":{"pattern_1":{"example":"123-456","pattern":"^[0-9]{3}-[0-9]{3}$"},"pattern_2":{"example":"12345","pattern":"^[0-9]{5}$"}},"KH":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"KW":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"KZ":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"LA":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"LB":{"pattern_1":{"example":"1234 5678","pattern":"^(\\d{4}([ ]?\\d{4})?)?$"}},"LI":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"LK":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"LT":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"LU":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"LV":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"MA":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"MC":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"MD":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"ME":{"pattern_1":{"example":"81101","pattern":"^8\\d{4}$"}},"MG":{"pattern_1":{"example":"123","pattern":"^[0-9]{3}$"}},"MH":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"MK":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"MN":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"MP":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"MS":{"pattern_1":{"example":"MSR1250","pattern":"^MSR\\s?\\d{4}$"}},"MQ":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"MT":{"pattern_1":{"example":"ABC 1234","pattern":"^[a-zA-Z]{3}\\s[0-9]{4}$"},"pattern_2":{"example":"ABC 123","pattern":"^[a-zA-Z]{3}\\s[0-9]{3}$"},"pattern_3":{"example":"ABC 12","pattern":"^[a-zA-Z]{3}\\s[0-9]{2}$"}},"MU":{"pattern_1":{"example":"A1201 or 80110","pattern":"^([AR]|[0-9])\\d{4,5}$"}},"MV":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"},"pattern_2":{"example":"1234","pattern":"^[0-9]{4}$"}},"MX":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"MY":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"NC":{"pattern_1":{"example":"98800","pattern":"^988\\d{2}$"}},"NE":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"NF":{"pattern_1":{"example":"2899","pattern":"^2899$"}},"NG":{"pattern_1":{"example":"123456","pattern":"^(\\d{6})?$"}},"NI":{"pattern_1":{"example":"22500","pattern":"^\\d{5}$"}},"NL":{"pattern_1":{"example":"1234 AB\/1234AB","pattern":"^[1-9][0-9]{3}\\s?[a-zA-Z]{2}$"},"pattern_2":{"example":"1234","pattern":"^[1-9][0-9]{3}$"}},"NO":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"NP":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"NZ":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"OM":{"pattern_1":{"example":"PC 123 or 123","pattern":"^(PC )?\\d{3}$"}},"PA":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"PF":{"pattern_1":{"example":"98701","pattern":"^987\\d{2}$"}},"PG":{"pattern_1":{"example":"123","pattern":"^\\d{3}$"}},"PH":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"PK":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"PL":{"pattern_1":{"example":"12-345","pattern":"^[0-9]{2}-[0-9]{3}$"}},"PM":{"pattern_1":{"example":"97500","pattern":"^9[78]5\\d{2}$"}},"PN":{"pattern_1":{"example":"PCRN 1ZZ","pattern":"^PCRN 1ZZ$"}},"PR":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"PT":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"},"pattern_2":{"example":"1234-567","pattern":"^[0-9]{4}-[0-9]{3}$"}},"PW":{"pattern_1":{"example":"96939 or 96940","pattern":"^(?:96939|96940)$"}}
2023,"PY":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"RE":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"RO":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"RS":{"pattern_1":{"example":"123456","pattern":"^\\d{6}$"}},"RU":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"SA":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"SE":{"pattern_1":{"example":"123 45","pattern":"^[0-9]{3}\\s[0-9]{2}$"}},"SG":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"SI":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"SK":{"pattern_1":{"example":"123 45","pattern":"^[0-9]{3}\\s[0-9]{2}$"}},"SH":{"pattern_1":{"example":"ASCN 1ZZ","pattern":"^(ASCN|STHL) 1ZZ$"}},"SJ":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"SM":{"pattern_1":{"example":"47890","pattern":"^4789\\d$"}},"SN":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"SO":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"SZ":{"pattern_1":{"example":"A123","pattern":"^[a-zA-Z]{1}[0-9]{3}$"}},"TC":{"pattern_1":{"example":"TKCA 1ZZ","pattern":"^TKCA 1ZZ$"}},"TH":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"TJ":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"TM":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"TN":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"TR":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"TT":{"pattern_1":{"example":"120110","pattern":"^\\d{6}$"}},"TW":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"},"pattern_2":{"example":"123","pattern":"^[0-9]{3}$"}},"UA":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"US":{"pattern_1":{"example":"12345-6789","pattern":"^[0-9]{5}\\-[0-9]{4}$"},"pattern_2":{"example":"12345","pattern":"^[0-9]{5}$"}},"UY":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"UZ":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"VA":{"pattern_1":{"example":"00120","pattern":"^00120$"}},"VE":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"VI":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"WF":{"pattern_1":{"example":"98601","pattern":"^986\\d{2}$"}},"XK":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"XY":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"YT":{"pattern_1":{"example":"97601","pattern":"^976\\d{2}$"}},"ZA":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"ZM":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}}};
2024
2025        hyva.formValidation.addRule('postcode', (postCode, options, field, context) => {
2026            context.removeMessages(field, 'postcode-warning')
2027            const countryId = (context.fields['country_id'] && context.fields['country_id'].element.value),
2028                validatedPostCodeExamples = [],
2029                countryPostCodeSpecs = countryId && postCodeSpecs ? postCodeSpecs[countryId] : false;
2030
2031            if (! postCode || ! countryPostCodeSpecs) return true;
2032
2033            for (const postCodeSpec of Object.values(countryPostCodeSpecs)) {
2034                if (new RegExp(postCodeSpec.pattern).test(postCode)) return true;
2035                validatedPostCodeExamples.push(postCodeSpec.example);
2036            }
2037            if (validatedPostCodeExamples) {
2038                context.addMessages(field, 'postcode-warning', [
2039                    'Provided\u0020Zip\u002FPostal\u0020Code\u0020seems\u0020to\u0020be\u0020invalid.',
2040                    '\u0020Example\u003A\u0020' + validatedPostCodeExamples.join('; ') + '. ',
2041                    'If\u0020you\u0020believe\u0020it\u0020is\u0020the\u0020right\u0020one\u0020you\u0020can\u0020ignore\u0020this\u0020notice.'
2042                ]);
2043            }
2044
2045            return true;
2046        });
2047    })
2048</script>
2048
2049</div>                    </div>
2050                    <span class="block py-3 text-sm text-center uppercase">
2051                        or                    </span>
2052                    <div>
2053                            <div class="block">
2054        <div class="block-content">
2055                            <div class="google-login"
2056                     x-data="{ open: false }">
2057                    <a class="cursor-pointer block text-base  text-center p-4 border border-solid border-[#DADCE0] rounded-full btn-google-login"
2058                       @click="openPopUp('https://stata-brazil.com/sociallogin/social/login/type/google/',  'Google')">
2059                        <span style="background-image: url('https://stata-brazil.com/static/version1790944496/frontend/TimberlakeHyva/timberlake/pt_BR/images/social-login/google.svg ')" class="w-6 h-6 absolute left-4 bg-contain"></span>
2060                        Sign in with Google                    </a>
2061                </div>
2062                    </div>
2063    </div>
2064
2065<script>
2066    const popupCenter = ({url, title, w, h}) => {
2067        const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : window.screenX;
2068        const dualScreenTop = window.screenTop !== undefined ? window.screenTop : window.screenY;
2069        const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
2070        const height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;
2071        const systemZoom = width / window.screen.availWidth;
2072        const left = (width - w) / 2 / systemZoom + dualScreenLeft;
2073        const top = (height - h) / 2 / systemZoom + dualScreenTop;
2074        const newWindow = window.open(url, title,
2075            `
2076          scrollbars=yes,
2077          width=${w / systemZoom},
2078          height=${h / systemZoom},
2079          top=${top},
2080          left=${left}
2081          `
2082        )
2083
2084        if (window.focus) newWindow.focus();
2085    }
2086
2087    const openPopUp = (url, label) => {
2088        const date = new Date();
2089        const currentTime = date.getTime();
2090
2091        popupCenter({url: url + '?' + currentTime, title: label, w: 450, h: 550});
2092    }
2093</script>
2093
2094                    </div>
2095                </div>
2096            </div>
2097
2098        </div>
2099    </div>
2100</section>
2101</div></div></main><div class="mst-gdpr__cookie-bar-wrapper relative z-50" id="gdprCookieBar" x-data="initMstGdprCookieBar()" x-init="initDisplay()">
2102    <div class="mst-gdpr__cookie-bar
2103                shadow-[0px_1.85px_2.21px_0px_#00000004,0px_4.46px_5.32px_0px_#00000005,0px_8.39px_10.02px_0px_#00000006,0px_14.97px_17.87px_0px_#00000008,0px_27.99px_33.42px_0px_#00000009,0px_67px_80px_0px_#0000000D]
2104                bg-white bottom-6 md:bottom-10 fixed left-1/2 -translate-x-1/2 md:translate-x-0 md:left-10
2105                w-full max-w-[calc(100%-32px)] md:max-w-[440px]
2106                rounded-3xl p-6 z-50"
2107         x-bind:class="{'opacity-70': isLoading}"
2108         x-show="isBarVisible"
2109         style="display: none">
2110
2111        <div class="consent-text font-bold mb-4 [&>a]:btn-link [&>a]:btn-link-primary">
2112            Os cookies ajudam a fornecer nossos serviços. Ao usar nossos serviços, você concorda com o uso de cookies.
2113<a href="/privacy-policy">Saiba mais</a>        </div>
2114
2115        <div class="mst-gdpr__buttons flex flex-wrap gap-2">
2116            <button class="action btn btn-primary grow basis-full"
2117                    x-bind:class="{'opacity-0': isLoading}"
2118                    @click="handleAllow(1)"><span>Aceitar</span></button>
2119
2120                            <button
2121                    class="action btn btn-primary py-1.5 border-2 border-solid border-accent grow basis-[calc(theme(flexBasis.6/12)-4px)]"
2122                    x-bind:class="{'opacity-0': isLoading}"
2123                    @click="handleDecline"><span>Declínio</span></button>
2124            
2125            <button type="button"
2126                    class="action btn btn-secondary py-1.5 grow basis-[calc(theme(flexBasis.6/12)-4px)]"
2127                    x-bind:class="{'opacity-0': isLoading}"
2128                    @click="openSettings">
2129                <span>Configurações</span>
2130            </button>
2131        </div>
2132    </div>
2133    <div class="mst-gdpr__cookie-bar-overlay bg-white fixed h-full left-0 opacity-60 top-0 w-full z-40"
2134         style="display: none"
2135         id="gdprCookieBarOverlay" x-show="isScreenLocked"></div>
2136</div>
2137<script>
2138    function initMstGdprCookieBar() {
2139        'use strict';
2140
2141        const barConfig = {"allowUrl":"https:\/\/stata-brazil.com\/gdpr_cookie\/cookie\/allow\/","declineUrl":"https:\/\/stata-brazil.com\/gdpr_cookie\/cookie\/decline\/","countryConfigUrl":"https:\/\/stata-brazil.com\/gdpr_cookie\/country\/config\/","lockScreen":false,"groupCookieName":"gdpr_cookie_groups","consentCookieName":"gdpr_cookie_consent","barEnabled":true,"cookieGroupTypes":{"1":"essential","2":"marketing","3":"functionality","4":"statistical"},"googleConsentEnabled":true,"googleConsentTypes":["ad_user_data","ad_personalization","ad_storage","analytics_storage","personalization_storage","functionality_storage","security_storage"],"googleConsentDefault":{"ad_user_data":"granted","ad_personalization":"granted","ad_storage":"granted","analytics_storage":"granted","personalization_storage":"granted","functionality_storage":"granted","security_storage":"granted"},"showDeclineButton":true,"isAllCountries":true,"countries":[""],"version":"1"};
2142        return {
2143            isLoading:      false,
2144            isBarVisible:   false,
2145            isScreenLocked: false,
2146            initDisplay:    function () {
2147                if (barConfig.googleConsentEnabled) {
2148                    if (!barConfig.barEnabled) {
2149                        this.sendConsentUpdate(barConfig.googleConsentDefault);
2150                    }
2151                }
2152                if (this.isSaved()) {
2153                    this.initSavedCookieConsent();
2154                }
2155                if (!barConfig.barEnabled && !this.isSaved()) {
2156                    this.handleAllow(true);
2157                }
2158
2159                if (barConfig.isAllCountries) {
2160                    this.showIfNotSaved();
2161                } else {
2162                    let countryCode = localStorage.getItem('mst-gdpr-country-code');
2163                    if (countryCode) {
2164                        if (this.isAllowedCountry(countryCode)) {
2165                            this.showIfNotSaved();
2166                        } else {
2167                            this.hide();
2168                            this.handleAllow(true);
2169                        }
2170                    } else {
2171                        this.hide();
2172                        fetch(barConfig.countryConfigUrl + '?_=' + Date.now())
2173                            .then(function (response) {
2174                                return response.json();
2175                            })
2176                            .then(function (data) {
2177                                if (data.CountryIsoCode) {
2178                                    localStorage.setItem('mst-gdpr-country-code', data.CountryIsoCode);
2179                                    if (data.isShowCookieBar) {
2180                                        this.showIfNotSaved();
2181                                    } else {
2182                                        this.hide();
2183                                        this.handleAllow(true);
2184                                    }
2185                                }
2186                            }.bind(this));
2187                    }
2188                }
2189
2190                window.addEventListener('mst-gdpr-cookie-settings-save', () => {
2191                    this.handleAllow();
2192                })
2193
2194                window.addEventListener('mst-gdpr-cookie-open-bar-request', () => {
2195                    this.show();
2196                })
2197            },
2198
2199            isAllowedCountry: function (countryCode) {
2200                return barConfig.countries.indexOf(countryCode) !== -1;
2201            },
2202
2203            initSavedCookieConsent: function () {
2204                let allowedCookieGroups = unescape(hyva.getCookie(barConfig.groupCookieName)).split(',');
2205                let checkboxList = document.querySelectorAll('.group-content .cookie-group-container .checkbox')
2206
2207                checkboxList.forEach(function (item) {
2208                    let groupId = item.getAttribute('data-group-id');
2209                    item.checked = allowedCookieGroups.indexOf(groupId.toString()) !== -1;
2210                }.bind(this));
2211            },
2212
2213            isSaved: function () {
2214                if (hyva.getCookie(barConfig.consentCookieName) < barConfig.version) {
2215                    this.deleteCookieGroupsCookie();
2216                    return false;
2217                }
2218
2219                return !!hyva.getCookie(barConfig.groupCookieName);
2220            },
2221
2222            showIfNotSaved: function () {
2223                if (this.isSaved() || !barConfig.barEnabled) {
2224                    this.hide();
2225                } else {
2226                    this.show();
2227                }
2228            },
2229
2230            handleAllow: function (agreeAll) {
2231                this.isLoading = true;
2232
2233                let allowedGroupIds = this.getUserAllowedGroupIds(agreeAll);
2234                if (allowedGroupIds.length) {
2235                    this.setCookie(allowedGroupIds);
2236                }
2237
2238                if (barConfig.googleConsentEnabled) {
2239                    let consent = barConfig.barEnabled ? this.getGoogleConsentByAllowedGroupIds(allowedGroupIds) : barConfig.googleConsentDefault;
2240                    this.saveGoogleConsent(consent);
2241                }
2242
2243                const body = allowedGroupIds.reduce((body, groupId) => {
2244                    body.append('group_ids[]', groupId);
2245                    return body;
2246                }, new URLSearchParams({form_key: hyva.getFormKey()}))
2247
2248                fetch('https://stata-brazil.com/gdpr_cookie/cookie/allow/', {
2249                    method:  'post',
2250                    body:    body,
2251                    headers: {contentType: 'application/x-www-form-urlencoded; charset=UTF-8'}
2252                })
2253                    .then(() => this.hide())
2254                    .finally(() => this.isLoading = false)
2255            },
2256
2257            handleDecline: function () {
2258                this.isLoading = true;
2259
2260                let checkboxList = document.querySelectorAll('.cookie-group-container .checkbox[disabled]:checked');
2261                const required = Array.from(checkboxList || []);
2262                let requiredGroupIds = required.reduce((requiredGroupIds, item) => {
2263                    requiredGroupIds.push(item.dataset.groupId);
2264                    return requiredGroupIds;
2265                }, []);
2266                if (requiredGroupIds.length) {
2267                    this.setCookie(requiredGroupIds);
2268                }
2269
2270                if (barConfig.googleConsentEnabled) {
2271                    let consent = barConfig.barEnabled ? this.getGoogleConsentByAllowedGroupIds(requiredGroupIds) : barConfig.googleConsentDefault;
2272                    this.saveGoogleConsent(consent);
2273                }
2274
2275                const body = new URLSearchParams({form_key: hyva.getFormKey()});
2276                fetch('https://stata-brazil.com/gdpr_cookie/cookie/decline/', {
2277                    method:  'post',
2278                    body:    body,
2279                    headers: {contentType: 'application/x-www-form-urlencoded; charset=UTF-8'}
2280                })
2281                    .then(() => this.hide())
2282                    .finally(() => this.isLoading = false)
2283            },
2284
2285            setCookie: function (groupIds) {
2286                let d = new Date();
2287                d.setTime(d.getTime() + (365 * 24 * 60 * 60 * 1000));
2288                let expires = "expires=" + d.toUTCString();
2289                let cookieDomain = '.' + (new URL(window.location.href)).hostname;
2290                document.cookie = "gdpr_cookie_consent=" + barConfig.version + ";domain=" + cookieDomain + ";" + expires + ";path=/;SameSite=Lax";
2291                let value = encodeURIComponent(groupIds.join(','));
2292                document.cookie = "gdpr_cookie_groups=" + value + ";domain=" + cookieDomain + ";" + expires + ";path=/;SameSite=Lax";
2293            },
2294
2295            deleteCookieGroupsCookie: function () {
2296                let d = new Date();
2297                d.setTime(0);
2298                let expires = "expires=" + d.toUTCString();
2299                let cookieDomain = '.' + (new URL(window.location.href)).hostname;
2300                document.cookie = "gdpr_cookie_groups=;domain=" + cookieDomain + ";" + expires + ";path=/;SameSite=Lax";
2301            },
2302
2303            show: function () {
2304                this.isBarVisible = true;
2305
2306                this.isScreenLocked = window.location.href.indexOf('cookie') === -1 && barConfig.lockScreen;
2307                if (this.isScreenLocked) {
2308                    document.querySelector('body').style.overflow = 'hidden';
2309                }
2310            },
2311
2312            hide: function () {
2313                this.isBarVisible = false;
2314                this.isScreenLocked = false;
2315                document.querySelector('body').style.overflow = 'auto';
2316            },
2317
2318            getLocalStorageGoogleConsent: function () {
2319                return localStorage.getItem('mst-gdpr-google-consent-mode');
2320            },
2321
2322            setLocalStorageGoogleConsent: function (consent) {
2323                localStorage.setItem('mst-gdpr-google-consent-mode', JSON.stringify(consent));
2324            },
2325
2326            getGoogleConsent: function () {
2327                let consent = this.getLocalStorageGoogleConsent();
2328                if (consent) {
2329                    return JSON.parse(consent);
2330                }
2331
2332                return barConfig.googleConsentDefault;
2333            },
2334
2335            getUserAllowedGroupIds: function (agreeAll) {
2336                let checkboxList = [];
2337                if (agreeAll) {
2338                    checkboxList = document.querySelectorAll('.cookie-group-container .checkbox');
2339                } else {
2340                    checkboxList = document.querySelectorAll('.cookie-group-container .checkbox:checked');
2341                }
2342
2343                const checked = Array.from(checkboxList || []);
2344                let groupIds = checked.reduce((groupIds, item) => {
2345                    groupIds.push(item.dataset.groupId);
2346                    return groupIds;
2347                }, []);
2348
2349                return groupIds;
2350            },
2351
2352            saveGoogleConsent: function (consent) {
2353                this.sendConsentUpdate(consent);
2354                this.setLocalStorageGoogleConsent(consent);
2355            },
2356
2357            sendConsentUpdate: function (consent) {
2358                if (typeof gtag === "function") {
2359                    gtag('consent', 'update', consent);
2360                }
2361            },
2362
2363            getGoogleConsentByAllowedGroupIds: function (allowedGroupIds) {
2364                let consent = {};
2365                barConfig.googleConsentTypes.forEach(function (consentType) {
2366                    consent[consentType] = 'denied';
2367                });
2368
2369                for (let i = 0; i < allowedGroupIds.length; i++) {
2370                    let groupId = allowedGroupIds[i];
2371                    let type = barConfig.cookieGroupTypes[groupId]
2372                    if (!type) {
2373                        type = 'other'
2374                    }
2375
2376                    switch (type) {
2377                        case 'essential':
2378                            consent['security_storage'] = 'granted';
2379                            break;
2380                        case 'marketing':
2381                            consent['ad_storage'] = 'granted';
2382                            consent['ad_user_data'] = 'granted';
2383                            consent['ad_personalization'] = 'granted';
2384                            break;
2385                        case 'functionality':
2386                            consent['functionality_storage'] = 'granted';
2387                            consent['personalization_storage'] = 'granted';
2388                            break;
2389                        case 'statistical':
2390                            consent['analytics_storage'] = 'granted';
2391                            break;
2392                    }
2393                }
2394
2395                return consent;
2396            },
2397
2398            openSettings: function () {
2399                window.dispatchEvent(new CustomEvent('mst-gdpr-cookie-settings-open'));
2400            },
2401        };
2402    }
2403</script>
2403
2404
2405<div class="relative z-60"
2406     x-data="initGdprSettingsModal()" x-init="init()">
2407    <div class="backdrop z-40" style="display: none" x-on:click="close" x-show="open" ></div>
2408    <div class="fixed top-1/2 left-1/2 -translate-y-1/2 -translate-x-1/2 z-50 flex flex-col max-lg:items-center w-full max-w-[calc(100%-32px)] lg:max-w-[720px]" x-show="open">
2409        <button
2410            type="button"
2411            class="w-12 h-12 rounded-full flex items-center justify-center text-primary bg-white mx-auto mb-2 lg:ml-auto lg:-mr-12 lg:-mb-2"
2412            style="display: none"
2413            aria-label="Close"
2414            @click.prevent="close"
2415        >
2416            <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-6 h-6" width="18" height="18" aria-hidden="true">
2417  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
2418</svg>
2419        </button>
2420        <div class="z-20 bg-white h-[85dvh] py-6 px-4 rounded-2xl lg:p-10 overflow-y-auto max-w-full"
2421             style="display: none"
2422             x-show.transition.origin.top="open">
2423
2424            <h5 class="pb-4">Privacy Overview</h5>
2425
2426            <div>
2427               <p class="text-sm text-secondary"> Este site utiliza cookies para melhorar sua experiência enquanto você navega pelo site. Dentre esses cookies, os que são classificados como necessários são armazenados no seu navegador, pois são essenciais para o funcionamento das funcionalidades básicas do site. Também utilizamos cookies de terceiros que nos ajudam a analisar e entender como você utiliza este site. Esses cookies serão armazenados no seu navegador somente com o seu consentimento. Você também tem a opção de recusar esses cookies. No entanto, a recusa de alguns deles pode afetar sua experiência de navegação.</p>
2428                <div class="group-content my-6 space-y-1">
2429                                            <div class="cookie-group-container cookie-group-container-1 card"
2430     x-data="{open1: false}">
2431    <div class="flex items-center gap-1">
2432        <input class="checkbox disabled:opacity-40 mr-1 rounded" type="checkbox" value="1" disabled checked data-group-id="1" name="allowed-group-1">
2433        <h6 class="flex grow items-center justify-between"
2434            x-on:click="open1 = !open1">
2435            <span>
2436                Essential            </span>
2437            <span x-show="! open1">
2438                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="shrink-0 bg-white w-10 h-10 p-2 rounded-full" width="40" height="40" aria-hidden="true">
2439  <path stroke-linecap="round" stroke-linejoin="round" d="M12 4v16m8-8H4"/>
2440</svg>
2441            </span>
2442            <span x-show="open1" style="display: none">
2443                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="shrink-0 bg-white w-10 h-10 p-2 rounded-full" width="40" height="40" aria-hidden="true">
2444  <path stroke-linecap="round" stroke-linejoin="round" d="M20 12H4"/>
2445</svg>
2446            </span>
2447        </h6>
2448    </div>
2449
2450    <div class="content mt-4" x-show.transition.origin.top="open1" style="display: none">
2451        <div>
2452                    </div>
2453        <div class="cookie-list overflow-x-auto">
2454            <table class="w-full">
2455                <thead>
2456                <tr class="text-left text-sm">
2457                    <th class="pl-4 py-3 text-neutralGray-700 font-normal">Nome</th>
2458                    <th class="py-3 font-normal">Description</th>
2459                    <th class="pr-4 py-3 font-normal">
2460                        <span class="sr-only">Lifetime</span>
2461                    </th>
2462                </tr>
2463                </thead>
2464                <tbody class="text-sm">
2465                                    <tr class="odd:bg-white">
2466                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">ADD_TO_CART</td>
2467                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">(Adobe Commerce only) Used by Google Tag Manager</td>
2468                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2469                    </tr>
2470                                    <tr class="odd:bg-white">
2471                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">GUEST-VIEW</td>
2472                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Stores the Order ID that guest shoppers use to retrieve their order status. Guest orders view. Used in Orders and Returns widgets</td>
2473                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2474                    </tr>
2475                                    <tr class="odd:bg-white">
2476                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">LOGIN_REDIRECT</td>
2477                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Preserves the destination page that was loading before the customer was directed to log in</td>
2478                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2479                    </tr>
2480                                    <tr class="odd:bg-white">
2481                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">MAGE-BANNERS-CACHE-STORAGE</td>
2482                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">(Adobe Commerce only) Stores banner content locally to improve performance</td>
2483                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2484                    </tr>
2485                                    <tr class="odd:bg-white">
2486                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">MAGE-MESSAGES</td>
2487                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Tracks error messages and other notifications that are shown to the user</td>
2488                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2489                    </tr>
2490                                    <tr class="odd:bg-white">
2491                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">MAGE-TRANSLATION-STORAGE</td>
2492                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Stores translated content when requested by the shopper</td>
2493                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2494                    </tr>
2495                                    <tr class="odd:bg-white">
2496                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">MAGE-TRANSLATION-FILE-VERSION</td>
2497                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Tracks the version of translations in local storage</td>
2498                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2499                    </tr>
2500                                    <tr class="odd:bg-white">
2501                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">PRODUCT_DATA_STORAGE</td>
2502                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Stores configuration for product data related to Recently Viewed/Compared Products</td>
2503                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2504                    </tr>
2505                                    <tr class="odd:bg-white">
2506                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">RECENTLY_COMPARED_PRODUCT</td>
2507                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Stores product IDs of recently compared products</td>
2508                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2509                    </tr>
2510                                    <tr class="odd:bg-white">
2511                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">RECENTLY_COMPARED_PRODUCT_PREVIOUS</td>
2512                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Stores product IDs of previously compared products for easy navigation</td>
2513                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2514                    </tr>
2515                                    <tr class="odd:bg-white">
2516                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">RECENTLY_VIEWED_PRODUCT</td>
2517                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Stores product IDs of recently viewed products for easy navigation</td>
2518                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2519                    </tr>
2520                                    <tr class="odd:bg-white">
2521                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">RECENTLY_VIEWED_PRODUCT_PREVIOUS</td>
2522                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Stores product IDs of recently previously viewed products for easy navigation</td>
2523                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2524                    </tr>
2525                                    <tr class="odd:bg-white">
2526                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">REMOVE_FROM_CART</td>
2527                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">(Adobe Commerce only) Used by Google Tag Manager</td>
2528                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2529                    </tr>
2530                                    <tr class="odd:bg-white">
2531                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">STF</td>
2532                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Records the time messages are sent by the SendFriend</td>
2533                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2534                    </tr>
2535                                    <tr class="odd:bg-white">
2536                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">X-MAGENTO-VARY</td>
2537                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Configuration setting that improves performance when using Varnish static content caching</td>
2538                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2539                    </tr>
2540                                    <tr class="odd:bg-white">
2541                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">FORM_KEY</td>
2542                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">A security measure that appends a random string to all form submissions to protect the data from Cross-Site Request Forgery</td>
2543                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2544                    </tr>
2545                                    <tr class="odd:bg-white">
2546                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">
2546MAGE-CACHE-SESSID</td>
2547                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">The value of this cookie triggers the cleanup of local cache storage</td>
2548                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2549                    </tr>
2550                                    <tr class="odd:bg-white">
2551                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">MAGE-CACHE-STORAGE</td>
2552                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Local storage of visitor-specific content that enables ecommerce functions</td>
2553                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2554                    </tr>
2555                                    <tr class="odd:bg-white">
2556                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">MAGE-CACHE-STORAGE-SECTION-INVALIDATION</td>
2557                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Forces local storage of specific content sections that should be invalidated</td>
2558                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2559                    </tr>
2560                                    <tr class="odd:bg-white">
2561                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">PERSISTENT_SHOPPING_CART</td>
2562                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Stores the key (ID) of persistent cart to make it possible to restore the cart for an anonymous shopper</td>
2563                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2564                    </tr>
2565                                    <tr class="odd:bg-white">
2566                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">PRIVATE_CONTENT_VERSION</td>
2567                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Appends a random, unique number and time to pages with customer content to prevent them from being cached on the server</td>
2568                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2569                    </tr>
2570                                    <tr class="odd:bg-white">
2571                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">SECTION_DATA_IDS</td>
2572                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Stores customer-specific information related to shopper-initiated actions, such as wish list display and checkout information</td>
2573                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2574                    </tr>
2575                                    <tr class="odd:bg-white">
2576                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">STORE</td>
2577                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Tracks the specific store view/locale selected by the shopper</td>
2578                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2579                    </tr>
2580                                </tbody>
2581            </table>
2582        </div>
2583    </div>
2584
2585</div>
2586                                            <div class="cookie-group-container cookie-group-container-2 card"
2587     x-data="{open2: false}">
2588    <div class="flex items-center gap-1">
2589        <input class="checkbox disabled:opacity-40 mr-1 rounded" type="checkbox" value="1"  checked data-group-id="2" name="allowed-group-2">
2590        <h6 class="flex grow items-center justify-between"
2591            x-on:click="open2 = !open2">
2592            <span>
2593                Marketing            </span>
2594            <span x-show="! open2">
2595                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="shrink-0 bg-white w-10 h-10 p-2 rounded-full" width="40" height="40" aria-hidden="true">
2596  <path stroke-linecap="round" stroke-linejoin="round" d="M12 4v16m8-8H4"/>
2597</svg>
2598            </span>
2599            <span x-show="open2" style="display: none">
2600                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="shrink-0 bg-white w-10 h-10 p-2 rounded-full" width="40" height="40" aria-hidden="true">
2601  <path stroke-linecap="round" stroke-linejoin="round" d="M20 12H4"/>
2602</svg>
2603            </span>
2604        </h6>
2605    </div>
2606
2607    <div class="content mt-4" x-show.transition.origin.top="open2" style="display: none">
2608        <div>
2609                    </div>
2610        <div class="cookie-list overflow-x-auto">
2611            <table class="w-full">
2612                <thead>
2613                <tr class="text-left text-sm">
2614                    <th class="pl-4 py-3 text-neutralGray-700 font-normal">Nome</th>
2615                    <th class="py-3 font-normal">Description</th>
2616                    <th class="pr-4 py-3 font-normal">
2617                        <span class="sr-only">Lifetime</span>
2618                    </th>
2619                </tr>
2620                </thead>
2621                <tbody class="text-sm">
2622                                    <tr class="odd:bg-white">
2623                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">CUSTOMER_SEGMENT_IDS</td>
2624                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Stores your Customer Segment ID</td>
2625                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2626                    </tr>
2627                                    <tr class="odd:bg-white">
2628                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">EXTERNAL_NO_CACHE</td>
2629                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">A flag that, indicates whether caching is on or off</td>
2630                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2631                    </tr>
2632                                    <tr class="odd:bg-white">
2633                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">FRONTEND</td>
2634                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Your session ID on the server</td>
2635                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2636                    </tr>
2637                                    <tr class="odd:bg-white">
2638                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">GUEST-VIEW</td>
2639                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Allows guests to edit their orders</td>
2640                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2641                    </tr>
2642                                    <tr class="odd:bg-white">
2643                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">LAST_CATEGORY</td>
2644                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">The last category you visited</td>
2645                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2646                    </tr>
2647                                    <tr class="odd:bg-white">
2648                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">LAST_PRODUCT</td>
2649                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">The last product you looked at</td>
2650                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2651                    </tr>
2652                                    <tr class="odd:bg-white">
2653                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">NEWMESSAGE</td>
2654                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Indicates whether a new message has been received</td>
2655                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2656                    </tr>
2657                                    <tr class="odd:bg-white">
2658                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">NO_CACHE</td>
2659                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Indicates whether it is allowed to use cache</td>
2660                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2661                    </tr>
2662                                </tbody>
2663            </table>
2664        </div>
2665    </div>
2666
2667</div>
2668                                            <div class="cookie-group-container cookie-group-container-3 
2668card"
2669     x-data="{open3: false}">
2670    <div class="flex items-center gap-1">
2671        <input class="checkbox disabled:opacity-40 mr-1 rounded" type="checkbox" value="1"  checked data-group-id="3" name="allowed-group-3">
2672        <h6 class="flex grow items-center justify-between"
2673            x-on:click="open3 = !open3">
2674            <span>
2675                Functionality            </span>
2676            <span x-show="! open3">
2677                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="shrink-0 bg-white w-10 h-10 p-2 rounded-full" width="40" height="40" aria-hidden="true">
2678  <path stroke-linecap="round" stroke-linejoin="round" d="M12 4v16m8-8H4"/>
2679</svg>
2680            </span>
2681            <span x-show="open3" style="display: none">
2682                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="shrink-0 bg-white w-10 h-10 p-2 rounded-full" width="40" height="40" aria-hidden="true">
2683  <path stroke-linecap="round" stroke-linejoin="round" d="M20 12H4"/>
2684</svg>
2685            </span>
2686        </h6>
2687    </div>
2688
2689    <div class="content mt-4" x-show.transition.origin.top="open3" style="display: none">
2690        <div>
2691                    </div>
2692        <div class="cookie-list overflow-x-auto">
2693            <table class="w-full">
2694                <thead>
2695                <tr class="text-left text-sm">
2696                    <th class="pl-4 py-3 text-neutralGray-700 font-normal">Nome</th>
2697                    <th class="py-3 font-normal">Description</th>
2698                    <th class="pr-4 py-3 font-normal">
2699                        <span class="sr-only">Lifetime</span>
2700                    </th>
2701                </tr>
2702                </thead>
2703                <tbody class="text-sm">
2704                                    <tr class="odd:bg-white">
2705                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">MG_DNT</td>
2706                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Allows you to restrict Adobe Commerce data collection if you have custom code to manage cookie consent on your site</td>
2707                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2708                    </tr>
2709                                    <tr class="odd:bg-white">
2710                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">USER_ALLOWED_SAVE_COOKIE</td>
2711                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Used for cookie restriction mode</td>
2712                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2713                    </tr>
2714                                    <tr class="odd:bg-white">
2715                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">AUTHENTICATION_FLAG</td>
2716                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Indicates if a shopper has signed in or signed out</td>
2717                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2718                    </tr>
2719                                    <tr class="odd:bg-white">
2720                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">DATASERVICES_CUSTOMER_ID</td>
2721                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Indicates if a shopper has signed in or signed out</td>
2722                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2723                    </tr>
2724                                    <tr class="odd:bg-white">
2725                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">DATASERVICES_CUSTOMER_GROUP</td>
2726                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Indicates a customer&#039;s group. This cookie is stored as sha1 checksum of the customer&#039;s group ID</td>
2727                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2728                    </tr>
2729                                    <tr class="odd:bg-white">
2730                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">DATASERVICES_CART_ID</td>
2731                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Identifies a shopper&#039;s cart actions</td>
2732                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2733                    </tr>
2734                                    <tr class="odd:bg-white">
2735                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">DATASERVICES_PRODUCT_CONTEXT</td>
2736                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Identifies a shopper&#039;s product interactions. This cookie contains the customer&#039;s unique quote ID in the system</td>
2737                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2738                    </tr>
2739                                </tbody>
2740            </table>
2741        </div>
2742    </div>
2743
2744</div>
2745                                            <div class="cookie-group-container cookie-group-container-4 card"
2746     x-data="{open4: false}">
2747    <div class="flex items-center gap-1">
2748        <input class="checkbox disabled:opacity-40 mr-1 rounded" type="checkbox" value="1"  checked data-group-id="4" name="allowed-group-4">
2749        <h6 class="flex grow items-center justify-between"
2750            x-on:click="open4 = !open4">
2751            <span>
2752                Statistical            </span>
2753            <span x-show="! open4">
2754                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="shrink-0 bg-white w-10 h-10 p-2 rounded-full" width="40" height="40" aria-hidden="true">
2755  <path stroke-linecap="round" stroke-linejoin="round" d="M12 4v16m8-8H4"/>
2756</svg>
2757            </span>
2758            <span x-show="open4" style="display: none">
2759                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="shrink-0 bg-white w-10 h-10 p-2 rounded-full" width="40" height="40" aria-hidden="true">
2760  <path stroke-linecap="round" stroke-linejoin="round" d="M20 12H4"/>
2761</svg>
2762            </span>
2763        </h6>
2764    </div>
2765
2766    <div class="content mt-4" x-show.transition.origin.top="open4" style="display: none">
2767        <div>
2768                    </div>
2769        <div class="cookie-list overflow-x-auto">
2770            <table class="w-full">
2771                <thead>
2772                <tr class="text-left text-sm">
2773                    <th class="pl-4 py-3 text-neutralGray-700 font-normal">Nome</th>
2774                    <th class="py-3 font-normal">Description</th>
2775                    <th class="pr-4 py-3 font-normal">
2776                        <span class="sr-only">Lifetime</span>
2777                    </th>
2778                </tr>
2779                </thead>
2780                <tbody class="text-sm">
2781                                    <tr class="odd:bg-white">
2782                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">_ga</td>
2783                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Used by Google Analytics</td>
2784                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2785                    </tr>
2786                                    <tr class="odd:bg-white">
2787                        <td class="text-neutralGray-700 break-words rounded-l-2xl pl-4 py-3 align-top min-w-[186px] max-w-[186px] pr-2.5">_ga_*</td>
2788                        <td class="py-3 align-top min-w-[355px] max-w-[355px] pr-2.5">Used by Google Analytics</td>
2789                        <td class="rounded-r-2xl pr-3 py-3 align-top min-w-[50px] max-w-[50px]">1 Year</td>
2790                    </tr>
2791                                </tbody>
2792            </table>
2793        </div>
2794    </div>
2795
2796</div>
2797                                    </div>
2798            </div>
2799            <div class="bg-white sticky bottom-0 -mx-4 px-4 lg:px-10 lg:-mx-10 pb-2.5">
2800                <button class="btn btn-primary btn-size-lg w-full -mb-6 lg:-mb-10"
2801                        x-on:click="save"><span>Aplicar</span>
2802                </button>
2803            </div>
2804            </div>
2805    </div>
2806</div>
2807<script>
2808    function initGdprSettingsModal() {
2809        return {
2810            open: false,
2811            close: function () {
2812                this.open = false;
2813                document.querySelector('body').style.overflow = 'auto';
2814            },
2815            init: function () {
2816                window.addEventListener('mst-gdpr-cookie-settings-open', () => {
2817                    document.querySelector('body').style.overflow = 'hidden';
2818                    this.open = true;
2819                })
2820            },
2821            save: function () {
2822                window.dispatchEvent(new CustomEvent('mst-gdpr-cookie-settings-save'));
2823                this.close();
2824            }
2825        };
2826    }
2827</script>
vendor: 1 bytes, line 2827
2827
2828<script>
2829    'use strict';
2830
2831    (function () {
2832        const swiperSrc = 'https\u003A\u002F\u002Fstata\u002Dbrazil.com\u002Fstatic\u002Fversion1790944496\u002Ffrontend\u002FTimberlakeHyva\u002Ftimberlake\u002Fpt_BR\u002FMagento_PageBuilder\u002Fjs\u002Fswiper\u002Dbundle.min.js';
2833
2834        function loadSwiper() {
2835            if (!window.sliderBannerSwiperPromise) {
2836                window.sliderBannerSwiperPromise = new Promise(function (resolve, reject) {
2837                    if (window.Swiper) {
2838                        resolve(window.Swiper);
2839
2840                        return;
2841                    }
2842
2843                    const script = document.createElement('script');
2844
2845                    script.src = swiperSrc;
2846                    script.async = true;
2847                    script.addEventListener('load', function () {
2848                        resolve(window.Swiper);
2849                    });
2850                    script.addEventListener('error', reject);
2851                    document.head.appendChild(script);
2852                });
2853            }
2854
2855            return window.sliderBannerSwiperPromise;
2856        }
2857
2858        document.addEventListener('alpine:init', function () {
2859            window.Alpine.data('sliderBanner', function () {
2860                return {
2861                    swiper: null,
2862
2863                    // Gap between slides, New style only. Must stay larger than the
2864                    // tab's 40px thickness (w-10 on the prototype): a tab is pinned
2865                    // 40px left of its own slide, so only a wider gap keeps the next
2866                    // tab clear of the previous card's right edge while at rest.
2867                    slideGap: 56,
2868
2869                    /**
2870                     * The Old style root is the Swiper element itself; the New style
2871                     * wraps it so the tabs can sit outside the clipping box.
2872                     */
2873                    swiperEl() {
2874                        return this.$root.classList.contains('swiper')
2875                            ? this.$root
2876                            : this.$root.querySelector('.swiper');
2877                    },
2878
2879                    /**
2880                     * One Bottom Title tab per slide, cloned from the prototype and
2881                     * placed at its own slide's offset, so each tab is pinned to the
2882                     * left edge of the slide it belongs to. Only the New style has
2883                     * the refs.
2884                     */
2885                    buildTabs(swiper) {
2886                        const track = this.$refs.tabTrack,
2887                            prototype = this.$refs.tabPrototype;
2888
2889                        if (!track || !prototype) {
2890                            return;
2891                        }
2892
2893                        track.querySelectorAll('[data-bottom-title-tab]').forEach(function (el) {
2894                            el.remove();
2895                        });
2896
2897                        this.$root.querySelectorAll('.swiper-slide').forEach(function (slide, index) {
2898                            const source = slide.querySelector('[data-element="bottom_title_side"]'),
2899                                offset = swiper && swiper.slidesGrid ? swiper.slidesGrid[index] : 0,
2900                                tab = prototype.cloneNode(false);
2901
2902                            tab.removeAttribute('x-ref');
2903                            tab.removeAttribute('hidden');
2904                            tab.setAttribute('data-bottom-title-tab', '');
2905                            tab.setAttribute('data-banner-border', slide.getAttribute('data-banner-border') || 'blue');
2906                            tab.style.left = offset + 'px';
2907                            tab.textContent = source ? source.textContent.trim() : '';
2908                            track.appendChild(tab);
2909                        });
2910                    },
2911
2912                    /**
2913                     * Move the track by Swiper's own translate, so each tab travels
2914                     * exactly with the slide it is pinned to.
2915                     */
2916                    moveTabs(swiper) {
2917                        const track = this.$refs.tabTrack;
2918
2919                        if (track) {
2920                            track.style.transform = 'translateX(' + swiper.translate + 'px)';
2921                        }
2922                    },
2923
2924                    init() {
2925                        const root = this.swiperEl();
2926
2927                        if (!root) {
2928                            return;
2929                        }
2930
2931                        loadSwiper().then(function (Swiper) {
2932                            this.swiper = new Swiper(root, {
2933                                speed: 400,
2934                                slidesPerView: 1,
2935                                // Only the New style has tabs to make room for; the Old
2936                                // style is byte-identical to the widget and stays flush.
2937                                spaceBetween: this.$refs.tabTrack ? this.slideGap : 0,
2938                                navigation: {
2939                                    nextEl: root.querySelector('.swiper-button-next'),
2940                                    prevEl: root.querySelector('.swiper-button-prev')
2941                                },
2942                                pagination: {
2943                                    el: root.querySelector('.swiper-pagination'),
2944                                    type: 'fraction',
2945                                    renderFraction: function (currentClass, totalClass) {
2946                                        return '<span class="' + currentClass + ' text-base text-white"></span>'
2947                                            + '<span class="text-xs text-white/30">/</span>'
2948                                            + '<span class="' + totalClass + ' text-xs text-white/30"></span>';
2949                                    }
2950                                },
2951                                on: {
2952                                    init: function (swiper) {
2953                                        this.buildTabs(swiper);
2954                                        this.moveTabs(swiper);
2955                                    }.bind(this),
2956                                    // setTranslate, not progress: Swiper emits progress
2957                                    // from updateProgress(), which runs before it sets the
2958                                    // transition duration, so moving the track there applies
2959                                    // the transform while the duration is still 0 and it
2960                                    // snaps instead of animating. setTranslate runs after.
2961                                    setTranslate: this.moveTabs.bind(this),
2962                                    // Swiper hands us the duration it is using: 0 while
2963                                    // dragging, so the tabs track the finger exactly, and
2964                                    // the slide speed otherwise, so they ease in step.
2965                                    setTransition: function (swiper, duration) {
2966                                        const track = this.$refs.tabTrack;
2967
2968                                        if (track) {
2969                                            track.style.transitionDuration = duration + 'ms';
2970                                        }
2971                                    }.bind(this),
2972                                    // slide widths change, so the offsets must be redone
2973                                    resize: function (swiper) {
2974                                        this.buildTabs(swiper);
2975                                        this.moveTabs(swiper);
2976                                    }.bind(this)
2977                                }
2978                            });
2979                        }.bind(this));
2980                    },
2981
2982                    destroy() {
2983                        if (this.swiper) {
2984                            this.swiper.destroy(true, true);
2985                            this.swiper = null;
2986                        }
2987                    }
2988                };
2989            });
2990        });
2991    })();
2992</script>
2992
2993
2994        <div wire:id="stripe.paymentrequest.minicart" wire:initial-data="{&quot;fingerprint&quot;:{&quot;id&quot;:&quot;stripe.paymentrequest.minicart&quot;,&quot;name&quot;:&quot;stripe-payments.minicart.shortcut&quot;,&quot;locale&quot;:&quot;pt_BR&quot;,&quot;path&quot;:&quot;\/&quot;,&quot;method&quot;:&quot;GET&quot;,&quot;resolver&quot;:&quot;layout&quot;,&quot;handle&quot;:&quot;customer_account_login&quot;,&quot;type&quot;:&quot;default&quot;,&quot;v&quot;:&quot;acj&quot;},&quot;effects&quot;:{&quot;listeners&quot;:[&quot;shipping_method_selected&quot;,&quot;payment_method_selected&quot;,&quot;coupon_code_applied&quot;,&quot;coupon_code_revoked&quot;,&quot;shipping_address_saved&quot;,&quot;shipping_address_activated&quot;,&quot;billing_address_saved&quot;,&quot;billing_address_activated&quot;,&quot;refresh&quot;]},&quot;serverMemo&quot;:{&quot;data&quot;:{&quot;eceParams&quot;:[],&quot;walletParams&quot;:[],&quot;placeOrderResult&quot;:[],&quot;shippingAddress&quot;:[],&quot;isEmptyCart&quot;:false,&quot;productId&quot;:null,&quot;resolvePayload&quot;:[],&quot;orderPlaced&quot;:false,&quot;totalAmount&quot;:0},&quot;htmlHash&quot;:&quot;20f46407&quot;,&quot;children&quot;:[],&quot;checksum&quot;:&quot;e38b67a33506d93f368fcac2418b65434bc665b6b4378b8c0f9127ee5b216ce7&quot;}}" class="hidden"></div>
2995<!-- Magewire Component wire-end:stripe.paymentrequest.minicart -->
2995<script>
2996    document.addEventListener('livewire:available', (event) => {
2997        const orig = Element.prototype.setAttribute;
2998
2999        Element.prototype.setAttribute = function patchLivewireSetAttribute(name, value) {
3000            // In Alpine v2, ignore Alpine v3 x-bind attributes that are used as x-spread
3001            if (window.Alpine && Alpine.version.substring(0, 1) === '2' && ! name) return;
3002            orig.call(this, name, value);
3003        }
3004    })
3005</script>
3005
3006
3007<script src="https://stata-brazil.com/static/version1790944496/frontend/TimberlakeHyva/timberlake/pt_BR/Magewirephp_Magewire/js/livewire.js"></script>
3007
3008    
3008<script>
3009        'use strict';
3010
3011        if (window.magewire) {
3012            console.warn('Magewire: It looks like Magewire\'s JavaScript assets have already been loaded. Make sure you aren\'t loading them twice.')
3013        }
3014
3015        window.magewire = new Livewire()
3016        
3017        window.Livewire = window.magewire
3018        window.Magewire = window.magewire
3019        window.livewire_app_url = 'https://stata-brazil.com/magewire/post'
3020                window.livewire_token = window.hyva.getFormKey()
3021
3022                if (window.Alpine) {
3023                        document.addEventListener("DOMContentLoaded", () => {
3024                setTimeout(function() {
3025                    console.warn("Magewire: It looks like AlpineJS has already been loaded. Make sure Magewire\'s scripts are loaded before AlpineJS.")
3026                })
3027            })
3028        }
3029
3030                (() => {
3031                        const startMagewireOnce = () => {
3032                document.removeEventListener('DOMContentLoaded', startMagewireOnce)
3033                window.removeEventListener('alpine:init', startMagewireOnce)
3034                window.magewire.start()
3035            }
3036
3037                        const initAlpine = window.deferLoadingAlpine || ((callback) => callback())
3038            window.deferLoadingAlpine = (callback) => {
3039                window.addEventListener('magewire:load', () => {
3040                    initAlpine(callback)
3041                });
3042            }
3043            document.addEventListener('DOMContentLoaded', startMagewireOnce)
3044
3045                                    window.addEventListener('alpine:init', startMagewireOnce)
3046        })();
3047
3048                Magewire.dispatchEvent = (name, event = {}, element = null) => {
3049            let e = new CustomEvent(`magewire:${ name }`, Object.assign({
3050                'bubbles': true,
3051                'cancelable': false
3052            }, event))
3053
3054            if (element) {
3055                element.dispatchEvent(e);
3056            } else {
3057                document.dispatchEvent(e)
3058            }
3059        }
3060
3061                ['load', 'update'].forEach(function (target, index) {
3062            document.addEventListener('livewire:' + target, (event) => {
3063                Magewire.dispatchEvent(target, event)
3064            })
3065        })
3066
3067                Magewire.plugins = {}
3068    </script>
3068
3069
3070            
3070<script>
3071        'use strict';
3072
3073        (() => {
3074                        let queue = [];
3075
3076            const loaderTypeResolvers = {
3077                syncInput: (item, loader) => {
3078                    let name = item.payload.name;
3079
3080                    let expression = [
3081                        `${ name }:${ item.payload.value }`,
3082                        `${ name.substr(0, name.lastIndexOf('.')) }:${ item.payload.value }`,
3083                        `${ name }`,
3084                        `${ name.substr(0, name.lastIndexOf('.')) }`
3085                    ].filter((expression) => {
3086                        return expression in loader
3087                    })[0] || false;
3088
3089                    if (expression) {
3090                        return loader[expression];
3091                    }
3092
3093                    return true;
3094                },
3095                callMethod: (item, loader) => {
3096                    return loader[item.method];
3097                },
3098                fireEvent: (item, loader) => {
3099                    return loader[item.payload.event];
3100                }
3101            }
3102
3103            const getLoaderData = function(message, component) {
3104                let loader = component.effects.loader || null;
3105
3106                if (! loader) {
3107                    return null;
3108                }
3109
3110                let data = {};
3111
3112                for (let item of message.updateQueue) {
3113                    let value = true;
3114
3115                    if (typeof loader === 'object' && item.type in loaderTypeResolvers) {
3116                        value = loaderTypeResolvers[item.type](item, loader);
3117                    } else if (typeof loader === 'string') {
3118                        value = [loader];
3119                    }
3120
3121                    if (value === undefined) {
3122                        value = false;
3123
3124                                                if ('*' in loader) {
3125                            value = loader['*'];
3126                        }
3127                    }
3128
3129                    data[component.id] = {
3130                        key: Date.now(),
3131                        component: component,
3132                        loader: value,
3133                        update: item
3134                    };
3135                }
3136
3137                return data;
3138            }
3139
3140            const start = function(loader, component) {
3141                                if (! loader || ! component) {
3142                    Magewire.dispatchEvent(`loader:start`);
3143                    return;
3144                }
3145
3146                let first = ! queue.some(({ parent }) => parent);
3147                let me = queue.findIndex(item => item && item.component && item.component.id === component.id);
3148
3149                if (first) {
3150                    queue.push({
3151                        loader: loader,
3152                        component: component
3153                    });
3154                }
3155
3156                                if (queue[me]) {
3157                    queue[me].loader = loader;
3158                }
3159
3160                queue.forEach((item, index) => {
3161                    item.parent = item.parent ?? false;
3162
3163                                        if (me > index && item.loader) {
3164                        stop(item.component, false, true);
3165                    }
3166                });
3167
3168                Magewire.dispatchEvent(`loader:${ first ? 'start' : 'tick' }`, {
3169                    detail: loader
3170                });
3171            }
3172
3173            const stop = function(component, failure = false, force = false) {
3174                if (failure) {
3175                    force = true;
3176                }
3177
3178                                let remove = [];
3179                                const me = queue.findIndex(item => item && item.component && item.component.id === component.id);
3180
3181                if (queue[me]) {
3182                    queue[me].done = true;
3183                }
3184
3185                if (force) {
3186                    remove.push(me);
3187                } else if (queue.every(item => item && item.done)) {
3188                    remove = Object.keys(queue);
3189                }
3190
3191                                remove.forEach(index => {
3192                    if (queue[index] && queue[index].loader) {
3193                        Magewire.dispatchEvent(`loader:stop`, {
3194                            detail: {
3195                                loader: queue[index].loader,
3196                                component: queue[index].component,
3197                                failure: failure
3198                            }
3199                        });
3200                    }
3201
3202                    delete queue[index];
3203                });
3204
3205                if (Object.values(queue).length === 0) {
3206                    Magewire.dispatchEvent(`loader:done`, {
3207                        detail: {
3208                            component: component,
3209                            failure: failure
3210                        }
3211                    });
3212
3213                    // Empty insurance.
3214                    queue = [];
3215                }
3216            }
3217
3218                        Magewire.plugins.loader = (() => {
3219                return {
3220                    start(loader, component) {
3221                        return start(loader, component);
3222                    },
3223                    stop(component, failure = false, force = false) {
3224                        return stop(component, failure, force);
3225                    }
3226                }
3227            })();
3228
3229            document.addEventListener('DOMContentLoaded', () => {
3230                Magewire.hook('message.sent', (message, component) => {
3231                    let loader = getLoaderData(message, component) || {};
3232
3233                    if (component.id in loader && loader[component.id].loader) {
3234                        Magewire.plugins.loader.start(loader[component.id], component);
3235                    }
3236                });
3237
3238                Magewire.hook('message.processed', (message, component) => {
3239                    if (message.response && message.response.effects) {
3240                        (message.response.effects.emits || []).forEac
3240h((emit) => {
3241                            Magewire.components.componentsListeningForEvent(emit.event)
3242                                .filter(listener => ! emit.to || emit.to === listener.id)
3243                                .forEach(listener => queue.push({ component: listener, parent: component }));
3244                        });
3245
3246                        let ids = [];
3247
3248                                                for (let i = queue.length - 1; i >= 0; i--) {
3249                            if (queue[i]) {
3250                                if (ids.indexOf(queue[i].component.id) !== -1) {
3251                                    queue.splice(i, 1);
3252                                    continue;
3253                                }
3254
3255                                ids.push(queue[i].component.id);
3256                            }
3257                        }
3258                    }
3259
3260                    Magewire.plugins.loader.stop(component);
3261
3262                                        if (component.effects && message.response.effects) {
3263                        component.effects.loader = message.response.effects.loader;
3264                    }
3265                });
3266
3267                Magewire.hook('message.failed', (message, component) => {
3268                    Magewire.plugins.loader.stop(component, true);
3269                });
3270            });
3271        })();
3272    </script>
vendor: 1 bytes, line 3272
3272
3273<script>
3274    'use strict';
3275
3276    Magewire.onPageExpired(() => {
3277        alert('The\u0020session\u0020has\u0020expired.\u0020Therefore,\u0020the\u0020page\u0020will\u0020be\u0020refreshed\u0020when\u0020you\u0020confirm.')
3278        window.location.reload()
3279    })
3280
3281    Magewire.onError((status, response) => {
3282                if (status === 419) {
3283            return
3284        }
3285
3286                response.clone().text().then((result) => {
3287            let messages = {"419":"The session has expired. Therefore, the page will be refreshed when you confirm."};
3288            result = JSON.parse(result)
3289
3290            console.error(
3291                `Magewire: ${ messages[status] || result.message || 'Something went wrong' } (${ status })`
3292            )
3293        }).catch((exception) => {
3294            console.error(exception)
3295        })
3296
3297        return false
3298            })
3299</script>
3299
3300
3301        
3301<script>
3302    'use strict';
3303
3304    Magewire.hasPlugin = function(name) {
3305        const plugins = Magewire.plugins
3306
3307        if (typeof plugins !== 'object' || plugins.length === 0) {
3308            return false;
3309        } else if (typeof name === 'object') {
3310            return name.every((name) => Magewire.hasPlugin(name))
3311        }
3312
3313        return name in plugins
3314    }
3315</script>
3315
3316
3317    
3317<script>
3318        Magewire.dispatchEvent('available')
3319    </script>
3319
3320
3321        
3321<script>
3322    Magewire.directive('select', (element, directive, component) => {
3323        if (element.tagName !== 'SELECT') {
3324            console.error('Magewire: [wire:select] can only be applied on elements of type select.', element)
3325            return
3326        }
3327        if (directive.value) {
3328            console.error('Magewire: [wire:select] shouldn\'t have a value.', element)
3329            return
3330        }
3331        if (! element.hasAttribute('wire:model.defer')) {
3332            console.error('Magewire: [wire:model] requires a defer modifier for [wire:select] to function properly.', element)
3333            return
3334        }
3335
3336        let changed = false,
3337            timeout = null
3338
3339        const sync = () => {
3340            clearTimeout(timeout)
3341
3342            if (changed) {
3343                changed = false
3344
3345                component.fireMessage()
3346            }
3347        }
3348
3349        const debounce = () => {
3350            if (directive.modifiers.includes('debounce')) {
3351                clearTimeout(timeout)
3352
3353                timeout = setTimeout(() => sync(), directive.durationOr(1500))
3354            }
3355        }
3356
3357        const change = () => {
3358            changed = true
3359
3360            debounce()
3361        }
3362
3363        element.addEventListener('keydown', debounce)
3364        element.addEventListener('change', change)
3365
3366        if (directive.modifiers.includes('blur')) {
3367            element.addEventListener('blur', () => sync())
3368        }
3369    })
3370</script>
3370
3371
3372<script>
3373    let SnapSlider = class {
3374        constructor(el, {
3375            labelSepparator = 'of',
3376            autoPager,
3377            groupPager
3378        } = {}) {
3379            this.el = el;
3380            this.track = this.el.querySelector("[data-track]");
3381            if (!this.track) {
3382                console.warn(
3383                    "No Slider track defined, reverting back to CSS slider.\nPlease create a wrapper for your slides with the attribute data-track",
3384                    this.el
3385                );
3386                return;
3387            }
3388            this.initialLoad = true;
3389            this.slides = [];
3390            this.inViewObserver;
3391            this.mutationObserver;
3392            this.resizeObserver;
3393            this.pager = this.el.querySelector("[data-pager]");
3394            this.navBtns = Array.from(
3395                this.el.querySelectorAll("[data-next], [data-prev]")
3396            );
3397            this.slideLabelSepparator = this.el.dataset.slideLabelSepparator || labelSepparator;
3398            this.useAutoPager = autoPager || this.el.hasAttribute("data-auto-pager") || false;
3399            this.useGroupPager = groupPager || this.el.hasAttribute("data-group-pager") || false;
3400            this.sliderLabel = this.el.hasAttribute("aria-label") && this.el.getAttribute("aria-label").toLowerCase().trim().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
3401            this.sliderId = this.el.id || this.sliderLabel || "slider";
3402            this.markerIdName = "data-target-id";
3403            this.pagerClasses = this.el.dataset.pagerClass || "snap-pager";
3404            this.markerClasses = this.el.dataset.markerClass || "snap-marker";
3405            this.init();
3406        }
3407        init() {
3408            this.setupSlides();
3409            this.setupNav();
3410            if (this.useAutoPager) {
3411                this.createPager();
3412            } else {
3413                this.setupPager();
3414            }
3415            this.setupObservers();
3416            this.setupMutationObserver();
3417            this.setupResizeObserver();
3418            this.el.addEventListener("click", this.eventHandler.bind(this));
3419            this.el.addEventListener("keydown", this.eventHandler.bind(this));
3420        }
3421        destroy() {
3422            this.inViewObserver?.disconnect();
3423            this.mutationObserver?.disconnect();
3424            this.resizeObserver?.disconnect();
3425            this.el.removeEventListener("click", this.eventHandler.bind(this));
3426            this.el.removeEventListener("keydown", this.eventHandler.bind(this));
3427        }
3428        roundUpIfGreaterThan(number, min = 8) {
3429            const decimalPart = number - Math.floor(number);
3430            return decimalPart >= min ? Math.ceil(number) : Math.floor(number);
3431        }
3432        getInViewItems() {
3433            const inViewSlides = this.track.querySelectorAll("[data-in-view]");
3434            const firstInViewSlide = inViewSlides[0] || null;
3435            const lastInViewSlide = inViewSlides[inViewSlides.length - 1] || null;
3436            const isAtStart = firstInViewSlide === this.slides[0];
3437            const isAtEnd = lastInViewSlide === this.slides[this.slides.length - 1];
3438            return {
3439                inViewSlides,
3440                totalInViewSlides: inViewSlides.length,
3441                firstInViewSlide,
3442                lastInViewSlide,
3443                isAtStart,
3444                isAtEnd,
3445                hasNoOverflow: isAtStart && isAtEnd
3446            };
3447        }
3448        groupPagerMarkers() {
3449            if (this.slides.length === 0 || !this.pager || !this.useGroupPager) return;
3450            const totalVisibleSlides = this.roundUpIfGreaterThan(
3451                this.track.offsetWidth / this.slides[0].offsetWidth
3452            );
3453            const markers = Array.from(this.pager.querySelectorAll("a, button"));
3454            markers.forEach((marker, index) => {
3455                marker.style.display = index % totalVisibleSlides === 0 ? null : "none";
3456            });
3457        }
3458        handleInView(entries) {
3459            entries.forEach((entry) => {
3460                const marker = this.pager && (this.pager.querySelector(`[href="#${entry.target.id}"]`) || this.pager.querySelector(
3461                    `[${this.markerIdName}="${entry.target.id}"]`
3462                ));
3463                entry.target.toggleAttribute("data-in-view", entry.isIntersecting);
3464                entry.target.toggleAttribute("inert", !entry.isIntersecting);
3465                marker?.setAttribute("aria-current", entry.isIntersecting);
3466                marker?.setAttribute("tabindex", entry.isIntersecting ? "0" : "-1");
3467            });
3468            const {
3469                isAtStart,
3470                isAtEnd,
3471                hasNoOverflow
3472            } = this.getInViewItems();
3473            this.navBtns.forEach((btn) => {
3474                if (btn.hasAttribute("data-next")) {
3475                    btn.style.visibility = hasNoOverflow ? "hidden" : null;
3476                    isAtEnd ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled");
3477                }
3478                if (btn.hasAttribute("data-prev")) {
3479                    btn.style.visibility = hasNoOverflow ? "hidden" : null;
3480                    isAtStart ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled");
3481                }
3482            });
3483            if (this.pager) {
3484                this.pager.style.visibility = hasNoOverflow ? "hidden" : null;
3485            }
3486            if (!this.initialLoad) {
3487                this.el.dispatchEvent(
3488                    new CustomEvent("slideChange", {
3489                        detail: this.getInViewItems()
3490                    })
3491                );
3492            } else {
3493                this.initialLoad = false;
3494            }
3495            if (document.activeElement.parentElement.hasAttribute("data-pager")) {
3496                const activeItems = this.pager.querySelectorAll('[tabindex="0"]');
3497                if (activeItems.length) {
3498                    activeItems[0].focus({ preventScroll: true });
3499                }
3500            }
3501        }
3502        getSlides() {
3503            if (!this.track) return [];
3504            return Array.from(this.track.children).filter(
3505                (child) => child.tagName.toLowerCase() !== "template" && child.tagName.toLowerCase() !== "style" && child.tagName.toLowerCase() !== "script"
3506            );
3507        }
3508        refreshSlides() {
3509            this.initialLoad = true;
3510            this.slides = this.getSlides();
3511            this.setupSlides();
3512            if (this.useAutoPager) {
3513                this.createPager();
3514            } else {
3515                this.setupPager();
3516            }
3517            this.groupPagerMarkers();
3518            this.setupObservers();
3519        }
3520        setupSlides() {
3521            this.slides = this.getSlides();
3522            this.slides.forEach((slide, index) => {
3523                const totalSlides = this.slides.length;
3524                const currentSlide = index + 1;
3525                const existingLabel = slide.getAttribute("aria-label") || "";
3526                const isImage = slide.tagName.toLowerCase() === "img" || slide.tagName.toLowerCase() === "picture";
3527                const slideLabelTag = isImage ? "alt" : "aria-label";
3528                const hasAutoLabel = existingLabel.startsWith(
3529                    `${currentSlide} ${this.slideLabelSepparator} `
3530                );
3531                if (!slide.hasAttribute("id")) {
3532                    slide.setAttribute(
3533                        "id",
3534                        `${this.sliderId}-item-${currentSlide}`
3535                    );
3536                }
3537                if (!slide.hasAttribute(slideLabelTag) || slide.getAttribute(slideLabelTag) === "" || hasAutoLabel) {
3538                    slide.setAttribute(
3539                        slideLabelTag,
3540                        `${currentSlide} ${this.slideLabelSepparator} ${totalSlides}`
3541                    );
3542                }
3543                if (slide.tagName.toLowerCase() === "div" && !slide.hasAttribute("role")) {
3544                    slide.setAttribute("role", "group");
3545                }
3546                if (this.pager && !isImage) {
3547                    slide.setAttribute("role", "tabpanel");
3548                }
3549                if (slide.getAttribute("role") === "group") {
3550                    slide.setAttribute("aria-roledescription", "item");
3551                }
3552            });
3553            if (!this.el.hasAttribute("role") && this.el.tagName !== "SECTION") {
3554                this.el.setAttribute("role", "region");
3555            }
3556            if (!this.el.hasAttribute("aria-roledescription")) {
3557                this.el.setAttribute("aria-roledescription", "carousel");
3558            }
3559            this.track.setAttribute("tabindex", 0);
3560            this.track.setAttribute("aria-live", "polite");
3561        }
3562        setupNav() {
3563            this.navBtns.forEach((btn) => {
3564                btn.setAttribute("disabled", "");
3565                btn.removeAttribute("hidden");
3566                btn.classList.remove("invisible");
3567                btn.style.visibility = null;
3568            });
3569        }
3570        createPager() {
3571            const newPager = document.createElement("nav");
3572            newPager.setAttribute("data-pager", "");
3573            newPager.setAttribute("role", "tablist");
3574            newPager.classList.add(...this.pagerClasses.split(" "));
3575            this.slides.forEach((slide, index) => {
3576                const marker = document.createElement("button");
3577                const slideId = slide.id || `${this.sliderId}-item-${index + 1}`;
3578                marker.setAttribute(this.markerIdName, slideId);
3579                marker.classList.add(...this.markerClasses.split(" "));
3580                this.setupPagerMarker(marker, index);
3581                newPager.appendChild(marker);
3582                if (slide.tagName.toLowerCase() !== "img" && slide.tagName.toLowerCase() !== "picture") {
3583                    slide.removeAttribute("aria-roledescription");
3584                    slide.setAttribute("role", "tabpanel");
3585                }
3586            });
3587            if (this.pager) {
3588                this.pager.setAttribute("role", "tablist");
3589                this.pager.replaceChildren(...newPager.children);
3590            } else {
3591                this.track.after(newPager);
3592                this.pager = this.el.querySelector("[data-pager]");
3593            }
3594        }
3595        setupPager() {
3596            if (!this.pager) return;
3597            this.pager.setAttribute("role", "tablist");
3598            const items = Array.from(this.pager.querySelectorAll("a, button"));
3599            items.forEach((marker, index) => this.setupPagerMarker(marker, index));
3600        }
3601        setupPagerMarker(marker, index) {
3602            const markerId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName);
3603            const slideId = markerId || `${this.sliderId}-item-${index + 1}`;
3604            if (!markerId) {
3605                marker.setAttribute(this.markerIdName, slideId);
3606            }
3607            marker.setAttribute("role", "tab");
3608            marker.setAttribute("aria-controls", slideId);
3609            marker.setAttribute("aria-posinset", index + 1);
3610            marker.setAttribute("aria-setsize", this.slides.length);
3611            marker.setAttribute("tabindex", "-1");
3612            if (!marker.hasAttribute("aria-label")) {
3613                marker.setAttribute("aria-label", `Slide ${index + 1}`);
3614            }
3615        }
3616        setupObservers() {
3617            if (this.inViewObserver) {
3618                this.inViewObserver.disconnect();
3619            }
3620            this.inViewObserver = new IntersectionObserver(
3621                this.handleInView.bind(this), {
3622                    root: this.track,
3623                    threshold: 0.8
3624                }
3625            );
3626            this.slides.forEach((slide) => this.inViewObserver.observe(slide));
3627        }
3628        setupMutationObserver() {
3629            this.mutationObserver = new MutationObserver(
3630                this.refreshSlides.bind(this)
3631            );
3632            this.mutationObserver.observe(this.track, {
3633                childList: true,
3634                subtree: false
3635            });
3636        }
3637        setupResizeObserver() {
3638            this.resizeObserver = new ResizeObserver(
3639                this.groupPagerMarkers.bind(this)
3640            );
3641            this.resizeObserver.observe(this.el);
3642        }
3643        goToSlideDir(dir = "next") {
3644            const {
3645                firstInViewSlide,
3646                lastInViewSlide
3647            } = this.getInViewItems();
3648            const isPrev = dir === "prev";
3649            let targetSlide = isPrev ? firstInViewSlide?.previousElementSibling : lastInViewSlide?.nextElementSibling;
3650            if (!targetSlide) return;
3651            if (targetSlide.tagName.toLowerCase() === "template") {
3652                targetSlide = isPrev ? targetSlide?.previousElementSibling : targetSlide?.nextElementSibling;
3653            }
3654            targetSlide.scrollIntoView({ block: "nearest", inline: isPrev ? "end" : "start" });
3655        }
3656        pagerToSlide(event) {
3657            if (!event.target.closest("[data-pager]")) return;
3658            const marker = event.target.closest("a, button");
3659            if (!marker) return;
3660            event.preventDefault();
3661            const slideId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName);
3662            const targetSlide = this.track.querySelector(`#${slideId}`);
3663            targetSlide?.scrollIntoView({ block: "nearest", inline: "start" });
3664        }
3665        eventHandler(event) {
3666            const target = event.target.closest(
3667                "[data-next], [data-prev], [data-pager]"
3668            );
3669            if (!target) return;
3670            if (event.type === "click") {
3671                if (target.hasAttribute("data-next")) {
3672                    this.goToSlideDir("next");
3673                } else if (target.hasAttribute("data-prev")) {
3674                    this.goToSlideDir("prev");
3675                } else if (target.closest("[data-pager]")) {
3676                    this.pagerToSlide(event);
3677                }
3678            }
3679            if (event.type === "keydown" && target.closest("[data-pager]")) {
3680                if (event.key === "ArrowRight") {
3681                    this.goToSlideDir("next");
3682                } else if (event.key === "ArrowLeft") {
3683                    this.goToSlideDir("prev");
3684                }
3685            }
3686        }
3687    };
3688
3689    (() => {
3690        function alpineSnapSlider(Alpine) {
3691            Alpine.directive("snap-slider", (el, {
3692                modifiers
3693            }, {
3694                cleanup
3695            }) => {
3696                const autoPager = modifiers.includes("auto-pager");
3697                const groupPager = modifiers.includes("group-pager");
3698                const slider = new SnapSlider(el, {
3699                    autoPager,
3700                    groupPager
3701                });
3702                cleanup(() => {
3703                    slider.destroy();
3704                });
3705            });
3706        }
3707
3708        document.addEventListener("alpine:init", () => {
3709            window.Alpine.plugin(alpineSnapSlider);
3710        });
3711    })();
3712</script>
vendor: 1 bytes, line 3712
3712
3713<script>
3714    (() => {
3715        // src/dialog.js
3716        function dialog_default(Alpine) {
3717            Alpine.directive("htmldialog", fylgjaAlpineDialog);
3718            function fylgjaAlpineDialog(el, { expression, modifiers }, { evaluateLater, cleanup }) {
3719            const evaluate = expression.length ? evaluateLater(expression) : () => {};
3720            const canEvaluate = expression.length > 0;
3721            const lockPageScroll = modifiers.includes("noscroll");
3722            const closeBy = el.getAttribute("closeby") || modifierValue(modifiers, "closeby", "closerequest");
3723            el.style.display = null;
3724            el.style.length === 0 && el.removeAttribute("style");
3725            if (el._x_isShown) {
3726                open();
3727            }
3728            const closeBySupported = (() => {
3729                return "closedBy" in HTMLDialogElement.prototype;
3730            })();
3731            function scrollLock(use = true) {
3732                document.body.style.overflow = use ? "hidden" : "";
3733            }
3734            function dialogSubmit(event) {
3735                if (event.target.getAttribute("method") === "dialog" || event.submitter?.getAttribute("formmethod") === "dialog") {
3736                event.preventDefault();
3737                evaluate();
3738                }
3739            }
3740            function escapeDialog(event) {
3741                if (event.key !== "Escape") return;
3742                event.preventDefault();
3743                if (closeBy === "none") return;
3744                evaluate();
3745            }
3746            function handleCloseByEvent(event) {
3747                if (event.target !== el) return;
3748                const rect = el.getBoundingClientRect();
3749                const isInDialog = rect.top <= event.clientY && event.clientY <= rect.top + rect.height && rect.left <= event.clientX && event.clientX <= rect.left + rect.width;
3750                if (!isInDialog) {
3751                if (closeBy === "any") {
3752                    if (closeBySupported) {
3753                    event.preventDefault();
3754                    }
3755                    evaluate();
3756                }
3757                }
3758            }
3759            function handleCloseEvent() {
3760                evaluate();
3761            }
3762            function open() {
3763                if (el.hasAttribute("open")) return;
3764                el.showModal();
3765                scrollLock(lockPageScroll);
3766            }
3767            function close() {
3768                if (!el.hasAttribute("open")) return;
3769                el.close();
3770                scrollLock(false);
3771            }
3772            el._x_doShow = () => open();
3773            el._x_doHide = () => close();
3774            el.addEventListener("keydown", escapeDialog);
3775            el.addEventListener("submit", dialogSubmit);
3776            el.addEventListener("click", handleCloseByEvent);
3777            el.addEventListener("cancel", handleCloseEvent);
3778            cleanup(() => {
3779                el.removeEventListener("keydown", escapeDialog);
3780                el.removeEventListener("submit", dialogSubmit);
3781                el.removeEventListener("click", handleCloseByEvent);
3782                el.removeEventListener("cancel", handleCloseEvent);
3783                scrollLock(false);
3784            });
3785            }
3786        }
3787        function modifierValue(modifiers, key, fallback) {
3788            if (modifiers.indexOf(key) === -1) return fallback;
3789            const rawValue = modifiers[modifiers.indexOf(key) + 1];
3790            if (!rawValue) return fallback;
3791            if (key === "closeby") {
3792            const allowedValues = ["auto", "none", "closerequest", "any"];
3793            const options = allowedValues.join(", ");
3794            if (!allowedValues.includes(rawValue)) {
3795                console.warn(
3796                `"${rawValue}" is not one of the allowed values for closeby: ${options}`
3797                );
3798                return fallback;
3799            }
3800            }
3801            return rawValue;
3802        }
3803
3804        // src/cdn.js
3805        document.addEventListener("alpine:init", () => {
3806            window.Alpine.plugin(dialog_default);
3807        });
3808    })();
3809</script>
vendor: 1 bytes, line 3809
3809
3810<script>
3811    (() => {
3812        function src_default(Alpine) {
3813            Alpine.directive("intersect", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
3814                let evaluate = evaluateLater(expression);
3815                let options = {
3816                    rootMargin: getRootMargin(modifiers),
3817                    threshold: getThreshold(modifiers)
3818                };
3819                let observer = new IntersectionObserver((entries) => {
3820                    entries.forEach((entry) => {
3821                        if (entry.isIntersecting === (value === "leave"))
3822                            return;
3823                        evaluate();
3824                        modifiers.includes("once") && observer.disconnect();
3825                    });
3826                }, options);
3827                observer.observe(el);
3828                cleanup(() => {
3829                    observer.disconnect();
3830                });
3831            }));
3832        }
3833        function getThreshold(modifiers) {
3834            if (modifiers.includes("full"))
3835                return 0.99;
3836            if (modifiers.includes("half"))
3837                return 0.5;
3838            if (!modifiers.includes("threshold"))
3839                return 0;
3840            let threshold = modifiers[modifiers.indexOf("threshold") + 1];
3841            if (threshold === "100")
3842                return 1;
3843            if (threshold === "0")
3844                return 0;
3845            return Number(`.${threshold}`);
3846        }
3847        function getLengthValue(rawValue) {
3848            let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/);
3849            return match ? match[1] + (match[2] || "px") : void 0;
3850        }
3851        function getRootMargin(modifiers) {
3852            const key = "margin";
3853            const fallback = "0px 0px 0px 0px";
3854            const index = modifiers.indexOf(key);
3855            if (index === -1)
3856                return fallback;
3857            let values = [];
3858            for (let i = 1; i < 5; i++) {
3859                values.push(getLengthValue(modifiers[index + i] || ""));
3860            }
3861            values = values.filter((v) => v !== void 0);
3862            return values.length ? values.join(" ").trim() : fallback;
3863        }
3864
3865        document.addEventListener("alpine:init", () => {
3866            window.Alpine.plugin(src_default);
3867        });
3868    })();
3869</script>
vendor: 1 bytes, line 3869
3869
3870<script>
3871    for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]:not([x-data] [x-data])":"intersect",".product-info [x-data]:not([x-data] [x-data])":"intersect","#filters-content [x-data]:not([x-data] [x-data])":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]:not([x-data] [x-data])":"intersect","#notice-cookie-block":"idle"})) {
3872        document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`));
3873    }
3874</script>
vendor: 1 bytes, line 3874
3874
3875<script>
3876    (function () {
3877        "use strict";
3878
3879        const hasAlpine = new Promise(resolve => {
3880            window.addEventListener('alpine:initialized', resolve, {once: true, passive: true});
3881        });
3882
3883        const hasInteract = new Promise(resolve => {
3884            (events => {
3885                const onInteract = () => {
3886                    resolve();
3887                    events.forEach(type => window.removeEventListener(type, onInteract));
3888                }
3889                events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true}))
3890            })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown'])
3891        });
3892
3893        const onIntersect = (el) => {
3894            return new Promise(resolve => {
3895                const observer = new IntersectionObserver(entries => {
3896                    for (const entry of entries) {
3897                        if (entry.isIntersecting) {
3898                            observer.disconnect()
3899                            resolve();
3900                        }
3901                    }
3902                }, {});
3903                observer.observe(el);
3904            });
3905        }
3906
3907        function runComponent(el) {
3908            hasAlpine.then(() => {
3909                el.removeAttribute('x-ignore');
3910                queueMicrotask(() => Alpine.initTree(el));
3911            });
3912        }
3913
3914        function initDeferredComponents() {
3915            document.querySelectorAll('[x-data][x-defer]').forEach(el => {
3916                el.setAttribute('x-ignore', '');
3917                const deferUntil = (el.getAttribute('x-defer') || '').trim();
3918                switch (deferUntil) {
3919                    case 'interact':
3920                        hasInteract.then(() => runComponent(el));
3921                        break;
3922                    case 'intersect':
3923                        onIntersect(el).then(() => runComponent(el))
3924                        break;
3925                    case 'idle':
3926                        window.requestIdleCallback
3927                            ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000})
3928                            : setTimeout(() => runComponent(el), 4000);
3929                        break;
3930                    case 'eager':
3931                        runComponent(el);
3932                        break;
3933                    default:
3934                        if (deferUntil.startsWith('event:') && deferUntil.length > 6) {
3935                            window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true});
3936                        }
3937                }
3938            });
3939        }
3940
3941        window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true});
3942    })()
3943</script>
vendor: 1 bytes, line 3943
3943
vendor: 1,455 bytes, lines 3944-3946
3944<script>
3945(()=>{function g(n){n.directive("collapse",e),e.inline=(t,{modifiers:i})=>{i.includes("min")&&(t._x_doShow=()=>{},t._x_doHide=()=>{})};function e(t,{modifiers:i}){let r=l(i,"duration",250)/1e3,u=l(i,"min",0),h=!i.includes("min");t._x_isShown||(t.style.height=`${u}px`),!t._x_isShown&&h&&(t.hidden=!0),t._x_isShown||(t.style.overflow="hidden");let c=(d,s)=>{let o=n.setStyles(d,s);return s.height?()=>{}:o},f={transitionProperty:"height",transitionDuration:`${r}s`,transitionTimingFunction:"cubic-bezier(0.4, 0.0, 0.2, 1)"};t._x_transition={in(d=()=>{},s=()=>{}){h&&(t.hidden=!1),h&&(t.style.display=null);let o=t.getBoundingClientRect().height;t.style.height="auto";let a=t.getBoundingClientRect().height;o===a&&(o=u),n.transition(t,n.setStyles,{during:f,start:{height:o+"px"},end:{height:a+"px"}},()=>t._x_isShown=!0,()=>{t.getBoundingClientRect().height==a&&(t.style.overflow=null)})},out(d=()=>{},s=()=>{}){let o=t.getBoundingClientRect().height;n.transition(t,c,{during:f,start:{height:o+"px"},end:{height:u+"px"}},()=>t.style.overflow="hidden",()=>{t._x_isShown=!1,t.style.height==`${u}px`&&h&&(t.style.display="none",t.hidden=!0)})}}}}function l(n,e,t){if(n.indexOf(e)===-1)return t;let i=n[n.indexOf(e)+1];if(!i)return t;if(e==="duration"){let r=i.match(/([0-9]+)ms/);if(r)return r[1]}if(e==="min"){let r=i.match(/([0-9]+)px/);if(r)return r[1]}return i}document.addEventListener("alpine:init",()=>{window.Alpine.plugin(g)});})();
3946</script>
vendor: 1 bytes, line 3946
3946
3947<script>
3948    (() => {
3949        function selectPlugin(Alpine) {
3950            Alpine.data('_selectImplementation', () => {
3951                return {
3952                    $select: null,
3953
3954                    // Props
3955                    get props() {
3956                        return this.$data.$select?.props ?? {}
3957                    },
3958
3959                    // Data
3960                    touched: false,
3961                    activatedIndex: undefined,
3962                    keyPressed: false,
3963                    expanded: false,
3964                    positioningStyles: {},
3965                    positionClasses: [],
3966                    listboxOverlapsTrigger: false,
3967                    valueOnOpen: undefined,
3968                    //animatingListbox: false,
3969
3970                    // Computed
3971                    get listboxVisible() {
3972                        return this.$data.expanded // || this.$data.animatingListbox
3973                    },
3974                    get valueArray() {
3975                        return this.$data.props.multiple
3976                            ? this.$data.props.modelValue
3977                            : [this.$data.props.modelValue]
3978                    },
3979                    get idPrefix() {
3980                        return this.$data.props.id
3981                    },
3982                    get idListbox() {
3983                        return `${this.$data.idPrefix}-listbox`
3984                    },
3985                    get idTrigger() {
3986                        return `${this.$data.idPrefix}-trigger`
3987                    },
3988                    get hasSelected() {
3989                        return this.$data.props.multiple
3990                            ? this.$data.props.selectedOption.length > 0
3991                            : typeof this.$data.props.selectedOption !== 'undefined'
3992                    },
3993                    get firstSelectedOptionIndex() {
3994                        return this.$data.hasSelected
3995                            ? this.$data.props.options.indexOf(
3996                                this.$data.props.multiple
3997                                    ? this.$data.props.selectedOption[0]
3998                                    : this.$data.props.selectedOption,
3999                            )
4000                            : undefined
4001                    },
4002                    getPlaceholder(option) {
4003                        const placeholderValue = this.$data.props.placeholder
4004                        if (!this.$data.hasSelected) return placeholderValue.trim() || '\u00A0'
4005
4006                        if (this.$data.props.multiple) {
4007                            return this.$data.props.selectedOption.map(option => option.label).join(', ')
4008                        } else {
4009                            return this.$data.props.selectedOption.label
4010                        }
4011                    },
4012                    get hasActivatedItem() {
4013                        return typeof this.$data.activatedIndex === 'number'
4014                    },
4015                    get activatedOption() {
4016                        return !this.$data.hasActivatedItem
4017                            ? undefined
4018                            : this.$data.props.options[this.$data.activatedIndex]
4019                    },
4020                    get activatedId() {
4021                        return !this.$data.hasActivatedItem ? undefined : this.$data.activatedOption.id
4022                    },
4023
4024                    // Functions
4025                    pressKey(key) {
4026                        this.$data.keyPressed = key
4027                        setTimeout(() => {
4028                            this.$data.keyPressed = false
4029                        }, 0)
4030                    },
4031                    scrollListbox({direction = 'auto', index = this.$data.activatedIndex} = {}) {
4032                        let hasSelected = typeof index === 'number'
4033                        let listbox = this.$refs.listbox
4034                        if (!listbox) return
4035
4036                        let listboxRect = listbox.getBoundingClientRect()
4037                        let listboxTriggerRect = this.$refs.listboxTrigger.getBoundingClientRect()
4038                        let listboxItem = listbox.children[index]
4039                        if (!listboxItem) return
4040                        let previousItem = listbox.children[index - 1] ?? listboxItem
4041                        let nextItem = listbox.children[index + 1] ?? listboxItem
4042                        let previousItemRect = previousItem.getBoundingClientRect()
4043                        let nextItemRect = nextItem.getBoundingClientRect()
4044
4045                        if (direction === 'auto' && this.$data.listboxOverlapsTrigger && hasSelected) {
4046                            let diff = listboxTriggerRect.top - listboxRect.top
4047                            let top = listboxItem.offsetTop - diff
4048                            listbox.scrollTo({top})
4049                        } else if (
4050                            direction === 'down' &&
4051                            nextItemRect.bottom + listboxTriggerRect.height > listboxRect.bottom
4052                        ) {
4053                            listbox.scrollTo({
4054                                top:
4055                                    index === this.$data.props.options.length - 1
4056                                        ? listbox.scrollHeight
4057                                        : nextItem.offsetTop + nextItemRect.height - listboxRect.height,
4058                                behavior: 'smooth',
4059                            })
4060                        } else if (
4061                            direction === 'up' &&
4062                            previousItemRect.top - listboxTriggerRect.height < listboxRect.top
4063                        ) {
4064                            listbox.scrollTo({
4065                                top: index === 0 ? 0 : previousItem.offsetTop,
4066                                behavior: 'smooth',
4067                            })
4068                        }
4069                    },
4070                    calculatePosition() {
4071                        let listbox = this.$refs.listbox
4072                        let listboxTrigger = this.$refs.listboxTrigger
4073                        if (!listbox || !listboxTrigger) return
4074                        let screenWidth = Math.min(window.innerWidth, window.outerWidth)
4075                        let screenHeight = window.innerHeight
4076                        let listboxRect = listbox.getBoundingClientRect()
4077                        let listboxTriggerRect = listboxTrigger.getBoundingClientRect()
4078                        let spaceBelowTrigger = screenHeight - listboxTriggerRect.bottom
4079                        let spaceAboveTrigger = listboxTriggerRect.top
4080                        let listboxTooTall = listboxRect.bottom > screenHeight
4081                        let listboxTooWide = listboxRect.right > screenWidth
4082                        let listboxTooWideForTrigger = listboxRect.width > listboxTriggerRect.width
4083                        let localPositioningStyles = {}
4084                        let localPositionClasses = []
4085
4086                        if (listboxTooTall) {
4087                            if (spaceAboveTrigger > spaceBelowTrigger && spaceAboveTrigger > listboxRect.height) {
4088                                localPositioningStyles[
4089                                    '--x-select--position-bottom'
4090                                    ] = `${listboxTriggerRect.height}px`
4091                                localPositionClasses = ['from-bottom']
4092                            } else if (spaceAboveTrigger > spaceBelowTrigger) {
4093                                localPositioningStyles['--x-select--position-bottom'] = `${Math.round(
4094                                    listboxTriggerRect.bottom - screenHeight,
4095                                )}px`
4096                                localPositionClasses = ['from-bottom']
4097                                this.$data.listboxOverlapsTrigger = true
4098                            } else {
4099                                localPositioningStyles['--x-select--position-top'] = `${Math.round(
4100                                    -listboxTriggerRect.top,
4101                                )}px`
4102                                localPositionClasses = ['from-top']
4103                                this.$data.listboxOverlapsTrigger = true
4104                            }
4105                        } else {
4106                            localPositionClasses = ['from-none']
4107                        }
4108                        if (listboxTooWideForTrigger) {
4109                            localPositionClasses.push('is-too-wide-for-trigger')
4110                        }
4111                        if (listboxTooWide) {
4112                            localPositionClasses.push('is-too-wide-for-screen')
4113                        }
4114                        this.$data.positionClasses = localPositionClasses
4115                        this.$data.positioningStyles = localPositioningStyles
4116                    },
4117                    activate(index) {
4118                        if (index < 0) return
4119                        if (index >= this.$data.props.options.length) return
4120                        this.$data.activatedIndex = index
4121                    },
4122                    activateFirst() {
4123                        this.$data.activate(0)
4124                    },
4125                    activateLast() {
4126                        this.$data.activate(this.$data.props.options.length - 1)
4127                    },
4128                    activateFirstSelected() {
4129                        if (this.$data.hasSelected) {
4130                            this.$data.activate(this.$data.firstSelectedOptionIndex)
4131                        } else {
4132                            this.$data.activateFirst()
4133                        }
4134                    },
4135                    activatePrevious() {
4136                        if (!this.$data.hasActivatedItem) {
4137                            this.$data.activateLast()
4138                        } else {
4139                            this.$data.activate(this.$data.activatedIndex - 1)
4140                        }
4141                    },
4142                    activateNext() {
4143                        if (!this.$data.hasActivatedItem) {
4144                            this.$data.activateFirst()
4145                        } else {
4146                            this.$data.activate(this.$data.activatedIndex + 1)
4147                        }
4148                    },
4149                    open() {
4150                        this.$data.valueOnOpen = this.$data.props.modelValue
4151                        this.$data.expanded = true
4152                    },
4153                    close() {
4154                        this.$data.touched = true
4155                        if (this.$refs.listbox?.matches(':focus')) {
4156                            this.$refs.listboxTrigger.focus({preventScroll: true})
4157                        }
4158                        this.$data.expanded = false
4159                        this.$data.$select.el.dispatchEvent(new CustomEvent('select:close', {bubbles: true}))
4160
4161                        if (
4162                            JSON.stringify(this.$data.valueOnOpen) !== JSON.stringify(this.$data.props.modelValue)
4163                        ) {
4164                            this.$data.$select.el.dispatchEvent(
4165                                new CustomEvent('select:change', {
4166                                    bubbles: true,
4167                                    detail: {
4168                                        value: this.$data.props.modelValue,
4169                                    },
4170                                }),
4171                            )
4172                        }
4173                    },
4174                    select(value) {
4175                        this.$data.$select.setValue(value)
4176                        this.$data.$select.el.dispatchEvent(
4177                            new CustomEvent('select:input', {
4178                                bubbles: true,
4179                                detail: {
4180                                    value,
4181                                },
4182                            }),
4183                        )
4184                    },
4185                    selectSingle(value) {
4186                        this.$data.select(this.$data.props.multiple ? [value] : value)
4187                    },
4188                    selectSingleAndClose(value) {
4189                        this.$data.select(value)
4190                        this.$data.close()
4191                    },
4192                    toggle(value) {
4193                        const currentValue = this.$data.props.modelValue
4194                        if (currentValue.includes(value)) {
4195                            this.$data.$select.setValue(currentValue.filter(selectedValue => selectedValue !== value))
4196                        } else {
4197                            this.$data.$select.setValue([...currentValue, value])
4198                        }
4199                    },
4200                    commitSingleValue(value) {
4201                        if (this.$data.props.multiple) {
4202                            this.$data.toggle(value)
4203                        } else {
4204                            this.$data.selectSingleAndClose(value)
4205                        }
4206                    },
4207                    onListboxKeydown(event) {
4208                        switch (event.key) {
4209                            case 'Escape':
4210                                event.preventDefault()
4211                                this.$data.pressKey(event.key)
4212                                this.$data.close()
4213                                break
4214
4215                            case 'ArrowDown':
4216                                event.preventDefault()
4217                                this.$data.pressKey(event.key)
4218                                this.$data.activateNext()
4219                                break
4220
4221                            case 'ArrowUp':
4222                                event.preventDefault()
4223                                this.$data.pressKey(event.key)
4224                                this.$data.activatePrevious()
4225                                break
4226
4227                            case 'Home':
4228                                event.preventDefault()
4229                                this.$data.pressKey(event.key)
4230                                this.$data.activateFirst()
4231                                break
4232
4233                            case 'End':
4234                                event.preventDefault()
4235                                this.$data.pressKey(event.key)
4236                                this.$data.activateLast()
4237                                break
4238
4239                            case 'Enter':
4240                            case ' ':
4241                                event.preventDefault()
4242                                this.$data.pressKey(event.key)
4243                                if (!this.$data.hasActivatedItem) {
4244                                    this.$data.close()
4245                                    break
4246                                }
4247                                if (this.$data.props.multiple) {
4248                                    this.$data.toggle(this.$data.activatedOption.value)
4249                                } else {
4250                                    this.$data.selectSingleAndClose(this.$data.activatedOption.value)
4251                                }
4252                                break
4253                        }
4254                    },
4255
4256                    // Initialize
4257                    init() {
4258                        this.$watch('$data?.$select?.props?.disabled', disabled => {
4259                            if (disabled) {
4260                                this.$data.close()
4261                            }
4262                        })
4263
4264                        this.$watch('listboxVisible', visible => {
4265                            if (!visible) {
4266                                this.$data.positioningStyles = {}
4267                                this.$data.positionClasses = []
4268                                this.$data.listboxOverlapsTrigger = false
4269                            }
4270                        })
4271
4272                        this.$watch('expanded', expanded => {
4273                            if (!expanded) {
4274                                this.$data.activatedIndex = undefined
4275                            } else {
4276                                this.$data.activateFirstSelected()
4277                                let index = this.$data.hasSelected ? this.$data.firstSelectedOptionIndex : 0
4278
4279                                Alpine.nextTick(() => {
4280                                    this.$data.calculatePosition()
4281
4282                                    setTimeout(() => {
4283                                        this.$refs.listbox.focus({preventScroll: true})
4284                                        this.$data.scrollListbox({index})
4285                                    }, 0)
4286                                })
4287                            }
4288                        })
4289
4290                        this.$watch('activatedIndex', (activatedIndex, oldActivatedIndex) => {
4291                            if (this.$data.hasActivatedItem && this.$data.keyPressed) {
4292                                this.$data.scrollListbox({
4293                                    direction: (activatedIndex ?? 0) > (oldActivatedIndex ?? 0) ? 'down' : 'up',
4294                                })
4295                            }
4296                        })
4297                    },
4298                }
4299            })
4300
4301            Alpine.directive('select', async (el, {expression}, {evaluate, cleanup, Alpine}) => {
4302                const html = /*html*/ `<div
4303          x-data="_selectImplementation()"
4304          class="x-select--select-wrapper"
4305          :class="{
4306            'is-expanded': expanded,
4307            'is-overlapping': listboxOverlapsTrigger,
4308            ...Object.fromEntries(positionClasses.map(c => [c, true])),
4309          }"
4310        ></div>`
4311
4312                el.insertAdjacentHTML('beforebegin', html)
4313                el.previousElementSibling.prepend(el)
4314
4315                el.classList.add('x-select--select-field')
4316                el.setAttribute(':class', '{ touched: $data.touched }')
4317                el.tabIndex = -1
4318                // el.setAttribute('inert', '')
4319                // el.setAttribute('aria-hidden', 'true')
4320                el.setAttribute('x-on:focus', '$refs.listboxTrigger.focus()')
4321
4322                if (expression) {
4323                    el.setAttribute('x-model', expression)
4324                    Alpine.nextTick(() => updateSelectedOptions())
4325                    // $data.$select is only assigned further down, after `await Alpine.nextTick()`,
4326                    // so this watcher can fire before it exists (e.g. when a parent component
4327                    // writes to the bound property from its own init()). Anything missed in that
4328                    // window is caught up by the updateSelectedOptions() call after the assignment.
4329                    evaluate(`$watch('${expression}', () => $data.$select?.updateSelectedOptions())`)
4330                }
4331
4332                const optionsMap = new WeakMap()
4333
4334                function readOptions() {
4335                    const options = [...el.options].filter(option => !option.disabled)
4336                    return options.map(option => {
4337                        let id
4338                        if (optionsMap.has(option)) {
4339                            id = optionsMap.get(option)
4340                        } else {
4341                            id = crypto.randomUUID()
4342                            optionsMap.set(option, id)
4343                        }
4344
4345                        return {
4346                            id,
4347                            value: option.value,
4348                            label: option.textContent,
4349                        }
4350                    })
4351                }
4352
4353                const state = Alpine.reactive({
4354                    id: el.id ?? crypto.randomUUID(),
4355                    placeholder: el.getAttribute('placeholder') ?? '',
4356                    required: el.required,
4357                    multiple: el.multiple,
4358                    disabled: el.disabled,
4359                    options: readOptions(),
4360
4361                    selectedOptions: [],
4362
4363                    get selectedOption() {
4364                        if (this.multiple) {
4365                            return this.selectedOptions
4366                        } else {
4367                            return this.selectedOptions[0]
4368                        }
4369                    },
4370                    get modelValue() {
4371                        if (this.multiple) {
4372                            return this.selectedOptions.map(option => option.value)
4373                        } else {
4374                            return this.selectedOptions[0]?.value
4375                        }
4376                    },
4377                })
4378
4379                function readSelectedOptions() {
4380                    return [...el.options].flatMap((option, index) =>
4381                        option.selected ? state.options[index] : [],
4382                    )
4383                }
4384
4385                state.selectedOptions = readSelectedOptions()
4386
4387                const updateMultiple = () => (state.multiple = el.multiple)
4388                const updateDisabled = () => (state.disabled = el.disabled)
4389                const updateId = () => (state.id = el.id ?? crypto.randomUUID())
4390                const updatePlaceholder = () => (state.placeholder = el.getAttribute('placeholder') ?? '')
4391                const updateRequired = () => (state.required = el.required)
4392
4393                const updateState = (option, getter) => {
4394                    const newData = getter()
4395                    if (JSON.stringify(newData) !== JSON.stringify(state[option])) {
4396                        state[option] = newData
4397                    }
4398                }
4399
4400                const updateOptions = () => updateState('options', readOptions)
4401                const updateSelectedOptions = () => updateState('selectedOptions', readSelectedOptions)
4402
4403                el.addEventListener('change', updateSelectedOptions)
4404
4405                const observer = new MutationObserver(entries => {
4406                    for (const entry of entries) {
4407                        if (entry.type === 'attributes') {
4408                            switch (entry.attributeName) {
4409                                case 'multiple':
4410                                    updateMultiple()
4411                                    updateSelectedOptions()
4412
4413                                    if (expression) {
4414                                        el.dispatchEvent(new Event('change', {bubbles: true}))
4415                                    }
4416                                    break
4417                                case 'disabled':
4418                                    updateDisabled()
4419                                    break
4420                                case 'id':
4421                                    updateId()
4422                                    break
4423                                case 'placeholder':
4424                                    updatePlaceholder()
4425                                    break
4426                                case 'required':
4427                                    updateRequired()
4428                                    break
4429                            }
4430                        } else if (entry.type === 'childList') {
4431                            updateOptions()
4432                            updateSelectedOptions()
4433                        }
4434                    }
4435                })
4436
4437                observer.observe(el, {
4438                    childList: true,
4439                    attributes: true,
4440                    subtree: true,
4441                    attributeFilter: ['multiple', 'disabled', 'id', 'placeholder', 'required'],
4442                })
4443
4444                // Expose API to $select
4445                await Alpine.nextTick()
4446                const $select = {
4447                    el,
4448                    wrapperElement: el.parentElement,
4449                    props: {
4450                        get selectedOption() {
4451                            return state.selectedOption
4452                        },
4453                        get modelValue() {
4454                            return state.modelValue
4455                        },
4456                        get options() {
4457                            return state.options
4458                        },
4459                        get id() {
4460                            return state.id
4461                        },
4462                        get disabled() {
4463                            return state.disabled
4464                        },
4465                        get multiple() {
4466                            return state.multiple
4467                        },
4468                        get placeholder() {
4469                            return state.placeholder
4470                        },
4471                        get required() {
4472                            return state.required
4473                        },
4474                    },
4475                    setValue(value) {
4476                        value = Array.isArray(value) ? value : [value]
4477
4478                        for (const option of el.options) {
4479                            option.selected = value.includes(option.value)
4480                        }
4481
4482                        el.dispatchEvent(new Event('change', {bubbles: true}))
4483                    },
4484                    updateSelectedOptions,
4485                    refresh() {
4486                        updateMultiple()
4487                        updateDisabled()
4488
4489                        updateOptions()
4490                        updateId()
4491                        updatePlaceholder()
4492
4493                        updateSelectedOptions()
4494                    },
4495                }
4496                evaluate('$data').$select = $select
4497                Alpine.evaluate(el.parentElement, '$data').$select = $select
4498
4499                // Re-sync in case the model changed while $select was still unavailable
4500                updateSelectedOptions()
4501
4502                // Can't inject this earlier because we need the $select API to be available
4503                el.insertAdjacentHTML(
4504                    'afterend',
4505                    /*html*/ `
4506        <button
4507          x-ref="listboxTrigger"
4508          type="button"
4509          class="x-select--select-trigger"
4510          :class="{ inert: expanded }"
4511          :disabled="props.disabled"
4512          :id="idTrigger"
4513          aria-haspopup="true"
4514          :aria-expanded="expanded"
4515          :aria-controls="idListbox"
4516          @click="open()"
4517          @keydown.up.prevent="$el.click()"
4518          @keydown.down.prevent="$el.click()"
4519        >
4520          <span class="x-select--select-trigger-label" x-text="getPlaceholder(props.selectedOption)"></span>
4521        </button>
4522        <template x-if="expanded">
4523          <ul
4524            x-ref="listbox"
4525            class="x-select--select-listbox"
4526            :id="idListbox"
4527            :style="positioningStyles"
4528            tabindex="0"
4529            role="listbox"
4530            aria-orientation="vertical"
4531            :aria-labelledby="idTrigger"
4532            :aria-activedescendant="activatedId"
4533            @keydown="onListboxKeydown"
4534            @mouseout="activatedIndex = undefined"
4535            @blur="close()"
4536          >
4537            <template x-for="({ id, value, label }, index) in props.options">
4538              <li
4539                :key="id"
4540                :id="id"
4541                class="x-select--select-listbox-item"
4542                :class="{
4543                  'is-active': activatedIndex === index,
4544                  'is-selected': valueArray.includes(value)
4545                }"
4546                role="option"
4547                :aria-selected="valueArray.includes(value)"
4548                :value="value"
4549                tabindex="-1"
4550                @mouseenter="activatedIndex = index"
4551                @mousedown.prevent="commitSingleValue(value)"
4552                x-text="label"
4553              ></li>
4554            </template>
4555          </ul>
4556        </template>
4557      `,
4558                )
4559
4560                // Stop observing select on cleanup
4561                cleanup(() => {
4562                    observer.disconnect()
4563                    el.removeEventListener('change', updateSelectedOptions)
4564
4565                    el.classList.remove('x-select--select-field')
4566                    // el.removeAttribute('inert')
4567                    el.removeAttribute('x-model')
4568                    el.removeAttribute('x-on:focus')
4569                    el.removeAttribute(':class')
4570                    el.removeAttribute('tabindex')
4571                    // el.removeAttribute('aria-hidden')
4572
4573                    if (document.contains(el)) {
4574                        const container = el.parentElement
4575                        container.after(el)
4576                        container.remove()
4577                    }
4578                })
4579            })
4580        }
4581
4582        document.addEventListener("alpine:init", () => {
4583            window.Alpine.plugin(selectPlugin);
4584        });
4585    })();
4586</script>
4586
4587
4588<script type="module"
4589        src="https://stata-brazil.com/static/version1790944496/frontend/TimberlakeHyva/timberlake/pt_BR/Hyva_Theme/js/alpine3.min.js"
4590        defer
4591        crossorigin
4592></script>
vendor: 1 bytes, line 4592
4592
4593<script>
4594    function dispatchMessages(messages, hideAfter) {
4595        const messagesEvent = new CustomEvent("messages-loaded", {
4596            detail: {
4597                messages: messages,
4598                hideAfter: hideAfter
4599            }
4600        });
4601        window.dispatchEvent(messagesEvent);
4602    }
4603
4604    if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
4605        console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
4606    }
4607
4608    (function( hyva, undefined ) {
4609
4610        hyva.initFormKey = () => {
4611            const inputSelector = 'input[name="form_key"]',
4612                formKey = hyva.getFormKey();
4613
4614            Array.from(document.querySelectorAll(inputSelector)).map(function (input) {
4615                input.value = formKey
4616            });
4617        }
4618
4619        hyva.initMessages = () => {
4620            try {
4621                const messages = hyva.getCookie('mage-messages');
4622                window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
4623
4624                dispatchMessages(window.mageMessages);
4625
4626                                // empty `mage-messages` cookie
4627                const skipSetDomain = true;
4628                hyva.setCookie('mage-messages','', -1, skipSetDomain);
4629
4630            } catch (error) {
4631                console.warn('Error parsing Cookie Messages:', error);
4632            }
4633        }
4634
4635        window.addEventListener('DOMContentLoaded', hyva.initFormKey);
4636        hyva.alpineInitialized(hyva.initMessages)
4637
4638    }( window.hyva = window.hyva || {} ));
4639</script>
vendor: 1 bytes, line 4639
4639
4640<script>
4641    {
4642        const private_content_key = 'mage-cache-storage';
4643        const private_content_expire_key = 'mage-cache-timeout';
4644        const private_content_version_key = 'private_content_version';
4645        const section_data_ids_key = 'section_data_ids';
4646        const mage_cache_session_id_key = 'mage-cache-sessid';
4647        const last_visited_store_key = 'last_visited_store';
4648
4649        const ttl = 3600;
4650
4651        if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
4652            console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
4653        }
4654
4655        function loadSectionData () {
4656            const browserStorage = hyva.getBrowserStorage();
4657            if (!browserStorage) {
4658                typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
4659                    [{
4660                        type: "warning",
4661                        text: "Por favor, habilite o LocalStorage no seu navegador."
4662                    }]
4663                );
4664                return;
4665            }
4666            try {
4667                let isInvalid = false;
4668
4669                if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) {
4670                    isInvalid = true;
4671                }
4672                hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false);
4673
4674                if (!hyva.getCookie(mage_cache_session_id_key)) {
4675                    isInvalid = true;
4676                    browserStorage.removeItem(private_content_key);
4677                    const skipSetDomain = true;
4678                    const days = false;
4679                    hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain)
4680                }
4681
4682                const cookieVersion = hyva.getCookie(private_content_version_key);
4683                const storageVersion = browserStorage.getItem(private_content_version_key);
4684
4685                if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) {
4686                    isInvalid = true;
4687                }
4688
4689                const privateContentExpires = browserStorage.getItem(private_content_expire_key);
4690                if (privateContentExpires && new Date(privateContentExpires) < new Date()) {
4691                    browserStorage.removeItem(private_content_key);
4692                }
4693
4694                if (isInvalid && cookieVersion) {
4695                    fetchPrivateContent([]);
4696                } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) {
4697                    const privateContent = JSON.parse(browserStorage.getItem(private_content_key));
4698                    if (
4699                        privateContent &&
4700                        privateContentExpires &&
4701                        privateContent.cart &&
4702                        privateContent.customer
4703                    ) {
4704                        dispatchPrivateContent(privateContent);
4705                    } else {
4706                        fetchPrivateContent([]);
4707                    }
4708                } else {
4709                    if (document.getElementById('default-section-data')) {
4710                        const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim());
4711                        dispatchPrivateContent(privateContent);
4712                    } else {
4713                        dispatchPrivateContent({});
4714                    }
4715                }
4716
4717            } catch (error) {
4718                console.warn('Error retrieving Private Content:', error);
4719            }
4720        }
4721
4722        hyva.alpineInitialized(loadSectionData)
4723        window.addEventListener('reload-customer-section-data', loadSectionData);
4724
4725        window.processSectionDataBeforeDispatch = window.processSectionDataBeforeDispatch || (data => data);
4726
4727        function dispatchPrivateContent(data) {
4728
4729            const privateContentEvent = new CustomEvent("private-content-loaded", {
4730                detail: {
4731                    data: window.processSectionDataBeforeDispatch(data)
4732                }
4733            });
4734            window.dispatchEvent(privateContentEvent);
4735        }
4736
4737        function fetchPrivateContent(sections) {
4738            fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, {
4739                method: 'GET',
4740                headers: {
4741                    'Content-Type': 'application/json',
4742                    'X-Requested-With': 'XMLHttpRequest'
4743                }
4744            })
4745                .then(response => response.ok && response.json())
4746                .then(
4747                    data => {
4748                        if (data) {
4749                            try {
4750                                const browserStorage = hyva.getBrowserStorage();
4751
4752                                // merge new data preserving non-invalidated sections
4753                                const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {};
4754
4755                                if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) {
4756                                    delete oldSectionData['checkout-data'];
4757                                }
4758                                const newSectionData = Object.assign(oldSectionData, data);
4759
4760                                dispatchPrivateContent(newSectionData);
4761
4762                                // don't persist messages, they've been dispatched already
4763                                if (newSectionData.messages && newSectionData.messages.messages ) {
4764                                    newSectionData.messages.messages = [];
4765                                }
4766
4767                                browserStorage.setItem(private_content_key, JSON.stringify(newSectionData));
4768
4769                                const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString();
4770                                browserStorage.setItem(private_content_expire_key, expiresAt);
4771
4772                                const newCookieVersion = hyva.getCookie(private_content_version_key);
4773                                browserStorage.setItem(private_content_version_key, newCookieVersion);
4774
4775                                // We don't need the section_data_ids in Hyvä, but we store them for compatibility
4776                                // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout
4777                                hyva.setCookie(
4778                                    section_data_ids_key,
4779                                    JSON.stringify(
4780                                        Object.keys(data).reduce((sectionDataIds, sectionKey) => {
4781                                            sectionDataIds[sectionKey] = data[sectionKey]['data_id'];
4782                                            return sectionDataIds;
4783                                        }, {})
4784                                    ),
4785                                    false,
4786                                    true
4787                                );
4788                            } catch (error) {
4789                                console.warn("Couldn't store privateContent", error);
4790                            }
4791                        }
4792                    }
4793                );
4794        }
4795    }
4796</script>
vendor: 1 bytes, line 4796
4796
4797<script>
4798    (() => {
4799        document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc()));
4800    })()
4801</script>
vendor: 1 bytes, line 4801
4801
4802<script>
4803    (events => {
4804        const dispatchUserInteractionEvent = () => {
4805            events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent))
4806            window.dispatchEvent(new Event('init-external-scripts'))
4807        };
4808        events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true}))
4809    })(['touchstart', 'mousemove', 'wheel', 'scroll', 'keydown'])
4810</script>
vendor: 1 bytes, line 4810
4810
4811<script>
4812    function initConfigurableOptions(productId, optionConfig) {
4813        function findPathParam(key) {
4814                        const baseUrl = (BASE_URL.substring(0, 2) === '//' ? 'http:' : '') + BASE_URL;
4815            const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/');
4816            const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3);
4817            for (let i = 0; i < pathParts.length; i += 2) {
4818                if (pathParts[i] === key && pathParts.length > i) {
4819                    return pathParts[i + 1];
4820                }
4821            }
4822        }
4823
4824        return {
4825            optionConfig,
4826            productId,
4827            itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'),
4828            allowedAttributeOptions: [],
4829            selectedValues: [],
4830            init() {
4831                this.findAllowedAttributeOptions();
4832                this.$nextTick(() => {
4833                    if (typeof this.optionConfig.defaultValues === 'object') {
4834                        for (const [attributeId, value] of Object.entries(this.optionConfig.defaultValues)) {
4835                            this.changeOption(attributeId, value + '');
4836                        }
4837                    }
4838                });
4839            },
4840            getPriceForOption(option) {
4841                const productIds = this.getProductIdsForOption(option);
4842                return this.optionConfig.optionPrices[productIds[0]].finalPrice.amount.toString();
4843            },
4844            findSimpleIndex() {
4845                                this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues);
4846            },
4847            calculateSimpleIndexForPartialSelection(selectedValues) {
4848                if (selectedValues.length === 0) return 0;
4849                let productIndexIds = Object.keys(this.optionConfig.index);
4850                Object.keys(this.optionConfig.attributes).forEach((attribute) => {
4851                                        const productsWithAttributeMatch = selectedValues[attribute]
4852                        ? productIndexIds.filter((productIndex) => {
4853                            return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute]
4854                        })
4855                        : [];
4856
4857                                        productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds
4858                })
4859                return productIndexIds[0];
4860            },
4861            calculateSimpleIndexForFullSelection(selectedValues) {
4862                const productIndexes = this.optionConfig.index;
4863                return Object.keys(productIndexes).find(productIndex => {
4864                    const productCandidateOptions = productIndexes[productIndex];
4865
4866                    for (const productOption in productCandidateOptions) {
4867                        if (
4868                            ! selectedValues[productOption] ||
4869                            selectedValues[productOption] !== productCandidateOptions[productOption]
4870                        ) {
4871                            return false;
4872                        }
4873                    }
4874                    return productIndex;
4875                });
4876            },
4877            productIndex: 0,
4878            findAllowedAttributeOptions() {
4879                                this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues);
4880            },
4881            calculateAllowedAttributeOptions(selectedValues) {
4882                const allAttributes = this.optionConfig.attributes;
4883                const allAttributesSorted = Object.values(allAttributes).sort((a,b) => {
4884                    return a.position - b.position
4885                });
4886
4887                const newAllowedAttributeOptions = [];
4888
4889                allAttributesSorted.forEach(attribute => {
4890                    const selectionWithoutAttr = Object.assign({}, this.removeAttrFromSelection(selectedValues, attribute.id));
4891                    const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr);
4892                    newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => {
4893                        return !!option.products.find(product => {
4894                            return availableIndexes.includes(product);
4895                        })
4896                    });
4897                });
4898                return newAllowedAttributeOptions;
4899            },
4900            calculateAvailableProductIndexes(selectedOptions) {
4901                if (Object.keys(selectedOptions).length === 0) {
4902                                        if (Object.values(this.optionConfig.salable || {}).length) {
4903                                                return [].concat.apply([], [].concat.apply([], Object.values(this.optionConfig.salable).map(Object.values))).filter((x, i, a) => a.indexOf(x) === i)
4904                    }
4905                                        return Object.keys(this.optionConfig.index);
4906                }
4907
4908                                const selectedIds = Object.keys(selectedOptions);
4909                if (Object.values(this.optionConfig.salable || {}).length) {
4910                                        const selectedOptionIndexes = selectedIds.map(attrId => {
4911                        const optionValue = selectedOptions[attrId];
4912                        return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || []
4913                    })
4914                                        return selectedOptionIndexes.reduce((acc, optionIndexes) => {
4915                        return acc.filter(index => optionIndexes.includes(index));
4916                    });
4917                } else {
4918                                        const productIndexes = this.optionConfig.index;
4919                    return Object.keys(productIndexes).filter(index => {
4920                                                for (const attrId of selectedIds) {
4921                            if (productIndexes[index][attrId] !== `${selectedOptions[attrId]}`) return false
4922                        }
4923                        return true
4924                    });
4925                }
4926            },
4927            findAttributeByOptionId(optionId) {
4928                for (const attributeId in this.optionConfig.attributes) {
4929                    const attributeOptions = this.optionConfig.attributes[attributeId].options || [];
4930                    if (attributeOptions.find(option => option.id === optionId)) {
4931                        return attributeId;
4932                    }
4933                }
4934            },
4935            getAllowedAttributeOptions(attributeId) {
4936                return this.allowedAttributeOptions[attributeId] || []
4937            },
4938            getProductIdsForOption(option) {
4939                const attributeId = this.findAttributeByOptionId(option.id);
4940                const allOptions = this.optionConfig.attributes[attributeId];
4941                const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id);
4942                return opt && opt.products
4943                    ? opt.products
4944                    : [];
4945            },
4946            findProductIdsForPartialSelection(optionSelection) {
4947                const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => {
4948                    const newCandidates = this.getProductIdsForOption({id: optionId});
4949                    return candidates === null
4950                        ? newCandidates
4951                        : candidates.filter(productId => newCandidates.includes(productId));
4952                }, null);
4953                return candidateProducts || [];
4954            },
4955            findCheapestProductForPartialSelection(optionSelection) {
4956                const candidateProducts = this.findProductIdsForPartialSelection(optionSelection);
4957                return candidateProducts.reduce((cheapest, simpleIdx) => {
4958                    // in the first iteration we start with simpleIdx as the currently cheapest product
4959                    if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx;
4960                    const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount;
4961                    return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount
4962                        ? simpleIdx
4963                        : cheapest;
4964                }, 0)
4965            },
4966            findProductIdToUseForOptionPrice(option) {
4967                // try to find a product for a complete selection
4968                const attributeId = this.findAttributeByOptionId(option.id);
4969                const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id});
4970                const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection);
4971                // if there is no complete selection, use the cheapest product for the option
4972                return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection);
4973            },
4974            getAttributeOptionLabel(option) {
4975                const optionProduct = this.findProductIdToUseForOptionPrice(option);
4976                if ((! optionProduct) || (optionProduct === this.productIndex)) {
4977                    return option.label;
4978                }
4979
4980                // const currentPrice = this.getOptionPriceAdjustmentBasePrice();
4981                //
4982                // if (this.optionConfig.optionPrices[optionProduct]) {
4983                //     const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount;
4984                //     if (optionPrice !== currentPrice){
4985                //         return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true);
4986                //     }
4987                // }
4988                return option.label;
4989            },
4990            getOptionPriceAdjustmentBasePrice() {
4991                if (this.optionConfig.optionPrices[this.productIndex]) {
4992                    return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount
4993                }
4994                const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues);
4995                return this.optionConfig.optionPrices[cheapestForSelection]
4996                    ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount
4997                    : this.optionConfig.prices.finalPrice.amount; // default price if no option selection
4998            },
4999            clearOptionIfActive(optionId, value) {
5000                if (this.selectedValues[optionId] === value) {
5001                    this.blurLabel()
5002                    this.changeOption(optionId, '')
5003                }
5004            },
5005            removeAttrFromSelection(selectedValues, attributeId) {
5006                                attributeId = parseInt(attributeId);
5007                return selectedValues.reduce((newSelection, val, attr) => {
5008                    if (attr !== attributeId) {
5009                        newSelection[attr] = val;
5010                    }
5011                    return newSelection;
5012                }, []);
5013            },
5014            changeOption(attributeId, value) {
5015                let maxCustomOptions;
5016                if (value === '') {
5017                    this.selectedValues = this.removeAttrFromSelection(this.selectedValues, attributeId)
5018                } else if (value && this.getAllowedAttributeOptions(attributeId).find(option => option.id === value)) {
5019                                        this.selectedValues[attributeId] = value;
5020                }
5021
5022                if ([251,258].includes(parseInt(attributeId))) {
5023                    maxCustomOptions = this.calculateMaxCustomOptions(attributeId, value);
5024                }
5025
5026                this.findSimpleIndex();
5027                this.findAllowedAttributeOptions();
5028                this.updatePrices();
5029                this.updateGallery();
5030
5031                let $formEl = document.getElementById('product_addtocart_form'),
5032                    $formOptions = $formEl.querySelectorAll('select'),
5033                    $formValid = Array.from($formOptions).every(select => !!parseInt(select.value));
5034
5035
5036                window.dispatchEvent(
5037                    new CustomEvent(
5038                        'configurable-selection-changed',
5039                        {
5040                            detail: {
5041                                productId: this.productId,
5042                                optionId: attributeId,
5043                                value: value,
5044                                productIndex: this.productIndex,
5045                                selectedValues: this.selectedValues,
5046                                candidates: this.findProductIdsForPartialSelection(this.selectedValues),
5047                                valid: $formValid,
5048                                ... maxCustomOptions && {maxCustomOptions: maxCustomOptions}
5049                            }
5050                        }
5051                    )
5052                );
5053            },
5054            calculateMaxCustomOptions(attributeId ,value) {
5055                if (value === '') {
5056                    return 0;
5057                } else {
5058                    return parseInt(
5059                        this.optionConfig.attributes[attributeId].options
5060                            .filter(item => item.id === value)[0].adminLabel
5061                    )
5062                }
5063
5064            },
5065            calculateIsMinimalPrice() {
5066                return (
5067                    this.selectedValues.filter(value => !!value).length <
5068                        Object.keys(this.optionConfig.attributes).length
5069                );
5070            },
5071            updatePrices() {
5072                const value = this.productIndex ?
5073                    this.optionConfig.optionPrices[this.productIndex] :
5074                    this.optionConfig.prices;
5075                window.dispatchEvent(
5076                    new CustomEvent(
5077                        "update-prices-" + this.productId,
5078                        {
5079                            detail: Object.assign(
5080                                value,
5081                                { isMinimalPrice: this.calculateIsMinimalPrice() }
5082                            )
5083                        }
5084                    )
5085                );
5086            },
5087            updateGallery () {
5088                if (this.productIndex) {
5089                    const images = this.optionConfig.images[this.productIndex];
5090                    images && window.dispatchEvent(new CustomEvent(
5091                        "update-gallery",
5092                        { detail: this.sortImagesByPosition(images) }
5093                    ));
5094                } else {
5095                    window.dispatchEvent(new Event("reset-gallery"));
5096                }
5097            },
5098            sortImagesByPosition(images) {
5099                return images.sort((x, y) => {
5100                    return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1)
5101                });
5102            },
5103            onGetCartData(data) {
5104                            },
5105            preselectCartItems(data) {
5106                // pre-select options based on cart data for current (quote) itemId
5107                const cart = data && data.cart;
5108                if (cart && cart.items) {
5109                    const cartItem = cart.items.find((item) => {
5110                        return (
5111                            item.item_id === this.itemId
5112                            && item.product_id === this.productId
5113                        )
5114                    });
5115                    if (cartItem && cartItem.options && cartItem.options.length) {
5116                        cartItem.options.map(option => {
5117                            this.changeOption(option.option_id, option.option_value);
5118                        })
5119                    }
5120                }
5121            },
5122            preselectQuerystringItems() {
5123                // pre-select option like ?size=167
5124                const urlQueryParams = new URLSearchParams(window.location.search.replace('?',''));
5125                this.preselectItemsBasedOnLocation(attribute => urlQueryParams.get(attribute.code));
5126            },
5127            preselectLocationHashItems() {
5128                // pre-select option like #144=167
5129                const urlHashParams = new URLSearchParams(window.location.hash.replace('#',''));
5130                this.preselectItemsBasedOnLocation(attribute => urlHashParams.get(attribute.id));
5131            },
5132            preselectItemsBasedOnLocation(getLocationValue) {
5133                Object.values(this.optionConfig.attributes).map(attribute => {
5134                    this.changeOption(attribute.id, getLocationValue(attribute))
5135                });
5136            }
5137        }
5138    }
5139
5140</script>
vendor: 1 bytes, line 5140
5140
5141<script>
5142    function initSwatchOptions(swatchConfig) {
5143        return {
5144            swatchConfig,
5145            getAttributeSwatchData(attributeId) {
5146                const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]);
5147                swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']);
5148
5149                return swatchConfig;
5150            },
5151            mapSwatchTypeNumberToTypeCode(typeNumber) {
5152                switch ("" + typeNumber) {
5153                    case "1":
5154                        return "color"
5155                    case "2":
5156                        return "image"
5157                    case "3":
5158                        return "empty"
5159                    case "0":
5160                    default:
5161                        return "text"
5162                }
5163            },
5164            getTypeOfFirstOption(attributeId) {
5165                for (const optionId in this.swatchConfig[attributeId]) {
5166                    const option = this.swatchConfig[attributeId][optionId];
5167                    if (typeof option.type !== 'undefined') {
5168                        return this.mapSwatchTypeNumberToTypeCode(option.type);
5169                    }
5170                }
5171            },
5172            getVisualSwatchType(attributeId, targetOptionId) {
5173                // If a type configuration is present for the given option id, use it
5174                const config = this.swatchConfig[attributeId];
5175                if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') {
5176                    return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type);
5177                }
5178
5179                // Otherwise - if no config is present for the target option - use the type of the first option
5180                // with a type property from the attribute, thus assuming its the same type as the target option.
5181                // (This edge case condition can occur on single swatch products if some options are not salable)
5182                return this.getTypeOfFirstOption(attributeId);
5183            },
5184            getSwatchType(attributeId, optionId) {
5185                // Deserialize the attribute details the first time they are used
5186                if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) {
5187                    this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId);
5188                }
5189                const type =  this.swatchConfig[attributeId] &&
5190                    this.swatchConfig[attributeId].details &&
5191                    this.swatchConfig[attributeId].details.swatch_input_type ||
5192                    "empty";
5193                return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type;
5194            },
5195            isTextSwatch(attributeId, optionId) {
5196                return this.getSwatchType(attributeId, optionId) === 'text';
5197            },
5198            isVisualSwatch(attributeId, optionId) {
5199                const type = this.getSwatchType(attributeId, optionId);
5200
5201                return ['image', 'color'].includes(type);
5202            },
5203            getSwatchBackgroundStyle(attributeId, optionId) {
5204                const config = this.getSwatchConfig(attributeId, optionId);
5205                const type = this.getSwatchType(attributeId, optionId);
5206
5207                if (type === "color") {
5208                        return 'background-color:' + config.value;
5209                } else if (type === "image") {
5210                        return "background: #fff url('" + config.value + "') no-repeat center";
5211                } else {
5212                    return '';
5213                }
5214            },
5215            getSwatchText(attributeId, optionId) {
5216                const config = this.getSwatchConfig(attributeId, optionId);
5217                return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId);
5218            },
5219            getOptionLabelFromOptionConfig(attributeId, optionId) {
5220                // Fallback if no value is present in swatchConfig data
5221                // Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190
5222                const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId);
5223                return option && option[0] && option[0].label ||'';
5224            },
5225            getSwatchConfig(attributeId, optionId) {
5226                return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId]
5227                    ? this.swatchConfig[attributeId][optionId]
5228                    : false;
5229            },
5230            activeTooltipItem: false,
5231            tooltipPositionElement: false,
5232            isTooltipVisible() {
5233                return this.activeTooltipItem &&
5234                    this.getSwatchConfig(
5235                        this.activeTooltipItem.attribute,
5236                        this.activeTooltipItem.item
5237                    );
5238            },
5239            isFirstItemCol() {
5240                return this.activeTooltipItem.index === 0;
5241            },
5242            getTooltipImageStyle(attributeId, optionId) {
5243                const config = this.getSwatchConfig(attributeId, optionId);
5244                const type = this.getSwatchType(attributeId, optionId);
5245
5246                if (type === "color") {
5247                    return 'background-color:' + config.value + '; width: 110px; height: 90px;';
5248                } else if (type === "image") {
5249                    return "background: #ffffff url('" + config.thumb +
5250                        "') center center no-repeat; width: 110px; height: 90px;";
5251                } else {
5252                    return 'display:none';
5253                }
5254            },
5255            getTooltipPosition() {
5256                return this.tooltipPositionElement ?
5257                    `top: ${this.tooltipPositionElement.offsetTop}px;` +
5258                    `left: ${
5259                        this.tooltipPositionElement.offsetLeft - (
5260                            this.tooltipPositionElement.closest('.snap') &&
5261                            this.tooltipPositionElement.closest('.snap').scrollLeft ||
5262                            0
5263                        )
5264                    }px;` : ''
5265            },
5266            getTooltipLabel() {
5267                return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label
5268            },
5269            focusedLabel: false,
5270            focusLabel(optionId) {
5271                this.focusedLabel = optionId;
5272            },
5273            blurLabel() {
5274                this.focusedLabel = false;
5275            },
5276            showSwatches: false,
5277            initShowSwatchesIntersect() {
5278                if ('IntersectionObserver' in window && !window.scrollY) {
5279                    let io = new IntersectionObserver(
5280                        entries => {
5281                            entries.map(entry => {
5282                                if (entry.isIntersecting) {
5283                                    this.showSwatches = true;
5284                                    io.unobserve(this.$root);
5285                                }
5286                            })
5287                        }
5288                    );
5289                    io.observe(this.$root);
5290                } else {
5291                    this.showSwatches = true
5292                }
5293            }
5294        }
5295    }
5296</script>
vendor: 1 bytes, line 5296
5296
5297<script>
5298    'use strict';
5299
5300    const grecaptchaV2LoadCallbacks = [];
5301
5302    function executeRecaptchaLoadCallbacks () {
5303        while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) {
5304            const callback = grecaptchaV2LoadCallbacks.pop();
5305            typeof callback === 'string' ? window[callback]() : callback();
5306        }
5307    }
5308
5309    (function() {
5310        const loadRecaptchaScript = (event) => {
5311
5312            if (window.grecaptcha || !event.target.form) {
5313                return;
5314            }
5315
5316            const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks';
5317            const siteKey = '6LfZyRsrAAAAAA274PpbvhhN2tBp_pIfniW8yAPZ';
5318            const script = document.createElement('script');
5319            script.type = 'text/javascript';
5320            script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`;
5321            script.async = true;
5322            document.head.appendChild(script);
5323
5324            script.addEventListener('load', () => {
5325                Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled'));
5326            });
5327        }
5328
5329        window.forceLoadRecaptchaScript = (form) => {
5330            loadRecaptchaScript({target: {form: form || 'dummy'}});
5331            executeRecaptchaLoadCallbacks();
5332        };
5333
5334        document.body.addEventListener('input', loadRecaptchaScript, { once: true });
5335        document.body.addEventListener('focus', loadRecaptchaScript, { once: true });
5336
5337    }());
5338
5339</script>
vendor: 1 bytes, line 5339
5339
5340<script>
5341    'use strict';
5342
5343    (function () {
5344        const preloadRecaptcha = () => {
5345            // script_loader.phtml did not render (no keys configured), or api.js is already up.
5346            if (typeof window.forceLoadRecaptchaScript !== 'function' || window.grecaptcha) {
5347                return;
5348            }
5349
5350            const element = document.querySelector(
5351                'input[name="g-recaptcha-response"], .g-recaptcha, [data-recaptcha-btn]'
5352            );
5353
5354            if (!element) {
5355                return;
5356            }
5357
5358            // forceLoadRecaptchaScript needs a truthy form to get past its own guard; a bare
5359            // .g-recaptcha container has no .form, and undefined makes it substitute a placeholder.
5360            window.forceLoadRecaptchaScript(element.form || undefined);
5361        };
5362
5363        if (document.readyState === 'loading') {
5364            document.addEventListener('DOMContentLoaded', preloadRecaptcha);
5365        } else {
5366            preloadRecaptcha();
5367        }
5368    }());
5369</script>
5369
5370<div class="pubble-app" data-app-id="85585" data-app-identifier="85585"></div>
5371<script
5372    type="text/javascript" src="https://cdn.pubble.io/javascript/loader.js" defer
5373></script>
5373
5374
5375<script>
5376    'use strict';
5377    (() => {
5378        function _calculateStrength({elementID, valid}) {
5379            const password = document.getElementById(elementID),
5380                emailElm = document.getElementById('email_address');
5381            let displayScore;
5382            // Display score is based on combination of whether password is empty, valid, and zxcvbn strength
5383            if (!password || !password.value) {
5384                displayScore = 0;
5385            } else {
5386                // We should only perform this check in case there is an email field on screen
5387                if (emailElm && password.value && emailElm.value &&
5388                    password.value.toLowerCase() === emailElm.value.toLowerCase()) {
5389                    displayScore = 1;
5390                } else {
5391                    const zxcvbnScore = zxcvbn(password.value).score;
5392                    displayScore = valid && zxcvbnScore > 0 ? zxcvbnScore : 1;
5393                }
5394            }
5395
5396            _displayStrength(displayScore);
5397        }
5398
5399        function _displayStrength(displayScore) {
5400            let strengthLabel = '',
5401                className;
5402
5403            switch (displayScore) {
5404                case 0:
5405                    strengthLabel = "No\u0020Password";
5406                    className = 'password-none';
5407                    break;
5408
5409                case 1:
5410                    strengthLabel = "Weak";
5411                    className = 'password-weak';
5412                    break;
5413
5414                case 2:
5415                    strengthLabel = "Medium";
5416                    className = 'password-medium';
5417                    break;
5418
5419                case 3:
5420                    strengthLabel = "Strong";
5421                    className = 'password-strong';
5422                    break;
5423
5424                case 4:
5425                    strengthLabel = "Very\u0020Strong";
5426                    className = 'password-very-strong';
5427                    break;
5428            }
5429            const meterElm = document.getElementById('password-strength-meter-container'),
5430                meterLabelElm = document.getElementById('password-strength-meter-label');
5431            meterElm.className = '';
5432            meterElm.classList.add(className);
5433            meterLabelElm.textContent = strengthLabel;
5434        }
5435
5436        let loading = false;
5437        const callbacks = [];
5438
5439        function loadZxcvbn(cb) {
5440            callbacks.push(cb);
5441            if (loading) return;
5442            loading = true;
5443
5444            const script = document.createElement('script');
5445            script.type = 'text/javascript';
5446            script.src = 'https\u003A\u002F\u002Fstata\u002Dbrazil.com\u002Fstatic\u002Fversion1790944496\u002Ffrontend\u002FTimberlakeHyva\u002Ftimberlake\u002Fpt_BR\u002Fjs\u002Fzxcvbn.js';
5447            script.async = true;
5448            script.onload = () => callbacks.forEach(cb => cb());
5449            document.head.appendChild(script);
5450        }
5451
5452        window.addEventListener('password-validate', function (evt) {
5453            const meterElm = document.getElementById('password-strength-meter-container'),
5454                meterLabelElm = document.getElementById('password-strength-meter-label');
5455            if (meterElm && meterLabelElm) {
5456                if (evt.detail && evt.detail.elementID) {
5457                    const cb = () => _calculateStrength(evt.detail);
5458                    window.zxcvbn ? cb() : loadZxcvbn(cb)
5459                }
5460            }
5461        });
5462
5463
5464        document.addEventListener('DOMContentLoaded', () => {
5465            hyva && hyva.formValidation && hyva.formValidation.addRule('password-strength', function(value, options, field, context) {
5466                let counter = 0;
5467                const minCharacterSets = options.minCharacterSets !== undefined ?  options.minCharacterSets : 1;
5468                if (value.match(/\d+/)) {
5469                    counter++;
5470                }
5471
5472                if (value.match(/[a-z]+/)) {
5473                    counter++;
5474                }
5475
5476                if (value.match(/[A-Z]+/)) {
5477                    counter++;
5478                }
5479
5480                if (value.match(/[^a-zA-Z0-9]+/)) {
5481                    counter++;
5482                }
5483
5484                queueMicrotask(() => {
5485                    window.dispatchEvent(new CustomEvent('password-validate', { detail: {
5486                            elementID: field.element.id || 'password',
5487                            valid: field.state.valid
5488                        }}));
5489                });
5490
5491                if (counter < minCharacterSets) {
5492                    const missing = minCharacterSets - counter;
5493                    return hyva.str('A\u0020senha\u0020deve\u0020incluir\u0020pelo\u0020menos\u0020\u00251\u0020ou\u0020mais\u0020de\u003A\u0020letras\u0020mai\u00FAsculas\u0020\u0028A\u002DZ\u0029,\u0020letras\u0020min\u00FAsculas\u0020\u0028a\u002Dz\u0029,\u0020n\u00FAmeros\u0020e\u0020s\u00EDmbolos.', missing);
5494                }
5495                return true;
5496            });
5497        })
5498    })();
5499
5500</script>
vendor: 1 bytes, line 5500
5500
5501<script>
5502    (function () {
5503        const modals = [];
5504        const excludedFromFocusTrapping = new Set();
5505
5506        function trapFocusInNextModalWithOverlay() {
5507            for (let idx = modals.length -1; idx >= 0; idx--) {
5508                const nextOnStack = modals[idx];
5509                const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name];
5510                if (! isOverlayDisabled(nextDialogElement)) {
5511                    hyva.trapFocus(nextDialogElement);
5512                    break;
5513                }
5514            }
5515        }
5516
5517        function focusables(dialogElement) {
5518            const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])';
5519            return Array.from(dialogElement.querySelectorAll(selector))
5520                .filter(el => !el.hasAttribute('disabled'));
5521        }
5522
5523        function firstVisible(elements) {
5524            const a = Array.from(elements);
5525            for (let i = 0; i < a.length; i++) {
5526                if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i];
5527            }
5528            return null;
5529        }
5530
5531        function isInViewport(element) {
5532            const rect = element && element.getBoundingClientRect();
5533            return rect &&
5534                rect.top >= 0 &&
5535                rect.left >= 0 &&
5536                rect.right <= window.innerWidth &&
5537                rect.bottom <= window.innerHeight;
5538        }
5539
5540        function setFocusAfterTransition(dialogElement, duration) {
5541                        const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]'));
5542            const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]'));
5543            next: for (let candidate of candidates) {
5544                for (let child of nested) {
5545                    if (child.contains(candidate)) continue next;
5546                }
5547                setTimeout(() => candidate.focus(), 50);
5548                break;
5549            }
5550            window.setTimeout(() => {
5551                const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) ||
5552                    focusables(dialogElement)[0] ||
5553                    null;
5554                focusElement && isInViewport(focusElement) && focusElement.focus();
5555            }, Math.max(1, duration));
5556        }
5557
5558        function determineTrigger($refs, dialog, trigger) {
5559                        if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) {
5560                return dialog.target;
5561            }
5562                        if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) {
5563                return trigger.target;
5564            }
5565                        if (typeof trigger === 'string') {
5566                try {
5567                    return $refs[trigger] || document.querySelector(trigger)
5568                } catch (e) {}
5569            }
5570                        if (trigger instanceof Element) {
5571                return trigger;
5572            }
5573
5574                        return null;
5575        }
5576
5577        function isOverlayDisabled(dialog) {
5578            return dialog && dialog.hasAttribute('x-no-overlay')
5579        }
5580
5581        function areRemainingModalsWithoutOverlay(modals)
5582        {
5583            const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled);
5584
5585            return overflowDisabled.length === modals.length;
5586        }
5587
5588        window.hyva.modal = function(options = {}) {
5589                        if (this.$el && this.$el.dataset && this.$el.dataset.options) {
5590                try {
5591                    options = Object.assign(options, JSON.parse(this.$el.dataset.options || '{}'));
5592                } catch (e) {
5593                    throw new Error('Cannot read the dialog options from the data-options attribute: not valid JSON');
5594                }
5595            }
5596
5597            const config = Object.assign({
5598                dialog: 'dialog',                 duration: 300,                 transitionEnter: 'transition ease-out duration-300',
5599                transitionEnterStart: 'opacity-0',
5600                transitionEnterEnd: 'opacity-100',
5601                transitionLeave: 'transition ease-in duration-300',
5602                transitionLeaveStart: 'opacity-100',
5603                transitionLeaveEnd: 'opacity-0',
5604            }, options);
5605            let lastHide = 0;
5606
5607            return {
5608                opened: {},
5609                show(dialog, trigger) {
5610                    const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger);
5611                    const name = typeof dialog === 'string' ? dialog : config.dialog;
5612                    const dialogElement = this.$refs[name];
5613                    if (! dialogElement) {
5614                                                return;
5615                    }
5616                    const useOverlay = ! dialogElement.hasAttribute('x-no-overlay');
5617
5618                    dialogElement.scrollTop = 0;
5619
5620                                        if (this.opened[name]) {
5621                        return;
5622                    }
5623
5624                    if (focusTargetAfterHide) {
5625                        focusTargetAfterHide.setAttribute('aria-expanded', 'true');
5626                    }
5627
5628                    this.opened[name] = true;
5629                    useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement));
5630                    setFocusAfterTransition(dialogElement, config.duration);
5631
5632                    const frame = {name, instance: this, focusTarget: focu
5632sTargetAfterHide, time: Date.now()};
5633
5634                    modals.push(frame);
5635                    if (useOverlay) {
5636                        document.body.classList.add('overflow-hidden');
5637                    }
5638                    return new Promise(resolve => frame.resolve = resolve);
5639                },
5640                cancel() {
5641                    this.hide(false);
5642                },
5643                ok() {
5644                    this.hide(true);
5645                },
5646                hide(value) {
5647                                        if (Date.now() - lastHide < config.duration) {
5648                        return;
5649                    }
5650                    lastHide = Date.now();
5651
5652                    const modal = modals.pop() || {};
5653                    if (! modal.instance) {
5654                        return;
5655                    }
5656
5657                    const name = modal.name;
5658                    this.opened[name] = false;
5659                    hyva.releaseFocus(modal.instance.$refs[modal.name])
5660                    trapFocusInNextModalWithOverlay();
5661
5662                    const nextFocusAfterHide = modal.focusTarget;
5663                    nextFocusAfterHide && setTimeout(() => {
5664                        nextFocusAfterHide.setAttribute('aria-expanded', 'false');
5665                        nextFocusAfterHide.focus()
5666                    }, config.duration);
5667
5668                    if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) {
5669                        document.body.classList.remove('overflow-hidden');
5670                    }
5671
5672                    modal.resolve(value);
5673                },
5674                overlay(dialog) {
5675                    dialog = this.$el.dataset.dialogRefName || dialog;
5676                    const name = typeof dialog === 'string' ? dialog : config.dialog;
5677                    return {
5678                        ['x-show']() {
5679                            return this.opened[name]
5680                        },
5681                        ['x-transition:enter']: config.transitionEnter,
5682                        ['x-transition:enter-start']: config.transitionEnterStart,
5683                        ['x-transition:enter-end']: config.transitionEnterEnd,
5684                        ['x-transition:leave']: config.transitionLeave,
5685                        ['x-transition:leave-start']: config.transitionLeaveStart,
5686                        ['x-transition:leave-end']: config.transitionLeaveEnd,
5687                        ['@hyva-modal-show.window'](event) {
5688                            event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide)
5689                        }
5690                    };
5691                },
5692                showDialogOnInit() {
5693                    const parent = this.$el.closest('[data-dialog-ref-name]');
5694                    if (parent && parent.dataset.dialogRefName) {
5695                        this.$dispatch('hyva-modal-show', {dialog: parent.dataset.dialogRefName})
5696                    }
5697                }
5698            };
5699        }
5700
5701        window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1]
5702
5703        window.hyva.modal.pop = function () {
5704            if (modals.length > 0) {
5705                const modal = modals[modals.length -1];
5706                modal.instance.hide();
5707            }
5708        }
5709
5710        window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) {
5711            typeof selectors === 'string' || selectors instanceof String
5712                ? excludedFromFocusTrapping.add(selectors)
5713                : selectors.map(selector => excludedFromFocusTrapping.add(selector));
5714        }
5715
5716        window.hyva.modal.eventListeners = {
5717            keydown: event => {
5718                if (event.key === 'Escape') {
5719                    window.hyva.modal.pop();
5720                }
5721            },
5722                        click: event => {
5723                if (modals.length > 0) {
5724                    const modal = modals[modals.length -1];
5725                    const dialog = modal.instance.$refs[modal.name];
5726                    if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago
5727                        ! isOverlayDisabled(dialog) && // if dialog has overlay
5728                        ! dialog.contains(event.target)) { // if click is outside of dialog
5729                        modal.instance.hide();
5730                    }
5731                }
5732            }
5733        };
5734
5735        document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown);
5736
5737        document.addEventListener('click', window.hyva.modal.eventListeners.click);
5738    })();
5739    window.addEventListener('alpine:init', () => {
5740        Alpine.data('hyvaModal', window.hyva.modal);
5741    }, {once: true});
5742</script>
vendor: 1 bytes, line 5742
5742
5743<script type="text/json" id="default-section-data">
5744    {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":[],"directory-data":{"AD":{"name":"Andorra"},"AE":{"name":"Emirados \u00c1rabes Unidos"},"AF":{"name":"Afeganist\u00e3o"},"AG":{"name":"Ant\u00edgua e Barbuda"},"AI":{"name":"Anguila"},"AL":{"name":"Alb\u00e2nia","regions":{"485":{"code":"AL-01","name":"Berat"},"486":{"code":"AL-09","name":"Dib\u00ebr"},"487":{"code":"AL-02","name":"Durr\u00ebs"},"488":{"code":"AL-03","name":"Elbasan"},"489":{"code":"AL-04","name":"Fier"},"490":{"code":"AL-05","name":"Gjirokast\u00ebr"},"491":{"code":"AL-06","name":"Kor\u00e7\u00eb"},"492":{"code":"AL-07","name":"Kuk\u00ebs"},"493":{"code":"AL-08","name":"Lezh\u00eb"},"494":{"code":"AL-10","name":"Shkod\u00ebr"},"495":{"code":"AL-11","name":"Tiran\u00eb"},"496":{"code":"AL-12","name":"Vlor\u00eb"}}},"AM":{"name":"Arm\u00eania"},"AN":{"name":null},"AO":{"name":"Angola"},"AQ":{"name":"Ant\u00e1rtida"},"AR":{"name":"Argentina","regions":{"498":{"code":"AR-B","name":"Buenos Aires"},"499":{"code":"AR-K","name":"Catamarca"},"500":{"code":"AR-H","name":"Chaco"},"501":{"code":"AR-U","name":"Chubut"},"497":{"code":"AR-C","name":"Ciudad Aut\u00f3noma de Buenos Aires"},"502":{"code":"AR-X","name":"C\u00f3rdoba"},"503":{"code":"AR-W","name":"Corrientes"},"504":{"code":"AR-E","name":"Entre R\u00edos"},"505":{"code":"AR-P","name":"Formosa"},"506":{"code":"AR-Y","name":"Jujuy"},"507":{"code":"AR-L","name":"La Pampa"},"508":{"code":"AR-F","name":"La Rioja"},"509":{"code":"AR-M","name":"Mendoza"},"510":{"code":"AR-N","name":"Misiones"},"511":{"code":"AR-Q","name":"Neuqu\u00e9n"},"512":{"code":"AR-R","name":"R\u00edo Negro"},"513":{"code":"AR-A","name":"Salta"},"514":{"code":"AR-J","name":"San Juan"},"515":{"code":"AR-D","name":"San Luis"},"516":{"code":"AR-Z","name":"Santa Cruz"},"517":{"code":"AR-S","name":"Santa Fe"},"518":{"code":"AR-G","name":"Santiago del Estero"},"519":{"code":"AR-V","name":"Tierra del Fuego"},"520":{"code":"AR-T","name":"Tucum\u00e1n"}}},"AS":{"name":"Samoa Americana"},"AT":{"name":"\u00c1ustria","regions":{"102":{"code":"BL","name":"Burgenland"},"99":{"code":"KN","name":"K\u00e4rnten"},"96":{"code":"NO","name":"Nieder\u00f6sterreich"},"97":{"code":"OO","name":"Ober\u00f6sterreich"},"98":{"code":"SB","name":"Salzburg"},"100":{"code":"ST","name":"Steiermark"},"101":{"code":"TI","name":"Tirol"},"103":{"code":"VB","name":"Vorarlberg"},"95":{"code":"WI","name":"Wien"}}},"AU":{"name":"Austr\u00e1lia"},"AW":{"name":"Aruba"},"AX":{"name":"Ilhas Aland"},"AZ":{"name":"Azerbaij\u00e3o"},"BA":{"name":"B\u00f3snia e Herzegovina"},"BB":{"name":"Barbados"},"BD":{"name":"Bangladesh"},"BE":{"name":"B\u00e9lgica"},"BF":{"name":"Burquina Faso"},"BG":{"name":"Bulg\u00e1ria"},"BH":{"name":"Barein"},"BI":{"name":"Burundi"},"BJ":{"name":"Benin"},"BL":{"name":"S\u00e3o Bartolomeu"},"BM":{"name":"Bermudas"},"BN":{"name":"Brunei"},"BO":{"name":"Bol\u00edvia","regions":{"529":{"code":"BO-H","name":"Chuquisaca"},"528":{"code":"BO-C","name":"Cochabamba"},"530":{"code":"BO-B","name":"El Beni"},"531":{"code":"BO-L","name":"La Paz"},"532":{"code":"BO-O","name":"Oruro"},"533":{"code":"BO-N","name":"Pando"},"534":{"code":"BO-P","name":"Potos\u00ed"},"535":{"code":"BO-S","name":"Santa Cruz"},"536":{"code":"BO-T","name":"Tarija"}}},"BR":{"name":"Brasil"},"BS":{"name":"Bahamas"},"BT":{"name":"But\u00e3o"},"BV":{"name":"Ilha Bouvet"},"BW":{"name":"Botsuana"},"BY":{"name":"Bielorr\u00fassia","regions":{"521":{"code":"BY-BR","name":"Bresckaja voblas\u0107"},"522":{"code":"BY-HO","name":"Homie\u013askaja voblas\u0107"},"523":{"code":"BY-HM","name":"Horad Minsk"},"524":{"code":"BY-HR","name":"Hrodzienskaja voblas\u0107"},"525":{"code":"BY-MA","name":"Mahilio\u016dskaja voblas\u0107"},"526":{"code":"BY-MI","name":"Minskaja voblas\u0107"},"527":{"code":"BY-VI","name":"Viciebskaja voblas\u0107"}}},"BZ":{"name":"Belize"},"CA":{"name":"Canad\u00e1","regions":{"66":{"code":"AB","name":"Alberta"},"67":{"code":"BC","name":"British Columbia"},"68":{"code":"MB","name":"Manitoba"},"70":{"code":"NB","name":"New Brunswick"},"69":{"code":"NL","name":"Newfoundland and Labrador"},"72":{"code":"NT","name":"Northwest Territories"},"71":{"code":"NS","name":"Nova Scotia"},"73":{"code":"NU","name":"Nunavut"},"74":{"code":"ON","name":"Ontario"},"75":{"code":"PE","name":"Prince Edward Island"},"76":{"code":"QC","name":"Quebec"},"77":{"code":"SK","name":"Saskatchewan"},"78":{"code":"YT","name":"Yukon Territory"}}},"CC":{"name":"Ilhas Cocos (Keeling)"},"CD":{"name":"Congo - Kinshasa"},"CF":{"name":"Rep\u00fablica Centro-Africana"}
5744,"CG":{"name":"Rep\u00fablica do Congo"},"CH":{"name":"Su\u00ed\u00e7a","regions":{"104":{"code":"AG","name":"Aargau"},"106":{"code":"AR","name":"Appenzell Ausserrhoden"},"105":{"code":"AI","name":"Appenzell Innerrhoden"},"108":{"code":"BL","name":"Basel-Landschaft"},"109":{"code":"BS","name":"Basel-Stadt"},"107":{"code":"BE","name":"Bern"},"110":{"code":"FR","name":"Friburg"},"111":{"code":"GE","name":"Geneva"},"112":{"code":"GL","name":"Glarus"},"113":{"code":"GR","name":"Graub\u00fcnden"},"114":{"code":"JU","name":"Jura"},"115":{"code":"LU","name":"Lucerne"},"116":{"code":"NE","name":"Neuch\u00e2tel"},"117":{"code":"NW","name":"Nidwalden"},"118":{"code":"OW","name":"Obwalden"},"120":{"code":"SH","name":"Schaffhausen"},"122":{"code":"SZ","name":"Schwyz"},"121":{"code":"SO","name":"Solothurn"},"119":{"code":"SG","name":"St. Gallen"},"123":{"code":"TG","name":"Thurgau"},"124":{"code":"TI","name":"Ticino"},"125":{"code":"UR","name":"Uri"},"126":{"code":"VD","name":"Vaud"},"127":{"code":"VS","name":"Wallis"},"128":{"code":"ZG","name":"Zug"},"129":{"code":"ZH","name":"Z\u00fcrich"}}},"CI":{"name":"Costa do Marfim"},"CK":{"name":"Ilhas Cook"},"CL":{"name":"Chile","regions":{"537":{"code":"CL-AI","name":"Ais\u00e9n del General Carlos Iba\u00f1ez del Campo"},"538":{"code":"CL-AN","name":"Antofagasta"},"539":{"code":"CL-AP","name":"Arica y Parinacota"},"541":{"code":"CL-AT","name":"Atacama"},"542":{"code":"CL-BI","name":"Biob\u00edo"},"543":{"code":"CL-CO","name":"Coquimbo"},"540":{"code":"CL-AR","name":"La Araucan\u00eda"},"544":{"code":"CL-LI","name":"Libertador General Bernardo O'Higgins"},"545":{"code":"CL-LL","name":"Los Lagos"},"546":{"code":"CL-LR","name":"Los R\u00edos"},"547":{"code":"CL-MA","name":"Magallanes"},"548":{"code":"CL-ML","name":"Maule"},"549":{"code":"CL-NB","name":"\u00d1uble"},"550":{"code":"CL-RM","name":"Regi\u00f3n Metropolitana de Santiago"},"551":{"code":"CL-TA","name":"Tarapac\u00e1"},"552":{"code":"CL-VS","name":"Valpara\u00edso"}}},"CM":{"name":"Camar\u00f5es"},"CN":{"name":"China"},"CO":{"name":"Col\u00f4mbia"},"CR":{"name":"Costa Rica","regions":{"735":{"code":"CR-AL","name":"Alajuela"},"736":{"code":"CR-CA","name":"Cartago"},"738":{"code":"CR-GU","name":"Guanacaste"},"737":{"code":"CR-HE","name":"Heredia"},"740":{"code":"CR-LI","name":"Lim\u00f3n"},"739":{"code":"CR-PU","name":"Puntarenas"},"734":{"code":"CR-SJ","name":"San Jos\u00e9"}}},"CU":{"name":"Cuba"},"CV":{"name":"Cabo Verde"},"CX":{"name":"Ilha Christmas"},"CY":{"name":"Chipre"},"CZ":{"name":"Tch\u00e9quia","regions":{"743":{"code":"CZ-31","name":"Jiho\u010desk\u00fd kraj"},"751":{"code":"CZ-64","name":"Jihomoravsk\u00fd kraj"},"745":{"code":"CZ-41","name":"Karlovarsk\u00fd kraj"},"750":{"code":"CZ-63","name":"Kraj Vyso\u010dina"},"748":{"code":"CZ-52","name":"Kr\u00e1lov\u00e9hradeck\u00fd kraj"},"747":{"code":"CZ-51","name":"Libereck\u00fd kraj"},"754":{"code":"CZ-80","name":"Moravskoslezsk\u00fd kraj"},"752":{"code":"CZ-71","name":"Olomouck\u00fd kraj"},"749":{"code":"CZ-53","name":"Pardubick\u00fd kraj"},"744":{"code":"CZ-32","name":"Plze\u0148sk\u00fd kraj"},"741":{"code":"CZ-10","name":"Praha, Hlavn\u00ed m\u011bsto"},"742":{"code":"CZ-20","name":"St\u0159edo\u010desk\u00fd kraj"},"746":{"code":"CZ-42","name":"\u00dasteck\u00fd kraj"},"753":{"code":"CZ-72","name":"Zl\u00ednsk\u00fd kraj"}}},"DE":{"name":"Alemanha","regions":{"80":{"code":"BAW","name":"Baden-W\u00fcrttemberg"},"81":{"code":"BAY","name":"Bayern"},"82":{"code":"BER","name":"Berlin"},"83":{"code":"BRG","name":"Brandenburg"},"84":{"code":"BRE","name":"Bremen"},"85":{"code":"HAM","name":"Hamburg"},"86":{"code":"HES","name":"Hessen"},"87":{"code":"MEC","name":"Mecklenburg-Vorpommern"},"79":{"code":"NDS","name":"Niedersachsen"},"88":{"code":"NRW","name":"Nordrhein-Westfalen"},"89":{"code":"RHE","name":"Rheinland-Pfalz"},"90":{"code":"SAR","name":"Saarland"},"91":{"code":"SAS","name":"Sachsen"},"92":{"code":"SAC","name":"Sachsen-Anhalt"},"93":{"code":"SCN","name":"Schleswig-Holstein"},"94":{"code":"THE","name":"Th\u00fcringen"}}},"DJ":{"name":"Djibuti"},"DK":{"name":"Dinamarca","regions":{"553":{"code":"DK-84","name":"Hovedstaden"},"554":{"code":"DK-82","name":"Midtjylland"},"555":{"code":"DK-81","name":"Nordjylland"},"556":{"code":"DK-85","name":"Sj\u00e6lland"},"557":{"code":"DK-83","name":"Syddanmark"}}},"DM":{"name":"Dominica"}
5744,"DO":{"name":"Rep\u00fablica Dominicana"},"DZ":{"name":"Arg\u00e9lia"},"EC":{"name":"Equador","regions":{"558":{"code":"EC-A","name":"Azuay"},"559":{"code":"EC-B","name":"Bol\u00edvar"},"560":{"code":"EC-F","name":"Ca\u00f1ar"},"561":{"code":"EC-C","name":"Carchi"},"562":{"code":"EC-H","name":"Chimborazo"},"563":{"code":"EC-X","name":"Cotopaxi"},"564":{"code":"EC-O","name":"El Oro"},"565":{"code":"EC-E","name":"Esmeraldas"},"566":{"code":"EC-W","name":"Gal\u00e1pagos"},"567":{"code":"EC-G","name":"Guayas"},"568":{"code":"EC-I","name":"Imbabura"},"569":{"code":"EC-L","name":"Loja"},"570":{"code":"EC-R","name":"Los R\u00edos"},"571":{"code":"EC-M","name":"Manab\u00ed"},"572":{"code":"EC-S","name":"Morona Santiago"},"573":{"code":"EC-N","name":"Napo"},"574":{"code":"EC-D","name":"Orellana"},"575":{"code":"EC-Y","name":"Pastaza"},"576":{"code":"EC-P","name":"Pichincha"},"577":{"code":"EC-SE","name":"Santa Elena"},"578":{"code":"EC-SD","name":"Santo Domingo de los Ts\u00e1chilas"},"579":{"code":"EC-U","name":"Sucumb\u00edos"},"580":{"code":"EC-T","name":"Tungurahua"},"581":{"code":"EC-Z","name":"Zamora Chinchipe"}}},"EE":{"name":"Est\u00f4nia","regions":{"340":{"code":"EE-37","name":"Harjumaa"},"341":{"code":"EE-39","name":"Hiiumaa"},"342":{"code":"EE-44","name":"Ida-Virumaa"},"344":{"code":"EE-51","name":"J\u00e4rvamaa"},"343":{"code":"EE-49","name":"J\u00f5gevamaa"},"346":{"code":"EE-59","name":"L\u00e4\u00e4ne-Virumaa"},"345":{"code":"EE-57","name":"L\u00e4\u00e4nemaa"},"348":{"code":"EE-67","name":"P\u00e4rnumaa"},"347":{"code":"EE-65","name":"P\u00f5lvamaa"},"349":{"code":"EE-70","name":"Raplamaa"},"350":{"code":"EE-74","name":"Saaremaa"},"351":{"code":"EE-78","name":"Tartumaa"},"352":{"code":"EE-82","name":"Valgamaa"},"353":{"code":"EE-84","name":"Viljandimaa"},"354":{"code":"EE-86","name":"V\u00f5rumaa"}}},"EG":{"name":"Egito"},"EH":{"name":"Saara Ocidental"},"ER":{"name":"Eritreia"},"ES":{"name":"Espanha","regions":{"130":{"code":"A Coru\u0441a","name":"A Coru\u00f1a"},"131":{"code":"Alava","name":"Alava"},"132":{"code":"Albacete","name":"Albacete"},"133":{"code":"Alicante","name":"Alicante"},"134":{"code":"Almeria","name":"Almeria"},"135":{"code":"Asturias","name":"Asturias"},"136":{"code":"Avila","name":"Avila"},"137":{"code":"Badajoz","name":"Badajoz"},"138":{"code":"Baleares","name":"Baleares"},"139":{"code":"Barcelona","name":"Barcelona"},"140":{"code":"Burgos","name":"Burgos"},"141":{"code":"Caceres","name":"Caceres"},"142":{"code":"Cadiz","name":"Cadiz"},"143":{"code":"Cantabria","name":"Cantabria"},"144":{"code":"Castellon","name":"Castellon"},"145":{"code":"Ceuta","name":"Ceuta"},"146":{"code":"Ciudad Real","name":"Ciudad Real"},"147":{"code":"Cordoba","name":"Cordoba"},"148":{"code":"Cuenca","name":"Cuenca"},"149":{"code":"Girona","name":"Girona"},"150":{"code":"Granada","name":"Granada"},"151":{"code":"Guadalajara","name":"Guadalajara"},"152":{"code":"Guipuzcoa","name":"Guipuzcoa"},"153":{"code":"Huelva","name":"Huelva"},"154":{"code":"Huesca","name":"Huesca"},"155":{"code":"Jaen","name":"Jaen"},"156":{"code":"La Rioja","name":"La Rioja"},"157":{"code":"Las Palmas","name":"Las Palmas"},"158":{"code":"Leon","name":"Leon"},"159":{"code":"Lleida","name":"Lleida"},"160":{"code":"Lugo","name":"Lugo"},"161":{"code":"Madrid","name":"Madrid"},"162":{"code":"Malaga","name":"Malaga"},"163":{"code":"Melilla","name":"Melilla"},"164":{"code":"Murcia","name":"Murcia"},"165":{"code":"Navarra","name":"Navarra"},"166":{"code":"Ourense","name":"Ourense"},"167":{"code":"Palencia","name":"Palencia"},"168":{"code":"Pontevedra","name":"Pontevedra"},"169":{"code":"Salamanca","name":"Salamanca"},"170":{"code":"Santa Cruz de Tenerife","name":"Santa Cruz de Tenerife"},"171":{"code":"Segovia","name":"Segovia"},"172":{"code":"Sevilla","name":"Sevilla"},"173":{"code":"Soria","name":"Soria"},"174":{"code":"Tarragona","name":"Tarragona"},"175":{"code":"Teruel","name":"Teruel"},"176":{"code":"Toledo","name":"Toledo"},"177":{"code":"Valencia","name":"Valencia"},"178":{"code":"Valladolid","name":"Valladolid"},"179":{"code":"Vizcaya","name":"Vizcaya"},"180":{"code":"Zamora","name":"Zamora"},"181":{"code":"Zaragoza","name":"Zaragoza"}}},"ET":{"name":"Eti\u00f3pia"},"FI":{"name":"Finl\u00e2ndia","regions":{"339":{"code":"Ahvenanmaa","name":"Ahvenanmaa"},"333":{"code":"Etel\u00e4-Karjala","name":"Etel\u00e4-Karjala"},"326":{"code":"Etel\u00e4-Pohjanmaa","name":"Etel\u00e4-Pohjanmaa"},"325":{"code":"Etel\u00e4-Savo","name":"Etel\u00e4-Savo"},"337":{"code":"It\u00e4-Uusimaa","name":"It\u00e4-Uusimaa"},"322":{"code":"Kainuu","name":"Kainuu"},"335":{"code":"Kanta-H\u00e4me","name":"Kanta-H\u00e4me"},"330":{"code":"Keski-Pohjanmaa","name":"Keski-Pohjanmaa"},"331":{"code":"Keski-Suomi","name":"Keski-Suomi"},"338":{"code":"Kymenlaakso","name":"Kymenlaakso"},"320":{"code":"Lappi","name":"Lappi"},"334":{"code":"P\u00e4ij\u00e4t-H\u00e4me","name":"P\u00e4ij\u00e4t-H\u00e4me"},"328":{"code":"Pirkanmaa","name":"Pirkanmaa"},"327":{"code":"Pohjanmaa","name":"Pohjanmaa"},"323":{"code":"Pohjois-Karjala","name":"Pohjois-Karjala"},"321":{"code":"Pohjois-Pohjanmaa","name":"Pohjois-Pohjanmaa"},"324":{"code":"Pohjois-Savo","name":"Pohjois-Savo"},"329":{"code":"Satakunta","name":"Satakunta"},"336":{"code":"Uusimaa","name":"Uusimaa"},"332":{"code":"Varsinais-Suomi","name":"Varsinais-Suomi"}}},"FJ":{"name":"Fiji"},"FK":{"name":"Ilhas Malvinas"},"FM":{"name":"Micron\u00e9sia"},"FO":{"name":"Ilhas Faro\u00e9"},"FR":{"name":"Fran\u00e7a","regions":{"182":{"code":"1","name":"Ain"},"183":{"code":"2","name":"Aisne"},"184":{"code":"3","name":"Allier"}
5744,"185":{"code":"4","name":"Alpes-de-Haute-Provence"},"187":{"code":"6","name":"Alpes-Maritimes"},"188":{"code":"7","name":"Ard\u00e8che"},"189":{"code":"8","name":"Ardennes"},"190":{"code":"9","name":"Ari\u00e8ge"},"191":{"code":"10","name":"Aube"},"192":{"code":"11","name":"Aude"},"193":{"code":"12","name":"Aveyron"},"249":{"code":"67","name":"Bas-Rhin"},"194":{"code":"13","name":"Bouches-du-Rh\u00f4ne"},"195":{"code":"14","name":"Calvados"},"196":{"code":"15","name":"Cantal"},"197":{"code":"16","name":"Charente"},"198":{"code":"17","name":"Charente-Maritime"},"199":{"code":"18","name":"Cher"},"200":{"code":"19","name":"Corr\u00e8ze"},"201":{"code":"2A","name":"Corse-du-Sud"},"203":{"code":"21","name":"C\u00f4te-d'Or"},"204":{"code":"22","name":"C\u00f4tes-d'Armor"},"205":{"code":"23","name":"Creuse"},"261":{"code":"79","name":"Deux-S\u00e8vres"},"206":{"code":"24","name":"Dordogne"},"207":{"code":"25","name":"Doubs"},"208":{"code":"26","name":"Dr\u00f4me"},"273":{"code":"91","name":"Essonne"},"209":{"code":"27","name":"Eure"},"210":{"code":"28","name":"Eure-et-Loir"},"211":{"code":"29","name":"Finist\u00e8re"},"212":{"code":"30","name":"Gard"},"214":{"code":"32","name":"Gers"},"215":{"code":"33","name":"Gironde"},"250":{"code":"68","name":"Haut-Rhin"},"202":{"code":"2B","name":"Haute-Corse"},"213":{"code":"31","name":"Haute-Garonne"},"225":{"code":"43","name":"Haute-Loire"},"234":{"code":"52","name":"Haute-Marne"},"252":{"code":"70","name":"Haute-Sa\u00f4ne"},"256":{"code":"74","name":"Haute-Savoie"},"269":{"code":"87","name":"Haute-Vienne"},"186":{"code":"5","name":"Hautes-Alpes"},"247":{"code":"65","name":"Hautes-Pyr\u00e9n\u00e9es"},"274":{"code":"92","name":"Hauts-de-Seine"},"216":{"code":"34","name":"H\u00e9rault"},"217":{"code":"35","name":"Ille-et-Vilaine"},"218":{"code":"36","name":"Indre"},"219":{"code":"37","name":"Indre-et-Loire"},"220":{"code":"38","name":"Is\u00e8re"},"221":{"code":"39","name":"Jura"},"222":{"code":"40","name":"Landes"},"223":{"code":"41","name":"Loir-et-Cher"},"224":{"code":"42","name":"Loire"},"226":{"code":"44","name":"Loire-Atlantique"},"227":{"code":"45","name":"Loiret"},"228":{"code":"46","name":"Lot"},"229":{"code":"47","name":"Lot-et-Garonne"},"230":{"code":"48","name":"Loz\u00e8re"},"231":{"code":"49","name":"Maine-et-Loire"},"232":{"code":"50","name":"Manche"},"233":{"code":"51","name":"Marne"},"235":{"code":"53","name":"Mayenne"},"236":{"code":"54","name":"Meurthe-et-Moselle"},"237":{"code":"55","name":"Meuse"},"238":{"code":"56","name":"Morbihan"},"239":{"code":"57","name":"Moselle"},"240":{"code":"58","name":"Ni\u00e8vre"},"241":{"code":"59","name":"Nord"},"242":{"code":"60","name":"Oise"},"243":{"code":"61","name":"Orne"},"257":{"code":"75","name":"Paris"},"244":{"code":"62","name":"Pas-de-Calais"},"245":{"code":"63","name":"Puy-de-D\u00f4me"},"246":{"code":"64","name":"Pyr\u00e9n\u00e9es-Atlantiques"},"248":{"code":"66","name":"Pyr\u00e9n\u00e9es-Orientales"},"251":{"code":"69","name":"Rh\u00f4ne"},"253":{"code":"71","name":"Sa\u00f4ne-et-Loire"},"254":{"code":"72","name":"Sarthe"},"255":{"code":"73","name":"Savoie"},"259":{"code":"77","name":"Seine-et-Marne"},"258":{"code":"76","name":"Seine-Maritime"},"275":{"code":"93","name":"Seine-Saint-Denis"},"262":{"code":"80","name":"Somme"},"263":{"code":"81","name":"Tarn"},"264":{"code":"82","name":"Tarn-et-Garonne"},"272":{"code":"90","name":"Territoire-de-Belfort"},"277":{"code":"95","name":"Val-d'Oise"},"276":{"code":"94","name":"Val-de-Marne"},"265":{"code":"83","name":"Var"},"266":{"code":"84","name":"Vaucluse"},"267":{"code":"85","name":"Vend\u00e9e"},"268":{"code":"86","name":"Vienne"},"270":{"code":"88","name":"Vosges"},"271":{"code":"89","name":"Yonne"},"260":{"code":"78","name":"Yvelines"}}},"GA":{"name":"Gab\u00e3o"},"GB":{"name":"Reino Unido"},"GD":{"name":"Granada"},"GE":{"name":"Ge\u00f3rgia"},"GF":{"name":"Guiana Francesa"},"GG":{"name":"Guernsey"},"GH":{"name":"Gana"},"GI":{"name":"Gibraltar"},"GL":{"name":"Groenl\u00e2ndia"},"GM":{"name":"G\u00e2mbia"},"GN":{"name":"Guin\u00e9"},"GP":{"name":"Guadalupe"},"GQ":{"name":"Guin\u00e9 Equatorial"},"GR":{"name":"Gr\u00e9cia","regions":{"595":{"code":"GR-69","name":"\u00c1gion \u00d3ros"},"582":{"code":"GR-A","name":"Anatolik\u00ed Makedon\u00eda kai Thr\u00e1ki"},"583":{"code":"GR-I","name":"Attik\u00ed"},"584":{"code":"GR-G","name":"Dytik\u00ed Ell\u00e1da"},"585":{"code":"GR-C","name":"Dytik\u00ed Makedon\u00eda"},"586":{"code":"GR-F","name":"Ion\u00eda N\u00edsia"},"587":{"code":"GR-D","name":"\u00cdpeiros"},"588":{"code":"GR-B","name":"Kentrik\u00ed Makedon\u00eda"},"589":{"code":"GR-M","name":"Kr\u00edti"},"590":{"code":"GR-L","name":"N\u00f3tio Aiga\u00edo"},"591":{"code":"GR-J","name":"Pelop\u00f3nnisos"},"592":{"code":"GR-H","name":"Stere\u00e1 Ell\u00e1da"}
5744,"593":{"code":"GR-E","name":"Thessal\u00eda"},"594":{"code":"GR-K","name":"V\u00f3reio Aiga\u00edo"}}},"GS":{"name":"Ilhas Ge\u00f3rgia do Sul e Sandwich do Sul"},"GT":{"name":"Guatemala"},"GU":{"name":"Guam"},"GW":{"name":"Guin\u00e9-Bissau"},"GY":{"name":"Guiana","regions":{"596":{"code":"GY-BA","name":"Barima-Waini"},"597":{"code":"GY-CU","name":"Cuyuni-Mazaruni"},"598":{"code":"GY-DE","name":"Demerara-Mahaica"},"599":{"code":"GY-EB","name":"East Berbice-Corentyne"},"600":{"code":"GY-ES","name":"Essequibo Islands-West Demerara"},"601":{"code":"GY-MA","name":"Mahaica-Berbice"},"602":{"code":"GY-PM","name":"Pomeroon-Supenaam"},"603":{"code":"GY-PT","name":"Potaro-Siparuni"},"604":{"code":"GY-UD","name":"Upper Demerara-Berbice"},"605":{"code":"GY-UT","name":"Upper Takutu-Upper Essequibo"}}},"HK":{"name":"Hong Kong, RAE da China"},"HM":{"name":"Ilhas Heard e McDonald"},"HN":{"name":"Honduras"},"HR":{"name":"Cro\u00e1cia"},"HT":{"name":"Haiti"},"HU":{"name":"Hungria"},"ID":{"name":"Indon\u00e9sia"},"IE":{"name":"Irlanda"},"IL":{"name":"Israel"},"IM":{"name":"Ilha de Man"},"IN":{"name":"\u00cdndia","regions":{"782":{"code":"LA","name":"Ladakh"}}},"IO":{"name":"Territ\u00f3rio Brit\u00e2nico do Oceano \u00cdndico"},"IQ":{"name":"Iraque"},"IR":{"name":"Ir\u00e3"},"IS":{"name":"Isl\u00e2ndia","regions":{"612":{"code":"IS-07","name":"Austurland"},"606":{"code":"IS-01","name":"H\u00f6fu\u00f0borgarsv\u00e6\u00f0i"},"611":{"code":"IS-06","name":"Nor\u00f0urland eystra"},"610":{"code":"IS-05","name":"Nor\u00f0urland vestra"},"613":{"code":"IS-08","name":"Su\u00f0urland"},"607":{"code":"IS-02","name":"Su\u00f0urnes"},"609":{"code":"IS-04","name":"Vestfir\u00f0ir"},"608":{"code":"IS-03","name":"Vesturland"}}},"IT":{"name":"It\u00e1lia"},"JE":{"name":"Jersey"},"JM":{"name":"Jamaica"},"JO":{"name":"Jord\u00e2nia"},"JP":{"name":"Jap\u00e3o"},"KE":{"name":"Qu\u00eania"},"KG":{"name":"Quirguist\u00e3o"},"KH":{"name":"Camboja"},"KI":{"name":"Quiribati"},"KM":{"name":"Comores"},"KN":{"name":"S\u00e3o Crist\u00f3v\u00e3o e N\u00e9vis"},"KP":{"name":"Coreia do Norte"}
5744,"KR":{"name":"Coreia do Sul"},"KW":{"name":"Kuwait"},"KY":{"name":"Ilhas Cayman"},"KZ":{"name":"Cazaquist\u00e3o"},"LA":{"name":"Laos"},"LB":{"name":"L\u00edbano"},"LC":{"name":"Santa L\u00facia"},"LI":{"name":"Liechtenstein"},"LK":{"name":"Sri Lanka"},"LR":{"name":"Lib\u00e9ria"},"LS":{"name":"Lesoto"},"LT":{"name":"Litu\u00e2nia","regions":{"475":{"code":"LT-AL","name":"Alytaus Apskritis"},"476":{"code":"LT-KU","name":"Kauno Apskritis"},"477":{"code":"LT-KL","name":"Klaip\u0117dos Apskritis"},"478":{"code":"LT-MR","name":"Marijampol\u0117s Apskritis"},"479":{"code":"LT-PN","name":"Panev\u0117\u017eio Apskritis"},"480":{"code":"LT-SA","name":"\u0160iauli\u0173 Apskritis"},"481":{"code":"LT-TA","name":"Taurag\u0117s Apskritis"},"482":{"code":"LT-TE","name":"Tel\u0161i\u0173 Apskritis"},"483":{"code":"LT-UT","name":"Utenos Apskritis"},"484":{"code":"LT-VL","name":"Vilniaus Apskritis"}}},"LU":{"name":"Luxemburgo"},"LV":{"name":"Let\u00f4nia","regions":{"471":{"code":"\u0100da\u017eu novads","name":"\u0100da\u017eu novads"},"366":{"code":"Aglonas novads","name":"Aglonas novads"},"367":{"code":"LV-AI","name":"Aizkraukles novads"},"368":{"code":"Aizputes novads","name":"Aizputes novads"},"369":{"code":"Akn\u012bstes novads","name":"Akn\u012bstes novads"},"370":{"code":"Alojas novads","name":"Alojas novads"},"371":{"code":"Alsungas novads","name":"Alsungas novads"},"372":{"code":"LV-AL","name":"Al\u016bksnes novads"},"373":{"code":"Amatas novads","name":"Amatas novads"},"374":{"code":"Apes novads","name":"Apes novads"},"375":{"code":"Auces novads","name":"Auces novads"},"376":{"code":"Bab\u012btes novads","name":"Bab\u012btes novads"},"377":{"code":"Baldones novads","name":"Baldones novads"},"378":{"code":"Baltinavas novads","name":"Baltinavas novads"},"379":{"code":"LV-BL","name":"Balvu novads"},"380":{"code":"LV-BU","name":"Bauskas novads"},"381":{"code":"Bever\u012bnas novads","name":"Bever\u012bnas novads"},"382":{"code":"Broc\u0113nu novads","name":"Broc\u0113nu novads"},"383":{"code":"Burtnieku novads","name":"Burtnieku novads"},"384":{"code":"Carnikavas novads","name":"Carnikavas novads"},"387":{"code":"LV-CE","name":"C\u0113su novads"},"385":{"code":"Cesvaines novads","name":"Cesvaines novads"},"386":{"code":"Ciblas novads","name":"Ciblas novads"},"388":{"code":"Dagdas novads","name":"Dagdas novads"},"355":{"code":"LV-DGV","name":"Daugavpils"},"389":{"code":"LV-DA","name":"Daugavpils novads"},"390":{"code":"LV-DO","name":"Dobeles novads"},"391":{"code":"Dundagas novads","name":"Dundagas novads"},"392":{"code":"Durbes novads","name":"Durbes novads"},"393":{"code":"Engures novads","name":"Engures novads"},"472":{"code":"\u0112rg\u013cu novads","name":"\u0112rg\u013cu novads"},"394":{"code":"Garkalnes novads","name":"Garkalnes novads"},"395":{"code":"Grobi\u0146as novads","name":"Grobi\u0146as novads"},"396":{"code":"LV-GU","name":"Gulbenes novads"},"397":{"code":"Iecavas novads","name":"Iecavas novads"},"398":{"code":"Ik\u0161\u0137iles novads","name":"Ik\u0161\u0137iles novads"},"399":{"code":"Il\u016bkstes novads","name":"Il\u016bkstes novads"},"400":{"code":"In\u010dukalna novads","name":"In\u010dukalna novads"},"401":{"code":"Jaunjelgavas novads","name":"Jaunjelgavas novads"},"402":{"code":"Jaunpiebalgas novads","name":"Jaunpiebalgas novads"},"403":{"code":"Jaunpils novads","name":"Jaunpils novads"},"357":{"code":"J\u0113kabpils","name":"J\u0113kabpils"},"405":{"code":"LV-JK","name":"J\u0113kabpils novads"},"356":{"code":"LV-JEL","name":"Jelgava"},"404":{"code":"LV-JL","name":"Jelgavas novads"},"358":{"code":"LV-JUR","name":"J\u016brmala"},"406":{"code":"Kandavas novads","name":"Kandavas novads"},"412":{"code":"K\u0101rsavas novads","name":"K\u0101rsavas novads"},"473":{"code":"\u0136eguma novads","name":"\u0136eguma novads"},"474":{"code":"\u0136ekavas novads","name":"\u0136ekavas novads"},"407":{"code":"Kokneses novads","name":"Kokneses novads"},"410":{"code":"LV-KR","name":"Kr\u0101slavas novads"},"408":{"code":"Krimuldas novads","name":"Krimuldas novads"},"409":{"code":"Krustpils novads","name":"Krustpils novads"},"411":{"code":"LV-KU","name":"Kuld\u012bgas novads"},"413":{"code":"Lielv\u0101rdes novads","name":"Lielv\u0101rdes novads"},"359":{"code":"LV-LPX","name":"Liep\u0101ja"},"360":{"code":"LV-LE","name":"Liep\u0101jas novads"},"417":{"code":"L\u012bgatnes novads","name":"L\u012bgatnes novads"},"414":{"code":"LV-LM","name":"Limba\u017eu novads"},"418":{"code":"L\u012bv\u0101nu novads","name":"L\u012bv\u0101nu novads"},"415":{"code":"Lub\u0101nas novads","name":"Lub\u0101nas novads"},"416":{"code":"LV-LU","name":"Ludzas novads"},"419":{"code":"LV-MA","name":"Madonas novads"},"421":{"code":"M\u0101lpils novads","name":"M\u0101lpils novads"},"422":{"code":"M\u0101rupes novads","name":"M\u0101rupes novads"},"420":{"code":"Mazsalacas novads","name":"Mazsalacas novads"},"423":{"code":"Nauk\u0161\u0113nu novads","name":"Nauk\u0161\u0113nu novads"},"424":{"code":"Neretas novads","name":"Neretas novads"},"425":{"code":"N\u012bcas novads","name":"N\u012bcas novads"},"426":{"code":"LV-OG","name":"Ogres novads"},"427":{"code":"Olaines novads","name":"Olaines novads"},"428":{"code":"Ozolnieku novads","name":"Ozolnieku novads"},"432":{"code":"P\u0101rgaujas novads","name":"P\u0101rgaujas novads"},"433":{"code":"P\u0101vilostas novads","name":"P\u0101vilostas novads"},"434":{"code":"P\u013cavi\u0146u novads","name":"P\u013cavi\u0146u novads"},"429":{"code":"LV-PR","name":"Prei\u013cu novads"},"430":{"code":"Priekules novads","name":"Priekules novads"},"431":{"code":"Prieku\u013cu novads","name":"Prieku\u013cu novads"},"435":{"code":"Raunas novads","name":"Raunas novads"},"361":{"code":"LV-REZ","name":"R\u0113zekne"},"442":{"code":"LV-RE","name":"R\u0113zeknes novads"},"436":{"code":"Riebi\u0146u novads","name":"Riebi\u0146u novads"},"362":{"code":"LV-RIX","name":"R\u012bga"},"363":{"code":"LV-RI","name":"R\u012bgas novads"},"437":{"code":"Rojas novads","name":"Rojas novads"},"438":{"code":"Ropa\u017eu novads","name":"Ropa\u017eu novads"},"439":{"code":"Rucavas novads","name":"Rucavas novads"},"440":{"code":"Rug\u0101ju novads","name":"Rug\u0101ju novads"},"443":{"code":"R\u016bjienas novads","name":"R\u016bjienas novads"},"441":{"code":"Rund\u0101les novads","name":"Rund\u0101les novads"},"444":{"code":"Salacgr\u012bvas novads","name":"Salacgr\u012bvas novads"},"445":{"code":"Salas novads","name":"Salas novads"},"446":{"code":"Salaspils novads","name":"Salaspils novads"},"447":{"code":"LV-SA","name":"Saldus novads"},"448":{"code":"Saulkrastu novads","name":"Saulkrastu novads"},"455":{"code":"S\u0113jas novads","name":"S\u0113jas novads"},"449":{"code":"Siguldas novads","name":"Siguldas novads"}
5744,"451":{"code":"Skr\u012bveru novads","name":"Skr\u012bveru novads"},"450":{"code":"Skrundas novads","name":"Skrundas novads"},"452":{"code":"Smiltenes novads","name":"Smiltenes novads"},"453":{"code":"Stopi\u0146u novads","name":"Stopi\u0146u novads"},"454":{"code":"Stren\u010du novads","name":"Stren\u010du novads"},"456":{"code":"LV-TA","name":"Talsu novads"},"458":{"code":"T\u0113rvetes novads","name":"T\u0113rvetes novads"},"457":{"code":"LV-TU","name":"Tukuma novads"},"459":{"code":"Vai\u0146odes novads","name":"Vai\u0146odes novads"},"460":{"code":"LV-VK","name":"Valkas novads"},"364":{"code":"Valmiera","name":"Valmiera"},"461":{"code":"LV-VM","name":"Valmieras novads"},"462":{"code":"Varak\u013c\u0101nu novads","name":"Varak\u013c\u0101nu novads"},"469":{"code":"V\u0101rkavas novads","name":"V\u0101rkavas novads"},"463":{"code":"Vecpiebalgas novads","name":"Vecpiebalgas novads"},"464":{"code":"Vecumnieku novads","name":"Vecumnieku novads"},"365":{"code":"LV-VEN","name":"Ventspils"},"465":{"code":"LV-VE","name":"Ventspils novads"},"466":{"code":"Vies\u012btes novads","name":"Vies\u012btes novads"},"467":{"code":"Vi\u013cakas novads","name":"Vi\u013cakas novads"},"468":{"code":"Vi\u013c\u0101nu novads","name":"Vi\u013c\u0101nu novads"},"470":{"code":"Zilupes novads","name":"Zilupes novads"}}},"LY":{"name":"L\u00edbia"},"MA":{"name":"Marrocos"},"MC":{"name":"M\u00f4naco"},"MD":{"name":"Mold\u00e1via"},"ME":{"name":"Montenegro"},"MF":{"name":"S\u00e3o Martinho"},"MG":{"name":"Madagascar"},"MH":{"name":"Ilhas Marshall"},"MK":{"name":"Maced\u00f4nia do Norte"},"ML":{"name":"Mali"},"MM":{"name":"Mianmar (Birm\u00e2nia)"},"MN":{"name":"Mong\u00f3lia"},"MO":{"name":"Macau, RAE da China"},"MP":{"name":"Ilhas Marianas do Norte"},"MQ":{"name":"Martinica"},"MR":{"name":"Maurit\u00e2nia"},"MS":{"name":"Montserrat"},"MT":{"name":"Malta"},"MU":{"name":"Maur\u00edcio"},"MV":{"name":"Maldivas"},"MW":{"name":"Malaui"},"MX":{"name":"M\u00e9xico"},"MY":{"name":"Mal\u00e1sia"},"MZ":{"name":"Mo\u00e7ambique"},"NA":{"name":"Nam\u00edbia"},"NC":{"name":"Nova Caled\u00f4nia"},"NE":{"name":"N\u00edger"},"NF":{"name":"Ilha Norfolk"},"NG":{"name":"Nig\u00e9ria"},"NI":{"name":"Nicar\u00e1gua"},"NL":{"name":"Pa\u00edses Baixos"},"NO":{"name":"Noruega"},"NP":{"name":"Nepal"},"NR":{"name":"Nauru"},"NU":{"name":"Niue"},"NZ":{"name":"Nova Zel\u00e2ndia"},"OM":{"name":"Om\u00e3"},"PA":{"name":"Panam\u00e1"},"PE":{"name":"Peru","regions":{"633":{"code":"PE-AMA","name":"Amazonas"},"634":{"code":"PE-ANC","name":"Ancash"},"635":{"code":"PE-APU","name":"Apur\u00edmac"},"636":{"code":"PE-ARE","name":"Arequipa"},"637":{"code":"PE-AYA","name":"Ayacucho"},"638":{"code":"PE-CAJ","name":"Cajamarca"},"639":{"code":"PE-CUS","name":"Cusco"},"640":{"code":"PE-CAL","name":"El Callao"},"641":{"code":"PE-HUV","name":"Huancavelica"},"642":{"code":"PE-HUC","name":"Hu\u00e1nuco"},"643":{"code":"PE-ICA","name":"Ica"},"644":{"code":"PE-JUN","name":"Jun\u00edn"},"645":{"code":"PE-LAL","name":"La Libertad"},"646":{"code":"PE-LAM","name":"Lambayeque"},"647":{"code":"PE-LIM","name":"Lima"},"648":{"code":"PE-LOR","name":"Loreto"},"649":{"code":"PE-MDD","name":"Madre de Dios"},"650":{"code":"PE-MOQ","name":"Moquegua"},"632":{"code":"PE-LMA","name":"Municipalidad Metropolitana de Lima"},"651":{"code":"PE-PAS","name":"Pasco"}
5744,"652":{"code":"PE-PIU","name":"Piura"},"653":{"code":"PE-PUN","name":"Puno"},"654":{"code":"PE-SAM","name":"San Mart\u00edn"},"655":{"code":"PE-TAC","name":"Tacna"},"656":{"code":"PE-TUM","name":"Tumbes"},"657":{"code":"PE-UCA","name":"Ucayali"}}},"PF":{"name":"Polin\u00e9sia Francesa"},"PG":{"name":"Papua-Nova Guin\u00e9"},"PH":{"name":"Filipinas"},"PK":{"name":"Paquist\u00e3o"},"PL":{"name":"Pol\u00f4nia"},"PM":{"name":"S\u00e3o Pedro e Miquel\u00e3o"},"PN":{"name":"Ilhas Pitcairn"},"PR":{"name":"Porto Rico"},"PS":{"name":"Territ\u00f3rios palestinos"},"PT":{"name":"Portugal","regions":{"658":{"code":"PT-01","name":"Aveiro"},"659":{"code":"PT-02","name":"Beja"},"660":{"code":"PT-03","name":"Braga"},"661":{"code":"PT-04","name":"Bragan\u00e7a"},"662":{"code":"PT-05","name":"Castelo Branco"},"663":{"code":"PT-06","name":"Coimbra"},"664":{"code":"PT-07","name":"\u00c9vora"},"665":{"code":"PT-08","name":"Faro"},"666":{"code":"PT-09","name":"Guarda"},"667":{"code":"PT-10","name":"Leiria"},"668":{"code":"PT-11","name":"Lisboa"},"669":{"code":"PT-12","name":"Portalegre"},"670":{"code":"PT-13","name":"Porto"},"677":{"code":"PT-30","name":"Regi\u00e3o Aut\u00f3noma da Madeira"},"676":{"code":"PT-20","name":"Regi\u00e3o Aut\u00f3noma dos A\u00e7ores"},"671":{"code":"PT-14","name":"Santar\u00e9m"},"672":{"code":"PT-15","name":"Set\u00fabal"},"673":{"code":"PT-16","name":"Viana do Castelo"},"674":{"code":"PT-17","name":"Vila Real"},"675":{"code":"PT-18","name":"Viseu"}}},"PW":{"name":"Palau"},"PY":{"name":"Paraguai","regions":{"615":{"code":"PY-16","name":"Alto Paraguay"},"616":{"code":"PY-10","name":"Alto Paran\u00e1"},"617":{"code":"PY-13","name":"Amambay"},"614":{"code":"PY-ASU","name":"Asunci\u00f3n"},"618":{"code":"PY-19","name":"Boquer\u00f3n"},"619":{"code":"PY-5","name":"Caaguaz\u00fa"},"620":{"code":"PY-6","name":"Caazap\u00e1"},"621":{"code":"PY-14","name":"Canindey\u00fa"},"622":{"code":"PY-11","name":"Central"},"623":{"code":"PY-1","name":"Concepci\u00f3n"},"624":{"code":"PY-3","name":"Cordillera"},"625":{"code":"PY-4","name":"Guair\u00e1"},"626":{"code":"PY-7","name":"Itap\u00faa"},"627":{"code":"PY-8","name":"Misiones"},"628":{"code":"PY-12","name":"\u00d1eembuc\u00fa"},"629":{"code":"PY-9","name":"Paraguar\u00ed"},"630":{"code":"PY-15","name":"Presidente Hayes"},"631":{"code":"PY-2","name":"San Pedro"}}},"QA":{"name":"Catar"},"RE":{"name":"Reuni\u00e3o"},"RO":{"name":"Rom\u00eania","regions":{"278":{"code":"AB","name":"Alba"},"279":{"code":"AR","name":"Arad"},"280":{"code":"AG","name":"Arge\u015f"},"281":{"code":"BC","name":"Bac\u0103u"},"282":{"code":"BH","name":"Bihor"},"283":{"code":"BN","name":"Bistri\u0163a-N\u0103s\u0103ud"},"284":{"code":"BT","name":"Boto\u015fani"},"286":{"code":"BR","name":"Br\u0103ila"},"285":{"code":"BV","name":"Bra\u015fov"},"287":{"code":"B","name":"Bucure\u015fti"},"288":{"code":"BZ","name":"Buz\u0103u"},"290":{"code":"CL","name":"C\u0103l\u0103ra\u015fi"},"289":{"code":"CS","name":"Cara\u015f-Severin"},"291":{"code":"CJ","name":"Cluj"},"292":{"code":"CT","name":"Constan\u0163a"},"293":{"code":"CV","name":"Covasna"},"294":{"code":"DB","name":"D\u00e2mbovi\u0163a"},"295":{"code":"DJ","name":"Dolj"},"296":{"code":"GL","name":"Gala\u0163i"},"297":{"code":"GR","name":"Giurgiu"},"298":{"code":"GJ","name":"Gorj"},"299":{"code":"HR","name":"Harghita"},"300":{"code":"HD","name":"Hunedoara"},"301":{"code":"IL","name":"Ialomi\u0163a"},"302":{"code":"IS","name":"Ia\u015fi"},"303":{"code":"IF","name":"Ilfov"},"304":{"code":"MM","name":"Maramure\u015f"},"305":{"code":"MH","name":"Mehedin\u0163i"},"306":{"code":"MS","name":"Mure\u015f"},"307":{"code":"NT","name":"Neam\u0163"},"308":{"code":"OT","name":"Olt"},"309":{"code":"PH","name":"Prahova"},"311":{"code":"SJ","name":"S\u0103laj"},"310":{"code":"SM","name":"Satu-Mare"},"312":{"code":"SB","name":"Sibiu"},"313":{"code":"SV","name":"Suceava"},"314":{"code":"TR","name":"Teleorman"},"315":{"code":"TM","name":"Timi\u015f"},"316":{"code":"TL","name":"Tulcea"},"318":{"code":"VL","name":"V\u00e2lcea"},"317":{"code":"VS","name":"Vaslui"},"319":{"code":"VN","name":"Vrancea"}}},"RS":{"name":"S\u00e9rvia"},"RU":{"name":"R\u00fassia"},"RW":{"name":"Ruanda"},"SA":{"name":"Ar\u00e1bia Saudita"},"SB":{"name":"Ilhas Salom\u00e3o"},"SC":{"name":"Seicheles"},"SD":{"name":"Sud\u00e3o"},"SE":{"name":"Su\u00e9cia","regions":{"688":{"code":"SE-K","name":"Blekinge l\u00e4n"}
5744,"689":{"code":"SE-W","name":"Dalarnas l\u00e4n"},"691":{"code":"SE-X","name":"G\u00e4vleborgs l\u00e4n"},"690":{"code":"SE-I","name":"Gotlands l\u00e4n"},"692":{"code":"SE-N","name":"Hallands l\u00e4n"},"693":{"code":"SE-Z","name":"J\u00e4mtlands l\u00e4n"},"694":{"code":"SE-F","name":"J\u00f6nk\u00f6pings l\u00e4n"},"695":{"code":"SE-H","name":"Kalmar l\u00e4n"},"696":{"code":"SE-G","name":"Kronobergs l\u00e4n"},"697":{"code":"SE-BD","name":"Norrbottens l\u00e4n"},"707":{"code":"SE-T","name":"\u00d6rebro l\u00e4n"},"708":{"code":"SE-E","name":"\u00d6sterg\u00f6tlands l\u00e4n"},"698":{"code":"SE-M","name":"Sk\u00e5ne l\u00e4n"},"700":{"code":"SE-D","name":"S\u00f6dermanlands l\u00e4n"},"699":{"code":"SE-AB","name":"Stockholms l\u00e4n"},"701":{"code":"SE-C","name":"Uppsala l\u00e4n"},"702":{"code":"SE-S","name":"V\u00e4rmlands l\u00e4n"},"703":{"code":"SE-AC","name":"V\u00e4sterbottens l\u00e4n"},"704":{"code":"SE-Y","name":"V\u00e4sternorrlands l\u00e4n"},"705":{"code":"SE-U","name":"V\u00e4stmanlands l\u00e4n"},"706":{"code":"SE-O","name":"V\u00e4stra G\u00f6talands l\u00e4n"}}},"SG":{"name":"Singapura"},"SH":{"name":"Santa Helena"},"SI":{"name":"Eslov\u00eania"},"SJ":{"name":"Svalbard e Jan Mayen"},"SK":{"name":"Eslov\u00e1quia"},"SL":{"name":"Serra Leoa"},"SM":{"name":"San Marino"},"SN":{"name":"Senegal"},"SO":{"name":"Som\u00e1lia"},"SR":{"name":"Suriname","regions":{"678":{"code":"SR-BR","name":"Brokopondo"},"679":{"code":"SR-CM","name":"Commewijne"},"680":{"code":"SR-CR","name":"Coronie"},"681":{"code":"SR-MA","name":"Marowijne"},"682":{"code":"SR-NI","name":"Nickerie"},"683":{"code":"SR-PR","name":"Para"},"684":{"code":"SR-PM","name":"Paramaribo"},"685":{"code":"SR-SA","name":"Saramacca"},"686":{"code":"SR-SI","name":"Sipaliwini"},"687":{"code":"SR-WA","name":"Wanica"}}},"ST":{"name":"S\u00e3o Tom\u00e9 e Pr\u00edncipe"},"SV":{"name":"El Salvador"},"SY":{"name":"S\u00edria"},"SZ":{"name":"Essuat\u00edni"},"TC":{"name":"Ilhas Turcas e Caicos"},"TD":{"name":"Chade"},"TF":{"name":"Territ\u00f3rios Franceses do Sul"},"TG":{"name":"Togo"},"TH":{"name":"Tail\u00e2ndia"},"TJ":{"name":"Tadjiquist\u00e3o"},"TK":{"name":"Tokelau"},"TL":{"name":"Timor-Leste"},"TM":{"name":"Turcomenist\u00e3o"},"TN":{"name":"Tun\u00edsia"},"TO":{"name":"Tonga"},"TR":{"name":"Turquia"},"TT":{"name":"Trinidad e Tobago"},"TV":{"name":"Tuvalu"},"TW":{"name":"Taiwan"},"TZ":{"name":"Tanz\u00e2nia"},"UA":{"name":"Ucr\u00e2nia","regions":{"779":{"code":"UA-43","name":"Avtonomna Respublika Krym"},"755":{"code":"UA-71","name":"Cherkaska oblast"},"756":{"code":"UA-74","name":"Chernihivska oblast"},"757":{"code":"UA-77","name":"Chernivetska oblast"},"758":{"code":"UA-12","name":"Dnipropetrovska oblast"},"759":{"code":"UA-14","name":"Donetska oblast"},"760":{"code":"UA-26","name":"Ivano-Frankivska oblast"},"761":{"code":"UA-63","name":"Kharkivska oblast"},"762":{"code":"UA-65","name":"Khersonska oblast"},"763":{"code":"UA-68","name":"Khmelnytska oblast"},"764":{"code":"UA-35","name":"Kirovohradska oblast"},"780":{"code":"UA-30","name":"Kyiv"},"765":{"code":"UA-32","name":"Kyivska oblast"},"766":{"code":"UA-09","name":"Luhanska oblast"},"767":{"code":"UA-46","name":"Lvivska oblast"},"768":{"code":"UA-48","name":"Mykolaivska oblast"},"769":{"code":"UA-51","name":"Odeska oblast"},"770":{"code":"UA-53","name":"Poltavska oblast"},"771":{"code":"UA-56","name":"Rivnenska oblast"},"781":{"code":"UA-40","name":"Sevastopol"},"772":{"code":"UA-59","name":"Sumska oblast"},"773":{"code":"UA-61","name":"Ternopilska oblast"},"774":{"code":"UA-05","name":"Vinnytska oblast"},"775":{"code":"UA-07","name":"Volynska oblast"},"776":{"code":"UA-21","name":"Zakarpatska oblast"},"777":{"code":"UA-23","name":"Zaporizka oblast"},"778":{"code":"UA-18","name":"Zhytomyrska oblast"}}},"UG":{"name":"Uganda"},"UM":{"name":"Ilhas Menores Distantes dos EUA"},"US":{"name":"Estados Unidos","regions":{"1":{"code":"AL","name":"Alabama"},"2":{"code":"AK","name":"Alaska"},"3":{"code":"AS","name":"American Samoa"},"4":{"code":"AZ","name":"Arizona"},"5":{"code":"AR","name":"Arkansas"},"6":{"code":"AF","name":"Armed Forces Africa"},"7":{"code":"AA","name":"Armed Forces Americas"},"8":{"code":"AC","name":"Armed Forces Canada"},"9":{"code":"AE","name":"Armed Forces Europe"},"10":{"code":"AM","name":"Armed Forces Middle East"},"11":{"code":"AP","name":"Armed Forces Pacific"},"12":{"code":"CA","name":"California"},"13":{"code":"CO","name":"Colorado"},"14":{"code":"CT","name":"Connecticut"},"15":{"code":"DE","name":"Delaware"},"16":{"code":"DC","name":"District of Columbia"},"17":{"code":"FM","name":"Federated States Of Micronesia"}
5744,"18":{"code":"FL","name":"Florida"},"19":{"code":"GA","name":"Georgia"},"20":{"code":"GU","name":"Guam"},"21":{"code":"HI","name":"Hawaii"},"22":{"code":"ID","name":"Idaho"},"23":{"code":"IL","name":"Illinois"},"24":{"code":"IN","name":"Indiana"},"25":{"code":"IA","name":"Iowa"},"26":{"code":"KS","name":"Kansas"},"27":{"code":"KY","name":"Kentucky"},"28":{"code":"LA","name":"Louisiana"},"29":{"code":"ME","name":"Maine"},"30":{"code":"MH","name":"Marshall Islands"},"31":{"code":"MD","name":"Maryland"},"32":{"code":"MA","name":"Massachusetts"},"33":{"code":"MI","name":"Michigan"},"34":{"code":"MN","name":"Minnesota"},"35":{"code":"MS","name":"Mississippi"},"36":{"code":"MO","name":"Missouri"},"37":{"code":"MT","name":"Montana"},"38":{"code":"NE","name":"Nebraska"},"39":{"code":"NV","name":"Nevada"},"40":{"code":"NH","name":"New Hampshire"},"41":{"code":"NJ","name":"New Jersey"},"42":{"code":"NM","name":"New Mexico"},"43":{"code":"NY","name":"New York"},"44":{"code":"NC","name":"North Carolina"},"45":{"code":"ND","name":"North Dakota"},"46":{"code":"MP","name":"Northern Mariana Islands"},"47":{"code":"OH","name":"Ohio"},"48":{"code":"OK","name":"Oklahoma"},"49":{"code":"OR","name":"Oregon"},"50":{"code":"PW","name":"Palau"},"51":{"code":"PA","name":"Pennsylvania"},"52":{"code":"PR","name":"Puerto Rico"},"53":{"code":"RI","name":"Rhode Island"},"54":{"code":"SC","name":"South Carolina"},"55":{"code":"SD","name":"South Dakota"},"56":{"code":"TN","name":"Tennessee"},"57":{"code":"TX","name":"Texas"},"58":{"code":"UT","name":"Utah"},"59":{"code":"VT","name":"Vermont"},"60":{"code":"VI","name":"Virgin Islands"},"61":{"code":"VA","name":"Virginia"},"62":{"code":"WA","name":"Washington"},"63":{"code":"WV","name":"West Virginia"},"64":{"code":"WI","name":"Wisconsin"},"65":{"code":"WY","name":"Wyoming"}}},"UY":{"name":"Uruguai"},"UZ":{"name":"Uzbequist\u00e3o"},"VA":{"name":"Cidade do Vaticano"},"VC":{"name":"S\u00e3o Vicente e Granadinas"},"VE":{"name":"Venezuela","regions":{"711":{"code":"VE-Z","name":"Amazonas"},"712":{"code":"VE-B","name":"Anzo\u00e1tegui"},"713":{"code":"VE-C","name":"Apure"},"714":{"code":"VE-D","name":"Aragua"},"715":{"code":"VE-E","name":"Barinas"},"716":{"code":"VE-F","name":"Bol\u00edvar"},"717":{"code":"VE-G","name":"Carabobo"},"718":{"code":"VE-H","name":"Cojedes"},"719":{"code":"VE-Y","name":"Delta Amacuro"},"709":{"code":"VE-W","name":"Dependencias Federales"},"710":{"code":"VE-A","name":"Distrito Capital"},"720":{"code":"VE-I","name":"Falc\u00f3n"},"721":{"code":"VE-J","name":"Gu\u00e1rico"},"722":{"code":"VE-K","name":"Lara"},"723":{"code":"VE-L","name":"M\u00e9rida"},"724":{"code":"VE-M","name":"Miranda"},"725":{"code":"VE-N","name":"Monagas"},"726":{"code":"VE-O","name":"Nueva Esparta"},"727":{"code":"VE-P","name":"Portuguesa"},"728":{"code":"VE-R","name":"Sucre"},"729":{"code":"VE-S","name":"T\u00e1chira"},"730":{"code":"VE-T","name":"Trujillo"},"731":{"code":"VE-X","name":"Vargas"},"732":{"code":"VE-U","name":"Yaracuy"},"733":{"code":"VE-V","name":"Zulia"}}},"VG":{"name":"Ilhas Virgens Brit\u00e2nicas"},"VI":{"name":"Ilhas Virgens Americanas"},"VN":{"name":"Vietn\u00e3"},"VU":{"name":"Vanuatu"},"WF":{"name":"Wallis e Futuna"},"WS":{"name":"Samoa"},"YE":{"name":"I\u00eamen"},"YT":{"name":"Mayotte"},"ZA":{"name":"\u00c1frica do Sul"},"ZM":{"name":"Z\u00e2mbia"},"ZW":{"name":"Zimb\u00e1bue"},"data_id":1791588099},"captcha":[],"instant-purchase":[],"loggedAsCustomer":[],"persistent":[],"review":[],"payments":[],"wishlist":{"items":[]},"gtm":{"push":[]},"hyva_checkout":[],"mst-tm-addtocart":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[],"paypal-buyer-country":[]}</script>
5744
5745
5746<div x-data="hyva.modal()"
5747>
5748    <div x-cloak    x-bind="overlay('mst-geoip-popup')"
5749    x-spread="overlay('mst-geoip-popup')"
5750    class="fixed inset-0 bg-black/50 z-50">
5751    <div class="fixed flex justify-center items-center text-left z-40 px-4 inset-0 flex-col w-max max-w-full left-1/2 -translate-x-1/2 md:px-12 md:pt-20">
5752        <button
5753            type="button"
5754            class="w-12 h-12 rounded-full shrink-0 flex items-center justify-center text-primary bg-white mb-4 md:mb-0 md:ml-auto md:-mr-12"
5755            aria-label="Close modal"
5756            @click="hide"
5757        >
5758            <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-6 h-6" width="18" height="18" aria-hidden="true">
5759  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
5760</svg>
5761        </button>
5762        <div x-ref="mst-geoip-popup" role="dialog" aria-modal="true"
5763                                                  class="inline-block bg-white shadow-xl rounded-lg p-10 max-h-screen overflow-auto overscroll-y-contain px-8 md:px-10 w-full max-w-2xl">
5764            
5765<script>
5766    function mstGeoIpPopup() {
5767        return {
5768            isOpen: false,
5769            isNotification: false,
5770            isConfirmation: true,
5771            isAjaxMode: 'true',
5772            isShowRequest: 'false',
5773            acceptUrl: 'https://stata-brazil.com/geo_ip/action/accept/',
5774            rejectUrl: 'https://stata-brazil.com/geo_ip/action/reject/',
5775            redirectEnabled: true,
5776
5777            handleAccept: function () {
5778                if (this.isAjaxMode) {
5779                    window.dispatchEvent(new Event("mstGeoIpProcessRedirectAccept"));
5780                    this.isOpen = false;
5781                    this.$dispatch('close-geo-modal');
5782                } else {
5783                    window.location.href = this.acceptUrl
5784                }
5785            },
5786
5787            handleDecline: function () {
5788                if (this.isAjaxMode) {
5789                    window.dispatchEvent(new Event("mstGeoIpProcessRedirectReject"));
5790                    this.isOpen = false;
5791                    this.$dispatch('close-geo-modal');
5792                } else {
5793                    window.location.href = this.rejectUrl
5794                }
5795            },
5796
5797            handleOk: function () {
5798                if (this.isAjaxMode) {
5799                    window.dispatchEvent(new Event("mstGeoIpProcessRedirectDone"));
5800                    this.isOpen = false;
5801                    this.$dispatch('close-geo-modal');
5802                } else {
5803                    window.location.href = this.acceptUrl
5804                }
5805            },
5806
5807            mstGeoIpPopupInit() {
5808                if (this.isAjaxMode) {
5809                    window.addEventListener('mstGeoIpPopupOpen', function (event) {
5810                        window.dispatchEvent(
5811                            new CustomEvent('hyva-modal-show', {detail: {dialog: 'mst-geoip-popup'}})
5812                        )
5813                        this.isOpen = true;
5814                    }.bind(this));
5815                } else {
5816                    if (this.isShowRequest) {
5817                        window.dispatchEvent(
5818                            new CustomEvent('hyva-modal-show', {detail: {dialog: 'mst-geoip-popup'}})
5819                        )
5820                        this.isOpen = true;
5821                    }
5822                }
5823            },
5824
5825            eventListeners: {
5826                ['@open-store-selector.window']($event) {
5827                    this.redirectEnabled = ($event.detail.redirectEnabled)
5828                },
5829            }
5830        }
5831    }
5832</script>
5832
5833
5834<div x-data="mstGeoIpPopup()" x-init="mstGeoIpPopupInit()"
5835     @close-geo-modal.window="hide"
5836     x-bind="eventListeners"
5837>
5838    <div class="text-center">
5839                    <template x-if="redirectEnabled">
5840                <div>
5841                    <p class="text-2xl lg:text-[40px]/[48px] text-primary mb-1 font-bold" role="heading">Mude para sua loja local</p>
5842                    <p class="text-base text-secondary mb-1">Para uma melhor experiência, recomendamos visitar a sua loja local</p>
5843                    <div class="actions flex items-center justify-center gap-2">
5844                                                    <button @click="handleAccept" class="action btn btn-primary grow">Aceitar</button>
5845                            <button @click="handleDecline" class="action btn btn-secondary grow">Declínio</button>
5846                                                                    </div>
5847                    <div class="relative my-4
5848        before:bg-brightBlue/50 before:rounded-sm before:w-[calc(50%-30px)] before:h-px before:absolute before:left-0 before:top-1/2 before:-translate-y-1/2
5849        after:bg-brightBlue/50 after:rounded-sm after:w-[calc(50%-30px)] after:h-px after:absolute after:right-0 after:top-1/2 after:-translate-y-1/2">
5850                        <span class="w-10 h-10 text-sm flex items-center justify-center mx-auto rounded-full bg-pastelBlue">OR</span>
5851                    </div>
5852                </div>
5853            </template>
5854        
5855        <div>
5856            <p class="text-base text-secondary mb-1">Selecione sua região para continuar</p>
5857            <div class="pt-2 pb-4">
5858                <img fetchpriority="high" 
5859                    class="mx-auto mb-4"
5860                    src="https://stata-brazil.com/static/version1790944496/frontend/TimberlakeHyva/timberlake/pt_BR/images/logo.svg"
5861                    alt="Timberlake&#x20;Stores"
5862                    width="189"
5863                    height="64"
5864                />
5865                <ul class="grid grid-cols-2 md:grid-cols-3 gap-4 items-center pl-[50px]">
5866                                        <li>
5867                        <a href="https://stata-brazil.com/stores/store/redirect/___store/stata_uk/___from_store/stata_br/uenc/aHR0cHM6Ly9zdGF0YS11ay5jb20vY3VzdG9tZXIvYWNjb3VudC9sb2dpbi9yZWZlcmVyL2FIUjBjSE02THk5emRHRjBZUzFpY21GNmFXd3VZMjl0TDJOMWMzUnZiV1Z5TDJGalkyOTFiblF2YVc1a1pYZ3Yv/" class="flex items-center gap-x-1 rounded-3xl p-2 transition-all duration-300 hover:shadow focus:shadow">
5868                            <img fetchpriority="high"  src="https&#x3A;&#x2F;&#x2F;stata-brazil.com&#x2F;static&#x2F;version1790944496&#x2F;frontend&#x2F;TimberlakeHyva&#x2F;timberlake&#x2F;pt_BR&#x2F;images&#x2F;flags&#x2F;uk.png"
5869                                 alt="UK&#x20;&amp;&#x20;World"
5870                                 class="w-8 aspect-square rounded-full">
5871                            <span class="block text-l text-neutralGray-700"> UK &amp; World</span>
5872                        </a>
5873                    </li>
5874                                        <li>
5875                        <a href="https://stata-brazil.com/stores/store/redirect/___store/pl/___from_store/stata_br/uenc/aHR0cHM6Ly90aW1iZXJsYWtlLmNvL3BsL2N1c3RvbWVyL2FjY291bnQvbG9naW4vcmVmZXJlci9hSFIwY0hNNkx5OXpkR0YwWVMxaWNtRjZhV3d1WTI5dEwyTjFjM1J2YldWeUwyRmpZMjkxYm5RdmFXNWtaWGd2Lw~~/" class="flex items-center gap-x-1 rounded-3xl p-2 transition-all duration-300 hover:shadow focus:shadow">
5876                            <img fetchpriority="high"  src="https&#x3A;&#x2F;&#x2F;stata-brazil.com&#x2F;static&#x2F;version1790944496&#x2F;frontend&#x2F;TimberlakeHyva&#x2F;timberlake&#x2F;pt_BR&#x2F;images&#x2F;flags&#x2F;poland.png"
5877                                 alt="Poland"
5878                                 class="w-8 aspect-square rounded-full">
5879                            <span class="block text-l text-neutralGray-700"> Poland</span>
5880                        </a>
5881                    </li>
5882                                        <li>
5883                        <a href="https://stata-brazil.com/stores/store/redirect/___store/pt/___from_store/stata_br/uenc/aHR0cHM6Ly90aW1iZXJsYWtlLmNvL3B0L2N1c3RvbWVyL2FjY291bnQvbG9naW4vcmVmZXJlci9hSFIwY0hNNkx5OXpkR0YwWVMxaWNtRjZhV3d1WTI5dEwyTjFjM1J2YldWeUwyRmpZMjkxYm5RdmFXNWtaWGd2Lw~~/" class="flex items-center gap-x-1 rounded-3xl p-2 transition-all duration-300 hover:shadow focus:shadow">
5884                            <img loading="lazy"  src="https&#x3A;&#x2F;&#x2F;stata-brazil.com&#x2F;static&#x2F;version1790944496&#x2F;frontend&#x2F;TimberlakeHyva&#x2F;timberlake&#x2F;pt_BR&#x2F;images&#x2F;flags&#x2F;portugal.png"
5885                                 alt="Portugal"
5886                                 class="w-8 aspect-square rounded-full">
5887                            <span class="block text-l text-neutralGray-700"> Portugal</span>
5888                        </a>
5889                    </li>
5890                                        <li>
5891                        <a href="https://stata-brazil.com/stores/store/redirect/___store/stata_es/___from_store/stata_br/uenc/aHR0cHM6Ly9zdGF0YS1zcGFpbi5jb20vY3VzdG9tZXIvYWNjb3VudC9sb2dpbi9yZWZlcmVyL2FIUjBjSE02THk5emRHRjBZUzFpY21GNmFXd3VZMjl0TDJOMWMzUnZiV1Z5TDJGalkyOTFiblF2YVc1a1pYZ3Yv/" class="flex items-center gap-x-1 rounded-3xl p-2 transition-all duration-300 hover:shadow focus:shadow">
5892                            <img loading="lazy"  src="https&#x3A;&#x2F;&#x2F;stata-brazil.com&#x2F;static&#x2F;version1790944496&#x2F;frontend&#x2F;TimberlakeHyva&#x2F;timberlake&#x2F;pt_BR&#x2F;images&#x2F;flags&#x2F;spain.png"
5893                                 alt="Spain"
5894                                 class="w-8 aspect-square rounded-full">
5895                            <span class="block text-l text-neutralGray-700"> Spain</span>
5896                        </a>
5897                    </li>
5898                                        <li>
5899                        <a href="https://stata-brazil.com/stores/store/redirect/___store/ae/___from_store/stata_br/uenc/aHR0cHM6Ly90aW1iZXJsYWtlLmNvL2FlL2N1c3RvbWVyL2FjY291bnQvbG9naW4vcmVmZXJlci9hSFIwY0hNNkx5OXpkR0YwWVMxaWNtRjZhV3d1WTI5dEwyTjFjM1J2YldWeUwyRmpZMjkxYm5RdmFXNWtaWGd2Lw~~/" class="flex items-center gap-x-1 rounded-3xl p-2 transition-all duration-300 hover:shadow focus:shadow">
5900                            <img loading="lazy"  src="https&#x3A;&#x2F;&#x2F;stata-brazil.com&#x2F;static&#x2F;version1790944496&#x2F;frontend&#x2F;TimberlakeHyva&#x2F;timberlake&#x2F;pt_BR&#x2F;images&#x2F;flags&#x2F;uae.png"
5901                                 alt="UAE"
5902                                 class="w-8 aspect-square rounded-full">
5903                            <span class="block text-l text-neutralGray-700"> UAE</span>
5904                        </a>
5905                    </li>
5906                                        <li>
5907                        <a href="https://stata-brazil.com/stores/store/redirect/___store/stata_br/___from_store/stata_br/uenc/aHR0cHM6Ly9zdGF0YS1icmF6aWwuY29tL2N1c3RvbWVyL2FjY291bnQvbG9naW4vcmVmZXJlci9hSFIwY0hNNkx5OXpkR0YwWVMxaWNtRjZhV3d1WTI5dEwyTjFjM1J2YldWeUwyRmpZMjkxYm5RdmFXNWtaWGd2Lw~~/" class="flex items-center gap-x-1 rounded-3xl p-2 transition-all duration-300 hover:shadow focus:shadow">
5908                            <img loading="lazy"  src="https&#x3A;&#x2F;&#x2F;stata-brazil.com&#x2F;static&#x2F;version1790944496&#x2F;frontend&#x2F;TimberlakeHyva&#x2F;timberlake&#x2F;pt_BR&#x2F;images&#x2F;flags&#x2F;brazil.png"
5909                                 alt="Brazil"
5910                                 class="w-8 aspect-square rounded-full">
5911                            <span class="block text-l text-neutralGray-700"> Brazil</span>
5912                        </a>
5913                    </li>
5914                                        <li>
5915                        <a href="https://stata-brazil.com/stores/store/redirect/___store/stata_fr/___from_store/stata_br/uenc/aHR0cHM6Ly9zdGF0YS1mcmFuY2UuY29tL2N1c3RvbWVyL2FjY291bnQvbG9naW4vcmVmZXJlci9hSFIwY0hNNkx5OXpkR0YwWVMxaWNtRjZhV3d1WTI5dEwyTjFjM1J2YldWeUwyRmpZMjkxYm5RdmFXNWtaWGd2Lw~~/" class="flex items-center gap-x-1 rounded-3xl p-2 transition-all duration-300 hover:shadow focus:shadow">
5916                            <img loading="lazy"  src="https&#x3A;&#x2F;&#x2F;stata-brazil.com&#x2F;static&#x2F;version1790944496&#x2F;frontend&#x2F;TimberlakeHyva&#x2F;timberlake&#x2F;pt_BR&#x2F;images&#x2F;flags&#x2F;france.png"
5917                                 alt="France"
5918                                 class="w-8 aspect-square rounded-full">
5919                            <span class="block text-l text-neutralGray-700"> France</span>
5920                        </a>
5921                    </li>
5922                                    </ul>
5923            </div>
5924        </div>
5925    </div>
5926</div>
5927        </div>
5928    </div>
5929    </div>
5930</div>
5931
5932<script>
5933    function mstGeoIpProcess() {
5934        return {
5935            options: {
5936                ajaxMode: '1',
5937                urlProcess: 'https://stata-brazil.com/geo_ip/action/process/',
5938                urlResult: 'https://stata-brazil.com/geo_ip/action/save/',
5939                redirectUrls: '\u007B\u002253\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fstata\u002Dbrazil.com\u005C\u002Fgeo_ip\u005C\u002Faction\u005C\u002Fredirect\u005C\u002F\u0022,\u00221\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Ftimberlake.co\u005C\u002Fuk\u005C\u002Fgeo_ip\u005C\u002Faction\u005C\u002Fredirect\u005C\u002F\u0022,\u002247\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Ftimberlake.co\u005C\u002Fbr\u005C\u002Fgeo_ip\u005C\u002Faction\u005C\u002Fredirect\u005C\u002F\u0022,\u002248\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Ftimberlake.co\u005C\u002Fae\u005C\u002Fgeo_ip\u005C\u002Faction\u005C\u002Fredirect\u005C\u002F\u0022,\u002249\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Ftimberlake.co\u005C\u002Fpl\u005C\u002Fgeo_ip\u005C\u002Faction\u005C\u002Fredirect\u005C\u002F\u0022,\u002250\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Ftimberlake.co\u005C\u002Fpt\u005C\u002Fgeo_ip\u005C\u002Faction\u005C\u002Fredirect\u005C\u002F\u0022,\u002252\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Ftimberlake.co\u005C\u002Fus\u005C\u002Fgeo_ip\u005C\u002Faction\u005C\u002Fredirect\u005C\u002F\u0022,\u002254\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fstata\u002Dfrance.com\u005C\u002Fgeo_ip\u005C\u002Faction\u005C\u002Fredirect\u005C\u002F\u0022,\u002255\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fstata\u002Duk.com\u005C\u002Fgeo_ip\u005C\u002Faction\u005C\u002Fredirect\u005C\u002F\u0022,\u002257\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fstata\u002Dspain.com\u005C\u002Fgeo_ip\u005C\u002Faction\u005C\u002Fredirect\u005C\u002F\u0022\u007D',
5940
5941                popupTypeNone: 'none',
5942                popupTypeNotification: 'notification',
5943                popupTypeConfirmation: 'confirmation',
5944
5945                ruleSelectorRedirect: 'redirect',
5946                ruleSelectorCurrency: 'currency',
5947                ruleSelectorRestrict: 'restrict',
5948                ruleSelectorStore: 'store',
5949            },
5950            redirectUrl: null,
5951            storeId: null,
5952
5953            send: function (url, dataObj, successCallback) {
5954                dataObj = dataObj || {};
5955                dataObj.form_key = hyva.getFormKey();
5956                const body = new URLSearchParams(dataObj);
5957
5958                fetch(url, {
5959                    method: 'post',
5960                    body: body,
5961                    headers: {contentType: 'application/x-www-form-urlencoded; charset=UTF-8'}
5962                })
5963                    .then(response => response.json())
5964                    .then(function (response) {
5965                        if (successCallback) {
5966                            successCallback(response);
5967                        }
5968                    })
5969            },
5970
5971            redirectHandler: function (responseData) {
5972                if (responseData.redirectUrl === undefined) {
5973                    return;
5974                }
5975
5976                if (responseData.isProcessOnFirstVisit && responseData.isLocationChanged) {
5977                    return;
5978                }
5979
5980                this.redirectUrl = responseData.redirectUrl;
5981
5982                switch (responseData.popupType) {
5983                    case this.options.popupTypeNone:
5984                        window.dispatchEvent(new Event("mstGeoIpProcessRedirectDone"));
5985                        break;
5986                    case this.options.popupTypeNotification:
5987                        window.dispatchEvent(new CustomEvent("mstGeoIpPopupOpen", {detail: {popupTypeNotification: this.options.popupTypeNotification}}));
5988                        break;
5989                    case this.options.popupTypeConfirmation:
5990                        if (responseData.isRequestApproved) {
5991                            window.dispatchEvent(new Event("mstGeoIpProcessRedirectDone"));
5992                        } else if (!responseData.isRequestRejected) {
5993                            window.dispatchEvent(new CustomEvent("mstGeoIpPopupOpen", {detail: {popupTypeConfirmation: this.options.popupTypeConfirmation}}));
5994                        }
5995                        break;
5996                }
5997            },
5998
5999            currencyHandler: function (responseData) {
6000                this.redirectUrl = responseData.redirectUrl;
6001                window.dispatchEvent(new Event("mstGeoIpProcessCurrencyDone"));
6002            },
6003
6004            restrictHandler: function (responseData) {
6005                this.redirectUrl = responseData.redirectUrl;
6006                window.location.href = this.redirectUrl;
6007            },
6008
6009            storeHandler: function (responseData) {
6010                if (responseData.redirectUrl === undefined) {
6011                    return;
6012                }
6013
6014                if (responseData.storeId === undefined) {
6015                    return;
6016                }
6017
6018                if (responseData.isProcessOnFirstVisit && responseData.isLocationChanged) {
6019                    return;
6020                }
6021
6022                this.redirectUrl = responseData.redirectUrl;
6023
6024                switch (responseData.popupType) {
6025                    case this.options.popupTypeNone:
6026                        window.dispatchEvent(new Event("mstGeoIpProcessRedirectDone"));
6027                        break;
6028                    case this.options.popupTypeNotification:
6029                        window.dispatchEvent(new CustomEvent("mstGeoIpPopupOpen", {detail: {popupTypeNotification: this.options.popupTypeNotification}}));
6030
6031                        break;
6032                    case this.options.popupTypeConfirmation:
6033                        if (responseData.isRequestApproved) {
6034                            window.dispatchEvent(new Event("mstGeoIpProcessRedirectDone"));
6035                        }
6036                        if (!responseData.isRequestApproved && !responseData.isRequestRejected) {
6037                            this.storeId = responseData.storeId;
6038                            window.dispatchEvent(new CustomEvent("mstGeoIpPopupOpen", {detail: {popupTypeConfirmation: this.options.popupTypeConfirmation}}));
6039                        }
6040                        break;
6041                }
6042            },
6043
6044            mstGeoIpProcessInit() {
6045                window.addEventListener('mstGeoIpProcessCurrencyDone', function (event) {
6046                    if (this.redirectUrl === undefined) {
6047                        console.log('redirectUrl is empty');
6048                        return;
6049                    }
6050                    this.send(
6051                        this.options.urlResult,
6052                        {
6053                            ruleSelector: this.options.ruleSelectorCurrency,
6054                            result:       'done'
6055                        },
6056                        function () {
6057                            window.location.href = this.redirectUrl;
6058                        }.bind(this)
6059                    );
6060                }.bind(this));
6061
6062                window.addEventListener('mstGeoIpProcessRedirectDone', function (event) {
6063                    if (this.redirectUrl === undefined) {
6064                        console.log('redirectUrl is empty');
6065                        return;
6066                    }
6067                    this.send(
6068                        this.options.urlResult,
6069                        {
6070                            ruleSelector: this.options.ruleSelectorRedirect,
6071                            result:       'done'
6072                        },
6073                        function () {
6074                            window.location.href = this.redirectUrl;
6075                        }.bind(this)
6076                    );
6077                }.bind(this));
6078
6079                window.addEventListener('mstGeoIpProcessRedirectAccept', function (event) {
6080                    if (this.redirectUrl === undefined) {
6081                        console.log('redirectUrl is empty');
6082                        return;
6083                    }
6084                    let data = {
6085                        ruleSelector: this.options.ruleSelectorRedirect,
6086                        result:       'accept'
6087                    };
6088                    if (this.storeId) {
6089                        data.ruleSelector = this.options.ruleSelectorStore;
6090                        data.storeId = this.storeId;
6091                    }
6092                    this.send(
6093                        this.options.urlResult,
6094                        data,
6095                        function (resp) {
6096                            if (resp['data']['status_after_save']['ruleSelector'] == this.options.ruleSelectorStore) {
6097                                this.redirectUrl = resp['data']['redirectUrl'];
6098                            }
6099
6100                            try {
6101                                let oldUrl = new URL(window.location.href);
6102                                let newUrl = new URL(this.redirectUrl);
6103                                if (newUrl.hostname != oldUrl.hostname) {
6104                                    let redirectUrl = new URL(this.options.redirectUrls[this.storeId]);
6105                                    redirectUrl.searchParams.append('redirectUrl', this.redirectUrl);
6106                                    redirectUrl.searchParams.append('storeId', this.storeId);
6107                                    window.location.href = redirectUrl.href;
6108                                } else {
6109                                    window.location.href = this.redirectUrl;
6110                                }
6111                            } catch (e) {
6112                                window.location.href = this.redirectUrl;
6113                            }
6114                        }.bind(this)
6115                    );
6116                }.bind(this));
6117
6118                window.addEventListener('mstGeoIpProcessRedirectReject', function (event) {
6119                    this.send(
6120                        this.options.urlResult,
6121                        {
6122                            ruleSelector: this.options.ruleSelectorRedirect,
6123                            result:       'reject'
6124                        }
6125                    );
6126                }.bind(this));
6127
6128
6129                const entries = (new URLSearchParams(window.location.search)).entries();
6130                const urlParams = [];
6131                for (const [key, value] of entries) {
6132                    urlParams[key] = value;
6133                }
6134
6135                this.send(this.options.urlProcess, {
6136                        relativePageUrl: window.location.pathname + window.location.search + window.location.hash,
6137                        urlParams: urlParams
6138                    },
6139                    function (response) {
6140                        if (response.data === undefined || response.data.ruleSelector === undefined) {
6141                            return;
6142                        }
6143
6144                        switch (response.data.ruleSelector) {
6145                            case this.options.ruleSelectorRedirect:
6146                                this.redirectHandler(response.data);
6147                                break;
6148                            case this.options.ruleSelectorCurrency:
6149                                this.currencyHandler(response.data);
6150                                break;
6151                            case this.options.ruleSelectorRestrict:
6152                                this.restrictHandler(response.data);
6153                                break;
6154                            case this.options.ruleSelectorStore:
6155                                this.storeHandler(response.data);
6156                                break;
6157                        }
6158
6159                    }.bind(this)
6160                );
6161            },
6162        }
6163    }
6164</script>
6164
6165
6166<div x-data="mstGeoIpProcess()" x-init="mstGeoIpProcessInit()"></div>
6167</div>
6167<script>
6168    window.dataLayer = window.dataLayer || [];
6169    window.mstGtmProducts = window.mstGtmProducts || [];
6170    window.mstGtmProductVariants = window.mstGtmProductVariants || [];
6171
6172    var mstGtmStorage = window.sessionStorage.getItem('mst_gtm');
6173
6174    mstGtmStorage = mstGtmStorage ? mstGtmStorage : [];
6175
6176    function mstGtmItemPush(item) {
6177        var gtmStorageKey = '';
6178
6179        if (typeof item.analytics_type != 'undefined') {
6180            gtmStorageKey = gtmStorageKey + item.analytics_type + '_';
6181        }
6182        if (typeof item.gtm_id != 'undefined') {
6183            gtmStorageKey = gtmStorageKey + item.gtm_id;
6184        }
6185
6186        if (typeof item.gtm_id != 'undefined' && !mstGtmStorage.includes(gtmStorageKey)) {
6187            window.dataLayer.push({ecommerce: null});
6188
6189            if (typeof item.analytics_type != 'undefined' && item.analytics_type == 'fbpixel') {
6190                if (typeof fbq != 'undefined') {
6191                    fbq(item[0], item[1], item[2]);
6192                }
6193            } else {
6194                if (typeof item[0] != 'undefined') {
6195                    var formatedObj = {};
6196                    formatedObj[item[0]] = item[1];
6197                    formatedObj['ecommerce'] = item[2];
6198
6199                    window.dataLayer.push(formatedObj);
6200                } else {
6201                    window.dataLayer.push(item);
6202                }
6203            }
6204        } else if (typeof item.event != 'undefined') {
6205            window.dataLayer.push(item);
6206        }
6207    }
6208
6209    
6210    window.mstGtmProducts = [];
6211    window.mstGtmProductVariants = [];
6212    window.sessionStorage.removeItem('mst_gtm');
6213
6214    // clear section storage data
6215    const browserStorage = hyva.getBrowserStorage();
6216    const oldSectionData = JSON.parse(browserStorage.getItem('mage-cache-storage') || '{}') || {};
6217
6218    if (oldSectionData && typeof oldSectionData['gtm'] != 'undefined') {
6219        delete oldSectionData['gtm'];
6220    }
6221    const privateContentEvent = new CustomEvent("private-content-loaded", {
6222        detail: {
6223            data: oldSectionData
6224        }
6225    });
6226
6227    window.dispatchEvent(privateContentEvent);
6228
6229    browserStorage.setItem('mage-cache-storage', JSON.stringify(oldSectionData));
6230</script>
6230
6231 
6231<script>
6232    function getMstEventSelector() {
6233        return {
6234            gtmAttrRegex: /^data-gtm-(.*)/g,
6235
6236            eventAttr:    'data-gtm-event',
6237            listAttr:     'data-gtm-item_list_id',
6238            listNameAttr: 'data-gtm-item_list_name',
6239            productAttr:  'data-gtm-item_id',
6240
6241            eventSelector:   '[data-gtm-event]',
6242            listSelector:    '[data-gtm-item_list_id]',
6243            productSelector: '[data-gtm-item_id]',
6244
6245            sentLists: [],
6246
6247            getProductAttribute: function () {
6248                return this.productAttr;
6249            },
6250
6251            getListAttribute: function () {
6252                return this.listAttr;
6253            },
6254
6255            getListNameAttribute: function () {
6256                return this.listNameAttr;
6257            },
6258
6259            getEventAttribute: function () {
6260                return this.eventAttr;
6261            },
6262
6263            getEventSelector: function () {
6264                return this.eventSelector;
6265            },
6266
6267            getListSelector: function () {
6268                return this.listSelector;
6269            },
6270
6271            getProductSelector: function () {
6272                return this.productSelector;
6273            },
6274
6275            getAttributeRegex: function () {
6276                return this.gtmAttrRegex;
6277            }
6278        }
6279    }
6280</script>
6280 
6280<script>
6281    function getMstAbstractEvent() {
6282        return {
6283            gtmAttrRegex: /^data-gtm-(.*)/g,
6284
6285            eventAttr:    'data-gtm-event',
6286            listAttr:     'data-gtm-item_list_id',
6287            listNameAttr: 'data-gtm-item_list_name',
6288            productAttr:  'data-gtm-item_id',
6289
6290            eventSelector:  '',
6291            listSelector:  '',
6292            productSelector:  '',
6293
6294            sentLists: [],
6295
6296            initialize: function () {
6297                this.gtmAttrRegex    = getMstEventSelector().getAttributeRegex();
6298                this.eventAttr       = getMstEventSelector().getEventAttribute();
6299                this.listAttr        = getMstEventSelector().getListAttribute();
6300                this.listNameAttr    = getMstEventSelector().getListNameAttribute();
6301                this.productAttr     = getMstEventSelector().getProductAttribute();
6302                this.listSelector    = getMstEventSelector().getListSelector();
6303                this.productSelector = getMstEventSelector().getProductSelector();
6304
6305                this.initEventSelector();
6306
6307                window.dataLayer = window.dataLayer || [];
6308
6309                this.listeners();
6310
6311                return this;
6312            },
6313
6314            initEventSelector: function () {
6315                this.eventSelector = getMstEventSelector().getEventSelector();
6316            },
6317
6318            listeners: function () {
6319
6320            },
6321
6322            sendData: function ($el) {
6323
6324            },
6325
6326            setGaData: function ($listEl, productIds) {
6327
6328            },
6329
6330            isVisible: function ($el) {
6331                if (!$el.is(":visible")) {
6332                    return false;
6333                }
6334
6335                const $win = $(window);
6336
6337                const elementTop = $el.offset().top;
6338                const elementBottom = elementTop + $el.outerHeight();
6339
6340                const viewportTop = $win.scrollTop();
6341                const viewportBottom = viewportTop + $win.height();
6342
6343                return elementBottom > viewportTop && elementTop < viewportBottom;
6344            },
6345
6346            getProductAttribute: function () {
6347                return this.productAttr;
6348            },
6349
6350            getProductSelector: function () {
6351                return this.productSelector;
6352            }
6353        }
6354    }
6355    window.addEventListener('alpine:init', () => Alpine.data('getMstAbstractEvent', getMstAbstractEvent), { once: true });
6356</script>
6356
6357 
6357<script>
6358    function initMstViewItemSwatchers() {
6359        const abstractEvent = getMstAbstractEvent();
6360
6361        return {
6362            ...abstractEvent,
6363
6364            listeners: function () {
6365                window.addEventListener('configurable-selection-changed', e => {
6366                    if (!e.detail || !e.detail.productIndex) {
6367                        return
6368                    }
6369
6370                    const productID = e.detail.productIndex
6371
6372                    if (typeof window.mstGtmProductVariants[productID] == 'undefined') return
6373
6374                    window.mstGtmProductVariants[productID].forEach(item => {
6375                        mstGtmItemPush(item)
6376                    })
6377                })
6378            }
6379        }
6380    }
6381    window.addEventListener('alpine:init', () => Alpine.data('initMstViewItemSwatchers', initMstViewItemSwatchers), {once: true});
6382</script>
6382
6383 
6383<script>
6384    function initMstSelectItem() {
6385        const abstractEvent = getMstAbstractEvent();
6386
6387        return {
6388            ...abstractEvent,
6389
6390            redirectUrl: '',
6391
6392            listeners: function () {
6393                const products = document.querySelectorAll(this.productSelector);
6394
6395                if (products.length) {
6396                    products.forEach(function (product) {
6397                        product.querySelectorAll('a').forEach(function (productLink) {
6398                            productLink.addEventListener('click', function (e) {
6399                                e.preventDefault();
6400
6401                                let $currentEl = e.currentTarget;
6402                                let $productEl = e.currentTarget.closest(this.productSelector);
6403                                let $listEl = $productEl.closest(this.listSelector);
6404
6405                                this.redirectUrl = $currentEl.attr('href');
6406
6407                                let productIds = [];
6408
6409                                if ($productEl && $listEl.length) {
6410                                    let productId = parseInt($productEl.getAttribute(this.productAttr));
6411
6412                                    if (productId) {
6413                                        productIds.push(productId);
6414
6415                                        this.setGaData($listEl, productIds);
6416                                    }
6417                                }
6418
6419                                window.location = this.redirectUrl;
6420                            }.bind(this))
6421                        }.bind(this));
6422                    }.bind(this));
6423                }
6424            },
6425
6426            setGaData: function ($listEl, productIds) {
6427                let listId = $listEl.getAttribute(this.listAttr);
6428                let listName = $listEl.getAttribute(this.listNameAttr);
6429
6430                let productId = productIds[0];
6431
6432                window.dataLayer.push({ecommerce: null});  // Clear the previous ecommerce object.
6433                if (typeof gtag != 'undefined') {
6434                    gtag('event', 'select_item', {
6435                        item_list_id:   listId,
6436                        item_list_name: listName,
6437                        items:          [window.mstGtmProducts[productId]]
6438                    })
6439                } else {
6440                    var formatedObj = {};
6441                    formatedObj['event'] = 'select_item';
6442                    formatedObj['ecommerce'] = {
6443                        item_list_id: listId,
6444                        item_list_name: listName,
6445                        items: [window.mstGtmProducts[productId]]
6446                    };
6447
6448                    window.dataLayer.push(formatedObj);
6449                }
6450            }
6451        }
6452    }
6453</script>
6453
6454 
6454<script>
6455    function initMstItemList() {
6456        const abstractEvent = getMstAbstractEvent();
6457
6458        return {
6459            ...abstractEvent,
6460
6461            isLoading: false,
6462
6463            initEventSelector: function () {
6464                this.eventSelector = '[' + this.eventAttr + '="view_item_list"]';
6465            },
6466
6467            listeners: function () {
6468                document.addEventListener('mst-gtm-init-products', function() {
6469                    document.querySelectorAll(this.eventSelector).forEach(function (el) {
6470                        if (this.isVisible(el)) {
6471                            this.sendData(el);
6472                        }
6473                    }.bind(this));
6474                }.bind(this));
6475            },
6476
6477            sendData: function ($el) {
6478                let $listEl     = $el.querySelector(this.listSelector);
6479                let $productEls = $el.querySelectorAll(this.productSelector);
6480
6481                if (!$listEl && $el.hasAttribute(this.listAttr)) {
6482                    $listEl = $el;
6483                }
6484
6485                let productIds = [];
6486
6487                $productEls.forEach(function (productEl) {
6488                    let productId = parseInt(productEl.getAttribute(this.productAttr));
6489
6490                    if (productId) {
6491                        productIds.push(productId);
6492                    }
6493                }.bind(this));
6494
6495                if (productIds.length) {
6496                    this.setGaData($listEl, productIds);
6497                }
6498            },
6499
6500            setGaData: function ($listEl, productIds) {
6501                let listId   = $listEl.getAttribute(this.listAttr);
6502                let listName = $listEl.getAttribute(this.listNameAttr);
6503
6504                if (typeof this.sentLists[listId] == 'undefined' || !this.sentLists[listId]) {
6505                    this.sentLists[listId] = true;
6506
6507                    let currency = '';
6508
6509                    let items = [];
6510                    for (var i in productIds) {
6511                        items.push(window.mstGtmProducts[productIds[i]]);
6512
6513                        if (typeof window.mstGtmProducts[productIds[i]].currency != 'undefined') {
6514                            currency = window.mstGtmProducts[productIds[i]].currency;
6515                        }
6516                    }
6517
6518                    window.dataLayer.push({ecommerce: null});  // Clear the previous ecommerce object.
6519                    window.dataLayer.push('event', 'view_item_list', {
6520                            item_list_id:   listId,
6521                            item_list_name: listName,
6522                            items:          [items]
6523                        }
6524                    );
6525                }
6526            }
6527        }
6528    }
6529</script>
6529
6530 
6530<script>
6531    function initMstSelectPromotion() {
6532        const abstractEvent = getMstAbstractEvent();
6533
6534        return {
6535            ...abstractEvent,
6536
6537            creativeNameAttr: 'data-gtm-creative_name',
6538            creativeSlotAttr: 'data-gtm-creative_slot',
6539
6540            promolistIdAttr: 'data-gtml-promo-list-id',
6541
6542            itemIdAttr:   'data-gtm-item_id',
6543            itemNameAttr: 'data-gtm-item_name',
6544
6545            initEventSelector: function () {
6546                this.eventSelector = '[' + this.eventAttr + '="view_promotion"]';
6547            },
6548
6549            listeners: function () {
6550                let itemIdSelector   = '[' + this.itemIdAttr + ']',
6551                    itemNameSelector = '[' + this.itemNameAttr + ']';
6552
6553                document.addEventListener('DOMContentLoaded', function () {
6554                    const eventIdItems = document.querySelectorAll(this.eventSelector + ' ' + itemIdSelector);
6555
6556                    if (eventIdItems.length) {
6557                        eventIdItems.forEach(function (item) {
6558                            item.addEventListener('click', function (e) {
6559                                this.sendData(e.currentTarget);
6560                            }.bind(this));
6561                        }.bind(this));
6562                    }
6563
6564                    const eventNameItems = document.querySelectorAll(this.eventSelector + ' ' + itemNameSelector);
6565
6566                    if (eventNameItems.length) {
6567                        eventNameItems.forEach(function (item) {
6568                            item.addEventListener('click', function (e) {
6569                                this.sendData(e.currentTarget);
6570                            }.bind(this));
6571                        }.bind(this));
6572                    }
6573                }.bind(this));
6574            },
6575
6576            sendData: function ($el) {
6577                this.setGaData($el, null);
6578            },
6579
6580            setGaData: function ($listEl, productIds) {
6581                let $itemEl = $listEl;
6582                let $eventEl = $itemEl.closest(this.eventSelector);
6583
6584                let items = [];
6585
6586                let item = [];
6587
6588                $itemEl.attributes.forEach(function (attr) {
6589                    if (attr.name.match(this.gtmAttrRegex)) {
6590                        let attrName = attr.name.replace(this.gtmAttrRegex, '$1');
6591
6592                        item[attrName] = attr.value;
6593                    }
6594                }.bind(this));
6595
6596                items.push(item);
6597
6598                let eventItems = {items: items};
6599
6600                $eventEl.attributes.forEach(function (attr) {
6601                    if (attr.name.match(this.gtmAttrRegex)) {
6602                        let attrName = attr.name.replace(this.gtmAttrRegex, '$1');
6603
6604                        eventItems[attrName] = attr.value;
6605                    }
6606                }.bind(this));
6607
6608                window.dataLayer.push({ecommerce: null});  // Clear the previous ecommerce object.
6609                if (typeof gtag != 'undefined') {
6610                    gtag('event', 'select_promotion', eventItems);
6611                } else {
6612                    var formatedObj = {};
6613                    formatedObj['event'] = 'select_promotion';
6614                    formatedObj['ecommerce'] = eventItems;
6615
6616                    window.dataLayer.push(formatedObj);
6617                }
6618            }
6619        }
6620    }
6621</script>
6621
6622 
6622<script>
6623    function initMstViewPromotion() {
6624        const abstractEvent = getMstAbstractEvent();
6625
6626        return {
6627            ...abstractEvent,
6628
6629            creativeNameAttr: 'data-gtm-creative_name',
6630            creativeSlotAttr: 'data-gtm-creative_slot',
6631
6632            promolistIdAttr: 'data-gtml-promo-list-id',
6633
6634            itemIdAttr:   'data-gtm-item_id',
6635            itemNameAttr: 'data-gtm-item_name',
6636
6637            initEventSelector: function () {
6638                this.eventSelector = '[' + this.eventAttr + '="view_promotion"]';
6639            },
6640
6641            listeners: function () {
6642                document.addEventListener('DOMContentLoaded', function () {
6643                    const eventItems = document.querySelectorAll(this.eventSelector);
6644
6645                    this.sendData(eventItems);
6646
6647                    // if (eventItems.length) {
6648                    //     eventItems.forEach(function (item) {
6649                    //         if (this.isVisible(item)) {
6650                    //             this.sendData(item);
6651                    //         }
6652                    //     }.bind(this));
6653                    // }
6654                }.bind(this));
6655
6656                window.addEventListener('scroll', function () {
6657                    const eventItems = document.querySelectorAll(this.eventSelector);
6658                    this.sendData(eventItems, null);
6659                }.bind(this));
6660
6661                // $('body').on('contentUpdated', function () {
6662                //     this.sendData($(this.eventSelector), null);
6663                // }.bind(this));
6664            },
6665
6666            sendData: function ($el) {
6667                $el.forEach(function (eventEl, i) {
6668                    if (!eventEl.getAttribute(this.promolistIdAttr)) {
6669                        eventEl.setAttribute(this.promolistIdAttr, i);
6670                    }
6671
6672                    if (this.isVisible(eventEl)) {
6673                        this.setGaData(eventEl, null);
6674                    }
6675                }.bind(this));
6676            },
6677
6678            setGaData: function ($listEl, productIds) {
6679                let itemIdSelector   = '[' + this.itemIdAttr + ']',
6680                    itemNameSelector = '[' + this.itemNameAttr+ ']';
6681
6682                let $eventEl     = $listEl;
6683                let $itemIdEls   = $eventEl.querySelectorAll(itemIdSelector);
6684                let $itemNameEls = $eventEl.querySelectorAll(itemNameSelector);
6685
6686                let listId = $eventEl.getAttribute(this.promolistIdAttr);
6687
6688                let $itemsEls;
6689                if ($itemIdEls.length) {
6690                    $itemsEls = $itemIdEls;
6691                } else {
6692                    $itemsEls = $itemNameEls;
6693                }
6694
6695                if (typeof this.sentLists[listId] == 'undefined' || !this.sentLists[listId]) {
6696                    this.sentLists[listId] = true;
6697
6698                    let items = [];
6699
6700                    $itemsEls.forEach(function ($el) {
6701                        let item = [];
6702
6703                        $el.attributes.forEach(function (attr) {
6704                            if (attr.name.match(this.gtmAttrRegex)) {
6705                                let attrName = attr.name.replace(this.gtmAttrRegex, '$1');
6706
6707                                item[attrName] = attr.value;
6708                            }
6709                        }.bind(this));
6710
6711                        items.push(item);
6712                    }.bind(this));
6713
6714                    let eventItems = {items: items};
6715
6716                    $eventEl[0].attributes.forEach(function (attr) {
6717                        if (attr.name.match(this.gtmAttrRegex)) {
6718                            let attrName = attr.name.replace(this.gtmAttrRegex, '$1');
6719
6720                            eventItems[attrName] = attr.value;
6721                        }
6722                    }.bind(this));
6723
6724                    window.dataLayer.push({ecommerce: null});  // Clear the previous ecommerce object.
6725                    if (typeof gtag != 'undefined') {
6726                        gtag('event', 'view_promotion', eventItems);
6727                    } else {
6728                        var formatedObj = {};
6729                        formatedObj['event'] = 'view_promotion';
6730                        formatedObj['ecommerce'] = eventItems;
6731
6732                        window.dataLayer.push(formatedObj);
6733                    }
6734                }
6735            }
6736        }
6737    }
6738</script>
6738
6739 <div x-data="initGtmProductStorage" @private-content-loaded.window="initialize"></div>
6740
6741<script>
6742    function initGtmProductStorage() {
6743        return {
6744            isLoading:    false,
6745            isInitEvents: false,
6746            itemInfoUrl:  BASE_URL + '/mst_gtm/item/info/',
6747
6748            initialize: function () {
6749                setInterval(this.updateProducts.bind(this), 200);
6750            },
6751
6752            getProductData: function (id) {
6753                return window.mstGtmProducts[id];
6754            },
6755
6756            updateProducts: function () {
6757                if (this.isLoading) {
6758                    return;
6759                }
6760
6761                let $productEls = document.querySelectorAll(getMstEventSelector().getProductSelector());
6762
6763                let missedIds = [];
6764
6765                if ($productEls.length) {
6766                    $productEls.forEach(function (productEl) {
6767                        let productId = parseInt(productEl.getAttribute(getMstEventSelector().getProductAttribute()));
6768
6769                        if (!productId || typeof window.mstGtmProducts[productId] == 'undefined') {
6770                            missedIds.push(productEl.getAttribute(getMstEventSelector().getProductAttribute()));
6771                        }
6772                    }.bind(this));
6773                }
6774
6775                if (missedIds.length) {
6776                    this.isLoading = true;
6777
6778                    const data = new FormData();
6779
6780                    data.append('product_ids', missedIds);
6781
6782                    fetch(this.itemInfoUrl + '?form_key=' + hyva.getFormKey(), {
6783                        method:  'post',
6784                        body:    data,
6785                        headers: {contentType: 'application/json'}
6786                    }).then(response => {
6787                        if (response.ok) {
6788                            return response.json();
6789                        } else {
6790                            console.warn("GET request failed", response);
6791                        }
6792                    }).then(response => {
6793                        if (response) {
6794                            if (typeof response.data != 'undefined' && response.data.length) {
6795                                for (var i in response.data) {
6796                                    window.mstGtmProducts[response.data[i]['product_id']] = response.data[i];
6797                                }
6798                            }
6799                            this.isLoading = false;
6800
6801                            // instead of $(document).ready()
6802                            document.dispatchEvent(new CustomEvent('mst-gtm-init-products'));
6803                        }
6804                    });
6805                }
6806            }
6807        };
6808    }
6809    window.addEventListener('alpine:init', () => Alpine.data('initGtmProductStorage', initGtmProductStorage), { once: true });
6810</script>
6810
6811 <div x-data="initGtmLayer" x-init="initLayer" x-ref="layerHandler"></div>
6812
6813<script>
6814    function initGtmLayer() {
6815        return {
6816            initLayer: function (data) {
6817                if (data && data.gtm && data.gtm.push) {
6818                    const gtm = data.gtm;
6819
6820                    this.onUpdate(gtm);
6821                }
6822            },
6823
6824            onUpdate: function (data) {
6825                data.push.forEach(item => {
6826                    if (item) {
6827                        mstGtmItemPush(item)
6828                    }
6829                });
6830            }
6831        }
6832    }
6833    window.addEventListener('alpine:init', () => Alpine.data('initGtmLayer', initGtmLayer), { once: true });
6834    document.addEventListener("private-content-loaded", (event) => {
6835        const layerHandler = document.querySelector('[x-ref="layerHandler"]');
6836        if (layerHandler && layerHandler.__x) {
6837            layerHandler.__x.initialize(event.detail.data);
6838        }
6839    });
6840</script>
6840
6841     <div x-data="initMstAddToCart" @private-content-loaded.window="initialize"></div>
6842    
6842<script>
6843        function initMstAddToCart() {
6844            return {
6845                initialize: function () {
6846                    const data = this.$event.detail.data;
6847                    if (data["mst-tm-addtocart"] && Object.keys(data["mst-tm-addtocart"]).length) {
6848                        const gtm = data["mst-tm-addtocart"]
6849                        this.onUpdate(gtm)
6850                    }
6851                },
6852
6853                onUpdate: function (data) {
6854                    data.push.forEach(item => mstGtmItemPush(item));
6855                }
6856            }
6857        }
6858        window.addEventListener('alpine:init', () => Alpine.data('initMstAddToCart', initMstAddToCart), {once: true});
6859    </script>
6859
6860 <div x-data="initMstGtmEvents" @private-content-loaded.window="initialize"></div>
6861<script>
6862    function initMstGtmEvents() {
6863        return {
6864            initialize: function () {
6865                initMstSelectItem().initialize();
6866                initMstItemList().initialize();
6867                initMstSelectPromotion().initialize();
6868                initMstViewPromotion().initialize();
6869                initMstViewItemSwatchers().initialize();
6870            }
6871        }
6872    }
6873    window.addEventListener('alpine:init', () => Alpine.data('initMstGtmEvents', initMstGtmEvents), { once: true });
6874</script>
6874
6875 <div x-data="initGtmToolbar" @private-content-loaded.window="initToolbar"></div>
6876<script>
6877    function initGtmToolbar() {
6878        return {
6879            cookieName: 'mst_gtm_debug',
6880            debugOn: 'gtm',
6881
6882            wrapperClassList: 'mst-gtm__toolbar fixed left-4 bottom-4 card p-0 rounded-none text-sm w-80',
6883            titleClassList: 'btn btn-primary rounded-none text-center block font-semibold',
6884            bodyClassList: 'mst-gtm__toolbar-body overflow-y-auto',
6885            eventClassList: 'mst-gtm__toolbar-event card m-2 p-2 border-grey-200 border-2 relative cursor-pointer',
6886            idxClassList: 'bg-blue-600 px-2 py-1 mr-3 text-white font-normal',
6887            linkClassList: 'float-right text-gray-400 mr-2 underline',
6888            extraClassList: 'mst-gtm__toolbar-extra fixed bottom-4 card rounded-none text-xs',
6889            preClassList: 'overflow-auto p-2 whitespace-pre-wrap leading-5',
6890
6891            initToolbar: function () {
6892                const currentUrl = new URL(window.location);
6893
6894                if (currentUrl.searchParams.get('debug') === this.debugOn) {
6895                    if (hyva.getCookie(this.cookieName) === this.debugOn) {
6896                        hyva.setCookie(this.cookieName, '', 1);
6897                    } else {
6898                        hyva.setCookie(this.cookieName, this.debugOn, 1);
6899                    }
6900                }
6901
6902                if (hyva.getCookie(this.cookieName) === this.debugOn) {
6903                    const elements = document.getElementsByClassName('mst-gtm__toolbar');
6904                    while (elements.length > 0) {
6905                        elements[0].parentNode.removeChild(elements[0]);
6906                    }
6907
6908                    document.body.appendChild(this.getWrapperHtml());
6909
6910                    this.$toolbarBody = document.querySelector('.mst-gtm__toolbar-body');
6911
6912                    let len = 0;
6913                    setInterval(function () {
6914                        if (window.dataLayer.length !== len) {
6915                            this.updateToolbar();
6916
6917                            len = window.dataLayer.length;
6918                        }
6919                    }.bind(this), 1000);
6920                }
6921            },
6922
6923            updateToolbar: function () {
6924                this.$toolbarBody.innerHTML = '';
6925
6926                let index = 1;
6927
6928                window.dataLayer.forEach(function (data) {
6929                    if (typeof data.event != 'undefined') {
6930                        const $displayData = this.createToolbarElement('pre', false, this.preClassList);
6931                        const $code = this.createToolbarElement('code', JSON.stringify(data, undefined, 4));
6932
6933                        $displayData.appendChild($code);
6934
6935                        const $event = this.createToolbarElement('div', false, this.eventClassList);
6936
6937                        $event.appendChild(this.createToolbarElement('strong', '#' + index, this.idxClassList));
6938                        $event.appendChild(this.createToolbarElement('span', 'Event: ' + data.event));
6939                        $event.appendChild(this.createToolbarElement('span', 'Open', this.linkClassList));
6940
6941                        $event.addEventListener('click', function () {
6942                            this.displayData($displayData);
6943                        }.bind(this));
6944
6945                        this.$toolbarBody.appendChild($event);
6946
6947                        index++;
6948                    }
6949                }.bind(this));
6950            },
6951
6952            getWrapperHtml: function () {
6953                const $wrapper = this.createToolbarElement('div', false, this.wrapperClassList);
6954                const $title = this.createToolbarElement('strong', 'Google Tag Manager', this.titleClassList);
6955                const $body = this.createToolbarElement('div', false, this.bodyClassList);
6956
6957                $wrapper.appendChild($title);
6958                $wrapper.appendChild($body);
6959
6960                return $wrapper;
6961            },
6962
6963            displayData: function ($data) {
6964                const toolbarExtra = document.querySelector('body .mst-gtm__toolbar-extra');
6965
6966                if (toolbarExtra) {
6967                    toolbarExtra.parentNode.removeChild(toolbarExtra);
6968                }
6969
6970                const $t = this.createToolbarElement('div', false, this.extraClassList);
6971                $t.appendChild($data);
6972
6973                document.body.appendChild($t);
6974            },
6975
6976            createToolbarElement: function (tagName, data, classList) {
6977                const element = document.createElement(tagName);
6978
6979                if (data) {
6980                    element.innerHTML = data;
6981                }
6982
6983                if (classList) {
6984                    classList = classList.split(' ');
6985                    classList.forEach(function (classItem) {
6986                        element.classList.add(classItem);
6987                    });
6988                }
6989
6990                return element;
6991            }
6992        };
6993    }
6994
6995    window.addEventListener('alpine:init', () => Alpine.data('initGtmToolbar', initGtmToolbar), { once: true });
6996</script>
6996
6997 
6997<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a4811f769cd913eb',t:'MTc5MTU4ODA5OQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
6997</body>
6998</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.