PageSourceSearch

https://www.mrhankeystoys.com/blog

html mrhankeystoys.com collected 2026-10-04 00:08:57 UTC 666,943 bytes, 9,665 lines download raw bytes

1<!doctype html>
2<html lang="en">
3<head >
4        <meta charset="utf-8"/>
5<meta name="title" content="Blog"/>
6<meta name="description" content="Mr. Hankey's sells and manufactures the most Realistic Sex Toys, Dildos, & Fantasy Sex Toys online. All sex toys are made with premium platinum-cured silicone. Shop Now."/>
7<meta name="keywords" content="sex toys, sex toy, Sex toy shop, sex toys shop, sex toy shop near me, shop sex toys, online sex toy shop, adult sex toy shop, sex toys shop near me, sex toy shop online, best online sex toy shop, adult sex toy shops, adult sex toy shops, buy sex toys, sex shop,sex shops near me, adult shops near me, adult toys shop, adult toy shops, online adult stores, adult sex shops near me, online sex toy shops, best sex toy shop, sex toy hop online, adult sex toy shops,  sex toy shop online, sex toys online shop, adult toy shopping"/>
8<meta name="robots" content="INDEX,FOLLOW"/>
9<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"/>
10<title>Blog</title>
11        <link rel="stylesheet" type="text/css" media="all" href="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/css/styles.css" />
12<link rel="stylesheet" type="text/css" media="all" href="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/Afterpay_Afterpay/css/afterpay-express-checkout.css" />
13<link rel="stylesheet" type="text/css" media="all" href="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/Magento_Theme/css/swiper-bundle.min.css" />
14<link rel="stylesheet" type="text/css" media="all" href="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/Algolia_AlgoliaSearch/css/algolia-reset.css" />
15<link rel="stylesheet" type="text/css" media="all" href="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/Algolia_AlgoliaSearch/css/recommend.css" />
16<script type="text/javascript" src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/Magento_PaymentServicesPaypal/js/lib/script-loader.js"></script>
vendor: 1 bytes, line 16
16
17<script type="text/javascript" src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/Magento_Theme/js/equal-height.js"></script>
vendor: 1 bytes, line 17
17
18<script type="text/javascript" src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/Smile_ElasticsuiteTracker/js/tracking.js"></script>
vendor: 1 bytes, line 18
18
19<script type="text/javascript" src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/Magento_Theme/js/swiper-bundle.min.js"></script>
19
20<link rel="canonical" href="https://www.mrhankeystoys.com/blog" />
21<link rel="next" href="https://www.mrhankeystoys.com/blog?page=2" />
22<link rel="icon" type="image/x-icon" href="https://www.mrhankeystoys.com/media/favicon/default/favicon-32x32_1.png" />
23<link rel="shortcut icon" type="image/x-icon" href="https://www.mrhankeystoys.com/media/favicon/default/favicon-32x32_1.png" />
24<style>
25.catalog-category-view .product-image-photo {
26 width: 100% !important;
27}
28</style>    <!-- Google Tag Manager -->
29    
30                    
30<script>
31        document.addEventListener('scroll', mfGtmUserActionDetect);
32        document.addEventListener('mousemove', mfGtmUserActionDetect);
33        document.addEventListener('touchstart', mfGtmUserActionDetect);
34        function mfGtmUserActionDetect()
35        {
36            document.removeEventListener('scroll', mfGtmUserActionDetect);
37            document.removeEventListener('mousemove', mfGtmUserActionDetect);
38            document.removeEventListener('touchstart', mfGtmUserActionDetect);
39            window.mfGtmUserActionDetected = true;
40            mfLoadGtm();
41        }
42    
43        window.mfGtmUserCookiesAllowed = true;
44        mfLoadGtm();
45        
46
47    function getMfGtmCustomerData() {
48        return localStorage.getItem('mf_gtm_customer_data') ? JSON.parse(localStorage.getItem('mf_gtm_customer_data')) : {};
49    };
50
51    function mfLoadGtm() {
52        if (!window.mfGtmUserActionDetected) return false;
53        if (!window.mfGtmLoadBeforeCookieAllowed && !window.mfGtmUserCookiesAllowed) return false;
54
55        if (window.mfGTMTriedToLoad) return;
56        window.mfGTMTriedToLoad = true;
vendor: 342 bytes, lines 56-62
56
57        
58(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
59new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
60j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
61'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
62})(window,document,'script','dataLayer','
62GTM-NW62S7VM
vendor: 10 bytes, lines 62-64
62');
63
64    
64};
65    </script>
65
66        
66<script>
67        /* Hyva code */
68        function mfHyvaGtmSetCustomerData(event) {
69            let data, j;
70            let sections = event.detail.data;
71            for (j in sections) {
72                data = sections[j];
73                if (data.mf_gtm_customer_data) {
74                    localStorage.setItem('mf_gtm_customer_data', JSON.stringify(data.mf_gtm_customer_data));
75                    return;
76                }
77            }
78        };
79        window.addEventListener('private-content-loaded', mfHyvaGtmSetCustomerData);
80        /* End Hyva code */
81    </script>
81<!-- End Google Tag Manager -->
81<script>
82    if (typeof afterpayCurrency === 'undefined') {
83        window.afterpayCurrency = "USD";
84    }
85    if (typeof afterpayLocale === 'undefined') {
86        var afterpayLocale = "en_US";
87    }
88</script>
vendor: 1 bytes, line 88
88
89<script src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/Afterpay_Afterpay/js/view/container/cta/minicart/headless.js" async></script>
89
90
91    
91<script>
92        window.addEventListener('init-external-scripts', () => {
93            (function(d){
94                var s = d.createElement("script");
95                /* uncomment the following line to override default position*/
96                /* s.setAttribute("data-position", 3);*/
97                /* uncomment the following line to override default size (values: small, large)*/
98                /* s.setAttribute("data-size", "small");*/
99                /* uncomment the following line to override default language (e.g., fr, de, es, he, nl, etc.)*/
100                /* s.setAttribute("data-language", "language");*/
101                /* uncomment the following line to override color set via widget (e.g., #053f67)*/
102                /* s.setAttribute("data-color", "#053e67");*/
103                /* uncomment the following line to override type set via widget (1=person, 2=chair, 3=eye, 4=text)*/
104                /* s.setAttribute("data-type", "1");*/
105                /* s.setAttribute("data-statement_text:", "Our Accessibility Statement");*/
106                /* s.setAttribute("data-statement_url", "http://www.example.com/accessibility")";*/
107                /* uncomment the following line to override support on mobile devices*/
108                /* s.setAttribute("data-mobile", true);*/
109                /* uncomment the following line to set custom trigger action for accessibility menu*/
110                s.setAttribute("data-trigger", "userAccessibilityWidget")
111                /* uncomment the following line to override widget's z-index property*/
112                /* s.setAttribute("data-z-index", 10001);*/
113                /* uncomment the following line to enable Live site translations (e.g., fr, de, es, he, nl, etc.)*/
114                /* s.setAttribute("data-site-language", "null");*/
115                s.setAttribute("data-widget_layout", "full")
116                s.setAttribute("data-account", "G0etI2O83R");
117                s.setAttribute("src", "https://cdn.userway.org/widget.js");
118
119                (d.body || d.head).appendChild(s);
120            })(document)
121        }, {once: true, passive: true});
122
123    </script>
vendor: 1 bytes, line 123
123
124<script>
125    const JajumaUIO = {
126        isEnabled: true,
127        isHyva: true    }
128    window.loadModernizr = () => {
129        if (typeof ModernizrJajuma !== 'undefined') {
130            return ;
131        }
132        /*! modernizr 3.11.4 (Custom Build) | MIT *
133        * https://modernizr.com/download/?-avif-webp-setclasses !*/
134        !function (A, n, e, o) {
135            function a(A, n) {
136                return typeof A === n
137            }
138
139            function t(A) {
140                var n = f.className, e = ModernizrJajuma._config.classPrefix || "";
141                if (u && (n = n.baseVal), ModernizrJajuma._config.enableJSClass) {
142                    var o = new RegExp("(^|\\s)" + e + "no-js(\\s|$)");
143                    n = n.replace(o, "$1" + e + "js$2")
144                }
145                ModernizrJajuma._config.enableClasses && (A.length > 0 && (n += " " + e + A.join(" " + e)), u ? f.className.baseVal = n : f.className = n)
146            }
147
148            function i(A, n) {
149                if ("object" == typeof A) for (var e in A) r(A, e) && i(e, A[e]); else {
150                    A = A.toLowerCase();
151                    var o = A.split("."), a = ModernizrJajuma[o[0]];
152                    if (2 === o.length && (a = a[o[1]]), void 0 !== a) return ModernizrJajuma;
153                    n = "function" == typeof n ? n() : n, 1 === o.length ? ModernizrJajuma[o[0]] = n : (!ModernizrJajuma[o[0]] || ModernizrJajuma[o[0]] instanceof Boolean || (ModernizrJajuma[o[0]] = new Boolean(ModernizrJajuma[o[0]])), ModernizrJajuma[o[0]][o[1]] = n), t([(n && !1 !== n ? "" : "no-") + o.join("-")]), ModernizrJajuma._trigger(A, n)
154                }
155                return ModernizrJajuma
156            }
157
158            var s = [], l = {
159                _version: "3.11.4",
160                _config: {classPrefix: "", enableClasses: !0, enableJSClass: !0, usePrefixes: !0},
161                _q: [],
162                on: function (A, n) {
163                    var e = this;
164                    setTimeout(function () {
165                        n(e[A])
166                    }, 0)
167                },
168                addTest: function (A, n, e) {
169                    s.push({name: A, fn: n, options: e})
170                },
171                addAsyncTest: function (A) {
172                    s.push({name: null, fn: A})
173                }
174            }, ModernizrJajuma = function () {
175            };
176            ModernizrJajuma.prototype = l, ModernizrJajuma = new ModernizrJajuma;
177            var r, c = [], f = e.documentElement, u = "svg" === f.nodeName.toLowerCase();
178            !function () {
179                var A = {}.hasOwnProperty;
180                r = a(A, "undefined") || a(A.call, "undefined") ? function (A, n) {
181                    return n in A && a(A.constructor.prototype[n], "undefined")
182                } : function (n, e) {
183                    return A.call(n, e)
184                }
185            }(), l._l = {}, l.on = function (A, n) {
186                this._l[A] || (this._l[A] = []), this._l[A].push(n), ModernizrJajuma.hasOwnProperty(A) && setTimeout(function () {
187                    ModernizrJajuma._trigger(A, ModernizrJajuma[A])
188                }, 0)
189            }, l._trigger = function (A, n) {
190                if (this._l[A]) {
191                    var e = this._l[A];
192                    setTimeout(function () {
193                        var A;
194                        for (A = 0; A < e.length; A++) (0, e[A])(n)
195                    }, 0), delete this._l[A]
196                }
197            }, ModernizrJajuma._q.push(function () {
198                l.addTest = i
199            }), ModernizrJajuma.addAsyncTest(function () {
200                function A(A, n, e) {
201                    function o(n) {
202                        var o = !(!n || "load" !== n.type) && 1 === a.width;
203                        i(A, "webp" === A && o ? new Boolean(o) : o), e && e(n)
204                    }
205
206                    var a = new Image;
207                    a.onerror = o, a.onload = o, a.src = n
208                }
209
210                var n = [{
211                        uri: "data:image/webp;base64,UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoBAAEAAwA0JaQAA3AA/vuUAAA=",
212                        name: "webp"
213                    }],
214                    e = n.shift();
215                A(e.name, e.uri, function (e) {
216                    if (e && "load" === e.type) for (var o = 0; o < n.length; o++) A(n[o].name, n[o].uri)
217                })
218            }), ModernizrJajuma.addAsyncTest(function () {
219                var A = new Image;
220                A.onload = A.onerror = function () {
221                    i("avif", 1 === A.width)
222                }, A.src = "data:image/avif;base64,AAAAHGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZgAAAPBtZXRhAAAAAAAAAChoZGxyAAAAAAAAAABwaWN0AAAAAAAAAAAAAAAAbGliYXZpZgAAAAAOcGl0bQAAAAAAAQAAAB5pbG9jAAAAAEQAAAEAAQAAAAEAAAEUAAAAFQAAAChpaW5mAAAAAAABAAAAGmluZmUCAAAAAAEAAGF2MDFDb2xvcgAAAABoaXBycAAAAElpcGNvAAAAFGlzcGUAAAAAAAAAAQAAAAEAAAAOcGl4aQAAAAABCAAAAAxhdjFDgQAcAAAAABNjb2xybmNseAABAAEAAQAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB1tZGF0EgAKBxgADlgICAkyCB/xgAAghQm0"
223            }), function () {
224                var A, n, e, o, t, i, l;
225                for (var r in s) if (s.hasOwnProperty(r)) {
226                    if (A = [], n = s[r], n.name && (A.push(n.name.toLowerCase()), n.options && n.options.aliases && n.options.aliases.length)) for (e = 0; e < n.options.aliases.length; e++) A.push(n.options.aliases[e].toLowerCase());
227                    for (o = a(n.fn, "function") ? n.fn() : n.fn, t = 0; t < A.length; t++) i = A[t], l = i.split("."), 1 === l.length ? ModernizrJajuma[l[0]] = o : (ModernizrJajuma[l[0]] && (!ModernizrJajuma[l[0]] || ModernizrJajuma[l[0]] instanceof Boolean) || (ModernizrJajuma[l[0]] = new Boolean(ModernizrJajuma[l[0]])), ModernizrJajuma[l[0]][l[1]] = o), c.push((o ? "" : "no-") + l.join("-"))
228                }
229            }(), t(c), delete l.addTest, delete l.addAsyncTest;
230            for (var d = 0; d < ModernizrJajuma._q.length; d++) ModernizrJajuma._q[d]();
231            A.ModernizrJajuma = ModernizrJajuma
232        }(window, window, document);
233    }
234     window.loadModernizr(); </script>
234
235<style>
236     
237        #gallery figure picture { 
238            display: flex; flex-direction: column; 
239        } 
240        .swatch-option-loading-webp {
241        content: url(https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/images/loader-2.gif);
242    }
243    @keyframes imgpulse {
244        50% {
245            opacity: 0.5;
246        }
247    }
248</style>
249<script>
250    var BASE_URL = 'https://www.mrhankeystoys.com/';
251    var THEME_PATH = 'https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US';
252    var COOKIE_CONFIG = {
253        "expires": null,
254        "path": "\u002F",
255        "domain": ".www.mrhankeystoys.com",
256        "secure": true,
257        "lifetime": "259200",
258        "cookie_restriction_enabled": false    };
259    var CURRENT_STORE_CODE = 'default';
260    var CURRENT_WEBSITE_ID = '1';
261
262    window.hyva = window.hyva || {}
263
264    window.cookie_consent_groups = window.cookie_consent_groups || {}
265    window.cookie_consent_groups['necessary'] = true;
266
267    window.cookie_consent_config = window.cookie_consent_config || {};
268    window.cookie_consent_config['necessary'] = [].concat(
269        window.cookie_consent_config['necessary'] || [],
270        [
271            'user_allowed_save_cookie',
272            'form_key',
273            'mage-messages',
274            'private_content_version',
275            'mage-cache-sessid',
276            'last_visited_store',
277            'section_data_ids'
278        ]
279    );
280</script>
vendor: 1 bytes, line 280
280
281<script>
282    'use strict';
283    (function( hyva, undefined ) {
284
285        function lifetimeToExpires(options, defaults) {
286
287            const lifetime = options.lifetime || defaults.lifetime;
288
289            if (lifetime) {
290                const date = new Date;
291                date.setTime(date.getTime() + lifetime * 1000);
292                return date;
293            }
294
295            return null;
296        }
297
298        function generateRandomString() {
299
300            const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
301                length = 16;
302
303            let formKey = '',
304                charactersLength = allowedCharacters.length;
305
306            for (let i = 0; i < length; i++) {
307                formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))]
308            }
309
310            return formKey;
311        }
312
313        const sessionCookieMarker = {noLifetime: true}
314
315        const cookieTempStorage = {};
316
317        const internalCookie = {
318            get(name) {
319                const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
320                return v ? v[2] : null;
321            },
322            set(name, value, days, skipSetDomain) {
323                let expires,
324                    path,
325                    domain,
326                    secure,
327                    samesite;
328
329                const defaultCookieConfig = {
330                    expires: null,
331                    path: '/',
332                    domain: null,
333                    secure: false,
334                    lifetime: null,
335                    samesite: 'lax'
336                };
337
338                const cookieConfig = window.COOKIE_CONFIG || {};
339
340                expires = days && days !== sessionCookieMarker
341                    ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig)
342                    : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires;
343
344                path = cookieConfig.path || defaultCookieConfig.path;
345                domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain);
346                secure = cookieConfig.secure || defaultCookieConfig.secure;
347                samesite = cookieConfig.samesite || defaultCookieConfig.samesite;
348
349                document.cookie = name + "=" + encodeURIComponent(value) +
350                    (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') +
351                    (path ? '; path=' + path : '') +
352                    (domain ? '; domain=' + domain : '') +
353                    (secure ? '; secure' : '') +
354                    (samesite ? '; samesite=' + samesite : 'lax');
355            },
356            isWebsiteAllowedToSaveCookie() {
357                const allowedCookies = this.get('user_allowed_save_cookie');
358                if (allowedCookies) {
359                    const allowedWebsites = JSON.parse(unescape(allowedCookies));
360
361                    return allowedWebsites[CURRENT_WEBSITE_ID] === 1;
362                }
363                return false;
364            },
365            getGroupByCookieName(name) {
366                const cookieConsentConfig = window.cookie_consent_config || {};
367                let group = null;
368                for (let prop in cookieConsentConfig) {
369                    if (!cookieConsentConfig.hasOwnProperty(prop)) continue;
370                    if (cookieConsentConfig[prop].includes(name)) {
371                        group = prop;
372                        break;
373                    }
374                }
375                return group;
376            },
377            isCookieAllowed(name) {
378                const cookieGroup = this.getGroupByCookieName(name);
379                return cookieGroup
380                    ? window.cookie_consent_groups[cookieGroup]
381                    : this.isWebsiteAllowedToSaveCookie();
382            },
383            saveTempStorageCookies() {
384                for (const [name, data] of Object.entries(cookieTempStorage)) {
385                    if (this.isCookieAllowed(name)) {
386                        this.set(name, data['value'], data['days'], data['skipSetDomain']);
387                        delete cookieTempStorage[name];
388                    }
389                }
390            }
391        };
392
393        hyva.getCookie = (name) => {
394            const cookieConfig = window.COOKIE_CONFIG || {};
395
396            if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
397                return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null;
398            }
399
400            return internalCookie.get(name);
401        }
402
403        hyva.setCookie = (name, value, days, skipSetDomain) => {
404            const cookieConfig = window.COOKIE_CONFIG || {};
405
406            if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
407                cookieTempStorage[name] = {value, days, skipSetDomain};
408                return;
409            }
410            return internalCookie.set(name, value, days, skipSetDomain);
411        }
412
413
414        hyva.setSessionCookie = (name, value, skipSetDomain) => {
415            return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain)
416        }
417
418        hyva.getBrowserStorage = () => {
419            const browserStorage = window.localStorage || window.sessionStorage;
420            if (!browserStorage) {
421                console.warn('Browser Storage is unavailable');
422                return false;
423            }
424            try {
425                browserStorage.setItem('storage_test', '1');
426                browserStorage.removeItem('storage_test');
427            } catch (error) {
428                console.warn('Browser Storage is not accessible', error);
429                return false;
430            }
431            return browserStorage;
432        }
433
434        hyva.postForm = (postParams) => {
435            const form = document.createElement("form");
436
437            let data = postParams.data;
438
439            if (! postParams.skipUenc && ! data.uenc) {
440                data.uenc = btoa(window.location.href);
441            }
442            form.method = "POST";
443            form.action = postParams.action;
444
445            Object.keys(postParams.data).map(key => {
446                const field = document.createElement("input");
447                field.type = 'hidden'
448                field.value = postParams.data[key];
449                field.name = key;
450                form.appendChild(field);
451            });
452
453            const form_key = document.createElement("input");
454            form_key.type = 'hidden';
455            form_key.value = hyva.getFormKey();
456            form_key.name="form_key";
457            form.appendChild(form_key);
458
459            document.body.appendChild(form);
460
461            form.submit();
462        }
463
464        hyva.getFormKey = function () {
465            let formKey = hyva.getCookie('form_key');
466
467            if (!formKey) {
468                formKey = generateRandomString();
469                hyva.setCookie('form_key', formKey);
470            }
471
472            return formKey;
473        }
474
475        hyva.formatPrice = (value, showSign, options = {}) => {
476            const groupSeparator = options.groupSeparator;
477            const decimalSeparator = options.decimalSeparator
478            delete options.groupSeparator;
479            delete options.decimalSeparator;
480            const formatter = new Intl.NumberFormat(
481                'en\u002DUS',
482                Object.assign({
483                    style: 'currency',
484                    currency: 'USD',
485                    signDisplay: showSign ? 'always' : 'auto'
486                }, options)
487            );
488            return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ?
489                formatter.formatToParts(value).map(({type, value}) => {
490                    switch (type) {
491                        case 'currency':
492                            return '\u0024' || value;
493                        case 'minusSign':
494                            return '- ';
495                        case 'plusSign':
496                            return '+ ';
497                        case 'group':
498                            return groupSeparator !== undefined ? groupSeparator : value;
499                        case 'decimal':
500                            return decimalSeparator !== undefined ? decimalSeparator : value;
501                        default :
502                            return value;
503                    }
504                }).reduce((string, part) => string + part) :
505                formatter.format(value);
506        }
507
508        const formatStr = function (str, nStart) {
509            const args = Array.from(arguments).slice(2);
510
511            return str.replace(/(%+)([0-9]+)/g, (m, p, n) => {
512                const idx = parseInt(n) - nStart;
513
514                if (args[idx] === null || args[idx] === void 0) {
515                    return m;
516                }
517                return p.length % 2
518                    ? p.slice(0, -1).replace('%%', '%') + args[idx]
519                    : p.replace('%%', '%') + n;
520            })
521        }
522
523        hyva.str = function (string) {
524            const args = Array.from(arguments);
525            args.splice(1, 0, 1);
526
527            return formatStr.apply(undefined, args);
528        }
529
530        hyva.strf = function () {
531            const args = Array.from(arguments);
532            args.splice(1, 0, 0);
533
534            return formatStr.apply(undefined, args);
535        }
536
537        /**
538         * Take a html string as `content` parameter and
539         * extract an element from the DOM to replace in
540         * the current page under the same selector,
541         * defined by `targetSelector`
542         */
543        hyva.replaceDomElement = (targetSelector, content) => {
544            // Parse the content and extract the DOM node using the `targetSelector`
545            const parser = new DOMParser();
546            const doc = parser.parseFromString(content, 'text/html');
547            const contentNode = doc.querySelector(targetSelector);
548
549            // Bail if content or target can't be found
550            if (!contentNode || !document.querySelector(targetSelector)) {
551                return;
552            }
553
554                        hyva.activateScripts(contentNode);
555            
556            // Replace the old DOM node with the new content
557            document.querySelector(targetSelector).replaceWith(contentNode);
558
559            // Reload customerSectionData and display cookie-messages if present
560            window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
561            hyva.initMessages();
562        }
563
564        hyva.removeScripts = (contentNode) => {
565            const scripts = contentNode.getElementsByTagName('script');
566            for (let i = 0; i < scripts.length; i++) {
567                scripts[i].parentNode.removeChild(scripts[i]);
568            }
569            const templates = contentNode.getElementsByTagName('template');
570            for (let i = 0; i < templates.length; i++) {
571                const container = document.createElement('div');
572                container.innerHTML = templates[i].innerHTML;
573                hyva.removeScripts(container);
574                templates[i].innerHTML = container.innerHTML;
575            }
576        }
577
578        hyva.activateScripts = (contentNode) => {
579            // Create new array from HTMLCollection to avoid mutation of collection while manipulating the DOM.
580            const scripts = Array.from(contentNode.getElementsByTagName('script'));
581
582            // Iterate over all script tags to duplicate+inject each into the head
583            for (const original of scripts) {
584                const script = document.createElement('script');
585                original.type && (script.type = original.type);
586                script.innerHTML = original.innerHTML;
587
588                // Remove the original (non-executing) script from the contentNode
589                original.parentNode.removeChild(original)
590
591                // Add script to head
592                document.head.appendChild(script);
593            }
594
595            return contentNode;
596        }
597
598        const replace = {['+']: '-', ['/']: '_', ['=']: ','};
599        hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]);
600
601        let currentTrap;
602
603        const focusableElements = (rootElement) => {
604            const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]';
605            return Array.from(rootElement.querySelectorAll(selector))
606                .filter(el => {
607                    return el.style.display !== 'none'
608                        && !el.disabled
609                        && el.tabIndex !== -1
610                        && (el.offsetWidth || el.offsetHeight || el.getClientRects().length)
611                })
612        }
613
614        const focusTrap = (e) => {
615            const isTabPressed = e.key === 'Tab' || e.keyCode === 9;
616            if (!isTabPressed) return;
617
618            const focusable = focusableElements(currentTrap)
619            const firstFocusableElement = focusable[0]
620            const lastFocusableElement = focusable[focusable.length - 1]
621
622            e.shiftKey
623                ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault())
624                : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault())
625        };
626
627        hyva.releaseFocus = (rootElement) => {
628            if (currentTrap && (!rootElement || rootElement === currentTrap)) {
629                currentTrap.removeEventListener('keydown', focusTrap)
630                currentTrap = null
631            }
632        }
633        hyva.trapFocus = (rootElement) => {
634            if (!rootElement) return;
635            hyva.releaseFocus()
636            currentTrap = rootElement
637            rootElement.addEventListener('keydown', focusTrap)
638            const firstElement = focusableElements(rootElement)[0]
639            firstElement && firstElement.focus()
640        }
641
642        hyva.safeParseNumber = (rawValue) => {
643            const number = rawValue ? parseFloat(rawValue) : null;
644
645            return Array.isArray(number) || isNaN(number) ? rawValue : number;
646        }
647
648        const toCamelCase = s => s.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('');
649        hyva.createBooleanObject = (name, value = false, additionalMethods = {}) => {
650
651            const camelCase = toCamelCase(name);
652            const key = '__hyva_bool_' + name
653
654            return new Proxy(Object.assign(
655                additionalMethods,
656                {
657                    [key]: !!value,
658                    [name]() {return !!this[key]},
659                    ['!' + name]() {return !this[key]}, // @deprecated This does not work with non-CSP Alpine
660                    ['not' + camelCase]() {return !this[key]},
661                    ['toggle' + camelCase]() {this[key] = !this[key]},
662                    [`set${camelCase}True`]() {this[key] = true},
663                    [`set${camelCase}False`]() {this[key] = false},
664                }
665            ), {
666                set(target, prop, value) {
667                    return prop === name
668                        ? (target[key] = !!value)
669                        : Reflect.set(...arguments);
670                }
671            })
672        }
673
674                hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true})
675        window.addEventListener('alpine:init', () => Alpine.data('{}', () => ({})), {once: true});
676                window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies())
677
678    }( window.hyva = window.hyva || {} ));
679</script>
vendor: 1 bytes, line 679
679
680<script>
681    if (!window.IntersectionObserver) {
682        window.IntersectionObserver = function (callback) {
683            this.observe = el => el && callback(this.takeRecords());
684            this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}];
685            this.disconnect = () => {};
686            this.unobserve = () => {};
687        }
688    }
689</script>
vendor: 1 bytes, line 689
689
690<script type="speculationrules">
691{
692    "prerender": [{
693        "source": "document",
694        "where": {
695            "and": [
696                { "href_matches": "/*" },
697                { "not": {
698                    "href_matches": [
699                        "*/customer/*",
700                        "*/search/*",
701                        "*/sales/*",
702                        "*/checkout/*",
703                        "*.pdf"
704                    ]
705                }},
706                { "not": { "selector_matches": ".do-not-prerender" } },
707                { "not": { "selector_matches": "[download]" } },
708                { "not": { "selector_matches": "[rel~=nofollow]" } }
709
710            ]
711        },
712        "eagerness": "moderate"
713    }]
714}
715</script>
715
716    
717    
717<script>window.algoliaConfig = JSON.parse('\u007B\u0022instant\u0022\u003A\u007B\u0022enabled\u0022\u003Atrue,\u0022selector\u0022\u003A\u0022.columns\u0022,\u0022isAddToCartEnabled\u0022\u003Afalse,\u0022addToCartParams\u0022\u003A\u007B\u0022action\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fwww.mrhankeystoys.com\u005C\u002Fcheckout\u005C\u002Fcart\u005C\u002Fadd\u005C\u002F\u0022,\u0022formKey\u0022\u003A\u00229SFsreOEuib59vuZ\u0022,\u0022redirectUrlParam\u0022\u003A\u0022uenc\u0022\u007D,\u0022infiniteScrollEnabled\u0022\u003Afalse,\u0022urlTrackedParameters\u0022\u003A\u005B\u0022query\u0022,\u0022attribute\u003A\u002A\u0022,\u0022index\u0022,\u0022page\u0022\u005D,\u0022isSearchBoxEnabled\u0022\u003Afalse,\u0022isVisualMerchEnabled\u0022\u003Afalse,\u0022categorySeparator\u0022\u003A\u0022\u0020\u005C\u002F\u005C\u002F\u005C\u002F\u0020\u0022,\u0022categoryPageIdAttribute\u0022\u003A\u0022categoryPageId\u0022,\u0022isCategoryNavigationEnabled\u0022\u003Afalse,\u0022hidePagination\u0022\u003Atrue,\u0022isDynamicFacetsEnabled\u0022\u003Afalse,\u0022redirects\u0022\u003A\u007B\u0022enabled\u0022\u003Afalse,\u0022onPageLoad\u0022\u003Atrue,\u0022onSearchAsYouType\u0022\u003Afalse,\u0022showSelectableRedirect\u0022\u003Atrue,\u0022openInNewWindow\u0022\u003Afalse\u007D\u007D,\u0022autocomplete\u0022\u003A\u007B\u0022enabled\u0022\u003Atrue,\u0022selector\u0022\u003A\u0022.algolia\u002Dsearch\u002Dinput\u0022,\u0022sections\u0022\u003A\u005B\u007B\u0022name\u0022\u003A\u0022pages\u0022,\u0022label\u0022\u003A\u0022Pages\u0022,\u0022hitsPerPage\u0022\u003A\u00222\u0022\u007D\u005D,\u0022nbOfProductsSuggestions\u0022\u003A6,\u0022nbOfCategoriesSuggestions\u0022\u003A2,\u0022nbOfQueriesSuggestions\u0022\u003A0,\u0022isDebugEnabled\u0022\u003Afalse,\u0022isNavigatorEnabled\u0022\u003Atrue,\u0022debounceMilliseconds\u0022\u003A300,\u0022minimumCharacters\u0022\u003A2,\u0022redirects\u0022\u003A\u007B\u0022enabled\u0022\u003Atrue,\u0022showSelectableRedirect\u0022\u003Atrue,\u0022showHitsWithRedirect\u0022\u003Afalse,\u0022openInNewWindow\u0022\u003Afalse\u007D\u007D,\u0022landingPage\u0022\u003A\u007B\u0022query\u0022\u003A\u0022\u0022,\u0022configuration\u0022\u003A\u0022\u005B\u005D\u0022\u007D,\u0022recommend\u0022\u003A\u007B\u0022enabledFBT\u0022\u003Afalse,\u0022enabledRelated\u0022\u003Afalse,\u0022enabledFBTInCart\u0022\u003Afalse,\u0022enabledRelatedInCart\u0022\u003Afalse,\u0022enabledLookingSimilar\u0022\u003A0,\u0022limitFBTProducts\u0022\u003A6,\u0022limitRelatedProducts\u0022\u003A6,\u0022limitTrendingItems\u0022\u003A6,\u0022limitLookingSimilar\u0022\u003A6,\u0022enabledTrendItems\u0022\u003A0,\u0022trendItemFacetName\u0022\u003Anull,\u0022trendItemFacetValue\u0022\u003Anull,\u0022isTrendItemsEnabledInPDP\u0022\u003A0,\u0022isTrendItemsEnabledInCartPage\u0022\u003A0,\u0022isAddToCartEnabledInFBT\u0022\u003Afalse,\u0022isAddToCartEnabledInRelatedProduct\u0022\u003Afalse,\u0022isAddToCartEnabledInTrendsItem\u0022\u003Afalse,\u0022isAddToCartEnabledInLookingSimilar\u0022\u003Afalse,\u0022FBTTitle\u0022\u003A\u0022Frequently\u0020bought\u0020together\u0022,\u0022relatedProductsTitle\u0022\u003A\u0022Related\u0020products\u0022,\u0022trendingItemsTitle\u0022\u003A\u0022Trending\u0020items\u0022,\u0022addToCartParams\u0022\u003A\u007B\u0022action\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fwww.mrhankeystoys.com\u005C\u002Fcheckout\u005C\u002Fcart\u005C\u002Fadd\u005C\u002F\u0022,\u0022formKey\u0022\u003A\u00229SFsreOEuib59vuZ\u0022,\u0022redirectUrlParam\u0022\u003A\u0022uenc\u0022\u007D,\u0022isLookingSimilarEnabledInPDP\u0022\u003A0,\u0022isLookingSimilarEnabledInCartPage\u0022\u003A0,\u0022lookingSimilarTitle\u0022\u003A\u0022Looking\u0020Similar\u0022\u007D,\u0022extensionVersion\u0022\u003A\u00223.17.4\u0022,\u0022applicationId\u0022\u003A\u0022FV7NPLDQ20\u0022,\u0022indexName\u0022\u003A\u0022mrhankeystoys_default\u0022,\u0022baseIndexName\u0022\u003A\u0022mrhankeystoys_default\u0022,\u0022apiKey\u0022\u003A\u0022YTBmZDJmYmJhN2YwYTJjZGY1NjI2MDdmOWJkMDQyNDg5ZDE1NTExM2I0MGUzZjliNjA3N2FmODRiOWU5YmUwNXRhZ0ZpbHRlcnM9JnZhbGlkVW50aWw9MTc5MTEyMzQ0MQ\u003D\u003D\u0022,\u0022attributeFilter\u0022\u003A\u005B\u005D,\u0022facets\u0022\u003A\u005B\u007B\u0022attribute\u0022\u003A\u0022categories\u0022,\u0022type\u0022\u003A\u0022conjunctive\u0022,\u0022label\u0022\u003A\u0022Categories\u0022,\u0022searchable\u0022\u003A\u00222\u0022,\u0022create_rule\u0022\u003A\u00222\u0022\u007D,\u007B\u0022attribute\u0022\u003A\u0022size_filter\u0022,\u0022type\u0022\u003A\u0022conjunctive\u0022,\u0022label\u0022\u003A\u0022Size\u0022,\u0022searchable\u0022\u003A\u00222\u0022,\u0022create_rule\u0022\u003A\u00222\u0022\u007D,\u007B\u0022attribute\u0022\u003A\u0022insertable_length\u0022,\u0022type\u0022\u003A\u0022slider\u0022,\u0022label\u0022\u003A\u0022Insertable\u0020Length\u0022,\u0022searchable\u0022\u003A\u00221\u0022,\u0022create_rule\u0022\u003A\u00222\u0022\u007D,\u007B\u0022attribute\u0022\u003A\u0022max_circumference\u0022,\u0022type\u0022\u003A\u0022slider\u0022,\u0022label\u0022\u003A\u0022Circumference\u0022,\u0022searchable\u0022\u003A\u00221\u0022,\u0022create_rule\u0022\u003A\u00222\u0022\u007D,\u007B\u0022attribute\u0022\u003A\u0022price\u0022,\u0022type\u0022\u003A\u0022slider\u0022,\u0022label\u0022\u003A\u0022Price\u0022,\u0022searchable\u0022\u003A\u00222\u0022,\u0022create_rule\u0022\u003A\u00222\u0022\u007D\u005D,\u0022areCategoriesInFacets\u0022\u003Atrue,\u0022hitsPerPage\u0022\u003A18,\u0022sortingIndices\u0022\u003A\u005B\u007B\u0022attribute\u0022\u003A\u0022price\u0022,\u0022sort\u0022\u003A\u0022asc\u0022,\u0022sortLabel\u0022\u003A\u0022Lowest\u0020price\u0022,\u0022virtualReplica\u0022\u003A\u00220\u0022,\u0022name\u0022\u003A\u0022mrhankeystoys_default_products_price_group_0_asc\u0022,\u0022ranking\u0022\u003A\u005B\u0022asc\u0028price.USD.group_0\u0029\u0022,\u0022typo\u0022,\u0022geo\u0022,\u0022words\u0022,\u0022filters\u0022,\u0022proximity\u0022,\u0022attribute\u0022,\u0022exact\u0022,\u0022custom\u0022\u005D,\u0022label\u0022\u003A\u0022Lowest\u0020price\u0022\u007D,\u007B\u0022attribute\u0022\u003A\u0022price\u0022,\u0022sort\u0022\u003A\u0022desc\u0022,\u0022sortLabel\u0022\u003A\u0022Highest\u0020price\u0022,\u0022virtualReplica\u0022\u003A\u00220\u0022,\u0022name\u0022\u003A\u0022mrhankeystoys_default_products_price_group_0_desc\u0022,\u0022ranking\u0022\u003A\u005B\u0022desc\u0028price.USD.group_0\u0029\u0022,\u0022typo\u0022,\u0022geo\u0022,\u0022words\u0022,\u0022filters\u0022,\u0022proximity\u0022,\u0022attribute\u0022,\u0022exact\u0022,\u0022custom\u0022\u005D,\u0022label\u0022\u003A\u0022Highest\u0020price\u0022\u007D,\u007B\u0022attribute\u0022\u003A\u0022created_at\u0022,\u0022sort\u0022\u003A\u0022desc\u0022,\u0022sortLabel\u0022\u003A\u0022Newest\u0020first\u0022,\u0022virtualReplica\u0022\u003A\u00220\u0022,\u0022name\u0022\u003A\u0022mrhankeystoys_default_products_created_at_desc\u0022,\u0022ranking\u0022\u003A\u005B\u0022desc\u0028created_at\u0029\u
7170022,\u0022typo\u0022,\u0022geo\u0022,\u0022words\u0022,\u0022filters\u0022,\u0022proximity\u0022,\u0022attribute\u0022,\u0022exact\u0022,\u0022custom\u0022\u005D,\u0022label\u0022\u003A\u0022Newest\u0020first\u0022\u007D\u005D,\u0022isSearchPage\u0022\u003Afalse,\u0022isCategoryPage\u0022\u003Afalse,\u0022isLandingPage\u0022\u003Afalse,\u0022removeBranding\u0022\u003Atrue,\u0022productId\u0022\u003Anull,\u0022priceKey\u0022\u003A\u0022.USD.group_0\u0022,\u0022priceGroup\u0022\u003A\u0022group_0\u0022,\u0022origFormatedVar\u0022\u003A\u0022price.USD.group_0_original_formated\u0022,\u0022tierFormatedVar\u0022\u003A\u0022price.USD.group_0_tier_formated\u0022,\u0022currencyCode\u0022\u003A\u0022USD\u0022,\u0022currencySymbol\u0022\u003A\u0022\u0024\u0022,\u0022priceFormat\u0022\u003A\u007B\u0022pattern\u0022\u003A\u0022\u0024\u0025s\u0022,\u0022precision\u0022\u003A2,\u0022requiredPrecision\u0022\u003A2,\u0022decimalSymbol\u0022\u003A\u0022.\u0022,\u0022groupSymbol\u0022\u003A\u0022,\u0022,\u0022groupLength\u0022\u003A3,\u0022integerRequired\u0022\u003Afalse\u007D,\u0022maxValuesPerFacet\u0022\u003A10,\u0022autofocus\u0022\u003Atrue,\u0022resultPageUrl\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fwww.mrhankeystoys.com\u005C\u002Fcatalogsearch\u005C\u002Fresult\u005C\u002F\u0022,\u0022request\u0022\u003A\u007B\u0022query\u0022\u003A\u0022\u0022,\u0022refinementKey\u0022\u003A\u0022\u0022,\u0022refinementValue\u0022\u003A\u0022\u0022,\u0022categoryId\u0022\u003A\u0022\u0022,\u0022landingPageId\u0022\u003A\u0022\u0022,\u0022path\u0022\u003A\u0022\u0022,\u0022level\u0022\u003A\u0022\u0022,\u0022parentCategory\u0022\u003A\u0022\u0022,\u0022childCategories\u0022\u003A\u005B\u005D,\u0022url\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fwww.mrhankeystoys.com\u005C\u002Fblog\u0022\u007D,\u0022showCatsNotIncludedInNavigation\u0022\u003Afalse,\u0022showSuggestionsOnNoResultsPage\u0022\u003Atrue,\u0022baseUrl\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fwww.mrhankeystoys.com\u0022,\u0022popularQueries\u0022\u003A\u005B\u005D,\u0022useAdaptiveImage\u0022\u003Afalse,\u0022urls\u0022\u003A\u007B\u0022logo\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fwww.mrhankeystoys.com\u005C\u002Fstatic\u005C\u002Fversion1790675038\u005C\u002Ffrontend\u005C\u002FKrish\u005C\u002Fmrhankeytoys\u005C\u002Fen_US\u005C\u002FAlgolia_AlgoliaSearch\u005C\u002Fjs\u005C\u002Fimages\u005C\u002Falgolia\u002Dlogo\u002Dblue.svg\u0022\u007D,\u0022cookieConfiguration\u0022\u003A\u007B\u0022customerTokenCookie\u0022\u003A\u0022_ALGOLIA_MAGENTO_AUTH\u0022,\u0022consentCookieName\u0022\u003A\u0022user_allowed_save_cookie\u0022,\u0022cookieAllowButtonSelector\u0022\u003A\u0022\u0023btn\u002Dcookie\u002Dallow\u0022,\u0022cookieRestrictionModeEnabled\u0022\u003Afalse,\u0022cookieDuration\u0022\u003A\u002215552000000\u0022\u007D,\u0022ccAnalytics\u0022\u003A\u007B\u0022enabled\u0022\u003Afalse,\u0022ISSelector\u0022\u003A\u0022.ais\u002DHits\u002Ditem\u0020a.result,\u0020.ais\u002DInfiniteHits\u002Ditem\u0020a.result\u0022,\u0022conversionAnalyticsMode\u0022\u003Anull,\u0022addToCartSelector\u0022\u003A\u0022.action.primary.tocart\u0022,\u0022orderedProductIds\u0022\u003A\u005B\u005D\u007D,\u0022isPersonalizationEnabled\u0022\u003Afalse,\u0022personalization\u0022\u003A\u007B\u0022enabled\u0022\u003Afalse,\u0022viewedEvents\u0022\u003A\u007B\u0022viewProduct\u0022\u003A\u007B\u0022eventName\u0022\u003A\u0022Viewed\u0020Product\u0022,\u0022enabled\u0022\u003Afalse,\u0022method\u0022\u003A\u0022viewedObjectIDs\u0022\u007D\u007D,\u0022clickedEvents\u0022\u003A\u007B\u0022productClicked\u0022\u003A\u007B\u0022eventName\u0022\u003A\u0022Product\u0020Clicked\u0022,\u0022enabled\u0022\u003Afalse,\u0022selector\u0022\u003A\u0022.ais\u002DHits\u002Ditem\u0020a.result,\u0020.ais\u002DInfiniteHits\u002Ditem\u0020a.result\u0022,\u0022method\u0022\u003A\u0022clickedObjectIDs\u0022\u007D,\u0022productRecommended\u0022\u003A\u007B\u0022eventName\u0022\u003A\u0022Recommended\u0020Product\u0020Clicked\u0022,\u0022enabled\u0022\u003Afalse,\u0022selector\u0022\u003A\u0022.products\u002Dupsell\u0020.product\u
717002Ditem\u0022,\u0022method\u0022\u003A\u0022clickedObjectIDs\u0022\u007D\u007D,\u0022filterClicked\u0022\u003A\u007B\u0022eventName\u0022\u003A\u0022Filter\u0020Clicked\u0022,\u0022enabled\u0022\u003Afalse,\u0022method\u0022\u003A\u0022clickedFilters\u0022\u007D\u007D,\u0022analytics\u0022\u003A\u007B\u0022enabled\u0022\u003Afalse,\u0022delay\u0022\u003A\u00223000\u0022,\u0022triggerOnUiInteraction\u0022\u003A\u00221\u0022,\u0022pushInitialSearch\u0022\u003A\u00220\u0022\u007D,\u0022now\u0022\u003A1790985600,\u0022queue\u0022\u003A\u007B\u0022isEnabled\u0022\u003Afalse,\u0022nbOfJobsToRun\u0022\u003A5,\u0022retryLimit\u0022\u003A3,\u0022nbOfElementsPerIndexingJob\u0022\u003A300\u007D,\u0022isPreventBackendRenderingEnabled\u0022\u003Afalse,\u0022translations\u0022\u003A\u007B\u0022to\u0022\u003A\u0022to\u0022,\u0022or\u0022\u003A\u0022or\u0022,\u0022go\u0022\u003A\u0022Go\u0022,\u0022popularQueries\u0022\u003A\u0022You\u0020can\u0020try\u0020one\u0020of\u0020the\u0020popular\u0020search\u0020queries\u0022,\u0022seeAll\u0022\u003A\u0022See\u0020all\u0020products\u0022,\u0022allDepartments\u0022\u003A\u0022Search\u0020page\u0022,\u0022seeIn\u0022\u003A\u0022See\u0020products\u0020in\u0022,\u0022orIn\u0022\u003A\u0022or\u0020in\u0022,\u0022noProducts\u0022\u003A\u0022No\u0020products\u0020for\u0020query\u0022,\u0022noResults\u0022\u003A\u0022No\u0020results\u0022,\u0022refine\u0022\u003A\u0022Refine\u0022,\u0022selectedFilters\u0022\u003A\u0022Selected\u0020Filters\u0022,\u0022clearAll\u0022\u003A\u0022Clear\u0020all\u0022,\u0022previousPage\u0022\u003A\u0022Previous\u0020page\u0022,\u0022nextPage\u0022\u003A\u0022Next\u0020page\u0022,\u0022searchFor\u0022\u003A\u0022Search\u0020for\u0020products\u0022,\u0022relevance\u0022\u003A\u0022Relevance\u0022,\u0022categories\u0022\u003A\u0022Categories\u0022,\u0022products\u0022\u003A\u0022Products\u0022,\u0022suggestions\u0022\u003A\u0022Suggestions\u0022,\u0022searchBy\u0022\u003A\u0022Search\u0020by\u0022,\u0022redirectSearchPrompt\u0022\u003A\u0022Continue\u0020search\u0020for\u0022,\u0022searchForFacetValuesPlaceholder\u0022\u003A\u0022Search\u0020for\u0020other\u0020...\u0022,\u0022showMore\u0022\u003A\u0022Show\u0020more\u0020products\u0022,\u0022searchTitle\u0022\u003A\u0022Search\u0020results\u0020for\u0022,\u0022placeholder\u0022\u003A\u0022Search\u0020for\u0020products,\u0020categories,\u0020...\u0022,\u0022addToCart\u0022\u003A\u0022Add\u0020to\u0020Bag\u0022\u007D\u007D')</script>
717
718
719</head>
720<body class="pl-thm-krish pl-thm-krish-mrhankeytoys blog-page blog-page-list blog-index-index page-layout-2columns-right" id="html-body">
721<style>@media (width:769px){[data-content-type=image] picture .pagebuilder-mobile-hidden{display:block}[data-content-type=image] picture .pagebuilder-mobile-only{display:none}}@media (width:768px){[data-content-type=image] picture .pagebuilder-mobile-hidden{display:none}[data-content-type=image] picture .pagebuilder-mobile-only{display:block}}</style>
722<script data-mfmofile="true">
723    function mfGtmGetEcommPageType() {
724        var body = document.getElementsByTagName('body')[0];
725        var ept = 'other';
726        
727        if (body.className.indexOf('cms-index-index') > -1) {
728            ept = 'home';
729        } else if (body.className.indexOf('catalog-category-view') > -1) {
730            ept = 'category';
731        } else if (body.className.indexOf('catalog-product-view') > -1) {
732            ept = 'product';
733        } else if (body.className.indexOf('checkout-cart-index') > -1) {
734            ept = 'cart';
735        } else if (body.className.indexOf('checkout-index-index') > -1) {
736            ept = 'checkout';
737        } else if (body.className.indexOf('contact-index-index') > -1) {
738            ept = 'contact';
739        } else if (body.className.indexOf('catalogsearch-result-index') > -1) {
740            ept = 'searchresults';
741        } else if (body.className.indexOf('cms-page-view') > -1) {
742            ept = 'cmspage';
743        };
744        return ept;  
745    };
746</script>
746
747        
747<script>
748    function mfHyvaGtmCustomerDataLayer(event) {
749        let data, eventFired, i, j, k;
750        let sections = event.detail.data;
751        for ( j in sections) {
752            data = sections[j];
753            if (!data.mf_datalayer) continue;
754            
755            for (i = 0; i < data.mf_datalayer.length; i++) {
756                window.dataLayer = window.dataLayer || [];
757                eventFired = false;
758                for (k = 0; k < window.dataLayer.length; k++) {
759                    if (data.mf_datalayer[i].magefanUniqueEventId
760                        && data.mf_datalayer[i].magefanUniqueEventId == window.dataLayer[k].magefanUniqueEventId
761                    ) {
762                        eventFired = true;
763                        break;
764                    }
765                }
766                if (!eventFired) {
767                    /*
768                    if (!data.mf_datalayer[i].customer_identifier
769                        || (data.mf_datalayer[i].customer_identifier.indexOf('getMfGtmCustomerIdentifier') != -1)
770                    ) {
771                        data.mf_datalayer[i].customer_identifier = getMfGtmCustomerIdentifier();
772                    }
773                    */
774                    
775                    var ept = data.mf_datalayer[i].ecomm_pagetype;
776                    if ('other' === ept) {
777                        ept = mfGtmGetEcommPageType();
778                        data.mf_datalayer[i].ecomm_pagetype = ept;
779                        if (data.mf_datalayer[i].google_tag_params) {
780                            data.mf_datalayer[i].google_tag_params.ecomm_pagetype = ept;
781                        }
782                    };
783                    window.dataLayer.push(data.mf_datalayer[i]);
784                }
785            }
786            
787            delete event.detail.data[j].mf_datalayer;
788            let mcs = localStorage.getItem('mage-cache-storage');
789            if (mcs) {
790                mcs = JSON.parse(mcs);
791                if (mcs && mcs[j] && mcs[j].mf_datalayer) {
792                    delete mcs[j].mf_datalayer;
793                    localStorage.setItem('mage-cache-storage', JSON.stringify(mcs));
794                }
795            }
796        }
797    };
798    window.addEventListener('private-content-loaded', mfHyvaGtmCustomerDataLayer);
799</script>
vendor: 1 bytes, line 799
799
800<script>
801    document.addEventListener("DOMContentLoaded", function() {
802        document.querySelectorAll("a").forEach(function(link) {
803            link.addEventListener("click", function(event) {
804                let url = link.href;
805                let items, j, x, newDataLayer, dli, index;
806                if (url && window.dataLayer && window.dataLayer.length) {
807                    for (let i=0; i<window.dataLayer.length; i++) {
808                        dli = window.dataLayer[i];
809                        if (dli.event == "view_item_list"
810                            && dli.ecommerce
811                            && dli.ecommerce.items
812                            && dli.ecommerce.items.length
813                        ) {
814                            items = dli.ecommerce.items;
815                            newDataLayer = false;
816                            index = -1;
817                            for (j=0; j<items.length; j++) {
818                                index++;
819                                if (items[j].item_url == url) {
820                                    newDataLayer = {
821                                        "event": "select_item",
822                                        "ecommerce": {
823                                            "item_list_id": dli.ecommerce.item_list_id,
824                                            "item_list_name": dli.ecommerce.item_list_name,
825                                            "items": [items[j]]
826                                        },
827                                        "magefanUniqueEventId": "select_item_" + dli.magefanUniqueEventId,
828                                        "ecomm_pagetype": dli.ecomm_pagetype,
829                                        "google_tag_params": {
830                                            "ecomm_pagetype": dli.google_tag_params.ecomm_pagetype
831                                        }
832                                    };
833                                    
834                                    let dynamicKeys = ["customer_firstname","customer_lastname","customer_email","customer_dob","customer_gender","customer_telephone","customer_postcode","customer_city","customer_region","customer_country_id","customer_identifier","customerGroup"];
835                                    for (x=0; x<dynamicKeys.length;x++) {
836                                        let key = dynamicKeys[x];
837                                        newDataLayer[key] = dli[key];
838                                    }
839                                    
840                                    newDataLayer.ecommerce.items[0].index = index;
841                                    break;
842                                };
843                            };
844
845                            if (newDataLayer) {
846                                window.dataLayer.push(newDataLayer);
847
848                                //window.location = url;
849                                //return false;
850                            }
851                        }
852                    }
853                }
854            });
855        });
856    });
857</script>
857    <!-- Google Tag Manager (noscript) -->
858            <!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 858-859
858
859<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
859GTM-NW62S7VM
vendor: 85 bytes, lines 859-860
859"
860height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
861<!-- End Google Tag Manager (noscript) -->    
862
863    
863<script
864        src="https://js.squarecdn.com/square-marketplace.js"
865        data-min="1"
866        data-max="4000.00"
867        async></script>
vendor: 1 bytes, line 867
867
868<script>
869    document.addEventListener('DOMContentLoaded', function() {
870        'use strict';
871
872        window.psloginLoginPath = "https\u003A\u002F\u002Fwww.mrhankeystoys.com\u002Fpslogin\u002Faccount\u002Flogin\u002F";
873        window.customerLogoutPath = "https\u003A\u002F\u002Fwww.mrhankeystoys.com\u002Fcustomer\u002Faccount\u002Flogout\u002F";
874
875        let url = document.URL.toLowerCase();
876        if (url) {
877            let skip = false;
878            let paths = ["customer\/account","pslogin\/account"];
879
880            for (let path of paths) {
881                if (url.indexOf(path) !== -1) {
882                    skip = true;
883                    break;
884                }
885            }
886
887            if (!skip) {
888                hyva.setCookie('pslogin_referer', document.URL, 'session', true);
889            }
890        }
891
892
893    }, false);
894        </script>
894
895<form style="display:none;" class="form" action="https://www.mrhankeystoys.com/pslogin/account/loginPost/" method="post" id="pslogin-login-form">
896    <input id="pslogin-login-referer" name="referer" type="hidden" value="">
897    <input id="pslogin-login-action" name="auth_action" type="hidden" value="">
898    <input id="pslogin-login-submit" type="submit" value="">
899</form>
900
901<div x-data="initPsloginBindEmailModal()">
902        <div x-cloak    data-dialog-ref-name="dialog"
903    x-bind="overlay"
904    class="fixed inset-0 bg-black bg-opacity-50 z-50">
905    <div class="fixed flex justify-center items-center text-left z-40 inset-0">
906        <div x-ref="dialog" role="dialog" aria-modal="true"
907                                                     aria-labelledby="bind-email"
908                         class="inline-block bg-white shadow-xl rounded-lg max-h-screen overflow-auto overscroll-y-contain border border-10 lg:max-w-xl relative p-5">
909            
910<button class="prpop-close-btn outline-none absolute top-4 right-4" @click="hide">&#10005;</button>
911<div id="pslogin-bind-email-modal" :class="{['pslogin-state-step-' + step]: true, 'ps-no-linked': ! linkedNetworksHtml}">
912
913    <div class="text-2xl font-light border-b border-gray-500 pb-4 mb-4 break-words" x-text="firstTitle"></div>
914
915    <div
916    class="z-50 fixed inset-0 grid place-items-center bg-white/70 text-primary"
917    x-cloak
918    x-show="isLoading"
919    x-transition.opacity.duration.200ms
920>
921    <div class="flex gap-10 items-center p-4">
922        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" width="57" height="57" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
923    <style>
924        @keyframes spinner-ball-triangle1 {
925            0% { transform: translate(0%, 0%); }
926            33% { transform: translate(38%, -79%); }
927            66% { transform: translate(77%, 0%); }
928            100% { transform: translate(0%, 0%); }
929        }
930
931        @keyframes spinner-ball-triangle2 {
932            0% { transform: translate(0%, 0%); }
933            33% { transform: translate(38%, 79%); }
934            66% { transform: translate(-38%, 79%); }
935            100% { transform: translate(0%, 0%); }
936        }
937
938        @keyframes spinner-ball-triangle3 {
939            0% { transform: translate(0%, 0%); }
940            33% { transform: translate(-77%, 0%); }
941            66% { transform: translate(-38%, -79%); }
942            100% { transform: translate(0%, 0%); }
943        }
944    </style>
945    <circle cx="5" cy="50" r="5" style="animation: spinner-ball-triangle1 2.2s linear infinite"/>
946    <circle cx="27" cy="5" r="5" style="animation: spinner-ball-triangle2 2.2s linear infinite"/>
947    <circle cx="49" cy="50" r="5" style="animation: spinner-ball-triangle3 2.2s linear infinite"/>
948</svg>
949        <span class="text-xl select-none">
950            Loading...        </span>
951    </div>
952</div>
953
954    <template x-if="error">
955        <div class="message error">
956            <div x-html="error"></div>
957        </div>
958    </template>
959    <template x-if="1 === step">
960        <div class="pslogin-form-title mb-3 break-words">Please provide your email</div>
961    </template>
962    <template x-if="2 === step">
963        <div class="pslogin-form-title mb-3 break-words" x-text="alreadyRegisteredText"></div>
964    </template>
965    <template x-if="4 === step">
966        <div class="pslogin-form-title mb-3 break-words">We couldn&#039;t find an account with your credentials. Are you already registered at our store?</div>
967    </template>
968    <template x-if="5 === step">
969        <div class="pslogin-form-title mb-3 break-words">Please enter your store password to link your social account. Or login using previously used social networks.</div>
970    </template>
971    <template x-if="3 !== step">
972        <div class="pslogin-authorization-wrapper">
973            <form name="pslogin_bind" id="pslogin_bind">
974                <fieldset class="fieldset">
975                    <div class="fieldset-wrapper mb-4">
976                        <template x-if="5 === step">
977                            <div class="field mb-3">
978                                <label class="label mb-0 font-semibold" for="pslogin_bind_email">Email</label>
979                                <div class="control">
980                                    <input type="email" id="pslogin_bind_email" name="pslogin_email" autocomplete="email" value="" title="Your&#x20;Email&#x20;Address" class="input-text required-entry w-full" data-validate='{"required": true}' aria-required="true" required>
981                                </div>
982                            </div>
983                        </template>
984                        <template x-if="1 === step || 2 === step">
985                            <div class="field mb-3">
986                                <label class="label mb-0 font-semibold" for="pslogin_bind_email">Email</label>
987                                <div class="control">
988                                    <input type="email" id="pslogin_bind_email" name="pslogin_email" autocomplete="email" :value="customer.email" x-model="customer.email" title="Your&#x20;Email&#x20;Address" :disabled="2 === step" class="input-text required-entry w-full" data-validate='{"required": true}' aria-required="true" required>
989                                </div>
990                            </div>
991                        </template>
992                        <template x-if="2 === step || 5 === step">
993                            <div class="field mb-3">
994                                <label class="label mb-0 font-semibold" for="pslogin_bind_pass">Password</label>
995                                <div class="control">
996                                    <input id="pslogin_bind_pass" type="password" name="pslogin_pass" title="Password" class="input-text w-full" data-validate='{"required": true, "password": true, "minlength": 8}' autocomplete="off" aria-required="true" aria-autocomplete="list" required>
997                                </div>
998                            </div>
999                        </template>
1000                    </div>
1001                </fieldset>
1002                <template x-if="3 !== step">
1003                    <div class="button-wrapper flex flex-wrap items-center justify-between gap-3">
1004                        <template x-if="1 === step || 2 === step || 5 === step">
1005                            <button class="action primary pslogin-bind-step-5 btn btn-primary" type="button" @click="loginDependOnStep">
1006                                <span>Login</span>
1007                            </button>
1008                        </template>
1009                        <template x-if="2 === step || 5 === step">
1010                            <div class="secondary">
1011                                <a class="action remind text-blue-700 hover:underline" target="_blank" :href="forgotPassUrl">
1012                                    <span>Forgot Your Password?</span>
1013                                </a>
1014                            </div>
1015                        </template>
1016                        <template x-if="4 === step">
1017                            <div>
1018                                <button class="action primary pslogin-bind-step-4 text-blue-700 hover:underline" type="button" @click="setFifthStep">
1019                                    <span>Yes, I already have an account</span>
1020                                </button>
1021                                <button class="action primary pslogin-bind-step-4 text-blue-700 hover:underline" type="button" @click="registerWithEmail">
1022                                    <span>No, I want to register a new account</span>
1023                                </button>
1024                            </div>
1025                        </template>
1026                    </div>
1027                </template>
1028            </form>
1029            <!-- <template x-if="linkedNetworksHtml">
1030                <div>
1031                    <span class="pslogin-or-border">
1032                        OR                    </span>
1033                    <div class="ps-login-networks-container" x-html="linkedNetworksHtml"></div>
1034                </div>
1035            </template> -->
1036            <template x-if="loginNetworksButtonsHtml && 5 === step">
1037                <div>
1038                    <span class="pslogin-or-border">
1039                        OR                    </span>
1040                    <div class="ps-login-networks-container" x-html="loginNetworksButtonsHtml"></div>
1041                    
1042<script>
1043    function initPsloginButtons_bindEmailPopup() {
1044        let buttons = [{"code":"apple","icon":"https:\/\/www.mrhankeystoys.com\/static\/version1790675038\/frontend\/Krish\/mrhankeytoys\/en_US\/Plumrocket_SocialLoginPro\/images\/networks\/apple_icon.svg","design":"default","height":650,"width":650,"visible":true,"textColor":"","backgroundColor":"#000","borderColor":"","openOnPage":false,"text":"Continue with Apple","image":"","url":"https:\/\/www.mrhankeystoys.com\/pslogin\/account\/douse\/type\/apple\/refresh\/1791037041\/customer_action\/login\/call\/pslogin.account_login.network\/"},{"code":"twitter","icon":"https:\/\/www.mrhankeystoys.com\/static\/version1790675038\/frontend\/Krish\/mrhankeytoys\/en_US\/Plumrocket_SocialLoginPro\/images\/networks\/twitter_icon.svg","design":"default","height":630,"width":650,"visible":true,"textColor":"#ffffff","backgroundColor":"#28a9e2","borderColor":"","openOnPage":true,"text":"Continue with X","image":"","url":"https:\/\/www.mrhankeystoys.com\/pslogin\/account\/douse\/type\/twitter\/refresh\/1791037041\/customer_action\/login\/call\/pslogin.account_login.network\/"},{"code":"google","icon":"https:\/\/www.mrhankeystoys.com\/static\/version1790675038\/frontend\/Krish\/mrhankeytoys\/en_US\/Plumrocket_SocialLoginPro\/images\/networks\/google_icon.svg","design":"default","height":450,"width":450,"visible":true,"textColor":"#1a1a1a","backgroundColor":"#fff","borderColor":"#d9d9d9","openOnPage":false,"text":"Continue with Google","image":"","url":"https:\/\/www.mrhankeystoys.com\/pslogin\/account\/douse\/type\/google\/refresh\/1791037041\/customer_action\/login\/call\/pslogin.account_login.network\/"},{"code":"amazon","icon":"https:\/\/www.mrhankeystoys.com\/static\/version1790675038\/frontend\/Krish\/mrhankeytoys\/en_US\/Plumrocket_SocialLoginPro\/images\/networks\/amazon_icon.svg","design":"default","height":500,"width":720,"visible":true,"textColor":"","backgroundColor":"#ff8e2e","borderColor":"","openOnPage":false,"text":"Continue with Amazon","image":"","url":"https:\/\/www.mrhankeystoys.com\/pslogin\/account\/douse\/type\/amazon\/refresh\/1791037041\/customer_action\/login\/call\/pslogin.account_login.network\/"}];
1045
1046        return {
1047            buttons,
1048            show: false,
1049            title: 'show\u0020more',
1050            toggle() {
1051                this.show = !this.show;
1052                this.title = this.show ?
1053                    'show\u0020less' :
1054                    'show\u0020more';
1055            },
1056            hasHidden() {
1057                return this.buttons.filter(btn => !btn.visible).length > 0;
1058            },
1059            login(btn) {
1060                if (! btn.url) {
1061                    alert('The\u0020Login\u0020Application\u0020was\u0020not\u0020configured\u0020correctly.\u0020If\u0020your\u0020are\u0020the\u0020admin\u0020of\u0020store\u003A\u0020Please\u0020activate\u0020\u201CEnable\u0020Logging\u201D\u0020in\u0020Magento\u0020Login\u0020Extension\u0020and\u0020try\u0020again\u0020to\u0020see\u0020error\u0020details.');
1062                    return false;
1063                }
1064
1065                let href = btn.url,
1066                    openOnPage = btn.openOnPage,
1067                    width = btn.width,
1068                    height = btn.height;
1069
1070                if (openOnPage) {
1071                    window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
1072                    window.location.href = href;
1073                    return;
1074                }
1075
1076                const bc = new BroadcastChannel('loginChannel');
1077                bc.onmessage = (event) => {
1078                    if (event.data.type === 'loginSuccess') {
1079                        document.getElementById('pslogin-login-referer').value = event.data.referer;
1080                        document.getElementById('pslogin-login-action').value = event.data.action;
1081                        document.getElementById('pslogin-login-submit').click();
1082                    }
1083                    bc.close();
1084                };
1085
1086                width = width ? width : 650;
1087                height = height ? height : 350;
1088
1089                if (href.indexOf('js_login_method') === 0) {
1090                    // For Telegram
1091                    // prCustomJsLoginMethod(href, width, height);
1092                    return;
1093                }
1094
1095                const popup = this.openPopup(href, width, height);
1096                this.loadingMessage(popup);
1097
1098                return false;
1099            },
1100            /**
1101             * Open OAuth window using Modal/InitOAuth action.
1102             *
1103             * @since 3.10.0
1104             * @param href
1105             * @param width
1106             * @param height
1107             * @returns {WindowProxy}
1108             */
1109            openPopup(href, width, height) {
1110                const left = parseInt((window.innerWidth - width) / 2);
1111                const top = parseInt((window.innerHeight - height) / 2);
1112
1113                const params = [
1114                    'resizable=yes',
1115                    'scrollbars=no',
1116                    'toolbar=no',
1117                    'menubar=no',
1118                    'location=no',
1119                    'directories=no',
1120                    'status=yes',
1121                    'width=' + width,
1122                    'height=' + height,
1123                    'left=' + left,
1124                    'top=' + top
1125                ];
1126
1127                const popup = window.open(href, 'pslogin_popup', params.join(','));
1128                popup.focus();
1129
1130                return popup;
1131            },
1132            loadingMessage(popup) {
1133                const loaderText = 'Loading...';
1134                let html = '<!DOCTYPE html><html style="height: 100%;"><head><meta name="viewport" content="width=device-width, initial-scale=1"><title>' + loaderText + '</title></head>';
1135                html += '<body style="height: 100%; margin: 0; padding: 0;">';
1136                html += '<div style="text-align: center; height: 100%;"><div id="loader" style="top: 50%; position: relative; margin-top: -50px; color: #646464; height:25px; font-size: 25px; text-align: center; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">' + loaderText + '</div></div>';
1137                html += '</body></html>';
1138
1139                popup.document.documentElement.innerHTML = html;
1140            }
1141        };
1142    }
1143</script>
1143
1144                </div>
1145            </template>
1146        </div>
1147    </template>
1148    <template x-if="3 === step">
1149        <div class="flex flex-col items-center">
1150            <img class="pslogin-success-icon" :src="successIcon" alt="Success" width="92" height="92">
1151            <div class="pslogin-thank-text">
1152                THANK YOU!            </div>
1153        </div>
1154    </template>
1155</div>
1156        </div>
1157    </div>
1158    </div>
1159</div>
1160
1161<script>
1162    function initPsloginBindEmailModal() {
1163        'use strict';
1164
1165        return {
1166            ...hyva.modal(),
1167            ...{"components":{"pr-pslogin-email-popup":{"component":"Plumrocket_SocialLoginPro\/js\/view\/bind-email","storeName":"Magento Store","loginWithEmailUrl":"https:\/\/www.mrhankeystoys.com\/pslogin\/account\/register\/","loginWithPassUrl":"https:\/\/www.mrhankeystoys.com\/pslogin\/account_login\/password\/","forgotPassUrl":"https:\/\/www.mrhankeystoys.com\/customer\/account\/forgotpassword\/","login_networks_buttons_html":"","successIcon":"https:\/\/www.mrhankeystoys.com\/static\/version1790675038\/frontend\/Krish\/mrhankeytoys\/en_US\/Plumrocket_SocialLoginPro\/images\/success_icon.png","loaderIconSrc":"https:\/\/www.mrhankeystoys.com\/static\/version1790675038\/frontend\/Krish\/mrhankeytoys\/en_US\/images\/loader-2.gif"}}}['components']['pr-pslogin-email-popup'],
1168
1169            /**
1170             * Popup will change by this variable
1171             *
1172             * 1 - "Email Missing" Popup
1173             * 2 - "Email Exists" Popup
1174             * 3 - "Success" Popup
1175             * 4 - "Do you have an account?" Popup
1176             * 5 - "Link to existing account" Popup
1177             */
1178            step: 1,
1179            isLoading: false,
1180
1181            customer: {
1182                name: '',
1183                email: '',
1184            },
1185            success: {
1186                redirectUrl: '',
1187                message: '',
1188            },
1189            error: '',
1190
1191            /**
1192             * Social network type
1193             */
1194            type: '',
1195
1196            /**
1197             * Networks already linked to account
1198             */
1199            linkedNetworksHtml: '',
1200            loginNetworksButtonsHtml: '',
1201
1202            firstTitlePatter: 'Welcome\u0020\u00251',
1203            firstTitle: '',
1204            secondTitlePatter: 'Hello\u0020\u00251',
1205            secondTitle: '',
1206
1207            alreadyRegisteredPattern: 'An\u0020email\u0020is\u0020already\u0020registered\u0020at\u0020Hankey\u0027s\u0020Toys.\u0020Enter\u0020your\u0020password\u0020to\u0020link\u0020your\u0020social\u0020account.',
1208            alreadyRegisteredText: '',
1209
1210            errorMessageLifetime: 4000,
1211            successRedirectDelay: 2000,
1212
1213            init() {
1214                document.pslogin = {
1215                    bindEmail: this
1216                };
1217
1218                this.$watch('step', this.afterSetStep.bind(this));
1219                this.loginNetworksButtonsHtml = this.login_networks_buttons_html;
1220                this.autoOpen()
1221
1222                // Object.assign(this, hyva.formValidation(this.$refs.form));
1223            },
1224
1225            autoOpen: function () {
1226                var params = new URLSearchParams(location.search);
1227                if (! params.get('showPrBindEmailPopup')) {
1228                    return;
1229                }
1230
1231                this.openPopup(
1232                    String(params.get('firstname') ? params.get('firstname') : ''),
1233                    String(params.get('email') ? params.get('email') : ''),
1234                    String(params.get('networkCode') ? params.get('networkCode') : ''),
1235                    Number(params.get('step'))
1236                );
1237                this.removeBindEmailPopupParams();
1238            },
1239
1240            getBindEmailPopupParams() {
1241                return [
1242                    'showPrBindEmailPopup',
1243                    'firstname',
1244                    'email',
1245                    'networkCode',
1246                    'step',
1247                    'noforce'
1248                ];
1249            },
1250
1251            cleanBindEmailPopupUrl(url) {
1252                if (!url) {
1253                    return url;
1254                }
1255
1256                try {
1257                    const parsedUrl = new URL(url, window.location.origin);
1258                    this.getBindEmailPopupParams().forEach(param => parsedUrl.searchParams.delete(param));
1259
1260                    return parsedUrl.toString();
1261                } catch (error) {
1262                    return url;
1263                }
1264            },
1265
1266            removeBindEmailPopupParams() {
1267                if (!window.history || !window.history.replaceState) {
1268                    return;
1269                }
1270
1271                const cleanUrl = this.cleanBindEmailPopupUrl(window.location.href);
1272                if (cleanUrl && cleanUrl !== window.location.href) {
1273                    window.history.replaceState({}, document.title, cleanUrl);
1274                }
1275            },
1276
1277            /**
1278             * @param {string} name
1279             * @param {string} email
1280             * @param {string} type
1281             * @param {int}    step
1282             */
1283            openPopup(name, email, type, step) {
1284                this.setStep(step ? step : 1);
1285
1286                this.firstTitle = hyva.str(this.firstTitlePatter, name);
1287                this.alreadyRegisteredText = hyva.str(this.alreadyRegisteredPattern, email, this.storeName);
1288
1289                this.customer.name = name;
1290                this.customer.email = email;
1291                this.type = type;
1292
1293                this.renderError('');
1294
1295                this.closePrPopupLogin();
1296
1297                this.show('dialog');
1298            },
1299
1300            /**
1301             * Convert number into int
1302             *
1303             * @param stepNumber
1304             */
1305            setStep(stepNumber) {
1306                this.step = +stepNumber;
1307            },
1308
1309            /**
1310             * For bind click in template
1311             */
1312            setFifthStep() {
1313                this.setStep(5);
1314            },
1315
1316            afterSetStep(stepNumber) {
1317                if (3 === stepNumber) {
1318                    this.renderError('');
1319                    this.renderSuccessRedirect();
1320                }
1321
1322                if (1 === stepNumber || 4 === stepNumber) {
1323                    this.firstTitle = hyva.str(this.firstTitlePatter, this.customer.name);
1324                } else {
1325                    this.firstTitle = hyva.str(this.secondTitlePatter, this.customer.name);
1326                }
1327
1328                if (2 === stepNumber) {
1329                    this.buildAlreadyRegisteredText();
1330                }
1331            },
1332
1333            setSuccessRedirect(redirectUrl) {
1334                this.success.redirectUrl = this.cleanBindEmailPopupUrl(redirectUrl);
1335            },
1336
1337            buildAlreadyRegisteredText() {
1338                this.alreadyRegisteredText = hyva.str(
1339                    this.alreadyRegisteredPattern,
1340                    this.customer.email,
1341                    this.storeName
1342                );
1343            },
1344
1345            registerWithEmail() {
1346                let email = (this.step === 4) ?
1347                    this.customer.email :
1348                    document.getElementById('pslogin_bind_email').value.trim();
1349
1350                if (email) {
1351                    let postData = {
1352                        email: email,
1353                        type: this.type,
1354                        ajax: 1,
1355                        step: this.step,
1356                        form_key: hyva.getFormKey()
1357                    };
1358
1359                    this.isLoading = true;
1360                    fetch(this.loginWithEmailUrl, {
1361                            method: 'POST',
1362                            headers: {
1363                                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
1364                            },
1365                            body: new URLSearchParams(postData),
1366                        })
1367                        .then(response => {
1368                            this.isLoading = false;
1369                            if (response.ok) {
1370                                return response.json();
1371                            } else {
1372                                console.warn('GET request failed', response);
1373                            }
1374                        })
1375                        .then(responseData => {
1376                            if (responseData) {
1377                                if (!this.validateResponse(responseData)) {
1378                                    console.error('Invalid response');
1379                                    return;
1380                                }
1381
1382                                if (responseData.status) {
1383                                    if (responseData.data.exist) {
1384                                        this.customer.email = email;
1385                                        this.buildAlreadyRegisteredText();
1386
1387                                        /* if (responseData.data.linked_networks) {
1388                                            this.linkedNetworksHtml = responseData.data.linked_networks;
1389                                        } */
1390
1391                                        this.setStep(2);
1392                                        return;
1393                                    }
1394
1395                                    if (responseData.data.step) {
1396                                        this.customer.email = email;
1397                                        this.setStep(responseData.data.step);
1398                                        return;
1399                                    }
1400
1401                                    if (responseData.data.redirectUrl && responseData.data.message) {
1402                                        this.success.redirectUrl = responseData.data.redirectUrl;
1403                                        this.success.message = responseData.data.message;
1404                                    } else {
1405                                        console.error('Invalid data response');
1406                                    }
1407
1408                                    this.setStep(3);
1409                                } else {
1410                                    console.error(responseData.error);
1411                                    if (responseData.data.redirectUrl) {
1412                                        window.location.href = responseData.data.redirectUrl;
1413                                    }
1414                                }
1415                            }
1416                        })
1417                        .catch(function name(params) {
1418                            window.console && console.log(status + ': ' + error + '\nResponse text:\n' + jqXHR.responseText);
1419                        });
1420                }
1421            },
1422
1423            loginDependOnStep() {
1424                switch (this.step) {
1425                    case 1:
1426                        this.registerWithEmail();
1427                        break;
1428                    case 2:
1429                        this.loginWithPass();
1430                        break;
1431                    case 5:
1432                        this.loginWithPassTakeEmail();
1433                        break;
1434                }
1435            },
1436
1437            loginWithPassTakeEmail() {
1438                let email = document.getElementById('pslogin_bind_email').value.trim();
1439                this.loginWithPass(email);
1440            },
1441
1442            loginWithPass(email) {
1443                if (typeof email === 'object') {
1444                    email = undefined;
1445                }
1446
1447                let password = document.getElementById('pslogin_bind_pass').value.trim();
1448
1449                if (!password || (typeof email !== 'undefined' && !email)) {
1450                    let form = document.getElementById('pslogin_bind');
1451                    if (typeof form.reportValidity === 'function') {
1452                        form.reportValidity();
1453                    }
1454
1455                    return;
1456                }
1457
1458                let postData = {
1459                    password,
1460                    type: this.type,
1461                    ajax: 1,
1462                    form_key: hyva.getFormKey()
1463                };
1464
1465                if (email) {
1466                    postData.email = email;
1467                }
1468
1469                this.isLoading = true;
1470                fetch(this.loginWithPassUrl, {
1471                        method: 'POST',
1472                        headers: {
1473                            // contentType: 'application/json',
1474                            // "X-Requested-With": "XMLHttpRequest",
1475                            // "Accept": "application/json"
1476                            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
1477                        },
1478                        // body: JSON.stringify(postData),
1479                        body: new URLSearchParams(postData),
1480                    })
1481                    .then(response => {
1482                        this.isLoading = false;
1483                        if (response.ok) {
1484                            return response.json();
1485                        } else {
1486                            console.warn('GET request failed', response);
1487                        }
1488                    })
1489                    .then(responseData => {
1490                        if (responseData) {
1491                            if (!this.validateResponse(responseData)) {
1492                                console.error('Invalid response');
1493                                return;
1494                            }
1495
1496                            if (responseData.status) {
1497                                if (responseData.data.redirectUrl) {
1498                                    this.setSuccessRedirect(responseData.data.redirectUrl);
1499                                    this.setStep(3);
1500                                } else {
1501                                    console.error('Invalid data response');
1502                                }
1503                            } else {
1504                                this.renderError(responseData.error);
1505                                if (responseData.data.redirectUrl) {
1506                                    this.renderRedirect(responseData.data.redirectUrl, responseData.error);
1507                                }
1508                            }
1509                        }
1510                    })
1511                    .catch(function name(params) {
1512                        window.console && console.log(status + ': ' + error + '\nResponse text:\n' + jqXHR.responseText);
1513                    });
1514            },
1515
1516            /**
1517             * @param {{}} data
1518             */
1519            validateResponse(data) {
1520                return typeof data === 'object' &&
1521                    data.hasOwnProperty('status') &&
1522                    data.hasOwnProperty('data') &&
1523                    data.hasOwnProperty('error')
1524            },
1525
1526            renderRedirect(redirectUrl, message) {
1527                redirectUrl = this.cleanBindEmailPopupUrl(redirectUrl);
1528
1529                if (message) {
1530                    setTimeout(() => window.location.href = redirectUrl, this.successRedirectDelay);
1531                } else {
1532                    window.location.href = redirectUrl;
1533                }
1534            },
1535
1536            renderError(message) {
1537                if (message) {
1538                    this.error = message;
1539                    setTimeout(() => this.error = '', this.errorMessageLifetime);
1540                } else {
1541                    this.error = '';
1542                }
1543            },
1544
1545            renderSuccessRedirect() {
1546                this.renderRedirect(this.success.redirectUrl, true);
1547            },
1548
1549            openForgotPassword() {
1550                window.open(this.forgotPassUrl);
1551            },
1552
1553            closePrPopupLogin() {
1554                if (typeof window.plumrocket !== 'undefined' &&
1555                    typeof window.plumrocket.popupLoginControl !== 'undefined'
1556                ) {
1557                    window.plumrocket.popupLoginControl.closeForm();
1558                }
1559            }
1560        };
1561    }
1562</script>
1562
1563<input name="form_key" type="hidden" value="9SFsreOEuib59vuZ" />
1564    <noscript>
1565        <section class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal">
1566            <div class="container text-center">
1567                <p>
1568                    <strong>JavaScript seems to be disabled in your browser.</strong>
1569                    <span>
1570                        For the best experience on our site, be sure to turn on Javascript in your browser.                    </span>
1571                </p>
1572            </div>
1573        </section>
1574    </noscript>
1575
1576
1577<script>
1578    document.body.addEventListener('touchstart', () => {}, {passive: true})
1579</script>
1579
1580<div class="page-wrapper"><header class="page-header"><style>#html-body [data-pb-style=AE6294S]{display:none}</style><div class="header-top-part" data-content-type="html" data-appearance="default" data-element="main" data-pb-style="AE6294S" data-decoded="true"><div class="container flex justify-between"> 
1581    <div style="font-size:20px !important" class="start-sale m-auto">
1582        <span>See <a class="underline font-bold" href="/faq">FAQs</a> for sale rules</span>
1583    </div>
1584</div>
1585
1586<!-- <div class="container flex justify-between">
1587    <div class="email-on"><label>Email Us: </label><a href="/contact-us">[email protected]</a></div>
1588    <div class="start-sale">
1589        <span>Get a Head Start Sale</span>
1590        <span>-</span>
1591        <span>35h : 02m : 25s</span>
1592        <span>-</span>
1593        <span>30-70% Off Sitewide</span>
1594    </div>
1595
1596</div> --></div>
1596<script>
1597    function initHeader () {
1598        return {
1599            searchOpen: true,
1600            cart: {},
1601            init() {
1602                this.checkHeaderSize();
1603            },
1604            checkHeaderSize() {
1605                const pageHeader = document.querySelector('.page-header');
1606                if (!pageHeader) return;
1607                document.documentElement.style.setProperty("--page-header-height", `${pageHeader.offsetHeight}px`);
1608            },
1609            summaryCount() {
1610                return this.cart.summary_count || 0;
1611            },
1612            isCartOpen: false,
1613            getData() {
1614                const data = this.$event.detail.data;
1615                if (data.cart) { this.cart = data.cart }
1616            },
1617            ariaLabel() {
1618                return 'Toggle\u0020minicart, ' +
1619                    (this.isCartEmpty() ? 'Cart\u0020is\u0020empty' : (
1620                        Math.abs(this.summaryCount()) > 1 ?
1621                            hyva.str('\u00251\u0020items', this.summaryCount()) :
1622                            hyva.str('\u00251\u0020item', this.summaryCount())
1623                    ))
1624            },
1625            isCartEmpty() {
1626                return !this.summaryCount()
1627            },
1628            openCart() {
1629                this.$dispatch('toggle-cart', {
1630                    isOpen: true
1631                })
1632            },
1633            toggleCart() {
1634                const event = this.$event;
1635                if (event.detail && event.detail.isOpen !== undefined) {
1636                    this.isCartOpen = event.detail.isOpen
1637                    if (!this.isCartOpen && this.$refs && this.$refs.cartButton) {
1638                        this.$refs.cartButton.focus()
1639                    }
1640                } else {
1641                                        this.isCartOpen = true
1642                }
1643            },
1644            searchClosed() {
1645                return !this.searchOpen;
1646            },
1647            toggleSearchForm() {
1648                this.searchOpen = !this.searchOpen;
1649                this.$dispatch('search-open');
1650            },
1651            searchClose() {
1652                this.searchOpen = false;
1653            },
1654            searchEscape() {
1655                this.searchOpen = false;
1656                this.$refs.searchButton.focus();
1657            }
1658        }
1659    }
1660
1661    function initCompareHeader() {
1662        return {
1663            compareProducts: null,
1664            itemCount: 0,
1665            hiddenIfEmpty() {
1666                return {
1667                    'hidden': this.itemCount < 1
1668                }
1669            },
1670            linkAriaLabel() {
1671                const countLabel = this.itemCount > 1
1672                    ? hyva.str('\u00251\u0020Items', this.itemCount)
1673                    : hyva.str('\u00251\u0020Item', this.itemCount);
1674                return `Compare\u0020Products (${countLabel})`;
1675            },
1676            receiveCompareData() {
1677                const data = this.$event.detail.data;
1678                if (data['compare-products'] && data['compare-products'].count) {
1679                    this.compareProducts = data['compare-products'];
1680                    this.itemCount = this.compareProducts.count;
1681                }
1682            },
1683            itemCountLabel() {
1684                return `(${this.itemCount})`;
1685            }
1686        }
1687    }
1688
1689    function initWishlistHeader() {
1690        return {
1691            wishlistProducts: null,
1692            itemCount: 0,
1693            linkAriaLabel() {
1694                const countLabel = this.itemCount > 1
1695                    ? hyva.str('\u00251\u0020Items', this.itemCount)
1696                    : hyva.str('\u00251\u0020Item', this.itemCount);
1697                return `Wishlist\u0020Products (${countLabel})`;
1698            },
1699            receiveWishlistData() {
1700                const data = this.$event.detail.data;
1701
1702                this.itemCount = data.wishlist && data.wishlist.items
1703                    ? data.wishlist.items.length
1704                    : 0;
1705            }
1706        }
1707    }
1708
1709    window.addEventListener('alpine:init', () => {
1710        Alpine.data('initHeader', initHeader);
1711        Alpine.data('initCompareHeader', initCompareHeader);
1712        Alpine.data('initWishlistHeader', initWishlistHeader);
1713    }, { once: true })
1714</script>
1714
1715<div
1716    id="header"
1717    class="z-30 relative bg-white s1200:border-b s1200:border-[#666]"
1718    x-data="initHeader"
1719    @private-content-loaded.window="getData"
1720    @resize.window.debounce="checkHeaderSize"
1721>
1722    <div class="container flex justify-between items-center py-2.5 s1400:gap-10 s1200:py-4">
1723        <div class="flex items-center gap-2.5 shrink-0 s767:gap-5">
1724            
1725<div class="navigation hidden s1200:block mobile-menu" x-data="initMobileMenu" @sub-menu-state-change.window="hasActiveSubMenu">
1726    <button
1727        type="button"
1728        class="align-middle"
1729        aria-label="Open&#x20;menu"
1730        aria-controls="mobileMenu"
1731        @click="open"
1732    >
1733        <svg xmlns="http://www.w3.org/2000/svg" width="26" height="18" viewBox="0 0 26 18" fill="none"><path d="M17 16C17.5523 16 18 16.4477 18 17C18 17.5523 17.5523 18 17 18H1C0.447715 18 0 17.5523 0 17C0 16.4477 0.447715 16 1 16H17ZM25 8C25.5523 8 26 8.44771 26 9C26 9.55229 25.5523 10 25 10H1C0.447715 10 0 9.55229 0 9C0 8.44771 0.447715 8 1 8H25ZM25 0C25.5523 0 26 0.447715 26 1C26 1.55228 25.5523 2 25 2H1C0.447715 2 0 1.55228 0 1C0 0.447715 0.447715 0 1 0H25Z" fill="#0F0F0F"/></svg>
1734    </button>
1735
1736    <dialog
1737        id="mobileMenu"
1738        class="max-h-full h-screen w-full ml-0 open:flex flex-col transition ease-out duration-300 open:duration-500 black-white max-w-[420px] w-[calc(100%-54px)] s639:w-[calc(100%-54px)] s639:max-w-full backdrop:bg-black/25 backdrop:backdrop-blur-sm"
1739        x-show="isOpen"
1740        x-htmldialog.noscroll="close"
1741    >
1742        <div class="border-[#f4f4f4] border-b">
1743            <div class="flex items-center gap-2 py-4 px-6 hidden">
1744                <div></div>
1745                <button
1746                    type="button"
1747                    @click="close"
1748                    class="btn btn-secondary ms-auto p-2 bg-slate-200 text-slate-700"
1749                    aria-label="Close&#x20;menu"
1750                >
1751                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
1752  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
1753</svg>
1754                </button>
1755            </div>
1756                        <div class="flex px-5 items-center">
1757                <div class="flex items-center border-b-2 border-goldColor w-full">
1758                    <div @click="close" class="cursor-pointer"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
1759  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
1760</svg>
1761</div>
1762                    <button
1763                        class="h-[62px] text-[#999] flex items-center justify-center w-full aria-expanded:text-baseColor aria-expanded:font-semibold jost relative text-[22px]"
1764                        aria-controls="mobileMenuMain"
1765                        :aria-expanded="tabIsMain"
1766                        @click="setTabTo"
1767                    >
1768                        Menu                    </button>
1769                </div>
1770            </div>
1771        </div>
1772        <div class="grow relative text-white-black overflow-y-auto overflow-x-hidden">
1773            <nav class="hidden w-full duration-150 ease-in-out transform transition-display" :class="{ 'hidden' : !open }" x-show="tabIsMain">
1774                <div class="level-0 px-5">
1775                    <div class="level-0-div border-b border-[#f4f4f4] py-[18px] flex items-center">
1776                        <a class="level-0-link font-medium no-underline flex items-center w-full" href="/all">Shop All</a>
1777                    </div>
1778                </div>
1779                            <div class="level-0 px-5">
1780                    <div class="level-0-div border-b border-[#f4f4f4] py-[18px] flex items-center" id="controlsAccordionItemOne-category-node-3" :class="{ 'open bg-[#e6e6e6] -mx-5 px-5' : mobilePanelActiveId === 'category-node-3', 'not-open' : !mobilePanelActiveId}">
1781                        <a class="level-0-link font-medium no-underline flex items-center w-full" href="javascript:void(0);" @click="mobilePanelActiveId = mobilePanelActiveId === 'category-node-3' ? 0 : 'category-node-3'">
1782                            Realistic Dildos                        </a>
1783                                                    <a class="arrowBtn shrink-0" @click="mobilePanelActiveId = mobilePanelActiveId === 'category-node-3' ? 0 : 'category-node-3'" :class="{'rotate-90' : mobilePanelActiveId !== 'category-node-3', '-rotate-90' : mobilePanelActiveId === 'category-node-3',}">
1784                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="rightArrow" width="24" height="24" role="img">
1785  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1786<title>chevron-right</title></svg>
1787                            </a>
1788                                            </div>
1789                                            <div class="z-10 w-full h-full text-gray-500 bg-container-lighter" :class="{'hidden' : mobilePanelActiveId !== 'category-node-3', 'block' : mobilePanelActiveId === 'category-node-3',}">
1790                            <a href="https://www.mrhankeystoys.com/realistic" title="Realistic&#x20;Dildos" class="view-all pl-5 border-b border-[#f4f4f4] py-3 font-medium no-underline flex items-center w-full">
1791                                <span>View All</span>
1792                            </a>
1793                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1794                            <div class="level-1 px-5">
1795                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1796                                    <a href="https://www.mrhankeystoys.com/realistic/small-dildos" title="XS&#x2F;Small&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1797                                        <span>XS/Small Dildos</span>
1798                                    </a>
1799                                                                    </span>
1800                                                            </div>
1801                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1802                            <div class="level-1 px-5">
1803                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1804                                    <a href="https://www.mrhankeystoys.com/realistic/huge-dildos" title="Huge&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1805                                        <span>Huge Dildos</span>
1806                                    </a>
1807                                                                    </span>
1808                                                            </div>
1809                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1810                            <div class="level-1 px-5">
1811                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1812                                    <a href="https://www.mrhankeystoys.com/realistic/uncircumcised-dildos" title="Uncut&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1813                                        <span>Uncut Dildos</span>
1814                                    </a>
1815                                                                    </span>
1816                                                            </div>
1817                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1818                            <div class="level-1 px-5">
1819                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1820                                    <a href="https://www.mrhankeystoys.com/realistic/bbc-dildos" title="BBC&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1821                                        <span>BBC Dildos</span>
1822                                    </a>
1823                                                                    </span>
1824                                                            </div>
1825                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1826                            <div class="level-1 px-5">
1827                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1828                                    <a href="https://www.mrhankeystoys.com/realistic/lifecast" title="Lifecast&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1829                                        <span>Lifecast Dildos</span>
1830                                    </a>
1831                                                                    </span>
1832                                                            </div>
1833                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1834                            <div class="level-1 px-5">
1835                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1836                                    <a href="https://www.mrhankeystoys.com/realistic/pornstar-dildos" title="Pornstar&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1837                                        <span>Pornstar Dildos</span>
1838                                    </a>
1839                                                                    </span>
1840                                                            </div>
1841                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1842                            <div class="level-1 px-5">
1843                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1844                                    <a href="https://www.mrhankeystoys.com/realistic/hybrid-dildos" title="Hybrid&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1845                                        <span>Hybrid Dildos</span>
1846                                    </a>
1847                                                                    </span>
1848                                                            </div>
1849                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1850                            <div class="level-1 px-5">
1851                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1852                                    <a href="https://www.mrhankeystoys.com/realistic/anal-trainers" title="Anal&#x20;Trainers" class="level-1-link font-medium no-underline flex items-center w-full">
1853                                        <span>Anal Trainers</span>
1854                                    </a>
1855                                                                    </span>
1856                                                            </div>
1857                                                        <div class="level-1 px-5">
1858                                <div class="level-1-div py-3 flex items-center">
1859                                    <a href="https://www.mrhankeystoys.com/realistic" class="btn btn-primary w-full">Shop All Realistic Dildos</a>
1860                                </div>
1861                            </div>
1862                        </div>
1863                                    </div>
1864                            <div class="level-0 px-5">
1865                    <div class="level-0-div border-b border-[#f4f4f4] py-[18px] flex items-center" id="controlsAccordionItemOne-category-node-4" :class="{ 'open bg-[#e6e6e6] -mx-5 px-5' : mobilePanelActiveId === 'category-node-4', 'not-open' : !mobilePanelActiveId}">
1866                        <a class="level-0-link font-medium no-underline flex items-center w-full" href="javascript:void(0);" @click="mobilePanelActiveId = mobilePanelActiveId === 'category-node-4' ? 0 : 'category-node-4'">
1867                            Fantasy Dildos                        </a>
1868                                                    <a class="arrowBtn shrink-0" @click="mobilePanelActiveId = mobilePanelActiveId === 'category-node-4' ? 0 : 'category-node-4'" :class="{'rotate-90' : mobilePanelActiveId !== 'category-node-4', '-rotate-90' : mobilePanelActiveId === 'category-node-4',}">
1869                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="rightArrow" width="24" height="24" role="img">
1870  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1871<title>chevron-right</title></svg>
1872                            </a>
1873                                            </div>
1874                                            <div class="z-10 w-full h-full text-gray-500 bg-container-lighter" :class="{'hidden' : mobilePanelActiveId !== 'category-node-4', 'block' : mobilePanelActiveId === 'category-node-4',}">
1875                            <a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi" title="Fantasy&#x20;Dildos" class="view-all pl-5 border-b border-[#f4f4f4] py-3 font-medium no-underline flex items-center w-full">
1876                                <span>View All</span>
1877                            </a>
1878                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1879                            <div class="level-1 px-5">
1880                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1881                                    <a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/small-dildos" title="XS&#x2F;Small&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1882                                        <span>XS/Small Dildos</span>
1883                                    </a>
1884                                                                    </span>
1885                                                            </div>
1886                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1887                            <div class="level-1 px-5">
1888                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1889                                    <a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/huge-dildos" title="Huge&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1890                                        <span>Huge Dildos</span>
1891                                    </a>
1892                                                                    </span>
1893                                                            </div>
1894                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1895                            <div class="level-1 px-5">
1896                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1897                                    <a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/mythical-creatures" title="Mythical&#x20;Creatures" class="level-1-link font-medium no-underline flex items-center w-full">
1898                                        <span>Mythical Creatures</span>
1899                                    </a>
1900                                                                    </span>
1901                                                            </div>
1902                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1903                            <div class="level-1 px-5">
1904                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1905                                    <a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/dragon-dildos" title="Dragon&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1906                                        <span>Dragon Dildos</span>
1907                                    </a>
1908                                                                    </span>
1909                                                            </div>
1910                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1911                            <div class="level-1 px-5">
1912                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1913                                    <a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/dog-dildos" title="Dog&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1914                                        <span>Dog Dildos</span>
1915                                    </a>
1916                                                                    </span>
1917                                                            </div>
1918                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1919                            <div class="level-1 px-5">
1920                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1921                                    <a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/horse-dildos" title="Horse&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1922                                        <span>Horse Dildos</span>
1923                                    </a>
1924                                                                    </span>
1925                                                            </div>
1926                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1927                            <div class="level-1 px-5">
1928                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1929                                    <a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/alien-dildos" title="Alien&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1930                                        <span>Alien Dildos</span>
1931                                    </a>
1932                                                                    </span>
1933                                                            </div>
1934                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1935                            <div class="level-1 px-5">
1936                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1937                                    <a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/hentai-dildos" title="Hentai&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1938                                        <span>Hentai Dildos</span>
1939                                    </a>
1940                                                                    </span>
1941                                                            </div>
1942                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1943                            <div class="level-1 px-5">
1944                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1945                                    <a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/tentacle-dildos" title="Tentacle&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1946                                        <span>Tentacle Dildos</span>
1947                                    </a>
1948                                                                    </span>
1949                                                            </div>
1950                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1951                            <div class="level-1 px-5">
1952                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1953                                    <a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/anal-trainers" title="Anal&#x20;Trainers" class="level-1-link font-medium no-underline flex items-center w-full">
1954                                        <span>Anal Trainers</span>
1955                                    </a>
1956                                                                    </span>
1957                                                            </div>
1958                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1959                            <div class="level-1 px-5">
1960                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1961                                    <a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/monster-dildos" title="Monster&#x20;Dildos" class="level-1-link font-medium no-underline flex items-center w-full">
1962                                        <span>Monster Dildos</span>
1963                                    </a>
1964                                                                    </span>
1965                                                            </div>
1966                                                        <div class="level-1 px-5">
1967                                <div class="level-1-div py-3 flex items-center">
1968                                    <a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi" class="btn btn-primary w-full">Shop All Fantasy Dildos</a>
1969                                </div>
1970                            </div>
1971                        </div>
1972                                    </div>
1973                            <div class="level-0 px-5">
1974                    <div class="level-0-div border-b border-[#f4f4f4] py-[18px] flex items-center" id="controlsAccordionItemOne-category-node-5" :class="{ 'open bg-[#e
19746e6e6] -mx-5 px-5' : mobilePanelActiveId === 'category-node-5', 'not-open' : !mobilePanelActiveId}">
1975                        <a class="level-0-link font-medium no-underline flex items-center w-full" href="javascript:void(0);" @click="mobilePanelActiveId = mobilePanelActiveId === 'category-node-5' ? 0 : 'category-node-5'">
1976                            Play Gear                        </a>
1977                                                    <a class="arrowBtn shrink-0" @click="mobilePanelActiveId = mobilePanelActiveId === 'category-node-5' ? 0 : 'category-node-5'" :class="{'rotate-90' : mobilePanelActiveId !== 'category-node-5', '-rotate-90' : mobilePanelActiveId === 'category-node-5',}">
1978                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="rightArrow" width="24" height="24" role="img">
1979  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
1980<title>chevron-right</title></svg>
1981                            </a>
1982                                            </div>
1983                                            <div class="z-10 w-full h-full text-gray-500 bg-container-lighter" :class="{'hidden' : mobilePanelActiveId !== 'category-node-5', 'block' : mobilePanelActiveId === 'category-node-5',}">
1984                            <a href="https://www.mrhankeystoys.com/accessories" title="Play&#x20;Gear" class="view-all pl-5 border-b border-[#f4f4f4] py-3 font-medium no-underline flex items-center w-full">
1985                                <span>View All</span>
1986                            </a>
1987                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1988                            <div class="level-1 px-5">
1989                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1990                                    <a href="https://www.mrhankeystoys.com/accessories/suction-cups" title="Suction&#x20;Cups" class="level-1-link font-medium no-underline flex items-center w-full">
1991                                        <span>Suction Cups</span>
1992                                    </a>
1993                                                                    </span>
1994                                                            </div>
1995                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
1996                            <div class="level-1 px-5">
1997                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
1998                                    <a href="https://www.mrhankeystoys.com/accessories/lubricants" title="Lubricants" class="level-1-link font-medium no-underline flex items-center w-full">
1999                                        <span>Lubricants</span>
2000                                    </a>
2001                                                                    </span>
2002                                                            </div>
2003                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
2004                            <div class="level-1 px-5">
2005                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
2006                                    <a href="https://www.mrhankeystoys.com/accessories/strap-on-harnesses" title="Strap&#x20;On&#x20;Harnesses" class="level-1-link font-medium no-underline flex items-center w-full">
2007                                        <span>Strap On Harnesses</span>
2008                                    </a>
2009                                                                    </span>
2010                                                            </div>
2011                                                        <!-- Boucle pour le niveau 1 (sous-niveau) -->
2012                            <div class="level-1 px-5">
2013                                <span class="level-1-div  border-b border-[#f4f4f4] py-3 flex items-center ">
2014                                    <a href="https://www.mrhankeystoys.com/accessories/customizations" title="Custom&#x20;Colors&#x2F;Firmness" class="level-1-link font-medium no-underline flex items-center w-full">
2015                                        <span>Custom Colors/Firmness</span>
2016                                    </a>
2017                                                                    </span>
2018                                                            </div>
2019                                                        <div class="level-1 px-5">
2020                                <div class="level-1-div py-3 flex items-center">
2021                                    <a href="https://www.mrhankeystoys.com/accessories" class="btn btn-primary w-full">Shop All Play Gear</a>
2022                                </div>
2023                            </div>
2024                        </div>
2025                                    </div>
2026                        <div class="level-0 px-5">
2027                <div class="level-0-div border-b border-[#f4f4f4] py-[18px] flex items-center">
2028                    <a class="level-0-link font-medium no-underline flex items-center w-full" href="/promo-offers">Sales & Offers</a>
2029                </div>
2030            </div>
2031            <div class="level-0 px-5">
2032                <div class="level-0-div border-b border-[#f4f4f4] py-[18px] flex items-center">
2033                    <a class="level-0-link font-medium no-underline flex items-center w-full" href="/usage-and-safety">Usage & Safety</a>
2034                </div>
2035            </div>
2036            <div class="level-0 px-5">
2037                <div class="level-0-div border-b border-[#f4f4f4] py-[18px] flex items-center">
2038                    <a class="level-0-link font-medium no-underline flex items-center w-full" href="/faq">FAQs</a>
2039                </div>
2040            </div>
2041            <div x-data="customerInfo()" @private-content-loaded.window="updateCustomerData($event.detail.data)">
2042                <div x-show="customer.firstname">
2043                    <!-- My Account Link -->
2044                    <div class="level-0&#x20;px-5">
2045                        <a href="https://www.mrhankeystoys.com/customer/account/index/" class="level-0-link&#x20;font-medium&#x20;no-underline&#x20;flex&#x20;items-center&#x20;w-full&#x20;py-&#x5B;18px&#x5D;&#x20;border-b&#x20;border-&#x5B;&#x23;f4f4f4&#x5D;">
2046                            My Account                        </a>
2047                    </div>
2048
2049                    <!-- My Wishlist Link -->
2050                    <div class="level-0&#x20;px-5" x-data="wishlistInfo()" @private-content-loaded.window="updateWishlistData($event.detail.data)">
2051                        <a href="https://www.mrhankeystoys.com/wishlist/" class="level-0-link&#x20;font-medium&#x20;no-underline&#x20;flex&#x20;items-center&#x20;w-full&#x20;py-&#x5B;18px&#x5D;&#x20;border-b&#x20;border-&#x5B;&#x23;f4f4f4&#x5D; ">
2052                            My Wishlist                            <span class="ml-1" x-text="`(${wishlist})`"></span> <!-- Wishlist Count -->
2053                        </a>
2054                    </div>
2055
2056                    <!-- Sign Out Link -->
2057                    <div class="level-0&#x20;px-5">
2058                        <a href="https://www.mrhankeystoys.com/customer/account/logout/" class="level-0-link&#x20;font-medium&#x20;no-underline&#x20;flex&#x20;items-center&#x20;w-full&#x20;py-&#x5B;18px&#x5D;&#x20;border-b&#x20;border-&#x5B;&#x23;f4f4f4&#x5D; ">
2059                            Sign Out                        </a>
2060                    </div>
2061                </div>
2062
2063                <!-- Sign In and Register Section -->
2064                <div x-show="!customer.firstname">
2065                    <div class="level-0&#x20;px-5">
2066                        <a href="https://www.mrhankeystoys.com/customer/account/login/" class="level-0-link&#x20;font-medium&#x20;no-underline&#x20;flex&#x20;items-center&#x20;w-full&#x20;py-&#x5B;18px&#x5D;&#x20;border-b&#x20;border-&#x5B;&#x23;f4f4f4&#x5D; " @click="close">Sign In</a>
2067                    </div>
2068                    <div class="level-0&#x20;px-5">
2069                        <a href="https://www.mrhankeystoys.com/customer/account/create/" class="level-0-link&#x20;font-medium&#x20;no-underline&#x20;flex&#x20;items-center&#x20;w-full&#x20;py-&#x5B;18px&#x5D;&#x20;border-b&#x20;border-&#x5B;&#x23;f4f4f4&#x5D; " @click="close">Register</a>
2070                    </div>
2071                    <div class="level-0&#x20;px-5">
2072                        <a href="/wishlist" class="level-0-link&#x20;font-medium&#x20;no-underline&#x20;flex&#x20;items-center&#x20;w-full&#x20;py-&#x5B;18px&#x5D;&#x20;border-b&#x20;border-&#x5B;&#x23;f4f4f4&#x5D; " @click="close">Wishlist</a>
2073                    </div>
2074                </div>
2075            </div>
2076            <div class="level-0 px-5">
2077                <div class="level-0-div border-b border-[#f4f4f4] py-[18px] flex items-center">
2078                    <a class="level-0-link font-medium no-underline flex items-center w-full" href="/contact-us">Contact Us</a>
2079                </div>
2080            </div>
2081        </nav>
2082                    </div>
2083            </dialog>
2084</div>
2085
2086<script>
2087    document.addEventListener('alpine:init', () => {
2088        Alpine.data('initMobileMenu', () => ({
2089			mobilePanelActiveId: null,
2090            mobilePanelActiveId2: null,
2091            open: false,
2092            isOpen: false,
2093            isSubMenuOpen: false,
2094            isOverflowing: false,
2095            openTab: 'mobileMenuMain',
2096            init() {
2097                Array.from(this.$root.querySelectorAll('a')).forEach(link => {
2098                    if (link.href === `${window.location.origin}${window.location.pathname}`) {
2099                        link.setAttribute('aria-current', 'page');
2100                    }
2101                });
2102            },
2103            open() {
2104                this.isOpen = true;
2105            },
2106            close() {
2107                this.isOpen = false;
2108            },
2109            setTabTo() {
2110                this.openTab = this.$el.getAttribute('aria-controls');
2111            },
2112            tabIsMain() {
2113                return this.openTab === 'mobileMenuMain';
2114            },
2115            tabIsExtra() {
2116                return this.openTab === 'mobileMenuExtra';
2117            },
2118            tabIsSettings() {
2119                return this.openTab === 'mobileMenuSettings';
2120            },
2121            lockWrapperScroll() {
2122                return this.isSubMenuOpen ? { overflow: 'hidden' } : {}
2123            },
2124            hasActiveSubMenu() {
2125                this.isSubMenuOpen = !!this.$root.querySelector('[data-open]');
2126            }
2127        }));
2128
2129        Alpine.data('initMobileSubMenu', () => ({
2130            isOpen: false,
2131            open() {
2132                this.isOpen = true;
2133                this.$root.setAttribute('data-open', '');
2134                this.$nextTick(() => {
2135                    this.$dispatch('sub-menu-state-change');
2136                    this.$refs.closeSubMenuBtn.focus();
2137                    //this.toggleInert();
2138                })
2139            },
2140            close() {
2141                this.isOpen = false;
2142                this.$root.removeAttribute('data-open');
2143                this.toggleInert();
2144                this.$nextTick(() => {
2145                    this.$dispatch('sub-menu-state-change')
2146                    this.$refs.openSubMenuBtn.focus();
2147                })
2148            },
2149            toggleInert() {
2150                const items = this.$root.parentElement.children;
2151
2152                for (item of items) {
2153                    if (item.hasAttribute('data-open')) continue;
2154                    item.toggleAttribute('inert', this.isOpen);
2155                }
2156            }
2157        }));
2158
2159        Alpine.data('customerInfo', () => ({
2160            customer: {},
2161            updateCustomerData(data) {
2162                /*console.log("Customer Data Called");*/
2163                if (data.customer) {
2164                    this.customer = data.customer;
2165                }
2166            }
2167        }));
2168
2169        Alpine.data('wishlistInfo', () => ({
2170            wishlist: 0, // Initialize wishlist count
2171            updateWishlistData(data) {
2172                /*console.log("Wishlist Data Called");*/
2173                if (data.wishlist && typeof data.wishlist.counter !== 'undefined') {
2174                    this.wishlist = data.wishlist.counter; // Set wishlist count
2175                } else {
2176                    this.wishlist = 0; // Default to 0 if no wishlist data
2177                }
2178            }
2179        }));
2180    });
2181</script>
2181
2182            <a href="javascript:void(0);" class="hidden s767:block mobileSearch" @click.outside="searchOpen = true"
2183               @keydown.escape="searchOpen = true; $refs.searchButton.focus()">
2184               <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" class="fill-black" role="img">
2185<path d="M8.04938 16.0928C9.83702 16.0928 11.5735 15.4963 12.9838 14.3977L18.3045 19.7191C18.7019 20.103 19.3353 20.092 19.7192 19.6945C20.0936 19.3067 20.0936 18.6919 19.7192 18.3042L14.3985 12.9828C17.1243 9.47344 16.4895 4.41858 12.9807 1.69241C9.47196 -1.03376 4.41791 -0.398932 1.69215 3.11039C-1.03361 6.61971 -0.398872 11.6746 3.10992 14.4007C4.52252 15.4983 6.26058 16.0937 8.04938 16.0928ZM3.77429 3.77179C6.13538 1.4103 9.96347 1.41025 12.3246 3.7717C14.6857 6.13315 14.6858 9.96181 12.3247 12.3233C9.9636 14.6848 6.13551 14.6848 3.77438 12.3234C3.77434 12.3234 3.77434 12.3234 3.77429 12.3233C1.4132 9.97906 1.39929 6.16436 3.74318 3.80291C3.75354 3.79251 3.76389 3.78215 3.77429 3.77179Z" fill="#0F0F0F"/>
2186<title>searchIcon</title></svg>
2187            </a>
2188            <div class="min1400:min-w-[400px] shrink-0 s1023:w-20 s767:hidden">
2189<a
2190    class="inline-block align-middle"
2191    href="https://www.mrhankeystoys.com/"
2192    title="Go&#x20;to&#x20;Home&#x20;page"
2193>
2194            <picture>
2195    
2196    
2197            <source type="image/webp"
2198                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/logo/default/Logo.webp">
2199    
2200        <source type="image/png"
2201                                                        srcset="https://www.mrhankeystoys.com/media/logo/default/Logo.png">
2202
2203    <img
2204            src="https://www.mrhankeystoys.com/media/logo/default/Logo.png"
2205            alt="HankeysToys"
2206            width="137"
2207            height="90"
2208            loading="eager"
2209            fetchpriority="high"
2210        ></picture>
2211
2212    </a>
2213</div>
2214        </div>
2215        <div class="hidden s767:block shrink-0 s1023:w-20">
2216<a
2217    class="inline-block align-middle"
2218    href="https://www.mrhankeystoys.com/"
2219    title="Go&#x20;to&#x20;Home&#x20;page"
2220>
2221            <picture>
2222    
2223    
2224            <source type="image/webp"
2225                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/logo/default/Logo.webp">
2226    
2227        <source type="image/png"
2228                                                        srcset="https://www.mrhankeystoys.com/media/logo/default/Logo.png">
2229
2230    <img
2231            src="https://www.mrhankeystoys.com/media/logo/default/Logo.png"
2232            alt="HankeysToys"
2233            width="137"
2234            height="90"
2235            loading="eager"
2236            fetchpriority="high"
2237        ></picture>
2238
2239    </a>
2240</div>
2241        <div class="w-full max-w-[850px] s767:hidden searchPopup">
2242			<button type="button" id="menu-search-icon" class="hidden"
2243                aria-label="Toggle&#x20;search&#x20;form" aria-haspopup="true"
2244                x-ref="searchButton" :aria-expanded="searchOpen"
2245                @click="searchOpen = !searchOpen; $dispatch('search-open');" @keydown.escape="searchOpen = false">
2246                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
2247  <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/>
2248</svg>
2249            </button>
2250            <div class="hidden s767:block closeSearch fixed top-1 right-1 z-[51]"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
2251  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
2252</svg>
2253</div>
2254            <div id="search-content" class="!block s767:hidden" x-cloak
2255                x-show="searchOpen" @click.outside="searchOpen = true"
2256                @keydown.escape="searchOpen = true; $refs.searchButton.focus()">
2257                    
2257<script>
2258    //todo move result url to view model
2259const algoliaConfig = Object.assign(
2260    {"instant":{"enabled":true,"selector":".columns","isAddToCartEnabled":false,"addToCartParams":{"action":"https:\/\/www.mrhankeystoys.com\/checkout\/cart\/add\/","formKey":"9SFsreOEuib59vuZ","redirectUrlParam":"uenc"},"infiniteScrollEnabled":false,"urlTrackedParameters":["query","attribute:*","index","page"],"isSearchBoxEnabled":false,"isVisualMerchEnabled":false,"categorySeparator":" \/\/\/ ","categoryPageIdAttribute":"categoryPageId","isCategoryNavigationEnabled":false,"hidePagination":true,"isDynamicFacetsEnabled":false,"redirects":{"enabled":false,"onPageLoad":true,"onSearchAsYouType":false,"showSelectableRedirect":true,"openInNewWindow":false}},"autocomplete":{"enabled":true,"selector":".algolia-search-input","sections":[{"name":"pages","label":"Pages","hitsPerPage":"2"}],"nbOfProductsSuggestions":6,"nbOfCategoriesSuggestions":2,"nbOfQueriesSuggestions":0,"isDebugEnabled":false,"isNavigatorEnabled":true,"debounceMilliseconds":300,"minimumCharacters":2,"redirects":{"enabled":true,"showSelectableRedirect":true,"showHitsWithRedirect":false,"openInNewWindow":false}},"landingPage":{"query":"","configuration":"[]"},"recommend":{"enabledFBT":false,"enabledRelated":false,"enabledFBTInCart":false,"enabledRelatedInCart":false,"enabledLookingSimilar":0,"limitFBTProducts":6,"limitRelatedProducts":6,"limitTrendingItems":6,"limitLookingSimilar":6,"enabledTrendItems":0,"trendItemFacetName":null,"trendItemFacetValue":null,"isTrendItemsEnabledInPDP":0,"isTrendItemsEnabledInCartPage":0,"isAddToCartEnabledInFBT":false,"isAddToCartEnabledInRelatedProduct":false,"isAddToCartEnabledInTrendsItem":false,"isAddToCartEnabledInLookingSimilar":false,"FBTTitle":"Frequently bought together","relatedProductsTitle":"Related products","trendingItemsTitle":"Trending items","addToCartParams":{"action":"https:\/\/www.mrhankeystoys.com\/checkout\/cart\/add\/","formKey":"9SFsreOEuib59vuZ","redirectUrlParam":"uenc"},"isLookingSimilarEnabledInPDP":0,"isLookingSimilarEnabledInCartPage":0,"lookingSimilarTitle":"Looking Similar"},"extensionVersion":"3.17.4","applicationId":"FV7NPLDQ20","indexName":"mrhankeystoys_default","baseIndexName":"mrhankeystoys_default","apiKey":"YTBmZDJmYmJhN2YwYTJjZGY1NjI2MDdmOWJkMDQyNDg5ZDE1NTExM2I0MGUzZjliNjA3N2FmODRiOWU5YmUwNXRhZ0ZpbHRlcnM9JnZhbGlkVW50aWw9MTc5MTEyMzQ0MQ==","attributeFilter":[],"facets":[{"attribute":"categories","type":"conjunctive","label":"Categories","searchable":"2","create_rule":"2"},{"attribute":"size_filter","type":"conjunctive","label":"Size","searchable":"2","create_rule":"2"},{"attribute":"insertable_length","type":"slider","label":"Insertable Length","searchable":"1","create_rule":"2"},{"attribute":"max_circumference","type":"slider","label":"Circumference","searchable":"1","create_rule":"2"},{"attribute":"price","type":"slider","label":"Price","searchable":"2","create_rule":"2"}],"areCategoriesInFacets":true,"hitsPerPage":18,"sortingIndices":[{"attribute":"price","sort":"asc","sortLabel":"Lowest price","virtualReplica":"0","name":"mrhankeystoys_default_products_price_group_0_asc","ranking":["asc(price.USD.group_0)","typo","geo","words","filters","proximity","attribute","exact","custom"],"label":"Lowest price"},{"attribute":"price","sort":"desc","sortLabel":"Highest price","virtualReplica":"0","name":"mrhankeystoys_default_products_price_group_0_desc","ranking":["desc(price.USD.group_0)","typo","geo","words","filters","proximity","attribute","exact","custom"],"label":"Highest price"},{"attribute":"created_at","sort":"desc","sortLabel":"Newest first","virtualReplica":"0","name":"mrhankeystoys_default_products_created_at_desc","ranking":["desc(created_at)","typo","geo","words","filters","proximity","attribute","exact","custom"],"label":"Newest first"}],"isSearchPage":false,"isCategoryPage":false,"isLandingPage":false,"removeBranding":true,"productId":null,"priceKey":".USD.group_0","priceGroup":"group_0","origFormatedVar":"price.USD.group_0_original_formated","tierFormatedVar":"price.USD.group_0_tier_formated","currencyCode":"USD","currencySymbol":"$","priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"maxValuesPerFacet":10,"autofocus":true,"resultPageUrl":"https:\/\/www.mrhankeystoys.com\/catalogsearch\/result\/","request":{"query":"","refinementKey":"","refinementValue":"","categoryId":"","landingPageId":"","path":"","level":"","parentCategory":"","childCategories":[],"url":"https:\/\/www.mrhankeystoys.com\/blog"},"showCatsNotIncludedInNavigation":false,"showSuggestionsOnNoResultsPage":true,"baseUrl":"https:\/\/www.mrhankeystoys.com","popularQueries":[],"useAdaptiveImage":false,"urls":{"logo":"https:\/\/www.mrhankeystoys.com\/static\/version1790675038\/frontend\/Krish\/mrhankeytoys\/en_
2260US\/Algolia_AlgoliaSearch\/js\/images\/algolia-logo-blue.svg"},"cookieConfiguration":{"customerTokenCookie":"_ALGOLIA_MAGENTO_AUTH","consentCookieName":"user_allowed_save_cookie","cookieAllowButtonSelector":"#btn-cookie-allow","cookieRestrictionModeEnabled":false,"cookieDuration":"15552000000"},"ccAnalytics":{"enabled":false,"ISSelector":".ais-Hits-item a.result, .ais-InfiniteHits-item a.result","conversionAnalyticsMode":null,"addToCartSelector":".action.primary.tocart","orderedProductIds":[]},"isPersonalizationEnabled":false,"personalization":{"enabled":false,"viewedEvents":{"viewProduct":{"eventName":"Viewed Product","enabled":false,"method":"viewedObjectIDs"}},"clickedEvents":{"productClicked":{"eventName":"Product Clicked","enabled":false,"selector":".ais-Hits-item a.result, .ais-InfiniteHits-item a.result","method":"clickedObjectIDs"},"productRecommended":{"eventName":"Recommended Product Clicked","enabled":false,"selector":".products-upsell .product-item","method":"clickedObjectIDs"}},"filterClicked":{"eventName":"Filter Clicked","enabled":false,"method":"clickedFilters"}},"analytics":{"enabled":false,"delay":"3000","triggerOnUiInteraction":"1","pushInitialSearch":"0"},"now":1790985600,"queue":{"isEnabled":false,"nbOfJobsToRun":5,"retryLimit":3,"nbOfElementsPerIndexingJob":300},"isPreventBackendRenderingEnabled":false,"translations":{"to":"to","or":"or","go":"Go","popularQueries":"You can try one of the popular search queries","seeAll":"See all products","allDepartments":"Search page","seeIn":"See products in","orIn":"or in","noProducts":"No products for query","noResults":"No results","refine":"Refine","selectedFilters":"Selected Filters","clearAll":"Clear all","previousPage":"Previous page","nextPage":"Next page","searchFor":"Search for products","relevance":"Relevance","categories":"Categories","products":"Products","suggestions":"Suggestions","searchBy":"Search by","redirectSearchPrompt":"Continue search for","searchForFacetValuesPlaceholder":"Search for other ...","showMore":"Show more products","searchTitle":"Search results for","placeholder":"Search for products, categories, ...","addToCart":"Add to Bag"}}, {
2261        resultURL:'https\u003A\u002F\u002Fwww.mrhankeystoys.com\u002Fcatalogsearch\u002Fresult\u002F',
2262        placeholder: 'Search\u0020entire\u0020store\u0020here...'
2263    }
2264)
2265const instantsearchScripts = ["https:\/\/www.mrhankeystoys.com\/static\/version1790675038\/frontend\/Krish\/mrhankeytoys\/en_US\/Hyva_AlgoliaSearch\/js\/internals\/algoliaBundle.min.js","https:\/\/www.mrhankeystoys.com\/static\/version1790675038\/frontend\/Krish\/mrhankeytoys\/en_US\/Hyva_AlgoliaSearch\/js\/internals\/common.js","https:\/\/www.mrhankeystoys.com\/static\/version1790675038\/frontend\/Krish\/mrhankeytoys\/en_US\/Hyva_AlgoliaSearch\/js\/internals\/instantsearch.js"]
2266const autocompleteScripts = ["https:\/\/www.mrhankeystoys.com\/static\/version1790675038\/frontend\/Krish\/mrhankeytoys\/en_US\/Hyva_AlgoliaSearch\/js\/internals\/autocomplete-js.js","https:\/\/www.mrhankeystoys.com\/static\/version1790675038\/frontend\/Krish\/mrhankeytoys\/en_US\/Hyva_AlgoliaSearch\/js\/internals\/algoliasearch.js","https:\/\/www.mrhankeystoys.com\/static\/version1790675038\/frontend\/Krish\/mrhankeytoys\/en_US\/Hyva_AlgoliaSearch\/js\/internals\/algoliasearch-query-suggestion-plugin.js"]
2267function loadScript (url) {
2268    let script = document.createElement('script')
2269    script.setAttribute('type', 'text/javascript')
2270    script.setAttribute('src', url)
2271    document.head.append(script)
2272
2273    return new Promise((resolve) => script.addEventListener('load', resolve))
2274}
2275
2276function loadScripts(scripts) {
2277    return Promise.all(scripts.map(loadScript))
2278}
2279
2280let autocompleteInitialized = false
2281
2282async function initAlgoliaAutoComplete() {
2283    if (autocompleteInitialized) {
2284        return
2285    }
2286
2287    autocompleteInitialized = true
2288
2289    await loadScripts(autocompleteScripts)
2290    await loadScript('https\u003A\u002F\u002Fwww.mrhankeystoys.com\u002Fstatic\u002Fversion1790675038\u002Ffrontend\u002FKrish\u002Fmrhankeytoys\u002Fen_US\u002FHyva_AlgoliaSearch\u002Fjs\u002Finternals\u002FautocompleteConfig.js')
2291}
2292function initInstantSearch() {
2293    loadScripts(instantsearchScripts).then(() => {
2294        algoliaCommon()
2295        initAlgoliaInstantSearch()
2296    })
2297}
2298
2299if (algoliaConfig.autocomplete.enabled) {
2300    document.getElementById('menu-search-icon').onclick = async () => {
2301        await initAlgoliaAutoComplete()
2302        // autocomplete library autoFocus configuration param doesn't work
2303        document.querySelector('#algolia-autocomplete-container input').focus()
2304    }
2305    document.getElementById('menu-search-icon').click();
2306}
2307
2308if (algoliaConfig.instant.enabled && algoliaConfig.isSearchPage) {
2309    initInstantSearch()
2310}
2311</script>
2311
2312<div class="w-full flex justify-center"> 
2313    <div class="w-full" >
2314        <div id="algolia-autocomplete-container"></div>
2315    </div>
2316</div>
2317
2318            </div>
2319        </div>
2320        <div class="flex shrink-0 gap-9 items-center min1400:min-w-[400px] lg:justify-end">
2321            <div class="tarck-order border-r border-[#999] pr-9 hidden">
2322                <a href="#" class="flex gap-2.5 leading-10 items-center hover:text-hoverColor transition">
2323                    <svg xmlns="http://www.w3.org/2000/svg" width="18" height="28" viewBox="0 0 18 28" fill="none" role="img">
2324<path d="M8.75537 12.4688C10.7456 12.4688 12.3647 10.8373 12.3647 8.83201C12.3647 6.82671 10.7456 5.19531 8.75537 5.19531C6.76517 5.19531 5.146 6.82671 5.146 8.83201C5.146 10.8373 6.76517 12.4688 8.75537 12.4688ZM8.75537 6.4952C10.0342 6.4952 11.0746 7.54352 11.0746 8.83201C11.0746 10.1205 10.0343 11.1689 8.75537 11.1689C7.47649 11.1689 6.4361 10.1205 6.4361 8.83201C6.4361 7.54352 7.47653 6.4952 8.75537 6.4952Z" fill="currentColor"/>
2325<path d="M3.75777 17.0697C5.00109 18.7528 4.50158 18.0982 8.08279 23.2112C8.40829 23.6778 9.10047 23.68 9.42783 23.2119C13.0252 18.0747 12.5303 18.7253 13.7533 17.0696C14.9923 15.3922 16.2735 13.6578 16.9756 11.6253C17.9917 8.68301 17.5525 5.77183 15.7389 3.42792C15.7388 3.42792 15.7388 3.42787 15.7388 3.42787C14.0775 1.28144 11.4669 0 8.75556 0C6.0442 0 3.43364 1.28144 1.77229 3.42798C-0.0413133 5.77188 -0.480564 8.68312 0.53564 11.6254C1.23761 13.6578 2.51883 15.3923 3.75777 17.0697ZM3.0698 4.43182C4.42266 2.68395 6.5482 1.64041 8.75556 1.64041C10.9629 1.64041 13.0884 2.68395 14.4413 4.43182L14.4412 4.43177C15.905 6.32352 16.2543 8.6881 15.4248 11.0899C14.8047 12.8851 13.5993 14.517 12.4336 16.0951C11.526 17.3237 11.7977 16.9479 8.75556 21.3086C5.71662 16.9523 5.98481 17.3234 5.07749 16.0951C3.91183 14.517 2.70646 12.8851 2.08636 11.0899C1.25686 8.68804 1.60609 6.32352 3.0698 4.43182Z" fill="currentColor"/>
2326<path d="M4.43175 20.6263C4.18981 20.2434 3.68319 20.1289 3.30015 20.3709L0.967732 21.844C0.458919 22.1654 0.458427 22.9092 0.967732 23.2309L8.31773 27.8732C8.58532 28.0423 8.92635 28.0422 9.19388 27.8732L16.5439 23.2309C17.0528 22.9096 17.0532 22.1657 16.5439 21.844L14.2115 20.3709C13.8283 20.129 13.3217 20.2434 13.0799 20.6263C12.8379 21.0093 12.9523 21.5158 13.3353 21.7578L14.5698 22.5375L8.75578 26.2096L2.94179 22.5375L4.1763 21.7578C4.55933 21.5159 4.67369 21.0093 4.43175 20.6263Z" fill="currentColor"/>
2327<title>track-order</title></svg>
2328                    <span class="font-semibold">Track Order</span>
2329                </a>
2330            </div>
2331            <div class="flex gap-7 items-center lg:order-2 s1023:gap-5">
2332
2333<!--                <a href="javascript:void(0);" class="hidden s767:block mobileSearch">-->
2334<!--                    <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M8.04938 16.0928C9.83702 16.0928 11.5735 15.4963 12.9838 14.3977L18.3045 19.7191C18.7019 20.103 19.3353 20.092 19.7192 19.6945C20.0936 19.3067 20.0936 18.6919 19.7192 18.3042L14.3985 12.9828C17.1243 9.47344 16.4895 4.41858 12.9807 1.69241C9.47196 -1.03376 4.41791 -0.398932 1.69215 3.11039C-1.03361 6.61971 -0.398872 11.6746 3.10992 14.4007C4.52252 15.4983 6.26058 16.
23340937 8.04938 16.0928ZM3.77429 3.77179C6.13538 1.4103 9.96347 1.41025 12.3246 3.7717C14.6857 6.13315 14.6858 9.96181 12.3247 12.3233C9.9636 14.6848 6.13551 14.6848 3.77438 12.3234C3.77434 12.3234 3.77434 12.3234 3.77429 12.3233C1.4132 9.97906 1.39929 6.16436 3.74318 3.80291C3.75354 3.79251 3.76389 3.78215 3.77429 3.77179Z" fill="#0F0F0F"/></svg>-->
2335<!--                </a>-->
2336                                    
2337<a
2338    id="compare-link"
2339    class="relative hidden rounded p-1 hover:bg-primary/10 outline-offset-2 invisible"
2340    :class="hiddenIfEmpty"
2341    href="https://www.mrhankeystoys.com/catalog/product_compare/index/"
2342    title="Compare&#x20;Products"
2343    x-data="initCompareHeader"
2344    @private-content-loaded.window="receiveCompareData"
2345    :aria-label="linkAriaLabel"
2346>
2347    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
2348  <path stroke-linecap="round" stroke-linejoin="round" d="M3 6l3 1m0 0l-3 9a5.002 5.002 0 006.001 0M6 7l3 9M6 7l6-2m6 2l3-1m-3 1l-3 9a5.002 5.002 0 006.001 0M18 7l3 9m-3-9l-6-2m0-2v2m0 16V5m0 16H9m3 0h3"/>
2349</svg>
2350    <span
2351        x-text="itemCount"
2352        class="absolute -top-1.5 -right-1.5 px-2 py-0.5 rounded-full bg-blue-200 text-blue-800
2353            text-xs font-semibold leading-none text-center uppercase tabular-nums"
2354        aria-hidden="true"
2355    ></span>
2356</a>
2357                
2358                                                    
2359                
2360                                    
2361<a
2362    href="https://www.mrhankeystoys.com/wishlist/"
2363    class="relative hover:text-hoverColor transition md:inline-block hidden"
2364    x-data="initWishlistHeader"
2365    @private-content-loaded.window="receiveWishlistData"
2366    aria-label="My&#x20;Wish&#x20;List"
2367    :aria-label="linkAriaLabel"
2368>
2369    <svg xmlns="http://www.w3.org/2000/svg" width="30" height="26" viewBox="0 0 30 26" fill="none" class="s1023:w-[23px] s1023:h-5" role="img">
2370<path d="M22.0312 0C19.4612 0 17.2274 1.18643 15.5715 3.43094C15.3588 3.71936 15.1687 4.0079 15 4.28781C14.8313 4.00784 14.6413 3.71936 14.4285 3.43094C12.7726 1.18643 10.5388 0 7.96875 0C3.20895 0 0 3.85586 0 8.58307C0 14.7525 5.81437 18.6367 14.2498 25.7261C14.467 25.9086 14.7335 26 15 26C15.2665 26 15.533 25.9087 15.7502 25.7261C24.1836 18.6386 30 14.7533 30 8.58307C30 3.85864 26.7938 0 22.0312 0ZM15 23.2821C7.2327 16.8016 2.34375 13.3672 2.34375 8.58307C2.34375 5.49244 4.27594 2.36364 7.96875 2.36364C9.77338 2.36364 11.3005 3.17915 12.5078 4.7876C13.4643 6.06202 13.8618 7.37732 13.8746 7.42034C14.0198 7.92521 14.4785 8.27273 15 8.27273C15.5223 8.27273 15.9816 7.92415 16.1261 7.41798C16.1405 7.36745 17.6206 2.36364 22.0312 2.36364C25.7241 2.36364 27.6562 5.49244 27.6562 8.58307C27.6562 13.3719 22.7426 16.8225 15 23.2821Z" fill="currentColor"/>
2371<title>wishlistIcon</title></svg>
2372    <template x-if="itemCount">
2373        <span
2374            x-text="itemCount"
2375            class="absolute -top-2.5 -right-2.5 w-[22px] h-[22px] rounded-full bg-baseColor text-white text-xs font-medium leading-none text-center uppercase tabular-nums flex justify-center items-center"
2376            aria-hidden="true"
2377        ></span>
2378    </template>
2379</a>
2380                
2381                <!-- BLOCK header.customer -->
2382<div
2383    class="relative inline-block"
2384    x-data="initCustomerMenu"
2385    @private-content-loaded.window="receiveCustomerData($event.detail.data)"
2386    @keyup.escape="setOpenFalse"
2387    @click.outside="setOpenFalse"
2388>
2389    <button
2390        type="button"
2391        id="customer-menu"
2392        class="block hover:text-hoverColor transition"
2393        @click="toggleOpen"
2394        :aria-expanded="ariaExpanded"
2395        aria-label="My&#x20;Account"
2396        aria-haspopup="true"
2397    >
2398        <svg xmlns="http://www.w3.org/2000/svg" width="28" height="30" viewBox="0 0 28 30" fill="none" class="s1023:w-[22px] s1023:h-6" role="img">
2399<path d="M14 16.1538C15.5962 16.1538 17.1566 15.6801 18.4838 14.7926C19.811 13.9051 20.8454 12.6437 21.4563 11.1678C22.0671 9.69194 22.2269 8.06794 21.9155 6.50118C21.6041 4.93441 20.8355 3.49525 19.7068 2.36567C18.5781 1.2361 17.14 0.466848 15.5745 0.155199C14.0089 -0.15645 12.3862 0.00349956 10.9115 0.614821C9.43679 1.22614 8.17633 2.26138 7.28952 3.58962C6.40271 4.91786 5.92937 6.47944 5.92937 8.0769C5.92937 10.219 6.77967 12.2734 8.2932 13.7881C9.80674 15.3028 11.8595 16.1538 14 16.1538ZM14 2.30769C15.1401 2.30769 16.2547 2.64605 17.2027 3.27998C18.1507 3.91391 18.8896 4.81493 19.3259 5.86912C19.7622 6.92331 19.8764 8.0833 19.6539 9.20242C19.4315 10.3215 18.8825 11.3495 18.0763 12.1564C17.2701 12.9632 16.2429 13.5127 15.1246 13.7353C14.0064 13.9579 12.8473 13.8436 11.7939 13.407C10.7406 12.9703 9.84023 12.2309 9.20679 11.2821C8.57336 10.3334 8.23526 9.21795 8.23526 8.0769C8.23526 6.54681 8.84262 5.07939 9.92371 3.99745C11.0048 2.91552 12.4711 2.30769 14 2.30769ZM27.8353 24.5999C27.2004 22.3906 25.867 20.4468 24.035 19.0599C22.203 17.6731 19.9711 16.9179 17.674 16.9076H10.3413C8.04487 16.9204 5.8142 17.6765 3.98268 19.063C2.15117 20.4495 0.817158 22.3919 0.18002 24.5999H0.164647C-0.0162512 25.2295 -0.0485994 25.8925 0.0701512 26.5367C0.188902 27.1809 0.455507 27.7887 0.848962 28.3122C1.24242 28.8358 1.75197 29.2607 2.33748 29.5536C2.92299 29.8464 3.56845 29.9992 4.22301 29.9999H23.7462C24.4034 30.004 25.0524 29.8547 25.6419 29.5639
2399C26.2313 29.2731 26.7449 28.8487 27.1418 28.3246C27.5387 27.8004 27.8081 27.1908 27.9285 26.5443C28.0489 25.8977 28.017 25.232 27.8353 24.5999ZM25.3142 26.923C25.1352 27.1618 24.9031 27.3557 24.6363 27.4892C24.3695 27.6227 24.0753 27.6922 23.777 27.6922H4.23839C3.9418 27.6915 3.64939 27.6222 3.38406 27.4895C3.11873 27.3569 2.88769 27.1646 2.70902 26.9276C2.53035 26.6907 2.40891 26.4156 2.3542 26.1239C2.29949 25.8322 2.313 25.5317 2.39367 25.2461C2.89223 23.5205 3.93618 22.0032 5.36904 20.9215C6.8019 19.8397 8.54649 19.2519 10.3413 19.2461H17.6587C19.4561 19.2504 21.2034 19.8395 22.637 20.9245C24.0706 22.0096 25.1128 23.5318 25.6063 25.2615C25.686 25.5434 25.6997 25.84 25.6464 26.1282C25.5931 26.4163 25.4742 26.6883 25.2989 26.923H25.3142Z" fill="currentColor"/>
2400<title>userIcon</title></svg>
2401    </button>
2402    <nav
2403        class="z-30 absolute -right-4 w-48 sm:w-56 mt-5 p-5 overflow-auto shadow-[0_0_10px_rgba(0,0,0,0.2)] bg-container-lighter [&_a]:uppercase [&_a]:font-semibold [&_a]:text-sm [&_a]:p-0 [&_a:hover]:bg-transparent flex flex-col gap-4 [&_.delimiter]:hidden [&_.signIn]:py-2.5 [&_.signIn:hover]:bg-black [&_.signIn:hover]:text-white [&_a:hover]:text-hoverColor s767:text-center"
2404        x-cloak
2405        x-show="open"
2406        x-transition
2407        aria-labelledby="customer-menu"
2408    >
2409        <div x-show="isLoggedIn()" class="flex flex-col gap-4">
2410            
2411    <a id="customer.header.dashboard.link"
2412       class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100"
2413       href="https://www.mrhankeystoys.com/customer/account/"
2414       title="My&#x20;Account"
2415    >
2416        My Account    </a>
2417
2418<a
2419    id="customer.header.wishlist.link"
2420    class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100 relative"
2421    href="https://www.mrhankeystoys.com/wishlist/"
2422    title="My&#x20;Wish&#x20;List"
2423    x-data="{ itemCount: 0 }"
2424    @private-content-loaded.window="itemCount = parseInt($event.detail.data.wishlist.counter)"
2425>
2426    My Wish List    <template x-if="itemCount">
2427        <span class="tabular-nums" x-text="`(${itemCount})`"></span>
2428    </template>
2429</a>
2430
2431<a
2432    id="catalog.compare.link.logged.in"
2433    class="hidden"
2434    href="https://www.mrhankeystoys.com/catalog/product_compare/index/"
2435    title="Compare&#x20;Products"
2436    x-data="initCompareHeader"
2437    @private-content-loaded.window="receiveCompareData"
2438>
2439    Compare Products    <template x-if="itemCount">
2440        <span class="tabular-nums" x-text="itemCountLabel"></span>
2441    </template>
2442</a>
2443
2444    <a id="customer.header.address.book.link"
2445       class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100"
2446       href="https://www.mrhankeystoys.com/customer/address/"
2447       title="Address&#x20;Book"
2448    >
2449        Address Book    </a>
2450
2451<span id="customer.header.sign.out.delimiter"
2452      class="delimiter block border-b border-container w-full my-2"
2453></span>
2454
2455    <a id="customer.header.sign.out.link"
2456       class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100"
2457       href="https://www.mrhankeystoys.com/customer/account/logout/"
2458       title="Sign&#x20;Out"
2459    >
2460        Sign Out    </a>
2461        </div>
2462        <div x-show="!isLoggedIn()" class="flex flex-col gap-4">
2463            
2464<a
2465    id="catalog.compare.link.logged.out"
2466    class="hidden"
2467    href="https://www.mrhankeystoys.com/catalog/product_compare/index/"
2468    title="Compare&#x20;Products"
2469    x-data="initCompareHeader"
2470    @private-content-loaded.window="receiveCompareData"
2471>
2472    Compare Products    <template x-if="itemCount">
2473        <span class="tabular-nums" x-text="itemCountLabel"></span>
2474    </template>
2475</a>
2476
2477<a id="customer.header.sign.in.link"
2478   class="white-btn font-bold rounded-md border-2 text-center signIn"
2479   onclick="hyva.setCookie && hyva.setCookie(
2480       'login_redirect',
2481       window.location.href,
2482       1
2483   )"
2484   href="https://www.mrhankeystoys.com/customer/account/index/"
2485   title="Sign&#x20;In"
2486>
2487    Sign In</a>
2488
2489    <a id="customer.header.register.link"
2490       class=""
2491       href="https://www.mrhankeystoys.com/customer/account/create/"
2492       title="Create&#x20;an&#x20;Account"
2493    >
2494        Create an Account    </a>
2495        </div>
2496    </nav>
2497</div>
2498<script>
2499    function initCustomerMenu() {
2500        return hyva.createBooleanObject('open', false, {
2501            customer: {},
2502            ariaExpanded() {
2503                return this.open() ? 'true' : 'false';
2504            },
2505            receiveCustomerData(data) {
2506                this.customer = data.customer || {};
2507            },
2508            isLoggedIn() {
2509                return !!this.customer.firstname;
2510            }
2511        })
2512    }
2513    window.addEventListener('alpine:init', () => Alpine.data('initCustomerMenu', initCustomerMenu), {once: true})
2514</script>
2514
2515<!-- /BLOCK header.customer -->
2516                                    <button
2517                                    id="menu-cart-icon"
2518                    class="relative"
2519                    x-ref="cartButton group"
2520                    :aria-disabled="isCartEmpty"
2521                    :aria-label="ariaLabel"
2522                                            @click.prevent="openCart"
2523                        @toggle-cart.window="toggleCart"
2524                        :aria-expanded="isCartOpen"
2525                        aria-haspopup="dialog"
2526                                    >
2527                    <svg xmlns="http://www.w3.org/2000/svg" width="28" height="30" viewBox="0 0 28 30" fill="none" class="fill-baseColor hover:fill-hoverColor transition s1023:w-[22px] s1023:h-6" role="img">
2528<path d="M13.8452 0C16.93 0 19.4924 2.32193 19.9897 5.35742H22.1313C23.6759 5.35742 24.9716 6.49795 25.2123 8.06934L27.6274 23.8057C27.8648 25.3556 27.434 26.9289 26.4448 28.1221C25.456 29.3153 24.0154 29.9999 22.4926 30H5.19868C3.67584 29.9999 2.23536 29.3153 1.24653 28.1221C0.257284 26.9288 -0.173546 25.3556 0.0639096 23.8057L2.47895 8.07031C2.71957 6.49822 4.01525 5.35742 5.56 5.35742H7.7016C8.19888 2.32207 10.7605 0.000222374 13.8452 0ZM5.56 7.5C5.04532 7.5 4.61295 7.8802 4.53266 8.4043L2.11762 24.1396C1.97497 25.0698 2.23364 26.0143 2.82758 26.7305C3.42095 27.4464 4.28514 27.8573 5.19868 27.8574H22.4926C23.4061 27.8573 24.2704 27.4464 24.8637 26.7305C25.4577 26.0143 25.7163 25.0698 25.5737 24.1396L23.1586 8.4043C23.0784 7.88062 22.646 7.5 22.1313 7.5H5.56ZM19.7114 10.3848C20.2953 10.385 20.769 10.828 20.769 11.374C20.7688 14.6461 17.9216 17.3076 14.4223 17.3076C10.9232 17.3075 8.07684 14.646 8.0766 11.374C8.0766 10.8278 8.55013 10.3848 9.13422 10.3848C9.71831 10.3848 10.1918 10.8278 10.1918 11.374C10.1921 13.5551 12.0898 15.3299 14.4223 15.3301C16.7549 15.3301 18.6535 13.5552 18.6538 11.374C18.6538 10.8278 19.1273 10.3848 19.7114 10.3848ZM13.8452 2.14258C11.9134 2.14279 10.2994 3.51441 9.83442 5.35742H17.8569C17.3919 3.51427 15.7771 2.14258 13.8452 2.14258Z"/>
2529<title>ShoppingBagIcon</title></svg>
2530                    <span
2531                        x-text="summaryCount"
2532                        x-show="summaryCount"
2533                        x-cloak
2534                        class="absolute -top-2.5 -right-2.5 w-[22px] h-[22px] rounded-full bg-baseColor text-white
2535                            text-xs font-medium leading-none text-center uppercase tabular-nums flex justify-center items-center"
2536                        aria-hidden="true"
2537                    ></span>
2538                                    </button>
2539                            </div>
2540        </div>
2541    </div>
2542
2543    <div class="bg-white hidden lg:block">
2544        <div class="container">
2545            
2546<nav
2547    class="navigation hidden min1200:block justify-center border-b border-[#666]"
2548    aria-label="Main&#x20;menu"
2549    x-data="initMenuDesktop"
2550    x-ref="nav-desktop"
2551    @load.window="setActiveMenu"
2552>
2553    <ul class="flex flex-wrap gap-x-2.5 justify-center">
2554        <li class="level-0 px-8 relative group s1400:px-6">
2555            <a
2556                href="/all"
2557                class="button level-0 group w-full flex justify-between items-center gap-1.5 pb-5 border-b-[3px] border-transparent group-hover:border-hoverColor  text-baseColor group-hover:text-hoverColor font-semibold"
2558            >
2559                All&#x20;Categories                <svg class="transition group-hover:rotate-180" xmlns="http://www.w3.org/2000/svg" width="9" height="7" viewBox="0 0 9 7" fill="none"><path d="M5.13918 6.25072C4.7434 6.84483 3.87048 6.84483 3.4747 6.25072L0.346151 1.55441C-0.0965723 0.889837 0.379852 7.20878e-08 1.17839 1.44691e-07L7.43549 7.13585e-07C8.23404 7.86188e-07 8.71046 0.88984 8.26773 1.55442L5.13918 6.25072Z" fill="#666666"/></svg>
2560            </a>
2561            <div class="opacity-0 invisible group-hover:opacity-100 group-hover:visible">
2562                <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="all-cat-menu">
2563	<div class="top-part">
2564		<div class="first">
2565			<ul>
2566				<li><a href="/realistic">Realistic Dildos</a></li>
2567				<li><a href="/fantasy-and-sci-fi">Fantasy Dildos</a></li>
2568				<li><a href="/accessories">Play Gear</a></li>
2569				<!-- <li><a href="/shop">Shop by Size</a></li> -->
2570				<li><a href="/all">Shop All</a></li>
2571			</ul>
2572		</div>
2573		<div class="second">
2574			<div class="products">
2575				<div class="product">
2576					<div class="image"><a href="https://www.mrhankeystoys.com/realistic/lifecast"><img
2577								src="https://www.mrhankeystoys.com/media/wysiwyg/hankeys-toys-wade-wolfgar-dildo-natural-tan-side-angle-primary-thumbn
2577ail.jpg"
2578								alt="Shop Lifecast Dildos" /></a></div>
2579					<p><a href="https://www.mrhankeystoys.com/realistic/lifecast">Lifecast Dildos</a></p>
2580				</div>
2581				<div class="product">
2582					<div class="image">
2583						<a href="https://www.mrhankeystoys.com/realistic/small-dildos"><img
2584								src="https://www.mrhankeystoys.com/media/wysiwyg/xtra-small-dildo-series-iii-9-pack-mixed-colors-front-primary-thumbnail.jpg"
2585								alt="Shop Small Dildos" /></a>
2586					</div>
2587					<p><a href="https://www.mrhankeystoys.com/realistic/small-dildos">Small Dildos</a></p>
2588				</div>
2589				<div class="product">
2590					<div class="image"><a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/dragon-dildos"><img
2591								src="https://www.mrhankeystoys.com/media/wysiwyg/hankeys-toys-dildos-dragons-fantasy-dildo-metallic-blood-red-front-view-primary-thumbnail.jpg"
2592								alt="Shop Dragon Dildos" /></a></div>
2593					<p><a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/dragon-dildos">Dragon Dildos</a></p>
2594				</div>
2595				<div class="product">
2596					<div class="image"><a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/horse-dildos"><img
2597								src="https://www.mrhankeystoys.com/media/wysiwyg/hankeys-toys-horse-ii-fantasy-dildo-black-side-horizontal-view-primary-thumbnail.jpg"
2598								alt="Shop Horse Dildos" /></a></div>
2599					<p><a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/horse-dildos">Horse Dildos</a></p>
2600				</div>
2601			</div>
2602		</div>
2603		<div class="third">
2604<a href="/promo-offers">
2605			<div class="promo" style="background:url('https://www.mrhankeystoys.com/media/wysiwyg/menu-promo.jpg')">
2606				<h3>Help spread the word, <br />get a FREE toy!</h3>
2607				<span class="hover-with-arrow">Know More <svg width="10" height="13" viewBox="0 0 10 13"
2608						fill="none" xmlns="http://www.w3.org/2000/svg">
2609						<path
2610							d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z"
2611							fill="#fff"></path>
2612					</svg></span>
2613			</div>
2614</a>
2615		</div>
2616	</div>
2617	
2618<section class="relative container brand-slider" style="--size: clamp(10rem, 1rem + 40vmin, 30rem); --gap: calc(var(--size) / 14); --duration: 40s;" aria-label="Our favorite brands">
2619<div class="bs-content after:content-[''] after:bg-[linear-gradient(90deg,_rgba(183,_94,_41,_0.20)_15.38%,_#B75E29_50%,_rgba(183,_94,_41,_0.20)_85.1%)] after:h-[1px] after:w-full after:absolute after:bottom-0 after:left-0 relative pb-10 pt-8 s1400:py-12 s767:pt-6 s767:pb-10">
2620    <div class="inner-title">As Featured On</div>
2621    <div class="swiper-container swiper--top-menu">
2622        <div class="swiper-wrapper">
2623                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
2624                    <img src="https://www.mrhankeystoys.com/media/wysiwyg/brands/attitude.png" alt="attitude" width="118" height="30" loading="lazy">
2625                    </div>
2626                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
2627                    <img src="https://www.mrhankeystoys.com/media/wysiwyg/brands/avn.png" alt="attitude" width="63" height="45" loading="lazy">
2628                    </div>
2629                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
2630                    <img src="https://www.mrhankeystoys.com/media/wysiwyg/brands/clav.png" alt="attitude" width="106" height="40" loading="lazy">
2631                    </div>
2632                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
2633                    <img src="https://www.mrhankeystoys.com/media/wysiwyg/brands/folsom.png" alt="attitude" width="75" height="34" loading="lazy">
2634                    </div>
2635                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
2636                    <img src="https://www.mrhankeystoys.com/media/wysiwyg/brands/iheart.png" alt="attitude" width="111" height="30" loading="lazy">
2637                    </div>
2638                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
2639                    <img src="https://www.mrhankeystoys.com/media/wysiwyg/brands/laweekly.png" alt="attitude" width="117" height="30" loading="lazy">
2640                    </div>
2641                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
2642                    <img src="https://www.mrhankeystoys.com/media/wysiwyg/brands/out.png" alt="attitude" width="89" height="28" loading="lazy">
2643                    </div>
2644                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
2645                    <img src="https://www.mrhankeystoys.com/media/wysiwyg/brands/recon.png" alt="attitude" width="133" height="45" loading="lazy">
2646                    </div>
2647                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
2648                    <img src="https://www.mrhankeystoys.com/media/wysiwyg/brands/vice.png" alt="attitude" width="95" height="30" loading="lazy">
2649                    </div>
2650                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
2651                    <img src="https://www.mrhankeystoys.com/media/wysiwyg/brands/xbiz.png" alt="attitude" width="90" height="45" loading="lazy">
2652                    </div>
2653                        </div>
2654    </div>
2655</div>
2656</section>
2657
2658
2659<style>
2660    .swiper--top-menu { overflow:hidden; }
2661
2662    .swiper--top-menu .swiper-wrapper { -webkit-transition-timing-function: linear !important; transition-timing-function: linear !important; position: relative; }
2663</style>
2664<script>
2665    var SwiperMenu = new Swiper('.navigation .swiper--top-menu', {
2666        spaceBetween: 0,
2667        centeredSlides: true,
2668        speed: 3500,
2669        autoplay: {
2670            delay: 1,
2671        },
2672        loop: true,
2673        slidesPerView:'auto',
2674        allowTouchMove: false,
2675        disableOnInteraction: true
2676    });
2677</script>
2677
2678
2679</div></div>            </div>
2680        </li>
2681                                    <li
2682                    class="level-0 px-8 relative s1400:px-6"
2683                    x-data="initMenuDesktopItem"
2684                    @click.outside="close"
2685                    @keydown.escape="close"
2686                                            @mouseenter="canHoverOpen"
2687                        @mouseleave="canHoverClose"
2688                                    >
2689                                        <a href="https://www.mrhankeystoys.com/realistic"
2690                        type="button"
2691                        class="level-0 group w-full flex justify-between items-center gap-1.5 pb-5 border-b-[3px] border-transparent hover:border-hoverColor transition aria-expanded:text-hoverColor aria-expanded:border-hoverColor data-[has-current]:aria-expanded:border-hoverColor data-[has-current]:border-hoverColor data-[has-current]:hover:border-hoverColor text-baseColor font-semibold data-[has-current]:text-hoverColor data-[has-current]:aria-expanded:text-hoverColor"
2692                        @click="toggle"
2693                        aria-expanded="false"
2694                        :aria-expanded="open"
2695                        aria-controls="desktop-menu-category-3"
2696                    >
2697                        Realistic Dildos                        <svg class="transition group-aria-expanded:rotate-180 group-aria-expanded:text-inherit" xmlns="http://www.w3.org/2000/svg" width="9" height="7" viewBox="0 0 9 7" fill="none"><path d="M5.13918 6.25072C4.7434 6.84483 3.87048 6.84483 3.4747 6.25072L0.346151 1.55441C-0.0965723 0.889837 0.379852 7.20878e-08 1.17839 1.44691e-07L7.43549 7.13585e-07C8.23404 7.86188e-07 8.71046 0.88984 8.26773 1.55442L5.13918 6.25072Z" fill="#666666"/></svg>
2698                    </a>
2699                    <div
2700                        id="desktop-menu-category-3"
2701                        class="z-30 absolute inset-x-0 flex p-7 bg-white overflow-auto w-[280px] shadow-[0_10px_20px_rgba(0,0,0,0.10)]"
2702                        x-show="open"
2703                        x-transition
2704                        x-cloak
2705                    >
2706                        <div class="grow flex flex-col justify-between">
2707                            <ul class="border-b border-[#f4f4f4]">
2708                                                                    <li class="border-t border-[#f4f4f4]">
2709                                        <a
2710                                            href="https://www.mrhankeystoys.com/realistic/small-dildos"
2711                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2712                                        >XS/Small Dildos</a>
2713                                                                            </li>
2714                                                                    <li class="border-t border-[#f4f4f4]">
2715                                        <a
2716                                            href="https://www.mrhankeystoys.com/realistic/huge-dildos"
2717                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2718                                        >Huge Dildos</a>
2719                                                                            </li>
2720                                                                    <li class="border-t border-[#f4f4f4]">
2721                                        <a
2722                                            href="https://www.mrhankeystoys.com/realistic/uncircumcised-dildos"
2723                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2724                                        >Uncut Dildos</a>
2725                                                                            </li>
2726                                                                    <li class="border-t border-[#f4f4f4]">
2727                                        <a
2728                                            href="https://www.mrhankeystoys.com/realistic/bbc-dildos"
2729                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2730                                        >BBC Dildos</a>
2731                                                                            </li>
2732                                                                    <li class="border-t border-[#f4f4f4]">
2733                                        <a
2734                                            href="https://www.mrhankeystoys.com/realistic/lifecast"
2735                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2736                                        >Lifecast Dildos</a>
2737                                                                            </li>
2738                                                                    <li class="border-t border-[#f4f4f4]">
2739                                        <a
2740                                            href="https://www.mrhankeystoys.com/realistic/pornstar-dildos"
2741                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2742                                        >Pornstar Dildos</a>
2743                                                                            </li>
2744                                                                    <li class="border-t border-[#f4f4f4]">
2745                                        <a
2746                                            href="https://www.mrhankeystoys.com/realistic/hybrid-dildos"
2747                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2748                                        >Hybrid Dildos</a>
2749                                                                            </li>
2750                                                                    <li class="border-t border-[#f4f4f4]">
2751                                        <a
2752                                            href="https://www.mrhankeystoys.com/realistic/anal-trainers"
2753                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2754                                        >Anal Trainers</a>
2755                                                                            </li>
2756                                                                <li class="border-t border-[#f4f4f4]">
2757                                    <a
2758                                        href="https://www.mrhankeystoys.com/realistic"
2759                                        class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2760                                    >Shop All Realistic Dildos</a>
2761                                </li>
2762                            </ul>
2763                                                    </div>
2764                                            </div>
2765                </li>
2766                                                <li
2767                    class="level-0 px-8 relative s1400:px-6"
2768                    x-data="initMenuDesktopItem"
2769                    @click.outside="close"
2770                    @keydown.escape="close"
2771                                            @mouseenter="canHoverOpen"
2772                        @mouseleave="canHoverClose"
2773                                    >
2774                                        <a href="https://www.mrhankeystoys.com/fantasy-and-sci-fi"
2775                        type="button"
2776                        class="level-0 group w-full flex justify-between items-center gap-1.5 pb-5 border-b-[3px] border-transparent hover:border-hoverColor transition aria-expanded:text-hoverColor aria-expanded:border-hoverColor data-[has-current]:aria-expanded:border-hoverColor data-[has-current]:border-hoverColor data-[has-current]:hover:border-hoverColor text-baseColor font-semibold data-[has-current]:text-hoverColor data-[has-current]:aria-expanded:text-hoverColor"
2777                        @click="toggle"
2778                        aria-expanded="false"
2779                        :aria-expanded="open"
2780                        aria-controls="desktop-menu-category-4"
2781                    >
2782                        Fantasy Dildos                        <svg class="transition group-aria-expanded:rotate-180 group-aria-expanded:text-inherit" xmlns="http://www.w3.org/2000/svg" width="9" height="7" viewB
2782ox="0 0 9 7" fill="none"><path d="M5.13918 6.25072C4.7434 6.84483 3.87048 6.84483 3.4747 6.25072L0.346151 1.55441C-0.0965723 0.889837 0.379852 7.20878e-08 1.17839 1.44691e-07L7.43549 7.13585e-07C8.23404 7.86188e-07 8.71046 0.88984 8.26773 1.55442L5.13918 6.25072Z" fill="#666666"/></svg>
2783                    </a>
2784                    <div
2785                        id="desktop-menu-category-4"
2786                        class="z-30 absolute inset-x-0 flex p-7 bg-white overflow-auto w-[280px] shadow-[0_10px_20px_rgba(0,0,0,0.10)]"
2787                        x-show="open"
2788                        x-transition
2789                        x-cloak
2790                    >
2791                        <div class="grow flex flex-col justify-between">
2792                            <ul class="border-b border-[#f4f4f4]">
2793                                                                    <li class="border-t border-[#f4f4f4]">
2794                                        <a
2795                                            href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/small-dildos"
2796                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2797                                        >XS/Small Dildos</a>
2798                                                                            </li>
2799                                                                    <li class="border-t border-[#f4f4f4]">
2800                                        <a
2801                                            href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/huge-dildos"
2802                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2803                                        >Huge Dildos</a>
2804                                                                            </li>
2805                                                                    <li class="border-t border-[#f4f4f4]">
2806                                        <a
2807                                            href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/mythical-creatures"
2808                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2809                                        >Mythical Creatures</a>
2810                                                                            </li>
2811                                                                    <li class="border-t border-[#f4f4f4]">
2812                                        <a
2813                                            href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/dragon-dildos"
2814                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2815                                        >Dragon Dildos</a>
2816                                                                            </li>
2817                                                                    <li class="border-t border-[#f4f4f4]">
2818                                        <a
2819                                            href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/dog-dildos"
2820                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2821                                        >Dog Dildos</a>
2822                                                                            </li>
2823                                                                    <li class="border-t border-[#f4f4f4]">
2824                                        <a
2825                                            href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/horse-dildos"
2826                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2827                                        >Horse Dildos</a>
2828                                                                            </li>
2829                                                                    <li class="border-t border-[#f4f4f4]">
2830                                        <a
2831                                            href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/alien-dildos"
2832                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2833                                        >Alien Dildos</a>
2834                                                                            </li>
2835                                                                    <li class="border-t border-[#f4f4f4]">
2836                                        <a
2837                                            href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/hentai-dildos"
2838                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2839                                        >Hentai Dildos</a>
2840                                                                            </li>
2841                                                                    <li class="border-t border-[#f4f4f4]">
2842                                        <a
2843                                            href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/tentacle-dildos"
2844                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2845                                        >Tentacle Dildos</a>
2846                                                                            </li>
2847                                                                    <li class="border-t border-[#f4f4f4]">
2848                                        <a
2849                                            href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/anal-trainers"
2850                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2851                                        >Anal Trainers</a>
2852                                                                            </li>
2853                                                                    <li class="border-t border-[#f4f4f4]">
2854                                        <a
2855                                            href="https://www.mrhankeystoys.com/fantasy-and-sci-fi/monster-dildos"
2856                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2857                                        >Monster Dildos</a>
2858                                                                            </li>
2859                                                                <li class="border-t border-[#f4f4f4]">
2860                                    <a
2861                                        href="https://www.mrhankeystoys.com/fantasy-and-sci-fi"
2862                                        class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2863                                    >Shop All Fantasy Dildos</a>
2864                                </li>
2865                            </ul>
2866                                                    </div>
2867                                            </div>
2868                </li>
2869                                                <li
2870                    class="level-0 px-8 relative s1400:px-6"
2871                    x-data="initMenuDesktopItem"
2872                    @click.outside="close"
2873                    @keydown.escape="close"
2874                                            @mouseenter="canHoverOpen"
2875                        @mouseleave="canHoverClose"
2876                                    >
2877                                        <a href="https://www.mrhankeystoys.com/accessories"
2878                        type="button"
2879                        class="level-0 group w-full flex justify-between items-center gap-1.5 pb-5 border-b-[3px] border-transparent hover:border-hoverColor transition aria-expanded:text-hoverColor aria-expanded:border-hoverColor data-[has-current]:aria-expanded:border-hoverColor data-[has-current]:border-hoverColor data-[has-current]:hover:border-hoverColor text-baseColor font-semibold data-[has-current]:text-hoverColor data-[has-current]:aria-expanded:text-hoverColor"
2880                        @click="toggle"
2881                        aria-expanded="false"
2882                        :aria-expanded="open"
2883                        aria-controls="desktop-menu-category-5"
2884                    >
2885                        Play Gear                        <svg class="transition group-aria-expanded:rotate-180 group-aria-expanded:text-inherit" xmlns="http://www.w3.org/2000/svg" width="9" height="7" viewB
2885ox="0 0 9 7" fill="none"><path d="M5.13918 6.25072C4.7434 6.84483 3.87048 6.84483 3.4747 6.25072L0.346151 1.55441C-0.0965723 0.889837 0.379852 7.20878e-08 1.17839 1.44691e-07L7.43549 7.13585e-07C8.23404 7.86188e-07 8.71046 0.88984 8.26773 1.55442L5.13918 6.25072Z" fill="#666666"/></svg>
2886                    </a>
2887                    <div
2888                        id="desktop-menu-category-5"
2889                        class="z-30 absolute inset-x-0 flex p-7 bg-white overflow-auto w-[280px] shadow-[0_10px_20px_rgba(0,0,0,0.10)]"
2890                        x-show="open"
2891                        x-transition
2892                        x-cloak
2893                    >
2894                        <div class="grow flex flex-col justify-between">
2895                            <ul class="border-b border-[#f4f4f4]">
2896                                                                    <li class="border-t border-[#f4f4f4]">
2897                                        <a
2898                                            href="https://www.mrhankeystoys.com/accessories/suction-cups"
2899                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2900                                        >Suction Cups</a>
2901                                                                            </li>
2902                                                                    <li class="border-t border-[#f4f4f4]">
2903                                        <a
2904                                            href="https://www.mrhankeystoys.com/accessories/lubricants"
2905                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2906                                        >Lubricants</a>
2907                                                                            </li>
2908                                                                    <li class="border-t border-[#f4f4f4]">
2909                                        <a
2910                                            href="https://www.mrhankeystoys.com/accessories/strap-on-harnesses"
2911                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2912                                        >Strap On Harnesses</a>
2913                                                                            </li>
2914                                                                    <li class="border-t border-[#f4f4f4]">
2915                                        <a
2916                                            href="https://www.mrhankeystoys.com/accessories/customizations"
2917                                            class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2918                                        >Custom Colors/Firmness</a>
2919                                                                            </li>
2920                                                                <li class="border-t border-[#f4f4f4]">
2921                                    <a
2922                                        href="https://www.mrhankeystoys.com/accessories"
2923                                        class="level-1 block p-4 font-medium aria-[current=page]:underline aria-[current=page]:text-hoverColor hover:text-hoverColor"
2924                                    >Shop All Play Gear</a>
2925                                </li>
2926                            </ul>
2927                                                    </div>
2928                                            </div>
2929                </li>
2930                            <li class="level-0 px-8 relative s1400:px-6">
2931            <a href="/promo-offers" class="level-0 w-full pb-5 border-b-[3px] border-transparent hover:border-hoverColor text-baseColor hover:text-hoverColor font-semibold inline-block align-top">Sales&#x20;&amp;&#x20;Offers</a>
2932        </li>
2933        <li class="level-0 px-8 relative s1400:px-6">
2934            <a class="level-0 w-full pb-5 border-b-[3px] border-transparent hover:border-hoverColor text-baseColor hover:text-hoverColor font-semibold inline-block align-top" href="/usage-and-safety">Usage&#x20;&amp;&#x20;Safety</a>
2935        </li>
2936        <li class="level-0 px-8 relative s1400:px-6">
2937            <a class="level-0 w-full pb-5 border-b-[3px] border-transparent hover:border-hoverColor text-baseColor hover:text-hoverColor font-semibold inline-block align-top" href="/faq">FAQs</a>
2938        </li>
2939        <li class="level-0 px-8 relative s1400:px-6">
2940            <a class="level-0 w-full pb-5 border-b-[3px] border-transparent hover:border-hoverColor text-baseColor hover:text-hoverColor font-semibold inline-block align-top" href="/contact-us">Contact&#x20;Us</a>
2941        </li>
2942    </ul>
2943</nav>
2944<script>
2945    function initMenuDesktop() {
2946        return {
2947            setActiveMenu() {
2948                Array.from(this.$root.querySelectorAll('a'))
2949                    .filter(link => link.href === window.location.href.split('?')[0])
2950                    .forEach(item => {
2951                        item.setAttribute('aria-current', 'page');
2952
2953                        for (let level = 0; level < 3; level++) {
2954                            const closestMenu = item.closest(`.level-${level}`);
2955
2956                            if (closestMenu) {
2957                                const button = closestMenu.querySelector('button');
2958                                if (button) {
2959                                    button.setAttribute('data-has-current', '');
2960                                }
2961                            }
2962                        }
2963                    }
2964                );
2965            }
2966        }
2967    }
2968
2969    function initMenuDesktopItem() {
2970        return {
2971            open: false,
2972            canHover(func) {
2973                return window.matchMedia('(hover: hover) and (pointer: fine)').matches;
2974            },
2975            canHoverOpen() {
2976                if (!this.canHover()) return;
2977                this.open = true;
2978            },
2979            canHoverClose() {
2980                if (!this.canHover()) return;
2981                this.open = false;
2982            },
2983            toggle() {
2984                this.open = !this.open;
2985            },
2986            close() {
2987                this.open = false;
2988            }
2989        }
2990    }
2991
2992    window.addEventListener('alpine:init', () => {
2993        Alpine.data('initMenuDesktop', initMenuDesktop);
2994        Alpine.data('initMenuDesktopItem', initMenuDesktopItem);
2995    }, { once: true })
2996</script>
2996
2997        </div>
2998    </div>
2999
3000    
3001<script>
3002    function initCartDrawer() {
3003        return {
3004            open: false,
3005            isLoading: false,
3006            checkoutLoading: false,
3007            cart: {},
3008            afterpayObserver: null,
3009            maxItemsToDisplay: 10,
3010            itemsCount: 0,
3011            showSku: true,
3012            init() {
3013                this.initAfterpayObserver();
3014                this.$nextTick(() => this.syncMiniCartAfterpayVisibility());
3015            },
3016            getData(data) {
3017                if (data.cart) {
3018                    this.cart = data.cart;
3019                    this.itemsCount = data.cart.items && data.cart.items.length || 0;
3020                    this.setCartItems();
3021                    this.$nextTick(() => this.syncMiniCartAfterpayVisibility());
3022                }
3023                this.isLoading = false;
3024            },
3025            cartItems: [],
3026                        getItemCountTitle() {
3027                return this.itemsCount === 1
3028                    ? hyva.str('\u0028\u00251\u0020Item\u0029', this.itemsCount)
3029                    : hyva.str('\u0028\u00251\u0020Items\u0029', this.itemsCount)
3030            },
3031            setCartItems() {
3032                this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || [];
3033
3034                if (this.maxItemsToDisplay > 0) {
3035                    this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10));
3036                }
3037            },
3038            updateItemQty(form) {
3039                if (!form.action) return;
3040                this.isLoading = true;
3041                const action = form.action;
3042                const formData = new FormData(form);
3043                formData.append('form_key', hyva.getFormKey());
3044
3045                if (!formData.uenc) {
3046                    formData.append('uenc', hyva.getUenc());
3047                }
3048
3049                fetch(action, {
3050                    body: formData,
3051                    method: 'POST',
3052                    mode: "cors",
3053                    credentials: "include"
3054                }).then((result) => {
3055                    return result.text()
3056                }).then((content) => {
3057                    hyva.replaceDomElement('#maincontent', content);
3058                }).catch((error) => {
3059                    window.dispatchMessages && window.dispatchMessages([{
3060                        type: 'error',
3061                        text: 'Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again.'
3062                    }]);
3063                }).finally(() => {
3064                    this.isLoading = false;
3065                })
3066            },
3067            deleteItemFromCart(itemId) {
3068                this.isLoading = true;
3069
3070                const formKey = hyva.getFormKey();
3071                const postUrl = BASE_URL + 'checkout/sidebar/removeItem/';
3072
3073                fetch(postUrl, {
3074                    headers: {
3075                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
3076                    },
3077                    body: "form_key=" + formKey + "&item_id=" + itemId,
3078                    method: "POST",
3079                    mode: "cors",
3080                    credentials: "include"
3081                }).then(response => {
3082                    if (response.redirected) {
3083                        window.location.href = response.url;
3084                    } else if (response.ok) {
3085                        return response.json();
3086                    } else {
3087                        window.dispatchMessages && window.dispatchMessages([{
3088                            type: 'warning',
3089                            text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.'
3090                        }]);
3091                        this.isLoading = false;
3092                    }
3093                }).then(result => {
3094                    window.dispatchMessages && window.dispatchMessages([{
3095                        type: result.success ? 'success' : 'error',
3096                        text: result.success
3097                            ? 'You\u0020removed\u0020the\u0020item.'
3098                            : result.error_message
3099                    }], result.success ? 5000 : 0)
3100                    window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
3101                });
3102            },
3103            scrollLock(use = true) {
3104                document.documentElement.style.scrollbarGutter = use ? "stable" : "";
3105                document.body.style.overflow = use ? "hidden" : "";
3106            },
3107            toggleCartDrawer(event) {
3108                if (event.detail.isOpen) {
3109                    this.open = event.detail.isOpen;
3110                } else {
3111                    this.open = !this.open;
3112                }
3113
3114                if (this.open) {
3115                    this.$root.showModal();
3116                } else {
3117                    this.$root.close();
3118                }
3119
3120                this.scrollLock(this.open);
3121            },
3122            openCartDrawer() {
3123                this.$root.showModal();
3124                this.open = true;
3125                this.scrollLock(true);
3126            },
3127            closeCartDrawer() {
3128                this.$root.close();
3129                this.open = false;
3130                this.scrollLock(false);
3131            },
3132                        getSectionDataExtraActions() {
3133                if (!this.cart.extra_actions) {
3134                    return '';
3135                }
3136
3137                const contentNode = document.createElement('div');
3138                contentNode.innerHTML = this.cart.extra_actions;
3139
3140                hyva.activateScripts(contentNode);
3141
3142                return contentNode.innerHTML;
3143            },
3144            initAfterpayObserver() {
3145                this.afterpayObserver = new MutationObserver(() => {
3146                    this.syncMiniCartAfterpayVisibility();
3147                });
3148
3149                this.afterpayObserver.observe(this.$root, {
3150                    childList: true,
3151                    subtree: true
3152                });
3153            },
3154            syncMiniCartAfterpayVisibility() {
3155                const afterpayPlacement = this.$root.querySelector('#afterpay-cta-mini-cart');
3156                const shouldHideAfterpay = Boolean(this.cart.cart_has_giftcard);
3157
3158                if (!afterpayPlacement) {
3159                    return;
3160                }
3161
3162                if (shouldHideAfterpay) {
3163                    afterpayPlacement.style.display = 'none';
3164                    afterpayPlacement.setAttribute('aria-hidden', 'true');
3165                    return;
3166                }
3167
3168                afterpayPlacement.style.removeProperty('display');
3169                afterpayPlacement.removeAttribute('aria-hidden');
3170            },
3171            onDialogBackdropClickHelper(event, target) {
3172                const rect = target.getBoundingClientRect();
3173                const isInDialog =
3174                    rect.top <= event.clientY &&
3175                    event.clientY <= rect.top + rect.height &&
3176                    rect.left <= event.clientX &&
3177                    event.clientX <= rect.left + rect.width;
3178                return isInDialog;
3179            },
3180            cartListeners: {
3181                ['@private-content-loaded.window'](event) {
3182                    this.getData(event.detail.data);
3183                },
3184                ['@click'](event) {
3185                    if (this.onDialogBackdropClickHelper(event, this.$root)) return;
3186                    this.closeCartDrawer();
3187                },
3188                ['@toggle-cart.window'](event) {
3189                    this.toggleCartDrawer(event);
3190                },
3191                ['@keydown.window.escape']() {
3192                    this.closeCartDrawer();
3193                }
3194            }
3195        }
3196    }
3197</script>
3197
3198
3199<dialog
3200    id="cart-drawer"
3201    aria-labelledby="cart-drawer-title"
3202    class="z-30 fixed inset-0 flex flex-col max-h-screen max-w-full h-full mr-0 w-[460px] transition ease-in-out backdrop:bg-black/25 px-7 pb-0 pt-5 s767:px-5"
3203    x-show="open"
3204    x-transition:enter="duration-700"
3205    x-transition:enter-start="translate-x-full"
3206    x-transition:enter-end="translate-x-0"
3207    x-transition:leave="duration-500"
3208    x-transition:leave-start="translate-x-0"
3209    x-transition:leave-end="translate-x-full"
3210    x-ref="cartDialogContent"
3211    x-data="initCartDrawer()"
3212    x-init="init()"
3213    x-bind="cartListeners"
3214    x-cloak
3215>
3216    
3217        <div class="flex gap-2 items-center border-b border-goldColor pb-3">
3218        <p id="cart-drawer-title" class="text-2xl flex items-center gap-2">
3219            Shopping Bag                        <span class="items-total text-sm" x-text="getItemCountTitle()"></span>
3220        </p>
3221        <a
3222            href="https://www.mrhankeystoys.com/checkout/cart/"
3223            class="mx-auto text-sm text-[#344FA4] underline"
3224        >
3225            View Bag        </a>
3226                <button
3227            type="button"
3228            class="p-1 -m-1"
3229            @click="closeCartDrawer"
3230            aria-label="Close&#x20;minicart"
3231        >
3232            <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 18 18" fill="none" role="img">
3233<path d="M11.1211 9L17.5605 2.56055C18.1465 1.97461 18.1465 1.02539 17.5605 0.439453C16.9746 -0.146484 16.0254 -0.146484 15.4395 0.439453L9 6.87891L2.56055 0.439453C1.97461 -0.146484 1.02539 -0.146484 0.439453 0.439453C-0.146484 1.02539 -0.146484 1.97461 0.439453 2.56055L6.87891 9L0.439453 15.4395C-0.146484 16.0254 -0.146484 16.9746 0.439453 17.5605C0.732422 17.8535 1.11621 18 1.5 18C1.88379 18 2.26758 17.8535 2.56055 17.5605L9 11.1211L15.4395 17.5605C15.7324 17.8535 16.1162 18 16.5 18C16.8838 18 17.2676 17.8535 17.5605 17.5605C18.1465 16.9746 18.1465 16.0254 17.5605 15.4395L11.1211 9Z" fill="#999999"/>
3234<title>cross</title></svg>
3235        </button>
3236    </div>
3237
3238    
3239    <template x-if="!itemsCount">
3240        <div class="grow grid place-items-center">
3241            <div class="text-center">
3242                <div class="max-w-full max-h-full aspect-square w-44 h-44 inline-flex items-center justify-center rounded-full
3243                    bg-[#f4f4f4] text-black outline-2 outline-dashed outline-black outline-offset-8">
3244                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="120" height="120" aria-hidden="true">
3245  <path d="M3 1a1 1 0 000 2h1.22l.305 1.222a.997.997 0 00.01.042l1.358 5.43-.893.892C3.74 11.846 4.632 14 6.414 14H15a1 1 0 000-2H6.414l1-1H14a1 1 0 00.894-.553l3-6A1 1 0 0017 3H6.28l-.31-1.243A1 1 0 005 1H3zM16 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM6.5 18a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"/>
3246</svg>
3247                </div>
3248                <p class="mt-10 text-xl">
3249                    <strong>Your bag is empty</strong>
3250                </p>
3251                <p class="text-slate-500">
3252                    Looks like you haven&#039;t made your choice yet.                </p>
3253            </div>
3254        </div>
3255    </template>
3256
3257    <template x-if="itemsCount">
3258        <ul class="grow flex flex-col overflow-y-auto overscroll-y-contain md:-mr-7 md:pr-7 s767:-mr-5 s767:pr-5">
3259            <template x-for="item in cartItems">
3260                <li class="flex items-start py-5 border-b border-[#ddd]">
3261                    <a
3262                        class="block shrink-0 border border-[#eee] w-[90px] h-[90px] relative flex items-center justify-center"
3263                        :href="item.product_url"
3264                        :title="hyva.str('Product\u0020\u0022\u00251\u0022', item.product_name)"
3265                    >
3266                        
3267<!-- Render picture tag when webp or avif existed -->
3268<picture>
3269        <source type="image/webp" :srcset="item.product_image.src_webp">
3270        <source :srcset="item.product_image.src">
3271        <img
3272                            :src="item.product_image.src"
3273                            :width="item.product_image.width"
3274                            :height="item.product_image.height"
3275                            loading="lazy"
3276                            :alt="hyva.str('Product\u0020\u0022\u00251\u0022', item.product_name)"
3277                            class="max-w-[70px] max-h-[57px]"
3278                        /></picture>
3279
3280                    </a>
3281                    <div class="w-full max-w-[calc(100%-90px)] pl-4 flex flex-col gap-2.5">
3282                        <p class="text-sm font-medium">
3283                                                        <span x-html="item.product_name"></span>
3284                        </p>
3285                        <template x-if="item.options && item.options.length">
3286                            <div x-data="{ open: false }">
3287                                <div @click="open = ! open" class="text-sm text-[#666] flex items-center gap-1.5 cursor-pointer">
3288                                    View Details
3289                                    <svg :class="{'rotate-180':open, '':!open}" xmlns="http://www.w3.org/2000/svg" width="10" height="8" viewBox="0 0 10 8" fill="none"><path d="M5.83224 7.45072C5.43646 8.04483 4.56354 8.04483 4.16776 7.45071L0.839357 2.45441C0.396633 1.78984 0.873058 0.899998 1.6716 0.899998L8.3284 0.899997C9.12694 0.899997 9.60337 1.78984 9.16064 2.45441L5.83224 7.45072Z" fill="#666666"/></svg>
3290                                </div>
3291                                <div class="flex flex-col mt-1" x-show="open">
3292                                    <template x-for="option in item.options">
3293                                        <div class="flex items-center gap-1 text-sm mt-1 flex-wrap">
3294                                            <p class="font-semibold" x-text="option.label + ':'"></p>
3295                                            <p class="text-[#666]" x-html="option.value"></p>
3296                                        </div>
3297                                    </template>
3298                                </div>
3299                            </div>
3300                        </template>
3301                        <div class="flex items-center justify-between mt-2.5">
3302                            <div class="price-qty flex gap-2.5 items-center">
3303                                <span class="[&_.price]:font-medium [&_.price]:text-lg" x-html="item.product_price"></span>
3304                                                                    <form
3305                                        action="https://www.mrhankeystoys.com/checkout/cart/updatePost/"
3306                                        x-data="{
3307                                            initQty: item.qty,
3308                                            itemQty: item.qty,
3309                                            prevQty: item.qty,
3310                                            updateQty() {
3311                                                const submitEvent = new Event('submit', { cancelable: true });
3312                                                this.$root.dispatchEvent(submitEvent);
3313                                            }
3314                                        }"
3315                                        @submit.prevent="updateItemQty($event.target);"
3316                                        x-init="$watch('isLoading', isLoading => {
3317                                            if (!isLoading) return;
3318                                            initQty = itemQty;
3319                                            prevQty = itemQty;
3320                                        })"
3321                                        method="post"
3322                                        class="form form-cart flex gap-1"
3323                                    ><div class="border border-[#999] flex items-center">
3324                                            <input name="form_key" type="hidden" value="9SFsreOEuib59vuZ" />                                                                                            <button
3325                                                    type="button"
3326                                                    @click="itemQty <= 0 ? itemQty = 0 : itemQty--"
3327                                                    @click.debounce.1000ms="updateQty($event);"
3328                                                    class="w-8 h-8 flex items-center justify-center hover:bg-black group transition"
3329                                                >
3330                                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="stroke-[#999] group-hover:stroke-white w-4 h-4 transition" width="12" height="12" role="img">
3331  <path stroke-linecap="round" stroke-linejoin="round" d="M20 12H4"/>
3332<title>minus</title></svg>
3333                                                </button>
3334                                                                                        <label class="mb-0">
3335                                                <span class="sr-only">Qty</span>
3336                                                <input
3337                                                    type="number"
3338                                                    class="qty p-0 w-8 h-8 text-center border-none text-sm"
3339                                                    required
3340                                                    min="0"
3341                                                    step="any"
3342                                                    x-model.number="itemQty"
3343                                                    :id="`minicart-${item.item_id}-qty`"
3344                                                    :name="`cart[${item.item_id}][qty]`"
3345                                                                                                                                                                @change.debounce.1000ms="updateQty($event)"
3346                                                                                                                                                        >
3347                                            </label>
3348                                                                                            <button
3349                                                    type="button"
3350                                                    @click="itemQty++"
3351                                                    @click.debounce.1000ms="updateQty($event);"
3352                                                    class="w-8 h-8 flex items-center justify-center hover:bg-black group transition"
3353                                                >
3354                                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="stroke-[#999] group-hover:stroke-white w-4 h-4 transition" width="14" height="14" role="img">
3355  <path stroke-linecap="round" stroke-linejoin="round" d="M12 4v16m8-8H4"/>
3356<title>plus</title></svg>
3357                                                </button>
3358                                                                                                                                </div></form>
3359                                                            </div>
3360                            <div class="flex flex-wrap gap-2 justify-between items-center">
3361
3362                                <div class="flex flex-wrap items-center gap-4">
3363                                    <button
3364                                        type="button"
3365                                        class="text-[#666] hover:text-hoverColor"
3366                                        @click="deleteItemFromCart(item.item_id)"
3367                                        :aria-label="hyva.str(
3368                                            'Remove\u0020product\u0020\u0022\u00251\u0022\u0020from\u0020cart',
3369                                            item.product_name
3370                                        )"
3371                                    >
3372                                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 15 16" fill="none" role="img">
3373<path d="M9.66992 0C9.94924 0.00704125 10.2151 0.122139 10.4102 0.321289C10.6053 0.520517 10.7139 0.788163 10.7139 1.06641V2.13379H14.4639C14.6058 2.13379 14.7423 2.18927 14.8428 2.28906C14.9432 2.38908 15 2.52554 15 2.66699C14.9999 2.80832 14.9432 2.944 14.8428 3.04395C14.7423 3.14384 14.6059 3.2002 14.4639 3.2002H13.3926V14.123C13.3911 14.6167 13.1953 15.0903 12.8467 15.4414C12.498 15.7925 12.0243 15.993 11.5283 16H3.49316C2.99348 15.9986 2.51446 15.8 2.16113 15.4482C1.80796 15.0966 1.60894 14.6203 1.60742 14.123V3.2002H0.536133C0.394166 3.2002 0.257669 3.14382 0.157227 3.04395C0.0568383 2.944 8.64848e-05 2.80832 0 2.66699C0 2.52554 0.0567612 2.38908 0.157227 2.28906C0.257653 2.18929 0.394243 2.13379 0.536133 2.13379H4.28613V1.06641C4.2862 0.783603 4.39874 0.512477 4.59961 0.3125C4.80054 0.11247 5.07327 0 5.35742 0H9.66992ZM2.67871 14.123C2.67874 14.3342 2.76124 14.5372 2.90918 14.6885C3.05728 14.8399 3.25945 14.928 3.47168 14.9336H11.5068C11.7227 14.9336 11.9303 14.8482 12.083 14.6963C12.2356 14.5443 12.3212 14.3379 12.3213 14.123V3.2002H2.67871V14.123ZM5.72168 5.33301C5.86343 5.33312 5.99928 5.38957 6.09961 5.48926C6.19997 5.58917 6.25672 5.72492 6.25684 5.86621V12.2666C6.25684 12.4081 6.20007 12.5435 6.09961 12.6436C5.99925 12.7434 5.86355 12.7997 5.72168 12.7998C5.57962 12.7998 5.44323 12.7435 5.34277 12.6436C5.24231 12.5435 5.18555 12.4081 5.18555 12.2666V5.86621C5.18567 5.72492 5.24241 5.58917 5.34277 5.48926C5.44321 5.38942 5.57974 5.33301 5.72168 5.33301ZM9.27832 5.33301C9.42031 5.33301 9.55678 5.38936 9.65723 5.48926C9.75759 5.58917 9.81433 5.72492 9.81445 5.86621V12.2666C9.81445 12.408 9.75765 12.5435 9.65723 12.6436C9.55676 12.7436 9.4204 12.7998 9.27832 12.7998C9.13631 12.7998 8.99983 12.7435 8.89941 12.6436C8.79912 12.5436 8.74316 12.4079 8.74316 12.2666V5.86621C8.74328 5.72493 8.79906 5.58917 8.89941 5.48926C8.99983 5.38928 9.13631 5.33306 9.27832 5.33301ZM5.35742 2.13379H9.64258V1.06641H5.35742V2.13379Z" fill="currentColor"/>
3374<title>delete</title></svg>
3375                                    </button>
3376                                </div>
3377                            </div>
3378                        </div>
3379                    </div>
3380                </li>
3381            </template>
3382        </ul>
3383    </template>
3384
3385    
3386    <template x-if="itemsCount">
3387        <div class="bg-[#f4f4f4] -mx-7 py-4 px-7 gap-4 flex flex-col s767:-mx-5 s767:px-5">
3388            
3389            <dl class="flex flex-col">
3390                <dt class="">Subtotal</dt>
3391                <dd class="text-[22px] font-semibold minicart-subtotal" x-html="cart.subtotal"></dd>
3392            </dl>
3393
3394            <template x-if="cart.giftcard_checkout_restricted">
3395                <div class="rounded border border-red-300 bg-red-50 px-4 py-3 text-sm text-red-700"
3396                     x-text="cart.giftcard_checkout_restriction_message"></div>
3397            </template>
3398
3399                        <div class="minicart-extra-actions empty:hidden" x-html="get
3399SectionDataExtraActions()"></div>
3400			
3401			<div class="flex gap-3 text-center">
3402				<a
3403					x-show="cart.possible_onepage_checkout"
3404					@click.prevent.stop="if (checkoutLoading) return;
3405						checkoutLoading = true;
3406						$dispatch('toggle-authentication', { url: 'https://www.mrhankeystoys.com/checkout/' });
3407						setTimeout(() => checkoutLoading = false, 4000);"
3408					:class="checkoutLoading && 'pointer-events-none opacity-60'"
3409					href="https://www.mrhankeystoys.com/checkout/"
3410					class="btn btn-primary h-[40px] w-full gap-2.5 rounded-[4px]"
3411				>
3412					<span x-show="checkoutLoading"><svg xmlns="http://www.w3.org/2000/svg" fill="hsl(228, 97%, 42%)" viewBox="0 0 24 24" class="w-6 h-6 fill-hoverColor" width="24" height="24" role="img"><path d="M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z"><animateTransform attributeName="transform" type="rotate" dur="0.75s" values="0 12 12;360 12 12" repeatCount="indefinite"/></path><title>loader</title></svg>
3413</span>
3414					<span x-show="!checkoutLoading">Proceed to Checkout</span>
3415				</a>
3416							</div>
3417
3418                        <div class="flex flex-col gap-1 text-[#2C2E2F] [--messaging-font-size:15px] [&_square-placement]:m-0 [&_square-placement]:[zoom:0.8]">
3419                <div class="afterpay_minicart_container empty:hidden" x-show="!cart.cart_has_giftcard"></div>
3420                <div class="hyva-adobe-payments">
3421                    <div class="pay-later-message-minicart"></div>
3422                </div>
3423            </div>
3424        </div>
3425    </template>
3426
3427    <template x-if="!itemsCount">
3428        <div class="flex flex-col pb-7">
3429            <button
3430                type="button"
3431                @click="closeCartDrawer"
3432                class="btn btn-primary"
3433            >Continue shopping</button>
3434        </div>
3435    </template>
3436
3437    
3438    <div
3439    class="z-50 fixed inset-0 grid place-items-center bg-white/70 text-primary"
3440    x-cloak
3441    x-show="isLoading"
3442    x-transition.opacity.duration.200ms
3443>
3444    <div class="flex gap-10 items-center p-4">
3445        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" width="57" height="57" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
3446    <style>
3447        @keyframes spinner-ball-triangle1 {
3448            0% { transform: translate(0%, 0%); }
3449            33% { transform: translate(38%, -79%); }
3450            66% { transform: translate(77%, 0%); }
3451            100% { transform: translate(0%, 0%); }
3452        }
3453
3454        @keyframes spinner-ball-triangle2 {
3455            0% { transform: translate(0%, 0%); }
3456            33% { transform: translate(38%, 79%); }
3457            66% { transform: translate(-38%, 79%); }
3458            100% { transform: translate(0%, 0%); }
3459        }
3460
3461        @keyframes spinner-ball-triangle3 {
3462            0% { transform: translate(0%, 0%); }
3463            33% { transform: translate(-77%, 0%); }
3464            66% { transform: translate(-38%, -79%); }
3465            100% { transform: translate(0%, 0%); }
3466        }
3467    </style>
3468    <circle cx="5" cy="50" r="5" style="animation: spinner-ball-triangle1 2.2s linear infinite"/>
3469    <circle cx="27" cy="5" r="5" style="animation: spinner-ball-triangle2 2.2s linear infinite"/>
3470    <circle cx="49" cy="50" r="5" style="animation: spinner-ball-triangle3 2.2s linear infinite"/>
3471</svg>
3472        <span class="text-xl select-none">
3473            Loading...        </span>
3474    </div>
3475</div>
3476</dialog>
3477    <!-- BLOCK authentication-popup -->
3477<script>
3478    function initAuthentication() {
3479        return {
3480            open: false,
3481            close() {
3482                this.open = false;
3483            },
3484            forceAuthentication: false,
3485            checkoutUrl: 'https://www.mrhankeystoys.com/checkout/index/',
3486            errors: 0,
3487            hasCaptchaToken: 0,
3488            displayErrorMessage: false,
3489            errorMessages: [],
3490            setErrorMessages(message) {
3491                this.errorMessages = [message];
3492                this.displayErrorMessage = true;
3493            },
3494            submitForm() {
3495                // Do not rename $form, the variable is expected to be declared in the recaptcha output
3496                const $form = document.querySelector('#login-form');
3497                    if (!this.hasCaptchaToken) {
3498        this.errors = 1;
3499
3500
3501        const executeGreCaptcha = () => {
3502            grecaptcha.ready(() => {
3503                grecaptcha.execute(
3504                    '6LeoIcUrAAAAAJYfHQM4lGMaUcmcjlQaBgv49EZy',
3505                    {action: 'submit'}
3506                ).then((token) => {
3507                    const tokenElement = $form['g\u002Drecaptcha\u002Dresponse'];
3508
3509                    if (tokenElement && token && token.length > 0) {
3510                        $form['g\u002Drecaptcha\u002Dresponse'].value = token;
3511                        this.errors = 0;
3512                        this.hasCaptchaToken = 1;
3513                        (this.submitForm || $form.submit).call(this);
3514                    } else {
3515                        this.errors = 1;
3516                        const error = tokenElement
3517                            ? 'ReCaptcha\u0020validation\u0020failed,\u0020please\u0020try\u0020again'
3518                            : 'ReCaptcha\u0020token\u0020element\u0020is\u0020missing.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020trying\u0020again.';
3519                        if (this.setErrorMessages) {
3520                            this.setErrorMessages([error])
3521                            this.displayErrorMessage = true;
3522                        } else {
3523                            window.dispatchMessages && window.dispatchMessages([{type: "error", text: error}], 5000);
3524                        }
3525                    }
3526                }).catch(exception => {
3527                    console.error(exception || `An unknown error occurred during ReCaptcha validation. Are the tokens and the domain correctly set up in the Google console?`)
3528                });
3529            })
3530        }
3531
3532        if (window.grecaptcha) {
3533            executeGreCaptcha();
3534        } else {
3535            const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6LeoIcUrAAAAAJYfHQM4lGMaUcmcjlQaBgv49EZy";
3536            const script = document.createElement('script');
3537            script.setAttribute('type', 'text/javascript');
3538            script.setAttribute('src', recaptchaUrl);
3539            document.head.appendChild(script);
3540
3541            script.addEventListener("load", executeGreCaptcha, false);
3542        }
3543    }
3544
3545                if (this.errors === 0) {
3546                    this.dispatchLoginRequest($form);
3547                }
3548            },
3549            onPrivateContentLoaded() {
3550                const data = this.$event.detail.data;
3551                const isLoggedIn = data.customer && data.customer.firstname;
3552                if (data.cart && !isLoggedIn) {
3553                    this.forceAuthentication = !data.cart.isGuestCheckoutAllowed;
3554                }
3555            },
3556            redirectIfAuthenticated() {
3557                const event = this.$event;
3558                this.open = this.forceAuthentication;
3559
3560                if (event.detail && event.detail.url) {
3561                    this.checkoutUrl = event.detail.url;
3562                }
3563                if (!this.forceAuthentication) {
3564                    window.location.href = this.checkoutUrl;
3565                }
3566            },
3567            resetErrors() {
3568                this.errors = 0;
3569            },
3570            dispatchLoginRequest(form) {
3571                this.isLoading = true;
3572                const username = this.$refs['customer-email'].value;
3573                const password = this.$refs['customer-password'].value;
3574                const formKey = hyva.getFormKey();
3575                const bodyFields = {
3576                    'username': username,
3577                    'password': password,
3578                    'formKey': formKey
3579                };
3580                                const fieldName = 'g\u002Drecaptcha\u002Dresponse';
3581                const recaptchaField = fieldName && form[fieldName];
3582                if (recaptchaField) {
3583                    bodyFields[fieldName] = recaptchaField.value;
3584                }
3585                fetch('https://www.mrhankeystoys.com/customer/ajax/login/', {
3586                        method: 'POST',
3587                        headers: {
3588                            'Content-Type': 'application/json',
3589                            'X-Requested-With': 'XMLHttpRequest'
3590                        },
3591                        body: JSON.stringify(bodyFields)
3592                    }
3593                ).then(response => {
3594                        return response.json()
3595                    }
3596                ).then(data => {
3597                    this.isLoading = false;
3598                    if (data.errors) {
3599                        this.setErrorMessages(data.message);
3600                        this.errors = 1;
3601                        this.hasCaptchaToken = 0;
3602                    } else {
3603                        window.location.href = this.checkoutUrl;
3604                    }
3605                });
3606            }
3607        }
3608    }
3609
3610    window.addEventListener('alpine:init', () => Alpine.data('initAuthentication', initAuthentication), {once: true})
3611</script>
3611
3612<section id="authentication-popup"
3613         x-data="initAuthentication"
3614         @private-content-loaded.window="onPrivateContentLoaded"
3615         @toggle-authentication.window="redirectIfAuthenticated"
3616         @keydown.window.escape="close"
3617>
3618    <div
3619        class="backdrop"
3620        aria-hidden="true"
3621        x-cloak
3622        x-show="open"
3623        x-transition:enter="ease-in-out duration-500"
3624        x-transition:enter-start="opacity-0"
3625        x-transition:enter-end="opacity-100"
3626        x-transition:leave="ease-in-out duration-500"
3627        x-transition:leave-start="opacity-100"
3628        x-transition:leave-end="opacity-0"
3629        @click="close"
3630    ></div>
3631    <div role="dialog"
3632         aria-modal="true"
3633         @click.outside="close"
3634         class="inset-y-0 right-0 z-30 flex max-w-full fixed"
3635         x-cloak
3636         x-show="open"
3637    >
3638        <div class="relative w-screen max-w-md pt-16 bg-container-lighter"
3639             x-show="open"
3640             x-cloak
3641             x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700"
3642             x-transition:enter-start="translate-x-full"
3643             x-transition:enter-end="translate-x-0"
3644             x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700"
3645             x-transition:leave-start="translate-x-0"
3646             x-transition:leave-end="translate-x-full"
3647        >
3648            <div
3649                x-show="open"
3650                x-cloak
3651                x-transition:enter="ease-in-out duration-500"
3652                x-transition:enter-start="opacity-0"
3653                x-transition:enter-end="opacity-100"
3654                x-transition:leave="ease-in-out duration-500"
3655                x-transition:leave-start="opacity-100"
3656                x-transition:leave-end="opacity-0" class="absolute top-0 right-2 flex p-2 mt-2">
3657                <button
3658                    type="button"
3659                    @click="close"
3660                    aria-label="Close&#x20;panel"
3661                    class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"
3662                >
3663                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
3664  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
3665</svg>
3666                </button>
3667            </div>
3668            <template x-if="open">
3669                <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl overflow-y-auto">
3670                    <div class="mx-4">
3671                        <div class="message error mb-0" x-show="errors" x-cloak>
3672                            <template x-for="(message, index) in errorMessages" :key="index">
3673                                <div>
3674                                    <template x-if="message">
3675                                        <span x-html="message"></span>
3676                                    </template>
3677                                </div>
3678                            </template>
3679                        </div>
3680                    </div>
3681                    <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm">
3682                        <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900">
3683                            <strong class="font-medium">Checkout using your account</strong>
3684                        </p>
3685
3686                        <form class="form form-login"
3687                              method="post"
3688                              @submit.prevent="submitForm"
3689                              id="login-form"
3690                        >
3691                            <div class="control">
3692    <input type="hidden"
3693           value=""
3694           name="g-recaptcha-response"
3695    />
3696</div>
3697                            <div class="fieldset login">
3698                                <div class="field email required">
3699                                    <label class="label" for="form-login-username" form="login-form" >
3700                                        <span>Email Address</span>
3701                                    </label>
3702                                    <div class="control">
3703                                        <input name="username"
3704                                               id="form-login-username"
3705                                               x-ref="customer-email"
3706                                               @change="resetErrors"
3707                                               type="email"
3708                                               required
3709                                               autocomplete="off"
3710                                               class="form-input"
3711                                        >
3712                                    </div>
3713                                </div>
3714                                <div class="field password required">
3715                                    <label for="form-login-password" class="label" form="login-form">
3716                                        <span>Password</span>
3717                                    </label>
3718                                    <div class="control">
3719                                        <input name="password"
3720                                               id="form-login-password"
3721                                               type="password"
3722                                               class="form-input"
3723                                               required
3724                                               x-ref="customer-password"
3725                                               autocomplete="off"
3726                                               @change="resetErrors"
3727                                        >
3728                                    </div>
3729                                </div>
3730
3731                                <input name="context" type="hidden" value="checkout" />
3732                                <div class="actions-toolbar pt-6 pb-2">
3733                                    <button type="submit"                                            class="inline-flex btn btn-primary disabled:opacity-75"
3734                                    >
3735                                        Sign In                                    </button>
3736                                    <a href="https://www.mrhankeystoys.com/customer/account/forgotpassword/"
3737                                    >
3738                                        Forgot Your Password?                                    </a>
3739                                </div>
3740
3741                            </div>
3742                        </form>
3743                    </div>
3744                    <div class="mx-4">
3745                        <p class="my-4 text-xs [&_a]:text-hoverColor">
3746This form is protected by reCAPTCHA - the <a class="underline" href="https://policies.google.com/privacy" target="_blank" rel="noopener">Google Privacy Policy</a> and <a class="underline" href="https://policies.google.com/terms" target="_blank" rel="noopener">Terms of Service</a> apply.</p>
3747                    </div>
3748                    <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm">
3749                        <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900">
3750                            <strong class="font-medium">Checkout as a new customer</strong>
3751                        </p>
3752
3753                        <div class="block-content">
3754                            <p class="mb-1">
3755                                Creating an account has many benefits:                            </p>
3756                            <ul class="list-disc pl-5">
3757                                <li> See order and shipping status</li>
3758                                <li> Track order history</li>
3759                                <li> Check out faster</li>
3760                            </ul>
3761                            <div class="actions-toolbar mt-6 mb-2">
3762                                <a href="https://www.mrhankeystoys.com/customer/account/create/"
3763                                   class="inline-flex btn btn-primary">
3764                                    Create an Account                                </a>
3765                            </div>
3766                        </div>
3767                    </div>
3768                </div>
3769            </template>
3770        </div>
3771    </div>
3772</section>
3773<!-- /BLOCK authentication-popup --></div>
3774
3775<script>
3776    setInterval(()=> {
3777        var aaPanel = document.querySelector('.aa-Panel');
3778        if(aaPanel) {
3779            document.body.classList.add('openSearch');
3780        } else {
3781            document.body.classList.remove('openSearch');
3782        }
3783    },1000);
3784
3785    var mobileSearch = document.querySelectorAll('.mobileSearch');
3786    var searchPopup = document.querySelector('.searchPopup');
3787    var closeSearch = document.querySelectorAll('.closeSearch');
3788
3789    mobileSearch.forEach(button => {
3790        button.addEventListener('click', () => {
3791            searchPopup.classList.add('active');
3792            document.body.classList.add('overflow-hidden');
3793            document.body.classList.add('bodyAaPanel');
3794        });
3795    });
3796    closeSearch.forEach(button => {
3797        button.addEventListener('click', () => {
3798            searchPopup.classList.remove('active');
3799            document.body.classList.remove('overflow-hidden');
3800            document.body.classList.remove('bodyAaPanel');
3801            document.body.classList.remove('openSearch');
3802        });
3803    });
3804</script>
3804
3805</header><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div>
3806<div class="page messages">
3806<script>
3807        function initMessages() {
3808        "use strict";
3809        return {
3810            messages: window.mageMessages || [],
3811            isEmpty() {
3812                return this.messages.reduce(
3813                    function (isEmpty, message) {
3814                        return isEmpty && message === undefined
3815                    }, true
3816                )
3817            },
3818            hasMessages() {
3819                return !this.isEmpty();
3820            },
3821            hasMessage() {
3822                return !!this.message;
3823            },
3824            removeMessage() {
3825                this.messages[this.index] = undefined;
3826            },
3827            addMessages(messages, hideAfter) {
3828                messages.map((message) => {
3829                    this.messages = this.messages.concat(message);
3830                    if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) {
3831                        hideAfter = window.defaultSuccessMessageTimeout;
3832                    }
3833                    if (hideAfter) {
3834                        this.setHideTimeOut(this.messages.length -1, hideAfter);
3835                    }
3836                });
3837            },
3838            setHideTimeOut(messageIndex, hideAfter) {
3839                setTimeout((messageIndex) => {
3840                    this.messages[messageIndex] = undefined;
3841                }, hideAfter, messageIndex);
3842            },
3843            eventListeners: {
3844                ['@messages-loaded.window'](event) {
3845                    this.addMessages(event.detail.messages, event.detail.hideAfter)
3846                },
3847                ['@private-content-loaded.window'](event) {
3848                    const data = event.detail.data;
3849                    if (
3850                        data.messages &&
3851                        data.messages.messages &&
3852                        data.messages.messages.length
3853                    ) {
3854                        this.addMessages(data.messages.messages);
3855                    }
3856                },
3857                ['@clear-messages.window']() {
3858                    this.messages = [];
3859                }
3860            },
3861            getMessageUiId() {
3862                return 'message-' + this.message.type;
3863            }
3864        }
3865    }
3866
3867    window.addEventListener('alpine:init', () => Alpine.data('initMessages', initMessages), {once: true})
3868</script>
3868
3869<section id="messages"
3870         x-data="initMessages"
3871         x-bind="eventListeners"
3872         aria-live="assertive"
3873         role="alert"
3874>
3875    <template x-if="hasMessages">
3876        <div class="w-full">
3877            <div class="messages container mx-auto py-3">
3878                <template x-for="(message, index) in messages" :key="index">
3879                    <div>
3880                        <template x-if="hasMessage">
3881                            <div class="message"
3882                                 :class="message.type"
3883                                 :ui-id="getMessageUiId"
3884                            >
3885                                <span x-html="message.text"></span>
3886                                <button
3887                                    type="button"
3888                                    class="text-gray-600 hover:text-black"
3889                                    aria-label="Close message"
3890                                    @click.prevent="removeMessage"
3891                                >
3892                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="stroke-current" width="18" height="18" aria-hidden="true">
3893  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
3894</svg>
3895                                </button>
3896                            </div>
3897                        </template>
3898                    </div>
3899                </template>
3900            </div>
3901        </div>
3902    </template>
3903</section>
3904</div><div class="columns"><div class="column main"><style>
3905    .smart-button--applepay apple-pay-button {
3906        --apple-pay-button-width: 100%;
3907        --apple-pay-button-height: 40px;
3908        --apple-pay-button-border-radius: 4px;
3909        --apple-pay-button-box-sizing: border-box;
3910        --apple-pay-button-padding: 0;
3911        display: block;
3912        width: 100%;
3913        cursor: pointer;
3914    }
3915
3916        .smart-button--applepay > * {
3917        width: 100%;
3918    }
3919</style>
3920<script>
3921    (function () {
3922        'use strict';
3923
3924        if (window.ktplPaymentSdk) {
3925            return;
3926        }
3927
3928        const BUTTON_LOCALE = 'en\u002DUS';
3929
3930        const MESSAGE_REQUEST_FAILED = 'Something\u0020went\u0020wrong\u0020with\u0020your\u0020request.\u0020Please\u0020try\u0020again\u0020later.';
3931        const MESSAGE_PAYMENT_INVALID = 'Your\u0020payment\u0020was\u0020not\u0020successful.\u0020Please\u0020try\u0020again\u0020later.';
3932
3933                const SDK_ERROR_MESSAGES = {
3934            APPLE_PAY_ZERO_AMOUNT: 'Apple\u0020Pay\u0020is\u0020not\u0020available\u0020when\u0020the\u0020order\u0020total\u0020is\u00200.\u0020Please\u0020choose\u0020a\u0020different\u0020payment\u0020method.',
3935            GOOGLE_PAY_ZERO_AMOUNT: 'Google\u0020Pay\u0020is\u0020not\u0020available\u0020when\u0020the\u0020order\u0020total\u0020is\u00200.\u0020Please\u0020choose\u0020a\u0020different\u0020payment\u0020method.',
3936            GOOGLE_PAY_THREE_DS_FAILED: 'Unable\u0020to\u0020validate\u0020payment\u0020with\u00203DS.\u0020Please\u0020choose\u0020a\u0020different\u0020payment\u0020method.'
3937        };
3938
3939        function mapPaymentSdkErrorMessage(error) {
3940            if (!error || !error.code) {
3941                return null;
3942            }
3943
3944            return SDK_ERROR_MESSAGES[error.code] || null;
3945        }
3946
3947                function mapLocationToPageType(location) {
3948            switch (location) {
3949                case 'PRODUCT_DETAIL':
3950                    return 'product';
3951                case 'MINICART':
3952                    return 'minicart';
3953                case 'CART':
3954                    return 'cart';
3955                case 'CHECKOUT':
3956                case 'START_OF_CHECKOUT':
3957                case 'ADMIN':
3958                    return undefined;
3959                default:
3960                    throw new Error('Unknown location: "' + location + '".');
3961            }
3962        }
3963
3964                        const loadMemo = {};
3965        const initializeSdkMemo = {};
3966        let cachedPullScriptResult = null;
3967
3968        function objToSortedJsonString(obj) {
3969            return JSON.stringify(obj, Object.keys(obj).sort());
3970        }
3971
3972        function doPullScript(params) {
3973            const preferredUrl = params.preferredUrl;
3974            const fallbackUrl = params.fallbackUrl;
3975
3976            const promise = window.paypalLoadCustomScript({url: preferredUrl})
3977                .catch((error) => {
3978                    console.warn(
3979                        'Failed to load Payment Services SDK script from preferred URL '
3980                        + preferredUrl + '. Retrying with '
3981                        + (fallbackUrl ? 'fallback URL ' + fallbackUrl : 'the same URL as no fallback URL was provided')
3982                        + '.',
3983                        error
3984                    );
3985
3986                    return window.paypalLoadCustomScript({url: fallbackUrl || preferredUrl});
3987                })
3988                .then(() => {
3989                    if ('PaymentServicesSDK' in window) {
3990                        return {PaymentServicesSDK: window.PaymentServicesSDK};
3991                    }
3992
3993                    throw new Error('Script loaded, but Payment Services SDK not found.');
3994                });
3995
3996            return {preferredUrl: preferredUrl, fallbackUrl: fallbackUrl, promise: promise};
3997        }
3998
3999        function pullScript(params) {
4000            if (!cachedPullScriptResult) {
4001                cachedPullScriptResult = doPullScript(params);
4002            }
4003
4004            if (params.preferredUrl !== cachedPullScriptResult.preferredUrl
4005                || params.fallbackUrl !== cachedPullScriptResult.fallbackUrl) {
4006                const urls = (data) => 'urls(preferred = ' + data.preferredUrl + ', fallback = ' + data.fallbackUrl + ')';
4007
4008                console.warn(
4009                    'Ignoring request to pull Payment Services SDK script from ' + urls(params) + ', as loading '
4010                    + 'multiple versions of the Payment Services SDK script on the same page is not supported, and '
4011                    + 'the Payment Services SDK script was already loaded from '
4012                    + urls(cachedPullScriptResult) + '.'
4013                );
4014            }
4015
4016            return cachedPullScriptResult.promise;
4017        }
4018
4019        function constructSdkConfig(params) {
4020            const sdkConfig = {};
4021
4022            if (params.gqlEndpoint) {
4023                sdkConfig.gqlApiUrl = params.gqlEndpoint;
4024            }
4025            if (params.customerToken) {
4026                sdkConfig.getCustomerToken = () => params.customerToken;
4027            }
4028            if (params.storeViewCode) {
4029                sdkConfig.storeViewCode = params.storeViewCode;
4030            }
4031            if (params.commerceVersion) {
4032                sdkConfig.commerceVersion = params.commerceVersion;
4033            }
4034            if (params.isGuestCustomer !== null) {
4035                sdkConfig.isGuestCustomer = () => params.isGuestCustomer;
4036            }
4037
4038            return sdkConfig;
4039        }
4040
4041        function doInitializeSdk(script, params) {
4042            const sdk = new script.PaymentServicesSDK(constructSdkConfig(params));
4043            const namespaceInitFutures = [];
4044
4045            if (params.paymentLocation) {
4046                namespaceInitFutures.push(sdk.Payment.init({location: params.paymentLocation}));
4047            }
4048
4049            return Promise.all(namespaceInitFutures).then(() => sdk);
4050        }
4051
4052        function initializeSdk(script, params) {
4053            const memoKey = objToSortedJsonString(params);
4054
4055            if (!(memoKey in initializeSdkMemo)) {
4056                initializeSdkMemo[memoKey] = doInitializeSdk(script, params);
4057            }
4058
4059            return initializeSdkMemo[memoKey];
4060        }
4061
4062        /**
4063         * @param {Object} sdkParams the paymentSdkParams array from
4064         *                 SmartButtons::getPaymentSDKBasedComponentParams()
4065         * @param {String} location a PaymentLocation enum value, e.g. "CART"
4066         * @return {Promise<Object>} the initialised Payment Services SDK
4067         */
4068        function loadSdk(sdkParams, location) {
4069            if (!sdkParams || !sdkParams.paymentsSDKUrl) {
4070                return Promise.reject(new Error("Missing required argument: 'preferredUrl'."));
4071            }
4072
4073            const pullScriptParams = {
4074                preferredUrl: sdkParams.paymentsSDKUrl,
4075                fallbackUrl: sdkParams.paymentsSDKFallbackUrl || null
4076            };
4077            const initializeSdkParams = {
4078                gqlEndpoint: sdkParams.graphQLEndpointUrl || null,
4079                customerToken: sdkParams.oauthToken || null,
4080                commerceVersion: sdkParams.commerceVersion || null,
4081                isGuestCustomer: sdkParams.isGuestCustomer ?? null,
4082                storeViewCode: sdkParams.storeViewCode || null,
4083                paymentLocation: location || null,
4084                shouldInitVault: false
4085            };
4086
4087            const memoKey = '{pullScriptParams:' + objToSortedJsonString(pullScriptParams)
4088                + ',initializeSdkParams:' + objToSortedJsonString(initializeSdkParams) + '}';
4089
4090            if (!(memoKey in loadMemo)) {
4091                loadMemo[memoKey] = pullScript(pullScriptParams)
4092                    .then((script) => initializeSdk(script, initializeSdkParams));
4093            }
4094
4095            return loadMemo[memoKey];
4096        }
4097
4098                        class ApplePayButton {
4099            /**
4100             * @param {Object} config
4101             * @param {String} config.location a PaymentLocation enum value, e.g. "CART"
4102             * @param {String} config.buttonContainerId id of the element to render into
4103             * @param {String} config.placeOrderUrl
4104             * @param {String} config.cancelUrl
4105             * @param {Object} config.paymentSdkParams
4106             * @param {Function} [config.getCartId] resolves the masked quote id
4107             * @param {Function} [config.validate] return false to suppress the payment sheet
4108             * @param {Function} [config.showLoader]
4109             * @param {Function} [config.logCustomerErrorMessage]
4110             * @param {Function} [config.refreshCustomerMessages]
4111             * @param {Function} [config.onOrderPlaced]
4112             */
4113            constructor(config) {
4114                Object.assign(this, {
4115                    location: '',
4116                    buttonContainerId: '',
4117                    placeOrderUrl: '',
4118                    cancelUrl: '',
4119                    paymentSdkParams: {},
4120                    getCartId: () => Promise.reject(new Error('No cart id getter provided.')),
4121                    validate: () => true,
4122                    showLoader: () => {},
4123                    logCustomerErrorMessage: () => {},
4124                    refreshCustomerMessages: () => {},
4125                    onOrderPlaced: () => {}
4126                }, config);
4127
4128                                this.hasCustomerInteracted = false;
4129
4130                this.paymentSdkReady = loadSdk(this.paymentSdkParams, this.location);
4131            }
4132
4133            /**
4134             * Renders the Apple Pay button, or rejects if Apple Pay is unavailable.
4135             *
4136             * @return {Promise<void>}
4137             */
4138            async renderApplePayButton() {
4139                const sdk = await this.paymentSdkReady;
4140
4141                if (!sdk.Payment.ApplePay.isAvailable()) {
4142                    throw new Error('Apple Pay is not available.');
4143                }
4144
4145                                if (!document.getElementById(this.buttonContainerId)) {
4146                    return;
4147                }
4148
4149                                await sdk.Payment.ApplePay.render({
4150                    container: '#' + this.buttonContainerId,
4151                    buttonLanguage: {locale: BUTTON_LOCALE}
4151,
4152                    useApplePayCouponCodes: this.location !== 'CHECKOUT' && this.location !== 'CART',
4153                    useApplePayShippingAddress: this.location !== 'CHECKOUT',
4154                    useApplePayBillingAddress: this.location !== 'CHECKOUT',
4155                    getCartId: () => this.getCartId(),
4156                    onButtonClick: (showPaymentSheet) => this.onButtonClick(showPaymentSheet),
4157                    onSuccess: () => this.onSuccess().catch((error) => this.onError(error)),
4158                    onError: (error) => this.onError(error),
4159                    onCancel: () => this.onCancel(),
4160                    disabled: false
4161                });
4162            }
4163
4164            onButtonClick(showPaymentSheet) {
4165                this.hasCustomerInteracted = true;
4166
4167                if (!this.validate()) {
4168                    return;
4169                }
4170
4171                this.showLoader(true);
4172                this.refreshCustomerMessages();
4173                showPaymentSheet();
4174            }
4175
4176            async onSuccess() {
4177                const body = new FormData();
4178
4179                body.append('form_key', hyva.getFormKey());
4180                body.append('location', mapLocationToPageType(this.location) || 'undefined');
4181
4182                const response = await fetch(this.placeOrderUrl, {
4183                    method: 'POST',
4184                    body: body,
4185                    credentials: 'same-origin'
4186                });
4187                const result = await response.json();
4188
4189                if (result.error) {
4190                    this.refreshCustomerMessages();
4191
4192                    throw this.createResponseError(result.error);
4193                }
4194
4195                this.onOrderPlaced();
4196
4197                if (result.redirectUrl) {
4198                    window.location.replace(result.redirectUrl);
4199                }
4200            }
4201
4202            onError(error) {
4203                this.showLoader(false);
4204
4205                                if (!this.hasCustomerInteracted) {
4206                    console.error('Apple Pay set-up failed before any customer interaction:', error);
4207
4208                    return;
4209                }
4210
4211                const localizedSdkMessage = mapPaymentSdkErrorMessage(error);
4212
4213                if (this.isResponseError(error)) {
4214                    this.logCustomerErrorMessage(error.message);
4215                } else if (localizedSdkMessage) {
4216                    this.logCustomerErrorMessage(localizedSdkMessage);
4217                } else if (error && error.debug_id) {
4218                    this.logCustomerErrorMessage(MESSAGE_PAYMENT_INVALID);
4219                } else {
4220                    this.logCustomerErrorMessage(MESSAGE_REQUEST_FAILED);
4221                }
4222            }
4223
4224            onCancel() {
4225                this.showLoader(false);
4226
4227                if (this.cancelUrl) {
4228                    window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
4229                    window.location = this.cancelUrl;
4230                }
4231            }
4232
4233                        adobePaymentsStore() {
4234                return typeof Alpine === 'undefined' ? null : Alpine.store('adobe_payments');
4235            }
4236
4237            createResponseError(message) {
4238                const store = this.adobePaymentsStore();
4239
4240                return store ? store.createResponseErrorInstance(message) : new Error(message);
4241            }
4242
4243            isResponseError(error) {
4244                const store = this.adobePaymentsStore();
4245
4246                return store ? error instanceof store.ResponseError : false;
4247            }
4248        }
4249
4250        window.ktplPaymentSdk = {
4251            loadSdk: loadSdk,
4252            ApplePayButton: ApplePayButton,
4253            mapLocationToPageType: mapLocationToPageType,
4254            mapPaymentSdkErrorMessage: mapPaymentSdkErrorMessage
4255        };
4256    }());
4257</script>
vendor: 1 bytes, line 4257
4257
4258<script>
4259    class GooglePayWrapper
4260    {
4261        /** TODO: Worth downloading this and hosting it as part of the module? */
4262        static googleSDKSrc = 'https://pay.google.com/gp/p/js/pay.js';
4263        static PRODUCTION_MODE = 'PRODUCTION';
4264        static TEST_MODE = 'TEST';
4265
4266        instance = null;
4267        paypalSdk = null;
4268        merchantInfo = null;
4269        allowedPaymentMethods = null;
4270
4271        baseRequest = {
4272            apiVersion: 2,
4273            apiVersionMinor: 0,
4274            callbackIntents: ['PAYMENT_AUTHORIZATION'],
4275            emailRequired: true,
4276            shippingAddressParameters: {phoneNumberRequired: true}
4277        };
4278
4279        constructor(paypalSdk, mode, performAuthorization, isVirtual = false)
4280        {
4281            if (mode !== GooglePayWrapper.PRODUCTION_MODE) {
4282                mode = GooglePayWrapper.TEST_MODE;
4283            }
4284
4285            this.paypalSdk = paypalSdk;
4286            this.isVirtual = isVirtual;
4287            this.instance = new google.payments.api.PaymentsClient({
4288                environment: mode,
4289                paymentDataCallbacks: {
4290                    onPaymentAuthorized: performAuthorization
4291                }
4292            });
4293        }
4294
4295        getClient() {
4296            if (this.instance == null) {
4297                throw new Error('GoogleClient should be initialized before the first use');
4298            }
4299
4300            return this.instance;
4301        }
4302
4303        createButton(props)
4304        {
4305            return this.getClient().createButton(props);
4306        }
4307
4308        async showPopup(paymentData)
4309        {
4310            try {
4311                let googlePayConfig = await this.getGooglePayConfig();
4312                const data = await this.getGooglePaymentDataRequest(paymentData);
4313
4314                await this.getClient().loadPaymentData(data);
4315            } catch (e) {
4316                this.onError(e);
4317            }
4318        }
4319
4320        async getGooglePayConfig()
4321        {
4322            if (this.allowedPaymentMethods === null || this.merchantInfo === null) {
4323                const googlePayConfig = await this.paypalSdk.Googlepay().config();
4324
4325                this.allowedPaymentMethods = googlePayConfig.allowedPaymentMethods;
4326                this.merchantInfo = googlePayConfig.merchantInfo;
4327            }
4328
4329            return {
4330                allowedPaymentMethods: this.allowedPaymentMethods,
4331                merchantInfo: this.merchantInfo
4332            };
4333        }
4334
4335        async isReadyToPay()
4336        {
4337            let googlePayConfig = await this.getGooglePayConfig();
4338            const isReadyToPayRequest = this.getGoogleIsReadyToPayRequest(googlePayConfig.allowedPaymentMethods);
4339            const response = await this.getClient().isReadyToPay(isReadyToPayRequest);
4340
4341            return response;
4342        }
4343
4344        getGoogleIsReadyToPayRequest(allowedPaymentMethods)
4345        {
4346            return Object.assign({}, this.baseRequest, {
4347                allowedPaymentMethods: allowedPaymentMethods
4348            });
4349        }
4350
4351        async getGooglePaymentDataRequest(transactionInfo)
4352        {
4353            const paymentDataRequest = Object.assign({}, this.baseRequest),
4354                {allowedPaymentMethods, merchantInfo} = await this.getGooglePayConfig();
4355
4356            paymentDataRequest.allowedPaymentMethods = allowedPaymentMethods;
4357            paymentDataRequest.transactionInfo = transactionInfo;
4358            paymentDataRequest.merchantInfo = merchantInfo;
4359            paymentDataRequest.shippingAddressRequired = !this.isVirtual;
4360
4361            return paymentDataRequest;
4362        }
4363
4364        onError(e)
4365        {
4366            console.log(e);
4367        }
4368
4369        /**
4370         * Create order request.
4371         *
4372         * @param {String} url
4373         * @param {Object} payPalOrderData
4374         * @param {FormData} orderData
4375         * @return {Promise<Object>}
4376         */
4377        static performCreateOrder(url, payPalOrderData, orderData)
4378        {
4379            orderData = orderData || new FormData();
4380            orderData.append('form_key', hyva.getFormKey());
4381            orderData.append('payment_source', payPalOrderData['paymentSource']);
4382
4383            return fetch(url, {
4384                method: 'POST',
4385                headers: {},
4386                body: orderData || new FormData(),
4387                credentials: 'same-origin'
4388            }).then(function (response) {
4389                return response.json();
4390            });
4391        }
4392
4393        /**
4394         * Payment authorization request.
4395         *
4396         * @return {Promise<Object>}
4397         */
4398        static performOnAuthorize(url, data)
4399        {
4400            const orderData = new FormData();
4401
4402            orderData.append('form_key', hyva.getFormKey());
4403            orderData.append('paypal_order_id', data.orderID);
4404
4405            return fetch(url, {
4406                method: 'POST',
4407                headers: {},
4408                body: orderData,
4409                credentials: 'same-origin'
4410            }).then(function (response) {
4411                return response.json();
4412            });
4413        }
4414
4415        static async loadGoogleSDK()
4416        {
4417            try {
4418                await window.paypalLoadCustomScript({url: GooglePayWrapper.googleSDKSrc});
4419            } catch (e) {
4420                console.log('Error while loading google sdk: ', e);
4421            }
4422        }
4423
4424        static async initGooglePayButtons(smartButtonsInstance, googleAbstract, containerId, isVirtual)
4425        {
4426            const googlePayButton = new GooglePayButton(smartButtonsInstance, googleAbstract, containerId, isVirtual);
4427            await googlePayButton.sdkLoaded;
4428            await googlePayButton.initGoogleSDK();
4429        }
4430    }
4431
4432    /**
4433     * Init this object in GooglePayButton when paypal sdk is loaded
4434     */
4435    window.googlePayWrapper = null;
4436</script>
vendor: 1 bytes, line 4436
4436
4437<script>
4438    /**
4439     * GooglePay button wrapper
4440     */
4441    class GooglePayButton
4442    {
4443        constructor(smartButtonsInstance, googleAbstract, containerId, isVirtual = false)
4444        {
4445            this.smartButtonsInstance = smartButtonsInstance;
4446            this.isVirtual = isVirtual;
4447            /**
4448             * TODO: We need to check here these object dupes. We need to make sure the remove where not needed
4449             * At best we would want to leave the dynamic values to avoid errors. We need to recheck this code
4450             * and make sure we are not removing any needed values. We need to add comments to the code to make sure
4451             * we know what each value is doing.
4452             */
4453
4454            /**
4455             * TODO: resolve duplicate properties
4456             */
4457            const defaults = {
4458                sdkNamespace: 'paypalGooglePay',
4459                paypal: null,
4460                paymentSource: 'googlepay',
4461                updateQuoteUrl: '/paymentservicespaypal/smartbuttons/updatequote/',
4462                instance: null,
4463                allowedPaymentMethods: null,
4464                merchantInfo: null,
4465                paypalOrderId: null,
4466                eligible: false,
4467                mode: smartButtonsInstance.componentParams.googlePayMode,
4468                shippingAddressRequired: true,
4469                buttonContainerId: containerId,
4470                scriptParams: googleAbstract.sdkParams,
4471                styles: smartButtonsInstance.componentParams.styles,
4472                createOrderUrl: smartButtonsInstance.componentParams.createOrderUrl,
4473                authorizeOrderUrl: smartButtonsInstance.componentParams.authorizeOrderUrl,
4474                beforeCreateOrder: smartButtonsInstance.beforeCreateOrder.bind(smartButtonsInstance),
4475                catchCreateOrder: smartButtonsInstance.catchError.bind(smartButtonsInstance),
4476                finallyCreateOrder: smartButtonsInstance.showLoader.bind(smartButtonsInstance),
4477                beforeOnAuthorize: smartButtonsInstance.beforeOnAuthorize.bind(smartButtonsInstance),
4478                catchOnAuthorize: smartButtonsInstance.catchError.bind(smartButtonsInstance),
4479                finallyOnAuthorize: smartButtonsInstance.showLoader.bind(smartButtonsInstance),
4480                onError: smartButtonsInstance.catchError.bind(smartButtonsInstance),
4481                onCancel: smartButtonsInstance.onCancel.bind(smartButtonsInstance)
4482            };
4483
4484            Object.assign(this, defaults);
4485
4486            // Binding methods if not already bound
4487            [
4488                'beforeCreateOrder',
4489                'catchCreateOrder',
4490                'beforeOnAuthorize',
4491                'afterOnAuthorize',
4492                'onError',
4493                'onCancel'
4494            ].forEach(method => {
4495                if (this[method] instanceof Function) {
4496                    this[method] = this[method].bind(this);
4497                }
4498            });
4499
4500            this.sdkLoaded = Promise.all([this.loadPayPalSDK(), GooglePayWrapper.loadGoogleSDK()]);
4501        }
4502
4503        async loadPayPalSDK()
4504        {
4505            try {
4506                const sdkScript = await Alpine.store('adobe_payments')
4507                    .scriptLoaderWrapper
4508                    .returnSdk(this.scriptParams, this.sdkNamespace);
4509
4510                this.paypal = sdkScript;
4511            } catch (e) {
4512                this.onError(e);
4513            }
4514        }
4515
4516        async initGoogleSDK()
4517        {
4518            try {
4519                window.googlePayWrapper = new GooglePayWrapper(
4520                    this.paypal,
4521                    this.mode,
4522                    this.performAuthorization.bind(this),
4523                    this.isVirtual
4524                );
4525
4526                const response = await window.googlePayWrapper.isReadyToPay();
4527
4528                if (response.result) {
4529                    this.renderGooglePayButton();
4530                }
4531            } catch (e) {
4532                this.onError({hidden: true, error: e});
4533            }
4534        }
4535
4536        renderGooglePayButton()
4537        {
4538            const buttonContainer = document.getElementById(this.buttonContainerId);
4539
4540            if (!buttonContainer) {
4541                console.error('Google Pay button container not found.');
4542
4543                return;
4544            }
4545
4546                        let buttonProps = {
4547                onClick: this.onClick.bind(this),
4548                buttonColor: this.styles.button_color,
4549                buttonType: this.styles.button_type,
4550                buttonSizeMode: 'fill'
4551            };
4552
4553                        if (this.styles.button_custom_height) {
4554                buttonContainer.style.height = this.styles.button_custom_height + 'px';
4555            }
4556
4557                        buttonContainer.innerHTML = '';
4558
4559            buttonContainer.append(
4560                window.googlePayWrapper.createButton(buttonProps)
4561            );
4562
4563            this.eligible = true;
4564        }
4565
4566        onCancel()
4567        {
4568            this.onError();
4569        }
4570
4571        enableButton()
4572        {
4573            document.querySelector(`#${this.buttonContainerId} button`).disable = false;
4574        }
4575
4576        disableButton()
4577        {
4578            document.querySelector(`#${this.buttonContainerId} button`).disable = true;
4579        }
4580
4581        performAuthorization(paymentData)
4582        {
4583            return new Promise(function (resolve) {
4584                this.processPayment(paymentData)
4585                    .then(resolve)
4586                    .catch(function () {
4587                        this.onError(new Error('couldn\'t process payment'));
4588                        resolve({transactionState: 'ERROR'});
4589                    }.bind(this));
4590            }.bind(this));
4591        }
4592
4593        async processPayment(paymentData)
4594        {
4595            try {
4596                const {status} = await this.paypal.Googlepay().confirmOrder({
4597                    orderId: this.paypalOrderId,
4598                    paymentMethodData: paymentData.paymentMethodData,
4599                    shippingAddress: paymentData.shippingAddress,
4600                    email: paymentData.email
4601                });
4602
4603                if (status === 'APPROVED') {
4604                    this.onApprove(paymentData);
4605                    return {transactionState: 'SUCCESS'};
4606                }
4607
4608                this.onError(new Error('couldn\'t approve order'));
4609
4610                return {transactionState: 'ERROR'};
4611            } catch (err) {
4612                this.onError(err);
4613
4614                return {
4615                    transactionState: 'ERROR',
4616                    error: {
4617                        message: err.message
4618                    }
4619                };
4620            }
4621        }
4622
4623        onClick()
4624        {
4625            if (this.smartButtonsInstance) {
4626                this.smartButtonsInstance.showLoader(true);
4627            }
4628
4629            this.createOrder();
4630        }
4631
4632        /**
4633         * Calls before create order.
4634         *
4635         * @return {Promise}
4636         */
4637        beforeCreateOrder()
4638        {
4639            return Promise.resolve();
4640        }
4641
4642        /**
4643         * Create order.
4644         *
4645         * @return {Promise}
4646         */
4647        createOrder()
4648        {
4649            let data = {'paymentSource': this.paymentSource};
4650
4651            return this.beforeCreateOrder()
4652                .then(GooglePayWrapper.performCreateOrder.bind(this, this.createOrderUrl, data))
4653                .then(function (orderData) {
4654                    this.paypalOrderId = this.afterCreateOrder(orderData);
4655                    return this.paypalOrderId;
4656                }.bind(this)).catch(function (error) {
4657                    return this.catchCreateOrder(error);
4658                }.bind(this)
4659                ).catch(e => {
4660                    console.log(e);
4661                });
4662        }
4663
4664        /**
4665         * After order created.
4666         *
4667         * @param {Object} data
4668         * @return {String}
4669         */
4670        afterCreateOrder(data)
4671        {
4672            if (data.response['paypal-order'] && data.response['paypal-order']['mp_order_id']) {
4673                this.paymentsOrderId = data.response['paypal-order']['mp_order_id'];
4674                this.paypalOrderId = data.response['paypal-order'].id;
4675
4676                window.googlePayWrapper.showPopup({
4677                    displayItems: [],
4678                    currencyCode: data.response['paypal-order']['currency_code'],
4679                    totalPriceStatus: 'FINAL',
4680                    totalPrice: Number(data.response['paypal-order']['amount']).toString(),
4681                    totalPriceLabel: 'Total'
4682                });
4683
4684                return this.paypalOrderId;
4685            }
4686
4687            throw new Error();
4688        }
4689
4690        /**
4691         * Catch error on order creation.
4692         */
4693        catchCreateOrder()
4694        {
4695
4696        }
4697
4698        /**
4699         * On payment approve.
4700         *
4701         * @param {Object} data
4702         * @param {Object} actions
4703         * @return {Promise}
4704         */
4705        async onApprove()
4706        {
4707            const data = {orderID: this.paypalOrderId};
4708
4709            try {
4710                await this.beforeOnAuthorize();
4711                const response = await GooglePayWrapper.performOnAuthorize(this.updateQuoteUrl, data);
4712
4713                this.afterOnAuthorize(response);
4714            } catch (e) {
4715                this.onError(e);
4716            }
4717        }
4718
4719        beforeOnAuthorize()
4720        {
4721            return Promise.resolve();
4722        }
4723
4724        afterOnAuthorize(res)
4725        {
4726            if (res.success) {
4727                return window.location = res.redirectUrl;
4728            }
4729
4730            if (this.smartButtonsInstance) {
4731                throw smartButtonsInstance.store.adobe_payments.createResponseErrorInstance(res.error);
4732            }
4733        }
4734
4735        /**
4736         * Calls when error happened on paypal side.
4737         *
4738         * @param {Error} error
4739         */
4740        onError(error)
4741        {
4742            console.log('Error: ', error.message);
4743        }
4744
4745        isEligible()
4746        {
4747            return this.eligible;
4748        }
4749    }
4750
4751    /**
4752     * End of GooglePay button wrapper
4753     */
4754</script>
4754
4755
4756<script>
4757    document.addEventListener('alpine:init', () => {
4758        Alpine.store('adobe_payments', {
4759                        PaypalAbstract: class {
4760                constructor(sdkParamsKey = 'paypal') {
4761                    this.sdkParamsKey = sdkParamsKey; // 'paypal' or 'applepay' or 'googlepay'
4762                    this.sdkParams = [];
4763                    this.cacheTtl = 30000;
4764                }
4765
4766                /**
4767                 * Get SDK parameters.
4768                 * @param {Object} customerData - The customer data.
4769                 * @return {Promise<Object>} A promise that resolves to the SDK parameters.
4770                 */
4771                getSdkParams(customerData) {
4772                    return Alpine.store('adobe_payments')
4773                        .getSdkParams
4774                        .promiseReturn(this.cacheTtl, customerData)
4775                        .then(sdkParams => {
4776                            this.sdkParams = sdkParams[this.sdkParamsKey];
4777                        });
4778                }
4779            },
4780
4781            
4782                        getSdkParams: {
4783                promise: null,
4784                timeoutKey: 'payments-sdk-params-timeout',
4785                paymentsKey: 'payments',
4786                sdkParamsKey: 'sdkParams',
4787
4788                promiseReturn(cacheTtl, customerData) {
4789                    if (!this.promise) {
4790                        this.promise = new Promise((resolve, reject) => {
4791                            let dateNow = Date.now();
4792                            let dateTo = dateNow + cacheTtl;
4793                            let timeout = localStorage.getItem(this.timeoutKey);
4794
4795                            if (timeout < dateNow || !timeout) {
4796                                localStorage.setItem(this.timeoutKey, dateTo);
4797
4798                                return resolve(customerData[this.paymentsKey][this.sdkParamsKey]);
4799                            }
4800
4801                            // Check if the nested key exists in the customerData object.
4802                            if (customerData
4803                                && customerData[this.paymentsKey]
4804                                && this.sdkParamsKey in customerData[this.paymentsKey]
4805                            ) {
4806                                return resolve(customerData[this.paymentsKey][this.sdkParamsKey]);
4807                            }
4808
4809                            if (customerData && customerData[this.paymentsKey]) {
4810                                customerData[this.paymentsKey].subscribe((payments) => {
4811                                    resolve(payments[this.sdkParamsKey]);
4812                                });
4813                            }
4814                        });
4815                    }
4816
4817                    return this.promise;
4818                }
4819            },
4820
4821            
4822                        scriptLoaderWrapper: {
4823                promises: {},
4824                defaultNamespace: 'paypal',
4825
4826                /**
4827                 * Parse src query string and move all params to object
4828                 *
4829                 * @param {Object} params
4830                 * @return {Object}
4831                 */
4832                processParamsSrc(params) {
4833                    let processedParams = {...params};
4834                    let url = new URL(params.src);
4835                    let queryString = url.search.substring(1);
4836                    let urlParams = JSON.parse(
4837                        '{"'
4838                        + decodeURI(queryString).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"')
4839                        + '"}'
4840                    );
4841
4842                    Object.assign(processedParams, urlParams);
4843                    delete processedParams.src;
4844
4845                    return processedParams;
4846                },
4847
4848                /**
4849                 * Convert params to object key => value format
4850                 *
4851                 * @param {Object} params
4852                 * @return {Object}
4853                 */
4854                convertToParamsObject(params) {
4855                    let processedParams = {};
4856
4857                    params.forEach(function (param) {
4858                        processedParams[param.name] = param.value;
4859                    });
4860
4861                    return processedParams;
4862                },
4863
4864                /**
4865                 * Load PayPal sdk with params.
4866                 *
4867                 * @param {Array} params
4868                 * @param {String} sdkNamespace
4869                 * @return {Promise}
4870                 */
4871                returnSdk(params, sdkNamespace) {
4872                    let src;
4873
4874                    if (!params || !params.length) {
4875                        return Promise.reject();
4876                    }
4877
4878                    params = this.convertToParamsObject(params);
4879                    params['data-namespace'] = sdkNamespace || this.defaultNamespace;
4880
4881                    if (!params || !params.src) {
4882                        return Promise.reject();
4883                    }
4884
4885                    src = params.src;
4886
4887                    if (!this.promises[src]) {
4888                        params = this.processParamsSrc(params);
4889
4890                        this.promises[src] = window.paypalLoadScript(params);
4891                    }
4892
4893                    return this.promises[src];
4894                }
4895            },
4896
4897            
4898                        Message: class {
4899                constructor(
4900                    {
4901                        sdkNamespace = 'paypal',
4902                        scriptParams = null,
4903                        renderContainer = null,
4904                        amountAttribute = 'data-pp-amount',
4905                        styles = '',
4906                        placement = 'cart',
4907                        amount = null
4908                    } = {}
4909                ) {
4910                    this.sdkNamespace = sdkNamespace;
4911                    this.scriptParams = scriptParams;
4912                    this.renderContainer = renderContainer;
4913                    this.amountAttribute = amountAttribute;
4914                    this.styles = styles;
4915                    this.placement = placement;
4916                    this.amount = amount;
4917
4918                    // Load the payment SDK (e.g., PayPal, Apple Pay, etc.)
4919                    this.sdkLoaded = this.loadSdk();
4920                }
4921
4922                async loadSdk() {
4923                    try {
4924                        const sdkScript = await Alpine.store('adobe_payments')
4925                            .scriptLoaderWrapper
4926                            .returnSdk(this.scriptParams, this.sdkNamespace);
4927
4928                        return sdkScript; // Assuming all SDKs provide a similar interface
4929                    } catch (error) {
4930                        console.error('Failed to load payment SDK:', error);
4931                    }
4932                }
4933
4934                updateAmount(amount) {
4935                    document.querySelectorAll(this.renderContainer).forEach((element) => {
4936                        element.setAttribute(this.amountAttribute, amount);
4937                    });
4938                }
4939
4940                render() {
4941                    return this.sdkLoaded.then((sdkScript) => {
4942                        sdkScript.Messages({
4943                            amount: parseFloat(this.amount).toFixed(2),
4944                            placement: this.placement,
4945                            style: this.styles
4946                        }).render(this.renderContainer);
4947                    }).catch(() => {
4948                        console.error('Error: Failed to load PayPal SDK script!');
4949                    });
4950                }
4951            },
4952
4953            createMessageInstance(parameters) {
4954                return new this.Message(parameters);
4955            },
4956
4957            
4958                        ProductDataProvider: class {
4959                constructor(options = {}) {
4960                    this.qtyFieldSelector = options.qtyFieldSelector || 'input[name="qty"]';
4961                    this.priceBoxSelector = options.priceBoxSelector || '.price-wrapper';
4962                    this.priceBoxContextSelector = options.priceBoxContextSelector || '.price-box';
4963                    this.finalPriceSelector = options.finalPriceSelector || '.price';
4964                    this.price = document.querySelector(
4965                        this.priceBoxContextSelector + ' ' + this.finalPriceSelector
4966                    ).innerHTML.replace(/[^\d.]/g, '');
4967                    this.qty = document.querySelector(this.qtyFieldSelector).value;
4968
4969                    // Handle providerOptions here as well
4970                    if (options && options.updateAmount) {
4971                        this.updateAmount = options.updateAmount;
4972                    }
4973
4974                    if (options && options.productId) {
4975                        this.productId = options.productId;
4976                    }
4977
4978                    this.setupCommon();
4979                }
4980
4981                /** @inheritdoc */
4982                setupCommon() {
4983                    this.quantitySubscribe();
4984                    this.priceSubscribe();
4985                }
4986
4987                /**
4988                 * Subscribe for quantity changes.
4989                 */
4990                quantitySubscribe() {
4991                    document.querySelectorAll(this.qtyFieldSelector).forEach(element => {
4992                        element.addEventListener('change', () => {
4993                            this.qty = element.value;
4994                            this.updateAmount(this.getAmount());
4995                        });
4996                    });
4997                }
4998
4999                /**
5000                 * Subscribe for price change.
5001                 */
5002                priceSubscribe() {
5003                    window.addEventListener('update-prices-' + this.productId, (event) => {
5004                        const prices = event.detail;
5005                        this.price = prices.finalPrice.amount;
5006                        this.updateAmount(this.getAmount());
5007                    });
5008                }
5009
5010                /**
5011                 * Trigger price update.
5012                 */
5013                updatePrice() {
5014                    document.querySelector(this.priceBoxSelector).dispatchEvent(new Event('updatePrice'));
5015                }
5016
5017                /**
5018                 * Get product amount.
5019                 *
5020                 * @return {Number}
5021                 */
5022                getAmount() {
5023                    return this.qty * this.price;
5024                }
5025            },
5026
5027            createProductDataProviderInstance(parameters) {
5028                return new this.ProductDataProvider(parameters);
5029            },
5030
5031            GroupedProductDataProvider: class {
5032                constructor(options = {}) {
5033                    this.tableWrapperSelector = options.tableWrapperSelector || '.table-wrapper.grouped';
5034                    this.qtyFieldSelector = options.qtyFieldSelector || 'input.qty';
5035                    this.priceBoxSelector = options.priceBoxSelector || '.price-box';
5036                    this.priceInfo = {};
5037
5038                    if (options && options.updateAmount) {
5039                        this.updateAmount = options.updateAmount;
5040                    }
5041
5042                    if (options && options.productId) {
5043                        this.productId = options.productId;
5044                    }
5045
5046                    this.initialize();
5047                }
5048
5049                initialize() {
5050                    document.querySelectorAll(`${this.tableWrapperSelector} .grouped-products`).forEach((element, i) => {
5051                        const priceBox = element.querySelector(this.priceBoxSelector);
5052                        const qtyElement = element.querySelector(this.qtyFieldSelector);
5053                        const productId = priceBox.getAttribute('data-product-id');
5054                        const priceElement = document.getElementById(`product-price-${productId}-1`);
5055
5056                        this.priceInfo[productId] = {
5057                            qty: this.getQuantity(qtyElement),
5058                            price: parseFloat(priceElement.getAttribute('data-price-amount'))
5059                        };
5060
5061                        /** TODO: This does not appear to be used? */
5062                        i++;
5063                    });
5064
5065                    this.quantitySubscribe();
5066                }
5067
5068                quantitySubscribe() {
5069                    document.querySelectorAll(this.qtyFieldSelector).forEach((element) => {
5070                        element.addEventListener('change', (event) => {
5071                            const qtyElement = event.target;
5072                            const parent = this.findParentWithClass(qtyElement, 'grouped-products');
5073                            const priceBox = parent.querySelector(this.priceBoxSelector);
5074                            const productId = priceBox.getAttribute('data-product-id');
5075
5076                            if (this.priceInfo[productId]) {
5077                                this.priceInfo[productId].qty = this.getQuantity(qtyElement);
5078                                this.updateAmount();
5079                            }
5080                        });
5081                    });
5082                }
5083
5084                getAmount() {
5085                    let amount = 0;
5086
5087                    Object.values(this.priceInfo).forEach((info) => {
5088                        amount += info.price * info.qty;
5089                    });
5090
5091                    return amount;
5092                }
5093
5094                getQuantity(element) {
5095                    const qty = parseFloat(element.value);
5096
5097                    return isNaN(qty) ? 0 : qty;
5098                }
5099
5100                // Assuming there's additional functionality for subscribing to price changes and triggering price updates
5101                priceSubscribe() {
5102                    // Implement functionality if needed
5103                }
5104
5105                updatePrice() {
5106                    // Trigger price update functionality if needed
5107                }
5108
5109                findParentWithClass(element, className) {
5110                    while (element && !element.classList.contains(className)) {
5111                        element = element.parentElement;
5112                    }
5113
5114                    return element; // This will be null if no parent with the specified class name is found
5115                }
5116            },
5117
5118            createGroupedProductDataProviderInstance(parameters) {
5119                return new this.GroupedProductDataProvider(parameters);
5120            },
5121
5122            createBundleProductDataProviderInstance(parameters) {
5123                class BundleProductDataProvider extends Alpine.store('adobe_payments').ProductDataProvider {
5124                    constructor(options = {}) {
5125                        //fix here check setupCommon from parent class. We need to find where Hyva broke the change logic. Works on main Qty. Hyva html does not have consistency.
5126                        super(options);
5127
5128                        this.priceBoxContextSelector = options.priceBoxContextSelector || '#bundleSummary';
5129                        this.initialize();
5130                    }
5131
5132                    /** @inheritdoc */
5133                    initialize() {
5134                        this.updateAmount(this.getAmount());
5135
5136                        return this;
5137                    }
5138                }
5139
5140                return new BundleProductDataProvider(parameters);
5141            },
5142
5143            
5144                        SmartButtons: class {
5145                constructor(config) {
5146                    const defaults = {
5147                        sdkNamespace: 'defaultNamespace',
5148                        scriptParams: {},
5149                        styles: {},
5150                        paymentRequest: {
5151                            applepay: {
5152                                requiredShippingContactFields: []
5153                            }
5154                        },
5155                        createOrderUrl: '',
5156                        authorizeOrderUrl: '',
5157                        onClick: null,
5158                        beforeCreateOrder: null,
5159                        afterCreateOrder: null,
5160                        catchCreateOrder: null,
5161                        finallyCreateOrder: null,
5162                        beforeOnAuthorize: null,
5163                        afterOnAuthorize: null,
5164                        catchOnAuthorize: null,
5165                        finallyOnAuthorize: null,
5166                        onError: null,
5167                        onCancel: null,
5168                        fundingSource: null,
5169                        isVirtual: false,  // Additional flags like 'isVirtual' can be setup here
5170                        virtualContactFields: [],
5171                        contactFields: []
5172                    };
5173
5174                    Object.assign(this, defaults, config);
5175
5176                    // Binding methods if not already bound
5177                    [
5178                        'beforeCreateOrder',
5179                        'afterCreateOrder',
5180                        'catchCreateOrder',
5181                        'finallyCreateOrder',
5182                        'beforeOnAuthorize',
5183                        'afterOnAuthorize',
5184                        'catchOnAuthorize',
5185                        'finallyOnAuthorize',
5186                        'onError',
5187                        'onCancel'
5188                    ].forEach(method => {
5189                        if (this[method] instanceof Function) {
5190                            this[method] = this[method].bind(this);
5191                        }
5192                    });
5193
5194                    // Load the payment SDK (e.g., PayPal, Apple Pay, etc.)
5195                    this.sdkLoaded = this.loadSdk();
5196                }
5197
5198                async loadSdk() {
5199                    try {
5200                        const sdkScript = await Alpine.store('adobe_payments')
5201                            .scriptLoaderWrapper
5202                            .returnSdk(this.scriptParams, this.sdkNamespace);
5203
5204                        this.paypal = sdkScript;  // Assuming all SDKs provide a similar interface
5205                    } catch (error) {
5206                        console.error('Failed to load payment SDK:', error);
5207                    }
5208                }
5209
5210                /**
5211                 * Create order request.
5212                 *
5213                 * @param {String} url
5214                 * @param {Object} payPalOrderData
5215                 * @param {FormData} orderData
5216                 * @return {Promise<Object>}
5217                 */
5218                performCreateOrder = (url, payPalOrderData, orderData) => {
5219                    orderData = orderData || new FormData();
5220                    orderData.append('form_key', this.cookieGetter('form_key'));
5221                    orderData.append('payment_source', payPalOrderData['paymentSource']);
5222
5223                    return fetch(url, {
5224                        method: 'POST', headers: {}, body: orderData
5225                            || new FormData(), credentials: 'same-origin'
5226                    }).then(function (response) {
5227                        return response.json();
5228                    });
5229                }
5230
5231                cookieGetter = (name) => {
5232                    const value = `; ${document.cookie}`;
5233                    const parts = value.split(`; ${name}=`);
5234
5235                    if (parts.length === 2) {
5236                        return parts.pop().split(';').shift();
5237                    }
5238                }
5239
5240                /**
5241                 * Payment authorization request.
5242                 *
5243                 * @return {Promise<Object>}
5244                 */
5245                performAuthorization = (url, data) => {
5246                    let orderData = new FormData();
5247
5248                    orderData.append('form_key', this.cookieGetter('form_key'));
5249                    orderData.append('paypal_order_id', data.orderID);
5250                    orderData.append('paypal_payer_id', data.payerID);
5251
5252                    return fetch(url, {
5253                        method: 'POST',
5254                        headers: {},
5255                        body: orderData,
5256                        credentials: 'same-origin'
5257                    }).then(function (response) {
5258                        return response.json();
5259                    });
5260                };
5261
5262                /**
5263                 * In the case where the button color is not supported by Apple (black or white)
5264                 * Map the button color to black (same behavior as PayPal SDK script)
5265                 *
5266                 * @param buttonStyles
5267                 * @returns {(*&{color: string})|*}
5268                 */
5269                mapButtonColorForApplePay = (buttonStyles) => {
5270                    let buttonColor = buttonStyles.color;
5271
5272                    if (buttonColor === 'black' || buttonColor === 'white') {
5273                        return buttonStyles;
5274                    }
5275
5276                    return {
5277                        ...buttonStyles,
5278                        color: 'black'
5279                    };
5280                }
5281
5282                /**
5283                 * Render Smart Buttons.
5284                 *
5285                 * @param {HTMLElement} element
5286                 * @return {*}
5287                 */
5288                render = (element) => {
5289                    let buttonsConfig;
5290
5291                    if (typeof this.paypal === 'undefined' || !this.paypal.Buttons) {
5292                        return null;
5293                    }
5294
5295                    if (element) {
5296                        this.element = element;
5297                    }
5298
5299                    buttonsConfig = {
5300                        element: this.element,
5301                        paymentRequest: this.paymentRequest,
5302                        style: this.styles,
5303                        onClick: this.onClick,
5304                        createOrder: this.createOrder,
5305                        onApprove: this.onApprove,
5306                        onError: this.onError,
5307                        onCancel: this.onCancel,
5308                        onInit: this.onInit
5309                    };
5310
5311                    if (this.onShippingChange) {
5312                        buttonsConfig.onShippingChange = this.onShippingChange.bind(this);
5313                    }
5314
5315                    if (this.fundingSource) {
5316                        buttonsConfig.fundingSource = this.fundingSource;
5317
5318                        if (this.fundingSource === 'applepay') {
5319                            buttonsConfig.style = this.mapButtonColorForApplePay(this.styles);
5320                        }
5321                    }
5322
5323                    this.instance = this.paypal.Buttons(buttonsConfig);
5324
5325                    if (this.instance.isEligible()) {
5326                        this.instance.render(this.element);
5327                    }
5328
5329                    return this.instance;
5330                }
5331
5332                /**
5333                 * Calls when smart buttons initializing
5334                 */
5335                onInit = () => {
5336                }
5337
5338                /**
5339                 * Calls when user click paypal button.
5340                 */
5341                onClick = () => {
5342                }
5343
5344                /**
5345                 * Calls before create order.
5346                 *
5347                 * @return {Promise}
5348                 */
5349
5350                /** TODO: Looks like there may be a missing function here given the doc block above? */
5351
5352                /**
5353                 * Create order.
5354                 *
5355                 * @return {Promise}
5356                 */
5357                createOrder = (data) => {
5358                    this.paymentSource = data['paymentSource'];
5359                    return this.beforeCreateOrder()
5360                        .then(this.performCreateOrder.bind(this, this.createOrderUrl, data))
5361                        .then(function (orderData) {
5362                            return this.afterCreateOrder(orderData);
5363                        }.bind(this)).catch(function (error) {
5364                            return this.catchCreateOrder(error);
5365                        }.bind(this)).finally(function (error) {
5366                            return this.finallyCreateOrder(error);
5367                        }.bind(this));
5368                }
5369
5370                /**
5371                 * After order created.
5372                 *
5373                 * @param {Object} data
5374                 * @return {*}
5375                 */
5376                afterCreateOrder(data) {
5377                    return data.orderId;
5378                }
5379
5380                /**
5381                 * Catch error on order creation.
5382                 */
5383                catchCreateOrder() {
5384
5385                }
5386
5387                /**
5388                 * Finally for order creation.
5389                 *
5390                 */
5391                finallyCreateOrder() {
5392
5393                }
5394
5395                /**
5396                 * Before authorization call.
5397                 *
5398                 * @return {Promise}
5399                 */
5400                beforeOnAuthorize(data) {
5401                    return Promise.resolve(data);
5402                }
5403
5404                /**
5405                 * On payment approve.
5406                 *
5407                 * @param {Object} data
5408                 * @param {Object} actions
5409                 * @return {Promise}
5410                 */
5411                onApprove = (data, actions) => {
5412                    return this.beforeOnAuthorize(data, actions)
5413                        .then(this.performAuthorization.bind(this, this.authorizeOrderUrl))
5414                        .then(function (authData) {
5415                            return this.afterOnAuthorize(authData, actions);
5416                        }.bind(this)).catch(function (error) {
5417                            return this.catchOnAuthorize(error);
5418                        }.bind(this)).finally(function (error) {
5419                            return this.finallyOnAuthorize(error);
5420                        }.bind(this));
5421                }
5422
5423                /**
5424                 * Calls after successful payment authorization.
5425                 *
5426                 * @param {Object} authData
5427                 * @return {*}
5428                 */
5429                afterOnAuthorize = (authData) => {
5430                    return authData;
5431                }
5432
5433                /**
5434                 * Catch payment authorization errors.
5435                 */
5436                catchOnAuthorize = () => {
5437                }
5438
5439                /**
5440                 * Finally for payment authorization.
5441                 */
5442                finallyOnAuthorize = () => {
5443                }
5444
5445                /**
5446                 * Calls when shipping address chenges..
5447                 *
5448                 * @param {Object} data
5449                 */
5450                onShippingChange = undefined;
5451
5452                /**
5453                 * Calls when error happened on paypal side.
5454                 *
5455                 * @param {Error} error
5456                 */
5457                onError = (error) => {
5458                    console.log('Error: ', error.message);
5459                }
5460
5461                /**
5462                 * Calls when user canceled payment.
5463                 */
5464                onCancel = () => {
5465                }
5466            },
5467
5468            createSmartButtonsInstance(parameters) {
5469                return new this.SmartButtons(parameters);
5470            },
5471
5472            
5473            ResponseError: class extends Error {
5474                /**
5475                 * Constructs a new ResponseError instance.
5476                 *
5477                 * @param {String} message - The error message.
5478                 */
5479                constructor(message) {
5480                    super(message); // Call the parent constructor with the message
5481                    this.name = 'ResponseError'; // Overriding the name property
5482                    // The stack property is inherited from Error
5483                }
5484
5485                /**
5486                 * Return a string representation of the error.
5487                 *
5488                 * @returns {String} The error message.
5489                 */
5490                toString() {
5491                    return this.message;
5492                }
5493            },
5494
5495            createResponseErrorInstance(parameters) {
5496                return new this.ResponseError(parameters);
5497            },
5498
5499            CheckoutReview: class {
5500                constructor(config = {}) {
5501                    this.element = null;
5502                    this.placeOrderButtonSelector = '#review-button';
5503                    this.shippingMethodFormSelector = '#shipping-method-form';
5504                    this.shippingMethodInputSelector = '#shipping-method';
5505                    this.updateContainerSelector = '#details-reload';
5506                    this.waitLoadingContainer = '#review-please-wait';
5507                    this.orderFormSelector = '#order-review-form';
5508                    this.editShoppingCartSelector = '.magento-payments-review-items .edit';
5509                    this.updateShippingMethodUrl = null;
5510                    this.placeOrderUrl = null;
5511                    this.canEditShippingMethod = false;
5512                    this.isVirtual = false;
5513
5514                    Object.assign(this, config);
5515                }
5516
5517                initialize(element) {
5518                    this.element = element;
5519
5520                    document.querySelector(this.placeOrderButtonSelector).addEventListener('click', this.submitOrder.bind(this));
5521                    document.querySelector(this.editShoppingCartSelector).addEventListener('click', this.invalidateCustomerData.bind(this));
5522
5523                    if (!this.isVirtual && this.canEditShippingMethod) {
5524                        document.querySelector(this.shippingMethodInputSelector).addEventListener('change', this.selectShippingMethod.bind(this));
5525                        this.setPlaceOrderButtonActive(!!document.querySelector(this.shippingMethodInputSelector).value);
5526                    }
5527                }
5528
5529                invalidateCustomerData() {
5530                    // Implementation depends on how customer data is managed in your application
5531                    console.log('Invalidate customer data');
5532                }
5533
5534                beforeRequestStart() {
5535                    document.querySelector(this.waitLoadingContainer).style.display = 'block';
5536                }
5537
5538                onRequestComplete() {
5539                    document.querySelector(this.waitLoadingContainer).style.display = 'none';
5540                }
5541
5542                submitOrder() {
5543                    if (this.validateForm()) {
5544                        this.beforeRequestStart();
5545                        const form = document.querySelector(this.orderFormSelector);
5546
5547                        // Ensure the form has the correct action URL
5548                        form.action = this.placeOrderUrl;
5549
5550                        // Submit the form
5551                        form.submit();
5552
5553                        this.setPlaceOrderButtonActive(false);
5554                    }
5555                }
5556
5557                validateForm() {
5558                    if (this.element.dataset.mageValidation) {
5559                        return this.element.checkValidity();
5560                    }
5561                    return true;
5562                }
5563
5564                setPlaceOrderButtonActive(isActive) {
5565                    const button = document.querySelector(this.placeOrderButtonSelector);
5566                    button.disabled = !isActive;
5567                    button.classList.toggle('no-checkout', !isActive);
5568                }
5569
5570                selectShippingMethod() {
5571                    if (document.querySelector(this.waitLoadingContainer).style.display === 'block') {
5572                        return false;
5573                    }
5574                    let shippingMethod = document.querySelector(this.shippingMethodInputSelector).value.trim();
5575                    this.setPlaceOrderButtonActive(false);
5576
5577                    if (shippingMethod) {
5578                        let formData = new FormData(document.querySelector(this.shippingMethodFormSelector));
5579                        formData.append('isAjax', 'true');
5580
5581                        console.log(this.updateShippingMethodUrl);
5582
5583                        fetch(this.updateShippingMethodUrl, {
5584                            method: 'POST',
5585                            body: formData
5586                        })
5587                            .then(response => response.json())
5588                            .then(data => {
5589                                if (typeof data.redirectUrl === 'undefined') {
5590                                    document.querySelector(this.updateContainerSelector).innerHTML = data.html;
5591                                } else {
5592                                    window.location = data.redirectUrl;
5593                                }
5594                                this.setPlaceOrderButtonActive(true);
5595                                this.onRequestComplete();
5596                            })
5597                            .catch(error => {
5598                                console.error('Error:', error);
5599                                this.onRequestComplete();
5600                            });
5601
5602                        this.beforeRequestStart();
5603                    }
5604                }
5605            },
5606
5607            createCheckoutReviewInstance(config) {
5608                return new this.CheckoutReview(config);
5609            }
5610
5611        });
5612    });
5613</script>
5613
5614<style>#html-body [data-pb-style=CXIHOC6]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=YUMPRLX]{border-style:none}#html-body [data-pb-style=B9WEYUB],#html-body [data-pb-style=C6S41IT]{max-width:100%;height:auto}@media only screen and (max-width: 767px) { #html-body [data-pb-style=YUMPRLX]{border-style:none} }</style><div class="cms-banner blog-list-banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="false" data-element="main" data-pb-style="CXIHOC6"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="YUMPRLX"><picture>
5615    <source media="(max-width: 768px)" srcset="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" >
5616    
5617            <source type="image/webp"
5618                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/wysiwyg/blog_1.webp">
5619    
5620        <source type="image/jpg"
5621                                                        srcset="https://www.mrhankeystoys.com/media/wysiwyg/blog_1.jpg">
5622
5623    <img width="1920" height="483" class="pagebuilder-mobile-hidden" src="https://www.mrhankeystoys.com/media/wysiwyg/blog_1.jpg" alt="Realistic &amp; Fantasy Sex Toys &ndash; Expert Blog by Mr. Hankey&rsquo;s Toys" title="" loading="lazy" data-element="desktop_image" data-pb-style="C6S41IT"decoding="async" ></picture>
5624<picture>
5625    <source media="(min-width: 769px)" srcset="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" >
5626    
5627            <source type="image/webp"
5628                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/wysiwyg/blog_1.webp">
5629    
5630        <source type="image/jpg"
5631                                                        srcset="https://www.mrhankeystoys.com/media/wysiwyg/blog_1.jpg">
5632
5633    <img width="1920" height="483" class="pagebuilder-mobile-only" src="https://www.mrhankeystoys.com/media/wysiwyg/blog_1.jpg" alt="Realistic &amp; Fantasy Sex Toys &ndash; Expert Blog by Mr. Hankey&rsquo;s Toys" title="" loading="lazy" data-element="mobile_image" data-pb-style="B9WEYUB"decoding="async" ></picture>
5634</figure><div class="testimonial-bg" data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="testimonial-bg-content">
5635<h1 class="inner-title hide-for-mobile"><span>Hankey's Toys</span>Realistic & Fantasy Sex Toys – Expert Blog by Mr. Hankey’s Toys</h1>
5636<div class="inner-title hide-for-desktop"><span>Hankey's Toys</span>Blogs</div>
5637<p class="sub-heading">Handcrafted Platinum-Cured Silicone</br>Custom Sizes, Colors & Firmness</p>
5638<p>Discover expert advice, wellness tips, and product reviews on realistic lifecast dildos and bold fantasy creations—all hand-poured in the USA from 100% platinum-cured, hypoallergenic, phthalate-free silicone. Our custom toys are lab-tested for safety and made one at a time for your perfect fit. Learn from our cleaning guides, explore buying tips, and enjoy discreet worldwide shipping.</p>
5639</div></div></div>
5640
5641
5642<div class="block-categories mb-10">
5643    <ul class="accordion flex flex-wrap gap-5 s767:gap-3">
5644        <li><a class="all-blog active" href="/blog">All</a></li>
5645            <li>
5646            <a class="" href="https://www.mrhankeystoys.com/blog/reviews-and-comparisons">
5647                Reviews &amp; Comparisons                                    <span class="hidden">(15)</span>
5648                            </a>
5649            </li>        <li>
5650            <a class="" href="https://www.mrhankeystoys.com/blog/size-and-xl-play">
5651                Size &amp; XL Play                                    <span class="hidden">(11)</span>
5652                            </a>
5653            </li>        <li>
5654            <a class="" href="https://www.mrhankeystoys.com/blog/care-safety-and-materials">
5655                Care, Safety &amp;
5655 Materials                                    <span class="hidden">(18)</span>
5656                            </a>
5657            </li>        <li>
5658            <a class="" href="https://www.mrhankeystoys.com/blog/customization-guides">
5659                Customization Guides                                    <span class="hidden">(3)</span>
5660                            </a>
5661            </li>        <li>
5662            <a class="" href="https://www.mrhankeystoys.com/blog/fantasy-and-sci-fi">
5663                Fantasy &amp; Sci-Fi                                    <span class="hidden">(35)</span>
5664                            </a>
5665            </li>        <li>
5666            <a class="" href="https://www.mrhankeystoys.com/blog/realistic-and-lifecast">
5667                Realistic &amp; Lifecast                                    <span class="hidden">(9)</span>
5668                            </a>
5669            </li>        <li>
5670            <a class="" href="https://www.mrhankeystoys.com/blog/sexual-wellness">
5671                Sexual Wellness                                    <span class="hidden">(20)</span>
5672                            </a>
5673            </li>        <li>
5674            <a class="" href="https://www.mrhankeystoys.com/blog/tips-and-guides">
5675                Tips &amp; Guides                                    <span class="hidden">(58)</span>
5676                            </a>
5677            </li>        <li>
5678            <a class="" href="https://www.mrhankeystoys.com/blog/strap-on-harnesses-and-more">
5679                Strap On Harnesses &amp; More                                    <span class="hidden">(6)</span>
5680                            </a>
5681            </li>        <li>
5682            <a class="" href="https://www.mrhankeystoys.com/blog/kinky">
5683                Kinky                                    <span class="hidden">(6)</span>
5684                            </a>
5685                </ul>
5686</div>
5687
5688<script>
5689    document.addEventListener("DOMContentLoaded", (event) => {
5690        
5691        let curUrl = window.location.href;
5692
5693        document.querySelectorAll('.block-categories li a').forEach(function(getHref){
5694            let catUrl = getHref.getAttribute("href");
5695
5696            if (catUrl === curUrl) {
5697                document.querySelectorAll('.block-categories li a').forEach(function(notActive){
5698                    notActive.classList.remove('active');
5699                });
5700                getHref.classList.add('active');
5701            }
5702        });
5703    });
5704</script>
5704
5705                    
5705<script>
5706            /* e.g. hyva theme */
5707            document.addEventListener('DOMContentLoaded', function(){
5708                var items =  document.getElementsByClassName('mfblogunveil');
5709                var el, url;
5710                if (items.length) {
5711                    for (var i=0; i<items.length;i++) {
5712                        el = items[i];
5713                        url = el.getAttribute('data-original');
5714                        if (!url) {
5715                            continue;
5716                        };
5717                        if ('IMG' == el.tagName) {
5718                            el.src = url;
5719                        } else {
5720                            el.style.backgroundImage = "url('" + url  + "')";
5721                        }
5722                    }
5723                }
5724            });
5725        </script>
5725<span data-mage-init='{"emailCapture": {"url": "https://www.mrhankeystoys.com/event/action/capture/"}}'></span>
5726
5727        <div class="post-list-wrapper 123">
5728                <ol class="post-list modern grid grid-cols-4 s1400:grid-cols-3 s1023:grid-cols-2 s767:grid-cols-1 s1400:gap-6 gap-10">
5729                                            <li class="post-item post-holder post-holder-287 block">
5730
5731                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
5732                        <!-- post image -->
5733                        <div class="post-image grow-0 shrink-0 order-none">
5734                            <!-- img container -->
5735                            <div class="image-container relative">
5736                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
5737                                   href="https://www.mrhankeystoys.com/blog/plus-size-strap-on-harness-giant-dildos"
5738                                   title="Beyond the Hook: How Fantasy Shapes Change Prostate Stimulation"
5739                                >
5740                                                                                                                                                                                            <picture>
5741    
5742    
5743            <source type="image/webp"
5744                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/ChatGPT_Image_Sep_30_2026_06_00_09_PM.webp">
5745    
5746        <source type="image/png"
5747                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/ChatGPT_Image_Sep_30_2026_06_00_09_PM.png">
5748
5749    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/ChatGPT_Image_Sep_30_2026_06_00_09_PM.png" alt="A body-inclusive, non-explicit product setup showing an adjustable harness laid flat beside a large silicone dildo"  width="499"  height="281" decoding="async" /></picture>
5750
5751                                                                    </a>
5752
5753                                <!-- post category-->
5754                                                                    <span class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
5755                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/size-and-xl-play"
5756                                               title="Size &amp; XL Play">
5757                                                Size &amp; XL Play                                            </a>
5758                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/care-safety-and-materials"
5759                                               title="Care, Safety &amp; Materials">
5760                                                Care, Safety &amp; Materials                                            </a>
5761                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/sexual-wellness"
5762                                               title="Sexual Wellness">
5763                                                Sexual Wellness                                            </a>
5764                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/tips-and-guides"
5765                                               title="Tips &amp; Guides">
5766                                                Tips &amp; Guides                                            </a>
5767                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/strap-on-harnesses-and-more"
5768                                               title="Strap On Harnesses &amp; More">
5769                                                Strap On Harnesses &amp; More                                            </a>
5770                                                                            </span>
5771                                                                <!-- end post category-->
5772                            </div>
5773                        </div>
5774
5775                        <!-- block info -->
5776                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
5777
5778                            <!-- block data -->
5779                            <div class="post-data-wrap text-sm font-medium mb-3">
5780                                <!-- post author -->
5781                                                                    <sp
5781an class="post-author-name">Author: Mister Hankey </span>
5782                                    <span>&nbsp;|&nbsp;</span>
5783                                
5784                                <!-- post date -->
5785                                                                    <span class="post-date">September 29, 2026</span>
5786                                
5787                                <!-- post view -->
5788                                                            </div>
5789
5790                            <!-- post title -->
5791                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
5792                                <h3 class="post-title">
5793                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/plus-size-strap-on-harness-giant-dildos">Beyond the Hook: How Fantasy Shapes Change Prostate Stimulation</a>
5794                                </h3>
5795                            </div>
5796
5797                            
5798
5799                            <!-- post description -->
5800                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
5801                                <style>#html-body [data-pb-style=OIYURYP]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="OIYURYP"><div data-content-type="text" data-appearance="default" data-element="main"><h3 class="MsoNormal"><strong><span style="font-size: 11.0pt; mso-bidi-font-size: 12.0pt; line-height: 115%;">TL;DR</span></strong></h3>
5802<p class="MsoNormal"><span style="font-size: 11.0pt; mso-bidi-font-size: 12.0pt; line-height: 115%;">A good plus-size strap-on harness should fit where you actually wear it, stay stable as you move, and support the specific toy and attachment system you plan to use. Measure your body instead of relying on clothing size, confirm the exact toy-and-harness compatibility, and test the full setup before penetration. With a large dildo, weight distribution, base geometry, attachment hardware, and firmness can all change how controllable the setup feels.</span></p>
5803<p class="MsoNormal"><span style="font-size: 11.0pt; mso-bidi-font-size: 12.0pt; line-height: 115%;">There is no correct body for strap-on play. Awkward angles usually come from a poor harness fit, a heavy toy that overwhelms the front panel, or a position that makes both partners work around the equipment. Fix the setup and the experience can feel steadier, easier, and more connected.</span></p>
5804<h3 class="MsoNormal"><strong><span style="font-size: 11.0pt; mso-bidi-font-size: 12.0pt; line-height: 115%;">How to Measure for a Plus-Size Strap-On Harness</span></strong></h3>
5805<p class="MsoNormal"><span style="font-size: 11.0pt; mso-bidi-font-size: 12.0pt; line-height: 115%;">One waist measurement does not reveal where a harness will sit or how its straps behave when you bend, kneel, or sit. Body shape, hip width, thigh circumference, and mobility can all change where straps rest,</span></p></div></div></div>                            </div>
5806
5807                            <!-- read more -->
5808                            <div class="flex">
5809                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/plus-size-strap-on-harness-giant-dildos" title="Beyond the Hook: How Fantasy Shapes Change Prostate Stimulation">
5810                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
5811                                </a>
5812                            </div>
5813                        </div>
5814                    </div>
5815                </li>
5816                                            <li class="post-item post-holder post-holder-286 block">
5817
5818                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
5819                        <!-- post image -->
5820                        <div class="post-image grow-0 shrink-0 order-none">
5821                            <!-- img container -->
5822                            <div class="image-container relative">
5823                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
5824                                   href="https://www.mrhankeystoys.com/blog//surprise-pour-custom-dildos"
5825                                   title="The Art of the Surprise Pour: Embracing the Chaos of Custom Silicone"
5826                                >
5827                                                                                                                                                                                            <picture>
5828    
5829    
5830            <source type="image/webp"
5831                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/The_Art_of_the_Surprise_Pour_Embracing_the_Chaos_of_Custom_Silicone2.webp">
5832    
5833        <source type="image/png"
5834                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/The_Art_of_the_Surprise_Pour_Embracing_the_Chaos_of_Custom_Silicone2.png">
5835
5836    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/The_Art_of_the_Surprise_Pour_Embracing_the_Chaos_of_Custom_Silicone2.png" alt="The Art of the Surprise Pour Embracing the Chaos of Custom Silicone"  width="500"  height="281" decoding="async" /></picture>
5837
5838                                                                    </a>
5839
5840                                <!-- post category-->
5841                                                                    <sp
5841an class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
5842                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/care-safety-and-materials"
5843                                               title="Care, Safety &amp; Materials">
5844                                                Care, Safety &amp; Materials                                            </a>
5845                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/tips-and-guides"
5846                                               title="Tips &amp; Guides">
5847                                                Tips &amp; Guides                                            </a>
5848                                                                            </span>
5849                                                                <!-- end post category-->
5850                            </div>
5851                        </div>
5852
5853                        <!-- block info -->
5854                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
5855
5856                            <!-- block data -->
5857                            <div class="post-data-wrap text-sm font-medium mb-3">
5858                                <!-- post author -->
5859                                                                    <span class="post-author-name">Author: Mister Hankey </span>
5860                                    <span>&nbsp;|&nbsp;</span>
5861                                
5862                                <!-- post date -->
5863                                                                    <span class="post-date">September 22, 2026</span>
5864                                
5865                                <!-- post view -->
5866                                                            </div>
5867
5868                            <!-- post title -->
5869                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
5870                                <h3 class="post-title">
5871                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog//surprise-pour-custom-dildos">The Art of the Surprise Pour: Embracing the Chaos of Custom Silicone</a>
5872                                </h3>
5873                            </div>
5874
5875                            
5876
5877                            <!-- post description -->
5878                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
5879                                <style>#html-body [data-pb-style=HT6MU8U]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="HT6MU8U"><h2 data-content-type="heading" data-appearance="default" data-element="main">The
5880Art of the Surprise Pour: Embracing the Chaos of Custom Silicone</h2><div data-content-type="text" data-appearance="default" data-element="main"><div align="center">
5881<table class="MsoNormalTable" style="border-collapse: collapse; mso-table-layout-alt: fixed; border: none; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-insideh: cell-none; mso-border-insidev: cell-none;" border="1" cellspacing="0" cellpadding="0">
5882<tbody>
5883<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes; page-break-inside: avoid;">
5884<td style="width: 6.6in; border: none; border-left: solid #4B2E83 3.0pt; background: #F3EFF8; padding: 6.75pt 8.5pt 6.75pt 9.5pt;" width="634">
5885<p class="MsoNormal" style="margin-bottom: 3.0pt;"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11.0pt; line-height: 115%; color: #4b2e83;">TL;DR</span></strong></p>
5886<p class="MsoNormal" style="margin-bottom: 0in; line-height: 107%;"><span style="font-size: 10.0pt; mso-bidi-font-size: 11.0pt; line-height: 107%;">A Surprise Pour, sometimes called Dealer's Choice, turns the color design over to our California pour team. You still choose the toy, size, and firmness, and 
5886you may flag a few colors you absolutely do not want. Because every pigment batch is mixed by hand, the finished pattern is naturally one of a kind. The piece is made with the same 100% platinum-cured silicone and production controls as any other made-to-order piece.</span></p>
5887</td>
5888</tr>
5889</tbody>
5890</table>
5891<p> </p>
5892</div>
5893<p>Building a custom toy can be almost too open-ended. Once you have chosen a shape, size, and Shore firmness, you may still be looking at solids, marbles, metallic effects, contrasting accents, and more color combinations than anyone should have to compare in one sitting.</p>
5894<p>For some collectors, making every one of those decisions is the best part. For others, it turns a fantasy purchase into a design exam.</p>
5895<p>That is where the Surprise Pour comes in. Also known as Dealer's Choice, it lets a custom dildo</p></div></div></div>                            </div>
5896
5897                            <!-- read more -->
5898                            <div class="flex">
5899                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog//surprise-pour-custom-dildos" title="The Art of the Surprise Pour: Embracing the Chaos of Custom Silicone">
5900                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
5901                                </a>
5902                            </div>
5903                        </div>
5904                    </div>
5905                </li>
5906                                            <li class="post-item post-holder post-holder-284 block">
5907
5908                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
5909                        <!-- post image -->
5910                        <div class="post-image grow-0 shrink-0 order-none">
5911                            <!-- img container -->
5912                            <div class="image-container relative">
5913                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
5914                                   href="https://www.mrhankeystoys.com/blog/from-drew-sebastian-to-dragons-should-you-choose-a-realistic-or-fantasy-sculpt"
5915                                   title="From &#039;Drew Sebastian&#039; to Dragons: Should You Choose a Realistic or Fantasy Sculpt? "
5916                                >
5917                                                                                                                                                                                            <picture>
5918    
5919    
5920            <source type="image/webp"
5921                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/From_Drew_Sebastian_to_Dragons_Should_You_Choose_a_Realistic_or_Fantasy_Sculpt.webp">
5922    
5923        <source type="image/png"
5924                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/From_Drew_Sebastian_to_Dragons_Should_You_Choose_a_Realistic_or_Fantasy_Sculpt.png">
5925
5926    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/From_Drew_Sebastian_to_Dragons_Should_You_Choose_a_Realistic_or_Fantasy_Sculpt.png" alt="Realistic Drew Sebastian lifecast dildo beside a textured dragon fantasy dildo comparing realistic and fantasy silicone toys"  width="500"  height="281" decoding="async" /></picture>
5927
5928                                                                    </a>
5929
5930                                <!-- post category-->
5931                                                                    <span class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
5932                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/fantasy-and-sci-fi"
5933                                               title="Fantasy &amp; Sci-Fi">
5934                                                Fantasy &amp; Sci-Fi                                            </a>
5935                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/realistic-and-lifecast"
5936                                               title="Realistic &amp; Lifecast">
5937                                                Realistic &amp; Lifecast                                            </a>
5938                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/tips-and-guides"
5939                                               title="Tips &amp; Guides">
5940                                                Tips &amp; Guides                                            </a>
5941                                                                            </span>
5942                                                                <!-- end post category-->
5943                            </div>
5944                        </div>
5945
5946                        <!-- block info -->
5947                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
5948
5949                            <!-- block data -->
5950                            <div class="post-data-wrap text-sm font-medium mb-3">
5951                                <!-- post author -->
5952                                                                    <sp
5952an class="post-author-name">Author: Mister Hankey </span>
5953                                    <span>&nbsp;|&nbsp;</span>
5954                                
5955                                <!-- post date -->
5956                                                                    <span class="post-date">August 11, 2026</span>
5957                                
5958                                <!-- post view -->
5959                                                            </div>
5960
5961                            <!-- post title -->
5962                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
5963                                <h3 class="post-title">
5964                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/from-drew-sebastian-to-dragons-should-you-choose-a-realistic-or-fantasy-sculpt">From &#039;Drew Sebastian&#039; to Dragons: Should You Choose a Realistic or Fantasy Sculpt? </a>
5965                                </h3>
5966                            </div>
5967
5968                            
5969
5970                            <!-- post description -->
5971                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
5972                                <style>#html-body [data-pb-style=AKXLDUD]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="AKXLDUD"><div data-content-type="text" data-appearance="default" data-element="main"><div class="SCXW57652787 BCX0">
5973<div class="OutlineElement Ltr SCXW57652787 BCX0">
5974<p class="Paragraph SCXW57652787 BCX0"><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0">When you decide to invest in high-end, hand-poured silicone, you are </span><span class="NormalTextRun SCXW57652787 BCX0">immediately</span><span class="NormalTextRun SCXW57652787 BCX0"> faced with the ultimate collector’s dilemma: </span></span><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0">Familiarity or Exploration?</span></span><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0"> Do you go with a meticulously crafted human replica, or do you venture into the wildly textured world of mythical creatures?</span></span><span class="EOP Selected SCXW57652787 BCX0" data-ccp-props="{}"> </span></p>
5975</div>
5976<div class="OutlineElement Ltr SCXW57652787 BCX0">
5977<p class="Paragraph SCXW57652787 BCX0"><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0">At </span></span><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><a tabindex="-1" href="https://www.mrhankeystoys.com/"><span class="NormalTextRun SCXW57652787 BCX0">Mr. Hankey’s </span></a><span class="NormalTextRun SCXW57652787 BCX0"><a tabindex="-1" href="https://www.mrhankeystoys.com/">Toys</a> we</span></span><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0"> specialize in both. We understand that what turns you on visually might be completely different from what feels best internally. If you are struggling to choose between the </span></span><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0">best realistic dildos</span></span><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0"> and our wilder fantasy creations, it comes down to understanding the difference between <
5977/span></span><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0">visual stimulation</span></span><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0"> and </span></span><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0">engineered sensation</span></span><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0">.</span></span><span class="EOP Selected SCXW57652787 BCX0" data-ccp-props="{}"> </span></p>
5978</div>
5979<div class="OutlineElement Ltr SCXW57652787 BCX0">
5980<p class="Paragraph SCXW57652787 BCX0"><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0">Here is the definitive guide to choosing between a realistic and a fantasy sculpt for your next session.</span></span><span class="EOP Selected SCXW57652787 BCX0" data-ccp-props="{}"> </span></p>
5981</div>
5982<div class="OutlineElement Ltr SCXW57652787 BCX0">
5983<h3 class="Paragraph SCXW57652787 BCX0"><strong><span style="font-size: 16px;"><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0">1. The Case for Realism: Visual and Psychological Immersion</span></span><span class="EOP Selected SCXW57652787 BCX0" data-ccp-props="{}"> </span></span></strong></h3>
5984</div>
5985<div class="OutlineElement Ltr SCXW57652787 BCX0">
5986<p class="Paragraph SCXW57652787 BCX0"><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0">For many users, solo play is heavily tied to visual arousal and roleplay. A </span></span><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0">realistic male dildo</span></span><span class="TextRun SCXW57652787 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW57652787 BCX0"> provides a psychological connection that abstract shapes simply cannot</span></span></p></div></div></div></div></div>                            </div>
5987
5988                            <!-- read more -->
5989                            <div class="flex">
5990                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/from-drew-sebastian-to-dragons-should-you-choose-a-realistic-or-fantasy-sculpt" title="From &#039;Drew Sebastian&#039; to Dragons: Should You Choose a Realistic or Fantasy Sculpt? ">
5991                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
5992                                </a>
5993                            </div>
5994                        </div>
5995                    </div>
5996                </li>
5997                                            <li class="post-item post-holder post-holder-282 block">
5998
5999                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
6000                        <!-- post image -->
6001                        <div class="post-image grow-0 shrink-0 order-none">
6002                            <!-- img container -->
6003                            <div class="image-container relative">
6004                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
6005                                   href="https://www.mrhankeystoys.com/blog/texture-weight-and-deep-pressure-a-sensory-guide-to-silicone-toys"
6006                                   title="Texture, Weight, and Deep Pressure: A Sensory Guide to Silicone Toys "
6007                                >
6008                                                                                                                                                                                            <picture>
6009    
6010    
6011            <source type="image/webp"
6012                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/Texture_Weight_and_Deep_Pressure_A_Sensory_Guide_to_Silicone_Toys_1_.webp">
6013    
6014        <source type="image/png"
6015                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Texture_Weight_and_Deep_Pressure_A_Sensory_Guide_to_Silicone_Toys_1_.png">
6016
6017    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Texture_Weight_and_Deep_Pressure_A_Sensory_Guide_to_Silicone_Toys_1_.png" alt="Sensory guide to silicone sex toys focusing on texture, weight, and deep pressure"  width="500"  height="281" decoding="async" /></picture>
6018
6019                                                                    </a>
6020
6021                                <!-- post category-->
6022                                                                    <sp
6022an class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
6023                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/sexual-wellness"
6024                                               title="Sexual Wellness">
6025                                                Sexual Wellness                                            </a>
6026                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/tips-and-guides"
6027                                               title="Tips &amp; Guides">
6028                                                Tips &amp; Guides                                            </a>
6029                                                                            </span>
6030                                                                <!-- end post category-->
6031                            </div>
6032                        </div>
6033
6034                        <!-- block info -->
6035                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
6036
6037                            <!-- block data -->
6038                            <div class="post-data-wrap text-sm font-medium mb-3">
6039                                <!-- post author -->
6040                                                                    <span class="post-author-name">Author: Mister Hankey </span>
6041                                    <span>&nbsp;|&nbsp;</span>
6042                                
6043                                <!-- post date -->
6044                                                                    <span class="post-date">July 28, 2026</span>
6045                                
6046                                <!-- post view -->
6047                                                            </div>
6048
6049                            <!-- post title -->
6050                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
6051                                <h3 class="post-title">
6052                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/texture-weight-and-deep-pressure-a-sensory-guide-to-silicone-toys">Texture, Weight, and Deep Pressure: A Sensory Guide to Silicone Toys </a>
6053                                </h3>
6054                            </div>
6055
6056                            
6057
6058                            <!-- post description -->
6059                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
6060                                <style>#html-body [data-pb-style=VT8T83G]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="VT8T83G"><div data-content-type="text" data-appearance="default" data-element="main"><div class="SCXW46100187 BCX0">
6061<div class="OutlineElement Ltr SCXW46100187 BCX0">
6062<h3 class="Paragraph SCXW46100187 BCX0"><span style="font-size: 16px;"><strong><span class="TextRun SCXW46100187 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW46100187 BCX0">TL; DR</span></span><span class="EOP Selected SCXW46100187 BCX0" data-ccp-props='{"335559738":240,"335559739":120}'> </span></strong></span></h3>
6063</div>
6064<div class="ListContainerWrapper SCXW46100187 BCX0">
6065<ul class="BulletListStyle1 SCXW46100187 BCX0" role="list">
6066<li class="OutlineElement Ltr SCXW46100187 BCX0" role="listitem" aria-setsize="-1" data-leveltext="•" data-font="" data-listid="2" data-list-defn-props='{"335552541":1,"335559685":720,"335559991":360,"469769242":[8226],"469777803":"left","469777804":"•","469777815":"hybridMultilevel"}' data-aria-posinset="1" data-aria-level="1">
6067<p class="Paragraph SCXW46100187 BCX0"><span class="TextRun SCXW46100187 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW46100187 BCX0">Texture, weight, and firmness shape your experience just as much as size or visual design — especially if </span><span class="NormalTextRun SCXW46100187 BCX0">you're</span><span class="NormalTextRun SCXW46100187 BCX0"> neurodivergent or sensory-sensitive.</span></span><span class="EOP Selected SCXW46100187 BCX0" data-ccp-props='{"335559739":120}'> </span></p>
6068</li>
6069</ul>
6070</div>
6071<div class="ListContainerWrapper SCXW46100187 BCX0">
6072<ul class="BulletListStyle1 SCXW46100187 BCX0" role="list">
6073<li class="OutlineElement Ltr SCXW46100187 BCX0" role="listitem" aria-setsize="-1" data-leveltext="•" data-font="" data-listid="2" data-list-defn-props='{"335552541":1,"335559685":720,"335559991":360,"469769242":[8226],"469777803":"left","469777804":"•","469777815":"hybridMultilevel"}' data-aria-posinset="2" data-aria-level="1">
6074<p class="Paragraph SCXW46100187 BCX0"><span class="TextRun SCXW46100187 BCX0" data-contrast="auto"><span class="NormalTextRun SCXW46100187 BCX0">Solid, heavy-pour platinum-cured silicone delivers deep pressure stimulation: the same grounding, nervous-system-regulating input as a weighted blanket.</span></span><span class="EOP Selected SCXW46100187 BCX0" data-ccp-props='{"335559739":120}'> </span></p>
6075</li>
6076</ul>
6077</div>
6078<div class="ListContainerWrapper SCXW46100187 BCX0">
6079<ul class="BulletListStyle1 SCXW46100187 BCX0" role="list">
6080<li class="OutlineElement Ltr SCXW46100187 BCX0" role="listitem" aria-setsize="-1" data-leveltext="•" data-font="" data-listid="2" data-list-defn-props='{"335552541":1,"335559685":720,"335559991":360,"469769242":[8226],"469777803":"left","469777804":"•","469777815":"hybridMultilevel"}' data-aria-posinset="3" data-aria-level="1">
6081<p class="Paragraph SCXW46100187 BCX0"><span class="TextRun SCXW46100187 BCX0" data-contrast="auto"><span class="NormalTextRun SCXW46100187 BCX0">Sensory seekers thrive on complex textures (scales, ridges, knots); sensory avoiders do best with smooth, tapered, predictable shapes.</span></span><span class="EOP Selected SCXW46100187 BCX0" data-ccp-props='{"335559739":120}'> </span></p>
6082</li>
6083</ul>
6084</div>
6085<div class="ListContainerWrapper SCXW46100187 BCX0">
6086<ul class="BulletListStyle1 SCXW46100187 BCX0" role="list">
6087<li class="OutlineElement Ltr SCXW46100187 BCX0" role="listitem" aria-setsize="-1" data-leveltext="•" data-font="" data-listid="2" data-list-defn-props='{"335552541":1,"335559685":720,"335559991":360,"469769242":[8226],"469777803":"left","469777804":"•","469777815":"hybridMultilevel"}' data-aria-posinset="4" data-aria-level="1">
6088<p class="Paragraph SCXW46100187 BCX0"><span class="TextRun SCXW46100187 BCX0" data-contrast="auto"><span class="NormalTextRun SCXW46100187 BCX0">Firmness is measured on the Shore hardness scale — and because we hand-pour every piece in our C
6088alifornia workshop, you choose the density that matches your body.</span></span><span class="EOP Selected SCXW46100187 BCX0" data-ccp-props='{"335559739":120}'> </span></p>
6089</li>
6090</ul>
6091</div>
6092<div class="ListContainerWrapper SCXW46100187 BCX0">
6093<ul class="BulletListStyle1 SCXW46100187 BCX0" role="list">
6094<li class="OutlineElement Ltr SCXW46100187 BCX0" role="listitem" aria-setsize="-1" data-leveltext="•" data-font="" data-listid="2" data-list-defn-props='{"335552541":1,"335559685":720,"335559991":360,"469769242":[8226],"469777803":"left","469777804":"•","469777815":"hybridMultilevel"}' data-aria-posinset="5" data-aria-level="1">
6095<p class="Paragraph SCXW46100187 BCX0"><span class="TextRun SCXW46100187 BCX0" data-contrast="auto"><span class="NormalTextRun SCXW46100187 BCX0">Non-negotiables for any silicone toy: 100% platinum-cured, non-porous, hypoallergenic material; water-based lubricant only; and proper sterilization between uses.</span></span><span class="EOP Selected SCXW46100187 BCX0" data-ccp-props='{"335559739":120}'> </span></p>
6096</li>
6097</ul>
6098</div>
6099<div class="OutlineElement Ltr SCXW46100187 BCX0">
6100<h3 class="Paragraph SCXW46100187 BCX0"><strong><span style="font-size: 16px;"><span class="TextRun SCXW46100187 BCX0" data-contrast="auto"><span class="NormalTextRun SCXW46100187 BCX0">Introduction: Beyond the Visual Fantasy</span></span><span class="EOP Selected SCXW46100187 BCX0" data-ccp-props='{"335559738":240,"335559739":120}'> </span></span></strong></h3>
6101</div>
6102<div class="OutlineElement Ltr SCXW46100187 BCX0">
6103<p class="Paragraph SCXW46100187 BCX0"><span class="TextRun SCXW46100187 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW46100187 BCX0">When we talk about sex toys, the conversation usually revolves around shape and visual appeal. But for many people — especially those in the neurodivergent community living</span></span></p></div></div></div></div></div>                            </div>
6104
6105                            <!-- read more -->
6106                            <div class="flex">
6107                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/texture-weight-and-deep-pressure-a-sensory-guide-to-silicone-toys" title="Texture, Weight, and Deep Pressure: A Sensory Guide to Silicone Toys ">
6108                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
6109                                </a>
6110                            </div>
6111                        </div>
6112                    </div>
6113                </li>
6114                                            <li class="post-item post-holder post-holder-281 block">
6115
6116                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
6117                        <!-- post image -->
6118                        <div class="post-image grow-0 shrink-0 order-none">
6119                            <!-- img container -->
6120                            <div class="image-container relative">
6121                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
6122                                   href="https://www.mrhankeystoys.com/blog/chasing-the-knot-the-physiology-of-the-‘pop-in-fantasy-play"
6123                                   title="Chasing the Knot: The Physiology of the ‘Pop’ in Fantasy Play "
6124                                >
6125                                                                                                                                                                                            <picture>
6126    
6127    
6128            <source type="image/webp"
6129                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/Chasing_the_Knot_The_Physiology_of_the_Pop_in_Fantasy_Play.webp">
6130    
6131        <source type="image/png"
6132                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Chasing_the_Knot_The_Physiology_of_the_Pop_in_Fantasy_Play.png">
6133
6134    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Chasing_the_Knot_The_Physiology_of_the_Pop_in_Fantasy_Play.png" alt="Two silicone knotted fantasy dildos illustrating canine-inspired knot shapes and textures"  width="500"  height="281" decoding="async" /></picture>
6135
6136                                                                    </a>
6137
6138                                <!-- post category-->
6139                                                                    <sp
6139an class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
6140                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/fantasy-and-sci-fi"
6141                                               title="Fantasy &amp; Sci-Fi">
6142                                                Fantasy &amp; Sci-Fi                                            </a>
6143                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/tips-and-guides"
6144                                               title="Tips &amp; Guides">
6145                                                Tips &amp; Guides                                            </a>
6146                                                                            </span>
6147                                                                <!-- end post category-->
6148                            </div>
6149                        </div>
6150
6151                        <!-- block info -->
6152                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
6153
6154                            <!-- block data -->
6155                            <div class="post-data-wrap text-sm font-medium mb-3">
6156                                <!-- post author -->
6157                                                                    <span class="post-author-name">Author: Mister Hankey </span>
6158                                    <span>&nbsp;|&nbsp;</span>
6159                                
6160                                <!-- post date -->
6161                                                                    <span class="post-date">July 21, 2026</span>
6162                                
6163                                <!-- post view -->
6164                                                            </div>
6165
6166                            <!-- post title -->
6167                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
6168                                <h3 class="post-title">
6169                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/chasing-the-knot-the-physiology-of-the-‘pop-in-fantasy-play">Chasing the Knot: The Physiology of the ‘Pop’ in Fantasy Play </a>
6170                                </h3>
6171                            </div>
6172
6173                            
6174
6175                            <!-- post description -->
6176                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
6177                                <style>#html-body [data-pb-style=LYT8Q63]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="LYT8Q63"><div data-content-type="text" data-appearance="default" data-element="main"><div class="SCXW222811201 BCX0">
6178<div class="OutlineElement Ltr SCXW222811201 BCX0">
6179<p class="Paragraph SCXW222811201 BCX0" lang="EN-US"><span class="TextRun SCXW222811201 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW222811201 BCX0">If </span><span class="NormalTextRun SCXW222811201 BCX0">you’re</span><span class="NormalTextRun SCXW222811201 BCX0"> familiar with the fantasy toy community, </span><span class="NormalTextRun SCXW222811201 BCX0">you’ve</span><span class="NormalTextRun SCXW222811201 BCX0"> </span><span class="NormalTextRun SCXW222811201 BCX0">probably noticed</span><span class="NormalTextRun SCXW222811201 BCX0"> that </span></span><span class="TextRun SCXW222811201 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW222811201 BCX0">canine-inspired shapes are among the most popular designs—and often a first introduction to non-human sculpts.</span></span><span class="EOP Selected SCXW222811201 BCX0" data-ccp-props='{"335559739":160}'> </span></p>
6180</div>
6181<div class="OutlineElement Ltr SCXW222811201 BCX0">
6182<p class="Paragraph SCXW222811201 BCX0"><span class="TextRun SCXW222811201 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW222811201 BCX0">While the visual aesthetic and the primal roleplay elements are certainly a massive draw, the true appeal of a </span></span><span class="TextRun SCXW222811201 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW222811201 BCX0">dog knot dildo</span></span><span class="TextRun SCXW222811201 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW222811201 BCX0"> goes far beyond surface-level fantasy. The secret to its enduring popularity lies in its masterful physical engineering — something we have </span><span class="NormalTextRun SCXW222811201 BCX0">observed</span><span class="NormalTextRun SCXW222811201 BCX0">, tested, and refined firsthand on our California studio floor for more than a decade.</sp
6182an></span><span class="EOP Selected SCXW222811201 BCX0" data-ccp-props='{"335559739":160}'> </span></p>
6183</div>
6184<div class="OutlineElement Ltr SCXW222811201 BCX0">
6185<p class="Paragraph SCXW222811201 BCX0"><span class="TextRun SCXW222811201 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW222811201 BCX0">The canine sculpt offers a sensory journey of progressive stretching that culminates in a highly specific, intense physiological event known as the “pop.” Here is a deep dive into the internal mechanics of a </span></span><span class="TextRun SCXW222811201 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW222811201 BCX0">dog dick sex toy</span></span><span class="TextRun SCXW222811201 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW222811201 BCX0">, how it interacts with human anatomy, and why proper sizing and material safety are critical for achieving the perfect lock-in sensation.</span></span><span class="EOP Selected SCXW222811201 BCX0" data-ccp-props='{"335559739":160}'> </span></p>
6186</div>
6187<div class="OutlineElement Ltr SCXW222811201 BCX0">
6188<h3 class="Paragraph SCXW222811201 BCX0"><strong><span class="TextRun SCXW222811201 BCX0" lang="EN-US" style="font-size: 16px;" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW222811201 BCX0">Key Takeaways</span></span></strong><span class="EOP Selected SCXW222811201 BCX0" data-ccp-props='{"335559738":280,"335559739":120}'> </span></h3>
6189</div>
6190<div class="ListContainerWrapper SCXW222811201 BCX0">
6191<ul class="BulletListStyle1 SCXW222811201 BCX0" role="list">
6192<li class="OutlineElement Ltr SCXW222811201 BCX0" role="listitem" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props='{"335552541":1,"335559685":360,"335559991":360,"469769226":"Symbol","469769242":[8226],"469777803":"left","469777804":"","469777815":"singleLevel"}' data-aria-posinset="5" data-aria-level="1">
6193<p class="Paragraph SCXW222811201 BCX0"><span class="TextRun SCXW222811201 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW222811201 BCX0" data-ccp-parastyle="List Bullet"><strong>The Progressive Taper</strong>:</span></span><span class="TextRun SCXW222811201 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW222811201 BCX0" data-ccp-parastyle="List Bullet"> Canine shapes begin</span></span></p></li></ul></div></div></div></div></div>                            </div>
6194
6195                            <!-- read more -->
6196                            <div class="flex">
6197                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/chasing-the-knot-the-physiology-of-the-‘pop-in-fantasy-play" title="Chasing the Knot: The Physiology of the ‘Pop’ in Fantasy Play ">
6198                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
6199                                </a>
6200                            </div>
6201                        </div>
6202                    </div>
6203                </li>
6204                                            <li class="post-item post-holder post-holder-280 block">
6205
6206                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
6207                        <!-- post image -->
6208                        <div class="post-image grow-0 shrink-0 order-none">
6209                            <!-- img container -->
6210                            <div class="image-container relative">
6211                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
6212                                   href="https://www.mrhankeystoys.com/blog/ditching-the-disposables-why-platinum-silicone-is-a-lifetime-investment"
6213                                   title="Ditching the Disposables: Why Platinum Silicone is a Lifetime Investment "
6214                                >
6215                                                                                                                                                                                            <picture>
6216    
6217    
6218            <source type="image/webp"
6219                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/Ditching_the_Disposables_Why_Platinum_Silicone_is_a_
6219Lifetime_Investment.webp">
6220    
6221        <source type="image/png"
6222                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Ditching_the_Disposables_Why_Platinum_Silicone_is_a_Lifetime_Investment.png">
6223
6224    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Ditching_the_Disposables_Why_Platinum_Silicone_is_a_Lifetime_Investment.png" alt="Mr. Hankey's Toys platinum-cured silicone dildos in vibrant colors-a lifetime investment"  width="500"  height="281" decoding="async" /></picture>
6225
6226                                                                    </a>
6227
6228                                <!-- post category-->
6229                                                                    <span class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
6230                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/tips-and-guides"
6231                                               title="Tips &amp; Guides">
6232                                                Tips &amp; Guides                                            </a>
6233                                                                            </span>
6234                                                                <!-- end post category-->
6235                            </div>
6236                        </div>
6237
6238                        <!-- block info -->
6239                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
6240
6241                            <!-- block data -->
6242                            <div class="post-data-wrap text-sm font-medium mb-3">
6243                                <!-- post author -->
6244                                                                    <span class="post-author-name">Author: Mister Hankey </span>
6245                                    <span>&nbsp;|&nbsp;</span>
6246                                
6247                                <!-- post date -->
6248                                                                    <span class="post-date">July 07, 2026</span>
6249                                
6250                                <!-- post view -->
6251                                                            </div>
6252
6253                            <!-- post title -->
6254                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
6255                                <h3 class="post-title">
6256                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/ditching-the-disposables-why-platinum-silicone-is-a-lifetime-investment">Ditching the Disposables: Why Platinum Silicone is a Lifetime Investment </a>
6257                                </h3>
6258                            </div>
6259
6260                            
6261
6262                            <!-- post description -->
6263                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
6264                                <style>#html-body [data-pb-style=U61XD9A]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="U61XD9A"><div data-content-type="text" data-appearance="default" data-element="main"><div class="SCXW183889390 BCX0">
6265<div class="OutlineElement Ltr SCXW183889390 BCX0">
6266<p class="Paragraph SCXW183889390 BCX0"><span class="TextRun SCXW183889390 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW183889390 BCX0">Look</span><span class="NormalTextRun SCXW183889390 BCX0"> inside the average nightstand, and you will </span><span class="NormalTextRun SCXW183889390 BCX0">likely find</span><span class="NormalTextRun SCXW183889390 BCX0"> a graveyard of degraded products. There is a deeply ingrained "fast fashion" problem in the adult toy industry. For years, massive overseas factories have flooded the market with cheap, mass-produced novelties designed to look good in a box but </span><span class="NormalTextRun SCXW183889390 BCX0">failed</span><span class="NormalTextRun SCXW183889390 BCX0"> after a few months of use.</span></span><span class="EOP Selected SCXW183889390 BCX0" data-ccp-props="{}"> </span></p>
6267</div>
6268<div class="OutlineElement Ltr SCXW183889390 BCX0">
6269<p class="Paragraph SCXW183889390 BCX0"><span class="TextRun SCXW183889390 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW183889390 BCX0">At </span></span><span class="TextRun SCXW183889390 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW183889390 BCX0">Mr. Hankey’s Toys</span></span><span class="TextRun SCXW183889390 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW183889390 BCX0">, we </span><span class="NormalTextRun SCXW183889390 BCX0">operate</span><span class="NormalTextRun SCXW183889390 BCX0"> on a completely different philosophy. Inside our California studio, we </span><span class="NormalTextRun SCXW183889390 BCX0">
6269don't</span><span class="NormalTextRun SCXW183889390 BCX0"> believe in disposable pleasure. As one of the </span></span><span class="TextRun SCXW183889390 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW183889390 BCX0">best dildo companies</span></span><span class="TextRun SCXW183889390 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW183889390 BCX0"> in the world, we approach manufacturing with the mindset of a bespoke artisan: if you are going to put something inside your body, it should be a flawless, body-safe masterpiece designed to last a lifetime.</span></span><span class="EOP Selected SCXW183889390 BCX0" data-ccp-props="{}"> </span></p>
6270</div>
6271<div class="OutlineElement Ltr SCXW183889390 BCX0">
6272<p class="Paragraph SCXW183889390 BCX0"><span class="TextRun SCXW183889390 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW183889390 BCX0">Here is a deep dive into the material science behind our workshop, the hidden dangers of cheap materials, and why upgrading to premium </span></span><span class="TextRun SCXW183889390 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW183889390 BCX0">medical grade silicone sex toys</span></span><span class="TextRun SCXW183889390 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW183889390 BCX0"> is the ultimate "buy it for life" investment.</span></span><span class="EOP Selected SCXW183889390 BCX0" data-ccp-props="{}"> </span></p>
6273</div>
6274<div class="OutlineElement Ltr SCXW183889390 BCX0">
6275<h3 class="Paragraph SCXW183889390 BCX0"><span style="font-size: 16px;"><strong><span class="TextRun SCXW183889390 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW183889390 BCX0">Key Takeaways</span></span><span class="EOP Selected SCXW183889390 BCX0" data-ccp-props="{}"> </span></strong></span></h3>
6276</div>
6277<div class="ListContainerWrapper SCXW183889390 BCX0">
6278<ul class="BulletListStyle1 SCXW183889390 BCX0" role="list">
6279<li class="OutlineElement Ltr SCXW183889390 BCX0" role="listitem" aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props='{"335552541":1,"335559685":720,"335559991":360,"469769226":"Symbol","469769242":[8226],"469777803":"left","469777804":"","469777815":"multilevel"}' data-aria-posinset="1" data-aria-level="1">
6280<p class="Paragraph SCXW183889390 BCX0"><span class="TextRun SCXW183889390 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW183889390 BCX0"><strong>The Danger of</strong></span></span></p></li></ul></div></div></div></div></div>                            </div>
6281
6282                            <!-- read more -->
6283                            <div class="flex">
6284                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/ditching-the-disposables-why-platinum-silicone-is-a-lifetime-investment" title="Ditching the Disposables: Why Platinum Silicone is a Lifetime Investment ">
6285                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
6286                                </a>
6287                            </div>
6288                        </div>
6289                    </div>
6290                </li>
6291                                            <li class="post-item post-holder post-holder-279 block">
6292
6293                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
6294                        <!-- post image -->
6295                        <div class="post-image grow-0 shrink-0 order-none">
6296                            <!-- img container -->
6297                            <div class="image-container relative">
6298                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
6299                                   href="https://www.mrhankeystoys.com/blog/from-the-nightstand-to-the-bookshelf-the-rise-of-silicone-sculptures-as-art"
6300                                   title="From the Nightstand to the Bookshelf: The Rise of Silicone Sculptures as Art "
6301                                >
6302                                                                                                                                                                                            <picture>
6303    
6304    
6305            <source type="image/webp"
6306                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/From_the_Nightstand_to_the_Bookshelf_The_Rise_of_Silicone_Sculptures_as_Art.webp">
6307    
6308        <source type="image/png"
6309                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/From_the_Nightstand_to_the_Bookshelf_The_Rise_of_Silicone_Sculptures_as_Art.png">
6310
6311    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/From_the_Nightstand_to_the_Bookshelf_The_Rise_of_Silicone_Sculptures_as_Art.png" alt="A beautifully marbled, custom-poured octopus dildo by Mr. Hankey’s Toys, displayed proudly on a wooden bookshelf as a piece of vibrant, functional pop-art."  width="500"  height="281" decoding="async" /></picture>
6312
6313                                                                    </a>
6314
6315                                <!-- post category-->
6316                                                                    <sp
6316an class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
6317                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/kinky"
6318                                               title="Kinky">
6319                                                Kinky                                            </a>
6320                                                                            </span>
6321                                                                <!-- end post category-->
6322                            </div>
6323                        </div>
6324
6325                        <!-- block info -->
6326                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
6327
6328                            <!-- block data -->
6329                            <div class="post-data-wrap text-sm font-medium mb-3">
6330                                <!-- post author -->
6331                                                                    <span class="post-author-name">Author: Mister Hankey </span>
6332                                    <span>&nbsp;|&nbsp;</span>
6333                                
6334                                <!-- post date -->
6335                                                                    <span class="post-date">June 30, 2026</span>
6336                                
6337                                <!-- post view -->
6338                                                            </div>
6339
6340                            <!-- post title -->
6341                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
6342                                <h3 class="post-title">
6343                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/from-the-nightstand-to-the-bookshelf-the-rise-of-silicone-sculptures-as-art">From the Nightstand to the Bookshelf: The Rise of Silicone Sculptures as Art </a>
6344                                </h3>
6345                            </div>
6346
6347                            
6348
6349                            <!-- post description -->
6350                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
6351                                <style>#html-body [data-pb-style=W1IE2P5]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="W1IE2P5"><div data-content-type="text" data-appearance="default" data-element="main"><div class="SCXW189596288 BCX0">
6352<div class="OutlineElement Ltr SCXW189596288 BCX0">
6353<p class="Paragraph SCXW189596288 BCX0"><span class="TextRun SCXW189596288 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW189596288 BCX0">For decades, the cultural rule surrounding the adult industry was </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW189596288 BCX0">absolute secrecy</span><span class="NormalTextRun SCXW189596288 BCX0">. Personal massagers and toys were viewed as purely utilitarian objects, hastily shoved into the back of a </span><span class="NormalTextRun SCXW189596288 BCX0">drawer</span><span class="NormalTextRun SCXW189596288 BCX0"> or hidden away in a locked shoebox the moment they were clean.</span></span><span class="EOP Selected SCXW189596288 BCX0" data-ccp-props='{"335559739":160}'> </span></p>
6354</div>
6355<div class="OutlineElement Ltr SCXW189596288 BCX0">
6356<p class="Paragraph SCXW189596288 BCX0"><span class="TextRun SCXW189596288 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW189596288 BCX0">But the landscape of sex-positivity has fundamentally shifted. </span><span class="NormalTextRun SCXW189596288 BCX0">As the stigma surrounding sexual wellness and fantasy play dissolves, high-end collectors are completely changing the way they interact with their purchases.</span><span class="NormalTextRun SCXW189596288 BCX0"> Today, premium </span></span><span class="TextRun SCXW189596288 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW189596288 BCX0">dildo adult toys</span></span><span class="TextRun SCXW189596288 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW189596288 BCX0"> are no longer just bedroom accessories to be hidden away — they are vibrant, highly coveted pieces of functional pop-art.</sp
6356an></span><span class="EOP Selected SCXW189596288 BCX0" data-ccp-props='{"335559739":160}'> </span></p>
6357</div>
6358<div class="OutlineElement Ltr SCXW189596288 BCX0">
6359<p class="Paragraph SCXW189596288 BCX0"><span class="TextRun SCXW189596288 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW189596288 BCX0">At </span></span><span class="TextRun SCXW189596288 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW189596288 BCX0">Mr. Hankey’s Toys</span></span><span class="TextRun SCXW189596288 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW189596288 BCX0">, we have watched this evolution firsthand from our California studio, where our </span><span class="NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW189596288 BCX0">artisans</span><span class="NormalTextRun SCXW189596288 BCX0"> hand-pour and hand-pigment every single piece. Our buyers are no longer hiding our work. They are proudly displaying their curated </span></span><span class="TextRun SCXW189596288 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW189596288 BCX0">dildo collections</span></span><span class="TextRun SCXW189596288 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW189596288 BCX0"> on living room bookshelves, lit glass display cabinets, and bedroom vanity tables.</span></span></p></div></div></div></div></div>                            </div>
6360
6361                            <!-- read more -->
6362                            <div class="flex">
6363                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/from-the-nightstand-to-the-bookshelf-the-rise-of-silicone-sculptures-as-art" title="From the Nightstand to the Bookshelf: The Rise of Silicone Sculptures as Art ">
6364                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
6365                                </a>
6366                            </div>
6367                        </div>
6368                    </div>
6369                </li>
6370                                            <li class="post-item post-holder post-holder-274 block">
6371
6372                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
6373                        <!-- post image -->
6374                        <div class="post-image grow-0 shrink-0 order-none">
6375                            <!-- img container -->
6376                            <div class="image-container relative">
6377                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
6378                                   href="https://www.mrhankeystoys.com/blog/beyond-the-hook-why-fantasy-shapes-are-the-ultimate-prostate-hack"
6379                                   title="Beyond the Hook: Why Fantasy Shapes are the Ultimate Prostate Hack "
6380                                >
6381                                                                                                                                                                                            <picture>
6382    
6383    
6384            <source type="image/webp"
6385                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/Beyond_the_Hook_Why_Fantasy_Shapes_are_the_Ultimate_Prostate_Hack.webp">
6386    
6387        <source type="image/png"
6388                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Beyond_the_Hook_Why_Fantasy_Shapes_are_the_Ultimate_Prostate_Hack.png">
6389
6390    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Beyond_the_Hook_Why_Fantasy_Shapes_are_the_Ultimate_Prostate_Hack.png" alt="A highly ergonomic, medical-grade silicone prostate toy from Mr. Hankey’s Toys, showcasing the sweeping curve designed for precise anatomical stimulation."  width="500"  height="281" decoding="async" /></picture>
6391
6392                                                                    </a>
6393
6394                                <!-- post category-->
6395                                                                    <sp
6395an class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
6396                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/fantasy-and-sci-fi"
6397                                               title="Fantasy &amp; Sci-Fi">
6398                                                Fantasy &amp; Sci-Fi                                            </a>
6399                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/tips-and-guides"
6400                                               title="Tips &amp; Guides">
6401                                                Tips &amp; Guides                                            </a>
6402                                                                            </span>
6403                                                                <!-- end post category-->
6404                            </div>
6405                        </div>
6406
6407                        <!-- block info -->
6408                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
6409
6410                            <!-- block data -->
6411                            <div class="post-data-wrap text-sm font-medium mb-3">
6412                                <!-- post author -->
6413                                                                    <span class="post-author-name">Author: Mister Hankey </span>
6414                                    <span>&nbsp;|&nbsp;</span>
6415                                
6416                                <!-- post date -->
6417                                                                    <span class="post-date">June 23, 2026</span>
6418                                
6419                                <!-- post view -->
6420                                                            </div>
6421
6422                            <!-- post title -->
6423                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
6424                                <h3 class="post-title">
6425                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/beyond-the-hook-why-fantasy-shapes-are-the-ultimate-prostate-hack">Beyond the Hook: Why Fantasy Shapes are the Ultimate Prostate Hack </a>
6426                                </h3>
6427                            </div>
6428
6429                            
6430
6431                            <!-- post description -->
6432                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
6433                                <style>#html-body [data-pb-style=UQXV0YM]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="UQXV0YM"><div data-content-type="text" data-appearance="default" data-element="main"><p><span class="TextRun SCXW51522485 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW51522485 BCX0">The cultural destigmatization of male-focused anal play has finally reached a tipping point. More men and couples than ever are openly exploring the incredible physical benefits of prostate stimulation. However, if you look at the mainstream market, the product offerings </span><span class="NormalTextRun SCXW51522485 BCX0">remain</span><span class="NormalTextRun SCXW51522485 BCX0"> shockingly uninspired.</span></span><span class="EOP Selected SCXW51522485 BCX0" data-ccp-props='{"335559739":160}'> </span></p></div></div></div>                            </div>
6434
6435                            <!-- read more -->
6436                            <div class="flex">
6437                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/beyond-the-hook-why-fantasy-shapes-are-the-ultimate-prostate-hack" title="Beyond the Hook: Why Fantasy Shapes are the Ultimate Prostate Hack ">
6438                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
6439                                </a>
6440                            </div>
6441                        </div>
6442                    </div>
6443                </li>
6444                                            <li class="post-item post-holder post-holder-277 block">
6445
6446                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
6447                        <!-- post image -->
6448                        <div class="post-image grow-0 shrink-0 order-none">
6449                            <!-- img container -->
6450                            <div class="image-container relative">
6451                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
6452                                   href="https://www.mrhankeystoys.com/blog/the-anatomy-of-the-flare-why-the-equine-shape-is-a-fantasy-staple"
6453                                   title="The Anatomy of the Flare: Why the Equine Shape is a Fantasy Staple"
6454                                >
6455                                                                                                                                                                                            <picture>
6456    
6457    
6458            <source type="image/webp"
6459                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/The_Anatomy_of_the_Flare_Why_the_Equine_Shape_is_a_Fantasy_Staple_1__1.webp">
6460    
6461        <source type="image/png"
6462                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/The_Anatomy_of_the_Flare_Why_the_Equine_Shape_is_a_Fantasy_Staple_1__1.png">
6463
6464    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/The_Anatomy_of_the_Flare_Why_the_Equine_Shape_is_a_Fantasy_Staple_1__1.png" alt="Black silicone horse dildo showing the pronounced equine flare and textured shaft"  width="500"  height="281" decoding="async" /></picture>
6465
6466                                                                    </a>
6467
6468                                <!-- post category-->
6469                                                                    <sp
6469an class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
6470                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/fantasy-and-sci-fi"
6471                                               title="Fantasy &amp; Sci-Fi">
6472                                                Fantasy &amp; Sci-Fi                                            </a>
6473                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/tips-and-guides"
6474                                               title="Tips &amp; Guides">
6475                                                Tips &amp; Guides                                            </a>
6476                                                                            </span>
6477                                                                <!-- end post category-->
6478                            </div>
6479                        </div>
6480
6481                        <!-- block info -->
6482                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
6483
6484                            <!-- block data -->
6485                            <div class="post-data-wrap text-sm font-medium mb-3">
6486                                <!-- post author -->
6487                                                                    <span class="post-author-name">Author: Mister Hankey </span>
6488                                    <span>&nbsp;|&nbsp;</span>
6489                                
6490                                <!-- post date -->
6491                                                                    <span class="post-date">June 15, 2026</span>
6492                                
6493                                <!-- post view -->
6494                                                            </div>
6495
6496                            <!-- post title -->
6497                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
6498                                <h3 class="post-title">
6499                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/the-anatomy-of-the-flare-why-the-equine-shape-is-a-fantasy-staple">The Anatomy of the Flare: Why the Equine Shape is a Fantasy Staple</a>
6500                                </h3>
6501                            </div>
6502
6503                            
6504
6505                            <!-- post description -->
6506                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
6507                                <style>#html-body [data-pb-style=XV9UX4T]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="XV9UX4T"><div data-content-type="text" data-appearance="default" data-element="main"><h3 dir="ltr"><strong><span style="font-size: 16px;">Written by the Hankey’s Toys Design Team</span></strong></h3>
6508<p dir="ltr">We’re a passionate group of sculptors, designers, and testers who love turning fantasy into reality. After more than a decade crafting equine shapes in our California workshop, we’ve seen firsthand why the flare remains one of the most beloved features in the entire fantasy toy world. This guide shares what we’ve learned so you can enjoy these iconic shapes safely and with maximum pleasure.</p>
6509<p> </p></div></div></div>                            </div>
6510
6511                            <!-- read more -->
6512                            <div class="flex">
6513                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/the-anatomy-of-the-flare-why-the-equine-shape-is-a-fantasy-staple" title="The Anatomy of the Flare: Why the Equine Shape is a Fantasy Staple">
6514                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
6515                                </a>
6516                            </div>
6517                        </div>
6518                    </div>
6519                </li>
6520                                            <li class="post-item post-holder post-holder-275 block">
6521
6522                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
6523                        <!-- post image -->
6524                        <div class="post-image grow-0 shrink-0 order-none">
6525                            <!-- img container -->
6526                            <div class="image-container relative">
6527                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
6528                                   href="https://www.mrhankeystoys.com/blog/crossing-the-threshold-the-best-dildos-for-beginners-entering-the-fantasy-world"
6529                                   title="Crossing the Threshold: The Best Dildos for Beginners Entering the Fantasy World"
6530                                >
6531                                                                                                                                                                                            <picture>
6532    
6533    
6534            <source type="image/webp"
6535                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/Crossing_the_Threshold_The_Best_Dildos_for_Beginners_Entering_the_Fantasy_World_2_.webp">
6536    
6537        <source type="image/png"
6538                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Crossing_the_Threshold_The_Best_Dildos_for_Beginners_Entering_the_Fantasy_World_2_.png">
6539
6540    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Crossing_the_Threshold_The_Best_Dildos_for_Beginners_Entering_the_Fantasy_World_2_.png" alt="Crossing the Threshold beginner fantasy dildo guide featuring three colorful fantasy silicone dildos from Hankey’s Toys."  width="500"  height="281" decoding="async" /></picture>
6541
6542                                                                    </a>
6543
6544                                <!-- post category-->
6545                                                                    <sp
6545an class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
6546                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/fantasy-and-sci-fi"
6547                                               title="Fantasy &amp; Sci-Fi">
6548                                                Fantasy &amp; Sci-Fi                                            </a>
6549                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/tips-and-guides"
6550                                               title="Tips &amp; Guides">
6551                                                Tips &amp; Guides                                            </a>
6552                                                                            </span>
6553                                                                <!-- end post category-->
6554                            </div>
6555                        </div>
6556
6557                        <!-- block info -->
6558                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
6559
6560                            <!-- block data -->
6561                            <div class="post-data-wrap text-sm font-medium mb-3">
6562                                <!-- post author -->
6563                                                                    <span class="post-author-name">Author: Mister Hankey </span>
6564                                    <span>&nbsp;|&nbsp;</span>
6565                                
6566                                <!-- post date -->
6567                                                                    <span class="post-date">June 08, 2026</span>
6568                                
6569                                <!-- post view -->
6570                                                            </div>
6571
6572                            <!-- post title -->
6573                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
6574                                <h3 class="post-title">
6575                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/crossing-the-threshold-the-best-dildos-for-beginners-entering-the-fantasy-world">Crossing the Threshold: The Best Dildos for Beginners Entering the Fantasy World</a>
6576                                </h3>
6577                            </div>
6578
6579                            
6580
6581                            <!-- post description -->
6582                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
6583                                <style>#html-body [data-pb-style=GY0DOK1]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="GY0DOK1"><div data-content-type="text" data-appearance="default" data-element="main"><h3 dir="ltr"><strong><span style="font-size: 16px;">Written by the Hankey’s Toys Design Team</span></strong></h3>
6584<p dir="ltr">We’re a group of designers, sculptors, and testers dedicated to bringing pleasure to the world through thoughtful sizes, shapes, and textures that work for real bodies. After years of creating and refining fantasy toys in our California workshop, we’ve helped thousands of people take their first step from realistic toys into the exciting world of fantasy. This guide is based on what we’ve learned from real beginners.</p>
6585<p> </p></div></div></div>                            </div>
6586
6587                            <!-- read more -->
6588                            <div class="flex">
6589                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/crossing-the-threshold-the-best-dildos-for-beginners-entering-the-fantasy-world" title="Crossing the Threshold: The Best Dildos for Beginners Entering the Fantasy World">
6590                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
6591                                </a>
6592                            </div>
6593                        </div>
6594                    </div>
6595                </li>
6596                                            <li class="post-item post-holder post-holder-271 block">
6597
6598                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
6599                        <!-- post image -->
6600                        <div class="post-image grow-0 shrink-0 order-none">
6601                            <!-- img container -->
6602                            <div class="image-container relative">
6603                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
6604                                   href="https://www.mrhankeystoys.com/blog/from-2d-to-3d-how-anime-culture-inspires-our-wildest-silicone-sculpts"
6605                                   title="From 2D to 3D: How Anime Culture Inspires Our Wildest Silicone Sculpts"
6606                                >
6607                                                                                                                                                                                            <picture>
6608    
6609    
6610            <source type="image/webp"
6611                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/From_2D_to_3D_How_Anime_Culture_Inspires_Our_Wildest_Silicone_Sculpts.webp">
6612    
6613        <source type="image/png"
6614                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/From_2D_to_3D_How_Anime_Culture_Inspires_Our_Wildest_Silicone_Sculpts.png">
6615
6616    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/From_2D_to_3D_How_Anime_Culture_Inspires_Our_Wildest_Silicone_Sculpts.png" alt="From 2D to 3D: Green anime-style dragon with fantasy dildo and black tentacle silicone sculpture by Hankey's Toys"  width="500"  height="281" decoding="async" /></picture>
6617
6618                                                                    </a>
6619
6620                                <!-- post category-->
6621                                                                    <sp
6621an class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
6622                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/fantasy-and-sci-fi"
6623                                               title="Fantasy &amp; Sci-Fi">
6624                                                Fantasy &amp; Sci-Fi                                            </a>
6625                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/tips-and-guides"
6626                                               title="Tips &amp; Guides">
6627                                                Tips &amp; Guides                                            </a>
6628                                                                            </span>
6629                                                                <!-- end post category-->
6630                            </div>
6631                        </div>
6632
6633                        <!-- block info -->
6634                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
6635
6636                            <!-- block data -->
6637                            <div class="post-data-wrap text-sm font-medium mb-3">
6638                                <!-- post author -->
6639                                                                    <span class="post-author-name">Author: Mister Hankey </span>
6640                                    <span>&nbsp;|&nbsp;</span>
6641                                
6642                                <!-- post date -->
6643                                                                    <span class="post-date">June 02, 2026</span>
6644                                
6645                                <!-- post view -->
6646                                                            </div>
6647
6648                            <!-- post title -->
6649                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
6650                                <h3 class="post-title">
6651                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/from-2d-to-3d-how-anime-culture-inspires-our-wildest-silicone-sculpts">From 2D to 3D: How Anime Culture Inspires Our Wildest Silicone Sculpts</a>
6652                                </h3>
6653                            </div>
6654
6655                            
6656
6657                            <!-- post description -->
6658                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
6659                                <style>#html-body [data-pb-style=V0QJX2Y]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="V0QJX2Y"><div data-content-type="text" data-appearance="default" data-element="main"><h3 dir="ltr"><strong>Written by the Hankey’s Toys Design Team</strong></h3>
6660<p dir="ltr">We’re a passionate group of sculptors, designers, and testers dedicated to turning wild 2D fantasies into safe, functional 3D reality. Drawing inspiration from anime, manga, and hentai, we’ve spent years refining exaggerated shapes and textures in our California workshop. This guide shares what we’ve learned from creating and testing these designs with real users.</p>
6661<p> </p></div></div></div>                            </div>
6662
6663                            <!-- read more -->
6664                            <div class="flex">
6665                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/from-2d-to-3d-how-anime-culture-inspires-our-wildest-silicone-sculpts" title="From 2D to 3D: How Anime Culture Inspires Our Wildest Silicone Sculpts">
6666                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
6667                                </a>
6668                            </div>
6669                        </div>
6670                    </div>
6671                </li>
6672                                            <li class="post-item post-holder post-holder-273 block">
6673
6674                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
6675                        <!-- post image -->
6676                        <div class="post-image grow-0 shrink-0 order-none">
6677                            <!-- img container -->
6678                            <div class="image-container relative">
6679                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
6680                                   href="https://www.mrhankeystoys.com/blog/curating-the-cabinet-how-to-build-and-maintain-a-premium-silicone-dildo-collection"
6681                                   title="Curating the Cabinet: How to Build and Maintain a Premium Silicone Dildo Collection"
6682                                >
6683                                                                                                                                                                                            <picture>
6684    
6685    
6686            <source type="image/webp"
6687                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/Curating_the_Cabinet_How_to_Build_and_Maintain_a_Premium_Silicone_C
6687ollection_1.webp">
6688    
6689        <source type="image/png"
6690                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Curating_the_Cabinet_How_to_Build_and_Maintain_a_Premium_Silicone_Collection_1.png">
6691
6692    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Curating_the_Cabinet_How_to_Build_and_Maintain_a_Premium_Silicone_Collection_1.png" alt="Curating the Cabinet: How to Build and Maintain a Premium Silicone Collection - Assortment of colorful Hankey's Toys silicone dildos"  width="500"  height="281" decoding="async" /></picture>
6693
6694                                                                    </a>
6695
6696                                <!-- post category-->
6697                                                                    <span class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
6698                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/care-safety-and-materials"
6699                                               title="Care, Safety &amp; Materials">
6700                                                Care, Safety &amp; Materials                                            </a>
6701                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/tips-and-guides"
6702                                               title="Tips &amp; Guides">
6703                                                Tips &amp; Guides                                            </a>
6704                                                                            </span>
6705                                                                <!-- end post category-->
6706                            </div>
6707                        </div>
6708
6709                        <!-- block info -->
6710                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
6711
6712                            <!-- block data -->
6713                            <div class="post-data-wrap text-sm font-medium mb-3">
6714                                <!-- post author -->
6715                                                                    <span class="post-author-name">Author: Mister Hankey </span>
6716                                    <span>&nbsp;|&nbsp;</span>
6717                                
6718                                <!-- post date -->
6719                                                                    <span class="post-date">May 26, 2026</span>
6720                                
6721                                <!-- post view -->
6722                                                            </div>
6723
6724                            <!-- post title -->
6725                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
6726                                <h3 class="post-title">
6727                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/curating-the-cabinet-how-to-build-and-maintain-a-premium-silicone-dildo-collection">Curating the Cabinet: How to Build and Maintain a Premium Silicone Dildo Collection</a>
6728                                </h3>
6729                            </div>
6730
6731                            
6732
6733                            <!-- post description -->
6734                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
6735                                <style>#html-body [data-pb-style=K2YH777]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="K2YH777"><div data-content-type="text" data-appearance="default" data-element="main"><p dir="ltr">Owning one great silicone toy is awesome, but curating a proper collection? That’s next-level fun. Some days you want that warm, familiar feeling of a realistic partner. Other days you’re craving wild texture that makes your toes curl or that deep, satisfying stretch that leaves you blissed out. A thoughtfully built “pleasure wardrobe” means you always have the right toy for your mood.</p>
6736<p dir="ltr">Let’s walk through how to do it right without wasting money on duplicates or ruining your investment.</p>
6737<h3 dir="ltr"><span style="font-size: 16px;"><strong>Why a Balanced Collection Makes Everything Better</strong></span></h3>
6738<p dir="ltr">Buying randomly often leads to a drawer full of “kinda similar” toys. The secret sauce? Contrast. We recommend building around three foundational pillars that cover the main types of sensations most people crave.</p>
6739<h3 dir="ltr"><strong><span style="font-size: 16px;">The Three Pillars of a Killer Collection</span></strong></h3>
6740<div dir="ltr" align="left">
6741<table style="border-collapse: collapse; background-color: rgb(236, 240, 241); border-color: rgb(0, 0, 0); border-style: solid;" border="1"><colgroup><col width="90"><col width="121"><col width="138"><col width="160"><col width="116"></colgroup>
6742<tbody>
6743<tr>
6744<td style="text-align: center; border-color: rgb(0, 0, 0);">
6745<p dir="ltr"><strong>Pillar</strong></p>
6746</td>
6747<td style="text-align: center; border-color: rgb(0, 0, 0);">
6748<p dir="ltr"><strong>What It Feels Like</strong></p>
6749</td>
6750<td style="text-align: center; border-color: rgb(0, 0, 0);">
6751<p dir="ltr"><strong>Best For</strong></p>
6752</td>
6753<td style="text-align: center; border-color: rgb(0, 0, 0);">
6754<p dir="ltr"><strong>Popular Picks at Hankey’s</strong></p>
6755</td>
6756<td style="text-align: center; border-color: rgb(0, 0, 0);">
6757<p dir="ltr"><strong>Firmness Sweet Spot</strong></p>
6758</td>
6759</tr>
6760<tr>
6761<td style="border-color: rgb(0, 0, 0);">
6762<p dir="ltr"><strong>1. Realistic</strong></p>
6763</td>
6764<td style="border-color: rgb(0, 0, 0);">
6765<p dir="ltr">Familiar, intimate, lifelike glide</p>
6766</td>
6767<td style="border-color: rgb(0, 0, 0);">
6768<p dir="ltr">Roleplay, visual satisfaction, everyday comfort</p>
6769</td>
6770<td style="border-color: rgb(0, 0, 0);">
6771<p dir="ltr">Lance Woods, Roxas Caelum, Atlas,</p></td></tr></tbody></table></div></div></div></div>                            </div>
6772
6773                            <!-- read more -->
6774                            <div class="flex">
6775                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/curating-the-cabinet-how-to-build-and-maintain-a-premium-silicone-dildo-collection" title="Curating the Cabinet: How to Build and Maintain a Premium Silicone Dildo Collection">
6776                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
6777                                </a>
6778                            </div>
6779                        </div>
6780                    </div>
6781                </li>
6782                                            <li class="post-item post-holder post-holder-272 block">
6783
6784                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
6785                        <!-- post image -->
6786                        <div class="post-image grow-0 shrink-0 order-none">
6787                            <!-- img container -->
6788                            <div class="image-container relative">
6789                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
6790                                   href="https://www.mrhankeystoys.com/blog/the-goliath-and-beyond-safe-alternatives-to-fisting-with-giant-silicone"
6791                                   title="The Goliath and Beyond: Safe Alternatives to Fisting with Giant Silicone"
6792                                >
6793                                                                                                                                                                                            <picture>
6794    
6795    
6796            <source type="image/webp"
6797                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/The_Goliath_and_Beyond_Safe_Alternatives_to_Fisting_with_Giant_Silicone_1_.webp">
6798    
6799        <source type="image/png"
6800                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/The_Goliath_and_Beyond_Safe_Alternatives_to_Fisting_with_Giant_Silicone_1_.png">
6801
6802    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/The_Goliath_and_Beyond_Safe_Alternatives_to_Fisting_with_Giant_Silicone_1_.png" alt="The Goliath and Beyond: Safe Alternatives to Fisting with Giant Silicone - Large black Hankey's Toys Goliath dildo"  width="500"  height="281" decoding="async" /></picture>
6803
6804                                                                    </a>
6805
6806                                <!-- post category-->
6807                                                                    <sp
6807an class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
6808                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/size-and-xl-play"
6809                                               title="Size &amp; XL Play">
6810                                                Size &amp; XL Play                                            </a>
6811                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/care-safety-and-materials"
6812                                               title="Care, Safety &amp; Materials">
6813                                                Care, Safety &amp; Materials                                            </a>
6814                                                                            </span>
6815                                                                <!-- end post category-->
6816                            </div>
6817                        </div>
6818
6819                        <!-- block info -->
6820                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
6821
6822                            <!-- block data -->
6823                            <div class="post-data-wrap text-sm font-medium mb-3">
6824                                <!-- post author -->
6825                                                                    <span class="post-author-name">Author: Mister Hankey </span>
6826                                    <span>&nbsp;|&nbsp;</span>
6827                                
6828                                <!-- post date -->
6829                                                                    <span class="post-date">May 19, 2026</span>
6830                                
6831                                <!-- post view -->
6832                                                            </div>
6833
6834                            <!-- post title -->
6835                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
6836                                <h3 class="post-title">
6837                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/the-goliath-and-beyond-safe-alternatives-to-fisting-with-giant-silicone">The Goliath and Beyond: Safe Alternatives to Fisting with Giant Silicone</a>
6838                                </h3>
6839                            </div>
6840
6841                            
6842
6843                            <!-- post description -->
6844                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
6845                                <style>#html-body [data-pb-style=A6AL8S1]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="A6AL8S1"><div data-content-type="text" data-appearance="default" data-element="main"><h3 dir="ltr"><span style="font-size: 16px;"><strong>Written by the Hankey’s Toys Design Team</strong></span></h3>
6846<p dir="ltr">We’re a group of sculptors, testers, and size-play enthusiasts who love helping people explore their limits safely and joyfully. After more than a decade designing and hand-pouring extreme-size fantasy toys in our California workshop, we’ve worked with thousands of size queens and kings chasing that incredible feeling of absolute fullness. This guide shares what we’ve learned so you can push your boundaries with confidence and excitement.</p>
6847<p dir="ltr">Reaching the point where regular toys no longer give you that thrilling stretch is a huge milestone. Many people then start thinking about fisting. But finding a trusted partner, dealing with unpredictable movements, and managing safety can be challenging.</p>
6848<p dir="ltr">A well-engineered giant silicone dildo can deliver that same overwhelming fullness, often more safely and controllably  in the comfort of solo play.</p>
6849<p dir="ltr">Here’s how to do it right.</p>
6850<h3 dir="ltr"><span style="font-size: 16px;"><strong>Key Takeaways</strong></span></h3>
6851<ul>
6852<li dir="ltr" aria-level="1">
6853<p dir="ltr" role="presentation">Giant silicone toys provide consistent, predictable pressure  unlike</p></li></ul></div></div></div>                            </div>
6854
6855                            <!-- read more -->
6856                            <div class="flex">
6857                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/the-goliath-and-beyond-safe-alternatives-to-fisting-with-giant-silicone" title="The Goliath and Beyond: Safe Alternatives to Fisting with Giant Silicone">
6858                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
6859                                </a>
6860                            </div>
6861                        </div>
6862                    </div>
6863                </li>
6864                                            <li class="post-item post-holder post-holder-270 block">
6865
6866                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
6867                        <!-- post image -->
6868                        <div class="post-image grow-0 shrink-0 order-none">
6869                            <!-- img container -->
6870                            <div class="image-container relative">
6871                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
6872                                   href="https://www.mrhankeystoys.com/blog/player-two-has-entered-how-to-integrate-fantasy-sculptures-into-partnered-play"
6873                                   title="Player Two Has Entered: How to Integrate Fantasy Sculptures into Partnered Play"
6874                                >
6875                                                                                                                                                                                            <picture>
6876    
6877    
6878            <source type="image/webp"
6879                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/Player_Two_Has_Entered_How_to_Integrate_Fantasy_Sculptures_into_Partnered_Play.webp">
6880    
6881        <source type="image/png"
6882                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Player_Two_Has_Entered_How_to_Integrate_Fantasy_Sculptures_into_Partnered_Play.png">
6883
6884    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Player_Two_Has_Entered_How_to_Integrate_Fantasy_Sculptures_into_Partnered_Play.png" alt="Player Two Has Entered: How to Integrate Fantasy Sculptures into Partnered Play - Couple in bed with red fantasy dildo by Hankey's Toys"  width="500"  height="281" decoding="async" /></picture>
6885
6886                                                                    </a>
6887
6888                                <!-- post category-->
6889                                                                    <sp
6889an class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
6890                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/fantasy-and-sci-fi"
6891                                               title="Fantasy &amp; Sci-Fi">
6892                                                Fantasy &amp; Sci-Fi                                            </a>
6893                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/tips-and-guides"
6894                                               title="Tips &amp; Guides">
6895                                                Tips &amp; Guides                                            </a>
6896                                                                            </span>
6897                                                                <!-- end post category-->
6898                            </div>
6899                        </div>
6900
6901                        <!-- block info -->
6902                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
6903
6904                            <!-- block data -->
6905                            <div class="post-data-wrap text-sm font-medium mb-3">
6906                                <!-- post author -->
6907                                                                    <span class="post-author-name">Author: Mister Hankey </span>
6908                                    <span>&nbsp;|&nbsp;</span>
6909                                
6910                                <!-- post date -->
6911                                                                    <span class="post-date">May 12, 2026</span>
6912                                
6913                                <!-- post view -->
6914                                                            </div>
6915
6916                            <!-- post title -->
6917                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
6918                                <h3 class="post-title">
6919                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/player-two-has-entered-how-to-integrate-fantasy-sculptures-into-partnered-play">Player Two Has Entered: How to Integrate Fantasy Sculptures into Partnered Play</a>
6920                                </h3>
6921                            </div>
6922
6923                            
6924
6925                            <!-- post description -->
6926                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
6927                                <style>#html-body [data-pb-style=FMVR63U]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="FMVR63U"><div data-content-type="text" data-appearance="default" data-element="main"><p>When most people think of an adult fantasy store, they imagine products designed exclusively for solo exploration. The massive sizes, intricate textures, and non-human shapes are often viewed as personal, intimate challenges. But keeping these incredible sculpts confined to solo sessions means you are missing out on one of the most thrilling experiences the hobby has to offer.</p></div></div></div>                            </div>
6928
6929                            <!-- read more -->
6930                            <div class="flex">
6931                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/player-two-has-entered-how-to-integrate-fantasy-sculptures-into-partnered-play" title="Player Two Has Entered: How to Integrate Fantasy Sculptures into Partnered Play">
6932                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
6933                                </a>
6934                            </div>
6935                        </div>
6936                    </div>
6937                </li>
6938                                            <li class="post-item post-holder post-holder-269 block">
6939
6940                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
6941                        <!-- post image -->
6942                        <div class="post-image grow-0 shrink-0 order-none">
6943                            <!-- img container -->
6944                            <div class="image-container relative">
6945                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
6946                                   href="https://www.mrhankeystoys.com/blog/the-back-door-to-fantasy-a-safety-guide-to-anal-play-with-sculpted-toys"
6947                                   title="The Back Door to Fantasy: A Safety Guide to Anal Play with Sculpted Toys"
6948                                >
6949                                                                                                                                                                                            <picture>
6950    
6951    
6952            <source type="image/webp"
6953                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/The_Back_Door_to_Fantasy_A_Safety_Guide_to_Anal_Play_with_Sculpted_Toys_1.webp">
6954    
6955        <source type="image/png"
6956                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/The_Back_Door_to_Fantasy_A_Safety_Guide_to_Anal_Play_with_Sculpted_Toys_1.png">
6957
6958    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/The_Back_Door_to_Fantasy_A_Safety_Guide_to_Anal_Play_with_Sculpted_Toys_1.png" alt="Safety Guide to Anal Play with Sculpted Toys - The Back Door to Fantasy by Hankey's Toys"  width="500"  height="281" decoding="async" /></picture>
6959
6960                                                                    </a>
6961
6962                                <!-- post category-->
6963                                                                    <sp
6963an class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
6964                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/sexual-wellness"
6965                                               title="Sexual Wellness">
6966                                                Sexual Wellness                                            </a>
6967                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/tips-and-guides"
6968                                               title="Tips &amp; Guides">
6969                                                Tips &amp; Guides                                            </a>
6970                                                                            </span>
6971                                                                <!-- end post category-->
6972                            </div>
6973                        </div>
6974
6975                        <!-- block info -->
6976                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
6977
6978                            <!-- block data -->
6979                            <div class="post-data-wrap text-sm font-medium mb-3">
6980                                <!-- post author -->
6981                                                                    <span class="post-author-name">Author: Mister Hankey </span>
6982                                    <span>&nbsp;|&nbsp;</span>
6983                                
6984                                <!-- post date -->
6985                                                                    <span class="post-date">May 05, 2026</span>
6986                                
6987                                <!-- post view -->
6988                                                            </div>
6989
6990                            <!-- post title -->
6991                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
6992                                <h3 class="post-title">
6993                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/the-back-door-to-fantasy-a-safety-guide-to-anal-play-with-sculpted-toys">The Back Door to Fantasy: A Safety Guide to Anal Play with Sculpted Toys</a>
6994                                </h3>
6995                            </div>
6996
6997                            
6998
6999                            <!-- post description -->
7000                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
7001                                <style>#html-body [data-pb-style=IJHN438]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="IJHN438"><div data-content-type="text" data-appearance="default" data-element="main"><p dir="ltr"><strong>Written by the Hankey’s Toys Design Team</strong></p>
7002<p dir="ltr">We’re a bunch of sculptors, testers, and pleasure enthusiasts who love helping people explore safely and joyfully. After years of designing wild fantasy toys in our California workshop and chatting with thousands of adventurous users, we’ve put together this guide to help you enjoy anal play with textured and fantasy toys; with excitement, confidence, and zero regrets.</p>
7003<p> </p></div></div></div>                            </div>
7004
7005                            <!-- read more -->
7006                            <div class="flex">
7007                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/the-back-door-to-fantasy-a-safety-guide-to-anal-play-with-sculpted-toys" title="The Back Door to Fantasy: A Safety Guide to Anal Play with Sculpted Toys">
7008                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
7009                                </a>
7010                            </div>
7011                        </div>
7012                    </div>
7013                </li>
7014                                            <li class="post-item post-holder post-holder-268 block">
7015
7016                    <div class="post-container flex flex-col border border-[#eee] p-1 h-full hover:shadow-[0_0_5px_rgba(0,0,0,0.2)] group">
7017                        <!-- post image -->
7018                        <div class="post-image grow-0 shrink-0 order-none">
7019                            <!-- img container -->
7020                            <div class="image-container relative">
7021                                <a class="image-wrap flex justify-center items-center overflow-hidden relative"
7022                                   href="https://www.mrhankeystoys.com/blog/suction-swirls-and-scales-navigating-the-textures-of-octopus-tentacle-sex-toys"
7023                                   title="Suction, Swirls, and Scales: Navigating the Textures of Octopus Tentacle Sex Toys"
7024                                >
7025                                                                                                                                                                                            <picture>
7026    
7027    
7028            <source type="image/webp"
7029                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/blog/cache/500x_0/magefan_blog/Suction_Swirls_and_Scales_Navigating_the_Textures_of_Octopus_Tentacle_Sex_Toys.webp">
7030    
7031        <source type="image/png"
7032                                                        srcset="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Suction_Swirls_and_Scales_Navigating_the_Textures_of_Octopus_Tentacle_Sex_Toys.png">
7033
7034    <img class="w-full group-hover:scale-110 transition duration-500 ease-in-out" src="https://www.mrhankeystoys.com/media/blog/cache/500x_0/magefan_blog/Suction_Swirls_and_Scales_Navigating_the_Textures_of_Octopus_Tentacle_Sex_Toys.png" alt="Colorful silicone octopus tentacle dildos with prominent suction cups, swirls, and scales displayed in a deep blue underwater scene for the blog 'Suction, Swirls, and Scales: Navigating the Textures of Octopus Tentacle Sex Toys' by Mr. Hankey's Toys"  width="500"  height="281" decoding="async" /></picture>
7035
7036                                                                    </a>
7037
7038                                <!-- post category-->
7039                                                                    <sp
7039an class="post-category block absolute left-0 bottom-0 leading-none hidden md:block">
7040                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/fantasy-and-sci-fi"
7041                                               title="Fantasy &amp; Sci-Fi">
7042                                                Fantasy &amp; Sci-Fi                                            </a>
7043                                                                                    <a class="category-name inline-block bg-black hover:bg-[#4db2ec] duration-300 text-white text-xs font-medium leading-none px-2 py-2 mr-1 mt-1" href="https://www.mrhankeystoys.com/blog/tips-and-guides"
7044                                               title="Tips &amp; Guides">
7045                                                Tips &amp; Guides                                            </a>
7046                                                                            </span>
7047                                                                <!-- end post category-->
7048                            </div>
7049                        </div>
7050
7051                        <!-- block info -->
7052                        <div class="post-info grow-0 shrink-0 order-1 px-6 py-5 s767:p-4">
7053
7054                            <!-- block data -->
7055                            <div class="post-data-wrap text-sm font-medium mb-3">
7056                                <!-- post author -->
7057                                                                    <span class="post-author-name">Author: Mister Hankey </span>
7058                                    <span>&nbsp;|&nbsp;</span>
7059                                
7060                                <!-- post date -->
7061                                                                    <span class="post-date">April 28, 2026</span>
7062                                
7063                                <!-- post view -->
7064                                                            </div>
7065
7066                            <!-- post title -->
7067                            <div class="post-title-wrap mb-3 h-14 overflow-hidden">
7068                                <h3 class="post-title">
7069                                    <a class="text-lg font-semibold inline-block align-top line-clamp-2" href="https://www.mrhankeystoys.com/blog/suction-swirls-and-scales-navigating-the-textures-of-octopus-tentacle-sex-toys">Suction, Swirls, and Scales: Navigating the Textures of Octopus Tentacle Sex Toys</a>
7070                                </h3>
7071                            </div>
7072
7073                            
7074
7075                            <!-- post description -->
7076                            <div class="post-description mb-4 [&_img]:hidden line-clamp-4 hidden">
7077                                <style>#html-body [data-pb-style=HGRCTRD]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="" data-element="inner" data-pb-style="HGRCTRD"><div data-content-type="text" data-appearance="default" data-element="main"><p dir="ltr">Written by Hankey’s Toys Senior Product Designer at Mr. Hankey’s Toys</p>
7078<p dir="ltr">With over 12 years crafting and personally testing hundreds of fantasy silicone toys, including dozens of tentacle prototypes.</p>
7079<p><strong> </strong></p>
7080<p dir="ltr">When many people move from smooth, realistic dildos to fantasy shapes, an octopus-style tentacle dildo is often their first choice. These toys stand out not just for their sci-fi or hentai-inspired look, but for the unique way their textures interact with the body.</p></div></div></div>                            </div>
7081
7082                            <!-- read more -->
7083                            <div class="flex">
7084                                <a class="hover-with-arrow" href="https://www.mrhankeystoys.com/blog/suction-swirls-and-scales-navigating-the-textures-of-octopus-tentacle-sex-toys" title="Suction, Swirls, and Scales: Navigating the Textures of Octopus Tentacle Sex Toys">
7085                                    Read more                                    <svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.75071 5.66776C9.34483 6.06354 9.34483 6.93646 8.75072 7.33224L1.80442 11.9597C1.13984 12.4024 0.249999 11.926 0.249999 11.1274L0.25 1.87256C0.25 1.07402 1.13984 0.597596 1.80442 1.04032L8.75071 5.66776Z" fill="#B75E29"></path></svg>
7086                                </a>
7087                            </div>
7088                        </div>
7089                    </div>
7090                </li>
7091                        <li class="hidden">
7092                
7092<script type="text/javascript">
7093                    if (window.addthis) {
7094                        addthis.toolbox('.addthis_toolbox');
7095                    }
7096                </script>
7096
7097            </li>
7098        </ol>
7099    </div>
7100
7101        <div class="toolbar toolbar-blog-posts">
7102        
7103    
7104    
7105    <div class="flex justify-center">
7106                    <nav class="pages" aria-label="pagination">
7107                <ol class="relative z-0 inline-flex shadow-sm items pages-items">
7108                    <li class="item pages-item-previous">
7109                                                                            <a
7110                                role="link"
7111                                class="previous relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 rounded-l-md px-3 py-2 text-gray-400
7112                                 border-gray-200"
7113                                aria-disabled="true"
7114                                aria-label="Previous"
7115                            >
7116                                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true">
7117  <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/>
7118</svg>
7119                            </a>
7120                                            </li>
7121
7122                    
7123                    
7124                                                                        <li class="item -ml-px">
7125                                <a
7126                                    href="https://www.mrhankeystoys.com/blog"
7127                                    class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:border-primary-lighter focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 z-10 px-4 py-2 text-gray-700 bg-gray-100 border-primary"
7128                                    aria-current="page"
7129                                >
7130                                    <span class="sr-only label">
7131                                        You&#039;re currently reading page                                    </span>
7132                                    1                                </a>
7133                            </li>
7134                                                                                                <li class="item -ml-px">
7135                                <a
7136                                    href="https://www.mrhankeystoys.com/blog?page=2"
7137                                    class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:border-primary-lighter focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-gray-700"
7138                                >
7139                                    <span class="sr-only label">Page</span>
7140                                    <span>2</span>
7141                                </a>
7142                            </li>
7143                                                                                                <li class="item -ml-px">
7144                                <a
7145                                    href="https://www.mrhankeystoys.com/blog?page=3"
7146                                    class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:border-primary-lighter focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-gray-700"
7147                                >
7148                                    <span class="sr-only label">Page</span>
7149                                    <span>3</span>
7150                                </a>
7151                            </li>
7152                                                                                                <li class="item -ml-px">
7153                                <a
7154                                    href="https://www.mrhankeystoys.com/blog?page=4"
7155                                    class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:border-primary-lighter focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-gray-700"
7156                                >
7157                                    <span class="sr-only label">Page</span>
7158                                    <span>4</span>
7159                                </a>
7160                            </li>
7161                                                                                                <li class="item -ml-px">
7162                                <a
7163                                    href="https://www.mrhankeystoys.com/blog?page=5"
7164                                    class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:border-primary-lighter focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-gray-700"
7165                                >
7166                                    <span class="sr-only label">Page</span>
7167                                    <span>5</span>
7168                                </a>
7169                            </li>
7170                                            
7171                    
7172                    
7173                    <li class="item pages-item-next -ml-px">
7174                                                                                <a
7175                                href="https://www.mrhankeystoys.com/blog?page=2"
7176                                class="action  next relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:border-primary-lighter focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 rounded-r-md px-3 py-2 text-gray-500"
7177                                                                    aria-label="Next"
7178                                                            >
7179                                                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true">
7180  <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
7181</svg>
7182                                                            </a>
7183                                            </li>
7184                </ol>
7185            </nav>
7186            </div>
7187
7188    
7189    
7190    </div>
7191    
7191<script>
7192    function mfShareWindowOpen(url, type) {
7193        function reverse(s){
7194            return s.split('').reverse().join('');
7195        }
7196
7197        var u;
7198        switch (type) {
7199            case 'facebook':
7200                u = reverse('=u?php.rerahs/rerahs/moc.koobecaf.www//:sptth') + url;
7201                break;
7202            case 'pinterest':
7203                u = reverse('=lru?/nottub/etaerc/nip/moc.tseretnip//:sptth') + url;
7204                break;
7205            case 'twitter':
7206                u =reverse('=lru?erahs/moc.rettiwt//:ptth') + url;
7207                break;
7208            case 'linkedin':
7209                u =reverse('=lru?/etisffo-erahs/gnirahs/moc.nideknil.www//:sptth') + url;
7210                break;
7211        }
7212        if (u) {
7213            window.open (u, null, 'width=600,height=400');
7214        }
7215    }
7216</script>
7216
7217<style>
7218    .post-view {
7219        display: block;
7220        background: #000;
7221        color: #fff;
7222        font-size: 10px;
7223        font-weight: 600;
7224        text-align: center;
7225        line-height: 11px;
7226        position: relative;
7227        top: -5px;
7228        padding: 4px 6px;
7229    }
7230    .post-view:after {
7231        position: absolute;
7232        bottom: -3px;
7233        left: 0;
7234        content: '';
7235        width: 0;
7236        height: 0;
7237        border-style: solid;
7238        border-width: 3px 3px 0 0;
7239        border-color: #000 transparent transparent;
7240    }
7241</style>
7242</div></div></main><footer class="page-footer"><div class="footer content">
7242<script>
7243  addEventListener('DOMContentLoaded', () => {
7244      for (const [selector, label] of Object.entries({"aside.sidebar-main":"Sidebar Main"})) {
7245          const target = document.querySelector(selector);
7246          target && target.setAttribute('aria-label', label);
7247      }
7248  }, {once: true})
7249</script>
7249
7250
7251
7252<section
7253    class="relative container brand-slider"
7254    style="--size: clamp(10rem, 1rem + 40vmin, 30rem); --gap: calc(var(--size) / 14); --duration: 40s;"
7255    aria-label="Our favorite brands"
7256>
7257<div class="bs-content after:content-[''] after:bg-[linear-gradient(90deg,_rgba(183,_94,_41,_0.20)_15.38%,_#B75E29_50%,_rgba(183,_94,_41,_0.20)_85.1%)] after:h-[1px] after:w-full after:absolute after:bottom-0 after:left-0 relative pb-10 pt-8 s1400:py-12 s767:pt-6 s767:pb-10">
7258    <div class="inner-title">As Featured On</div>
7259    <div class="swiper-container swiper--top">
7260        <div class="swiper-wrapper">
7261                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
7262                    <picture>
7263    
7264    
7265            <source type="image/webp"
7266                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/wysiwyg/brands/attitude.webp">
7267    
7268        <source type="image/png"
7269                                                        srcset="https://www.mrhankeystoys.com/media/wysiwyg/brands/attitude.png">
7270
7271    <img
7272                        src="https://www.mrhankeystoys.com/media/wysiwyg/brands/attitude.png"
7273                        alt="attitude"
7274                        width="118"
7275                        height="30"
7276                        loading="lazy"
7277                    decoding="async" ></picture>
7278
7279                    </div>
7280                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
7281                    <picture>
7282    
7283    
7284            <source type="image/webp"
7285                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/wysiwyg/brands/avn.webp">
7286    
7287        <source type="image/png"
7288                                                        srcset="https://www.mrhankeystoys.com/media/wysiwyg/brands/avn.png">
7289
7290    <img
7291                        src="https://www.mrhankeystoys.com/media/wysiwyg/brands/avn.png"
7292                        alt="attitude"
7293                        width="63"
7294                        height="45"
7295                        loading="lazy"
7296                    decoding="async" ></picture>
7297
7298                    </div>
7299                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
7300                    <picture>
7301    
7302    
7303            <source type="image/webp"
7304                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/wysiwyg/brands/clav.webp">
7305    
7306        <source type="image/png"
7307                                                        srcset="https://www.mrhankeystoys.com/media/wysiwyg/brands/clav.png">
7308
7309    <img
7310                        src="https://www.mrhankeystoys.com/media/wysiwyg/brands/clav.png"
7311                        alt="attitude"
7312                        width="106"
7313                        height="40"
7314                        loading="lazy"
7315                    decoding="async" ></picture>
7316
7317                    </div>
7318                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
7319                    <picture>
7320    
7321    
7322            <source type="image/webp"
7323                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/wysiwyg/brands/folsom.webp">
7324    
7325        <source type="image/png"
7326                                                        srcset="https://www.mrhankeystoys.com/media/wysiwyg/brands/folsom.png">
7327
7328    <img
7329                        src="https://www.mrhankeystoys.com/media/wysiwyg/brands/folsom.png"
7330                        alt="attitude"
7331                        width="75"
7332                        height="34"
7333                        loading="lazy"
7334                    decoding="async" ></picture>
7335
7336                    </div>
7337                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
7338                    <picture>
7339    
7340    
7341            <source type="image/webp"
7342                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/wysiwyg/brands/iheart.webp">
7343    
7344        <source type="image/png"
7345                                                        srcset="https://www.mrhankeystoys.com/media/wysiwyg/brands/iheart.png">
7346
7347    <img
7348                        src="https://www.mrhankeystoys.com/media/wysiwyg/brands/iheart.png"
7349                        alt="attitude"
7350                        width="111"
7351                        height="30"
7352                        loading="lazy"
7353                    decoding="async" ></picture>
7354
7355                    </div>
7356                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
7357                    <picture>
7358    
7359    
7360            <source type="image/webp"
7361                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/wysiwyg/brands/laweekly.webp">
7362    
7363        <source type="image/png"
7364                                                        srcset="https://www.mrhankeystoys.com/media/wysiwyg/brands/laweekly.png">
7365
7366    <img
7367                        src="https://www.mrhankeystoys.com/media/wysiwyg/brands/laweekly.png"
7368                        alt="attitude"
7369                        width="117"
7370                        height="30"
7371                        loading="lazy"
7372                    decoding="async" ></picture>
7373
7374                    </div>
7375                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
7376                    <picture>
7377    
7378    
7379            <source type="image/webp"
7380                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/wysiwyg/brands/out.webp">
7381    
7382        <source type="image/png"
7383                                                        srcset="https://www.mrhankeystoys.com/media/wysiwyg/brands/out.png">
7384
7385    <img
7386                        src="https://www.mrhankeystoys.com/media/wysiwyg/brands/out.png"
7387                        alt="attitude"
7388                        width="89"
7389                        height="28"
7390                        loading="lazy"
7391                    decoding="async" ></picture>
7392
7393                    </div>
7394                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
7395                    <picture>
7396    
7397    
7398            <source type="image/webp"
7399                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/wysiwyg/brands/recon.webp">
7400    
7401        <source type="image/png"
7402                                                        srcset="https://www.mrhankeystoys.com/media/wysiwyg/brands/recon.png">
7403
7404    <img
7405                        src="https://www.mrhankeystoys.com/media/wysiwyg/brands/recon.png"
7406                        alt="attitude"
7407                        width="133"
7408                        height="45"
7409                        loading="lazy"
7410                    decoding="async" ></picture>
7411
7412                    </div>
7413                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
7414                    <picture>
7415    
7416    
7417            <source type="image/webp"
7418                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/wysiwyg/brands/vice.webp">
7419    
7420        <source type="image/png"
7421                                                        srcset="https://www.mrhankeystoys.com/media/wysiwyg/brands/vice.png">
7422
7423    <img
7424                        src="https://www.mrhankeystoys.com/media/wysiwyg/brands/vice.png"
7425                        alt="attitude"
7426                        width="95"
7427                        height="30"
7428                        loading="lazy"
7429                    decoding="async" ></picture>
7430
7431                    </div>
7432                                    <div class="swiper-slide text-center bg-white flex justify-center items-center relatoive px-10 s767:px-5 !w-auto !h-auto">
7433                    <picture>
7434    
7435    
7436            <source type="image/webp"
7437                                                        srcset="https://www.mrhankeystoys.com/media/opti_image/webp/wysiwyg/brands/xbiz.webp">
7438    
7439        <source type="image/png"
7440                                                        srcset="https://www.mrhankeystoys.com/media/wysiwyg/brands/xbiz.png">
7441
7442    <img
7443                        src="https://www.mrhankeystoys.com/media/wysiwyg/brands/xbiz.png"
7444                        alt="attitude"
7445                        width="90"
7446                        height="45"
7447                        loading="lazy"
7448                    decoding="async" ></picture>
7449
7450                    </div>
7451                        </div>
7452    </div>
7453</div>
7454</section>
7455
7456
7457<style>
7458    .swiper--top { overflow:hidden; }
7459
7460    .swiper--top .swiper-wrapper { -webkit-transition-timing-function: linear !important; transition-timing-function: linear !important; position: relative; }
7461</style>
7462<script>
7463    var SwiperTop = new Swiper('.page-footer .swiper--top', {
7464        spaceBetween: 0,
7465        centeredSlides: true,
7466        speed: 3500,
7467        autoplay: {
7468            delay: 1,
7469        },
7470        loop: true,
7471        slidesPerView:'auto',
7472        allowTouchMove: false,
7473        disableOnInteraction: true
7474    });
7475</script>
7475
7476<div class="newsletter-block">
7477    <div class="container">
7478        <form
7479            id="newsletter-validate-detail"
7480            class="form subscribe"
7481            action="https://www.mrhankeystoys.com/newsletter/subscriber/new/"
7482            method="post"
7483            x-data="initNewsletterForm"
7484            @submit.prevent="submitForm"
7485            aria-label="Subscribe&#x20;to&#x20;Newsletter"
7486        >
7487            <div class="flex items-center gap-5 justify-center py-10 s1200:flex-col s1023:gap-0 s767:items-start for-page-only">
7488                <strong class="jost text-[30px] font-medium s1023:text-2xl s767:text-[22px] shrink-0 s767:text-center s767:w-full">Stay in the Loop!</strong>
7489                <p class="s1023:text-sm s1023:mb-4 max-w-[620px] s1200:max-w-full text-center">
7490                    Be the first to know about new releases, exclusive promotions, and insider tips!<br/>
7491                    We respect your privacy and your email is never shared or sold.                </p>
7492                <div class="flex relative max-w-lg w-full shrink-0 flex-wrap">
7493                    <label class="grow m-0">
7494                        <input
7495                            type="email"
7496                            id="newsletter-subscribe"
7497                            name="email"
7498                            class="form-input w-full border-baseColor pr-[120px] h-[53px] focus:!ring-baseColor focus:!border-baseColor s1023:h-11"
7499                            required
7500                            placeholder="Enter&#x20;email&#x20;address..."
7501                            x-on:input="validateEmail($event.target.value)"
7502                            x-bind:class="{ 'border-red-500 focus:border-red-500': displayErrorMessage }"
7503                        >
7504                        <input name="form_key" type="hidden" value="9SFsreOEuib59vuZ" />                        <div class="control">
7505    <input type="hidden"
7506           value=""
7507           name="g-recaptcha-response"
7508    />
7509</div>
7510                    </label>
7511                    <button
7512                        class="shrink-0 absolute right-0 text-sm font-semibold top-0 h-[53px] px-5 s1023:h-11"
7513                        type="submit"
7514                        x-bind:disabled="displayErrorMessage"
7515                        x-bind:class="{ 'opacity-50 cursor-not-allowed': displayErrorMessage }"
7516                    >
7517                        Sign Up Now                    </button>
7518                    <template x-if="displayErrorMessage">
7519                        <p class="flex items-center text-[#FF0000] mt-1 text-xs absolute top-full left-0">
7520                            <template x-for="errorMessage in errorMessages">
7521                                <span x-html="errorMessage"></span>
7522                            </template>
7523                        </p>
7524                    </template>
7525                </div>
7526            </div>
7527
7528        </form>
7529    </div>
7530    
7530<script>
7531        function initNewsletterForm() {
7532            return {
7533                errors: 0,
7534                hasCaptchaToken: 0,
7535                displayErrorMessage: false,
7536                errorMessages: [],
7537
7538                // List of blocked email patterns and domains
7539                blockedEmails: [
7540                    '[email protected]',
7541                    '[email protected]',
7542                    '[email protected]',
7543                    '[email protected]',
7544                    '[email protected]'
7545                ],
7546
7547                blockedDomains: [
7548                    'test.com',
7549                    'example.com',
7550                    'tempmail.com',
7551                    '10minutemail.com',
7552                    'guerrillamail.com',
7553                    'mailinator.com',
7554                    'yopmail.com'
7555                ],
7556
7557                blockedPatterns: [
7558                    /^test[\d]*@/i,
7559                    /^admin[\d]*@/i,
7560                    /^noreply[\d]*@/i,
7561                    /^no-reply[\d]*@/i,
7562                    /^dummy[\d]*@/i,
7563                    /^fake[\d]*@/i,
7564                    /^spam[\d]*@/i,
7565                    /^trash[\d]*@/i
7566                ],
7567
7568                setErrorMessages(messages) {
7569                    this.errorMessages = Array.isArray(messages) ? messages : [messages];
7570                    this.displayErrorMessage = this.errorMessages.length > 0;
7571                },
7572
7573                clearErrorMessages() {
7574                    this.errorMessages = [];
7575                    this.displayErrorMessage = false;
7576                },
7577
7578                isValidEmail(email) {
7579                    // Basic email format validation
7580                    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
7581                    return emailRegex.test(email);
7582                },
7583
7584                isBlockedEmail(email) {
7585                    const emailLower = email.toLowerCase().trim();
7586
7587                    // Check exact matches
7588                    if (this.blockedEmails.includes(emailLower)) {
7589                        return true;
7590                    }
7591
7592                    // Check domain
7593                    const domain = emailLower.split('@')[1];
7594                    if (domain && this.blockedDomains.includes(domain)) {
7595                        return true;
7596                    }
7597
7598                    // Check patterns
7599                    for (let pattern of this.blockedPatterns) {
7600                        if (pattern.test(emailLower)) {
7601                            return true;
7602                        }
7603                    }
7604
7605                    return false;
7606                },
7607
7608                validateEmail(email) {
7609                    this.clearErrorMessages();
7610
7611                    if (!email) {
7612                        return true; // Don't show error for empty field
7613                    }
7614
7615                    // Check basic email format
7616                    if (!this.isValidEmail(email)) {
7617                        this.setErrorMessages('Please enter a valid email address.');
7618                        return false;
7619                    }
7620
7621                    // Check if email is blocked
7622                    if (this.isBlockedEmail(email)) {
7623                        this.setErrorMessages('Please enter a valid email address. Test emails are not allowed.');
7624                        return false;
7625                    }
7626
7627                    // Additional validations
7628                    const emailLower = email.toLowerCase().trim();
7629
7630                    // Check for too many consecutive dots
7631                    if (emailLower.includes('..')) {
7632                        this.setErrorMessages('Please enter a valid email address.');
7633                        return false;
7634                    }
7635
7636                    // Check for very short domains
7637                    const domain = emailLower.split('@')[1];
7638                    if (domain && domain.length < 4) {
7639                        this.setErrorMessages('Please enter a valid email address.');
7640                        return false;
7641                    }
7642
7643                    // Check for suspicious patterns
7644                    if (emailLower.includes('+test') || emailLower.includes('+spam')) {
7645                        this.setErrorMessages('Please enter a valid email address.');
7646                        return false;
7647                    }
7648
7649                    return true;
7650                },
7651
7652                submitForm() {
7653                    // Do not rename $form, the variable is expected to be declared in the recaptcha output
7654                    const $form = document.querySelector('#newsletter-validate-detail');
7655                    const emailInput = $form.querySelector('input[name="email"]');
7656
7657                    // Clear previous errors
7658                    this.errors = 0;
7659                    this.clearErrorMessages();
7660
7661                    // Validate email before submission
7662                    if (!emailInput.value.trim()) {
7663                        this.errors++;
7664                        this.setErrorMessages('Email address is required.');
7665                        return;
7666                    }
7667
7668                    if (!this.validateEmail(emailInput.value)) {
7669                        this.errors++;
7670                        return; // Error message already set by validateEmail
7671                    }
7672
7673                    // ReCAPTCHA validation
7674                        if (!this.hasCaptchaToken) {
7675        this.errors = 1;
7676
7677
7678        const executeGreCaptcha = () => {
7679            grecaptcha.ready(() => {
7680                grecaptcha.execute(
7681                    '6LeoIcUrAAAAAJYfHQM4lGMaUcmcjlQaBgv49EZy',
7682                    {action: 'submit'}
7683                ).then((token) => {
7684                    const tokenElement = $form['g\u002Drecaptcha\u002Dresponse'];
7685
7686                    if (tokenElement && token && token.length > 0) {
7687                        $form['g\u002Drecaptcha\u002Dresponse'].value = token;
7688                        this.errors = 0;
7689                        this.hasCaptchaToken = 1;
7690                        (this.submitForm || $form.submit).call(this);
7691                    } else {
7692                        this.errors = 1;
7693                        const error = tokenElement
7694                            ? 'ReCaptcha\u0020validation\u0020failed,\u0020please\u0020try\u0020again'
7695                            : 'ReCaptcha\u0020token\u0020element\u0020is\u0020missing.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020trying\u0020again.';
7696                        if (this.setErrorMessages) {
7697                            this.setErrorMessages([error])
7698                            this.displayErrorMessage = true;
7699                        } else {
7700                            window.dispatchMessages && window.dispatchMessages([{type: "error", text: error}], 5000);
7701                        }
7702                    }
7703                }).catch(exception => {
7704                    console.error(exception || `An unknown error occurred during ReCaptcha validation. Are the tokens and the domain correctly set up in the Google console?`)
7705                });
7706            })
7707        }
7708
7709        if (window.grecaptcha) {
7710            executeGreCaptcha();
7711        } else {
7712            const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6LeoIcUrAAAAAJYfHQM4lGMaUcmcjlQaBgv49EZy";
7713            const script = document.createElement('script');
7714            script.setAttribute('type', 'text/javascript');
7715            script.setAttribute('src', recaptchaUrl);
7716            document.head.appendChild(script);
7717
7718            script.addEventListener("load", executeGreCaptcha, false);
7719        }
7720    }
7721
7722                    if (this.errors === 0) {
7723                        $form.submit();
7724                    }
7725                }
7726            }
7727        }
7728
7729        window.addEventListener('alpine:init', () => Alpine.data('initNewsletterForm', initNewsletterForm), { once: true })
7730    </script>
7730
7731    </div>
7732<div class="bg-[#F4F4F4] py-10 s1400:py-12 s767:py-6">
7733    <div class="container">
7734        <div class="flex gap-10 justify-between ipad:flex-wrap s767:flex-col s767:gap-5">
7735            <div class="flex gap-5 first-block max-w-[470px] w-full s1400:max-w-[300px] s1400:flex-col ipad:-order-1 ipad:max-w-[calc(100%-310px)] ipad:flex-row s767:max-w-full s767:gap-2.5 s767:border-b s767:border-[#ccc] s767:pb-8 s767:mb-2">
7736                <div class="shrink-0"><img src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/images/logo-footer.png" width="108" height="70" alt="HankeysToys" /></div>
7737                <div class="flex gap-8 flex-col ipad:gap-5 s767:gap-6">
7738                    <p class="text-sm">Handcrafted in California with platinum-cured silicone, we create real legends and outrageous fantasies—built to order, shipped discreetly, and tailored to you.</p>
7739                    <div class="email flex flex-col gap-1">
7740                        <span class="text-sm flex gap-2.5 items-center"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="13" viewBox="0 0 18 13" fill="none" class="shrink-0" role="img">
7741<path d="M16.418 0H1.58203C0.707941 0 0 0.731683 0 1.625V11.375C0 12.2736 0.713145 13 1.58203 13H16.418C17.2847 13 18 12.2767 18 11.375V1.625C18 0.733272 17.2949 0 16.418 0ZM16.1964 1.08333C15.8732 1.41357 10.3107 7.09703 10.1187 7.29325C9.81984 7.6002 9.42258 7.7692 9 7.7692C8.57742 7.7692 8.18016 7.60016 7.88034 7.29224C7.75118 7.16026 2.25011 1.53956 1.80359 1.08333H16.1964ZM1.05469 11.1545V1.84618L5.61227 6.50289L1.05469 11.1545ZM1.80425 11.9167L6.36005 7.26689L7.13556 8.05928C7.63358 8.57083 8.29571 8.85253 9 8.85253C9.70429 8.85253 10.3664 8.57083 10.8635 8.06029L11.64 7.26689L16.1957 11.9167H1.80425ZM16.9453 11.1545L12.3877 6.50289L16.9453 1.84618V11.1545Z" fill="#0F0F0F"/>
7742<title>email</title></svg>
7743 Email Now</span>
7744                        <a class="text-sm hover:text-blueColor" href="/contact-us">[email protected]</a>
7745                    </div>
7746                    <ul class="flex items-center gap-2 flex-wrap">
7747                        <li><img src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/images/visa.svg" alt="visa" width="49" height="24" /></li>
7748                        <li><img src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/images/mastercard.svg" alt="mastercard" width="49" height="24" /></li>
7749                        <li><img src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/images/amex.svg" alt="amex" width="49" height="24" /></li>
7750                        <li><img src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/images/discover.svg" alt="discover" width="49" height="24" /></li>
7751                        <li><img src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/images/paypal.svg" alt="paypal" width="49" height="24" /></li>
7752                        <li><img src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/images/applepay.svg" alt="applepay" width="49" height="24" /></li>
7753                    </ul>
7754                </div>
7755            </div>
7756            <div x-data="{ isExpanded: false }" class="s767:flex s767:flex-col s767:gap-3">
7757                <div class="group text-base font-semibold md:mb-[14px] s767:flex s767:justify-between s767:items-center" id="controlsAccordionItemOne" aria-controls="accordionItemOne" x-on:click="isExpanded = ! isExpanded" x-bind:aria-expanded="isExpanded ? 'true' : 'false'">
7758                    Shop by Desire <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke="currentColor" aria-hidden="true" class="hide-desktop transition-transform group-aria-expanded:rotate-180" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 8.25l-7.5 7.5-7.5-7.5"/><title>downArrow</title></svg>
7759                </div>
7760                <div class="show-desktop" x-cloak x-show="isExpanded" id="accordionItemOne" role="region" aria-labelledby="controlsAccordionItemOne" x-collapse>
7761                    <ul class="flex gap-3 flex-col text-sm [&_a:hover]:text-hoverColor [&_a:after]:bg-hoverColor [&_a:after]:absolute [&_a:after]:h-[1px] [&_a:after]:w-0 [&_a:after]:bottom-0 [&_a:after]:left-0 [&_a:hover:after]:w-full [&_a:after]:transition-all [&_a:after]:duration-300 [&_a]:relative [&_a:after]:content-['']">
7762                        <li><a href="/all">All Categories</a></li>
7763                        <li><a href="/realistic">Realistic Dildos</a></li>
7764                        <li><a href="/fantasy-and-sci-fi">Fantasy Dildos</a></li>
7765                        <li><a href="/accessories">Play Gear</a></li>
7766                        <li><a href="/promo-offers">Sales & Offers</a></li>
7767                        <li><a href="https://www.amazon.com/stores/page/6B30C514-4476-4C7E-9C03-8EE5D377B673/search?terms=dildo">Amazon</a></li>
7768                    </ul>
7769                </div>
7770            </div>
7771            <div x-data="{ isExpanded: false }" class="s767:flex s767:flex-col s767:gap-3">
7772                <div class="group text-base font-semibold md:mb-[14px] s767:flex s767:justify-between s767:items-center" id="controlsaccordionItemTwo" aria-controls="accordionItemTwo" x-on:click="isExpanded = ! isExpanded" x-bind:aria-expanded="isExpanded ? 'true' : 'false'">
7773                    Inside the Workshop <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke="currentColor" aria-hidden="true" class="hide-desktop transition-transform group-aria-expanded:rotate-180" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 8.25l-7.5 7.5-7.5-7.5"/><title>downArrow</title></svg>
7774                </div>
7775                <div class="show-desktop" x-cloak x-show="isExpanded" id="accordionItemTwo" role="region" aria-labelledby="controlsaccordionItemTwo" x-collapse>
7776                    <ul class="flex gap-3 flex-col text-sm [&_a:hover]:text-hoverColor [&_a:after]:bg-hoverColor [&_a:after]:absolute [&_a:after]:h-[1px] [&_a:after]:w-0 [&_a:after]:bottom-0 [&_a:after]:left-0 [&_a:hover:after]:w-full [&_a:after]:transition-all [&_a:after]:duration-300 [&_a]:relative [&_a:after]:content-['']">
7777                        <li><a href="/contact-us">Contact Us</a></li>
7778                        <li><a href="/about">About</a></li>
7779                        <li><a href="/testimonials">Testimonials</a></li>
7780                        <li><a href="/retailers">Find Retailer</a></li>
7781                        <li><a href="/affiliate-program">Become an Affiliate</a></li>
7782                        <li><a href="/blog">Blogs</a></li>
7783                    </ul>
7784                </div>
7785            </div>
7786            <div x-data="{ isExpanded: false }" class="s767:flex s767:flex-col s767:gap-3">
7787                <div class="group text-base font-semibold md:mb-[14px] s767:flex s767:justify-between s767:items-center" id="controlsAccordionItemThree" aria-controls="accordionItemThree" x-on:click="isExpanded = ! isExpanded" x-bind:aria-expanded="isExpanded ? 'true' : 'false'">
7788                    Policies & Terms <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke="currentColor" aria-hidden="true" class="hide-desktop transition-transform group-aria-expanded:rotate-180" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 8.25l-7.5 7.5-7.5-7.5"/><title>downArrow</title></svg>
7789                </div>
7790                <div class="show-desktop" x-cloak x-show="isExpanded" id="accordionItemThree" role="region" aria-labelledby="controlsAccordionItemThree" x-collapse>
7791                    <ul class="flex gap-3 flex-col text-sm [&_a:hover]:text-hoverColor [&_a:after]:bg-hoverColor [&_a:after]:absolute [&_a:after]:h-[1px] [&_a:after]:w-0 [&_a:after]:bottom-0 [&_a:after]:left-0 [&_a:hover:after]:w-full [&_a:after]:transition-all [&_a:after]:duration-300 [&_a]:relative [&_a:after]:content-['']">
7792                        <li><a href="/privacy-policy">Privacy Policy</a></li>
7793                        <li><a href="/terms-of-services">Terms of Service</a></li>
7794                        <li><a href="/usage-and-safety">Usage & Safety</a></li>
7795                        <li><a href="/faq">FAQs</a></li>
7796                        <li><button><span id="userAccessibilityWidget">Accessibility</span></button></li>
7797                    </ul>
7798                </div>
7799            </div>
7800            <div x-data="{ isExpanded: false }" class="s767:flex s767:flex-col s767:gap-3">
7801                <div class="group text-base font-semibold md:mb-[14px] s767:flex s767:justify-between s767:items-center" id="controlsaccordionItemFour" aria-controls="accordionItemFour" x-on:click="isExpanded = ! isExpanded" x-bind:aria-expanded="isExpanded ? 'true' : 'false'">
7802                    Watch Online <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke="currentColor" aria-hidden="true" class="hide-desktop transition-transform group-aria-expanded:rotate-180" width="20" height="20" role="img"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 8.25l-7.5 7.5-7.5-7.5"/><title>downArrow</title></svg>
7803                </div>
7804                <div class="show-desktop" x-cloak x-show="isExpanded" id="accordionItemFour" role="region" aria-labelledby="controlsaccordionItemFour" x-collapse>
7805                    <ul class="flex gap-3 flex-col text-sm [&_a:hover]:text-hoverColor [&_a:after]:bg-hoverColor [&_a:after]:absolute [&_a:after]:h-[1px] [&_a:after]:w-0 [&_a:after]:bottom-0 [&_a:after]:left-0 [&_a:hover:after]:w-full [&_a:after]:transition-all [&_a:after]:duration-300 [&_a]:relative [&_a:after]:content-['']">
7806                        <li><a href="https://twitter.com/hankeystoys" target="_blank">X</a></li>
7807                        <li><a href="https://www.youtube.com/channel/UCUgwLSc7t6ozBh04CsHHDNA/vi
7807deos" target="_blank">YouTube</a></li>
7808                        <li><a href="https://www.reddit.com/r/MrHankeyToys/" target="_blank">Reddit</a></li>
7809                        <li><a href="https://www.instagram.com/hankeys_toys/?igshid=1wl63tdw6f9ci" target="_blank">Instagram</a></li>
7810                        <li><a href="https://bsky.app/profile/hankeystoys.bsky.social" target="_blank">Bluesky</a></li>
7811                        <li><a href="https://fetlife.com/users/6140563" target="_blank">Fetlife</a></li>
7812                        <!--<li><a href="https://www.tiktok.com/@mrhankeystoys.com" target="_blank">Tiktok</a></li>
7813                        <li><a href="https://www.threads.net/@hankeys_toys" target="_blank">Threads</a></li>
7814                        <li><a href="https://www.facebook.com/people/Mr-Hankeys-Toys/61550497480822" target="_blank">Facebook</a></li>
7815                        <li><a href="https://mrhankeystube.com" target="_blank">mrhankeystube.com</a></li>-->
7816                    </ul>
7817                </div>
7818            </div>
7819            <div class="linkTree third-block shrink-0 ipad:-order-1">
7820                <div class="gap-5 flex flex-col justify-center items-center max-w-[270px] w-full text-center s767:max-w-full s767:p-5 s767:flex-row s767:text-left">
7821                    <div class="icon"><a target="_blank" href="https://linktr.ee/hankeystoys"><svg xmlns="http://www.w3.org/2000/svg" width="69" height="84" viewBox="0 0 70 84" fill="none" role="img">
7822<g clip-path="url(#clip0_6002_594)">
7823<path d="M0.6725 28.4585H21.545L6.62375 14.3582L14.8175 6.1044L28.9625 20.4626V0H41.21V20.4626L55.355 6.1044L63.5487 14.3582L48.6275 28.3726H69.5V39.9795H48.5413L63.4625 54.3378L55.2687 62.4197L35 42.2149L14.7312 62.5056L6.5375 54.3378L21.4587 39.9795H0.5V28.4585H0.6725ZM29.0487 56.5732H41.2962V84.086H29.0487V56.5732Z" fill="black"/>
7824</g>
7825<defs>
7826<clipPath id="clip0_6002_594">
7827<rect width="69" height="84" fill="white" transform="translate(0.5)"/>
7828</clipPath>
7829</defs>
7830<title>Linktree</title></svg>
7831</a></div>
7832                    <p class="text-sm">Click the <a class="font-semibold underline hover:text-hoverColor" target="_blank" href="https://linktr.ee/hankeystoys">Linktr.ee</a> Logo to view and subscribe to our social media content.</p>
7833                </div>
7834                <div class="mt-8 s767:mt-6">
7835                <ul class="flex gap-6 items-center flex-wrap justify-center">
7836                    <li><a href="https://x.com/hankeystoys" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="19" height="18" viewBox="0 0 20 19" fill="none" role="img">
7837<path d="M0.919872 0.55127L8.30257 10.423L0.873535 18.4485H2.54514L9.04987 11.421L14.3047 18.4485H19.9944L12.1959 8.02189L19.1117 0.55127H17.4401L11.4498 7.02272L6.60958 0.55127H0.919872ZM3.3792 1.78329H5.99295L17.5363 17.2176H14.9226L3.3792 1.78329Z" fill="#0F0F0F"/>
7838<title>twitter</title></svg>
7839</a></li>
7840                    <li><a href="https://www.instagram.com/hankeys_toys/?igshid=1wl63tdw6f9ci" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 19" fill="none" role="img">
7841<path d="M4.9613 18.5C3.64495 18.4972 2.38327 17.9731 1.45238 17.0424C0.521493 16.1117 -0.00282459 14.8502 -0.00585938 13.5338V5.46711C-0.00307738 4.1506 0.521115 2.88875 1.45203 1.95784C2.38295 1.02692 3.64479 0.502782 4.9613 0.5H13.027C14.3435 0.502782 15.6053 1.02692 16.5362 1.95784C17.4671 2.88875 17.9914 4.1506 17.9941 5.46711V13.5338C17.9911 14.8502 17.4668 16.1117 16.5359 17.0424C15.605 17.9731 14.3433 18.4972 13.027 18.5H4.9613ZM1.58986 5.46711V13.5338C1.59138 14.4274 1.9471 15.2839 2.57906 15.9157C3.21102 16.5475 4.0677 16.903 4.9613 16.9043H13.027C13.9206 16.9033 14.7773 16.5478 15.4092 15.916C16.041 15.2841 16.3964 14.4274 16.3974 13.5338V5.46711C16.3964 4.57352 16.041 3.71685 15.4092 3.08498C14.7773 2.45312 13.9206 2.09767 13.027 2.09666H4.9613C4.06712 2.09792 3.20998 2.45398 2.57806 3.08662C1.94615 3.71926 1.5911 4.57668 1.59085 5.47085L1.58986 5.46711ZM4.35344 9.50082C4.35344 8.58335 4.62551 7.68663 5.13523 6.92378C5.64495 6.16093 6.36941 5.56628 7.21704 5.21518C8.06467 4.86408 8.99735 4.77211 9.89719 4.9511C10.797 5.13009 11.6236 5.57205 12.2724 6.2208C12.9211 6.86955 13.3629 7.69608 13.5419 8.59592C13.7209 9.49576 13.629 10.4284 13.2779 11.276C12.9268 12.1237 12.3322 12.8481 11.5694 13.3578C10.8065 13.8676 9.90971 14.1398 8.99224 14.1398C7.76237 14.1393 6.583 13.6505 5.71335 12.7808C4.84369 11.9112 4.35488 10.7316 4.35437 9.50175L4.35344 9.50082ZM5.95108 9.50082C5.95108 10.1023 6.12942 10.6904 6.46359 11.1905C6.79776 11.6906 7.27271 12.0804 7.82841 12.3106C8.38411 12.5408 8.99557 12.6009 9.58549 12.4836C10.1754 12.3662 10.7173 12.0767 11.1426 11.6513C11.568 11.226 11.8576 10.6841 11.9749 10.0942C12.0923 9.50426 12.032 8.89268 11.8019 8.33698C11.5717 7.78128 11.1819 7.30632 10.6818 6.97216C10.1817 6.63799 9.59373 6.45965 8.99224 6.45965C8.59287 6.45977 8.19739 6.53853 7.82847 6.69148C7.45954 6.84443 7.12438 7.06873 6.84207 7.35122C6.55976 7.63371 6.33586 7.96889 6.18315 8.33791C6.03043 8.70693 5.95189 9.10238 5.95202 9.50175L5.95108 9.50082ZM13.3792 5.76088C13.1112 5.64982 12.8941 5.4431 12.7701 5.18083C12.6461 4.91856 12.624 4.61946 12.7082 4.34184C12.7924 4.06421 12.9769 3.828 13.2257 3.67882C13.4745 3.52964 13.7699 3.47831 14.0545 3.53486C14.339 3.59141 14.5924 3.75176 14.7653 3.98474C14.9381 4.21772 15.0182 4.50649 14.9898 4.79522C14.9615 5.08395 14.8268 5.35188 14.612 5.54681C14.3971 5.74173 14.1174 5.84977 13.8272 5.84992C13.674 5.85043 13.5221 5.82077 13.3802 5.76275L13.3792 5.76088Z" fill="#0F0F0F"/>
7842<title>Instagram</title></svg>
7843</a></li>
7844                    <li><a href="https://www.youtube.com/channel/UCUgwLSc7t6ozBh04CsHHDNA/vi
7844deos" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="19" height="14" viewBox="0 0 19 15" fill="none" role="img">
7845<path d="M9.49464 14.5C9.47868 14.5 7.98469 14.5 6.34011 14.4477C5.37071 14.4163 4.53495 14.3754 3.86176 14.3231C3.26026 14.2941 2.66275 14.2133 2.07655 14.0815C1.65895 13.9507 1.28418 13.7185 0.989043 13.4079C0.693903 13.0972 0.488527 12.7187 0.39307 12.3095C0.18207 11.3251 0.0652361 10.3245 0.0440068 9.32003C-0.00585938 8.32512 -0.00585938 7.50713 -0.00585938 7.49953C-0.00585938 7.49192 -0.00585938 6.67488 0.0440068 5.67902C0.0723949 4.67486 0.185457 3.67451 0.382099 2.68765C0.489021 2.2689 0.702024 1.88156 1.00243 1.55958C1.28775 1.25548 1.65623 1.03317 2.06658 0.917556C2.65438 0.78721 3.25311 0.706683 3.85577 0.676914C4.53495 0.624601 5.36971 0.581799 6.33911 0.552313C7.98569 0.5 9.47968 0.5 9.49464 0.5C9.5096 0.5 11.0026 0.5 12.6472 0.552313C13.6176 0.581799 14.4523 0.624601 15.1275 0.676914C15.7283 0.706803 16.325 0.787653 16.9107 0.918507C17.3284 1.04845 17.7035 1.27993 17.9988 1.59015C18.2942 1.90037 18.4997 2.27862 18.5952 2.68765C18.8068 3.67255 18.9233 4.67385 18.9433 5.67902C18.9941 6.67488 18.9941 7.49192 18.9941 7.49953C18.9941 7.50713 18.9941 8.32417 18.9453 9.32003C18.9163 10.3236 18.8029 11.3233 18.6062 12.3095C18.4988 12.7279 18.2862 13.1151 17.9868 13.4376C17.7015 13.7432 17.3322 13.9666 16.9207 14.0824C16.3338 14.2141 15.7356 14.295 15.1335 14.324C14.4543 14.3764 13.6176 14.4192 12.6492 14.4486C11.0026 14.5 9.5086 14.5 9.49464 14.5ZM7.55185 4.54049V10.4576L12.5175 7.50048L7.55185 4.54049Z" fill="#0F0F0F"/>
7846<title>youtube</title></svg>
7847</a></li>
7848                    <li><a href="https://www.reddit.com/r/MrHankeyToys/" target="_blank"><?xml version="1.0" encoding="utf-8"?>
7849<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
7850<svg xmlns="http://www.w3.org/2000/svg" fill="#000000" width="24" height="24" viewBox="0 0 32 32" role="img"><path d="M 18.65625 4 C 16.558594 4 15 5.707031 15 7.65625 L 15 11.03125 C 12.242188 11.175781 9.742188 11.90625 7.71875 13.0625 C 6.945313 12.316406 5.914063 12 4.90625 12 C 3.816406 12 2.707031 12.355469 1.9375 13.21875 L 1.9375 13.25 L 1.90625 13.28125 C 1.167969 14.203125 0.867188 15.433594 1.0625 16.65625 C 1.242188 17.777344 1.898438 18.917969 3.03125 19.65625 C 3.023438 19.769531 3 19.882813 3 20 C 3 22.605469 4.574219 24.886719 6.9375 26.46875 C 9.300781 28.050781 12.488281 29 16 29 C 19.511719 29 22.699219 28.050781 25.0625 26.46875 C 27.425781 24.886719 29 22.605469 29 20 C 29 19.882813 28.976563 19.769531 28.96875 19.65625 C 30.101563 18.917969 30.757813 17.777344 30.9375 16.65625 C 31.132813 15.433594 30.832031 14.203125 30.09375 13.28125 L 30.0625 13.25 C 29.292969 12.386719 28.183594 12 27.09375 12 C 26.085938 12 25.054688 12.316406 24.28125 13.0625 C 22.257813 11.90625 19.757813 11.175781 17 11.03125 L 17 7.65625 C 17 6.675781 17.558594 6 18.65625 6 C 19.175781 6 19.820313 6.246094 20.8125 6.59375 C 21.65625 6.890625 22.75 7.21875 24.15625 7.3125 C 24.496094 8.289063 25.414063 9 26.5 9 C 27.875 9 29 7.875 29 6.5 C 29 5.125 27.875 4 26.5 4 C 25.554688 4 24.738281 4.535156 24.3125 5.3125 C 23.113281 5.242188 22.246094 4.992188 21.46875 4.71875 C 20.566406 4.402344 19.734375 4 18.65625 4 Z M 16 13 C 19.152344 13 21.964844 13.867188 23.9375 15.1875 C 25.910156 16.507813 27 18.203125 27 20 C 27 21.796875 25.910156 23.492188 23.9375 24.8125 C 21.964844 26.132813 19.152344 27 16 27 C 12.847656 27 10.035156 26.132813 8.0625 24.8125 C 6.089844 23.492188 5 21.796875 5 20 C 5 18.203125 6.089844 16.507813 8.0625 15.1875 C 10.035156 13.867188 12.847656 13 16 13 Z M 4.90625 14 C 5.285156 14 5.660156 14.09375 5.96875 14.25 C 4.882813 15.160156 4.039063 16.242188 3.53125 17.4375 C 3.277344 17.117188 3.125 16.734375 3.0625 16.34375 C 2.953125 15.671875 3.148438 14.976563 3.46875 14.5625 C 3.472656 14.554688 3.464844 14.539063 3.46875 14.53125 C 3.773438 14.210938 4.3125 14 4.90625 14 Z M 27.09375 14 C 27.6875 14 28.226563 14.210938 28.53125 14.53125 C 28.535156 14.535156 28.527344 14.558594 28.53125 14.5625 C 28.851563 14.976563 29.046875 15.671875 28.9375 16.34375 C 28.875 16.734375 28.722656 17.117188 28.46875 17.4375 C 27.960938 16.242188 27.117188 15.160156 26.03125 14.25 C 26.339844 14.09375 26.714844 14 27.09375 14 Z M 11 16 C 9.894531 16 9 16.894531 9 18 C 9 19.105469 9.894531 20 11 20 C 12.105469 20 13 19.105469 13 18 C 13 16.894531 12.105469 16 11 16 Z M 21 16 C 19.894531 16 19 16.894531 19 18 C 19 19.105469 19.894531 20 21 20 C 22.105469 20 23 19.105469 23 18 C 23 16.894531 22.105469 16 21 16 Z M 21.25 21.53125 C 20.101563 22.597656 18.171875 23.28125 16 23.28125 C 13.828125 23.28125 11.898438 22.589844 10.75 21.65625 C 11.390625 23.390625 13.445313 25 16 25 C 18.554688 25 20.609375 23.398438 21.25 21.53125 Z"/><title>reddit</title></svg>
7851</a></li>
7852                </ul>
7853            </div>
7854            </div>
7855        </div>
7856    </div>
7857</div>
7858<div class="text-center py-4 s767:w-[70%] s767:mx-auto">
7859    <small class="text-sm">
7860    ©Copyright 2026, Safewayz LLC &amp; Hankey&#039;s Toys®, All Rights Reserved.	
7861</small>
7862</div>
7863</div></footer>
7864<div
7865    x-data="initNewsletterPopup(&#x7B;&quot;enabled&quot;&#x3A;true,&quot;cookieLifetime&quot;&#x3A;168,&quot;delayTime&quot;&#x3A;30,&quot;excludedPages&quot;&#x3A;&#x5B;&quot;&#x5C;&#x2F;checkout&quot;,&quot;&#x5C;&#x2F;cart&quot;&#x5D;,&quot;subscribeUrl&quot;&#x3A;&quot;https&#x3A;&#x5C;&#x2F;&#x5C;&#x2F;www.mrhankeystoys.com&#x5C;&#x2F;newsletterpopup&#x5C;&#x2F;ajax&#x5C;&#x2F;subscribe&#x5C;&#x2F;&quot;,&quot;formKey&quot;&#x3A;&quot;9SFsreOEuib59vuZ&quot;&#x7D;)"
7866    x-show="showPopup"
7867    x-cloak
7868    class="fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50"
7869    @keydown.escape="closePopup()"
7870    style="display: none;"
7871>
7872    <div class="bg-white rounded-lg shadow-xl max-w-md w-full mx-4 p-6 relative">
7873        <button
7874            @click="closePopup()"
7875            class="absolute top-4 right-4 transition-colors"
7876            aria-label="Close"
7877        >
7878            <svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
7879                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
7880            </svg>
7881        </button>
7882        <div class="text-center flex flex-col">
7883            <div class="pop-img flex justify-center items-center mb-4"><img src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/images/Logo-popup.png" width="137" height="90" alt="HankeysToys" /></div>
7884            <strong class="mb-2">Why Hello There, ENJOY</strong>
7885            <div class="text-5xl font-bold uppercase mb-2">15% OFF</div>
7886            <h2 class="text-2xl font-bold mb-4">
7887                Stay Updated!            </h2>
7888            <p class="mb-6">
7889                Subscribe to our newsletter and get the latest updates on new products and exclusive offers.            </p>
7890
7891            <form
7892                @submit.prevent="submitNewsletter()"
7893                class="space-y-4"
7894            >
7895                <input type="hidden" name="form_key" :value="getFormKey()">
7896                <div class="control relative">
7897                    <input
7898                        type="email"
7899                        x-model="email"
7900                        placeholder=""
7901                        required
7902                        class="form-input peer h-12 bg-transparent relative z-[1]"
7903                    >
7904                    <label class="label text-sm bg-white px-1 absolute duration-300 transform -translate-y-6 top-3 origin-[0] start-2.5 peer-placeholder-shown:translate-y-0 peer-focus:-translate-y-6 rtl:peer-focus:translate-x-1/4 rtl:peer-focus:left-auto peer-placeholder-shown:mt-0 peer-focus:z-[11] peer-focus:bg-white" for="email">
7905                        <span>Enter your email address</span>
7906                    </label>
7907                </div>
7908
7909                <button
7910                    type="submit"
7911                    :disabled="loading"
7912                    class="btn btn-primary disabled:opacity-75 text-lg font-bold w-full"
7913                >
7914                    <span x-show="!loading">Get My 15% Off</span>
7915                    <span x-show="loading">Subscribing...</span>
7916                </button>
7917            </form>
7918
7919            <button
7920                @click="closePopup()"
7921                class="mt-4 text-sm transition-colors"
7922            >
7923                No thanks, maybe later            </button>
7924        </div>
7925    </div>
7926</div>
7927
7928<script>
7929    function initNewsletterPopup(config) {
7930        return {
7931            showPopup: false,
7932            email: '',
7933            loading: false,
7934            config: config,
7935            cookieName: 'ktpl_newsletter_popup_shown',
7936
7937            init() {
7938                if (this.config.enabled && this.shouldShowPopup()) {
7939                    setTimeout(() => {
7940                        this.showPopup = true;
7941                    }, this.config.delayTime * 1000);
7942                }
7943            },
7944
7945            shouldShowPopup() {
7946                // Check excluded pages
7947                const currentPath = window.location.pathname;
7948                if (this.config.excludedPages.some(path => currentPath.includes(path))) {
7949                    return false;
7950                }
7951
7952                // Check cookie
7953                return !this.getCookie(this.cookieName);
7954            },
7955
7956            closePopup() {
7957                this.showPopup = false;
7958                this.setCookie();
7959            },
7960
7961            getFormKey() {
7962                const footerNewsletterFormKey = document.querySelector(
7963                    '#newsletter-validate-detail input[name="form_key"]'
7964                );
7965
7966                if (footerNewsletterFormKey && footerNewsletterFormKey.value) {
7967                    return footerNewsletterFormKey.value;
7968                }
7969
7970                const formKeyInput = document.querySelector('input[name="form_key"]');
7971                if (formKeyInput && formKeyInput.value) {
7972                    return formKeyInput.value;
7973                }
7974
7975                return this.config.formKey || '';
7976            },
7977
7978            async submitNewsletter() {
7979                if (!this.email) return;
7980
7981                this.loading = true;
7982
7983                try {
7984                    const formData = new FormData();
7985                    const formKey = this.getFormKey();
7986
7987                    formData.append('email', this.email);
7988                    formData.append('form_key', formKey);
7989
7990                    const response = await fetch(this.config.subscribeUrl, {
7991                        method: 'POST',
7992                        body: formData,
7993                        credentials: 'same-origin',
7994                        headers: {
7995                            'Accept': 'application/json',
7996                            'X-Requested-With': 'XMLHttpRequest'
7997                        }
7998                    });
7999
8000                    const result = await response.json();
8001
8002                    if (response.ok && result.success) {
8003                        this.showSuccessMessage(result.message || 'Thank\u0020you\u0020for\u0020subscribing\u0020to\u0020our\u0020newsletter\u0021');
8004                        this.closePopup();
8005                    } else {
8006                        throw new Error(result.message || 'Subscription failed');
8007                    }
8008                } catch (error) {
8009                    this.showErrorMessage(error.message || 'There\u0020was\u0020an\u0020error\u0020subscribing.\u0020Please\u0020try\u0020again.');
8010                } finally {
8011                    this.loading = false;
8012                }
8013            },
8014
8015            setCookie() {
8016                const date = new Date();
8017                date.setTime(date.getTime() + (this.config.cookieLifetime * 60 * 60 * 1000));
8018                const expires = "expires=" + date.toUTCString();
8019                document.cookie = `${this.cookieName}=true;${expires};path=/;SameSite=Lax`;
8020            },
8021
8022            getCookie(name) {
8023                const nameEQ = name + "=";
8024                const ca = document.cookie.split(';');
8025                for (let i = 0; i < ca.length; i++) {
8026                    let c = ca[i];
8027                    while (c.charAt(0) === ' ') c = c.substring(1, c.length);
8028                    if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
8029                }
8030                return null;
8031            },
8032
8033            showSuccessMessage(message) {
8034                if (typeof window.dispatchMessages !== "undefined") {
8035                    window.dispatchMessages([{
8036                        text: message,
8037                        type: 'success'
8038                    }], 5000);
8039                }
8040            },
8041
8042            showErrorMessage(message) {
8043                if (typeof window.dispatchMessages !== "undefined") {
8044                    window.dispatchMessages([{
8045                        text: message,
8046                        type: 'error'
8047                    }], 5000);
8048                }
8049            }
8050        }
8051    }
8052
8053    window.addEventListener('alpine:init', () => {
8054        Alpine.data('initNewsletterPopup', initNewsletterPopup);
8055    }, { once: true });
8056</script>
vendor: 1 bytes, line 8056
8056
8057<script  nonce="cHZoYWFqaG9hNHVmNDZuMjE5ZWN5MTRnamRuM3kzcnk=">window.psloginButtons = "\n    \u003Cdiv class=\u0022pslogin-block pslogin-login\u0022\u003E\n\n        \u003Cdiv class=\u0022pslogin-title text-sm text-center mb-8\u0022\u003E\n            Sign In with your social account        \u003C\/div\u003E\n\n        \u003Cdiv x-data=\u0022initPsloginButtons()\u0022 class=\u0022pslogin-buttons\u0022\u003E\n            \u003Cul class=\u0022flex flex-wrap gap-5 items-center justify-center\u0022\u003E\n                \u003Ctemplate x-for=\u0022btn in buttons\u0022\u003E\n                    \u003Cli x-show=\u0022btn.visible || show\u0022 x-transition.duration.500ms class=\u0022pslogin-button md:w-auto\u0022 :class=\u0022{[btn.code]: true, \u0027w-full md:min-w-[215px]\u0027: btn.design === \u0027default\u0027}\u0022 :title=\u0022btn.text\u0022\u003E\n                        \u003Ca @click.prevent=\u0022login(btn)\u0022 class=\u0022pslogin-button-link pslogin-button-click\u0022 rel=\u0022nofollow\u0022 href=\u0022#\u0022\u003E\n                            \u003Ctemplate x-if=\u0022btn.design === \u0027default\u0027\u0022\u003E\n                                \u003Cspan class=\u0022block\u0022\u003E\n                                    \u003Ctemplate x-if=\u0022btn.image\u0022\u003E\n                                        \u003Cspan class=\u0022block  btn white-btn overflow-hidden hover:opacity-90\u0022\u003E\n                                            \u003Cimg class=\u0022max-w-[200px] mx-auto\u0022 :src=\u0022btn.image\u0022 :alt=\u0022\u0027Icon \u0027 + btn.code\u0022 \/\u003E\n                                        \u003C\/span\u003E\n                                    \u003C\/template\u003E\n                                    \u003Ctemplate x-if=\u0022! btn.image\u0022\u003E\n                                        \u003Cspan class=\u0022flex items-center gap-2 px-3 py-1 btn white-btn overflow-hidden hover:opacity-90\u0022\n                                        \u003E\n                                            \u003Cspan class=\u0022w-8 h-8 shrink-0 block content-center\u0022\u003E\n                                                \u003Cimg\n                                                    class=\u0022max-w-40\u0022\n                                                    :src=\u0022btn.icon\u0022\n                                                    :alt=\u0022\u0027Icon \u0027 + btn.code\u0022\n                                                    width=\u002232\u0022\n                                                    height=\u002232\u0022\n                                                \/\u003E\n\n                                            \u003C\/span\u003E\n                                            \u003Cspan class=\u0022font-semibold text-sm leading-none text-left\u0022 x-text=\u0022btn.text\u0022\u003E\u003C\/span\u003E\n                                        \u003C\/span\u003E\n                                    \u003C\/template\u003E\n                                \u003C\/span\u003E\n                            \u003C\/template\u003E\n\n                            \u003Ctemplate x-if=\u0022btn.design !== \u0027default\u0027\u0022\u003E\n                                \u003Cspan class=\u0022w-14 h-14 block\u0022\u003E\n                                    \u003Ctemplate x-if=\u0022btn.image\u0022\u003E\n                                        \u003Cspan class=\u0022w-full h-full block overflow-hidden shadow-lg\u0022\n                                              :class=\u0022btn.design === \u0027square\u0027 ? \u0027rounded-lg\u0027 : \u0027rounded-full\u0027\u0022\n                                        \u003E\n                                            \u003Cimg class=\u0022w-full h-full object-cover\u0022 :src=\u0022btn.image\u0022 :alt=\u0022\u0027Icon \u0027 + btn.code\u0022 \/\u003E\n                                        \u003C\/span\u003E\n                                    \u003C\/template\u003E\n                                    \u003Ctemplate x-if=\u0022! btn.image\u0022\u003E\n                                        \u003Cspan class=\u0022w-full h-full block overflow-hidden shadow-lg\u0022\n                                              :class=\u0022btn.design === \u0027square\u0027 ? \u0027rounded-lg\u0027 : \u0027rounded-full\u0027\u0022\n                                              :style=\u0022{\n                                                background: btn.backgroundColor ? btn.backgroundColor : \u0027#1a1a1a\u0027,\n                                                color: btn.textColor ? btn.textColor : \u0027#fff\u0027,\n                                                border: btn.backgroundColor ? `1px solid ${btn.borderColor ? btn.borderColor : btn.backgroundColor}` : \u0027transparent\u0027\n                                             }\u0022\n                                        \u003E\n                                            \u003Cimg class=\u0022w-full h-full object-cover\u0022\n                                                 :src=\u0022btn.icon\u0022\n                                                 :alt=\u0022\u0027Icon \u0027 + btn.code\u0022\n                                                 width=\u002232\u0022\n                                                 height=\u002232\u0022\n                                            \/\u003E\n                                        \u003C\/span\u003E\n                                    \u003C\/template\u003E\n                                \u003C\/span\u003E\n                            \u003C\/template\u003E\n\n                        \u003C\/a\u003E\n                    \u003C\/li\u003E\n                \u003C\/template\u003E\n            \u003C\/ul\u003E\n\n                    \u003C\/div\u003E\n\n    \u003C\/div\u003E\n    \u003Cdiv style=\u0022clear: both;\u0022\u003E\u003C\/div\u003E\n\n    \n\u003Cscript\u003E\n    function initPsloginButtons() {\n        let buttons = [{\u0022code\u0022:\u0022apple\u0022,\u0022icon\u0022:\u0022https:\\\/\\\/www.mrhankeystoys.com\\\/static\\\/version1790675038\\\/frontend\\\/Krish\\\/mrhankeytoys\\\/en_US\\\/Plumrocket_SocialLoginPro\\\/images\\\/networks\\\/apple_icon.svg\u0022,\u0022design\u0022:\u0022default\u0022,\u0022height\u0022:650,\u
80570022width\u0022:650,\u0022visible\u0022:true,\u0022textColor\u0022:\u0022\u0022,\u0022backgroundColor\u0022:\u0022#000\u0022,\u0022borderColor\u0022:\u0022\u0022,\u0022openOnPage\u0022:false,\u0022text\u0022:\u0022Continue with Apple\u0022,\u0022image\u0022:\u0022\u0022,\u0022url\u0022:\u0022https:\\\/\\\/www.mrhankeystoys.com\\\/pslogin\\\/account\\\/douse\\\/type\\\/apple\\\/refresh\\\/1791037041\\\/customer_action\\\/login\\\/\u0022},{\u0022code\u0022:\u0022twitter\u0022,\u0022icon\u0022:\u0022https:\\\/\\\/www.mrhankeystoys.com\\\/static\\\/version1790675038\\\/frontend\\\/Krish\\\/mrhankeytoys\\\/en_US\\\/Plumrocket_SocialLoginPro\\\/images\\\/networks\\\/twitter_icon.svg\u0022,\u0022design\u0022:\u0022default\u0022,\u0022height\u0022:630,\u0022width\u0022:650,\u0022visible\u0022:true,\u0022textColor\u0022:\u0022#ffffff\u0022,\u0022backgroundColor\u0022:\u0022#28a9e2\u0022,\u0022borderColor\u0022:\u0022\u0022,\u0022openOnPage\u0022:true,\u0022text\u0022:\u0022Continue with X\u0022,\u0022image\u0022:\u0022\u0022,\u0022url\u0022:\u0022https:\\\/\\\/www.mrhankeystoys.com\\\/pslogin\\\/account\\\/douse\\\/type\\\/twitter\\\/refresh\\\/1791037041\\\/customer_action\\\/login\\\/\u0022},{\u0022code\u0022:\u0022google\u0022,\u0022icon\u0022:\u0022https:\\\/\\\/www.mrhankeystoys.com\\\/static\\\/version1790675038\\\/frontend\\\/Krish\\\/mrhankeytoys\\\/en_US\\\/Plumrocket_SocialLoginPro\\\/images\\\/networks\\\/google_icon.svg\u0022,\u0022design\u0022:\u0022default\u0022,\u0022height\u0022:450,\u0022width\u0022:450,\u0022visible\u0022:true,\u0022textColor\u0022:\u0022#1a1a1a\u0022,\u0022backgroundColor\u0022:\u0022#fff\u0022,\u0022borderColor\u0022:\u0022#d9d9d9\u0022,\u0022openOnPage\u0022:false,\u0022text\u0022:\u0022Continue with Google\u0022,\u0022image\u0022:\u0022\u0022,\u0022url\u0022:\u0022https:\\\/\\\/www.mrhankeystoys.com\\\/pslogin\\\/account\\\/douse\\\/type\\\/google\\\/refresh\\\/1791037041\\\/customer_action\\\/login\\\/\u0022},{\u0022code\u0022:\u0022amazon\u0022,\u0022icon\u0022:\u0022https:\\\/\\\/www.mrhankeystoys.com\\\/static\\\/version1790675038\\\/frontend\\\/Krish\\\/mrhankeytoys\\\/en_US\\\/Plumrocket_SocialLoginPro\\\/images\\\/networks\\\/amazon_icon.svg\u0022,\u0022design\u0022:\u0022default\u0022,\u0022height\u0022:500,\u0022width\u0022:720,\u0022visible\u0022:true,\u0022textColor\u0022:\u0022\u0022,\u0022backgroundColor\u0022:\u0022#ff8e2e\u0022,\u0022borderColor\u0022:\u0022\u0022,\u0022openOnPage\u0022:false,\u0022text\u0022:\u0022Continue with Amazon\u0022,\u0022image\u0022:\u0022\u0022,\u0022url\u0022:\u0022https:\\\/\\\/www.mrhankeystoys.com\\\/pslogin\\\/account\\\/douse\\\/type\\\/amazon\\\/refresh\\\/1791037041\\\/customer_action\\\/login\\\/\u0022}];\n\n        return {\n            buttons,\n            show: false,\n            title: \u0027show\\u0020more\u0027,\n            toggle() {\n                this.show = !this.show;\n                this.title = this.show ?\n                    \u0027show\\u0020less\u0027 :\n                    \u0027show\\u0020more\u0027;\n            },\n            hasHidden() {\n                return this.buttons.filter(btn =\u003E !btn.visible).length \u003E 0;\n            },\n            login(btn) {\n                if (! btn.url) {\n                    alert(\u0027The\\u0020Login\\u0020Application\\u0020was\\u0020not\\u0020configured\\u0020correctly.\\u0020If\\u0020your\\u0020are\\u0020the\\u0020admin\\u0020of\\u0020store\\u003A\\u0020Please\\u0020activate\\u0020\\u201CEnable\\u0020Logging\\u201D\\u0020in\\u0020Magento\\u0020Login\\u0020Extension\\u0020and\\u0020try\\u0020again\\u0020to\\u0020see\\u0020error\\u0020details.\u0027);\n                    return false;\n                }\n\n                let href = btn.url,\n                    openOnPage = btn.openOnPage,\n                    width = btn.width,\n                    height = btn.height;\n\n                if (openOnPage) {\n                    window.dispatchEvent(new CustomEvent(\u0022reload-customer-section-data\u0022));\n                    window.location.href = href;\n                    return;\n                }\n\n                const bc = new BroadcastChannel(\u0027loginChannel\u0027);\n                bc.onmessage = (event) =\u003E {\n                    if (event.data.type === \u0027loginSuccess\u0027) {\n                        document.getElementById(\u0027pslogin-login-referer\u0027).value = event.data.referer;\n                        document.getElementById(\u0027pslogin-login-action\u0027).value = event.data.action;\n                        document.getElementById(\u0027pslogin-login-submit\u0027).click();\n                    }\n                    bc.close();\n                };\n\n                width = width ? width : 650;\n                height = height ? height : 350;\n\n                if (href.indexOf(\u0027js_login_method\u0027) === 0) {\n                    \/\/ For Telegram\n                    \/\/ prCustomJsLoginMethod(href, width, height);\n                    return;\n                }\n\n                const popup = this.openPopup(href, width, height);\n                this.loadingMessage(popup);\n\n                return false;\n            },\n            \/**\n             * Open OAuth window using Modal\/InitOAuth action.\n             *\n             * @since 3.10.0\n             * @param href\n             * @param width\n             * @param height\n             * @returns {WindowProxy}\n             *\/\n            openPopup(href, width, height) {\n                const left = parseInt((window.innerWidth - width) \/ 2);\n                const top = parseInt((window.innerHeight - height) \/ 2);\n\n                const params = [\n                    \u0027resizable=yes\u0027,\n                    \u0027scrollbars=no\u0027,\n                    \u0027toolbar=no\u0027,\n                    \u0027menubar=no\u0027,\n                    \u0027location=no\u0027,\n                    \u0027directories=no\u0027,\n                    \u0027status=yes\u0027,\n                    \u0027width=\u0027 + width,\n                    \u0027height=\u0027 + height,\n                    \u0027left=\u0027 + left,\n                    \u0027top=\u0027 + top\n                ];\n\n                const popup = window.open(href, \u0027pslogin_popup\u0027, params.join(\u0027,\u0027));\n                popup.focus();\n\n                return popup;\n            },\n            loadingMessage(popup) {\n                const loaderText = \u0027Loading...\u0027;\n                let html = \u0027\u003C!DOCTYPE html\u003E\u003Chtml style=\u0022height: 100%;\u0022\u003E\u003Chead\u003E\u003Cmeta name=\u0022viewport\u0022 content=\u0022width=device-width, initial-scale=1\u0022\u003E\u003Ctitle\u003E\u0027 + loaderText + \u0027\u003C\/title\u003E\u003C\/head\u003E\u0027;\n                html += \u0027\u003Cbody style=\u0022height: 100%; margin: 0; padding: 0;\u0022\u003E\u0027;\n                html += \u0027\u003Cdiv style=\u0022text-align: center; height: 100%;\u0022\u003E\u003Cdiv id=\u0022loader\u0022 style=\u0022top: 50%; position: relative; margin-top: -50px; color: #646464; height:25px; font-size: 25px; text-align: center; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;\u0022\u003E\u0027 + loaderText + \u0027\u003C\/div\u003E\u003C\/div\u003E\u0027;\n                html += \u0027\u003C\/body\u003E\u003C\/html\u003E\u0027;\n\n                popup.document.documentElement.innerHTML = html;\n            }\n        };\n    }\n\u003C\/script\u003E\n";</script>
vendor: 1 bytes, line 8057
8057
8058<script>
8059    (() => {
8060        function src_default(Alpine) {
8061            Alpine.directive("intersect", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
8062                let evaluate = evaluateLater(expression);
8063                let options = {
8064                    rootMargin: getRootMargin(modifiers),
8065                    threshold: getThreshold(modifiers)
8066                };
8067                let observer = new IntersectionObserver((entries) => {
8068                    entries.forEach((entry) => {
8069                        if (entry.isIntersecting === (value === "leave"))
8070                            return;
8071                        evaluate();
8072                        modifiers.includes("once") && observer.disconnect();
8073                    });
8074                }, options);
8075                observer.observe(el);
8076                cleanup(() => {
8077                    observer.disconnect();
8078                });
8079            }));
8080        }
8081        function getThreshold(modifiers) {
8082            if (modifiers.includes("full"))
8083                return 0.99;
8084            if (modifiers.includes("half"))
8085                return 0.5;
8086            if (!modifiers.includes("threshold"))
8087                return 0;
8088            let threshold = modifiers[modifiers.indexOf("threshold") + 1];
8089            if (threshold === "100")
8090                return 1;
8091            if (threshold === "0")
8092                return 0;
8093            return Number(`.${threshold}`);
8094        }
8095        function getLengthValue(rawValue) {
8096            let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/);
8097            return match ? match[1] + (match[2] || "px") : void 0;
8098        }
8099        function getRootMargin(modifiers) {
8100            const key = "margin";
8101            const fallback = "0px 0px 0px 0px";
8102            const index = modifiers.indexOf(key);
8103            if (index === -1)
8104                return fallback;
8105            let values = [];
8106            for (let i = 1; i < 5; i++) {
8107                values.push(getLengthValue(modifiers[index + i] || ""));
8108            }
8109            values = values.filter((v) => v !== void 0);
8110            return values.length ? values.join(" ").trim() : fallback;
8111        }
8112
8113        document.addEventListener("alpine:init", () => {
8114            window.Alpine.plugin(src_default);
8115        });
8116    })();
8117</script>
vendor: 1 bytes, line 8117
8117
8118<script>
8119    for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]":"intersect",".product-info [x-data]":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]":"intersect","#notice-cookie-block":"idle"})) {
8120        document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`));
8121    }
8122</script>
vendor: 1 bytes, line 8122
8122
8123<script>
8124    (function () {
8125        "use strict";
8126
8127        const hasAlpine = new Promise(resolve => {
8128            window.addEventListener('alpine:initialized', resolve, {once: true, passive: true});
8129        });
8130
8131        const hasInteract = new Promise(resolve => {
8132            (events => {
8133                const onInteract = () => {
8134                    resolve();
8135                    events.forEach(type => window.removeEventListener(type, onInteract));
8136                }
8137                events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true}))
8138            })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown'])
8139        });
8140
8141        const onIntersect = (el) => {
8142            return new Promise(resolve => {
8143                const observer = new IntersectionObserver(entries => {
8144                    for (const entry of entries) {
8145                        if (entry.isIntersecting) {
8146                            observer.disconnect()
8147                            resolve();
8148                        }
8149                    }
8150                }, {});
8151                observer.observe(el);
8152            });
8153        }
8154
8155        function runComponent(el) {
8156            hasAlpine.then(() => {
8157                el.removeAttribute('x-ignore');
8158                queueMicrotask(() => Alpine.initTree(el));
8159            });
8160        }
8161
8162        function initDeferredComponents() {
8163            document.querySelectorAll('[x-data][x-defer]').forEach(el => {
8164                el.setAttribute('x-ignore', '');
8165                const deferUntil = (el.getAttribute('x-defer') || '').trim();
8166                switch (deferUntil) {
8167                    case 'interact':
8168                        hasInteract.then(() => runComponent(el));
8169                        break;
8170                    case 'intersect':
8171                        onIntersect(el).then(() => runComponent(el))
8172                        break;
8173                    case 'idle':
8174                        window.requestIdleCallback
8175                            ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000})
8176                            : setTimeout(() => runComponent(el), 4000);
8177                        break;
8178                    case 'eager':
8179                        runComponent(el);
8180                        break;
8181                    default:
8182                        if (deferUntil.startsWith('event:') && deferUntil.length > 6) {
8183                            window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true});
8184                        }
8185                }
8186            });
8187        }
8188
8189        window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true});
8190    })()
8191</script>
vendor: 1 bytes, line 8191
8191
8192<script>
8193    (() => {
8194        function alpineSnapSlider(Alpine) {
8195            function roundUpIfGreaterThan(number, min = 8) {
8196                const decimalPart = number - Math.floor(number);
8197                return decimalPart >= min ? Math.ceil(number) : Math.floor(number);
8198            }
8199            Alpine.directive("snap-slider", (el, { modifiers }, { cleanup }) => {
8200                const track = el.querySelector("[data-track]");
8201                if (!track) {
8202                    console.warn(
8203                        "No Slider track defined, reverting back to CSS slider.\nPlease create a wrapper element for your slides with the attribute data-track"
8204                    );
8205                    return;
8206                }
8207                let initialLoad = true;
8208                let pager = el.querySelector("[data-pager]");
8209                let slides = [];
8210                let inViewObserver, mutationObserver, resizeObserver;
8211                const navBtns = Array.from(
8212                    el.querySelectorAll("[data-next], [data-prev]")
8213                );
8214                const slideLabelSepparator = el.dataset.slideLabelSepparator || "of";
8215                const useAutoPager = modifiers.includes("auto-pager");
8216                const useGroupPager = modifiers.includes("group-pager");
8217                const sliderLabel = el.hasAttribute("aria-label") && el.getAttribute("aria-label").toLowerCase().trim().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
8218                const sliderId = el.id || sliderLabel || "slider";
8219                const markerIdName = "data-target-id";
8220                const pagerClasses = el.dataset.pagerClass || "pager";
8221                const markerClasses = el.dataset.markerClass || "pager-item";
8222                function getInViewItems() {
8223                    const inViewSlides = track.querySelectorAll("[data-in-view]");
8224                    const firstInViewSlide = inViewSlides[0] || null;
8225                    const lastInViewSlide = inViewSlides[inViewSlides.length - 1] || null;
8226                    const isAtStart = firstInViewSlide === slides[0];
8227                    const isAtEnd = lastInViewSlide === slides[slides.length - 1];
8228                    return {
8229                        inViewSlides,
8230                        totalInViewSlides: inViewSlides.length,
8231                        firstInViewSlide,
8232                        lastInViewSlide,
8233                        isAtStart,
8234                        isAtEnd,
8235                        hasNoOverflow: isAtStart && isAtEnd
8236                    };
8237                }
8238                function groupPagerMarkers() {
8239                    if (!pager || !useGroupPager) return;
8240                    const totalVisibleSlides = roundUpIfGreaterThan(
8241                        track.offsetWidth / slides[0].offsetWidth
8242                    );
8243                    const markers = Array.from(pager.querySelectorAll("a, button"));
8244                    markers.forEach((marker, index) => {
8245                        marker.style.display = index % totalVisibleSlides === 0 ? null : "none";
8246                    });
8247                }
8248                function handleInView(entries) {
8249                    entries.forEach((entry) => {
8250                        const marker = pager && (pager.querySelector(`[href="#${entry.target.id}"]`) || pager.querySelector(
8251                            `[${markerIdName}="${entry.target.id}"]`
8252                        ));
8253                        entry.target.toggleAttribute(
8254                            "data-in-view",
8255                            entry.isIntersecting
8256                        );
8257                        entry.target.toggleAttribute("inert", !entry.isIntersecting);
8258                        marker?.setAttribute("aria-current", entry.isIntersecting);
8259                        marker?.setAttribute(
8260                            "tabindex",
8261                            entry.isIntersecting ? "0" : "-1"
8262                        );
8263                    });
8264                    const { isAtStart, isAtEnd, hasNoOverflow } = getInViewItems();
8265                    navBtns.forEach((btn) => {
8266                        if (btn.hasAttribute("data-next")) {
8267                            btn.style.visibility = hasNoOverflow ? "hidden" : null;
8268                            isAtEnd ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled");
8269                        }
8270                        if (btn.hasAttribute("data-prev")) {
8271                            btn.style.visibility = hasNoOverflow ? "hidden" : null;
8272                            isAtStart ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled");
8273                        }
8274                    });
8275                    if (pager) {
8276                        pager.style.visibility = hasNoOverflow ? "hidden" : null;
8277                    }
8278                    if (!initialLoad) {
8279                        el.dispatchEvent(
8280                            new CustomEvent("slideChange", { detail: getInViewItems() })
8281                        );
8282                    } else {
8283                        initialLoad = false;
8284                    }
8285                    if (document.activeElement.parentElement.hasAttribute("data-pager")) {
8286                        const activeItems = pager.querySelectorAll('[tabindex="0"]');
8287                        if (activeItems.length) {
8288                            activeItems[0].focus();
8289                        }
8290                    }
8291                }
8292                function getSlides() {
8293                    if (!track) return [];
8294                    return Array.from(track.children).filter(
8295                        (child) => child.tagName.toLowerCase() !== "template" && child.tagName.toLowerCase() !== "script"
8296                    );
8297                }
8298                function refreshSlides() {
8299                    initialLoad = true;
8300                    slides = getSlides();
8301                    setupSlides();
8302                    if (useAutoPager) {
8303                        createPager();
8304                    } else {
8305                        setupPager();
8306                    }
8307                    groupPagerMarkers();
8308                    setupObservers();
8309                }
8310                function setupSlides() {
8311                    slides = getSlides();
8312                    slides.forEach((slide, index) => {
8313                        const totalSlides = slides.length;
8314                        const currentSlide = index + 1;
8315                        const existingLabel = slide.getAttribute("aria-label") || "";
8316                        const isImage = slide.tagName.toLowerCase() === "img" || slide.tagName.toLowerCase() === "picture";
8317                        const slideLabelTag = isImage ? "alt" : "aria-label";
8318                        const hasAutoLabel = existingLabel.startsWith(`${currentSlide} ${slideLabelSepparator} `);
8319                        if (!slide.hasAttribute("id")) {
8320                            slide.setAttribute("id", `${sliderId}-item-${currentSlide}`);
8321                        }
8322
8323                        if ((!slide.hasAttribute(slideLabelTag) || slide.getAttribute(slideLabelTag) === "") || hasAutoLabel) {
8324                            slide.setAttribute(slideLabelTag, `${currentSlide} ${slideLabelSepparator} ${totalSlides}`);
8325                        }
8326
8327                        if (slide.tagName.toLowerCase() === "div" && !slide.hasAttribute("role")) {
8328                            slide.setAttribute("role", "group");
8329                        }
8330
8331                        if (pager && !isImage) {
8332                            slide.setAttribute("role", "tabpanel");
8333                        }
8334
8335                        if (slide.getAttribute('role') === "group") {
8336                            slide.setAttribute("aria-roledescription", "item");
8337                        }
8338                    });
8339                    if (!el.hasAttribute("role")) {
8340                        el.setAttribute("role", "region");
8341                    }
8342                    if (!el.hasAttribute("aria-roledescription")) {
8343                        el.setAttribute("aria-roledescription", "carousel");
8344                    }
8345                    track.setAttribute("tabindex", 0);
8346                    track.setAttribute("aria-live", "polite");
8347                }
8348                function setupNav() {
8349                    navBtns.forEach((btn) => {
8350                        btn.setAttribute("disabled", "");
8351                        btn.removeAttribute("hidden");
8352                        btn.classList.remove("invisible");
8353                        btn.style.visibility = null;
8354                    });
8355                }
8356                function createPager() {
8357                    const newPager = document.createElement("nav");
8358                    newPager.setAttribute("data-pager", "");
8359                    newPager.setAttribute("role", "tablist");
8360                    newPager.classList.add(...pagerClasses.split(" "));
8361
8362                    slides.forEach((slide, index) => {
8363                        const marker = document.createElement("button");
8364                        const slideId = slide.id || `${sliderId}-item-${index + 1}`;
8365                        marker.setAttribute(markerIdName, slideId);
8366                        marker.classList.add(...markerClasses.split(" "));
8367                        setupPagerMarker(marker, index);
8368                        newPager.appendChild(marker);
8369
8370                        if (slide.tagName.toLowerCase() !== "img" && slide.tagName.toLowerCase() !== "picture") {
8371                            slide.removeAttribute("aria-roledescription");
8372                            slide.setAttribute("role", "tabpanel");
8373                        }
8374                    });
8375
8376                    if (pager) {
8377                        pager.setAttribute("role", "tablist");
8378                        pager.replaceChildren(...newPager.children);
8379                    } else {
8380                        track.after(newPager);
8381                        pager = el.querySelector("[data-pager]");
8382                    }
8383                }
8384                function setupPager() {
8385                    if (!pager) return;
8386                    pager.setAttribute("role", "tablist");
8387                    const items = Array.from(pager.querySelectorAll("a, button"));
8388                    items.forEach((marker, index) => setupPagerMarker(marker, index));
8389                }
8390                function setupPagerMarker(marker, index) {
8391                    const markerId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(markerIdName);
8392                    const slideId = markerId || `${sliderId}-item-${index + 1}`;
8393                    if (!markerId) {
8394                        marker.setAttribute(markerIdName, slideId);
8395                    }
8396                    marker.setAttribute("role", "tab");
8397                    marker.setAttribute("aria-controls", slideId);
8398                    marker.setAttribute("aria-posinset", index + 1);
8399                    marker.setAttribute("aria-setsize", slides.length);
8400                    marker.setAttribute("tabindex", "-1");
8401                    if (!marker.hasAttribute("aria-label")) {
8402                        marker.setAttribute("aria-label", `Slide ${index + 1}`);
8403                    }
8404                }
8405                function setupObservers() {
8406                    if (inViewObserver) {
8407                        inViewObserver.disconnect();
8408                    }
8409                    inViewObserver = new IntersectionObserver(
8410                        handleInView.bind(track),
8411                        { root: track, threshold: 0.8 }
8412                    );
8413                    slides.forEach((slide) => inViewObserver.observe(slide));
8414                }
8415                function setupMutationObserver() {
8416                    mutationObserver = new MutationObserver(refreshSlides.bind(track));
8417                    mutationObserver.observe(track, {
8418                        childList: true,
8419                        subtree: false
8420                    });
8421                }
8422                function setupResizeObserver() {
8423                    resizeObserver = new ResizeObserver(groupPagerMarkers.bind(el));
8424                    resizeObserver.observe(el);
8425                }
8426                function goToSlideDir(dir = "next") {
8427                    const { firstInViewSlide, lastInViewSlide } = getInViewItems();
8428                    const isPrev = dir === "prev";
8429                    let targetSlide = isPrev ? firstInViewSlide?.previousElementSibling : lastInViewSlide?.nextElementSibling;
8430                    if (!targetSlide) return;
8431                    if (targetSlide.tagName.toLowerCase() === "template") {
8432                        targetSlide = isPrev ? targetSlide?.previousElementSibling : targetSlide?.nextElementSibling;
8433                    }
8434                    targetSlide.scrollIntoView({
8435                        block: "nearest",
8436                        inline: isPrev ? "end" : "start",
8437                        behavior: "smooth"
8438                    });
8439                }
8440                function pagerToSlide(event) {
8441                    if (!event.target.closest("[data-pager]")) return;
8442                    const marker = event.target.closest("a, button");
8443                    if (!marker) return;
8444                    event.preventDefault();
8445                    const slideId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(markerIdName);
8446                    const targetSlide = track.querySelector(`#${slideId}`);
8447                    targetSlide?.scrollIntoView({
8448                        block: "nearest",
8449                        inline: "start",
8450                        behavior: "smooth"
8451                    });
8452                }
8453                setupSlides();
8454                setupNav();
8455                if (useAutoPager) {
8456                    createPager();
8457                } else {
8458                    setupPager();
8459                }
8460                setupObservers();
8461                setupMutationObserver();
8462                setupResizeObserver();
8463                function eventHandler(event) {
8464                    const target = event.target.closest(
8465                        "[data-next], [data-prev], [data-pager]"
8466                    );
8467                    if (!target) return;
8468                    if (event.type === "click") {
8469                        if (target.hasAttribute("data-next")) {
8470                            goToSlideDir("next");
8471                        } else if (target.hasAttribute("data-prev")) {
8472                            goToSlideDir("prev");
8473                        } else if (target.closest("[data-pager]")) {
8474                            pagerToSlide(event);
8475                        }
8476                    }
8477                    if (event.type === "keydown" && target.closest("[data-pager]")) {
8478                        if (event.key === "ArrowRight") {
8479                            goToSlideDir("next");
8480                        } else if (event.key === "ArrowLeft") {
8481                            goToSlideDir("prev");
8482                        }
8483                    }
8484                }
8485                el.addEventListener("click", eventHandler);
8486                el.addEventListener("keydown", eventHandler);
8487                cleanup(() => {
8488                    inViewObserver?.disconnect();
8489                    mutationObserver?.disconnect();
8490                    resizeObserver?.disconnect();
8491                    el.removeEventListener("click", eventHandler);
8492                    el.removeEventListener("keydown", eventHandler);
8493                });
8494            });
8495        }
8496
8497        document.addEventListener("alpine:init", () => {
8498            window.Alpine.plugin(alpineSnapSlider);
8499        });
8500    })();
8501</script>
vendor: 1 bytes, line 8501
8501
8502<script>
8503    (() => {
8504        // src/dialog.js
8505        function dialog_default(Alpine) {
8506            Alpine.directive("htmldialog", fylgjaAlpineDialog);
8507
8508            function fylgjaAlpineDialog(el, {
8509                expression,
8510                modifiers
8511            }, {
8512                evaluateLater,
8513                cleanup
8514            }) {
8515                const evaluate = expression.length ? evaluateLater(expression) : () => {};
8516                const lockPageScroll = modifiers.includes("noscroll");
8517                const closeby = modifierValue(modifiers, "closeby", "any");
8518                el.style.display = null;
8519                el.hidden = false;
8520                el.style.length === 0 && el.removeAttribute("style");
8521                el.addEventListener("keydown", escapeDialog);
8522                el.addEventListener("click", backdropDialog);
8523                el.addEventListener("submit", methodDialog);
8524
8525                function scrollLock(use = true) {
8526                    document.body.style.overflow = use ? "hidden" : "";
8527                }
8528
8529                function methodDialog(event) {
8530                    if (event.target.getAttribute("method") === "dialog" || event.submitter && event.submitter.getAttribute("formmethod") === "dialog") {
8531                        evaluate();
8532                    }
8533                }
8534
8535                function escapeDialog(event) {
8536                    if (event.key !== "Escape")
8537                        return;
8538                    event.preventDefault();
8539                    if (closeby !== "any" && closeby !== "closerequest")
8540                        return;
8541                    evaluate();
8542                }
8543
8544                function backdropDialog(event) {
8545                    if (event.target !== el || closeby !== "any")
8546                        return;
8547                    const rect = el.getBoundingClientRect();
8548                    const isInDialog = rect.top <= event.clientY && event.clientY <= rect.top + rect.height && rect.left <= event.clientX && event.clientX <= rect.left + rect.width;
8549                    if (isInDialog)
8550                        return;
8551                    evaluate();
8552                }
8553                el._x_doShow = () => {
8554                    if (el.hasAttribute("open"))
8555                        return;
8556                    el.showModal();
8557                    scrollLock(lockPageScroll);
8558                };
8559                el._x_doHide = () => {
8560                    if (!el.hasAttribute("open"))
8561                        return;
8562                    el.close();
8563                    scrollLock(false);
8564                };
8565                cleanup(() => {
8566                    el.removeEventListener("keydown", escapeDialog);
8567                    el.removeEventListener("click", backdropDialog);
8568                    el.removeEventListener("submit", methodDialog);
8569                    scrollLock(false);
8570                });
8571            }
8572        }
8573
8574        function modifierValue(modifiers, key, fallback) {
8575            if (modifiers.indexOf(key) === -1)
8576                return fallback;
8577            const rawValue = modifiers[modifiers.indexOf(key) + 1];
8578            if (!rawValue)
8579                return fallback;
8580            if (key === "closeby") {
8581                const allowedValues = ["auto", "none", "closerequest", "any"];
8582                const options = allowedValues.join(", ");
8583                if (!allowedValues.includes(rawValue)) {
8584                    console.warn(
8585                        `"${rawValue}" is not one of the allowed values for closeby: ${options}`
8586                    );
8587                }
8588                return fallback;
8589            }
8590            return rawValue;
8591        }
8592
8593        // src/cdn.js
8594        document.addEventListener("alpine:init", () => {
8595            window.Alpine.plugin(dialog_default);
8596        });
8597    })();
8598</script>
8598
8599
8600<script type="module"
8601        src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/Hyva_Theme/js/alpine3.min.js"
8602        defer
8603        crossorigin
8604></script>
vendor: 1 bytes, line 8604
8604
8605<script>
8606    'use strict';
8607    function dispatchMessages(messages, hideAfter) {
8608        const messagesEvent = new CustomEvent("messages-loaded", {
8609            detail: {
8610                messages: messages,
8611                hideAfter: hideAfter
8612            }
8613        });
8614        window.dispatchEvent(messagesEvent);
8615    }
8616
8617    if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
8618        console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
8619    }
8620
8621    (function( hyva, undefined ) {
8622
8623        hyva.initFormKey = () => {
8624            const inputSelector = 'input[name="form_key"]',
8625                formKey = hyva.getFormKey();
8626
8627            Array.from(document.querySelectorAll(inputSelector)).map(function (input) {
8628                input.value = formKey
8629            });
8630        }
8631
8632        hyva.initMessages = () => {
8633            try {
8634                const messages = hyva.getCookie('mage-messages');
8635                window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
8636
8637                dispatchMessages(window.mageMessages);
8638
8639                                // empty `mage-messages` cookie
8640                const skipSetDomain = true;
8641                hyva.setCookie('mage-messages','', -1, skipSetDomain);
8642
8643            } catch (error) {
8644                console.warn('Error parsing Cookie Messages:', error);
8645            }
8646        }
8647
8648        window.addEventListener('DOMContentLoaded', hyva.initFormKey);
8649        hyva.alpineInitialized(hyva.initMessages)
8650
8651    }( window.hyva = window.hyva || {} ));
8652</script>
vendor: 1 bytes, line 8652
8652
8653<script>
8654    'use strict';
8655    {
8656        const private_content_key = 'mage-cache-storage';
8657        const private_content_expire_key = 'mage-cache-timeout';
8658        const private_content_version_key = 'private_content_version';
8659        const section_data_ids_key = 'section_data_ids';
8660        const mage_cache_session_id_key = 'mage-cache-sessid';
8661        const last_visited_store_key = 'last_visited_store';
8662
8663        const ttl = 3600;
8664
8665        if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
8666            console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
8667        }
8668
8669        function loadSectionData () {
8670            const browserStorage = hyva.getBrowserStorage();
8671            if (!browserStorage) {
8672                typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
8673                    [{
8674                        type: "warning",
8675                        text: "Please enable LocalStorage in your browser."
8676                    }]
8677                );
8678                return;
8679            }
8680            try {
8681                let isInvalid = false;
8682
8683                if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) {
8684                    isInvalid = true;
8685                }
8686                hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false);
8687
8688                if (!hyva.getCookie(mage_cache_session_id_key)) {
8689                    isInvalid = true;
8690                    browserStorage.removeItem(private_content_key);
8691                    const skipSetDomain = true;
8692                    const days = false;
8693                    hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain)
8694                }
8695
8696                const cookieVersion = hyva.getCookie(private_content_version_key);
8697                const storageVersion = browserStorage.getItem(private_content_version_key);
8698
8699                if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) {
8700                    isInvalid = true;
8701                }
8702
8703                const privateContentExpires = browserStorage.getItem(private_content_expire_key);
8704                if (privateContentExpires && new Date(privateContentExpires) < new Date()) {
8705                    browserStorage.removeItem(private_content_key);
8706                }
8707
8708                if (isInvalid && cookieVersion) {
8709                    fetchPrivateContent([]);
8710                } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) {
8711                    const privateContent = JSON.parse(browserStorage.getItem(private_content_key));
8712                    if (
8713                        privateContent &&
8714                        privateContentExpires &&
8715                        privateContent.cart &&
8716                        privateContent.customer
8717                    ) {
8718                        dispatchPrivateContent(privateContent);
8719                    } else {
8720                        fetchPrivateContent([]);
8721                    }
8722                } else {
8723                    if (document.getElementById('default-section-data')) {
8724                        const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim());
8725                        dispatchPrivateContent(privateContent);
8726                    } else {
8727                        dispatchPrivateContent({});
8728                    }
8729                }
8730
8731            } catch (error) {
8732                console.warn('Error retrieving Private Content:', error);
8733            }
8734        }
8735
8736        hyva.alpineInitialized(loadSectionData)
8737        window.addEventListener('reload-customer-section-data', loadSectionData);
8738
8739        window.processSectionDataBeforeDispatch = window.processSectionDataBeforeDispatch || (data => data);
8740
8741        function dispatchPrivateContent(data) {
8742
8743            const privateContentEvent = new CustomEvent("private-content-loaded", {
8744                detail: {
8745                    data: window.processSectionDataBeforeDispatch(data)
8746                }
8747            });
8748            window.dispatchEvent(privateContentEvent);
8749        }
8750
8751        function fetchPrivateContent(sections) {
8752            fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, {
8753                method: 'GET',
8754                headers: {
8755                    'Content-Type': 'application/json',
8756                    'X-Requested-With': 'XMLHttpRequest'
8757                }
8758            })
8759                .then(response => response.ok && response.json())
8760                .then(
8761                    data => {
8762                        if (data) {
8763                            try {
8764                                const browserStorage = hyva.getBrowserStorage();
8765
8766                                // merge new data preserving non-invalidated sections
8767                                const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {};
8768
8769                                if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) {
8770                                    delete oldSectionData['checkout-data'];
8771                                }
8772                                const newSectionData = Object.assign(oldSectionData, data);
8773
8774                                dispatchPrivateContent(newSectionData);
8775
8776                                // don't persist messages, they've been dispatched already
8777                                if (newSectionData.messages && newSectionData.messages.messages ) {
8778                                    newSectionData.messages.messages = [];
8779                                }
8780
8781                                browserStorage.setItem(private_content_key, JSON.stringify(newSectionData));
8782
8783                                const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString();
8784                                browserStorage.setItem(private_content_expire_key, expiresAt);
8785
8786                                const newCookieVersion = hyva.getCookie(private_content_version_key);
8787                                browserStorage.setItem(private_content_version_key, newCookieVersion);
8788
8789                                // We don't need the section_data_ids in Hyvä, but we store them for compatibility
8790                                // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout
8791                                hyva.setCookie(
8792                                    section_data_ids_key,
8793                                    JSON.stringify(
8794                                        Object.keys(data).reduce((sectionDataIds, sectionKey) => {
8795                                            sectionDataIds[sectionKey] = data[sectionKey]['data_id'];
8796                                            return sectionDataIds;
8797                                        }, {})
8798                                    ),
8799                                    false,
8800                                    true
8801                                );
8802                            } catch (error) {
8803                                console.warn("Couldn't store privateContent", error);
8804                            }
8805                        }
8806                    }
8807                );
8808        }
8809    }
8810</script>
vendor: 1 bytes, line 8810
8810
8811<script>
8812    (() => {
8813        document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc()));
8814    })()
8815</script>
vendor: 1 bytes, line 8815
8815
8816<script>
8817    (events => {
8818        const dispatchUserInteractionEvent = () => {
8819            events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent))
8820            window.dispatchEvent(new Event('init-external-scripts'))
8821        };
8822        events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true}))
8823    })(['touchstart', 'mousemove', 'wheel', 'scroll', 'keydown'])
8824</script>
vendor: 1 bytes, line 8824
8824
8825<script>
8826    'use strict';
8827
8828    const grecaptchaV2LoadCallbacks = [];
8829
8830    function executeRecaptchaLoadCallbacks () {
8831        while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) {
8832            const callback = grecaptchaV2LoadCallbacks.pop();
8833            typeof callback === 'string' ? window[callback]() : callback();
8834        }
8835    }
8836
8837    (function() {
8838        const loadRecaptchaScript = (event) => {
8839
8840            if (window.grecaptcha || !event.target.form) {
8841                return;
8842            }
8843
8844            const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks';
8845            const siteKey = '6LeoIcUrAAAAAJYfHQM4lGMaUcmcjlQaBgv49EZy';
8846            const script = document.createElement('script');
8847            script.type = 'text/javascript';
8848            script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`;
8849            script.async = true;
8850            document.head.appendChild(script);
8851
8852            script.addEventListener('load', () => {
8853                Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled'));
8854            });
8855        }
8856
8857        window.forceLoadRecaptchaScript = (form) => {
8858            loadRecaptchaScript({target: {form: form || 'dummy'}});
8859            executeRecaptchaLoadCallbacks();
8860        };
8861
8862        document.body.addEventListener('input', loadRecaptchaScript, { once: true });
8863        document.body.addEventListener('focus', loadRecaptchaScript, { once: true });
8864
8865    }());
8866
8867</script>
8867
8868<div
8869    x-show="open"
8870    x-cloak
8871    x-data="{
8872        open: document.cookie.indexOf('ageVerified=true') === -1,
8873        agree() {
8874            document.cookie = 'ageVerified=true; path=/; max-age=' + (60 * 60 * 24 * 7); // 7 days
8875            this.open = false;
8876        }
8877    }"
8878    class="fixed inset-0 z-50 bg-black bg-opacity-75 flex items-center justify-center"
8879>
8880    <div class="bg-white max-w-lg rounded">
8881        <h2 class="text-xl font-bold py-4 px-5 border-b border-gray-300">Adult Content - Access Restricted</h2>
8882        <div class="p-5 border-b border-gray-300 flex flex-col gap-2.5">
8883            <p class="text-sm text-left">
8884                <strong>WARNING</strong> This is an adult website that contains sexually explicit materials. This site uses cookies. By clicking below to proceed further, you certify that:
8885            </p>
8886            <ul class="text-sm text-left list-disc pl-5 [&_a]:text-hoverColor">
8887                <li>You are 18 years of age or older (or have reached the age of majority in your jurisdiction)</li>
8888                <li>You are legally allowed to use this adult website in your jurisdiction</li>
8889                <li>You agree to Safewayz LLC's <a href="/terms-of-services" target="_blank" class="underline">Terms of Service</a>, <a href="/privacy-policy" target="_blank" class="underline">Privacy Policy,</a> and <a href="/usage-and-safety" target="_blank" class="underline">Usage &amp; Safety Guidelines</a>.</li>
8890            </ul>
8891            <p class="text-sm">While browsing this site, you agree to the use of cookies.</p>
8892        </div>
8893        <div class="flex justify-center gap-3 p-5">
8894            <button @click="agree" class="btn btn-primary bg-goldColor border-goldColor">YES, I AGREE.</button>
8895            <a href="https://www.google.com"
8896               class="btn bg-white border border-goldColor text-sm text-goldColor font-semibold py-3 px-6 transition hover:bg-black hover:border-black hover:text-white">
8897                NO, EXIT
8898            </a>
8899        </div>
8900    </div>
8901</div>
8902
8903
8904<!-- Wrapping template -->
8905<script type="text/template" id="instant_wrapper_template">
8906    {{#findAutocomplete}}
8907        <div id="algolia-autocomplete-container"></div>
8908    {{/findAutocomplete}}
8909
8910    <div id="algolia_instant_selector" class="container">
8911        <div class="plp-column-container flex gap-[60px] s1200:gap-x-7 s767:flex-col s767:gap-5">
8912            <div class="block-filter flex flex-col md:block w-[240px] bg-white shrink-0 s767:w-full" id="algolia-left-container">
8913                <div class="">
8914                    <div class="block-title md:border-b md:border-baseColor md:pb-5 s767:hidden">
8915                        <div class="h-[45px] text-lg font-semibold text-goldColor flex items-center gap-2.5">
8916                            <svg xmlns="http://www.w3.org/2000/svg" width="24" height="20" viewBox="0 0 25 20" fill="none" role="img">
8917<path d="M24.2065 4.0272H11.4928C11.1421 5.44412 9.86036 6.49792 8.33661 6.49792C6.81285 6.49792 5.5311 5.44412 5.18041 4.0272H0.781311C0.350094 4.0272 0.000473022 3.67758 0.000473022 3.24636C0.000473022 2.81514 0.350094 2.46552 0.781311 2.46552H5.18046C5.5311 1.04859 6.81285 -0.00524902 8.33666 -0.00524902C9.86046 -0.00524902 11.1422 1.04859 11.4929 2.46552H24.2065C24.6377 2.46552 24.9873 2.81514 24.9873 3.24636C24.9873 3.67758 24.6377 4.0272 24.2065 4.0272ZM8.33661 1.55643C7.40477 1.55643 6.64668 2.31452 6.64668 3.24631C6.64668 4.17814 7.40477 4.93624 8.33661 4.93624C9.26844 4.93624 10.0265 4.17814 10.0265 3.24631C10.0265 2.31452 9.26844 1.55643 8.33661 1.55643ZM24.2065 10.7809H19.8073C19.4566 12.1978 18.1749 13.2516 16.6511 13.2516C15.1273 13.2516 13.8456 12.1978 13.4949 10.7809H0.781311C0.350094 10.7809 0.000473022 10.4312 0.000473022 10C0.000473022 9.56881 0.350094 9.21918 0.781311 9.21918H13.495C13.8457 7.80226 15.1274 6.74842 16.6512 6.74842C18.175 6.74842 19.4567 7.80226 19.8074 9.21918H24.2065C24.6377 9.21918 24.9873 9.56881 24.9873 10C24.9873 10.4312 24.6377 10.7809 24.2065 10.7809ZM16.6512 8.31009C15.7193 8.31009 14.9612 9.06819 14.9612 10C14.9612 10.9318 15.7193 11.6899 16.6512 11.6899C17.583 11.6899 18.3411 10.9318 18.3411 10C18.3411 9.06819 17.583 8.31009 16.6512 8.31009ZM0.781311 15.9729H5.18046C5.53115 14.5559 6.81285 13.5021 8.33666 13.5021C9.86046 13.5021 11.1422 14.5559 11.4929 15.9729H24.2065C24.6377 15.9729 24.9873 16.3225 24.9873 16.7537C24.9873 17.1849 24.6377 17.5345 24.2065 17.5345H11.4928C11.1421 18.9515 9.86041 20.0053 8.33661 20.0053C6.8128 20.0053 5.5311 18.9515 5.18041 17.5345H0.781311C0.350094 17.5345 0.000473022 17.1849 0.000473022 16.7537C0.000473022 16.3225 0.350044 15.9729 0.781311 15.9729ZM8.33661 18.4436C9.26844 18.4436 10.0265 17.6855 10.0265 16.7537C10.0265 15.8219 9.26844 15.0638 8.33661 15.0638C7.40477 15.0638 6.64668 15.8219 6.64668 16.7537C6.64668 17.6855 7.40477 18.4436 8.33661 18.4436Z" fill="currentColor"/>
8918<title>filterBy</title></svg>
8919                            <span>Filter By</span>
8920                        </div>
8921                    </div>
8922                    <div class="block min767:hidden">
8923                        <div class="flex items-center justify-between" x-data="{open:false}">
8924
8925                            <div class="relative bg-container-lighter rounded cursor-pointer" @click="open = !open">
8926                                <div class="absolute z-20 w-full h-full text-transparent" id="refine-toggle">
8927                                </div>
8928                                <div class="h-[45px] text-lg font-semibold text-goldColor flex items-center gap-2.5 s767:btn s767:btn-primary" id="filter-btn-div" >
8929                                    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="20" viewBox="0 0 25 20" fill="none" role="img">
8930<path d="M24.2065 4.0272H11.4928C11.1421 5.44412 9.86036 6.49792 8.33661 6.49792C6.81285 6.49792 5.5311 5.44412 5.18041 4.0272H0.781311C0.350094 4.0272 0.000473022 3.67758 0.000473022 3.24636C0.000473022 2.81514 0.350094 2.46552 0.781311 2.46552H5.18046C5.5311 1.04859 6.81285 -0.00524902 8.33666 -0.00524902C9.86046 -0.00524902 11.1422 1.04859 11.4929 2.46552H24.2065C24.6377 2.46552 24.9873 2.81514 24.9873 3.24636C24.9873 3.67758 24.6377 4.0272 24.2065 4.0272ZM8.33661 1.55643C7.40477 1.55643 6.64668 2.31452 6.64668 3.24631C6.
893064668 4.17814 7.40477 4.93624 8.33661 4.93624C9.26844 4.93624 10.0265 4.17814 10.0265 3.24631C10.0265 2.31452 9.26844 1.55643 8.33661 1.55643ZM24.2065 10.7809H19.8073C19.4566 12.1978 18.1749 13.2516 16.6511 13.2516C15.1273 13.2516 13.8456 12.1978 13.4949 10.7809H0.781311C0.350094 10.7809 0.000473022 10.4312 0.000473022 10C0.000473022 9.56881 0.350094 9.21918 0.781311 9.21918H13.495C13.8457 7.80226 15.1274 6.74842 16.6512 6.74842C18.175 6.74842 19.4567 7.80226 19.8074 9.21918H24.2065C24.6377 9.21918 24.9873 9.56881 24.9873 10C24.9873 10.4312 24.6377 10.7809 24.2065 10.7809ZM16.6512 8.31009C15.7193 8.31009 14.9612 9.06819 14.9612 10C14.9612 10.9318 15.7193 11.6899 16.6512 11.6899C17.583 11.6899 18.3411 10.9318 18.3411 10C18.3411 9.06819 17.583 8.31009 16.6512 8.31009ZM0.781311 15.9729H5.18046C5.53115 14.5559 6.81285 13.5021 8.33666 13.5021C9.86046 13.5021 11.1422 14.5559 11.4929 15.9729H24.2065C24.6377 15.9729 24.9873 16.3225 24.9873 16.7537C24.9873 17.1849 24.6377 17.5345 24.2065 17.5345H11.4928C11.1421 18.9515 9.86041 20.0053 8.33661 20.0053C6.8128 20.0053 5.5311 18.9515 5.18041 17.5345H0.781311C0.350094 17.5345 0.000473022 17.1849 0.000473022 16.7537C0.000473022 16.3225 0.350044 15.9729 0.781311 15.9729ZM8.33661 18.4436C9.26844 18.4436 10.0265 17.6855 10.0265 16.7537C10.0265 15.8219 9.26844 15.0638 8.33661 15.0638C7.40477 15.0638 6.64668 15.8219 6.64668 16.7537C6.64668 17.6855 7.40477 18.4436 8.33661 18.4436Z" fill="currentColor"/>
8931<title>filterBy</title></svg>
8932                                    <span>Filter By</span>
8933                                </div>
8934                            </div>
8935                        </div>
8936                    </div>
8937                    <div class="[&_.ais-Panel]:shadow-none [&_.ais-Panel]:p-0 [&_.ais-Panel]:m-0 flex flex-col gap-5 mt-5 s767:mt-1 s767:mb-16 s767:mt-5" id="instant-search-facets-container">
8938                        <div class="w-full flex flex-col px-8 py-4 bg-white shadow hidden-sm hidden-xs">
8939                            <span class="text-base md:text-lg font-semibold">
8940                                Active filtering                            </span>
8941                            <div class="order-2" id="clear-refinements"></div>
8942                            <div id="current-refinements"></div>
8943                        </div>
8944                    </div>
8945                </div>
8946            </div>
8947
8948            <div class="w-full" id="algolia-right-container">
8949                <div class="border-b border-baseColor pb-5">
8950                    <div class="flex w-full justify-between items-center s767:gap-2.5">
8951                        <div class="toolbar-amount text-sm" id="algolia-stats"></div>
8952                        <div class="flex gap-4 items-center relative">
8953                            <span class="font-medium text-sm s767:absolute s767:-top-2.5 s767:left-3 s767:bg-white s767:px-[5px]">Sort by:</span>
8954                            <div id="algolia-sorts"></div>
8955                        </div>
8956                    </div>
8957                </div>
8958                <div class="hidden">
8959                    <div class="pb-3.5">
8960                        <div class="px-2.5">
8961                            {{#second_bar}}
8962                               <div id="instant-search-bar"></div>
8963                            {{/second_bar}}
8964                        </div>
8965                    </div>
8966                </div>
8967                <div>
8968                    <div>
8969                        <div itemscope itemtype="http://schema.org/ItemList">
8970
8971                            <div id="algolia-banner"></div>
8972                            <div id="instant-empty-results-container"></div>
8973                            <div id="instant-search-results-container" class=""></div>
8974                        </div>
8975                    </div>
8976                </div>
8977                <div class="toolbar toolbar-products flex justify-between items-center s767:justify-center">
8978                    <div id="instant-search-pagination-container"></div>
8979                </div>
8980            </div>
8981        </div>
8982    </div>
8983</script>
vendor: 2 bytes, line 8983
8983
8984<script>
8985    (function () {
8986        const mobileBreakpoint = 768;
8987        let isMobileTriggered = false;
8988        let filterBtn = null;
8989
8990        // Utility: Wait until element exists
8991        function waitForElement(selector, callback, checkInterval = 200, timeout = 10000) {
8992            const startTime = Date.now();
8993            const timer = setInterval(() => {
8994                const el = document.querySelector(selector);
8995                if (el) {
8996                    clearInterval(timer);
8997                    callback(el);
8998                } else if (Date.now() - startTime > timeout) {
8999                    clearInterval(timer);
9000                    console.warn('Timeout: Element not found:', selector);
9001                }
9002            }, checkInterval);
9003        }
9004
9005        function triggerClickIfMobile(el) {
9006            const isMobile = window.innerWidth <= mobileBreakpoint;
9007            if (isMobile && !isMobileTriggered) {
9008                el.classList.add('hidden-sm');
9009                el.classList.add('hidden-xs');
9010                isMobileTriggered = true;
9011            } else if (!isMobile) {
9012                el.classList.remove('hidden-sm');
9013                el.classList.remove('hidden-xs');
9014                isMobileTriggered = false;
9015            }
9016        }
9017
9018        // Wait until the element is available, then attach logic
9019        waitForElement('#instant-search-facets-container', (el) => {
9020            filterBtn = el;
9021            // Run initial check
9022            triggerClickIfMobile(filterBtn);
9023            // Re-check on resize
9024            window.addEventListener('resize', () => triggerClickIfMobile(filterBtn));
9025        });
9026    })();
9027</script>
vendor: 2 bytes, line 9027
9027
9028<script type="text/template" id="instant-hit-template">
9029    <div class="item product product-item product_addtocart_form w-full static flex group pt-7 h-full" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
9030        <meta itemprop="position" content="{{__position}}" />
9031        <div class="flex-grow border border-[#eee] bg-white relative w-full overflow-hidden" itemprop="item" itemscope itemtype="http://schema.org/Product">
9032            <meta itemprop="url"
9033                {{^__queryID}} content="{{url}}" {{/__queryID}}
9034                {{#__queryID}} content="{{urlForInsights}}" {{/__queryID}}
9035                />
9036                <div class="flex flex-col">
9037                    <div class="product photo product-item-photo block flex justify-center items-center p-5 pb-0 group-hover:[&_img]:scale-110 [&_img]:transition [&_img]:duration-500 [&_img]:ease-in-out s1023:px-4 overflow-hidden">
9038                        <a  class="h-full"
9039                        {{^__queryID}} href="{{url}}" {{/__queryID}}
9040                        {{#__queryID}} href="{{urlForInsights}}" {{/__queryID}}
9041                        data-objectid="{{objectID}}"
9042                        data-indexname="{{__indexName}}"
9043                        data-position="{{__position}}"
9044                        data-queryid="{{__queryID}}">
9045                            {{#image_url}}<img itemprop="image" src="{{{image_url}}}" alt="{{{name}}}" />{{/image_url}}
9046                            {{^image_url}}<span class="no-image"></span>{{/image_url}}
9047                        </a>
9048                    </div>
9049                    <div class="product-info flex flex-col grow py-5 px-6 flex flex-col gap-4 s1023:px-4">
9050                        <div class="text-[#666] font-medium text-sm s1023:text-xs">{{#manufacturer_heading}}{{manufacturer_heading}}{{/manufacturer_heading}}</div>
9051                        <div class="-mt-3 product-name">
9052                            <a  class="h-full product-item-link font-medium inline-block align-top s1023:text-sm hover:text-hoverColor [&_mark]:font-medium"
9053                                {{^__queryID}} href="{{url}}" {{/__queryID}}
9054                                {{#__queryID}} href="{{urlForInsights}}" {{/__queryID}}
9055                                data-objectid="{{objectID}}"
9056                                data-indexname="{{__indexName}}"
9057                                data-position="{{__position}}"
9058                                data-queryid="{{__queryID}}">
9059                                {{{ _highlightResult.name.value }}}
9060                            </a>
9061                        </div>
9062                        <div class="rating-summary flex items-center gap-1 relative">
9063                            <div class="rating-summary flex">
9064                                                                                                    <svg
9065                                        xmlns="http://www.w3.org/2000/svg"
9066                                        class="fill-current text-gray-200 w-6 h-6 s767:w-5 s767:h-5 shrink-0"
9067                                        viewBox="3 0 20 20"
9068                                        fill="currentColor"
9069                                        aria-hidden="true"
9070                                    >
9071                                        <path
9072                                            d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
9073                                            1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
9074                                            1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
9075                                            1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"
9076                                        />
9077                                    </svg>
9078                                                                                                        <svg
9079                                        xmlns="http://www.w3.org/2000/svg"
9080                                        class="fill-current text-gray-200 w-6 h-6 s767:w-5 s767:h-5 shrink-0"
9081                                        viewBox="3 0 20 20"
9082                                        fill="currentColor"
9083                                        aria-hidden="true"
9084                                    >
9085                                        <path
9086                                            d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
9087                                            1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
9088                                            1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
9089                                            1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"
9090                                        />
9091                                    </svg>
9092                                                                                                        <svg
9093                                        xmlns="http://www.w3.org/2000/svg"
9094                                        class="fill-current text-gray-200 w-6 h-6 s767:w-5 s767:h-5 shrink-0"
9095                                        viewBox="3 0 20 20"
9096                                        fill="currentColor"
9097                                        aria-hidden="true"
9098                                    >
9099                                        <path
9100                                            d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
9101                                            1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
9102                                            1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
9103                                            1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"
9104                                        />
9105                                    </svg>
9106                                                                                                        <svg
9107                                        xmlns="http://www.w3.org/2000/svg"
9108                                        class="fill-current text-gray-200 w-6 h-6 s767:w-5 s767:h-5 shrink-0"
9109                                        viewBox="3 0 20 20"
9110                                        fill="currentColor"
9111                                        aria-hidden="true"
9112                                    >
9113                                        <path
9114                                            d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
9115                                            1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
9116                                            1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
9117                                            1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"
9118                                        />
9119                                    </svg>
9120                                                                                                        <svg
9121                                        xmlns="http://www.w3.org/2000/svg"
9122                                        class="fill-current text-gray-200 w-6 h-6 s767:w-5 s767:h-5 shrink-0"
9123                                        viewBox="3 0 20 20"
9124                                        fill="currentColor"
9125                                        aria-hidden="true"
9126                                    >
9127                                        <path
9128                                            d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
9129                                            1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
9130                                            1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
9131                                            1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"
9132                                        />
9133                                    </svg>
9134                                                                                                </div>
9135                            <div title="{{rating_summary}}%" class="absolute left-0 top-0">
9136                                <span style="width:{{rating_summary}}%; overflow:hidden; display:flex;">
9137                                    <span class="hidden">{{rating_summary}}%</span>
9138                                                                                                                <svg
9139                                            xmlns="http://www.w3.org/2000/svg" class="fill-current w-6 h-6 s767:w-5 s767:h-5 shrink-0" viewBox="3 0 20 20"
9140                                            style="color: #f6e05e"
9141                                            fill="currentColor"
9142                                            aria-hidden="true"
9143                                        >
9144                                            <path
9145                                                d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
9146                                                1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
9147                                                1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
9148                                                1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
9149                                        </svg>
9150                                                                                                                    <svg
9151                                            xmlns="http://www.w3.org/2000/svg" class="fill-current w-6 h-6 s767:w-5 s767:h-5 shrink-0" viewBox="3 0 20 20"
9152                                            style="color: #f6e05e"
9153                                            fill="currentColor"
9154                                            aria-hidden="true"
9155                                        >
9156                                            <path
9157                                                d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
9158                                                1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
9159                                                1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
9160                                                1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
9161                                        </svg>
9162                                                                                                                    <svg
9163                                            xmlns="http://www.w3.org/2000/svg" class="fill-current w-6 h-6 s767:w-5 s767:h-5 shrink-0" viewBox="3 0 20 20"
9164                                            style="color: #f6e05e"
9165                                            fill="currentColor"
9166                                            aria-hidden="true"
9167                                        >
9168                                            <path
9169                                                d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
9170                                                1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
9171                                                1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
9172                                                1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
9172
9173                                        </svg>
9174                                                                                                                    <svg
9175                                            xmlns="http://www.w3.org/2000/svg" class="fill-current w-6 h-6 s767:w-5 s767:h-5 shrink-0" viewBox="3 0 20 20"
9176                                            style="color: #f6e05e"
9177                                            fill="currentColor"
9178                                            aria-hidden="true"
9179                                        >
9180                                            <path
9181                                                d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
9182                                                1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
9183                                                1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
9184                                                1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
9185                                        </svg>
9186                                                                                                                    <svg
9187                                            xmlns="http://www.w3.org/2000/svg" class="fill-current w-6 h-6 s767:w-5 s767:h-5 shrink-0" viewBox="3 0 20 20"
9188                                            style="color: #f6e05e"
9189                                            fill="currentColor"
9190                                            aria-hidden="true"
9191                                        >
9192                                            <path
9193                                                d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
9194                                                1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
9195                                                1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
9196                                                1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
9197                                        </svg>
9198                                                                                                            </span>
9199                            </div>
9200                            <span class="text-sm" :class="{'hidden':rating_summary=='0'}" x-data="{ rating_summary: {{rating_summary}} }" x-text="'(' + (rating_summary / 20).toFixed(1) + ')'"></span>
9201
9202                        </div>
9203
9204                        {{^price.USD.group_0_max}}
9205                        <div itemprop="offers" itemscope itemtype="http://schema.org/Offer" class="price">
9206                            <meta itemprop="price" content="{{price.USD.group_0}}" />
9207                        {{/price.USD.group_0_max}}
9208                        {{#price.USD.group_0_max}}
9209                        <div itemprop="offers" itemscope itemtype="http://schema.org/AggregateOffer" class="price">
9210                            <meta itemprop="lowPrice" content="{{price.USD.group_0}}" />
9211                            <meta itemprop="highPrice" content="{{price.USD.group_0_max}}" />
9212                            {{/price.USD.group_0_max}}
9213                            <meta itemprop="priceCurrency" content="USD" />
9214                            <div>
9215                                <div class="price-box flex-wrap s767:flex-col s767:items-start">
9216                                    <span class="price !flex items-end s767:flex-wrap md:!leading-none">
9217                                        <span class="text-xs font-medium mr-1.5 shrink-0 md:leading-none">Starting at</span>
9218                                        ${{price.USD.group_0}}
9219                                    </span>
9220                                    {{#price.USD.group_0_original_formated}}
9221                                    <div class="price flex items-end s767:flex-wrap !hidden">
9222                                        <span class="text-xs font-medium mr-1.5 shrink-0 md:leading-none">Regular&#x20;Price</span>
9223                                        <span class="line-through font-normal text-lg s767:text-sm md:leading-none"> {{price.USD.group_0_original_formated}}</span>
9224                                    </div>
9225                                    {{/price.USD.group_0_original_formated}}
9226                                    {{#price.USD.group_0_tier_formated}}
9227                                        <span>
9228                                            As low as                                            <span>{{price.USD.group_0_tier_formated}}</span>
9229                                        </span>
9230                                    {{/price.USD.group_0_tier_formated}}
9231                                </div>
9232                            </div>
9233                        </div>
9234                        {{#isAddToCartEnabled}}
9235                            <button
9236                                x-data="initWishlist()"
9237                                @click.prevent="addToWishlist({{objectID}})"
9238                                class="rounded-full w-11 h-11 bg-white text-[#C8A888] flex justify-center items-center absolute top-4 right-4 s767:top-2 s767:right-2 s767:w-7 s767:h-7"
9239                            >
9240                            <svg class="s767:h-[14px] s767:w-[14px]" width="23" height="20" viewBox="0 0 23 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M16.8906 0C14.9202 0 13.2077 0.902823 11.9382 2.6108C11.7751 2.83028 11.6294 3.04985 11.5 3.26285C11.3706 3.0498 11.225 2.83028 11.0618 2.6108C9.79234 0.902823 8.07978 0 6.10938 0C2.46019 0 0 2.93415 0 6.53137C0 11.2261 4.45769 14.1818 10.9248 19.5765C11.0914 19.7154 11.2957 19.7849 11.5 19.7849C11.7043 19.7849 11.9086 19.7155 12.0752 19.5765C18.5408 14.1832 23 11.2267 23 6.53137C23 2.93627 20.5419 0 16.8906 0ZM11.5 17.7167C5.54507 12.7853 1.79688 10.1719 1.79688 6.53137C1.79688 4.17952 3.27822 1.79863 6.10938 1.79863C7.49292 1.79863 8.66372 2.4192 9.58929 3.64317C10.3226 4.61295 10.6273 5.61384 10.6372 5.64658C10.7485 6.03077 11.1002 6.29521 11.5 6.29521C11.9004 6.29521 12.2525 6.02996 12.3634 5.64478C12.3744 5.60633 13.5091 1.79863 16.8906 1.79863C19.7218 1.79863 21.2031 4.17952 21.2031 6.53137C21.2031 10.1755 17.436 12.8012 11.5 17.7167Z" fill="currentColor"/><path class="hidden" d="M17.0742 0C15.0824 0 13.3513 0.912636 12.0679 2.63918C11.903 2.86105 11.7558 3.083 11.625 3.29832C11.4942 3.08295 11.347 2.86105 11.1821 2.63918C9.89878 0.912636 8.16761 0 6.17578 0C2.48693 0 0 2.96605 0 6.60236C0 11.3481 4.50614 14.3359 11.0436 19.7893C11.2119 19.9297 11.4185 20 11.625 20C11.8315 20 12.0381 19.9298 12.2064 19.7893C18.7423 14.3374 23.25 11.3487 23.25 6.60236C23.25 2.96818 20.7652 0 17.0742 0Z" fill="#C8A888"/></svg>
9241                            </button>
9242                        {{/isAddToCartEnabled}}
9243                    </div>
9244                </div>
9245        </div>
9246    </div>
9247</script>
vendor: 2 bytes, line 9247
9247
9248<script type="text/template" id="instant-stats-template">
9249    <div>
9250        {{#hasOneResult}}<strong>1</strong>
9251        <span>
9252        Item        </span>
9253        {{/hasOneResult}}
9254        {{#hasManyResults}}
9255        <span>
9256            Items        </span>
9257        <span  itemprop="numberOfItems">
9258        {{first}}-{{last}} of        </span>
9259        <span itemprop="numberOfItems">{{nbHits}}</span>
9260        {{/hasManyResults}}
9261        {{#hasNoResults}}
9262        <span>
9263        Your search returned no results.        </span>
9264        {{/hasNoResults}}
9265    </div>
9266</script>
vendor: 2 bytes, line 9266
9266
9267<script type="text/template" id="refinements-lists-item-template">
9268    <label class="{{cssClasses.label}} {{#isRefined}}checked{{/isRefined}} flex items-center mb-2 text-sm hover:text-orangeColor cursor-pointer">
9269        <input class="{{cssClasses.checkbox}} checkbox" {{#isRefined}}checked{{/isRefined}} type="checkbox" value="{{value}}" />
9270        <span class="pr-[6px]">{{value}}</span>
9271        <span class="{{cssClasses.count}} ml-auto">({{count}})</span>
9272    </label>
9273</script>
9273<script>
9274    'use strict';
9275
9276    (function () {
9277        const modals = [];
9278        const excludedFromFocusTrapping = new Set();
9279
9280        function trapFocusInNextModalWithOverlay() {
9281            for (let idx = modals.length -1; idx >= 0; idx--) {
9282                const nextOnStack = modals[idx];
9283                const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name];
9284                if (! isOverlayDisabled(nextDialogElement)) {
9285                    hyva.trapFocus(nextDialogElement);
9286                    break;
9287                }
9288            }
9289        }
9290
9291        function focusables(dialogElement) {
9292            const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])';
9293            return Array.from(dialogElement.querySelectorAll(selector))
9294                .filter(el => !el.hasAttribute('disabled'));
9295        }
9296
9297        function firstVisible(elements) {
9298            const a = Array.from(elements);
9299            for (let i = 0; i < a.length; i++) {
9300                if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i];
9301            }
9302            return null;
9303        }
9304
9305        function isInViewport(element) {
9306            const rect = element && element.getBoundingClientRect();
9307            return rect &&
9308                rect.top >= 0 &&
9309                rect.left >= 0 &&
9310                rect.right <= window.innerWidth &&
9311                rect.bottom <= window.innerHeight;
9312        }
9313
9314        function setFocusAfterTransition(dialogElement, duration) {
9315                        const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]'));
9316            const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]'));
9317            next: for (let candidate of candidates) {
9318                for (let child of nested) {
9319                    if (child.contains(candidate)) continue next;
9320                }
9321                setTimeout(() => candidate.focus(), 50);
9322                break;
9323            }
9324            window.setTimeout(() => {
9325                const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) ||
9326                    focusables(dialogElement)[0] ||
9327                    null;
9328                focusElement && isInViewport(focusElement) && focusElement.focus();
9329            }, Math.max(1, duration));
9330        }
9331
9332        function determineTrigger($refs, dialog, trigger) {
9333                        if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) {
9334                return dialog.target;
9335            }
9336                        if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) {
9337                return trigger.target;
9338            }
9339                        if (typeof trigger === 'string') {
9340                try {
9341                    return $refs[trigger] || document.querySelector(trigger)
9342                } catch (e) {}
9343            }
9344                        if (trigger instanceof Element) {
9345                return trigger;
9346            }
9347
9348                        return null;
9349        }
9350
9351        function isOverlayDisabled(dialog) {
9352            return dialog && dialog.hasAttribute('x-no-overlay')
9353        }
9354
9355        function areRemainingModalsWithoutOverlay(modals)
9356        {
9357            const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled);
9358
9359            return overflowDisabled.length === modals.length;
9360        }
9361
9362        window.hyva.modal = function(options = {}) {
9363                        if (this.$el && this.$el.dataset && this.$el.dataset.options) {
9364                try {
9365                    options = Object.assign(options, JSON.parse(this.$el.dataset.options || '{}'));
9366                } catch (e) {
9367                    throw new Error('Cannot read the dialog options from the data-options attribute: not valid JSON');
9368                }
9369            }
9370
9371            const config = Object.assign({
9372                dialog: 'dialog',                 duration: 300,                 transitionEnter: 'transition ease-out duration-300',
9373                transitionEnterStart: 'opacity-0',
9374                transitionEnterEnd: 'opacity-100',
9375                transitionLeave: 'transition ease-in duration-300',
9376                transitionLeaveStart: 'opacity-100',
9377                transitionLeaveEnd: 'opacity-0',
9378            }, options);
9379            let lastHide = 0;
9380
9381            return {
9382                opened: {},
9383                show(dialog, trigger) {
9384                    const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger);
9385                    const name = typeof dialog === 'string' ? dialog : config.dialog;
9386                    const dialogElement = this.$refs[name];
9387                    if (! dialogElement) {
9388                                                return;
9389                    }
9390                    const useOverlay = ! dialogElement.hasAttribute('x-no-overlay');
9391
9392                    dialogElement.scrollTop = 0;
9393
9394                                        if (this.opened[name]) {
9395                        return;
9396                    }
9397
9398                    if (focusTargetAfterHide) {
9399                        focusTargetAfterHide.setAttribute('aria-expanded', 'true');
9400                    }
9401
9402                    this.opened[name] = true;
9403                    useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement));
9404                    setFocusAfterTransition(dialogElement, config.duration);
9405
9406                    const frame = {name, instance: this, focusTarget: focu
9406sTargetAfterHide, time: Date.now()};
9407
9408                    modals.push(frame);
9409                    if (useOverlay) {
9410                        document.body.classList.add('overflow-hidden');
9411                    }
9412                    return new Promise(resolve => frame.resolve = resolve);
9413                },
9414                cancel() {
9415                    this.hide(false);
9416                },
9417                ok() {
9418                    this.hide(true);
9419                },
9420                hide(value) {
9421                                        if (Date.now() - lastHide < config.duration) {
9422                        return;
9423                    }
9424                    lastHide = Date.now();
9425
9426                    const modal = modals.pop() || {};
9427                    if (! modal.instance) {
9428                        return;
9429                    }
9430
9431                    const name = modal.name;
9432                    this.opened[name] = false;
9433                    hyva.releaseFocus(modal.instance.$refs[modal.name])
9434                    trapFocusInNextModalWithOverlay();
9435
9436                    const nextFocusAfterHide = modal.focusTarget;
9437                    nextFocusAfterHide && setTimeout(() => {
9438                        nextFocusAfterHide.setAttribute('aria-expanded', 'false');
9439                        nextFocusAfterHide.focus()
9440                    }, config.duration);
9441
9442                    if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) {
9443                        document.body.classList.remove('overflow-hidden');
9444                    }
9445
9446                    modal.resolve(value);
9447                },
9448                overlay(dialog) {
9449                    dialog = this.$el.dataset.dialogRefName || dialog;
9450                    const name = typeof dialog === 'string' ? dialog : config.dialog;
9451                    return {
9452                        ['x-show']() {
9453                            return this.opened[name]
9454                        },
9455                        ['x-transition:enter']: config.transitionEnter,
9456                        ['x-transition:enter-start']: config.transitionEnterStart,
9457                        ['x-transition:enter-end']: config.transitionEnterEnd,
9458                        ['x-transition:leave']: config.transitionLeave,
9459                        ['x-transition:leave-start']: config.transitionLeaveStart,
9460                        ['x-transition:leave-end']: config.transitionLeaveEnd,
9461                        ['@hyva-modal-show.window'](event) {
9462                            event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide)
9463                        }
9464                    };
9465                },
9466                showDialogOnInit() {
9467                    const parent = this.$el.closest('[data-dialog-ref-name]');
9468                    if (parent && parent.dataset.dialogRefName) {
9469                        this.$dispatch('hyva-modal-show', {dialog: parent.dataset.dialogRefName})
9470                    }
9471                }
9472            };
9473        }
9474
9475        window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1]
9476
9477        window.hyva.modal.pop = function () {
9478            if (modals.length > 0) {
9479                const modal = modals[modals.length -1];
9480                modal.instance.hide();
9481            }
9482        }
9483
9484        window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) {
9485            typeof selectors === 'string' || selectors instanceof String
9486                ? excludedFromFocusTrapping.add(selectors)
9487                : selectors.map(selector => excludedFromFocusTrapping.add(selector));
9488        }
9489
9490        window.hyva.modal.eventListeners = {
9491            keydown: event => {
9492                if (event.key === 'Escape') {
9493                    window.hyva.modal.pop();
9494                }
9495            },
9496                        click: event => {
9497                if (modals.length > 0) {
9498                    const modal = modals[modals.length -1];
9499                    const dialog = modal.instance.$refs[modal.name];
9500                    if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago
9501                        ! isOverlayDisabled(dialog) && // if dialog has overlay
9502                        ! dialog.contains(event.target)) { // if click is outside of dialog
9503                        modal.instance.hide();
9504                    }
9505                }
9506            }
9507        };
9508
9509        document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown);
9510
9511        document.addEventListener('click', window.hyva.modal.eventListeners.click);
9512    })();
9513    window.addEventListener('alpine:init', () => {
9514        Alpine.data('hyvaModal', window.hyva.modal);
9515    }, {once: true});
9516</script>
9516
9517    
9517<script defer src="https://www.dwin1.com/123588.js"></script>
9517
9518    
9518<script>
9519    window.addEventListener('init-external-scripts', () => {
9520        window.clarity = window.clarity || function() {
9521            (window.clarity.q = window.clarity.q || []).push(arguments);
9522        };
9523        const script = document.createElement('script');
9524        script.type = 'text/javascript';
9525        script.async = true;
9526        script.src = 'https://www.clarity.ms/tag/r8ssc79bu5';
9527        document.head.appendChild(script);
9528    }, { once: true, passive: true });
9529</script>
vendor: 1 bytes, line 9529
9529
9530<script type="application/json" id="mht-cro-data-layer-config">{"enabled":true,"debug":false,"mode":"complement","magefanDetected":true,"events":{"item_variant":true,"search":false,"filter":true,"sort":true,"remove_from_cart":false,"add_to_wishlist":false,"add_to_cart":false,"view_item":false,"view_item_list":false,"select_item":false,"view_cart":false,"begin_checkout":false,"add_shipping_info":false,"add_payment_info":false,"purchase":false,"refund":false},"currency":"USD","pageType":"other","product":null,"itemListName":"Product List","cart":null,"purchase":null}</script>
vendor: 1 bytes, line 9530
9530
9531<script src="https://www.mrhankeystoys.com/static/version1790675038/frontend/Krish/mrhankeytoys/en_US/Mht_CroDataLayer/js/data-layer.js"></script>
vendor: 1 bytes, line 9531
9531
9532<script type="text/json" id="default-section-data">
9533    {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":[],"directory-data":{"AD":{"name":"Andorra"},"AF":{"name":"Afghanistan"},"AG":{"name":"Antigua & Barbuda"},"AI":{"name":"Anguilla"},"AL":{"name":"Albania","regions":{"512":{"code":"AL-01","name":"Berat"},"513":{"code":"AL-09","name":"Dib\u00ebr"},"514":{"code":"AL-02","name":"Durr\u00ebs"},"515":{"code":"AL-03","name":"Elbasan"},"516":{"code":"AL-04","name":"Fier"},"517":{"code":"AL-05","name":"Gjirokast\u00ebr"},"518":{"code":"AL-06","name":"Kor\u00e7\u00eb"},"519":{"code":"AL-07","name":"Kuk\u00ebs"},"520":{"code":"AL-08","name":"Lezh\u00eb"},"521":{"code":"AL-10","name":"Shkod\u00ebr"},"522":{"code":"AL-11","name":"Tiran\u00eb"},"523":{"code":"AL-12","name":"Vlor\u00eb"}}},"AM":{"name":"Armenia"},"AO":{"name":"Angola"},"AQ":{"name":"Antarctica"},"AR":{"name":"Argentina","regions":{"525":{"code":"AR-B","name":"Buenos Aires"},"526":{"code":"AR-K","name":"Catamarca"},"527":{"code":"AR-H","name":"Chaco"},"528":{"code":"AR-U","name":"Chubut"},"524":{"code":"AR-C","name":"Ciudad Aut\u00f3noma de Buenos Aires"},"529":{"code":"AR-X","name":"C\u00f3rdoba"},"530":{"code":"AR-W","name":"Corrientes"},"531":{"code":"AR-E","name":"Entre R\u00edos"},"532":{"code":"AR-P","name":"Formosa"},"533":{"code":"AR-Y","name":"Jujuy"},"534":{"code":"AR-L","name":"La Pampa"},"535":{"code":"AR-F","name":"La Rioja"},"536":{"code":"AR-M","name":"Mendoza"},"537":{"code":"AR-N","name":"Misiones"},"538":{"code":"AR-Q","name":"Neuqu\u00e9n"},"539":{"code":"AR-R","name":"R\u00edo Negro"},"540":{"code":"AR-A","name":"Salta"},"541":{"code":"AR-J","name":"San Juan"},"542":{"code":"AR-D","name":"San Luis"},"543":{"code":"AR-Z","name":"Santa Cruz"},"544":{"code":"AR-S","name":"Santa Fe"},"545":{"code":"AR-G","name":"Santiago del Estero"},"546":{"code":"AR-V","name":"Tierra del Fuego"},"547":{"code":"AR-T","name":"Tucum\u00e1n"}}},"AS":{"name":"American Samoa"},"AT":{"name":"Austria","regions":{"102":{"code":"BL","name":"Burgenland"},"99":{"code":"KN","name":"K\u00e4rnten"},"96":{"code":"NO","name":"Nieder\u00f6sterreich"},"97":{"code":"OO","name":"Ober\u00f6sterreich"},"98":{"code":"SB","name":"Salzburg"},"100":{"code":"ST","name":"Steiermark"},"101":{"code":"TI","name":"Tirol"},"103":{"code":"VB","name":"Vorarlberg"},"95":{"code":"WI","name":"Wien"}}},"AU":{"name":"Australia","regions":{"605":{"code":"ACT","name":"Australian Capital Territory"},"606":{"code":"NSW","name":"New South Wales"},"612":{"code":"NT","name":"Northern Territory"},"608":{"code":"QLD","name":"Queensland"},"609":{"code":"SA","name":"South Australia"},"610":{"code":"TAS","name":"Tasmania"},"607":{"code":"VIC","name":"Victoria"},"611":{"code":"WA","name":"Western Australia"}}},"AW":{"name":"Aruba"},"AX":{"name":"\u00c5land Islands"},"AZ":{"name":"Azerbaijan"},"BA":{"name":"Bosnia & Herzegovina"},"BB":{"name":"Barbados"},"BD":{"name":"Bangladesh"},"BE":{"name":"Belgium","regions":{"620":{"code":"VAN","name":"Antwerpen"},"621":{"code":"WBR","name":"Brabant wallon"},"622":{"code":"BRU","name":"Brussels-Capital Region"},"623":{"code":"WHT","name":"Hainaut"},"625":{"code":"WLG","name":"Li\u00e8ge"},"624":{"code":"VLI","name":"Limburg"},"626":{"code":"WLX","name":"Luxembourg"},"627":{"code":"WNA","name":"Namur"},"628":{"code":"VOV","name":"Oost-Vlaanderen"},"629":{"code":"VBR","name":"Vlaams-Brabant"},"630":{"code":"VWV","name":"West-Vlaanderen"}}},"BF":{"name":"Burkina Faso"},"BG":{"name":"Bulgaria","regions":{"640":{"code":"BG-01","name":"Blagoevgrad"},"641":{"code":"BG-02","name":"Burgas"},"647":{"code":"BG-08","name":"Dobrich"},"646":{"code":"BG-07","name":"Gabrovo"},"665":{"code":"BG-26","name":"Haskovo"},"648":{"code":"BG-09","name":"Kardzhali"},"649":{"code":"BG-10","name":"Kyustendil"},"650":{"code":"BG-11","name":"Lovech"},"651":{"code":"BG-12","name":"Montana"},"652":{"code":"BG-13","name":"Pazardzhik"},"653":{"code":"BG-14","name":"Pernik"},"654":{"code":"BG-15","name":"Pleven"},"655":{"code":"BG-16","name":"Plovdiv"},"656":{"code":"BG-17","name":"Razgrad"},"657":{"code":"BG-18","name":"Ruse"},"666":{"code":"BG-27","name":"Shumen"},"658":{"code":"BG-19","name":"Silistra"},"659":{"code":"BG-20","name":"Sliven"},"660":{"code":"BG-21","name":"Smolyan"},"661":{"code":"BG-22","name":"Sofia City"},"662":{"code":"BG-23","name":"Sofia Province"},"663":{"code":"BG-24","name":"Stara Zagora"},"664":{"code":"BG-25","name":"Targovishte"},"642":{"code":"BG-03","name":"Varna"},"643":{"code":"BG-04","name":"Veliko Tarnovo"},"644":{"code":"BG-05","name":"Vidin"},"645":{"code":"BG-06","name":"Vratsa"},"667":{"code":"BG-28","name":"Yambol"}}},"BH":{"name":"Bahrain"},"BJ":{"name":"Benin"},"BL":{"name":"St. Barth\u00e9lemy"},"BM":{"name":"Bermuda"},"BN":{"name":"Brunei"}
9533,"BO":{"name":"Bolivia","regions":{"632":{"code":"BO-H","name":"Chuquisaca"},"631":{"code":"BO-C","name":"Cochabamba"},"633":{"code":"BO-B","name":"El Beni"},"634":{"code":"BO-L","name":"La Paz"},"635":{"code":"BO-O","name":"Oruro"},"636":{"code":"BO-N","name":"Pando"},"637":{"code":"BO-P","name":"Potos\u00ed"},"638":{"code":"BO-S","name":"Santa Cruz"},"639":{"code":"BO-T","name":"Tarija"}}},"BQ":{"name":"Caribbean Netherlands"},"BR":{"name":"Brazil","regions":{"485":{"code":"AC","name":"Acre"},"486":{"code":"AL","name":"Alagoas"},"487":{"code":"AP","name":"Amap\u00e1"},"488":{"code":"AM","name":"Amazonas"},"489":{"code":"BA","name":"Bahia"},"490":{"code":"CE","name":"Cear\u00e1"},"511":{"code":"DF","name":"Distrito Federal"},"491":{"code":"ES","name":"Esp\u00edrito Santo"},"492":{"code":"GO","name":"Goi\u00e1s"},"493":{"code":"MA","name":"Maranh\u00e3o"},"494":{"code":"MT","name":"Mato Grosso"},"495":{"code":"MS","name":"Mato Grosso do Sul"},"496":{"code":"MG","name":"Minas Gerais"},"497":{"code":"PA","name":"Par\u00e1"},"498":{"code":"PB","name":"Para\u00edba"},"499":{"code":"PR","name":"Paran\u00e1"},"500":{"code":"PE","name":"Pernambuco"},"501":{"code":"PI","name":"Piau\u00ed"},"502":{"code":"RJ","name":"Rio de Janeiro"},"503":{"code":"RN","name":"Rio Grande do Norte"},"504":{"code":"RS","name":"Rio Grande do Sul"},"505":{"code":"RO","name":"Rond\u00f4nia"},"506":{"code":"RR","name":"Roraima"},"507":{"code":"SC","name":"Santa Catarina"},"508":{"code":"SP","name":"S\u00e3o Paulo"},"509":{"code":"SE","name":"Sergipe"},"510":{"code":"TO","name":"Tocantins"}}},"BS":{"name":"Bahamas"},"BT":{"name":"Bhutan"},"BV":{"name":"Bouvet Island"},"BW":{"name":"Botswana"},"BZ":{"name":"Belize"},"CA":{"name":"Canada","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":"Cocos (Keeling) Islands"},"CG":{"name":"Congo - Brazzaville"},"CH":{"name":"Switzerland","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":"C\u00f4te d\u2019Ivoire"},"CK":{"name":"Cook Islands"},"CL":{"name":"Chile","regions":{"668":{"code":"CL-AI","name":"Ais\u00e9n del General Carlos Iba\u00f1ez del Campo"},"669":{"code":"CL-AN","name":"Antofagasta"},"670":{"code":"CL-AP","name":"Arica y Parinacota"},"672":{"code":"CL-AT","name":"Atacama"},"673":{"code":"CL-BI","name":"Biob\u00edo"},"674":{"code":"CL-CO","name":"Coquimbo"},"671":{"code":"CL-AR","name":"La Araucan\u00eda"},"675":{"code":"CL-LI","name":"Libertador General Bernardo O'Higgins"},"676":{"code":"CL-LL","name":"Los Lagos"},"677":{"code":"CL-LR","name":"Los R\u00edos"},"678":{"code":"CL-MA","name":"Magallanes"},"679":{"code":"CL-ML","name":"Maule"},"680":{"code":"CL-NB","name":"\u00d1uble"},"681":{"code":"CL-RM","name":"Regi\u00f3n Metropolitana de Santiago"},"682":{"code":"CL-TA","name":"Tarapac\u00e1"}
9533,"683":{"code":"CL-VS","name":"Valpara\u00edso"}}},"CM":{"name":"Cameroon"},"CN":{"name":"China","regions":{"684":{"code":"CN-AH","name":"Anhui Sheng"},"685":{"code":"CN-BJ","name":"Beijing Shi"},"686":{"code":"CN-CQ","name":"Chongqing Shi"},"687":{"code":"CN-FJ","name":"Fujian Sheng"},"688":{"code":"CN-GS","name":"Gansu Sheng"},"689":{"code":"CN-GD","name":"Guangdong Sheng"},"690":{"code":"CN-GX","name":"Guangxi Zhuangzu Zizhiqu"},"691":{"code":"CN-GZ","name":"Guizhou Sheng"},"692":{"code":"CN-HI","name":"Hainan Sheng"},"693":{"code":"CN-HE","name":"Hebei Sheng"},"694":{"code":"CN-HL","name":"Heilongjiang Sheng"},"695":{"code":"CN-HA","name":"Henan Sheng"},"696":{"code":"CN-HK","name":"Hong Kong SAR"},"697":{"code":"CN-HB","name":"Hubei Sheng"},"698":{"code":"CN-HN","name":"Hunan Sheng"},"699":{"code":"CN-JS","name":"Jiangsu Sheng"},"700":{"code":"CN-JX","name":"Jiangxi Sheng"},"701":{"code":"CN-JL","name":"Jilin Sheng"},"702":{"code":"CN-LN","name":"Liaoning Sheng"},"703":{"code":"CN-MO","name":"Macao SAR"},"704":{"code":"CN-NM","name":"Nei Mongol Zizhiqu"},"705":{"code":"CN-NX","name":"Ningxia Huizi Zizhiqu"},"706":{"code":"CN-QH","name":"Qinghai Sheng"},"707":{"code":"CN-SN","name":"Shaanxi Sheng"},"708":{"code":"CN-SD","name":"Shandong Sheng"},"709":{"code":"CN-SH","name":"Shanghai Shi"},"710":{"code":"CN-SX","name":"Shanxi Sheng"},"711":{"code":"CN-SC","name":"Sichuan Sheng"},"712":{"code":"CN-TW","name":"Taiwan Sheng"},"713":{"code":"CN-TJ","name":"Tianjin Shi"},"714":{"code":"CN-XJ","name":"Xinjiang Uygur Zizhiqu"},"715":{"code":"CN-XZ","name":"Xizang Zizhiqu"},"716":{"code":"CN-YN","name":"Yunnan Sheng"},"717":{"code":"CN-ZJ","name":"Zhejiang Sheng"}}},"CO":{"name":"Colombia","regions":{"718":{"code":"CO-AMA","name":"Amazonas"},"719":{"code":"CO-ANT","name":"Antioquia"},"720":{"code":"CO-ARA","name":"Arauca"},"721":{"code":"CO-ATL","name":"Atl\u00e1ntico"},"722":{"code":"CO-BOL","name":"Bol\u00edvar"},"723":{"code":"CO-BOY","name":"Boyac\u00e1"},"724":{"code":"CO-CAL","name":"Caldas"},"725":{"code":"CO-CAQ","name":"Caquet\u00e1"},"726":{"code":"CO-CAS","name":"Casanare"},"727":{"code":"CO-CAU","name":"Cauca"},"728":{"code":"CO-CES","name":"Cesar"},"729":{"code":"CO-CHO","name":"Choc\u00f3"},"730":{"code":"CO-COR","name":"C\u00f3rdoba"},"731":{"code":"CO-CUN","name":"Cundinamarca"},"732":{"code":"CO-GUA","name":"Guain\u00eda"},"733":{"code":"CO-GUV","name":"Guaviare"},"734":{"code":"CO-HUL","name":"Huila"},"735":{"code":"CO-LAG","name":"La Guajira"},"736":{"code":"CO-MAG","name":"Magdalena"},"737":{"code":"CO-MET","name":"Meta"},"738":{"code":"CO-NAR","name":"Nari\u00f1o"},"739":{"code":"CO-NSA","name":"Norte de Santander"},"740":{"code":"CO-PUT","name":"Putumayo"},"741":{"code":"CO-QUI","name":"Quind\u00edo"},"742":{"code":"CO-RIS","name":"Risaralda"},"743":{"code":"CO-SAP","name":"San Andr\u00e9s y Providencia"},"744":{"code":"CO-SAN","name":"Santander"},"745":{"code":"CO-SUC","name":"Sucre"},"746":{"code":"CO-TOL","name":"Tolima"},"747":{"code":"CO-VAC","name":"Valle del Cauca"},"748":{"code":"CO-VAU","name":"Vaup\u00e9s"},"749":{"code":"CO-VID","name":"Vichada"}}},"CR":{"name":"Costa Rica","regions":{"751":{"code":"CR-AL","name":"Alajuela"},"752":{"code":"CR-CA","name":"Cartago"},"754":{"code":"CR-GU","name":"Guanacaste"},"753":{"code":"CR-HE","name":"Heredia"},"756":{"code":"CR-LI","name":"Lim\u00f3n"},"755":{"code":"CR-PU","name":"Puntarenas"},"750":{"code":"CR-SJ","name":"San Jos\u00e9"}}},"CV":{"name":"Cape Verde"},"CW":{"name":"Cura\u00e7ao"},"CX":{"name":"Christmas Island"},"CY":{"name":"Cyprus"},"CZ":{"name":"Czechia","regions":{"759":{"code":"CZ-31","name":"Jiho\u010desk\u00fd kraj"},"767":{"code":"CZ-64","name":"Jihomoravsk\u00fd kraj"},"761":{"code":"CZ-41","name":"Karlovarsk\u00fd kraj"},"766":{"code":"CZ-63","name":"Kraj Vyso\u010dina"},"764":{"code":"CZ-52","name":"Kr\u00e1lov\u00e9hradeck\u00fd kraj"},"763":{"code":"CZ-51","name":"Libereck\u00fd kraj"},"770":{"code":"CZ-80","name":"Moravskoslezsk\u00fd kraj"},"768":{"code":"CZ-71","name":"Olomouck\u00fd kraj"},"765":{"code":"CZ-53","name":"Pardubick\u00fd kraj"},"760":{"code":"CZ-32","name":"Plze\u0148sk\u00fd kraj"},"757":{"code":"CZ-10","name":"Praha, Hlavn\u00ed m\u011bsto"},"758":{"code":"CZ-20","name":"St\u0159edo\u010desk\u00fd kraj"},"762":{"code":"CZ-42","name":"\u00dasteck\u00fd kraj"},"769":{"code":"CZ-72","name":"Zl\u00ednsk\u00fd kraj"}}},"DE":{"name":"Germany","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":"Djibouti"},"DK":{"name":"Denmark","regions":{"771":{"code":"DK-84","name":"Hovedstaden"},"772":{"code":"DK-82","name":"Midtjylland"},"773":{"code":"DK-81","name":"Nordjylland"},"774":{"code":"DK-85","name":"Sj\u00e6lland"},"775":{"code":"DK-83","name":"Syddanmark"}}},"DM":{"name":"Dominica"}
9533,"DO":{"name":"Dominican Republic"},"DZ":{"name":"Algeria"},"EC":{"name":"Ecuador","regions":{"776":{"code":"EC-A","name":"Azuay"},"777":{"code":"EC-B","name":"Bol\u00edvar"},"778":{"code":"EC-F","name":"Ca\u00f1ar"},"779":{"code":"EC-C","name":"Carchi"},"780":{"code":"EC-H","name":"Chimborazo"},"781":{"code":"EC-X","name":"Cotopaxi"},"782":{"code":"EC-O","name":"El Oro"},"783":{"code":"EC-E","name":"Esmeraldas"},"784":{"code":"EC-W","name":"Gal\u00e1pagos"},"785":{"code":"EC-G","name":"Guayas"},"786":{"code":"EC-I","name":"Imbabura"},"787":{"code":"EC-L","name":"Loja"},"788":{"code":"EC-R","name":"Los R\u00edos"},"789":{"code":"EC-M","name":"Manab\u00ed"},"790":{"code":"EC-S","name":"Morona Santiago"},"791":{"code":"EC-N","name":"Napo"},"792":{"code":"EC-D","name":"Orellana"},"793":{"code":"EC-Y","name":"Pastaza"},"794":{"code":"EC-P","name":"Pichincha"},"795":{"code":"EC-SE","name":"Santa Elena"},"796":{"code":"EC-SD","name":"Santo Domingo de los Ts\u00e1chilas"},"797":{"code":"EC-U","name":"Sucumb\u00edos"},"798":{"code":"EC-T","name":"Tungurahua"},"799":{"code":"EC-Z","name":"Zamora Chinchipe"}}},"EE":{"name":"Estonia","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":"Egypt"},"EH":{"name":"Western Sahara"},"ER":{"name":"Eritrea"},"ES":{"name":"Spain","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":"Ethiopia"},"FI":{"name":"Finland","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":"Falkland Islands"},"FM":{"name":"Micronesia"},"FO":{"name":"Faroe Islands"},"FR":{"name":"France","regions":{"182":{"code":"1","name":"Ain"},"183":{"code":"2","name":"Aisne"},"184":{"code":"3","name":"Allier"}
9533,"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":"Gabon"},"GB":{"name":"United Kingdom"},"GD":{"name":"Grenada"},"GE":{"name":"Georgia"},"GF":{"name":"French Guiana"},"GG":{"name":"Guernsey"},"GH":{"name":"Ghana"},"GI":{"name":"Gibraltar"},"GL":{"name":"Greenland"},"GM":{"name":"Gambia"},"GN":{"name":"Guinea"},"GP":{"name":"Guadeloupe"},"GQ":{"name":"Equatorial Guinea"},"GR":{"name":"Greece","regions":{"813":{"code":"GR-69","name":"\u00c1gion \u00d3ros"},"800":{"code":"GR-A","name":"Anatolik\u00ed Makedon\u00eda kai Thr\u00e1ki"},"801":{"code":"GR-I","name":"Attik\u00ed"},"802":{"code":"GR-G","name":"Dytik\u00ed Ell\u00e1da"},"803":{"code":"GR-C","name":"Dytik\u00ed Makedon\u00eda"},"804":{"code":"GR-F","name":"Ion\u00eda N\u00edsia"},"805":{"code":"GR-D","name":"\u00cdpeiros"},"806":{"code":"GR-B","name":"Kentrik\u00ed Makedon\u00eda"},"807":{"code":"GR-M","name":"Kr\u00edti"},"808":{"code":"GR-L","name":"N\u00f3tio Aiga\u00edo"},"809":{"code":"GR-J","name":"Pelop\u00f3nnisos"},"810":{"code":"GR-H","name":"Stere\u00e1 Ell\u00e1da"}
9533,"811":{"code":"GR-E","name":"Thessal\u00eda"},"812":{"code":"GR-K","name":"V\u00f3reio Aiga\u00edo"}}},"GS":{"name":"South Georgia & South Sandwich Islands"},"GT":{"name":"Guatemala"},"GU":{"name":"Guam"},"GW":{"name":"Guinea-Bissau"},"GY":{"name":"Guyana","regions":{"814":{"code":"GY-BA","name":"Barima-Waini"},"815":{"code":"GY-CU","name":"Cuyuni-Mazaruni"},"816":{"code":"GY-DE","name":"Demerara-Mahaica"},"817":{"code":"GY-EB","name":"East Berbice-Corentyne"},"818":{"code":"GY-ES","name":"Essequibo Islands-West Demerara"},"819":{"code":"GY-MA","name":"Mahaica-Berbice"},"820":{"code":"GY-PM","name":"Pomeroon-Supenaam"},"821":{"code":"GY-PT","name":"Potaro-Siparuni"},"822":{"code":"GY-UD","name":"Upper Demerara-Berbice"},"823":{"code":"GY-UT","name":"Upper Takutu-Upper Essequibo"}}},"HK":{"name":"Hong Kong SAR China"},"HM":{"name":"Heard & McDonald Islands"},"HN":{"name":"Honduras"},"HR":{"name":"Croatia","regions":{"554":{"code":"HR-07","name":"Bjelovarsko-bilogorska \u017eupanija"},"559":{"code":"HR-12","name":"Brodsko-posavska \u017eupanija"},"566":{"code":"HR-19","name":"Dubrova\u010dko-neretvanska \u017eupanija"},"568":{"code":"HR-21","name":"Grad Zagreb"},"565":{"code":"HR-18","name":"Istarska \u017eupanija"},"551":{"code":"HR-04","name":"Karlova\u010dka \u017eupanija"},"553":{"code":"HR-06","name":"Koprivni\u010dko-kri\u017eeva\u010dka \u017eupanija"},"549":{"code":"HR-02","name":"Krapinsko-zagorska \u017eupanija"},"556":{"code":"HR-09","name":"Li\u010dko-senjska \u017eupanija"},"567":{"code":"HR-20","name":"Me\u0111imurska \u017eupanija"},"561":{"code":"HR-14","name":"Osje\u010dko-baranjska \u017eupanija"},"558":{"code":"HR-11","name":"Po\u017ee\u0161ko-slavonska \u017eupanija"},"555":{"code":"HR-08","name":"Primorsko-goranska \u017eupanija"},"562":{"code":"HR-15","name":"\u0160ibensko-kninska \u017eupanija"},"550":{"code":"HR-03","name":"Sisa\u010dko-moslava\u010dka \u017eupanija"},"564":{"code":"HR-17","name":"Splitsko-dalmatinska \u017eupanija"},"552":{"code":"HR-05","name":"Vara\u017edinska \u017eupanija"},"557":{"code":"HR-10","name":"Viroviti\u010dko-podravska \u017eupanija"},"563":{"code":"HR-16","name":"Vukovarsko-srijemska \u017eupanija"},"560":{"code":"HR-13","name":"Zadarska \u017eupanija"},"548":{"code":"HR-01","name":"Zagreba\u010dka \u017eupanija"}}},"HT":{"name":"Haiti"},"HU":{"name":"Hungary"},"ID":{"name":"Indonesia"},"IE":{"name":"Ireland"},"IL":{"name":"Israel"},"IM":{"name":"Isle of Man"},"IO":{"name":"British Indian Ocean Territory"},"IS":{"name":"Iceland","regions":{"830":{"code":"IS-07","name":"Austurland"},"824":{"code":"IS-01","name":"H\u00f6fu\u00f0borgarsv\u00e6\u00f0i"},"829":{"code":"IS-06","name":"Nor\u00f0urland eystra"},"828":{"code":"IS-05","name":"Nor\u00f0urland vestra"},"831":{"code":"IS-08","name":"Su\u00f0urland"},"825":{"code":"IS-02","name":"Su\u00f0urnes"},"827":{"code":"IS-04","name":"Vestfir\u00f0ir"},"826":{"code":"IS-03","name":"Vesturland"}}},"IT":{"name":"Italy","regions":{"832":{"code":"AG","name":"Agrigento"},"833":{"code":"AL","name":"Alessandria"},"834":{"code":"AN","name":"Ancona"},"835":{"code":"AO","name":"Aosta"},"837":{"code":"AR","name":"Arezzo"},"838":{"code":"AP","name":"Ascoli-Piceno"},"839":{"code":"AT","name":"Asti"},"840":{"code":"AV","name":"Avellino"},"841":{"code":"BA","name":"Bari"},"842":{"code":"BT","name":"Barletta-Andria-Trani"},"843":{"code":"BL","name":"Belluno"},"844":{"code":"BN","name":"Benevento"},"845":{"code":"BG","name":"Bergamo"},"846":{"code":"BI","name":"Biella"},"847":{"code":"BO","name":"Bologna"},"848":{"code":"BZ","name":"Bolzano"},"849":{"code":"BS","name":"Brescia"},"850":{"code":"BR","name":"Brindisi"},"851":{"code":"CA","name":"Cagliari"},"852":{"code":"CL","name":"Caltanissetta"},"853":{"code":"CB","name":"Campobasso"},"854":{"code":"CI","name":"Carbonia Iglesias"},"855":{"code":"CE","name":"Caserta"},"856":{"code":"CT","name":"Catania"},"857":{"code":"CZ","name":"Catanzaro"},"858":{"code":"CH","name":"Chieti"},"859":{"code":"CO","name":"Como"},"860":{"code":"CS","name":"Cosenza"},"861":{"code":"CR","name":"Cremona"},"862":{"code":"KR","name":"Crotone"},"863":{"code":"CN","name":"Cuneo"},"864":{"code":"EN","name":"Enna"},"865":{"code":"FM","name":"Fermo"},"866":{"code":"FE","name":"Ferrara"},"867":{"code":"FI","name":"Firenze"},"868":{"code":"FG","name":"Foggia"},"869":{"code":"FC","name":"Forli-Cesena"},"870":{"code":"FR","name":"Frosinone"},"871":{"code":"GE","name":"Genova"},"872":{"code":"GO","name":"Gorizia"},"873":{"code":"GR","name":"Grosseto"},"874":{"code":"IM","name":"Imperia"},"875":{"code":"IS","name":"Isernia"},"836":{"code":"AQ","name":"L'Aquila"},"876":{"code":"SP","name":"La-Spezia"},"877":{"code":"LT","name":"Latina"},"878":{"code":"LE","name":"Lecce"},"879":{"code":"LC","name":"Lecco"},"880":{"code":"LI","name":"Livorno"},"881":{"code":"LO","name":"Lodi"},"882":{"code":"LU","name":"Lucca"},"883":{"code":"MC","name":"Macerata"},"884":{"code":"MN","name":"Mantova"},"885":{"code":"MS","name":"Massa-Carrara"},"886":{"code":"MT","name":"Matera"},"887":{"code":"VS","name":"Medio Campidano"},"888":{"code":"ME","name":"Messina"},"889":{"code":"MI","name":"Milano"},"890":{"code":"MO","name":"Modena"},"891":{"code":"MB","name":"Monza-Brianza"},"892":{"code":"NA","name":"Napoli"},"893":{"code":"NO","name":"Novara"},"894":{"code":"NU","name":"Nuoro"},"895":{"code":"OG","name":"Ogliastra"},"896":{"code":"OT","name":"Olbia Tempio"},"897":{"code":"OR","name":"Oristano"},"898":{"code":"PD","name":"Padova"},"899":{"code":"PA","name":"Palermo"},"900":{"code":"PR","name":"Parma"},"901":{"code":"PV","name":"Pavia"},"902":{"code":"PG","name":"Perugia"},"903":{"code":"PU","name":"Pesaro-Urbino"},"904":{"code":"PE","name":"Pescara"},"905":{"code":"PC","name":"Piacenza"},"906":{"code":"PI","name":"Pisa"},"907":{"code":"PT","name":"Pistoia"},"908":{"code":"PN","name":"Pordenone"},"909":{"code":"PZ","name":"Potenza"},"910":{"code":"PO","name":"Prato"},"911":{"code":"RG","name":"Ragusa"},"912":{"code":"RA","name":"Ravenna"},"913":{"code":"RC","name":"Reggio-Calabria"},"914":{"code":"RE","name":"Reggio-Emilia"},"915":{"code":"RI","name":"Rieti"},"916":{"code":"RN","name":"Rimini"},"917":{"code":"RM","name":"Roma"},"918":{"code":"RO","name":"Rovigo"},"919":{"code":"SA","name":"Salerno"},"920":{"code":"SS","name":"Sassari"},"921":{"code":"SV","name":"Savona"},"922":{"code":"SI","name":"Siena"},"923":{"code":"SR","name":"Siracusa"},"924":{"code":"SO","name":"Sondrio"},"925":{"code":"TA","name":"Taranto"},"926":{"code":"TE","name":"Teramo"},"927":{"code":"TR","name":"Terni"},"928":{"code":"TO","name":"Torino"},"929":{"code":"TP","name":"Trapani"},"930":{"code":"TN","name":"Trento"},"931":{"code":"TV","name":"Treviso"},"932":{"code":"TS","name":"Trieste"},"933":{"code":"UD","name":"Udine"},"934":{"code":"VA","name":"Varese"},"935":{"code":"VE","name":"Venezia"},"936":{"code":"VB","name":"Verbania"},"937":{"code":"VC","name":"Vercelli"},"938":{"code":"VR","name":"Verona"}
9533,"939":{"code":"VV","name":"Vibo-Valentia"},"940":{"code":"VI","name":"Vicenza"},"941":{"code":"VT","name":"Viterbo"}}},"JE":{"name":"Jersey"},"JM":{"name":"Jamaica"},"JO":{"name":"Jordan"},"JP":{"name":"Japan"},"KE":{"name":"Kenya"},"KG":{"name":"Kyrgyzstan"},"KH":{"name":"Cambodia"},"KI":{"name":"Kiribati"},"KM":{"name":"Comoros"},"KN":{"name":"St. Kitts & Nevis"},"KR":{"name":"South Korea"},"KW":{"name":"Kuwait"},"KY":{"name":"Cayman Islands"},"KZ":{"name":"Kazakhstan"},"LA":{"name":"Laos"},"LC":{"name":"St. Lucia"},"LI":{"name":"Liechtenstein"},"LK":{"name":"Sri Lanka"},"LR":{"name":"Liberia"},"LS":{"name":"Lesotho"},"LT":{"name":"Lithuania","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":"Luxembourg"},"LV":{"name":"Latvia","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"}
9533,"451":{"code":"Skr\u012bveru novads","name":"Skr\u012bveru novads"},"450":{"code":"Skrundas novads","name":"Skrundas novads"},"452":{"code":"Smiltenes novads","name":"Smiltenes novads"},"453":{"code":"Stopi\u0146u novads","name":"Stopi\u0146u novads"},"454":{"code":"Stren\u010du novads","name":"Stren\u010du novads"},"456":{"code":"LV-TA","name":"Talsu novads"},"458":{"code":"T\u0113rvetes novads","name":"T\u0113rvetes novads"},"457":{"code":"LV-TU","name":"Tukuma novads"},"459":{"code":"Vai\u0146odes novads","name":"Vai\u0146odes novads"},"460":{"code":"LV-VK","name":"Valkas novads"},"364":{"code":"Valmiera","name":"Valmiera"},"461":{"code":"LV-VM","name":"Valmieras novads"},"462":{"code":"Varak\u013c\u0101nu novads","name":"Varak\u013c\u0101nu novads"},"469":{"code":"V\u0101rkavas novads","name":"V\u0101rkavas novads"},"463":{"code":"Vecpiebalgas novads","name":"Vecpiebalgas novads"},"464":{"code":"Vecumnieku novads","name":"Vecumnieku novads"},"365":{"code":"LV-VEN","name":"Ventspils"},"465":{"code":"LV-VE","name":"Ventspils novads"},"466":{"code":"Vies\u012btes novads","name":"Vies\u012btes novads"},"467":{"code":"Vi\u013cakas novads","name":"Vi\u013cakas novads"},"468":{"code":"Vi\u013c\u0101nu novads","name":"Vi\u013c\u0101nu novads"},"470":{"code":"Zilupes novads","name":"Zilupes novads"}}},"MC":{"name":"Monaco"},"MD":{"name":"Moldova"},"ME":{"name":"Montenegro"},"MF":{"name":"St. Martin"},"MG":{"name":"Madagascar"},"MH":{"name":"Marshall Islands"},"MK":{"name":"North Macedonia"},"MM":{"name":"Myanmar (Burma)"},"MN":{"name":"Mongolia"},"MO":{"name":"Macao SAR China"},"MP":{"name":"Northern Mariana Islands"},"MQ":{"name":"Martinique"},"MR":{"name":"Mauritania"},"MS":{"name":"Montserrat"},"MT":{"name":"Malta"},"MU":{"name":"Mauritius"},"MW":{"name":"Malawi"},"MX":{"name":"Mexico","regions":{"942":{"code":"AGU","name":"Aguascalientes"},"943":{"code":"BCN","name":"Baja California"},"944":{"code":"BCS","name":"Baja California Sur"},"945":{"code":"CAM","name":"Campeche"},"946":{"code":"CHP","name":"Chiapas"},"947":{"code":"CHH","name":"Chihuahua"},"948":{"code":"CMX","name":"Ciudad de M\u00e9xico"},"949":{"code":"COA","name":"Coahuila"},"950":{"code":"COL","name":"Colima"},"951":{"code":"DUR","name":"Durango"},"952":{"code":"MEX","name":"Estado de M\u00e9xico"},"953":{"code":"GUA","name":"Guanajuato"},"954":{"code":"GRO","name":"Guerrero"},"955":{"code":"HID","name":"Hidalgo"},"956":{"code":"JAL","name":"Jalisco"},"957":{"code":"MIC","name":"Michoac\u00e1n"},"958":{"code":"MOR","name":"Morelos"},"959":{"code":"NAY","name":"Nayarit"},"960":{"code":"NLE","name":"Nuevo Le\u00f3n"},"961":{"code":"OAX","name":"Oaxaca"},"962":{"code":"PUE","name":"Puebla"},"963":{"code":"QUE","name":"Quer\u00e9taro"},"964":{"code":"ROO","name":"Quintana Roo"},"965":{"code":"SLP","name":"San Luis Potos\u00ed"},"966":{"code":"SIN","name":"Sinaloa"},"967":{"code":"SON","name":"Sonora"},"968":{"code":"TAB","name":"Tabasco"},"969":{"code":"TAM","name":"Tamaulipas"},"970":{"code":"TLA","name":"Tlaxcala"},"971":{"code":"VER","name":"Veracruz"},"972":{"code":"YUC","name":"Yucat\u00e1n"},"973":{"code":"ZAC","name":"Zacatecas"}}},"MZ":{"name":"Mozambique"},"NA":{"name":"Namibia"},"NC":{"name":"New Caledonia"},"NE":{"name":"Niger"},"NF":{"name":"Norfolk Island"},"NG":{"name":"Nigeria"},"NL":{"name":"Netherlands"},"NO":{"name":"Norway"},"NP":{"name":"Nepal"},"NR":{"name":"Nauru"},"NU":{"name":"Niue"},"NZ":{"name":"New Zealand"},"OM":{"name":"Oman"},"PA":{"name":"Panama"},"PE":{"name":"Peru","regions":{"993":{"code":"PE-AMA","name":"Amazonas"},"994":{"code":"PE-ANC","name":"Ancash"},"995":{"code":"PE-APU","name":"Apur\u00edmac"},"996":{"code":"PE-ARE","name":"Arequipa"},"997":{"code":"PE-AYA","name":"Ayacucho"},"998":{"code":"PE-CAJ","name":"Cajamarca"},"999":{"code":"PE-CUS","name":"Cusco"},"1000":{"code":"PE-CAL","name":"El Callao"},"1001":{"code":"PE-HUV","name":"Huancavelica"},"1002":{"code":"PE-HUC","name":"Hu\u00e1nuco"},"1003":{"code":"PE-ICA","name":"Ica"},"1004":{"code":"PE-JUN","name":"Jun\u00edn"},"1005":{"code":"PE-LAL","name":"La Libertad"},"1006":{"code":"PE-LAM","name":"Lambayeque"},"1007":{"code":"PE-LIM","name":"Lima"},"1008":{"code":"PE-LOR","name":"Loreto"},"1009":{"code":"PE-MDD","name":"Madre de Dios"},"1010":{"code":"PE-MOQ","name":"Moquegua"}
9533,"992":{"code":"PE-LMA","name":"Municipalidad Metropolitana de Lima"},"1011":{"code":"PE-PAS","name":"Pasco"},"1012":{"code":"PE-PIU","name":"Piura"},"1013":{"code":"PE-PUN","name":"Puno"},"1014":{"code":"PE-SAM","name":"San Mart\u00edn"},"1015":{"code":"PE-TAC","name":"Tacna"},"1016":{"code":"PE-TUM","name":"Tumbes"},"1017":{"code":"PE-UCA","name":"Ucayali"}}},"PF":{"name":"French Polynesia"},"PG":{"name":"Papua New Guinea"},"PH":{"name":"Philippines"},"PK":{"name":"Pakistan"},"PL":{"name":"Poland","regions":{"1018":{"code":"PL-02","name":"dolno\u015bl\u0105skie"},"1019":{"code":"PL-04","name":"kujawsko-pomorskie"},"1020":{"code":"PL-06","name":"lubelskie"},"1021":{"code":"PL-08","name":"lubuskie"},"1024":{"code":"PL-14","name":"mazowieckie"},"1023":{"code":"PL-12","name":"ma\u0142opolskie"},"1025":{"code":"PL-16","name":"opolskie"},"1026":{"code":"PL-18","name":"podkarpackie"},"1027":{"code":"PL-20","name":"podlaskie"},"1028":{"code":"PL-22","name":"pomorskie"},"1029":{"code":"PL-24","name":"\u015bl\u0105skie"},"1030":{"code":"PL-26","name":"\u015bwi\u0119tokrzyskie"},"1031":{"code":"PL-28","name":"warmi\u0144sko-mazurskie"},"1032":{"code":"PL-30","name":"wielkopolskie"},"1033":{"code":"PL-32","name":"zachodniopomorskie"},"1022":{"code":"PL-10","name":"\u0142\u00f3dzkie"}}},"PM":{"name":"St. Pierre & Miquelon"},"PN":{"name":"Pitcairn Islands"},"PS":{"name":"Palestinian Territories"},"PT":{"name":"Portugal","regions":{"1034":{"code":"PT-01","name":"Aveiro"},"1035":{"code":"PT-02","name":"Beja"},"1036":{"code":"PT-03","name":"Braga"},"1037":{"code":"PT-04","name":"Bragan\u00e7a"},"1038":{"code":"PT-05","name":"Castelo Branco"},"1039":{"code":"PT-06","name":"Coimbra"},"1040":{"code":"PT-07","name":"\u00c9vora"},"1041":{"code":"PT-08","name":"Faro"},"1042":{"code":"PT-09","name":"Guarda"},"1043":{"code":"PT-10","name":"Leiria"},"1044":{"code":"PT-11","name":"Lisboa"},"1045":{"code":"PT-12","name":"Portalegre"},"1046":{"code":"PT-13","name":"Porto"},"1053":{"code":"PT-30","name":"Regi\u00e3o Aut\u00f3noma da Madeira"},"1052":{"code":"PT-20","name":"Regi\u00e3o Aut\u00f3noma dos A\u00e7ores"},"1047":{"code":"PT-14","name":"Santar\u00e9m"},"1048":{"code":"PT-15","name":"Set\u00fabal"},"1049":{"code":"PT-16","name":"Viana do Castelo"},"1050":{"code":"PT-17","name":"Vila Real"},"1051":{"code":"PT-18","name":"Viseu"}}},"PW":{"name":"Palau"},"PY":{"name":"Paraguay","regions":{"975":{"code":"PY-16","name":"Alto Paraguay"},"976":{"code":"PY-10","name":"Alto Paran\u00e1"},"977":{"code":"PY-13","name":"Amambay"},"974":{"code":"PY-ASU","name":"Asunci\u00f3n"},"978":{"code":"PY-19","name":"Boquer\u00f3n"},"979":{"code":"PY-5","name":"Caaguaz\u00fa"},"980":{"code":"PY-6","name":"Caazap\u00e1"},"981":{"code":"PY-14","name":"Canindey\u00fa"},"982":{"code":"PY-11","name":"Central"},"983":{"code":"PY-1","name":"Concepci\u00f3n"},"984":{"code":"PY-3","name":"Cordillera"},"985":{"code":"PY-4","name":"Guair\u00e1"},"986":{"code":"PY-7","name":"Itap\u00faa"},"987":{"code":"PY-8","name":"Misiones"},"988":{"code":"PY-12","name":"\u00d1eembuc\u00fa"},"989":{"code":"PY-9","name":"Paraguar\u00ed"},"990":{"code":"PY-15","name":"Presidente Hayes"},"991":{"code":"PY-2","name":"San Pedro"}}},"QA":{"name":"Qatar"},"RE":{"name":"R\u00e9union"},"RO":{"name":"Romania","regions":{"278":{"code":"AB","name":"Alba"},"279":{"code":"AR","name":"Arad"},"280":{"code":"AG","name":"Arge\u015f"},"281":{"code":"BC","name":"Bac\u0103u"},"282":{"code":"BH","name":"Bihor"},"283":{"code":"BN","name":"Bistri\u0163a-N\u0103s\u0103ud"},"284":{"code":"BT","name":"Boto\u015fani"},"286":{"code":"BR","name":"Br\u0103ila"},"285":{"code":"BV","name":"Bra\u015fov"},"287":{"code":"B","name":"Bucure\u015fti"},"288":{"code":"BZ","name":"Buz\u0103u"},"290":{"code":"CL","name":"C\u0103l\u0103ra\u015fi"},"289":{"code":"CS","name":"Cara\u015f-Severin"},"291":{"code":"CJ","name":"Cluj"},"292":{"code":"CT","name":"Constan\u0163a"},"293":{"code":"CV","name":"Covasna"},"294":{"code":"DB","name":"D\u00e2mbovi\u0163a"},"295":{"code":"DJ","name":"Dolj"},"296":{"code":"GL","name":"Gala\u0163i"},"297":{"code":"GR","name":"Giurgiu"},"298":{"code":"GJ","name":"Gorj"},"299":{"code":"HR","name":"Harghita"},"300":{"code":"HD","name":"Hunedoara"},"301":{"code":"IL","name":"Ialomi\u0163a"},"302":{"code":"IS","name":"Ia\u015fi"},"303":{"code":"IF","name":"Ilfov"},"304":{"code":"MM","name":"Maramure\u015f"},"305":{"code":"MH","name":"Mehedin\u0163i"},"306":{"code":"MS","name":"Mure\u015f"},"307":{"code":"NT","name":"Neam\u0163"},"308":{"code":"OT","name":"Olt"},"309":{"code":"PH","name":"Prahova"},"311":{"code":"SJ","name":"S\u0103laj"},"310":{"code":"SM","name":"Satu-Mare"},"312":{"code":"SB","name":"Sibiu"},"313":{"code":"SV","name":"Suceava"},"314":{"code":"TR","name":"Teleorman"},"315":{"code":"TM","name":"Timi\u015f"},"316":{"code":"TL","name":"Tulcea"},"318":{"code":"VL","name":"V\u00e2lcea"},"317":{"code":"VS","name":"Vaslui"},"319":{"code":"VN","name":"Vrancea"}}},"RS":{"name":"Serbia"},"RW":{"name":"Rwanda"},"SB":{"name":"Solomon Islands"},"SC":{"name":"Seychelles"},"SE":{"name":"Sweden","regions":{"1064":{"code":"SE-K","name":"Blekinge l\u00e4n"}
9533,"1065":{"code":"SE-W","name":"Dalarnas l\u00e4n"},"1067":{"code":"SE-X","name":"G\u00e4vleborgs l\u00e4n"},"1066":{"code":"SE-I","name":"Gotlands l\u00e4n"},"1068":{"code":"SE-N","name":"Hallands l\u00e4n"},"1069":{"code":"SE-Z","name":"J\u00e4mtlands l\u00e4n"},"1070":{"code":"SE-F","name":"J\u00f6nk\u00f6pings l\u00e4n"},"1071":{"code":"SE-H","name":"Kalmar l\u00e4n"},"1072":{"code":"SE-G","name":"Kronobergs l\u00e4n"},"1073":{"code":"SE-BD","name":"Norrbottens l\u00e4n"},"1083":{"code":"SE-T","name":"\u00d6rebro l\u00e4n"},"1084":{"code":"SE-E","name":"\u00d6sterg\u00f6tlands l\u00e4n"},"1074":{"code":"SE-M","name":"Sk\u00e5ne l\u00e4n"},"1076":{"code":"SE-D","name":"S\u00f6dermanlands l\u00e4n"},"1075":{"code":"SE-AB","name":"Stockholms l\u00e4n"},"1077":{"code":"SE-C","name":"Uppsala l\u00e4n"},"1078":{"code":"SE-S","name":"V\u00e4rmlands l\u00e4n"},"1079":{"code":"SE-AC","name":"V\u00e4sterbottens l\u00e4n"},"1080":{"code":"SE-Y","name":"V\u00e4sternorrlands l\u00e4n"},"1081":{"code":"SE-U","name":"V\u00e4stmanlands l\u00e4n"},"1082":{"code":"SE-O","name":"V\u00e4stra G\u00f6talands l\u00e4n"}}},"SG":{"name":"Singapore"},"SH":{"name":"St. Helena"},"SI":{"name":"Slovenia"},"SJ":{"name":"Svalbard & Jan Mayen"},"SK":{"name":"Slovakia"},"SL":{"name":"Sierra Leone"},"SM":{"name":"San Marino"},"SN":{"name":"Senegal"},"SR":{"name":"Suriname","regions":{"1054":{"code":"SR-BR","name":"Brokopondo"},"1055":{"code":"SR-CM","name":"Commewijne"},"1056":{"code":"SR-CR","name":"Coronie"},"1057":{"code":"SR-MA","name":"Marowijne"},"1058":{"code":"SR-NI","name":"Nickerie"},"1059":{"code":"SR-PR","name":"Para"},"1060":{"code":"SR-PM","name":"Paramaribo"},"1061":{"code":"SR-SA","name":"Saramacca"},"1062":{"code":"SR-SI","name":"Sipaliwini"},"1063":{"code":"SR-WA","name":"Wanica"}}},"ST":{"name":"S\u00e3o Tom\u00e9 & Pr\u00edncipe"},"SV":{"name":"El Salvador"},"SX":{"name":"Sint Maarten"},"SZ":{"name":"Eswatini"},"TC":{"name":"Turks & Caicos Islands"},"TD":{"name":"Chad"},"TF":{"name":"French Southern Territories"},"TG":{"name":"Togo"},"TJ":{"name":"Tajikistan"},"TK":{"name":"Tokelau"},"TL":{"name":"Timor-Leste"},"TM":{"name":"Turkmenistan"},"TN":{"name":"Tunisia"},"TO":{"name":"Tonga"},"TR":{"name":"T\u00fcrkiye"},"TT":{"name":"Trinidad & Tobago"},"TV":{"name":"Tuvalu"},"TW":{"name":"Taiwan"},"TZ":{"name":"Tanzania"},"UG":{"name":"Uganda"},"UM":{"name":"U.S. Outlying Islands"},"US":{"name":"United States","regions":{"2":{"code":"AK","name":"Alaska"},"3":{"code":"AS","name":"American Samoa"},"4":{"code":"AZ","name":"Arizona"},"5":{"code":"AR","name":"Arkansas"},"6":{"code":"AE","name":"Armed Forces Africa"},"7":{"code":"AA","name":"Armed Forces Americas"},"8":{"code":"AE","name":"Armed Forces Canada"},"9":{"code":"AE","name":"Armed Forces Europe"},"10":{"code":"AE","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"},"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"}
9533,"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":"Uruguay","regions":{"1112":{"code":"UY-AR","name":"Artigas"},"1113":{"code":"UY-CA","name":"Canelones"},"1114":{"code":"UY-CL","name":"Cerro Largo"},"1115":{"code":"UY-CO","name":"Colonia"},"1116":{"code":"UY-DU","name":"Durazno"},"1117":{"code":"UY-FS","name":"Flores"},"1118":{"code":"UY-FD","name":"Florida"},"1119":{"code":"UY-LA","name":"Lavalleja"},"1120":{"code":"UY-MA","name":"Maldonado"},"1121":{"code":"UY-MO","name":"Montevideo"},"1122":{"code":"UY-PA","name":"Paysandu"},"1123":{"code":"UY-RN","name":"R\u00edo Negro"},"1124":{"code":"UY-RV","name":"Rivera"},"1125":{"code":"UY-RO","name":"Rocha"},"1126":{"code":"UY-SA","name":"Salto"},"1127":{"code":"UY-SJ","name":"San Jos\u00e9"},"1128":{"code":"UY-SO","name":"Soriano"},"1129":{"code":"UY-TA","name":"Tacuaremb\u00f3"},"1130":{"code":"UY-TT","name":"Treinta y Tres"}}},"UZ":{"name":"Uzbekistan"},"VA":{"name":"Vatican City"},"VC":{"name":"St. Vincent & Grenadines"},"VG":{"name":"British Virgin Islands"},"VI":{"name":"U.S. Virgin Islands"},"VU":{"name":"Vanuatu"},"WF":{"name":"Wallis & Futuna"},"WS":{"name":"Samoa"},"XK":{"name":"Kosovo"},"YE":{"name":"Yemen"},"YT":{"name":"Mayotte"},"ZA":{"name":"South Africa"},"ZM":{"name":"Zambia"},"data_id":1791037041},"captcha":[],"instant-purchase":[],"loggedAsCustomer":[],"persistent":[],"review":[],"payments":{"sdkParams":{"paypal":[{"name":"src","value":"https:\/\/www.paypal.com\/sdk\/js?client-id=AXgJpe2oER86DpKD05zLIJa6-GgkY--5X1FK2iZG3JwlMNX6GK0JJp4jqNwUUCcjZgrOoW2zmvYklMW4&intent=capture&locale=en_US&merchant-id=LNG63PUBYFCKW&currency=USD&disable-funding=bancontact,boleto,boletobancario,blik,eps,giropay,ideal,itau,mercadopago,multibanco,mybank,oxxo,payu,p24,satispay,sepa,sofort,trustly,wechatpay,applepay,card&enable-funding=venmo,paylater&components=buttons,messages&commit=false"}],"applepay":[{"name":"src","value":"https:\/\/www.paypal.com\/sdk\/js?client-id=AXgJpe2oER86DpKD05zLIJa6-GgkY--5X1FK2iZG3JwlMNX6GK0JJp4jqNwUUCcjZgrOoW2zmvYklMW4&intent=capture&locale=en_US&merchant-id=LNG63PUBYFCKW&currency=USD&disable-funding=bancontact,boleto,boletobancario,blik,eps,giropay,ideal,itau,mercadopago,multibanco,mybank,oxxo,payu,p24,satispay,sepa,sofort,trustly,wechatpay&components=applepay"}],"googlepay":[{"name":"src","value":"https:\/\/www.paypal.com\/sdk\/js?client-id=AXgJpe2oER86DpKD05zLIJa6-GgkY--5X1FK2iZG3JwlMNX6GK0JJp4jqNwUUCcjZgrOoW2zmvYklMW4&intent=capture&locale=en_US&merchant-id=LNG63PUBYFCKW&currency=USD&disable-funding=bancontact,boleto,boletobancario,blik,eps,giropay,ideal,itau,mercadopago,multibanco,mybank,oxxo,payu,p24,satispay,sepa,sofort,trustly,wechatpay&components=googlepay"}]},"data_id":1791037041},"wishlist":{"items":[]},"webforms":[],"pslogin":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[],"paypal-buyer-country":[]}</script>
9533
9534<style>
9535    .afterpay-paragraph{
9536        font-size: 14px !important;
9537    }
9538    .afterpay-main-text{
9539        font-size: 14px !important;
9540    }
9541    .catalog-category-view .product-image-photo{max-width:360px !important;max-height: auto !important;width: 100% !important;}
9542    @media(min-width:1840px) {
9543        .ais-Hits ol { grid-template-columns: repeat(4,minmax(0,1fr)) }
9544    }
9545    #customer-review-list .customer-review-item:not(:last-child) {border-bottom: solid 1px #cfcfcf; padding-bottom: 40px;}
9546    .grecaptcha-badge {
9547      transform: scale(0.9);
9548      -webkit-transform: scale(0.9);
9549    }
9550</style>
9551<script>
9552    document.addEventListener('DOMContentLoaded', function () {
9553        document.querySelectorAll('div[aria-controls]').forEach(function (el) {
9554            el.setAttribute('role', 'button');
9555            el.setAttribute('tabindex', '0');
9556            el.style.cursor = 'default';
9557            el.addEventListener('keydown', function (e) {
9558                if (e.key === 'Enter' || e.key === ' ') {
9559                    e.preventDefault();
9560                    el.click();
9561                }
9562            });
9563        });
9564    });
9565</script>
vendor: 1 bytes, line 9565
9565
9566<script>
9567    (function () {
9568        if (typeof window === 'undefined' || typeof document === 'undefined' || !window.sessionStorage) {
9569            return;
9570        }
9571
9572        var STORE_KEY_PREFIX = 'hyva:scroll:';
9573
9574        function isHomepage() {
9575            return document.body && document.body.classList.contains('cms-index-index');
9576        }
9577
9578        function pageKey() {
9579            return STORE_KEY_PREFIX + window.location.pathname + window.location.search;
9580        }
9581
9582        function saveScroll() {
9583            sessionStorage.setItem(pageKey(), String(window.scrollY || window.pageYOffset || 0));
9584        }
9585
9586        function restoreScroll() {
9587
9588            var raw = sessionStorage.getItem(pageKey());
9589            if (!raw) return;
9590
9591            var targetY = parseInt(raw, 10);
9592            if (Number.isNaN(targetY) || targetY < 0) {
9593                sessionStorage.removeItem(pageKey());
9594                return;
9595            }
9596
9597            var attempts = 0;
9598            var maxAttempts = 18;
9599            var delay = 120;
9600
9601            function attemptRestore() {
9602                attempts += 1;
9603
9604                var doc = document.documentElement;
9605                var body = document.body;
9606                var pageHeader = document.querySelector('.page-header');
9607                var pageHeaderHeight = pageHeader
9608                    ? Math.ceil(pageHeader.getBoundingClientRect().height || pageHeader.offsetHeight || 0)
9609                    : 0;
9610                var scrollHeight = Math.max(doc ? doc.scrollHeight : 0, body ? body.scrollHeight : 0);
9611                var viewport = window.innerHeight || (doc ? doc.clientHeight : 0) || 0;
9612                var maxY = Math.max(0, scrollHeight - viewport);
9613                var destination = Math.min(Math.max(0, targetY - pageHeaderHeight), maxY);
9614
9615                window.scrollTo(0, destination);
9616
9617                if (Math.abs((window.scrollY || 0) - destination) <= 2 || attempts >= maxAttempts) {
9618                    sessionStorage.removeItem(pageKey());
9619                    return;
9620                }
9621
9622                window.setTimeout(attemptRestore, delay);
9623            }
9624
9625            window.requestAnimationFrame(attemptRestore);
9626        }
9627
9628        if ('scrollRestoration' in window.history) {
9629            window.history.scrollRestoration = 'manual';
9630        }
9631
9632        document.addEventListener('click', function (event) {
9633            var link = event.target && event.target.closest ? event.target.closest('a[href]') : null;
9634            if (!link) return;
9635
9636            if (
9637                link.target === '_blank' ||
9638                link.hasAttribute('download') ||
9639                (link.href && link.href.indexOf('javascript:') === 0)
9640            ) {
9641                return;
9642            }
9643
9644            saveScroll();
9645        }, true);
9646
9647        window.addEventListener('pagehide', saveScroll);
9648        window.addEventListener('beforeunload', saveScroll);
9649
9650        window.addEventListener('pageshow', function (event) {
9651            var navEntries = window.performance && window.performance.getEntriesByType
9652                ? window.performance.getEntriesByType('navigation')
9653                : [];
9654            var navType = navEntries.length ? navEntries[0].type : '';
9655            var fromBackForward = event.persisted || navType === 'back_forward';
9656
9657            if (fromBackForward) {
9658                restoreScroll();
9659            }
9660        });
9661    })();
9662</script>
9662
9663</div>
9663<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"f35fff9d6b744f91b99e5b1d19d33a5d","spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 9663
9663
9664<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:'a44ff47cbfbd1267',t:'MTc5MTA3MjUzNw=='};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>
9664</body>
9665</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.